diff --git a/config/alfresco/public-services-context.xml b/config/alfresco/public-services-context.xml
index 82279a54ae..58734d5a27 100644
--- a/config/alfresco/public-services-context.xml
+++ b/config/alfresco/public-services-context.xml
@@ -990,9 +990,11 @@
- setAttribute
+ setAttribute
+ setAttributes
removeAttribute
- addAttribute
+ addAttribute
+ addAttributes
diff --git a/source/java/org/alfresco/repo/attributes/AttributeServiceImpl.java b/source/java/org/alfresco/repo/attributes/AttributeServiceImpl.java
index 6e70047654..47fee585be 100644
--- a/source/java/org/alfresco/repo/attributes/AttributeServiceImpl.java
+++ b/source/java/org/alfresco/repo/attributes/AttributeServiceImpl.java
@@ -27,6 +27,7 @@ package org.alfresco.repo.attributes;
import java.util.ArrayList;
import java.util.List;
+import java.util.Map;
import org.alfresco.repo.attributes.Attribute.Type;
import org.alfresco.service.cmr.attributes.AttrQuery;
@@ -524,5 +525,100 @@ public class AttributeServiceImpl implements AttributeService
List keys = parsePath(path);
return getCount(keys);
}
+
+ /* (non-Javadoc)
+ * @see org.alfresco.service.cmr.attributes.AttributeService#addAttributes(java.util.List, java.util.List)
+ */
+ public void addAttributes(List keys, List values)
+ {
+ if (keys == null || values == null)
+ {
+ throw new AVMBadArgumentException("Illegal null argument.");
+ }
+ if (keys.size() == 0)
+ {
+ throw new AVMBadArgumentException("Zero length keys.");
+ }
+ Attribute list = getAttributeFromPath(keys);
+ if (list.getType() != Attribute.Type.LIST)
+ {
+ throw new AVMWrongTypeException("Attribute not list: " + list.getType());
+ }
+ for (Attribute value : values)
+ {
+ Attribute persistent = fAttributeConverter.toPersistent(value);
+ list.add(persistent);
+ }
+ }
+
+ /* (non-Javadoc)
+ * @see org.alfresco.service.cmr.attributes.AttributeService#addAttributes(java.lang.String, java.util.List)
+ */
+ public void addAttributes(String path, List values)
+ {
+ if (path == null || values == null)
+ {
+ throw new AVMBadArgumentException("Illegal null argument.");
+ }
+ List keys = parsePath(path);
+ addAttributes(keys, values);
+ }
+
+ /* (non-Javadoc)
+ * @see org.alfresco.service.cmr.attributes.AttributeService#setAttributes(java.util.List, java.util.Map)
+ */
+ public void setAttributes(List keys, Map entries)
+ {
+ if (keys == null || entries == null)
+ {
+ throw new AVMBadArgumentException("Null argument.");
+ }
+ if (keys.size() == 0)
+ {
+ for (Map.Entry entry : entries.entrySet())
+ {
+ String name = entry.getKey();
+ Attribute value = entry.getValue();
+ Attribute toSave = fAttributeConverter.toPersistent(value);
+ GlobalAttributeEntry found = fGlobalAttributeEntryDAO.get(name);
+ if (found == null)
+ {
+ found = new GlobalAttributeEntryImpl(name, toSave);
+ fGlobalAttributeEntryDAO.save(found);
+ return;
+ }
+ found.setAttribute(toSave);
+ }
+ return;
+ }
+ Attribute found = getAttributeFromPath(keys);
+ if (found == null)
+ {
+ throw new AVMNotFoundException("Attribute Not Found: " + keys);
+ }
+ if (found.getType() != Type.MAP)
+ {
+ throw new AVMWrongTypeException("Not a Map: " + keys);
+ }
+ for (Map.Entry entry : entries.entrySet())
+ {
+ String name = entry.getKey();
+ Attribute value = entry.getValue();
+ found.put(name, fAttributeConverter.toPersistent(value));
+ }
+ }
+
+ /* (non-Javadoc)
+ * @see org.alfresco.service.cmr.attributes.AttributeService#setAttributes(java.lang.String, java.util.Map)
+ */
+ public void setAttributes(String path, Map entries)
+ {
+ if (path == null || entries == null)
+ {
+ throw new AVMBadArgumentException("Illegal null argument.");
+ }
+ List keys = parsePath(path);
+ setAttributes(keys, entries);
+ }
}
diff --git a/source/java/org/alfresco/repo/attributes/AttributeServiceTest.java b/source/java/org/alfresco/repo/attributes/AttributeServiceTest.java
index 7bcae349be..8691ad5c5f 100644
--- a/source/java/org/alfresco/repo/attributes/AttributeServiceTest.java
+++ b/source/java/org/alfresco/repo/attributes/AttributeServiceTest.java
@@ -25,7 +25,10 @@
package org.alfresco.repo.attributes;
+import java.util.ArrayList;
+import java.util.HashMap;
import java.util.List;
+import java.util.Map;
import org.alfresco.service.cmr.attributes.AttrAndQuery;
import org.alfresco.service.cmr.attributes.AttrNotQuery;
@@ -113,6 +116,13 @@ public class AttributeServiceTest extends TestCase
}
fService.setAttribute("", "string", new StringAttributeValue("This is another string."));
assertEquals("This is another string.", fService.getAttribute("string").getStringValue());
+ Map hmap = new HashMap();
+ hmap.put("foo", new StringAttributeValue("I do walk."));
+ hmap.put("pismo", new StringAttributeValue("There's trees now in the desert since you moved out, and I don't sleep on a bed of bones."));
+ fService.setAttributes("map", hmap);
+ Attribute out = fService.getAttribute("map");
+ System.out.println(out);
+ assertEquals(6, out.size());
}
catch (Exception e)
{
@@ -319,6 +329,13 @@ public class AttributeServiceTest extends TestCase
fService.setAttribute("", "map", map);
assertEquals("donuts", fService.getAttribute("map/list/5/b").getStringValue());
assertEquals(3, fService.getCount("map/list/5"));
+ List values = new ArrayList();
+ values.add(new StringAttributeValue("Death is your art."));
+ values.add(new StringAttributeValue("You make it with your hands, day after day."));
+ fService.addAttributes("dummy", values);
+ found = fService.getAttribute("dummy");
+ System.out.println(found);
+ assertEquals(7, found.size());
}
catch (Exception e)
{
diff --git a/source/java/org/alfresco/repo/attributes/AttributeServiceTransportService.java b/source/java/org/alfresco/repo/attributes/AttributeServiceTransportService.java
index 6503c0f486..6d72a934cd 100644
--- a/source/java/org/alfresco/repo/attributes/AttributeServiceTransportService.java
+++ b/source/java/org/alfresco/repo/attributes/AttributeServiceTransportService.java
@@ -26,6 +26,7 @@
package org.alfresco.repo.attributes;
import java.util.List;
+import java.util.Map;
import org.alfresco.service.cmr.attributes.AttrQuery;
import org.alfresco.service.cmr.attributes.AttributeService;
@@ -243,4 +244,40 @@ public class AttributeServiceTransportService implements
fAuthService.validate(ticket);
return fService.getCount(path);
}
+
+ /* (non-Javadoc)
+ * @see org.alfresco.service.cmr.remote.AttributeServiceTransport#addAttributes(java.lang.String, java.util.List, java.util.List)
+ */
+ public void addAttributes(String ticket, List keys, List values)
+ {
+ fAuthService.validate(ticket);
+ fService.addAttributes(keys, values);
+ }
+
+ /* (non-Javadoc)
+ * @see org.alfresco.service.cmr.remote.AttributeServiceTransport#addAttributes(java.lang.String, java.lang.String, java.util.List)
+ */
+ public void addAttributes(String ticket, String path, List values)
+ {
+ fAuthService.validate(ticket);
+ fService.addAttributes(path, values);
+ }
+
+ /* (non-Javadoc)
+ * @see org.alfresco.service.cmr.remote.AttributeServiceTransport#setAttributes(java.lang.String, java.util.List, java.util.Map)
+ */
+ public void setAttributes(String ticket, List keys, Map entries)
+ {
+ fAuthService.validate(ticket);
+ fService.setAttributes(keys, entries);
+ }
+
+ /* (non-Javadoc)
+ * @see org.alfresco.service.cmr.remote.AttributeServiceTransport#setAttributes(java.lang.String, java.lang.String, java.util.Map)
+ */
+ public void setAttributes(String ticket, String path, Map entries)
+ {
+ fAuthService.validate(ticket);
+ fService.setAttributes(path, entries);
+ }
}
diff --git a/source/java/org/alfresco/repo/attributes/MapAttributeValue.java b/source/java/org/alfresco/repo/attributes/MapAttributeValue.java
index 655c335e65..8123c52c6d 100644
--- a/source/java/org/alfresco/repo/attributes/MapAttributeValue.java
+++ b/source/java/org/alfresco/repo/attributes/MapAttributeValue.java
@@ -211,4 +211,13 @@ public class MapAttributeValue extends AttributeValue implements MapAttribute
builder.append('}');
return builder.toString();
}
+
+ /* (non-Javadoc)
+ * @see org.alfresco.repo.attributes.AttributeValue#size()
+ */
+ @Override
+ public int size()
+ {
+ return fData.size();
+ }
}
diff --git a/source/java/org/alfresco/repo/remote/AttributeServiceRemote.java b/source/java/org/alfresco/repo/remote/AttributeServiceRemote.java
index 1cde15bda2..2039170eb0 100644
--- a/source/java/org/alfresco/repo/remote/AttributeServiceRemote.java
+++ b/source/java/org/alfresco/repo/remote/AttributeServiceRemote.java
@@ -26,6 +26,7 @@
package org.alfresco.repo.remote;
import java.util.List;
+import java.util.Map;
import org.alfresco.repo.attributes.Attribute;
import org.alfresco.service.cmr.attributes.AttrQuery;
@@ -217,4 +218,36 @@ public class AttributeServiceRemote implements AttributeService
{
return fTransport.getCount(fTicketHolder.getTicket(), path);
}
+
+ /* (non-Javadoc)
+ * @see org.alfresco.service.cmr.attributes.AttributeService#addAttributes(java.util.List, java.util.List)
+ */
+ public void addAttributes(List keys, List values)
+ {
+ fTransport.addAttributes(fTicketHolder.getTicket(), keys, values);
+ }
+
+ /* (non-Javadoc)
+ * @see org.alfresco.service.cmr.attributes.AttributeService#addAttributes(java.lang.String, java.util.List)
+ */
+ public void addAttributes(String path, List values)
+ {
+ fTransport.addAttributes(fTicketHolder.getTicket(), path, values);
+ }
+
+ /* (non-Javadoc)
+ * @see org.alfresco.service.cmr.attributes.AttributeService#setAttributes(java.util.List, java.util.Map)
+ */
+ public void setAttributes(List keys, Map entries)
+ {
+ fTransport.setAttributes(fTicketHolder.getTicket(), keys, entries);
+ }
+
+ /* (non-Javadoc)
+ * @see org.alfresco.service.cmr.attributes.AttributeService#setAttributes(java.lang.String, java.util.Map)
+ */
+ public void setAttributes(String path, Map entries)
+ {
+ fTransport.setAttributes(fTicketHolder.getTicket(), path, entries);
+ }
}
diff --git a/source/java/org/alfresco/service/cmr/attributes/AttributeService.java b/source/java/org/alfresco/service/cmr/attributes/AttributeService.java
index 05bb970727..af8c79ed27 100644
--- a/source/java/org/alfresco/service/cmr/attributes/AttributeService.java
+++ b/source/java/org/alfresco/service/cmr/attributes/AttributeService.java
@@ -26,6 +26,7 @@
package org.alfresco.service.cmr.attributes;
import java.util.List;
+import java.util.Map;
import org.alfresco.repo.attributes.Attribute;
import org.alfresco.util.Pair;
@@ -100,6 +101,20 @@ public interface AttributeService
*/
public void setAttribute(List keys, String name, Attribute value);
+ /**
+ * Set a set of attributes on a map.
+ * @param path The path to the map.
+ * @param entries The entries to set.
+ */
+ public void setAttributes(String path, Map entries);
+
+ /**
+ * Set a set of attributes on a map.
+ * @param keys The List of path keys to the map.
+ * @param entries The entries to set.
+ */
+ public void setAttributes(List keys, Map entries);
+
/**
* Set an attribute in a list.
*
@@ -133,6 +148,20 @@ public interface AttributeService
*/
public void addAttribute(List keys, Attribute value);
+ /**
+ * Add a list of attributes to the end of a list.
+ * @param path The path to the list.
+ * @param values The values to add.
+ */
+ public void addAttributes(String path, List values);
+
+ /**
+ * Add a list of attributes to the end of a list.
+ * @param keys The List of path keys to the list.
+ * @param values The values to add.
+ */
+ public void addAttributes(List keys, List values);
+
/**
* Remove an Attribute.
* @param name The name of the Attribute.
diff --git a/source/java/org/alfresco/service/cmr/remote/AttributeServiceTransport.java b/source/java/org/alfresco/service/cmr/remote/AttributeServiceTransport.java
index bf319f8330..7f74f2eaef 100644
--- a/source/java/org/alfresco/service/cmr/remote/AttributeServiceTransport.java
+++ b/source/java/org/alfresco/service/cmr/remote/AttributeServiceTransport.java
@@ -26,6 +26,7 @@
package org.alfresco.service.cmr.remote;
import java.util.List;
+import java.util.Map;
import org.alfresco.repo.attributes.Attribute;
import org.alfresco.service.cmr.attributes.AttrQuery;
@@ -198,4 +199,36 @@ public interface AttributeServiceTransport
* @return Whether the attribute exists.
*/
public boolean exists(String ticket, String path);
+
+ /**
+ * Add a list of attributes.
+ * @param ticket
+ * @param keys
+ * @param values
+ */
+ public void addAttributes(String ticket, List keys, List values);
+
+ /**
+ * Add a list of attributes.
+ * @param ticket
+ * @param path
+ * @param values
+ */
+ public void addAttributes(String ticket, String path, List values);
+
+ /**
+ * Add a set of attributes.
+ * @param ticket
+ * @param keys
+ * @param entries
+ */
+ public void setAttributes(String ticket, List keys, Map entries);
+
+ /**
+ * Add a set of attributes.
+ * @param ticket
+ * @param path
+ * @param entries
+ */
+ public void setAttributes(String ticket, String path, Map entries);
}