001: /*****************************************************************************
002: * Source code information
003: * -----------------------
004: * Original author Ian Dickinson, HP Labs Bristol
005: * Author email Ian.Dickinson@hp.com
006: * Package Jena 2
007: * Web http://sourceforge.net/projects/jena/
008: * Created 28-May-2003
009: * Filename $RCSfile: BooleanClassDescriptionImpl.java,v $
010: * Revision $Revision: 1.13 $
011: * Release status $State: Exp $
012: *
013: * Last modified on $Date: 2008/01/02 12:08:03 $
014: * by $Author: andy_seaborne $
015: *
016: * (c) Copyright 2002, 2003, 2004, 2005, 2006, 2007, 2008 Hewlett-Packard Development Company, LP
017: * (see footer for full conditions)
018: *****************************************************************************/package com.hp.hpl.jena.ontology.impl;
019:
020: // Imports
021: ///////////////
022: import java.util.Iterator;
023:
024: import com.hp.hpl.jena.enhanced.EnhGraph;
025: import com.hp.hpl.jena.graph.Node;
026: import com.hp.hpl.jena.ontology.*;
027: import com.hp.hpl.jena.rdf.model.*;
028: import com.hp.hpl.jena.util.iterator.ExtendedIterator;
029:
030: /**
031: * <p>
032: * Shared implementation for implementations of Boolean clas expressions.
033: * </p>
034: *
035: * @author Ian Dickinson, HP Labs
036: * (<a href="mailto:Ian.Dickinson@hp.com" >email</a>)
037: * @version CVS $Id: BooleanClassDescriptionImpl.java,v 1.13 2008/01/02 12:08:03 andy_seaborne Exp $
038: */
039: public abstract class BooleanClassDescriptionImpl extends OntClassImpl
040: implements BooleanClassDescription {
041: // Constants
042: //////////////////////////////////
043:
044: // Static variables
045: //////////////////////////////////
046:
047: // Instance variables
048: //////////////////////////////////
049:
050: // Constructors
051: //////////////////////////////////
052:
053: /**
054: * <p>
055: * Construct an boolean class description represented by the given node in the given graph.
056: * </p>
057: *
058: * @param n The node that represents the resource
059: * @param g The enh graph that contains n
060: */
061: public BooleanClassDescriptionImpl(Node n, EnhGraph g) {
062: super (n, g);
063: }
064:
065: // External signature methods
066: //////////////////////////////////
067:
068: // operand
069:
070: /**
071: * <p>Assert that the operands for this boolean class expression are the classes
072: * in the given list. Any existing
073: * statements for the operator will be removed.</p>
074: * @param operands The list of operands to this expression.
075: * @exception OntProfileException If the operand property is not supported in the current language profile.
076: */
077: public void setOperands(RDFList operands) {
078: setPropertyValue(operator(), getOperatorName(), operands);
079: }
080:
081: /**
082: * <p>Add a class the operands of this boolean expression.</p>
083: * @param cls A class that will be added to the operands of this Boolean expression
084: * @exception OntProfileException If the operand property is not supported in the current language profile.
085: */
086: public void addOperand(Resource cls) {
087: addListPropertyValue(operator(), getOperatorName(), cls);
088: }
089:
090: /**
091: * <p>Add all of the classes from the given iterator to the operands of this boolean expression.</p>
092: * @param classes A iterator over classes that will be added to the operands of this Boolean expression
093: * @exception OntProfileException If the operand property is not supported in the current language profile.
094: */
095: public void addOperands(Iterator classes) {
096: while (classes.hasNext()) {
097: addOperand((Resource) classes.next());
098: }
099: }
100:
101: /**
102: * <p>Answer the list of operands for this Boolean class expression.</p>
103: * @return A list of the operands of this expression.
104: * @exception OntProfileException If the operand property is not supported in the current language profile.
105: */
106: public RDFList getOperands() {
107: return (RDFList) objectAs(operator(), getOperatorName(),
108: RDFList.class);
109: }
110:
111: /**
112: * <p>Answer an iterator over all of the clases that are the operands of this
113: * Boolean class expression. Each element of the iterator will be an {@link OntClass}.</p>
114: * @return An iterator over the operands of the expression.
115: * @exception OntProfileException If the operand property is not supported in the current language profile.
116: */
117: public ExtendedIterator listOperands() {
118: return getOperands().iterator().mapWith(
119: new AsMapper(OntClass.class));
120: }
121:
122: /**
123: * <p>Answer true if this Boolean class expression has the given class as an operand.</p>
124: * @param cls A class to test
125: * @return True if the given class is an operand to this expression.
126: * @exception OntProfileException If the operand property is not supported in the current language profile.
127: */
128: public boolean hasOperand(Resource cls) {
129: return getOperands().contains(cls);
130: }
131:
132: /**
133: * <p>Remove the given resource from the operands of this class expression.</p>
134: * @param res An resource to be removed from the operands of this class expression
135: */
136: public void removeOperand(Resource res) {
137: setOperands(getOperands().remove(res));
138: }
139:
140: /**
141: * <p>Answer the property that is used to construct this boolean expression, for example
142: * {@link Profile#UNION_OF()}.</p>
143: * @return The property used to construct this Boolean class expression.
144: */
145: public abstract Property operator();
146:
147: // Internal implementation methods
148: //////////////////////////////////
149:
150: /** Answer the name of the operator, so that we can give informative error messages */
151: protected abstract String getOperatorName();
152:
153: //==============================================================================
154: // Inner class definitions
155: //==============================================================================
156:
157: }
158:
159: /*
160: (c) Copyright 2002, 2003, 2004, 2005, 2006, 2007, 2008 Hewlett-Packard Development Company, LP
161: All rights reserved.
162:
163: Redistribution and use in source and binary forms, with or without
164: modification, are permitted provided that the following conditions
165: are met:
166:
167: 1. Redistributions of source code must retain the above copyright
168: notice, this list of conditions and the following disclaimer.
169:
170: 2. Redistributions in binary form must reproduce the above copyright
171: notice, this list of conditions and the following disclaimer in the
172: documentation and/or other materials provided with the distribution.
173:
174: 3. The name of the author may not be used to endorse or promote products
175: derived from this software without specific prior written permission.
176:
177: THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
178: IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
179: OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
180: IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
181: INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
182: NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
183: DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
184: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
185: (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
186: THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
187: */
|