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