Revision 4998

View differences:

org.gvsig.legend.vectorfilterexpression.app.mainplugin/tags/org.gvsig.legend.vectorfilterexpression.app.mainplugin-1.0.133/pom.xml
1
<?xml version="1.0" encoding="UTF-8"?>
2

  
3
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4

  
5
    <modelVersion>4.0.0</modelVersion>
6
    <artifactId>org.gvsig.legend.vectorfilterexpression.app.mainplugin</artifactId>
7
    <name>${project.artifactId}</name>
8
    <version>1.0.133</version>
9

  
10
    <parent>
11
        <groupId>org.gvsig</groupId>
12
        <artifactId>org.gvsig.desktop</artifactId>
13
        <version>2.0.324</version>
14
    </parent>
15

  
16
    <url>https://devel.gvsig.org/redmine/projects/gvsig-base-legends</url>
17

  
18
    <scm>
19
        <connection>scm:svn:https://devel.gvsig.org/svn/gvsig-base-legends/org.gvsig.legend.vectorfilterexpression.app.mainplugin/tags/org.gvsig.legend.vectorfilterexpression.app.mainplugin-1.0.133</connection>
20
        <developerConnection>scm:svn:https://devel.gvsig.org/svn/gvsig-base-legends/org.gvsig.legend.vectorfilterexpression.app.mainplugin/tags/org.gvsig.legend.vectorfilterexpression.app.mainplugin-1.0.133</developerConnection>
21
        <url>scm:svn:https://devel.gvsig.org/svn/gvsig-base-legends/org.gvsig.legend.vectorfilterexpression.app.mainplugin/tags/org.gvsig.legend.vectorfilterexpression.app.mainplugin-1.0.133</url>
22
    </scm>
23
    <repositories>
24
        <repository>
25
            <id>gvsig-public-http-repository</id>
26
            <name>gvSIG maven public HTTP repository</name>
27
            <url>http://devel.gvsig.org/m2repo/j2se</url>
28
            <releases>
29
                <enabled>true</enabled>
30
                <updatePolicy>daily</updatePolicy>
31
                <checksumPolicy>warn</checksumPolicy>
32
            </releases>
33
            <snapshots>
34
                <enabled>true</enabled>
35
                <updatePolicy>daily</updatePolicy>
36
                <checksumPolicy>warn</checksumPolicy>
37
            </snapshots>
38
        </repository>
39
    </repositories>
40

  
41
    <description>Vector legend: Filter by expression. For each feature, the symbol is only visible if the expression is evaluated to true.</description>
42
    <build>
43

  
44
        <plugins>
45

  
46
            <plugin>
47
                <artifactId>maven-release-plugin</artifactId>
48
                <configuration>
49
                    <tagBase>https://devel.gvsig.org/svn/gvsig-base-legends/org.gvsig.legend.vectorfilterexpression.app.mainplugin/tags</tagBase>
50
                </configuration>
51
            </plugin>
52

  
53
        </plugins>
54
    </build>
55
    <dependencies>
56
        <dependency>
57
            <groupId>org.gvsig</groupId>
58
            <artifactId>org.gvsig.app.mainplugin</artifactId>
59
        </dependency>
60
        <dependency>
61
            <groupId>org.gvsig</groupId>
62
            <artifactId>org.gvsig.andami</artifactId>
63
        </dependency>
64
        <dependency>
65
            <groupId>org.gvsig</groupId>
66
            <artifactId>org.gvsig.symbology.lib.api</artifactId>
67
        </dependency>
68
        <dependency>
69
            <groupId>org.gvsig</groupId>
70
            <artifactId>org.gvsig.symbology.lib.impl</artifactId>
71
        </dependency>
72
        <dependency>
73
            <groupId>org.gvsig</groupId>
74
            <artifactId>org.gvsig.symbology.swing.api</artifactId>
75
        </dependency>
76
        <dependency>
77
            <groupId>org.gvsig</groupId>
78
            <artifactId>org.gvsig.fmap.mapcontext.api</artifactId>
79
        </dependency>
80
        <dependency>
81
            <groupId>org.gvsig</groupId>
82
            <artifactId>org.gvsig.utils</artifactId>
83
        </dependency>
84
        <dependency>
85
            <groupId>org.gvsig</groupId>
86
            <artifactId>org.gvsig.fmap.dal.api</artifactId>
87
        </dependency>
88

  
89
        <dependency>
90
            <groupId>org.gvsig</groupId>
91
            <artifactId>org.gvsig.i18n</artifactId>
92
        </dependency>
93

  
94
        <dependency>
95
            <groupId>org.gvsig</groupId>
96
            <artifactId>org.gvsig.fmap.geometry.api</artifactId>
97
        </dependency>
98

  
99
        <dependency>
100
            <groupId>org.gvsig</groupId>
101
            <artifactId>org.gvsig.tools.lib</artifactId>
102
        </dependency>
103
        <dependency>
104
            <groupId>org.gvsig</groupId>
105
            <artifactId>org.gvsig.ui</artifactId>
106
        </dependency>
107
        <dependency>
108
            <groupId>org.gvsig</groupId>
109
            <artifactId>org.gvsig.projection.api</artifactId>
110
        </dependency>
111
        <dependency>
112
            <groupId>org.gvsig</groupId>
113
            <artifactId>org.gvsig.metadata.lib.basic.api</artifactId>
114
        </dependency>
115

  
116
        <dependency>
117
            <groupId>org.gvsig</groupId>
118
            <artifactId>org.gvsig.compat.api</artifactId>
119
        </dependency>
120

  
121
        <dependency>
122
            <groupId>org.gvsig</groupId>
123
            <artifactId>org.gvsig.tools.evaluator.sqljep</artifactId>
124
        </dependency>
125

  
126
        <dependency>
127
            <groupId>org.gvsig</groupId>
128
            <artifactId>org.gvsig.tools.lib</artifactId>
129
            <scope>compile</scope>
130
        </dependency>
131

  
132
        <dependency>
133
            <groupId>org.gvsig</groupId>
134
            <artifactId>org.gvsig.tools.swing.api</artifactId>
135
        </dependency>
136

  
137
        <!--
138
        <dependency>
139
                <groupId>bsf</groupId>
140
                <artifactId>bsf</artifactId>
141
    <scope>compile</scope>
142
        </dependency>
143
        -->
144

  
145
    </dependencies>
146

  
147
    <properties>
148
        <gvsig.package.info.name>Vector legend: Filter by expression</gvsig.package.info.name>
149
        <gvsig.package.info.categories>View,Vector,Symbology</gvsig.package.info.categories>
150
        <gvsig.package.info.official>true</gvsig.package.info.official>
151
        <gvsig.package.info.dependencies>required: org.gvsig.app.mainplugin -ge 2.1.0-A</gvsig.package.info.dependencies>
152
        <gvsig.package.info.state>testing</gvsig.package.info.state>
153
        <gvsig.package.info.poolURL>https://devel.gvsig.org/download/projects/gvsig-base-legends/pool</gvsig.package.info.poolURL>
154
    </properties>
155

  
156

  
157
</project>
org.gvsig.legend.vectorfilterexpression.app.mainplugin/tags/org.gvsig.legend.vectorfilterexpression.app.mainplugin-1.0.133/buildNumber.properties
1
#Tue May 11 01:12:21 CEST 2021
2
buildNumber=137
org.gvsig.legend.vectorfilterexpression.app.mainplugin/tags/org.gvsig.legend.vectorfilterexpression.app.mainplugin-1.0.133/src/main/assembly/gvsig-plugin-package.xml
1
<!--
2

  
3
    gvSIG. Desktop Geographic Information System.
4

  
5
    Copyright (C) 2007-2013 gvSIG Association.
6

  
7
    This program is free software; you can redistribute it and/or
8
    modify it under the terms of the GNU General Public License
9
    as published by the Free Software Foundation; either version 3
10
    of the License, or (at your option) any later version.
11

  
12
    This program is distributed in the hope that it will be useful,
13
    but WITHOUT ANY WARRANTY; without even the implied warranty of
14
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15
    GNU General Public License for more details.
16

  
17
    You should have received a copy of the GNU General Public License
18
    along with this program; if not, write to the Free Software
19
    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
20
    MA  02110-1301, USA.
21

  
22
    For any additional information, do not hesitate to contact us
23
    at info AT gvsig.com, or visit our website www.gvsig.com.
24

  
25
-->
26
<assembly>
27
  <id>gvsig-plugin-package</id>
28
  <formats>
29
    <format>zip</format>
30
  </formats>
31
  <baseDirectory>${project.artifactId}</baseDirectory>
32
  <includeBaseDirectory>true</includeBaseDirectory>
33
  <files>
34
    <file>
35
      <source>target/${project.artifactId}-${project.version}.jar</source>
36
      <outputDirectory>lib</outputDirectory>
37
    </file>
38
    <file>
39
      <source>target/package.info</source>
40
    </file>
41
  </files>
42

  
43
  <fileSets>
44
    <fileSet>
45
      <directory>src/main/resources-plugin</directory>
46
      <outputDirectory>.</outputDirectory>
47
    </fileSet>
48
  </fileSets>
49

  
50
<!-- No dependencies
51
  <dependencySets>
52
    <dependencySet>
53
      <useProjectArtifact>false</useProjectArtifact>
54
      <useTransitiveDependencies>false</useTransitiveDependencies>
55
      <outputDirectory>lib</outputDirectory>
56
      <includes>
57
		<include>...</include>
58
      </includes>
59
    </dependencySet>
60
  </dependencySets>
61
-->
62

  
63
</assembly>
64

  
org.gvsig.legend.vectorfilterexpression.app.mainplugin/tags/org.gvsig.legend.vectorfilterexpression.app.mainplugin-1.0.133/src/main/java/org/gvsig/symbology/fmap/rendering/VectorFilterExpressionLegend.java
1
/**
2
 * gvSIG. Desktop Geographic Information System.
3
 *
4
 * Copyright (C) 2007-2020 gvSIG Association.
5
 *
6
 * This program is free software; you can redistribute it and/or
7
 * modify it under the terms of the GNU General Public License
8
 * as published by the Free Software Foundation; either version 3
9
 * of the License, or (at your option) any later version.
10
 *
11
 * This program is distributed in the hope that it will be useful,
12
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
 * GNU General Public License for more details.
15
 *
16
 * You should have received a copy of the GNU General Public License
17
 * along with this program; if not, write to the Free Software
18
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
19
 * MA  02110-1301, USA.
20
 *
21
 * For any additional information, do not hesitate to contact us
22
 * at info AT gvsig.com, or visit our website www.gvsig.com.
23
 */
24
package org.gvsig.symbology.fmap.rendering;
25

  
26

  
27
import java.util.ArrayList;
28
import org.gvsig.fmap.dal.DALLocator;
29
import org.gvsig.fmap.dal.DataManager;
30
import org.gvsig.fmap.dal.exception.InitializeException;
31

  
32
import org.slf4j.Logger;
33
import org.slf4j.LoggerFactory;
34

  
35
import org.gvsig.fmap.dal.feature.Feature;
36
import org.gvsig.fmap.geom.Geometry;
37
import org.gvsig.fmap.geom.GeometryLocator;
38
import org.gvsig.fmap.geom.GeometryManager;
39
import org.gvsig.fmap.mapcontext.MapContextLocator;
40
import org.gvsig.fmap.mapcontext.MapContextManager;
41
import org.gvsig.fmap.mapcontext.rendering.legend.events.SymbolLegendEvent;
42
import org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol;
43
import org.gvsig.fmap.mapcontext.rendering.symbols.SymbolManager;
44
import org.gvsig.i18n.Messages;
45
import org.gvsig.symbology.fmap.mapcontext.rendering.legend.driver.impl.PersistenceBasedLegendWriter;
46
import org.gvsig.symbology.fmap.mapcontext.rendering.legend.impl.AbstractClassifiedVectorLegend;
47
import org.gvsig.tools.ToolsLocator;
48
import org.gvsig.tools.dynobject.DynStruct;
49
import org.gvsig.tools.evaluator.Evaluator;
50
import org.gvsig.tools.evaluator.EvaluatorData;
51
import org.gvsig.tools.persistence.PersistenceManager;
52
import org.gvsig.tools.persistence.PersistentState;
53
import org.gvsig.tools.persistence.exception.PersistenceException;
54
import org.gvsig.tools.util.Callable;
55
import org.gvsig.tools.util.Caller;
56
import org.gvsig.tools.util.impl.DefaultCaller;
57

  
58

  
59
/**
60
 *
61
 * Implements a vector legend which represents the elements of a layer
62
 * depending on the value of an expression. That is, if the expression is
63
 * evaluated to true, then the symbol associated to the expression is painted.
64
 * In other case it is not showed.
65
 *
66
 * If the expression result is a string, it is considered false if
67
 * it is the empty string "", true otherwise.
68
 *
69
 * If the expression result is numeric, it is considered false
70
 * if it is zero, and true otherwise.
71
 *
72
 * In other cases, it is considered false if the result is null and true
73
 * otherwise.
74
 *
75
 * @author gvSIG Team
76
 */
77
public class VectorFilterExpressionLegend
78
extends AbstractClassifiedVectorLegend  {
79

  
80
    private static final Logger logger = LoggerFactory.getLogger(
81
        VectorFilterExpressionLegend.class);
82

  
83
    public static final String
84
    FILTER_EXPRESSION_LEGEND_PERSISTENCE_DEFINITION_NAME =
85
    "FILTER_EXPRESSION_LEGEND_PERSISTENCE_DEFINITION_NAME";
86

  
87
    public static final String
88
    FILTER_EXPRESSION_LEGEND_NAME = "FILTER_EXPRESSION_LEGEND_NAME";
89

  
90
    public static final String I18N_DEFAULT = Messages.getText("default_value");
91
    public static final String NON_I18N_DEFAULT = Messages.getText("Default");
92

  
93
	private int shapeType;
94
	private ISymbol defaultSymbol;
95

  
96
	private boolean useDefaultSymbol = false;
97

  
98
	private long error_msg_count = 0;
99

  
100
	private ArrayList<Item> newSymbols = new ArrayList<Item>() {
101
		private static final long serialVersionUID = 1L;
102

  
103
		public int indexOf(String expr) {
104
			return super.indexOf(new Item(expr, null));
105
		}
106
	};
107

  
108

  
109
	private class Item implements Cloneable {
110

  
111
		private ISymbol sym;
112
		private Evaluator evaluator;
113

  
114
		public Item(String expression, ISymbol sym) {
115
			this.sym = sym;
116
      DataManager dataManager = DALLocator.getDataManager();
117
      try {
118
        evaluator = dataManager.createFilter(expression);
119
      } catch (InitializeException ex) {
120
        evaluator = null;
121
      }
122
		}
123

  
124
		public boolean equals(Object obj) {
125
			if (obj == null) return false;
126
			if (!obj.getClass().equals(Item.class)) return false;
127
			return this.evaluator.getSQL().equals(
128
			    ((Item) obj).evaluator.getSQL()
129
			    );
130
		}
131

  
132
		public String getStringExpression() {
133
			return evaluator.getSQL();
134
		}
135

  
136
		public Evaluator getEvaluator() {
137
			return evaluator;
138
		}
139

  
140
		public Object clone() {
141

  
142
		    ISymbol clonesym = null;
143
		    try {
144
                clonesym = (ISymbol) this.sym.clone();
145
            } catch (CloneNotSupportedException e) {
146
                logger.info("Error: unable to clone symbol.", e);
147
                clonesym = this.sym;
148
            }
149
		    return new Item(getStringExpression(), clonesym);
150
		}
151
	}
152

  
153
    public VectorFilterExpressionLegend() {
154
        this.setClassifyingFieldNames(new String[0]);
155
        this.setClassifyingFieldTypes(new int[0]);
156
    }
157

  
158
	public ISymbol getSymbolByFeature(Feature featu) {
159

  
160
	    EvaluatorData evda = featu.getEvaluatorData();
161

  
162
		ISymbol returnSymbol = null;
163
		Object result = null;
164
		String expr = null;
165

  
166
		try {
167

  
168
			for (int i = 0; i < newSymbols.size(); i++) {
169

  
170
				Evaluator eval = newSymbols.get(i).getEvaluator();
171
				expr = eval.getSQL();
172

  
173
                if (expr.equalsIgnoreCase(VectorFilterExpressionLegend.I18N_DEFAULT)){
174
                    /*
175
                     * Skip default item
176
                     */
177
                    continue;
178
                }
179

  
180
				result = eval.evaluate(evda);
181
				if (isConsideredTrue(result)) {
182
                    returnSymbol = newSymbols.get(i).sym;
183
                    if (returnSymbol != null) {
184
                        return returnSymbol;
185
                    }
186
				}
187
			}
188
		} catch (Exception e) {
189

  
190
		    if (error_msg_count % 1000 == 0) {
191
		        logger.info("Error (msg every 1000 occurrences) while getting symbol in VectorFilterExpressionLegend", e);
192
		        error_msg_count = 0;
193
		    }
194
		    error_msg_count++;
195
		}
196

  
197
		if (useDefaultSymbol)
198
			return getDefaultSymbol();
199

  
200
		return null;
201
	}
202

  
203
	/**
204
	 * Tells whether the input object is considered true.
205
	 * Basically, it is false if it has an empty value
206
	 * (FALSE, null, 0, "")
207
	 *
208
     * @param result
209
     * @return
210
     */
211
    private boolean isConsideredTrue(Object res) {
212

  
213
        if (res == null) {
214
            return false;
215
        }
216

  
217
        if (res instanceof Boolean) {
218
            return ((Boolean) res).booleanValue();
219
        }
220

  
221
        if (res instanceof Number) {
222
            return ((Number) res).doubleValue() != 0d;
223
        }
224

  
225
        if (res instanceof String) {
226
            return ((String) res).length() > 0;
227
        }
228

  
229
        // Because it is not null
230
        return true;
231
    }
232

  
233
	public void addSymbol(Object key, ISymbol symbol) {
234
		newSymbols.add(new Item((String)key.toString(),
235
				symbol));
236
	}
237

  
238
	public void clear() {
239
		newSymbols.clear();
240
	}
241

  
242
	public void resetItems() {
243
	    newSymbols = new ArrayList<Item>() {
244
            private static final long serialVersionUID = 1L;
245

  
246
            public int indexOf(String expr) {
247
                return super.indexOf(new Item(expr, null));
248
            }
249
	    };
250
	}
251

  
252
	public void delSymbol(Object key) {
253
		ISymbol mySymbol = null;
254
		for (int i = 0; i < newSymbols.size(); i++) {
255
			if (newSymbols.get(i).evaluator.getSQL().equals(key))
256
				newSymbols.remove(i);
257
		}
258
		fireClassifiedSymbolChangeEvent(new SymbolLegendEvent(mySymbol,null));
259
	}
260

  
261

  
262
	public void replace(ISymbol oldSymbol, ISymbol newSymbol) {
263

  
264
		for (int i = 0; i < newSymbols.size(); i++) {
265
			if (newSymbols.get(i).sym.equals(oldSymbol))
266
				newSymbols.get(i).sym = newSymbol;
267
		}
268

  
269
		fireClassifiedSymbolChangeEvent(new SymbolLegendEvent(oldSymbol,newSymbol));
270
	}
271

  
272

  
273
	public String[] getDescriptions() {
274
		String[] descriptions = new String[newSymbols.size()];
275
		ISymbol[] auxSym = getSymbols();
276

  
277
		for (int i = 0; i < descriptions.length; i++)
278
			descriptions[i] = auxSym[i].getDescription();
279

  
280
		return descriptions;
281
	}
282

  
283
	public ISymbol[] getSymbols() {
284

  
285
		if (newSymbols != null) {
286
			ISymbol[] mySymbols = new ISymbol[newSymbols.size()];
287
			for (int i = 0; i < newSymbols.size(); i++) {
288
				mySymbols[i] = newSymbols.get(i).sym;
289
			}
290
			return mySymbols;
291
		}
292
		return null;
293
	}
294

  
295

  
296

  
297
	public ISymbol getDefaultSymbol() {
298
		if(defaultSymbol==null) {
299

  
300
		    defaultSymbol = MapContextLocator.getSymbolManager(
301
		        ).createSymbol(shapeType);
302
			fireDefaultSymbolChangedEvent(new SymbolLegendEvent(null, defaultSymbol));
303
		}
304
		return defaultSymbol;
305
	}
306

  
307

  
308
	public String getClassName() {
309
		return getClass().getName();
310
	}
311

  
312

  
313
	public int getShapeType() {
314
		return shapeType;
315
	}
316

  
317
	public boolean isUseDefaultSymbol() {
318
		return useDefaultSymbol;
319
	}
320

  
321
	public void setDefaultSymbol(ISymbol s) throws IllegalArgumentException {
322
		if (s == null) throw new NullPointerException("Default symbol cannot be null");
323
		ISymbol old = defaultSymbol;
324
		defaultSymbol = s;
325
		fireDefaultSymbolChangedEvent(new SymbolLegendEvent(old, defaultSymbol));
326
	}
327

  
328
	public void setShapeType(int shapeType) {
329
		if (this.shapeType != shapeType) {
330

  
331
		    ISymbol sym = MapContextLocator.getSymbolManager(
332
		        ).createSymbol(shapeType);
333
			setDefaultSymbol(sym);
334
			this.shapeType = shapeType;
335
		}
336
	}
337

  
338
	public void useDefaultSymbol(boolean b) {
339
		useDefaultSymbol = b;
340
	}
341

  
342
	public Object[] getValues() {
343
		if (newSymbols != null) {
344
			Object[] myObjects = new Object[newSymbols.size()];
345
			for (int i = 0; i < newSymbols.size(); i++) {
346
				myObjects[i] = newSymbols.get(i).getStringExpression();
347
			}
348
			return myObjects;
349
		}
350
		return null;
351
	}
352

  
353
    public static boolean isPolygonal(int ty) {
354
        GeometryManager geomManager = GeometryLocator.getGeometryManager();
355
        return geomManager.isSubtype(Geometry.TYPES.MULTISURFACE, ty) || 
356
            geomManager.isSubtype(Geometry.TYPES.SURFACE, ty);
357
    }
358

  
359

  
360
    public static boolean isLinear(int ty) {
361
        GeometryManager geomManager = GeometryLocator.getGeometryManager();
362
        return geomManager.isSubtype(Geometry.TYPES.MULTICURVE, ty) || 
363
            geomManager.isSubtype(Geometry.TYPES.CURVE, ty);
364
    }
365
    
366
    public static boolean isPoint(int ty) {
367
        GeometryManager geomManager = GeometryLocator.getGeometryManager();
368
        return geomManager.isSubtype(Geometry.TYPES.MULTIPOINT, ty) || 
369
            geomManager.isSubtype(Geometry.TYPES.POINT, ty);
370
    }
371
    
372
    public void removeDefaultSymbol() {
373

  
374
    }
375

  
376
    // =============================
377

  
378
    public static class RegisterPersistence implements Callable {
379

  
380
        public Object call() throws Exception {
381

  
382
            PersistenceManager manager = ToolsLocator.getPersistenceManager();
383
            if (manager.getDefinition(
384
                FILTER_EXPRESSION_LEGEND_PERSISTENCE_DEFINITION_NAME) == null) {
385
                DynStruct definition = manager
386
                    .addDefinition(VectorFilterExpressionLegend.class,
387
                        FILTER_EXPRESSION_LEGEND_PERSISTENCE_DEFINITION_NAME,
388
                        FILTER_EXPRESSION_LEGEND_PERSISTENCE_DEFINITION_NAME
389
                        + " Persistence definition", null, null);
390

  
391
                definition.extend(manager.getDefinition(
392
                    AbstractClassifiedVectorLegend
393
                    .CLASSIFIED_VECTOR_LEGEND_PERSISTENCE_DEFINITION_NAME));
394

  
395
                definition.addDynFieldBoolean("useDefaultSymbol")
396
                .setMandatory(true);
397
                definition.addDynFieldObject("defaultSymbol")
398
                .setClassOfValue(ISymbol.class).setMandatory(true);
399
                definition.addDynFieldInt("shapeType")
400
                .setMandatory(true);
401

  
402
                definition.addDynFieldArray("itemSymbolArray")
403
                .setClassOfItems(ISymbol.class);
404
                definition.addDynFieldArray("itemStringArray")
405
                .setClassOfItems(String.class);
406

  
407
            }
408
            return Boolean.TRUE;
409
        }
410

  
411
    }
412

  
413
    public static class RegisterLegend implements Callable {
414

  
415
        public Object call() throws Exception {
416
            MapContextManager manager =
417
                MapContextLocator.getMapContextManager();
418

  
419
            manager.registerLegend(
420
                FILTER_EXPRESSION_LEGEND_NAME,
421
                VectorFilterExpressionLegend.class);
422

  
423
            return Boolean.TRUE;
424
        }
425

  
426
    }
427

  
428
    public void saveToState(PersistentState state) throws PersistenceException {
429

  
430
        super.saveToState(state);
431
        state.set("useDefaultSymbol", this.isUseDefaultSymbol());
432
        state.set("defaultSymbol", this.getDefaultSymbol());
433
        state.set("shapeType", this.getShapeType());
434

  
435
        ISymbol[] syms = this.getSymbols();
436
        if (syms == null) {
437
            syms = new ISymbol[0];
438
        }
439
        Object[] vals = this.getValues();
440
        String[] vals_str = null;
441
        if (vals == null) {
442
            vals_str = new String[0];
443
        } else {
444
            vals_str = new String[vals.length];
445
            for (int i=0; i<vals.length; i++) {
446
                String aux = ((vals[i] == null) ? null : vals[i].toString());
447
                // Prevents saving localized version of 'Default'
448
                aux = translateDefault(aux, false);
449
                vals_str[i] = aux;
450
            }
451
        }
452

  
453
        state.set("itemSymbolArray", syms);
454
        state.set("itemStringArray", vals_str);
455

  
456
    }
457

  
458
    public void loadFromState(PersistentState state)
459
        throws PersistenceException {
460

  
461
        super.loadFromState(state);
462

  
463
        this.setShapeType(state.getInt("shapeType"));
464
        Boolean b = state.getBoolean("useDefaultSymbol");
465
        this.useDefaultSymbol(b);
466
        ISymbol defsym = (ISymbol) state.get("defaultSymbol");
467
        this.setDefaultSymbol(defsym);
468

  
469
        String[] strs = state.getStringArray("itemStringArray");
470
        ISymbol[] syms = (ISymbol[]) state.getArray("itemSymbolArray",
471
            ISymbol.class);
472

  
473
        if (strs.length != syms.length) {
474
            logger.info("VectorFilterExpressionLegend - load state - Different size in arrays: " + strs.length + ", " + syms.length);
475
        }
476
        int nmin = Math.min(strs.length, syms.length);
477
        for (int i=0; i<nmin; i++) {
478
            String aux = strs[i];
479
            aux = translateDefault(aux, true);
480
            this.addSymbol(aux, syms[i]);
481
        }
482
    }
483

  
484
    /**
485
     * Utility method to (un)translate the word 'Default'
486
     * @param aux
487
     * @param forward
488
     * If TRUE, then translate (Default -> Por defecto)
489
     * If FALSE then untranslate (Por defecto -> Default)
490
     * @return
491
     */
492
    private String translateDefault(String aux, boolean forward) {
493

  
494
        if (aux == null) {
495
            return null;
496
        }
497
        if (forward && aux.compareTo(NON_I18N_DEFAULT) == 0) {
498
            return I18N_DEFAULT;
499
        }
500
        if (!forward && aux.compareTo(I18N_DEFAULT) == 0) {
501
            return NON_I18N_DEFAULT;
502
        }
503
        return aux;
504
    }
505

  
506

  
507
    public Object clone() throws CloneNotSupportedException {
508

  
509
        VectorFilterExpressionLegend resp =
510
            (VectorFilterExpressionLegend) super.clone();
511

  
512
        Object[] vals = this.getValues();
513
        ISymbol[] syms = this.getSymbols();
514
        if (vals != null && syms != null) {
515

  
516
            resp.resetItems();
517

  
518
            int n = Math.min(vals.length, syms.length);
519
            for (int i=0; i<n; i++) {
520
                resp.addSymbol(
521
                    vals[i],
522
                    (ISymbol) syms[i].clone());
523
            }
524
        }
525
        ISymbol sym = this.getDefaultSymbol();
526
        sym = (ISymbol) sym.clone();
527
        resp.setDefaultSymbol(sym);
528
        return resp;
529
    }
530

  
531

  
532
  public static void selfRegister() {
533
    Caller caller = new DefaultCaller();
534

  
535
    caller.add(new VectorFilterExpressionLegend.RegisterLegend());
536
    caller.add(new VectorFilterExpressionLegend.RegisterPersistence());
537

  
538
    if (!caller.call()) {
539
      throw new RuntimeException(
540
              "Can't register VectorFilterExpressionLegend",
541
              caller.getException()
542
      );
543
    }
544
    MapContextManager mcoman = MapContextLocator.getMapContextManager();
545
    mcoman.registerLegendWriter(
546
        VectorFilterExpressionLegend.class,
547
            SymbolManager.LEGEND_FILE_EXTENSION.substring(1),
548
            PersistenceBasedLegendWriter.class);
549
    
550
    
551
  }
552

  
553
}
org.gvsig.legend.vectorfilterexpression.app.mainplugin/tags/org.gvsig.legend.vectorfilterexpression.app.mainplugin-1.0.133/src/main/java/org/gvsig/symbology/gui/layerproperties/ExpressionSymbolPanelView.java
1
package org.gvsig.symbology.gui.layerproperties;
2

  
3
import com.jeta.forms.components.separator.TitledSeparator;
4
import com.jeta.open.i18n.I18NUtils;
5
import com.jgoodies.forms.layout.CellConstraints;
6
import com.jgoodies.forms.layout.FormLayout;
7
import java.awt.BorderLayout;
8
import java.awt.ComponentOrientation;
9
import java.awt.Container;
10
import java.awt.Dimension;
11
import javax.swing.Box;
12
import javax.swing.ImageIcon;
13
import javax.swing.JButton;
14
import javax.swing.JFrame;
15
import javax.swing.JPanel;
16
import javax.swing.JScrollPane;
17
import javax.swing.JTextArea;
18

  
19

  
20
public class ExpressionSymbolPanelView extends JPanel
21
{
22
   TitledSeparator lblExpression = new TitledSeparator();
23
   TitledSeparator lblSymbolAndDescriptor = new TitledSeparator();
24
   JPanel pnlExpression = new JPanel();
25
   JButton btnSymbolPreview = new JButton();
26
   JTextArea txtSymbolDescription = new JTextArea();
27

  
28
   /**
29
    * Default constructor
30
    */
31
   public ExpressionSymbolPanelView()
32
   {
33
      initializePanel();
34
   }
35

  
36
   /**
37
    * Adds fill components to empty cells in the first row and first column of the grid.
38
    * This ensures that the grid spacing will be the same as shown in the designer.
39
    * @param cols an array of column indices in the first row where fill components should be added.
40
    * @param rows an array of row indices in the first column where fill components should be added.
41
    */
42
   void addFillComponents( Container panel, int[] cols, int[] rows )
43
   {
44
      Dimension filler = new Dimension(10,10);
45

  
46
      boolean filled_cell_11 = false;
47
      CellConstraints cc = new CellConstraints();
48
      if ( cols.length > 0 && rows.length > 0 )
49
      {
50
         if ( cols[0] == 1 && rows[0] == 1 )
51
         {
52
            /** add a rigid area  */
53
            panel.add( Box.createRigidArea( filler ), cc.xy(1,1) );
54
            filled_cell_11 = true;
55
         }
56
      }
57

  
58
      for( int index = 0; index < cols.length; index++ )
59
      {
60
         if ( cols[index] == 1 && filled_cell_11 )
61
         {
62
            continue;
63
         }
64
         panel.add( Box.createRigidArea( filler ), cc.xy(cols[index],1) );
65
      }
66

  
67
      for( int index = 0; index < rows.length; index++ )
68
      {
69
         if ( rows[index] == 1 && filled_cell_11 )
70
         {
71
            continue;
72
         }
73
         panel.add( Box.createRigidArea( filler ), cc.xy(1,rows[index]) );
74
      }
75

  
76
   }
77

  
78
   /**
79
    * Helper method to load an image file from the CLASSPATH
80
    * @param imageName the package and name of the file to load relative to the CLASSPATH
81
    * @return an ImageIcon instance with the specified image file
82
    * @throws IllegalArgumentException if the image resource cannot be loaded.
83
    */
84
   public ImageIcon loadImage( String imageName )
85
   {
86
      try
87
      {
88
         ClassLoader classloader = getClass().getClassLoader();
89
         java.net.URL url = classloader.getResource( imageName );
90
         if ( url != null )
91
         {
92
            ImageIcon icon = new ImageIcon( url );
93
            return icon;
94
         }
95
      }
96
      catch( Exception e )
97
      {
98
         e.printStackTrace();
99
      }
100
      throw new IllegalArgumentException( "Unable to load image: " + imageName );
101
   }
102

  
103
   /**
104
    * Method for recalculating the component orientation for 
105
    * right-to-left Locales.
106
    * @param orientation the component orientation to be applied
107
    */
108
   public void applyComponentOrientation( ComponentOrientation orientation )
109
   {
110
      // Not yet implemented...
111
      // I18NUtils.applyComponentOrientation(this, orientation);
112
      super.applyComponentOrientation(orientation);
113
   }
114

  
115
   public JPanel createPanel()
116
   {
117
      JPanel jpanel1 = new JPanel();
118
      FormLayout formlayout1 = new FormLayout("FILL:4DLU:NONE,FILL:DEFAULT:GROW(1.0),FILL:4DLU:NONE","CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,FILL:50PX:GROW(1.0),CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,FILL:DEFAULT:NONE,CENTER:2DLU:NONE");
119
      CellConstraints cc = new CellConstraints();
120
      jpanel1.setLayout(formlayout1);
121

  
122
      lblExpression.setName("lblExpression");
123
      lblExpression.setText("_Expression");
124
      jpanel1.add(lblExpression,cc.xy(2,2));
125

  
126
      lblSymbolAndDescriptor.setName("lblSymbolAndDescriptor");
127
      lblSymbolAndDescriptor.setText("_Symbol_and_description");
128
      jpanel1.add(lblSymbolAndDescriptor,cc.xy(2,6));
129

  
130
      pnlExpression.setName("pnlExpression");
131
      jpanel1.add(pnlExpression,cc.xy(2,4));
132

  
133
      jpanel1.add(createPanel1(),cc.xy(2,8));
134
      addFillComponents(jpanel1,new int[]{ 1,2,3 },new int[]{ 1,2,3,4,5,6,7,8,9 });
135
      return jpanel1;
136
   }
137

  
138
   public JPanel createPanel1()
139
   {
140
      JPanel jpanel1 = new JPanel();
141
      FormLayout formlayout1 = new FormLayout("FILL:35PX:NONE,FILL:4DLU:NONE,FILL:DEFAULT:GROW(1.0)","FILL:35PX:NONE");
142
      CellConstraints cc = new CellConstraints();
143
      jpanel1.setLayout(formlayout1);
144

  
145
      btnSymbolPreview.setName("btnSymbolPreview");
146
      jpanel1.add(btnSymbolPreview,new CellConstraints(1,1,1,1,CellConstraints.FILL,CellConstraints.FILL));
147

  
148
      txtSymbolDescription.setName("txtSymbolDescription");
149
      JScrollPane jscrollpane1 = new JScrollPane();
150
      jscrollpane1.setViewportView(txtSymbolDescription);
151
      jscrollpane1.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
152
      jscrollpane1.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
153
      jpanel1.add(jscrollpane1,cc.xy(3,1));
154

  
155
      addFillComponents(jpanel1,new int[]{ 2 },new int[0]);
156
      return jpanel1;
157
   }
158

  
159
   /**
160
    * Initializer
161
    */
162
   protected void initializePanel()
163
   {
164
      setLayout(new BorderLayout());
165
      add(createPanel(), BorderLayout.CENTER);
166
   }
167

  
168

  
169
}
org.gvsig.legend.vectorfilterexpression.app.mainplugin/tags/org.gvsig.legend.vectorfilterexpression.app.mainplugin-1.0.133/src/main/java/org/gvsig/symbology/gui/layerproperties/VectorFilterExpressionPanelView.xml
1
<?xml version="1.0" encoding="UTF-8"?>
2

  
3
<object classname="com.jeta.forms.store.memento.FormPackage">
4
 <at name="fileversion">
5
  <object classname="com.jeta.forms.store.memento.FormsVersion2">
6
   <at name="major">2</at>
7
   <at name="minor">0</at>
8
   <at name="sub">0</at>
9
  </object>
10
 </at>
11
 <at name="form">
12
  <object classname="com.jeta.forms.store.memento.FormMemento">
13
   <super classname="com.jeta.forms.store.memento.ComponentMemento">
14
    <at name="cellconstraints">
15
     <object classname="com.jeta.forms.store.memento.CellConstraintsMemento">
16
      <at name="column">1</at>
17
      <at name="row">1</at>
18
      <at name="colspan">1</at>
19
      <at name="rowspan">1</at>
20
      <at name="halign">default</at>
21
      <at name="valign">default</at>
22
      <at name="insets" object="insets">0,0,0,0</at>
23
     </object>
24
    </at>
25
    <at name="componentclass">com.jeta.forms.gui.form.FormComponent</at>
26
   </super>
27
   <at name="id">/home/jjdelcerro/datos/devel/org.gvsig.legend.vectorfilterexpression.app.mainplugin/src/main/java/org/gvsig/symbology/gui/layerproperties/VectorFilterExpressionPanelView.xml</at>
28
   <at name="rowspecs">CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,FILL:DEFAULT:GROW(1.0),CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE</at>
29
   <at name="colspecs">FILL:4DLU:NONE,FILL:DEFAULT:GROW(1.0),FILL:4DLU:NONE,FILL:DEFAULT:NONE,FILL:4DLU:NONE</at>
30
   <at name="components">
31
    <object classname="java.util.LinkedList">
32
     <item >
33
      <at name="value">
34
       <object classname="com.jeta.forms.store.memento.BeanMemento">
35
        <super classname="com.jeta.forms.store.memento.ComponentMemento">
36
         <at name="cellconstraints">
37
          <object classname="com.jeta.forms.store.memento.CellConstraintsMemento">
38
           <at name="column">2</at>
39
           <at name="row">4</at>
40
           <at name="colspan">1</at>
41
           <at name="rowspan">1</at>
42
           <at name="halign">default</at>
43
           <at name="valign">default</at>
44
           <at name="insets" object="insets">0,0,0,0</at>
45
          </object>
46
         </at>
47
         <at name="componentclass">com.jeta.forms.gui.form.StandardComponent</at>
48
        </super>
49
        <at name="jetabeanclass">com.jeta.forms.gui.beans.JETABean</at>
50
        <at name="beanclass">javax.swing.JTable</at>
51
        <at name="beanproperties">
52
         <object classname="com.jeta.forms.store.memento.PropertiesMemento">
53
          <at name="classname">javax.swing.JTable</at>
54
          <at name="properties">
55
           <object classname="com.jeta.forms.store.support.PropertyMap">
56
            <at name="border">
57
             <object classname="com.jeta.forms.store.properties.CompoundBorderProperty">
58
              <super classname="com.jeta.forms.store.properties.BorderProperty">
59
               <at name="name">border</at>
60
              </super>
61
              <at name="borders">
62
               <object classname="java.util.LinkedList">
63
                <item >
64
                 <at name="value">
65
                  <object classname="com.jeta.forms.store.properties.DefaultBorderProperty">
66
                   <super classname="com.jeta.forms.store.properties.BorderProperty">
67
                    <at name="name">border</at>
68
                   </super>
69
                  </object>
70
                 </at>
71
                </item>
72
               </object>
73
              </at>
74
             </object>
75
            </at>
76
            <at name="name">tblSymbols</at>
77
            <at name="width">832</at>
78
            <at name="scollBars">
79
             <object classname="com.jeta.forms.store.properties.ScrollBarsProperty">
80
              <at name="name">scollBars</at>
81
              <at name="verticalpolicy">20</at>
82
              <at name="horizontalpolicy">30</at>
83
              <at name="border">
84
               <object classname="com.jeta.forms.store.properties.CompoundBorderProperty">
85
                <super classname="com.jeta.forms.store.properties.BorderProperty">
86
                 <at name="name">border</at>
87
                </super>
88
                <at name="borders">
89
                 <object classname="java.util.LinkedList">
90
                  <item >
91
                   <at name="value">
92
                    <object classname="com.jeta.forms.store.properties.DefaultBorderProperty">
93
                     <super classname="com.jeta.forms.store.properties.BorderProperty">
94
                      <at name="name">border</at>
95
                     </super>
96
                    </object>
97
                   </at>
98
                  </item>
99
                 </object>
100
                </at>
101
               </object>
102
              </at>
103
             </object>
104
            </at>
105
            <at name="height">32</at>
106
           </object>
107
          </at>
108
         </object>
109
        </at>
110
       </object>
111
      </at>
112
     </item>
113
     <item >
114
      <at name="value">
115
       <object classname="com.jeta.forms.store.memento.FormMemento">
116
        <super classname="com.jeta.forms.store.memento.ComponentMemento">
117
         <at name="cellconstraints">
118
          <object classname="com.jeta.forms.store.memento.CellConstraintsMemento">
119
           <at name="column">2</at>
120
           <at name="row">2</at>
121
           <at name="colspan">1</at>
122
           <at name="rowspan">1</at>
123
           <at name="halign">default</at>
124
           <at name="valign">default</at>
125
           <at name="insets" object="insets">0,0,0,0</at>
126
          </object>
127
         </at>
128
         <at name="componentclass">com.jeta.forms.gui.form.FormComponent</at>
129
        </super>
130
        <at name="id">embedded.1564275243</at>
131
        <at name="rowspecs">CENTER:MAX(22PX;MIN):NONE</at>
132
        <at name="colspecs">FILL:DEFAULT:NONE,FILL:DEFAULT:NONE,FILL:100PX:NONE</at>
133
        <at name="components">
134
         <object classname="java.util.LinkedList">
135
          <item >
136
           <at name="value">
137
            <object classname="com.jeta.forms.store.memento.BeanMemento">
138
             <super classname="com.jeta.forms.store.memento.ComponentMemento">
139
              <at name="cellconstraints">
140
               <object classname="com.jeta.forms.store.memento.CellConstraintsMemento">
141
                <at name="column">1</at>
142
                <at name="row">1</at>
143
                <at name="colspan">1</at>
144
                <at name="rowspan">1</at>
145
                <at name="halign">default</at>
146
                <at name="valign">default</at>
147
                <at name="insets" object="insets">0,0,0,0</at>
148
               </object>
149
              </at>
150
              <at name="componentclass">com.jeta.forms.gui.form.StandardComponent</at>
151
             </super>
152
             <at name="jetabeanclass">com.jeta.forms.gui.beans.JETABean</at>
153
             <at name="beanclass">javax.swing.JCheckBox</at>
154
             <at name="beanproperties">
155
              <object classname="com.jeta.forms.store.memento.PropertiesMemento">
156
               <at name="classname">javax.swing.JCheckBox</at>
157
               <at name="properties">
158
                <object classname="com.jeta.forms.store.support.PropertyMap">
159
                 <at name="border">
160
                  <object classname="com.jeta.forms.store.properties.CompoundBorderProperty">
161
                   <super classname="com.jeta.forms.store.properties.BorderProperty">
162
                    <at name="name">border</at>
163
                   </super>
164
                   <at name="borders">
165
                    <object classname="java.util.LinkedList">
166
                     <item >
167
                      <at name="value">
168
                       <object classname="com.jeta.forms.store.properties.DefaultBorderProperty">
169
                        <super classname="com.jeta.forms.store.properties.BorderProperty">
170
                         <at name="name">border</at>
171
                        </super>
172
                       </object>
173
                      </at>
174
                     </item>
175
                    </object>
176
                   </at>
177
                  </object>
178
                 </at>
179
                 <at name="actionCommand">_Resto_de_valores</at>
180
                 <at name="name">chkDefaultValues</at>
181
                 <at name="width">97</at>
182
                 <at name="text">resto_valores</at>
183
                 <at name="height">16</at>
184
                </object>
185
               </at>
186
              </object>
187
             </at>
188
            </object>
189
           </at>
190
          </item>
191
          <item >
192
           <at name="value">
193
            <object classname="com.jeta.forms.store.memento.BeanMemento">
194
             <super classname="com.jeta.forms.store.memento.ComponentMemento">
195
              <at name="cellconstraints">
196
               <object classname="com.jeta.forms.store.memento.CellConstraintsMemento">
197
                <at name="column">3</at>
198
                <at name="row">1</at>
199
                <at name="colspan">1</at>
200
                <at name="rowspan">1</at>
201
                <at name="halign">fill</at>
202
                <at name="valign">fill</at>
203
                <at name="insets" object="insets">0,0,0,0</at>
204
               </object>
205
              </at>
206
              <at name="componentclass">com.jeta.forms.gui.form.StandardComponent</at>
207
             </super>
208
             <at name="jetabeanclass">com.jeta.forms.gui.beans.JETABean</at>
209
             <at name="beanclass">javax.swing.JButton</at>
210
             <at name="beanproperties">
211
              <object classname="com.jeta.forms.store.memento.PropertiesMemento">
212
               <at name="classname">javax.swing.JButton</at>
213
               <at name="properties">
214
                <object classname="com.jeta.forms.store.support.PropertyMap">
215
                 <at name="border">
216
                  <object classname="com.jeta.forms.store.properties.CompoundBorderProperty">
217
                   <super classname="com.jeta.forms.store.properties.BorderProperty">
218
                    <at name="name">border</at>
219
                   </super>
220
                   <at name="borders">
221
                    <object classname="java.util.LinkedList">
222
                     <item >
223
                      <at name="value">
224
                       <object classname="com.jeta.forms.store.properties.LineBorderProperty">
225
                        <super classname="com.jeta.forms.store.properties.BorderProperty">
226
                         <at name="name">border</at>
227
                        </super>
228
                        <at name="thickness">1</at>
229
                        <at name="color">
230
                         <object classname="com.jeta.forms.store.properties.ColorProperty">
231
                          <at name="name">dyncolor</at>
232
                          <at name="colorkey">constant</at>
233
                          <at name="constantcolor" object="color">0,0,0</at>
234
                         </object>
235
                        </at>
236
                        <at name="curved">false</at>
237
                       </object>
238
                      </at>
239
                     </item>
240
                    </object>
241
                   </at>
242
                  </object>
243
                 </at>
244
                 <at name="name">btnDefaultValuesPreview</at>
245
                 <at name="width">96</at>
246
                 <at name="height">18</at>
247
                </object>
248
               </at>
249
              </object>
250
             </at>
251
            </object>
252
           </at>
253
          </item>
254
         </object>
255
        </at>
256
        <at name="properties">
257
         <object classname="com.jeta.forms.store.memento.PropertiesMemento">
258
          <at name="classname">com.jeta.forms.gui.form.GridView</at>
259
          <at name="properties">
260
           <object classname="com.jeta.forms.store.support.PropertyMap">
261
            <at name="border">
262
             <object classname="com.jeta.forms.store.properties.CompoundBorderProperty">
263
              <super classname="com.jeta.forms.store.properties.BorderProperty">
264
               <at name="name">border</at>
265
              </super>
266
              <at name="borders">
267
               <object classname="java.util.LinkedList"/>
268
              </at>
269
             </object>
270
            </at>
271
            <at name="name"/>
272
            <at name="fill">
273
             <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
274
              <at name="name">fill</at>
275
             </object>
276
            </at>
277
            <at name="scollBars">
278
             <object classname="com.jeta.forms.store.properties.ScrollBarsProperty">
279
              <at name="name">scollBars</at>
280
              <at name="verticalpolicy">21</at>
281
              <at name="horizontalpolicy">31</at>
282
              <at name="border">
283
               <object classname="com.jeta.forms.store.properties.CompoundBorderProperty">
284
                <super classname="com.jeta.forms.store.properties.BorderProperty">
285
                 <at name="name">border</at>
286
                </super>
287
                <at name="borders">
288
                 <object classname="java.util.LinkedList">
289
                  <item >
290
                   <at name="value">
291
                    <object classname="com.jeta.forms.store.properties.DefaultBorderProperty">
292
                     <super classname="com.jeta.forms.store.properties.BorderProperty">
293
                      <at name="name">border</at>
294
                     </super>
295
                    </object>
296
                   </at>
297
                  </item>
298
                 </object>
299
                </at>
300
               </object>
301
              </at>
302
             </object>
303
            </at>
304
           </object>
305
          </at>
306
         </object>
307
        </at>
308
        <at name="cellpainters">
309
         <object classname="com.jeta.forms.store.support.Matrix">
310
          <at name="rows">
311
           <object classname="[Ljava.lang.Object;" size="1">
312
            <at name="item" index="0">
313
             <object classname="[Ljava.lang.Object;" size="3"/>
314
            </at>
315
           </object>
316
          </at>
317
         </object>
318
        </at>
319
        <at name="rowgroups">
320
         <object classname="com.jeta.forms.store.memento.FormGroupSet">
321
          <at name="groups">
322
           <object classname="java.util.HashMap"/>
323
          </at>
324
         </object>
325
        </at>
326
        <at name="colgroups">
327
         <object classname="com.jeta.forms.store.memento.FormGroupSet">
328
          <at name="groups">
329
           <object classname="java.util.HashMap"/>
330
          </at>
331
         </object>
332
        </at>
333
       </object>
334
      </at>
335
     </item>
336
     <item >
337
      <at name="value">
338
       <object classname="com.jeta.forms.store.memento.FormMemento">
339
        <super classname="com.jeta.forms.store.memento.ComponentMemento">
340
         <at name="cellconstraints">
341
          <object classname="com.jeta.forms.store.memento.CellConstraintsMemento">
342
           <at name="column">4</at>
343
           <at name="row">4</at>
344
           <at name="colspan">1</at>
345
           <at name="rowspan">1</at>
346
           <at name="halign">default</at>
347
           <at name="valign">default</at>
348
           <at name="insets" object="insets">0,0,0,0</at>
349
          </object>
350
         </at>
351
         <at name="componentclass">com.jeta.forms.gui.form.FormComponent</at>
352
        </super>
353
        <at name="id">embedded.728334876</at>
354
        <at name="rowspecs">CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,FILL:DEFAULT:GROW(1.0)</at>
355
        <at name="colspecs">FILL:DEFAULT:NONE</at>
356
        <at name="components">
357
         <object classname="java.util.LinkedList">
358
          <item >
359
           <at name="value">
360
            <object classname="com.jeta.forms.store.memento.BeanMemento">
361
             <super classname="com.jeta.forms.store.memento.ComponentMemento">
362
              <at name="cellconstraints">
363
               <object classname="com.jeta.forms.store.memento.CellConstraintsMemento">
364
                <at name="column">1</at>
365
                <at name="row">1</at>
366
                <at name="colspan">1</at>
367
                <at name="rowspan">1</at>
368
                <at name="halign">default</at>
369
                <at name="valign">default</at>
370
                <at name="insets" object="insets">0,0,0,0</at>
371
               </object>
372
              </at>
373
              <at name="componentclass">com.jeta.forms.gui.form.StandardComponent</at>
374
             </super>
375
             <at name="jetabeanclass">com.jeta.forms.gui.beans.JETABean</at>
376
             <at name="beanclass">javax.swing.JButton</at>
377
             <at name="beanproperties">
378
              <object classname="com.jeta.forms.store.memento.PropertiesMemento">
379
               <at name="classname">javax.swing.JButton</at>
380
               <at name="properties">
381
                <object classname="com.jeta.forms.store.support.PropertyMap">
382
                 <at name="border">
383
                  <object classname="com.jeta.forms.store.properties.CompoundBorderProperty">
384
                   <super classname="com.jeta.forms.store.properties.BorderProperty">
385
                    <at name="name">border</at>
386
                   </super>
387
                   <at name="borders">
388
                    <object classname="java.util.LinkedList">
389
                     <item >
390
                      <at name="value">
391
                       <object classname="com.jeta.forms.store.properties.EmptyBorderProperty">
392
                        <super classname="com.jeta.forms.store.properties.BorderProperty">
393
                         <at name="name">border</at>
394
                        </super>
395
                        <at name="top">2</at>
396
                        <at name="left">2</at>
397
                        <at name="bottom">2</at>
398
                        <at name="right">2</at>
399
                       </object>
400
                      </at>
401
                     </item>
402
                    </object>
403
                   </at>
404
                  </object>
405
                 </at>
406
                 <at name="actionCommand">...</at>
407
                 <at name="name">btnUp</at>
408
                 <at name="width">16</at>
409
                 <at name="text">...</at>
410
                 <at name="height">18</at>
411
                </object>
412
               </at>
413
              </object>
414
             </at>
415
            </object>
416
           </at>
417
          </item>
418
          <item >
419
           <at name="value">
420
            <object classname="com.jeta.forms.store.memento.BeanMemento">
421
             <super classname="com.jeta.forms.store.memento.ComponentMemento">
422
              <at name="cellconstraints">
423
               <object classname="com.jeta.forms.store.memento.CellConstraintsMemento">
424
                <at name="column">1</at>
425
                <at name="row">3</at>
426
                <at name="colspan">1</at>
427
                <at name="rowspan">1</at>
428
                <at name="halign">default</at>
429
                <at name="valign">default</at>
430
                <at name="insets" object="insets">0,0,0,0</at>
431
               </object>
432
              </at>
433
              <at name="componentclass">com.jeta.forms.gui.form.StandardComponent</at>
434
             </super>
435
             <at name="jetabeanclass">com.jeta.forms.gui.beans.JETABean</at>
436
             <at name="beanclass">javax.swing.JButton</at>
437
             <at name="beanproperties">
438
              <object classname="com.jeta.forms.store.memento.PropertiesMemento">
439
               <at name="classname">javax.swing.JButton</at>
440
               <at name="properties">
441
                <object classname="com.jeta.forms.store.support.PropertyMap">
442
                 <at name="border">
443
                  <object classname="com.jeta.forms.store.properties.CompoundBorderProperty">
444
                   <super classname="com.jeta.forms.store.properties.BorderProperty">
445
                    <at name="name">border</at>
446
                   </super>
447
                   <at name="borders">
448
                    <object classname="java.util.LinkedList">
449
                     <item >
450
                      <at name="value">
451
                       <object classname="com.jeta.forms.store.properties.EmptyBorderProperty">
452
                        <super classname="com.jeta.forms.store.properties.BorderProperty">
453
                         <at name="name">border</at>
454
                        </super>
455
                        <at name="top">2</at>
456
                        <at name="left">2</at>
457
                        <at name="bottom">2</at>
458
                        <at name="right">2</at>
459
                       </object>
460
                      </at>
461
                     </item>
462
                    </object>
463
                   </at>
464
                  </object>
465
                 </at>
466
                 <at name="actionCommand">...</at>
467
                 <at name="name">btnDown</at>
468
                 <at name="width">16</at>
469
                 <at name="text">...</at>
470
                 <at name="height">18</at>
471
                </object>
472
               </at>
473
              </object>
474
             </at>
475
            </object>
476
           </at>
477
          </item>
478
         </object>
479
        </at>
480
        <at name="properties">
481
         <object classname="com.jeta.forms.store.memento.PropertiesMemento">
482
          <at name="classname">com.jeta.forms.gui.form.GridView</at>
483
          <at name="properties">
484
           <object classname="com.jeta.forms.store.support.PropertyMap">
485
            <at name="border">
486
             <object classname="com.jeta.forms.store.properties.CompoundBorderProperty">
487
              <super classname="com.jeta.forms.store.properties.BorderProperty">
488
               <at name="name">border</at>
489
              </super>
490
              <at name="borders">
491
               <object classname="java.util.LinkedList"/>
492
              </at>
493
             </object>
494
            </at>
495
            <at name="name"/>
496
            <at name="fill">
497
             <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
498
              <at name="name">fill</at>
499
             </object>
500
            </at>
501
            <at name="scollBars">
502
             <object classname="com.jeta.forms.store.properties.ScrollBarsProperty">
503
              <at name="name">scollBars</at>
504
              <at name="verticalpolicy">21</at>
505
              <at name="horizontalpolicy">31</at>
506
              <at name="border">
507
               <object classname="com.jeta.forms.store.properties.CompoundBorderProperty">
508
                <super classname="com.jeta.forms.store.properties.BorderProperty">
509
                 <at name="name">border</at>
510
                </super>
511
                <at name="borders">
512
                 <object classname="java.util.LinkedList">
513
                  <item >
514
                   <at name="value">
515
                    <object classname="com.jeta.forms.store.properties.DefaultBorderProperty">
516
                     <super classname="com.jeta.forms.store.properties.BorderProperty">
517
                      <at name="name">border</at>
518
                     </super>
519
                    </object>
520
                   </at>
521
                  </item>
522
                 </object>
523
                </at>
524
               </object>
525
              </at>
526
             </object>
... This diff was truncated because it exceeds the maximum size that can be displayed.

Also available in: Unified diff