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 / toc / actions / LayerErrorsPanel.java @ 43215

History | View | Annotate | Download (5.25 KB)

1
package org.gvsig.app.project.documents.view.toc.actions;
2

    
3
import java.awt.Dimension;
4
import java.awt.event.ActionEvent;
5
import java.awt.event.ActionListener;
6
import java.util.ArrayList;
7
import java.util.HashSet;
8
import java.util.List;
9
import java.util.Set;
10

    
11
import org.apache.commons.lang3.exception.ExceptionUtils;
12

    
13
import org.gvsig.fmap.mapcontext.layers.FLayer;
14
import org.gvsig.fmap.mapcontext.layers.operations.SingleLayer;
15
import org.gvsig.fmap.mapcontrol.swing.dynobject.DynObjectEditor;
16
import org.gvsig.tools.ToolsLocator;
17
import org.gvsig.tools.i18n.I18nManager;
18
import org.gvsig.tools.util.impl.CallableException;
19

    
20
import org.slf4j.Logger;
21
import org.slf4j.LoggerFactory;
22

    
23
public class LayerErrorsPanel
24
    extends LayerErrorsView {
25

    
26
    private static final Logger logger = LoggerFactory.getLogger(LayerErrorsPanel.class);
27
    private static final long serialVersionUID = -5972995402218954892L;
28
    private FLayer layer;
29

    
30
    public LayerErrorsPanel(FLayer layer) {
31
        this.initComponents();
32
        this.setLayer(layer);
33
    }
34

    
35
    public LayerErrorsPanel(String name, Exception ex) {
36
        this.initComponents();
37
        this.setName(name);
38
        this.setError(ex);
39
    }
40

    
41
    private void initComponents() {
42
        this.translate();
43
        this.txtMessage.setContentType("text/html");
44
        this.btnClose.addActionListener(new ActionListener() {
45

    
46
            @Override
47
            public void actionPerformed(ActionEvent e) {
48
                doClose();
49
            }
50
        });
51
        this.btnViewParameters.addActionListener(new ActionListener() {
52

    
53
            @Override
54
            public void actionPerformed(ActionEvent e) {
55
                doViewParameters();
56
            }
57
        });
58
        this.setPreferredSize(new Dimension(550, 400));
59
    }
60

    
61
    @Override
62
    public void setName(String name) {
63
        this.txtLayerName.setText(name);
64
    }
65

    
66
    public void setError(Throwable e) {
67
        List<Throwable> exs = new ArrayList<>();
68
        exs.add(e);
69
        this.txtMessage.setText(new MessageAsHTML(exs).toString());
70
        this.btnViewParameters.setEnabled(false);
71
    }
72

    
73
    public void setLayer(FLayer layer) {
74
        this.layer = layer;
75
        setName(layer.getName());
76
        this.txtMessage.setText(new MessageAsHTML(layer.getErrors()).toString());
77
        this.btnViewParameters.setEnabled(this.layer instanceof SingleLayer);
78
    }
79

    
80
    private class MessageAsHTML {
81

    
82
        StringBuilder html;
83
        Set<String> usedMsgs;
84

    
85
        public MessageAsHTML(List<Throwable> exs) {
86
            this.clear();
87
            this.build(exs);
88
        }
89

    
90
        public MessageAsHTML() {
91
            this.clear();
92
        }
93

    
94
        public void clear() {
95
            this.html = new StringBuilder();
96
            this.usedMsgs = new HashSet<>();
97
        }
98

    
99
        public void build(List<Throwable> exs) {
100
            for( Throwable ex : exs ) {
101
//                html.append("<ul>\n");
102
                List<Throwable> causes = new ArrayList<>();
103
                causes.addAll(ExceptionUtils.getThrowableList(ex));
104
                if( ex instanceof List ) {
105
                    causes.addAll((List<Throwable>) ex);
106
                }
107
                for( Throwable cause : causes ) {
108
                    if( cause instanceof List ) {
109
                        continue;
110
                    }
111
                    if( cause instanceof CallableException ) {
112
                        cause = ((CallableException) cause).getCause();
113
                    }
114
                    if( cause == null ) {
115
                        continue;
116
                    }
117
                    String message = cause.getMessage();
118
                    if( message != null ) {
119
                        if( !this.usedMsgs.contains(message) ) {
120
                            this.usedMsgs.add(message);
121
                            html.append("<li>");
122
                            html.append(message.replace("\n", "<br>\n"));
123
                            if( cause.getCause() != null ) {
124
                                this.build(ExceptionUtils.getThrowableList(
125
                                    cause.getCause()));
126
                            }
127
                            html.append("</li>\n");
128
                        }
129
                    }
130
                }
131

    
132
//                html.append("</ul>\n");
133
            }
134
        }
135

    
136
        @Override
137
        public String toString() {
138
            return "<ul>\n" + html.toString() + "</ul>\n";
139
        }
140
    }
141

    
142
    private void translate() {
143
        I18nManager i18nManager = ToolsLocator.getI18nManager();
144
        this.lblLayer.setText(i18nManager.getTranslation("_Layer") + ":");
145
        this.lblProblem.setText(i18nManager.getTranslation("_Problems") + ":");
146
        this.btnClose.setText(i18nManager.getTranslation("_Close"));
147
        this.btnViewParameters.setText(i18nManager.getTranslation("_View_properties_of_data_source"));
148
    }
149

    
150
    private void doClose() {
151
        this.setVisible(false);
152
    }
153

    
154
    private void doViewParameters() {
155
        try {
156
            DynObjectEditor editor = new DynObjectEditor(
157
                ((SingleLayer) layer).getDataStore().getParameters()
158
            );
159
            editor.editObject(true);
160
        } catch (Throwable th) {
161
            logger.warn(
162
                "Can't show standard properties dialog for this parameters.",
163
                th);
164
        }
165
    }
166

    
167
}