diff --git a/config/alfresco/attributes-service-context.xml b/config/alfresco/attributes-service-context.xml index 51a894b0cd..47911ffda4 100644 --- a/config/alfresco/attributes-service-context.xml +++ b/config/alfresco/attributes-service-context.xml @@ -19,12 +19,18 @@ + + + + + + diff --git a/source/java/org/alfresco/repo/attributes/AttributeImpl.java b/source/java/org/alfresco/repo/attributes/AttributeImpl.java index 91f01d38d0..ec3dd63d8f 100644 --- a/source/java/org/alfresco/repo/attributes/AttributeImpl.java +++ b/source/java/org/alfresco/repo/attributes/AttributeImpl.java @@ -288,4 +288,30 @@ public abstract class AttributeImpl implements Attribute { throw new AttributeMethodNotImplemented("Not ShortValue"); } + + /* (non-Javadoc) + * @see java.lang.Object#equals(java.lang.Object) + */ + @Override + public boolean equals(Object obj) + { + if (this == obj) + { + return true; + } + if (!(obj instanceof AttributeImpl)) + { + return false; + } + return fID == ((AttributeImpl)obj).fID; + } + + /* (non-Javadoc) + * @see java.lang.Object#hashCode() + */ + @Override + public int hashCode() + { + return (int)fID; + } } diff --git a/source/java/org/alfresco/repo/attributes/AttributeServiceImpl.java b/source/java/org/alfresco/repo/attributes/AttributeServiceImpl.java index f8516aef76..c30f790457 100644 --- a/source/java/org/alfresco/repo/attributes/AttributeServiceImpl.java +++ b/source/java/org/alfresco/repo/attributes/AttributeServiceImpl.java @@ -227,4 +227,43 @@ public class AttributeServiceImpl implements AttributeService } current.put(name, toSave); } + + /* (non-Javadoc) + * @see org.alfresco.service.cmr.attributes.AttributeService#getKeys(java.lang.String) + */ + public List getKeys(String path) + { + if (path == null) + { + throw new AVMBadArgumentException("Null Attribute Path."); + } + List keys = parsePath(path); + if (keys.size() == 0) + { + return fGlobalAttributeEntryDAO.getKeys(); + } + GlobalAttributeEntry entry = fGlobalAttributeEntryDAO.get(keys.get(0)); + if (entry == null) + { + throw new AVMNotFoundException("Attribute Not Found: " + keys.get(0)); + } + Attribute current = entry.getAttribute(); + if (current.getType() != Type.MAP) + { + throw new AVMWrongTypeException("Attribute Not Map: " + keys.get(0)); + } + for (int i = 1; i < keys.size(); i++) + { + current = current.get(keys.get(i)); + if (current == null) + { + throw new AVMNotFoundException("Attribute Not Found: " + keys.get(i)); + } + if (current.getType() != Type.MAP) + { + throw new AVMWrongTypeException("Attribute Not Map: " + keys.get(i)); + } + } + return new ArrayList(current.keySet()); + } } diff --git a/source/java/org/alfresco/repo/attributes/AttributeServiceTest.java b/source/java/org/alfresco/repo/attributes/AttributeServiceTest.java index 06a3d425de..f314021cae 100644 --- a/source/java/org/alfresco/repo/attributes/AttributeServiceTest.java +++ b/source/java/org/alfresco/repo/attributes/AttributeServiceTest.java @@ -25,6 +25,8 @@ package org.alfresco.repo.attributes; +import java.util.List; + import org.alfresco.service.cmr.attributes.AttributeService; import org.springframework.context.support.FileSystemXmlApplicationContext; @@ -59,6 +61,11 @@ public class AttributeServiceTest extends TestCase @Override protected void tearDown() throws Exception { + List globalKeys = fService.getKeys(""); + for (String key : globalKeys) + { + fService.removeAttribute("", key); + } fContext.close(); fContext = null; } @@ -87,8 +94,13 @@ public class AttributeServiceTest extends TestCase assertNotNull(fService.getAttribute("boolean")); assertEquals(42, (int)fService.getAttribute("short").getShortValue()); assertEquals("I sneeze.", fService.getAttribute("map/funky").getStringValue()); - Attribute found = fService.getAttribute("map"); - System.out.println(found); + assertEquals(10, fService.getKeys("").size()); + assertEquals(5, fService.getKeys("map").size()); + List keys = fService.getKeys(""); + for (String key : keys) + { + System.out.println(key + " => " + fService.getAttribute(key)); + } } catch (Exception e) { diff --git a/source/java/org/alfresco/repo/attributes/BooleanAttributeImpl.java b/source/java/org/alfresco/repo/attributes/BooleanAttributeImpl.java index a22f006dbd..d030d8f7bf 100644 --- a/source/java/org/alfresco/repo/attributes/BooleanAttributeImpl.java +++ b/source/java/org/alfresco/repo/attributes/BooleanAttributeImpl.java @@ -79,4 +79,13 @@ public class BooleanAttributeImpl extends AttributeImpl implements { return Type.BOOLEAN; } + + /* (non-Javadoc) + * @see java.lang.Object#toString() + */ + @Override + public String toString() + { + return fValue ? "true" : "false"; + } } diff --git a/source/java/org/alfresco/repo/attributes/BooleanAttributeValue.java b/source/java/org/alfresco/repo/attributes/BooleanAttributeValue.java index 204a07611d..5f7f4eb6bb 100644 --- a/source/java/org/alfresco/repo/attributes/BooleanAttributeValue.java +++ b/source/java/org/alfresco/repo/attributes/BooleanAttributeValue.java @@ -71,4 +71,13 @@ public class BooleanAttributeValue extends AttributeValue implements { fData = value; } + + /* (non-Javadoc) + * @see java.lang.Object#toString() + */ + @Override + public String toString() + { + return fData ? "true" : "false"; + } } diff --git a/source/java/org/alfresco/repo/attributes/ByteAttributeImpl.java b/source/java/org/alfresco/repo/attributes/ByteAttributeImpl.java index 1917cbc845..83fa5e096d 100644 --- a/source/java/org/alfresco/repo/attributes/ByteAttributeImpl.java +++ b/source/java/org/alfresco/repo/attributes/ByteAttributeImpl.java @@ -78,4 +78,13 @@ public class ByteAttributeImpl extends AttributeImpl implements ByteAttribute { fValue = value; } + + /* (non-Javadoc) + * @see java.lang.Object#toString() + */ + @Override + public String toString() + { + return Byte.toString(fValue); + } } diff --git a/source/java/org/alfresco/repo/attributes/ByteAttributeValue.java b/source/java/org/alfresco/repo/attributes/ByteAttributeValue.java index 9cfd4899b7..ea1dce3fc5 100644 --- a/source/java/org/alfresco/repo/attributes/ByteAttributeValue.java +++ b/source/java/org/alfresco/repo/attributes/ByteAttributeValue.java @@ -70,4 +70,13 @@ public class ByteAttributeValue extends AttributeValue implements ByteAttribute { fData = value; } + + /* (non-Javadoc) + * @see java.lang.Object#toString() + */ + @Override + public String toString() + { + return Byte.toString(fData); + } } diff --git a/source/java/org/alfresco/repo/attributes/DoubleAttributeImpl.java b/source/java/org/alfresco/repo/attributes/DoubleAttributeImpl.java index c1a265a91f..3c7cfea703 100644 --- a/source/java/org/alfresco/repo/attributes/DoubleAttributeImpl.java +++ b/source/java/org/alfresco/repo/attributes/DoubleAttributeImpl.java @@ -28,8 +28,8 @@ package org.alfresco.repo.attributes; import org.alfresco.repo.avm.AVMDAOs; /** + * Persistent double attribute implementation. * @author britt - * */ public class DoubleAttributeImpl extends AttributeImpl implements Attribute { @@ -78,4 +78,13 @@ public class DoubleAttributeImpl extends AttributeImpl implements Attribute { fValue = value; } + + /* (non-Javadoc) + * @see java.lang.Object#toString() + */ + @Override + public String toString() + { + return Double.toString(fValue); + } } diff --git a/source/java/org/alfresco/repo/attributes/DoubleAttributeValue.java b/source/java/org/alfresco/repo/attributes/DoubleAttributeValue.java index e7ea466577..76fd5106e8 100644 --- a/source/java/org/alfresco/repo/attributes/DoubleAttributeValue.java +++ b/source/java/org/alfresco/repo/attributes/DoubleAttributeValue.java @@ -71,4 +71,13 @@ public class DoubleAttributeValue extends AttributeValue implements { fData = value; } + + /* (non-Javadoc) + * @see java.lang.Object#toString() + */ + @Override + public String toString() + { + return Double.toString(fData); + } } diff --git a/source/java/org/alfresco/repo/attributes/FloatAttributeImpl.java b/source/java/org/alfresco/repo/attributes/FloatAttributeImpl.java index dabb2dc96f..6e4da18e16 100644 --- a/source/java/org/alfresco/repo/attributes/FloatAttributeImpl.java +++ b/source/java/org/alfresco/repo/attributes/FloatAttributeImpl.java @@ -78,4 +78,13 @@ public class FloatAttributeImpl extends AttributeImpl implements FloatAttribute { fValue = value; } + + /* (non-Javadoc) + * @see java.lang.Object#toString() + */ + @Override + public String toString() + { + return Float.toString(fValue); + } } diff --git a/source/java/org/alfresco/repo/attributes/FloatAttributeValue.java b/source/java/org/alfresco/repo/attributes/FloatAttributeValue.java index 0c2c2a42dc..7651405831 100644 --- a/source/java/org/alfresco/repo/attributes/FloatAttributeValue.java +++ b/source/java/org/alfresco/repo/attributes/FloatAttributeValue.java @@ -71,4 +71,13 @@ public class FloatAttributeValue extends AttributeValue implements { fData = value; } + + /* (non-Javadoc) + * @see java.lang.Object#toString() + */ + @Override + public String toString() + { + return Float.toString(fData); + } } diff --git a/source/java/org/alfresco/repo/attributes/GlobalAttributeEntryDAO.java b/source/java/org/alfresco/repo/attributes/GlobalAttributeEntryDAO.java index 7832079881..5919735691 100644 --- a/source/java/org/alfresco/repo/attributes/GlobalAttributeEntryDAO.java +++ b/source/java/org/alfresco/repo/attributes/GlobalAttributeEntryDAO.java @@ -1,5 +1,7 @@ package org.alfresco.repo.attributes; +import java.util.List; + /** * Interface for persistence of the top level attribute map. * @author britt @@ -30,4 +32,10 @@ public interface GlobalAttributeEntryDAO * @return The entry or null. */ public GlobalAttributeEntry get(String name); + + /** + * Get all keys for global attributes. + * @return A list of all top level keys. + */ + public List getKeys(); } diff --git a/source/java/org/alfresco/repo/attributes/IntAttributeImpl.java b/source/java/org/alfresco/repo/attributes/IntAttributeImpl.java index 26cf6c3e19..75e97ddb68 100644 --- a/source/java/org/alfresco/repo/attributes/IntAttributeImpl.java +++ b/source/java/org/alfresco/repo/attributes/IntAttributeImpl.java @@ -78,4 +78,13 @@ public class IntAttributeImpl extends AttributeImpl implements IntAttribute { fValue = value; } + + /* (non-Javadoc) + * @see java.lang.Object#toString() + */ + @Override + public String toString() + { + return Integer.toString(fValue); + } } diff --git a/source/java/org/alfresco/repo/attributes/IntAttributeValue.java b/source/java/org/alfresco/repo/attributes/IntAttributeValue.java index efe4723f4e..a1f12475da 100644 --- a/source/java/org/alfresco/repo/attributes/IntAttributeValue.java +++ b/source/java/org/alfresco/repo/attributes/IntAttributeValue.java @@ -70,4 +70,13 @@ public class IntAttributeValue extends AttributeValue implements IntAttribute { fData = value; } + + /* (non-Javadoc) + * @see java.lang.Object#toString() + */ + @Override + public String toString() + { + return Integer.toString(fData); + } } diff --git a/source/java/org/alfresco/repo/attributes/LongAttributeImpl.java b/source/java/org/alfresco/repo/attributes/LongAttributeImpl.java index e162f25c58..3037d60037 100644 --- a/source/java/org/alfresco/repo/attributes/LongAttributeImpl.java +++ b/source/java/org/alfresco/repo/attributes/LongAttributeImpl.java @@ -78,4 +78,13 @@ public class LongAttributeImpl extends AttributeImpl implements LongAttribute { fValue = value; } + + /* (non-Javadoc) + * @see java.lang.Object#toString() + */ + @Override + public String toString() + { + return Long.toString(fValue); + } } diff --git a/source/java/org/alfresco/repo/attributes/LongAttributeValue.java b/source/java/org/alfresco/repo/attributes/LongAttributeValue.java index 30df53af0b..39e7448bb8 100644 --- a/source/java/org/alfresco/repo/attributes/LongAttributeValue.java +++ b/source/java/org/alfresco/repo/attributes/LongAttributeValue.java @@ -70,4 +70,13 @@ public class LongAttributeValue extends AttributeValue implements LongAttribute { fData = value; } + + /* (non-Javadoc) + * @see java.lang.Object#toString() + */ + @Override + public String toString() + { + return Long.toString(fData); + } } diff --git a/source/java/org/alfresco/repo/attributes/MapAttributeImpl.java b/source/java/org/alfresco/repo/attributes/MapAttributeImpl.java index feea296458..a3e0de2af9 100644 --- a/source/java/org/alfresco/repo/attributes/MapAttributeImpl.java +++ b/source/java/org/alfresco/repo/attributes/MapAttributeImpl.java @@ -223,4 +223,23 @@ public class MapAttributeImpl extends AttributeImpl implements MapAttribute } return attrs; } + + /* (non-Javadoc) + * @see java.lang.Object#toString() + */ + @Override + public String toString() + { + StringBuilder builder = new StringBuilder(); + builder.append('{'); + for (Map.Entry entry : entrySet()) + { + builder.append(entry.getKey()); + builder.append('='); + builder.append(entry.getValue().toString()); + builder.append(' '); + } + builder.append('}'); + return builder.toString(); + } } diff --git a/source/java/org/alfresco/repo/attributes/MapAttributeValue.java b/source/java/org/alfresco/repo/attributes/MapAttributeValue.java index 19dd470c18..c889d5c3b1 100644 --- a/source/java/org/alfresco/repo/attributes/MapAttributeValue.java +++ b/source/java/org/alfresco/repo/attributes/MapAttributeValue.java @@ -186,4 +186,23 @@ public class MapAttributeValue extends AttributeValue implements MapAttribute { return fData.values(); } + + /* (non-Javadoc) + * @see java.lang.Object#toString() + */ + @Override + public String toString() + { + StringBuilder builder = new StringBuilder(); + builder.append('{'); + for (Map.Entry entry : fData.entrySet()) + { + builder.append(entry.getKey()); + builder.append('='); + builder.append(entry.getValue().toString()); + builder.append(' '); + } + builder.append('}'); + return builder.toString(); + } } diff --git a/source/java/org/alfresco/repo/attributes/SerializableAttributeImpl.java b/source/java/org/alfresco/repo/attributes/SerializableAttributeImpl.java index 10cb091dc8..b3279aa5f8 100644 --- a/source/java/org/alfresco/repo/attributes/SerializableAttributeImpl.java +++ b/source/java/org/alfresco/repo/attributes/SerializableAttributeImpl.java @@ -81,4 +81,13 @@ public class SerializableAttributeImpl extends AttributeImpl implements { fValue = value; } + + /* (non-Javadoc) + * @see java.lang.Object#toString() + */ + @Override + public String toString() + { + return fValue.toString(); + } } diff --git a/source/java/org/alfresco/repo/attributes/SerializableAttributeValue.java b/source/java/org/alfresco/repo/attributes/SerializableAttributeValue.java index 16d25e0a96..bcc4b28e0e 100644 --- a/source/java/org/alfresco/repo/attributes/SerializableAttributeValue.java +++ b/source/java/org/alfresco/repo/attributes/SerializableAttributeValue.java @@ -73,4 +73,13 @@ public class SerializableAttributeValue extends AttributeValue implements { fData = value; } + + /* (non-Javadoc) + * @see java.lang.Object#toString() + */ + @Override + public String toString() + { + return fData.toString(); + } } diff --git a/source/java/org/alfresco/repo/attributes/ShortAttributeImpl.java b/source/java/org/alfresco/repo/attributes/ShortAttributeImpl.java index 72b74bb920..7ec3c61120 100644 --- a/source/java/org/alfresco/repo/attributes/ShortAttributeImpl.java +++ b/source/java/org/alfresco/repo/attributes/ShortAttributeImpl.java @@ -78,4 +78,13 @@ public class ShortAttributeImpl extends AttributeImpl implements ShortAttribute { return Type.SHORT; } + + /* (non-Javadoc) + * @see java.lang.Object#toString() + */ + @Override + public String toString() + { + return Short.toString(fValue); + } } diff --git a/source/java/org/alfresco/repo/attributes/ShortAttributeValue.java b/source/java/org/alfresco/repo/attributes/ShortAttributeValue.java index ac0ca127cf..a94655ca5b 100644 --- a/source/java/org/alfresco/repo/attributes/ShortAttributeValue.java +++ b/source/java/org/alfresco/repo/attributes/ShortAttributeValue.java @@ -71,4 +71,13 @@ public class ShortAttributeValue extends AttributeValue implements { fData = value; } + + /* (non-Javadoc) + * @see java.lang.Object#toString() + */ + @Override + public String toString() + { + return Short.toString(fData); + } } diff --git a/source/java/org/alfresco/repo/attributes/StringAttributeImpl.java b/source/java/org/alfresco/repo/attributes/StringAttributeImpl.java index 0c7cca30c4..27b1fab901 100644 --- a/source/java/org/alfresco/repo/attributes/StringAttributeImpl.java +++ b/source/java/org/alfresco/repo/attributes/StringAttributeImpl.java @@ -79,4 +79,13 @@ public class StringAttributeImpl extends AttributeImpl implements { fValue = value; } + + /* (non-Javadoc) + * @see java.lang.Object#toString() + */ + @Override + public String toString() + { + return fValue; + } } diff --git a/source/java/org/alfresco/repo/attributes/StringAttributeValue.java b/source/java/org/alfresco/repo/attributes/StringAttributeValue.java index cc6d63abf7..c248b812a5 100644 --- a/source/java/org/alfresco/repo/attributes/StringAttributeValue.java +++ b/source/java/org/alfresco/repo/attributes/StringAttributeValue.java @@ -71,4 +71,13 @@ public class StringAttributeValue extends AttributeValue implements { fData = value; } + + /* (non-Javadoc) + * @see java.lang.Object#toString() + */ + @Override + public String toString() + { + return fData; + } } diff --git a/source/java/org/alfresco/repo/attributes/hibernate/AttributeDAOHibernate.java b/source/java/org/alfresco/repo/attributes/hibernate/AttributeDAOHibernate.java index fe48e6d3b4..e10f755eee 100644 --- a/source/java/org/alfresco/repo/attributes/hibernate/AttributeDAOHibernate.java +++ b/source/java/org/alfresco/repo/attributes/hibernate/AttributeDAOHibernate.java @@ -45,6 +45,15 @@ public class AttributeDAOHibernate extends HibernateDaoSupport implements { private MapEntryDAO fMapEntryDAO; + public AttributeDAOHibernate() + { + } + + public void setMapEntryDao(MapEntryDAO dao) + { + fMapEntryDAO = dao; + } + /* (non-Javadoc) * @see org.alfresco.repo.attributes.AttributeDAO#delete(org.alfresco.repo.attributes.Attribute) */ diff --git a/source/java/org/alfresco/repo/attributes/hibernate/GlobalAttributeEntryDAOHibernate.java b/source/java/org/alfresco/repo/attributes/hibernate/GlobalAttributeEntryDAOHibernate.java index 30383544e9..6a8c2a30fa 100644 --- a/source/java/org/alfresco/repo/attributes/hibernate/GlobalAttributeEntryDAOHibernate.java +++ b/source/java/org/alfresco/repo/attributes/hibernate/GlobalAttributeEntryDAOHibernate.java @@ -25,10 +25,14 @@ package org.alfresco.repo.attributes.hibernate; +import java.util.List; + import org.alfresco.repo.attributes.Attribute; +import org.alfresco.repo.attributes.AttributeDAO; import org.alfresco.repo.attributes.GlobalAttributeEntry; import org.alfresco.repo.attributes.GlobalAttributeEntryDAO; import org.alfresco.repo.attributes.GlobalAttributeEntryImpl; +import org.hibernate.Query; import org.springframework.orm.hibernate3.support.HibernateDaoSupport; /** @@ -38,12 +42,25 @@ import org.springframework.orm.hibernate3.support.HibernateDaoSupport; public class GlobalAttributeEntryDAOHibernate extends HibernateDaoSupport implements GlobalAttributeEntryDAO { + private AttributeDAO fAttributeDAO; + + public GlobalAttributeEntryDAOHibernate() + { + } + + public void setAttributeDao(AttributeDAO dao) + { + fAttributeDAO = dao; + } + /* (non-Javadoc) * @see org.alfresco.repo.attributes.GlobalAttributeEntryDAO#delete(org.alfresco.repo.attributes.GlobalAttributeEntry) */ public void delete(GlobalAttributeEntry entry) { + Attribute attr = entry.getAttribute(); getSession().delete(entry); + fAttributeDAO.delete(attr); } /* (non-Javadoc) @@ -69,4 +86,14 @@ public class GlobalAttributeEntryDAOHibernate extends HibernateDaoSupport { getSession().save(entry); } + + /* (non-Javadoc) + * @see org.alfresco.repo.attributes.GlobalAttributeEntryDAO#getKeys() + */ + @SuppressWarnings("unchecked") + public List getKeys() + { + Query query = getSession().createQuery("select gae.name from GlobalAttributeEntryImpl gae"); + return (List)query.list(); + } } diff --git a/source/java/org/alfresco/service/cmr/attributes/AttributeService.java b/source/java/org/alfresco/service/cmr/attributes/AttributeService.java index a1a6eef46b..5ee381b455 100644 --- a/source/java/org/alfresco/service/cmr/attributes/AttributeService.java +++ b/source/java/org/alfresco/service/cmr/attributes/AttributeService.java @@ -63,4 +63,11 @@ public interface AttributeService * @return A List of matching attributes. */ public List query(String path, AttrQuery query); + + /** + * Get all the keys for a given attribute path. + * @param path The attribute path. + * @return A list of all keys. + */ + public List getKeys(String path); }