All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.unlaxer.jaddress.gremlin.GremlinIndexer Maven / Gradle / Ivy

package org.unlaxer.jaddress.gremlin;

import java.util.Arrays;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

import org.apache.tinkerpop.gremlin.driver.remote.DriverRemoteConnection;
import org.apache.tinkerpop.gremlin.process.traversal.AnonymousTraversalSource;
import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal;
import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource;
import org.apache.tinkerpop.gremlin.structure.Graph.Features;
import org.apache.tinkerpop.gremlin.structure.Graph.Features.VertexPropertyFeatures;
import org.apache.tinkerpop.gremlin.structure.Vertex;
import org.unlaxer.jaddress.entity.standard.郵便番号;
import org.unlaxer.jaddress.entity.standard.階層要素;
import org.unlaxer.jaddress.parser.AddressElement;
import org.unlaxer.jaddress.parser.AddressParser;
import org.unlaxer.jaddress.parser.AddressParserImpl;
import org.unlaxer.jaddress.parser.BlockHierarchyResolver.BlockPatternResolverResult;
import org.unlaxer.jaddress.parser.BuildingHierarchyResolver.BuildingHierarchyResolverResult;
import org.unlaxer.jaddress.parser.BuildingHierarchyResolver2.BuildingHierarchyResolverResult2;
import org.unlaxer.jaddress.parser.DataAccessContext;
import org.unlaxer.jaddress.parser.DataAccessContextImpl;

public class GremlinIndexer {

	public static void main(String[] args) throws Exception {
//		load();
		test();
	}
	
	private static void test() {
		try (DriverRemoteConnection conn = DriverRemoteConnection.using("localhost", 8182, "g");
				GraphTraversalSource g = AnonymousTraversalSource.traversal().withRemote(conn);) {

			GremlinUtil gremlinUtil = new GremlinUtil(g);
			
//			propertyArrayTest(g);

//			searchBuildings(gremlinUtil);
			searchBuildings2(gremlinUtil);
//			searchBlockPattern(gremlinUtil);
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			System.exit(0);
		}
	}
	
	private static void load() {
		
		DataAccessContext dataAccessContext = new DataAccessContextImpl();
		AddressParser addressParser = new AddressParserImpl();
		try (DriverRemoteConnection conn = DriverRemoteConnection.using("localhost", 8182, "g");
				GraphTraversalSource g = AnonymousTraversalSource.traversal().withRemote(conn);) {

			GremlinUtil gremlinUtil = new GremlinUtil(g);
			gremlinUtil.truncate();
			
			DataLoader2 dataLoader2 = new DataLoader2();
			dataLoader2.load(g , dataAccessContext , addressParser);

		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			System.exit(0);
		}
	}
	
	private static void propertyArrayTest(GraphTraversalSource g) {
		Features features =g.getGraph().features();
		VertexPropertyFeatures f = features.vertex().properties(); 
		System.out.println(f.supportsIntegerArrayValues());

		addTest(g, "a1", 1);
		addTest(g, "a1", 2);
		addTest(g, "a2", 3);
		
		g.V().propertyMap().toStream().forEach(c -> {
			c.entrySet().stream().forEach(e -> {
				System.out.println(e.getKey() + ":" + e.getValue());
			});
		});
	}

	private static void addTest(GraphTraversalSource g, String label, Integer value) {
		GraphTraversal g0 = g.V().hasLabel(label)//
				.has("element", "a")//
//				.has("value", value)//
		;

		Vertex v1;
		if (g0.hasNext()) {
			Object val = g.V(1).values("value").toList();
			System.out.println(val);

			v1 = g0.next();

			List list = g.V(v1.id()).values("value").toList();
			System.out.println(list);
			if(!list.contains(value)) {
				list.add(value);
				g.V(v1.id()).property("value", list);
			}

//			System.out.println(v1.id());
			
//			Object val0 = g.V(1).label().toList();
//			System.out.println(val0);
//
//			Object val = g.V(1).values("value").toList();
//			System.out.println(val);
			
		} else {
			g0.iterate();
			v1 = g.addV(label)//
					.property("element", "a")//
					.property("value", Arrays.asList(value))//
					.next();
		}

	}

	private static void searchBlockPattern(GremlinUtil gremlinUtil) {
		郵便番号 zip;
		AddressElement town;
		zip = new 郵便番号("542-0082");
		town = gremlinUtil.createAddressElement("島之内", 階層要素.町村);
		BlockPatternResolverResult ret = gremlinUtil.searchBlockPattern(zip, town);

		ret.characterKindsBy階層要素().forEach((a, b) -> {
			System.out.println(a.name() + "-" + b.toString());
		});
	}

	private static void searchBuildings2(GremlinUtil gremlinUtil) {
		郵便番号 zip;
		Map<階層要素, AddressElement> addressMap = new LinkedHashMap<>();
		zip = new 郵便番号("542-0082");
		addressMap.put(階層要素.都道府県, gremlinUtil.createAddressElement("大阪府", 階層要素.都道府県));
		addressMap.put(階層要素.市, gremlinUtil.createAddressElement("大阪市中央区", 階層要素.市));
		addressMap.put(階層要素.町村, gremlinUtil.createAddressElement("島之内", 階層要素.町村));
		addressMap.put(階層要素.丁目, gremlinUtil.createAddressElement("15", 階層要素.丁目));

		BuildingHierarchyResolverResult2 ret = gremlinUtil.searchBuildings2(zip, addressMap);
		ret.buildingNames.forEach(e -> System.out.println(e));
		ret.characterKindsBy階層要素.forEach((e, v) -> System.out.println(e + ":" + v.toString()));
	}

	private static void searchBuildings(GremlinUtil gremlinUtil) {
		郵便番号 zip;
		Map<階層要素, AddressElement> addressMap = new LinkedHashMap<>();
		zip = new 郵便番号("542-0082");
		addressMap.put(階層要素.都道府県, gremlinUtil.createAddressElement("大阪府", 階層要素.都道府県));
		addressMap.put(階層要素.市, gremlinUtil.createAddressElement("大阪市中央区", 階層要素.市));
		addressMap.put(階層要素.町村, gremlinUtil.createAddressElement("島之内", 階層要素.町村));
		addressMap.put(階層要素.丁目, gremlinUtil.createAddressElement("15", 階層要素.丁目));

		BuildingHierarchyResolverResult ret = gremlinUtil.searchBuildings(zip, addressMap);
		System.out.format("%s: [%s]\n", ret._建物階層.name(), ret.buildingNames.stream().collect(Collectors.joining(",")));

	}

}