RM dependency upgrade (4.2.d)

git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/modules/recordsmanagement/HEAD@49264 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
Tuna Aksoy
2013-04-15 20:49:23 +00:00
parent 049869a6c1
commit 54b89a0973
23 changed files with 833 additions and 792 deletions

View File

@@ -199,6 +199,7 @@
<property name="recordsManagementService" ref="recordsManagementService"/>
<property name="recordService" ref="recordService"/>
<property name="recordsManagementAdminService" ref="recordsManagementAdminService"/>
<property name="dictionaryService" ref="DictionaryService" />
</bean>
<bean id="rmNodeFormFilter"

View File

@@ -8,4 +8,4 @@ module.title=Records Management
module.description=Alfresco Record Management Extension
module.version=2.1
module.repo.version.min=4.1.3
module.repo.version.min=4.2

View File

@@ -440,7 +440,7 @@
parent="baseService"
class="org.alfresco.module.org_alfresco_module_rm.fileplan.FilePlanServiceImpl">
<!-- NOTE: for some reason we need to grab these references within the class to avoid cyclic Spring issues! -->
<!-- <property name="permissionService" ref="permissionService"/> -->
<!-- <property name="permissionService" ref="permissionService"/> -->
<!-- <property name="nodeDAO" ref="nodeDAO"/> -->
<!-- <property name="internalNodeService" ref="nodeService"/> -->
<!-- <property name="siteService" ref="SiteService" /> -->
@@ -1158,9 +1158,9 @@
</value>
</property>
</bean>
<!-- File Plan Authentication Service -->
<bean id="filePlanAuthenticationService"
class="org.alfresco.module.org_alfresco_module_rm.security.FilePlanAuthenticationServiceImpl">
<property name="rmAdminUserName" value="${bootstrap.rmadmin.name}" />
@@ -1399,6 +1399,7 @@
<property name="dictionaryService" ref="dictionaryService"/>
<property name="tenantService" ref="tenantService"/>
<property name="nodeDAO" ref="nodeDAO"/>
<property name="nodeService" ref="nodeService"/>
<property name="qnameDAO" ref="qnameDAO"/>
<property name="localeDAO" ref="localeDAO"/>
<property name="contentDataDAO" ref="contentDataDAO"/>

View File

@@ -68,6 +68,7 @@
class="org.alfresco.module.org_alfresco_module_rm.script.CustomReferenceDefinitionsGet"
parent="webscript">
<property name="recordsManagementAdminService" ref="RecordsManagementAdminService" />
<property name="dictionaryService" ref="DictionaryService" />
</bean>
<!-- REST impl for PUT Custom Reference Definitions -->
@@ -89,6 +90,7 @@
class="org.alfresco.module.org_alfresco_module_rm.script.CustomRefsGet"
parent="rmBaseWebscript">
<property name="recordsManagementAdminService" ref="RecordsManagementAdminService" />
<property name="dictionaryService" ref="DictionaryService" />
</bean>
<!-- REST impl for POST Custom Reference Instance -->
@@ -155,6 +157,7 @@
parent="webscript">
<property name="dispositionService" ref="DispositionService" />
<property name="namespaceService" ref="NamespaceService" />
<property name="dictionaryService" ref="DictionaryService" />
</bean>
<!-- REST impl for GET Records MetaData aspects -->
@@ -514,7 +517,7 @@
<bean id="webscript.org.alfresco.repository.rule.rm-actiondefinitions.get"
class="org.alfresco.repo.web.scripts.rule.RmActionDefinitionsGet"
parent="webscript">
<property name="recordsManagementActionService" ref="RecordsManagementActionService"/>
<property name="recordsManagementActionService" ref="RecordsManagementActionService"/>
</bean>
<!-- REST impl for GET Action Condition Defitions for RM -->
@@ -522,7 +525,7 @@
class="org.alfresco.repo.web.scripts.rule.RmActionConditionDefinitionsGet"
parent="webscript">
<property name="actionService" ref="ActionService"/>
<property name="recordsManagementActionService" ref="RecordsManagementActionService"/>
<property name="recordsManagementActionService" ref="RecordsManagementActionService"/>
</bean>
<!-- REST impl for GET Class Definitions for RM/DM -->

View File

@@ -56,9 +56,9 @@ import org.springframework.util.FileCopyUtils;
/**
* Split Email Action
*
*
* Splits the attachments for an email message out to independent records.
*
*
* @author Mark Rogers
*/
public class SplitEmailAction extends RMActionExecuterAbstractBase
@@ -67,30 +67,30 @@ public class SplitEmailAction extends RMActionExecuterAbstractBase
private static final String MSG_NO_READ_MIME_MESSAGE = "rm.action.no-read-mime-message";
private static final String MSG_EMAIL_DECLARED = "rm.action.email-declared";
private static final String MSG_EMAIL_NOT_RECORD = "rm.action.email-not-record";
/** Relationship Labels */
private static final String REL_FROM = "Message";
private static final String REL_TO = "Attachment";
/** Logger */
private static Log logger = LogFactory.getLog(SplitEmailAction.class);
private QName relationshipQName;
public void bootstrap()
{
String compoundId = recordsManagementAdminService.getCompoundIdFor(REL_FROM, REL_TO);
String compoundId = recordsManagementAdminService.getCompoundIdFor(REL_FROM, REL_TO);
Map<QName, AssociationDefinition> map = recordsManagementAdminService.getCustomReferenceDefinitions();
for (Map.Entry<QName, AssociationDefinition> entry : map.entrySet())
{
if (compoundId.equals(entry.getValue().getTitle()) == true)
if (compoundId.equals(entry.getValue().getTitle(dictionaryService)) == true)
{
relationshipQName = entry.getKey();
break;
}
}
if (relationshipQName == null)
{
relationshipQName = recordsManagementAdminService.addCustomChildAssocDefinition(REL_FROM, REL_TO);
@@ -106,7 +106,7 @@ public class SplitEmailAction extends RMActionExecuterAbstractBase
{
// get node type
nodeService.getType(actionedUponNodeRef);
if (logger.isDebugEnabled() == true)
{
logger.debug("split email:" + actionedUponNodeRef);
@@ -117,8 +117,8 @@ public class SplitEmailAction extends RMActionExecuterAbstractBase
if (recordService.isDeclared(actionedUponNodeRef) == false)
{
ChildAssociationRef parent = nodeService.getPrimaryParent(actionedUponNodeRef);
/**
/**
* Check whether the email message has already been split - do nothing if it has already been split
*/
List<AssociationRef> refs = nodeService.getTargetAssocs(actionedUponNodeRef, ImapModel.ASSOC_IMAP_ATTACHMENT);
@@ -130,7 +130,7 @@ public class SplitEmailAction extends RMActionExecuterAbstractBase
}
return;
}
/**
* Get the content and if its a mime message then create atachments for each part
*/
@@ -152,12 +152,12 @@ public class SplitEmailAction extends RMActionExecuterAbstractBase
createAttachment(actionedUponNodeRef, parent.getParentRef(), part);
}
}
}
}
}
}
catch (Exception e)
{
throw new AlfrescoRuntimeException(I18NUtil.getMessage(MSG_NO_READ_MIME_MESSAGE, e.toString()), e);
}
}
}
else
{
@@ -169,7 +169,7 @@ public class SplitEmailAction extends RMActionExecuterAbstractBase
throw new AlfrescoRuntimeException(I18NUtil.getMessage(MSG_EMAIL_NOT_RECORD, actionedUponNodeRef.toString()));
}
}
/**
* Create attachment from Mime Message Part
* @param messageNodeRef - the node ref of the mime message
@@ -192,7 +192,7 @@ public class SplitEmailAction extends RMActionExecuterAbstractBase
logger.warn("Cannot decode file name '" + fileName + "'", e);
}
}
Map<QName, Serializable> messageProperties = nodeService.getProperties(messageNodeRef);
String messageTitle = (String)messageProperties.get(ContentModel.PROP_NAME);
if(messageTitle == null)
@@ -201,24 +201,24 @@ public class SplitEmailAction extends RMActionExecuterAbstractBase
}
else
{
messageTitle = messageTitle + " - " + fileName;
messageTitle = messageTitle + " - " + fileName;
}
ContentType contentType = new ContentType(part.getContentType());
Map<QName, Serializable> docProps = new HashMap<QName, Serializable>(1);
docProps.put(ContentModel.PROP_NAME, messageTitle + " - " + fileName);
docProps.put(ContentModel.PROP_TITLE, fileName);
/**
* Create an attachment node in the same folder as the message
*/
ChildAssociationRef attachmentRef = nodeService.createNode(parentNodeRef,
ContentModel.ASSOC_CONTAINS,
QName.createQName(NamespaceService.CONTENT_MODEL_1_0_URI, fileName),
ChildAssociationRef attachmentRef = nodeService.createNode(parentNodeRef,
ContentModel.ASSOC_CONTAINS,
QName.createQName(NamespaceService.CONTENT_MODEL_1_0_URI, fileName),
ContentModel.TYPE_CONTENT,
docProps);
/**
* Write the content into the new attachment node
*/
@@ -226,18 +226,18 @@ public class SplitEmailAction extends RMActionExecuterAbstractBase
writer.setMimetype(contentType.getBaseType());
OutputStream os = writer.getContentOutputStream();
FileCopyUtils.copy(part.getInputStream(), os);
/**
* Create a link from the message to the attachment
*/
*/
createRMReference(messageNodeRef, attachmentRef.getChildRef());
}
/**
* Create a link from the message to the attachment
*/
*/
private void createRMReference(final NodeRef parentRef, final NodeRef childRef)
{
AuthenticationUtil.runAsSystem(new RunAsWork<Void>()
@@ -246,16 +246,16 @@ public class SplitEmailAction extends RMActionExecuterAbstractBase
public Void doWork() throws Exception
{
// add the relationship
recordsManagementAdminService.addCustomReference(parentRef, childRef, relationshipQName);
recordsManagementAdminService.addCustomReference(parentRef, childRef, relationshipQName);
// add the IMAP attachment aspect
nodeService.createAssociation(
parentRef,
childRef,
ImapModel.ASSOC_IMAP_ATTACHMENT);
return null;
}
}
});
}
}
}

View File

@@ -818,7 +818,7 @@ public class RecordsManagementAuditServiceImpl
if (nodeTypeQname != null)
{
TypeDefinition typeDef = dictionaryService.getType(nodeTypeQname);
nodeType = (typeDef != null) ? typeDef.getTitle() : null;
nodeType = (typeDef != null) ? typeDef.getTitle(dictionaryService) : null;
}
}
else if (values.containsKey(RecordsManagementAuditService.RM_AUDIT_DATA_LOGIN_USERNAME))
@@ -1291,7 +1291,7 @@ public class RecordsManagementAuditServiceImpl
PropertyDefinition propDef = this.dictionaryService.getProperty(property);
if (propDef != null)
{
label = propDef.getTitle();
label = propDef.getTitle(dictionaryService);
}
if (label == null)

View File

@@ -33,17 +33,17 @@ import org.alfresco.service.namespace.QName;
/**
* Extended RFC822 Metadata Extractor that is sensitive to whether we are in a RM
* site or not.
*
*
* @author Roy Wetherall
*/
public class RFC822MetadataExtracter extends org.alfresco.repo.content.metadata.RFC822MetadataExtracter
{
/** Reference to default properties */
private static final String PROPERTIES_URL = "org/alfresco/repo/content/metadata/RFC822MetadataExtracter.properties";
private static final String PROPERTIES_URL = "alfresco/metadata/RFC822MetadataExtracter.properties";
/** Node service */
private NodeService nodeService;
/**
* Sets the node service
* @param nodeService node service
@@ -52,7 +52,7 @@ public class RFC822MetadataExtracter extends org.alfresco.repo.content.metadata.
{
this.nodeService = nodeService;
}
/**
* @see org.alfresco.repo.content.metadata.AbstractMappingMetadataExtracter#filterSystemProperties(java.util.Map, java.util.Map)
*/
@@ -73,7 +73,7 @@ public class RFC822MetadataExtracter extends org.alfresco.repo.content.metadata.
}
}
}
/**
* @see org.alfresco.repo.content.metadata.AbstractMappingMetadataExtracter#getDefaultMapping()
*/
@@ -82,7 +82,7 @@ public class RFC822MetadataExtracter extends org.alfresco.repo.content.metadata.
// Attempt to load the properties
return readMappingProperties(PROPERTIES_URL);
}
/**
* Given a set of properties, try and retrieve the node reference
* @param properties node properties
@@ -91,21 +91,21 @@ public class RFC822MetadataExtracter extends org.alfresco.repo.content.metadata.
private NodeRef getNodeRef(Map<QName, Serializable> properties)
{
NodeRef result = null;
// Get the elements of the node reference
String storeProto = (String)properties.get(ContentModel.PROP_STORE_PROTOCOL);
String storeId = (String)properties.get(ContentModel.PROP_STORE_IDENTIFIER);
String nodeId = (String)properties.get(ContentModel.PROP_NODE_UUID);
if (storeProto != null && storeProto.length() != 0 &&
storeId != null && storeId.length() != 0 &&
nodeId != null && nodeId.length() != 0)
{
// Create the node reference
result = new NodeRef(new StoreRef(storeProto, storeId), nodeId);
}
return result;
}
}

View File

@@ -32,6 +32,7 @@ import org.alfresco.repo.forms.Form;
import org.alfresco.repo.forms.FormData;
import org.alfresco.repo.forms.processor.AbstractFilter;
import org.alfresco.repo.forms.processor.node.FieldUtils;
import org.alfresco.service.cmr.dictionary.DictionaryService;
import org.alfresco.service.cmr.dictionary.PropertyDefinition;
import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.service.cmr.repository.NodeService;
@@ -43,7 +44,7 @@ import org.apache.commons.logging.LogFactory;
/**
* Abstract base class for records management related form filter
* implementations.
*
*
* @author Gavin Cornwell
*/
public abstract class RecordsManagementFormFilter<ItemType> extends AbstractFilter<ItemType, NodeRef>
@@ -60,10 +61,11 @@ public abstract class RecordsManagementFormFilter<ItemType> extends AbstractFilt
protected RecordsManagementService rmService;
protected RecordsManagementAdminService rmAdminService;
protected RecordService recordService;
protected DictionaryService dictionaryService;
/**
* Sets the NamespaceService instance
*
*
* @param namespaceService The NamespaceService instance
*/
public void setNamespaceService(NamespaceService namespaceService)
@@ -73,7 +75,7 @@ public abstract class RecordsManagementFormFilter<ItemType> extends AbstractFilt
/**
* Sets the node service
*
*
* @param nodeService The NodeService instance
*/
public void setNodeService(NodeService nodeService)
@@ -83,17 +85,17 @@ public abstract class RecordsManagementFormFilter<ItemType> extends AbstractFilt
/**
* Sets the RecordsManagementServiceRegistry instance
*
*
* @param rmServiceRegistry The RecordsManagementServiceRegistry instance
*/
public void setRecordsManagementServiceRegistry(RecordsManagementServiceRegistry rmServiceRegistry)
{
this.rmServiceRegistry = rmServiceRegistry;
}
/**
* Sets the RecordsManagementService instance
*
*
* @param rmService The RecordsManagementService instance
*/
public void setRecordsManagementService(RecordsManagementService rmService)
@@ -103,14 +105,14 @@ public abstract class RecordsManagementFormFilter<ItemType> extends AbstractFilt
/**
* Sets the RecordsManagementAdminService instance
*
*
* @param rmAdminService The RecordsManagementAdminService instance
*/
public void setRecordsManagementAdminService(RecordsManagementAdminService rmAdminService)
{
this.rmAdminService = rmAdminService;
}
/**
* @param recordService record service
*/
@@ -118,10 +120,18 @@ public abstract class RecordsManagementFormFilter<ItemType> extends AbstractFilt
{
this.recordService = recordService;
}
/**
* @param dictionaryService dictionary service
*/
public void setDictionaryService(DictionaryService dictionaryService)
{
this.dictionaryService = dictionaryService;
}
/**
* Add property fields to group
*
*
* @param form
* @param props
* @param setId
@@ -133,17 +143,17 @@ public abstract class RecordsManagementFormFilter<ItemType> extends AbstractFilt
for (Map.Entry<QName, PropertyDefinition> entry : props.entrySet())
{
PropertyDefinition prop = entry.getValue();
String id = form.getItem().getId();
id = id.replaceFirst("/", "://");
NodeRef nodeRef = new NodeRef(id);
Serializable value = nodeService.getProperty(nodeRef, entry.getKey());
FieldGroup group = new FieldGroup(setId, null, false, false, null);
Field field = FieldUtils.makePropertyField(prop, value, group, namespaceService);
Field field = FieldUtils.makePropertyField(prop, value, group, namespaceService, dictionaryService);
form.addField(field);
if (logger.isDebugEnabled() == true)
{
logger.debug("Adding custom property .. " + prop.getName().toString() + " .. with value " + value + ".. to group .. " + setId);

View File

@@ -54,7 +54,7 @@ import org.apache.commons.logging.LogFactory;
* management type are provided as part of the Form and also assigned to the
* same field group.
* </p>
*
*
* @author Gavin Cornwell
*/
public class RecordsManagementNodeFormFilter extends RecordsManagementFormFilter<NodeRef> implements RecordsManagementModel, DOD5015Model
@@ -68,23 +68,23 @@ public class RecordsManagementNodeFormFilter extends RecordsManagementFormFilter
/** Dictionary service */
protected DictionaryService dictionaryService;
/** Disposition service */
protected DispositionService dispositionService;
protected DispositionService dispositionService;
/**
* Sets the data dictionary service
*
*
* @param dictionaryService The DictionaryService instance
*/
public void setDictionaryService(DictionaryService dictionaryService)
{
this.dictionaryService = dictionaryService;
}
/**
* Sets the disposition service
*
*
* @param dispositionService disposition service
*/
public void setDispositionService(DispositionService dispositionService)
@@ -97,32 +97,32 @@ public class RecordsManagementNodeFormFilter extends RecordsManagementFormFilter
*/
@Override
public void afterGenerate(
NodeRef nodeRef,
List<String> fields,
List<String> forcedFields,
NodeRef nodeRef,
List<String> fields,
List<String> forcedFields,
Form form,
Map<String, Object> context)
{
if (rmService.isFilePlanComponent(nodeRef) == true)
{
{
// add all the custom properties
addCustomPropertyFieldsToGroup(form, nodeRef);
FilePlanComponentKind kind = rmService.getFilePlanComponentKind(nodeRef);
if (FilePlanComponentKind.RECORD.equals(kind) == true)
{
// add all the record meta-data aspect properties
addRecordMetadataPropertyFieldsToGroup(form, nodeRef);
// add required transient properties
addTransientProperties(form, nodeRef);
// add the supplemental marking list property
forceSupplementalMarkingListProperty(form, nodeRef);
// protect uneditable properties
protectRecordProperties(form, nodeRef);
// if the record is the result of an email we need to 'protect' some fields
if (this.nodeService.hasAspect(nodeRef, ImapModel.ASPECT_IMAP_CONTENT))
{
@@ -133,14 +133,14 @@ public class RecordsManagementNodeFormFilter extends RecordsManagementFormFilter
{
// add the supplemental marking list property
forceSupplementalMarkingListProperty(form, nodeRef);
// add required transient properties
addTransientProperties(form, nodeRef);
}
else if (FilePlanComponentKind.DISPOSITION_SCHEDULE.equals(kind) == true)
{
// use the same mechanism used to determine whether steps can be removed from the
// schedule to determine whether the disposition level can be changed i.e. record
// schedule to determine whether the disposition level can be changed i.e. record
// level or folder level.
DispositionSchedule schedule = new DispositionScheduleImpl(this.rmServiceRegistry, this.nodeService, nodeRef);
if (dispositionService.hasDisposableItems(schedule) == true)
@@ -148,19 +148,19 @@ public class RecordsManagementNodeFormFilter extends RecordsManagementFormFilter
protectRecordLevelDispositionPropertyField(form);
}
}
}
}
/**
*
*
* @param form
* @param nodeRef
*/
protected void addCustomPropertyFieldsToGroup(Form form, NodeRef nodeRef)
{
Set<QName> customisables = rmAdminService.getCustomisable(nodeRef);
// Compatibility support: don't show category properties if node of type series
QName type = nodeService.getType(nodeRef);
if (CompatibilityModel.TYPE_RECORD_SERIES.equals(type) == true)
@@ -168,22 +168,22 @@ public class RecordsManagementNodeFormFilter extends RecordsManagementFormFilter
// remove record category from the list of customisable types to apply to the form
customisables.remove(TYPE_RECORD_CATEGORY);
}
for (QName customisable : customisables)
{
addPropertyFieldsToGroup(form, rmAdminService.getCustomPropertyDefinitions(customisable), CUSTOM_RM_FIELD_GROUP_ID);
}
}
/**
*
*
* @param form
* @param nodeRef
*/
protected void addRecordMetadataPropertyFieldsToGroup(Form form, NodeRef nodeRef)
{
Set<QName> aspects = recordService.getRecordMetaDataAspects();
for (QName aspect : aspects)
{
if (nodeService.hasAspect(nodeRef, aspect) == true)
@@ -199,26 +199,26 @@ public class RecordsManagementNodeFormFilter extends RecordsManagementFormFilter
* Forces the "rmc:supplementalMarkingList" property to be present, if it is
* already on the given node this method does nothing, otherwise a property
* field definition is generated for the property.
*
*
* @param form The Form instance to add the property to
* @param nodeRef The node the form is being generated for
*/
protected void forceSupplementalMarkingListProperty(Form form, NodeRef nodeRef)
{
if (!this.nodeService.hasAspect(nodeRef,
if (!this.nodeService.hasAspect(nodeRef,
RecordsManagementCustomModel.ASPECT_SUPPLEMENTAL_MARKING_LIST))
{
PropertyDefinition propDef = this.dictionaryService.getProperty(
RecordsManagementCustomModel.PROP_SUPPLEMENTAL_MARKING_LIST);
if (propDef != null)
{
Field field = FieldUtils.makePropertyField(propDef, null, null, namespaceService);
Field field = FieldUtils.makePropertyField(propDef, null, null, namespaceService, dictionaryService);
form.addField(field);
}
else if (logger.isWarnEnabled())
{
logger.warn("Could not add " +
logger.warn("Could not add " +
RecordsManagementCustomModel.PROP_SUPPLEMENTAL_MARKING_LIST.getLocalName() +
" property as it's definition could not be found");
}
@@ -226,7 +226,7 @@ public class RecordsManagementNodeFormFilter extends RecordsManagementFormFilter
}
/**
*
*
* @param form
* @param nodeRef
*/
@@ -236,7 +236,7 @@ public class RecordsManagementNodeFormFilter extends RecordsManagementFormFilter
{
addTransientPropertyField(form, TRANSIENT_DECLARED, DataTypeDefinition.BOOLEAN, recordService.isDeclared(nodeRef));
}
DispositionSchedule ds = dispositionService.getDispositionSchedule(nodeRef);
if (ds != null)
{
@@ -245,7 +245,7 @@ public class RecordsManagementNodeFormFilter extends RecordsManagementFormFilter
{
addTransientPropertyField(form, TRANSIENT_DISPOSITION_INSTRUCTIONS, DataTypeDefinition.TEXT, instructions);
}
NodeRef recordCategory = dispositionService.getAssociatedRecordsManagementContainer(ds);
if (recordCategory != null)
{
@@ -255,11 +255,11 @@ public class RecordsManagementNodeFormFilter extends RecordsManagementFormFilter
addTransientPropertyField(form, TRANSIENT_CATEGORY_ID, DataTypeDefinition.TEXT, categoryId);
}
}
}
}
}
/**
*
*
* @param form
* @param name
* @param type
@@ -276,9 +276,9 @@ public class RecordsManagementNodeFormFilter extends RecordsManagementFormFilter
form.addFieldDefinition(declaredField);
form.addData(dataKeyName, value);
}
/**
*
*
* @param form
* @param nodeRef
*/
@@ -296,15 +296,15 @@ public class RecordsManagementNodeFormFilter extends RecordsManagementFormFilter
prefixName = "cm:content";
}
else
{
{
prefixName = fieldDef.getName();
}
if (logger.isDebugEnabled() == true)
{
logger.debug("Checking property " + prefixName + " is editable by user " + AuthenticationUtil.getFullyAuthenticatedUser());
}
QName qname = QName.createQName(prefixName, namespaceService);
if (recordService.isPropertyEditable(nodeRef, qname) == false)
{
@@ -315,13 +315,13 @@ public class RecordsManagementNodeFormFilter extends RecordsManagementFormFilter
fieldDef.setProtectedField(true);
}
}
}
}
}
/**
* Marks all the fields that contain data extracted from an email
* as protected fields.
*
*
* @param form The Form instance to add the property to
* @param nodeRef The node the form is being generated for
*/
@@ -332,14 +332,14 @@ public class RecordsManagementNodeFormFilter extends RecordsManagementFormFilter
for (FieldDefinition fieldDef : fieldDefs)
{
String prefixName = fieldDef.getName();
// check the value of the property, if empty then do not mark property
// check the value of the property, if empty then do not mark property
// as read only
QName qname = QName.createQName(prefixName, namespaceService);
Serializable value = nodeService.getProperty(nodeRef, qname);
if (value != null)
{
if (prefixName.equals("cm:title") ||
{
if (prefixName.equals("cm:title") ||
prefixName.equals("cm:author") ||
prefixName.equals("rma:originator") ||
prefixName.equals("rma:publicationDate") ||
@@ -351,16 +351,16 @@ public class RecordsManagementNodeFormFilter extends RecordsManagementFormFilter
}
}
}
if (logger.isDebugEnabled() == true)
{
logger.debug("Set email related fields to be protected");
}
}
/**
* Marks the recordLevelDisposition property as protected to disable editing
*
*
* @param form The Form instance
*/
protected void protectRecordLevelDispositionPropertyField(Form form)
@@ -375,7 +375,7 @@ public class RecordsManagementNodeFormFilter extends RecordsManagementFormFilter
break;
}
}
if (logger.isDebugEnabled())
logger.debug("Set 'rma:recordLevelDisposition' field to be protected as record folders or records are present");
}

View File

@@ -49,7 +49,7 @@ import org.springframework.extensions.surf.util.ParameterCheck;
* The filter also ensures that any custom properties defined for the records
* management type are provided as part of the Form.
* </p>
*
*
* @author Gavin Cornwell
*/
public class RecordsManagementTypeFormFilter extends RecordsManagementFormFilter<TypeDefinition> implements RecordsManagementModel
@@ -66,10 +66,10 @@ public class RecordsManagementTypeFormFilter extends RecordsManagementFormFilter
protected static final FieldGroup TITLE_FIELD_GROUP = new FieldGroup(TITLE_FIELD_GROUP_ID, null, false, false, null);
protected static final FieldGroup DESC_FIELD_GROUP = new FieldGroup(DESC_FIELD_GROUP_ID, null, false, false, null);
protected static final FieldGroup OTHER_FIELD_GROUP = new FieldGroup(OTHER_FIELD_GROUP_ID, null, false, false, null);
/** Identifier service */
protected IdentifierService identifierService;
/**
* @param identifierService identifier service
*/
@@ -77,7 +77,7 @@ public class RecordsManagementTypeFormFilter extends RecordsManagementFormFilter
{
this.identifierService = identifierService;
}
/*
* @see
* org.alfresco.repo.forms.processor.Filter#afterGenerate(java.lang.Object,
@@ -87,12 +87,12 @@ public class RecordsManagementTypeFormFilter extends RecordsManagementFormFilter
public void afterGenerate(TypeDefinition type, List<String> fields, List<String> forcedFields, Form form,
Map<String, Object> context)
{
QName typeName = type.getName();
QName typeName = type.getName();
if (rmAdminService.isCustomisable(typeName) == true)
{
addCustomRMProperties(typeName, form);
addCustomRMProperties(typeName, form);
}
// What about any mandatory aspects?
Set<QName> aspects = type.getDefaultAspectNames();
for (QName aspect : aspects)
@@ -107,7 +107,7 @@ public class RecordsManagementTypeFormFilter extends RecordsManagementFormFilter
/**
* Adds a property definition for each of the custom properties for the
* given RM type to the given form.
*
*
* @param rmTypeCustomAspect Enum representing the RM type to add custom
* properties for
* @param form The form to add the properties to
@@ -116,20 +116,20 @@ public class RecordsManagementTypeFormFilter extends RecordsManagementFormFilter
{
ParameterCheck.mandatory("customisableType", customisableType);
ParameterCheck.mandatory("form", form);
Map<QName, PropertyDefinition> customProps = rmAdminService.getCustomPropertyDefinitions(customisableType);
if (customProps != null)
{
if (logger.isDebugEnabled() == true)
{
logger.debug("Found " + customProps.size() + " custom properties for customisable type " + customisableType);
}
// setup field definition for each custom property
Collection<PropertyDefinition> properties = customProps.values();
FieldGroup group = new FieldGroup(CUSTOM_RM_FIELD_GROUP_ID, null, false, false, null);
List<Field> fields = FieldUtils.makePropertyFields(properties, group, namespaceService);
List<Field> fields = FieldUtils.makePropertyFields(properties, group, namespaceService, dictionaryService);
form.addFields(fields);
}
}
@@ -140,5 +140,5 @@ public class RecordsManagementTypeFormFilter extends RecordsManagementFormFilter
public void afterPersist(TypeDefinition item, FormData data, final NodeRef nodeRef)
{
}
}

View File

@@ -36,7 +36,7 @@ import org.json.simple.JSONObject;
/**
* Extend JSON conversion component to include RM specifics.
*
*
* @author Roy Wetherall
*/
public class JSONConversionComponent extends org.alfresco.repo.jscript.app.JSONConversionComponent
@@ -162,7 +162,7 @@ public class JSONConversionComponent extends org.alfresco.repo.jscript.app.JSONC
if (unfiledRecordContainer != null)
{
rmNodeValues.put("unfiledRecordContainer", unfiledRecordContainer.toString());
rmNodeValues.put("properties", propertiesToJSON(unfiledRecordContainer, useShortQName));
rmNodeValues.put("properties", propertiesToJSON(unfiledRecordContainer, nodeService.getProperties(unfiledRecordContainer), useShortQName));
QName type = fileFolderService.getFileInfo(unfiledRecordContainer).getType();
rmNodeValues.put("type", useShortQName ? type.toPrefixString(namespaceService) : type.toString());
}

View File

@@ -245,7 +245,7 @@ public class RecordsManagementNotificationHelper implements RecordsManagementMod
notificationContext.setAsyncNotification(false);
notificationContext.setIgnoreNotificationFailure(true);
notificationContext.setBodyTemplate(getDueForReviewTemplate());
notificationContext.setBodyTemplate(getDueForReviewTemplate().toString());
Map<String, Serializable> args = new HashMap<String, Serializable>(1, 1.0f);
args.put("records", (Serializable)records);
args.put("site", getSiteName(root));
@@ -286,7 +286,7 @@ public class RecordsManagementNotificationHelper implements RecordsManagementMod
notificationContext.setAsyncNotification(false);
notificationContext.setIgnoreNotificationFailure(true);
notificationContext.setBodyTemplate(supersededTemplate);
notificationContext.setBodyTemplate(supersededTemplate.toString());
Map<String, Serializable> args = new HashMap<String, Serializable>(1, 1.0f);
args.put("record", record);
args.put("site", getSiteName(root));
@@ -331,13 +331,13 @@ public class RecordsManagementNotificationHelper implements RecordsManagementMod
args.put("rejectDate", rejectDate);
args.put("recordId", recordId);
args.put("recordName", recordName);
NotificationContext notificationContext = new NotificationContext();
notificationContext.setAsyncNotification(true);
notificationContext.setIgnoreNotificationFailure(true);
notificationContext.addTo(recordCreator);
notificationContext.setSubject(I18NUtil.getMessage(MSG_SUBJECT_RECORD_REJECTED));
notificationContext.setBodyTemplate(getRejectedTemplate());
notificationContext.setBodyTemplate(getRejectedTemplate().toString());
notificationContext.setTemplateArgs(args);
notificationService.sendNotification(EMailNotificationProvider.NAME, notificationContext);

View File

@@ -29,6 +29,7 @@ import javax.servlet.http.HttpServletResponse;
import org.alfresco.module.org_alfresco_module_rm.RecordsManagementAdminService;
import org.alfresco.service.cmr.dictionary.AssociationDefinition;
import org.alfresco.service.cmr.dictionary.ChildAssociationDefinition;
import org.alfresco.service.cmr.dictionary.DictionaryService;
import org.alfresco.service.namespace.QName;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -40,7 +41,7 @@ import org.springframework.extensions.webscripts.WebScriptRequest;
/**
* This class provides the implementation for the customrefdefinitions.get webscript.
*
*
* @author Neil McErlean
*/
public class CustomReferenceDefinitionsGet extends DeclarativeWebScript
@@ -52,23 +53,29 @@ public class CustomReferenceDefinitionsGet extends DeclarativeWebScript
private static final String TARGET = "target";
private static final String CUSTOM_REFS = "customRefs";
private static Log logger = LogFactory.getLog(CustomReferenceDefinitionsGet.class);
private RecordsManagementAdminService rmAdminService;
private DictionaryService dictionaryService;
public void setRecordsManagementAdminService(RecordsManagementAdminService rmAdminService)
{
this.rmAdminService = rmAdminService;
}
public void setDictionaryService(DictionaryService dictionaryService)
{
this.dictionaryService = dictionaryService;
}
@Override
public Map<String, Object> executeImpl(WebScriptRequest req, Status status, Cache cache)
{
Map<String, Object> model = new HashMap<String, Object>();
Map<String, String> templateVars = req.getServiceMatch().getTemplateVars();
String refId = templateVars.get(REF_ID);
if (logger.isDebugEnabled())
{
logger.debug("Getting custom reference definitions with refId: " + String.valueOf(refId));
@@ -81,7 +88,7 @@ public class CustomReferenceDefinitionsGet extends DeclarativeWebScript
if (refId != null)
{
QName qn = rmAdminService.getQNameForClientId(refId);
AssociationDefinition assDef = currentCustomRefs.get(qn);
if (assDef == null)
{
@@ -100,20 +107,20 @@ public class CustomReferenceDefinitionsGet extends DeclarativeWebScript
}
List<Map<String, String>> listOfReferenceData = new ArrayList<Map<String, String>>();
for (Entry<QName, AssociationDefinition> entry : currentCustomRefs.entrySet())
{
Map<String, String> data = new HashMap<String, String>();
AssociationDefinition nextValue = entry.getValue();
CustomReferenceType referenceType = nextValue instanceof ChildAssociationDefinition ?
CustomReferenceType.PARENT_CHILD : CustomReferenceType.BIDIRECTIONAL;
data.put(REFERENCE_TYPE, referenceType.toString());
// It is the title which stores either the label, or the source and target.
String nextTitle = nextValue.getTitle();
String nextTitle = nextValue.getTitle(dictionaryService);
if (CustomReferenceType.PARENT_CHILD.equals(referenceType))
{
if (nextTitle != null)
@@ -136,10 +143,10 @@ public class CustomReferenceDefinitionsGet extends DeclarativeWebScript
{
throw new WebScriptException("Unsupported custom reference type: " + referenceType);
}
listOfReferenceData.add(data);
}
if (logger.isDebugEnabled())
{
logger.debug("Retrieved custom reference definitions: " + listOfReferenceData.size());

View File

@@ -26,6 +26,7 @@ import java.util.Map;
import org.alfresco.model.ContentModel;
import org.alfresco.module.org_alfresco_module_rm.RecordsManagementAdminService;
import org.alfresco.service.cmr.dictionary.AssociationDefinition;
import org.alfresco.service.cmr.dictionary.DictionaryService;
import org.alfresco.service.cmr.repository.AssociationRef;
import org.alfresco.service.cmr.repository.ChildAssociationRef;
import org.alfresco.service.cmr.repository.NodeRef;
@@ -38,7 +39,7 @@ import org.apache.commons.logging.LogFactory;
/**
* This class provides the implementation for the customrefs.get webscript.
*
*
* @author Neil McErlean
*/
public class CustomRefsGet extends AbstractRmWebScript
@@ -56,22 +57,28 @@ public class CustomRefsGet extends AbstractRmWebScript
private static final String CUSTOM_REFS_TO = "customRefsTo";
private static final String NODE_NAME = "nodeName";
private static final String NODE_TITLE = "nodeTitle";
private static Log logger = LogFactory.getLog(CustomRefsGet.class);
private RecordsManagementAdminService rmAdminService;
private DictionaryService dictionaryService;
public void setRecordsManagementAdminService(RecordsManagementAdminService rmAdminService)
{
this.rmAdminService = rmAdminService;
}
public void setDictionaryService(DictionaryService dictionaryService)
{
this.dictionaryService = dictionaryService;
}
@Override
public Map<String, Object> executeImpl(WebScriptRequest req, Status status, Cache cache)
{
Map<String, Object> ftlModel = new HashMap<String, Object>();
NodeRef node = parseRequestForNodeRef(req);
if (logger.isDebugEnabled())
{
logger.debug("Getting custom reference instances for " + node);
@@ -79,27 +86,27 @@ public class CustomRefsGet extends AbstractRmWebScript
// All the references that come 'out' from this node.
List<Map<String, String>> listOfOutwardReferenceData = new ArrayList<Map<String, String>>();
List<AssociationRef> assocsFromThisNode = this.rmAdminService.getCustomReferencesFrom(node);
addBidirectionalReferenceData(listOfOutwardReferenceData, assocsFromThisNode);
List<ChildAssociationRef> childAssocs = this.rmAdminService.getCustomChildReferences(node);
addParentChildReferenceData(listOfOutwardReferenceData, childAssocs);
// All the references that come 'in' to this node.
List<Map<String, String>> listOfInwardReferenceData = new ArrayList<Map<String, String>>();
List<AssociationRef> toAssocs = this.rmAdminService.getCustomReferencesTo(node);
addBidirectionalReferenceData(listOfInwardReferenceData, toAssocs);
List<ChildAssociationRef> parentAssocs = this.rmAdminService.getCustomParentReferences(node);
addParentChildReferenceData(listOfInwardReferenceData, parentAssocs);
if (logger.isDebugEnabled())
{
logger.debug("Retrieved custom reference instances: " + assocsFromThisNode);
}
ftlModel.put(NODE_NAME, nodeService.getProperty(node, ContentModel.PROP_NAME));
ftlModel.put(NODE_TITLE, nodeService.getProperty(node, ContentModel.PROP_TITLE));
ftlModel.put(CUSTOM_REFS_FROM, listOfOutwardReferenceData);
@@ -112,7 +119,7 @@ public class CustomRefsGet extends AbstractRmWebScript
* This method goes through the associationRefs specified and constructs a Map<String, String>
* for each assRef. FTL-relevant data are added to that map. The associationRefs must all be
* parent/child references.
*
*
* @param listOfReferenceData
* @param assocs
*/
@@ -124,23 +131,23 @@ public class CustomRefsGet extends AbstractRmWebScript
Map<String, String> data = new HashMap<String, String>();
QName typeQName = childAssRef.getTypeQName();
data.put(CHILD_REF, childAssRef.getChildRef().toString());
data.put(PARENT_REF, childAssRef.getParentRef().toString());
AssociationDefinition assDef = rmAdminService.getCustomReferenceDefinitions().get(typeQName);
if (assDef != null)
{
String compoundTitle = assDef.getTitle();
String compoundTitle = assDef.getTitle(dictionaryService);
data.put(REF_ID, typeQName.getLocalName());
String[] sourceAndTarget = rmAdminService.splitSourceTargetId(compoundTitle);
data.put(SOURCE, sourceAndTarget[0]);
data.put(TARGET, sourceAndTarget[1]);
data.put(REFERENCE_TYPE, CustomReferenceType.PARENT_CHILD.toString());
listOfReferenceData.add(data);
}
}
@@ -150,7 +157,7 @@ public class CustomRefsGet extends AbstractRmWebScript
* This method goes through the associationRefs specified and constructs a Map<String, String>
* for each assRef. FTL-relevant data are added to that map. The associationRefs must all be
* bidirectional references.
*
*
* @param listOfReferenceData
* @param assocs
*/
@@ -163,15 +170,15 @@ public class CustomRefsGet extends AbstractRmWebScript
QName typeQName = assRef.getTypeQName();
AssociationDefinition assDef = rmAdminService.getCustomReferenceDefinitions().get(typeQName);
if (assDef != null)
{
data.put(LABEL, assDef.getTitle());
data.put(LABEL, assDef.getTitle(dictionaryService));
data.put(REF_ID, typeQName.getLocalName());
data.put(REFERENCE_TYPE, CustomReferenceType.BIDIRECTIONAL.toString());
data.put(SOURCE_REF, assRef.getSourceRef().toString());
data.put(TARGET_REF, assRef.getTargetRef().toString());
listOfReferenceData.add(data);
}
}

View File

@@ -39,7 +39,7 @@ import org.springframework.extensions.webscripts.WebScriptRequest;
/**
* This class provides the implementation for the customisable.get webscript.
*
*
* @author Roy Wetherall
*/
public class CustomisableGet extends DeclarativeWebScript
@@ -47,16 +47,16 @@ public class CustomisableGet extends DeclarativeWebScript
/** Logger */
@SuppressWarnings("unused")
private static Log logger = LogFactory.getLog(CustomisableGet.class);
/** Records management admin service */
private RecordsManagementAdminService rmAdminService;
/** Dictionary service */
private DictionaryService dictionaryService;
/** Namespace service */
private NamespaceService namespaceService;
/**
* @param rmAdminService records management admin service
*/
@@ -64,11 +64,11 @@ public class CustomisableGet extends DeclarativeWebScript
{
this.rmAdminService = rmAdminService;
}
/**
* @param namespaceService namespace service
*/
public void setNamespaceService(NamespaceService namespaceService)
public void setNamespaceService(NamespaceService namespaceService)
{
this.namespaceService = namespaceService;
}
@@ -76,7 +76,7 @@ public class CustomisableGet extends DeclarativeWebScript
/**
* @param dictionaryService dictionary service
*/
public void setDictionaryService(DictionaryService dictionaryService)
public void setDictionaryService(DictionaryService dictionaryService)
{
this.dictionaryService = dictionaryService;
}
@@ -87,7 +87,7 @@ public class CustomisableGet extends DeclarativeWebScript
public Map<String, Object> executeImpl(WebScriptRequest req, Status status, Cache cache)
{
Map<String, Object> model = new HashMap<String, Object>();
Set<QName> qnames = rmAdminService.getCustomisable();
ArrayList<Item> items = new ArrayList<Item>(qnames.size());
for (QName qname : qnames)
@@ -96,17 +96,17 @@ public class CustomisableGet extends DeclarativeWebScript
if (definition != null)
{
String name = qname.toPrefixString(namespaceService);
String title = definition.getTitle();
String title = definition.getTitle(dictionaryService);
if (title == null || title.length() == 0)
{
title = qname.getLocalName();
}
boolean isAspect = definition.isAspect();
items.add(new Item(name, isAspect, title));
}
}
// Sort the customisable types and aspects by title
Collections.sort(items, new Comparator<Item>()
{
@@ -115,11 +115,11 @@ public class CustomisableGet extends DeclarativeWebScript
{
return o1.title.compareToIgnoreCase(o2.title);
}});
model.put("items", items);
model.put("items", items);
return model;
}
/**
* Model items
*/
@@ -128,36 +128,36 @@ public class CustomisableGet extends DeclarativeWebScript
private String name;
private boolean isAspect;
private String title;
public Item(String name, boolean isAspect, String title)
{
this.name = name;
this.isAspect = isAspect;
this.title = title;
}
public String getName()
{
return name;
}
public boolean getIsAspect()
{
return isAspect;
}
public String getTitle()
{
return title;
}
@Override
public int hashCode()
{
int var_code = (null == name ? 0 : name.hashCode());
return 31 + var_code;
}
@Override
public boolean equals(Object obj)
{
@@ -170,5 +170,5 @@ public class CustomisableGet extends DeclarativeWebScript
return this.name.equals(((Item)obj).name);
}
}
}
}
}

View File

@@ -26,6 +26,7 @@ import java.util.Map;
import org.alfresco.module.org_alfresco_module_rm.disposition.DispositionService;
import org.alfresco.module.org_alfresco_module_rm.disposition.property.DispositionProperty;
import org.alfresco.service.cmr.dictionary.DictionaryService;
import org.alfresco.service.cmr.dictionary.PropertyDefinition;
import org.alfresco.service.namespace.NamespaceService;
import org.alfresco.service.namespace.QName;
@@ -42,33 +43,44 @@ public class DispositionPropertiesGet extends DeclarativeWebScript
{
protected DispositionService dispositionService;
protected NamespaceService namespaceService;
protected DictionaryService dictionaryService;
/**
* Sets the disposition service
*
*
* @param dispositionService the disposition service
*/
public void setDispositionService(DispositionService dispositionService)
{
this.dispositionService = dispositionService;
}
/**
* Sets the NamespaceService instance
*
*
* @param namespaceService The NamespaceService instance
*/
public void setNamespaceService(NamespaceService namespaceService)
{
this.namespaceService = namespaceService;
}
/**
* Sets the DictionaryService instance
*
* @param dictionaryService The DictionaryService instance
*/
public void setDictionaryService(DictionaryService dictionaryService)
{
this.dictionaryService = dictionaryService;
}
/*
* @see org.alfresco.web.scripts.DeclarativeWebScript#executeImpl(org.alfresco.web.scripts.WebScriptRequest, org.alfresco.web.scripts.Status, org.alfresco.web.scripts.Cache)
*/
@Override
protected Map<String, Object> executeImpl(WebScriptRequest req, Status status, Cache cache)
{
{
boolean recordLevel = false;
String recordLevelValue = req.getParameter("recordlevel");
if (recordLevelValue != null)
@@ -76,18 +88,18 @@ public class DispositionPropertiesGet extends DeclarativeWebScript
recordLevel = Boolean.valueOf(recordLevelValue);
}
String dispositionAction = req.getParameter("dispositionaction");
Collection<DispositionProperty> dispositionProperties = dispositionService.getDispositionProperties(recordLevel, dispositionAction);
List<Map<String, String>> items = new ArrayList<Map<String, String>>(dispositionProperties.size());
for (DispositionProperty dispositionProperty : dispositionProperties)
{
PropertyDefinition propDef = dispositionProperty.getPropertyDefinition();
QName propName = dispositionProperty.getQName();
if (propDef != null)
{
Map<String, String> item = new HashMap<String, String>(2);
String propTitle = propDef.getTitle();
String propTitle = propDef.getTitle(dictionaryService);
if (propTitle == null || propTitle.length() == 0)
{
propTitle = StringUtils.capitalize(propName.getLocalName());
@@ -97,7 +109,7 @@ public class DispositionPropertiesGet extends DeclarativeWebScript
items.add(item);
}
}
// create model object with the lists model
Map<String, Object> model = new HashMap<String, Object>(1);
model.put("properties", items);

View File

@@ -49,7 +49,7 @@ import org.springframework.util.StringUtils;
/**
* Implementation for Java backed webscript to return lists
* of values for various records management services.
*
*
* @author Gavin Cornwell
*/
public class ListOfValuesGet extends DeclarativeWebScript
@@ -61,50 +61,50 @@ public class ListOfValuesGet extends DeclarativeWebScript
protected DispositionService dispositionService;
protected DictionaryService ddService;
protected NamespaceService namespaceService;
/**
* Sets the RecordsManagementService instance
*
*
* @param rmService The RecordsManagementService instance
*/
public void setRecordsManagementService(RecordsManagementService rmService)
{
this.rmService = rmService;
}
/**
* Sets the RecordsManagementActionService instance
*
*
* @param rmActionService The RecordsManagementActionService instance
*/
public void setRecordsManagementActionService(RecordsManagementActionService rmActionService)
{
this.rmActionService = rmActionService;
}
/**
* Sets the RecordsManagementAuditService instance
*
*
* @param rmAuditService The RecordsManagementAuditService instance
*/
public void setRecordsManagementAuditService(RecordsManagementAuditService rmAuditService)
{
this.rmAuditService = rmAuditService;
}
/**
* Sets the RecordsManagementEventService instance
*
*
* @param rmEventService The RecordsManagementEventService instance
*/
public void setRecordsManagementEventService(RecordsManagementEventService rmEventService)
{
this.rmEventService = rmEventService;
}
/**
* Sets the disposition service
*
*
* @param dispositionService the disposition service
*/
public void setDispositionService(DispositionService dispositionService)
@@ -114,24 +114,24 @@ public class ListOfValuesGet extends DeclarativeWebScript
/**
* Sets the DictionaryService instance
*
*
* @param ddService The DictionaryService instance
*/
public void setDictionaryService(DictionaryService ddService)
{
this.ddService = ddService;
}
/**
* Sets the NamespaceService instance
*
*
* @param namespaceService The NamespaceService instance
*/
public void setNamespaceService(NamespaceService namespaceService)
{
this.namespaceService = namespaceService;
}
/*
* @see org.alfresco.web.scripts.DeclarativeWebScript#executeImpl(org.alfresco.web.scripts.WebScriptRequest, org.alfresco.web.scripts.Status, org.alfresco.web.scripts.Cache)
*/
@@ -146,16 +146,16 @@ public class ListOfValuesGet extends DeclarativeWebScript
listsModel.put("periodTypes", createPeriodTypesModel(requestUrl));
listsModel.put("periodProperties", createPeriodPropertiesModel(requestUrl));
listsModel.put("auditEvents", createAuditEventsModel(requestUrl));
// create model object with the lists model
Map<String, Object> model = new HashMap<String, Object>(1);
model.put("lists", listsModel);
return model;
}
/**
* Creates the model for the list of disposition actions.
*
*
* @param baseUrl The base URL of the service
* @return model of disposition actions list
*/
@@ -171,18 +171,18 @@ public class ListOfValuesGet extends DeclarativeWebScript
item.put("value", dispositionAction.getName());
items.add(item);
}
// create the model
Map<String, Object> model = new HashMap<String, Object>(2);
model.put("url", baseUrl + "/dispositionactions");
model.put("items", items);
return model;
}
/**
* Creates the model for the list of events.
*
*
* @param baseUrl The base URL of the service
* @return model of events list
*/
@@ -196,22 +196,22 @@ public class ListOfValuesGet extends DeclarativeWebScript
Map<String, Object> item = new HashMap<String, Object>(3);
item.put("label", event.getDisplayLabel());
item.put("value", event.getName());
item.put("automatic",
item.put("automatic",
this.rmEventService.getEventType(event.getType()).isAutomaticEvent());
items.add(item);
}
// create the model
Map<String, Object> model = new HashMap<String, Object>(2);
model.put("url", baseUrl + "/events");
model.put("items", items);
return model;
}
/**
* Creates the model for the list of period types.
*
*
* @param baseUrl The base URL of the service
* @return model of period types list
*/
@@ -231,18 +231,18 @@ public class ListOfValuesGet extends DeclarativeWebScript
items.add(item);
}
}
// create the model
Map<String, Object> model = new HashMap<String, Object>(2);
model.put("url", baseUrl + "/periodtypes");
model.put("items", items);
return model;
}
/**
* Creates the model for the list of period properties.
*
*
* @param baseUrl The base URL of the service
* @return model of period properties list
*/
@@ -255,11 +255,11 @@ public class ListOfValuesGet extends DeclarativeWebScript
{
PropertyDefinition propDef = dispositionProperty.getPropertyDefinition();
QName propName = dispositionProperty.getQName();
if (propDef != null)
{
Map<String, String> item = new HashMap<String, String>(2);
String propTitle = propDef.getTitle();
String propTitle = propDef.getTitle(ddService);
if (propTitle == null || propTitle.length() == 0)
{
propTitle = StringUtils.capitalize(propName.getLocalName());
@@ -269,18 +269,18 @@ public class ListOfValuesGet extends DeclarativeWebScript
items.add(item);
}
}
// create the model
Map<String, Object> model = new HashMap<String, Object>(2);
model.put("url", baseUrl + "/periodproperties");
model.put("items", items);
return model;
}
/**
* Creates the model for the list of audit events.
*
*
* @param baseUrl The base URL of the service
* @return model of audit events list
*/
@@ -296,12 +296,12 @@ public class ListOfValuesGet extends DeclarativeWebScript
item.put("value", event.getName());
items.add(item);
}
// create the model
Map<String, Object> model = new HashMap<String, Object>(2);
model.put("url", baseUrl + "/auditevents");
model.put("items", items);
return model;
}
}

View File

@@ -42,20 +42,20 @@ public class RecordMetaDataAspectsGet extends DeclarativeWebScript
protected DictionaryService dictionaryService;
protected NamespaceService namespaceService;
protected RecordService recordService;
/**
* Set the dictionary service instance
*
*
* @param dictionaryService the {@link DictionaryService} instance
*/
public void setDictionaryService(DictionaryService dictionaryService)
{
this.dictionaryService = dictionaryService;
}
/**
* Sets the {@link NamespaceService} instance
*
*
* @param namespaceService The {@link NamespaceService} instance
*/
public void setNamespaceService(NamespaceService namespaceService)
@@ -70,7 +70,7 @@ public class RecordMetaDataAspectsGet extends DeclarativeWebScript
{
this.recordService = recordService;
}
/*
* @see org.alfresco.web.scripts.DeclarativeWebScript#executeImpl(org.alfresco.web.scripts.WebScriptRequest, org.alfresco.web.scripts.Status, org.alfresco.web.scripts.Cache)
*/
@@ -78,30 +78,30 @@ public class RecordMetaDataAspectsGet extends DeclarativeWebScript
protected Map<String, Object> executeImpl(WebScriptRequest req, Status status, Cache cache)
{
// Get the details of all the aspects
Set<QName> aspectQNames = recordService.getRecordMetaDataAspects();
Set<QName> aspectQNames = recordService.getRecordMetaDataAspects();
List<Map<String, Object>> aspects = new ArrayList<Map<String,Object>>(aspectQNames.size()+1);
for (QName aspectQName : aspectQNames)
{
// Get the prefix aspect and default the label to the localname
// Get the prefix aspect and default the label to the localname
String prefixString = aspectQName.toPrefixString(namespaceService);
String label = aspectQName.getLocalName();
Map<String, Object> aspect = new HashMap<String, Object>(2);
aspect.put("id", prefixString);
// Try and get the aspect definition
// Try and get the aspect definition
AspectDefinition aspectDefinition = dictionaryService.getAspect(aspectQName);
if (aspectDefinition != null)
{
// Fet the label from the aspect definition
label = aspectDefinition.getTitle();
}
label = aspectDefinition.getTitle(dictionaryService);
}
aspect.put("value", label);
// Add the aspect details to the aspects list
aspects.add(aspect);
}
// create model object with the lists model
Map<String, Object> model = new HashMap<String, Object>(1);
model.put("aspects", aspects);

View File

@@ -38,17 +38,17 @@ import org.springframework.extensions.webscripts.WebScriptRequest;
/**
* RM serach properties GET web script
*
*
* @author Roy Wetherall
*/
public class RMSearchPropertiesGet extends DeclarativeWebScript
{
/** Services */
private RecordsManagementAdminService adminService;
private RecordService recordService;
private DictionaryService dictionaryService;
private RecordsManagementAdminService adminService;
private RecordService recordService;
private DictionaryService dictionaryService;
private NamespaceService namespaceService;
/**
* @param adminService records management admin service
*/
@@ -56,7 +56,7 @@ public class RMSearchPropertiesGet extends DeclarativeWebScript
{
this.adminService = adminService;
}
/**
* @param recordService record service
*/
@@ -64,7 +64,7 @@ public class RMSearchPropertiesGet extends DeclarativeWebScript
{
this.recordService = recordService;
}
/**
* @param dictionaryService dictionary service
*/
@@ -72,7 +72,7 @@ public class RMSearchPropertiesGet extends DeclarativeWebScript
{
this.dictionaryService = dictionaryService;
}
/**
* @param namespaceService namespace service
*/
@@ -80,7 +80,7 @@ public class RMSearchPropertiesGet extends DeclarativeWebScript
{
this.namespaceService = namespaceService;
}
/**
* @see org.alfresco.web.scripts.DeclarativeWebScript#executeImpl(org.alfresco.web.scripts.WebScriptRequest, org.alfresco.web.scripts.Status, org.alfresco.web.scripts.Cache)
*/
@@ -88,9 +88,9 @@ public class RMSearchPropertiesGet extends DeclarativeWebScript
protected Map<String, Object> executeImpl(WebScriptRequest req, Status status, Cache cache)
{
Map<String, Object> model = new HashMap<String, Object>(13);
List<Group> groups = new ArrayList<Group>(5);
Set<QName> aspects = recordService.getRecordMetaDataAspects();
for (QName aspect : aspects)
{
@@ -103,9 +103,9 @@ public class RMSearchPropertiesGet extends DeclarativeWebScript
propObjs[index] = propObj;
index ++;
}
AspectDefinition aspectDefinition = dictionaryService.getAspect(aspect);
Group group = new Group(aspect.getLocalName(), aspectDefinition.getTitle(), propObjs);
Group group = new Group(aspect.getLocalName(), aspectDefinition.getTitle(dictionaryService), propObjs);
groups.add(group);
}
@@ -118,74 +118,74 @@ public class RMSearchPropertiesGet extends DeclarativeWebScript
propObjs[index] = propObj;
index ++;
}
Group group = new Group("rmcustom", "Custom", propObjs);
Group group = new Group("rmcustom", "Custom", propObjs);
groups.add(group);
model.put("groups", groups);
return model;
}
public class Group
{
{
private String id;
private String label;
private Property[] properties;
public Group(String id, String label, Property[] properties)
{
this.id = id;
this.label = label;
this.properties = properties;
}
public String getId()
{
return id;
}
public String getLabel()
{
return label;
}
public Property[] getProperties()
{
return properties;
}
}
}
public class Property
{
private String prefix;
private String shortName;
private String label;
private String type;
public Property(PropertyDefinition propertyDefinition)
{
QName qName = propertyDefinition.getName().getPrefixedQName(namespaceService);
this.prefix = QName.splitPrefixedQName(qName.toPrefixString())[0];
this.shortName = qName.getLocalName();
this.label = propertyDefinition.getTitle();
this.label = propertyDefinition.getTitle(dictionaryService);
this.type = propertyDefinition.getDataType().getName().getLocalName();
}
public String getPrefix()
{
return prefix;
}
public String getShortName()
{
return shortName;
}
public String getLabel()
{
return label;
}
public String getType()
{
return type;

View File

@@ -196,7 +196,7 @@ public class RmClassesGet extends DictionaryWebServiceBase implements RecordsMan
}
List<ClassDefinition> classDefinitions = new ArrayList<ClassDefinition>(classdef.values());
Collections.sort(classDefinitions, new DictionaryComparators.ClassDefinitionComparator());
Collections.sort(classDefinitions, new DictionaryComparators.ClassDefinitionComparator(dictionaryservice));
model.put(MODEL_PROP_KEY_CLASS_DEFS, classDefinitions);
model.put(MODEL_PROP_KEY_PROPERTY_DETAILS, propdef.values());
model.put(MODEL_PROP_KEY_ASSOCIATION_DETAILS, assocdef.values());

View File

@@ -147,7 +147,7 @@ public class RmPropertiesGet extends DictionaryWebServiceBase implements Records
}
// Order property definitions by title
Collections.sort(props, new DictionaryComparators.PropertyDefinitionComparator());
Collections.sort(props, new DictionaryComparators.PropertyDefinitionComparator(dictionaryservice));
// Pass list of property definitions to template
Map<String, Object> model = new HashMap<String, Object>();

View File

@@ -58,45 +58,45 @@ import org.springframework.util.CollectionUtils;
/**
* This test class tests the definition and use of a custom RM elements at the Java services layer.
*
*
* @author Neil McErlean, janv, Roy Wetherall
*/
public class RecordsManagementAdminServiceImplTest extends BaseRMTestCase
public class RecordsManagementAdminServiceImplTest extends BaseRMTestCase
implements RecordsManagementModel,
BeforeCreateReference,
OnCreateReference
{
private final static long testRunID = System.currentTimeMillis();
private List<QName> createdCustomProperties;
private List<QName> createdCustomProperties;
private List<QName> madeCustomisable;
/**
* @see org.alfresco.module.org_alfresco_module_rm.test.util.BaseRMTestCase#setUp()
*/
@Override
protected void setUp() throws Exception
{
protected void setUp() throws Exception
{
createdCustomProperties = new ArrayList<QName>();
madeCustomisable = new ArrayList<QName>();
super.setUp();
}
/**
* @see org.alfresco.module.org_alfresco_module_rm.test.util.BaseRMTestCase#setupTestData()
*/
@Override
protected void setupTestData()
protected void setupTestData()
{
super.setupTestData();
super.setupTestData();
}
/**
* @see org.alfresco.module.org_alfresco_module_rm.test.util.BaseRMTestCase#tearDown()
*/
@Override
protected void tearDown() throws Exception
protected void tearDown() throws Exception
{
retryingTransactionHelper.doInTransaction(new RetryingTransactionCallback<Object>()
{
@@ -105,24 +105,24 @@ public class RecordsManagementAdminServiceImplTest extends BaseRMTestCase
{
// As system user
AuthenticationUtil.setFullyAuthenticatedUser(AuthenticationUtil.getSystemUserName());
for (QName createdCustomProperty : createdCustomProperties)
for (QName createdCustomProperty : createdCustomProperties)
{
adminService.removeCustomPropertyDefinition(createdCustomProperty);
}
for (QName customisable : madeCustomisable)
for (QName customisable : madeCustomisable)
{
adminService.unmakeCustomisable(customisable);
}
return null;
}
});
});
super.tearDown();
}
/**
* @see RecordsManagementAdminService#getCustomisable()
*/
@@ -139,17 +139,17 @@ public class RecordsManagementAdminServiceImplTest extends BaseRMTestCase
assertTrue(list.containsAll(
CollectionUtils.arrayToList(new QName[]
{
ASPECT_RECORD,
TYPE_RECORD_FOLDER,
ASPECT_RECORD,
TYPE_RECORD_FOLDER,
TYPE_NON_ELECTRONIC_DOCUMENT,
TYPE_RECORD_CATEGORY
})));
return null;
}
});
}
/**
* @see RecordsManagementAdminService#isCustomisable(QName)
*/
@@ -164,12 +164,12 @@ public class RecordsManagementAdminServiceImplTest extends BaseRMTestCase
assertFalse(adminService.isCustomisable(ASPECT_DUBLINCORE));
assertTrue(adminService.isCustomisable(TYPE_RECORD_FOLDER));
assertTrue(adminService.isCustomisable(ASPECT_RECORD));
return null;
}
});
}
/**
* @see RecordsManagementAdminService#existsCustomProperty(QName)
* @see RecordsManagementAdminService#addCustomPropertyDefinition(QName, QName, String, QName, String, String, String, boolean, boolean, boolean, QName)
@@ -182,66 +182,66 @@ public class RecordsManagementAdminServiceImplTest extends BaseRMTestCase
{
@Override
public QName run() throws Exception
{
{
// Check the property does not exist
assertFalse(adminService.existsCustomProperty(QName.createQName(RecordsManagementCustomModel.RM_CUSTOM_URI, "myRecordProp1")));
return adminService.addCustomPropertyDefinition(
QName.createQName(RecordsManagementCustomModel.RM_CUSTOM_URI, "myRecordProp1"),
ASPECT_RECORD,
"Label1",
DataTypeDefinition.TEXT,
"Title",
QName.createQName(RecordsManagementCustomModel.RM_CUSTOM_URI, "myRecordProp1"),
ASPECT_RECORD,
"Label1",
DataTypeDefinition.TEXT,
"Title",
"Description");
}
@Override
public void test(QName result) throws Exception
public void test(QName result) throws Exception
{
try
{
{
// Check the property QName is correct
assertNotNull(result);
assertEquals(QName.createQName(RecordsManagementCustomModel.RM_CUSTOM_URI, "myRecordProp1"), result);
assertTrue(adminService.existsCustomProperty(result));
// Check that property is available as a custom property
Map<QName, PropertyDefinition> propDefs = adminService.getCustomPropertyDefinitions(ASPECT_RECORD);
assertNotNull(propDefs);
assertTrue(propDefs.containsKey(result));
// Check the property definition
PropertyDefinition propDef = propDefs.get(result);
assertNotNull(propDef);
assertNotNull(propDef);
assertEquals(DataTypeDefinition.TEXT, propDef.getDataType().getName());
assertEquals("Description", propDef.getDescription());
assertEquals("Label1", propDef.getTitle());
assertEquals("Description", propDef.getDescription(dictionaryService));
assertEquals("Label1", propDef.getTitle(dictionaryService));
}
finally
{
// Store the created property for cleanup later
createdCustomProperties.add(result);
}
}
}
});
// Add property to record (no id, short version)
doTestInTransaction(new Test<QName>()
{
@Override
public QName run() throws Exception
{
{
return adminService.addCustomPropertyDefinition(
null,
ASPECT_RECORD,
"Label2",
DataTypeDefinition.TEXT,
"Title",
null,
ASPECT_RECORD,
"Label2",
DataTypeDefinition.TEXT,
"Title",
"Description");
}
@Override
public void test(QName result) throws Exception
public void test(QName result) throws Exception
{
try
{
@@ -249,83 +249,83 @@ public class RecordsManagementAdminServiceImplTest extends BaseRMTestCase
assertNotNull(result);
assertEquals(RecordsManagementCustomModel.RM_CUSTOM_URI, result.getNamespaceURI());
assertTrue(adminService.existsCustomProperty(result));
// Check that property is available as a custom property
Map<QName, PropertyDefinition> propDefs = adminService.getCustomPropertyDefinitions(ASPECT_RECORD);
assertNotNull(propDefs);
assertTrue(propDefs.containsKey(result));
// Check the property definition
PropertyDefinition propDef = propDefs.get(result);
assertNotNull(propDef);
assertNotNull(propDef);
assertEquals(DataTypeDefinition.TEXT, propDef.getDataType().getName());
assertEquals("Description", propDef.getDescription());
assertEquals("Label2", propDef.getTitle());
assertEquals("Description", propDef.getDescription(dictionaryService));
assertEquals("Label2", propDef.getTitle(dictionaryService));
}
finally
{
// Store the created property for cleanup later
createdCustomProperties.add(result);
}
}
}
});
// Add property to record (long version)
doTestInTransaction(new Test<QName>()
{
@Override
public QName run() throws Exception
{
{
return adminService.addCustomPropertyDefinition(
null,
ASPECT_RECORD,
"Label3",
DataTypeDefinition.TEXT,
"Title",
"Description",
"default",
false,
false,
false,
null,
ASPECT_RECORD,
"Label3",
DataTypeDefinition.TEXT,
"Title",
"Description",
"default",
false,
false,
false,
null);
}
@Override
public void test(QName result) throws Exception
public void test(QName result) throws Exception
{
try
{
{
// Check the property QName is correct
assertNotNull(result);
assertEquals(RecordsManagementCustomModel.RM_CUSTOM_URI, result.getNamespaceURI());
assertEquals(RecordsManagementCustomModel.RM_CUSTOM_URI, result.getNamespaceURI());
assertTrue(adminService.existsCustomProperty(result));
// Check that property is available as a custom property
Map<QName, PropertyDefinition> propDefs = adminService.getCustomPropertyDefinitions(ASPECT_RECORD);
assertNotNull(propDefs);
//assertEquals(3, propDefs.size());
assertTrue(propDefs.containsKey(result));
// Check the property definition
PropertyDefinition propDef = propDefs.get(result);
assertNotNull(propDef);
assertNotNull(propDef);
assertEquals(DataTypeDefinition.TEXT, propDef.getDataType().getName());
assertEquals("Description", propDef.getDescription());
assertEquals("Label3", propDef.getTitle());
assertEquals("Description", propDef.getDescription(dictionaryService));
assertEquals("Label3", propDef.getTitle(dictionaryService));
assertEquals("default", propDef.getDefaultValue());
assertFalse(propDef.isMandatory());
assertFalse(propDef.isMultiValued());
assertFalse(propDef.isProtected());
}
finally
{
// Store the created property for cleanup later
createdCustomProperties.add(result);
}
}
}
});
// Failure: Add a property with the same name twice
doTestInTransaction(new FailureTest
(
@@ -337,15 +337,15 @@ public class RecordsManagementAdminServiceImplTest extends BaseRMTestCase
public void run() throws Exception
{
adminService.addCustomPropertyDefinition(
QName.createQName(RecordsManagementCustomModel.RM_CUSTOM_URI, "myRecordProp1"),
ASPECT_RECORD,
"Label1",
DataTypeDefinition.TEXT,
"Title",
QName.createQName(RecordsManagementCustomModel.RM_CUSTOM_URI, "myRecordProp1"),
ASPECT_RECORD,
"Label1",
DataTypeDefinition.TEXT,
"Title",
"Description");
}
});
});
// Failure: Try and add a property to a type that isn't customisable
doTestInTransaction(new FailureTest
(
@@ -357,16 +357,16 @@ public class RecordsManagementAdminServiceImplTest extends BaseRMTestCase
public void run() throws Exception
{
adminService.addCustomPropertyDefinition(
QName.createQName(RecordsManagementCustomModel.RM_CUSTOM_URI, "myContentProp"),
TYPE_CONTENT,
"Label1",
DataTypeDefinition.TEXT,
"Title",
QName.createQName(RecordsManagementCustomModel.RM_CUSTOM_URI, "myContentProp"),
TYPE_CONTENT,
"Label1",
DataTypeDefinition.TEXT,
"Title",
"Description");
}
});
});
}
/**
* @see RecordsManagementAdminService#makeCustomisable(QName)
*/
@@ -382,41 +382,41 @@ public class RecordsManagementAdminServiceImplTest extends BaseRMTestCase
adminService.makeCustomisable(TYPE_CUSTOM_TYPE);
madeCustomisable.add(TYPE_CUSTOM_TYPE);
assertTrue(adminService.isCustomisable(TYPE_CUSTOM_TYPE));
// Add a custom property
return adminService.addCustomPropertyDefinition(
QName.createQName(RecordsManagementCustomModel.RM_CUSTOM_URI, "myNewProperty"),
TYPE_CUSTOM_TYPE,
"Label",
DataTypeDefinition.TEXT,
"Title",
QName.createQName(RecordsManagementCustomModel.RM_CUSTOM_URI, "myNewProperty"),
TYPE_CUSTOM_TYPE,
"Label",
DataTypeDefinition.TEXT,
"Title",
"Description");
}
@Override
public void test(QName result) throws Exception
public void test(QName result) throws Exception
{
// Check the property QName is correct
assertNotNull(result);
assertEquals(QName.createQName(RecordsManagementCustomModel.RM_CUSTOM_URI, "myNewProperty"), result);
assertTrue(adminService.existsCustomProperty(result));
// Check that property is available as a custom property
Map<QName, PropertyDefinition> propDefs = adminService.getCustomPropertyDefinitions(TYPE_CUSTOM_TYPE);
assertNotNull(propDefs);
assertEquals(1, propDefs.size());
assertTrue(propDefs.containsKey(result));
// Check the property definition
PropertyDefinition propDef = propDefs.get(result);
assertNotNull(propDef);
assertNotNull(propDef);
assertEquals(DataTypeDefinition.TEXT, propDef.getDataType().getName());
assertEquals("Description", propDef.getDescription());
assertEquals("Label", propDef.getTitle());
assertEquals("Description", propDef.getDescription(dictionaryService));
assertEquals("Label", propDef.getTitle(dictionaryService));
}
});
doTestInTransaction(new Test<QName>()
{
@Override
@@ -427,41 +427,41 @@ public class RecordsManagementAdminServiceImplTest extends BaseRMTestCase
adminService.makeCustomisable(ASPECT_CUSTOM_ASPECT);
madeCustomisable.add(ASPECT_CUSTOM_ASPECT);
assertTrue(adminService.isCustomisable(ASPECT_CUSTOM_ASPECT));
// Add a custom property
return adminService.addCustomPropertyDefinition(
QName.createQName(RecordsManagementCustomModel.RM_CUSTOM_URI, "myNewAspectProperty"),
ASPECT_CUSTOM_ASPECT,
"Label",
DataTypeDefinition.TEXT,
"Title",
"Description");
QName.createQName(RecordsManagementCustomModel.RM_CUSTOM_URI, "myNewAspectProperty"),
ASPECT_CUSTOM_ASPECT,
"Label",
DataTypeDefinition.TEXT,
"Title",
"Description");
}
@Override
public void test(QName result) throws Exception
public void test(QName result) throws Exception
{
// Check the property QName is correct
assertNotNull(result);
assertEquals(QName.createQName(RecordsManagementCustomModel.RM_CUSTOM_URI, "myNewAspectProperty"), result);
assertTrue(adminService.existsCustomProperty(result));
// Check that property is available as a custom property
Map<QName, PropertyDefinition> propDefs = adminService.getCustomPropertyDefinitions(ASPECT_CUSTOM_ASPECT);
assertNotNull(propDefs);
assertEquals(1, propDefs.size());
assertTrue(propDefs.containsKey(result));
// Check the property definition
PropertyDefinition propDef = propDefs.get(result);
assertNotNull(propDef);
assertNotNull(propDef);
assertEquals(DataTypeDefinition.TEXT, propDef.getDataType().getName());
assertEquals("Description", propDef.getDescription());
assertEquals("Label", propDef.getTitle());
assertEquals("Description", propDef.getDescription(dictionaryService));
assertEquals("Label", propDef.getTitle(dictionaryService));
}
});
});
}
public void testUseCustomProperty() throws Exception
{
// Create custom property on type and aspect
@@ -470,29 +470,29 @@ public class RecordsManagementAdminServiceImplTest extends BaseRMTestCase
@Override
public QName run() throws Exception
{
adminService.makeCustomisable(TYPE_CUSTOM_TYPE);
adminService.makeCustomisable(TYPE_CUSTOM_TYPE);
madeCustomisable.add(TYPE_CUSTOM_TYPE);
adminService.addCustomPropertyDefinition(
QName.createQName(RecordsManagementCustomModel.RM_CUSTOM_URI, "myNewProperty"),
TYPE_CUSTOM_TYPE,
"Label",
DataTypeDefinition.TEXT,
"Title",
QName.createQName(RecordsManagementCustomModel.RM_CUSTOM_URI, "myNewProperty"),
TYPE_CUSTOM_TYPE,
"Label",
DataTypeDefinition.TEXT,
"Title",
"Description");
adminService.makeCustomisable(ASPECT_CUSTOM_ASPECT);
adminService.makeCustomisable(ASPECT_CUSTOM_ASPECT);
madeCustomisable.add(ASPECT_CUSTOM_ASPECT);
adminService.addCustomPropertyDefinition(
QName.createQName(RecordsManagementCustomModel.RM_CUSTOM_URI, "myNewAspectProperty"),
ASPECT_CUSTOM_ASPECT,
"Label",
DataTypeDefinition.TEXT,
"Title",
"Description");
QName.createQName(RecordsManagementCustomModel.RM_CUSTOM_URI, "myNewAspectProperty"),
ASPECT_CUSTOM_ASPECT,
"Label",
DataTypeDefinition.TEXT,
"Title",
"Description");
return null;
}
});
// Create nodes using custom type and aspect
doTestInTransaction(new Test<QName>()
{
@@ -500,36 +500,36 @@ public class RecordsManagementAdminServiceImplTest extends BaseRMTestCase
public QName run() throws Exception
{
NodeRef customInstance1 = nodeService.createNode(
folder,
ASSOC_CONTAINS,
QName.createQName(NamespaceService.CONTENT_MODEL_1_0_URI, "myCustomInstance1"),
folder,
ASSOC_CONTAINS,
QName.createQName(NamespaceService.CONTENT_MODEL_1_0_URI, "myCustomInstance1"),
TYPE_CUSTOM_TYPE).getChildRef();
NodeRef customInstance2 = nodeService.createNode(
folder,
ASSOC_CONTAINS,
QName.createQName(NamespaceService.CONTENT_MODEL_1_0_URI, "myCustomInstance2"),
folder,
ASSOC_CONTAINS,
QName.createQName(NamespaceService.CONTENT_MODEL_1_0_URI, "myCustomInstance2"),
TYPE_CONTENT).getChildRef();
nodeService.addAspect(customInstance2, ASPECT_CUSTOM_ASPECT, null);
// Assert that both instances have the custom aspects applied
assertTrue(nodeService.hasAspect(customInstance1, QName.createQName(RM_CUSTOM_URI, "rmtcustomTypeCustomProperties")));
assertTrue(nodeService.hasAspect(customInstance2, QName.createQName(RM_CUSTOM_URI, "rmtcustomAspectCustomProperties")));
// Remove the custom aspect
nodeService.removeAspect(customInstance2, ASPECT_CUSTOM_ASPECT);
// Assert the custom property aspect is no longer applied applied
assertTrue(nodeService.hasAspect(customInstance1, QName.createQName(RM_CUSTOM_URI, "rmtcustomTypeCustomProperties")));
assertFalse(nodeService.hasAspect(customInstance2, QName.createQName(RM_CUSTOM_URI, "rmtcustomAspectCustomProperties")));
return null;
}
}, AuthenticationUtil.getSystemUserName());
}, AuthenticationUtil.getSystemUserName());
}
public void testCreateAndUseCustomChildReference() throws Exception
{
{
long now = System.currentTimeMillis();
createAndUseCustomReference(CustomReferenceType.PARENT_CHILD, null, "superseded" + now, "superseding" + now);
}
@@ -539,7 +539,7 @@ public class RecordsManagementAdminServiceImplTest extends BaseRMTestCase
long now = System.currentTimeMillis();
createAndUseCustomReference(CustomReferenceType.BIDIRECTIONAL, "supporting" + now, null, null);
}
private void createAndUseCustomReference(final CustomReferenceType refType, final String label, final String source, final String target) throws Exception
{
final NodeRef testRecord1 = retryingTransactionHelper.doInTransaction(new RetryingTransactionHelper.RetryingTransactionCallback<NodeRef>()
@@ -548,16 +548,16 @@ public class RecordsManagementAdminServiceImplTest extends BaseRMTestCase
{
NodeRef result = utils.createRecord(rmFolder, "testRecordA" + System.currentTimeMillis());
return result;
}
});
}
});
final NodeRef testRecord2 = retryingTransactionHelper.doInTransaction(new RetryingTransactionHelper.RetryingTransactionCallback<NodeRef>()
{
public NodeRef execute() throws Throwable
{
NodeRef result = utils.createRecord(rmFolder, "testRecordB" + System.currentTimeMillis());
return result;
}
});
}
});
final QName generatedQName = retryingTransactionHelper.doInTransaction(new RetryingTransactionHelper.RetryingTransactionCallback<QName>()
{
@@ -586,11 +586,11 @@ public class RecordsManagementAdminServiceImplTest extends BaseRMTestCase
}
System.out.println("Creating new " + refType + " reference definition: " + qNameResult);
System.out.println(" params- label: '" + label + "' source: '" + source + "' target: '" + target + "'");
return qNameResult;
}
});
}
});
retryingTransactionHelper.doInTransaction(new RetryingTransactionHelper.RetryingTransactionCallback<Void>()
{
public Void execute() throws Throwable
@@ -601,11 +601,11 @@ public class RecordsManagementAdminServiceImplTest extends BaseRMTestCase
assertNotNull("Custom reference definition from adminService was null.", retrievedRefDefn);
assertEquals(generatedQName, retrievedRefDefn.getName());
assertEquals(refType.equals(CustomReferenceType.PARENT_CHILD), retrievedRefDefn.isChild());
// Now we need to use the custom reference.
// So we apply the aspect containing it to our test records.
nodeService.addAspect(testRecord1, ASPECT_CUSTOM_ASSOCIATIONS, null);
QName assocsAspectQName = QName.createQName("rmc:customAssocs", namespaceService);
nodeService.addAspect(testRecord1, assocsAspectQName, null);
@@ -618,9 +618,9 @@ public class RecordsManagementAdminServiceImplTest extends BaseRMTestCase
nodeService.createAssociation(testRecord1, testRecord2, generatedQName);
}
return null;
}
});
}
});
retryingTransactionHelper.doInTransaction(new RetryingTransactionHelper.RetryingTransactionCallback<Void>()
{
public Void execute() throws Throwable
@@ -628,7 +628,7 @@ public class RecordsManagementAdminServiceImplTest extends BaseRMTestCase
// Read back the reference value to make sure it was correctly applied.
List<ChildAssociationRef> childAssocs = nodeService.getChildAssocs(testRecord1);
List<AssociationRef> retrievedAssocs = nodeService.getTargetAssocs(testRecord1, RegexQNamePattern.MATCH_ALL);
Object newlyAddedRef = null;
if (CustomReferenceType.PARENT_CHILD.equals(refType))
{
@@ -647,7 +647,7 @@ public class RecordsManagementAdminServiceImplTest extends BaseRMTestCase
}
}
assertNotNull("newlyAddedRef was null.", newlyAddedRef);
// Check that the reference has appeared in the data dictionary
AspectDefinition customAssocsAspect = dictionaryService.getAspect(ASPECT_CUSTOM_ASSOCIATIONS);
assertNotNull(customAssocsAspect);
@@ -662,10 +662,10 @@ public class RecordsManagementAdminServiceImplTest extends BaseRMTestCase
customAssocsAspect.getAssociations().get(generatedQName));
}
return null;
}
});
}
});
}
public void testGetAllProperties()
{
retryingTransactionHelper.doInTransaction(new RetryingTransactionHelper.RetryingTransactionCallback<Void>()
@@ -678,17 +678,17 @@ public class RecordsManagementAdminServiceImplTest extends BaseRMTestCase
for (QName prop : props.keySet())
{
System.out.println(" - " + prop.toString());
String propId = props.get(prop).getTitle();
String propId = props.get(prop).getTitle(dictionaryService);
assertNotNull("null client-id for " + prop, propId);
System.out.println(" " + propId);
}
}
return null;
}
});
}
});
}
public void testGetAllReferences()
{
retryingTransactionHelper.doInTransaction(new RetryingTransactionHelper.RetryingTransactionCallback<Void>()
@@ -701,15 +701,15 @@ public class RecordsManagementAdminServiceImplTest extends BaseRMTestCase
for (QName reference : references.keySet())
{
System.out.println(" - " + reference.toString());
System.out.println(" " + references.get(reference).getTitle());
System.out.println(" " + references.get(reference).getTitle(dictionaryService));
}
return null;
}
});
}
});
}
public void testGetAllConstraints()
{
{
retryingTransactionHelper.doInTransaction(new RetryingTransactionHelper.RetryingTransactionCallback<Void>()
{
public Void execute() throws Throwable
@@ -720,18 +720,18 @@ public class RecordsManagementAdminServiceImplTest extends BaseRMTestCase
for (ConstraintDefinition constraint : constraints)
{
System.out.println(" - " + constraint.getName());
System.out.println(" " + constraint.getTitle());
System.out.println(" " + constraint.getTitle(dictionaryService));
}
return null;
}
});
}
});
}
private boolean beforeMarker = false;
private boolean onMarker = false;
@SuppressWarnings("unused")
private boolean inTest = false;
public void testCreateReference() throws Exception
{
inTest = true;
@@ -746,44 +746,44 @@ public class RecordsManagementAdminServiceImplTest extends BaseRMTestCase
NodeRef rec2 = utils.createRecord(rmFolder, "testRecordB" + System.currentTimeMillis());
Pair<NodeRef, NodeRef> result = new Pair<NodeRef, NodeRef>(rec1, rec2);
return result;
}
}
});
final NodeRef testRecord1 = testRecords.getFirst();
final NodeRef testRecord2 = testRecords.getSecond();
retryingTransactionHelper.doInTransaction(new RetryingTransactionHelper.RetryingTransactionCallback<Void>()
{
public Void execute() throws Throwable
{
utils.declareRecord(testRecord1);
utils.declareRecord(testRecord2);
policyComponent.bindClassBehaviour(
RecordsManagementPolicies.BEFORE_CREATE_REFERENCE,
this,
RecordsManagementPolicies.BEFORE_CREATE_REFERENCE,
this,
new JavaBehaviour(RecordsManagementAdminServiceImplTest.this, "beforeCreateReference", NotificationFrequency.EVERY_EVENT));
policyComponent.bindClassBehaviour(
RecordsManagementPolicies.ON_CREATE_REFERENCE,
this,
RecordsManagementPolicies.ON_CREATE_REFERENCE,
this,
new JavaBehaviour(RecordsManagementAdminServiceImplTest.this, "onCreateReference", NotificationFrequency.EVERY_EVENT));
assertFalse(beforeMarker);
assertFalse(onMarker);
adminService.addCustomReference(testRecord1, testRecord2, CUSTOM_REF_VERSIONS);
assertTrue(beforeMarker);
assertTrue(onMarker);
return null;
}
});
}
});
}
finally
{
inTest = false;
}
}
}
public void beforeCreateReference(NodeRef fromNodeRef, NodeRef toNodeRef, QName reference)
{
beforeMarker = true;
@@ -793,7 +793,7 @@ public class RecordsManagementAdminServiceImplTest extends BaseRMTestCase
{
onMarker = true;
}
public void testCreateCustomConstraints() throws Exception
{
final int beforeCnt =
@@ -804,65 +804,65 @@ public class RecordsManagementAdminServiceImplTest extends BaseRMTestCase
List<ConstraintDefinition> result = adminService.getCustomConstraintDefinitions(RecordsManagementCustomModel.RM_CUSTOM_MODEL);
assertNotNull(result);
return result.size();
}
});
}
});
final String conTitle = "test title - "+testRunID;
final List<String> allowedValues = new ArrayList<String>(3);
allowedValues.add("RED");
allowedValues.add("AMBER");
allowedValues.add("GREEN");
final QName testCon = retryingTransactionHelper.doInTransaction(new RetryingTransactionHelper.RetryingTransactionCallback<QName>()
{
public QName execute() throws Throwable
{
String conLocalName = "test-"+testRunID;
final QName result = QName.createQName(RecordsManagementCustomModel.RM_CUSTOM_URI, conLocalName);
adminService.addCustomConstraintDefinition(result, conTitle, true, allowedValues, MatchLogic.AND);
return result;
}
});
}
});
// Set the current security context as System - to see allowed values (unless caveat config is also updated for admin)
AuthenticationUtil.setFullyAuthenticatedUser(AuthenticationUtil.getSystemUserName());
retryingTransactionHelper.doInTransaction(new RetryingTransactionHelper.RetryingTransactionCallback<Void>()
{
public Void execute() throws Throwable
{
List<ConstraintDefinition> customConstraintDefs = adminService.getCustomConstraintDefinitions(RecordsManagementCustomModel.RM_CUSTOM_MODEL);
assertEquals(beforeCnt+1, customConstraintDefs.size());
boolean found = false;
for (ConstraintDefinition conDef : customConstraintDefs)
{
if (conDef.getName().equals(testCon))
{
assertEquals(conTitle, conDef.getTitle());
assertEquals(conTitle, conDef.getTitle(dictionaryService));
Constraint con = conDef.getConstraint();
assertTrue(con instanceof RMListOfValuesConstraint);
assertEquals("LIST", ((RMListOfValuesConstraint)con).getType());
assertEquals(3, ((RMListOfValuesConstraint)con).getAllowedValues().size());
found = true;
break;
}
}
assertTrue(found);
return null;
}
});
}
});
// Set the current security context as admin
AuthenticationUtil.setFullyAuthenticatedUser(AuthenticationUtil.getAdminUserName());
retryingTransactionHelper.doInTransaction(new RetryingTransactionHelper.RetryingTransactionCallback<Void>()
{
public Void execute() throws Throwable
@@ -870,55 +870,55 @@ public class RecordsManagementAdminServiceImplTest extends BaseRMTestCase
allowedValues.clear();
allowedValues.add("RED");
allowedValues.add("YELLOW");
adminService.changeCustomConstraintValues(testCon, allowedValues);
return null;
}
});
}
});
// Set the current security context as System - to see allowed values (unless caveat config is also updated for admin)
AuthenticationUtil.setFullyAuthenticatedUser(AuthenticationUtil.getSystemUserName());
retryingTransactionHelper.doInTransaction(new RetryingTransactionHelper.RetryingTransactionCallback<Void>()
{
public Void execute() throws Throwable
{
List<ConstraintDefinition> customConstraintDefs = adminService.getCustomConstraintDefinitions(RecordsManagementCustomModel.RM_CUSTOM_MODEL);
assertEquals(beforeCnt+1, customConstraintDefs.size());
boolean found = false;
for (ConstraintDefinition conDef : customConstraintDefs)
{
if (conDef.getName().equals(testCon))
{
assertEquals(conTitle, conDef.getTitle());
assertEquals(conTitle, conDef.getTitle(dictionaryService));
Constraint con = conDef.getConstraint();
assertTrue(con instanceof RMListOfValuesConstraint);
assertEquals("LIST", ((RMListOfValuesConstraint)con).getType());
assertEquals(2, ((RMListOfValuesConstraint)con).getAllowedValues().size());
found = true;
break;
}
}
assertTrue(found);
return null;
}
});
}
});
// Set the current security context as admin
AuthenticationUtil.setFullyAuthenticatedUser(AuthenticationUtil.getAdminUserName());
// Add custom property to record with test constraint
retryingTransactionHelper.doInTransaction(new RetryingTransactionHelper.RetryingTransactionCallback<Void>()
{
public Void execute() throws Throwable
{
String propLocalName = "myProp-"+testRunID;
QName dataType = DataTypeDefinition.TEXT;
String propTitle = "My property title";
String description = "My property description";
@@ -926,11 +926,11 @@ public class RecordsManagementAdminServiceImplTest extends BaseRMTestCase
boolean multiValued = false;
boolean mandatory = false;
boolean isProtected = false;
QName propName = adminService.addCustomPropertyDefinition(null, ASPECT_RECORD, propLocalName, dataType, propTitle, description, defaultValue, multiValued, mandatory, isProtected, testCon);
createdCustomProperties.add(propName);
return null;
}
});
}
});
}
}