blob: a21e33d472ccb6425ac9794e8f2725d68f2db2f6 [file] [log] [blame]
/*
* Copyright 2007-2009 Niclas Hedhman.
* Copyright 2008 Alin Dreghiciu.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
* implied.
*
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.qi4j.runtime.query;
import org.qi4j.api.query.NotQueryableException;
import org.qi4j.api.query.QueryBuilder;
import org.qi4j.api.query.QueryBuilderFactory;
import org.qi4j.api.service.NoSuchServiceException;
import org.qi4j.api.service.ServiceFinder;
import org.qi4j.api.service.ServiceReference;
import org.qi4j.api.util.NullArgumentException;
import org.qi4j.spi.query.EntityFinder;
/**
* Default implementation of {@link QueryBuilderFactory}
*/
public final class QueryBuilderFactoryImpl
implements QueryBuilderFactory
{
private ServiceFinder finder;
/**
* Constructor.
*
* @param finder The ServiceFinder of the Module this QueryBuilderFactory belongs to.
*/
public QueryBuilderFactoryImpl( ServiceFinder finder )
{
NullArgumentException.validateNotNull( "ServiceFinder", finder );
this.finder = finder;
}
/**
* @see QueryBuilderFactory#newQueryBuilder(Class)
*/
@Override
public <T> QueryBuilder<T> newQueryBuilder( final Class<T> resultType )
{
NotQueryableException.throwIfNotQueryable( resultType );
final ServiceReference<EntityFinder> serviceReference;
try
{
serviceReference = finder.findService( EntityFinder.class );
return new QueryBuilderImpl<T>( serviceReference.get(), resultType, null );
}
catch( NoSuchServiceException e )
{
return new QueryBuilderImpl<T>( null, resultType, null );
}
}
}