View Javadoc

1   /**********************************************
2    * Copyright (C) 2011 Lukas Laag
3    * This file is part of svgreal.
4    * 
5    * svgreal is free software: you can redistribute it and/or modify
6    * it under the terms of the GNU General Public License as published by
7    * the Free Software Foundation, either version 3 of the License, or
8    * (at your option) any later version.
9    * 
10   * svgreal is distributed in the hope that it will be useful,
11   * but WITHOUT ANY WARRANTY; without even the implied warranty of
12   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13   * GNU General Public License for more details.
14   * 
15   * You should have received a copy of the GNU General Public License
16   * along with svgreal.  If not, see http://www.gnu.org/licenses/
17   **********************************************/
18  package org.vectomatic.svg.edit.client.model;
19  
20  import org.vectomatic.dom.svg.OMSVGLength;
21  import org.vectomatic.dom.svg.OMSVGPaint;
22  import org.vectomatic.dom.svg.OMSVGSVGElement;
23  import org.vectomatic.dom.svg.utils.OMSVGParser;
24  import org.vectomatic.svg.edit.client.model.svg.DashArray;
25  import org.vectomatic.svg.edit.client.model.svg.SVGLength;
26  
27  /**
28   * Interface to convert a data type into another.
29   * @param S
30   * The source data type
31   * @param D
32   * The destination data type
33   * @author laaglu
34   */
35  public interface IConverter<S,D> {
36  	public static final IConverter<String, String> NOP_CONVERTER = new IConverter<String, String> () {
37  		@Override
38  		public String sourceToDest(String source) {
39  			return source;
40  		}
41  		@Override
42  		public String destToSource(String dest) {
43  			return dest;
44  		}
45  	};
46  	public static final IConverter<String, Float> STRING_FLOAT_CONVERTER = new IConverter<String, Float> () {
47  		@Override
48  		public Float sourceToDest(String source) {
49  			return (source != null && source.length() > 0) ? Float.parseFloat(source) : null;
50  		}
51  		@Override
52  		public String destToSource(Float dest) {
53  			return dest != null ? Float.toString(dest) : null;
54  		}
55  	};
56  	public static final IConverter<String, Double> STRING_DOUBLE_CONVERTER = new IConverter<String, Double> () {
57  		@Override
58  		public Double sourceToDest(String source) {
59  			return (source != null && source.length() > 0) ? Double.parseDouble(source) : null;
60  		}
61  		@Override
62  		public String destToSource(Double dest) {
63  			return dest != null ? Double.toString(dest) : null;
64  		}
65  	};
66  	public static final IConverter<String, OMSVGPaint> STRING_SVGPAINT_CONVERTER = new IConverter<String, OMSVGPaint> () {
67  		@Override
68  		public OMSVGPaint sourceToDest(String source) {
69  			return (source != null && source.length() > 0) ? OMSVGParser.parsePaint(source) : null;
70  		}
71  		@Override
72  		public String destToSource(OMSVGPaint dest) {
73  			return dest != null ? dest.getCssText() : null;
74  		}
75  	};
76  	public static final IConverter<String, DashArray> STRING_DASHARRAY_CONVERTER = new IConverter<String, DashArray> () {
77  		@Override
78  		public DashArray sourceToDest(String source) {
79  			return (source != null && source.length() > 0) ? DashArray.parse(source) : null;
80  		}
81  
82  		@Override
83  		public String destToSource(DashArray dest) {
84  			return dest != null ? dest.toString() : null;
85  		}
86  		
87  	};
88  	public static final IConverter<String, SVGLength> STRING_LENGTH_CONVERTER = new IConverter<String, SVGLength> () {
89  		private OMSVGSVGElement svg = OMSVGParser.currentDocument().createSVGSVGElement();
90  		@Override
91  		public SVGLength sourceToDest(String source) {
92  			if (source != null) {
93  				OMSVGLength l = svg.createSVGLength();
94  				l.setValueAsString(source);
95  				return new SVGLength(l);
96  			}
97  			return null;
98  		}
99  
100 		@Override
101 		public String destToSource(SVGLength dest) {
102 			return dest != null ? dest.toString() : null;
103 		}
104 		
105 	};
106 	public D sourceToDest(S source);
107 	public S destToSource(D dest);
108 }