518 lines
16 KiB
Java
518 lines
16 KiB
Java
package org.gcube.portlets.user.dataminermanager.server;
|
|
|
|
import java.io.InputStream;
|
|
import java.net.URL;
|
|
import java.util.ArrayList;
|
|
import java.util.LinkedHashMap;
|
|
import java.util.List;
|
|
import java.util.Map;
|
|
|
|
import javax.servlet.ServletException;
|
|
import javax.servlet.http.HttpSession;
|
|
|
|
import org.gcube.application.framework.accesslogger.library.impl.AccessLogger;
|
|
import org.gcube.application.framework.core.session.ASLSession;
|
|
import org.gcube.common.homelibrary.home.HomeLibrary;
|
|
import org.gcube.common.homelibrary.home.workspace.Workspace;
|
|
import org.gcube.common.homelibrary.home.workspace.WorkspaceFolder;
|
|
import org.gcube.common.homelibrary.home.workspace.WorkspaceItem;
|
|
import org.gcube.common.homelibrary.home.workspace.exceptions.ItemAlreadyExistException;
|
|
import org.gcube.common.homelibrary.util.WorkspaceUtil;
|
|
import org.gcube.portlets.user.dataminermanager.client.bean.ComputationStatus;
|
|
import org.gcube.portlets.user.dataminermanager.client.bean.Operator;
|
|
import org.gcube.portlets.user.dataminermanager.client.bean.OperatorsClassification;
|
|
import org.gcube.portlets.user.dataminermanager.client.bean.ResourceItem;
|
|
import org.gcube.portlets.user.dataminermanager.client.bean.output.ImagesResource;
|
|
import org.gcube.portlets.user.dataminermanager.client.bean.output.MapResource;
|
|
import org.gcube.portlets.user.dataminermanager.client.bean.output.Resource;
|
|
import org.gcube.portlets.user.dataminermanager.client.bean.parameters.Parameter;
|
|
import org.gcube.portlets.user.dataminermanager.client.rpc.DataMinerPortletService;
|
|
import org.gcube.portlets.user.dataminermanager.server.smservice.SClient;
|
|
import org.gcube.portlets.user.dataminermanager.server.util.DataMinerWorkAreaManager;
|
|
import org.gcube.portlets.user.dataminermanager.server.util.SessionUtil;
|
|
import org.gcube.portlets.user.dataminermanager.server.util.StorageUtil;
|
|
import org.gcube.portlets.user.dataminermanager.server.util.TableReader;
|
|
import org.gcube.portlets.user.dataminermanager.shared.data.ComputationId;
|
|
import org.gcube.portlets.user.dataminermanager.shared.data.TableItemSimple;
|
|
import org.gcube.portlets.user.dataminermanager.shared.exception.ServiceException;
|
|
import org.gcube.portlets.user.dataminermanager.shared.session.UserInfo;
|
|
import org.gcube.portlets.user.dataminermanager.shared.workspace.DataMinerWorkArea;
|
|
import org.gcube.portlets.user.dataminermanager.shared.workspace.ItemDescription;
|
|
//import org.gcube.portlets.user.tdw.server.datasource.DataSourceFactoryRegistry;
|
|
//import org.gcube.portlets.widgets.file_dw_import_wizard.server.file.TargetRegistry;
|
|
import org.gcube.portlets.widgets.wsexplorer.shared.Item;
|
|
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 DataMinerManagerServiceImpl extends RemoteServiceServlet implements
|
|
DataMinerPortletService {
|
|
public static AccessLogger accountinglog = AccessLogger.getAccessLogger();
|
|
|
|
// private static final long CACHE_REFRESH_TIME = 30 * 60 * 1000; // 30
|
|
// minutes
|
|
|
|
|
|
// private final static String SEPARATOR = AlgorithmConfiguration
|
|
// .getListSeparator();
|
|
private static Logger logger = LoggerFactory
|
|
.getLogger(DataMinerManagerServiceImpl.class);
|
|
|
|
/**
|
|
* {@inheritDoc}
|
|
*/
|
|
@Override
|
|
public void init() throws ServletException {
|
|
super.init();
|
|
logger.info("DataMinerManager started!");
|
|
|
|
}
|
|
|
|
/**
|
|
*
|
|
* {@inheritDoc}
|
|
*
|
|
*/
|
|
@Override
|
|
public UserInfo hello() throws ServiceException {
|
|
try {
|
|
HttpSession session = this.getThreadLocalRequest().getSession();
|
|
ASLSession aslSession = SessionUtil.getASLSession(session);
|
|
UserInfo userInfo = new UserInfo(aslSession.getUsername(),
|
|
aslSession.getGroupId(), aslSession.getGroupName(),
|
|
aslSession.getScope(), aslSession.getScopeName(),
|
|
aslSession.getUserEmailAddress(),
|
|
aslSession.getUserFullName());
|
|
logger.debug("UserInfo: " + userInfo);
|
|
return userInfo;
|
|
} catch (ServiceException e) {
|
|
e.printStackTrace();
|
|
throw e;
|
|
} catch (Throwable e) {
|
|
e.printStackTrace();
|
|
logger.error("Hello(): " + e.getLocalizedMessage(), e);
|
|
throw new ServiceException(e.getLocalizedMessage());
|
|
}
|
|
|
|
}
|
|
|
|
@Override
|
|
public List<OperatorsClassification> getOperatorsClassifications()
|
|
throws Exception {
|
|
|
|
try {
|
|
HttpSession session = this.getThreadLocalRequest().getSession();
|
|
ASLSession aslSession = SessionUtil.getASLSession(session);
|
|
SClient smClient = SessionUtil.getSClient(session, aslSession);
|
|
return smClient.getOperatorsClassifications();
|
|
|
|
} catch (Throwable e) {
|
|
logger.error(
|
|
"An error occurred getting the OperatorsClassifications list",
|
|
e);
|
|
System.out
|
|
.println("An error occurred getting the OperatorsClassifications list");
|
|
e.printStackTrace();
|
|
// return null;
|
|
throw new Exception(e.getLocalizedMessage());
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public List<Parameter> getParameters(Operator operator) throws Exception {
|
|
try {
|
|
HttpSession session = this.getThreadLocalRequest().getSession();
|
|
ASLSession aslSession = SessionUtil.getASLSession(session);
|
|
|
|
SClient smClient = SessionUtil.getSClient(session, aslSession);
|
|
return smClient.getInputParameters(operator);
|
|
|
|
} catch (Throwable e) {
|
|
logger.error("Error retrieving parameters: "
|
|
+ e.getLocalizedMessage());
|
|
e.printStackTrace();
|
|
throw new Exception(e.getLocalizedMessage());
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public ComputationId startComputation(Operator operator, String computationTitle,
|
|
String computationDescription) throws Exception {
|
|
try {
|
|
HttpSession session = this.getThreadLocalRequest().getSession();
|
|
ASLSession aslSession = SessionUtil.getASLSession(session);
|
|
|
|
SClient smClient = SessionUtil.getSClient(session, aslSession);
|
|
return smClient.startComputation(operator, computationTitle,
|
|
computationDescription);
|
|
|
|
} catch (Throwable e) {
|
|
logger.error("Error in computation: " + e.getLocalizedMessage());
|
|
e.printStackTrace();
|
|
throw new Exception(e.getLocalizedMessage());
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public ComputationId resubmit(ComputationId computationId) throws ServiceException {
|
|
try {
|
|
logger.info("RESUBMIT COMPUTATION: " + computationId);
|
|
HttpSession session = this.getThreadLocalRequest().getSession();
|
|
ASLSession aslSession = SessionUtil.getASLSession(session);
|
|
|
|
SClient smClient = SessionUtil.getSClient(session, aslSession);
|
|
|
|
// String computationId =
|
|
// factory.resubmitComputation(jobItem.getId());
|
|
// return computationId;
|
|
return computationId;
|
|
} catch (Throwable e) {
|
|
logger.error("Error in resubmit: " + e.getLocalizedMessage());
|
|
e.printStackTrace();
|
|
throw new ServiceException(e.getLocalizedMessage());
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public ComputationStatus getComputationStatus(ComputationId computationId)
|
|
throws Exception {
|
|
try {
|
|
HttpSession session = this.getThreadLocalRequest().getSession();
|
|
ASLSession aslSession = SessionUtil.getASLSession(session);
|
|
|
|
SClient smClient = SessionUtil.getSClient(session, aslSession);
|
|
return smClient.getComputationStatus(computationId);
|
|
|
|
} catch (Throwable e) {
|
|
// logger.error("Error in getComputationStatus: "
|
|
// + e.getLocalizedMessage());
|
|
// e.printStackTrace();
|
|
throw new Exception(e.getLocalizedMessage());
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public List<TableItemSimple> getTableItems(List<String> templates)
|
|
throws Exception {
|
|
try {
|
|
HttpSession session = this.getThreadLocalRequest().getSession();
|
|
ASLSession aslSession = SessionUtil.getASLSession(session);
|
|
|
|
List<TableItemSimple> list = new ArrayList<TableItemSimple>();
|
|
|
|
return list;
|
|
} catch (Throwable e) {
|
|
logger.error("Error in getTableItems:" + e.getLocalizedMessage());
|
|
e.printStackTrace();
|
|
throw new Exception(e.getLocalizedMessage());
|
|
}
|
|
|
|
}
|
|
|
|
@Override
|
|
public List<TableItemSimple> getFileItems(List<String> templates)
|
|
throws Exception {
|
|
try {
|
|
HttpSession session = this.getThreadLocalRequest().getSession();
|
|
ASLSession aslSession = SessionUtil.getASLSession(session);
|
|
|
|
List<TableItemSimple> list = new ArrayList<TableItemSimple>();
|
|
|
|
return list;
|
|
} catch (Throwable e) {
|
|
logger.error("Error in getFileItems:" + e.getLocalizedMessage());
|
|
e.printStackTrace();
|
|
throw new Exception(e.getLocalizedMessage());
|
|
}
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
public Resource getResourceByComputationId(ComputationId computationId) {
|
|
try {
|
|
HttpSession session = this.getThreadLocalRequest().getSession();
|
|
ASLSession aslSession = SessionUtil.getASLSession(session);
|
|
|
|
SClient smClient = SessionUtil.getSClient(session, aslSession);
|
|
return smClient.getResourceByComputationId(computationId);
|
|
|
|
// SMComputation computation = factory.getComputation(jobId);
|
|
// JobItem jobItem = convertSMComputationToJobItem(computation,
|
|
// true);
|
|
//
|
|
// // try to add map data (if resource is an object)
|
|
//
|
|
// Resource res = jobItem.getResource();
|
|
// if (res.isMap()) {
|
|
// MapResource mapResource = (MapResource) res;
|
|
// Map<String, Resource> map = getMapFromMapResource(mapResource);
|
|
// mapResource.setMap(map);
|
|
// // jobItem.setMapData(map);
|
|
// logger.info("getResourceByJobId: " + mapResource);
|
|
//
|
|
// } else if (res.isImages()) {
|
|
// ImagesResource imgsRes = (ImagesResource) res;
|
|
// Map<String, String> map =
|
|
// getImagesInfoFromImagesResource(imgsRes);
|
|
// imgsRes.setMapImages(map);
|
|
// logger.info("getResourceByJobId: " + imgsRes);
|
|
// } else {
|
|
// logger.info("getResourceByJobId: " + res);
|
|
// }
|
|
// return res;
|
|
|
|
} catch (Exception e) {
|
|
logger.error("Error in getResourceByComputationId: "
|
|
+ e.getLocalizedMessage());// in this case the resource
|
|
// doesn't exist, nothing to do
|
|
return null;
|
|
}
|
|
|
|
}
|
|
|
|
@Override
|
|
public Map<String, String> getParametersMapByComputationId(ComputationId jobId)
|
|
throws ServiceException {
|
|
|
|
try {
|
|
HttpSession session = this.getThreadLocalRequest().getSession();
|
|
ASLSession aslSession = SessionUtil.getASLSession(session);
|
|
|
|
SClient smClient = SessionUtil.getSClient(session, aslSession);
|
|
|
|
// SMComputation computation = wpsClient.getComputation(jobId);
|
|
|
|
Map<String, String> parametersMap = new LinkedHashMap<String, String>();
|
|
|
|
// for (SMEntry entry : computation.parameters()) {
|
|
// String value = entry.value();
|
|
// if (value != null)
|
|
// value = value.replaceAll("#", ", ");
|
|
// parametersMap.put(entry.key(), value);
|
|
// }
|
|
|
|
return parametersMap;
|
|
|
|
} catch (Throwable e) {
|
|
logger.error(e.getLocalizedMessage(), e);
|
|
e.printStackTrace();
|
|
throw new ServiceException(e.getLocalizedMessage(),e);
|
|
}
|
|
|
|
}
|
|
|
|
@Override
|
|
public Map<String, Resource> getMapFromMapResource(MapResource mapRes)
|
|
throws Exception {
|
|
try {
|
|
HttpSession session = this.getThreadLocalRequest().getSession();
|
|
ASLSession aslSession = SessionUtil.getASLSession(session);
|
|
|
|
return mapRes.getMap();
|
|
} catch (Exception e) {
|
|
logger.error(e.getLocalizedMessage(), e);
|
|
// e.printStackTrace();
|
|
throw e;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
@Override
|
|
public String saveImage(ComputationId computationId, ImagesResource imagesResource)
|
|
throws Exception {
|
|
|
|
try {
|
|
HttpSession session = this.getThreadLocalRequest().getSession();
|
|
ASLSession aslSession = SessionUtil.getASLSession(session);
|
|
SClient smClient = SessionUtil.getSClient(session, aslSession);
|
|
// SMComputation computation =
|
|
// factory.gegetComputation(computationId);
|
|
// String computationName = computation.title() == null ?
|
|
// computationId
|
|
// : computation.title();
|
|
// computationName =
|
|
// FileSystemNameUtil.cleanFileName(computationName);
|
|
|
|
Workspace workspace = HomeLibrary.getUserWorkspace(aslSession
|
|
.getUsername());
|
|
WorkspaceFolder rootFolder = workspace.getRoot();
|
|
// computationName = WorkspaceUtil.getUniqueName(computationName,
|
|
// rootFolder);
|
|
|
|
// create the folder
|
|
|
|
WorkspaceFolder folder;
|
|
try {
|
|
folder = rootFolder
|
|
.createFolder(computationId.getId(),
|
|
"This folder contains images obtained from Data Miner Manager");
|
|
|
|
} catch (ItemAlreadyExistException e) {
|
|
folder = (WorkspaceFolder) rootFolder.find(computationId.getId());
|
|
}
|
|
InputStream inputStream = new URL(imagesResource.getLink())
|
|
.openStream();
|
|
|
|
WorkspaceItem wi = WorkspaceUtil.createExternalFile(folder,
|
|
imagesResource.getResourceId(),
|
|
imagesResource.getDescription(),
|
|
imagesResource.getMimeType(), inputStream);
|
|
|
|
return wi.getId();
|
|
} catch (Throwable e) {
|
|
logger.error("Error in save images: " + e.getLocalizedMessage());
|
|
e.printStackTrace();
|
|
throw (e);
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void removeResource(String id) throws Exception {
|
|
try {
|
|
HttpSession session = this.getThreadLocalRequest().getSession();
|
|
ASLSession aslSession = SessionUtil.getASLSession(session);
|
|
|
|
} catch (Exception e) {
|
|
logger.error(e.getLocalizedMessage(), e);
|
|
|
|
throw (e);
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void removeImport(String id) throws Exception {
|
|
try {
|
|
HttpSession session = this.getThreadLocalRequest().getSession();
|
|
ASLSession aslSession = SessionUtil.getASLSession(session);
|
|
|
|
} catch (Exception e) {
|
|
logger.error(e.getLocalizedMessage(), e);
|
|
e.printStackTrace();
|
|
|
|
throw (e);
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public String exportResource(String folderId, String fileName,
|
|
ResourceItem resourceItem) throws Exception {
|
|
try {
|
|
HttpSession session = this.getThreadLocalRequest().getSession();
|
|
ASLSession aslSession = SessionUtil.getASLSession(session);
|
|
|
|
String id = resourceItem.getId();
|
|
InputStream inputStream;
|
|
if (resourceItem.isTable()) {
|
|
|
|
} else
|
|
inputStream = StorageUtil
|
|
.getStorageClientInputStream(resourceItem.getUrl());
|
|
|
|
Workspace workspace = HomeLibrary.getUserWorkspace(aslSession
|
|
.getUsername());
|
|
|
|
WorkspaceFolder wsFolder = (WorkspaceFolder) workspace
|
|
.getItem(folderId);
|
|
String realFileName = WorkspaceUtil.getUniqueName(fileName,
|
|
wsFolder);
|
|
|
|
return realFileName;
|
|
|
|
} catch (Exception e) {
|
|
logger.error(e.getLocalizedMessage(), e);
|
|
throw (e);
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public TableItemSimple retrieveTableInformation(Item item)
|
|
throws ServiceException {
|
|
try {
|
|
HttpSession session = this.getThreadLocalRequest().getSession();
|
|
ASLSession aslSession = SessionUtil.getASLSession(session);
|
|
logger.debug("retrieveTableInformation(): " + item);
|
|
TableReader tableReader = new TableReader(aslSession, item);
|
|
TableItemSimple tableItemSimple = tableReader.getTableItemSimple();
|
|
return tableItemSimple;
|
|
} catch (ServiceException e) {
|
|
throw e;
|
|
} catch (Throwable e) {
|
|
logger.error(e.getLocalizedMessage(), e);
|
|
e.printStackTrace();
|
|
throw new ServiceException(e.getLocalizedMessage());
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public DataMinerWorkArea getDataMinerWorkArea() throws ServiceException {
|
|
try {
|
|
HttpSession session = this.getThreadLocalRequest().getSession();
|
|
ASLSession aslSession = SessionUtil.getASLSession(session);
|
|
logger.debug("getDataMinerWorkArea()");
|
|
DataMinerWorkAreaManager dataMinerWorkAreaManager=new DataMinerWorkAreaManager(aslSession);
|
|
return dataMinerWorkAreaManager.getDataMinerWorkArea();
|
|
|
|
} catch (ServiceException e) {
|
|
throw e;
|
|
} catch (Throwable e) {
|
|
logger.error(e.getLocalizedMessage(), e);
|
|
e.printStackTrace();
|
|
throw new ServiceException(e.getLocalizedMessage());
|
|
}
|
|
}
|
|
|
|
|
|
@Override
|
|
public String getPublicLink(ItemDescription itemDescription)
|
|
throws ServiceException {
|
|
try {
|
|
HttpSession session = this.getThreadLocalRequest().getSession();
|
|
ASLSession aslSession = SessionUtil.getASLSession(session);
|
|
logger.debug("GetPublicLink(): " + itemDescription);
|
|
String link = StorageUtil.getPublicLink(aslSession.getUsername(),
|
|
itemDescription.getId());
|
|
|
|
return link;
|
|
} catch (ServiceException e) {
|
|
throw e;
|
|
} catch (Throwable e) {
|
|
logger.error(e.getLocalizedMessage(), e);
|
|
e.printStackTrace();
|
|
throw new ServiceException(e.getLocalizedMessage());
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public String cancelComputation(ComputationId computationId)
|
|
throws ServiceException {
|
|
try {
|
|
HttpSession session = this.getThreadLocalRequest().getSession();
|
|
ASLSession aslSession = SessionUtil.getASLSession(session);
|
|
logger.debug("CancelComputation(): " + computationId);
|
|
SClient smClient = SessionUtil.getSClient(session, aslSession);
|
|
String result=smClient.cancelComputation(computationId);
|
|
|
|
return result;
|
|
} catch (ServiceException e) {
|
|
throw e;
|
|
} catch (Throwable e) {
|
|
logger.error(e.getLocalizedMessage(), e);
|
|
e.printStackTrace();
|
|
throw new ServiceException(e.getLocalizedMessage());
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|