Statistics
| Revision:

svn-gvsig-desktop / trunk / org.gvsig.desktop / org.gvsig.desktop.plugin / org.gvsig.app / org.gvsig.app.mainplugin / src / main / java / org / gvsig / app / project / documents / view / expressionevaluator / ViewCapturePointElement.java @ 44129

History | View | Annotate | Download (3.45 KB)

1
package org.gvsig.app.project.documents.view.expressionevaluator;
2

    
3
import java.awt.Dialog;
4
import java.awt.Window;
5
import org.gvsig.expressionevaluator.ExpressionBuilder;
6
import org.gvsig.expressionevaluator.ExpressionBuilder.Config;
7
import org.gvsig.expressionevaluator.ExpressionBuilder.GeometrySupportType;
8
import org.gvsig.expressionevaluator.ExpressionEvaluatorLocator;
9
import org.gvsig.expressionevaluator.swing.Element.CalculatedElement;
10
import org.gvsig.expressionevaluator.swing.Element.SimpleElement;
11
import org.gvsig.expressionevaluator.swing.JExpressionBuilder;
12
import org.gvsig.expressionevaluator.swing.spi.AbstractElement;
13
import org.gvsig.fmap.geom.Geometry;
14
import org.gvsig.tools.ToolsLocator;
15
import org.gvsig.tools.swing.api.Component;
16

    
17
/**
18
 *
19
 * @author jjdelcerro
20
 */
21
@SuppressWarnings("UseSpecificCatch")
22
public class ViewCapturePointElement
23
        extends AbstractElement
24
        implements SimpleElement, CalculatedElement {
25

    
26
    private ViewCapturePointPanel aditionalPanel;
27

    
28
    public ViewCapturePointElement() {
29
        super(
30
                ToolsLocator.getI18nManager().getTranslation("_Capture_point"),
31
                "expressionbuilder-element-view-capture-point"
32
        );
33
    }
34

    
35
    @Override
36
    public Object getValue() {
37
        if (this.aditionalPanel == null) {
38
            return null;
39
        }
40
        try {
41
            Geometry geom = this.aditionalPanel.getGeometry();
42
            if (geom == null) {
43
                return null;
44
            }
45
            ExpressionBuilder builder = ExpressionEvaluatorLocator.getManager().createExpressionBuilder();
46
            if (this.aditionalPanel.insertAsWKT()) {
47
                if (this.aditionalPanel.insertAsGeometry()) {
48
                    builder.getConfig().set(
49
                            Config.geometry_type_support,
50
                            GeometrySupportType.WKT
51
                    );
52
                    return builder.geometry(geom, geom.getProjection()).toString();
53
                } else {
54
                    String wkt = geom.convertToWKT();
55
                    return "'" + wkt + "'";
56
                }
57
            } else {
58
                if (this.aditionalPanel.insertAsGeometry()) {
59
                    builder.getConfig().set(
60
                            Config.geometry_type_support,
61
                            GeometrySupportType.WKB
62
                    );
63
                    return builder.geometry(geom, geom.getProjection()).toString();
64
                } else {
65
                    byte[] wkb = geom.convertToWKB();
66
                    return builder.bytearray_hex(wkb);
67
                }
68
            }
69
        } catch (Exception ex) {
70
            LOGGER.warn("Can't get point value.", ex);
71
            return null;
72
        }
73
    }
74

    
75
    @Override
76
    public Component getAditionalPanel(JExpressionBuilder expressionBuilder) {
77
        if (aditionalPanel == null) {
78
            this.aditionalPanel = new ViewCapturePointPanel();
79
        }
80
        return this.aditionalPanel;
81
    }
82

    
83
    @Override
84
    public boolean isEnabled() {
85
        return ! isModalDialogShowing();
86
    }
87

    
88
    private static boolean isModalDialogShowing() {
89
        Window[] windows = Window.getWindows();
90
        if (windows != null) { // don't rely on current implementation, which at least returns [0].
91
            for (Window w : windows) {
92
                if (w.isShowing() && w instanceof Dialog && ((Dialog) w).isModal()) {
93
                    return true;
94
                }
95
            }
96
        }
97
        return false;
98
    }
99
}