diff --git a/config/alfresco/public-services-context.xml b/config/alfresco/public-services-context.xml
index 58734d5a27..379545fc92 100644
--- a/config/alfresco/public-services-context.xml
+++ b/config/alfresco/public-services-context.xml
@@ -994,7 +994,8 @@
setAttributes
removeAttribute
addAttribute
- addAttributes
+ addAttributes
+ removeEntries
diff --git a/source/java/org/alfresco/repo/attributes/AttributeDAO.java b/source/java/org/alfresco/repo/attributes/AttributeDAO.java
index ca78b06a73..b7992e53c4 100644
--- a/source/java/org/alfresco/repo/attributes/AttributeDAO.java
+++ b/source/java/org/alfresco/repo/attributes/AttributeDAO.java
@@ -54,5 +54,12 @@ public interface AttributeDAO
* @param query The AttrQuery.
* @return A List of key, attribute value pairs.
*/
- List> find(MapAttribute map, AttrQuery query);
+ public List> find(MapAttribute map, AttrQuery query);
+
+ /**
+ * Delete entries from a map that match the given query.
+ * @param map
+ * @param query
+ */
+ public void delete(MapAttribute map, AttrQuery query);
}
diff --git a/source/java/org/alfresco/repo/attributes/AttributeServiceImpl.java b/source/java/org/alfresco/repo/attributes/AttributeServiceImpl.java
index 47fee585be..9269a1d18e 100644
--- a/source/java/org/alfresco/repo/attributes/AttributeServiceImpl.java
+++ b/source/java/org/alfresco/repo/attributes/AttributeServiceImpl.java
@@ -420,6 +420,44 @@ public class AttributeServiceImpl implements AttributeService
removeAttribute(keys, index);
}
+ /* (non-Javadoc)
+ * @see org.alfresco.service.cmr.attributes.AttributeService#removeEntries(java.util.List, org.alfresco.service.cmr.attributes.AttrQuery)
+ */
+ public void removeEntries(List keys, AttrQuery query)
+ {
+ if (keys == null || query == null)
+ {
+ throw new AVMBadArgumentException("Illegal null argument.");
+ }
+ if (keys.size() == 0)
+ {
+ throw new AVMBadArgumentException("Illegal zero length key path.");
+ }
+ Attribute map = getAttributeFromPath(keys);
+ if (map == null)
+ {
+ throw new AVMNotFoundException("Could not find attribute: " + keys);
+ }
+ if (map.getType() != Attribute.Type.MAP)
+ {
+ throw new AVMWrongTypeException("Not a map: " + keys);
+ }
+ fAttributeDAO.delete((MapAttribute)map, query);
+ }
+
+ /* (non-Javadoc)
+ * @see org.alfresco.service.cmr.attributes.AttributeService#removeEntries(java.lang.String, org.alfresco.service.cmr.attributes.AttrQuery)
+ */
+ public void removeEntries(String path, AttrQuery query)
+ {
+ if (path == null || query == null)
+ {
+ throw new AVMBadArgumentException("Illegal null argument.");
+ }
+ List keys = parsePath(path);
+ removeEntries(keys, query);
+ }
+
/* (non-Javadoc)
* @see org.alfresco.service.cmr.attributes.AttributeService#setAttribute(java.util.List, int, org.alfresco.repo.attributes.Attribute)
*/
diff --git a/source/java/org/alfresco/repo/attributes/AttributeServiceTest.java b/source/java/org/alfresco/repo/attributes/AttributeServiceTest.java
index 8691ad5c5f..38be9eef84 100644
--- a/source/java/org/alfresco/repo/attributes/AttributeServiceTest.java
+++ b/source/java/org/alfresco/repo/attributes/AttributeServiceTest.java
@@ -282,6 +282,9 @@ public class AttributeServiceTest extends TestCase
assertEquals(25, fService.getKeys("map/submap/subsubmap").size());
fService.removeAttribute("map/submap", "subsubmap");
assertEquals(26, fService.getKeys("map/submap").size());
+ fService.removeEntries("map/submap", new AttrAndQuery(new AttrQueryGTE("a"),
+ new AttrQueryLTE("d")));
+ assertEquals(22, fService.getCount("map/submap"));
}
catch (Exception e)
{
diff --git a/source/java/org/alfresco/repo/attributes/AttributeServiceTransportService.java b/source/java/org/alfresco/repo/attributes/AttributeServiceTransportService.java
index 6d72a934cd..2efbdfceef 100644
--- a/source/java/org/alfresco/repo/attributes/AttributeServiceTransportService.java
+++ b/source/java/org/alfresco/repo/attributes/AttributeServiceTransportService.java
@@ -280,4 +280,22 @@ public class AttributeServiceTransportService implements
fAuthService.validate(ticket);
fService.setAttributes(path, entries);
}
+
+ /* (non-Javadoc)
+ * @see org.alfresco.service.cmr.remote.AttributeServiceTransport#removeEntries(java.lang.String, java.util.List, org.alfresco.service.cmr.attributes.AttrQuery)
+ */
+ public void removeEntries(String ticket, List keys, AttrQuery query)
+ {
+ fAuthService.validate(ticket);
+ fService.removeEntries(keys, query);
+ }
+
+ /* (non-Javadoc)
+ * @see org.alfresco.service.cmr.remote.AttributeServiceTransport#removeEntries(java.lang.String, java.lang.String, org.alfresco.service.cmr.attributes.AttrQuery)
+ */
+ public void removeEntries(String ticket, String path, AttrQuery query)
+ {
+ fAuthService.validate(ticket);
+ fService.removeEntries(path, query);
+ }
}
diff --git a/source/java/org/alfresco/repo/attributes/hibernate/AttributeDAOHibernate.java b/source/java/org/alfresco/repo/attributes/hibernate/AttributeDAOHibernate.java
index be71de69d2..f9f2f40133 100644
--- a/source/java/org/alfresco/repo/attributes/hibernate/AttributeDAOHibernate.java
+++ b/source/java/org/alfresco/repo/attributes/hibernate/AttributeDAOHibernate.java
@@ -125,6 +125,18 @@ public class AttributeDAOHibernate extends HibernateDaoSupport implements
return result;
}
+ /* (non-Javadoc)
+ * @see org.alfresco.repo.attributes.AttributeDAO#delete(org.alfresco.repo.attributes.MapAttribute, org.alfresco.service.cmr.attributes.AttrQuery)
+ */
+ public void delete(MapAttribute map, AttrQuery query)
+ {
+ List> result = find(map, query);
+ for (Pair entry : result)
+ {
+ map.remove(entry.getFirst());
+ }
+ }
+
/* (non-Javadoc)
* @see org.alfresco.repo.attributes.AttributeDAO#save(org.alfresco.repo.attributes.Attribute)
*/
diff --git a/source/java/org/alfresco/repo/remote/AttributeServiceRemote.java b/source/java/org/alfresco/repo/remote/AttributeServiceRemote.java
index 2039170eb0..ec6dea7090 100644
--- a/source/java/org/alfresco/repo/remote/AttributeServiceRemote.java
+++ b/source/java/org/alfresco/repo/remote/AttributeServiceRemote.java
@@ -250,4 +250,20 @@ public class AttributeServiceRemote implements AttributeService
{
fTransport.setAttributes(fTicketHolder.getTicket(), path, entries);
}
+
+ /* (non-Javadoc)
+ * @see org.alfresco.service.cmr.attributes.AttributeService#removeEntries(java.util.List, org.alfresco.service.cmr.attributes.AttrQuery)
+ */
+ public void removeEntries(List keys, AttrQuery query)
+ {
+ fTransport.removeEntries(fTicketHolder.getTicket(), keys, query);
+ }
+
+ /* (non-Javadoc)
+ * @see org.alfresco.service.cmr.attributes.AttributeService#removeEntries(java.lang.String, org.alfresco.service.cmr.attributes.AttrQuery)
+ */
+ public void removeEntries(String path, AttrQuery query)
+ {
+ fTransport.removeEntries(fTicketHolder.getTicket(), path, query);
+ }
}
diff --git a/source/java/org/alfresco/service/cmr/attributes/AttributeService.java b/source/java/org/alfresco/service/cmr/attributes/AttributeService.java
index af8c79ed27..31333121ee 100644
--- a/source/java/org/alfresco/service/cmr/attributes/AttributeService.java
+++ b/source/java/org/alfresco/service/cmr/attributes/AttributeService.java
@@ -191,6 +191,20 @@ public interface AttributeService
*/
public void removeAttribute(List keys, int index);
+ /**
+ * Remove entries from the designated map which match the given query.
+ * @param keys The list of attribute path entries.
+ * @param query The attribute query.
+ */
+ public void removeEntries(List keys, AttrQuery query);
+
+ /**
+ * Remove entries from the designated map which match the given query.
+ * @param path The path to the map.
+ * @param query The attribute query.
+ */
+ public void removeEntries(String path, AttrQuery query);
+
/**
* Query for the list of attributes that is contained in the map
* defined by the given path and meet the query criteria.
diff --git a/source/java/org/alfresco/service/cmr/remote/AttributeServiceTransport.java b/source/java/org/alfresco/service/cmr/remote/AttributeServiceTransport.java
index 7f74f2eaef..e6d709d387 100644
--- a/source/java/org/alfresco/service/cmr/remote/AttributeServiceTransport.java
+++ b/source/java/org/alfresco/service/cmr/remote/AttributeServiceTransport.java
@@ -231,4 +231,20 @@ public interface AttributeServiceTransport
* @param entries
*/
public void setAttributes(String ticket, String path, Map entries);
+
+ /**
+ * Remove entries from a map that match a query.
+ * @param ticket
+ * @param keys
+ * @param query
+ */
+ public void removeEntries(String ticket, List keys, AttrQuery query);
+
+ /**
+ * Remove entries from a map that match a query.
+ * @param ticket
+ * @param path
+ * @param query
+ */
+ public void removeEntries(String ticket, String path, AttrQuery query);
}