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: