/** * Converts the {@link Query applib representation of a query} into the * {@link PersistenceQuery NOF-internal representation}. */ private final PersistenceQuery createPersistenceQueryFor( final Query<?> query, final QueryCardinality cardinality) { final PersistenceQuery persistenceQuery = persistenceQueryFactory.createPersistenceQueryFor(query, cardinality); if (persistenceQuery == null) { throw new IllegalArgumentException("Unknown Query type: " + query.getDescription()); } return persistenceQuery; }
@Override public <T> ObjectAdapter findInstances(final Query<T> query, final QueryCardinality cardinality) { final PersistenceQuery persistenceQuery = createPersistenceQueryFor(query, cardinality); if (persistenceQuery == null) { throw new IllegalArgumentException("Unknown query type: " + query.getDescription()); } return findInstances(persistenceQuery); }
@Override public ObjectAdapter findInstances(final Query query, final QueryCardinality cardinality) throws UnsupportedFindException { log("find instances matching " + query.getDescription()); return underlying.findInstances(query, cardinality); }
@Override public <T> T uniqueMatch(final Query<T> query) { final List<T> instances = allMatches(query); if (instances.size() > 1) { throw new RepositoryException("Found more that one instance for query:" + query.getDescription()); } return firstInstanceElseNull(instances); }
@Override public String toString() { final ToString str = ToString.createAnonymous(this); str.append("spec", getSpecification().getShortIdentifier()); str.append("query", query.getDescription()); return str.toString(); } }
@Override public String toString() { final ToString str = ToString.createAnonymous(this); str.append("spec", getSpecification().getShortIdentifier()); str.append("query", query.getDescription()); return str.toString(); } }
/** * Converts the {@link Query applib representation of a query} into the * {@link PersistenceQuery NOF-internal representation}. */ protected final PersistenceQuery createPersistenceQueryFor(final Query<?> query, final QueryCardinality cardinality) { LOG.debug("createPersistenceQueryFor: " + query.getDescription()); final ObjectSpecification noSpec = specFor(query); if (query instanceof QueryFindAllInstances) { return new PersistenceQueryFindAllInstances(noSpec); } if (query instanceof QueryFindByTitle) { final QueryFindByTitle<?> queryByTitle = (QueryFindByTitle<?>) query; final String title = queryByTitle.getTitle(); return new PersistenceQueryFindByTitle(noSpec, title); } if (query instanceof QueryFindByPattern) { final QueryFindByPattern<?> queryByPattern = (QueryFindByPattern<?>) query; final Object pattern = queryByPattern.getPattern(); final ObjectAdapter patternAdapter = getAdapterManager().adapterFor(pattern); return new PersistenceQueryFindByPattern(noSpec, patternAdapter); } if (query instanceof QueryDefault) { final QueryDefault<?> queryDefault = (QueryDefault<?>) query; final String queryName = queryDefault.getQueryName(); final Map<String, ObjectAdapter> argumentsAdaptersByParameterName = wrap(queryDefault.getArgumentsByParameterName()); return new PersistenceQueryFindUsingApplibQueryDefault(noSpec, queryName, argumentsAdaptersByParameterName, cardinality); } // fallback; generic serializable applib query. return new PersistenceQueryFindUsingApplibQuerySerializable(noSpec, query, cardinality); }
LOG.debug("createPersistenceQueryFor: {}", query.getDescription());