diff --git a/config/alfresco/public-services-context.xml b/config/alfresco/public-services-context.xml
index 047d6caa06..6173a0285d 100644
--- a/config/alfresco/public-services-context.xml
+++ b/config/alfresco/public-services-context.xml
@@ -901,6 +901,7 @@
getAttributes
query
+ getKeys
diff --git a/source/java/org/alfresco/repo/attributes/AttributeImpl.java b/source/java/org/alfresco/repo/attributes/AttributeImpl.java
index 8eb4a631ea..2f887071ec 100644
--- a/source/java/org/alfresco/repo/attributes/AttributeImpl.java
+++ b/source/java/org/alfresco/repo/attributes/AttributeImpl.java
@@ -60,6 +60,15 @@ public abstract class AttributeImpl implements Attribute
{
}
+ /**
+ * Helper constructor for copy constructors.
+ * @param acl The ACL.
+ */
+ protected AttributeImpl(DbAccessControlList acl)
+ {
+ fACL = acl;
+ }
+
public void setId(long id)
{
fID = id;
diff --git a/source/java/org/alfresco/repo/attributes/AttributeServiceImpl.java b/source/java/org/alfresco/repo/attributes/AttributeServiceImpl.java
index 7f619d2ea8..487b3bc8fb 100644
--- a/source/java/org/alfresco/repo/attributes/AttributeServiceImpl.java
+++ b/source/java/org/alfresco/repo/attributes/AttributeServiceImpl.java
@@ -77,29 +77,7 @@ public class AttributeServiceImpl implements AttributeService
throw new AVMBadArgumentException("Null path.");
}
List keys = parsePath(path);
- if (keys.size() < 1)
- {
- throw new AVMBadArgumentException("Bad Attribute Path: " + path);
- }
- GlobalAttributeEntry entry = fGlobalAttributeEntryDAO.get(keys.get(0));
- if (entry == null)
- {
- return null;
- }
- Attribute current = entry.getAttribute();
- for (int i = 1; i < keys.size(); i++)
- {
- if (current.getType() != Type.MAP)
- {
- return null;
- }
- current = current.get(keys.get(i));
- if (current == null)
- {
- return null;
- }
- }
- return fAttributeConverter.toValue(current);
+ return getAttribute(keys);
}
/**
@@ -153,42 +131,7 @@ public class AttributeServiceImpl implements AttributeService
throw new AVMBadArgumentException("Null Attribute Path.");
}
List keys = parsePath(path);
- if (keys.size() == 0)
- {
- throw new AVMBadArgumentException("Cannot query top level Attributes.");
- }
- 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));
- }
- }
- List> rawResult =
- fAttributeDAO.find((MapAttribute)current, query);
- List> result =
- new ArrayList>();
- for (Pair raw : rawResult)
- {
- result.add(new Pair(raw.getFirst(),
- fAttributeConverter.toValue(raw.getSecond())));
- }
- return result;
+ return query(keys, query);
}
/* (non-Javadoc)
@@ -201,10 +144,81 @@ public class AttributeServiceImpl implements AttributeService
throw new AVMBadArgumentException("Null Attribute Path.");
}
List keys = parsePath(path);
+ removeAttribute(keys, name);
+ }
+
+ /* (non-Javadoc)
+ * @see org.alfresco.service.cmr.attributes.AttributeService#setAttribute(java.lang.String, org.alfresco.repo.attributes.Attribute)
+ */
+ public void setAttribute(String path, String name, Attribute value)
+ {
+ if (path == null)
+ {
+ throw new AVMBadArgumentException("Null path.");
+ }
+ List keys = parsePath(path);
+ setAttribute(keys, name, value);
+ }
+
+ /* (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);
+ return getKeys(keys);
+ }
+
+ /* (non-Javadoc)
+ * @see org.alfresco.service.cmr.attributes.AttributeService#getAttribute(java.util.List)
+ */
+ public Attribute getAttribute(List keys)
+ {
+ if (keys == null)
+ {
+ throw new AVMBadArgumentException("Null Attribute Path List.");
+ }
+ if (keys.size() < 1)
+ {
+ throw new AVMBadArgumentException("Bad Attribute Path List.");
+ }
+ GlobalAttributeEntry entry = fGlobalAttributeEntryDAO.get(keys.get(0));
+ if (entry == null)
+ {
+ return null;
+ }
+ Attribute current = entry.getAttribute();
+ for (int i = 1; i < keys.size(); i++)
+ {
+ if (current.getType() != Type.MAP)
+ {
+ return null;
+ }
+ current = current.get(keys.get(i));
+ if (current == null)
+ {
+ return null;
+ }
+ }
+ return fAttributeConverter.toValue(current);
+ }
+
+ /* (non-Javadoc)
+ * @see org.alfresco.service.cmr.attributes.AttributeService#getKeys(java.util.List)
+ */
+ public List getKeys(List keys)
+ {
+ if (keys == null)
+ {
+ throw new AVMBadArgumentException("Null Keys List.");
+ }
if (keys.size() == 0)
{
- fGlobalAttributeEntryDAO.delete(name);
- return;
+ return fGlobalAttributeEntryDAO.getKeys();
}
GlobalAttributeEntry entry = fGlobalAttributeEntryDAO.get(keys.get(0));
if (entry == null)
@@ -228,15 +242,18 @@ public class AttributeServiceImpl implements AttributeService
throw new AVMWrongTypeException("Attribute Not Map: " + keys.get(i));
}
}
- current.remove(name);
+ return new ArrayList(current.keySet());
}
/* (non-Javadoc)
- * @see org.alfresco.service.cmr.attributes.AttributeService#setAttribute(java.lang.String, org.alfresco.repo.attributes.Attribute)
+ * @see org.alfresco.service.cmr.attributes.AttributeService#setAttribute(java.util.List, java.lang.String, org.alfresco.repo.attributes.Attribute)
*/
- public void setAttribute(String path, String name, Attribute value)
+ public void setAttribute(List keys, String name, Attribute value)
{
- List keys = parsePath(path);
+ if (keys == null || name == null || value == null)
+ {
+ throw new AVMBadArgumentException("Null argument.");
+ }
Attribute toSave = fAttributeConverter.toPersistent(value);
if (keys.size() == 0)
{
@@ -277,18 +294,17 @@ public class AttributeServiceImpl implements AttributeService
}
/* (non-Javadoc)
- * @see org.alfresco.service.cmr.attributes.AttributeService#getKeys(java.lang.String)
+ * @see org.alfresco.service.cmr.attributes.AttributeService#query(java.util.List, org.alfresco.service.cmr.attributes.AttrQuery)
*/
- public List getKeys(String path)
+ public List> query(List keys, AttrQuery query)
{
- if (path == null)
+ if (keys == null || query == null)
{
- throw new AVMBadArgumentException("Null Attribute Path.");
+ throw new AVMBadArgumentException("Null argument.");
}
- List keys = parsePath(path);
if (keys.size() == 0)
{
- return fGlobalAttributeEntryDAO.getKeys();
+ throw new AVMBadArgumentException("Cannot query top level Attributes.");
}
GlobalAttributeEntry entry = fGlobalAttributeEntryDAO.get(keys.get(0));
if (entry == null)
@@ -312,7 +328,55 @@ public class AttributeServiceImpl implements AttributeService
throw new AVMWrongTypeException("Attribute Not Map: " + keys.get(i));
}
}
- return new ArrayList(current.keySet());
+ List> rawResult =
+ fAttributeDAO.find((MapAttribute)current, query);
+ List> result =
+ new ArrayList>();
+ for (Pair raw : rawResult)
+ {
+ result.add(new Pair(raw.getFirst(),
+ fAttributeConverter.toValue(raw.getSecond())));
+ }
+ return result;
+ }
+
+ /* (non-Javadoc)
+ * @see org.alfresco.service.cmr.attributes.AttributeService#removeAttribute(java.util.List, java.lang.String)
+ */
+ public void removeAttribute(List keys, String name)
+ {
+ if (keys == null || name == null)
+ {
+ throw new AVMBadArgumentException("Null argument.");
+ }
+ if (keys.size() == 0)
+ {
+ fGlobalAttributeEntryDAO.delete(name);
+ return;
+ }
+ 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));
+ }
+ }
+ current.remove(name);
}
}
diff --git a/source/java/org/alfresco/repo/attributes/AttributeValue.java b/source/java/org/alfresco/repo/attributes/AttributeValue.java
index 1cada24e15..a7b4ffcc6c 100644
--- a/source/java/org/alfresco/repo/attributes/AttributeValue.java
+++ b/source/java/org/alfresco/repo/attributes/AttributeValue.java
@@ -38,6 +38,23 @@ import org.alfresco.repo.domain.DbAccessControlList;
*/
public abstract class AttributeValue implements Attribute
{
+ /**
+ * ACL for this Attribute
+ */
+ private DbAccessControlList fACL;
+
+ public AttributeValue()
+ {
+ }
+
+ /**
+ * Helper for copy constructors.
+ */
+ public AttributeValue(DbAccessControlList acl)
+ {
+ fACL = acl;
+ }
+
/* (non-Javadoc)
* @see org.alfresco.repo.attributes.Attribute#clear()
*/
@@ -254,14 +271,12 @@ public abstract class AttributeValue implements Attribute
throw new AttributeMethodNotImplemented("Not a map.");
}
- // I'm not sure if ACLs are serializable. So for now the following two
- // methods are noops.
/* (non-Javadoc)
* @see org.alfresco.repo.attributes.Attribute#getAcl()
*/
public DbAccessControlList getAcl()
{
- return null;
+ return fACL;
}
/* (non-Javadoc)
@@ -269,6 +284,6 @@ public abstract class AttributeValue implements Attribute
*/
public void setAcl(DbAccessControlList acl)
{
- // Do Nothing.
+ fACL = acl;
}
}
diff --git a/source/java/org/alfresco/repo/attributes/BooleanAttributeImpl.java b/source/java/org/alfresco/repo/attributes/BooleanAttributeImpl.java
index d030d8f7bf..520859c580 100644
--- a/source/java/org/alfresco/repo/attributes/BooleanAttributeImpl.java
+++ b/source/java/org/alfresco/repo/attributes/BooleanAttributeImpl.java
@@ -50,6 +50,7 @@ public class BooleanAttributeImpl extends AttributeImpl implements
public BooleanAttributeImpl(BooleanAttribute attr)
{
+ super(attr.getAcl());
fValue = attr.getBooleanValue();
AVMDAOs.Instance().fAttributeDAO.save(this);
}
diff --git a/source/java/org/alfresco/repo/attributes/BooleanAttributeValue.java b/source/java/org/alfresco/repo/attributes/BooleanAttributeValue.java
index 5f7f4eb6bb..8ea2f2ce67 100644
--- a/source/java/org/alfresco/repo/attributes/BooleanAttributeValue.java
+++ b/source/java/org/alfresco/repo/attributes/BooleanAttributeValue.java
@@ -43,6 +43,7 @@ public class BooleanAttributeValue extends AttributeValue implements
public BooleanAttributeValue(BooleanAttribute attr)
{
+ super(attr.getAcl());
fData = attr.getBooleanValue();
}
diff --git a/source/java/org/alfresco/repo/attributes/ByteAttributeImpl.java b/source/java/org/alfresco/repo/attributes/ByteAttributeImpl.java
index 83fa5e096d..40786892f2 100644
--- a/source/java/org/alfresco/repo/attributes/ByteAttributeImpl.java
+++ b/source/java/org/alfresco/repo/attributes/ByteAttributeImpl.java
@@ -49,6 +49,7 @@ public class ByteAttributeImpl extends AttributeImpl implements ByteAttribute
public ByteAttributeImpl(ByteAttribute attr)
{
+ super(attr.getAcl());
fValue = attr.getByteValue();
AVMDAOs.Instance().fAttributeDAO.save(this);
}
diff --git a/source/java/org/alfresco/repo/attributes/ByteAttributeValue.java b/source/java/org/alfresco/repo/attributes/ByteAttributeValue.java
index ea1dce3fc5..305e6dabab 100644
--- a/source/java/org/alfresco/repo/attributes/ByteAttributeValue.java
+++ b/source/java/org/alfresco/repo/attributes/ByteAttributeValue.java
@@ -42,6 +42,7 @@ public class ByteAttributeValue extends AttributeValue implements ByteAttribute
public ByteAttributeValue(ByteAttribute attr)
{
+ super(attr.getAcl());
fData = attr.getByteValue();
}
diff --git a/source/java/org/alfresco/repo/attributes/DoubleAttributeImpl.java b/source/java/org/alfresco/repo/attributes/DoubleAttributeImpl.java
index 3c7cfea703..8313a64043 100644
--- a/source/java/org/alfresco/repo/attributes/DoubleAttributeImpl.java
+++ b/source/java/org/alfresco/repo/attributes/DoubleAttributeImpl.java
@@ -49,6 +49,7 @@ public class DoubleAttributeImpl extends AttributeImpl implements Attribute
public DoubleAttributeImpl(DoubleAttribute attr)
{
+ super(attr.getAcl());
fValue = attr.getDoubleValue();
AVMDAOs.Instance().fAttributeDAO.save(this);
}
diff --git a/source/java/org/alfresco/repo/attributes/DoubleAttributeValue.java b/source/java/org/alfresco/repo/attributes/DoubleAttributeValue.java
index 76fd5106e8..6d1361e6f3 100644
--- a/source/java/org/alfresco/repo/attributes/DoubleAttributeValue.java
+++ b/source/java/org/alfresco/repo/attributes/DoubleAttributeValue.java
@@ -43,6 +43,7 @@ public class DoubleAttributeValue extends AttributeValue implements
public DoubleAttributeValue(DoubleAttribute attr)
{
+ super(attr.getAcl());
fData = attr.getDoubleValue();
}
diff --git a/source/java/org/alfresco/repo/attributes/FloatAttributeImpl.java b/source/java/org/alfresco/repo/attributes/FloatAttributeImpl.java
index 6e4da18e16..641ee3073d 100644
--- a/source/java/org/alfresco/repo/attributes/FloatAttributeImpl.java
+++ b/source/java/org/alfresco/repo/attributes/FloatAttributeImpl.java
@@ -49,6 +49,7 @@ public class FloatAttributeImpl extends AttributeImpl implements FloatAttribute
public FloatAttributeImpl(FloatAttribute attr)
{
+ super(attr.getAcl());
fValue = attr.getFloatValue();
AVMDAOs.Instance().fAttributeDAO.save(this);
}
diff --git a/source/java/org/alfresco/repo/attributes/FloatAttributeValue.java b/source/java/org/alfresco/repo/attributes/FloatAttributeValue.java
index 7651405831..cbf3ef9b3c 100644
--- a/source/java/org/alfresco/repo/attributes/FloatAttributeValue.java
+++ b/source/java/org/alfresco/repo/attributes/FloatAttributeValue.java
@@ -43,6 +43,7 @@ public class FloatAttributeValue extends AttributeValue implements
public FloatAttributeValue(FloatAttribute attr)
{
+ super(attr.getAcl());
fData = attr.getFloatValue();
}
diff --git a/source/java/org/alfresco/repo/attributes/IntAttributeImpl.java b/source/java/org/alfresco/repo/attributes/IntAttributeImpl.java
index 75e97ddb68..6d0cd2f7de 100644
--- a/source/java/org/alfresco/repo/attributes/IntAttributeImpl.java
+++ b/source/java/org/alfresco/repo/attributes/IntAttributeImpl.java
@@ -49,6 +49,7 @@ public class IntAttributeImpl extends AttributeImpl implements IntAttribute
public IntAttributeImpl(IntAttribute attr)
{
+ super(attr.getAcl());
fValue = attr.getIntValue();
AVMDAOs.Instance().fAttributeDAO.save(this);
}
diff --git a/source/java/org/alfresco/repo/attributes/IntAttributeValue.java b/source/java/org/alfresco/repo/attributes/IntAttributeValue.java
index a1f12475da..c36ec81b72 100644
--- a/source/java/org/alfresco/repo/attributes/IntAttributeValue.java
+++ b/source/java/org/alfresco/repo/attributes/IntAttributeValue.java
@@ -42,6 +42,7 @@ public class IntAttributeValue extends AttributeValue implements IntAttribute
public IntAttributeValue(IntAttribute attr)
{
+ super(attr.getAcl());
fData = attr.getIntValue();
}
diff --git a/source/java/org/alfresco/repo/attributes/LongAttributeImpl.java b/source/java/org/alfresco/repo/attributes/LongAttributeImpl.java
index 3037d60037..b4db42b864 100644
--- a/source/java/org/alfresco/repo/attributes/LongAttributeImpl.java
+++ b/source/java/org/alfresco/repo/attributes/LongAttributeImpl.java
@@ -49,6 +49,7 @@ public class LongAttributeImpl extends AttributeImpl implements LongAttribute
public LongAttributeImpl(LongAttribute attr)
{
+ super(attr.getAcl());
fValue = attr.getLongValue();
AVMDAOs.Instance().fAttributeDAO.save(this);
}
diff --git a/source/java/org/alfresco/repo/attributes/LongAttributeValue.java b/source/java/org/alfresco/repo/attributes/LongAttributeValue.java
index 39e7448bb8..1470061662 100644
--- a/source/java/org/alfresco/repo/attributes/LongAttributeValue.java
+++ b/source/java/org/alfresco/repo/attributes/LongAttributeValue.java
@@ -42,6 +42,7 @@ public class LongAttributeValue extends AttributeValue implements LongAttribute
public LongAttributeValue(LongAttribute attr)
{
+ super(attr.getAcl());
fData = attr.getLongValue();
}
diff --git a/source/java/org/alfresco/repo/attributes/MapAttributeImpl.java b/source/java/org/alfresco/repo/attributes/MapAttributeImpl.java
index 3b8fbea6ca..63542ad5bb 100644
--- a/source/java/org/alfresco/repo/attributes/MapAttributeImpl.java
+++ b/source/java/org/alfresco/repo/attributes/MapAttributeImpl.java
@@ -52,6 +52,7 @@ public class MapAttributeImpl extends AttributeImpl implements MapAttribute
public MapAttributeImpl(MapAttribute attr)
{
+ super(attr.getAcl());
AVMDAOs.Instance().fAttributeDAO.save(this);
for (Map.Entry entry : attr.entrySet())
{
diff --git a/source/java/org/alfresco/repo/attributes/MapAttributeValue.java b/source/java/org/alfresco/repo/attributes/MapAttributeValue.java
index c889d5c3b1..49267c0f91 100644
--- a/source/java/org/alfresco/repo/attributes/MapAttributeValue.java
+++ b/source/java/org/alfresco/repo/attributes/MapAttributeValue.java
@@ -50,6 +50,7 @@ public class MapAttributeValue extends AttributeValue implements MapAttribute
public MapAttributeValue(MapAttribute attr)
{
+ super(attr.getAcl());
fData = new HashMap();
for (Map.Entry entry : attr.entrySet())
{
diff --git a/source/java/org/alfresco/repo/attributes/SerializableAttributeImpl.java b/source/java/org/alfresco/repo/attributes/SerializableAttributeImpl.java
index b3279aa5f8..05f15f6051 100644
--- a/source/java/org/alfresco/repo/attributes/SerializableAttributeImpl.java
+++ b/source/java/org/alfresco/repo/attributes/SerializableAttributeImpl.java
@@ -52,6 +52,7 @@ public class SerializableAttributeImpl extends AttributeImpl implements
public SerializableAttributeImpl(SerializableAttribute attr)
{
+ super(attr.getAcl());
fValue = attr.getSerializableValue();
AVMDAOs.Instance().fAttributeDAO.save(this);
}
diff --git a/source/java/org/alfresco/repo/attributes/SerializableAttributeValue.java b/source/java/org/alfresco/repo/attributes/SerializableAttributeValue.java
index bcc4b28e0e..65cf0eda2f 100644
--- a/source/java/org/alfresco/repo/attributes/SerializableAttributeValue.java
+++ b/source/java/org/alfresco/repo/attributes/SerializableAttributeValue.java
@@ -45,6 +45,7 @@ public class SerializableAttributeValue extends AttributeValue implements
public SerializableAttributeValue(SerializableAttribute attr)
{
+ super(attr.getAcl());
fData = attr.getSerializableValue();
}
diff --git a/source/java/org/alfresco/repo/attributes/ShortAttributeImpl.java b/source/java/org/alfresco/repo/attributes/ShortAttributeImpl.java
index 7ec3c61120..88c73d902b 100644
--- a/source/java/org/alfresco/repo/attributes/ShortAttributeImpl.java
+++ b/source/java/org/alfresco/repo/attributes/ShortAttributeImpl.java
@@ -49,6 +49,7 @@ public class ShortAttributeImpl extends AttributeImpl implements ShortAttribute
public ShortAttributeImpl(ShortAttribute attr)
{
+ super(attr.getAcl());
fValue = attr.getShortValue();
AVMDAOs.Instance().fAttributeDAO.save(this);
}
diff --git a/source/java/org/alfresco/repo/attributes/ShortAttributeValue.java b/source/java/org/alfresco/repo/attributes/ShortAttributeValue.java
index a94655ca5b..165fbd42e2 100644
--- a/source/java/org/alfresco/repo/attributes/ShortAttributeValue.java
+++ b/source/java/org/alfresco/repo/attributes/ShortAttributeValue.java
@@ -43,6 +43,7 @@ public class ShortAttributeValue extends AttributeValue implements
public ShortAttributeValue(ShortAttribute attr)
{
+ super(attr.getAcl());
fData = attr.getShortValue();
}
diff --git a/source/java/org/alfresco/repo/attributes/StringAttributeImpl.java b/source/java/org/alfresco/repo/attributes/StringAttributeImpl.java
index 27b1fab901..cbe23fc459 100644
--- a/source/java/org/alfresco/repo/attributes/StringAttributeImpl.java
+++ b/source/java/org/alfresco/repo/attributes/StringAttributeImpl.java
@@ -50,6 +50,7 @@ public class StringAttributeImpl extends AttributeImpl implements
public StringAttributeImpl(StringAttribute attr)
{
+ super(attr.getAcl());
fValue = attr.getStringValue();
AVMDAOs.Instance().fAttributeDAO.save(this);
}
diff --git a/source/java/org/alfresco/repo/attributes/StringAttributeValue.java b/source/java/org/alfresco/repo/attributes/StringAttributeValue.java
index c248b812a5..3d5fd9f550 100644
--- a/source/java/org/alfresco/repo/attributes/StringAttributeValue.java
+++ b/source/java/org/alfresco/repo/attributes/StringAttributeValue.java
@@ -43,6 +43,7 @@ public class StringAttributeValue extends AttributeValue implements
public StringAttributeValue(StringAttribute attr)
{
+ super(attr.getAcl());
fData = attr.getStringValue();
}
diff --git a/source/java/org/alfresco/service/cmr/attributes/AttributeService.java b/source/java/org/alfresco/service/cmr/attributes/AttributeService.java
index 0e6c760d24..5e9e9f949f 100644
--- a/source/java/org/alfresco/service/cmr/attributes/AttributeService.java
+++ b/source/java/org/alfresco/service/cmr/attributes/AttributeService.java
@@ -37,27 +37,50 @@ import org.alfresco.util.Pair;
public interface AttributeService
{
/**
- * Get a Global Attribute.
+ * Get an Attribute.
* @param path The path of the Attribute.
* @return The value of the attribute or null.
*/
public Attribute getAttribute(String path);
/**
- * Set a Global Attribute. Overwrites if it exists.
+ * Get an attribute.
+ * @param keys The keys in the attribute path.
+ * @return The value of the attribute or null.
+ */
+ public Attribute getAttribute(List keys);
+
+
+ /**
+ * Set an attribute. Overwrites if it exists.
* @param name The name of the Attribute.
* @param value The value to set.
*/
public void setAttribute(String path, String name, Attribute value);
+ /**
+ * Set an attribute
+ * @param keys List of attribute path keys.
+ * @param name The name of the attribute to set.
+ * @param value The Attribute to set.
+ */
+ public void setAttribute(List keys, String name, Attribute value);
+
/**
* Remove an Attribute.
* @param name The name of the Attribute.
*/
public void removeAttribute(String path, String name);
+
+ /**
+ * Remove an Attribute.
+ * @param keys List of attribute path keys.
+ * @param name The name of the attribute to remove.
+ */
+ public void removeAttribute(List keys, String name);
/**
- * Query for a list of attributes which are contained in the container
+ * Query for a list of attributes which are contained in the map
* defined by the given path and meet the query criteria.
* @param path
* @param query
@@ -65,10 +88,26 @@ public interface AttributeService
*/
public List> query(String path, AttrQuery query);
+ /**
+ * Query for a list of attributes which are contained in a map defined by the
+ * given path and meet the query criteria.
+ * @param keys The list of attribute path keys.
+ * @param query
+ * @return A list of matching attributes.
+ */
+ public List> query(List keys, 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);
+
+ /**
+ * Get all the keys for a give attribute path.
+ * @param keys The keys of the attribute path.
+ * @return A list of all keys.
+ */
+ public List getKeys(List keys);
}