Quellcode durchsuchen

XMLQuery: draft

Ranides Atterwim vor 10 Jahren
Ursprung
Commit
7b258dac3c

+ 2 - 0
assira/src/main/java/net/ranides/assira/collection/maps/Cache.java

@@ -47,6 +47,8 @@ import java.util.Set;
  */
 @SuppressWarnings("element-type-mismatch")
 public class Cache<K,V> extends AbstractMap<K,V> {
+    
+    // @todo (assira #4) CacheTTL
 
     private final CacheMap<K,V> map;
 

+ 20 - 0
assira/src/main/java/net/ranides/assira/xml/XMLAttribute.java

@@ -0,0 +1,20 @@
+/*
+ * @author Ranides Atterwim <ranides@gmail.com>
+ * @copyright Ranides Atterwim
+ * @license WTFPL
+ * @url http://ranides.net/projects/assira
+ */
+
+package net.ranides.assira.xml;
+
+/**
+ *
+ * @author Ranides Atterwim <ranides@gmail.com>
+ */
+public interface XMLAttribute {
+
+    String name();
+    
+    String value();
+    
+}

+ 221 - 0
assira/src/main/java/net/ranides/assira/xml/XMLElement.java

@@ -0,0 +1,221 @@
+/*
+ * @author Ranides Atterwim <ranides@gmail.com>
+ * @copyright Ranides Atterwim
+ * @license WTFPL
+ * @url http://ranides.net/projects/assira
+ */
+package net.ranides.assira.xml;
+
+import java.io.Writer;
+import java.util.List;
+import java.util.Map;
+import java.util.function.Consumer;
+import java.util.function.Function;
+import java.util.function.Predicate;
+import java.util.stream.Collector;
+import javax.xml.transform.Transformer;
+import net.ranides.assira.collection.query.CQuery;
+import org.w3c.dom.Element;
+
+/**
+ *
+ * @author Ranides Atterwim <ranides@gmail.com>
+ */
+public interface XMLElement extends Iterable<XMLElement> {
+    
+    // @todo (assira #3) XMLQuery 
+
+    // https://github.com/chrsan/css-selectors
+    // https://github.com/jOOQ/jOOX
+    
+    
+    Element node();
+    
+    String name();
+    
+    CQuery<String> names();
+    
+    String xpath();
+    
+    CQuery<String> xpaths();
+    
+    String content();
+    
+    void content(Writer target);
+    
+    String text();
+    
+    void text(Writer target);
+    
+    CQuery<XMLAttribute> attr();
+    
+    CQuery<XMLAttribute> attr(String name);
+    
+    CQuery<XMLAttribute> attr(Predicate<String> name);
+    
+    Map<String,String> namespace();
+    
+    XMLElement namespace(boolean on);
+    
+    XMLElement namespace(String name, String uri);
+    
+    XMLElement namespace(Map<String,String> ns);
+    
+
+    
+    int size();
+    
+    CQuery<XMLElement> stream();
+    
+    <R> CQuery<R> stream(Function<? super XMLElement, ? extends R> mapper);
+    
+    List<XMLElement> list();
+    
+    <R> List<R> list(Function<? super XMLElement, ? extends R> mapper);
+    
+    <R, A> R collect(Collector<? super XMLElement, A, R> collector);
+    
+    void each(Consumer<? super XMLElement> consumer);
+    
+    
+    XMLElement first();
+    
+    XMLElement last();
+    
+    XMLElement eq(int... indexes);
+    
+    XMLElement slice(int begin);
+    
+    XMLElement slice(int begin, int end);
+    
+    XMLElement concat(XMLElement elements);
+    
+    
+    
+    XMLElement filter(String selector);
+    
+    XMLElement filter(XMLSelector selector);
+    
+    XMLElement discard(String selector);
+    
+    XMLElement discard(XMLSelector selector);
+        
+    XMLElement has(String selector);
+    
+    XMLElement has(XMLSelector selector);
+    
+    
+    boolean is(String  selector);
+    
+    boolean is(XMLSelector selector);
+
+    
+    XMLElement find();
+    
+    XMLElement find(String selector);
+    
+    XMLElement find(XMLSelector selector);
+    
+    XMLElement child();
+    
+    XMLElement child(String selector);
+    
+    XMLElement child(XMLSelector selector);
+    
+    XMLElement children();
+    
+    XMLElement children(String selector);
+    
+    XMLElement children(XMLSelector selector);
+    
+    XMLElement next();
+    
+    XMLElement next(String selector);
+    
+    XMLElement next(XMLSelector selector);
+    
+    XMLElement nextAll();
+    
+    XMLElement nextAll(String selector);
+    
+    XMLElement nextAll(XMLSelector selector);
+    
+    XMLElement nextUntil(String selector);
+    
+    XMLElement nextUntil(XMLSelector selector);
+    
+    XMLElement prev();
+    
+    XMLElement prev(String selector);
+    
+    XMLElement prev(XMLSelector selector);
+    
+    XMLElement prevAll();
+    
+    XMLElement prevAll(String selector);
+    
+    XMLElement prevAll(XMLSelector selector);
+    
+    XMLElement prevUntil(String selector);
+    
+    XMLElement prevUntil(XMLSelector selector);
+    
+    XMLElement parent();
+    
+    XMLElement parent(String selector);
+    
+    XMLElement parent(XMLSelector selector);
+    
+    XMLElement parents();
+    
+    XMLElement parents(String selector);
+    
+    XMLElement parents(XMLSelector selector);
+    
+    XMLElement parentsUntil(String until);
+    
+    XMLElement parentsUntil(XMLSelector until);
+    
+    XMLElement parentsUntil(String until, String selector);
+    
+    XMLElement parentsUntil(XMLSelector until, XMLSelector selector);
+    
+    XMLElement siblings();
+    
+    XMLElement siblings(String selector);
+    
+    XMLElement siblings(XMLSelector selector);
+    
+    XMLElement leaf();
+    
+    
+    XMLElement before(XMLElement element);
+    
+    XMLElement after(XMLElement element);
+    
+    XMLElement prepend(XMLElement element);
+    
+    XMLElement append(XMLElement element);
+    
+    XMLElement replace(XMLElement element);
+    
+    XMLElement rename(String tagname);
+    
+    XMLElement remove();
+    
+    XMLElement clear();
+    
+    XMLElement wrap(String tagname);
+    
+    XMLElement unwrap(String tagname);
+    
+    XMLElement attr(String name, String value);
+    
+    XMLElement content(String value);
+    
+    XMLElement text(String value);
+    
+    XMLElement apply(Transformer transformer);
+    
+        
+}

+ 95 - 4
assira/src/main/java/net/ranides/assira/xml/XMLQuery.java

@@ -4,16 +4,107 @@
  * @license WTFPL
  * @url http://ranides.net/projects/assira
  */
+
 package net.ranides.assira.xml;
 
+import java.io.File;
+import java.io.InputStream;
+import java.io.Reader;
+import java.net.URI;
+import java.util.function.Predicate;
+import javax.xml.transform.Transformer;
+import org.w3c.dom.Document;
+
 /**
  *
  * @author Ranides Atterwim <ranides@gmail.com>
  */
-public interface XMLQuery {
+@SuppressWarnings("PMD.MethodNameRules")
+public final class XMLQuery {
     
-    // @todo (assira #3) XMLQuery 
+    private XMLQuery() {
+        /* utility class */
+    }
 
-    // https://github.com/chrsan/css-selectors
-    // https://github.com/jOOQ/jOOX
+    public static XMLElement $(Document doc) {
+        throw new UnsupportedOperationException();
+    }
+    
+    public static XMLElement $(String doc) {
+        throw new UnsupportedOperationException();
+    }
+    
+    public static XMLElement $(File doc) {
+        throw new UnsupportedOperationException();
+    }
+    
+    public static XMLElement $(URI doc) {
+        throw new UnsupportedOperationException();
+    }
+    
+    public static XMLElement $(Reader doc) {
+        throw new UnsupportedOperationException();
+    }
+    
+    public static XMLElement $(InputStream doc) {
+        // charset: UTF-8
+        throw new UnsupportedOperationException();
+    }
+    
+    public static XMLElement $(XMLElement... elements) {
+        throw new UnsupportedOperationException();
+    }
+    
+    public static XMLSelector $xpath(String text) {
+        throw new UnsupportedOperationException();
+    }
+    
+    public static XMLSelector $css(String text) {
+        throw new UnsupportedOperationException();
+    }
+    
+    public static Transformer $tr(String xsl) {
+        throw new UnsupportedOperationException();
+    }
+    
+    public static Transformer $tr(File xsl) {
+        throw new UnsupportedOperationException();
+    }
+    
+    public static Transformer $tr(URI xsl) {
+        throw new UnsupportedOperationException();
+    }
+    
+    public static Transformer $tr(Reader xsl) {
+        throw new UnsupportedOperationException();
+    }
+    
+    public static XMLSelector $text(String regex) {
+        throw new UnsupportedOperationException();
+    }
+    
+    public static XMLSelector $text(Predicate<String> predicate) {
+        throw new UnsupportedOperationException();
+    }
+    
+    public static XMLSelector $name(String regex) {
+        throw new UnsupportedOperationException();
+    }
+    
+    public static XMLSelector $name(Predicate<String> predicate) {
+        throw new UnsupportedOperationException();
+    }
+    
+    public static XMLSelector $attr(String name) {
+        throw new UnsupportedOperationException();
+    }
+    
+    public static XMLSelector $attr(String name, String regex) {
+        throw new UnsupportedOperationException();
+    }
+    
+    public static XMLSelector $attr(String name, Predicate<String> predicate) {
+        throw new UnsupportedOperationException();
+    }
+    
 }

+ 29 - 0
assira/src/main/java/net/ranides/assira/xml/XMLSelector.java

@@ -0,0 +1,29 @@
+/*
+ * @author Ranides Atterwim <ranides@gmail.com>
+ * @copyright Ranides Atterwim
+ * @license WTFPL
+ * @url http://ranides.net/projects/assira
+ */
+
+package net.ranides.assira.xml;
+
+import java.util.function.Predicate;
+
+/**
+ *
+ * @author Ranides Atterwim <ranides@gmail.com>
+ */
+public interface XMLSelector extends Predicate<XMLElement> {
+
+    // tutaj dużo metod "per" selector ale z "default" które powodują, że się nam to będzie 
+    // zachowywało jak predicate zamiast "przeszukiwacza wgłąb / xpath / css selector"
+    
+    default boolean isPredicate() {
+        return true;
+    }
+
+    @Override
+    public boolean test(XMLElement t);
+    
+    
+}