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-Apr-2003
009: * Filename $RCSfile: EnumeratedClassImpl.java,v $
010: * Revision $Revision: 1.19 $
011: * Release status $State: Exp $
012: *
013: * Last modified on $Date: 2008/01/02 12:08:02 $
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.*;
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: * Implementation of a node representing an enumerated class description.
033: * </p>
034: *
035: * @author Ian Dickinson, HP Labs
036: * (<a href="mailto:Ian.Dickinson@hp.com" >email</a>)
037: * @version CVS $Id: EnumeratedClassImpl.java,v 1.19 2008/01/02 12:08:02 andy_seaborne Exp $
038: */
039: public class EnumeratedClassImpl extends OntClassImpl implements
040: EnumeratedClass {
041: // Constants
042: //////////////////////////////////
043:
044: // Static variables
045: //////////////////////////////////
046:
047: /**
048: * A factory for generating EnumeratedClass facets from nodes in enhanced graphs.
049: * Note: should not be invoked directly by user code: use
050: * {@link com.hp.hpl.jena.rdf.model.RDFNode#as as()} instead.
051: */
052: public static Implementation factory = new Implementation() {
053: public EnhNode wrap(Node n, EnhGraph eg) {
054: if (canWrap(n, eg)) {
055: return new EnumeratedClassImpl(n, eg);
056: } else {
057: throw new ConversionException("Cannot convert node "
058: + n + " to EnumeratedClass");
059: }
060: }
061:
062: public boolean canWrap(Node node, EnhGraph eg) {
063: // node will support being an EnumeratedClass facet if it has rdf:type owl:Class and an owl:oneOf statement (or equivalents)
064: Profile profile = (eg instanceof OntModel) ? ((OntModel) eg)
065: .getProfile()
066: : null;
067: return (profile != null)
068: && profile.isSupported(node, eg, OntClass.class)
069: && eg.asGraph().contains(node,
070: profile.ONE_OF().asNode(), Node.ANY);
071: }
072: };
073:
074: // Instance variables
075: //////////////////////////////////
076:
077: // Constructors
078: //////////////////////////////////
079:
080: /**
081: * <p>
082: * Construct an enumerated class node represented by the given node in the given graph.
083: * </p>
084: *
085: * @param n The node that represents the resource
086: * @param g The enh graph that contains n
087: */
088: public EnumeratedClassImpl(Node n, EnhGraph g) {
089: super (n, g);
090: }
091:
092: // External signature methods
093: //////////////////////////////////
094:
095: // oneOf
096:
097: /**
098: * <p>Assert that this class is exactly the enumeration of the given individuals. Any existing
099: * statements for <code>oneOf</code> will be removed.</p>
100: * @param en A list of individuals that defines the class extension for this class
101: * @exception OntProfileException If the {@link Profile#ONE_OF()} property is not supported in the current language profile.
102: */
103: public void setOneOf(RDFList en) {
104: setPropertyValue(getProfile().ONE_OF(), "ONE_OF", en);
105: }
106:
107: /**
108: * <p>Add an individual to the enumeration that defines the class extension of this class.</p>
109: * @param res An individual to add to the enumeration
110: * @exception OntProfileException If the {@link Profile#ONE_OF()} property is not supported in the current language profile.
111: */
112: public void addOneOf(Resource res) {
113: addListPropertyValue(getProfile().ONE_OF(), "ONE_OF", res);
114: }
115:
116: /**
117: * <p>Add each individual from the given iteratation to the
118: * enumeration that defines the class extension of this class.</p>
119: * @param individuals An iterator over individuals
120: * @exception OntProfileException If the {@link Profile#ONE_OF()} property is not supported in the current language profile.
121: */
122: public void addOneOf(Iterator individuals) {
123: while (individuals.hasNext()) {
124: addOneOf((Resource) individuals.next());
125: }
126: }
127:
128: /**
129: * <p>Answer a list of individuals that defines the extension of this class.</p>
130: * @return A list of individuals that is the class extension
131: * @exception OntProfileException If the {@link Profile#ONE_OF()} property is not supported in the current language profile.
132: */
133: public RDFList getOneOf() {
134: return (RDFList) objectAs(getProfile().ONE_OF(), "ONE_OF",
135: RDFList.class);
136: }
137:
138: /**
139: * <p>Answer an iterator over all of the individuals that are declared to be the class extension for
140: * this class. Each element of the iterator will be an {@link OntResource}.</p>
141: * @return An iterator over the individuals in the class extension
142: * @exception OntProfileException If the {@link Profile#ONE_OF()} property is not supported in the current language profile.
143: */
144: public ExtendedIterator listOneOf() {
145: return getOneOf().iterator().mapWith(
146: new AsMapper(OntResource.class));
147: }
148:
149: /**
150: * <p>Answer true if the given individual is one of the enumerated individuals in the class extension
151: * of this class.</p>
152: * @param res An individual to test
153: * @return True if the given individual is in the class extension for this class.
154: * @exception OntProfileException If the {@link Profile#ONE_OF()} property is not supported in the current language profile.
155: */
156: public boolean hasOneOf(Resource res) {
157: return getOneOf().contains(res);
158: }
159:
160: /**
161: * <p>Remove the statement that this enumeration includes <code>res</code> among its members. If this statement
162: * is not true of the current model, nothing happens.</p>
163: * @param res A resource that may be declared to be part of this enumeration, and which is
164: * no longer one of the enumeration values.
165: */
166: public void removeOneOf(Resource res) {
167: setOneOf(getOneOf().remove(res));
168: }
169:
170: // Internal implementation methods
171: //////////////////////////////////
172:
173: //==============================================================================
174: // Inner class definitions
175: //==============================================================================
176:
177: }
178:
179: /*
180: (c) Copyright 2002, 2003, 2004, 2005, 2006, 2007, 2008 Hewlett-Packard Development Company, LP
181: All rights reserved.
182:
183: Redistribution and use in source and binary forms, with or without
184: modification, are permitted provided that the following conditions
185: are met:
186:
187: 1. Redistributions of source code must retain the above copyright
188: notice, this list of conditions and the following disclaimer.
189:
190: 2. Redistributions in binary form must reproduce the above copyright
191: notice, this list of conditions and the following disclaimer in the
192: documentation and/or other materials provided with the distribution.
193:
194: 3. The name of the author may not be used to endorse or promote products
195: derived from this software without specific prior written permission.
196:
197: THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
198: IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
199: OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
200: IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
201: INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
202: NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
203: DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
204: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
205: (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
206: THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
207: */
|