RDFListImpl.java revision 16
45312f52ff3a3d4c137447be4c7556500c2f8bf2Timo Sirainen// The MIT License
0c17af9d3f9323136a94e66605776ed4462a172dTimo Sirainen//
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen// Copyright (c) 2004 Evren Sirin
0c17af9d3f9323136a94e66605776ed4462a172dTimo Sirainen//
0c17af9d3f9323136a94e66605776ed4462a172dTimo Sirainen// Permission is hereby granted, free of charge, to any person obtaining a copy
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen// of this software and associated documentation files (the "Software"), to
0c17af9d3f9323136a94e66605776ed4462a172dTimo Sirainen// deal in the Software without restriction, including without limitation the
137ea7ca34005345aa2304a940149b7f3774d727Timo Sirainen// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
0c17af9d3f9323136a94e66605776ed4462a172dTimo Sirainen// sell copies of the Software, and to permit persons to whom the Software is
0c17af9d3f9323136a94e66605776ed4462a172dTimo Sirainen// furnished to do so, subject to the following conditions:
0c17af9d3f9323136a94e66605776ed4462a172dTimo Sirainen//
0c17af9d3f9323136a94e66605776ed4462a172dTimo Sirainen// The above copyright notice and this permission notice shall be included in
0c17af9d3f9323136a94e66605776ed4462a172dTimo Sirainen// all copies or substantial portions of the Software.
0c17af9d3f9323136a94e66605776ed4462a172dTimo Sirainen//
137ea7ca34005345aa2304a940149b7f3774d727Timo Sirainen// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
0c17af9d3f9323136a94e66605776ed4462a172dTimo Sirainen// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
0c17af9d3f9323136a94e66605776ed4462a172dTimo Sirainen// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
0c17af9d3f9323136a94e66605776ed4462a172dTimo Sirainen// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
0c17af9d3f9323136a94e66605776ed4462a172dTimo Sirainen// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
0c17af9d3f9323136a94e66605776ed4462a172dTimo Sirainen// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
0c17af9d3f9323136a94e66605776ed4462a172dTimo Sirainen// IN THE SOFTWARE.
0c17af9d3f9323136a94e66605776ed4462a172dTimo Sirainen
0c17af9d3f9323136a94e66605776ed4462a172dTimo Sirainen/*
0c17af9d3f9323136a94e66605776ed4462a172dTimo Sirainen * Created on Dec 23, 2004
0c17af9d3f9323136a94e66605776ed4462a172dTimo Sirainen */
0c17af9d3f9323136a94e66605776ed4462a172dTimo Sirainenpackage impl.owl.list;
0c17af9d3f9323136a94e66605776ed4462a172dTimo Sirainen
0c17af9d3f9323136a94e66605776ed4462a172dTimo Sirainen
0c17af9d3f9323136a94e66605776ed4462a172dTimo Sirainenimport impl.owl.WrappedIndividual;
0c17af9d3f9323136a94e66605776ed4462a172dTimo Sirainen
0c17af9d3f9323136a94e66605776ed4462a172dTimo Sirainenimport java.util.ArrayList;
0c17af9d3f9323136a94e66605776ed4462a172dTimo Sirainenimport java.util.Iterator;
0c17af9d3f9323136a94e66605776ed4462a172dTimo Sirainenimport java.util.List;
0c17af9d3f9323136a94e66605776ed4462a172dTimo Sirainenimport java.util.NoSuchElementException;
0c17af9d3f9323136a94e66605776ed4462a172dTimo Sirainen
0c17af9d3f9323136a94e66605776ed4462a172dTimo Sirainenimport org.mindswap.exceptions.InvalidListException;
0c17af9d3f9323136a94e66605776ed4462a172dTimo Sirainenimport org.mindswap.owl.OWLDataValue;
0c17af9d3f9323136a94e66605776ed4462a172dTimo Sirainenimport org.mindswap.owl.OWLFactory;
0c17af9d3f9323136a94e66605776ed4462a172dTimo Sirainenimport org.mindswap.owl.OWLIndividual;
0c17af9d3f9323136a94e66605776ed4462a172dTimo Sirainenimport org.mindswap.owl.OWLIndividualList;
0c17af9d3f9323136a94e66605776ed4462a172dTimo Sirainenimport org.mindswap.owl.OWLValue;
0c17af9d3f9323136a94e66605776ed4462a172dTimo Sirainenimport org.mindswap.owl.list.ListVocabulary;
0c17af9d3f9323136a94e66605776ed4462a172dTimo Sirainenimport org.mindswap.owl.list.RDFList;
0c17af9d3f9323136a94e66605776ed4462a172dTimo Sirainenimport org.mindswap.owl.vocabulary.RDF;
0c17af9d3f9323136a94e66605776ed4462a172dTimo Sirainen
0c17af9d3f9323136a94e66605776ed4462a172dTimo Sirainen/**
0c17af9d3f9323136a94e66605776ed4462a172dTimo Sirainen * @author Evren Sirin
0c17af9d3f9323136a94e66605776ed4462a172dTimo Sirainen * @author Michael D�nzer, University of Zurich
0c17af9d3f9323136a94e66605776ed4462a172dTimo Sirainen */
0c17af9d3f9323136a94e66605776ed4462a172dTimo Sirainenpublic class RDFListImpl extends WrappedIndividual implements RDFList {
0c17af9d3f9323136a94e66605776ed4462a172dTimo Sirainen protected ListVocabulary vocabulary;
0c17af9d3f9323136a94e66605776ed4462a172dTimo Sirainen
0c17af9d3f9323136a94e66605776ed4462a172dTimo Sirainen private class RDFListIterator implements Iterator {
0c17af9d3f9323136a94e66605776ed4462a172dTimo Sirainen private RDFList list;
0c17af9d3f9323136a94e66605776ed4462a172dTimo Sirainen
0c17af9d3f9323136a94e66605776ed4462a172dTimo Sirainen private RDFListIterator(RDFList list) {
0c17af9d3f9323136a94e66605776ed4462a172dTimo Sirainen this.list = list;
0c17af9d3f9323136a94e66605776ed4462a172dTimo Sirainen }
0c17af9d3f9323136a94e66605776ed4462a172dTimo Sirainen
0c17af9d3f9323136a94e66605776ed4462a172dTimo Sirainen public void remove() {
0c17af9d3f9323136a94e66605776ed4462a172dTimo Sirainen throw new UnsupportedOperationException("Cannot remove from ObjList iterator");
0c17af9d3f9323136a94e66605776ed4462a172dTimo Sirainen }
0c17af9d3f9323136a94e66605776ed4462a172dTimo Sirainen
0c17af9d3f9323136a94e66605776ed4462a172dTimo Sirainen public boolean hasNext() {
0c17af9d3f9323136a94e66605776ed4462a172dTimo Sirainen return !list.isEmpty();
0c17af9d3f9323136a94e66605776ed4462a172dTimo Sirainen }
0c17af9d3f9323136a94e66605776ed4462a172dTimo Sirainen
0c17af9d3f9323136a94e66605776ed4462a172dTimo Sirainen public Object next() {
0c17af9d3f9323136a94e66605776ed4462a172dTimo Sirainen if(list.isEmpty())
0c17af9d3f9323136a94e66605776ed4462a172dTimo Sirainen throw new NoSuchElementException();
0c17af9d3f9323136a94e66605776ed4462a172dTimo Sirainen
0c17af9d3f9323136a94e66605776ed4462a172dTimo Sirainen Object result = list.getFirst();
0c17af9d3f9323136a94e66605776ed4462a172dTimo Sirainen list = list.getRest();
0c17af9d3f9323136a94e66605776ed4462a172dTimo Sirainen
0c17af9d3f9323136a94e66605776ed4462a172dTimo Sirainen if(result == null || list == null)
0c17af9d3f9323136a94e66605776ed4462a172dTimo Sirainen throw new InvalidListException();
0c17af9d3f9323136a94e66605776ed4462a172dTimo Sirainen
0c17af9d3f9323136a94e66605776ed4462a172dTimo Sirainen return result;
0c17af9d3f9323136a94e66605776ed4462a172dTimo Sirainen }
0c17af9d3f9323136a94e66605776ed4462a172dTimo Sirainen }
0c17af9d3f9323136a94e66605776ed4462a172dTimo Sirainen
0c17af9d3f9323136a94e66605776ed4462a172dTimo Sirainen public RDFListImpl(OWLIndividual ind) {
0c17af9d3f9323136a94e66605776ed4462a172dTimo Sirainen super(ind);
0c17af9d3f9323136a94e66605776ed4462a172dTimo Sirainen
0c17af9d3f9323136a94e66605776ed4462a172dTimo Sirainen setVocabulary(RDF.ListVocabulary);
0c17af9d3f9323136a94e66605776ed4462a172dTimo Sirainen }
0c17af9d3f9323136a94e66605776ed4462a172dTimo Sirainen
0c17af9d3f9323136a94e66605776ed4462a172dTimo Sirainen public RDFList getRest() {
0c17af9d3f9323136a94e66605776ed4462a172dTimo Sirainen return (RDFList) getProperty(vocabulary.rest()).castTo(RDFList.class);
0c17af9d3f9323136a94e66605776ed4462a172dTimo Sirainen }
0c17af9d3f9323136a94e66605776ed4462a172dTimo Sirainen
0c17af9d3f9323136a94e66605776ed4462a172dTimo Sirainen public void setRest(RDFList rest) {
0c17af9d3f9323136a94e66605776ed4462a172dTimo Sirainen setProperty(vocabulary.rest(), rest);
0c17af9d3f9323136a94e66605776ed4462a172dTimo Sirainen }
0c17af9d3f9323136a94e66605776ed4462a172dTimo Sirainen
0c17af9d3f9323136a94e66605776ed4462a172dTimo Sirainen public void setRestToNil() {
0c17af9d3f9323136a94e66605776ed4462a172dTimo Sirainen setProperty(vocabulary.rest(), vocabulary.nil());
0c17af9d3f9323136a94e66605776ed4462a172dTimo Sirainen }
0c17af9d3f9323136a94e66605776ed4462a172dTimo Sirainen
0c17af9d3f9323136a94e66605776ed4462a172dTimo Sirainen public OWLIndividual getFirst() {
0c17af9d3f9323136a94e66605776ed4462a172dTimo Sirainen return (OWLIndividual) getFirstValue();
0c17af9d3f9323136a94e66605776ed4462a172dTimo Sirainen }
0c17af9d3f9323136a94e66605776ed4462a172dTimo Sirainen
0c17af9d3f9323136a94e66605776ed4462a172dTimo Sirainen public OWLValue getFirstValue() {
0c17af9d3f9323136a94e66605776ed4462a172dTimo Sirainen OWLValue value = getProperty( vocabulary.firstD() );
0c17af9d3f9323136a94e66605776ed4462a172dTimo Sirainen if( value == null )
0c17af9d3f9323136a94e66605776ed4462a172dTimo Sirainen value = getProperty( vocabulary.first() );
0c17af9d3f9323136a94e66605776ed4462a172dTimo Sirainen
0c17af9d3f9323136a94e66605776ed4462a172dTimo Sirainen return value;
0c17af9d3f9323136a94e66605776ed4462a172dTimo Sirainen }
0c17af9d3f9323136a94e66605776ed4462a172dTimo Sirainen
0c17af9d3f9323136a94e66605776ed4462a172dTimo Sirainen public void setFirst(OWLValue value) {
0c17af9d3f9323136a94e66605776ed4462a172dTimo Sirainen if (isEmpty())
0c17af9d3f9323136a94e66605776ed4462a172dTimo Sirainen throw new RuntimeException( "Cannot modify empty list (list:nil)" );
0c17af9d3f9323136a94e66605776ed4462a172dTimo Sirainen
0c17af9d3f9323136a94e66605776ed4462a172dTimo Sirainen if (value == null)
0c17af9d3f9323136a94e66605776ed4462a172dTimo Sirainen setProperty(vocabulary.firstD(), vocabulary.nil());
0c17af9d3f9323136a94e66605776ed4462a172dTimo Sirainen else if (value instanceof OWLDataValue )
0c17af9d3f9323136a94e66605776ed4462a172dTimo Sirainen setProperty(vocabulary.firstD(), (OWLDataValue) value );
0c17af9d3f9323136a94e66605776ed4462a172dTimo Sirainen else
0c17af9d3f9323136a94e66605776ed4462a172dTimo Sirainen setProperty(vocabulary.first(), (OWLIndividual) value );
0c17af9d3f9323136a94e66605776ed4462a172dTimo Sirainen }
0c17af9d3f9323136a94e66605776ed4462a172dTimo Sirainen
0c17af9d3f9323136a94e66605776ed4462a172dTimo Sirainen public OWLIndividualList getAll() {
0c17af9d3f9323136a94e66605776ed4462a172dTimo Sirainen OWLIndividualList result = OWLFactory.createIndividualList();
0c17af9d3f9323136a94e66605776ed4462a172dTimo Sirainen for(RDFList list = this; !list.isEmpty(); list = list.getRest())
0c17af9d3f9323136a94e66605776ed4462a172dTimo Sirainen result.add(list.getFirst());
0c17af9d3f9323136a94e66605776ed4462a172dTimo Sirainen
0c17af9d3f9323136a94e66605776ed4462a172dTimo Sirainen return result;
0c17af9d3f9323136a94e66605776ed4462a172dTimo Sirainen }
0c17af9d3f9323136a94e66605776ed4462a172dTimo Sirainen
0c17af9d3f9323136a94e66605776ed4462a172dTimo Sirainen public List getAllValues() {
0c17af9d3f9323136a94e66605776ed4462a172dTimo Sirainen List result = new ArrayList();
0c17af9d3f9323136a94e66605776ed4462a172dTimo Sirainen for(RDFList list = this; !list.isEmpty(); list = list.getRest())
0c17af9d3f9323136a94e66605776ed4462a172dTimo Sirainen result.add(list.getFirstValue());
0c17af9d3f9323136a94e66605776ed4462a172dTimo Sirainen
0c17af9d3f9323136a94e66605776ed4462a172dTimo Sirainen return result;
0c17af9d3f9323136a94e66605776ed4462a172dTimo Sirainen }
0c17af9d3f9323136a94e66605776ed4462a172dTimo Sirainen
0c17af9d3f9323136a94e66605776ed4462a172dTimo Sirainen public OWLIndividual get(int index) {
0c17af9d3f9323136a94e66605776ed4462a172dTimo Sirainen return (OWLIndividual) getValue(index);
0c17af9d3f9323136a94e66605776ed4462a172dTimo Sirainen }
0c17af9d3f9323136a94e66605776ed4462a172dTimo Sirainen
0c17af9d3f9323136a94e66605776ed4462a172dTimo Sirainen public OWLValue getValue(int index) {
0c17af9d3f9323136a94e66605776ed4462a172dTimo Sirainen if(isEmpty())
0c17af9d3f9323136a94e66605776ed4462a172dTimo Sirainen throw new IndexOutOfBoundsException();
0c17af9d3f9323136a94e66605776ed4462a172dTimo Sirainen
0c17af9d3f9323136a94e66605776ed4462a172dTimo Sirainen return (index == 0) ? getFirstValue() : getRest().getValue(index - 1);
0c17af9d3f9323136a94e66605776ed4462a172dTimo Sirainen }
0c17af9d3f9323136a94e66605776ed4462a172dTimo Sirainen
0c17af9d3f9323136a94e66605776ed4462a172dTimo Sirainen public RDFList add(OWLValue item) {
0c17af9d3f9323136a94e66605776ed4462a172dTimo Sirainen if (isEmpty())
0c17af9d3f9323136a94e66605776ed4462a172dTimo Sirainen return insert( item );
0c17af9d3f9323136a94e66605776ed4462a172dTimo Sirainen
0c17af9d3f9323136a94e66605776ed4462a172dTimo Sirainen RDFList rest = getRest();
0c17af9d3f9323136a94e66605776ed4462a172dTimo Sirainen
0c17af9d3f9323136a94e66605776ed4462a172dTimo Sirainen if( rest.isEmpty() )
0c17af9d3f9323136a94e66605776ed4462a172dTimo Sirainen setRest(rest.insert(item));
0c17af9d3f9323136a94e66605776ed4462a172dTimo Sirainen else
0c17af9d3f9323136a94e66605776ed4462a172dTimo Sirainen rest.add(item);
0c17af9d3f9323136a94e66605776ed4462a172dTimo Sirainen
0c17af9d3f9323136a94e66605776ed4462a172dTimo Sirainen return this;
0c17af9d3f9323136a94e66605776ed4462a172dTimo Sirainen }
0c17af9d3f9323136a94e66605776ed4462a172dTimo Sirainen
0c17af9d3f9323136a94e66605776ed4462a172dTimo Sirainen public RDFList insert(OWLValue first) {
0c17af9d3f9323136a94e66605776ed4462a172dTimo Sirainen RDFListImpl list = new RDFListImpl( getOntology().createInstance( vocabulary.List() ) );
0c17af9d3f9323136a94e66605776ed4462a172dTimo Sirainen list.setVocabulary( vocabulary );
0c17af9d3f9323136a94e66605776ed4462a172dTimo Sirainen list.setFirst( first );
0c17af9d3f9323136a94e66605776ed4462a172dTimo Sirainen list.setRest( this );
0c17af9d3f9323136a94e66605776ed4462a172dTimo Sirainen
0c17af9d3f9323136a94e66605776ed4462a172dTimo Sirainen return list;
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen }
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen public RDFList insertAt(int index, OWLValue value) {
16f816d3f3c32ae3351834253f52ddd0212bcbf3Timo Sirainen if( index == 0 )
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen return insert(value);
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen if( index < 0 || isEmpty() )
4dc8837ab37c1a606add1067e21ed868754db4e3Timo Sirainen throw new IndexOutOfBoundsException();
8e5fedd9ada47735be8ac0f8af2a66e8528bd776Timo Sirainen
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen RDFList rest = getRest();
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen return rest.insertAt( index - 1, value );
e8bdf1be00aec45d0c6dd72ad9c8be02a3dfc778Timo Sirainen }
5fb3bff645380804c9db2510940c41db6b8fdb01Timo Sirainen
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen public RDFList remove(OWLValue value) {
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen if ((value == null) || (size() == 0))
e06c0b65c16ccce69bbee009ead14d7d3d17a256Timo Sirainen return this;
2abfef71398a61e5ed97c23a1ceb71461933ccb8Timo Sirainen if (size() == 1)
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen return remove();
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen RDFList rest = this;
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen int i = 0;
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen while (!rest.isEmpty()) {
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen if (rest.getFirstValue().equals(value))
b66a7b7ab0db2c9ad425912d3f21a36fcf76d876Timo Sirainen return removeAt(i);
b66a7b7ab0db2c9ad425912d3f21a36fcf76d876Timo Sirainen i++;
b66a7b7ab0db2c9ad425912d3f21a36fcf76d876Timo Sirainen rest = rest.getRest();
b66a7b7ab0db2c9ad425912d3f21a36fcf76d876Timo Sirainen }
b66a7b7ab0db2c9ad425912d3f21a36fcf76d876Timo Sirainen return this;
b66a7b7ab0db2c9ad425912d3f21a36fcf76d876Timo Sirainen }
b66a7b7ab0db2c9ad425912d3f21a36fcf76d876Timo Sirainen
b66a7b7ab0db2c9ad425912d3f21a36fcf76d876Timo Sirainen public RDFList removeAt(int index) {
cbf7138b49d32fce0645dc6523fbb42cc07cb2faTimo Sirainen if (index == 0)
cbf7138b49d32fce0645dc6523fbb42cc07cb2faTimo Sirainen return remove();
b9b48aaaebf6f72dfab567cda073cde8a7b26598Timo Sirainen
b9b48aaaebf6f72dfab567cda073cde8a7b26598Timo Sirainen if (index < 0 || isEmpty())
992a9e2d6c6ee45d87089ac54267e0198a7802c3Timo Sirainen throw new IndexOutOfBoundsException();
992a9e2d6c6ee45d87089ac54267e0198a7802c3Timo Sirainen
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen setRest(getRest().removeAt(index - 1));
b5e6f6f27c1461f0f9f202615eeb738a645188c3Timo Sirainen return this;
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen }
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen
e30b748edcef3cf3352478bf21fa8f785bdc773aTimo Sirainen public RDFList remove() {
44dc970b18c4e2d06f34cb908924152156e4a45bTimo Sirainen RDFListImpl list = new RDFListImpl(getOntology().createInstance(vocabulary.List()));
44dc970b18c4e2d06f34cb908924152156e4a45bTimo Sirainen list.setVocabulary(vocabulary);
d4dcb9c30dba354cff7af6d303ecef7698194c55Timo Sirainen if (size() > 1) {
1582b4d531679849bba299c17b6ec9402b7df67dTimo Sirainen list.setFirst(getRest().getFirstValue());
1582b4d531679849bba299c17b6ec9402b7df67dTimo Sirainen list.setRest((RDFList) getRest().getRest());
1582b4d531679849bba299c17b6ec9402b7df67dTimo Sirainen } else {
1582b4d531679849bba299c17b6ec9402b7df67dTimo Sirainen return new RDFListImpl(vocabulary.nil());
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen }
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen
9c7e765845357342923e16351181091028e5930fTimo Sirainen return list;
44dc970b18c4e2d06f34cb908924152156e4a45bTimo Sirainen }
44dc970b18c4e2d06f34cb908924152156e4a45bTimo Sirainen
44dc970b18c4e2d06f34cb908924152156e4a45bTimo Sirainen public void set(int index, OWLValue value) {
6bf1543bb7af03324c04e8f9ac8e430f395989aeTimo Sirainen if( isEmpty() )
6bf1543bb7af03324c04e8f9ac8e430f395989aeTimo Sirainen throw new UnsupportedOperationException( "Cannot modify empty list (list:nil)" );
6bf1543bb7af03324c04e8f9ac8e430f395989aeTimo Sirainen
6bf1543bb7af03324c04e8f9ac8e430f395989aeTimo Sirainen int size = size();
6bf1543bb7af03324c04e8f9ac8e430f395989aeTimo Sirainen if( index > size )
6bf1543bb7af03324c04e8f9ac8e430f395989aeTimo Sirainen throw new IndexOutOfBoundsException();
44dc970b18c4e2d06f34cb908924152156e4a45bTimo Sirainen else if( index == size )
b00787191c3c31bebb939c3d00f1fcdb67356c69Timo Sirainen add( value );
44dc970b18c4e2d06f34cb908924152156e4a45bTimo Sirainen else {
44dc970b18c4e2d06f34cb908924152156e4a45bTimo Sirainen RDFList list = this;
44dc970b18c4e2d06f34cb908924152156e4a45bTimo Sirainen for(int i = 0; i < index; i++)
44dc970b18c4e2d06f34cb908924152156e4a45bTimo Sirainen list = list.getRest();
44dc970b18c4e2d06f34cb908924152156e4a45bTimo Sirainen
44dc970b18c4e2d06f34cb908924152156e4a45bTimo Sirainen list.setFirst( value );
ee116df08d0fdab703483e18fe8076b2ef9fd9d7Timo Sirainen }
ee116df08d0fdab703483e18fe8076b2ef9fd9d7Timo Sirainen }
44dc970b18c4e2d06f34cb908924152156e4a45bTimo Sirainen
44dc970b18c4e2d06f34cb908924152156e4a45bTimo Sirainen public Iterator iterator() {
44dc970b18c4e2d06f34cb908924152156e4a45bTimo Sirainen return new RDFListIterator(this);
44dc970b18c4e2d06f34cb908924152156e4a45bTimo Sirainen }
44dc970b18c4e2d06f34cb908924152156e4a45bTimo Sirainen
44dc970b18c4e2d06f34cb908924152156e4a45bTimo Sirainen public int size() {
44dc970b18c4e2d06f34cb908924152156e4a45bTimo Sirainen return isEmpty() ? 0 : 1 + getRest().size();
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen }
e30b748edcef3cf3352478bf21fa8f785bdc773aTimo Sirainen
e30b748edcef3cf3352478bf21fa8f785bdc773aTimo Sirainen public boolean isEmpty() {
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen return equals(vocabulary.nil()) || (getFirstValue() != null && getFirstValue().equals(vocabulary.nil()));
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen }
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen public ListVocabulary getVocabulary() {
b5e6f6f27c1461f0f9f202615eeb738a645188c3Timo Sirainen return vocabulary;
1d2b188f0eedc3cab6e27ceac5425a037f38042eTimo Sirainen }
1d2b188f0eedc3cab6e27ceac5425a037f38042eTimo Sirainen
44dc970b18c4e2d06f34cb908924152156e4a45bTimo Sirainen public void setVocabulary(ListVocabulary vocabulary) {
44dc970b18c4e2d06f34cb908924152156e4a45bTimo Sirainen this.vocabulary = vocabulary;
e30b748edcef3cf3352478bf21fa8f785bdc773aTimo Sirainen }
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen}
0cb2e8eb55e70f8ebe1e8349bdf49e4cbe5d8834Timo Sirainen