]> git.argeo.org Git - lgpl/argeo-commons.git/blobdiff - org.argeo.cms/src/org/argeo/cms/acr/AbstractContent.java
Add cached path to content
[lgpl/argeo-commons.git] / org.argeo.cms / src / org / argeo / cms / acr / AbstractContent.java
index 18c6724ace740d6a5df99e5cf43e9126cd6c9eaf..0aa4e9d4f783d770d9c2e1b44ecdef76ec854129 100644 (file)
@@ -16,11 +16,15 @@ import org.argeo.api.acr.Content;
 import org.argeo.api.acr.CrName;
 import org.argeo.api.acr.spi.ProvidedContent;
 import org.argeo.api.acr.spi.ProvidedSession;
+import org.argeo.util.LangUtils;
 
 /** Partial reference implementation of a {@link ProvidedContent}. */
 public abstract class AbstractContent extends AbstractMap<QName, Object> implements ProvidedContent {
        private final ProvidedSession session;
 
+       // cache
+       private String _path = null;
+
        public AbstractContent(ProvidedSession session) {
                this.session = session;
        }
@@ -87,16 +91,19 @@ public abstract class AbstractContent extends AbstractMap<QName, Object> impleme
 
        @Override
        public String getPath() {
+               if (_path != null)
+                       return _path;
                List<Content> ancestors = new ArrayList<>();
                collectAncestors(ancestors, this);
                StringBuilder path = new StringBuilder();
                for (Content c : ancestors) {
                        QName name = c.getName();
                        // FIXME
-                       if (!CrName.ROOT.get().equals(name))
+                       if (!CrName.root.qName().equals(name))
                                path.append('/').append(name);
                }
-               return path.toString();
+               _path = path.toString();
+               return _path;
        }
 
        private void collectAncestors(List<Content> ancestors, Content content) {
@@ -132,7 +139,7 @@ public abstract class AbstractContent extends AbstractMap<QName, Object> impleme
         */
 
        @Override
-       public List<QName> getTypes() {
+       public List<QName> getContentClasses() {
                return new ArrayList<>();
        }
 
@@ -152,9 +159,9 @@ public abstract class AbstractContent extends AbstractMap<QName, Object> impleme
        /*
         * DEFAULTS
         */
-       //      - no children
-       //      - no attributes
-       //      - cannot be modified
+       // - no children
+       // - no attributes
+       // - cannot be modified
        @Override
        public Iterator<Content> iterator() {
                return Collections.emptyIterator();
@@ -226,13 +233,16 @@ public abstract class AbstractContent extends AbstractMap<QName, Object> impleme
 
                @Override
                public int size() {
-
-                       int count = 0;
-                       for (Iterator<QName> it = keys().iterator(); it.hasNext();) {
-                               count++;
-                       }
-                       return count;
+                       return LangUtils.size(keys());
                }
 
        }
+
+       /*
+        * OBJECT METHODS
+        */
+       @Override
+       public String toString() {
+               return "content " + getPath();
+       }
 }