</dependencySets>\r
<fileSets>\r
<fileSet>\r
- <directory>${project.build.outputDirectory}</directory>\r
- </fileSet>\r
- <fileSet>\r
<useStrictFiltering>true</useStrictFiltering>\r
<outputDirectory>META-INF</outputDirectory>\r
<includes>\r
</includes>\r
</fileSet>\r
</fileSets>\r
-</assembly>
\ No newline at end of file
+</assembly>\r
import java.util.regex.Matcher;\r
import java.util.regex.Pattern;\r
\r
+import org.xerial.core.XerialException;\r
import org.xerial.json.JSONString;\r
import org.xerial.json.JSONWriter;\r
import org.xerial.util.Pair;\r
private List<RelationSetter> relationSetterContainer = new ArrayList<RelationSetter>();\r
private ParameterSetter valueSetter = null;\r
\r
+ private RelationSetter propertySetter = null;\r
+\r
+ public void setProperty(Object target, Object key, Object value) throws XerialException\r
+ {\r
+ if (propertySetter == null)\r
+ return;\r
+\r
+ propertySetter.bind(target, key, value);\r
+ }\r
+\r
public List<ParameterSetter> getSetterList()\r
{\r
return Collections.unmodifiableList(setterContainer);\r
String methodName = eachMethod.getName();\r
String paramName = pickPropertyName(methodName);\r
\r
- if (methodName.startsWith("add") || methodName.startsWith("set") || methodName.startsWith("put"))\r
+ if (methodName.startsWith("add") || methodName.startsWith("set"))\r
{\r
Class< ? >[] argTypes = eachMethod.getParameterTypes();\r
switch (argTypes.length)\r
continue;\r
\r
}\r
+ else if (methodName.startsWith("put"))\r
+ {\r
+ Class< ? >[] argTypes = eachMethod.getParameterTypes();\r
+ if (argTypes.length != 2)\r
+ continue;\r
+\r
+ if (TypeInfo.isCollection(eachMethod.getDeclaringClass()))\r
+ continue;\r
+\r
+ // relation adder\r
+ Pair<String, String> relName = pickRelationName(paramName);\r
+ if (relName == null)\r
+ {\r
+ // infer relation node names\r
+ if (TypeInfo.isMap(eachMethod.getDeclaringClass()))\r
+ {\r
+\r
+ Class< ? >[] mapElementType = BeanUtil.resolveActualTypeOfMapElement(targetType, eachMethod\r
+ .getParameterTypes());\r
+\r
+ // map.put(Key, Value)\r
+ setterContainer.add(ParameterSetter.newMapEntrySetter(mapElementType[0], mapElementType[1]));\r
+\r
+ // (entry, key)\r
+ setterContainer.add(ParameterSetter.newKeySetter(mapElementType[0]));\r
+ // (entry, value)\r
+ setterContainer.add(ParameterSetter.newValueSetter(mapElementType[1]));\r
+ continue;\r
+ }\r
+ else\r
+ {\r
+ propertySetter = RelationSetter.newRelationSetter("key", "value", eachMethod);\r
+ continue;\r
+ }\r
+ }\r
+\r
+ relationSetterContainer.add(RelationSetter.newRelationSetter(relName.getFirst(), relName.getSecond(),\r
+ eachMethod));\r
+\r
+ continue;\r
+ }\r
else if (methodName.startsWith("append"))\r
{\r
addNewSetter(setterContainer, paramName, eachMethod);\r
private HashMap<Long, Object> objectHolder = new HashMap<Long, Object>();
private HashMap<Schema, Binder> schema2binder = new HashMap<Schema, Binder>();
+
private Deque<Object> contextNodeStack = new ArrayDeque<Object>();
private final QuerySet qs;
public void leaveNode(Schema schema, Node node) throws Exception
{
+ if (schema == null && node.nodeValue != null)
+ {
+ // if putter is defined, set (node.nodeName, node.nodeValue) as (key, value)
+ if (_logger.isTraceEnabled())
+ _logger.trace("put: " + node);
+
+ Object contextNode = contextNodeStack.getLast();
+ ObjectLens lens = ObjectLens.getObjectLens(contextNode.getClass());
+ lens.setProperty(contextNode, node.nodeName, node.nodeValue);
+ }
+
Object obj = objectHolder.remove(node.nodeID);
if (_logger.isDebugEnabled())
import java.io.StringReader;
import java.util.ArrayList;
+import java.util.Properties;
import java.util.TreeMap;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
+import org.xerial.util.FileResource;
import org.xerial.util.Pair;
import org.xerial.util.log.Logger;
}
+ public static class PropReader
+ {
+ Properties prop = new Properties();
+
+ public void put(String key, String value)
+ {
+ prop.put(key, value);
+ }
+ }
+
+ @Test
+ public void property() throws Exception
+ {
+ PropReader p = Lens.loadSilk(PropReader.class, FileResource.open(ObjectLensTest.class, "property.silk"));
+
+ assertEquals(2, p.prop.size());
+ assertEquals("hello", p.prop.get("db.name"));
+ assertEquals("sqlite", p.prop.get("db.type"));
+ }
+
}
--- /dev/null
+-db.name: hello\r
+-db.type: sqlite\r
+\r
{\r
private static Logger _logger = Logger.getLogger(StreamAmoebaJoinTest.class);\r
\r
+ SilkParserConfig config = new SilkParserConfig();\r
+\r
@Before\r
public void setUp() throws Exception\r
- {}\r
+ {\r
+ config.bufferSize = 1024 * 1024 * 8; // 8MB\r
+ config.numWorkers = 2;\r
+ }\r
\r
@After\r
public void tearDown() throws Exception\r
QuerySet qs = new QuerySetBuilder().build();\r
StreamAmoebaJoin aj = new StreamAmoebaJoin(qs, new AmoebaJoinHandlerBase());\r
StopWatch sw = new StopWatch();\r
- aj.sweep(new SilkParser(FileResource.find(StreamAmoebaJoinTest.class, "../../silk/scaffold1.silk")));\r
+ aj.sweep(new SilkParser(FileResource.find(StreamAmoebaJoinTest.class, "../../silk/scaffold1.silk"), config));\r
_logger.info("time: " + sw.getElapsedTime());\r
}\r
\r
@Test\r
public void silkWalkPerformance() throws Exception\r
{\r
- SilkParserConfig config = new SilkParserConfig();\r
- config.bufferSize = 1024 * 1024 * 8; // 8MB\r
- config.numWorkers = 2;\r
SilkParser parser = new SilkParser(FileResource.find(StreamAmoebaJoinTest.class, "../../silk/scaffold1.silk"),\r
config);\r
StopWatch sw = new StopWatch();\r