Revision 5143

View differences:

org.gvsig.legend.urbanhorizontalsignage/trunk/org.gvsig.legend.urbanhorizontalsignage/org.gvsig.legend.urbanhorizontalsignage.app/org.gvsig.legend.urbanhorizontalsignage.app.mainplugin/src/main/java/org/gvsig/legend/urbanhorizontalsignage/app/UrbanHorizontalSignageExtension.java
36 36
    @Override
37 37
    public void initialize() {
38 38
        IconThemeHelper.registerIcon("legend", "legend-overview-vectorial-urbanhorizontalsignage", this);
39
        IconThemeHelper.registerIcon("legend", "legend-overview-vectorial-picturemarkersymboltable", this);
39 40
        IconThemeHelper.registerIcon("action", "layer-modify-clipboard-copy-as-polygons", this);
40 41

  
41 42
    }
org.gvsig.legend.urbanhorizontalsignage/trunk/org.gvsig.legend.urbanhorizontalsignage/org.gvsig.legend.urbanhorizontalsignage.app/org.gvsig.legend.urbanhorizontalsignage.app.mainplugin/src/main/resources-plugin/i18n/text.properties
15 15
_Copy_as_polygons=Copiar como pol\u00edgonos
16 16
_Target_Color_field=Campo de destino para el color
17 17
_Target_Length_field=Campo de destino para la longitud
18
_Target_Area_field=Campo de destino para el \u00e1rea
18
_Target_Area_field=Campo de destino para el \u00e1rea
19
# ---------------------------------------
20
# Picture marker symbol table legend
21
#
22
_Picture_marker_symbol_table_legend=Leyenda de la tabla de s\u00edmbolos de marcador de imagen
23
_Legend_table_fields=Campos de la tabla de la leyenda
24
_Images_table_fields=Campos de la tabla de las imagenes
25
_Unit=Unidad
26
_Line_to_offset_color=Color de la linea al offset
27
_Draw_line_to_offset=Pinta la linea al offset
28
_Classifying_field=Campo para clasificar
29
_OffsetX_field=Campo para el offset X
30
_OffsetY_field=Campo para el offset Y
31
_Rotation_field=Campo para la rotaci\u00f3n
32
_Line_to_offset_color_field=Campo para el color de la linea al offset
33
_Table_name=Nombre de tabla
34
_Image_field=Campo de la imagen
35
_Image_selected_field=Campo de la imagen seleccionada
36
# ---------------------------------------
org.gvsig.legend.urbanhorizontalsignage/trunk/org.gvsig.legend.urbanhorizontalsignage/org.gvsig.legend.urbanhorizontalsignage.app/org.gvsig.legend.urbanhorizontalsignage.app.mainplugin/src/main/resources-plugin/i18n/text_en.properties
16 16
_Target_Color_field=Target color field
17 17
_Target_Length_field=Target length field
18 18
_Target_Area_field=Target area field
19
# ---------------------------------------
20
# Picture marker symbol table legend
21
#
22
_Picture_marker_symbol_table_legend=Picture marker symbol table legend
23
_Legend_table_fields=Legend table fields
24
_Images_table_fields=Images table fields
25
_Unit=Unit
26
_Line_to_offset_color=Line to offset color
27
_Draw_line_to_offset=Draw line to offset
28
_Classifying_field=Classifying field
29
_OffsetX_field=OffsetX field
30
_OffsetY_field=OffsetY field
31
_Rotation_field=Rotation field
32
_Line_to_offset_color_field=Line to offset color field
33
_Table_name=Table name
34
_Image_field=Image field
35
_Image_selected_field=Image selected field
36
# ---------------------------------------
org.gvsig.legend.urbanhorizontalsignage/trunk/org.gvsig.legend.urbanhorizontalsignage/org.gvsig.legend.urbanhorizontalsignage.lib/org.gvsig.legend.urbanhorizontalsignage.lib.impl/src/main/resources/org/gvsig/legend/urbanhorizontalsignage/lib/impl/UrbanHorizontalSignagePersistence.xml
93 93
            </fields>
94 94
        </class>
95 95

  
96
        <class name="DefaultPictureMarkerSymbolTableLegend">
97
            <extends>
98
                <class name="VectorialLegend" namespace="persistence"/>
99
            </extends>
100
            <fields>
101
                <field name="size" type="Double" defaultValue="15" mandatory="false">
102
                    <description></description>
103
                </field>
104
                <field name="units" type="Integer" defaultValue="-1" mandatory="false">
105
                    <description></description>
106
                </field>
107
                <field name="lineToOffsetColor" type="Object" ClassOfValue="java.awt.Color" defaultValue="darkgrey" mandatory="false">
108
                    <description></description>
109
                </field>
110
                <field name="drawLineToOffset" type="Boolean" defaultValue="true" mandatory="false">
111
                    <description></description>
112
                </field>
113
                <field name="classifyingFieldName" type="String" defaultValue="" mandatory="true">
114
                    <description></description>
115
                </field>
116
                <field name="offsetXFieldName" type="String" defaultValue="" mandatory="false">
117
                    <description></description>
118
                </field>
119
                <field name="offsetYFieldName" type="String" defaultValue="" mandatory="false">
120
                    <description></description>
121
                </field>
122
                <field name="rotationFieldName" type="String" defaultValue="" mandatory="false">
123
                    <description></description>
124
                </field>
125
                <field name="lineToOffsetColorFieldlName" type="String" defaultValue="" mandatory="false">
126
                    <description></description>
127
                </field>
128
                <field name="imagesTableName" type="String" defaultValue="" mandatory="true">
129
                    <description></description>
130
                </field>
131
                <field name="imagesTableClassifyingFieldName" type="String" defaultValue="" mandatory="true">
132
                    <description></description>
133
                </field>
134
                <field name="imageFieldName" type="String" defaultValue="" mandatory="true">
135
                    <description></description>
136
                </field>
137
                <field name="imageSelectedFieldName" type="String" defaultValue="" mandatory="false">
138
                    <description></description>
139
                </field>
140
            </fields>
141
        </class>
142

  
96 143
    </classes>
97 144
</definitions>
org.gvsig.legend.urbanhorizontalsignage/trunk/org.gvsig.legend.urbanhorizontalsignage/org.gvsig.legend.urbanhorizontalsignage.lib/org.gvsig.legend.urbanhorizontalsignage.lib.impl/src/main/java/org/gvsig/legend/urbanhorizontalsignage/lib/impl/DefaultUrbanHorizontalSignageManager.java
23 23
package org.gvsig.legend.urbanhorizontalsignage.lib.impl;
24 24

  
25 25
import java.io.File;
26
import java.util.ArrayList;
27 26
import java.util.Iterator;
28 27
import java.util.List;
29 28
import java.util.UUID;
......
67 66
import org.gvsig.legend.urbanhorizontalsignage.lib.api.UrbanHorizontalSignageLegend;
68 67
import org.gvsig.legend.urbanhorizontalsignage.lib.api.UrbanHorizontalSignageLocator;
69 68
import org.gvsig.legend.urbanhorizontalsignage.lib.api.UrbanHorizontalSignageManager;
69
import org.gvsig.legend.urbanverticalsignage.lib.api.PictureMarkerSymbolTableLegend;
70
import org.gvsig.legend.urbanverticalsignage.lib.impl.DefaultPictureMarkerSymbolTableLegend;
70 71
import org.gvsig.tools.ToolsLocator;
71 72
import org.gvsig.tools.folders.FoldersManager;
72 73
import org.gvsig.tools.task.SimpleTaskStatus;
73 74
import org.gvsig.tools.util.HasAFile;
74 75
import org.slf4j.LoggerFactory;
75 76

  
77
@SuppressWarnings("UseSpecificCatch")
76 78
public class DefaultUrbanHorizontalSignageManager implements UrbanHorizontalSignageManager {
77 79

  
78 80
    private static final org.slf4j.Logger LOGGER = LoggerFactory.getLogger(DefaultUrbanHorizontalSignageManager.class);
79 81

  
80 82
    @Override
81
    public UrbanHorizontalSignageLegend create() {
83
    public UrbanHorizontalSignageLegend createUrbanHorizontalSignageLegend() {
82 84
        return new DefaultUrbanHorizontalSignageLegend();
83 85
    }
84 86

  
85 87
    @Override
86
    public Class<? extends UrbanHorizontalSignageLegend> getLegendClass() {
88
    public Class<? extends UrbanHorizontalSignageLegend> getUrbanHorizontalSignageLegendClass() {
87 89
        return DefaultUrbanHorizontalSignageLegend.class;
88 90
    }
89 91

  
......
221 223
        Geometry buffer;
222 224
        final int joinStyle = roundVertex ? JOIN_STYLE_ROUND : JOIN_STYLE_MITRE;
223 225

  
224
        Geometry segmentOffset = null;
226
        Geometry segmentOffset;
225 227
        if (segment.isClosed() && segment.getNumVertices() > 2 && segment.isCCW()) {
226 228
            Line cloned = segment.cloneGeometry();
227 229
            cloned.flip();
......
280 282
                    }
281 283
                    previousPoint = currentPoint.cloneGeometry();
282 284
                    advanceToNext = true;
283
                    continue;
285
//                    continue;
284 286
                } else {
285 287
                    //buscar punto dentro del segmento a una distancia = segmentLengthMeters-previousLength
286 288
                    Point point = calculateIntermediatePoint(previousPoint, currentPoint, (segmentLength - previousLength) / distance);
......
296 298
                    previousPoint = point.clone();
297 299
                    previousLength = 0;
298 300
                    advanceToNext = false;
299
                    continue;
301
//                    continue;
300 302
                }
301 303
            } else {
302 304
                if (previousLength + distance < holesLength) {
......
306 308
                    }
307 309
                    previousPoint = currentPoint.cloneGeometry();
308 310
                    advanceToNext = true;
309
                    continue;
311
//                    continue;
310 312
                } else {
311 313
                    //buscar punto dentro del segmento a una distancia = segmentLengthMeters-previousLength
312 314
                    Point point = calculateIntermediatePoint(previousPoint, currentPoint, (holesLength - previousLength) / distance);
......
322 324
                    previousPoint = point.clone();
323 325
                    previousLength = 0;
324 326
                    advanceToNext = false;
325
                    continue;
327
//                    continue;
326 328
                }
327 329
            }
328 330
        }
......
355 357
        return p;
356 358
    }
357 359

  
358
    /*friend*/ static class SplittedLine {
359

  
360
        List<Line> segments;
361
        List<Line> holes;
362

  
363
        public SplittedLine() {
364
            segments = new ArrayList<>();
365
            holes = new ArrayList<>();
366
        }
367

  
368
        public List<Line> getSegments() {
369
            return this.segments;
370
        }
371

  
372
        public List<Line> getHoles() {
373
            return this.holes;
374
        }
375

  
376
        public void addSegment(Line segment) {
377
            this.segments.add(segment);
378
        }
379

  
380
        public void addHole(Line hole) {
381
            this.holes.add(hole);
382
        }
383

  
384
    }
385
    
360
    @Override
386 361
    public FeatureStore convertLinesToPolygons(FeatureSet sourceFeatureSet, UrbanHorizontalSignageConfig config, SimpleTaskStatus status) {
387 362
        
388 363
        //TODO: el status....
......
508 483
        }
509 484
    }
510 485

  
486
    @Override
487
    public PictureMarkerSymbolTableLegend createPictureMarkerSymbolTableLegend() {
488
        return new DefaultPictureMarkerSymbolTableLegend();
489
    }
511 490

  
491
    @Override
492
    public Class<? extends PictureMarkerSymbolTableLegend> getPictureMarkerSymbolTableLegendClass() {
493
        return DefaultPictureMarkerSymbolTableLegend.class;
494
    }
495
    
496
    
512 497

  
513 498
}
org.gvsig.legend.urbanhorizontalsignage/trunk/org.gvsig.legend.urbanhorizontalsignage/org.gvsig.legend.urbanhorizontalsignage.lib/org.gvsig.legend.urbanhorizontalsignage.lib.impl/src/main/java/org/gvsig/legend/urbanhorizontalsignage/lib/impl/SplittedLine.java
1
package org.gvsig.legend.urbanhorizontalsignage.lib.impl;
2

  
3
import java.util.ArrayList;
4
import java.util.List;
5
import org.gvsig.fmap.geom.primitive.Line;
6

  
7
/**
8
 *
9
 * @author gvSIG Team
10
 */
11
class SplittedLine {
12
    
13
    List<Line> segments;
14
    List<Line> holes;
15

  
16
    public SplittedLine() {
17
        segments = new ArrayList<>();
18
        holes = new ArrayList<>();
19
    }
20

  
21
    public List<Line> getSegments() {
22
        return this.segments;
23
    }
24

  
25
    public List<Line> getHoles() {
26
        return this.holes;
27
    }
28

  
29
    public void addSegment(Line segment) {
30
        this.segments.add(segment);
31
    }
32

  
33
    public void addHole(Line hole) {
34
        this.holes.add(hole);
35
    }
36
    
37
}
org.gvsig.legend.urbanhorizontalsignage/trunk/org.gvsig.legend.urbanhorizontalsignage/org.gvsig.legend.urbanhorizontalsignage.lib/org.gvsig.legend.urbanhorizontalsignage.lib.impl/src/main/java/org/gvsig/legend/urbanhorizontalsignage/lib/impl/UrbanHorizontalSignageLibraryImpl.java
29 29
import org.gvsig.fmap.mapcontext.MapContextLibrary;
30 30
import org.gvsig.fmap.mapcontext.MapContextLocator;
31 31
import org.gvsig.fmap.mapcontext.MapContextManager;
32
import org.gvsig.legend.urbanhorizontalsignage.lib.api.UrbanHorizontalSignageConfig;
33 32
import org.gvsig.legend.urbanhorizontalsignage.lib.api.UrbanHorizontalSignageLibrary;
34 33
import org.gvsig.legend.urbanhorizontalsignage.lib.api.UrbanHorizontalSignageLocator;
34
import org.gvsig.legend.urbanverticalsignage.lib.impl.DefaultPictureMarkerSymbolTableLegend;
35 35
import org.gvsig.symbology.impl.SymbologyDefaultImplLibrary;
36 36
import org.gvsig.tools.ToolsLocator;
37 37
import org.gvsig.tools.dynobject.DynStruct;
......
77 77
                "UrbanHorizontalSignageSymbol",
78 78
                definitions,
79 79
                null,
80
                null);
80
                null
81
        );
81 82
        persistenceManager.addDefinition(
82 83
                DefaultUrbanHorizontalSignageConfig.class,
83 84
                "DefaultUrbanHorizontalSignageConfig",
84 85
                definitions,
85 86
                null,
86
                null);
87
                null
88
        );
89
        persistenceManager.addDefinition(
90
                DefaultPictureMarkerSymbolTableLegend.class,
91
                "DefaultPictureMarkerSymbolTableLegend",
92
                definitions,
93
                null,
94
                null
95
        );
87 96
    }
88 97

  
89 98
}
org.gvsig.legend.urbanhorizontalsignage/trunk/org.gvsig.legend.urbanhorizontalsignage/org.gvsig.legend.urbanhorizontalsignage.lib/org.gvsig.legend.urbanhorizontalsignage.lib.impl/src/main/java/org/gvsig/legend/urbanverticalsignage/lib/impl/ImageMarkerSymbol.java
1
package org.gvsig.legend.urbanverticalsignage.lib.impl;
2

  
3
import java.awt.Graphics2D;
4
import java.awt.Rectangle;
5
import java.awt.geom.AffineTransform;
6
import java.awt.geom.Point2D;
7
import java.awt.image.BufferedImage;
8
import org.gvsig.fmap.dal.feature.Feature;
9
import org.gvsig.fmap.geom.Geometry;
10
import org.gvsig.fmap.geom.primitive.Point;
11
import org.gvsig.fmap.mapcontext.MapContext;
12
import org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol;
13
import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.impl.CartographicSupportToolkit;
14
import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.marker.IMarkerSymbol;
15
import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.marker.impl.AbstractMarkerSymbol;
16
import org.gvsig.tools.task.Cancellable;
17

  
18
/**
19
 *
20
 * @author gvSIG Team
21
 */
22
@SuppressWarnings("UseSpecificCatch")
23
public class ImageMarkerSymbol extends AbstractMarkerSymbol implements  IMarkerSymbol {
24

  
25
    private ImageMarkerSymbol selectionSym;
26
    private boolean selected;
27
    private BufferedImage image;
28
    private BufferedImage imagesel;
29
    
30
    void setImage(BufferedImage img) {
31
        this.image = img;
32
    }
33
    
34
    void setImageSel(BufferedImage img) {
35
        this.imagesel = img;
36
    }
37
    
38
    @Override
39
    public void draw(Graphics2D g, AffineTransform affineTransform, Geometry geom, Feature f, Cancellable cancel) {
40
        Point p;
41
        try {
42
            p = geom.centroid();
43
        } catch (Exception ex) {
44
            return;
45
        }
46
        if (affineTransform != null) {
47
            p.transform(affineTransform);
48
        }
49
        double x, y;
50
        int size = (int) Math.round(getEfectiveSize(f));
51
        double halfSize = getEfectiveSize(f) / 2;
52
        x = p.getX() - halfSize;
53
        y = p.getY() - halfSize;
54
        Point2D theOffset = this.getEfectiveOffset(f);
55
        int xOffset = (int) theOffset.getX();
56
        int yOffset = (int) theOffset.getY();
57

  
58
        if (size > 0) {
59
            if( isDrawLineToOffset() ) {
60
                g.setColor(this.getEfectiveLineToOffsetColor(f));
61
                g.drawLine((int)p.getX(), (int)p.getY(), (int)p.getX() + xOffset, (int)p.getY() + yOffset);
62
            }
63
            Rectangle rect = new Rectangle(size, size);
64
            g.translate(x + xOffset, y + yOffset);
65
            double auxRotation = getEfectiveRotationInRadians(f);
66
            g.rotate(auxRotation, halfSize, halfSize);
67
            
68
            this.drawInsideRectangle(g, rect, true);
69
            
70
            g.rotate(-auxRotation, halfSize, halfSize);
71
            g.translate(-(x + xOffset), -(y + yOffset));
72
            
73
        }
74
    }
75

  
76
    private void drawInsideRectangle(Graphics2D g, Rectangle r, boolean keepAspectRatio) {
77
        BufferedImage theImage = (!selected) ? this.image : this.imagesel;
78
        if (theImage != null) {
79

  
80
            double xOffset = 0;
81
            double yOffset = 0;
82
            @SuppressWarnings("UnusedAssignment")
83
            double xScale = 1;
84
            @SuppressWarnings("UnusedAssignment")
85
            double yScale = 1;
86
            if (keepAspectRatio) {
87
                double scale;
88
                if (theImage.getWidth() > theImage.getHeight()) {
89
                    scale = r.getWidth() / theImage.getWidth();
90
                    yOffset = 0.5 * (r.getHeight() - theImage.getHeight() * scale);
91
                } else {
92
                    scale = r.getHeight() / theImage.getHeight();
93
                    xOffset = 0.5 * (r.getWidth() - theImage.getWidth() * scale);
94
                }
95
                xScale = yScale = scale;
96

  
97
            } else {
98
                xScale = r.getWidth() / theImage.getWidth();
99
                yScale = r.getHeight() / theImage.getHeight();
100
                yOffset = theImage.getHeight() * 0.5 * yScale;
101

  
102
            }
103

  
104
            AffineTransform at = AffineTransform.getTranslateInstance(xOffset, yOffset);
105
            at.concatenate(AffineTransform.getScaleInstance(xScale, yScale));
106
            g.drawRenderedImage(theImage, at);
107
        }
108
    }
109
    
110
    @Override
111
    public ISymbol getSymbolForSelection() {
112
        if (selectionSym == null) {
113
            try {
114
                selectionSym = (ImageMarkerSymbol) this.clone();
115
            } catch (CloneNotSupportedException e) {
116
//                LOG.warn("Error creating the selection symbol for the symbol "+ this, e);
117
            }
118
            selectionSym.selected = true;
119
            selectionSym.selectionSym = selectionSym; // avoid too much lazy creations
120
        } else {
121
            selectionSym.setColor(MapContext.getSelectionColor());
122
        }
123
        return selectionSym;
124
    }
125
    
126
}
org.gvsig.legend.urbanhorizontalsignage/trunk/org.gvsig.legend.urbanhorizontalsignage/org.gvsig.legend.urbanhorizontalsignage.lib/org.gvsig.legend.urbanhorizontalsignage.lib.impl/src/main/java/org/gvsig/legend/urbanverticalsignage/lib/impl/DefaultPictureMarkerSymbolTableLegend.java
1
package org.gvsig.legend.urbanverticalsignage.lib.impl;
2

  
3
import java.awt.Color;
4
import java.awt.geom.Point2D;
5
import java.awt.image.BufferedImage;
6
import java.util.ArrayList;
7
import java.util.List;
8
import javax.annotation.processing.SupportedSourceVersion;
9
import javax.lang.model.SourceVersion;
10
import org.apache.commons.collections4.map.LRUMap;
11
import org.apache.commons.lang3.StringUtils;
12
import org.gvsig.expressionevaluator.ExpressionBuilder;
13
import org.gvsig.expressionevaluator.ExpressionUtils;
14
import org.gvsig.fmap.dal.DALLocator;
15
import org.gvsig.fmap.dal.DataTypes;
16
import org.gvsig.fmap.dal.StoresRepository;
17
import org.gvsig.fmap.dal.exception.DataException;
18
import org.gvsig.fmap.dal.feature.Feature;
19
import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
20
import org.gvsig.fmap.dal.feature.FeatureStore;
21
import org.gvsig.fmap.dal.feature.FeatureType;
22
import org.gvsig.fmap.geom.Geometry;
23
import org.gvsig.fmap.geom.GeometryUtils;
24
import org.gvsig.fmap.mapcontext.MapContextException;
25
import org.gvsig.fmap.mapcontext.rendering.symbols.ISymbol;
26
import org.gvsig.legend.urbanverticalsignage.lib.api.PictureMarkerSymbolTableLegend;
27
import org.gvsig.symbology.SymbologyLocator;
28
import org.gvsig.symbology.SymbologyManager;
29
import org.gvsig.symbology.fmap.mapcontext.rendering.legend.impl.AbstractVectorialLegend;
30
import org.gvsig.symbology.fmap.mapcontext.rendering.symbol.marker.impl.SimpleMarkerSymbol;
31
import org.gvsig.tools.ToolsLocator;
32
import org.gvsig.tools.dataTypes.Coercion;
33
import org.gvsig.tools.persistence.PersistentState;
34
import org.gvsig.tools.persistence.exception.PersistenceException;
35
import org.gvsig.tools.swing.api.SimpleImage;
36
import org.slf4j.Logger;
37
import org.slf4j.LoggerFactory;
38

  
39
@SupportedSourceVersion(SourceVersion.RELEASE_8)
40
@SuppressWarnings("UseSpecificCatch")
41
public class DefaultPictureMarkerSymbolTableLegend 
42
        extends AbstractVectorialLegend 
43
        implements PictureMarkerSymbolTableLegend 
44
{
45
    
46
    private static final Logger LOGGER = LoggerFactory.getLogger(DefaultPictureMarkerSymbolTableLegend.class);
47

  
48
    private static final int IMAGESCACHE_SIZE = 100;
49
    
50
    transient private final Coercion toColor;
51
    transient private final SimpleMarkerSymbol defaultSymbol;
52
    transient private FeatureStore imagesStore;
53
    transient private ExpressionBuilder expressionBuilder;
54
    transient private final LRUMap<Object, BufferedImage[]> imagesCache;
55
    
56
    private double size;
57
    private int units;
58
    private Color lineToOffsetColor;
59
    private boolean drawLineToOffset;
60

  
61
    private String classifyingFieldName;
62
    private String offsetXFieldName;
63
    private String offsetYFieldName;
64
    private String rotationFieldName;
65
    private String lineToOffsetColorFieldlName;
66

  
67
    private String imagesTableName;
68
    private String imagesTableClassifyingFieldName;
69
    private String imageFieldName;
70
    private String imageSelectedFieldName;
71
    
72
    public DefaultPictureMarkerSymbolTableLegend() {
73
        
74
        SymbologyManager symbologyManager = SymbologyLocator.getSymbologyManager();
75
        this.defaultSymbol = new SimpleMarkerSymbol();
76
        this.toColor = ToolsLocator.getDataTypesManager().getCoercion(DataTypes.COLOR);
77
        this.size = DEFAULT_IMAGE_SIZE;
78
        this.drawLineToOffset = true;
79
        this.lineToOffsetColor = Color.DARK_GRAY;
80
        this.imagesCache = new LRUMap<>(IMAGESCACHE_SIZE);
81
    }
82

  
83
    @Override
84
    public ISymbol getDefaultSymbol() {
85
        return this.defaultSymbol;
86
    }
87

  
88
    @Override
89
    public void setDefaultSymbol(ISymbol is) {
90
        //DO NOTHING
91
    }
92

  
93
    private Color getColor(Feature feature, String attrname, Color defaultValue) {
94
        if( StringUtils.isBlank(attrname) ) {
95
            return defaultValue;
96
        }
97
        try {
98
            return (Color) toColor.coerce(feature.get(attrname));
99
        } catch(Exception ex) {
100
            return defaultValue;
101
        }
102
    }
103
    
104
    @Override
105
    public ISymbol getSymbolByFeature(Feature feature) throws MapContextException {
106
        ImageMarkerSymbol symbol = new ImageMarkerSymbol();
107
        
108
        Point2D.Double offset = new Point2D.Double(0,0);
109
        if( StringUtils.isNotBlank(this.offsetXFieldName)) {
110
            offset.x = feature.getDouble(this.offsetXFieldName);
111
        }
112
        if( StringUtils.isNotBlank(this.offsetYFieldName)) {
113
            offset.y = feature.getDouble(this.offsetXFieldName);
114
        }
115
        symbol.setOffset(offset);
116
        
117
        if( StringUtils.isNotBlank(this.rotationFieldName)) {
118
            symbol.setRotation(feature.getDouble(this.rotationFieldName));
119
        } else {
120
            symbol.setRotation(0);
121
        }
122
        
123
        if( drawLineToOffset && (offset.x==0 || offset.y==0))    {
124
            symbol.setDrawLineToOffset(true);
125
            symbol.setLineToOffsetColor(
126
                    getColor(
127
                            feature, 
128
                            this.lineToOffsetColorFieldlName, 
129
                            this.lineToOffsetColor
130
                    )
131
            );
132
        } else {
133
            symbol.setDrawLineToOffset(false);
134
            symbol.setLineToOffsetColor(Color.DARK_GRAY);
135
        }
136
        symbol.setSize(this.size);
137
        symbol.setUnit(this.units);
138
        
139
        Object classifyingValue = feature.get(this.classifyingFieldName);
140
        BufferedImage[] images = this.getImages(classifyingValue);
141
        symbol.setImage(images[0]);
142
        symbol.setImageSel(images[1]);
143
        return symbol;
144
    }
145

  
146
    @Override
147
    public int getShapeType() {
148
        return Geometry.TYPES.POINT;
149
    }
150

  
151
    private BufferedImage[] getImages(Object classifyingValue) {
152
        
153
        BufferedImage[] images;
154
        images = this.imagesCache.get(classifyingValue);
155
        if( images!=null ) {
156
            return images;
157
        }
158
        
159
        images = new BufferedImage[] { null, null };        
160
        try {
161
            FeatureStore store = this.getImagesStore();
162
            FeatureType featureType = store.getDefaultFeatureTypeQuietly();
163
            FeatureAttributeDescriptor attr = featureType.getAttributeDescriptor(this.imagesTableClassifyingFieldName);
164
            Object value = attr.coerce(classifyingValue);
165
            ExpressionBuilder builder = this.getExpressionBuilder();
166
            String filter = builder.eq(
167
                    builder.column(this.imagesTableClassifyingFieldName),
168
                    builder.constant(value)
169
            ).toString();
170
            Feature f = store.findFirst(filter);
171
            if( f!=null ) {
172
                SimpleImage image = (SimpleImage) f.getFromProfile(this.imageFieldName);
173
                if( image != null ) {
174
                    images[0] = image.getBufferedImage();
175
                }
176
                image = (SimpleImage) f.getFromProfile(this.imageSelectedFieldName);
177
                if( image != null ) {
178
                    images[1] = image.getBufferedImage();
179
                }
180
            }
181
        } catch(Exception ex) {
182
            LOGGER.debug("Can't retrieve images from table '"+this.imagesTableName+"'", ex);
183
        }
184
        this.imagesCache.put(classifyingValue, images);
185
        return images;
186
    }
187
    
188
    private ExpressionBuilder getExpressionBuilder() {
189
        if( this.expressionBuilder == null ) {
190
            this.expressionBuilder = ExpressionUtils.createExpressionBuilder();
191
        }
192
        return this.expressionBuilder;
193
    }
194
    
195
    private FeatureStore getImagesStore() {
196
        if( this.imagesStore == null ) {
197
            StoresRepository repository = DALLocator.getDataManager().getStoresRepository();
198
            this.imagesStore = (FeatureStore) repository.getStore(this.imagesTableName);
199
        }
200
        return this.imagesStore;
201
    }
202
    
203
    @Override
204
    public void setShapeType(int i) {
205
    }
206

  
207
    @Override
208
    public boolean isUseDefaultSymbol() {
209
        return true;
210
    }
211

  
212
    @Override
213
    public void useDefaultSymbol(boolean bln) {
214
    }
215

  
216
    @Override
217
    public boolean isSuitableForShapeType(int shapeType) {
218
        return GeometryUtils.isSubtype(Geometry.TYPES.POINT, shapeType);
219
    }
220

  
221
    @Override
222
    public void loadFromState(PersistentState state) throws PersistenceException {
223
        super.loadFromState(state);
224
        
225
        this.size = state.getDouble("size",DEFAULT_IMAGE_SIZE);
226
        this.units = state.getInt("units",-1);
227
        this.lineToOffsetColor = (Color) state.get("lineToOffsetColor");
228
        this.drawLineToOffset = state.getBoolean("drawLineToOffset",true);
229
        this.classifyingFieldName = state.getString("classifyingFieldName");
230
        
231
        this.offsetXFieldName = state.getString("offsetXFieldName");
232
        this.offsetYFieldName = state.getString("offsetYFieldName");
233
        this.rotationFieldName = state.getString("rotationFieldName");
234
        this.lineToOffsetColorFieldlName = state.getString("lineToOffsetColorFieldlName");
235

  
236
        this.imagesTableName = state.getString("imagesTableName");
237
        this.imagesTableClassifyingFieldName = state.getString("imagesTableClassifyingFieldName");
238
        this.imageFieldName = state.getString("imageFieldName");
239
        this.imageSelectedFieldName = state.getString("imageSelectedFieldName");
240
        
241
    }
242

  
243
    @Override
244
    public void saveToState(PersistentState state) throws PersistenceException {
245
        super.saveToState(state);
246
        
247
        state.set("size", this.size);
248
        state.set("units", this.units);
249
        state.set("lineToOffsetColor", this.lineToOffsetColor);
250
        state.set("drawLineToOffset", this.drawLineToOffset);
251
        state.set("classifyingFieldName", this.classifyingFieldName);
252

  
253
        state.set("offsetXFieldName", this.offsetXFieldName);
254
        state.set("offsetYFieldName", this.offsetYFieldName);
255
        state.set("rotationFieldName", this.rotationFieldName);
256
        state.set("lineToOffsetColorFieldlName", this.lineToOffsetColorFieldlName);
257

  
258
        state.set("imagesTableName", this.imagesTableName);
259
        state.set("imagesTableClassifyingFieldName", this.imagesTableClassifyingFieldName);
260
        state.set("imageFieldName", this.imageFieldName);
261
        state.set("imageSelectedFieldName", this.imageSelectedFieldName);
262
        
263
    }
264

  
265
    @Override
266
    protected String[] getRequiredFeatureAttributeNames(FeatureStore fs) throws DataException {
267
        List<String> attributes = new ArrayList<>();
268
        if( StringUtils.isNotBlank(this.classifyingFieldName)) {
269
            attributes.add(this.classifyingFieldName);
270
        }
271
        if( StringUtils.isNotBlank(this.offsetXFieldName)) {
272
            attributes.add(this.offsetXFieldName);
273
        }
274
        if( StringUtils.isNotBlank(this.offsetYFieldName)) {
275
            attributes.add(this.offsetYFieldName);
276
        }
277
        if( StringUtils.isNotBlank(this.rotationFieldName)) {
278
            attributes.add(this.rotationFieldName);
279
        }
280
        if( StringUtils.isNotBlank(this.lineToOffsetColorFieldlName)) {
281
            attributes.add(this.lineToOffsetColorFieldlName);
282
        }
283
        attributes.add( fs.getDefaultFeatureType().getDefaultGeometryAttributeName() );
284
        return attributes.toArray(new String[attributes.size()]);
285
    }
286

  
287
    @Override
288
    public Color getDefaultLineToOffsetColor() {
289
        return this.lineToOffsetColor;
290
    }
291

  
292
    @Override
293
    public void setDefaultLineToOffsetColor(Color color) {
294
        this.lineToOffsetColor = color;
295
    }
296

  
297
    @Override
298
    public boolean isDrawLineToOffset() {
299
        return this.drawLineToOffset;
300
    }
301

  
302
    @Override
303
    public void setDrawLineToOffset(boolean drawLineToOffset) {
304
        this.drawLineToOffset = drawLineToOffset;
305
    }
306

  
307
    @Override
308
    public double getImageSize() {
309
        return this.size;
310
    }
311

  
312
    @Override
313
    public void setImageSize(double size) {
314
        this.size = size;
315
    }
316

  
317
    @Override
318
    public String getLineToOffsetColorFieldName() {
319
        return this.lineToOffsetColorFieldlName;
320
    }
321

  
322
    @Override
323
    public void setLineToOffsetColorFieldName(String fieldName) {
324
        this.lineToOffsetColorFieldlName = fieldName;
325
    }
326

  
327
    @Override
328
    public String getOffsetXFieldName() {
329
        return this.offsetXFieldName;
330
    }
331

  
332
    @Override
333
    public void setOffsetXFieldName(String fieldName) {
334
        this.offsetXFieldName = fieldName;
335
    }
336

  
337
    @Override
338
    public String getOffsetYFieldName() {
339
        return this.offsetYFieldName;
340
    }
341

  
342
    @Override
343
    public void setOffsetYFieldName(String fieldName) {
344
        this.offsetYFieldName = fieldName;
345
    }
346

  
347
    @Override
348
    public String getRotationFieldName() {
349
        return this.rotationFieldName;
350
    }
351

  
352
    @Override
353
    public void setRotationFieldName(String fieldName) {
354
        this.rotationFieldName = fieldName;
355
    }
356

  
357
    @Override
358
    public String getImagesTableName() {
359
        return imagesTableName;
360
    }
361

  
362
    @Override
363
    public void setImagesTableName(String imagesTableName) {
364
        this.imagesTableName = imagesTableName;
365
        this.imagesCache.clear();
366
    }
367

  
368
    @Override
369
    public String getImageFieldName() {
370
        return imageFieldName;
371
    }
372

  
373
    @Override
374
    public void setImageFieldName(String imageFieldName) {
375
        this.imageFieldName = imageFieldName;
376
        this.imagesCache.clear();
377
    }
378

  
379
    @Override
380
    public String getClassifyingFieldName() {
381
        return classifyingFieldName;
382
    }
383

  
384
    @Override
385
    public void setClassifyingFieldName(String classifyingFieldName) {
386
        this.classifyingFieldName = classifyingFieldName;
387
        this.imagesCache.clear();
388
    }
389

  
390
    @Override
391
    public String getImageSelectedFieldName() {
392
        return imageSelectedFieldName;
393
    }
394

  
395
    @Override
396
    public void setImageSelectedFieldName(String imageSelectedFieldName) {
397
        this.imageSelectedFieldName = imageSelectedFieldName;
398
        this.imagesCache.clear();
399
    }
400

  
401
    @Override
402
    public String getImagesTableClassifyingFieldName() {
403
        return imagesTableClassifyingFieldName;
404
    }
405

  
406
    @Override
407
    public void setImagesTableClassifyingFieldName(String imagesTableClassifyingFieldName) {
408
        this.imagesTableClassifyingFieldName = imagesTableClassifyingFieldName;
409
        this.imagesCache.clear();
410
    }
411

  
412
    @Override
413
    public String[] getDescriptions() {
414
        return new String[] { this.classifyingFieldName + "->" + this.imagesTableName};
415
    }
416

  
417
    @Override
418
    public ISymbol[] getSymbols() {
419
        return new ISymbol[] { this.defaultSymbol };
420
    }
421

  
422
    @Override
423
    public Object[] getValues() {
424
        return new Object[] { "" } ;
425
    }
426

  
427
    @Override
428
    public int getUnits() {
429
        return units;
430
    }
431

  
432
    @Override
433
    public void setUnits(int units) {
434
        this.units = units;
435
    }
436
    
437
}
org.gvsig.legend.urbanhorizontalsignage/trunk/org.gvsig.legend.urbanhorizontalsignage/org.gvsig.legend.urbanhorizontalsignage.lib/org.gvsig.legend.urbanhorizontalsignage.lib.impl/src/test/java/org/gvsig/legend/urbanhorizontalsignage/lib/impl/Test01CalculateGeometries.java
72 72
//        data.setRoundVertex(false);
73 73
//        data.setPaintHoles(true);
74 74
        
75
        DefaultUrbanHorizontalSignageManager.SplittedLine splittedLine = uhsManager.splitLine(line, 1, 0.5);
75
        SplittedLine splittedLine = uhsManager.splitLine(line, 1, 0.5);
76 76
        
77 77
        List<Line> segments = splittedLine.getSegments();
78 78
        List<Line> holes = splittedLine.getHoles();
org.gvsig.legend.urbanhorizontalsignage/trunk/org.gvsig.legend.urbanhorizontalsignage/org.gvsig.legend.urbanhorizontalsignage.lib/org.gvsig.legend.urbanhorizontalsignage.lib.api/src/main/java/org/gvsig/legend/urbanhorizontalsignage/lib/api/UrbanHorizontalSignageManager.java
25 25
import org.gvsig.fmap.dal.feature.FeatureSet;
26 26
import org.gvsig.fmap.dal.feature.FeatureStore;
27 27
import org.gvsig.fmap.geom.Geometry;
28
import org.gvsig.legend.urbanverticalsignage.lib.api.PictureMarkerSymbolTableLegend;
28 29
import org.gvsig.tools.task.SimpleTaskStatus;
29 30

  
30 31

  
31 32
public interface UrbanHorizontalSignageManager {
32 33

  
33
    public UrbanHorizontalSignageLegend create();
34
    public UrbanHorizontalSignageLegend createUrbanHorizontalSignageLegend();
34 35

  
35
    public Class<? extends UrbanHorizontalSignageLegend> getLegendClass();
36
    public Class<? extends UrbanHorizontalSignageLegend> getUrbanHorizontalSignageLegendClass();
36 37
    
37 38
    public UrbanHorizontalSignageData createUrbanHorizontalSignageData();
38 39
    
......
40 41

  
41 42
    public FeatureStore convertLinesToPolygons(FeatureSet selection, UrbanHorizontalSignageConfig config, SimpleTaskStatus status);
42 43
    
44
    public PictureMarkerSymbolTableLegend createPictureMarkerSymbolTableLegend();
45

  
46
    public Class<? extends PictureMarkerSymbolTableLegend> getPictureMarkerSymbolTableLegendClass();
47

  
43 48
}
org.gvsig.legend.urbanhorizontalsignage/trunk/org.gvsig.legend.urbanhorizontalsignage/org.gvsig.legend.urbanhorizontalsignage.lib/org.gvsig.legend.urbanhorizontalsignage.lib.api/src/main/java/org/gvsig/legend/urbanverticalsignage/lib/api/PictureMarkerSymbolTableLegend.java
1
package org.gvsig.legend.urbanverticalsignage.lib.api;
2

  
3
import java.awt.Color;
4
import org.gvsig.fmap.mapcontext.rendering.legend.IClassifiedLegend;
5
import org.gvsig.fmap.mapcontext.rendering.legend.ISingleSymbolLegend;
6
import org.gvsig.fmap.mapcontext.rendering.legend.IVectorLegend;
7

  
8
public interface PictureMarkerSymbolTableLegend 
9
        extends IVectorLegend, IClassifiedLegend, ISingleSymbolLegend 
10
    {
11
    
12
    public static final int DEFAULT_IMAGE_SIZE = 15;
13

  
14
    public double getImageSize();
15
    
16
    public int getUnits();
17

  
18
    public boolean isDrawLineToOffset();
19

  
20
    public Color getDefaultLineToOffsetColor();
21

  
22

  
23
    public String getClassifyingFieldName();
24

  
25
    public String getOffsetXFieldName();
26

  
27
    public String getOffsetYFieldName();
28

  
29
    public String getRotationFieldName();
30

  
31
    public String getLineToOffsetColorFieldName();
32

  
33

  
34

  
35
    public String getImagesTableName();
36

  
37
    public String getImageFieldName();
38

  
39
    public String getImageSelectedFieldName();
40

  
41
    public String getImagesTableClassifyingFieldName();
42

  
43

  
44

  
45

  
46
    public void setImageSize(double size);
47

  
48
    public void setUnits(int unit);
49
    
50
    public void setDefaultLineToOffsetColor(Color color);
51

  
52
    public void setDrawLineToOffset(boolean drawLineToOffset);
53

  
54
    
55

  
56
    public void setLineToOffsetColorFieldName(String fieldName);
57

  
58
    public void setOffsetXFieldName(String fieldName);
59

  
60
    public void setOffsetYFieldName(String fieldName);
61

  
62
    public void setRotationFieldName(String fieldName);
63

  
64
    public void setClassifyingFieldName(String classifyingFieldName);
65

  
66
    
67

  
68
    public void setImagesTableName(String imagesTableName);
69

  
70
    public void setImageFieldName(String imageFieldName);
71

  
72
    public void setImageSelectedFieldName(String imageSelectedFieldName);
73

  
74
    public void setImagesTableClassifyingFieldName(String imagesTableClassifyingFieldName);
75

  
76
}
org.gvsig.legend.urbanhorizontalsignage/trunk/org.gvsig.legend.urbanhorizontalsignage/org.gvsig.legend.urbanhorizontalsignage.swing/org.gvsig.legend.urbanhorizontalsignage.swing.api/src/main/java/org/gvsig/legend/urbanverticalsignage/swing/api/PictureMarkerSymbolTableLegendEditor.java
1

  
2
package org.gvsig.legend.urbanverticalsignage.swing.api;
3

  
4
import org.gvsig.app.project.documents.view.legend.gui.ILegendPanel;
5

  
6

  
7
public interface PictureMarkerSymbolTableLegendEditor extends ILegendPanel {
8

  
9
}
org.gvsig.legend.urbanhorizontalsignage/trunk/org.gvsig.legend.urbanhorizontalsignage/org.gvsig.legend.urbanhorizontalsignage.swing/org.gvsig.legend.urbanhorizontalsignage.swing.impl/src/main/java/org/gvsig/legend/urbanhorizontalsignage/swing/impl/DefaultUrbanHorizontalSignageLegendEditor.java
24 24
import org.slf4j.LoggerFactory;
25 25

  
26 26

  
27
@SuppressWarnings("UseSpecificCatch")
27 28
public class DefaultUrbanHorizontalSignageLegendEditor extends DefaultUrbanHorizontalSignageLegendEditorView implements UrbanHorizontalSignageLegendEditor {
28 29

  
29 30
    private static final long serialVersionUID = 4307714097793669675L;
......
35 36
    private DefaultUrbanHorizontalSignageConfigPanel configPanel;
36 37

  
37 38
    public DefaultUrbanHorizontalSignageLegendEditor() {
38
        this.legendClass = UrbanHorizontalSignageLocator.getUrbanHorizontalSignageManager().getLegendClass();
39
        this.legendClass = UrbanHorizontalSignageLocator.getUrbanHorizontalSignageManager().getUrbanHorizontalSignageLegendClass();
39 40
        initComponents();
40 41
    }
41 42

  
......
61 62
        if( this.getLegendClass().isInstance(legend) ) {
62 63
            this.legend = (UrbanHorizontalSignageLegend) legend;
63 64
        } else {
64
            this.legend = UrbanHorizontalSignageLocator.getUrbanHorizontalSignageManager().create();
65
            this.legend = UrbanHorizontalSignageLocator.getUrbanHorizontalSignageManager().createUrbanHorizontalSignageLegend();
65 66
        }
66 67
               
67 68
        if( layer instanceof FLyrVect ) {
org.gvsig.legend.urbanhorizontalsignage/trunk/org.gvsig.legend.urbanhorizontalsignage/org.gvsig.legend.urbanhorizontalsignage.swing/org.gvsig.legend.urbanhorizontalsignage.swing.impl/src/main/java/org/gvsig/legend/urbanhorizontalsignage/swing/impl/UrbanHorizontalSignageLegendSwingLibrary.java
25 25
package org.gvsig.legend.urbanhorizontalsignage.swing.impl;
26 26

  
27 27
import org.gvsig.legend.urbanhorizontalsignage.swing.api.UrbanHorizontalSignageSwingLocator;
28
import org.gvsig.legend.urbanverticalsignage.swing.impl.DefaultPictureMarkerSymbolTableLegendEditor;
28 29
import org.gvsig.symbology.swing.SymbologySwingLibrary;
29 30
import org.gvsig.symbology.swing.SymbologySwingLocator;
30 31
import org.gvsig.symbology.swing.SymbologySwingManager;
......
51 52
    protected void doPostInitialize() throws LibraryException {
52 53
        SymbologySwingManager symmnager = SymbologySwingLocator.getSwingManager();
53 54
        symmnager.registerLegendEditor(DefaultUrbanHorizontalSignageLegendEditor.class);
54
	}
55
        symmnager.registerLegendEditor(DefaultPictureMarkerSymbolTableLegendEditor.class);
56
    }
55 57

  
56 58
}
org.gvsig.legend.urbanhorizontalsignage/trunk/org.gvsig.legend.urbanhorizontalsignage/org.gvsig.legend.urbanhorizontalsignage.swing/org.gvsig.legend.urbanhorizontalsignage.swing.impl/src/main/java/org/gvsig/legend/urbanverticalsignage/swing/impl/DefaultPictureMarkerSymbolTableLegendEditorView.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.urbanhorizontalsignage/org.gvsig.legend.urbanhorizontalsignage.swing/org.gvsig.legend.urbanhorizontalsignage.swing.impl/src/main/java/org/gvsig/legend/urbanverticalsignage/swing/impl/DefaultPictureMarkerSymbolTableLegendEditorView.xml</at>
28
   <at name="path">datos/devel/org.gvsig.legend.urbanhorizontalsignage/org.gvsig.legend.urbanhorizontalsignage.swing/org.gvsig.legend.urbanhorizontalsignage.swing.impl/src/main/java/org/gvsig/legend/urbanverticalsignage/swing/impl/DefaultPictureMarkerSymbolTableLegendEditorView.xml</at>
29
   <at name="rowspecs">CENTER:4DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:4DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:4DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:2DLU:NONE,CENTER:DEFAULT:NONE,CENTER:4DLU:NONE</at>
30
   <at name="colspecs">FILL:4DLU:NONE,FILL:DEFAULT:NONE,FILL:4DLU:NONE,FILL:DEFAULT:GROW(1.0),FILL:4DLU:NONE,FILL:DEFAULT:NONE,FILL:4DLU:NONE</at>
31
   <at name="components">
32
    <object classname="java.util.LinkedList">
33
     <item >
34
      <at name="value">
35
       <object classname="com.jeta.forms.store.memento.BeanMemento">
36
        <super classname="com.jeta.forms.store.memento.ComponentMemento">
37
         <at name="cellconstraints">
38
          <object classname="com.jeta.forms.store.memento.CellConstraintsMemento">
39
           <at name="column">2</at>
40
           <at name="row">2</at>
41
           <at name="colspan">1</at>
42
           <at name="rowspan">1</at>
43
           <at name="halign">default</at>
44
           <at name="valign">default</at>
45
           <at name="insets" object="insets">0,0,0,0</at>
46
          </object>
47
         </at>
48
         <at name="componentclass">com.jeta.forms.gui.form.StandardComponent</at>
49
        </super>
50
        <at name="jetabeanclass">com.jeta.forms.gui.beans.JETABean</at>
51
        <at name="beanclass">com.jeta.forms.components.label.JETALabel</at>
52
        <at name="beanproperties">
53
         <object classname="com.jeta.forms.store.memento.PropertiesMemento">
54
          <at name="classname">com.jeta.forms.components.label.JETALabel</at>
55
          <at name="properties">
56
           <object classname="com.jeta.forms.store.support.PropertyMap">
57
            <at name="border">
58
             <object classname="com.jeta.forms.store.properties.CompoundBorderProperty">
59
              <super classname="com.jeta.forms.store.properties.BorderProperty">
60
               <at name="name">border</at>
61
              </super>
62
              <at name="borders">
63
               <object classname="java.util.LinkedList">
64
                <item >
65
                 <at name="value">
66
                  <object classname="com.jeta.forms.store.properties.DefaultBorderProperty">
67
                   <super classname="com.jeta.forms.store.properties.BorderProperty">
68
                    <at name="name">border</at>
69
                   </super>
70
                  </object>
71
                 </at>
72
                </item>
73
               </object>
74
              </at>
75
             </object>
76
            </at>
77
            <at name="name">lblImageSize</at>
78
            <at name="width">229</at>
79
            <at name="text">_Size</at>
80
            <at name="fill">
81
             <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
82
              <at name="name">fill</at>
83
             </object>
84
            </at>
85
            <at name="height">26</at>
86
           </object>
87
          </at>
88
         </object>
89
        </at>
90
       </object>
91
      </at>
92
     </item>
93
     <item >
94
      <at name="value">
95
       <object classname="com.jeta.forms.store.memento.BeanMemento">
96
        <super classname="com.jeta.forms.store.memento.ComponentMemento">
97
         <at name="cellconstraints">
98
          <object classname="com.jeta.forms.store.memento.CellConstraintsMemento">
99
           <at name="column">2</at>
100
           <at name="row">4</at>
101
           <at name="colspan">1</at>
102
           <at name="rowspan">1</at>
103
           <at name="halign">default</at>
104
           <at name="valign">default</at>
105
           <at name="insets" object="insets">0,0,0,0</at>
106
          </object>
107
         </at>
108
         <at name="componentclass">com.jeta.forms.gui.form.StandardComponent</at>
109
        </super>
110
        <at name="jetabeanclass">com.jeta.forms.gui.beans.JETABean</at>
111
        <at name="beanclass">com.jeta.forms.components.label.JETALabel</at>
112
        <at name="beanproperties">
113
         <object classname="com.jeta.forms.store.memento.PropertiesMemento">
114
          <at name="classname">com.jeta.forms.components.label.JETALabel</at>
115
          <at name="properties">
116
           <object classname="com.jeta.forms.store.support.PropertyMap">
117
            <at name="border">
118
             <object classname="com.jeta.forms.store.properties.CompoundBorderProperty">
119
              <super classname="com.jeta.forms.store.properties.BorderProperty">
120
               <at name="name">border</at>
121
              </super>
122
              <at name="borders">
123
               <object classname="java.util.LinkedList">
124
                <item >
125
                 <at name="value">
126
                  <object classname="com.jeta.forms.store.properties.DefaultBorderProperty">
127
                   <super classname="com.jeta.forms.store.properties.BorderProperty">
128
                    <at name="name">border</at>
129
                   </super>
130
                  </object>
131
                 </at>
132
                </item>
133
               </object>
134
              </at>
135
             </object>
136
            </at>
137
            <at name="name">lblLineToOffsetColor</at>
138
            <at name="width">229</at>
139
            <at name="text">_Line_to_offset_color</at>
140
            <at name="fill">
141
             <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
142
              <at name="name">fill</at>
143
             </object>
144
            </at>
145
            <at name="height">26</at>
146
           </object>
147
          </at>
148
         </object>
149
        </at>
150
       </object>
151
      </at>
152
     </item>
153
     <item >
154
      <at name="value">
155
       <object classname="com.jeta.forms.store.memento.BeanMemento">
156
        <super classname="com.jeta.forms.store.memento.ComponentMemento">
157
         <at name="cellconstraints">
158
          <object classname="com.jeta.forms.store.memento.CellConstraintsMemento">
159
           <at name="column">2</at>
160
           <at name="row">10</at>
161
           <at name="colspan">1</at>
162
           <at name="rowspan">1</at>
163
           <at name="halign">default</at>
164
           <at name="valign">default</at>
165
           <at name="insets" object="insets">0,0,0,0</at>
166
          </object>
167
         </at>
168
         <at name="componentclass">com.jeta.forms.gui.form.StandardComponent</at>
169
        </super>
170
        <at name="jetabeanclass">com.jeta.forms.gui.beans.JETABean</at>
171
        <at name="beanclass">com.jeta.forms.components.label.JETALabel</at>
172
        <at name="beanproperties">
173
         <object classname="com.jeta.forms.store.memento.PropertiesMemento">
174
          <at name="classname">com.jeta.forms.components.label.JETALabel</at>
175
          <at name="properties">
176
           <object classname="com.jeta.forms.store.support.PropertyMap">
177
            <at name="border">
178
             <object classname="com.jeta.forms.store.properties.CompoundBorderProperty">
179
              <super classname="com.jeta.forms.store.properties.BorderProperty">
180
               <at name="name">border</at>
181
              </super>
182
              <at name="borders">
183
               <object classname="java.util.LinkedList">
184
                <item >
185
                 <at name="value">
186
                  <object classname="com.jeta.forms.store.properties.DefaultBorderProperty">
187
                   <super classname="com.jeta.forms.store.properties.BorderProperty">
188
                    <at name="name">border</at>
189
                   </super>
190
                  </object>
191
                 </at>
192
                </item>
193
               </object>
194
              </at>
195
             </object>
196
            </at>
197
            <at name="name">lblClassifyingFieldName</at>
198
            <at name="width">229</at>
199
            <at name="text">_Classifying_field</at>
200
            <at name="fill">
201
             <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
202
              <at name="name">fill</at>
203
             </object>
204
            </at>
205
            <at name="height">26</at>
206
           </object>
207
          </at>
208
         </object>
209
        </at>
210
       </object>
211
      </at>
212
     </item>
213
     <item >
214
      <at name="value">
215
       <object classname="com.jeta.forms.store.memento.BeanMemento">
216
        <super classname="com.jeta.forms.store.memento.ComponentMemento">
217
         <at name="cellconstraints">
218
          <object classname="com.jeta.forms.store.memento.CellConstraintsMemento">
219
           <at name="column">2</at>
220
           <at name="row">12</at>
221
           <at name="colspan">1</at>
222
           <at name="rowspan">1</at>
223
           <at name="halign">default</at>
224
           <at name="valign">default</at>
225
           <at name="insets" object="insets">0,0,0,0</at>
226
          </object>
227
         </at>
228
         <at name="componentclass">com.jeta.forms.gui.form.StandardComponent</at>
229
        </super>
230
        <at name="jetabeanclass">com.jeta.forms.gui.beans.JETABean</at>
231
        <at name="beanclass">com.jeta.forms.components.label.JETALabel</at>
232
        <at name="beanproperties">
233
         <object classname="com.jeta.forms.store.memento.PropertiesMemento">
234
          <at name="classname">com.jeta.forms.components.label.JETALabel</at>
235
          <at name="properties">
236
           <object classname="com.jeta.forms.store.support.PropertyMap">
237
            <at name="border">
238
             <object classname="com.jeta.forms.store.properties.CompoundBorderProperty">
239
              <super classname="com.jeta.forms.store.properties.BorderProperty">
240
               <at name="name">border</at>
241
              </super>
242
              <at name="borders">
243
               <object classname="java.util.LinkedList">
244
                <item >
245
                 <at name="value">
246
                  <object classname="com.jeta.forms.store.properties.DefaultBorderProperty">
247
                   <super classname="com.jeta.forms.store.properties.BorderProperty">
248
                    <at name="name">border</at>
249
                   </super>
250
                  </object>
251
                 </at>
252
                </item>
253
               </object>
254
              </at>
255
             </object>
256
            </at>
257
            <at name="name">lblOffsetXFieldName</at>
258
            <at name="width">229</at>
259
            <at name="text">_OffsetX_field</at>
260
            <at name="fill">
261
             <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
262
              <at name="name">fill</at>
263
             </object>
264
            </at>
265
            <at name="height">26</at>
266
           </object>
267
          </at>
268
         </object>
269
        </at>
270
       </object>
271
      </at>
272
     </item>
273
     <item >
274
      <at name="value">
275
       <object classname="com.jeta.forms.store.memento.BeanMemento">
276
        <super classname="com.jeta.forms.store.memento.ComponentMemento">
277
         <at name="cellconstraints">
278
          <object classname="com.jeta.forms.store.memento.CellConstraintsMemento">
279
           <at name="column">2</at>
280
           <at name="row">14</at>
281
           <at name="colspan">1</at>
282
           <at name="rowspan">1</at>
283
           <at name="halign">default</at>
284
           <at name="valign">default</at>
285
           <at name="insets" object="insets">0,0,0,0</at>
286
          </object>
287
         </at>
288
         <at name="componentclass">com.jeta.forms.gui.form.StandardComponent</at>
289
        </super>
290
        <at name="jetabeanclass">com.jeta.forms.gui.beans.JETABean</at>
291
        <at name="beanclass">com.jeta.forms.components.label.JETALabel</at>
292
        <at name="beanproperties">
293
         <object classname="com.jeta.forms.store.memento.PropertiesMemento">
294
          <at name="classname">com.jeta.forms.components.label.JETALabel</at>
295
          <at name="properties">
296
           <object classname="com.jeta.forms.store.support.PropertyMap">
297
            <at name="border">
298
             <object classname="com.jeta.forms.store.properties.CompoundBorderProperty">
299
              <super classname="com.jeta.forms.store.properties.BorderProperty">
300
               <at name="name">border</at>
301
              </super>
302
              <at name="borders">
303
               <object classname="java.util.LinkedList">
304
                <item >
305
                 <at name="value">
306
                  <object classname="com.jeta.forms.store.properties.DefaultBorderProperty">
307
                   <super classname="com.jeta.forms.store.properties.BorderProperty">
308
                    <at name="name">border</at>
309
                   </super>
310
                  </object>
311
                 </at>
312
                </item>
313
               </object>
314
              </at>
315
             </object>
316
            </at>
317
            <at name="name">lblOffsetYFieldName</at>
318
            <at name="width">229</at>
319
            <at name="text">_OffsetY_field</at>
320
            <at name="fill">
321
             <object classname="com.jeta.forms.store.properties.effects.PaintProperty">
322
              <at name="name">fill</at>
323
             </object>
324
            </at>
325
            <at name="height">26</at>
326
           </object>
327
          </at>
328
         </object>
329
        </at>
330
       </object>
331
      </at>
332
     </item>
333
     <item >
334
      <at name="value">
335
       <object classname="com.jeta.forms.store.memento.BeanMemento">
336
        <super classname="com.jeta.forms.store.memento.ComponentMemento">
337
         <at name="cellconstraints">
338
          <object classname="com.jeta.forms.store.memento.CellConstraintsMemento">
339
           <at name="column">2</at>
340
           <at name="row">16</at>
341
           <at name="colspan">1</at>
342
           <at name="rowspan">1</at>
343
           <at name="halign">default</at>
344
           <at name="valign">default</at>
345
           <at name="insets" object="insets">0,0,0,0</at>
346
          </object>
347
         </at>
348
         <at name="componentclass">com.jeta.forms.gui.form.StandardComponent</at>
349
        </super>
350
        <at name="jetabeanclass">com.jeta.forms.gui.beans.JETABean</at>
351
        <at name="beanclass">com.jeta.forms.components.label.JETALabel</at>
352
        <at name="beanproperties">
353
         <object classname="com.jeta.forms.store.memento.PropertiesMemento">
354
          <at name="classname">com.jeta.forms.components.label.JETALabel</at>
355
          <at name="properties">
356
           <object classname="com.jeta.forms.store.support.PropertyMap">
357
            <at name="border">
358
             <object classname="com.jeta.forms.store.properties.CompoundBorderProperty">
359
              <super classname="com.jeta.forms.store.properties.BorderProperty">
360
               <at name="name">border</at>
361
              </super>
362
              <at name="borders">
363
               <object classname="java.util.LinkedList">
364
                <item >
365
                 <at name="value">
366
                  <object classname="com.jeta.forms.store.properties.DefaultBorderProperty">
367
                   <super classname="com.jeta.forms.store.properties.BorderProperty">
368
                    <at name="name">border</at>
369
                   </super>
370
                  </object>
371
                 </at>
372
                </item>
373
               </object>
374
              </at>
375
             </object>
376
            </at>
377
            <at name="name">lblRotationFieldName</at>
378
            <at name="width">229</at>
... This diff was truncated because it exceeds the maximum size that can be displayed.

Also available in: Unified diff