Added support for export SDMX

git-svn-id: https://svn.d4science.research-infrastructures.eu/gcube/trunk/portlets/user/tabular-data-gwt-service@86515 82a268e6-3cf1-43bd-a215-b396298e98cf
This commit is contained in:
Giancarlo Panichi 2013-12-03 16:55:39 +00:00
parent 1a22b05b81
commit fb8f581f32
7 changed files with 297 additions and 17 deletions

View File

@ -14,6 +14,8 @@ import org.gcube.portlets.user.td.gwtservice.shared.csv.CSVRowError;
import org.gcube.portlets.user.td.gwtservice.shared.exception.TDGWTServiceException;
import org.gcube.portlets.user.td.gwtservice.shared.file.FileUploadMonitor;
import org.gcube.portlets.user.td.gwtservice.shared.file.HeaderPresence;
import org.gcube.portlets.user.td.gwtservice.shared.sdmx.SDMXExportMonitor;
import org.gcube.portlets.user.td.gwtservice.shared.sdmx.SDMXExportSession;
import org.gcube.portlets.user.td.gwtservice.shared.sdmx.SDMXImportMonitor;
import org.gcube.portlets.user.td.gwtservice.shared.sdmx.SDMXImportSession;
import org.gcube.portlets.user.td.gwtservice.shared.tr.ColumnData;
@ -27,6 +29,7 @@ import org.gcube.portlets.user.td.gwtservice.shared.tr.type.Agencies;
import org.gcube.portlets.user.td.gwtservice.shared.tr.type.Codelist;
import org.gcube.portlets.user.td.gwtservice.shared.tr.type.Dataset;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.rpc.RemoteService;
import com.google.gwt.user.client.rpc.RemoteServiceRelativePath;
@ -288,8 +291,27 @@ public interface TDGWTService extends RemoteService {
* @throws TDGWTServiceException
*/
public void startCSVExport(CSVExportSession csvExportSession) throws TDGWTServiceException;
//Export SDMX
/**
* Get Operation Monitor during the SDMX Export operation
*
* @return
* @throws TDGWTServiceException
*/
public SDMXExportMonitor getSDMXExportMonitor() throws TDGWTServiceException;
/**
* Start SDMX Export and invokes the client library
*
* @param sdmxExportSession
* @throws TDGWTServiceException
*/
public void startSDMXExport(SDMXExportSession exportSession) throws TDGWTServiceException;
}

View File

@ -13,6 +13,8 @@ import org.gcube.portlets.user.td.gwtservice.shared.csv.CSVImportSession;
import org.gcube.portlets.user.td.gwtservice.shared.csv.CSVRowError;
import org.gcube.portlets.user.td.gwtservice.shared.file.FileUploadMonitor;
import org.gcube.portlets.user.td.gwtservice.shared.file.HeaderPresence;
import org.gcube.portlets.user.td.gwtservice.shared.sdmx.SDMXExportMonitor;
import org.gcube.portlets.user.td.gwtservice.shared.sdmx.SDMXExportSession;
import org.gcube.portlets.user.td.gwtservice.shared.sdmx.SDMXImportMonitor;
import org.gcube.portlets.user.td.gwtservice.shared.sdmx.SDMXImportSession;
import org.gcube.portlets.user.td.gwtservice.shared.tr.ColumnData;
@ -97,5 +99,9 @@ public interface TDGWTServiceAsync {
void startCSVExport(CSVExportSession csvExportSession, AsyncCallback<Void> callback);
//Export SDMX
void getSDMXExportMonitor(AsyncCallback<SDMXExportMonitor> callback);
void startSDMXExport(SDMXExportSession exportSession, AsyncCallback<Void> callback);
}

View File

@ -19,6 +19,7 @@ import org.gcube.portlets.user.td.gwtservice.server.trservice.TRTasksManager;
import org.gcube.portlets.user.td.gwtservice.shared.Constants;
import org.gcube.portlets.user.td.gwtservice.shared.csv.CSVExportSession;
import org.gcube.portlets.user.td.gwtservice.shared.csv.CSVImportSession;
import org.gcube.portlets.user.td.gwtservice.shared.sdmx.SDMXExportSession;
import org.gcube.portlets.user.td.gwtservice.shared.sdmx.SDMXImportSession;
import org.gcube.portlets.user.td.gwtservice.shared.source.SDMXRegistrySource;
import org.gcube.portlets.user.td.gwtservice.shared.tr.TRId;
@ -52,17 +53,21 @@ public class SessionUtil {
protected static final String SDMX_IMPORT_TABULAR_RESOURCE = "SDMX_IMPORT_TABULAR_RESOURCE";
protected static final String SDMX_IMPORT_TASK="SDMX_IMPORT_TASK";
protected static final String SDMX_EXPORT_SESSION = "SDMX_EXPORT_SESSION";
protected static final String SDMX_EXPORT_TASK="SDMX_EXPORT_TASK";
protected static final String CSV_IMPORT_SESSION = "CSV_IMPORT";
protected static final String CSV_IMPORT_FILE_UPLOAD_SESSION = "CSV_IMPORT_FILE_UPLOAD";
protected static final String CSV_IMPORT_TASK="CSV_IMPORT_TASK";
protected static final String CSV_IMPORT_TABULAR_RESOURCE = "CSV_IMPORT_TABULAR_RESOURCE";
protected static final String CSV_EXPORT_SESSION = "CSV_EXPORT_FILE";
protected static final String CSV_EXPORT_SESSION = "CSV_EXPORT_SESSION";
protected static final String CSV_EXPORT_TASK="CSV_EXPORT_TASK";
protected static Logger logger = LoggerFactory.getLogger(SessionUtil.class);
protected static ASLSession getAslSession(HttpSession httpSession) {
@ -272,6 +277,27 @@ public class SessionUtil {
return exportSession;
}
public static void setSDMXExportSession(HttpSession httpSession,
SDMXExportSession s) {
SDMXExportSession session = (SDMXExportSession) httpSession
.getAttribute(SDMX_EXPORT_SESSION);
if (session != null)
httpSession.removeAttribute(SDMX_EXPORT_SESSION);
httpSession.setAttribute(SDMX_EXPORT_SESSION, s);
ASLSession aslSession = getAslSession(httpSession);
ScopeProvider.instance.set(aslSession.getScope().toString());
}
public static SDMXExportSession getSDMXExportSession(HttpSession httpSession) {
SDMXExportSession exportSession = (SDMXExportSession) httpSession
.getAttribute(SDMX_EXPORT_SESSION);
if (exportSession == null) {
logger.error("SDMXExportSession was not acquired");
}
return exportSession;
}
public static void setFileUploadSession(HttpSession httpSession,
FileUploadSession s) {
@ -410,7 +436,20 @@ public class SessionUtil {
httpSession.setAttribute(CSV_EXPORT_TASK, task);
}
public static Task getSDMXExportTask(HttpSession httpSession) {
Task monitor = (Task) httpSession.getAttribute(SDMX_EXPORT_TASK);
if (monitor == null) {
logger.error("SDMX_EXPORT_TASK was not acquired");
}
return monitor;
}
public static void setSDMXExportTask(HttpSession httpSession, Task task) {
Task monitor = (Task) httpSession.getAttribute(SDMX_EXPORT_TASK);
if (monitor != null)
httpSession.removeAttribute(SDMX_EXPORT_TASK);
httpSession.setAttribute(SDMX_EXPORT_TASK, task);
}
public static TRTasksManager getTRTasksManager(HttpSession httpSession) {
TRTasksManager tasksManager = (TRTasksManager) httpSession.getAttribute(TR_TASK_MANAGER);

View File

@ -77,6 +77,8 @@ import org.gcube.portlets.user.td.gwtservice.shared.exception.TDGWTServiceExcept
import org.gcube.portlets.user.td.gwtservice.shared.file.FileUploadMonitor;
import org.gcube.portlets.user.td.gwtservice.shared.file.FileUploadState;
import org.gcube.portlets.user.td.gwtservice.shared.file.HeaderPresence;
import org.gcube.portlets.user.td.gwtservice.shared.sdmx.SDMXExportMonitor;
import org.gcube.portlets.user.td.gwtservice.shared.sdmx.SDMXExportSession;
import org.gcube.portlets.user.td.gwtservice.shared.sdmx.SDMXImportMonitor;
import org.gcube.portlets.user.td.gwtservice.shared.sdmx.SDMXImportSession;
import org.gcube.portlets.user.td.gwtservice.shared.task.State;
@ -1048,17 +1050,17 @@ public class TDGWTServiceImpl extends RemoteServiceServlet implements
String fileUrlOnStorage, FileUploadSession fileUploadSession,
CSVImportSession csvImportSession) {
Map<String, Object> parameterInstances = new HashMap<String, Object>();
parameterInstances.put(Constants.URL, fileUrlOnStorage);
parameterInstances.put(Constants.SEPARATOR, String
parameterInstances.put(Constants.PARAMETER_URL, fileUrlOnStorage);
parameterInstances.put(Constants.PARAMETER_SEPARATOR, String
.valueOf(fileUploadSession.getParserConfiguration()
.getDelimiter()));// ','
parameterInstances.put(Constants.ENCODING, fileUploadSession
parameterInstances.put(Constants.PARAMETER_ENCODING, fileUploadSession
.getParserConfiguration().getCharset().name());// "UTF-8"
boolean hasHeader = true;
if (fileUploadSession.getParserConfiguration().getHeaderPresence() == HeaderPresence.NONE) {
hasHeader = false;
}
parameterInstances.put(Constants.HASHEADER, hasHeader);// true
parameterInstances.put(Constants.PARAMETER_HASHEADER, hasHeader);// true
return parameterInstances;
}
@ -1498,14 +1500,191 @@ public class TDGWTServiceImpl extends RemoteServiceServlet implements
protected Map<String, Object> csvExportFileParameter(
CSVExportSession exportSession) {
Map<String, Object> parameterInstances = new HashMap<String, Object>();
parameterInstances.put(Constants.ENCODING, exportSession.getEncoding());
parameterInstances.put(Constants.SEPARATOR,
parameterInstances.put(Constants.PARAMETER_ENCODING, exportSession.getEncoding());
parameterInstances.put(Constants.PARAMETER_SEPARATOR,
exportSession.getSeparator());
parameterInstances.put(Constants.COLUMNS,
parameterInstances.put(Constants.PARAMETER_COLUMNS,
exportSession.getColumnsAsArrayOfString());
return parameterInstances;
}
/**
*
* @param exportSession
* @return
*/
protected Map<String, Object> sdmxExportParameter(
SDMXExportSession exportSession) {
Map<String, Object> parameterInstances = new HashMap<String, Object>();
parameterInstances.put(Constants.PARAMETER_REGISTRYBASEURL, "http://pc-fortunati.isti.cnr.it:8080/FusionRegistry/ws/rest/");
parameterInstances.put(Constants.PARAMETER_AGENCY, "SDMX");
parameterInstances.put(Constants.PARAMETER_ID, "NEW_CL_DIVISION");
parameterInstances.put(Constants.PARAMETER_VERSION, "2.0");
return parameterInstances;
}
/**
*
* @param exportSession
* @return
*/
@Override
public void startSDMXExport(SDMXExportSession exportSession)
throws TDGWTServiceException {
logger.debug("Start SDMX Export");
session = this.getThreadLocalRequest().getSession();
if (session == null) {
throw new TDGWTServiceException(
"Error retrieving the session: null");
}
logger.info("Session:" + session.getId());
aslSession = SessionUtil.getAslSession(session);
if (aslSession == null) {
throw new TDGWTServiceException(
"Error retrieving the asl session: null");
}
String user = aslSession.getUsername();
logger.info("Session User:" + user);
TRId trId = SessionUtil.getTRId(session);
if (trId == null) {
throw new TDGWTServiceException(
"Error no tabular resource in session");
}
if (trId.getTableId() == null) {
throw new TDGWTServiceException("Error no table present in session");
}
SessionUtil.setSDMXExportSession(session, exportSession);
Map<String, Object> parameterInstance = sdmxExportParameter(exportSession);
logger.debug("Tabular Data Service");
service = TabularDataServiceFactory
.getService(aslSession.getUsername());
List<OperationDescriptor> capabilities = service.getCapabilities();
// Export SDMX Codelist
OperationDescriptor exportSDMXOperation = getOperationDescriptorWithId(
OperationsId.SDMXCodelistExport.toString(), capabilities);
InvocationCreator ic = InvocationCreator
.getCreator(exportSDMXOperation);
OperationInvocation invocation = ic
.setTargetTable(new TableId(Long.valueOf(trId.getTableId())))
.setParameters(parameterInstance).create();
logger.debug("OperationInvocation: \n" + invocation.toString());
Task trTask;
try {
trTask = service.execute(invocation,
new TabularResourceId(Long.valueOf(trId.getId())));
} catch (Exception e) {
e.printStackTrace();
throw new TDGWTServiceException(
"Tabular Data Service error exporting TabularResource: "
+ e.getLocalizedMessage());
}
logger.debug("Start Task on service: TaskId " + trTask.getId());
SessionUtil.setSDMXExportTask(session, trTask);
}
/**
* {@inheritDoc}
*/
@Override
public SDMXExportMonitor getSDMXExportMonitor() throws TDGWTServiceException {
try {
session = this.getThreadLocalRequest().getSession();
aslSession = SessionUtil.getAslSession(session);
Task task = SessionUtil.getSDMXExportTask(session);
SDMXExportMonitor exportMonitor = new SDMXExportMonitor();
if (task == null) {
logger.debug("Task null");
throw new TDGWTServiceException("Error in exportSDMX task null");
} else {
TaskStatus status = task.getStatus();
if (status == null) {
throw new TDGWTServiceException(
"Error in exportSDMX Status null");
} else {
logger.debug("Status: " + task.getStatus());
exportMonitor.setStatus(matchTaskState(task.getStatus()));
switch (exportMonitor.getStatus()) {
case FAILED:
if (task.getResult() != null) {
logger.debug("Task exception:"
+ task.getErrorCause());
exportMonitor.setError(new Throwable(task
.getErrorCause()));
} else {
logger.debug("Task exception: Error In Export");
exportMonitor.setError(new Throwable(
"Error In Export"));
}
exportMonitor.setProgress(task.getProgress());
break;
case SUCCEDED:
logger.debug("Task Result:" + task.getResult());
exportMonitor.setProgress(task.getProgress());
Table table = task.getResult().getPrimaryTable();
logger.debug("Table retrived: " + table.toString());
ExportMetadata exportMetadata = table
.getMetadata(ExportMetadata.class);
logger.debug("ExportMetadata: " + exportMetadata);
exportMonitor.setTrId(SessionUtil.getTRId(session));
TabExportMetadata tabExportMetadata = new TabExportMetadata();
tabExportMetadata.setUrl(exportMetadata.getUri());
tabExportMetadata.setDestinationType(exportMetadata
.getDestinationType());
tabExportMetadata.setExportDate(sdf
.format(exportMetadata.getExportDate()));
exportMonitor.setTabExportMetadata(tabExportMetadata);
break;
case IN_PROGRESS:
exportMonitor.setProgress(task.getProgress());
break;
case ABORTED:
break;
case INITIALIZING:
break;
case WAITING:
break;
default:
break;
}
}
SessionUtil.setSDMXExportTask(session, task);
}
logger.info("getExportMonitor(): " + exportMonitor);
return exportMonitor;
} catch (Exception e) {
e.printStackTrace();
throw new TDGWTServiceException(
"Error in exportSDMX SDMXExportMonitor: "
+ e.getLocalizedMessage());
}
}
/**
*
* {@inheritDoc}
@ -1576,6 +1755,8 @@ public class TDGWTServiceImpl extends RemoteServiceServlet implements
SessionUtil.setCSVExportTask(session, trTask);
}
/**
* {@inheritDoc}
*/

View File

@ -16,10 +16,17 @@ public class Constants {
public final static String DEFAULT_USER = "giancarlo.panichi";
public final static String DEFAULT_SCOPE = "/gcube/devsec";
public static final String ENCODING = "encoding";
public static final String HASHEADER = "hasHeader";
public static final String SEPARATOR = "separator";
public static final String COLUMNS = "columns";
public static final String URL = "url";
public static final String PARAMETER_ENCODING = "encoding";
public static final String PARAMETER_HASHEADER = "hasHeader";
public static final String PARAMETER_SEPARATOR = "separator";
public static final String PARAMETER_COLUMNS = "columns";
public static final String PARAMETER_URL = "url";
public static final String PARAMETER_REGISTRYBASEURL ="registryBaseUrl";
public static final String PARAMETER_AGENCY ="agency";
public static final String PARAMETER_ID ="id";
public static final String PARAMETER_VERSION ="version";
}

View File

@ -3,6 +3,8 @@ package org.gcube.portlets.user.td.gwtservice.shared.sdmx;
import java.io.Serializable;
import org.gcube.portlets.user.td.gwtservice.shared.task.State;
import org.gcube.portlets.user.td.gwtservice.shared.tr.TRId;
import org.gcube.portlets.user.td.gwtservice.shared.tr.table.metadata.TabExportMetadata;
/**
@ -20,7 +22,17 @@ public class SDMXExportMonitor implements Serializable {
protected String statusDescription;
protected Throwable error;
protected String url;
protected TabExportMetadata tabExportMetadata;
protected TRId trId;
public TRId getTrId() {
return trId;
}
public void setTrId(TRId trId) {
this.trId = trId;
}
public float getProgress(){
return progress;
};
@ -65,13 +77,24 @@ public class SDMXExportMonitor implements Serializable {
this.url = url;
}
public TabExportMetadata getTabExportMetadata() {
return tabExportMetadata;
}
public void setTabExportMetadata(TabExportMetadata tabExportMetadata) {
this.tabExportMetadata = tabExportMetadata;
}
@Override
public String toString() {
return "SDMXExportMonitor [progress=" + progress + ", status=" + status
+ ", statusDescription=" + statusDescription + ", error="
+ error + ", url=" + url + "]";
+ error + ", url=" + url + ", tabExportMetadata="
+ tabExportMetadata + ", trId=" + trId + "]";
}
}

View File

@ -23,6 +23,8 @@ public class SDMXExportSession implements Serializable {
protected String id;
protected TabResource tabResource;
protected Agencies agency;
public String getId() {
return id;
}