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

io.katharsis.meta.internal.MetaResourceRepository Maven / Gradle / Ivy

There is a newer version: 3.0.2
Show newest version
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;
	}
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy