/* Copyright (c) 2001 - 2007 TOPP - www.openplans.org. All rights reserved.
* This code is licensed under the GPL 2.0 license, available at the root
* application directory.
*/
package org.geoserver.web.util.converters;
import org.geotools.geometry.jts.ReferencedEnvelope;
import org.geotools.referencing.CRS;
import org.geotools.util.Converter;
import com.vividsolutions.jts.geom.Envelope;
public class StringBBoxConverter implements Converter {
private static String SEPARATOR = ",";
@SuppressWarnings("unchecked")
public <T> T convert(Object source, Class<T> target) throws Exception {
if (source instanceof ReferencedEnvelope){
if (String.class.isAssignableFrom(target)){
try{
ReferencedEnvelope envelope = (ReferencedEnvelope) source;
StringBuilder str = new StringBuilder();
str.append(envelope.getMinimum(0)).append(SEPARATOR);
str.append(envelope.getMaximum(0)).append(SEPARATOR);
str.append(envelope.getMinimum(1)).append(SEPARATOR);
str.append(envelope.getMaximum(1)).append(SEPARATOR);
str.append(CRS.lookupIdentifier(envelope.getCoordinateReferenceSystem(), true));
return (T)str.toString();
} catch (Exception e){
return null;
}
}
} else {
if (ReferencedEnvelope.class.isAssignableFrom(target)){
String text = (String) source;
String[] parsed = text.split("\\s*" + SEPARATOR + "\\s*");
try{
return (T)(
new ReferencedEnvelope(
new Envelope(
Double.valueOf(parsed[0]),
Double.valueOf(parsed[1]),
Double.valueOf(parsed[2]),
Double.valueOf(parsed[3])
),
CRS.decode(parsed[4])
)
);
} catch (Exception e){
return null;
}
}
}
throw new IllegalArgumentException(
"String List converter expects to convert ReferencedEnvelope <-> string only. (" + source + "), (" + target + ")"
);
}
}