From 21742933ec6e4055f3fecccd411e345613e84c3a Mon Sep 17 00:00:00 2001 From: Britt Park Date: Tue, 29 May 2007 18:19:00 +0000 Subject: [PATCH] Adds some convenience methods to AttributeService. Namely two flavors each of addAttributes, for adding attributes to lists, and setAttributes for adding entries to maps. git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@5804 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- config/alfresco/public-services-context.xml | 6 +- .../repo/attributes/AttributeServiceImpl.java | 96 +++++++++++++++++++ .../repo/attributes/AttributeServiceTest.java | 17 ++++ .../AttributeServiceTransportService.java | 37 +++++++ .../repo/attributes/MapAttributeValue.java | 9 ++ .../repo/remote/AttributeServiceRemote.java | 33 +++++++ .../cmr/attributes/AttributeService.java | 29 ++++++ .../cmr/remote/AttributeServiceTransport.java | 33 +++++++ 8 files changed, 258 insertions(+), 2 deletions(-) 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); }