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

org.eroq.plugin.neo4jclient.Neo4jClient Maven / Gradle / Ivy

package org.eroq.plugin.neo4jclient;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public abstract class Neo4jClient {
	
	/**
	 * Queries the Neo4j database and returns data as a table
	 * @param query Query to be executed (can have {parameters})
	 * @param params Query parameters definition
	 * @return A Result object containing both columns definition
	 * and values as a list of rows where each row is a mapping 
	 * of column values for column names on that row
	 */
	public abstract Neo4jResult query(String query, Map params);
	
	private Map emptyParams = new HashMap<>();
	
	public Neo4jResult query(String query) {
		return query(query, emptyParams);
	}
	
	public Object queryOneScalar(String query, Map params) {
		Neo4jResult result = query(query, params);
		String firstColumn = result.getColumns().get(0);
		if(result.getData().size()==0) {
			return null;
		}
		Map firstRow = result.getData().get(0).getRow();
		return firstRow.get(firstColumn);
	}
	
	public Object queryOneScalar(String query) {
		return queryOneScalar(query, emptyParams);
	}
	
	@SuppressWarnings("unchecked")
	public Map queryOneMap(String query, Map params) {
		return (Map)queryOneScalar(query, params);
	}
	
	public Map queryOneMap(String query) {
		return queryOneMap(query, emptyParams);
	}
	
	public List queryManyScalars(String query, Map params) {
		Neo4jResult result = query(query, params);
		String firstColumn = result.getColumns().get(0);
		List entries = result.getData();
		List objects = new ArrayList<>();
		for(Neo4jEntry entry: entries) {
			Map row = entry.getRow();
			objects.add(row.get(firstColumn));
		}
		return objects;
	}
	
	public List queryManyScalars(String query) {
		return queryManyScalars(query, emptyParams);
	}

	public List> queryManyMaps(String query, Map params) {
		List result = queryManyScalars(query, params);
		List> convertedResult = new ArrayList<>();
		for(Object object: result) {
			@SuppressWarnings("unchecked")
			Map convertedObject = (Map)object;
			convertedResult.add(convertedObject);
		}
		return convertedResult;
	}
	
	public List> queryManyMaps(String query) {
		return queryManyMaps(query, emptyParams);
	}

	public Neo4jNode queryOneNode(String query, Map params) {
		Neo4jResult result = query(query, params);
		List entries = result.getData();
		if(entries.size()==0) {
			return null;
		}
		List nodes = entries.get(0).getGraphNodes();
		if(nodes.size()==0) {
			throw new RuntimeException("No nodes were found in the returned result");
		}
		return nodes.get(0);
	}
	
	public Neo4jNode queryOneNode(String query) {
		return queryOneNode(query, emptyParams);
	}

	public List queryManyNodes(String query, Map params) {
		Neo4jResult result = query(query, params);
		List entries = result.getData();
		List manyNodes = new ArrayList<>();
		for(Neo4jEntry entry: entries) {
			List nodes = entry.getGraphNodes();
			if(nodes.size()==0) {
				throw new RuntimeException("No nodes were found in the returned result");
			}
			manyNodes.add(nodes.get(0));
		}
		return manyNodes;
	}
	
	public List queryManyNodes(String query) {
		return queryManyNodes(query, emptyParams);
	}

	public Neo4jRelationship queryOneRelationship(String query, Map params) {
		Neo4jResult result = query(query, params);
		List entries = result.getData();
		if(entries.size()==0) {
			return null;
		}
		List relationships = entries.get(0).getGraphRelationships();
		if(relationships.size()==0) {
			throw new RuntimeException("No relationships were found in the returned result");
		}
		return relationships.get(0);
	}
	
	public Neo4jRelationship queryOneRelationship(String query) {
		return queryOneRelationship(query, emptyParams);
	}

	public List queryManyRelationships(String query, Map params) {
		Neo4jResult result = query(query, params);
		List entries = result.getData();
		List manyRelationships = new ArrayList<>();
		for(Neo4jEntry entry: entries) {
			List relationships = entry.getGraphRelationships();
			if(relationships.size()==0) {
				throw new RuntimeException("No relationships were found in the returned result");
			}
			manyRelationships.add(relationships.get(0));
		}
		return manyRelationships;
	}
	
	public List queryManyRelationships(String query) {
		return queryManyRelationships(query, emptyParams);
	}

}