001: /*
002: * GeoTools - OpenSource mapping toolkit
003: * http://geotools.org
004: * (C) 2002-2006, GeoTools Project Managment Committee (PMC)
005: *
006: * This library is free software; you can redistribute it and/or
007: * modify it under the terms of the GNU Lesser General Public
008: * License as published by the Free Software Foundation;
009: * version 2.1 of the License.
010: *
011: * This library is distributed in the hope that it will be useful,
012: * but WITHOUT ANY WARRANTY; without even the implied warranty of
013: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
014: * Lesser General Public License for more details.
015: */
016: package org.geotools.data.property;
017:
018: import java.io.BufferedWriter;
019: import java.io.File;
020: import java.io.FileWriter;
021: import java.io.IOException;
022:
023: import org.geotools.data.AttributeWriter;
024: import org.geotools.data.DataUtilities;
025: import org.geotools.feature.AttributeType;
026: import org.geotools.feature.FeatureType;
027:
028: import com.vividsolutions.jts.geom.Geometry;
029:
030: /**
031: * Simple AttributeWriter that produces Java properties files.
032: * <p>
033: * This AttributeWriter is part of the geotools2 DataStore tutorial, and
034: * should be considered a Toy.
035: * </p>
036: * <p>
037: * The content produced witll start with the property "_" with the
038: * value being the typeSpec describing the featureType. Thereafter each line
039: * will represent a Features with FeatureID as the property and the attribtues
040: * as the value separated by | characters.
041: * </p>
042: * <pre><code>
043: * _=id:Integer|name:String|geom:Geometry
044: * fid1=1|Jody|<i>well known text</i>
045: * fid2=2|Brent|<i>well known text</i>
046: * fid3=3|Dave|<i>well known text</i>
047: * </code></pre>
048: * @author jgarnett
049: * @source $URL: http://svn.geotools.org/geotools/tags/2.4.1/demo/property/src/main/java/org/geotools/data/property/PropertyAttributeWriter.java $
050: */
051: public class PropertyAttributeWriter implements AttributeWriter {
052: BufferedWriter writer;
053: FeatureType type;
054:
055: public PropertyAttributeWriter(File file, FeatureType featureType)
056: throws IOException {
057: writer = new BufferedWriter(new FileWriter(file));
058: type = featureType;
059: writer.write("_=");
060: writer.write(DataUtilities.spec(type));
061: }
062:
063: public int getAttributeCount() {
064: return type.getAttributeCount();
065: }
066:
067: public AttributeType getAttributeType(int index)
068: throws ArrayIndexOutOfBoundsException {
069: return type.getAttributeType(index);
070: }
071:
072: public boolean hasNext() throws IOException {
073: return false;
074: }
075:
076: public void next() throws IOException {
077: if (writer == null) {
078: throw new IOException("Writer has been closed");
079: }
080: writer.newLine();
081: writer.flush();
082: }
083:
084: public void echoLine(String line) throws IOException {
085: if (writer == null) {
086: throw new IOException("Writer has been closed");
087: }
088: if (line == null) {
089: return;
090: }
091: writer.write(line);
092: }
093:
094: public void writeFeatureID(String fid) throws IOException {
095: if (writer == null) {
096: throw new IOException("Writer has been closed");
097: }
098: writer.write(fid);
099: }
100:
101: public void write(int position, Object attribute)
102: throws IOException {
103: if (writer == null) {
104: throw new IOException("Writer has been closed");
105: }
106: writer.write(position == 0 ? "=" : "|");
107: if (attribute == null) {
108: // nothing!
109: } else if (attribute instanceof Geometry) {
110: writer.write(((Geometry) attribute).toText());
111: } else {
112: writer.write(attribute.toString());
113: }
114: }
115:
116: public void close() throws IOException {
117: if (writer == null) {
118: throw new IOException("Writer has already been closed");
119: }
120: writer.close();
121: writer = null;
122: type = null;
123: }
124: }
|