]>
git.argeo.org Git - lgpl/argeo-commons.git/blob - org.argeo.api/src/org/argeo/api/gcr/spi/AbstractContent.java
10f36acdf0509ac117871235faa92aea3bba8b9f
1 package org
.argeo
.api
.gcr
.spi
;
3 import java
.util
.AbstractMap
;
4 import java
.util
.AbstractSet
;
5 import java
.util
.ArrayList
;
6 import java
.util
.Iterator
;
11 import javax
.xml
.namespace
.QName
;
13 import org
.argeo
.api
.gcr
.Content
;
14 import org
.argeo
.api
.gcr
.CrName
;
16 public abstract class AbstractContent
extends AbstractMap
<QName
, Object
> implements Content
{
19 public Set
<Entry
<QName
, Object
>> entrySet() {
20 // Set<Entry<String, Object>> result = new HashSet<>();
21 // for (String key : keys()) {
22 // Entry<String, Object> entry = new Entry<String, Object>() {
25 // public String getKey() {
30 // public Object getValue() {
31 // return get(key, Object.class);
35 // public Object setValue(Object value) {
36 // throw new UnsupportedOperationException();
42 Set
<Entry
<QName
, Object
>> result
= new AttrSet();
46 protected abstract Iterable
<QName
> keys();
48 protected abstract void removeAttr(QName key
);
51 public String
getPath() {
52 List
<Content
> ancestors
= new ArrayList
<>();
53 collectAncestors(ancestors
, this);
54 StringBuilder path
= new StringBuilder();
55 for (Content c
: ancestors
) {
56 QName name
= c
.getName();
58 if (!CrName
.ROOT
.get().equals(name
))
59 path
.append('/').append(name
);
61 return path
.toString();
64 private void collectAncestors(List
<Content
> ancestors
, Content content
) {
67 ancestors
.add(0, content
);
68 collectAncestors(ancestors
, content
.getParent());
74 protected boolean isDefaultAttrTypeRequested(Class
<?
> clss
) {
75 // check whether clss is Object.class
76 return clss
.isAssignableFrom(Object
.class);
80 public String
toString() {
81 return "content " + getPath();
88 class AttrSet
extends AbstractSet
<Entry
<QName
, Object
>> {
91 public Iterator
<Entry
<QName
, Object
>> iterator() {
92 final Iterator
<QName
> keys
= keys().iterator();
93 Iterator
<Entry
<QName
, Object
>> it
= new Iterator
<Map
.Entry
<QName
, Object
>>() {
98 public boolean hasNext() {
99 return keys
.hasNext();
103 public Entry
<QName
, Object
> next() {
106 Object value
= get(key
, Object
.class);
107 AbstractMap
.SimpleEntry
<QName
, Object
> entry
= new SimpleEntry
<>(key
, value
);
112 public void remove() {
114 AbstractContent
.this.removeAttr(key
);
116 throw new IllegalStateException("Iteration has not started");
127 for (QName key
: keys()) {