From 65c6329f7b8f9e8090b7213d45cf763cfb826018 Mon Sep 17 00:00:00 2001 From: Giancarlo Panichi Date: Fri, 22 Jan 2016 12:07:41 +0000 Subject: [PATCH] 1832: Accounting Manager - On Storage Accounting filters values must not have the popup validation Task-Url: https://support.d4science.org/issues/1832 Fixed Main Code delete git-svn-id: https://svn.d4science.research-infrastructures.eu/gcube/trunk/portlets/user/statistical-algorithms-importer@122449 82a268e6-3cf1-43bd-a215-b396298e98cf --- pom.xml | 7 ++ .../client/maindata/MainDataPanel.java | 1 + .../client/project/ProjectManager.java | 65 ++++++++++++++++--- .../client/rpc/StatAlgoImporterService.java | 2 +- .../rpc/StatAlgoImporterServiceAsync.java | 2 +- .../tools/explorer/ExplorerProjectPanel.java | 1 + .../tools/input/InputVariablePanel.java | 56 +++++++++------- .../client/type/ProjectStatusEventType.java | 1 + .../server/StatAlgoImporterServiceImpl.java | 63 ++++++++++++------ .../server/storage/FilesStorage.java | 61 +++++++++++++++++ .../server/storage/MainCodeSave.java | 18 ++++- .../server/storage/ProjectArchiver.java | 37 +++++++++++ .../shared/workspace/ItemDescription.java | 32 ++++++--- 13 files changed, 279 insertions(+), 67 deletions(-) diff --git a/pom.xml b/pom.xml index acaf7fb..ba5d197 100644 --- a/pom.xml +++ b/pom.xml @@ -98,6 +98,13 @@ runtime + + com.thoughtworks.xstream + xstream + runtime + + + diff --git a/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/client/maindata/MainDataPanel.java b/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/client/maindata/MainDataPanel.java index 06fdec4..fd403a5 100644 --- a/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/client/maindata/MainDataPanel.java +++ b/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/client/maindata/MainDataPanel.java @@ -62,6 +62,7 @@ public class MainDataPanel extends SimpleContainer { break; case DELETE_RESOURCE: break; + case DELETE_MAIN_CODE: case MAIN_CODE_SET: codeEditPanel.codeUpdate(event.getProject()); break; diff --git a/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/client/project/ProjectManager.java b/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/client/project/ProjectManager.java index e19681b..b61700b 100644 --- a/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/client/project/ProjectManager.java +++ b/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/client/project/ProjectManager.java @@ -450,9 +450,45 @@ public class ProjectManager { }); } - public void deleteItem(ItemDescription itemDescription) { + public void deleteItem(final ItemDescription itemDescription) { + if (project != null + && project.getMainCode() != null + && project.getMainCode().getItemDescription() != null + && itemDescription.getId().compareTo( + project.getMainCode().getItemDescription().getId()) == 0) { + final ConfirmMessageBox mb = new ConfirmMessageBox("Attention", + "All previous configurations will be lost. Would you like to delete main code?"); + mb.addDialogHideHandler(new DialogHideHandler() { + + @Override + public void onDialogHide(DialogHideEvent event) { + switch (event.getHideButton()) { + case NO: + break; + case YES: + deleteItemOnServer(itemDescription,true); + break; + default: + break; + } + + } + }); + mb.setWidth(300); + mb.show(); + + + + } else { + deleteItemOnServer(itemDescription, false); + } + + } + + private void deleteItemOnServer(ItemDescription itemDescription, final boolean mainCode){ + StatAlgoImporterServiceAsync.INSTANCE.deleteResourceOnProject( - itemDescription, new AsyncCallback() { + itemDescription, new AsyncCallback() { @Override public void onFailure(Throwable caught) { @@ -470,8 +506,13 @@ public class ProjectManager { } @Override - public void onSuccess(Void result) { - fireProjectStatusDeleteEvent(); + public void onSuccess(Project result) { + project=result; + if(mainCode){ + fireProjectStatusDeleteMainCodeEvent(); + } else { + fireProjectStatusDeleteEvent(); + } } }); @@ -509,6 +550,13 @@ public class ProjectManager { eventBus.fireEvent(projectStatusEvent); Log.debug("ProjectStatusEvent fired! " + projectStatusEvent); } + + protected void fireProjectStatusDeleteMainCodeEvent() { + ProjectStatusEvent projectStatusEvent = new ProjectStatusEvent( + ProjectStatusEventType.DELETE_MAIN_CODE, project); + eventBus.fireEvent(projectStatusEvent); + Log.debug("ProjectStatusEvent fired! " + projectStatusEvent); + } protected void fireProjectStatusUpdateEvent() { ProjectStatusEvent projectStatusEvent = new ProjectStatusEvent( @@ -590,10 +638,8 @@ public class ProjectManager { mb.show(); } else { - Log.error("Project not open: "+project); - UtilsGXT3 - .alert("Error", - "Project not open!"); + Log.error("Project not open: " + project); + UtilsGXT3.alert("Error", "Project not open!"); } } @@ -617,7 +663,8 @@ public class ProjectManager { public void onSuccess(Void result) { monitor.hide(); - UtilsGXT3.info("Publish", "The software has been published!"); + UtilsGXT3.info("Publish", + "The software has been published!"); } diff --git a/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/client/rpc/StatAlgoImporterService.java b/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/client/rpc/StatAlgoImporterService.java index c8c95a9..981e2a0 100644 --- a/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/client/rpc/StatAlgoImporterService.java +++ b/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/client/rpc/StatAlgoImporterService.java @@ -53,7 +53,7 @@ public interface StatAlgoImporterService extends RemoteService { public void addResourceToProject(ItemDescription itemDescription) throws StatAlgoImporterServiceException; - public void deleteResourceOnProject(ItemDescription itemDescription) + public Project deleteResourceOnProject(ItemDescription itemDescription) throws StatAlgoImporterServiceException; public void saveProject(InputData inputData) diff --git a/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/client/rpc/StatAlgoImporterServiceAsync.java b/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/client/rpc/StatAlgoImporterServiceAsync.java index a6c2cdf..fa9da32 100644 --- a/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/client/rpc/StatAlgoImporterServiceAsync.java +++ b/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/client/rpc/StatAlgoImporterServiceAsync.java @@ -48,7 +48,7 @@ public interface StatAlgoImporterServiceAsync { AsyncCallback asyncCallback); void deleteResourceOnProject(ItemDescription itemDescription, - AsyncCallback asyncCallback); + AsyncCallback asyncCallback); void openProjectOnWorkspace(ItemDescription newProjectFolder, AsyncCallback asyncCallback); diff --git a/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/client/tools/explorer/ExplorerProjectPanel.java b/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/client/tools/explorer/ExplorerProjectPanel.java index 3cdd581..b8237c1 100644 --- a/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/client/tools/explorer/ExplorerProjectPanel.java +++ b/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/client/tools/explorer/ExplorerProjectPanel.java @@ -115,6 +115,7 @@ public class ExplorerProjectPanel extends ContentPanel { case UPDATE: case ADD_RESOURCE: case DELETE_RESOURCE: + case DELETE_MAIN_CODE: create(event); break; case SAVE: diff --git a/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/client/tools/input/InputVariablePanel.java b/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/client/tools/input/InputVariablePanel.java index 7ca3f46..cd6e16f 100644 --- a/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/client/tools/input/InputVariablePanel.java +++ b/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/client/tools/input/InputVariablePanel.java @@ -21,7 +21,8 @@ public class InputVariablePanel extends ContentPanel { private EventBus eventBus; private InputVariableTabPanel inputVariableTabPanel; - //private InputVariablePanelState state; + + // private InputVariablePanelState state; public InputVariablePanel(EventBus eventBus) { super(); @@ -66,7 +67,7 @@ public class InputVariablePanel extends ContentPanel { } }); - + eventBus.addHandler(InputRequestEvent.TYPE, new InputRequestEvent.InputRequestEventHandler() { @@ -77,41 +78,40 @@ public class InputVariablePanel extends ContentPanel { } }); - - eventBus.addHandler( - NewSelectedRowsVariableEvent.TYPE, - new NewSelectedRowsVariableEvent.NewSelectedRowsVariableEventHandler() { - @Override - public void onNewVariable(NewSelectedRowsVariableEvent event) { - addNewSelectedRowsVariable(event - .getSelectedRowsVariable()); + eventBus.addHandler( + NewSelectedRowsVariableEvent.TYPE, + new NewSelectedRowsVariableEvent.NewSelectedRowsVariableEventHandler() { - } + @Override + public void onNewVariable(NewSelectedRowsVariableEvent event) { + addNewSelectedRowsVariable(event + .getSelectedRowsVariable()); - }); - + } - + }); } protected void addNewSelectedRowsVariable( InputOutputVariables selectedRowsVariable) { inputVariableTabPanel.addSelectedRowsVariable(selectedRowsVariable); - + } protected void manageInputRequestEvents(InputRequestEvent event) { inputVariableTabPanel.requestInput(); } - - protected void manageProjectStatusEvents(ProjectStatusEvent event) { Log.debug("InputVariablePanel recieved event ProjectStatus: " + event.toString()); switch (event.getProjectStatusEventType()) { + case SAVE: + break; + case SOFTWARE_CREATED: + break; case START: break; case OPEN: @@ -122,12 +122,18 @@ public class InputVariablePanel extends ContentPanel { break; case ADD_RESOURCE: break; + case DELETE_RESOURCE: + break; + case DELETE_MAIN_CODE: + setMainCode(event.getProject()); + break; case MAIN_CODE_SET: setMainCode(event.getProject()); break; default: break; } + } private void create(Project project) { @@ -145,21 +151,21 @@ public class InputVariablePanel extends ContentPanel { private void startPanel(Project project) { enable(); expand(); - //state = InputVariablePanelState.OPENED; + // state = InputVariablePanelState.OPENED; inputVariableTabPanel.startTabs(project); } private void updatePanel(Project project) { - inputVariableTabPanel.updateTabs(project); - Log.debug("ToolBoxPanel Updated"); - + inputVariableTabPanel.updateTabs(project); + Log.debug("ToolBoxPanel Updated"); + } - + private void setMainCode(Project project) { - inputVariableTabPanel.setMainCode(project); - Log.debug("ToolBoxPanel Updated"); - + inputVariableTabPanel.setMainCode(project); + Log.debug("ToolBoxPanel Updated"); + } } diff --git a/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/client/type/ProjectStatusEventType.java b/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/client/type/ProjectStatusEventType.java index 57eba1b..b6e3d06 100644 --- a/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/client/type/ProjectStatusEventType.java +++ b/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/client/type/ProjectStatusEventType.java @@ -13,6 +13,7 @@ public enum ProjectStatusEventType { UPDATE, ADD_RESOURCE, DELETE_RESOURCE, + DELETE_MAIN_CODE, SOFTWARE_CREATED, SAVE; diff --git a/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/server/StatAlgoImporterServiceImpl.java b/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/server/StatAlgoImporterServiceImpl.java index 9654530..a3ebd66 100644 --- a/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/server/StatAlgoImporterServiceImpl.java +++ b/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/server/StatAlgoImporterServiceImpl.java @@ -57,8 +57,9 @@ public class StatAlgoImporterServiceImpl extends RemoteServiceServlet implements System.out.println("initializing StatAlgoImporterService"); String notificationRecipientsFile = "/statalgoimporter/properties/NotificationRecipients.txt"; - InputStream notificationRecipientsInputStream = this.getServletContext() - .getResourceAsStream(notificationRecipientsFile); + InputStream notificationRecipientsInputStream = this + .getServletContext().getResourceAsStream( + notificationRecipientsFile); String text = null; try { text = IOUtils.toString(notificationRecipientsInputStream, @@ -70,7 +71,7 @@ public class StatAlgoImporterServiceImpl extends RemoteServiceServlet implements ArrayList recipients = new ArrayList(); JSONObject obj = new JSONObject(text); - System.out.println(""+obj); + System.out.println("" + obj); JSONArray arr = obj.getJSONArray("recipients"); for (int i = 0; i < arr.length(); i++) { JSONObject dest = arr.getJSONObject(i); @@ -80,11 +81,11 @@ public class StatAlgoImporterServiceImpl extends RemoteServiceServlet implements String name = dest.getString("name"); Recipient rec = new Recipient(user, surname, name); recipients.add(rec); - + } - System.out.println("Recipients: "+recipients); + System.out.println("Recipients: " + recipients); SessionUtil.setRecipients(this.getServletContext(), recipients); - + } /** @@ -208,12 +209,18 @@ public class StatAlgoImporterServiceImpl extends RemoteServiceServlet implements throws StatAlgoImporterServiceException { try { HttpSession session = this.getThreadLocalRequest().getSession(); - SessionUtil.getAslSession(session); + ASLSession aslSession = SessionUtil.getAslSession(session); logger.debug("createProjectOnWorkspace()"); - ProjectFolder projectFolder = new ProjectFolder(newProjectFolder); - Project projectSession = new Project(projectFolder); - SessionUtil.setProjectSession(session, projectSession); - + if (ProjectArchiver.existProjectInFolder(newProjectFolder, + aslSession)) { + throw new StatAlgoImporterServiceException( + "Attention a project is present in this folder, use open or another folder!"); + } else { + ProjectFolder projectFolder = new ProjectFolder( + newProjectFolder); + Project projectSession = new Project(projectFolder); + SessionUtil.setProjectSession(session, projectSession); + } return; } catch (StatAlgoImporterServiceException e) { e.printStackTrace(); @@ -316,7 +323,7 @@ public class StatAlgoImporterServiceImpl extends RemoteServiceServlet implements } @Override - public void deleteResourceOnProject(ItemDescription itemDescription) + public Project deleteResourceOnProject(ItemDescription itemDescription) throws StatAlgoImporterServiceException { try { HttpSession session = this.getThreadLocalRequest().getSession(); @@ -330,14 +337,27 @@ public class StatAlgoImporterServiceImpl extends RemoteServiceServlet implements Project project = SessionUtil.getProjectSession(session); if (project != null) { - FilesStorage fileStorage = new FilesStorage(); - fileStorage.deleteItemOnFolder(aslSession.getUsername(), - itemDescription.getId()); + if (project.getMainCode() != null + && project.getMainCode().getItemDescription() != null + && project.getMainCode().getItemDescription().getId() + .compareTo(itemDescription.getId()) == 0) { + project.setMainCode(null); + project.setInputData(null); + project.setProjectTarget(null); + FilesStorage fileStorage = new FilesStorage(); + fileStorage.deleteItemOnFolder(aslSession.getUsername(), + itemDescription.getId()); + SessionUtil.setProjectSession(session, project); + } else { + FilesStorage fileStorage = new FilesStorage(); + fileStorage.deleteItemOnFolder(aslSession.getUsername(), + itemDescription.getId()); + } + return project; } else { throw new StatAlgoImporterServiceException("No project open!"); } - return; } catch (StatAlgoImporterServiceException e) { e.printStackTrace(); throw e; @@ -391,9 +411,9 @@ public class StatAlgoImporterServiceImpl extends RemoteServiceServlet implements throw new StatAlgoImporterServiceException( "No main code set!"); } else { - FilesStorage filesStorage = new FilesStorage(); - filesStorage.saveItem(aslSession.getUsername(), mainCode - .getItemDescription().getId(), code); + MainCodeSave mainCodeSave = new MainCodeSave(); + mainCodeSave.save(aslSession, + mainCode.getItemDescription(), code, project); } } else { throw new StatAlgoImporterServiceException("No project open!"); @@ -423,7 +443,7 @@ public class StatAlgoImporterServiceImpl extends RemoteServiceServlet implements if (project != null && project.getProjectFolder() != null && project.getProjectFolder().getItemDescription() != null) { MainCodeSave mainCodeSave = new MainCodeSave(); - ItemDescription mainCodeItemDescription = mainCodeSave.save( + ItemDescription mainCodeItemDescription = mainCodeSave.saveNew( aslSession, fileDescription, code, project); MainCode mainCode = new MainCode(mainCodeItemDescription); project.setMainCode(mainCode); @@ -504,7 +524,8 @@ public class StatAlgoImporterServiceImpl extends RemoteServiceServlet implements HttpSession session = this.getThreadLocalRequest().getSession(); ASLSession aslSession = SessionUtil.getAslSession(session); logger.debug("PublishSoftware()"); - ArrayList recipients=SessionUtil.getRecipients(session.getServletContext()); + ArrayList recipients = SessionUtil.getRecipients(session + .getServletContext()); Project project = SessionUtil.getProjectSession(session); if (project != null && project.getProjectTarget() != null && project.getProjectTarget().getTargetFolder() != null diff --git a/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/server/storage/FilesStorage.java b/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/server/storage/FilesStorage.java index c105d1d..7008412 100644 --- a/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/server/storage/FilesStorage.java +++ b/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/server/storage/FilesStorage.java @@ -397,6 +397,67 @@ public class FilesStorage { throw new StatAlgoImporterServiceException(e.getLocalizedMessage()); } } + + + /** + * + * @param user + * @param folderId + * @return + * @throws StatAlgoImporterServiceException + */ + public boolean existProjectItemOnWorkspace(String user, + String folderId) throws StatAlgoImporterServiceException { + Workspace ws; + try { + ws = HomeLibrary.getUserWorkspace(user); + + WorkspaceItem workSpaceItem = ws.getItem(folderId); + if (!workSpaceItem.isFolder()) { + throw new StatAlgoImporterServiceException( + "Item is not valid folder!"); + } + + WorkspaceItem projectItem = ws.find( + STATISTICAL_ALGORITHM_PROJECT_FILE_NAME, folderId); + + if (projectItem == null) { + return false; + } else { + return true; + } + + } catch (WorkspaceFolderNotFoundException | InternalErrorException + | HomeNotFoundException | ItemNotFoundException + | WrongItemTypeException e) { + e.printStackTrace(); + throw new StatAlgoImporterServiceException(e.getLocalizedMessage()); + } + } + + + /** + * + * @param user + * @param itemId + * @return + * @throws StatAlgoImporterServiceException + */ + public WorkspaceItem retrieveItemInfoOnWorkspace(String user, String itemId) + throws StatAlgoImporterServiceException { + Workspace ws; + try { + ws = HomeLibrary.getUserWorkspace(user); + + WorkspaceItem workSpaceItem = ws.getItem(itemId); + return workSpaceItem; + + } catch (WorkspaceFolderNotFoundException | InternalErrorException + | HomeNotFoundException | ItemNotFoundException e) { + e.printStackTrace(); + throw new StatAlgoImporterServiceException(e.getLocalizedMessage()); + } + } /** * diff --git a/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/server/storage/MainCodeSave.java b/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/server/storage/MainCodeSave.java index 7e5351e..c3b72c0 100644 --- a/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/server/storage/MainCodeSave.java +++ b/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/server/storage/MainCodeSave.java @@ -31,6 +31,21 @@ public class MainCodeSave { } + /** + * + * @param aslSession + * @param file + * @param code + * @param project + * @throws StatAlgoImporterServiceException + */ + public void save(ASLSession aslSession, ItemDescription file, + String code, Project project) throws StatAlgoImporterServiceException{ + FilesStorage filesStorage = new FilesStorage(); + filesStorage.saveItem(aslSession.getUsername(), file.getId(), code); + } + + /** * * @param aslSession @@ -40,7 +55,7 @@ public class MainCodeSave { * @return * @throws StatAlgoImporterServiceException */ - public ItemDescription save(ASLSession aslSession, ItemDescription file, + public ItemDescription saveNew(ASLSession aslSession, ItemDescription file, String code, Project project) throws StatAlgoImporterServiceException { Path tempFile = createTempFile(file, code); @@ -49,6 +64,7 @@ public class MainCodeSave { return mainCode; } + private Path createTempFile(ItemDescription file, String code) throws StatAlgoImporterServiceException { try { diff --git a/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/server/storage/ProjectArchiver.java b/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/server/storage/ProjectArchiver.java index 4a6aa07..f6e5e24 100644 --- a/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/server/storage/ProjectArchiver.java +++ b/src/main/java/org/gcube/portlets/user/statisticalalgorithmsimporter/server/storage/ProjectArchiver.java @@ -7,12 +7,17 @@ import java.io.ByteArrayOutputStream; import java.io.InputStream; import org.gcube.application.framework.core.session.ASLSession; +import org.gcube.common.homelibrary.home.exceptions.InternalErrorException; +import org.gcube.common.homelibrary.home.workspace.WorkspaceItem; import org.gcube.portlets.user.statisticalalgorithmsimporter.shared.exception.StatAlgoImporterServiceException; import org.gcube.portlets.user.statisticalalgorithmsimporter.shared.project.Project; +import org.gcube.portlets.user.statisticalalgorithmsimporter.shared.project.ProjectFolder; import org.gcube.portlets.user.statisticalalgorithmsimporter.shared.workspace.ItemDescription; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import com.gargoylesoftware.htmlunit.javascript.host.Storage; + /** * * @author Giancarlo Panichi email: