Statistics
| Revision:

root / trunk / applications / appgvSIG / src / com / iver / cit / gvsig / gui / Dialogs / InfoToolViewer.java @ 6045

History | View | Annotate | Download (7.26 KB)

1
package com.iver.cit.gvsig.gui.Dialogs;
2

    
3
import java.awt.Dimension;
4
import java.util.Vector;
5
import javax.swing.JList;
6
import javax.swing.JPanel;
7
import javax.swing.event.ListSelectionListener;
8
import javax.swing.tree.DefaultMutableTreeNode;
9
import javax.swing.tree.DefaultTreeModel;
10
import javax.swing.tree.TreePath;
11
import org.xml.sax.ContentHandler;
12
import org.xml.sax.SAXException;
13

    
14
import com.iver.cit.gvsig.fmap.layers.FLayer;
15
import com.iver.cit.gvsig.fmap.layers.FLyrDefault;
16
import com.iver.cit.gvsig.fmap.layers.layerOperations.InfoByPoint;
17
import com.iver.cit.gvsig.fmap.layers.layerOperations.XMLItem;
18
import com.iver.cit.gvsig.gui.Dialogs.FInfoDialogXML;
19
import com.iver.cit.gvsig.gui.wizards.FormatListModel;
20
import com.iver.utiles.xmlViewer.XMLContent;
21

    
22
/**
23
 * This is the generic Feature Info Viewer
24
 * 
25
 * If the feature Info comes from a special layer which has registered
26
 * the way to visualize itself, adds a panel that the layer should provide
27
 * otherwise this viewer will add a panel to visualize HTML or a special
28
 * viewer to show XML.
29
 * 
30
 * @author laura
31
 *
32
 */
33
public class InfoToolViewer extends JPanel {
34
        
35
    private javax.swing.JScrollPane jScrollPane = null;
36
    private JList layerList = null;
37
    private javax.swing.JSplitPane jSplitPane1 = null;
38
    private javax.swing.JPanel layerListPanel = null;
39
        private JPanel infoViewerPanel;        
40
        private XMLItem[] m_layers;
41

    
42
    /**
43
     * This is the default constructor
44
     */
45
    public InfoToolViewer() {
46
        super();
47
        initialize();
48
    }
49
    
50
    public InfoToolViewer(XMLItem[] layers) {
51
            super();
52
            m_layers = layers;
53
            initialize();
54
            updateViewer(0);
55
            layerList.setSelectedIndex(0);
56
    }
57
    
58
    public void setLayers(XMLItem[] layers){
59
            m_layers = layers;
60
    }
61

    
62

    
63
    /**
64
     * This method initializes this
65
     */
66
    private void initialize() {
67
        this.setLayout(new java.awt.BorderLayout());
68
        this.add(getJSplitPane1(), java.awt.BorderLayout.CENTER);
69
        this.setSize(600, 600);
70
        this.setPreferredSize(new Dimension(600, 600));
71
    }
72

    
73
    /**
74
     * This method initializes jScrollPane
75
     *
76
     * @return javax.swing.JScrollPane
77
     */
78
    private javax.swing.JScrollPane getJScrollPane() {
79
        if (jScrollPane == null) {
80
            jScrollPane = new javax.swing.JScrollPane();
81
            jScrollPane.setSize(new Dimension(600,600));
82
            jScrollPane.setPreferredSize( new Dimension(600,600));
83
            jScrollPane.setViewportView(getLayerListPanel());
84
        }
85

    
86
        return jScrollPane;
87
    }
88

    
89
    public JList getJList(){
90

    
91
          if (layerList == null) {
92
                Vector layerNames = new Vector();
93
                if (m_layers != null)
94
                {
95
                        for (int i = 0; i < m_layers.length; i++)
96
                        {
97
                                layerNames.add(m_layers[i].getLayer().getName());
98
                        }                
99
                }         
100
                layerList = new JList(layerNames);
101
                layerList.setModel(new FormatListModel((String[])layerNames.toArray(new String[0])));
102
                layerList.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
103
          }
104
  
105
      layerList.addListSelectionListener(new ListSelectionListener() { 
106
                                public void valueChanged(javax.swing.event.ListSelectionEvent e) {
107
                                  int changedIdx = layerList.getSelectedIndex();//e.getFirstIndex();
108
                                 
109
                                  if (changedIdx == -1) return;
110
                                  updateViewer(changedIdx);
111
                   }
112
          });    
113
      return layerList;
114
}
115
    /**
116
     * This method initializes jSplitPane1
117
     *
118
     * @return javax.swing.JSplitPane
119
     */
120
    private javax.swing.JSplitPane getJSplitPane1() {
121
        if (jSplitPane1 == null) {
122
            jSplitPane1 = new javax.swing.JSplitPane();
123
            jSplitPane1.setLeftComponent(getJScrollPane());
124
            jSplitPane1.setRightComponent(getInfoViewerPanel());
125
            jSplitPane1.setDividerSize(4);
126
            jSplitPane1.setDividerLocation(100);
127
            jSplitPane1.setSize( new Dimension(600,600));
128
            jSplitPane1.setPreferredSize( new Dimension(600,600));
129
        }
130
        return jSplitPane1;
131
    }
132

    
133
    /**
134
     * This method initializes jPanel
135
     *
136
     * @return javax.swing.JPanel
137
     */
138
    private javax.swing.JPanel getLayerListPanel() {
139
        if (layerListPanel == null) {
140
            layerListPanel = new javax.swing.JPanel();
141
            layerListPanel.setLayout(new java.awt.BorderLayout());
142
            layerListPanel.add(getJList(), java.awt.BorderLayout.CENTER);
143
        }
144

    
145
        return layerListPanel;
146
    }
147

    
148
    /**
149
     * This method initializes jPanel1
150
     *
151
     * @return javax.swing.JPanel
152
     */
153
    private javax.swing.JPanel getInfoViewerPanel() {
154
        if (infoViewerPanel == null) {
155
            infoViewerPanel = new javax.swing.JPanel();
156
            infoViewerPanel.setLayout(new java.awt.BorderLayout());
157
        }
158
        validate();
159
        return infoViewerPanel;
160
    } 
161
    
162
    /**
163
     * updates the layer to display
164
     *
165
     */
166
    private void updateViewer(int changedIdx)
167
    {
168
            if((m_layers == null) || (m_layers.length == 0)) return;
169
                  final XMLItem item = m_layers[changedIdx];
170
                  FLayer layer = item.getLayer(); 
171
                
172
                  if (layer instanceof InfoByPoint){                                                                          
173
                          FLyrDefault defaultLayer = (FLyrDefault)layer;
174
                          if (defaultLayer.getProperty("customPanel") != null){
175
                                  
176
                                  Class c = (Class)defaultLayer.getProperty("customPanel");
177
                                  IInfoToolPanel infoPanel = null;
178
                                try {
179
                                        infoPanel = (IInfoToolPanel)c.newInstance();
180
                                } catch (InstantiationException e1) {
181
                                        e1.printStackTrace();
182
                                } catch (IllegalAccessException e1) {
183
                                        e1.printStackTrace();
184
                                }
185
                                                                        
186
                          infoPanel.show(item.toString());
187
                          infoViewerPanel.removeAll();
188
                          infoViewerPanel.add((JPanel)infoPanel);
189
                          infoViewerPanel.setVisible( true ); 
190
                          revalidate();
191

    
192
                          }
193
                          else {
194
                                  
195
                                  if (item.toString().toLowerCase().startsWith( "<html>"))
196
                                  {
197
                                          IInfoToolPanel htmlPanel = new HTMLInfoToolPanel();
198
                                          htmlPanel.show(item.toString());
199
                                          infoViewerPanel.removeAll();
200
                                          infoViewerPanel.add((JPanel)htmlPanel);
201
                                          infoViewerPanel.setVisible( true );                                                           
202
                                          revalidate();
203
                                  }
204
                                  else
205
                                  {
206
                                          FInfoDialogXML dlgXML = new FInfoDialogXML();
207
                                                try {
208
                                                        dlgXML.setModel(new XMLContent() {
209
                                                                private ContentHandler handler;
210

    
211
                                                                public void setContentHandler(ContentHandler arg0) {
212
                                                                        handler = arg0;
213
                                                                }
214

    
215
                                                                public void parse() throws SAXException {
216
                                                                        handler.startDocument();
217
                                                                        item.parse( handler);
218
                                                                        handler.endDocument();
219
                                                                }
220
                                                        });
221
                                                } catch (SAXException e1) {
222
                                                        // TODO Auto-generated catch block
223
                                                        e1.printStackTrace();
224
                                                }
225
                                                dlgXML.getXmlTree().setRootVisible(false);
226
                                                DefaultTreeModel treeModel = (DefaultTreeModel) dlgXML
227
                                                                .getXmlTree().getModel();
228
                                                DefaultMutableTreeNode n;
229
                                                DefaultMutableTreeNode root = (DefaultMutableTreeNode) dlgXML
230
                                                                .getXmlTree().getModel().getRoot();
231
                                                n = root.getFirstLeaf();
232
                                                TreePath path = new TreePath(treeModel.getPathToRoot(n));
233
                                                dlgXML.getXmlTree().expandPath(path);
234
                                                dlgXML.getXmlTree().setSelectionPath(path);
235
                                                //dlgXML.
236
                                                
237
                                                infoViewerPanel.removeAll();
238
                                                infoViewerPanel.add(dlgXML);
239
                                                infoViewerPanel.setVisible( true ); 
240
                                                this.validate();
241
                                            this.doLayout();        
242
                                  }
243
                          }
244
                  }            
245
    }
246
}