import java.io.Closeable;
import java.io.IOException;
+import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.Optional;
/*
* TYPING
*/
- List<QName> getTypes();
+ List<QName> getContentClasses();
+
+ /** AND */
+ default boolean isContentClass(QName... contentClass) {
+ List<QName> contentClasses = getContentClasses();
+ for (QName cClass : contentClass) {
+ if (!contentClasses.contains(cClass))
+ return false;
+ }
+ return true;
+ }
+
+ /** OR */
+ default boolean hasContentClass(QName... contentClass) {
+ List<QName> contentClasses = getContentClasses();
+ for (QName cClass : contentClass) {
+ if (contentClasses.contains(cClass))
+ return true;
+ }
+ return false;
+ }
/*
* DEFAULT METHODS
throw new UnsupportedOperationException("Cannot write content " + this + " as " + clss.getName());
}
+ /*
+ * CHILDREN
+ */
+
+ default boolean hasChild(QName name) {
+ for (Content child : this) {
+ if (child.getName().equals(name))
+ return true;
+ }
+ return false;
+ }
+
+ default Content anyOrAddChild(QName name, QName... classes) {
+ Content child = anyChild(name);
+ if (child != null)
+ return child;
+ return this.add(name, classes);
+ }
+
+ /** Any child with this name, or null if there is none */
+ default Content anyChild(QName name) {
+ for (Content child : this) {
+ if (child.getName().equals(name))
+ return child;
+ }
+ return null;
+ }
+
/*
* CONVENIENCE METHODS
*/
-// default String attr(String key) {
-// return get(key, String.class);
-// }
+ default String attr(String key) {
+ Object obj = get(key);
+ if (obj == null)
+ return null;
+ return obj.toString();
+
+ }
+
+ default String attr(QName key) {
+ Object obj = get(key);
+ if (obj == null)
+ return null;
+ return obj.toString();
+
+ }
//
// default String attr(Object key) {
// return key != null ? attr(key.toString()) : attr(null);