All Downloads are FREE. Search and download functionalities are using the official Maven repository.

uk.ac.manchester.cs.owl.owlapi.OWLObjectImpl Maven / Gradle / Ivy

/*
 * This file is part of the OWL API.
 *
 * The contents of this file are subject to the LGPL License, Version 3.0.
 *
 * Copyright (C) 2011, The University of Manchester
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see http://www.gnu.org/licenses/.
 *
 *
 * Alternatively, the contents of this file may be used under the terms of the Apache License, Version 2.0
 * in which case, the provisions of the Apache License Version 2.0 are applicable instead of those above.
 *
 * Copyright 2011, University of Manchester
 *
 * 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 uk.ac.manchester.cs.owl.owlapi;

import java.io.Serializable;
import java.lang.ref.WeakReference;
import java.util.Collections;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
import java.util.SortedSet;
import java.util.TreeSet;

import org.semanticweb.owlapi.io.ToStringRenderer;
import org.semanticweb.owlapi.model.EntityType;
import org.semanticweb.owlapi.model.IRI;
import org.semanticweb.owlapi.model.OWLAnnotation;
import org.semanticweb.owlapi.model.OWLAnonymousIndividual;
import org.semanticweb.owlapi.model.OWLClass;
import org.semanticweb.owlapi.model.OWLClassExpression;
import org.semanticweb.owlapi.model.OWLDataFactory;
import org.semanticweb.owlapi.model.OWLDataProperty;
import org.semanticweb.owlapi.model.OWLDatatype;
import org.semanticweb.owlapi.model.OWLEntity;
import org.semanticweb.owlapi.model.OWLNamedIndividual;
import org.semanticweb.owlapi.model.OWLObject;
import org.semanticweb.owlapi.model.OWLObjectProperty;
import org.semanticweb.owlapi.util.CollectionFactory;
import org.semanticweb.owlapi.util.HashCode;
import org.semanticweb.owlapi.util.OWLClassExpressionCollector;
import org.semanticweb.owlapi.util.OWLObjectTypeIndexProvider;
import org.semanticweb.owlapi.vocab.OWLRDFVocabulary;

/** Author: Matthew Horridge
* The University Of Manchester
* Bio-Health Informatics Group
* Date: 25-Oct-2006
*
*/ public abstract class OWLObjectImpl implements OWLObject, Serializable { private static final long serialVersionUID = 30406L; /** a convenience reference for an empty annotation set, saves on typing */ protected static final Set NO_ANNOTATIONS = Collections . emptySet(); private int hashCode = 0; private transient WeakReference> signature = null; private transient WeakReference> anons; /** */ public OWLObjectImpl() {} // XXX there should be no datafactory here at all @Deprecated private static OWLDataFactory f = new OWLDataFactoryImpl(false, false); protected static final OWLClass OWL_THING = new OWLClassImpl( OWLRDFVocabulary.OWL_THING.getIRI()); // /** @return this object's data factory */ // @Deprecated // public static OWLDataFactory getOWLDataFactory() { // return f; // } // @SuppressWarnings("javadoc") // @Deprecated // public static void setOWLDataFactory(OWLDataFactory factory) { // f = factory; // } static E getOWLEntity(EntityType entityType, IRI iri) { if (entityType.equals(EntityType.CLASS)) { return (E) new OWLClassImpl(iri); } else if (entityType.equals(EntityType.OBJECT_PROPERTY)) { return (E) new OWLObjectPropertyImpl(iri); } else if (entityType.equals(EntityType.DATA_PROPERTY)) { return (E) new OWLDataPropertyImpl(iri); } else if (entityType.equals(EntityType.ANNOTATION_PROPERTY)) { return (E) new OWLAnnotationPropertyImpl(iri); } else if (entityType.equals(EntityType.NAMED_INDIVIDUAL)) { return (E) new OWLNamedIndividualImpl(iri); } else if (entityType.equals(EntityType.DATATYPE)) { return (E) new OWLDatatypeImpl(iri); } return null; } @Override public Set getSignature() { Set set = null; if (signature != null) { set = signature.get(); } if (set == null) { set = new HashSet(); Set anon = new HashSet(); OWLEntityCollectionContainerCollector collector = new OWLEntityCollectionContainerCollector( set, anon); accept(collector); signature = new WeakReference>(set); anons = new WeakReference>(anon); } return CollectionFactory.getCopyOnRequestSetFromImmutableCollection(set); } @Override public Set getAnonymousIndividuals() { if (signature == null || signature.get() == null) { getSignature(); } return CollectionFactory.getCopyOnRequestSetFromImmutableCollection(anons.get()); } @Override public Set getClassesInSignature() { Set result = new HashSet(); for (OWLEntity ent : getSignature()) { if (ent.isOWLClass()) { result.add(ent.asOWLClass()); } } return result; } @Override public Set getDataPropertiesInSignature() { Set result = new HashSet(); for (OWLEntity ent : getSignature()) { if (ent.isOWLDataProperty()) { result.add(ent.asOWLDataProperty()); } } return result; } @Override public Set getObjectPropertiesInSignature() { Set result = new HashSet(); for (OWLEntity ent : getSignature()) { if (ent.isOWLObjectProperty()) { result.add(ent.asOWLObjectProperty()); } } return result; } @Override public Set getIndividualsInSignature() { Set result = new HashSet(); for (OWLEntity ent : getSignature()) { if (ent.isOWLNamedIndividual()) { result.add(ent.asOWLNamedIndividual()); } } return result; } @Override public Set getDatatypesInSignature() { Set result = new HashSet(); for (OWLEntity ent : getSignature()) { if (ent.isOWLDatatype()) { result.add(ent.asOWLDatatype()); } } return result; } @Override public Set getNestedClassExpressions() { OWLClassExpressionCollector collector = new OWLClassExpressionCollector(); return this.accept(collector); } @Override public boolean equals(Object obj) { return obj == this || obj != null && obj instanceof OWLObject; } @Override public int hashCode() { if (hashCode == 0) { hashCode = HashCode.hashCode(this); } return hashCode; } @Override final public int compareTo(OWLObject o) { OWLObjectTypeIndexProvider typeIndexProvider = new OWLObjectTypeIndexProvider(); int thisTypeIndex = typeIndexProvider.getTypeIndex(this); int otherTypeIndex = typeIndexProvider.getTypeIndex(o); int diff = thisTypeIndex - otherTypeIndex; if (diff == 0) { // Objects are the same type return compareObjectOfSameType(o); } else { return diff; } } protected abstract int compareObjectOfSameType(OWLObject object); @Override public String toString() { return ToStringRenderer.getInstance().getRendering(this); } @Override public boolean isTopEntity() { return false; } @Override public boolean isBottomEntity() { return false; } protected static int compareSets(Set set1, Set set2) { SortedSet ss1; if (set1 instanceof SortedSet) { ss1 = (SortedSet) set1; } else { ss1 = new TreeSet(set1); } SortedSet ss2; if (set2 instanceof SortedSet) { ss2 = (SortedSet) set2; } else { ss2 = new TreeSet(set2); } int i = 0; Iterator thisIt = ss1.iterator(); Iterator otherIt = ss2.iterator(); while (i < ss1.size() && i < ss2.size()) { OWLObject o1 = thisIt.next(); OWLObject o2 = otherIt.next(); int diff = o1.compareTo(o2); if (diff != 0) { return diff; } i++; } return ss1.size() - ss2.size(); } protected static int compareLists(List list1, List list2) { int i = 0; int size = list1.size() < list2.size() ? list1.size() : list2.size(); while (i < size) { OWLObject o1 = list1.get(i); OWLObject o2 = list2.get(i); int diff = o1.compareTo(o2); if (diff != 0) { return diff; } i++; } return list1.size() - list2.size(); } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy