Statistics
| Revision:

root / 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 @ 5130

History | View | Annotate | Download (10.1 KB)

1

    
2
package org.gvsig.legend.urbanhorizontalsignage.swing.impl;
3

    
4
import javax.swing.AbstractButton;
5
import javax.swing.ImageIcon;
6
import javax.swing.JLabel;
7
import javax.swing.JPanel;
8
import javax.swing.SpinnerNumberModel;
9
import org.gvsig.app.project.documents.view.legend.gui.Features;
10
import org.gvsig.fmap.dal.DataTypes;
11
import org.gvsig.fmap.dal.feature.FeatureStore;
12
import org.gvsig.fmap.dal.feature.FeatureType;
13
import org.gvsig.fmap.dal.swing.DALSwingLocator;
14
import org.gvsig.fmap.dal.swing.DataSwingManager;
15
import org.gvsig.fmap.dal.swing.featuretype.AttributeDescriptorPickerController;
16
import org.gvsig.fmap.geom.Geometry;
17
import org.gvsig.fmap.geom.GeometryUtils;
18
import org.gvsig.fmap.mapcontext.layers.FLayer;
19
import org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect;
20
import org.gvsig.fmap.mapcontext.rendering.legend.ILegend;
21
import org.gvsig.legend.urbanhorizontalsignage.lib.api.UrbanHorizontalSignageLegend;
22
import static org.gvsig.legend.urbanhorizontalsignage.lib.api.UrbanHorizontalSignageLegend.DEFAULT_GAP_WIDTH_VALUE;
23
import org.gvsig.legend.urbanhorizontalsignage.lib.api.UrbanHorizontalSignageLocator;
24
import org.gvsig.legend.urbanhorizontalsignage.swing.api.UrbanHorizontalSignageLegendEditor;
25
import org.gvsig.tools.ToolsLocator;
26
import org.gvsig.tools.i18n.I18nManager;
27
import org.gvsig.tools.swing.api.ToolsSwingLocator;
28
import org.gvsig.tools.swing.api.ToolsSwingManager;
29
import org.gvsig.tools.swing.icontheme.IconTheme;
30
import org.slf4j.Logger;
31
import org.slf4j.LoggerFactory;
32

    
33

    
34
public class DefaultUrbanHorizontalSignageLegendEditor extends DefaultUrbanHorizontalSignageLegendEditorView implements UrbanHorizontalSignageLegendEditor {
35

    
36
    private static final long serialVersionUID = 4307714097793669675L;
37
    private static final Logger LOGGER = LoggerFactory.getLogger(DefaultUrbanHorizontalSignageLegendEditor.class);
38

    
39
    private UrbanHorizontalSignageLegend legend;
40
    private FLayer layer;
41
    private final Class<? extends UrbanHorizontalSignageLegend> legendClass;
42
    private AttributeDescriptorPickerController widthFieldController;
43
    private AttributeDescriptorPickerController continuityFieldController;
44
    private AttributeDescriptorPickerController segmentsColorFieldController;
45
    private AttributeDescriptorPickerController paintHolesFieldController;
46
    private AttributeDescriptorPickerController holesColorFieldController;
47
    private AttributeDescriptorPickerController segmentsLengthFieldController;
48
    private AttributeDescriptorPickerController holesLengthFieldController;
49
    private AttributeDescriptorPickerController roundVertexFieldController;
50

    
51
    public DefaultUrbanHorizontalSignageLegendEditor() {
52
        this.legendClass = UrbanHorizontalSignageLocator.getUrbanHorizontalSignageManager().getLegendClass();
53
        initComponents();
54
    }
55

    
56
    private void initComponents(){
57
        ToolsSwingManager toolsSwingManager = ToolsSwingLocator.getToolsSwingManager();
58
        
59
        DataSwingManager dataSwingManager = DALSwingLocator.getDataSwingManager();
60
        widthFieldController = dataSwingManager.createAttributeDescriptorPickerController(cboWidthFields, (t) -> {
61
            return t.getDataType().isNumeric();
62
        });
63
        continuityFieldController = dataSwingManager.createAttributeDescriptorPickerController(cboContinuityFields, (t) -> {
64
            return t.getDataType().isNumeric();
65
        });
66
        segmentsColorFieldController = dataSwingManager.createAttributeDescriptorPickerController(cboSegmentsColorFields, (t) -> {
67
            return t.getDataType().isNumeric() || t.getType() == DataTypes.STRING;
68
        });
69
        segmentsLengthFieldController = dataSwingManager.createAttributeDescriptorPickerController(cboSegmentsLengthFields, (t) -> {
70
            return t.getDataType().isNumeric();
71
        });
72
        paintHolesFieldController = dataSwingManager.createAttributeDescriptorPickerController(cboPaintHolesFields, (t) -> {
73
            return t.getType() != DataTypes.GEOMETRY;
74
        });
75
        holesColorFieldController = dataSwingManager.createAttributeDescriptorPickerController(cboHolesColorFields, (t) -> {
76
            return t.getDataType().isNumeric() || t.getType() == DataTypes.STRING;
77
        });
78
        holesLengthFieldController = dataSwingManager.createAttributeDescriptorPickerController(cboHolesLengthFields, (t) -> {
79
            return t.getDataType().isNumeric();
80
        });
81
        roundVertexFieldController = dataSwingManager.createAttributeDescriptorPickerController(cboRoundVertexFields, (t) -> {
82
            return t.getType() != DataTypes.GEOMETRY;
83
        });
84
        
85
        SpinnerNumberModel spnModel = new SpinnerNumberModel((int)DEFAULT_GAP_WIDTH_VALUE, 0, Integer.MAX_VALUE, 1);
86
        spnGapWith.setModel(spnModel);
87
        
88
        translateAll();
89
    }
90

    
91
    private void translateAll() {
92
        this.translate(this.lblWidthField);
93
        this.translate(this.lblContinuityField);
94
        this.translate(this.lblSegmentsColorField);
95
        this.translate(this.lblSegmentsLengthField);
96
        this.translate(this.lblHolesColorField);
97
        this.translate(this.lblPaintHolesField);
98
        this.translate(this.lblHolesLengthField);
99
        this.translate(this.lblRoundVertexField);
100
        this.translate(this.lblGapWidth);
101
    }
102

    
103
    private void translate(AbstractButton component) {
104
        I18nManager i18n = ToolsLocator.getI18nManager();
105
        component.setText(i18n.getTranslation(component.getText()));
106
    }
107

    
108
    private void translate(JLabel component) {
109
        I18nManager i18n = ToolsLocator.getI18nManager();
110
        component.setText(i18n.getTranslation(component.getText()));
111
    }
112

    
113
    @Override
114
    public void setData(FLayer layer, ILegend legend) {
115
        if( layer == this.layer && legend == this.legend ) {
116
            return;
117
        }
118
        this.layer = layer;
119
        if( this.getLegendClass().isInstance(legend) ) {
120
            this.legend = (UrbanHorizontalSignageLegend) legend;
121
        } else {
122
            this.legend = UrbanHorizontalSignageLocator.getUrbanHorizontalSignageManager().create();
123
        }
124
               
125
        if( layer instanceof FLyrVect ) {
126
            FeatureStore store = ((FLyrVect) layer).getFeatureStore();
127
            if( store != null ) {
128
                try {
129
                    FeatureType ftype = store.getDefaultFeatureType();
130
                    this.widthFieldController.setFeatureType(ftype);
131
                    this.continuityFieldController.setFeatureType(ftype);
132
                    this.segmentsColorFieldController.setFeatureType(ftype);
133
                    this.segmentsLengthFieldController.setFeatureType(ftype);
134
                    this.paintHolesFieldController.setFeatureType(ftype);
135
                    this.holesColorFieldController.setFeatureType(ftype);
136
                    this.holesLengthFieldController.setFeatureType(ftype);
137
                    this.roundVertexFieldController.setFeatureType(ftype);
138
                    
139
                    
140
                    this.widthFieldController.set(this.legend.getWidthFieldName());
141
                    this.continuityFieldController.set(this.legend.getContinuityFieldName());
142
                    this.segmentsColorFieldController.set(this.legend.getSegmentsColorFieldName());
143
                    this.segmentsLengthFieldController.set(this.legend.getSegmentsLengthFieldName());
144
                    this.paintHolesFieldController.set(this.legend.getPaintHolesFieldName());
145
                    this.holesColorFieldController.set(this.legend.getHolesColorFieldName());
146
                    this.holesLengthFieldController.set(this.legend.getHolesLengthFieldName());
147
                    this.roundVertexFieldController.set(this.legend.getRoundVertexFieldName());
148

    
149
                    this.spnGapWith.getModel().setValue(this.legend.getGapWidth());
150

    
151
                } catch (Exception ex) {
152
                    LOGGER.warn("Can't fill data of legend.", ex);
153
                    //FIXME: ?hacemos algo m?s con la excepci?n?
154

    
155
                }
156
            }
157
        }
158
    }
159

    
160
    @Override
161
    public ILegend getLegend() {
162
        this.legend.setWidthFieldName((String) this.widthFieldController.getName());
163
        this.legend.setContinuityFieldName(this.continuityFieldController.getName());
164
        this.legend.setSegmentsColorFieldName(this.segmentsColorFieldController.getName());
165
        this.legend.setSegmentsLengthFieldName(this.segmentsLengthFieldController.getName());
166
        this.legend.setPaintHolesFieldName(this.paintHolesFieldController.getName());
167
        this.legend.setHolesColorFieldName(this.holesColorFieldController.getName());
168
        this.legend.setHolesLengthFieldName(this.holesLengthFieldController.getName());
169
        this.legend.setRoundVertexFieldName(this.roundVertexFieldController.getName());
170
        
171
        this.legend.setGapWith((int) spnGapWith.getValue());
172

    
173
        return legend;
174
    }
175

    
176
    @Override
177
    public String getDescription() {
178
        I18nManager i18n = ToolsLocator.getI18nManager();
179
        return i18n.getTranslation( "_Urban_horizontal_signage_legend_description");
180
    }
181

    
182
    @Override
183
    public ImageIcon getIcon() {
184
        IconTheme theme = ToolsSwingLocator.getIconThemeManager().getCurrent();
185
        return theme.get("legend-overview-vectorial-urbanhorizontalsignage");
186
    }
187

    
188
    @Override
189
        public Class getParentClass() {
190
                return Features.class;
191
        }
192

    
193
    @Override
194
    public String getTitle() {
195
        I18nManager i18n = ToolsLocator.getI18nManager();
196
        return i18n.getTranslation( "_Urban_horizontal_signage_legend");
197
    }
198

    
199
    @Override
200
    public JPanel getPanel() {
201
        return this;
202
    }
203

    
204
    @Override
205
    public Class getLegendClass() {
206
        return this.legendClass;
207
    }
208

    
209
    @Override
210
    public boolean isSuitableFor(FLayer layer) {
211
        if(layer instanceof FLyrVect){
212
            try {
213
                int shapeType = ((FLyrVect)layer).getShapeType();
214
                return (GeometryUtils.isSubtype(Geometry.TYPES.CURVE, shapeType) ||
215
                        GeometryUtils.isSubtype(Geometry.TYPES.MULTICURVE, shapeType));
216
            } catch (Exception ex) {
217
                LOGGER.debug("Can't get shape type for layer "+layer.getName(), ex);
218
                return false;
219
            }
220
        }
221
        return false;
222
    }
223

    
224
}