Skip to content

Commit

Permalink
Merge pull request #182 from jphp-compiler/jsoup-extension
Browse files Browse the repository at this point in the history
Improve jsoup extension.
  • Loading branch information
dim-s committed Apr 17, 2015
2 parents afa9280 + 2c72d6f commit 6deea8f
Show file tree
Hide file tree
Showing 24 changed files with 694 additions and 196 deletions.
2 changes: 1 addition & 1 deletion build.gradle
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
def javaVersion = '1.6';
def projectVersion = '0.6.4';
def projectVersion = '0.6.5';

buildscript {
repositories {
Expand Down
2 changes: 1 addition & 1 deletion docs
Submodule docs updated from 5cc90a to 99e969
6 changes: 5 additions & 1 deletion jphp-jsoup-ext/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -2,5 +2,9 @@

dependencies {
compile project(':jphp-runtime')
compile 'org.jsoup:jsoup:1.8.1'
compile 'org.jsoup:jsoup:1.8.2'

testCompile 'junit:junit:4.+'
testCompile project(':jphp-zend-ext')
testCompile project(':jphp-core').sourceSets.test.output
}
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
import php.runtime.memory.support.MemoryOperation;

public class JsoupExtension extends Extension {
public static final String NAMESPACE = "php\\jsoup\\";
public static final String NS = "php\\jsoup";

@Override
public Status getStatus() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,21 +14,11 @@
import static org.jsoup.Connection.Response;
import static php.runtime.annotation.Reflection.*;

@Name(JsoupExtension.NAMESPACE + "Connection")
@WrapInterface(WrapConnection.Methods.class)
@Abstract
@Name("Connection")
@Namespace(JsoupExtension.NS)
public class WrapConnection extends BaseWrapper<Connection> {
public static final String METHOD_POST = "POST";
public static final String METHOD_GET = "GET";

public WrapConnection(Environment env, Connection object) {
super(env, object);
}

public WrapConnection(Environment env, ClassEntity clazz) {
super(env, clazz);
}

public interface Methods {
public interface WrappedInterface {
Connection url(String url);
Connection userAgent(String userAgent);
Connection timeout(int millis);
Expand All @@ -50,4 +40,15 @@ public interface Methods {
Response response();
Connection response(Response response);
}

public static final String METHOD_POST = "POST";
public static final String METHOD_GET = "GET";

public WrapConnection(Environment env, Connection object) {
super(env, object);
}

public WrapConnection(Environment env, ClassEntity clazz) {
super(env, clazz);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,27 +2,20 @@

import org.develnext.jphp.ext.jsoup.JsoupExtension;
import php.runtime.annotation.Reflection;
import php.runtime.annotation.Reflection.Abstract;
import php.runtime.annotation.Reflection.Namespace;
import php.runtime.env.Environment;
import php.runtime.lang.BaseWrapper;
import php.runtime.reflection.ClassEntity;

import java.util.Collection;

import static org.jsoup.Connection.Request;
import static php.runtime.annotation.Reflection.Name;

@Name(JsoupExtension.NAMESPACE + "ConnectionRequest")
@Reflection.WrapInterface(WrapConnectionRequest.Methods.class)
@Abstract
@Name("ConnectionRequest")
@Namespace(JsoupExtension.NS)
public class WrapConnectionRequest extends BaseWrapper<Request> {
public WrapConnectionRequest(Environment env, Request object) {
super(env, object);
}

public WrapConnectionRequest(Environment env, ClassEntity clazz) {
super(env, clazz);
}

public interface Methods {
public interface WrappedInterface {
public int timeout();
public Request timeout(int millis);

Expand All @@ -38,4 +31,12 @@ public interface Methods {
public boolean ignoreContentType();
public Request ignoreContentType(boolean ignoreContentType);
}

public WrapConnectionRequest(Environment env, Request object) {
super(env, object);
}

public WrapConnectionRequest(Environment env, ClassEntity clazz) {
super(env, clazz);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,23 +2,20 @@

import org.develnext.jphp.ext.jsoup.JsoupExtension;
import org.jsoup.Connection;
import org.jsoup.nodes.Document;
import php.runtime.Memory;
import php.runtime.annotation.Reflection;
import php.runtime.annotation.Reflection.Abstract;
import php.runtime.annotation.Reflection.Namespace;
import php.runtime.annotation.Reflection.WrapInterface;
import php.runtime.env.Environment;
import php.runtime.lang.BaseWrapper;
import php.runtime.memory.BinaryMemory;
import php.runtime.memory.LongMemory;
import php.runtime.memory.StringMemory;
import php.runtime.reflection.ClassEntity;

import java.io.IOException;

import static php.runtime.annotation.Reflection.Name;
import static php.runtime.annotation.Reflection.Signature;

@Name(JsoupExtension.NAMESPACE + "ConnectionResponse")
@Reflection.WrapInterface(Connection.Response.class)
@Abstract
@Name("ConnectionResponse")
@Namespace(JsoupExtension.NS)
@WrapInterface(Connection.Response.class)
public class WrapConnectionResponse extends BaseWrapper<Connection.Response> {
public WrapConnectionResponse(Environment env, Connection.Response object) {
super(env, object);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,28 +1,24 @@
package org.develnext.jphp.ext.jsoup.classes;

import org.develnext.jphp.ext.jsoup.JsoupExtension;
import org.jsoup.Connection;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import php.runtime.annotation.Reflection;
import php.runtime.annotation.Reflection.Abstract;
import php.runtime.annotation.Reflection.Namespace;
import php.runtime.annotation.Reflection.Signature;
import php.runtime.env.Environment;
import php.runtime.lang.BaseWrapper;
import php.runtime.reflection.ClassEntity;

import static php.runtime.annotation.Reflection.Name;

@Name(JsoupExtension.NAMESPACE + "Document")
@Reflection.WrapInterface(WrapDocument.Methods.class)
@Abstract
@Name("Document")
@Namespace(JsoupExtension.NS)
public class WrapDocument extends BaseWrapper<Document> {
public WrapDocument(Environment env, Document object) {
super(env, object);
}

public WrapDocument(Environment env, ClassEntity clazz) {
super(env, clazz);
}

public interface Methods {
public interface WrappedInterface {
String location();

Element head();
Expand All @@ -40,4 +36,17 @@ public interface Methods {

Element clone();
}

public WrapDocument(Environment env, Document object) {
super(env, object);
}

public WrapDocument(Environment env, ClassEntity clazz) {
super(env, clazz);
}

@Signature
public Elements select(String query) {
return getWrappedObject().select(query);
}
}
Original file line number Diff line number Diff line change
@@ -1,10 +1,12 @@
package org.develnext.jphp.ext.jsoup.classes;

import org.develnext.jphp.ext.jsoup.JsoupExtension;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import php.runtime.annotation.Reflection;
import php.runtime.annotation.Reflection.Abstract;
import php.runtime.annotation.Reflection.Namespace;
import php.runtime.annotation.Reflection.Signature;
import php.runtime.env.Environment;
import php.runtime.env.TraceInfo;
import php.runtime.lang.BaseWrapper;
Expand All @@ -17,8 +19,9 @@

import static php.runtime.annotation.Reflection.Name;

@Name(JsoupExtension.NAMESPACE + "Element")
@Reflection.WrapInterface(WrapElement.Methods.class)
@Abstract
@Name("Element")
@Namespace(JsoupExtension.NS)
public class WrapElement extends BaseWrapper<Element> implements ICloneableObject<WrapElement> {
public WrapElement(Environment env, Element object) {
super(env, object);
Expand All @@ -33,7 +36,17 @@ public WrapElement __clone(Environment environment, TraceInfo traceInfo) {
return new WrapElement(environment, __wrappedObject.clone());
}

interface Methods {
@Signature
public String attr(String name) {
return getWrappedObject().attr(name);
}

@Signature
public void attr(String name, String value) {
getWrappedObject().attr(name, value);
}

interface WrappedInterface {
String nodeName();

String tagName();
Expand All @@ -43,8 +56,6 @@ interface Methods {

String id();

Element attr(String attributeKey, String attributeValue);

Map<String, String> dataset();

Element parent();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,51 +5,25 @@
import org.jsoup.select.Elements;
import php.runtime.Memory;
import php.runtime.annotation.Reflection;
import php.runtime.annotation.Reflection.Abstract;
import php.runtime.annotation.Reflection.Namespace;
import php.runtime.annotation.Reflection.Signature;
import php.runtime.env.Environment;
import php.runtime.lang.BaseWrapper;
import php.runtime.lang.ForeachIterator;
import php.runtime.lang.spl.Traversable;
import php.runtime.lang.spl.iterator.IteratorAggregate;
import php.runtime.memory.LongMemory;
import php.runtime.memory.ObjectMemory;
import php.runtime.reflection.ClassEntity;

import java.util.Iterator;

import static php.runtime.annotation.Reflection.Name;

@Name(JsoupExtension.NAMESPACE + "Elements")
@Reflection.WrapInterface(WrapElements.Methods.class)
public class WrapElements extends BaseWrapper<Elements> implements Iterable<Memory> {
public WrapElements(Environment env, Elements wrappedObject) {
super(env, wrappedObject);
}

public WrapElements(Environment env, ClassEntity clazz) {
super(env, clazz);
}

@Override
public Iterator<Memory> iterator() {
final Iterator<Element> iterator = getWrappedObject().iterator();
return new Iterator<Memory>() {
@Override
public boolean hasNext() {
return iterator.hasNext();
}

@Override
public Memory next() {
return new ObjectMemory(new WrapElement(getEnvironment(), iterator.next()));
}

@Override
public void remove() {
iterator.remove();
}
};
}

interface Methods {
@Abstract
@Name("Elements")
@Namespace(JsoupExtension.NS)
public class WrapElements extends BaseWrapper<Elements> implements php.runtime.lang.spl.iterator.Iterator {
interface WrappedInterface {
String attr(String attributeKey);
boolean hasAttr(String attributeKey);
Elements attr(String attributeKey, String attributeValue);
Expand Down Expand Up @@ -86,4 +60,76 @@ interface Methods {
Element first();
Element last();
}

protected Iterator<Element> iterator;
protected WrapElement iteratorValue = null;
protected int iteratorIndex = 0;

public WrapElements(Environment env, Elements wrappedObject) {
super(env, wrappedObject);

iterator = wrappedObject.iterator();

if (iterator.hasNext()) {
iteratorValue = new WrapElement(env, iterator.next());
}
}

public WrapElements(Environment env, ClassEntity clazz) {
super(env, clazz);
}

@Override
@Signature
public Memory current(Environment env, Memory... args) {
return ObjectMemory.valueOf(iteratorValue);
}

@Override
@Signature
public Memory key(Environment env, Memory... args) {
return iteratorValue == null ? Memory.FALSE : LongMemory.valueOf(iteratorIndex);
}

@Override
@Signature
public Memory next(Environment env, Memory... args) {
if (iterator.hasNext()) {
iteratorValue = new WrapElement(env, iterator.next());
iteratorIndex += 1;
} else {
iteratorValue = null;
}

return Memory.NULL;
}

@Override
@Signature
public Memory rewind(Environment env, Memory... args) {
iterator = getWrappedObject().iterator();
if (iterator.hasNext()) {
iteratorValue = new WrapElement(env, iterator.next());
}

iteratorIndex = 0;

return Memory.NULL;
}

@Override
@Signature
public Memory valid(Environment env, Memory... args) {
return iteratorValue != null ? Memory.TRUE : Memory.FALSE;
}

@Override
public ForeachIterator getNewIterator(Environment env, boolean getReferences, boolean getKeyReferences) {
return ObjectMemory.valueOf(this).getNewIterator(env, getReferences, getKeyReferences);
}

@Override
public ForeachIterator getNewIterator(Environment env) {
return ObjectMemory.valueOf(this).getNewIterator(env);
}
}
Loading

0 comments on commit 6deea8f

Please sign in to comment.