io.katharsis.meta.internal.MetaResourceRepository Maven / Gradle / Ivy
package io.katharsis.meta.internal;
import java.util.ArrayList;
import java.util.Collection;
import io.katharsis.errorhandling.exception.ResourceNotFoundException;
import io.katharsis.meta.MetaLookup;
import io.katharsis.meta.model.MetaElement;
import io.katharsis.queryspec.QuerySpec;
import io.katharsis.repository.ResourceRepositoryBase;
import io.katharsis.resource.list.ResourceList;
public class MetaResourceRepository extends ResourceRepositoryBase {
private MetaLookup lookup;
public MetaResourceRepository(MetaLookup lookup, Class resourceClass) {
super(resourceClass);
this.lookup = lookup;
}
@SuppressWarnings("unchecked")
public T findOne(String id, QuerySpec querySpec) {
MetaElement metaElement = lookup.getMetaById().get(id);
Class resourceClass = this.getResourceClass();
if (metaElement != null && resourceClass.isInstance(metaElement)) {
return (T) metaElement;
}
throw new ResourceNotFoundException(id);
}
@Override
public ResourceList findAll(QuerySpec querySpec) {
Collection values = filterByType(lookup.getMetaById().values());
return querySpec.apply(values);
}
@SuppressWarnings("unchecked")
private Collection filterByType(Collection values) {
Collection results = new ArrayList<>();
Class resourceClass = this.getResourceClass();
for (MetaElement element : values) {
if (resourceClass.isInstance(element)) {
results.add((T) element);
}
}
return results;
}
}