diff --git a/src/main/java/org/gcube/portlets/user/workspace/client/AppControllerExplorer.java b/src/main/java/org/gcube/portlets/user/workspace/client/AppControllerExplorer.java index 4b259e5..6828fd5 100644 --- a/src/main/java/org/gcube/portlets/user/workspace/client/AppControllerExplorer.java +++ b/src/main/java/org/gcube/portlets/user/workspace/client/AppControllerExplorer.java @@ -151,6 +151,8 @@ import org.gcube.portlets.widgets.workspacesharingwidget.client.view.sharing.mul import org.gcube.portlets.widgets.workspaceuploader.client.WorkspaceUploadNotification.WorskpaceUploadNotificationListener; import org.gcube.portlets.widgets.workspaceuploader.client.uploader.DialogUpload.UPLOAD_TYPE; import org.gcube.portlets.widgets.workspaceuploader.client.uploader.MultipleDilaogUpload; +import org.gcube.portlets.widgtes.wsthreddssync.client.WsThreddsWidget; +import org.gcube.portlets.widgtes.wsthreddssync.shared.WsFolder; import com.extjs.gxt.ui.client.Registry; import com.extjs.gxt.ui.client.event.BaseEvent; @@ -278,7 +280,16 @@ public class AppControllerExplorer implements EventHandler, TreeAppControllerInt final FileModel folder = publishEvent.getFolderToPublish(); if(folder!=null){ - + + WsThreddsWidget myWidget = new WsThreddsWidget(); + + + WsFolder wsFolder = new WsFolder(folder.getIdentifier(), folder.getName()); + try { + myWidget.showSyncFolderInfo(wsFolder); + } catch (Exception e) { + Window.alert(e.getMessage()); + } } } diff --git a/src/main/java/org/gcube/portlets/user/workspace/client/model/FileModel.java b/src/main/java/org/gcube/portlets/user/workspace/client/model/FileModel.java index 1529050..e4dbeb2 100644 --- a/src/main/java/org/gcube/portlets/user/workspace/client/model/FileModel.java +++ b/src/main/java/org/gcube/portlets/user/workspace/client/model/FileModel.java @@ -54,7 +54,7 @@ public class FileModel extends BaseModelData implements Serializable { //Thredds Synch status private Sync_Status synchedThreddsStatus; - + /** * Instantiates a new file model. */ @@ -189,9 +189,9 @@ public class FileModel extends BaseModelData implements Serializable { Image icon = (Image) get(ICON); AbstractImagePrototype iconAbs; - if(icon==null) + if(icon==null){ iconAbs = getAbstractPrototypeIcon(); - else + }else return; set(ICON, iconAbs.createImage()); @@ -293,6 +293,8 @@ public class FileModel extends BaseModelData implements Serializable { */ public AbstractImagePrototype getAbstractPrototypeIcon() { + //GWT.log("My prop: "+this.toString()); + AbstractImagePrototype absImgPr = Resources.getIconTable(); if (!this.isDirectory()) { //IS FILE @@ -344,8 +346,8 @@ public class FileModel extends BaseModelData implements Serializable { absImgPr = Resources.getIconSynched(); break; } - } - absImgPr = Resources.getIconFolder(); + }else + absImgPr = Resources.getIconFolder(); } } } @@ -569,11 +571,11 @@ public class FileModel extends BaseModelData implements Serializable { public boolean isPublic(){ return isPublic; } - + public void setSyncThreddsStatus(Sync_Status status) { this.synchedThreddsStatus = status; } - + public Sync_Status getSynchedThreddsStatus() { return synchedThreddsStatus; } @@ -613,5 +615,5 @@ public class FileModel extends BaseModelData implements Serializable { return builder.toString(); } - + } diff --git a/src/main/java/org/gcube/portlets/user/workspace/client/view/tree/AsyncTreePanel.java b/src/main/java/org/gcube/portlets/user/workspace/client/view/tree/AsyncTreePanel.java index 4dc4057..e14378a 100644 --- a/src/main/java/org/gcube/portlets/user/workspace/client/view/tree/AsyncTreePanel.java +++ b/src/main/java/org/gcube/portlets/user/workspace/client/view/tree/AsyncTreePanel.java @@ -216,8 +216,19 @@ public class AsyncTreePanel extends LayoutContainer { if(model.isDirectory()){ if(model.isPublic()) //IS PLUBIC return Resources.getIconFolderPublic(); - else + else{ + if(model.getSynchedThreddsStatus()!=null) { + switch(model.getSynchedThreddsStatus()) { + case OUTDATED_REMOTE: + return Resources.getIconSyncTo(); + case OUTDATED_WS: + return Resources.getIconSyncFrom(); + case UP_TO_DATE: + return Resources.getIconSynched(); + } + } return Resources.getIconFolder(); + } } return null; //Set default folder icon diff --git a/src/main/java/org/gcube/portlets/user/workspace/client/view/windows/DialogGetInfo.java b/src/main/java/org/gcube/portlets/user/workspace/client/view/windows/DialogGetInfo.java index c942f77..8d650a6 100644 --- a/src/main/java/org/gcube/portlets/user/workspace/client/view/windows/DialogGetInfo.java +++ b/src/main/java/org/gcube/portlets/user/workspace/client/view/windows/DialogGetInfo.java @@ -53,6 +53,7 @@ public class DialogGetInfo extends Dialog { private TextField txtSize = new TextField(); private TextField txtLocation = new TextField(); private TextField txtIsPublic = new TextField(); + private TextField txtThreddsSynched = new TextField(); private TextField txtShared = new TextField(); // private TextArea textAreaSharedWith = new TextArea(); private Html htmlUsersWidget = new Html(); @@ -103,8 +104,19 @@ public class DialogGetInfo extends Dialog { txtIsPublic.setReadOnly(true); txtIsPublic.setValue(fileModel.isPublic()+""); add(txtIsPublic); + + if(fileModel.getSynchedThreddsStatus()!=null){ + txtThreddsSynched = new TextField(); + txtThreddsSynched.setFieldLabel("Thredds Sync"); + txtThreddsSynched.setReadOnly(true); + txtThreddsSynched.setValue(fileModel.getSynchedThreddsStatus()+""); + add(txtThreddsSynched); + + } + } + txtAreaDescription.setFieldLabel("Description"); txtAreaDescription.setHeight(30); txtAreaDescription.setReadOnly(true); diff --git a/src/test/java/org/gcube/portlets/user/workspace/ItemCreate.java b/src/test/java/org/gcube/portlets/user/workspace/ItemCreate.java new file mode 100644 index 0000000..3533368 --- /dev/null +++ b/src/test/java/org/gcube/portlets/user/workspace/ItemCreate.java @@ -0,0 +1,242 @@ +/** + * + */ +package org.gcube.portlets.user.workspace; + +import java.util.List; +import java.util.concurrent.TimeUnit; + +import org.apache.log4j.Logger; +import org.gcube.common.homelibrary.home.HomeLibrary; +import org.gcube.common.homelibrary.home.exceptions.HomeNotFoundException; +import org.gcube.common.homelibrary.home.exceptions.InternalErrorException; +import org.gcube.common.homelibrary.home.exceptions.UserNotFoundException; +import org.gcube.common.homelibrary.home.workspace.Workspace; +import org.gcube.common.homelibrary.home.workspace.WorkspaceFolder; +import org.gcube.common.homelibrary.home.workspace.WorkspaceItem; +import org.gcube.common.homelibrary.home.workspace.WorkspaceSharedFolder; +import org.gcube.common.homelibrary.home.workspace.exceptions.ItemNotFoundException; +import org.gcube.common.homelibrary.home.workspace.exceptions.WorkspaceFolderNotFoundException; +import org.gcube.common.homelibrary.home.workspace.folder.FolderItem; +import org.gcube.common.scope.api.ScopeProvider; +import org.gcube.common.scope.impl.ScopeBean; + +/** + * + * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it + * @Jan 29, 2014 + * + */ +public class ItemCreate { + + +// public static String DEFAULT_SCOPE = "/d4science.research-infrastructures.eu/gCubeApps"; //PRODUCTION + public static String DEFAULT_SCOPE = "/gcube/devsec"; //DEV + public static String TEST_USER = "costantino.perciante"; +// public static String ITEMID = "63832213-098d-42d1-8774-89b6349764c0"; //Activity T3.4 working drafts/T2-EC-IMAR-HO-14-015 iMarine Sustainability WP - Business Model tools.pdf + public static String ITEMID = "ce4866ee-8079-4acf-bcd6-1c9dd786eb73"; +// d81d3a64-603f-4907-ae74-be8353211807 + protected static Logger logger = Logger.getLogger(ItemCreate.class); + + + + + public static void main(String[] args) { + + ScopeBean scope = new ScopeBean(DEFAULT_SCOPE); + ScopeProvider.instance.set(scope.toString()); + + System.out.println("init HL"); + try { + Workspace ws = getWorkspace(); + + String rootId = ws.getRoot().getId(); + System.out.println("Root ID: "+rootId); + + //[]/\ + + //CREATO ^<>?*%$:*$ +// //String folderNameSpecialChars = "[^.]<>|?*%$:*$\\/"; + String folderNameSpecialChars = "‘"; + + + WorkspaceFolder folder = null; + String folderName = null; + for (int i = 1; i < folderNameSpecialChars.length(); i++) { + folderName = folderNameSpecialChars.substring(0,i); + try{ + folder = ws.createFolder(folderName, "", rootId); + System.out.println("Created folder: "+folder.getName() +" with id: "+folder.getId()); + }catch(Exception e){ + System.err.println("Folder with name: "+folderName +" not created"); + e.printStackTrace(); + return; + } + + try{ + if (folder!=null){ + ws.renameItem(folder.getId(), folder.getName()+"_renamed"); + System.out.println("Renamed folder: "+folder.getName() +" with id: "+folder.getId()); + } + }catch (Exception e) { + System.err.println("Folder with name: "+folderName +" not renamed"); + e.printStackTrace(); + } + + try{ + if (folder!=null){ + ws.removeItem(folder.getId()); + System.out.println("Removed folder: "+folder.getName() +" with id: "+folder.getId()); + try{ + ws.getItem(folder.getId()); + }catch(ItemNotFoundException e){ + System.out.println("Folder Id folder: "+folder.getId() +" removed correctly"); + } + + } + }catch (Exception e) { + System.err.println("Folder with name: "+folderName +" not removed"); + e.printStackTrace(); + return; + } + + } + + retrieveFirstLevel(ws, null); +// +// retrieveFirstLevel(ws, ITEMID); +// +// System.out.println("get workspace -> OK"); + //WorkspaceItem item = ws.getItem(ITEMID); + //System.out.println("get item id: "+item.getId()+", name: "+item.getName() +", parent: "+item.getParent().getId() +", parent name: "+item.getParent().getName()+", path :"+item.getPath()); + //System.out.println(item); + }catch(Exception e){ + e.printStackTrace(); + } + +// } catch (WorkspaceFolderNotFoundException e) { +// // TODO Auto-generated catch block +// e.printStackTrace(); +// } catch (InternalErrorException e) { +// // TODO Auto-generated catch block +// e.printStackTrace(); +// } catch (HomeNotFoundException e) { +// // TODO Auto-generated catch block +// e.printStackTrace(); +// } catch (UserNotFoundException e) { +// // TODO Auto-generated catch block +// e.printStackTrace(); +// } +// + } + + public static Workspace getWorkspace() throws InternalErrorException, HomeNotFoundException, WorkspaceFolderNotFoundException, UserNotFoundException + { + + logger.trace("Get Workspace scope: "+DEFAULT_SCOPE + " username: "+TEST_USER); + ScopeProvider.instance.set(DEFAULT_SCOPE); + logger.trace("Scope provider instancied"); + +// return HomeLibrary.getUserWorkspace(TEST_USER); + return HomeLibrary.getHomeManagerFactory().getHomeManager().getHome(TEST_USER).getWorkspace(); + } + + + private static void retrieveFirstLevel(Workspace ws, String foundFolder){ + + try { + + //TEST TIME + Long startTime = System.currentTimeMillis(); + Long endTime = System.currentTimeMillis() - startTime; + String time = String.format("%d msc %d sec", endTime, TimeUnit.MILLISECONDS.toSeconds(endTime)); + + startTime = System.currentTimeMillis(); + System.out.println("Start foundFolder at time: "+startTime); +// WorkspaceItem root = ws.getItem(ITEMID); + WorkspaceItem fd; + if(foundFolder!=null){ + fd = ws.getItem(foundFolder); + System.out.println("foundFolder id: "+foundFolder); + System.out.println("start get children"); + }else + fd = ws.getRoot(); + + List children = fd.getChildren(); + System.out.println("tree getChildren() returning "+children.size()+" elements in " + time); + + System.out.println("children size: "+children.size()); + + int i=0; + int foldersCounter = 0; + int sharedFoldersCounter = 0; + int folderItemCounter = 0; + int othersCounter = 0; + for (WorkspaceItem workspaceItem : children) { + try{ + + /*if(foundFolder!=null && !foundFolder.isEmpty()){ + if(workspaceItem.getId().compareTo(foundFolder)==0){ + System.out.println("ITEM FOUND id: "+workspaceItem.getId()+", name: "+workspaceItem.getName()); + return; + } + }*/ + + switch (workspaceItem.getType()) { + + case FOLDER: + + WorkspaceFolder folder = (WorkspaceFolder) workspaceItem; + +// System.out.println(++i+") "+folder.getId() +" folder name: "+folder.getName() + " owner "+folder.getOwner() +" path: "+folder.getPath()); + System.out.println(++i+") "+folder.getId() +" folder name: "+folder.getName() + " owner "+folder.getOwner()); + foldersCounter++; + + break; + + case SHARED_FOLDER: + + WorkspaceSharedFolder shared = (WorkspaceSharedFolder) workspaceItem; + +// System.out.println(++i+") "+shared.getId() +" shared folder name: "+shared.getName() + " owner "+shared.getOwner()+" isVRE "+shared.isVreFolder() +" ACLOwner: "+shared.getACLOwner()+" AclUser: "+shared.getACLUser() +" path: "+shared.getPath()); + System.out.println(++i+") "+shared.getId() +" shared folder name: "+shared.getName()); + + // System.out.println(++i+") shared folder name: "+shared.getName() + " owner "+shared.getOwner().getPortalLogin()); + sharedFoldersCounter++; + + break; + + case FOLDER_ITEM: + + FolderItem folderItem = (FolderItem) workspaceItem; + +// System.out.println(++i+") folderItem id: "+folderItem.getId() +", name: "+folderItem.getName() + ", own: "+folderItem.getOwner() +" path: "+folderItem.getPath()); + System.out.println(++i+") folderItem id: "+folderItem.getId() +", name: "+folderItem.getName() + ", own: "+folderItem.getOwner()); + folderItemCounter++; + + break; + default: + // System.out.println(++i+") DEFAULT - item id: "+workspaceItem.getId() +", name: "+workspaceItem.getName() + ", own: "+workspaceItem.getOwner()); + // othersCounter++; + break; + } + }catch (Exception e) { + // TODO: handle exception + } + + } + + //TEST TIME + endTime = System.currentTimeMillis(); + long difference = endTime - startTime; + time = String.format("%d msc %d sec", difference, TimeUnit.MILLISECONDS.toSeconds(difference)); + System.out.println("End time is "+endTime+ " difference is "+time); + System.out.println("Folders are: "+foldersCounter); + System.out.println("Shared Folders are: "+sharedFoldersCounter); + System.out.println("Folder Item are: "+folderItemCounter); + System.out.println("Others are: "+othersCounter); + } catch (Exception e) { + e.printStackTrace(); + } + } +}