/* This program is free software: you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public License
as published by the Free Software Foundation, either version 3 of
the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>. */
package org.opentripplanner.graph_builder.impl.shapefile;
import java.nio.ByteBuffer;
import java.nio.charset.Charset;
import org.opengis.feature.simple.SimpleFeature;
import org.opentripplanner.graph_builder.services.shapefile.SimpleFeatureConverter;
/**
* Reads a single attribute from a feature and converts it to an object */
public class AttributeFeatureConverter<T> implements SimpleFeatureConverter<T> {
private String _attributeName;
private boolean decodeUTF8 = true;
public AttributeFeatureConverter(String attributeName) {
_attributeName = attributeName;
}
public AttributeFeatureConverter() {
}
public void setAttributeName(String attributeName){
_attributeName = attributeName;
}
public String getAttributeName() {
return _attributeName;
}
@SuppressWarnings({ "unchecked", "deprecation" })
@Override
public T convert(SimpleFeature feature) {
T value = (T) feature.getAttribute(_attributeName);
if (value instanceof String && decodeUTF8) {
String str = (String) value;
//decode UTF-8, irritatingly
Charset charset = Charset.forName("UTF-8");
byte[] bytes = new byte[str.length()];
//we have to use a deprecated method because it's the only one that works.
str.getBytes(0, str.length(), bytes, 0);
ByteBuffer bb = ByteBuffer.wrap(bytes);
value = (T) charset.decode(bb).toString();
}
return value;
}
public boolean isDecodeUTF8() {
return decodeUTF8;
}
public void setDecodeUTF8(boolean decodeUTF8) {
this.decodeUTF8 = decodeUTF8;
}
}