/********************************************** * Copyright (C) 2011 Lukas Laag * This file is part of svgreal. * * svgreal is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * svgreal 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 svgreal. If not, see http://www.gnu.org/licenses/ **********************************************/ package org.vectomatic.svg.edit.client.model; import org.vectomatic.dom.svg.OMSVGLength; import org.vectomatic.dom.svg.OMSVGPaint; import org.vectomatic.dom.svg.OMSVGSVGElement; import org.vectomatic.dom.svg.utils.OMSVGParser; import org.vectomatic.svg.edit.client.model.svg.DashArray; import org.vectomatic.svg.edit.client.model.svg.SVGLength; /** * Interface to convert a data type into another. * @param S * The source data type * @param D * The destination data type * @author laaglu */ public interface IConverter<S,D> { public static final IConverter<String, String> NOP_CONVERTER = new IConverter<String, String> () { @Override public String sourceToDest(String source) { return source; } @Override public String destToSource(String dest) { return dest; } }; public static final IConverter<String, Float> STRING_FLOAT_CONVERTER = new IConverter<String, Float> () { @Override public Float sourceToDest(String source) { return (source != null && source.length() > 0) ? Float.parseFloat(source) : null; } @Override public String destToSource(Float dest) { return dest != null ? Float.toString(dest) : null; } }; public static final IConverter<String, Double> STRING_DOUBLE_CONVERTER = new IConverter<String, Double> () { @Override public Double sourceToDest(String source) { return (source != null && source.length() > 0) ? Double.parseDouble(source) : null; } @Override public String destToSource(Double dest) { return dest != null ? Double.toString(dest) : null; } }; public static final IConverter<String, OMSVGPaint> STRING_SVGPAINT_CONVERTER = new IConverter<String, OMSVGPaint> () { @Override public OMSVGPaint sourceToDest(String source) { return (source != null && source.length() > 0) ? OMSVGParser.parsePaint(source) : null; } @Override public String destToSource(OMSVGPaint dest) { return dest != null ? dest.getCssText() : null; } }; public static final IConverter<String, DashArray> STRING_DASHARRAY_CONVERTER = new IConverter<String, DashArray> () { @Override public DashArray sourceToDest(String source) { return (source != null && source.length() > 0) ? DashArray.parse(source) : null; } @Override public String destToSource(DashArray dest) { return dest != null ? dest.toString() : null; } }; public static final IConverter<String, SVGLength> STRING_LENGTH_CONVERTER = new IConverter<String, SVGLength> () { private OMSVGSVGElement svg = OMSVGParser.currentDocument().createSVGSVGElement(); @Override public SVGLength sourceToDest(String source) { if (source != null) { OMSVGLength l = svg.createSVGLength(); l.setValueAsString(source); return new SVGLength(l); } return null; } @Override public String destToSource(SVGLength dest) { return dest != null ? dest.toString() : null; } }; public D sourceToDest(S source); public S destToSource(D dest); }