/*
* 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
///////////////
package org.apache.jena.ontology.impl;
// Imports
///////////////
import org.apache.jena.enhanced.* ;
import org.apache.jena.graph.* ;
import org.apache.jena.ontology.* ;
import org.apache.jena.rdf.model.* ;
/**
* <p>
* Implementation of the ontology abstraction representing restrictions.
* </p>
*/
public class RestrictionImpl
extends OntClassImpl
implements Restriction
{
// Constants
//////////////////////////////////
// Static variables
//////////////////////////////////
/**
* A factory for generating Restriction facets from nodes in enhanced graphs.
* Note: should not be invoked directly by user code: use
* {@link org.apache.jena.rdf.model.RDFNode#as as()} instead.
*/
@SuppressWarnings("hiding")
public static Implementation factory = new Implementation() {
@Override
public EnhNode wrap( Node n, EnhGraph eg ) {
if (canWrap( n, eg )) {
return new RestrictionImpl( n, eg );
}
else {
throw new ConversionException( "Cannot convert node " + n + " to Restriction");
}
}
@Override
public boolean canWrap( Node node, EnhGraph eg ) {
// node will support being an Restriction facet if it has rdf:type owl:Restriction or equivalent
Profile profile = (eg instanceof OntModel) ? ((OntModel) eg).getProfile() : null;
return (profile != null) && profile.isSupported( node, eg, Restriction.class );
}
};
// Instance variables
//////////////////////////////////
// Constructors
//////////////////////////////////
/**
* <p>
* Construct a restriction node represented by the given node in the given graph.
* </p>
*
* @param n The node that represents the resource
* @param g The enh graph that contains n
*/
public RestrictionImpl( Node n, EnhGraph g ) {
super( n, g );
}
// External signature methods
//////////////////////////////////
// onProperty
/**
* <p>Assert that the property that this restriction applies to is the given property. Any existing
* statements for <code>onProperty</code> will be removed.</p>
* @param prop The property that this restriction applies to
* @exception ProfileException If the {@link Profile#ON_PROPERTY()} property is not supported in the current language profile.
*/
@Override
public void setOnProperty( Property prop ) {
setPropertyValue( getProfile().ON_PROPERTY(), "ON_PROPERTY", prop );
}
/**
* <p>Answer the property that this property restriction applies to. If there is
* more than one such resource, an arbitrary selection is made (though well-defined property restrictions
* should not have more than one <code>onProperty</code> statement.</p>
* @return The property that this property restriction applies to
* @exception ProfileException If the {@link Profile#ON_PROPERTY()} property is not supported in the current language profile.
*/
@Override
public OntProperty getOnProperty() {
return objectAs( getProfile().ON_PROPERTY(), "ON_PROPERTY", OntProperty.class );
}
/**
* <p>Answer true if this restriction is a property restriction on the given property.</p>
* @param prop A property to test against
* @return True if this restriction is a restriction on <code>prop</code>
* @exception ProfileException If the {@link Profile#ON_PROPERTY()} property is not supported in the current language profile.
*/
@Override
public boolean onProperty( Property prop ) {
return hasPropertyValue( getProfile().ON_PROPERTY(), "ON_PROPERTY", prop );
}
/**
* <p>Remove the given property as the property that this restriction applies to. If this statement
* is not true of the current model, nothing happens.</p>
* @param prop The property to be removed as a the property that this restriction applies to
*/
@Override
public void removeOnProperty( Property prop ) {
removePropertyValue( getProfile().ON_PROPERTY(), "ON_PROPERTY", prop );
}
/**
* <p>Answer a view of this restriction as an all values from expression</p>
* @return This class, but viewed as an AllValuesFromRestriction node
* @exception ConversionException if the class cannot be converted to an all values from restriction
* given the lanuage profile and the current state of the underlying model.
*/
@Override
public AllValuesFromRestriction asAllValuesFromRestriction() {
return as( AllValuesFromRestriction.class );
}
/**
* <p>Answer a view of this restriction as a some values from expression</p>
* @return This class, but viewed as a SomeValuesFromRestriction node
* @exception ConversionException if the class cannot be converted to an all values from restriction
* given the lanuage profile and the current state of the underlying model.
*/
@Override
public SomeValuesFromRestriction asSomeValuesFromRestriction() {
return as( SomeValuesFromRestriction.class );
}
/**
* <p>Answer a view of this restriction as a has value expression</p>
* @return This class, but viewed as a HasValueRestriction node
* @exception ConversionException if the class cannot be converted to a has value restriction
* given the lanuage profile and the current state of the underlying model.
*/
@Override
public HasValueRestriction asHasValueRestriction() {
return as( HasValueRestriction.class );
}
/**
* <p>Answer a view of this restriction as a cardinality restriction class expression</p>
* @return This class, but viewed as a CardinalityRestriction node
* @exception ConversionException if the class cannot be converted to a cardinality restriction
* given the lanuage profile and the current state of the underlying model.
*/
@Override
public CardinalityRestriction asCardinalityRestriction() {
return as( CardinalityRestriction.class );
}
/**
* <p>Answer a view of this restriction as a min cardinality restriction class expression</p>
* @return This class, but viewed as a MinCardinalityRestriction node
* @exception ConversionException if the class cannot be converted to a min cardinality restriction
* given the lanuage profile and the current state of the underlying model.
*/
@Override
public MinCardinalityRestriction asMinCardinalityRestriction() {
return as( MinCardinalityRestriction.class );
}
/**
* <p>Answer a view of this restriction as a max cardinality restriction class expression</p>
* @return This class, but viewed as a MaxCardinalityRestriction node
* @exception ConversionException if the class cannot be converted to a max cardinality restriction
* given the lanuage profile and the current state of the underlying model.
*/
@Override
public MaxCardinalityRestriction asMaxCardinalityRestriction() {
return as( MaxCardinalityRestriction.class );
}
// type tests
/**
* <p>Answer true if this restriction is an all values from restriction</p>
* @return True if this is an allValuesFrom property restriction
* @exception ProfileException if {@link Profile#ALL_VALUES_FROM()} is not supported in the current profile
*/
@Override
public boolean isAllValuesFromRestriction() {
checkProfile( getProfile().ALL_VALUES_FROM(), "ALL_VALUES_FROM" );
return hasProperty( getProfile().ALL_VALUES_FROM() );
}
/**
* <p>Answer true if this restriction is a some values from restriction</p>
* @return True if this is a someValuesFrom property restriction
* @exception ProfileException if {@link Profile#SOME_VALUES_FROM()} is not supported in the current profile
*/
@Override
public boolean isSomeValuesFromRestriction() {
checkProfile( getProfile().SOME_VALUES_FROM(), "SOME_VALUES_FROM" );
return hasProperty( getProfile().SOME_VALUES_FROM() );
}
/**
* <p>Answer true if this restriction is a has value restriction</p>
* @return True if this is a hasValue property restriction
* @exception ProfileException if {@link Profile#HAS_VALUE()} is not supported in the current profile
*/
@Override
public boolean isHasValueRestriction() {
checkProfile( getProfile().HAS_VALUE(), "HAS_VALUE" );
return hasProperty( getProfile().HAS_VALUE() );
}
/**
* <p>Answer true if this restriction is a cardinality restriction (ie is a property restriction
* constructed with an <code>owl:cardinality</code> operator, or similar). This is not a test for
* a restriction that tests cardinalities in general.</p>
* @return True if this is a cardinality property restriction
* @exception ProfileException if {@link Profile#CARDINALITY()} is not supported in the current profile
*/
@Override
public boolean isCardinalityRestriction() {
checkProfile( getProfile().CARDINALITY(), "CARDINALITY" );
return hasProperty( getProfile().CARDINALITY() );
}
/**
* <p>Answer true if this restriction is a min cardinality restriction (ie is a property restriction
* constructed with an <code>owl:minCardinality</code> operator, or similar). This is not a test for
* a restriction that tests cardinalities in general.</p>
* @return True if this is a minCardinality property restriction
* @exception ProfileException if {@link Profile#MIN_CARDINALITY()} is not supported in the current profile
*/
@Override
public boolean isMinCardinalityRestriction() {
checkProfile( getProfile().MIN_CARDINALITY(), "MIN_CARDINALITY" );
return hasProperty( getProfile().MIN_CARDINALITY() );
}
/**
* <p>Answer true if this restriction is a max cardinality restriction (ie is a property restriction
* constructed with an <code>owl:maxCardinality</code> operator, or similar). This is not a test for
* a restriction that tests cardinalities in general.</p>
* @return True if this is a maxCardinality property restriction
* @exception ProfileException if {@link Profile#MAX_CARDINALITY()} is not supported in the current profile
*/
@Override
public boolean isMaxCardinalityRestriction() {
checkProfile( getProfile().MAX_CARDINALITY(), "MAX_CARDINALITY" );
return hasProperty( getProfile().MAX_CARDINALITY() );
}
// conversions
/**
* <p>Convert this restriction to an all values from class expression.</p>
* @param cls The class to which all values of the restricted property must belong, to be in the
* extension of this restriction
* @return This class, but converted to a AllValuesFromRestriction class expression
* @exception ProfileException if {@link Profile#ALL_VALUES_FROM()} is not supported in the current profile
*/
@Override
public AllValuesFromRestriction convertToAllValuesFromRestriction( Resource cls ) {
setPropertyValue( getProfile().ALL_VALUES_FROM(), "ALL_VALUES_FROM", cls );
return as( AllValuesFromRestriction.class );
}
/**
* <p>Convert this restriction to a some values from class expression</p>
* @param cls The class to which at least one value of the restricted property must belong, to be in the
* extension of this restriction
* @return This class, but converted to a SomeValuesFromRestriction node
* @exception ProfileException if {@link Profile#SOME_VALUES_FROM()} is not supported in the current profile
*/
@Override
public SomeValuesFromRestriction convertToSomeValuesFromRestriction( Resource cls ) {
setPropertyValue( getProfile().SOME_VALUES_FROM(), "SOME_VALUES_FROM", cls );
return as( SomeValuesFromRestriction.class );
}
/**
* <p>Convert this restriction to a has value class expression</p>
* @param value The value which the restricted property must have, for resource to be
* in the extension of this restriction
* @return This class, but converted to a HasValueRestriction
* @exception ProfileException if {@link Profile#HAS_VALUE()} is not supported in the current profile
*/
@Override
public HasValueRestriction convertToHasValueRestriction( RDFNode value ) {
setPropertyValue( getProfile().HAS_VALUE(), "HAS_VALUE", value );
return as( HasValueRestriction.class );
}
/**
* <p>Convert this restriction to a cardinality restriction class expression</p>
* @param cardinality The exact cardinality for the restricted property
* @return This class, but converted to a CardinalityRestriction node
* @exception ProfileException if {@link Profile#CARDINALITY()} is not supported in the current profile
*/
@Override
public CardinalityRestriction convertToCardinalityRestriction( int cardinality ) {
setPropertyValue( getProfile().CARDINALITY(), "CARDINALITY", getModel().createTypedLiteral( cardinality ) );
return as( CardinalityRestriction.class );
}
/**
* <p>Convert this restriction to a min cardinality restriction class expression</p>
* @param cardinality The minimum cardinality for the restricted property
* @return This class, but converted to a MinCardinalityRestriction node
* @exception ProfileException if {@link Profile#MIN_CARDINALITY()} is not supported in the current profile
*/
@Override
public MinCardinalityRestriction convertToMinCardinalityRestriction( int cardinality ) {
setPropertyValue( getProfile().MIN_CARDINALITY(), "MIN_CARDINALITY", getModel().createTypedLiteral( cardinality ) );
return as( MinCardinalityRestriction.class );
}
/**
* <p>Convert this restriction to a max cardinality restriction class expression</p>
* @param cardinality The maximum cardinality for the restricted property
* @return This class, but converted to a MaxCardinalityRestriction node
* @exception ProfileException if {@link Profile#MAX_CARDINALITY()} is not supported in the current profile
*/
@Override
public MaxCardinalityRestriction convertToMaxCardinalityRestriction( int cardinality ) {
setPropertyValue( getProfile().MAX_CARDINALITY(), "MAX_CARDINALITY", getModel().createTypedLiteral( cardinality ) );
return as( MaxCardinalityRestriction.class );
}
// Internal implementation methods
//////////////////////////////////
//==============================================================================
// Inner class definitions
//==============================================================================
}