diff --git a/rm-server/config/alfresco/module/org_alfresco_module_rm/model/recordsModel.xml b/rm-server/config/alfresco/module/org_alfresco_module_rm/model/recordsModel.xml
index 0be4c0dee8..0c76022945 100644
--- a/rm-server/config/alfresco/module/org_alfresco_module_rm/model/recordsModel.xml
+++ b/rm-server/config/alfresco/module/org_alfresco_module_rm/model/recordsModel.xml
@@ -1112,6 +1112,18 @@
false
+
+
+ Loaded Data Set Id
+
+
+ List of the loaded Data Set Ids
+ 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..a403d826ef 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,7 @@
+
diff --git a/rm-server/config/alfresco/templates/webscripts/org/alfresco/rma/datasets.get.desc.xml b/rm-server/config/alfresco/templates/webscripts/org/alfresco/rma/datasets.get.desc.xml
index db0195a056..b0161ba6c0 100644
--- a/rm-server/config/alfresco/templates/webscripts/org/alfresco/rma/datasets.get.desc.xml
+++ b/rm-server/config/alfresco/templates/webscripts/org/alfresco/rma/datasets.get.desc.xml
@@ -1,7 +1,7 @@
Get data sets
WebScript to get the list of available RM test data
- /api/rma/datasets
+ /api/rma/datasets?site={site}&unloadedonly={unloadedonly}
argument
admin
required
diff --git a/rm-server/config/alfresco/templates/webscripts/org/alfresco/rma/datasets.get.json.ftl b/rm-server/config/alfresco/templates/webscripts/org/alfresco/rma/datasets.get.json.ftl
index ed1b16310a..32b3752d6c 100644
--- a/rm-server/config/alfresco/templates/webscripts/org/alfresco/rma/datasets.get.json.ftl
+++ b/rm-server/config/alfresco/templates/webscripts/org/alfresco/rma/datasets.get.json.ftl
@@ -6,7 +6,8 @@
<#list datasets as item>
{
"label": "${item.label}",
- "id": "${item.id}"
+ "id": "${item.id}",
+ "isLoaded": "${item.isLoaded}"
}<#if item_has_next>,#if>
#list>
]
diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/dataset/DataSetService.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/dataset/DataSetService.java
index ba13b24080..4244038633 100644
--- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/dataset/DataSetService.java
+++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/dataset/DataSetService.java
@@ -21,20 +21,56 @@ public interface DataSetService
*/
Map getDataSets();
+ /**
+ * Gets the details of all available data sets for a file plan depending on
+ * the parameter "excludeLoaded".
+ *
+ * @param filePlan the file plan for which the details should be retrieved
+ * @param excludeLoaded if true only data sets will be retrieved which has
+ * not been loaded
+ * @return Map details of the available data sets for a
+ * specified file plan depending on the parameter "excludeLoaded".
+ * The result could also be an empty map
+ */
+ Map getDataSets(NodeRef filePlan, boolean excludeLoaded);
+
+ /**
+ * Gets the details of all loaded data sets for a specified file plan
+ *
+ * @param filePlan the file plan for which the loaded data sets should be
+ * retrieved
+ * @return Map details of all loaded data sets or an empty
+ * map if there has not been any data sets loaded for the specified
+ * file plan
+ */
+ Map getLoadedDataSets(NodeRef filePlan);
+
/**
* Loads the data set with the specified id into the specified file plan
*
- * @param dataSetId the id of the data set which will be imported
* @param filePlan the file plan which the data set will load into
+ * @param dataSetId the id of the data set which will be imported
*/
- void loadDataSet(String dataSetId, NodeRef filePlan);
+ void loadDataSet(NodeRef filePlan, String dataSetId);
/**
* Checks if a data set exists with the given data set id
- *
+ *
* @param dataSetId the id of the data set which will be checked
* @return true if the data set exists, false otherwise
*/
boolean existsDataSet(String dataSetId);
+ /**
+ * Checks if a data set with the id "dataSetId" has been loaded into the
+ * specified file plan
+ *
+ * @param filePlan the file plan for which the check should be done
+ * @param dataSetId the id of the data set which should be checked if it has
+ * been loaded to the file plan
+ * @return true if the data set with the specified id has been loaded into
+ * the specified file plan, false otherwise
+ */
+ boolean isLoadedDataSet(NodeRef filePlan, String dataSetId);
+
}
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..bbb5fcc5a3 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;
@@ -203,15 +206,38 @@ public class DataSetServiceImpl implements DataSetService, RecordsManagementMode
return this.dataSets;
}
+ /**
+ * @see org.alfresco.module.org_alfresco_module_rm.dataset.DataSetService#getDataSets(NodeRef,
+ * boolean)
+ */
+ @Override
+ public Map getDataSets(NodeRef filePlan, boolean excludeLoaded)
+ {
+ ParameterCheck.mandatory("filePlan", filePlan);
+ ParameterCheck.mandatory("excludeLoaded", excludeLoaded);
+
+ // Get the list of all available data sets
+ Map dataSets = new HashMap(getDataSets());
+
+ // Should the list of unloaded data sets be retrieved
+ if (excludeLoaded)
+ {
+ dataSets.keySet().removeAll(getLoadedDataSets(filePlan).keySet());
+ }
+
+ // Return the (filtered) list of data sets
+ return dataSets;
+ }
+
/**
* @see org.alfresco.module.org_alfresco_module_rm.dataset.DataSetService#loadDataSet(java.lang.String,
* org.alfresco.service.cmr.repository.NodeRef)
*/
@Override
- public void loadDataSet(String dataSetId, NodeRef filePlan)
+ public void loadDataSet(NodeRef filePlan, String dataSetId)
{
- ParameterCheck.mandatoryString("dataSetId", dataSetId);
ParameterCheck.mandatory("filePlan", filePlan);
+ ParameterCheck.mandatoryString("dataSetId", dataSetId);
// Get the data set
DataSet dataSet = getDataSets().get(dataSetId);
@@ -231,9 +257,12 @@ public class DataSetServiceImpl implements DataSetService, RecordsManagementMode
Reader viewReader = new InputStreamReader(is);
Location location = new Location(filePlan);
importerService.importView(viewReader, location, null, null);
-
+
// Patch data
patchLoadedData();
+
+ // Set the data set id into the file plan's custom aspect
+ setDataSetIdIntoFilePlan(dataSetId, filePlan);
}
catch (Exception ex)
{
@@ -256,6 +285,63 @@ public class DataSetServiceImpl implements DataSetService, RecordsManagementMode
}
}
+ /**
+ * @see org.alfresco.module.org_alfresco_module_rm.dataset.DataSetService#existsDataSet(java.lang.String)
+ */
+ @Override
+ public boolean existsDataSet(String dataSetId)
+ {
+ ParameterCheck.mandatoryString("dataSetId", dataSetId);
+
+ return getDataSets().containsKey(dataSetId);
+ }
+
+ /**
+ * @see org.alfresco.module.org_alfresco_module_rm.dataset.DataSetService#getLoadedDataSets(org.alfresco.service.cmr.repository.NodeRef)
+ */
+ @Override
+ public Map getLoadedDataSets(NodeRef filePlan)
+ {
+ ParameterCheck.mandatory("filePlan", filePlan);
+
+ // Get the list of available data sets
+ Map availableDataSets = new HashMap(getDataSets());
+
+ // Get the property value of the aspect
+ Serializable dataSetIds = nodeService.getProperty(filePlan, PROP_LOADED_DATA_SET_IDS);
+ // Check if any data has been loaded before
+ if (dataSetIds != null)
+ {
+ // Filter the data sets which have already been loaded
+ @SuppressWarnings("unchecked")
+ ArrayList loadedDataSetIds = (ArrayList) dataSetIds;
+ for (Map.Entry entry : availableDataSets.entrySet())
+ {
+ String key = entry.getKey();
+ if (!loadedDataSetIds.contains(key))
+ {
+ availableDataSets.remove(key);
+ }
+ }
+ return availableDataSets;
+ }
+
+ return new HashMap();
+ }
+
+ /**
+ * @see org.alfresco.module.org_alfresco_module_rm.dataset.DataSetService#isLoadedDataSet(org.alfresco.service.cmr.repository.NodeRef,
+ * java.lang.String)
+ */
+ @Override
+ public boolean isLoadedDataSet(NodeRef filePlan, String dataSetId)
+ {
+ ParameterCheck.mandatory("filePlan", filePlan);
+ ParameterCheck.mandatory("dataSetId", dataSetId);
+
+ return getLoadedDataSets(filePlan).containsKey(dataSetId);
+ }
+
/**
* Temp method to patch AMP'ed data
*
@@ -386,14 +472,37 @@ public class DataSetServiceImpl implements DataSetService, RecordsManagementMode
}
/**
- * @see org.alfresco.module.org_alfresco_module_rm.dataset.DataSetService#existsDataSet(java.lang.String)
+ * Helper method for setting the id of the imported data set into the file
+ * plan's aspect
+ *
+ * @param dataSetId The id of the imported data set
+ * @param filePlan The file plan into which the data set has been imported
*/
- @Override
- public boolean existsDataSet(String dataSetId)
+ @SuppressWarnings("unchecked")
+ private void setDataSetIdIntoFilePlan(String dataSetId, NodeRef filePlan)
{
- ParameterCheck.mandatoryString("dataSetId", dataSetId);
+ ArrayList loadedDataSetIds;
+ Serializable dataSetIds = nodeService.getProperty(filePlan, PROP_LOADED_DATA_SET_IDS);
- return getDataSets().containsKey(dataSetId);
+ // 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_ID, 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_ID, aspectProperties);
}
}
diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/model/RecordsManagementModel.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/model/RecordsManagementModel.java
index 5891cb5788..b7cad234b4 100644
--- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/model/RecordsManagementModel.java
+++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/model/RecordsManagementModel.java
@@ -219,4 +219,8 @@ public interface RecordsManagementModel extends RecordsManagementCustomModel
public static final QName PROP_RS_DISPOITION_INSTRUCTIONS = QName.createQName(RM_URI, "recordSearchDispositionInstructions");
public static final QName PROP_RS_DISPOITION_AUTHORITY = QName.createQName(RM_URI, "recordSearchDispositionAuthority");
public static final QName PROP_RS_HOLD_REASON = QName.createQName(RM_URI, "recordSearchHoldReason");
+
+ // Loaded Data Set Ids
+ public static final QName ASPECT_LOADED_DATA_SET_ID = QName.createQName(RM_URI, "loadedDataSetId");
+ public static final QName PROP_LOADED_DATA_SET_IDS = QName.createQName(RM_URI, "loadedDataSetIds");
}
diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/script/DataSetPost.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/script/DataSetPost.java
index a1b2660396..8945d6c2e5 100644
--- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/script/DataSetPost.java
+++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/script/DataSetPost.java
@@ -92,7 +92,7 @@ public class DataSetPost extends DeclarativeWebScript implements RecordsManageme
}
// Load data set in to the file plan
- dataSetService.loadDataSet(dataSetId, filePlan);
+ dataSetService.loadDataSet(filePlan, dataSetId);
Map model = new HashMap(1, 1.0f);
model.put("success", true);
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..537cc5452a 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
@@ -7,6 +7,10 @@ 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.RmSiteType;
+import org.alfresco.service.cmr.repository.NodeRef;
+import org.alfresco.service.cmr.site.SiteService;
+import org.apache.commons.lang.StringUtils;
import org.springframework.extensions.webscripts.Cache;
import org.springframework.extensions.webscripts.DeclarativeWebScript;
import org.springframework.extensions.webscripts.Status;
@@ -18,6 +22,9 @@ public class DataSetsGet extends DeclarativeWebScript
/** Data set service */
private DataSetService dataSetService;
+ /** Site service */
+ private SiteService siteService;
+
/**
* Set data set service
*
@@ -28,6 +35,16 @@ public class DataSetsGet extends DeclarativeWebScript
this.dataSetService = dataSetService;
}
+ /**
+ * 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,17 +53,36 @@ public class DataSetsGet extends DeclarativeWebScript
@Override
protected Map executeImpl(WebScriptRequest req, Status status, Cache cache)
{
- Map dataSets = dataSetService.getDataSets();
+ // Get the site name from the URL and find out the file plan
+ String siteName = req.getParameter("site");
+ NodeRef filePlan = siteService.getContainer(siteName, RmSiteType.COMPONENT_DOCUMENT_LIBRARY);
+
+ // Check if only unloaded data sets should be returned - default value is false
+ String unloadedOnlyParam = req.getParameter("unloadedonly");
+ boolean unloadedOnly = false;
+ if (StringUtils.isNotBlank(unloadedOnlyParam))
+ {
+ unloadedOnly = new Boolean(unloadedOnlyParam).booleanValue();
+ }
+
+ // Get the loaded/unloaded data sets depending on the "unloadedOnly" parameter
+ Map dataSets = dataSetService.getDataSets(filePlan, unloadedOnly);
List