diff --git a/src/main/java/org/gcube/portlets/user/td/gwtservice/client/rpc/TDGWTService.java b/src/main/java/org/gcube/portlets/user/td/gwtservice/client/rpc/TDGWTService.java index 30c2497..adf4c44 100644 --- a/src/main/java/org/gcube/portlets/user/td/gwtservice/client/rpc/TDGWTService.java +++ b/src/main/java/org/gcube/portlets/user/td/gwtservice/client/rpc/TDGWTService.java @@ -31,6 +31,7 @@ import org.gcube.portlets.user.td.gwtservice.shared.monitor.OperationMonitor; import org.gcube.portlets.user.td.gwtservice.shared.monitor.OperationMonitorSession; 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.sdmx.SDMXTemplateExportSession; import org.gcube.portlets.user.td.gwtservice.shared.share.ShareRule; import org.gcube.portlets.user.td.gwtservice.shared.share.ShareTabResource; import org.gcube.portlets.user.td.gwtservice.shared.share.ShareTemplate; @@ -40,6 +41,7 @@ import org.gcube.portlets.user.td.gwtservice.shared.task.TaskResubmitSession; import org.gcube.portlets.user.td.gwtservice.shared.task.TaskResumeSession; import org.gcube.portlets.user.td.gwtservice.shared.task.ValidationsTasksMetadata; import org.gcube.portlets.user.td.gwtservice.shared.template.TemplateApplySession; +import org.gcube.portlets.user.td.gwtservice.shared.template.TemplateColumnData; import org.gcube.portlets.user.td.gwtservice.shared.template.TemplateData; import org.gcube.portlets.user.td.gwtservice.shared.template.TemplateDeleteSession; import org.gcube.portlets.user.td.gwtservice.shared.tr.RefColumn; @@ -787,6 +789,20 @@ public interface TDGWTService extends RemoteService { public String startSDMXExport(SDMXExportSession exportSession) throws TDGWTServiceException; + // Export Template SDMX + /** + * + * Start SDMX Template Export and invokes the client library + * + * @param sdmxTemplateExportSession + * @return + * @throws TDGWTServiceException + */ + public String startSDMXTemplateExport( + SDMXTemplateExportSession sdmxTemplateExportSession) + throws TDGWTServiceException; + + // Export JSON /** * Start JSON Export and invokes the client library @@ -994,6 +1010,30 @@ public interface TDGWTService extends RemoteService { */ public ArrayList getTemplates() throws TDGWTServiceException; + /** + * + * Retrieves templates for export as DSD in SDMX registry. + * Template must have at least a measure column. + * + * @return + * @throws TDGWTServiceException + */ + public ArrayList getTemplatesForDSDExport() + throws TDGWTServiceException; + + + /** + * + * Retrieves the columns of the specific template. + * Template must have at least a measure column. + * + * @return + * @throws TDGWTServiceException + */ + public ArrayList getTemplateColumnsData(String templateId) + throws TDGWTServiceException; + + /** * Start Apply Template * @@ -1287,4 +1327,6 @@ public interface TDGWTService extends RemoteService { GeometryCreatePointSession geometryCreatePointSession) throws TDGWTServiceException; + + } diff --git a/src/main/java/org/gcube/portlets/user/td/gwtservice/client/rpc/TDGWTServiceAsync.java b/src/main/java/org/gcube/portlets/user/td/gwtservice/client/rpc/TDGWTServiceAsync.java index 3c4bc76..1c3abf0 100644 --- a/src/main/java/org/gcube/portlets/user/td/gwtservice/client/rpc/TDGWTServiceAsync.java +++ b/src/main/java/org/gcube/portlets/user/td/gwtservice/client/rpc/TDGWTServiceAsync.java @@ -30,6 +30,7 @@ import org.gcube.portlets.user.td.gwtservice.shared.monitor.OperationMonitor; import org.gcube.portlets.user.td.gwtservice.shared.monitor.OperationMonitorSession; 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.sdmx.SDMXTemplateExportSession; import org.gcube.portlets.user.td.gwtservice.shared.share.ShareRule; import org.gcube.portlets.user.td.gwtservice.shared.share.ShareTabResource; import org.gcube.portlets.user.td.gwtservice.shared.share.ShareTemplate; @@ -39,6 +40,7 @@ import org.gcube.portlets.user.td.gwtservice.shared.task.TaskResubmitSession; import org.gcube.portlets.user.td.gwtservice.shared.task.TaskResumeSession; import org.gcube.portlets.user.td.gwtservice.shared.task.ValidationsTasksMetadata; import org.gcube.portlets.user.td.gwtservice.shared.template.TemplateApplySession; +import org.gcube.portlets.user.td.gwtservice.shared.template.TemplateColumnData; import org.gcube.portlets.user.td.gwtservice.shared.template.TemplateData; import org.gcube.portlets.user.td.gwtservice.shared.template.TemplateDeleteSession; import org.gcube.portlets.user.td.gwtservice.shared.tr.RefColumn; @@ -295,6 +297,11 @@ public interface TDGWTServiceAsync { void startSDMXExport(SDMXExportSession exportSession, AsyncCallback callback); + // Export Template SDMX + void startSDMXTemplateExport( + SDMXTemplateExportSession sdmxTemplateExportSession, + AsyncCallback callback); + // Export JSON void startJSONExport(JSONExportSession jsonExportSession, AsyncCallback callback); @@ -365,6 +372,12 @@ public interface TDGWTServiceAsync { // Templates void getTemplates(AsyncCallback> callback); + void getTemplatesForDSDExport( + AsyncCallback> callback); + + void getTemplateColumnsData(String templateId, + AsyncCallback> callback); + void startTemplateApply(TemplateApplySession templateDeleteSession, AsyncCallback callback); @@ -442,7 +455,6 @@ public interface TDGWTServiceAsync { void startMapCreation(MapCreationSession mapCreationSession, AsyncCallback callback); - // DataMiner void startDataMinerOperation( DataMinerOperationSession dataMinerOperationSession, diff --git a/src/main/java/org/gcube/portlets/user/td/gwtservice/server/SessionConstants.java b/src/main/java/org/gcube/portlets/user/td/gwtservice/server/SessionConstants.java index 8964e52..195272d 100644 --- a/src/main/java/org/gcube/portlets/user/td/gwtservice/server/SessionConstants.java +++ b/src/main/java/org/gcube/portlets/user/td/gwtservice/server/SessionConstants.java @@ -33,7 +33,8 @@ public class SessionConstants { public static final String SDMX_IMPORT_TABULAR_RESOURCE = "SDMX_IMPORT_TABULAR_RESOURCE"; public static final String SDMX_EXPORT_SESSION = "SDMX_EXPORT_SESSION"; - + public static final String SDMX_TEMPLATE_EXPORT_SESSION = "SDMX_TEMPLATE_EXPORT_SESSION"; + public static final String CSV_IMPORT_SESSION = "CSV_IMPORT"; public static final String CSV_IMPORT_FILE_UPLOAD_SESSION = "CSV_IMPORT_FILE_UPLOAD"; public static final String CSV_IMPORT_TABULAR_RESOURCE = "CSV_IMPORT_TABULAR_RESOURCE"; diff --git a/src/main/java/org/gcube/portlets/user/td/gwtservice/server/SessionUtil.java b/src/main/java/org/gcube/portlets/user/td/gwtservice/server/SessionUtil.java index 3be601d..d6b5076 100644 --- a/src/main/java/org/gcube/portlets/user/td/gwtservice/server/SessionUtil.java +++ b/src/main/java/org/gcube/portlets/user/td/gwtservice/server/SessionUtil.java @@ -41,6 +41,7 @@ import org.gcube.portlets.user.td.gwtservice.shared.rule.DetachColumnRulesSessio import org.gcube.portlets.user.td.gwtservice.shared.rule.DetachTableRulesSession; 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.sdmx.SDMXTemplateExportSession; import org.gcube.portlets.user.td.gwtservice.shared.source.SDMXRegistrySource; import org.gcube.portlets.user.td.gwtservice.shared.statistical.DataMinerOperationSession; import org.gcube.portlets.user.td.gwtservice.shared.task.TaskResubmitSession; @@ -125,19 +126,19 @@ public class SessionUtil { logger.info("No credential found in session, use test user!"); InfoLocale infoLocale = getInfoLocale(httpServletRequest, null); Locale locale = new Locale(infoLocale.getLanguage()); - + ResourceBundle messages = ResourceBundle.getBundle( TDGWTServiceMessagesConstants.TDGWTServiceMessages, locale); userName = Constants.DEFAULT_USER; scope = Constants.DEFAULT_SCOPE; token = Constants.DEFAULT_TOKEN; - - logger.info("Set SecurityToken: "+token); + + logger.info("Set SecurityToken: " + token); SecurityTokenProvider.instance.set(token); - logger.info("Set ScopeProvider: "+scope); + logger.info("Set ScopeProvider: " + scope); ScopeProvider.instance.set(scope); - + sCredentials = new ServiceCredentials(userName, scope, token); } else { @@ -157,7 +158,7 @@ public class SessionUtil { } else { scope = pContext.getCurrentScope(httpServletRequest); } - + if (scope == null || scope.isEmpty()) { String error = "Error retrieving scope: " + scope; logger.error(error); @@ -200,11 +201,11 @@ public class SessionUtil { String email = gCubeUser.getEmail(); if (hasScopeGroupId) { - logger.info("Set SecurityToken: "+token); + logger.info("Set SecurityToken: " + token); SecurityTokenProvider.instance.set(token); - logger.info("Set ScopeProvider: "+scope); + logger.info("Set ScopeProvider: " + scope); ScopeProvider.instance.set(scope); - + groupId = scopeGroupId; long gId; @@ -379,7 +380,7 @@ public class SessionUtil { SessionConstants.SCOPE_TO_CURRENT_TABULAR_RESOURCE_MAP, tabResource); } - + // /** * @@ -605,7 +606,7 @@ public class SessionUtil { // TODO check // public static void retrieveResources(HttpServletRequest httpRequest, // ServiceCredentials serviceCredentials) { - // + // // return; // } @@ -721,6 +722,27 @@ public class SessionUtil { return sdmxExportSession; } + // + public static void setSDMXTemplateExportSession( + HttpServletRequest httpRequest, + ServiceCredentials serviceCredentials, + SDMXTemplateExportSession sdmxTemplateExportSession) { + SessionOp sessionOp = new SessionOp<>(); + sessionOp.set(httpRequest, serviceCredentials, + SessionConstants.SDMX_TEMPLATE_EXPORT_SESSION, + sdmxTemplateExportSession); + } + + public static SDMXTemplateExportSession getSDMXTemplateExportSession( + HttpServletRequest httpRequest, + ServiceCredentials serviceCredentials) { + SessionOp sessionOp = new SessionOp<>(); + SDMXTemplateExportSession sdmxTemplateExportSession = sessionOp.get( + httpRequest, serviceCredentials, + SessionConstants.SDMX_TEMPLATE_EXPORT_SESSION); + return sdmxTemplateExportSession; + } + // public static void setJSONExportSession(HttpServletRequest httpRequest, ServiceCredentials serviceCredentials, @@ -1677,10 +1699,10 @@ public class SessionUtil { HttpServletRequest httpRequest, ServiceCredentials serviceCredentials) throws TDGWTServiceException { SessionOp sessionOp = new SessionOp<>(); - DataMinerOperationSession dataMinerOperationSession = sessionOp - .get(httpRequest, serviceCredentials, - SessionConstants.DATAMINER_OPERATION_SESSION, - DataMinerOperationSession.class); + DataMinerOperationSession dataMinerOperationSession = sessionOp.get( + httpRequest, serviceCredentials, + SessionConstants.DATAMINER_OPERATION_SESSION, + DataMinerOperationSession.class); return dataMinerOperationSession; } @@ -1947,7 +1969,6 @@ public class SessionUtil { public static void setAbortedTasks(HttpServletRequest httpRequest, ServiceCredentials serviceCredentials, TaskWrapper taskWrapper) { - if (taskWrapper == null || taskWrapper.getTask() == null) { logger.error("TaskWrapper is null"); return; @@ -1993,7 +2014,6 @@ public class SessionUtil { HttpServletRequest httpRequest, ServiceCredentials serviceCredentials) { - SessionOp> sessionOp = new SessionOp<>(); HashMap tasksHidden = sessionOp.get(httpRequest, serviceCredentials, @@ -2118,7 +2138,6 @@ public class SessionUtil { public static void removeTaskInBackground(HttpServletRequest httpRequest, ServiceCredentials serviceCredentials, TaskWrapper taskWrapper) { - if (taskWrapper == null) { logger.error("TaskWrapper is null"); return; @@ -2180,7 +2199,6 @@ public class SessionUtil { HttpServletRequest httpRequest, ServiceCredentials serviceCredentials, TRId trId) { - if (trId == null) { logger.error("TRId is null"); return; diff --git a/src/main/java/org/gcube/portlets/user/td/gwtservice/server/TDGWTServiceImpl.java b/src/main/java/org/gcube/portlets/user/td/gwtservice/server/TDGWTServiceImpl.java index 9a6a3df..fca5406 100644 --- a/src/main/java/org/gcube/portlets/user/td/gwtservice/server/TDGWTServiceImpl.java +++ b/src/main/java/org/gcube/portlets/user/td/gwtservice/server/TDGWTServiceImpl.java @@ -33,6 +33,9 @@ import org.gcube.common.homelibrary.home.HomeManagerFactory; import org.gcube.common.homelibrary.home.exceptions.InternalErrorException; import org.gcube.common.homelibrary.home.workspace.Workspace; import org.gcube.common.homelibrary.home.workspace.WorkspaceItem; +import org.gcube.data.analysis.tabulardata.commons.templates.model.TemplateCategory; +import org.gcube.data.analysis.tabulardata.commons.templates.model.columns.ColumnCategory; +import org.gcube.data.analysis.tabulardata.commons.templates.model.columns.TemplateColumn; import org.gcube.data.analysis.tabulardata.commons.utils.Licence; import org.gcube.data.analysis.tabulardata.commons.utils.SharingEntity; import org.gcube.data.analysis.tabulardata.commons.webservice.exception.NoSuchTemplateException; @@ -141,6 +144,7 @@ import org.gcube.portlets.user.td.gwtservice.server.opexecution.OpExecution4Repl import org.gcube.portlets.user.td.gwtservice.server.opexecution.OpExecution4SDMXCodelistExport; import org.gcube.portlets.user.td.gwtservice.server.opexecution.OpExecution4SDMXCodelistImport; import org.gcube.portlets.user.td.gwtservice.server.opexecution.OpExecution4SDMXDatasetExport; +import org.gcube.portlets.user.td.gwtservice.server.opexecution.OpExecution4SDMXTemplateExport; import org.gcube.portlets.user.td.gwtservice.server.opexecution.OpExecution4SplitColumn; import org.gcube.portlets.user.td.gwtservice.server.opexecution.OpExecution4TimeAggregation; import org.gcube.portlets.user.td.gwtservice.server.opexecution.OpExecution4Union; @@ -150,6 +154,7 @@ import org.gcube.portlets.user.td.gwtservice.server.resource.ResourceTypeMap; import org.gcube.portlets.user.td.gwtservice.server.social.TDMNotifications; import org.gcube.portlets.user.td.gwtservice.server.storage.FilesStorage; import org.gcube.portlets.user.td.gwtservice.server.trservice.ColumnDataTypeMap; +import org.gcube.portlets.user.td.gwtservice.server.trservice.ColumnTypeCodeMap; import org.gcube.portlets.user.td.gwtservice.server.trservice.ExtractReferences; import org.gcube.portlets.user.td.gwtservice.server.trservice.JobClassifierMap; import org.gcube.portlets.user.td.gwtservice.server.trservice.LicenceMap; @@ -199,6 +204,7 @@ import org.gcube.portlets.user.td.gwtservice.shared.rule.DetachColumnRulesSessio import org.gcube.portlets.user.td.gwtservice.shared.rule.DetachTableRulesSession; import org.gcube.portlets.user.td.gwtservice.shared.rule.description.RuleDescriptionData; import org.gcube.portlets.user.td.gwtservice.shared.sdmx.SDMXExportSession; +import org.gcube.portlets.user.td.gwtservice.shared.sdmx.SDMXTemplateExportSession; import org.gcube.portlets.user.td.gwtservice.shared.sdmx.SDMXImportSession; import org.gcube.portlets.user.td.gwtservice.shared.share.Contacts; import org.gcube.portlets.user.td.gwtservice.shared.share.ShareRule; @@ -217,6 +223,7 @@ import org.gcube.portlets.user.td.gwtservice.shared.task.TaskS; import org.gcube.portlets.user.td.gwtservice.shared.task.TaskWrapper; import org.gcube.portlets.user.td.gwtservice.shared.task.ValidationsTasksMetadata; import org.gcube.portlets.user.td.gwtservice.shared.template.TemplateApplySession; +import org.gcube.portlets.user.td.gwtservice.shared.template.TemplateColumnData; import org.gcube.portlets.user.td.gwtservice.shared.template.TemplateData; import org.gcube.portlets.user.td.gwtservice.shared.template.TemplateDeleteSession; import org.gcube.portlets.user.td.gwtservice.shared.tr.ConditionCodeMap; @@ -5113,6 +5120,7 @@ public class TDGWTServiceImpl extends RemoteServiceServlet implements * @param exportSession * @return */ + @Override public String startSDMXExport(SDMXExportSession exportSession) throws TDGWTServiceException { HttpServletRequest httpRequest = null; @@ -5214,6 +5222,85 @@ public class TDGWTServiceImpl extends RemoteServiceServlet implements } + /** + * + * @param sdmxTemplateExportSession + * @return + */ + @Override + public String startSDMXTemplateExport( + SDMXTemplateExportSession sdmxTemplateExportSession) + throws TDGWTServiceException { + HttpServletRequest httpRequest = null; + try { + httpRequest = this.getThreadLocalRequest(); + ServiceCredentials serviceCredentials = SessionUtil + .getServiceCredentials(httpRequest); + logger.debug("Start SDMX Template Export"); + + if (sdmxTemplateExportSession == null) { + logger.error("Error in SDMX Template Export : templateExportSession is null!"); + throw new TDGWTServiceException( + "Error in SDMX Template Export: templateExportSession is null!!"); + + } + + SessionUtil.setSDMXTemplateExportSession(httpRequest, + serviceCredentials, sdmxTemplateExportSession); + + TRId trId = SessionUtil.getTRId(httpRequest, serviceCredentials); + + logger.debug("Tabular Data Service"); + + TabularDataService service = TabularDataServiceFactory.getService(); + + OpExecutionDirector director = new OpExecutionDirector(); + // / + OpExecution4SDMXTemplateExport opExD = new OpExecution4SDMXTemplateExport( + service, sdmxTemplateExportSession); + director.setOperationExecutionBuilder(opExD); + + director.constructOperationExecution(); + OperationExecution invocation = director.getOperationExecution(); + + if (invocation == null) { + throw new TDGWTServiceException( + "Error in SDMX Template Export: Operation not supported for now!"); + } + logger.debug("OperationInvocation: \n" + invocation.toString()); + + TabularResourceId tabularResourceId = new TabularResourceId( + Long.valueOf(trId.getId())); + + Task trTask = service.execute(invocation, tabularResourceId); + logger.debug("Start Task on service: TaskId " + trTask.getId()); + + TaskWrapper taskWrapper = new TaskWrapper(trTask, + UIOperationsId.SDMXTemplateExport, trId); + SessionUtil.setStartedTask(httpRequest, serviceCredentials, + taskWrapper); + + return trTask.getId().getValue(); + + } catch (TDGWTServiceException e) { + throw e; + } catch (SecurityException e) { + logger.error( + "Error in SDMX Template Export: " + e.getLocalizedMessage(), + e); + ResourceBundle messages = getResourceBundle(httpRequest); + throw new TDGWTServiceException( + messages.getString(TDGWTServiceMessagesConstants.securityExceptionRights)); + } catch (Throwable e) { + logger.error( + "Error in SDMX Template Export: " + e.getLocalizedMessage(), + e); + throw new TDGWTServiceException("Error in SDMX Template Export: " + + e.getLocalizedMessage()); + } + + } + /** * * {@inheritDoc} @@ -6821,15 +6908,169 @@ public class TDGWTServiceImpl extends RemoteServiceServlet implements throw new TDGWTServiceException( messages.getString(TDGWTServiceMessagesConstants.securityExceptionRights)); } catch (Throwable e) { - logger.debug("Error in GetTemplates: " + e.getLocalizedMessage()); + logger.debug("Error in GetTemplates: " + e.getLocalizedMessage(), e); + throw new TDGWTServiceException("Error in GetTemplates: " + + e.getLocalizedMessage()); + } + + } + + /** + * + * {@inheritDoc} + */ + @Override + public ArrayList getTemplatesForDSDExport() + throws TDGWTServiceException { + HttpServletRequest httpRequest = null; + try { + httpRequest = this.getThreadLocalRequest(); + SessionUtil.getServiceCredentials(httpRequest); + + logger.debug("GetTemplatesForDSDExport"); + + TabularDataService service = TabularDataServiceFactory.getService(); + + List templateDescriptorList = service + .getTemplates(); + + ArrayList templateDataList = new ArrayList(); + TemplateData templateData; + for (TemplateDescription desc : templateDescriptorList) { + if (desc.getTemplate().getCategory() + .compareTo(TemplateCategory.DATASET) == 0) { + + List> columns = desc.getTemplate() + .getColumns(); + boolean hasMeasure = false; + for (TemplateColumn col : columns) { + if (col.getColumnType() != null + && col.getColumnType().compareTo( + ColumnCategory.MEASURE) == 0) { + hasMeasure = true; + break; + } + + } + + if (hasMeasure) { + templateData = new TemplateData(); + templateData.setId(desc.getId()); + templateData.setName(desc.getName()); + templateData.setDescription(desc.getDescription()); + templateData.setAgency(desc.getAgency()); + switch (desc.getTemplate().getCategory()) { + case CODELIST: + templateData.setCategory("Codelist"); + break; + case DATASET: + templateData.setCategory("Dataset"); + break; + case GENERIC: + templateData.setCategory("Generic"); + break; + default: + break; + + } + + Contacts owner = new Contacts("", desc.getOwner(), + false); + templateData.setOwner(owner); + templateData + .setContacts(retrieveTemplateShareInfo(desc)); + if (desc.getCreationdDate() != null) { + templateData.setCreationDate(desc + .getCreationdDate().getTime()); + } else { + templateData.setCreationDate(null); + } + templateDataList.add(templateData); + } + } + } + logger.debug("Retrieved TemplateData List"); + + return templateDataList; + + } catch (TDGWTServiceException e) { + throw e; + } catch (SecurityException e) { e.printStackTrace(); + ResourceBundle messages = getResourceBundle(httpRequest); throw new TDGWTServiceException( - "Error in GetOccurencesForBatchReplace: " + messages.getString(TDGWTServiceMessagesConstants.securityExceptionRights)); + } catch (Throwable e) { + logger.debug( + "Error in GetTemplatesForDSDExport: " + + e.getLocalizedMessage(), e); + throw new TDGWTServiceException( + "Error in GetTemplateForDSDExport: " + e.getLocalizedMessage()); } } + @Override + public ArrayList getTemplateColumnsData( + String templateId) throws TDGWTServiceException { + HttpServletRequest httpRequest = null; + try { + httpRequest = this.getThreadLocalRequest(); + SessionUtil.getServiceCredentials(httpRequest); + + logger.debug("getTemplateColumnsData: TemplateId=" + templateId); + + if (templateId == null || templateId.isEmpty()) { + logger.error("Error in GetTemplateColumnsData: invalid template id=" + + templateId); + throw new TDGWTServiceException( + "Error in GetTemplateColumnsData: invalid template id=" + + templateId); + } + + TabularDataService service = TabularDataServiceFactory.getService(); + + TemplateDescription templateDescriptor = service + .getTemplate(new TemplateId(Long.valueOf(templateId))); + + ArrayList templateColumnsDataList = new ArrayList(); + List> columns = templateDescriptor.getTemplate() + .getColumns(); + + int i = 1; + for (TemplateColumn c : columns) { + + TemplateColumnData templateColumnData = new TemplateColumnData( + Integer.toString(i), + c.getId(), + ColumnTypeCodeMap.getColumnType(c.getColumnType()), + ColumnDataTypeMap.mapFromDataTypeClass(c.getValueType()), + c.getLabel()); + templateColumnsDataList.add(templateColumnData); + i++; + } + logger.debug("Retrieved TemplateColumnData List"); + + return templateColumnsDataList; + + } catch (TDGWTServiceException e) { + throw e; + } catch (SecurityException e) { + logger.error("Security Exception: " + e.getLocalizedMessage(), e); + ResourceBundle messages = getResourceBundle(httpRequest); + throw new TDGWTServiceException( + messages.getString(TDGWTServiceMessagesConstants.securityExceptionRights)); + } catch (Throwable e) { + logger.debug( + "Error in GetTemplateColumnsData: " + + e.getLocalizedMessage(), e); + throw new TDGWTServiceException("Error in GetTemplateColumnsData: " + + e.getLocalizedMessage()); + } + + } + private ArrayList retrieveTemplateShareInfo( TemplateDescription templateDescription) throws TDGWTServiceException { @@ -9020,9 +9261,6 @@ public class TDGWTServiceImpl extends RemoteServiceServlet implements } - - - @Override public String startDataMinerOperation( DataMinerOperationSession dataMinerOperationSession) @@ -9087,7 +9325,6 @@ public class TDGWTServiceImpl extends RemoteServiceServlet implements } } - /** * diff --git a/src/main/java/org/gcube/portlets/user/td/gwtservice/server/opexecution/OpExecution4SDMXTemplateExport.java b/src/main/java/org/gcube/portlets/user/td/gwtservice/server/opexecution/OpExecution4SDMXTemplateExport.java new file mode 100644 index 0000000..021ee9c --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/td/gwtservice/server/opexecution/OpExecution4SDMXTemplateExport.java @@ -0,0 +1,134 @@ +package org.gcube.portlets.user.td.gwtservice.server.opexecution; + +import static org.gcube.resources.discovery.icclient.ICFactory.clientFor; +import static org.gcube.resources.discovery.icclient.ICFactory.queryFor; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.gcube.common.resources.gcore.ServiceEndpoint; +import org.gcube.common.resources.gcore.ServiceEndpoint.AccessPoint; +import org.gcube.common.resources.gcore.ServiceEndpoint.Profile; +import org.gcube.common.resources.gcore.utils.Group; +import org.gcube.data.analysis.tabulardata.commons.templates.model.Template; +import org.gcube.data.analysis.tabulardata.commons.webservice.exception.NoSuchTemplateException; +import org.gcube.data.analysis.tabulardata.commons.webservice.types.TemplateDescription; +import org.gcube.data.analysis.tabulardata.commons.webservice.types.operations.OperationDefinition; +import org.gcube.data.analysis.tabulardata.commons.webservice.types.operations.OperationExecution; +import org.gcube.data.analysis.tabulardata.service.TabularDataService; +import org.gcube.data.analysis.tabulardata.service.template.TemplateId; +import org.gcube.portlets.user.td.gwtservice.server.trservice.OperationDefinitionMap; +import org.gcube.portlets.user.td.gwtservice.shared.Constants; +import org.gcube.portlets.user.td.gwtservice.shared.exception.TDGWTServiceException; +import org.gcube.portlets.user.td.gwtservice.shared.sdmx.SDMXTemplateExportSession; +import org.gcube.portlets.user.td.widgetcommonevent.shared.operations.OperationsId; +import org.gcube.resources.discovery.client.api.DiscoveryClient; +import org.gcube.resources.discovery.client.queries.api.SimpleQuery; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * Operation Execution for sdmx Template export + * + * @author "Giancarlo Panichi" email: g.panichi@isti.cnr.it + * + */ +public class OpExecution4SDMXTemplateExport extends OpExecutionBuilder { + private static Logger logger = LoggerFactory + .getLogger(OpExecution4SDMXTemplateExport.class); + + private TabularDataService service; + private SDMXTemplateExportSession sdmxTemplateExportSession; + + public OpExecution4SDMXTemplateExport(TabularDataService service, + SDMXTemplateExportSession sdmxTemplateExportSession) { + this.service = service; + this.sdmxTemplateExportSession = sdmxTemplateExportSession; + } + + @Override + public void buildOpEx() throws TDGWTServiceException { + logger.debug(sdmxTemplateExportSession.toString()); + boolean internalRegistry = false; + String destination = null;// Es: + // http://pc-fortunati.isti.cnr.it:8080/FusionRegistry/ws/rest/ + + if (sdmxTemplateExportSession != null) { + if (sdmxTemplateExportSession.getRegistryBaseUrl() != null + && !sdmxTemplateExportSession.getRegistryBaseUrl() + .isEmpty()) { + destination = sdmxTemplateExportSession.getRegistryBaseUrl(); + } else { + internalRegistry = true; + } + } else { + internalRegistry = true; + } + + if (internalRegistry) { + SimpleQuery query = queryFor(ServiceEndpoint.class); + query.addCondition("$resource/Profile/Category/text() eq 'SDMX'") + .addCondition( + "$resource/Profile/Name/text() eq 'SDMXRegistry'"); + DiscoveryClient client = clientFor(ServiceEndpoint.class); + List listService = client.submit(query); + if (listService.size() > 0) { + ServiceEndpoint serviceEnd = listService.get(0); + if (serviceEnd != null) { + Profile prof = serviceEnd.profile(); + Group groupA = prof.accessPoints(); + for (AccessPoint acc : groupA) { + if (acc.description().compareTo("REST Interface v2.1") == 0) { + destination = acc.address(); + break; + } + } + } else { + + } + } else { + + } + } + if (destination == null) { + logger.debug("Destination: " + destination); + throw new TDGWTServiceException("SDMX Service not discovered"); + } + + TemplateDescription templateDescriptor; + try { + templateDescriptor = service.getTemplate(new TemplateId( + sdmxTemplateExportSession.getTemplateData().getId())); + } catch (NoSuchTemplateException e) { + logger.debug( + "Error retrieving template: " + e.getLocalizedMessage(), e); + throw new TDGWTServiceException("Error retrieving template: " + + e.getLocalizedMessage()); + } + + OperationDefinition operationDefinition = OperationDefinitionMap.map( + OperationsId.SDMXTemplateExport.toString(), service); + + HashMap templateMap=new HashMap(); + templateMap.put(Constants.PARAMETER_TEMPLATE,templateDescriptor.getTemplate()); + + Map map = new HashMap(); + + map.put(Constants.PARAMETER_REGISTRYBASEURL, destination); + map.put(Constants.PARAMETER_AGENCY, + sdmxTemplateExportSession.getAgencyId()); + map.put(Constants.PARAMETER_ID, sdmxTemplateExportSession.getId()); + map.put(Constants.PARAMETER_VERSION, + sdmxTemplateExportSession.getVersion()); + map.put(Constants.PARAMETER_OBSVALUECOLUMN, sdmxTemplateExportSession + .getObsValueColumn().getColumnId()); + map.put(Constants.PARAMETER_TEMPLATE, templateMap); + OperationExecution invocation = new OperationExecution( + operationDefinition.getOperationId(), map); + + operationExecutionSpec.setOp(invocation); + } + +} diff --git a/src/main/java/org/gcube/portlets/user/td/gwtservice/server/trservice/ColumnTypeCodeMap.java b/src/main/java/org/gcube/portlets/user/td/gwtservice/server/trservice/ColumnTypeCodeMap.java index cf7bf92..b2dd4f1 100644 --- a/src/main/java/org/gcube/portlets/user/td/gwtservice/server/trservice/ColumnTypeCodeMap.java +++ b/src/main/java/org/gcube/portlets/user/td/gwtservice/server/trservice/ColumnTypeCodeMap.java @@ -1,5 +1,6 @@ package org.gcube.portlets.user.td.gwtservice.server.trservice; +import org.gcube.data.analysis.tabulardata.commons.templates.model.columns.ColumnCategory; import org.gcube.data.analysis.tabulardata.model.column.ColumnType; import org.gcube.data.analysis.tabulardata.model.column.type.AnnotationColumnType; import org.gcube.data.analysis.tabulardata.model.column.type.AttributeColumnType; @@ -43,4 +44,30 @@ public class ColumnTypeCodeMap { } } + + public static ColumnTypeCode getColumnType(ColumnCategory columnType){ + + switch(columnType){ + case ANNOTATION: + return ColumnTypeCode.ANNOTATION; + case ATTRIBUTE: + return ColumnTypeCode.ATTRIBUTE; + case CODE: + return ColumnTypeCode.CODE; + case CODEDESCRIPTION: + return ColumnTypeCode.CODEDESCRIPTION; + case CODENAME: + return ColumnTypeCode.CODENAME; + case DIMENSION: + return ColumnTypeCode.DIMENSION; + case MEASURE: + return ColumnTypeCode.MEASURE; + case TIMEDIMENSION: + return ColumnTypeCode.TIMEDIMENSION; + default: + return null; + + } + } + } diff --git a/src/main/java/org/gcube/portlets/user/td/gwtservice/shared/Constants.java b/src/main/java/org/gcube/portlets/user/td/gwtservice/shared/Constants.java index 0a416c7..7bdf8cd 100644 --- a/src/main/java/org/gcube/portlets/user/td/gwtservice/shared/Constants.java +++ b/src/main/java/org/gcube/portlets/user/td/gwtservice/shared/Constants.java @@ -12,32 +12,35 @@ package org.gcube.portlets.user.td.gwtservice.shared; public class Constants { public static final boolean DEBUG_MODE = false; public static final boolean TEST_ENABLE = false; - - public static final String CURR_GROUP_ID = "CURR_GROUP_ID"; - //public static final String CURR_USER_ID = "CURR_USER_ID"; - + public static final String CURR_GROUP_ID = "CURR_GROUP_ID"; + // public static final String CURR_USER_ID = "CURR_USER_ID"; + public static final String DEFAULT_USER = "giancarlo.panichi"; public static final String DEFAULT_SCOPE = "/gcube/devNext/NextNext"; public static final String DEFAULT_TOKEN = "ae1208f0-210d-47c9-9b24-d3f2dfcce05f-98187548"; - - - //public static final String DEFAULT_SCOPE = "/gcube/devNext"; - //public static final String DEFAULT_TOKEN = "16e65d4f-11e0-4e4a-84b9-351688fccc12-98187548"; - + + // public static final String DEFAULT_SCOPE = "/gcube/devNext"; + // public static final String DEFAULT_TOKEN = + // "16e65d4f-11e0-4e4a-84b9-351688fccc12-98187548"; + public static final String DEFAULT_ROLE = "OrganizationMember"; public final static String FILE_XML_MIMETYPE = "application/xml"; public final static String FILE_CSV_MIMETYPE = "text/csv"; - + public static final String SDMX_CODELIST_EXPORT_DEFAULT_ID = "NEW_CL_DIVISION"; public static final String SDMX_CODELIST_EXPORT_DEFAULT_AGENCY_ID = "SDMX"; public static final String SDMX_CODELIST_EXPORT_DEFAULT_VERSION = "1.0"; - + public static final String SDMX_DATASET_EXPORT_DEFAULT_ID = "NEW_DS_DIVISION"; public static final String SDMX_DATASET_EXPORT_DEFAULT_AGENCY_ID = "SDMX"; public static final String SDMX_DATASET_EXPORT_DEFAULT_VERSION = "1.0"; - + + public static final String SDMX_TEMPLATE_EXPORT_DEFAULT_ID = "NEW_DSD_DIVISION_TEMPLATE"; + public static final String SDMX_TEMPLATE_EXPORT_DEFAULT_AGENCY_ID = "SDMX"; + public static final String SDMX_TEMPLATE_EXPORT_DEFAULT_VERSION = "1.0"; + public static final String PARAMETER_ENCODING = "encoding"; public static final String PARAMETER_HASHEADER = "hasHeader"; public static final String PARAMETER_FIELDMASK = "fieldMask"; @@ -52,6 +55,7 @@ public class Constants { public static final String PARAMETER_AGENCY = "agency"; public static final String PARAMETER_VERSION = "version"; public static final String PARAMETER_OBSVALUECOLUMN = "obsValueColumn"; + public static final String PARAMETER_TEMPLATE = "template"; public static final String PARAMETER_DATA_TYPE = "dataType"; public static final String PARAMETER_TARGET_DATA_TYPE = "targetDataType"; @@ -72,7 +76,7 @@ public class Constants { public static final String PARAMETER_STATISTICAL_OPERATION_PARAMETERS = "smEntries"; public static final String PARAMETER_STATISTICAL_OPERATION_DESCRIPTION = "description"; public static final String PARAMETER_STATISTICAL_OPERATION_TITLE = "title"; - + public static final String PARAMETER_DATAMINER_GCUBETOKEN = "gcubetoken"; public static final String PARAMETER_DATAMINER_OPERATOR = "operator"; @@ -149,11 +153,10 @@ public class Constants { public static final String PARAMETER_EXPRESSION_VALIDATION_TITLE = "title"; public static final String PARAMETER_CHANGE_COLUMN_POSITION_ORDER = "order"; - + public static final String PARAMETER_RESOURCE_NAME = "name"; public static final String PARAMETER_RESOURCE_DESCRIPTION = "description"; - - + public static final String CODELIST_MAPPING_UPLOAD_SERVLET = "CodelistMappingUploadServlet"; public static final String LOCAL_UPLOAD_SERVLET = "LocalUploadServlet"; public static final String CSV_IMPORT_FILE_SERVLET = "CSVImportFileServlet"; @@ -161,6 +164,5 @@ public class Constants { public static final String RETRIEVE_FILE_AND_DISCOVER_MIME_TYPE_SERVLET = "RetrieveFileAndDiscoverMimeTypeServlet"; public static final String TD_RSTUDIO_SERVLET = "TDRStudioServlet"; public static final String TD_LOGS_SERVLET = "TDLogsServlet"; - } diff --git a/src/main/java/org/gcube/portlets/user/td/gwtservice/shared/sdmx/SDMXTemplateExportSession.java b/src/main/java/org/gcube/portlets/user/td/gwtservice/shared/sdmx/SDMXTemplateExportSession.java new file mode 100644 index 0000000..44affdc --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/td/gwtservice/shared/sdmx/SDMXTemplateExportSession.java @@ -0,0 +1,126 @@ +/** + * + */ +package org.gcube.portlets.user.td.gwtservice.shared.sdmx; + +import java.io.Serializable; + +import org.gcube.portlets.user.td.gwtservice.shared.source.Source; +import org.gcube.portlets.user.td.gwtservice.shared.template.TemplateColumnData; +import org.gcube.portlets.user.td.gwtservice.shared.template.TemplateData; +import org.gcube.portlets.user.td.gwtservice.shared.tr.type.Agencies; + +/** + * + * @author "Giancarlo Panichi" g.panichi@isti.cnr.it + * + */ +public class SDMXTemplateExportSession implements Serializable { + + private static final long serialVersionUID = 4176034045408445284L; + + private TemplateData templateData; + private Agencies agency; + private Source source; + + private String id; + private String agencyId; + private String version; + private String registryBaseUrl; + + private TemplateColumnData obsValueColumn; + + public SDMXTemplateExportSession() { + super(); + } + + public SDMXTemplateExportSession(TemplateData templateData, + Agencies agency, Source source, String id, String agencyId, + String version, String registryBaseUrl, + TemplateColumnData obsValueColumn) { + super(); + this.templateData = templateData; + this.agency = agency; + this.source = source; + this.id = id; + this.agencyId = agencyId; + this.version = version; + this.registryBaseUrl = registryBaseUrl; + this.obsValueColumn = obsValueColumn; + } + + public TemplateData getTemplateData() { + return templateData; + } + + public void setTemplateData(TemplateData templateData) { + this.templateData = templateData; + } + + public Agencies getAgency() { + return agency; + } + + public void setAgency(Agencies agency) { + this.agency = agency; + } + + public Source getSource() { + return source; + } + + public void setSource(Source source) { + this.source = source; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getAgencyId() { + return agencyId; + } + + public void setAgencyId(String agencyId) { + this.agencyId = agencyId; + } + + public String getVersion() { + return version; + } + + public void setVersion(String version) { + this.version = version; + } + + public String getRegistryBaseUrl() { + return registryBaseUrl; + } + + public void setRegistryBaseUrl(String registryBaseUrl) { + this.registryBaseUrl = registryBaseUrl; + } + + public TemplateColumnData getObsValueColumn() { + return obsValueColumn; + } + + public void setObsValueColumn(TemplateColumnData obsValueColumn) { + this.obsValueColumn = obsValueColumn; + } + + @Override + public String toString() { + return "SDMXTemplateExportSession [templateData=" + templateData + + ", agency=" + agency + ", source=" + source + ", id=" + id + + ", agencyId=" + agencyId + ", version=" + version + + ", registryBaseUrl=" + registryBaseUrl + ", obsValueColumn=" + + obsValueColumn + "]"; + } + +} diff --git a/src/main/java/org/gcube/portlets/user/td/gwtservice/shared/template/TemplateApplySession.java b/src/main/java/org/gcube/portlets/user/td/gwtservice/shared/template/TemplateApplySession.java index 18f35cd..7ffb595 100644 --- a/src/main/java/org/gcube/portlets/user/td/gwtservice/shared/template/TemplateApplySession.java +++ b/src/main/java/org/gcube/portlets/user/td/gwtservice/shared/template/TemplateApplySession.java @@ -4,20 +4,30 @@ import java.io.Serializable; import org.gcube.portlets.user.td.widgetcommonevent.shared.TRId; - /** * Apply Template Session * - * @author "Giancarlo Panichi" - * g.panichi@isti.cnr.it + * @author "Giancarlo Panichi" g.panichi@isti.cnr.it * */ public class TemplateApplySession implements Serializable { private static final long serialVersionUID = -8834066207159106968L; - protected TemplateData templateData; - protected TRId trId; - + private TemplateData templateData; + private TRId trId; + + public TemplateApplySession() { + super(); + + } + + public TemplateApplySession(TemplateData templateData, TRId trId) { + super(); + this.templateData = templateData; + this.trId = trId; + } + public TRId getTrId() { return trId; } @@ -40,5 +50,4 @@ public class TemplateApplySession implements Serializable { + trId + "]"; } - } diff --git a/src/main/java/org/gcube/portlets/user/td/gwtservice/shared/template/TemplateColumnData.java b/src/main/java/org/gcube/portlets/user/td/gwtservice/shared/template/TemplateColumnData.java new file mode 100644 index 0000000..97be4c1 --- /dev/null +++ b/src/main/java/org/gcube/portlets/user/td/gwtservice/shared/template/TemplateColumnData.java @@ -0,0 +1,86 @@ +package org.gcube.portlets.user.td.gwtservice.shared.template; + +import java.io.Serializable; + +import org.gcube.portlets.user.td.widgetcommonevent.shared.tr.column.ColumnDataType; +import org.gcube.portlets.user.td.widgetcommonevent.shared.tr.column.ColumnTypeCode; + +/** + * + * + * @author "Giancarlo Panichi" g.panichi@isti.cnr.it + * + */ +public class TemplateColumnData implements Serializable { + + private static final long serialVersionUID = -4747143287880727022L; + + private String id; // For insert in table only + private String columnId; // Id of column on server + private ColumnTypeCode typeCode; + private ColumnDataType dataTypeName; + private String label; + + public TemplateColumnData() { + super(); + } + + public TemplateColumnData(String id, String columnId, + ColumnTypeCode typeCode, ColumnDataType dataTypeName, String label) { + super(); + this.id = id; + this.columnId = columnId; + this.typeCode = typeCode; + this.dataTypeName = dataTypeName; + this.label = label; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getColumnId() { + return columnId; + } + + public void setColumnId(String columnId) { + this.columnId = columnId; + } + + public ColumnTypeCode getTypeCode() { + return typeCode; + } + + public void setTypeCode(ColumnTypeCode typeCode) { + this.typeCode = typeCode; + } + + public ColumnDataType getDataTypeName() { + return dataTypeName; + } + + public void setDataTypeName(ColumnDataType dataTypeName) { + this.dataTypeName = dataTypeName; + } + + public String getLabel() { + return label; + } + + public void setLabel(String label) { + this.label = label; + } + + @Override + public String toString() { + return "TemplateColumnData [id=" + id + ", columnId=" + columnId + + ", typeCode=" + typeCode + ", dataTypeName=" + dataTypeName + + ", label=" + label + "]"; + } + +} diff --git a/src/test/java/org/gcube/portlets/user/td/gwtservice/client/TestServiceOperations.java b/src/test/java/org/gcube/portlets/user/td/gwtservice/client/TestServiceOperations.java index e2dd118..70ffec3 100644 --- a/src/test/java/org/gcube/portlets/user/td/gwtservice/client/TestServiceOperations.java +++ b/src/test/java/org/gcube/portlets/user/td/gwtservice/client/TestServiceOperations.java @@ -16,24 +16,32 @@ import org.slf4j.LoggerFactory; * */ public class TestServiceOperations { - - private static Logger logger = LoggerFactory.getLogger(TestServiceOperations.class); - + private static Logger logger = LoggerFactory + .getLogger(TestServiceOperations.class); + @Test public void TestTROperation() { - TDService tdService=new TDService(); - TabularDataService service = tdService.getService(); - - List trOperations = service.getCapabilities(); - Assert.assertTrue("No operations exists", trOperations.size() > 0); - logger.debug("------------Tabular Resource Operation--------------"); - for (OperationDefinition operation : trOperations) { - logger.debug("Name: " + operation.getName()); - // logger.debug("Scope: "+operation.getScope()); - logger.debug("Desc: " + operation.toString()); + try { - logger.debug("-----------------------------------"); + TDService tdService = new TDService(); + TabularDataService service = tdService.getService(); + + List trOperations = service.getCapabilities(); + Assert.assertTrue("No operations exists", trOperations.size() > 0); + logger.debug("------------Tabular Resource Operation--------------"); + for (OperationDefinition operation : trOperations) { + logger.debug("Name: " + operation.getName()); + // logger.debug("Scope: "+operation.getScope()); + logger.debug("Desc: " + operation.toString()); + + logger.debug("-----------------------------------"); + } + + } catch (Throwable e) { + logger.error( + "Error retrieving operations: " + e.getLocalizedMessage(), + e); } }