package org.gcube.portlets.user.statisticalalgorithmsimporter.server; import java.io.IOException; import java.io.InputStream; import java.nio.charset.StandardCharsets; import java.util.ArrayList; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import org.apache.commons.io.IOUtils; import org.gcube.portlets.user.statisticalalgorithmsimporter.client.rpc.StatAlgoImporterService; import org.gcube.portlets.user.statisticalalgorithmsimporter.server.annotation.WPS4RParser; import org.gcube.portlets.user.statisticalalgorithmsimporter.server.file.CodeReader; import org.gcube.portlets.user.statisticalalgorithmsimporter.server.generator.ProjectBuilder; import org.gcube.portlets.user.statisticalalgorithmsimporter.server.generator.ProjectDeploy; import org.gcube.portlets.user.statisticalalgorithmsimporter.server.generator.ProjectShareInfoBuilder; import org.gcube.portlets.user.statisticalalgorithmsimporter.server.is.BuildSAIDescriptor; import org.gcube.portlets.user.statisticalalgorithmsimporter.server.is.InformationSystemUtils; import org.gcube.portlets.user.statisticalalgorithmsimporter.server.poolmanager.DataMinerPoolManager; import org.gcube.portlets.user.statisticalalgorithmsimporter.server.social.Recipient; import org.gcube.portlets.user.statisticalalgorithmsimporter.server.storage.CodeSave; import org.gcube.portlets.user.statisticalalgorithmsimporter.server.storage.DeploySave; import org.gcube.portlets.user.statisticalalgorithmsimporter.server.storage.FilesStorage; import org.gcube.portlets.user.statisticalalgorithmsimporter.server.storage.ProjectArchiver; import org.gcube.portlets.user.statisticalalgorithmsimporter.server.util.ServiceCredentials; import org.gcube.portlets.user.statisticalalgorithmsimporter.shared.Constants; import org.gcube.portlets.user.statisticalalgorithmsimporter.shared.code.CodeData; import org.gcube.portlets.user.statisticalalgorithmsimporter.shared.descriptor.ProjectLanguageType; import org.gcube.portlets.user.statisticalalgorithmsimporter.shared.descriptor.SAIDescriptor; import org.gcube.portlets.user.statisticalalgorithmsimporter.shared.dminfo.ServiceInfo; import org.gcube.portlets.user.statisticalalgorithmsimporter.shared.exception.StatAlgoImporterServiceException; import org.gcube.portlets.user.statisticalalgorithmsimporter.shared.exception.StatAlgoImporterSessionExpiredException; import org.gcube.portlets.user.statisticalalgorithmsimporter.shared.file.FileUploadMonitor; import org.gcube.portlets.user.statisticalalgorithmsimporter.shared.project.InputData; import org.gcube.portlets.user.statisticalalgorithmsimporter.shared.project.MainCode; import org.gcube.portlets.user.statisticalalgorithmsimporter.shared.project.Project; import org.gcube.portlets.user.statisticalalgorithmsimporter.shared.project.ProjectConfig; import org.gcube.portlets.user.statisticalalgorithmsimporter.shared.project.ProjectCreateSession; import org.gcube.portlets.user.statisticalalgorithmsimporter.shared.project.ProjectFolder; import org.gcube.portlets.user.statisticalalgorithmsimporter.shared.project.ProjectSupportBashEdit; import org.gcube.portlets.user.statisticalalgorithmsimporter.shared.project.ProjectSupportBlackBox; import org.gcube.portlets.user.statisticalalgorithmsimporter.shared.project.ProjectSupportREdit; import org.gcube.portlets.user.statisticalalgorithmsimporter.shared.session.UserInfo; import org.gcube.portlets.user.statisticalalgorithmsimporter.shared.workspace.ItemDescription; import org.json.JSONArray; import org.json.JSONObject; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.google.gwt.user.server.rpc.RemoteServiceServlet; /** * The server side implementation of the RPC service. */ @SuppressWarnings("serial") public class StatAlgoImporterServiceImpl extends RemoteServiceServlet implements StatAlgoImporterService { private static Logger logger = LoggerFactory.getLogger(StatAlgoImporterServiceImpl.class); /** * * {@inheritDoc} * */ @Override public void init() throws ServletException { super.init(); logger.info("Fix JAXP: jdk.xml.entityExpansionLimit=0"); System.setProperty("jdk.xml.entityExpansionLimit", "0"); logger.info("initializing StatAlgoImporterService"); String notificationRecipientsFile = "/statalgoimporter/properties/NotificationRecipients.txt"; InputStream notificationRecipientsInputStream = this.getServletContext() .getResourceAsStream(notificationRecipientsFile); String text = null; try { text = IOUtils.toString(notificationRecipientsInputStream, StandardCharsets.UTF_8.name()); } catch (IOException e) { logger.error(e.getLocalizedMessage(),e); } ArrayList recipients = new ArrayList(); try { JSONObject obj = new JSONObject(text); logger.info("" + obj); JSONArray arr = obj.getJSONArray("recipients"); for (int i = 0; i < arr.length(); i++) { JSONObject dest = arr.getJSONObject(i); logger.info("" + dest); String user = dest.getString("user"); String surname = dest.getString("surname"); String name = dest.getString("name"); Recipient rec = new Recipient(user, surname, name); recipients.add(rec); } } catch (Exception e) { logger.error(e.getLocalizedMessage(),e); logger.info("Recipients not set"); } logger.info("Recipients: " + recipients); SessionUtil.setDefaultRecipients(this.getServletContext(), recipients); } /** * * {@inheritDoc} * */ @Override public UserInfo hello() throws StatAlgoImporterServiceException { try { ServiceCredentials serviceCredentials = SessionUtil.getServiceCredentials(this.getThreadLocalRequest()); logger.debug("hello()"); UserInfo userInfo = new UserInfo(serviceCredentials.getUserName(), serviceCredentials.getGroupId(), serviceCredentials.getGroupName(), serviceCredentials.getScope(), serviceCredentials.getEmail(), serviceCredentials.getFullName()); logger.debug("UserInfo: " + userInfo); return userInfo; } catch (StatAlgoImporterServiceException e) { logger.error("hello(): " + e.getLocalizedMessage(), e); throw e; } catch (Throwable e) { logger.error("hello(): " + e.getLocalizedMessage(), e); throw new StatAlgoImporterServiceException(e.getLocalizedMessage()); } } @Override public SAIDescriptor getSAIDescriptor() throws StatAlgoImporterServiceException { HttpServletRequest httpRequest = null; try { httpRequest = this.getThreadLocalRequest(); ServiceCredentials serviceCredentials = SessionUtil.getServiceCredentials(httpRequest); logger.debug("getSAIDescriptor()"); SAIDescriptor saiDescriptor = BuildSAIDescriptor.build(serviceCredentials.getScope()); SessionUtil.setSAIDescriptor(httpRequest, serviceCredentials, saiDescriptor); return saiDescriptor; } catch (StatAlgoImporterServiceException e) { logger.error("Error retrieving SAI descriptor: " + e.getLocalizedMessage(), e); throw e; } catch (Throwable e) { logger.error("Error retrieving SAI descriptor: " + e.getLocalizedMessage(), e); throw new StatAlgoImporterServiceException(e.getLocalizedMessage(), e); } } @Override public Project restoreUISession(String value) throws StatAlgoImporterServiceException { HttpServletRequest httpRequest = null; try { httpRequest = this.getThreadLocalRequest(); ServiceCredentials serviceCredentials = SessionUtil.getServiceCredentials(httpRequest); logger.debug("restoreUISession(): " + value); Project project = SessionUtil.getProjectSession(httpRequest, serviceCredentials); return project; } catch (StatAlgoImporterServiceException e) { logger.error("Error in restoreUISession(): " + e.getLocalizedMessage(), e); throw e; } catch (Throwable e) { logger.error("Error in restoreUISession(): " + e.getLocalizedMessage(), e); throw new StatAlgoImporterServiceException(e.getLocalizedMessage()); } } /** * * {@inheritDoc} * */ @Override public FileUploadMonitor getFileUploadMonitor() throws StatAlgoImporterServiceException { HttpServletRequest httpRequest = this.getThreadLocalRequest(); ServiceCredentials serviceCredentials = SessionUtil.getServiceCredentials(httpRequest); FileUploadMonitor fileUploadMonitor = null; try { fileUploadMonitor = SessionUtil.getFileUploadMonitor(httpRequest, serviceCredentials); } catch (Exception e) { logger.error("Error retrieving the fileUploadMonitor", e); } if (fileUploadMonitor == null) { throw new StatAlgoImporterServiceException("Error retrieving the fileUploadMonitor: null"); } logger.debug("FileUploadMonitor: " + fileUploadMonitor); return fileUploadMonitor; } /** * * {@inheritDoc} * */ @Override public ArrayList getCode() throws StatAlgoImporterServiceException { try { HttpServletRequest httpRequest = this.getThreadLocalRequest(); ServiceCredentials serviceCredentials = SessionUtil.getServiceCredentials(httpRequest); logger.debug("getCode()"); Project project = SessionUtil.getProjectSession(httpRequest, serviceCredentials); CodeReader codeFileReader = new CodeReader(project, serviceCredentials); ArrayList codeList = codeFileReader.getCodeList(); return codeList; } catch (StatAlgoImporterServiceException e) { logger.error("getCode(): " + e.getLocalizedMessage(), e); throw e; } catch (Throwable e) { logger.error("getCode(): " + e.getLocalizedMessage(), e); throw new StatAlgoImporterServiceException(e.getLocalizedMessage()); } } /** * * {@inheritDoc} * */ @Override public Project createProjectOnWorkspace(ProjectCreateSession projectCreateSession) throws StatAlgoImporterServiceException { try { HttpServletRequest httpRequest = this.getThreadLocalRequest(); ServiceCredentials serviceCredentials = SessionUtil.getServiceCredentials(httpRequest); logger.debug("createProjectOnWorkspace(): " + projectCreateSession); Project project; if (ProjectArchiver.existProjectInFolder(projectCreateSession.getNewProjectFolder(), serviceCredentials)) { throw new StatAlgoImporterServiceException( "Attention a project is present in this folder, use open or another folder!"); } else { ProjectFolder projectFolder = new ProjectFolder(projectCreateSession.getNewProjectFolder()); ProjectConfig projectConfig = null; if (projectCreateSession.getProjectSetup() != null && projectCreateSession.getProjectSetup().getProjectSupportType() != null) { switch (projectCreateSession.getProjectSetup().getProjectSupportType()) { case BLACKBOX: projectConfig = new ProjectConfig(projectCreateSession.getProjectSetup().getLanguage(), new ProjectSupportBlackBox()); break; case BASHEDIT: projectConfig = new ProjectConfig(projectCreateSession.getProjectSetup().getLanguage(), new ProjectSupportBashEdit()); break; case REDIT: projectConfig = new ProjectConfig(projectCreateSession.getProjectSetup().getLanguage(), new ProjectSupportREdit()); break; default: break; } } project = new Project(projectFolder, projectConfig); SessionUtil.setProjectSession(httpRequest, serviceCredentials, project); } logger.debug("Create Project: " + project); return project; } catch (StatAlgoImporterServiceException e) { logger.error("Error in createProjectOnWorkspace(): " + e.getLocalizedMessage(), e); throw e; } catch (Throwable e) { logger.error("Error in createProjectOnWorkspace(): " + e.getLocalizedMessage(), e); throw new StatAlgoImporterServiceException(e.getLocalizedMessage()); } } @Override public Project openProjectOnWorkspace(ItemDescription newProjectFolder) throws StatAlgoImporterServiceException { try { HttpServletRequest httpRequest = this.getThreadLocalRequest(); ServiceCredentials serviceCredentials = SessionUtil.getServiceCredentials(httpRequest); logger.debug("openProjectOnWorkspace()"); Project project = ProjectArchiver.readProject(newProjectFolder, serviceCredentials); if (project != null) { if (project.getProjectConfig() == null) { project.setProjectConfig( new ProjectConfig(ProjectLanguageType.R.getId(), new ProjectSupportREdit())); } else { } } SessionUtil.setProjectSession(httpRequest, serviceCredentials, project); return project; } catch (StatAlgoImporterServiceException e) { logger.error("Error in openProjectOnWorkspace(): " + e.getLocalizedMessage(), e); throw e; } catch (Throwable e) { logger.error("Error in openProjectOnWorkspace(): " + e.getLocalizedMessage(), e); throw new StatAlgoImporterServiceException(e.getLocalizedMessage()); } } @Override public Project setMainCode(ItemDescription itemDescription) throws StatAlgoImporterServiceException { try { HttpServletRequest httpRequest = this.getThreadLocalRequest(); ServiceCredentials serviceCredentials = SessionUtil.getServiceCredentials(httpRequest); logger.debug("SetMainCode(): " + itemDescription); Project project = SessionUtil.getProjectSession(httpRequest, serviceCredentials); if (project != null) { FilesStorage filesStorage = new FilesStorage(); String pLink = filesStorage.getPublicLink(serviceCredentials.getUserName(), itemDescription.getId()); itemDescription.setPublicLink(pLink); project.setMainCode(new MainCode(itemDescription)); InputData inputData = project.getInputData(); if (inputData != null) { inputData.setListInputOutputVariables(null); } project.setProjectTarget(null); WPS4RParser wps4Parser = new WPS4RParser(project, serviceCredentials); project = wps4Parser.parse(); SessionUtil.setProjectSession(httpRequest, serviceCredentials, project); logger.debug("Project: " + project); } else { throw new StatAlgoImporterServiceException("No project open!"); } return project; } catch (StatAlgoImporterServiceException e) { logger.error("Error in setMainCode(): " + e.getLocalizedMessage(), e); throw e; } catch (Throwable e) { logger.error("Error in setMainCode(): " + e.getLocalizedMessage(), e); throw new StatAlgoImporterServiceException(e.getLocalizedMessage()); } } @Override public Project setBinaryCode(ItemDescription itemDescription) throws StatAlgoImporterServiceException { try { HttpServletRequest httpRequest = this.getThreadLocalRequest(); ServiceCredentials serviceCredentials = SessionUtil.getServiceCredentials(httpRequest); logger.debug("SetBinaryCode(): " + itemDescription); Project project = SessionUtil.getProjectSession(httpRequest, serviceCredentials); if (project != null && project.getProjectConfig() != null) { if (project.getProjectConfig().getProjectSupport() != null) { if (project.getProjectConfig().getProjectSupport() instanceof ProjectSupportBlackBox) { ProjectSupportBlackBox projectSupportBlackBox = (ProjectSupportBlackBox) project .getProjectConfig().getProjectSupport(); FilesStorage filesStorage = new FilesStorage(); itemDescription = filesStorage.getFileInfoOnWorkspace(serviceCredentials.getUserName(), itemDescription.getId()); String pLink = filesStorage.getPublicLink(serviceCredentials.getUserName(), itemDescription.getId()); itemDescription.setPublicLink(pLink); projectSupportBlackBox.setBinaryItem(itemDescription); SessionUtil.setProjectSession(httpRequest, serviceCredentials, project); logger.debug("Project: " + project); } else { if (project.getProjectConfig().getProjectSupport() instanceof ProjectSupportBashEdit) { ProjectSupportBashEdit projectSupportBashEdit = (ProjectSupportBashEdit) project .getProjectConfig().getProjectSupport(); FilesStorage filesStorage = new FilesStorage(); itemDescription = filesStorage.getFileInfoOnWorkspace(serviceCredentials.getUserName(), itemDescription.getId()); String pLink = filesStorage.getPublicLink(serviceCredentials.getUserName(), itemDescription.getId()); itemDescription.setPublicLink(pLink); projectSupportBashEdit.setBinaryItem(itemDescription); SessionUtil.setProjectSession(httpRequest, serviceCredentials, project); logger.debug("Project: " + project); } else { throw new StatAlgoImporterServiceException("Error in project setup!"); } } } else { throw new StatAlgoImporterServiceException("Error in project setup no support present!"); } } else { throw new StatAlgoImporterServiceException("No project open!"); } return project; } catch (StatAlgoImporterServiceException e) { logger.error("Error in setBinaryCode(): " + e.getLocalizedMessage(), e); throw e; } catch (Throwable e) { logger.error("Error in setBinaryCode(): " + e.getLocalizedMessage(), e); throw new StatAlgoImporterServiceException(e.getLocalizedMessage()); } } @Override public void addResourceToProject(ItemDescription itemDescription) throws StatAlgoImporterServiceException { try { HttpServletRequest httpRequest = this.getThreadLocalRequest(); ServiceCredentials serviceCredentials = SessionUtil.getServiceCredentials(httpRequest); logger.debug("addResourceToProject(): " + itemDescription); if (itemDescription == null || itemDescription.getId() == null) { throw new StatAlgoImporterServiceException( "Add resource to project is failed, invalid resource: " + itemDescription); } Project project = SessionUtil.getProjectSession(httpRequest, serviceCredentials); if (project != null && project.getProjectFolder() != null && project.getProjectFolder().getFolder() != null) { FilesStorage fileStorage = new FilesStorage(); fileStorage.copyItemOnFolder(serviceCredentials.getUserName(), itemDescription.getId(), project.getProjectFolder().getFolder().getId()); } else { throw new StatAlgoImporterServiceException("No project open!"); } return; } catch (StatAlgoImporterServiceException e) { logger.error("Error in addResourceToProject(): " + e.getLocalizedMessage(), e); throw e; } catch (Throwable e) { logger.error("Error in addResourceToProject(): " + e.getLocalizedMessage(), e); throw new StatAlgoImporterServiceException(e.getLocalizedMessage()); } } @Override public Project deleteResourceOnProject(ItemDescription itemDescription) throws StatAlgoImporterServiceException { try { HttpServletRequest httpRequest = this.getThreadLocalRequest(); ServiceCredentials serviceCredentials = SessionUtil.getServiceCredentials(httpRequest); logger.debug("deleteResourceOnProject(): " + itemDescription); if (itemDescription == null || itemDescription.getId() == null) { throw new StatAlgoImporterServiceException( "Delete resource on project is failed, invalid resource: " + itemDescription); } Project project = SessionUtil.getProjectSession(httpRequest, serviceCredentials); checkProjectInfoForDelete(itemDescription, httpRequest, serviceCredentials, project); FilesStorage fileStorage = new FilesStorage(); fileStorage.deleteItem(serviceCredentials.getUserName(), itemDescription.getId()); return project; } catch (StatAlgoImporterServiceException e) { logger.error("Error in deleteResourceOnProject(): " + e.getLocalizedMessage(), e); throw e; } catch (Throwable e) { logger.error("Error in deleteResourceOnProject(): " + e.getLocalizedMessage(), e); throw new StatAlgoImporterServiceException(e.getLocalizedMessage()); } } private void checkProjectInfoForDelete(ItemDescription itemDescription, HttpServletRequest httpRequest, ServiceCredentials serviceCredentials, Project project) throws StatAlgoImporterSessionExpiredException, StatAlgoImporterServiceException { if (project != null) { 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); SessionUtil.setProjectSession(httpRequest, serviceCredentials, project); ProjectArchiver.archive(project, serviceCredentials); } else { if (project.getProjectTarget() != null && project.getProjectTarget().getFolder() != null && project.getProjectTarget().getFolder().getId().compareTo(itemDescription.getId()) == 0) { project.setProjectTarget(null); SessionUtil.setProjectSession(httpRequest, serviceCredentials, project); ProjectArchiver.archive(project, serviceCredentials); } else { if (project.getProjectTarget() != null && project.getProjectTarget().getProjectCompile() != null && project.getProjectTarget().getProjectCompile().getFolder() != null && project.getProjectTarget().getProjectCompile().getFolder().getId() .compareTo(itemDescription.getId()) == 0) { project.getProjectTarget().setProjectCompile(null); SessionUtil.setProjectSession(httpRequest, serviceCredentials, project); ProjectArchiver.archive(project, serviceCredentials); } else { if (project.getProjectTarget() != null && project.getProjectTarget().getProjectDeploy() != null && project.getProjectTarget().getProjectDeploy().getFolder() != null && project.getProjectTarget().getProjectDeploy().getFolder().getId() .compareTo(itemDescription.getId()) == 0) { project.getProjectTarget().setProjectDeploy(null); SessionUtil.setProjectSession(httpRequest, serviceCredentials, project); ProjectArchiver.archive(project, serviceCredentials); } else { if (project.getProjectTarget() != null && project.getProjectTarget().getProjectDeploy() != null && project.getProjectTarget().getProjectDeploy().getPackageProject() != null && project.getProjectTarget().getProjectDeploy().getPackageProject().getId() .compareTo(itemDescription.getId()) == 0) { project.getProjectTarget().getProjectDeploy().setPackageProject(null); SessionUtil.setProjectSession(httpRequest, serviceCredentials, project); ProjectArchiver.archive(project, serviceCredentials); } else { } } } } } } else { throw new StatAlgoImporterServiceException("No project open!"); } } @Override public void saveProject(InputData inputData) throws StatAlgoImporterServiceException { try { HttpServletRequest httpRequest = this.getThreadLocalRequest(); ServiceCredentials serviceCredentials = SessionUtil.getServiceCredentials(httpRequest); logger.debug("saveProject():" + inputData); Project project = SessionUtil.getProjectSession(httpRequest, serviceCredentials); if (project != null) { project.setInputData(inputData); ProjectShareInfoBuilder projectShareInfoBuilder = new ProjectShareInfoBuilder(serviceCredentials, project); projectShareInfoBuilder.create(); SessionUtil.setProjectSession(httpRequest, serviceCredentials, project); ProjectArchiver.archive(project, serviceCredentials); } else { throw new StatAlgoImporterServiceException("No project open!"); } return; } catch (StatAlgoImporterServiceException e) { logger.error("Error in saveProject(): " + e.getLocalizedMessage(), e); throw e; } catch (Throwable e) { logger.error("Error in saveProject(): " + e.getLocalizedMessage(), e); throw new StatAlgoImporterServiceException(e.getLocalizedMessage()); } } @Override public void saveCode(String code) throws StatAlgoImporterServiceException { try { HttpServletRequest httpRequest = this.getThreadLocalRequest(); ServiceCredentials serviceCredentials = SessionUtil.getServiceCredentials(httpRequest); logger.debug("saveCode():" + code); Project project = SessionUtil.getProjectSession(httpRequest, serviceCredentials); if (project != null) { if (project.getProjectConfig() != null && project.getProjectConfig().getProjectSupport() != null) { if (project.getProjectConfig().getProjectSupport() instanceof ProjectSupportREdit) { MainCode mainCode = project.getMainCode(); if (mainCode == null || mainCode.getItemDescription() == null) { throw new StatAlgoImporterServiceException("No main code set!"); } else { CodeSave mainCodeSave = new CodeSave(); mainCodeSave.save(serviceCredentials, mainCode.getItemDescription(), code); } } else { if (project.getProjectConfig().getProjectSupport() instanceof ProjectSupportBashEdit) { ProjectSupportBashEdit projectSupportBashEdit = (ProjectSupportBashEdit) project .getProjectConfig().getProjectSupport(); if (projectSupportBashEdit == null || projectSupportBashEdit.getBinaryItem() == null) { throw new StatAlgoImporterServiceException("No binary code set!"); } else { CodeSave mainCodeSave = new CodeSave(); mainCodeSave.save(serviceCredentials, projectSupportBashEdit.getBinaryItem(), code); } } else { throw new StatAlgoImporterServiceException("Error in project Support!"); } } } else { throw new StatAlgoImporterServiceException("Error in project Config!"); } } else { throw new StatAlgoImporterServiceException("No project open!"); } return; } catch ( StatAlgoImporterServiceException e) { logger.error("Error in saveCode(): " + e.getLocalizedMessage(), e); throw e; } catch (Throwable e) { logger.error("Error in saveCode(): " + e.getLocalizedMessage(), e); throw new StatAlgoImporterServiceException(e.getLocalizedMessage()); } } @Override public Project setNewCode(InputData inputData, ItemDescription fileDescription, String code) throws StatAlgoImporterServiceException { try { HttpServletRequest httpRequest = this.getThreadLocalRequest(); ServiceCredentials serviceCredentials = SessionUtil.getServiceCredentials(httpRequest); logger.debug("setNewCode(): " + inputData + ", " + fileDescription + ", " + code); Project project = SessionUtil.getProjectSession(httpRequest, serviceCredentials); if (project != null && project.getProjectFolder() != null && project.getProjectFolder().getFolder() != null) { if (project.getProjectConfig() != null && project.getProjectConfig().getProjectSupport() != null) { if (project.getProjectConfig().getProjectSupport() instanceof ProjectSupportREdit) { CodeSave codeSave = new CodeSave(); ItemDescription mainCodeItemDescription = codeSave.saveNew(serviceCredentials, fileDescription, code, project.getProjectFolder().getFolder().getId()); MainCode mainCode = new MainCode(mainCodeItemDescription); project.setMainCode(mainCode); if (inputData != null) { inputData.setListInputOutputVariables(null); project.setInputData(inputData); } project.setProjectTarget(null); WPS4RParser wps4Parser = new WPS4RParser(project, serviceCredentials); project = wps4Parser.parse(); } else { if (project.getProjectConfig().getProjectSupport() instanceof ProjectSupportBashEdit) { ProjectSupportBashEdit projectSupportBashEdit = (ProjectSupportBashEdit) project .getProjectConfig().getProjectSupport(); CodeSave codeSave = new CodeSave(); ItemDescription binaryCodeItemDescription = codeSave.saveNew(serviceCredentials, fileDescription, code, project.getProjectFolder().getFolder().getId()); projectSupportBashEdit.setBinaryItem(binaryCodeItemDescription); project.setInputData(inputData); project.setProjectTarget(null); } else { throw new StatAlgoImporterServiceException("Error in project support!"); } } } else { throw new StatAlgoImporterServiceException("Error in project configuration!"); } SessionUtil.setProjectSession(httpRequest, serviceCredentials, project); return project; } else { throw new StatAlgoImporterServiceException("No project open!"); } } catch (StatAlgoImporterServiceException e) { logger.error("Error in setNewCode(): " + e.getLocalizedMessage(), e); throw e; } catch (Throwable e) { logger.error("Error in setNewCode(): " + e.getLocalizedMessage(), e); throw new StatAlgoImporterServiceException(e.getLocalizedMessage()); } } @Override public String getPublicLink(ItemDescription itemDescription) throws StatAlgoImporterServiceException { try { HttpServletRequest httpRequest = this.getThreadLocalRequest(); ServiceCredentials serviceCredentials = SessionUtil.getServiceCredentials(httpRequest); logger.debug("GetPublicLink(): " + itemDescription); FilesStorage filesStorage = new FilesStorage(); String link = filesStorage.getPublicLink(serviceCredentials.getUserName(), itemDescription.getId()); return link; } catch (StatAlgoImporterServiceException e) { logger.error("Error in getPublicLink(): " + e.getLocalizedMessage(), e); throw e; } catch (Throwable e) { logger.error("Error in getPublicLink(): " + e.getLocalizedMessage(), e); throw new StatAlgoImporterServiceException(e.getLocalizedMessage()); } } @Override public Project createSoftware(InputData inputData) throws StatAlgoImporterServiceException { try { HttpServletRequest httpRequest = this.getThreadLocalRequest(); ServiceCredentials serviceCredentials = SessionUtil.getServiceCredentials(httpRequest); logger.debug("createSoftware(): " + inputData); Project project = SessionUtil.getProjectSession(httpRequest, serviceCredentials); if (project != null) { project.setInputData(inputData); SessionUtil.setProjectSession(httpRequest, serviceCredentials, project); SAIDescriptor saiDescriptor = SessionUtil.getSAIDescriptor(httpRequest, serviceCredentials); ProjectBuilder projectBuilder = new ProjectBuilder(project, serviceCredentials, saiDescriptor); project = projectBuilder.buildTarget(); SessionUtil.setProjectSession(httpRequest, serviceCredentials, project); ProjectArchiver.archive(project, serviceCredentials); return project; } else { throw new StatAlgoImporterServiceException("No project open!"); } } catch (StatAlgoImporterServiceException e) { logger.error("Error in createSoftware(): " + e.getLocalizedMessage(), e); throw e; } catch (Throwable e) { logger.error("Error in createSoftware(): " + e.getLocalizedMessage(), e); throw new StatAlgoImporterServiceException(e.getLocalizedMessage()); } } @Override public String publishSoftware() throws StatAlgoImporterServiceException { try { HttpServletRequest httpRequest = this.getThreadLocalRequest(); ServiceCredentials serviceCredentials = SessionUtil.getServiceCredentials(httpRequest); logger.debug("PublishSoftware()"); Project project = SessionUtil.getProjectSession(httpRequest, serviceCredentials); if (project != null) { SAIDescriptor saiDescriptor = SessionUtil.getSAIDescriptor(httpRequest, serviceCredentials); ProjectBuilder projectBuilder = new ProjectBuilder(project, serviceCredentials, saiDescriptor); project = projectBuilder.buildDeploy(); SessionUtil.setProjectSession(httpRequest, serviceCredentials, project); ProjectArchiver.archive(project, serviceCredentials); ProjectDeploy projectDeploy = new ProjectDeploy(httpRequest, serviceCredentials, project); DeploySave deploySave = projectDeploy.deploy(); if (saiDescriptor != null && saiDescriptor.getPoolManagerConfig() != null && saiDescriptor.getPoolManagerConfig().isEnable()) { logger.info("Deploy On DMPoolManager"); ItemDescription codeJar = project.getProjectTarget().getProjectDeploy().getCodeJar(); logger.debug("CodeJarAdminCopy for DMPoolManager: " + codeJar); DataMinerPoolManager poolManager = new DataMinerPoolManager(serviceCredentials); String operationId = poolManager.deployAlgorithm(project, deploySave.getInfoData(), codeJar); logger.info("Deploy operationId: " + operationId); return operationId; } else { logger.info("Deploy On DMPoolManager disabled, check the resources in the scope!"); throw new StatAlgoImporterServiceException( "Deploy On DMPoolManager disabled, check the resources in the scope!"); } } else { throw new StatAlgoImporterServiceException( "The software was not created correctly try to recreate it!"); } } catch (StatAlgoImporterServiceException e) { logger.error("Error in publishSoftware(): " + e.getLocalizedMessage(), e); throw e; } catch (Throwable e) { logger.error("Error in publishSoftware(): " + e.getLocalizedMessage(), e); throw new StatAlgoImporterServiceException(e.getLocalizedMessage()); } } @Override public void repackageSoftware() throws StatAlgoImporterServiceException { try { HttpServletRequest httpRequest = this.getThreadLocalRequest(); ServiceCredentials serviceCredentials = SessionUtil.getServiceCredentials(httpRequest); logger.debug("RepackageSoftware()"); Project project = SessionUtil.getProjectSession(httpRequest, serviceCredentials); if (project != null) { SAIDescriptor saiDescriptor = SessionUtil.getSAIDescriptor(httpRequest, serviceCredentials); ProjectBuilder projectBuilder = new ProjectBuilder(project, serviceCredentials, saiDescriptor); project = projectBuilder.buildRepackage(); SessionUtil.setProjectSession(httpRequest, serviceCredentials, project); ProjectArchiver.archive(project, serviceCredentials); } else { logger.error("The script was not packaged correctly!"); throw new StatAlgoImporterServiceException("The script was not packaged correctly!"); } return; } catch (StatAlgoImporterServiceException e) { logger.error("Error in repackageSoftware(): " + e.getLocalizedMessage(), e); throw e; } catch (Throwable e) { logger.error("Error in repackageSoftware(): " + e.getLocalizedMessage(), e); throw new StatAlgoImporterServiceException(e.getLocalizedMessage()); } } @Override public String getDeployOperationStatus(String operationId) throws StatAlgoImporterServiceException { try { HttpServletRequest httpRequest = this.getThreadLocalRequest(); ServiceCredentials serviceCredentials = SessionUtil.getServiceCredentials(httpRequest); logger.debug("getDeployOperationStatus(): OperationId=" + operationId); DataMinerPoolManager poolManager = new DataMinerPoolManager(serviceCredentials); String deployOperationStatus = poolManager.getDeployOperationStatus(operationId); logger.debug("Deploy Operation Status: " + deployOperationStatus); return deployOperationStatus; } catch (StatAlgoImporterServiceException e) { logger.error("Error in getDeployOperationStatus(): " + e.getLocalizedMessage(), e); throw e; } catch (Throwable e) { logger.error("Error in getDeployOperationStatus(): " + e.getLocalizedMessage(), e); throw new StatAlgoImporterServiceException(e.getLocalizedMessage()); } } @Override public String getDeployOperationLogs(String operationId) throws StatAlgoImporterServiceException { try { HttpServletRequest httpRequest = this.getThreadLocalRequest(); ServiceCredentials serviceCredentials = SessionUtil.getServiceCredentials(httpRequest); logger.debug("getDeployOperationLogs(): OperationId=" + operationId); DataMinerPoolManager poolManager = new DataMinerPoolManager(serviceCredentials); String deployOperationLogsLink = poolManager.getDeployOperationLogsLink(operationId); logger.debug("Deploy Operation Logs Link: " + deployOperationLogsLink); return deployOperationLogsLink; } catch (StatAlgoImporterServiceException e) { logger.error("Error in getDeployOperationLogs(): " + e.getLocalizedMessage(), e); throw e; } catch (Throwable e) { logger.error("Error in getDeployOperationLogs(): " + e.getLocalizedMessage(), e); throw new StatAlgoImporterServiceException(e.getLocalizedMessage()); } } @Override public ItemDescription getItemDescription(String itemId) throws StatAlgoImporterServiceException { try { HttpServletRequest httpRequest = this.getThreadLocalRequest(); ServiceCredentials serviceCredentials = SessionUtil.getServiceCredentials(httpRequest); logger.debug("getItemDescription(): [itemId=" + itemId + "]"); FilesStorage storageUtil = new FilesStorage(); ItemDescription itemDownloadInfo = storageUtil.getItemDescription(serviceCredentials.getUserName(), itemId); logger.debug("ItemDescription info: " + itemDownloadInfo); return itemDownloadInfo; } catch (StatAlgoImporterServiceException e) { logger.error("Error in getItemDescription(): " + e.getLocalizedMessage(), e); throw e; } catch (Throwable e) { logger.error("Error in getItemDescription(): " + e.getLocalizedMessage(), e); throw new StatAlgoImporterServiceException("Error retrieving item description: " + e.getLocalizedMessage(), e); } } @Override public ServiceInfo getServiceInfo() throws StatAlgoImporterServiceException { try { HttpServletRequest httpRequest = this.getThreadLocalRequest(); ServiceCredentials serviceCredentials = SessionUtil.getServiceCredentials(httpRequest); logger.info("GetServiceInfo()"); logger.info("DataMiner Service discovered by IS"); ServiceInfo serviceInfo = InformationSystemUtils.retrieveServiceInfo(Constants.DATA_MINER_SERVICE_CATEGORY, Constants.DATA_MINER_SERVICE_NAME, serviceCredentials.getScope()); logger.info("Service Info retrieved: " + serviceInfo); return serviceInfo; } catch (Throwable e) { logger.error("Error retrieving Service Info: " + e.getLocalizedMessage(), e); throw new StatAlgoImporterServiceException("Error retrieving Service Info: " + e.getLocalizedMessage(), e); } } }