package com.eswaraj.domain.repo;
import java.util.Collection;
import org.springframework.data.neo4j.annotation.Query;
import org.springframework.data.neo4j.repository.GraphRepository;
import com.eswaraj.domain.nodes.DataClient;
import com.eswaraj.domain.nodes.LocationType;
/**
* Repo for location queries
* @author ravi
* @data May 30, 2014
*/
public interface LocationTypeRepository extends GraphRepository<LocationType>{
@Query("start locationType=node:LocationType(name={0}) return locationType")
public LocationType getLocationTypeByName(String name);
@Query("start locationType=node:LocationType(name={0}) match (locationType)-[:PART_OF]->(parentlocationType) return parentlocationType")
public LocationType getParentLocationType(String locationTypeName);
@Query("start locationType=node:LocationType(name={0}) match (locationType)<-[:PART_OF]-(childlocationTypes) return childlocationTypes")
public Collection<LocationType> findLocationTypeByParentLocation(String parentLocationName);
@Query("start locationType=node({0}) match (locationType)<-[:PART_OF]-(childlocationType) return childlocationType")
public Collection<LocationType> findLocationTypeByParentLocation(LocationType locationType);
@Query("start locationType=node:LocationType(name={0}) match (locationType)-[:BELONGS_TO]->(dataClient) return locationType")
public LocationType getLocationTypeByNameAndDataClientType(String name, DataClient dataClient);
@Query("start dataClient=node:DataClient(name={0}) match (dataClient)<-[:BELONGS_TO]-(locationType) where (NOT Has(locationType.parentLocationType)) or locationType.parentLocationType is null return locationType")
public LocationType getRootLocationTypeByDataClient(String dataClientName);
@Query("start dataClient=node({0}) match (dataClient)<-[:BELONGS_TO]-(locationType) return locationType")
public Collection<LocationType> getAllLocationTypeOfDataClient(Long dataClientId);
}