blob: a1b0e1dab17259361a0f7d0b598ec0f3d13f5744 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you 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.apache.zest.index.rdf;
import java.io.File;
import org.junit.Assert;
import org.junit.Test;
import org.apache.zest.api.common.Visibility;
import org.apache.zest.api.query.Query;
import org.apache.zest.api.query.QueryBuilder;
import org.apache.zest.api.query.QueryExpressions;
import org.apache.zest.api.unitofwork.UnitOfWork;
import org.apache.zest.api.value.ValueBuilder;
import org.apache.zest.bootstrap.AssemblyException;
import org.apache.zest.bootstrap.ModuleAssembly;
import org.apache.zest.index.rdf.ContainsAllTest.ExampleEntity;
import org.apache.zest.index.rdf.ContainsAllTest.ExampleValue;
import org.apache.zest.index.rdf.ContainsAllTest.ExampleValue2;
import org.apache.zest.index.rdf.assembly.RdfNativeSesameStoreAssembler;
import org.apache.zest.library.fileconfig.FileConfigurationService;
import org.apache.zest.library.rdf.repository.NativeConfiguration;
import org.apache.zest.test.AbstractQi4jTest;
import org.apache.zest.test.EntityTestAssembler;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;
import org.junit.Rule;
import org.apache.zest.test.util.DelTreeAfter;
public class ContainsTest extends AbstractQi4jTest
{
private static final File DATA_DIR = new File( "build/tmp/contains-test" );
@Rule
public final DelTreeAfter delTreeAfter = new DelTreeAfter( DATA_DIR );
@Override
public void assemble(ModuleAssembly module) throws AssemblyException
{
module.services( FileConfigurationService.class );
ModuleAssembly prefModule = module.layer().module( "PrefModule" );
prefModule.entities( NativeConfiguration.class ).visibleIn(Visibility.application);
prefModule.forMixin( NativeConfiguration.class ).declareDefaults().dataDirectory().set( DATA_DIR.getAbsolutePath() );
new EntityTestAssembler().assemble( prefModule );
module.entities( ExampleEntity.class );
module.values( ExampleValue.class, ExampleValue2.class );
EntityTestAssembler testAss = new EntityTestAssembler();
testAss.assemble(module);
RdfNativeSesameStoreAssembler rdfAssembler = new RdfNativeSesameStoreAssembler();
rdfAssembler.assemble(module);
}
@Test
public void simpleContainsSuccessTest() throws Exception
{
ExampleEntity result = this.performContainsStringTest(
new HashSet<String>(Arrays.asList(
ContainsAllTest.TEST_STRING_1, ContainsAllTest.TEST_STRING_2, ContainsAllTest.TEST_STRING_3
)),
ContainsAllTest.TEST_STRING_3
);
Assert.assertTrue("The entity must have been found", result != null);
}
@Test
public void simpleContainsSuccessFailTest() throws Exception
{
ExampleEntity result = this.performContainsStringTest(
new HashSet<String>(Arrays.asList(
ContainsAllTest.TEST_STRING_1, ContainsAllTest.TEST_STRING_2, ContainsAllTest.TEST_STRING_3
)),
ContainsAllTest.TEST_STRING_4
);
Assert.assertTrue("The entity must not have been found", result == null);
}
@Test(expected = IllegalArgumentException.class)
public void simplecontainsNullTest() throws Exception
{
this.performContainsStringTest(
new HashSet<String>(Arrays.asList(
ContainsAllTest.TEST_STRING_1, ContainsAllTest.TEST_STRING_2, ContainsAllTest.TEST_STRING_3
)),
null
);
}
@Test
public void simpleContainsStringValueSuccessTest() throws Exception
{
ExampleEntity result = this.performContainsStringValueTest(
new HashSet<String>(Arrays.asList(
ContainsAllTest.TEST_STRING_1, ContainsAllTest.TEST_STRING_2, ContainsAllTest.TEST_STRING_3
)),
ContainsAllTest.TEST_STRING_3
);
Assert.assertTrue("The entity must have been found", result != null);
}
@Test
public void simpleContainsStringValueFailTest() throws Exception
{
ExampleEntity result = this.performContainsStringTest(
new HashSet<String>(Arrays.asList(
ContainsAllTest.TEST_STRING_1, ContainsAllTest.TEST_STRING_2, ContainsAllTest.TEST_STRING_3
)),
ContainsAllTest.TEST_STRING_4
);
Assert.assertTrue("The entity must not have been found", result == null);
}
private ExampleEntity findEntity(String string)
{
QueryBuilder<ExampleEntity> builder = this.module.newQueryBuilder(ExampleEntity.class);
builder = builder.where(QueryExpressions.contains(
QueryExpressions.templateFor(ExampleEntity.class).strings(),
string
)
);
return this.module.currentUnitOfWork().newQuery( builder ).find();
}
private ExampleEntity findEntityBasedOnValueString(String valueString)
{
ValueBuilder<ExampleValue2> vBuilder = this.module.newValueBuilder(ExampleValue2.class);
vBuilder.prototype().stringProperty().set(valueString);
ValueBuilder<ExampleValue> vBuilder2 = this.module.newValueBuilder(ExampleValue.class);
vBuilder2.prototype().valueProperty().set(vBuilder.newInstance());
return this.createComplexQuery(vBuilder2.newInstance()).find();
}
private Query<ExampleEntity> createComplexQuery(ExampleValue value)
{
QueryBuilder<ExampleEntity> builder = this.module.newQueryBuilder(ExampleEntity.class);
builder = builder.where(QueryExpressions.contains(
QueryExpressions.templateFor(ExampleEntity.class).complexValue(),
value
)
);
return this.module.currentUnitOfWork().newQuery( builder);
}
private ExampleEntity performContainsStringTest(Set<String> entityStrings, String queryableString) throws Exception
{
UnitOfWork creatingUOW = this.module.newUnitOfWork();
String[] entityStringsArray = new String[entityStrings.size()];
ContainsAllTest.createEntityWithStrings(creatingUOW, this.module, entityStrings.toArray(entityStringsArray));
creatingUOW.complete();
UnitOfWork queryingUOW = this.module.newUnitOfWork();
try
{
ExampleEntity entity = this.findEntity(queryableString);
return entity;
}
finally
{
queryingUOW.discard();
}
}
private ExampleEntity performContainsStringValueTest(Set<String> entityStrings, String queryableString) throws Exception
{
UnitOfWork creatingUOW = this.module.newUnitOfWork();
String[] entityStringsArray = new String[entityStrings.size()];
ContainsAllTest.createEntityWithComplexValues(creatingUOW, this.module, entityStrings.toArray(entityStringsArray));
creatingUOW.complete();
UnitOfWork queryingUOW = this.module.newUnitOfWork();
try
{
ExampleEntity entity = this.findEntityBasedOnValueString(queryableString);
return entity;
}
finally
{
queryingUOW.discard();
}
}
}