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.svg;
19  
20  import java.util.ArrayList;
21  import java.util.HashMap;
22  import java.util.List;
23  import java.util.Map;
24  
25  import org.vectomatic.dom.svg.impl.SVGElement;
26  import org.vectomatic.dom.svg.utils.SVGConstants;
27  import org.vectomatic.svg.edit.client.AppBundle;
28  import org.vectomatic.svg.edit.client.engine.SVGModel;
29  import org.vectomatic.svg.edit.client.model.MetaModel;
30  import org.vectomatic.svg.edit.client.model.ModelCategory;
31  
32  import com.google.gwt.resources.client.ImageResource;
33  
34  /**
35   * Generic model class for svg elements for which a dedicated model has
36   * not yet been written.
37   * @author laaglu
38   */
39  public class SVGGenericElementModel extends SVGNamedElementModel {
40  	protected static Map<String, ImageResource> elementNameToIcon;
41  	static {
42  		elementNameToIcon = new HashMap<String, ImageResource>();
43  		elementNameToIcon.put(SVGConstants.SVG_ALT_GLYPH_DEF_TAG, AppBundle.INSTANCE.altGlyphDef());
44  		elementNameToIcon.put(SVGConstants.SVG_ALT_GLYPH_ITEM_TAG, AppBundle.INSTANCE.altGlyphItem());
45  		elementNameToIcon.put(SVGConstants.SVG_ALT_GLYPH_TAG, AppBundle.INSTANCE.altGlyph());
46  		elementNameToIcon.put(SVGConstants.SVG_ANIMATE_COLOR_TAG, AppBundle.INSTANCE.animateColor());
47  		elementNameToIcon.put(SVGConstants.SVG_ANIMATE_MOTION_TAG, AppBundle.INSTANCE.animateMotion());
48  		elementNameToIcon.put(SVGConstants.SVG_ANIMATE_TAG, AppBundle.INSTANCE.animate());
49  		elementNameToIcon.put(SVGConstants.SVG_ANIMATE_TRANSFORM_TAG, AppBundle.INSTANCE.animateTransform());
50  		elementNameToIcon.put(SVGConstants.SVG_CIRCLE_TAG, AppBundle.INSTANCE.circle());
51  		elementNameToIcon.put(SVGConstants.SVG_CLIP_PATH_TAG, AppBundle.INSTANCE.clipPath());
52  		elementNameToIcon.put(SVGConstants.SVG_COLOR_PROFILE_TAG, AppBundle.INSTANCE.colorProfile());
53  		elementNameToIcon.put(SVGConstants.SVG_CURSOR_TAG, AppBundle.INSTANCE.cursor());
54  		elementNameToIcon.put(SVGConstants.SVG_DEFS_TAG, AppBundle.INSTANCE.defs());
55  		elementNameToIcon.put(SVGConstants.SVG_DESC_TAG, AppBundle.INSTANCE.desc());
56  		elementNameToIcon.put(SVGConstants.SVG_ELLIPSE_TAG, AppBundle.INSTANCE.ellipse());
57  		elementNameToIcon.put(SVGConstants.SVG_FE_BLEND_TAG, AppBundle.INSTANCE.feBlend());
58  		elementNameToIcon.put(SVGConstants.SVG_FE_COLOR_MATRIX_TAG, AppBundle.INSTANCE.feColorMatrix());
59  		elementNameToIcon.put(SVGConstants.SVG_FE_COMPONENT_TRANSFER_TAG, AppBundle.INSTANCE.feComponentTransfer());
60  		elementNameToIcon.put(SVGConstants.SVG_FE_COMPOSITE_TAG, AppBundle.INSTANCE.feComposite());
61  		elementNameToIcon.put(SVGConstants.SVG_FE_CONVOLVE_MATRIX_TAG, AppBundle.INSTANCE.feConvolveMatrix());
62  		elementNameToIcon.put(SVGConstants.SVG_FE_DIFFUSE_LIGHTING_TAG, AppBundle.INSTANCE.feDiffuseLighting());
63  		elementNameToIcon.put(SVGConstants.SVG_FE_DISPLACEMENT_MAP_TAG, AppBundle.INSTANCE.feDisplacementMap());
64  		elementNameToIcon.put(SVGConstants.SVG_FE_DISTANT_LIGHT_TAG, AppBundle.INSTANCE.feDistantLight());
65  		elementNameToIcon.put(SVGConstants.SVG_FE_FLOOD_TAG, AppBundle.INSTANCE.feFlood());
66  		elementNameToIcon.put(SVGConstants.SVG_FE_FUNC_A_TAG, AppBundle.INSTANCE.feFuncA());
67  		elementNameToIcon.put(SVGConstants.SVG_FE_FUNC_B_TAG, AppBundle.INSTANCE.feFuncB());
68  		elementNameToIcon.put(SVGConstants.SVG_FE_FUNC_G_TAG, AppBundle.INSTANCE.feFuncG());
69  		elementNameToIcon.put(SVGConstants.SVG_FE_FUNC_R_TAG, AppBundle.INSTANCE.feFuncR());
70  		elementNameToIcon.put(SVGConstants.SVG_FE_GAUSSIAN_BLUR_TAG, AppBundle.INSTANCE.feGaussianBlur());
71  		elementNameToIcon.put(SVGConstants.SVG_FE_MERGE_NODE_TAG, AppBundle.INSTANCE.feMergeNode());
72  		elementNameToIcon.put(SVGConstants.SVG_FE_MERGE_TAG, AppBundle.INSTANCE.feMerge());
73  		elementNameToIcon.put(SVGConstants.SVG_FE_MORPHOLOGY_TAG, AppBundle.INSTANCE.feMorphology());
74  		elementNameToIcon.put(SVGConstants.SVG_FE_OFFSET_TAG, AppBundle.INSTANCE.feOffset());
75  		elementNameToIcon.put(SVGConstants.SVG_FE_POINT_LIGHT_TAG, AppBundle.INSTANCE.fePointLight());
76  		elementNameToIcon.put(SVGConstants.SVG_FE_SPECULAR_LIGHTING_TAG, AppBundle.INSTANCE.feSpecularLight());
77  		elementNameToIcon.put(SVGConstants.SVG_FE_SPOT_LIGHT_TAG, AppBundle.INSTANCE.feSpotLight());
78  		elementNameToIcon.put(SVGConstants.SVG_FE_TILE_TAG, AppBundle.INSTANCE.feTile());
79  		elementNameToIcon.put(SVGConstants.SVG_FE_TURBULENCE_TAG, AppBundle.INSTANCE.feTurbulence());
80  		elementNameToIcon.put(SVGConstants.SVG_FILTER_TAG, AppBundle.INSTANCE.filter());
81  		elementNameToIcon.put(SVGConstants.SVG_FONT_FACE_FORMAT_TAG, AppBundle.INSTANCE.fontFaceFormat());
82  		elementNameToIcon.put(SVGConstants.SVG_FONT_FACE_NAME_TAG, AppBundle.INSTANCE.fontFaceName());
83  		elementNameToIcon.put(SVGConstants.SVG_FONT_FACE_TAG, AppBundle.INSTANCE.fontFace());
84  		elementNameToIcon.put(SVGConstants.SVG_FONT_FACE_SRC_TAG, AppBundle.INSTANCE.fontFaceSrc());
85  		elementNameToIcon.put(SVGConstants.SVG_FONT_FACE_URI_TAG, AppBundle.INSTANCE.fontFaceUri());
86  		elementNameToIcon.put(SVGConstants.SVG_FONT_TAG, AppBundle.INSTANCE.font());
87  		elementNameToIcon.put(SVGConstants.SVG_FOREIGN_OBJECT_TAG, AppBundle.INSTANCE.foreignObject());
88  		elementNameToIcon.put(SVGConstants.SVG_GLYPH_TAG, AppBundle.INSTANCE.glyph());
89  		elementNameToIcon.put(SVGConstants.SVG_GLYPH_REF_TAG, AppBundle.INSTANCE.glyphRef());
90  		elementNameToIcon.put(SVGConstants.SVG_G_TAG, AppBundle.INSTANCE.g());
91  		elementNameToIcon.put(SVGConstants.SVG_H_KERN_TAG, AppBundle.INSTANCE.hkern());
92  		elementNameToIcon.put(SVGConstants.SVG_IMAGE_TAG, AppBundle.INSTANCE.image());
93  		elementNameToIcon.put(SVGConstants.SVG_LINEAR_GRADIENT_TAG, AppBundle.INSTANCE.linearGradient());
94  		elementNameToIcon.put(SVGConstants.SVG_LINE_TAG, AppBundle.INSTANCE.line());
95  		elementNameToIcon.put(SVGConstants.SVG_MARKER_TAG, AppBundle.INSTANCE.marker());
96  		elementNameToIcon.put(SVGConstants.SVG_MASK_TAG, AppBundle.INSTANCE.mask());
97  		elementNameToIcon.put(SVGConstants.SVG_METADATA_TAG, AppBundle.INSTANCE.metadata());
98  		elementNameToIcon.put(SVGConstants.SVG_MISSING_GLYPH_TAG, AppBundle.INSTANCE.missingGlyph());
99  		elementNameToIcon.put(SVGConstants.SVG_M_PATH_TAG, AppBundle.INSTANCE.mpath());
100 		elementNameToIcon.put(SVGConstants.SVG_PATH_TAG, AppBundle.INSTANCE.path());
101 		elementNameToIcon.put(SVGConstants.SVG_PATTERN_TAG, AppBundle.INSTANCE.pattern());
102 		elementNameToIcon.put(SVGConstants.SVG_POLYGON_TAG, AppBundle.INSTANCE.polygon());
103 		elementNameToIcon.put(SVGConstants.SVG_POLYLINE_TAG, AppBundle.INSTANCE.polyline());
104 		elementNameToIcon.put(SVGConstants.SVG_RADIAL_GRADIENT_TAG, AppBundle.INSTANCE.radialGradient());
105 		elementNameToIcon.put(SVGConstants.SVG_RECT_TAG, AppBundle.INSTANCE.rect());
106 		elementNameToIcon.put(SVGConstants.SVG_SCRIPT_TAG, AppBundle.INSTANCE.script());
107 		elementNameToIcon.put(SVGConstants.SVG_SET_TAG, AppBundle.INSTANCE.set());
108 		elementNameToIcon.put(SVGConstants.SVG_STOP_TAG, AppBundle.INSTANCE.stop());
109 		elementNameToIcon.put(SVGConstants.SVG_STYLE_TAG, AppBundle.INSTANCE.style());
110 		elementNameToIcon.put(SVGConstants.SVG_SVG_TAG, AppBundle.INSTANCE.svg());
111 		elementNameToIcon.put(SVGConstants.SVG_SWITCH_TAG, AppBundle.INSTANCE.switch_());
112 		elementNameToIcon.put(SVGConstants.SVG_SYMBOL_TAG, AppBundle.INSTANCE.symbol());
113 		elementNameToIcon.put(SVGConstants.SVG_TEXT_PATH_TAG, AppBundle.INSTANCE.textPath());
114 		elementNameToIcon.put(SVGConstants.SVG_TEXT_TAG, AppBundle.INSTANCE.text());
115 		elementNameToIcon.put(SVGConstants.SVG_TITLE_TAG, AppBundle.INSTANCE.title());
116 		elementNameToIcon.put(SVGConstants.SVG_T_REF_TAG, AppBundle.INSTANCE.tref());
117 		elementNameToIcon.put(SVGConstants.SVG_T_SPAN_TAG, AppBundle.INSTANCE.tspan());
118 		elementNameToIcon.put(SVGConstants.SVG_USE_TAG, AppBundle.INSTANCE.use());
119 		elementNameToIcon.put(SVGConstants.SVG_VIEW_TAG, AppBundle.INSTANCE.view());
120 		elementNameToIcon.put(SVGConstants.SVG_V_KERN_TAG, AppBundle.INSTANCE.vkern());
121 	}
122 	private MetaModel<SVGElement> metaModel;
123 	public SVGGenericElementModel(SVGModel owner, SVGElement element, SVGElement twin) {
124 		super(owner, element, twin);
125 	}
126 
127 	@Override
128 	public MetaModel<SVGElement> getMetaModel() {
129 		if (metaModel == null) {
130 			metaModel = new MetaModel<SVGElement>();
131 			List<ModelCategory<SVGElement>> categories = new ArrayList<ModelCategory<SVGElement>>();
132 			categories.add(SVGNamedElementModel.getGlobalCategory());
133 			metaModel.init(
134 				null,
135 				elementNameToIcon.get(element.getTagName()), 
136 				categories,
137 				null);
138 
139 		}
140 		return metaModel;
141 	}
142 
143 }