diff --git a/rm-server/config/alfresco/module/org_alfresco_module_rm/bootstrap/content/recordsCustomModel.xml b/rm-server/config/alfresco/module/org_alfresco_module_rm/bootstrap/content/recordsCustomModel.xml index 46f9d6b45c..14a993882a 100644 --- a/rm-server/config/alfresco/module/org_alfresco_module_rm/bootstrap/content/recordsCustomModel.xml +++ b/rm-server/config/alfresco/module/org_alfresco_module_rm/bootstrap/content/recordsCustomModel.xml @@ -154,6 +154,15 @@ + + + + d:text + true + + + + \ No newline at end of file diff --git a/rm-server/config/alfresco/module/org_alfresco_module_rm/rm-webscript-context.xml b/rm-server/config/alfresco/module/org_alfresco_module_rm/rm-webscript-context.xml index 605bf9ea47..0c79e30fe0 100644 --- a/rm-server/config/alfresco/module/org_alfresco_module_rm/rm-webscript-context.xml +++ b/rm-server/config/alfresco/module/org_alfresco_module_rm/rm-webscript-context.xml @@ -379,6 +379,8 @@ + + diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/dataset/DataSetServiceImpl.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/dataset/DataSetServiceImpl.java index 8e9302b59a..335d48cdd6 100644 --- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/dataset/DataSetServiceImpl.java +++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/dataset/DataSetServiceImpl.java @@ -4,6 +4,8 @@ import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.Reader; +import java.io.Serializable; +import java.util.ArrayList; import java.util.HashMap; import java.util.Map; import java.util.Set; @@ -30,6 +32,7 @@ import org.alfresco.service.cmr.security.AuthorityType; import org.alfresco.service.cmr.security.PermissionService; import org.alfresco.service.cmr.view.ImporterService; import org.alfresco.service.cmr.view.Location; +import org.alfresco.service.namespace.QName; import org.alfresco.util.ParameterCheck; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -234,6 +237,9 @@ public class DataSetServiceImpl implements DataSetService, RecordsManagementMode // Patch data patchLoadedData(); + + // Set the data set id into the file plan's custom aspect + setDataSetIdIntoFilePlan(dataSetId, filePlan); } catch (Exception ex) { @@ -256,6 +262,38 @@ public class DataSetServiceImpl implements DataSetService, RecordsManagementMode } } + /** + * Helper method for setting the id of the imported data set into the file plan's custom aspect + * + * @param dataSetId The id of the imported data set + * @param filePlan The file plan into which the data set has been imported + */ + @SuppressWarnings("unchecked") + private void setDataSetIdIntoFilePlan(String dataSetId, NodeRef filePlan) + { + ArrayList loadedDataSetIds; + Serializable dataSetIds = nodeService.getProperty(filePlan, PROP_LOADED_DATA_SET_IDS); + + // Check if any data set has been imported + if (dataSetIds == null) + { + Map aspectProperties = new HashMap(1); + aspectProperties.put(PROP_LOADED_DATA_SET_IDS, (Serializable) new ArrayList()); + nodeService.addAspect(filePlan, ASPECT_LOADED_DATA_SET_IDS, aspectProperties); + loadedDataSetIds = (ArrayList) nodeService.getProperty(filePlan, PROP_LOADED_DATA_SET_IDS); + } + else + { + loadedDataSetIds = (ArrayList) dataSetIds; + } + + // Add the new loaded data set id + loadedDataSetIds.add(dataSetId); + Map aspectProperties = new HashMap(1); + aspectProperties.put(PROP_LOADED_DATA_SET_IDS, (Serializable) loadedDataSetIds); + nodeService.addAspect(filePlan, ASPECT_LOADED_DATA_SET_IDS, aspectProperties); + } + /** * Temp method to patch AMP'ed data * diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/model/RecordsManagementCustomModel.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/model/RecordsManagementCustomModel.java index 8751493a3a..fc8f9307b2 100644 --- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/model/RecordsManagementCustomModel.java +++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/model/RecordsManagementCustomModel.java @@ -49,4 +49,10 @@ public interface RecordsManagementCustomModel // Some Custom references which are present on system startup. public static QName CUSTOM_REF_VERSIONS = QName.createQName(RecordsManagementCustomModel.RM_CUSTOM_URI, "versions"); public static QName CUSTOM_REF_SUPERSEDES = QName.createQName(RecordsManagementCustomModel.RM_CUSTOM_URI, "supersedes"); + + // Custom property for loaded data set ids + public static QName PROP_LOADED_DATA_SET_IDS = QName.createQName(RM_CUSTOM_URI, "loadedDataSetIds"); + + // Loaded data set ids aspect + public static QName ASPECT_LOADED_DATA_SET_IDS = QName.createQName(RM_CUSTOM_URI, "customLoadedDataSetIds"); } diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/script/DataSetsGet.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/script/DataSetsGet.java index 7abba67ed5..cafbb7354d 100644 --- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/script/DataSetsGet.java +++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/script/DataSetsGet.java @@ -1,5 +1,6 @@ package org.alfresco.module.org_alfresco_module_rm.script; +import java.io.Serializable; import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -7,17 +8,28 @@ import java.util.Map; import org.alfresco.module.org_alfresco_module_rm.dataset.DataSet; import org.alfresco.module.org_alfresco_module_rm.dataset.DataSetService; +import org.alfresco.module.org_alfresco_module_rm.model.RecordsManagementCustomModel; +import org.alfresco.module.org_alfresco_module_rm.model.RmSiteType; +import org.alfresco.service.cmr.repository.NodeRef; +import org.alfresco.service.cmr.repository.NodeService; +import org.alfresco.service.cmr.site.SiteService; import org.springframework.extensions.webscripts.Cache; import org.springframework.extensions.webscripts.DeclarativeWebScript; import org.springframework.extensions.webscripts.Status; import org.springframework.extensions.webscripts.WebScriptRequest; -public class DataSetsGet extends DeclarativeWebScript +public class DataSetsGet extends DeclarativeWebScript implements RecordsManagementCustomModel { /** Data set service */ private DataSetService dataSetService; + /** Node service */ + private NodeService nodeService; + + /** Site service */ + private SiteService siteService; + /** * Set data set service * @@ -28,6 +40,26 @@ public class DataSetsGet extends DeclarativeWebScript this.dataSetService = dataSetService; } + /** + * Set node service + * + * @param nodeService the node service + */ + public void setNodeService(NodeService nodeService) + { + this.nodeService = nodeService; + } + + /** + * Set site service + * + * @param siteService the site service + */ + public void setSiteService(SiteService siteService) + { + this.siteService = siteService; + } + /** * @see org.springframework.extensions.webscripts.DeclarativeWebScript#executeImpl(org.springframework.extensions.webscripts.WebScriptRequest, * org.springframework.extensions.webscripts.Status, @@ -36,10 +68,14 @@ public class DataSetsGet extends DeclarativeWebScript @Override protected Map executeImpl(WebScriptRequest req, Status status, Cache cache) { + // Get the list of data sets Map dataSets = dataSetService.getDataSets(); - List> dataSetList = new ArrayList>(dataSets.size()); + // Filter the loaded data sets so that they won't show up in the UI + Map filteredDataSets = filterLoadedDataSets(dataSets); - for (Map.Entry entry : dataSets.entrySet()) + List> dataSetList = new ArrayList>(filteredDataSets.size()); + + for (Map.Entry entry : filteredDataSets.entrySet()) { Map dataSet = new HashMap(2); DataSet value = entry.getValue(); @@ -55,4 +91,34 @@ public class DataSetsGet extends DeclarativeWebScript return model; } + + /** + * Helper method for filtering the data sets which already have been loaded + * + * @param dataSets A map of available data sets + * @return Map The new map of data sets which do not include the already loaded data sets + */ + private Map filterLoadedDataSets(Map dataSets) + { + // FIXME: SiteId + NodeRef filePlan = siteService.getContainer(RmSiteType.DEFAULT_SITE_NAME, RmSiteType.COMPONENT_DOCUMENT_LIBRARY); + Serializable dataSetIds = nodeService.getProperty(filePlan, PROP_LOADED_DATA_SET_IDS); + + // Check if the property of the aspect has a value. If not return the original map + if (dataSetIds != null) + { + @SuppressWarnings("unchecked") + ArrayList loadedDataSetIds = (ArrayList) dataSetIds; + for (String loadedDataSetId : loadedDataSetIds) + { + if (dataSets.containsKey(loadedDataSetId)) + { + dataSets.remove(loadedDataSetId); + } + } + } + + return dataSets; + } + }