RDFListImpl.java revision 38
2454dfa32c93c20a8522c6ed42fe057baaac9f9aStephan Bosch// The MIT License
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen//
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen// Copyright (c) 2004 Evren Sirin
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen//
b87761f9bbef949f31dae297e619ac3f5e9c2b2eTimo Sirainen// Permission is hereby granted, free of charge, to any person obtaining a copy
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen// of this software and associated documentation files (the "Software"), to
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen// deal in the Software without restriction, including without limitation the
e8434aad92ea6ff1c915b708294dbd0c7ff5908dMichael M Slusarz// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen// sell copies of the Software, and to permit persons to whom the Software is
de5f478d9e7ae7b8e58082e0b30b6ce1f034236aTimo Sirainen// furnished to do so, subject to the following conditions:
ba4626cd5be3d225a7a89aa338d92b8fb411fd1cTimo Sirainen//
f7d018e7e0980044e3d537958126e44ef4c45056Timo Sirainen// The above copyright notice and this permission notice shall be included in
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen// all copies or substantial portions of the Software.
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen//
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
ba4626cd5be3d225a7a89aa338d92b8fb411fd1cTimo Sirainen// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen// IN THE SOFTWARE.
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen/*
1128c114416bdc4df0b41d3e15429a1522e5cfe4Timo Sirainen * Created on Dec 23, 2004
1128c114416bdc4df0b41d3e15429a1522e5cfe4Timo Sirainen */
1128c114416bdc4df0b41d3e15429a1522e5cfe4Timo Sirainenpackage impl.owl.list;
1128c114416bdc4df0b41d3e15429a1522e5cfe4Timo Sirainen
8952d797eca36f997ec36569e783871b597a9216Timo Sirainen
8952d797eca36f997ec36569e783871b597a9216Timo Sirainenimport impl.owl.WrappedIndividual;
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainenimport java.util.ArrayList;
f9cf9852b0338910f1a710297374943d66fea480Timo Sirainenimport java.util.Iterator;
f9cf9852b0338910f1a710297374943d66fea480Timo Sirainenimport java.util.List;
f9cf9852b0338910f1a710297374943d66fea480Timo Sirainenimport java.util.NoSuchElementException;
f9cf9852b0338910f1a710297374943d66fea480Timo Sirainen
f9cf9852b0338910f1a710297374943d66fea480Timo Sirainenimport org.mindswap.exceptions.InvalidListException;
f9cf9852b0338910f1a710297374943d66fea480Timo Sirainenimport org.mindswap.owl.OWLDataValue;
f9cf9852b0338910f1a710297374943d66fea480Timo Sirainenimport org.mindswap.owl.OWLFactory;
f9cf9852b0338910f1a710297374943d66fea480Timo Sirainenimport org.mindswap.owl.OWLIndividual;
f9cf9852b0338910f1a710297374943d66fea480Timo Sirainenimport org.mindswap.owl.OWLIndividualList;
01aca4a521410be85e1f39e37c662435d052f48aAki Tuomiimport org.mindswap.owl.OWLValue;
f9cf9852b0338910f1a710297374943d66fea480Timo Sirainenimport org.mindswap.owl.list.ListVocabulary;
f9cf9852b0338910f1a710297374943d66fea480Timo Sirainenimport org.mindswap.owl.list.RDFList;
f9cf9852b0338910f1a710297374943d66fea480Timo Sirainenimport org.mindswap.owl.vocabulary.RDF;
f9cf9852b0338910f1a710297374943d66fea480Timo Sirainen
f9cf9852b0338910f1a710297374943d66fea480Timo Sirainen/**
f9cf9852b0338910f1a710297374943d66fea480Timo Sirainen * @author Evren Sirin
f9cf9852b0338910f1a710297374943d66fea480Timo Sirainen * @author Michael D�nzer (University of Zurich)
f9cf9852b0338910f1a710297374943d66fea480Timo Sirainen */
f9cf9852b0338910f1a710297374943d66fea480Timo Sirainenpublic class RDFListImpl extends WrappedIndividual implements RDFList {
f9cf9852b0338910f1a710297374943d66fea480Timo Sirainen protected ListVocabulary vocabulary;
f9cf9852b0338910f1a710297374943d66fea480Timo Sirainen
f9cf9852b0338910f1a710297374943d66fea480Timo Sirainen private class RDFListIterator implements Iterator {
01aca4a521410be85e1f39e37c662435d052f48aAki Tuomi private RDFList list;
f9cf9852b0338910f1a710297374943d66fea480Timo Sirainen
f9cf9852b0338910f1a710297374943d66fea480Timo Sirainen private RDFListIterator(RDFList list) {
4db61af2cfe2b206113bcc4b6153521679702bb4Timo Sirainen this.list = list;
4db61af2cfe2b206113bcc4b6153521679702bb4Timo Sirainen }
dd3d20d9b5821077164183a260af9bde0db3ff3fTimo Sirainen
4db61af2cfe2b206113bcc4b6153521679702bb4Timo Sirainen public void remove() {
8a6afcd8a6d9ed69626add85a7b75105ee3cb6a1Timo Sirainen throw new UnsupportedOperationException("Cannot remove from ObjList iterator");
8a6afcd8a6d9ed69626add85a7b75105ee3cb6a1Timo Sirainen }
8a6afcd8a6d9ed69626add85a7b75105ee3cb6a1Timo Sirainen
4db61af2cfe2b206113bcc4b6153521679702bb4Timo Sirainen public boolean hasNext() {
1128c114416bdc4df0b41d3e15429a1522e5cfe4Timo Sirainen return !list.isEmpty();
1128c114416bdc4df0b41d3e15429a1522e5cfe4Timo Sirainen }
8a6afcd8a6d9ed69626add85a7b75105ee3cb6a1Timo Sirainen
1128c114416bdc4df0b41d3e15429a1522e5cfe4Timo Sirainen public Object next() {
4db61af2cfe2b206113bcc4b6153521679702bb4Timo Sirainen if(list.isEmpty())
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen throw new NoSuchElementException();
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen Object result = list.getFirst();
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen list = list.getRest();
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen if(result == null || list == null)
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen throw new InvalidListException();
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen return result;
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen }
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen }
c72cfe4a2bda39fff3b8a8bd64b31a7cc14d7d11Timo Sirainen
4db61af2cfe2b206113bcc4b6153521679702bb4Timo Sirainen public RDFListImpl(OWLIndividual ind) {
1128c114416bdc4df0b41d3e15429a1522e5cfe4Timo Sirainen super(ind);
a1044a46a8f3512173f4ea2684ef1fc3e61645c7Timo Sirainen
14189e0d0af45ddcb888d026bd8d7e4609912ec5Timo Sirainen setVocabulary(RDF.ListVocabulary);
e564ff0581fc44b78badf8da36e68f9f7a27807eTimo Sirainen }
f9eee365367f37b1692c07db6c23d30243844aaaTimo Sirainen
f7d018e7e0980044e3d537958126e44ef4c45056Timo Sirainen public RDFList getRest() {
7cd055a212d44067e2d94452c05691d696c9f699Timo Sirainen return (RDFList) getProperty(vocabulary.rest()).castTo(RDFList.class);
8952d797eca36f997ec36569e783871b597a9216Timo Sirainen }
2599a77a28bde0653fa090802424469904d518eeTimo Sirainen
07038d3a12a915e98f794566f56a0ed12e0653ebAki Tuomi public void setRest(RDFList rest) {
dd3d20d9b5821077164183a260af9bde0db3ff3fTimo Sirainen setProperty(vocabulary.rest(), rest);
e8434aad92ea6ff1c915b708294dbd0c7ff5908dMichael M Slusarz }
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen public void setRestToNil() {
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen setProperty(vocabulary.rest(), vocabulary.nil());
f0e416aa42058e7ccc0dc6deec0d4f4a19ee6ebeTimo Sirainen }
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen public OWLIndividual getFirst() {
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen return (OWLIndividual) getFirstValue();
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen }
1fb5e50695bbbc0da082e5a6f19f29d2bb2f6531Timo Sirainen
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen public OWLValue getFirstValue() {
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen OWLValue value = getProperty( vocabulary.firstD() );
ba4626cd5be3d225a7a89aa338d92b8fb411fd1cTimo Sirainen if( value == null )
ba4626cd5be3d225a7a89aa338d92b8fb411fd1cTimo Sirainen value = getProperty( vocabulary.first() );
f9cf9852b0338910f1a710297374943d66fea480Timo Sirainen
ba4626cd5be3d225a7a89aa338d92b8fb411fd1cTimo Sirainen return value;
2a24f3565c61cb429d1e428601f153ce53b8bae3Timo Sirainen }
1128c114416bdc4df0b41d3e15429a1522e5cfe4Timo Sirainen
1128c114416bdc4df0b41d3e15429a1522e5cfe4Timo Sirainen public void setFirst(OWLValue value) {
1128c114416bdc4df0b41d3e15429a1522e5cfe4Timo Sirainen // if (isEmpty())
1fb5e50695bbbc0da082e5a6f19f29d2bb2f6531Timo Sirainen // throw new RuntimeException( "Cannot modify empty list (list:nil)" );
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen if (value == null)
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen setProperty(vocabulary.firstD(), vocabulary.nil());
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen else if (value instanceof OWLDataValue )
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen setProperty(vocabulary.firstD(), (OWLDataValue) value );
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen else
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen setProperty(vocabulary.first(), (OWLIndividual) value );
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen }
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen public OWLIndividualList getAll() {
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen OWLIndividualList result = OWLFactory.createIndividualList();
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen for(RDFList list = this; !list.isEmpty(); list = list.getRest())
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen result.add(list.getFirst());
1128c114416bdc4df0b41d3e15429a1522e5cfe4Timo Sirainen
4db61af2cfe2b206113bcc4b6153521679702bb4Timo Sirainen return result;
caf029d36a826106e48b8682f15ea0fc01fdd8f4Timo Sirainen }
caf029d36a826106e48b8682f15ea0fc01fdd8f4Timo Sirainen
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen public List getAllValues() {
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen List result = new ArrayList();
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen for(RDFList list = this; !list.isEmpty(); list = list.getRest())
61f39b0358a72ebc693d84ba5bac74489ee7df41Timo Sirainen result.add(list.getFirstValue());
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen return result;
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen }
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen
0dffa25d211be541ee3c953b23566a1a990789dfTimo Sirainen public OWLIndividual get(int index) {
0dffa25d211be541ee3c953b23566a1a990789dfTimo Sirainen return (OWLIndividual) getValue(index);
caf029d36a826106e48b8682f15ea0fc01fdd8f4Timo Sirainen }
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen public OWLValue getValue(int index) {
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen if(isEmpty())
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen throw new IndexOutOfBoundsException();
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen return (index == 0) ? getFirstValue() : getRest().getValue(index - 1);
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen }
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen public RDFList add(OWLValue item) {
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen if (isEmpty())
e22ec7998afd426c53c658483ce66b6e404e27c6Timo Sirainen return insert( item );
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen
0dffa25d211be541ee3c953b23566a1a990789dfTimo Sirainen RDFList rest = getRest();
0dffa25d211be541ee3c953b23566a1a990789dfTimo Sirainen
0dffa25d211be541ee3c953b23566a1a990789dfTimo Sirainen if( rest.isEmpty() )
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen setRest(rest.insert(item));
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen else
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen rest.add(item);
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen return this;
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen }
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen public RDFList insert(OWLValue first) {
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen RDFListImpl list = new RDFListImpl( getOntology().createInstance( vocabulary.List() ) );
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen list.setVocabulary( vocabulary );
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen list.setFirst( first );
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen list.setRest( this );
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen return list;
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen }
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen public RDFList insertAt(int index, OWLValue value) {
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen if( index == 0 )
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen return insert(value);
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen if( index < 0 || isEmpty() )
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen throw new IndexOutOfBoundsException();
a1044a46a8f3512173f4ea2684ef1fc3e61645c7Timo Sirainen
a1044a46a8f3512173f4ea2684ef1fc3e61645c7Timo Sirainen RDFList rest = getRest();
a1044a46a8f3512173f4ea2684ef1fc3e61645c7Timo Sirainen return rest.insertAt( index - 1, value );
a1044a46a8f3512173f4ea2684ef1fc3e61645c7Timo Sirainen }
a1044a46a8f3512173f4ea2684ef1fc3e61645c7Timo Sirainen
a1044a46a8f3512173f4ea2684ef1fc3e61645c7Timo Sirainen public RDFList remove(OWLValue value) {
a1044a46a8f3512173f4ea2684ef1fc3e61645c7Timo Sirainen if ((value == null) || (size() == 0))
a1044a46a8f3512173f4ea2684ef1fc3e61645c7Timo Sirainen return this;
a1044a46a8f3512173f4ea2684ef1fc3e61645c7Timo Sirainen if ((size() == 1) && (getFirstValue().equals(value)))
a1044a46a8f3512173f4ea2684ef1fc3e61645c7Timo Sirainen return remove();
a1044a46a8f3512173f4ea2684ef1fc3e61645c7Timo Sirainen
a1044a46a8f3512173f4ea2684ef1fc3e61645c7Timo Sirainen RDFList rest = this;
1128c114416bdc4df0b41d3e15429a1522e5cfe4Timo Sirainen int i = 0;
1fb5e50695bbbc0da082e5a6f19f29d2bb2f6531Timo Sirainen while (!rest.isEmpty()) {
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen if (rest.getFirstValue().equals(value))
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen return removeAt(i);
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen i++;
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen rest = rest.getRest();
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen }
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen return this;
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen }
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen public RDFList removeAt(int index) {
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen if (index == 0)
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen return remove();
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen if (index < 0 || isEmpty())
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen throw new IndexOutOfBoundsException();
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen
a1044a46a8f3512173f4ea2684ef1fc3e61645c7Timo Sirainen setRest(getRest().removeAt(index - 1));
a1044a46a8f3512173f4ea2684ef1fc3e61645c7Timo Sirainen return this;
a1044a46a8f3512173f4ea2684ef1fc3e61645c7Timo Sirainen }
a1044a46a8f3512173f4ea2684ef1fc3e61645c7Timo Sirainen
a1044a46a8f3512173f4ea2684ef1fc3e61645c7Timo Sirainen public RDFList remove() {
a1044a46a8f3512173f4ea2684ef1fc3e61645c7Timo Sirainen RDFList list = getRest();
a1044a46a8f3512173f4ea2684ef1fc3e61645c7Timo Sirainen
a1044a46a8f3512173f4ea2684ef1fc3e61645c7Timo Sirainen if (size() > 1) {
a1044a46a8f3512173f4ea2684ef1fc3e61645c7Timo Sirainen list.setFirst(getRest().getFirstValue());
a1044a46a8f3512173f4ea2684ef1fc3e61645c7Timo Sirainen list.setRest(getRest().getRest());
a1044a46a8f3512173f4ea2684ef1fc3e61645c7Timo Sirainen } else {
a1044a46a8f3512173f4ea2684ef1fc3e61645c7Timo Sirainen list = (RDFList) vocabulary.nil().castTo(RDFList.class);
a1044a46a8f3512173f4ea2684ef1fc3e61645c7Timo Sirainen }
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen if (hasProperty(vocabulary.first()))
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen removeProperties(vocabulary.first());
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen if (hasProperty(vocabulary.rest()))
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen removeProperties(vocabulary.rest());
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen individual.delete();
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen return list;
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen }
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen public RDFList removeAll() {
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen RDFList list = this;
1fb5e50695bbbc0da082e5a6f19f29d2bb2f6531Timo Sirainen while (list.size() > 0)
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen list = list.remove();
1fb5e50695bbbc0da082e5a6f19f29d2bb2f6531Timo Sirainen return list;
1fb5e50695bbbc0da082e5a6f19f29d2bb2f6531Timo Sirainen }
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen @Override
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen public void delete() {
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen removeAll();
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen individual.delete();
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen }
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen public void set(int index, OWLValue value) {
1fb5e50695bbbc0da082e5a6f19f29d2bb2f6531Timo Sirainen if( isEmpty() )
1fb5e50695bbbc0da082e5a6f19f29d2bb2f6531Timo Sirainen throw new UnsupportedOperationException( "Cannot modify empty list (list:nil)" );
1fb5e50695bbbc0da082e5a6f19f29d2bb2f6531Timo Sirainen
1fb5e50695bbbc0da082e5a6f19f29d2bb2f6531Timo Sirainen int size = size();
1fb5e50695bbbc0da082e5a6f19f29d2bb2f6531Timo Sirainen if( index > size )
1fb5e50695bbbc0da082e5a6f19f29d2bb2f6531Timo Sirainen throw new IndexOutOfBoundsException();
1fb5e50695bbbc0da082e5a6f19f29d2bb2f6531Timo Sirainen else if( index == size )
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen add( value );
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen else {
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen RDFList list = this;
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen for(int i = 0; i < index; i++)
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen list = list.getRest();
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen list.setFirst( value );
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen }
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen }
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen public Iterator iterator() {
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen return new RDFListIterator(this);
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen }
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen public int size() {
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen return isEmpty() ? 0 : 1 + getRest().size();
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen }
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen public boolean isEmpty() {
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen return equals(vocabulary.nil()) || (getFirstValue() != null && getFirstValue().equals(vocabulary.nil()));
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen }
7c04ede0da5749691624a1fb962ac29cd0167050Timo Sirainen
7c04ede0da5749691624a1fb962ac29cd0167050Timo Sirainen public ListVocabulary getVocabulary() {
7c04ede0da5749691624a1fb962ac29cd0167050Timo Sirainen return vocabulary;
7c04ede0da5749691624a1fb962ac29cd0167050Timo Sirainen }
7c04ede0da5749691624a1fb962ac29cd0167050Timo Sirainen
7c04ede0da5749691624a1fb962ac29cd0167050Timo Sirainen public void setVocabulary(ListVocabulary vocabulary) {
7c04ede0da5749691624a1fb962ac29cd0167050Timo Sirainen this.vocabulary = vocabulary;
7c04ede0da5749691624a1fb962ac29cd0167050Timo Sirainen }
7c04ede0da5749691624a1fb962ac29cd0167050Timo Sirainen}
7c04ede0da5749691624a1fb962ac29cd0167050Timo Sirainen