blob: 94814d7bf6571c899f0266db4de3da22b768bf65 [file] [log] [blame]
/*
* Copyright 2009 Niclas Hedhman.
*
* 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.index.rdf.qi173;
import org.junit.Assert;
import org.junit.Test;
import org.qi4j.api.entity.EntityBuilder;
import org.qi4j.api.entity.EntityComposite;
import org.qi4j.api.property.Property;
import org.qi4j.api.query.Query;
import org.qi4j.api.query.QueryBuilder;
import org.qi4j.api.query.QueryExpressions;
import org.qi4j.api.unitofwork.ConcurrentEntityModificationException;
import org.qi4j.api.unitofwork.UnitOfWork;
import org.qi4j.api.unitofwork.UnitOfWorkCompletionException;
import org.qi4j.bootstrap.AssemblyException;
import org.qi4j.bootstrap.ModuleAssembly;
import org.qi4j.index.rdf.assembly.RdfMemoryStoreAssembler;
import org.qi4j.test.AbstractQi4jTest;
import org.qi4j.test.EntityTestAssembler;
import java.util.Iterator;
import static org.qi4j.api.query.QueryExpressions.orderBy;
public class Qi173IssueTest
extends AbstractQi4jTest
{
public void assemble( ModuleAssembly module )
throws AssemblyException
{
module.entities( CarEntity.class );
new RdfMemoryStoreAssembler().assemble( module );
new EntityTestAssembler().assemble( module );
}
@Test
public void testPersistence()
{
UnitOfWork uow = module.newUnitOfWork();
try
{
createCar( "Volvo", "S80", 2007 );
createCar( "Volvo", "C70", 2006 );
createCar( "Ford", "Transit", 2007 );
createCar( "Ford", "Mustang", 2007 );
createCar( "Ford", "Mustang", 2006 );
createCar( "Ford", "Mustang", 2005 );
uow.complete();
}
catch( ConcurrentEntityModificationException e )
{
// Can not happen.
e.printStackTrace();
}
catch( UnitOfWorkCompletionException e )
{
e.printStackTrace();
}
uow = module.newUnitOfWork();
QueryBuilder<Car> qb = module.newQueryBuilder( Car.class );
Car template = QueryExpressions.templateFor( Car.class );
qb = qb.where( QueryExpressions.eq( template.year(), 2007 ) );
Query<Car> query = uow.newQuery( qb );
query.orderBy( orderBy( template.manufacturer() ), orderBy( template.model() ) );
Iterator<Car> cars = query.iterator();
Assert.assertTrue( cars.hasNext() );
Car car1 = cars.next();
Assert.assertEquals( car1.manufacturer().get(), "Ford" );
Assert.assertEquals( car1.model().get(), "Mustang" );
Assert.assertEquals( (int) car1.year().get(), 2007 );
Car car2 = cars.next();
Assert.assertEquals( car2.manufacturer().get(), "Ford" );
Assert.assertEquals( car2.model().get(), "Transit" );
Assert.assertEquals( (int) car2.year().get(), 2007 );
Car car3 = cars.next();
Assert.assertEquals( car3.manufacturer().get(), "Volvo" );
Assert.assertEquals( car3.model().get(), "S80" );
Assert.assertEquals( (int) car3.year().get(), 2007 );
for( Car car : query )
{
System.out.println( car.manufacturer().get() + " " + car.model().get() + ", " + car.year().get() );
}
uow.discard();
}
private String createCar( String manufacturer, String model, int year )
{
UnitOfWork uow = module.currentUnitOfWork();
EntityBuilder<Car> builder = uow.newEntityBuilder( Car.class );
Car prototype = builder.instanceFor( Car.class );
prototype.manufacturer().set( manufacturer );
prototype.model().set( model );
prototype.year().set( year );
CarEntity entity = (CarEntity) builder.newInstance();
return entity.identity().get();
}
public interface CarEntity
extends Car, EntityComposite
{
}
public static interface Car
{
Property<String> manufacturer();
Property<String> model();
Property<Integer> year();
}
}