]>
git.argeo.org Git - lgpl/argeo-commons.git/blob - org.argeo.api.acr/src/org/argeo/api/acr/Content.java
1 package org
.argeo
.api
.acr
;
5 import java
.util
.Optional
;
7 import javax
.xml
.XMLConstants
;
8 import javax
.xml
.namespace
.QName
;
11 * A semi-structured content, with attributes, within a hierarchical structure.
13 public interface Content
extends Iterable
<Content
>, Map
<QName
, Object
> {
22 * ATTRIBUTES OPERATIONS
25 <A
> Optional
<A
> get(QName key
, Class
<A
> clss
);
27 default Object
get(String key
) {
28 if (key
.indexOf(':') >= 0)
29 throw new IllegalArgumentException("Name " + key
+ " has a prefix");
30 return get(new QName(XMLConstants
.NULL_NS_URI
, key
, XMLConstants
.DEFAULT_NS_PREFIX
));
33 default Object
put(String key
, Object value
) {
34 if (key
.indexOf(':') >= 0)
35 throw new IllegalArgumentException("Name " + key
+ " has a prefix");
36 return put(new QName(XMLConstants
.NULL_NS_URI
, key
, XMLConstants
.DEFAULT_NS_PREFIX
), value
);
39 default Object
remove(String key
) {
40 if (key
.indexOf(':') >= 0)
41 throw new IllegalArgumentException("Name " + key
+ " has a prefix");
42 return remove(new QName(XMLConstants
.NULL_NS_URI
, key
, XMLConstants
.DEFAULT_NS_PREFIX
));
45 Class
<?
> getType(QName key
);
47 boolean isMultiple(QName key
);
49 <A
> Optional
<List
<A
>> getMultiple(QName key
, Class
<A
> clss
);
51 default <A
> List
<A
> getMultiple(QName key
) {
54 type
= (Class
<A
>) getType(key
);
55 } catch (ClassCastException e
) {
56 throw new IllegalArgumentException("Requested type is not the default type");
58 Optional
<List
<A
>> res
= getMultiple(key
, type
);
63 throw new IllegalStateException("Metadata " + key
+ " is not availabel as list of type " + type
);
71 Content
add(QName name
, QName
... classes
);
73 default Content
add(String name
, QName
... classes
) {
74 if (name
.indexOf(':') >= 0)
75 throw new IllegalArgumentException("Name " + name
+ " has a prefix");
76 return add(new QName(XMLConstants
.NULL_NS_URI
, name
, XMLConstants
.DEFAULT_NS_PREFIX
), classes
);
84 default <A
> A
adapt(Class
<A
> clss
) throws IllegalArgumentException
{
85 throw new IllegalArgumentException("Cannot adapt content " + this + " to " + clss
.getName());
88 default <C
extends AutoCloseable
> C
open(Class
<C
> clss
) throws Exception
, IllegalArgumentException
{
89 throw new IllegalArgumentException("Cannot open content " + this + " as " + clss
.getName());
95 // default String attr(String key) {
96 // return get(key, String.class);
99 // default String attr(Object key) {
100 // return key != null ? attr(key.toString()) : attr(null);
103 // default <A> A get(Object key, Class<A> clss) {
104 // return key != null ? get(key.toString(), clss) : get(null, clss);
108 * EXPERIMENTAL UNSUPPORTED
110 default boolean hasText() {
114 default String
getText() {
115 throw new UnsupportedOperationException();