diff --git a/config/alfresco/application-context.xml b/config/alfresco/application-context.xml index ac0217ca27..f4b9aa468e 100644 --- a/config/alfresco/application-context.xml +++ b/config/alfresco/application-context.xml @@ -109,6 +109,7 @@ alfresco.messages.content-service alfresco.messages.coci-service alfresco.messages.template-service + alfresco.messages.lock-service diff --git a/config/alfresco/messages/lock-service.properties b/config/alfresco/messages/lock-service.properties new file mode 100644 index 0000000000..754e472cf2 --- /dev/null +++ b/config/alfresco/messages/lock-service.properties @@ -0,0 +1,6 @@ +# Lock service externalised display strings + +lock_service.insufficent_preveleges=You have insufficent priveleges to realese the lock on the node (id: {0}). The node is locked by another user. +lock_service.node_locked=The node (id: {0}) could not be locked since it is already locked by another user. +lock_service.no_op=Can not perform operation since the node (id:{0}) is locked by another user. +lock_service.no_op2=Can not perform operation {0} since the node (id:{1}) is locked by another user. diff --git a/source/java/org/alfresco/repo/action/executer/LinkCategoryActionExecuter.java b/source/java/org/alfresco/repo/action/executer/LinkCategoryActionExecuter.java index dbee2dd995..a6746d1947 100644 --- a/source/java/org/alfresco/repo/action/executer/LinkCategoryActionExecuter.java +++ b/source/java/org/alfresco/repo/action/executer/LinkCategoryActionExecuter.java @@ -17,6 +17,7 @@ package org.alfresco.repo.action.executer; import java.io.Serializable; +import java.util.Collection; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -30,6 +31,7 @@ import org.alfresco.service.cmr.dictionary.PropertyDefinition; import org.alfresco.service.cmr.dictionary.DataTypeDefinition; import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.cmr.repository.NodeService; +import org.alfresco.service.cmr.repository.datatype.DefaultTypeConverter; import org.alfresco.service.namespace.QName; /** @@ -117,10 +119,21 @@ public class LinkCategoryActionExecuter extends ActionExecuterAbstractBase if (categoryAspect != null) { - // Add the aspect setting the category property to the approptiate values - Map properties = new HashMap(); - properties.put(categoryProperty, categoryValue); - this.nodeService.addAspect(actionedUponNodeRef, categoryAspect, properties); + if (this.nodeService.hasAspect(actionedUponNodeRef, categoryAspect) == false) + { + // Add the aspect and set the category property value + Map properties = new HashMap(); + properties.put(categoryProperty, categoryValue); + this.nodeService.addAspect(actionedUponNodeRef, categoryAspect, properties); + } + else + { + // Append the category value to the existing values + Serializable value = this.nodeService.getProperty(actionedUponNodeRef, categoryProperty); + Collection categories = DefaultTypeConverter.INSTANCE.getCollection(NodeRef.class, value); + categories.add(categoryValue); + this.nodeService.setProperty(actionedUponNodeRef, categoryProperty, (Serializable)categories); + } } } } diff --git a/source/java/org/alfresco/repo/lock/LockServiceImplTest.java b/source/java/org/alfresco/repo/lock/LockServiceImplTest.java index 4ca40fbb27..88e7e55d1a 100644 --- a/source/java/org/alfresco/repo/lock/LockServiceImplTest.java +++ b/source/java/org/alfresco/repo/lock/LockServiceImplTest.java @@ -165,6 +165,7 @@ public class LockServiceImplTest extends BaseSpringTest } catch (UnableToAquireLockException exception) { + System.out.println(exception.getMessage()); } TestWithUserUtils.authenticateUser(GOOD_USER_NAME, PWD, rootNodeRef, this.authenticationService); @@ -220,6 +221,7 @@ public class LockServiceImplTest extends BaseSpringTest } catch (UnableToReleaseLockException exception) { + System.out.println(exception.getMessage()); } TestWithUserUtils.authenticateUser(GOOD_USER_NAME, PWD, rootNodeRef, this.authenticationService); diff --git a/source/java/org/alfresco/repo/node/db/DbNodeServiceImpl.java b/source/java/org/alfresco/repo/node/db/DbNodeServiceImpl.java index b911f81d91..17d5a1967b 100644 --- a/source/java/org/alfresco/repo/node/db/DbNodeServiceImpl.java +++ b/source/java/org/alfresco/repo/node/db/DbNodeServiceImpl.java @@ -40,6 +40,7 @@ import org.alfresco.repo.policy.PolicyComponent; import org.alfresco.repo.transaction.AlfrescoTransactionSupport; import org.alfresco.service.cmr.dictionary.AspectDefinition; import org.alfresco.service.cmr.dictionary.ClassDefinition; +import org.alfresco.service.cmr.dictionary.DataTypeDefinition; import org.alfresco.service.cmr.dictionary.DictionaryService; import org.alfresco.service.cmr.dictionary.InvalidAspectException; import org.alfresco.service.cmr.dictionary.InvalidTypeException; @@ -334,8 +335,32 @@ public class DbNodeServiceImpl extends AbstractNodeServiceImpl { if (properties.containsKey(entry.getKey()) == false) { + Serializable value = entry.getValue(); + + // TODO what other conversions are nessesary here for other types of default values ? + + // Check the type of the default property + PropertyDefinition prop = this.dictionaryService.getProperty(entry.getKey()); + if (prop != null) + { + if (DataTypeDefinition.BOOLEAN.equals(prop.getDataType().getName()) == true) + { + if (value instanceof String) + { + if (((String)value).toUpperCase().equals("TRUE") == true) + { + value = Boolean.TRUE; + } + else if (((String)value).toUpperCase().equals("FALSE") == true) + { + value = Boolean.FALSE; + } + } + } + } + // Set the default value of the property - properties.put(entry.getKey(), entry.getValue()); + properties.put(entry.getKey(), value); } } } diff --git a/source/java/org/alfresco/service/cmr/lock/NodeLockedException.java b/source/java/org/alfresco/service/cmr/lock/NodeLockedException.java index 7554f25218..e6a8301a44 100644 --- a/source/java/org/alfresco/service/cmr/lock/NodeLockedException.java +++ b/source/java/org/alfresco/service/cmr/lock/NodeLockedException.java @@ -19,6 +19,7 @@ package org.alfresco.service.cmr.lock; import java.text.MessageFormat; import org.alfresco.error.AlfrescoRuntimeException; +import org.alfresco.i18n.I18NUtil; import org.alfresco.service.cmr.repository.NodeRef; /** @@ -36,10 +37,8 @@ public class NodeLockedException extends AlfrescoRuntimeException /** * Error message */ - private static final String ERROR_MESSAGE = "Can not perform operation since " + - "the node (id:{0}) is locked by another user."; - private static final String ERROR_MESSAGE_2 = "Can not perform operation {0} since " + - "the node (id:{1}) is locked by another user."; + private static final String ERROR_MESSAGE = I18NUtil.getMessage("lock_service.no_op"); + private static final String ERROR_MESSAGE_2 = I18NUtil.getMessage("lock_service.no_op2"); /** * @param message diff --git a/source/java/org/alfresco/service/cmr/lock/UnableToAquireLockException.java b/source/java/org/alfresco/service/cmr/lock/UnableToAquireLockException.java index b99b110938..9ba0c0f5e2 100644 --- a/source/java/org/alfresco/service/cmr/lock/UnableToAquireLockException.java +++ b/source/java/org/alfresco/service/cmr/lock/UnableToAquireLockException.java @@ -18,6 +18,7 @@ package org.alfresco.service.cmr.lock; import java.text.MessageFormat; +import org.alfresco.i18n.I18NUtil; import org.alfresco.service.cmr.repository.NodeRef; /** @@ -33,8 +34,7 @@ public class UnableToAquireLockException extends RuntimeException /** * Error message */ - private final static String ERROR_MESSAGE = "The node (id: {0})could not be locked since it" + - " is already locked by antoher user."; + private final static String ERROR_MESSAGE = I18NUtil.getMessage("lock_service.node_locked"); /** * Constructor diff --git a/source/java/org/alfresco/service/cmr/lock/UnableToReleaseLockException.java b/source/java/org/alfresco/service/cmr/lock/UnableToReleaseLockException.java index 409af4c134..0848e0abae 100644 --- a/source/java/org/alfresco/service/cmr/lock/UnableToReleaseLockException.java +++ b/source/java/org/alfresco/service/cmr/lock/UnableToReleaseLockException.java @@ -18,6 +18,7 @@ package org.alfresco.service.cmr.lock; import java.text.MessageFormat; +import org.alfresco.i18n.I18NUtil; import org.alfresco.service.cmr.repository.NodeRef; /** @@ -35,10 +36,7 @@ public class UnableToReleaseLockException extends RuntimeException /** * Error message */ - private static final String ERROR_MESSAGE = - "You have insufficent priveleges to realese the " + - "lock on the node (id: {0}). The node is locked by " + - "another user."; + private static final String ERROR_MESSAGE = I18NUtil.getMessage("lock_service.insufficent_preveleges"); /** * Constructor