/*
* Copyright 2013 JBoss Inc
*
* 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.drools.semantics.lang.dl;
import org.drools.io.Resource;
import org.drools.io.ResourceFactory;
import org.drools.semantics.builder.DLFactoryConfiguration;
import org.drools.semantics.builder.DLFactoryImpl;
import org.drools.semantics.builder.model.Concept;
import org.drools.semantics.builder.model.OntoModel;
import org.drools.semantics.builder.model.PropertyRelation;
import org.drools.semantics.util.area.Area;
import org.drools.semantics.util.area.AreaNode;
import org.drools.semantics.util.area.AreaTxn;
import org.drools.semantics.builder.model.ConceptAreaTxn;
import org.drools.util.HierarchyEncoderImpl;
import org.junit.Test;
import java.util.Arrays;
import java.util.BitSet;
import java.util.Collections;
import java.util.HashSet;
import java.util.Set;
import static junit.framework.Assert.assertEquals;
import static junit.framework.Assert.assertFalse;
import static junit.framework.Assert.assertNotNull;
import static junit.framework.Assert.assertTrue;
import static junit.framework.Assert.fail;
public class DL_4_AreaTest {
@Test
public void testArea1() {
try {
Resource res = ResourceFactory.newClassPathResource( "ontologies/specimen.owl" );
OntoModel model = DLFactoryImpl.getInstance().buildModel( "partest", res, DLFactoryConfiguration.newConfiguration( OntoModel.Mode.NONE ) );
PropertyRelation drug = model.getProperty( "<http://org.drools/test#drugRel>" );
PropertyRelation fluid = model.getProperty( "<http://org.drools/test#fluidRel>" );
PropertyRelation bsub = model.getProperty( "<http://org.drools/test#bodySubRel>" );
assertNotNull( drug );
assertNotNull( fluid );
assertNotNull( bsub );
Set<PropertyRelation> s0 = Collections.EMPTY_SET;
Set<PropertyRelation> s1 = new HashSet( Arrays.asList( drug ) );
Set<PropertyRelation> s2 = new HashSet( Arrays.asList( fluid ) );
Set<PropertyRelation> s3 = new HashSet( Arrays.asList( bsub ) );
Set<PropertyRelation> s4 = new HashSet( Arrays.asList( drug, fluid ) );
Set<PropertyRelation> s5 = new HashSet( Arrays.asList( fluid, bsub ) );
Set<PropertyRelation> s6 = new HashSet( Arrays.asList( bsub, drug ) );
Set<PropertyRelation> s7 = new HashSet( Arrays.asList( fluid, bsub, drug ) );
Concept c00 = model.getConcept( "<http://org.drools/test#specimen>" );
Concept c01 = model.getConcept( "<http://org.drools/test#fluid_sample>" );
Concept c02 = model.getConcept( "<http://org.drools/test#drug_specimen>" );
Concept c03 = model.getConcept( "<http://org.drools/test#acellular_bl_specimen>" );
Concept c04 = model.getConcept( "<http://org.drools/test#body_subs_sample>" );
Concept c05 = model.getConcept( "<http://org.drools/test#body_fluid_sample>" );
Concept c06 = model.getConcept( "<http://org.drools/test#blood_specimen>" );
Concept c07 = model.getConcept( "<http://org.drools/test#venous_bl_specimen>" );
Concept c08 = model.getConcept( "<http://org.drools/test#mixed_venous_bl_spec>" );
Concept c09 = model.getConcept( "<http://org.drools/test#serum_specimen>" );
Concept c10 = model.getConcept( "<http://org.drools/test#acidified_ser_sample>" );
Concept c11 = model.getConcept( "<http://org.drools/test#serum_spec_from_bl_prod>" );
Concept c12 = model.getConcept( "<http://org.drools/test#amniotic_fluid_spec>" );
Concept c13 = model.getConcept( "<http://org.drools/test#stool_specimen>" );
Concept c14 = model.getConcept( "<http://org.drools/test#fecal_fluid_sample>" );
AreaTxn<Concept,PropertyRelation> areaTxn = model.getAreaTaxonomy();
System.out.println( areaTxn );
// Area 0
Area<Concept,PropertyRelation> n0 = areaTxn.getArea( s0 );
assertEquals( 3, n0.getElements().size());
assertTrue( n0.getElements().contains( c00 ) );
// Area 1
Area<Concept,PropertyRelation> n1 = areaTxn.getArea( s1 );
assertEquals( 1, n1.getElements().size() );
assertTrue( n1.getElements().contains( c02 ) );
// Area 2
Area<Concept,PropertyRelation> n2 = areaTxn.getArea( s2 );
assertEquals( 1, n2.getElements().size() );
assertTrue( n2.getElements().contains( c01 ) );
// Area 3
Area<Concept,PropertyRelation> n3 = areaTxn.getArea( s3 );
assertEquals( 2, n3.getElements().size() );
assertTrue( n3.getElements().contains( c04 ) );
assertTrue( n3.getElements().contains( c13 ) );
// Area 4
Area<Concept,PropertyRelation> n4 = areaTxn.getArea( s4 );
assertEquals( 1, n4.getElements().size() );
assertTrue( n4.getElements().contains( c03 ) );
// Area 5
Area<Concept,PropertyRelation> n5 = areaTxn.getArea( s5 );
assertEquals( 3, n5.getElements().size() );
assertTrue( n5.getElements().contains( c05 ) );
assertTrue( n5.getElements().contains( c14 ) );
assertTrue( n5.getElements().contains( c12 ) );
// Area 6
assertFalse( areaTxn.hasArea( s6 ) );
// Area 7
Area<Concept,PropertyRelation> n7 = areaTxn.getArea( s7 );
assertEquals( 6, n7.getElements().size() );
assertTrue( n7.getElements().contains( c06 ) );
assertTrue( n7.getElements().contains( c07 ) );
assertTrue( n7.getElements().contains( c08 ) );
assertTrue( n7.getElements().contains( c09 ) );
assertTrue( n7.getElements().contains( c10 ) );
assertTrue( n7.getElements().contains( c11 ) );
// Now check roots
assertEquals( n1.getRoots(), new HashSet<Concept>( Arrays.asList( c02 ) ) );
assertEquals( n2.getRoots(), new HashSet<Concept>( Arrays.asList( c01 ) ) );
assertEquals( n3.getRoots(), new HashSet<Concept>( Arrays.asList( c04 ) ) );
assertEquals( n4.getRoots(), new HashSet<Concept>( Arrays.asList( c03 ) ) );
assertEquals( n5.getRoots(), new HashSet<Concept>( Arrays.asList( c05, c14 ) ) );
assertEquals( n7.getRoots(), new HashSet<Concept>( Arrays.asList( c06, c09 ) ) );
BitSet n5root = (BitSet) c05.getTypeCode().clone();
n5root.and( c14.getTypeCode() );
BitSet n7root = (BitSet) c06.getTypeCode().clone();
n7root.and( c09.getTypeCode() );
assertEquals( n1.getElementRootCode(), c02.getTypeCode() );
assertEquals( n2.getElementRootCode(), c01.getTypeCode() );
assertEquals( n3.getElementRootCode(), c04.getTypeCode() );
assertEquals( n4.getElementRootCode(), c03.getTypeCode() );
assertEquals( n5.getElementRootCode(), n5root );
assertEquals( n7.getElementRootCode(), n7root );
// Now check hierarchy
assertTrue( HierarchyEncoderImpl.supersetOrEqualset( n1.getAreaCode(), n0.getAreaCode() ) );
assertTrue( HierarchyEncoderImpl.supersetOrEqualset( n2.getAreaCode(), n0.getAreaCode() ) );
assertTrue( HierarchyEncoderImpl.supersetOrEqualset( n3.getAreaCode(), n0.getAreaCode() ) );
assertTrue( HierarchyEncoderImpl.supersetOrEqualset( n4.getAreaCode(), n1.getAreaCode() ) );
assertTrue( HierarchyEncoderImpl.supersetOrEqualset( n4.getAreaCode(), n2.getAreaCode() ) );
assertTrue( HierarchyEncoderImpl.supersetOrEqualset( n5.getAreaCode(), n2.getAreaCode() ) );
assertTrue( HierarchyEncoderImpl.supersetOrEqualset( n5.getAreaCode(), n3.getAreaCode() ) );
assertTrue( HierarchyEncoderImpl.supersetOrEqualset( n7.getAreaCode(), n4.getAreaCode() ) );
assertTrue( HierarchyEncoderImpl.supersetOrEqualset( n7.getAreaCode(), n5.getAreaCode() ) );
assertTrue( HierarchyEncoderImpl.supersetOrEqualset( n7.getAreaCode(), n0.getAreaCode() ) );
//
//
// PartialAreaTxnImpl parea = new PartialAreaTxnImpl( area.getAreas(), area.getEncoderArea() );
// Set<Concept> olpc = parea.getOverlappingCodes();
//
// List<String> olp = Arrays.asList(
// "FecalFluidSample",
// "BodyFluidSample",
// "BloodSpecimen",
// "AcellularBlSpecimen",
// "SerumSpecimen",
// "SerumSpecFromBlProd" );
// Assert.assertTrue( olp.size() == olpc.size() );
// for( Concept cct: olpc ) {
// Assert.assertTrue( olp.contains( cct.getName() ) );
// }
} catch ( Exception e ) {
e.printStackTrace();
fail( e.getMessage() );
}
}
@Test
public void testArea2() {
try {
Resource res = ResourceFactory.newClassPathResource( "ontologies/hardware.owl" );
OntoModel model = DLFactoryImpl.getInstance().buildModel( "hw", res, DLFactoryConfiguration.newConfiguration( OntoModel.Mode.FLAT ) );
AreaTxn<Concept,PropertyRelation> areaTxn = model.getAreaTaxonomy();
System.out.println( areaTxn.getAreaKeys() );
} catch ( Exception e ) {
e.printStackTrace();
fail( e.getMessage() );
}
}
}