ref 11724: SAI - Update to StorageHUB
https://support.d4science.org/issues/11724 Updated to StorageHub git-svn-id: https://svn.d4science.research-infrastructures.eu/gcube/trunk/portlets/user/statistical-algorithms-importer@171791 82a268e6-3cf1-43bd-a215-b396298e98cf
This commit is contained in:
parent
443ead033c
commit
45fd539fa8
|
@ -1,15 +1,13 @@
|
|||
package org.gcube.portlets.user.statisticalalgorithmsimporter.client.tools.explorer;
|
||||
|
||||
import org.gcube.portal.clientcontext.client.GCubeClientContext;
|
||||
import org.gcube.portlets.user.statisticalalgorithmsimporter.client.event.BinaryCodeSetEvent;
|
||||
import org.gcube.portlets.user.statisticalalgorithmsimporter.client.event.DeleteItemEvent;
|
||||
import org.gcube.portlets.user.statisticalalgorithmsimporter.client.event.MainCodeSetEvent;
|
||||
import org.gcube.portlets.user.statisticalalgorithmsimporter.client.event.ProjectStatusEvent;
|
||||
import org.gcube.portlets.user.statisticalalgorithmsimporter.client.event.SessionExpiredEvent;
|
||||
import org.gcube.portlets.user.statisticalalgorithmsimporter.client.resource.StatAlgoImporterResources;
|
||||
import org.gcube.portlets.user.statisticalalgorithmsimporter.client.rpc.StatAlgoImporterServiceAsync;
|
||||
import org.gcube.portlets.user.statisticalalgorithmsimporter.client.type.SessionExpiredType;
|
||||
import org.gcube.portlets.user.statisticalalgorithmsimporter.client.utils.UtilsGXT3;
|
||||
import org.gcube.portlets.user.statisticalalgorithmsimporter.shared.exception.StatAlgoImporterSessionExpiredException;
|
||||
import org.gcube.portlets.user.statisticalalgorithmsimporter.shared.Constants;
|
||||
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.workspace.ItemDescription;
|
||||
|
@ -22,9 +20,10 @@ import org.gcube.portlets.widgets.wsexplorer.shared.Item;
|
|||
import org.gcube.portlets.widgets.wsexplorer.shared.ItemType;
|
||||
|
||||
import com.allen_sauer.gwt.log.client.Log;
|
||||
import com.google.gwt.core.client.GWT;
|
||||
import com.google.gwt.event.shared.EventBus;
|
||||
import com.google.gwt.http.client.URL;
|
||||
import com.google.gwt.user.client.Window;
|
||||
import com.google.gwt.user.client.rpc.AsyncCallback;
|
||||
import com.sencha.gxt.cell.core.client.ButtonCell.ButtonScale;
|
||||
import com.sencha.gxt.cell.core.client.ButtonCell.IconAlign;
|
||||
import com.sencha.gxt.core.client.dom.ScrollSupport.ScrollMode;
|
||||
|
@ -364,33 +363,59 @@ public class ExplorerProjectPanel extends ContentPanel {
|
|||
}
|
||||
|
||||
private void openFile() {
|
||||
if (selectedItem != null && !selectedItem.isFolder()) {
|
||||
if (selectedItem != null) {
|
||||
|
||||
final ItemDescription itemDescription = new ItemDescription(selectedItem.getId(), selectedItem.getName(),
|
||||
selectedItem.getOwner(), selectedItem.getPath(), selectedItem.getType().name());
|
||||
if (selectedItem.isFolder()) {
|
||||
|
||||
StatAlgoImporterServiceAsync.INSTANCE.getPublicLink(itemDescription, new AsyncCallback<String>() {
|
||||
StringBuilder url = new StringBuilder();
|
||||
url.append(GWT.getModuleBaseURL());
|
||||
url.append(Constants.DOWNLOAD_FOLDER_SERVLET + "?" + Constants.DOWNLOAD_FOLDER_SERVLET_ITEM_ID_PARAMETER
|
||||
+ "=" + selectedItem.getId() + "&" + Constants.DOWNLOAD_FOLDER_SERVLET_FOLDER_NAME_PARAMETER
|
||||
+ "=" + selectedItem.getName() + "&" + Constants.CURR_GROUP_ID + "="
|
||||
+ GCubeClientContext.getCurrentContextId());
|
||||
|
||||
@Override
|
||||
public void onFailure(Throwable caught) {
|
||||
if (caught instanceof StatAlgoImporterSessionExpiredException) {
|
||||
eventBus.fireEvent(new SessionExpiredEvent(SessionExpiredType.EXPIREDONSERVER));
|
||||
} else {
|
||||
Log.error("Error open file: " + caught.getLocalizedMessage());
|
||||
UtilsGXT3.alert("Error", caught.getLocalizedMessage());
|
||||
}
|
||||
caught.printStackTrace();
|
||||
Log.debug("Retrieved link: " + url);
|
||||
Window.open(URL.encode(url.toString()), "_blank", "");
|
||||
} else {
|
||||
|
||||
}
|
||||
final ItemDescription itemDescription = new ItemDescription(selectedItem.getId(),
|
||||
selectedItem.getName(), selectedItem.getOwner(), selectedItem.getPath(),
|
||||
selectedItem.getType().name());
|
||||
Log.debug("ItemDescription: " + itemDescription);
|
||||
String currentContextId = GCubeClientContext.getCurrentContextId();
|
||||
StringBuilder url = new StringBuilder();
|
||||
url.append(GWT.getModuleBaseURL());
|
||||
url.append(Constants.DOWNLOAD_FILE_SERVLET + "/" + itemDescription.getName() + "?itemId="
|
||||
+ itemDescription.getId() + "&" + Constants.CURR_GROUP_ID + "=" + currentContextId);
|
||||
|
||||
@Override
|
||||
public void onSuccess(String link) {
|
||||
Log.debug("Retrieved link: " + link);
|
||||
Window.open(link, itemDescription.getName(), "");
|
||||
}
|
||||
Window.open(URL.encode(url.toString()), "_blank", "");
|
||||
|
||||
});
|
||||
/*
|
||||
* Used to fix the problem of the PortalContext that lost the
|
||||
* scope
|
||||
*/
|
||||
/*
|
||||
* StatAlgoImporterServiceAsync.INSTANCE.getPublicLink(
|
||||
* itemDescription, new AsyncCallback<String>() {
|
||||
*
|
||||
* @Override public void onFailure(Throwable caught) { if
|
||||
* (caught instanceof StatAlgoImporterSessionExpiredException) {
|
||||
* eventBus.fireEvent(new
|
||||
* SessionExpiredEvent(SessionExpiredType.EXPIREDONSERVER)); }
|
||||
* else { Log.error("Error open file: " +
|
||||
* caught.getLocalizedMessage()); UtilsGXT3.alert("Error",
|
||||
* caught.getLocalizedMessage()); } caught.printStackTrace();
|
||||
*
|
||||
* }
|
||||
*
|
||||
* @Override public void onSuccess(String link) {
|
||||
* Log.debug("Retrieved link: " + link); Window.open(link,
|
||||
* itemDescription.getName(), ""); }
|
||||
*
|
||||
* });
|
||||
*/
|
||||
|
||||
}
|
||||
} else {
|
||||
UtilsGXT3.info("Attention", "Select a file!");
|
||||
}
|
||||
|
|
|
@ -0,0 +1,123 @@
|
|||
package org.gcube.portlets.user.statisticalalgorithmsimporter.server;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.OutputStream;
|
||||
import java.nio.ByteBuffer;
|
||||
import java.nio.channels.Channels;
|
||||
import java.nio.channels.ReadableByteChannel;
|
||||
import java.nio.channels.WritableByteChannel;
|
||||
|
||||
import javax.servlet.ServletException;
|
||||
import javax.servlet.http.HttpServlet;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import javax.servlet.http.HttpSession;
|
||||
|
||||
import org.gcube.portlets.user.statisticalalgorithmsimporter.server.storage.FilesStorage;
|
||||
import org.gcube.portlets.user.statisticalalgorithmsimporter.server.util.ServiceCredentials;
|
||||
import org.gcube.portlets.user.statisticalalgorithmsimporter.shared.Constants;
|
||||
import org.gcube.portlets.user.statisticalalgorithmsimporter.shared.exception.StatAlgoImporterServiceException;
|
||||
import org.gcube.portlets.user.statisticalalgorithmsimporter.shared.workspace.ItemDescription;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
/**
|
||||
* Download Servlet
|
||||
*
|
||||
* @author Giancarlo Panichi
|
||||
*
|
||||
*
|
||||
*/
|
||||
public class DownloadFileServlet extends HttpServlet {
|
||||
|
||||
private static final long serialVersionUID = 5389118370656932343L;
|
||||
|
||||
private static Logger logger = LoggerFactory.getLogger(DownloadFileServlet.class);
|
||||
|
||||
public DownloadFileServlet() {
|
||||
super();
|
||||
}
|
||||
|
||||
/**
|
||||
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
|
||||
* response)
|
||||
*/
|
||||
protected void doGet(HttpServletRequest request, HttpServletResponse response)
|
||||
throws ServletException, IOException {
|
||||
createResponse(request, response);
|
||||
}
|
||||
|
||||
/**
|
||||
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
|
||||
* response)
|
||||
*/
|
||||
protected void doPost(HttpServletRequest request, HttpServletResponse response)
|
||||
throws ServletException, IOException {
|
||||
createResponse(request, response);
|
||||
}
|
||||
|
||||
private void createResponse(HttpServletRequest req, HttpServletResponse resp)
|
||||
throws ServletException, IOException {
|
||||
|
||||
try {
|
||||
logger.debug("DownloadFileServlet()");
|
||||
|
||||
HttpSession session = req.getSession();
|
||||
|
||||
if (session == null) {
|
||||
logger.error("Error getting the download session, no session valid found: " + session);
|
||||
resp.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR,
|
||||
"ERROR-Error getting the user session, no session found" + session);
|
||||
return;
|
||||
}
|
||||
logger.debug("DownloadFileServlet session id: " + session.getId());
|
||||
String scopeGroupId = req.getHeader(Constants.CURR_GROUP_ID);
|
||||
if (scopeGroupId == null || scopeGroupId.isEmpty()) {
|
||||
scopeGroupId = req.getParameter(Constants.CURR_GROUP_ID);
|
||||
if (scopeGroupId == null || scopeGroupId.isEmpty()) {
|
||||
logger.error(
|
||||
"CURR_GROUP_ID is null, it is a mandatory parameter in custom servlet: " + scopeGroupId);
|
||||
throw new ServletException(
|
||||
"CURR_GROUP_ID is null, it is a mandatory parameter in custom servlet: " + scopeGroupId);
|
||||
}
|
||||
}
|
||||
String itemId = req.getParameter("itemId");
|
||||
logger.info("DownloadFileServlet(): [scopeGroupId=" + scopeGroupId + ",ItemId=" + itemId + "]");
|
||||
ServiceCredentials serviceCredentials = SessionUtil.getServiceCredentials(req, scopeGroupId);
|
||||
FilesStorage filesStorage = new FilesStorage();
|
||||
ItemDescription itemDescription = filesStorage.getFileInfoOnWorkspace(serviceCredentials.getUserName(),
|
||||
itemId);
|
||||
logger.debug("Item retrieved: " + itemDescription);
|
||||
InputStream inputStream = filesStorage.getFileOnWorkspace(serviceCredentials.getUserName(), itemId);
|
||||
|
||||
resp.setHeader("Content-Disposition:", "attachment;filename=\"" + itemDescription.getName() + "\"");
|
||||
resp.setHeader("Content-Type", "application/force-download");
|
||||
resp.setHeader("Content-Length", itemDescription.getLenght());
|
||||
|
||||
stream(inputStream, resp.getOutputStream());
|
||||
} catch (StatAlgoImporterServiceException e) {
|
||||
logger.error("DownloadFileServlet():"+e.getLocalizedMessage(), e);
|
||||
throw new ServletException(e.getLocalizedMessage(), e);
|
||||
} catch (Throwable e) {
|
||||
logger.error("DownloadFileServlet(): " + e.getLocalizedMessage(), e);
|
||||
throw new ServletException("Download:" + e.getLocalizedMessage(), e);
|
||||
}
|
||||
}
|
||||
|
||||
private long stream(InputStream input, OutputStream output) throws IOException {
|
||||
try (ReadableByteChannel inputChannel = Channels.newChannel(input);
|
||||
WritableByteChannel outputChannel = Channels.newChannel(output);) {
|
||||
ByteBuffer buffer = ByteBuffer.allocateDirect(10240);
|
||||
long size = 0;
|
||||
|
||||
while (inputChannel.read(buffer) != -1) {
|
||||
buffer.flip();
|
||||
size += outputChannel.write(buffer);
|
||||
buffer.clear();
|
||||
}
|
||||
|
||||
return size;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,111 @@
|
|||
package org.gcube.portlets.user.statisticalalgorithmsimporter.server;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.OutputStream;
|
||||
import java.nio.file.Files;
|
||||
|
||||
import javax.servlet.ServletException;
|
||||
import javax.servlet.http.HttpServlet;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import javax.servlet.http.HttpSession;
|
||||
|
||||
import org.apache.commons.io.IOUtils;
|
||||
import org.gcube.portlets.user.statisticalalgorithmsimporter.server.storage.FilesStorage;
|
||||
import org.gcube.portlets.user.statisticalalgorithmsimporter.server.util.ServiceCredentials;
|
||||
import org.gcube.portlets.user.statisticalalgorithmsimporter.shared.Constants;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Giancarlo Panichi
|
||||
*
|
||||
*
|
||||
* Download Folder Servlet
|
||||
*
|
||||
*/
|
||||
public class DownloadFolderServlet extends HttpServlet {
|
||||
private static final long serialVersionUID = -1838255772767180518L;
|
||||
private static Logger logger = LoggerFactory.getLogger(DownloadFolderServlet.class);
|
||||
|
||||
|
||||
public DownloadFolderServlet() {
|
||||
super();
|
||||
}
|
||||
|
||||
/**
|
||||
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
|
||||
* response)
|
||||
*/
|
||||
protected void doGet(HttpServletRequest request, HttpServletResponse response)
|
||||
throws ServletException, IOException {
|
||||
createResponse(request, response);
|
||||
}
|
||||
|
||||
/**
|
||||
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
|
||||
* response)
|
||||
*/
|
||||
protected void doPost(HttpServletRequest request, HttpServletResponse response)
|
||||
throws ServletException, IOException {
|
||||
createResponse(request, response);
|
||||
}
|
||||
|
||||
private void createResponse(HttpServletRequest request, HttpServletResponse response)
|
||||
throws ServletException, IOException {
|
||||
try {
|
||||
logger.debug("DownloadFolderServlet");
|
||||
|
||||
HttpSession session = request.getSession();
|
||||
|
||||
if (session == null) {
|
||||
logger.error("Error getting the session, no session valid found: " + session);
|
||||
response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR,
|
||||
"ERROR-Error getting the user session, no session found " + session);
|
||||
return;
|
||||
}
|
||||
logger.debug("DownloadFolderServlet session id: " + session.getId());
|
||||
|
||||
ServiceCredentials serviceCredentials;
|
||||
|
||||
String scopeGroupId = request.getHeader(Constants.CURR_GROUP_ID);
|
||||
if (scopeGroupId == null || scopeGroupId.isEmpty()) {
|
||||
scopeGroupId = request.getParameter(Constants.CURR_GROUP_ID);
|
||||
if (scopeGroupId == null || scopeGroupId.isEmpty()) {
|
||||
logger.error(
|
||||
"CURR_GROUP_ID is null, it is a mandatory parameter in custom servlet: " + scopeGroupId);
|
||||
throw new ServletException(
|
||||
"CURR_GROUP_ID is null, it is a mandatory parameter in custom servlet: " + scopeGroupId);
|
||||
}
|
||||
}
|
||||
|
||||
serviceCredentials = SessionUtil.getServiceCredentials(request, scopeGroupId);
|
||||
|
||||
String itemId = request.getParameter(Constants.DOWNLOAD_FOLDER_SERVLET_ITEM_ID_PARAMETER);
|
||||
String folderName = request.getParameter(Constants.DOWNLOAD_FOLDER_SERVLET_FOLDER_NAME_PARAMETER);
|
||||
logger.debug("Request: [itemId=" + itemId + ", folderName=" + folderName + "]");
|
||||
FilesStorage filesStorage = new FilesStorage();
|
||||
File tmpZip = filesStorage.zipFolder(serviceCredentials.getUserName(), itemId);
|
||||
|
||||
response.setHeader("Content-Disposition", "attachment; filename=\"" + folderName + ".zip\"");
|
||||
response.setContentType("application/zip");
|
||||
response.setHeader("Content-Length", String.valueOf(tmpZip.length()));
|
||||
|
||||
try (OutputStream out = response.getOutputStream();FileInputStream fileTmpZip = new FileInputStream(tmpZip)){
|
||||
IOUtils.copy(fileTmpZip, response.getOutputStream());
|
||||
}
|
||||
|
||||
Files.delete(tmpZip.toPath());
|
||||
return;
|
||||
|
||||
} catch (Throwable e) {
|
||||
logger.error("Error in DownloadFolderServlet: " + e.getLocalizedMessage(), e);
|
||||
throw new ServletException("Download:" + e.getLocalizedMessage(), e);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -50,7 +50,7 @@ public class WPS4RParser {
|
|||
logger.debug("MainCode: " + project.getMainCode());
|
||||
ItemDescription mainCode = project.getMainCode().getItemDescription();
|
||||
FilesStorage fileStorage = new FilesStorage();
|
||||
InputStream is = fileStorage.retrieveItemOnWorkspace(serviceCredentials.getUserName(), mainCode.getId());
|
||||
InputStream is = fileStorage.getFileOnWorkspace(serviceCredentials.getUserName(), mainCode.getId());
|
||||
logger.debug("MainCode InputStream: " + is);
|
||||
|
||||
Path tempFile = null;
|
||||
|
|
|
@ -117,7 +117,7 @@ public class CodeReader {
|
|||
|
||||
code = new ArrayList<CodeData>();
|
||||
FilesStorage filesStorage = new FilesStorage();
|
||||
InputStream is = filesStorage.retrieveItemOnWorkspace(serviceCredentials.getUserName(), itemId);
|
||||
InputStream is = filesStorage.getFileOnWorkspace(serviceCredentials.getUserName(), itemId);
|
||||
|
||||
InputStreamReader isr = new InputStreamReader(is);
|
||||
|
||||
|
|
|
@ -259,7 +259,7 @@ public class InfoGenerator {
|
|||
public InfoData readInfo() throws StatAlgoImporterServiceException {
|
||||
ItemDescription infoItem = project.getProjectTarget().getProjectCompile().getIntegrationInfo();
|
||||
FilesStorage filesStorage = new FilesStorage();
|
||||
InputStream inputStream = filesStorage.retrieveItemOnWorkspace(serviceCredentials.getUserName(),
|
||||
InputStream inputStream = filesStorage.getFileOnWorkspace(serviceCredentials.getUserName(),
|
||||
infoItem.getId());
|
||||
Reader inputReader = new InputStreamReader(inputStream);
|
||||
BufferedReader br = new BufferedReader(inputReader);
|
||||
|
|
|
@ -183,26 +183,26 @@ public class ProjectBuilder {
|
|||
filesStorage.saveInputStreamInItem(serviceCredentials.getUserName(),
|
||||
project.getProjectTarget().getProjectDeploy().getPackageProject().getId(), inputStream);
|
||||
|
||||
ItemDescription packageProjectItemDescription = filesStorage.retrieveItemInfoOnWorkspace(
|
||||
ItemDescription packageProjectItemDescription = filesStorage.getFileInfoOnWorkspace(
|
||||
serviceCredentials.getUserName(),
|
||||
project.getProjectTarget().getProjectDeploy().getPackageProject().getId());
|
||||
|
||||
String pLink = filesStorage.getPublicLink(serviceCredentials.getUserName(),
|
||||
project.getProjectTarget().getProjectDeploy().getPackageProject().getId());
|
||||
packageProjectItemDescription.setPublicLink(pLink);
|
||||
|
||||
project.getProjectTarget().getProjectDeploy().setPackageProject(packageProjectItemDescription);
|
||||
logger.debug("ProjectDeploy: " + project.getProjectTarget().getProjectDeploy());
|
||||
|
||||
|
||||
try {
|
||||
inputStream.close();
|
||||
} catch (IOException e) {
|
||||
logger.error("Error in input stream close: " + e.getLocalizedMessage(), e);
|
||||
}
|
||||
|
||||
|
||||
if(projectPackageFile!=null&&projectPackageFile.exists()){
|
||||
if (projectPackageFile != null && projectPackageFile.exists()) {
|
||||
projectPackageFile.delete();
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
private void createBackupOfPackageProject() throws StatAlgoImporterServiceException {
|
||||
|
@ -454,18 +454,17 @@ public class ProjectBuilder {
|
|||
|
||||
logger.debug("ProjectPackageItem:" + packageUrl);
|
||||
project.getProjectTarget().getProjectDeploy().setPackageProject(packageUrl);
|
||||
|
||||
|
||||
try {
|
||||
inputStream.close();
|
||||
} catch (IOException e) {
|
||||
logger.error("Error in input stream close: " + e.getLocalizedMessage(), e);
|
||||
}
|
||||
|
||||
|
||||
if(projectPackageFile!=null&&projectPackageFile.exists()){
|
||||
if (projectPackageFile != null && projectPackageFile.exists()) {
|
||||
projectPackageFile.delete();
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
private void createTargetFolder() throws StatAlgoImporterServiceException {
|
||||
|
@ -637,7 +636,6 @@ public class ProjectBuilder {
|
|||
|
||||
FilesStorage filesStorage = new FilesStorage();
|
||||
ItemDescription codeJarItemDescription;
|
||||
|
||||
|
||||
try {
|
||||
codeJarItemDescription = filesStorage.createItemOnWorkspace(serviceCredentials.getUserName(),
|
||||
|
|
|
@ -439,7 +439,7 @@ public class FilesStorage {
|
|||
* Exception
|
||||
*
|
||||
*/
|
||||
public InputStream retrieveProjectItemOnWorkspace(String user, String folderId)
|
||||
public InputStream getProjectItemOnWorkspace(String user, String folderId)
|
||||
throws StatAlgoImporterServiceException {
|
||||
try {
|
||||
logger.info("Retrieve project item on workspace: [user=" + user + ", folderId=" + folderId + "]");
|
||||
|
@ -456,9 +456,9 @@ public class FilesStorage {
|
|||
ItemContainer<? extends Item> itemContainer = itemsContainer.get(0);
|
||||
logger.debug("ItemContainer: " + itemContainer);
|
||||
if (itemContainer != null) {
|
||||
logger.debug("Item Id: "+itemContainer.get().getId());
|
||||
logger.debug("Item Id: " + itemContainer.get().getId());
|
||||
StreamDescriptor streamDescr = itemContainer.download();
|
||||
logger.debug("Stream Descriptor: "+streamDescr);
|
||||
logger.debug("Stream Descriptor: " + streamDescr);
|
||||
return streamDescr.getStream();
|
||||
} else {
|
||||
logger.debug("No project found in this folder!");
|
||||
|
@ -521,19 +521,17 @@ public class FilesStorage {
|
|||
* @throws StatAlgoImporterServiceException
|
||||
* Exception
|
||||
*/
|
||||
public ItemDescription retrieveItemInfoOnWorkspace(String user, String itemId)
|
||||
public ItemDescription getItemInfoOnWorkspace(String user, String itemId)
|
||||
throws StatAlgoImporterServiceException {
|
||||
try {
|
||||
logger.info("Retrieve item info on workspace: [user=" + user + ", itemId=" + itemId + "]");
|
||||
StorageHubClient shc = new StorageHubClient();
|
||||
OpenResolver openResolver = shc.open(itemId);
|
||||
|
||||
FileContainer fileContainer = openResolver.asFile();
|
||||
AbstractFileItem item = fileContainer.get();
|
||||
ItemContainer<Item> fileContainer = openResolver.asItem();
|
||||
Item item = fileContainer.get();
|
||||
ItemDescription itemDescription = new ItemDescription(item.getId(), item.getName(), item.getOwner(),
|
||||
item.getPath(), item.getClass().getSimpleName());
|
||||
itemDescription.setPublicLink(fileContainer.getPublicLink().toString());
|
||||
|
||||
return itemDescription;
|
||||
|
||||
} catch (Throwable e) {
|
||||
|
@ -542,6 +540,36 @@ public class FilesStorage {
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param user
|
||||
* User
|
||||
* @param itemId
|
||||
* Item id
|
||||
* @return Input stream
|
||||
* @throws StatAlgoImporterServiceException
|
||||
* Excetpion
|
||||
*/
|
||||
public InputStream getItemOnWorkspace(String user, String itemId) throws StatAlgoImporterServiceException {
|
||||
|
||||
try {
|
||||
logger.info("Get item on workspace: [user=" + user + ", itemId=" + itemId + "]");
|
||||
|
||||
StorageHubClient shc = new StorageHubClient();
|
||||
|
||||
StreamDescriptor streamDescr = shc.open(itemId).asItem().download();
|
||||
|
||||
InputStream is = streamDescr.getStream();
|
||||
return is;
|
||||
|
||||
} catch (Throwable e) {
|
||||
logger.error("Get item on workspace: " + e.getLocalizedMessage(), e);
|
||||
|
||||
throw new StatAlgoImporterServiceException(e.getLocalizedMessage());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* @param user
|
||||
|
@ -552,7 +580,40 @@ public class FilesStorage {
|
|||
* @throws StatAlgoImporterServiceException
|
||||
* Exception
|
||||
*/
|
||||
public ItemDescription retrieveFolderInfoOnWorkspace(String user, String itemId)
|
||||
public ItemDescription getFileInfoOnWorkspace(String user, String itemId)
|
||||
throws StatAlgoImporterServiceException {
|
||||
try {
|
||||
logger.info("Retrieve file info on workspace: [user=" + user + ", itemId=" + itemId + "]");
|
||||
StorageHubClient shc = new StorageHubClient();
|
||||
OpenResolver openResolver = shc.open(itemId);
|
||||
|
||||
FileContainer fileContainer = openResolver.asFile();
|
||||
AbstractFileItem item = fileContainer.get();
|
||||
ItemDescription itemDescription = new ItemDescription(item.getId(), item.getName(), item.getOwner(),
|
||||
item.getPath(), item.getClass().getSimpleName());
|
||||
itemDescription.setMimeType(item.getContent().getMimeType());
|
||||
itemDescription.setLenght(String.valueOf(item.getContent().getSize()));
|
||||
return itemDescription;
|
||||
|
||||
} catch (Throwable e) {
|
||||
logger.error("Retrieve file info on workspace: " + e.getLocalizedMessage(), e);
|
||||
throw new StatAlgoImporterServiceException(e.getLocalizedMessage());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* @param user
|
||||
* User
|
||||
* @param itemId
|
||||
* Item id
|
||||
* @return Item description
|
||||
* @throws StatAlgoImporterServiceException
|
||||
* Exception
|
||||
*/
|
||||
public ItemDescription getFolderInfoOnWorkspace(String user, String itemId)
|
||||
throws StatAlgoImporterServiceException {
|
||||
|
||||
try {
|
||||
|
@ -582,10 +643,10 @@ public class FilesStorage {
|
|||
* @throws StatAlgoImporterServiceException
|
||||
* Excetpion
|
||||
*/
|
||||
public InputStream retrieveItemOnWorkspace(String user, String itemId) throws StatAlgoImporterServiceException {
|
||||
public InputStream getFileOnWorkspace(String user, String itemId) throws StatAlgoImporterServiceException {
|
||||
|
||||
try {
|
||||
logger.info("Retrieve item on workspace: [user=" + user + ", itemId=" + itemId + "]");
|
||||
logger.info("Retrieve file on workspace: [user=" + user + ", itemId=" + itemId + "]");
|
||||
|
||||
StorageHubClient shc = new StorageHubClient();
|
||||
|
||||
|
@ -595,7 +656,7 @@ public class FilesStorage {
|
|||
return is;
|
||||
|
||||
} catch (Throwable e) {
|
||||
logger.error("Retieve item on workspace: " + e.getLocalizedMessage(), e);
|
||||
logger.error("Retieve file on workspace: " + e.getLocalizedMessage(), e);
|
||||
|
||||
throw new StatAlgoImporterServiceException(e.getLocalizedMessage());
|
||||
}
|
||||
|
|
|
@ -23,8 +23,7 @@ import org.slf4j.LoggerFactory;
|
|||
*/
|
||||
public class ProjectArchiver {
|
||||
|
||||
public static final Logger logger = LoggerFactory
|
||||
.getLogger(ProjectArchiver.class);
|
||||
public static final Logger logger = LoggerFactory.getLogger(ProjectArchiver.class);
|
||||
|
||||
public static void archive(Project project, ServiceCredentials serviceCredentials)
|
||||
throws StatAlgoImporterServiceException {
|
||||
|
@ -35,56 +34,48 @@ public class ProjectArchiver {
|
|||
xmlEncoder.close();
|
||||
logger.debug("Archived:" + byteArrayOutputStream);
|
||||
|
||||
ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(
|
||||
byteArrayOutputStream.toByteArray());
|
||||
ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(byteArrayOutputStream.toByteArray());
|
||||
FilesStorage filesStorage = new FilesStorage();
|
||||
filesStorage.saveStatisticalAlgorithmProject(serviceCredentials.getUserName(),
|
||||
byteArrayInputStream, project.getProjectFolder()
|
||||
.getFolder().getId());
|
||||
filesStorage.saveStatisticalAlgorithmProject(serviceCredentials.getUserName(), byteArrayInputStream,
|
||||
project.getProjectFolder().getFolder().getId());
|
||||
|
||||
}
|
||||
|
||||
public static boolean existProjectInFolder(
|
||||
ItemDescription newProjectFolder, ServiceCredentials serviceCredentials)
|
||||
public static boolean existProjectInFolder(ItemDescription newProjectFolder, ServiceCredentials serviceCredentials)
|
||||
throws StatAlgoImporterServiceException {
|
||||
FilesStorage filesStorage = new FilesStorage();
|
||||
return filesStorage.existProjectItemOnWorkspace(
|
||||
serviceCredentials.getUserName(), newProjectFolder.getId());
|
||||
return filesStorage.existProjectItemOnWorkspace(serviceCredentials.getUserName(), newProjectFolder.getId());
|
||||
|
||||
}
|
||||
|
||||
public static Project readProject(ItemDescription newProjectFolder,
|
||||
ServiceCredentials serviceCredentials) throws StatAlgoImporterServiceException {
|
||||
public static Project readProject(ItemDescription newProjectFolder, ServiceCredentials serviceCredentials)
|
||||
throws StatAlgoImporterServiceException {
|
||||
FilesStorage filesStorage = new FilesStorage();
|
||||
InputStream inputStream = filesStorage.retrieveProjectItemOnWorkspace(
|
||||
serviceCredentials.getUserName(), newProjectFolder.getId());
|
||||
InputStream inputStream = filesStorage.getProjectItemOnWorkspace(serviceCredentials.getUserName(),
|
||||
newProjectFolder.getId());
|
||||
|
||||
XMLDecoder xmlDecoder = new XMLDecoder(inputStream);
|
||||
Project project = (Project) xmlDecoder.readObject();
|
||||
xmlDecoder.close();
|
||||
|
||||
newProjectFolder = filesStorage
|
||||
.retrieveFolderInfoOnWorkspace(serviceCredentials.getUserName(),
|
||||
newProjectFolder.getId());
|
||||
|
||||
if (project != null
|
||||
&& project.getProjectFolder() != null
|
||||
&& newProjectFolder.compareInfo(project.getProjectFolder()
|
||||
.getFolder())) {
|
||||
newProjectFolder = filesStorage.getFolderInfoOnWorkspace(serviceCredentials.getUserName(),
|
||||
newProjectFolder.getId());
|
||||
|
||||
if (project != null && project.getProjectFolder() != null
|
||||
&& newProjectFolder.compareInfo(project.getProjectFolder().getFolder())) {
|
||||
|
||||
} else {
|
||||
project.setProjectFolder(new ProjectFolder(newProjectFolder));
|
||||
archive(project, serviceCredentials);
|
||||
}
|
||||
|
||||
if (project != null && project.getMainCode() != null
|
||||
&& project.getMainCode().getItemDescription() != null) {
|
||||
ItemDescription newMainCodeItemDescription = filesStorage
|
||||
.retrieveItemInfoOnWorkspace(serviceCredentials.getUserName(),
|
||||
project.getMainCode().getItemDescription().getId());
|
||||
|
||||
if (newMainCodeItemDescription.compareInfo(project.getMainCode()
|
||||
.getItemDescription())) {
|
||||
if (project != null && project.getMainCode() != null && project.getMainCode().getItemDescription() != null) {
|
||||
ItemDescription newMainCodeItemDescription = filesStorage.getFileInfoOnWorkspace(
|
||||
serviceCredentials.getUserName(), project.getMainCode().getItemDescription().getId());
|
||||
String pLink = filesStorage.getPublicLink(serviceCredentials.getUserName(),
|
||||
project.getMainCode().getItemDescription().getId());
|
||||
newMainCodeItemDescription.setPublicLink(pLink);
|
||||
if (newMainCodeItemDescription.compareInfo(project.getMainCode().getItemDescription())) {
|
||||
} else {
|
||||
project.setMainCode(new MainCode(newMainCodeItemDescription));
|
||||
archive(project, serviceCredentials);
|
||||
|
|
|
@ -135,7 +135,7 @@ public class ServiceCredentials implements Serializable {
|
|||
+ fullName + ", name=" + name + ", lastName=" + lastName
|
||||
+ ", email=" + email + ", scope=" + scope + ", groupId="
|
||||
+ groupId + ", groupName=" + groupName + ", userAvatarURL="
|
||||
+ userAvatarURL + ", token=" + token + "]";
|
||||
+ userAvatarURL + "]";
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -27,14 +27,21 @@ public class Constants {
|
|||
|
||||
// Session
|
||||
public static final String CURR_GROUP_ID = "CURR_GROUP_ID";
|
||||
public static final String CURR_USER_ID = "CURR_USER_ID";
|
||||
|
||||
// Download
|
||||
public static final String DOWNLOAD_FILE_SERVLET = "DownloadFileServlet";
|
||||
|
||||
public static final String DOWNLOAD_FOLDER_SERVLET = "DownloadFolderServlet";
|
||||
public static final String DOWNLOAD_FOLDER_SERVLET_ITEM_ID_PARAMETER = "itemId";
|
||||
public static final String DOWNLOAD_FOLDER_SERVLET_FOLDER_NAME_PARAMETER = "folderName";
|
||||
|
||||
// Upload
|
||||
public static final String LOCAL_UPLOAD_SERVLET = "LocalUploadServlet";
|
||||
|
||||
|
||||
// IS Resource
|
||||
public static final String SAI_NAME = "SAIProfile";
|
||||
public static final String SAI_CATEGORY = "SAI";
|
||||
|
||||
|
||||
public static final String SOCIAL_NETWORKING_NAME = "SocialNetworking";
|
||||
public static final String SOCIAL_NETWORKING_CLASS = "Portal";
|
||||
|
||||
|
@ -44,9 +51,8 @@ public class Constants {
|
|||
// Main Generator
|
||||
public static final String PRE_INSTALLED = "Pre-Installed";
|
||||
public static final String REMOTE_TEMPLATE_FILE = "http://svn.research-infrastructures.eu/public/d4science/gcube/trunk/data-analysis/RConfiguration/RD4SFunctions/SAITemplateForExternalInvocation.R";
|
||||
|
||||
|
||||
// DataMiner Pool Manager
|
||||
public static final int CLIENT_MONITOR_PERIODMILLIS = 2000;
|
||||
|
||||
|
||||
}
|
||||
|
|
|
@ -18,13 +18,14 @@ public class ItemDescription implements Serializable {
|
|||
private String path;
|
||||
private String type;
|
||||
private String publicLink;
|
||||
private String mimeType;
|
||||
private String lenght;
|
||||
|
||||
public ItemDescription() {
|
||||
super();
|
||||
}
|
||||
|
||||
public ItemDescription(String id, String name, String owner, String path,
|
||||
String type) {
|
||||
public ItemDescription(String id, String name, String owner, String path, String type) {
|
||||
super();
|
||||
this.id = id;
|
||||
this.name = name;
|
||||
|
@ -81,21 +82,35 @@ public class ItemDescription implements Serializable {
|
|||
this.publicLink = publicLink;
|
||||
}
|
||||
|
||||
|
||||
public boolean compareInfo(ItemDescription itemDescription){
|
||||
if(itemDescription!=null && id.compareTo(itemDescription.getId())==0){
|
||||
public String getMimeType() {
|
||||
return mimeType;
|
||||
}
|
||||
|
||||
public void setMimeType(String mimeType) {
|
||||
this.mimeType = mimeType;
|
||||
}
|
||||
|
||||
public String getLenght() {
|
||||
return lenght;
|
||||
}
|
||||
|
||||
public void setLenght(String lenght) {
|
||||
this.lenght = lenght;
|
||||
}
|
||||
|
||||
public boolean compareInfo(ItemDescription itemDescription) {
|
||||
if (itemDescription != null && id.compareTo(itemDescription.getId()) == 0) {
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "ItemDescription [id=" + id + ", name=" + name + ", owner="
|
||||
+ owner + ", path=" + path + ", type=" + type + ", publicLink="
|
||||
+ publicLink + "]";
|
||||
return "ItemDescription [id=" + id + ", name=" + name + ", owner=" + owner + ", path=" + path + ", type=" + type
|
||||
+ ", publicLink=" + publicLink + ", mimeType=" + mimeType + ", lenght=" + lenght + "]";
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -24,6 +24,18 @@
|
|||
<servlet-class>org.gcube.portlets.user.statisticalalgorithmsimporter.server.LocalUploadServlet</servlet-class>
|
||||
</servlet>
|
||||
|
||||
<!-- Download -->
|
||||
<servlet>
|
||||
<servlet-name>DownloadFileServlet</servlet-name>
|
||||
<servlet-class>org.gcube.portlets.user.statisticalalgorithmsimporter.server.DownloadFileServlet</servlet-class>
|
||||
</servlet>
|
||||
<servlet>
|
||||
<servlet-name>DownloadFolderServlet</servlet-name>
|
||||
<servlet-class>org.gcube.portlets.user.statisticalalgorithmsimporter.server.DownloadFolderServlet</servlet-class>
|
||||
</servlet>
|
||||
|
||||
|
||||
|
||||
<!-- Workspace Explorer -->
|
||||
<servlet>
|
||||
<servlet-name>workspaceExplorer</servlet-name>
|
||||
|
@ -40,13 +52,13 @@
|
|||
<servlet-name>workspaceUploadServletStream</servlet-name>
|
||||
<servlet-class>org.gcube.portlets.widgets.workspaceuploader.server.WorkspaceUploadServletStream</servlet-class>
|
||||
</servlet>
|
||||
|
||||
<!-- -->
|
||||
|
||||
<!-- -->
|
||||
<servlet>
|
||||
<servlet-name>GitHubConnectorServlet</servlet-name>
|
||||
<servlet-class>org.gcube.portlets.widgets.githubconnector.server.GitHubConnectorServiceImpl</servlet-class>
|
||||
</servlet>
|
||||
|
||||
|
||||
|
||||
|
||||
<!-- Servlets Mapping -->
|
||||
|
@ -63,11 +75,22 @@
|
|||
<url-pattern>/statalgoimporter/statalgoimporterservice</url-pattern>
|
||||
</servlet-mapping>
|
||||
|
||||
<!-- Local Upload -->
|
||||
<!-- Upload -->
|
||||
<servlet-mapping>
|
||||
<servlet-name>LocalUploadServlet</servlet-name>
|
||||
<url-pattern>/statalgoimporter/LocalUploadServlet</url-pattern>
|
||||
</servlet-mapping>
|
||||
|
||||
<!-- Download -->
|
||||
<servlet-mapping>
|
||||
<servlet-name>DownloadFileServlet</servlet-name>
|
||||
<url-pattern>/statalgoimporter/DownloadFileServlet/*</url-pattern>
|
||||
</servlet-mapping>
|
||||
<servlet-mapping>
|
||||
<servlet-name>DownloadFolderServlet</servlet-name>
|
||||
<url-pattern>/statalgoimporter/DownloadFolderServlet</url-pattern>
|
||||
</servlet-mapping>
|
||||
|
||||
|
||||
<!-- Workspace Explorer -->
|
||||
<servlet-mapping>
|
||||
|
@ -86,14 +109,14 @@
|
|||
<servlet-name>workspaceUploadServletStream</servlet-name>
|
||||
<url-pattern>/statalgoimporter/workspaceUploadServletStream</url-pattern>
|
||||
</servlet-mapping>
|
||||
|
||||
|
||||
|
||||
|
||||
<!-- Github Connector -->
|
||||
<servlet-mapping>
|
||||
<servlet-name>GitHubConnectorServlet</servlet-name>
|
||||
<url-pattern>/statalgoimporter/githubconnectorservice</url-pattern>
|
||||
</servlet-mapping>
|
||||
|
||||
|
||||
|
||||
<!-- Default page to serve -->
|
||||
<welcome-file-list>
|
||||
|
|
Loading…
Reference in New Issue