VersionableEntityDAO.java

package de.dlr.shepard.neo4Core.dao;

import java.util.HashMap;
import java.util.Map;

import org.neo4j.ogm.session.Session;

import de.dlr.shepard.neo4j.NeoConnector;
import de.dlr.shepard.util.CypherQueryHelper;

public abstract class VersionableEntityDAO<T> extends GenericDAO<T> {

	protected Session session = null;

	protected VersionableEntityDAO() {
		session = NeoConnector.getInstance().getNeo4jSession();
	}

	public T findByShepardId(Long shepardId) {
		return findByShepardId(shepardId, false);
	}

	public T findLightByShepardId(Long shepardId) {
		return findByShepardId(shepardId, true);
	}

	private T findByShepardId(Long shepardId, boolean light) {
		Map<String, Object> paramsMap = new HashMap<>();
		var returnPart = light ? CypherQueryHelper.getReturnPartLight("o") : CypherQueryHelper.getReturnPart("o");
		String query = String.format("MATCH (o {deleted: FALSE}) WHERE %s WITH o ",
				CypherQueryHelper.getShepardIdPart("o", shepardId));
		query += returnPart;
		Iterable<T> result = findByQuery(query, paramsMap);
		if (!result.iterator().hasNext())
			return null;
		return result.iterator().next();
	}

	@Override
	public abstract Class<T> getEntityType();
}