Statistics
| Revision:

root / trunk / extensions / extArcims / src / es / prodevelop / cit / gvsig / arcims / gui / panels / utils / ServicesTableDataSource.java @ 8110

History | View | Annotate | Download (5.75 KB)

1
package es.prodevelop.cit.gvsig.arcims.gui.panels.utils;
2

    
3
import java.awt.geom.Rectangle2D;
4
import java.io.BufferedOutputStream;
5
import java.io.DataOutputStream;
6
import java.io.File;
7
import java.io.FileNotFoundException;
8
import java.io.FileOutputStream;
9
import java.io.FileReader;
10
import java.io.IOException;
11
import java.io.InputStream;
12
import java.io.OutputStreamWriter;
13
import java.io.Reader;
14
import java.net.HttpURLConnection;
15
import java.net.URL;
16
import java.util.ArrayList;
17
import java.util.Iterator;
18
import java.util.TreeSet;
19
import java.util.Vector;
20

    
21
import javax.swing.event.TableModelListener;
22
import javax.swing.table.TableModel;
23
import javax.swing.table.AbstractTableModel;
24
import javax.swing.JTable;
25
import javax.swing.JLabel;
26
import java.lang.NoSuchMethodException;
27

    
28
import org.kxml2.io.KXmlParser;
29
import org.xmlpull.v1.XmlPullParserException;
30

    
31
import es.prodevelop.cit.gvsig.arcims.fmap.drivers.FMapRasterArcImsDriver;
32
import es.prodevelop.cit.gvsig.arcims.gui.panels.FeatureServicePanel;
33
import es.prodevelop.cit.gvsig.arcims.gui.panels.ServiceNamesPanel.*;
34

    
35
import org.apache.log4j.Logger;
36
import org.gvsig.remoteClient.arcims.ArcImsProtocolHandler;
37
import org.gvsig.remoteClient.arcims.exceptions.ArcImsException;
38
import org.gvsig.remoteClient.arcims.utils.ArcImsDownloadUtils;
39
import org.gvsig.remoteClient.arcims.utils.ServiceInfoTags;
40
import org.gvsig.remoteClient.utils.BoundaryBox;
41

    
42
import com.iver.andami.PluginServices;
43

    
44

    
45
/**
46
* This class is used to get and use the data model of the
47
* available services table.
48

49
* @author jldominguez
50
*/
51

    
52

    
53
public class ServicesTableDataSource {
54
        private Vector colNames;
55
        private Vector data; // vector of vectors
56
        
57
        protected static Logger logger = Logger.getLogger(ServicesTableDataSource.class.getName());
58
        private String nameColString = PluginServices.getText(this, "name");
59
        private String typeColString = PluginServices.getText(this, "arcims_server_type_col_name");
60
        private String statusColString = PluginServices.getText(this, "arcims_server_status_col_name");
61
        
62
        
63
        /**
64
        * The constructor is called with the server's URL as a parameter.
65
        * Sets the columns names to "Name", "Type" and 
66
        * "Status" and gets the table data by sending a request to the server.
67
         * @throws ArcImsException 
68
        */
69
        public ServicesTableDataSource(URL svrURL, boolean overrride) throws ArcImsException {
70
                colNames = new Vector();
71
                loadDataAndColNames(svrURL, overrride);
72
                if (data.size() > 0) {
73
                        colNames.addElement(nameColString);
74
                        colNames.addElement(typeColString);
75
                        colNames.addElement(statusColString);
76
                }
77
        }
78

    
79
        /**
80
        * Gets a vector with the column names.
81
        * 
82
        * @return the vector with the column names.
83
        */
84
        public Vector getColNamesVector() { return colNames; }
85
        
86
        /**
87
        * Gets a vector with the table's data.
88
        * 
89
        * @return the table's data is a vector of vectors
90
        */
91
        public Vector getDataVector() { return data; } 
92

    
93
        /**
94
        * Sends a request to the server (ServiceName=catalog)
95
        * and loads the private vectors (data and column names)
96
         * @param tmpDriver 
97
        * 
98
        * @param serverURL server's URL
99
         * @throws ArcImsException 
100
        */
101
        private void loadDataAndColNames(URL serverURL, boolean override) throws ArcImsException {
102
                
103
                ArrayList _services = ArcImsProtocolHandler.getCatalog(serverURL, override);
104
                
105
                ArrayList services = leaveKnownServices(_services);
106
                
107
                data = new Vector();
108
                
109
                TreeSet auxTree = new TreeSet();
110
                for (int i=0; i<services.size(); i++) {
111
                        ArrayList item = (ArrayList) services.get(i);
112
                        auxTree.add(item.get(0));
113
                }
114
                
115
                Iterator iter = auxTree.iterator();
116
                while (iter.hasNext()) {
117
                        String name = (String) iter.next();
118
                        data.add( getItemWithName(services, name) );
119
                }
120
                
121
                
122
//                for (int i=0; i<services.size(); i++) {
123
//                        ArrayList item = (ArrayList) services.get(i);
124
//                        Vector vv = new Vector();
125
//                        vv.addElement( item.get(0) );
126
//                        vv.addElement( item.get(1) );
127
//                        vv.addElement( item.get(2) );
128
//                        // int insert = getInsertPosition(String str, data);
129
//                        // data.insertElementAt(vv); //, insert);
130
//                }
131
        }
132
        
133
        private ArrayList leaveKnownServices(ArrayList list) {
134
                ArrayList resp = new ArrayList();
135
                ArrayList item;
136
                String type, enabled;
137
                
138
                for (int i=0; i<list.size(); i++) {
139
                        item = (ArrayList) list.get(i);
140
                        type = (String) item.get(1);
141
                        enabled = (String) item.get(2);
142
                        if (isKnownServiceType(type) && (isEnabled(enabled))) {
143
                                resp.add((ArrayList) item.clone());
144
                        }
145
                }
146
                return resp;
147
        }
148

    
149
        private boolean isEnabled(String str) {
150
                if (str.compareToIgnoreCase("enabled") == 0) {
151
                        return true;
152
                }
153
                return false;
154
        }
155

    
156
        private boolean isKnownServiceType(String type) {
157
                if (type.compareToIgnoreCase(ServiceInfoTags.vIMAGESERVICE) == 0) {
158
                        return true;
159
                }
160
                if (type.compareToIgnoreCase(ServiceInfoTags.vFEATURESERVICE) == 0) {
161
                        return true;
162
                }
163
                return false;
164
        }
165
        
166
        private Vector getItemWithName(ArrayList allitems, String name) {
167
                
168
                for (int i=0; i<allitems.size(); i++) {
169
                        if (((String) ((ArrayList) allitems.get(i)).get(0)).compareToIgnoreCase(name) == 0) {
170
                                Vector vv = new Vector();
171
                                vv.addElement( ((ArrayList) allitems.get(i)).get(0) );
172
                                vv.addElement( ((ArrayList) allitems.get(i)).get(1) );
173
                                vv.addElement( ((ArrayList) allitems.get(i)).get(2) );
174
                                return vv;
175
                        }
176
                }
177
                logger.error("Service name not found ");
178
                return null;
179
        }
180
        
181
        private int getInsertPosition(String str, Vector data) {
182
                for (int i=0; i<data.size(); i++) {
183
                        String aux = (String) ((ArrayList) data.get(i)).get(0);
184
                        if (aux.compareToIgnoreCase(str) > 0) {
185
                                return i;
186
                        }
187
                }
188
                return data.size();
189
        }
190
        
191
        /**
192
        * Gets the name of the <i>n</i>th column (<i>n</i> = columnIndex)
193
        * 
194
        * @return column name
195
        */
196
        public String getColumnName(int columnIndex) {
197
                if (columnIndex == 0) { return nameColString; }
198
                if (columnIndex == 1) { return typeColString; }
199
                if (columnIndex == 2) { return statusColString; }
200
                return "(Columna desconocida)";
201
        }
202

    
203
}