001: /*
002: * LICENSE INFORMATION
003: * Copyright 2005-2007 by FZI (http://www.fzi.de).
004: * Licensed under a BSD license (http://www.opensource.org/licenses/bsd-license.php)
005: * <OWNER> = Max Völkel
006: * <ORGANIZATION> = FZI Forschungszentrum Informatik Karlsruhe, Karlsruhe, Germany
007: * <YEAR> = 2007
008: *
009: * Project information at http://semweb4j.org/rdf2go
010: */
011: package org.ontoware.rdf2go.util;
012:
013: import java.util.Iterator;
014:
015: /**
016: * An iterator that converts from "FROM" to "TO", by wrapping an existing
017: * iterator. This is needed when converting statements or resource-uris from one
018: * iterator to another, for the Adapter implementations. You still have to
019: * implement the "convert" method, but the handling of the Java generics is
020: * done.
021: *
022: * @author sauermann <leo.sauermann@dfki.de>
023: * @param <FROM>
024: * The class that is the source of conversion
025: * @param <TO>
026: * The class that is converted to
027: *
028: * Note: as this class is not RDF-specific in any way it is a good candidate for
029: * AIFBcommons.
030: */
031: public class ConvertingIterator<FROM, TO> implements Iterator<TO> {
032:
033: Iterator<FROM> wrapped;
034:
035: Converter<FROM, TO> converter;
036:
037: /**
038: * The iterator takes the wrapped class and converts it to other classes on
039: * the fly. You have to override the "convert" method, though.
040: *
041: * @param wrapped
042: * the wrapped iterator
043: */
044: public ConvertingIterator(Iterator<FROM> wrapped) {
045: this .wrapped = wrapped;
046: }
047:
048: /**
049: * The iterator takes the wrapped class and converts it to other classes on
050: * the fly. Pass a converter that handles the conversion.
051: *
052: * @param wrapped
053: * the wrapped iterator
054: * @param converter
055: * the converter
056: */
057: public ConvertingIterator(Iterator<FROM> wrapped,
058: Converter<FROM, TO> converter) {
059: this .wrapped = wrapped;
060: this .converter = converter;
061: }
062:
063: /**
064: * @see java.util.Iterator#hasNext()
065: */
066: public boolean hasNext() {
067: return this .wrapped.hasNext();
068: }
069:
070: /**
071: * @see java.util.Iterator#next()
072: */
073: public TO next() {
074: FROM next = this .wrapped.next();
075: return convert(next);
076: }
077:
078: /**
079: * convert the passed object to the outgoing object
080: *
081: * @param next
082: * the next object to convert
083: * @return the converted object
084: */
085: public TO convert(FROM next) {
086: if (this .converter == null)
087: throw new RuntimeException(
088: "you have to override the convert() method or pass in a converter.");
089: TO result = this .converter.convert(next);
090: return result;
091: }
092:
093: /**
094: * @see java.util.Iterator#remove()
095: */
096: public void remove() {
097: this.wrapped.remove();
098: }
099:
100: }
|