Index: lams_contentrepository/src/java/org/lamsfoundation/lams/contentrepository/CrNodeVersionProperty.java =================================================================== diff -u -r5c4aff99a77cb5c5148964f78baa1b54e4ac8552 -r1492a6385b0f6e855ce08f2fe7570b4af8b53b21 --- lams_contentrepository/src/java/org/lamsfoundation/lams/contentrepository/CrNodeVersionProperty.java (.../CrNodeVersionProperty.java) (revision 5c4aff99a77cb5c5148964f78baa1b54e4ac8552) +++ lams_contentrepository/src/java/org/lamsfoundation/lams/contentrepository/CrNodeVersionProperty.java (.../CrNodeVersionProperty.java) (revision 1492a6385b0f6e855ce08f2fe7570b4af8b53b21) @@ -252,8 +252,8 @@ /** * Returns a boolean representation of the value. */ - public boolean getBoolean() throws ValueFormatException { - return Boolean.valueOf(value).booleanValue(); + public Boolean getBoolean() throws ValueFormatException { + return Boolean.valueOf(value); } } Fisheye: Tag 1492a6385b0f6e855ce08f2fe7570b4af8b53b21 refers to a dead (removed) revision in file `lams_contentrepository/src/java/org/lamsfoundation/lams/contentrepository/IRepository.java'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag 1492a6385b0f6e855ce08f2fe7570b4af8b53b21 refers to a dead (removed) revision in file `lams_contentrepository/src/java/org/lamsfoundation/lams/contentrepository/IRepositoryAdmin.java'. Fisheye: No comparison available. Pass `N' to diff? Index: lams_contentrepository/src/java/org/lamsfoundation/lams/contentrepository/IValue.java =================================================================== diff -u -rd69fd0c0b6e3af330bb1ddbf3099022feca3f092 -r1492a6385b0f6e855ce08f2fe7570b4af8b53b21 --- lams_contentrepository/src/java/org/lamsfoundation/lams/contentrepository/IValue.java (.../IValue.java) (revision d69fd0c0b6e3af330bb1ddbf3099022feca3f092) +++ lams_contentrepository/src/java/org/lamsfoundation/lams/contentrepository/IValue.java (.../IValue.java) (revision 1492a6385b0f6e855ce08f2fe7570b4af8b53b21) @@ -68,5 +68,5 @@ * * @throws ValueFormatException If able to convert the value to a boolean. */ - public boolean getBoolean() throws ValueFormatException; + public Boolean getBoolean() throws ValueFormatException; } \ No newline at end of file Index: lams_contentrepository/src/java/org/lamsfoundation/lams/contentrepository/IVersionedNodeAdmin.java =================================================================== diff -u -rd69fd0c0b6e3af330bb1ddbf3099022feca3f092 -r1492a6385b0f6e855ce08f2fe7570b4af8b53b21 --- lams_contentrepository/src/java/org/lamsfoundation/lams/contentrepository/IVersionedNodeAdmin.java (.../IVersionedNodeAdmin.java) (revision d69fd0c0b6e3af330bb1ddbf3099022feca3f092) +++ lams_contentrepository/src/java/org/lamsfoundation/lams/contentrepository/IVersionedNodeAdmin.java (.../IVersionedNodeAdmin.java) (revision 1492a6385b0f6e855ce08f2fe7570b4af8b53b21) @@ -45,7 +45,7 @@ * is incompatible with the type of the specified property or if * value is incompatible with (i.e. can not be converted to) type. */ - public void setProperty(String name, String value, int type) throws RepositoryCheckedException ; + public void setProperty(String name, Object value, int type) throws RepositoryCheckedException ; /** * Sets the property to a STRING value. Fisheye: Tag 1492a6385b0f6e855ce08f2fe7570b4af8b53b21 refers to a dead (removed) revision in file `lams_contentrepository/src/java/org/lamsfoundation/lams/contentrepository/RepositoryProxy.java'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag 1492a6385b0f6e855ce08f2fe7570b4af8b53b21 refers to a dead (removed) revision in file `lams_contentrepository/src/java/org/lamsfoundation/lams/contentrepository/SimpleRepository.java'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag 1492a6385b0f6e855ce08f2fe7570b4af8b53b21 refers to a dead (removed) revision in file `lams_contentrepository/src/java/org/lamsfoundation/lams/contentrepository/SimpleTicket.java'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag 1492a6385b0f6e855ce08f2fe7570b4af8b53b21 refers to a dead (removed) revision in file `lams_contentrepository/src/java/org/lamsfoundation/lams/contentrepository/SimpleVersionedNode.java'. Fisheye: No comparison available. Pass `N' to diff? Index: lams_contentrepository/src/java/org/lamsfoundation/lams/contentrepository/applicationContext.xml =================================================================== diff -u -r76ec9f8751b089a3c39e97bd92e72e4d11b41911 -r1492a6385b0f6e855ce08f2fe7570b4af8b53b21 --- lams_contentrepository/src/java/org/lamsfoundation/lams/contentrepository/applicationContext.xml (.../applicationContext.xml) (revision 76ec9f8751b089a3c39e97bd92e72e4d11b41911) +++ lams_contentrepository/src/java/org/lamsfoundation/lams/contentrepository/applicationContext.xml (.../applicationContext.xml) (revision 1492a6385b0f6e855ce08f2fe7570b4af8b53b21) @@ -126,6 +126,7 @@ PROPAGATION_REQUIRED,-RepositoryCheckedException,-RepositoryRuntimeException PROPAGATION_REQUIRED,-RepositoryCheckedException,-RepositoryRuntimeException PROPAGATION_SUPPORTS,-RepositoryCheckedException,-RepositoryRuntimeException + PROPAGATION_SUPPORTS,-RepositoryCheckedException,-RepositoryRuntimeException PROPAGATION_REQUIRED,readOnly,-RepositoryCheckedException,-RepositoryRuntimeException PROPAGATION_REQUIRED,readOnly,-RepositoryCheckedException,-RepositoryRuntimeException @@ -169,7 +170,7 @@ - D:\repository + /tmp/repository Index: lams_contentrepository/src/java/org/lamsfoundation/lams/contentrepository/dao/INodeDAO.java =================================================================== diff -u -rd69fd0c0b6e3af330bb1ddbf3099022feca3f092 -r1492a6385b0f6e855ce08f2fe7570b4af8b53b21 --- lams_contentrepository/src/java/org/lamsfoundation/lams/contentrepository/dao/INodeDAO.java (.../INodeDAO.java) (revision d69fd0c0b6e3af330bb1ddbf3099022feca3f092) +++ lams_contentrepository/src/java/org/lamsfoundation/lams/contentrepository/dao/INodeDAO.java (.../INodeDAO.java) (revision 1492a6385b0f6e855ce08f2fe7570b4af8b53b21) @@ -35,7 +35,7 @@ public Object find(Class objClass, Serializable id); - public void insert(Object object); + public void saveOrUpdate(Object object); public void update(Object object); Index: lams_contentrepository/src/java/org/lamsfoundation/lams/contentrepository/dao/hibernate/NodeDAO.java =================================================================== diff -u -rd69fd0c0b6e3af330bb1ddbf3099022feca3f092 -r1492a6385b0f6e855ce08f2fe7570b4af8b53b21 --- lams_contentrepository/src/java/org/lamsfoundation/lams/contentrepository/dao/hibernate/NodeDAO.java (.../NodeDAO.java) (revision d69fd0c0b6e3af330bb1ddbf3099022feca3f092) +++ lams_contentrepository/src/java/org/lamsfoundation/lams/contentrepository/dao/hibernate/NodeDAO.java (.../NodeDAO.java) (revision 1492a6385b0f6e855ce08f2fe7570b4af8b53b21) @@ -45,7 +45,7 @@ return this.getHibernateTemplate().load(objClass,id); } - public void insert(Object object) { + public void saveOrUpdate(Object object) { this.getHibernateTemplate().saveOrUpdate(object); } Index: lams_contentrepository/src/java/org/lamsfoundation/lams/contentrepository/localApplicationContext.xml =================================================================== diff -u -r76ec9f8751b089a3c39e97bd92e72e4d11b41911 -r1492a6385b0f6e855ce08f2fe7570b4af8b53b21 --- lams_contentrepository/src/java/org/lamsfoundation/lams/contentrepository/localApplicationContext.xml (.../localApplicationContext.xml) (revision 76ec9f8751b089a3c39e97bd92e72e4d11b41911) +++ lams_contentrepository/src/java/org/lamsfoundation/lams/contentrepository/localApplicationContext.xml (.../localApplicationContext.xml) (revision 1492a6385b0f6e855ce08f2fe7570b4af8b53b21) @@ -129,6 +129,7 @@ PROPAGATION_REQUIRED,-RepositoryCheckedException,-RepositoryRuntimeException PROPAGATION_REQUIRED,-RepositoryCheckedException,-RepositoryRuntimeException PROPAGATION_SUPPORTS,-RepositoryCheckedException,-RepositoryRuntimeException + PROPAGATION_SUPPORTS,-RepositoryCheckedException,-RepositoryRuntimeException PROPAGATION_REQUIRED,readOnly,-RepositoryCheckedException,-RepositoryRuntimeException PROPAGATION_REQUIRED,readOnly,-RepositoryCheckedException,-RepositoryRuntimeException Index: lams_contentrepository/src/java/org/lamsfoundation/lams/contentrepository/service/IRepositoryService.java =================================================================== diff -u -r76ec9f8751b089a3c39e97bd92e72e4d11b41911 -r1492a6385b0f6e855ce08f2fe7570b4af8b53b21 --- lams_contentrepository/src/java/org/lamsfoundation/lams/contentrepository/service/IRepositoryService.java (.../IRepositoryService.java) (revision 76ec9f8751b089a3c39e97bd92e72e4d11b41911) +++ lams_contentrepository/src/java/org/lamsfoundation/lams/contentrepository/service/IRepositoryService.java (.../IRepositoryService.java) (revision 1492a6385b0f6e855ce08f2fe7570b4af8b53b21) @@ -38,6 +38,8 @@ import org.lamsfoundation.lams.contentrepository.NodeKey; import org.lamsfoundation.lams.contentrepository.RepositoryCheckedException; import org.lamsfoundation.lams.contentrepository.RepositoryRuntimeException; +import org.lamsfoundation.lams.contentrepository.ValidationException; +import org.lamsfoundation.lams.contentrepository.ValueFormatException; import org.lamsfoundation.lams.contentrepository.WorkspaceNotFoundException; /** @@ -202,6 +204,19 @@ throws AccessDeniedException, ItemNotFoundException, FileException, InvalidParameterException ; + /** + * Sets the property to a value, based on the specified type. Removes the property if the value is null. + * + * @param name The name of a property of this node + * @param value The value to be assigned + * @param type The type of the property + * @throws ValueFormatException if the type or format of a value + * is incompatible with the type of the specified property or if + * value is incompatible with (i.e. can not be converted to) type. + */ + public void setProperty(ITicket ticket, Long uuid, Long versionId, String name, Object value, int type) + throws AccessDeniedException, ItemNotFoundException, ValidationException ; + /** * Get an item from the repository based on the UUID. This * may be either a file or package node. Index: lams_contentrepository/src/java/org/lamsfoundation/lams/contentrepository/service/SimpleRepository.java =================================================================== diff -u -raaabbf7372c53eca0a6b1854633729753f56ba4f -r1492a6385b0f6e855ce08f2fe7570b4af8b53b21 --- lams_contentrepository/src/java/org/lamsfoundation/lams/contentrepository/service/SimpleRepository.java (.../SimpleRepository.java) (revision aaabbf7372c53eca0a6b1854633729753f56ba4f) +++ lams_contentrepository/src/java/org/lamsfoundation/lams/contentrepository/service/SimpleRepository.java (.../SimpleRepository.java) (revision 1492a6385b0f6e855ce08f2fe7570b4af8b53b21) @@ -723,7 +723,26 @@ } - /* (non-Javadoc) + /** + * Sets the property to a value, based on the specified type. Removes the property if the value is null. + * Use this for custom properties only - change the filename or mimetype at your own risk. + * + * @param name The name of a property of this node + * @param value The value to be assigned + * @param type The type of the property + * @throws ValidationException if the call has made the node invalid. This would occur if the + * call had set the filename to blank. + */ + public void setProperty(ITicket ticket, Long uuid, Long versionId, String name, Object value, int type) + throws AccessDeniedException, ItemNotFoundException, ValidationException { + + // check that the previous version was a file node - error otherwise + SimpleVersionedNode node = getNode(ticket.getWorkspaceId(),uuid,versionId); + node.setProperty(name, value, type); + node.saveDB(null); + } + + /* (non-Javadoc) * @see org.lamsfoundation.lams.contentrepository.IRepository#updatePackageItem(org.lamsfoundation.lams.contentrepository.ITicket, java.lang.Long, java.lang.String, java.lang.String, java.lang.String) */ public String[] deleteNode(ITicket ticket, Long uuid) Index: lams_contentrepository/src/java/org/lamsfoundation/lams/contentrepository/service/SimpleVersionedNode.java =================================================================== diff -u -raaabbf7372c53eca0a6b1854633729753f56ba4f -r1492a6385b0f6e855ce08f2fe7570b4af8b53b21 --- lams_contentrepository/src/java/org/lamsfoundation/lams/contentrepository/service/SimpleVersionedNode.java (.../SimpleVersionedNode.java) (revision aaabbf7372c53eca0a6b1854633729753f56ba4f) +++ lams_contentrepository/src/java/org/lamsfoundation/lams/contentrepository/service/SimpleVersionedNode.java (.../SimpleVersionedNode.java) (revision 1492a6385b0f6e855ce08f2fe7570b4af8b53b21) @@ -261,7 +261,7 @@ /* (non-Javadoc) * @see org.lamsfoundation.lams.contentrepository.IVersionedNode#setProperty(java.lang.String, java.lang.String, int) */ - public void setProperty(String name, String value, int type) { + public void setProperty(String name, Object value, int type) { nodeObjectInitilised("Unable to set property "+name+" to value "+value); nodeVersion.setProperty(name, value, type); } @@ -681,8 +681,12 @@ return node.getNodeId(); } - /** validate node and save the database changes */ - private void saveDB(String versionDescription) throws ValidationException { + /** Just save the db changes to the current node. + * If files have been added, please call Long save(String versionDescription, List childNodes). + * This method will validate the node and save the database changes + * @param versionDescription optional. If supplied will set the version description + */ + protected void saveDB(String versionDescription) throws ValidationException { validateNode(); // nodeDAO to take care of insert or update (uses saveOrUpdate) @@ -691,7 +695,7 @@ if ( versionDescription != null ) nodeVersion.setVersionDescription(versionDescription); - nodeDAO.insert(node); + nodeDAO.saveOrUpdate(node); // child nodes are done manually as the set is lazy loaded // and can't work out how to do that properly using the DAO template! @@ -700,7 +704,7 @@ Iterator iter = childNodes.iterator(); while ( iter.hasNext() ) { CrNode node = (CrNode) iter.next(); - nodeDAO.insert(node); + nodeDAO.saveOrUpdate(node); } } Index: lams_contentrepository/test/java/org/lamsfoundation/lams/contentrepository/service/TestSimpleRepository.java =================================================================== diff -u -r4bae0c2d63e539e30d191484a9ee293fb4745a08 -r1492a6385b0f6e855ce08f2fe7570b4af8b53b21 --- lams_contentrepository/test/java/org/lamsfoundation/lams/contentrepository/service/TestSimpleRepository.java (.../TestSimpleRepository.java) (revision 4bae0c2d63e539e30d191484a9ee293fb4745a08) +++ lams_contentrepository/test/java/org/lamsfoundation/lams/contentrepository/service/TestSimpleRepository.java (.../TestSimpleRepository.java) (revision 1492a6385b0f6e855ce08f2fe7570b4af8b53b21) @@ -34,13 +34,15 @@ import org.lamsfoundation.lams.contentrepository.FileException; import org.lamsfoundation.lams.contentrepository.ICredentials; import org.lamsfoundation.lams.contentrepository.ITicket; +import org.lamsfoundation.lams.contentrepository.IValue; import org.lamsfoundation.lams.contentrepository.IVersionDetail; import org.lamsfoundation.lams.contentrepository.IVersionedNode; import org.lamsfoundation.lams.contentrepository.ItemExistsException; import org.lamsfoundation.lams.contentrepository.ItemNotFoundException; import org.lamsfoundation.lams.contentrepository.LoginException; import org.lamsfoundation.lams.contentrepository.NodeKey; import org.lamsfoundation.lams.contentrepository.NodeType; +import org.lamsfoundation.lams.contentrepository.PropertyType; import org.lamsfoundation.lams.contentrepository.RepositoryCheckedException; import org.lamsfoundation.lams.contentrepository.WorkspaceNotFoundException; import org.lamsfoundation.lams.contentrepository.dao.IFileDAO; @@ -463,9 +465,11 @@ } + /** Tests that a package item can be created, update and that at property can be set. */ public void testPackageItem() { NodeKey keys = testPackageItem(null); testPackageItem(keys.getUuid()); + testSetProperty(keys); } private NodeKey testPackageItem(Long uuid) { @@ -539,6 +543,42 @@ return keys; } + private void testSetProperty(NodeKey keys) { + String propertyName = "CUSTOM"; + Boolean value = Boolean.TRUE; + + List nodes; + try { + nodes = repository.getPackageNodes(ticket, keys.getUuid(), keys.getVersion()); + Iterator iter = nodes.iterator(); + if ( iter.hasNext() ) { + SimpleVersionedNode packageNode = (SimpleVersionedNode) iter.next(); + assertTrue("First node is the package node. (A)", + packageNode.isNodeType(NodeType.PACKAGENODE)); + repository.setProperty(ticket, keys.getUuid(), keys.getVersion(), propertyName, value, PropertyType.BOOLEAN); + } else { + fail("No nodes found for package "+keys); + } + + // now, is the property set? + nodes = repository.getPackageNodes(ticket, keys.getUuid(), keys.getVersion()); + iter = nodes.iterator(); + if ( iter.hasNext() ) { + SimpleVersionedNode packageNode = (SimpleVersionedNode) iter.next(); + assertTrue("First node is the package node. (B)", + packageNode.isNodeType(NodeType.PACKAGENODE)); + IValue newValue = packageNode.getProperty(propertyName); + assertTrue("newValue is a TRUE Boolean", + Boolean.TRUE.equals(newValue.getBoolean()) && newValue.getType()==PropertyType.BOOLEAN); + } else { + fail("No nodes found for package "+keys); + } + } catch (RepositoryCheckedException e) { + failUnexpectedException("testSetProperty",e); + } + + } + /** * @param keys * @param relPath Index: lams_contentrepository/test/java/org/lamsfoundation/lams/contentrepository/service/TestSimpleVersionedNode.java =================================================================== diff -u -r4bae0c2d63e539e30d191484a9ee293fb4745a08 -r1492a6385b0f6e855ce08f2fe7570b4af8b53b21 --- lams_contentrepository/test/java/org/lamsfoundation/lams/contentrepository/service/TestSimpleVersionedNode.java (.../TestSimpleVersionedNode.java) (revision 4bae0c2d63e539e30d191484a9ee293fb4745a08) +++ lams_contentrepository/test/java/org/lamsfoundation/lams/contentrepository/service/TestSimpleVersionedNode.java (.../TestSimpleVersionedNode.java) (revision 1492a6385b0f6e855ce08f2fe7570b4af8b53b21) @@ -147,15 +147,15 @@ if ( expectedBoolean != null ) { try { - boolean val = iValue.getBoolean(); + Boolean val = iValue.getBoolean(); assertTrue("Property accessable as boolean ("+val+")", - val == expectedBoolean.booleanValue()); + expectedBoolean.equals(val)); } catch (ValueFormatException e1) { failUnexpectedException(e1); } } else { try { - boolean val = iValue.getBoolean(); + Boolean val = iValue.getBoolean(); fail("ValueFormatException exception expected. Value returned as "+val); } catch (ValueFormatException e1) { assertTrue("ValueFormatException thrown as expected",true);