diff --git a/src/main/java/org/gcube/portlets/user/workspace/client/ConstantsExplorer.java b/src/main/java/org/gcube/portlets/user/workspace/client/ConstantsExplorer.java index 15b4028..ef420ec 100644 --- a/src/main/java/org/gcube/portlets/user/workspace/client/ConstantsExplorer.java +++ b/src/main/java/org/gcube/portlets/user/workspace/client/ConstantsExplorer.java @@ -79,6 +79,7 @@ public class ConstantsExplorer { public static final String PASTEITEM = "Paste"; public static final String MESSAGE_REFRESH_FOLDER = "Refresh Folder"; public static final String MESSAGE_GET_INFO = "Get Info"; + public static final String FILE_VERSIONS = "Versions"; public static final String MESSAGE_PUBLIC_LINK = "Get Public Link"; public static final String MESSAGE_FOLDER_LINK = "Get Folder Link"; public static final String MESSAGE_FOLDER_LINK_REMOVE = "Remove Folder Link"; diff --git a/src/main/java/org/gcube/portlets/user/workspace/client/constant/WorkspaceOperation.java b/src/main/java/org/gcube/portlets/user/workspace/client/constant/WorkspaceOperation.java index ed17c81..2c33e1e 100644 --- a/src/main/java/org/gcube/portlets/user/workspace/client/constant/WorkspaceOperation.java +++ b/src/main/java/org/gcube/portlets/user/workspace/client/constant/WorkspaceOperation.java @@ -39,7 +39,8 @@ public enum WorkspaceOperation { VRE_CHANGE_PERIMISSIONS("CHP", "CHP"), EDIT_PERMISSIONS("EDP", "EDP"), //EDIT PERMISSIONS FOLDER_LINK("FRL", "FRL"), //FOLDER LINK - FOLDER_LINK_REMOVE("FPR","FPR"); //FOLDER LINK REMOVE + FOLDER_LINK_REMOVE("FPR","FPR"), + VERSIONING("VRN", "VRN"); //VERSIONING private String id; // ID CONTEXT MENU diff --git a/src/main/java/org/gcube/portlets/user/workspace/client/model/FileVersionModel.java b/src/main/java/org/gcube/portlets/user/workspace/client/model/FileVersionModel.java new file mode 100644 index 0000000..10b20b7 --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/workspace/client/model/FileVersionModel.java @@ -0,0 +1,85 @@ +package org.gcube.portlets.user.workspace.client.model; + +import java.io.Serializable; + +import com.google.gwt.user.client.rpc.IsSerializable; + + +/** + * The Class FileVersionModel. + * + * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it + * Feb 20, 2017 + */ +public class FileVersionModel extends FileModel implements IsSerializable, Serializable { + + /** + * + */ + private static final long serialVersionUID = -607019966965449963L; + public static final String PATH = "path"; + public static final String USER_VERSIONING = "user_versioning"; + + /** + * Instantiates a new file model. + */ + public FileVersionModel(){ + } + + /** + * Instantiates a new file model. + * + * @param identifier the identifier + * @param name the name + * @param path the path + * @param userFullName the user full name + */ + public FileVersionModel(String identifier, String name, String path, String userFullName) { + setIdentifier(identifier); + setName(name); + setPath(path); + setUser(userFullName); + } + + /** + * Sets the user. + * + * @param userVersioning the new user + */ + private void setUser(String userVersioning) { + set(USER_VERSIONING, userVersioning); + + } + + /** + * Sets the path. + * + * @param path the new path + */ + private void setPath(String path) { + + set(PATH, path); + + } + + + + /** + * Gets the path. + * + * @return the path + */ + public String getPath(){ + return get(PATH); + } + + + /** + * Gets the user. + * + * @return the user + */ + public String getUser(){ + return get(USER_VERSIONING); + } +} diff --git a/src/main/java/org/gcube/portlets/user/workspace/client/rpc/GWTWorkspaceService.java b/src/main/java/org/gcube/portlets/user/workspace/client/rpc/GWTWorkspaceService.java index 2d5325c..081fd10 100644 --- a/src/main/java/org/gcube/portlets/user/workspace/client/rpc/GWTWorkspaceService.java +++ b/src/main/java/org/gcube/portlets/user/workspace/client/rpc/GWTWorkspaceService.java @@ -10,6 +10,7 @@ import org.gcube.portlets.user.workspace.client.model.FileDetailsModel; import org.gcube.portlets.user.workspace.client.model.FileGridModel; import org.gcube.portlets.user.workspace.client.model.FileModel; import org.gcube.portlets.user.workspace.client.model.FileTrashedModel; +import org.gcube.portlets.user.workspace.client.model.FileVersionModel; import org.gcube.portlets.user.workspace.client.model.FolderModel; import org.gcube.portlets.user.workspace.client.model.InfoContactModel; import org.gcube.portlets.user.workspace.client.model.ScopeModel; @@ -744,7 +745,7 @@ public interface GWTWorkspaceService extends RemoteService{ * @return * @throws Exception */ - List getVersionHistory(String fileIdentifier) + List getVersionHistory(String fileIdentifier) throws Exception; /** * @param currentVersion @@ -753,7 +754,7 @@ public interface GWTWorkspaceService extends RemoteService{ * @return * @throws Exception */ - List performOperationOnVersionedFile( + List performOperationOnVersionedFile( FileModel currentVersion, FileModel selectedVersion, WorkspaceVersioningOperation operation) throws Exception; diff --git a/src/main/java/org/gcube/portlets/user/workspace/client/rpc/GWTWorkspaceServiceAsync.java b/src/main/java/org/gcube/portlets/user/workspace/client/rpc/GWTWorkspaceServiceAsync.java index 3080105..cb0a976 100644 --- a/src/main/java/org/gcube/portlets/user/workspace/client/rpc/GWTWorkspaceServiceAsync.java +++ b/src/main/java/org/gcube/portlets/user/workspace/client/rpc/GWTWorkspaceServiceAsync.java @@ -10,6 +10,7 @@ import org.gcube.portlets.user.workspace.client.model.FileDetailsModel; import org.gcube.portlets.user.workspace.client.model.FileGridModel; import org.gcube.portlets.user.workspace.client.model.FileModel; import org.gcube.portlets.user.workspace.client.model.FileTrashedModel; +import org.gcube.portlets.user.workspace.client.model.FileVersionModel; import org.gcube.portlets.user.workspace.client.model.FolderModel; import org.gcube.portlets.user.workspace.client.model.InfoContactModel; import org.gcube.portlets.user.workspace.client.model.ScopeModel; @@ -736,12 +737,28 @@ public interface GWTWorkspaceServiceAsync { */ void getServletContextPath(String protocol, AsyncCallback callback); - void getVersionHistory( - String fileIdentifier, AsyncCallback> callback); + /** + * Gets the version history. + * + * @param fileIdentifier the file identifier + * @param callback the callback + * @return the version history + */ + void getVersionHistory( + String fileIdentifier, AsyncCallback> callback); + + /** + * Perform operation on versioned file. + * + * @param currentVersion the current version + * @param selectedVersion the selected version + * @param operation the operation + * @param callback the callback + */ void performOperationOnVersionedFile( - FileModel currentVersion, FileModel olderVersion, + FileModel currentVersion, FileModel selectedVersion, WorkspaceVersioningOperation operation, - AsyncCallback> callback); + AsyncCallback> callback); } diff --git a/src/main/java/org/gcube/portlets/user/workspace/client/view/tree/ContextMenuTree.java b/src/main/java/org/gcube/portlets/user/workspace/client/view/tree/ContextMenuTree.java index 39cc56d..d7d7f67 100644 --- a/src/main/java/org/gcube/portlets/user/workspace/client/view/tree/ContextMenuTree.java +++ b/src/main/java/org/gcube/portlets/user/workspace/client/view/tree/ContextMenuTree.java @@ -32,11 +32,13 @@ import org.gcube.portlets.user.workspace.client.event.RenameItemEvent; import org.gcube.portlets.user.workspace.client.event.SendMessageEvent; import org.gcube.portlets.user.workspace.client.event.UnShareFolderEvent; import org.gcube.portlets.user.workspace.client.event.VRESettingPermissionEvent; +import org.gcube.portlets.user.workspace.client.event.VersioningHistoryShowEvent; import org.gcube.portlets.user.workspace.client.event.WebDavUrlEvent; import org.gcube.portlets.user.workspace.client.model.FileModel; import org.gcube.portlets.user.workspace.client.resources.Resources; import org.gcube.portlets.user.workspace.client.util.FileModelUtils; import org.gcube.portlets.user.workspace.client.view.tree.CutCopyAndPaste.OperationType; +import org.gcube.portlets.user.workspace.shared.WorkspaceVersioningOperation; import com.extjs.gxt.ui.client.event.MenuEvent; import com.extjs.gxt.ui.client.event.SelectionListener; @@ -89,16 +91,10 @@ public class ContextMenuTree { previewImage.addSelectionListener(new SelectionListener() { public void componentSelected(MenuEvent ce) { - - // FileModel selected = treePanel.getSelectionModel().getSelectedItem(); - FileModel selected = listSelectedItems.get(0); - if(selected!=null){ eventBus.fireEvent(new ImagePreviewEvent(selected, ce.getClientX(), ce.getClientY())); } - - //clearListSelectedItems(); } }); @@ -185,6 +181,23 @@ public class ContextMenuTree { contextMenu.add(mnGetInfo); + MenuItem mnFileVersioning = new MenuItem(); + mnFileVersioning.setId(WorkspaceOperation.VERSIONING.getId()); + mnFileVersioning.setText(ConstantsExplorer.FILE_VERSIONS); + mnFileVersioning.setIcon(Resources.getIconVersioning()); + + mnFileVersioning.addSelectionListener(new SelectionListener() { + public void componentSelected(MenuEvent ce) { + + for (FileModel sel : listSelectedItems) { + eventBus.fireEvent(new VersioningHistoryShowEvent(WorkspaceVersioningOperation.SHOW, sel)); + } + } + }); + + contextMenu.add(mnFileVersioning); + + //SHARE LINK MenuItem mnGetLink = new MenuItem(); mnGetLink.setId(WorkspaceOperation.SHARE_LINK.getId()); @@ -603,10 +616,8 @@ public class ContextMenuTree { } }); - contextMenu.add(upload); - MenuItem uploadArchive = new MenuItem(); uploadArchive.setId(WorkspaceOperation.UPLOAD_ARCHIVE.getId()); uploadArchive.setText(ConstantsExplorer.MESSAGE_UPLOAD_ARCHIVE); @@ -664,10 +675,8 @@ public class ContextMenuTree { }); contextMenu.add(changePermission); - contextMenu.add(new SeparatorMenuItem()); - MenuItem addAdministrator = new MenuItem(); // addAdministrator.setId(WorkspaceOperation.ADD_ADMINISTRATOR.getId()); addAdministrator.setText("Manage Administrator/s"); @@ -783,11 +792,6 @@ public class ContextMenuTree { contextMenu.getItemByItemId(WorkspaceOperation.UPLOAD_ARCHIVE.getId()).setVisible(false); //set invisible upload archive contextMenu.getItemByItemId(WorkspaceOperation.ADD_URL.getId()).setVisible(false); //set invisible add url contextMenu.getItemByItemId(WorkspaceOperation.REFRESH_FOLDER.getId()).setVisible(false); //set invisible refresh - // contextMenu.getItemByItemId(WorkspaceOperation.SHARE.getId()).setVisible(false); //set invisible share - // contextMenu.getItemByItemId(WorkspaceOperation.UNSHARE.getId()).setVisible(false); //set invisible unshare - - - contextMenu.showAt(posX, posY); } @@ -839,8 +843,9 @@ public class ContextMenuTree { contextMenu.getItemByItemId(WorkspaceOperation.VRE_CHANGE_PERIMISSIONS.getId()).setVisible(false); //VRE CHANGE PERMISSIONS - if(selectedItem.isShared()){ //SHARE LINK ON SHARED ITEM + contextMenu.getItemByItemId(WorkspaceOperation.VERSIONING.getId()).setVisible(false); + if(selectedItem.isShared()){ //SHARE LINK ON SHARED ITEM contextMenu.getItemByItemId(WorkspaceOperation.SHARE_LINK.getId()).setVisible(true); } @@ -921,12 +926,15 @@ public class ContextMenuTree { case EXTERNAL_IMAGE: contextMenu.getItemByItemId(WorkspaceOperation.PREVIEW.getId()).setVisible(true); contextMenu.getItemByItemId(WorkspaceOperation.PUBLIC_LINK.getId()).setVisible(true); //public link + contextMenu.getItemByItemId(WorkspaceOperation.VERSIONING.getId()).setVisible(true); break; case EXTERNAL_FILE: contextMenu.getItemByItemId(WorkspaceOperation.PUBLIC_LINK.getId()).setVisible(true); //public link + contextMenu.getItemByItemId(WorkspaceOperation.VERSIONING.getId()).setVisible(true); break; case EXTERNAL_PDF_FILE: contextMenu.getItemByItemId(WorkspaceOperation.PUBLIC_LINK.getId()).setVisible(true); //public link + contextMenu.getItemByItemId(WorkspaceOperation.VERSIONING.getId()).setVisible(true); break; case EXTERNAL_URL: contextMenu.getItemByItemId(WorkspaceOperation.LINK.getId()).setVisible(true); diff --git a/src/main/java/org/gcube/portlets/user/workspace/server/GWTWorkspaceBuilder.java b/src/main/java/org/gcube/portlets/user/workspace/server/GWTWorkspaceBuilder.java index 708d5f8..74feb79 100644 --- a/src/main/java/org/gcube/portlets/user/workspace/server/GWTWorkspaceBuilder.java +++ b/src/main/java/org/gcube/portlets/user/workspace/server/GWTWorkspaceBuilder.java @@ -20,6 +20,7 @@ import org.gcube.common.homelibary.model.items.gcube.DocumentMetadata; import org.gcube.common.homelibary.model.items.gcube.DocumentPartLink; import org.gcube.common.homelibary.model.items.type.NodeProperty; import org.gcube.common.homelibary.model.items.type.WorkspaceItemType; +import org.gcube.common.homelibary.model.versioning.WorkspaceVersion; import org.gcube.common.homelibrary.home.User; import org.gcube.common.homelibrary.home.exceptions.InternalErrorException; import org.gcube.common.homelibrary.home.workspace.Properties; @@ -61,6 +62,7 @@ import org.gcube.portlets.user.workspace.client.model.FileDetailsModel; import org.gcube.portlets.user.workspace.client.model.FileGridModel; import org.gcube.portlets.user.workspace.client.model.FileModel; import org.gcube.portlets.user.workspace.client.model.FileTrashedModel; +import org.gcube.portlets.user.workspace.client.model.FileVersionModel; import org.gcube.portlets.user.workspace.client.model.FolderGridModel; import org.gcube.portlets.user.workspace.client.model.FolderModel; import org.gcube.portlets.user.workspace.client.model.InfoContactModel; @@ -2233,16 +2235,18 @@ public class GWTWorkspaceBuilder { * @param versions the versions * @return the list */ - public List toVersionHistory(List versions){ + public List toVersionHistory(List versions){ if(versions==null){ - logger.error("Version history is null!!!"); - return new ArrayList(); + logger.warn("Version history is null!!!"); + return new ArrayList(); } - List listVersions = new ArrayList(versions.size()); - for (String id : versions) { - listVersions.add(new FileModel(id, id, false)); + List listVersions = new ArrayList(versions.size()); + for (WorkspaceVersion wsVersion : versions) { + String user = UserUtil.getUserFullName(wsVersion.getUser()); + FileVersionModel file = new FileVersionModel(wsVersion.getName(), wsVersion.getName(), wsVersion.getRemotePath(), user); + listVersions.add(file); } return listVersions; } diff --git a/src/main/java/org/gcube/portlets/user/workspace/server/GWTWorkspaceServiceImpl.java b/src/main/java/org/gcube/portlets/user/workspace/server/GWTWorkspaceServiceImpl.java index b181264..2f7ad55 100644 --- a/src/main/java/org/gcube/portlets/user/workspace/server/GWTWorkspaceServiceImpl.java +++ b/src/main/java/org/gcube/portlets/user/workspace/server/GWTWorkspaceServiceImpl.java @@ -18,6 +18,7 @@ import org.apache.log4j.Logger; import org.gcube.common.encryption.StringEncrypter; import org.gcube.common.homelibary.model.items.type.FolderItemType; import org.gcube.common.homelibary.model.items.type.WorkspaceItemType; +import org.gcube.common.homelibary.model.versioning.WorkspaceVersion; import org.gcube.common.homelibrary.home.Home; import org.gcube.common.homelibrary.home.HomeLibrary; import org.gcube.common.homelibrary.home.exceptions.HomeNotFoundException; @@ -49,6 +50,7 @@ import org.gcube.portlets.user.workspace.client.model.FileDetailsModel; import org.gcube.portlets.user.workspace.client.model.FileGridModel; import org.gcube.portlets.user.workspace.client.model.FileModel; import org.gcube.portlets.user.workspace.client.model.FileTrashedModel; +import org.gcube.portlets.user.workspace.client.model.FileVersionModel; import org.gcube.portlets.user.workspace.client.model.FolderModel; import org.gcube.portlets.user.workspace.client.model.InfoContactModel; import org.gcube.portlets.user.workspace.client.model.ScopeModel; @@ -3340,7 +3342,7 @@ public class GWTWorkspaceServiceImpl extends RemoteServiceServlet implements GWT * @throws Exception the exception */ @Override - public List getVersionHistory(String fileIdentifier) throws Exception{ + public List getVersionHistory(String fileIdentifier) throws Exception{ workspaceLogger.info("Get Version History "+fileIdentifier); @@ -3354,7 +3356,7 @@ public class GWTWorkspaceServiceImpl extends RemoteServiceServlet implements GWT if(fileHL instanceof ExternalFile){ ExternalFile extFile = (ExternalFile) fileHL; - List versions = extFile.getVersionHistory(); + List versions = extFile.getVersionHistory(); GWTWorkspaceBuilder builder = getGWTWorkspaceBuilder(); return builder.toVersionHistory(versions); }else @@ -3376,7 +3378,7 @@ public class GWTWorkspaceServiceImpl extends RemoteServiceServlet implements GWT * @see org.gcube.portlets.user.workspace.client.rpc.GWTWorkspaceService#performOperationOnVersionedFile(org.gcube.portlets.user.workspace.client.model.FileModel, org.gcube.portlets.user.workspace.client.model.FileModel, org.gcube.portlets.user.workspace.shared.WorkspaceVersioningOperation) */ @Override - public List performOperationOnVersionedFile(FileModel currentVersion, FileModel olderVerison, WorkspaceVersioningOperation operation) throws Exception{ + public List performOperationOnVersionedFile(FileModel currentVersion, FileModel olderVerison, WorkspaceVersioningOperation operation) throws Exception{ if(currentVersion == null || olderVerison==null) throw new Exception("File Versioned is null");