/*******************************************************************************
* Copyright 2014 Miami-Dade County
*
* 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.sharegov.cirm.reasoner;
import static org.sharegov.cirm.reasoner.OWLHelp.*;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Set;
import org.semanticweb.owlapi.model.OWLClass;
import org.semanticweb.owlapi.model.OWLClassExpression;
import org.semanticweb.owlapi.model.OWLIndividual;
import org.semanticweb.owlapi.model.OWLNamedIndividual;
import org.semanticweb.owlapi.model.OWLProperty;
import org.semanticweb.owlapi.reasoner.NodeSet;
import org.semanticweb.owlapi.reasoner.OWLReasoner;
public class ReasonerBench
{
private Map<OWLClass, OWLNamedIndividual> getTableMappings()
{
Map<OWLClass, OWLNamedIndividual> mapping = new LinkedHashMap<OWLClass, OWLNamedIndividual>();
OWLClassExpression q = and(owlClass(fulliri("OWLClass")),
some(objectProperty(fulliri("hasTableMapping")),
owlClass(fulliri("DBTable"))));
Set<OWLNamedIndividual> S = reasoner.getInstances(q, false).getFlattened();
int x = S.size();
for (OWLNamedIndividual i : S)
{
OWLClass mappedClass = owlClass(i.getIRI());
OWLNamedIndividual table = objectProperty(i, fulliri("hasTableMapping"));
mapping.put(mappedClass, table);
for(OWLClass sub : reasoner.getSubClasses(mappedClass, false).getFlattened())
{
if(!sub.isOWLNothing() && objectProperty(individual(sub.getIRI()),fulliri("hasTableMapping")) == null)
{
mapping.put(sub, table);
}
}
}
return mapping;
}
private void getColumMappings()
{
Map<OWLClass, OWLNamedIndividual> tableMapping = getTableMappings();
Map<OWLNamedIndividual, Map<OWLProperty<?, ?>, OWLNamedIndividual>> mapping = new LinkedHashMap<OWLNamedIndividual, Map<OWLProperty<?, ?>, OWLNamedIndividual>>();
OWLClassExpression q = and(owlClass(fulliri("OWLProperty")),
some(objectProperty(fulliri("hasColumnMapping")),
and(
or(owlClass(fulliri("DBPrimaryKey")), owlClass(fulliri("DBNoKey"))),
some(objectProperty(fulliri("hasTable")),
oneOf(tableMapping.values().toArray(new OWLIndividual[tableMapping.values().size()]))))));
long start = System.currentTimeMillis();
NodeSet<OWLNamedIndividual> S = reasoner.getInstances(q, false);
System.out.println("Time " + (System.currentTimeMillis() - start) + " on " + q);
System.out.println(S.getFlattened());
}
public static void main(String [] argv)
{
try
{
OWLHelp.init();
ReasonerBench b = new ReasonerBench();
System.out.println(b.getTableMappings());
b.getColumMappings();
}
catch (Throwable t)
{
t.printStackTrace();
}
}
}