Statistics
| Revision:

root / trunk / libraries / libFMap / src / com / iver / cit / gvsig / fmap / layers / LayerFactory.java @ 567

History | View | Annotate | Download (7.86 KB)

1
/* Generated by Together */
2
package com.iver.cit.gvsig.fmap.layers;
3

    
4
import java.io.File;
5
import java.net.URL;
6
import java.util.TreeMap;
7

    
8
import org.cresques.cts.IProjection;
9

    
10
import com.hardcode.driverManager.Driver;
11
import com.hardcode.driverManager.DriverLoadException;
12
import com.hardcode.driverManager.DriverManager;
13
import com.hardcode.gdbms.engine.data.DataSourceFactory;
14
import com.hardcode.gdbms.engine.data.DriverException;
15
import com.hardcode.gdbms.engine.instruction.FieldNotFoundException;
16
import com.iver.cit.gvsig.fmap.drivers.DriverIOException;
17
import com.iver.cit.gvsig.fmap.drivers.RasterDriver;
18
import com.iver.cit.gvsig.fmap.drivers.VectorialDatabaseDriver;
19
import com.iver.cit.gvsig.fmap.drivers.VectorialDriver;
20
import com.iver.cit.gvsig.fmap.drivers.VectorialFileDriver;
21
import com.iver.cit.gvsig.fmap.drivers.wfs.WFSDriver;
22
import com.iver.cit.gvsig.fmap.rendering.LegendFactory;
23

    
24

    
25
/**
26
 * Crea un adaptador del driver que se le pasa como par?metro en los m?todos
27
 * createLayer. Si hay memoria suficiente se crea un FLyrMemory que pasa todas
28
 * las features del driver a memoria
29
 */
30
public class LayerFactory {
31
        private static String driversPath = "../FMap 03/drivers";
32
    private static DriverManager driverManager;
33

    
34
    /**
35
     * Map en el que se guarda para cada fuente de datos a?adida al sistema, el
36
     * adaptador que la maneja. Ha de ser un TreeMap ya que esta clase define
37
     * la igualdad entre las claves a traves del m?todo equals de las mismas.
38
     * Los objetos FileSource, DBSource y WFSSource tienen definido el m?todo
39
     * equals de forma que devuelven true cuando dos objetos apuntan a la
40
     * misma fuente de datos
41
     */
42
    private static TreeMap sourceAdapter;
43

    
44
    /**
45
     * Crea un RandomVectorialFile con el driver que se le pasa como par?metro
46
     * y guard?ndose el nombre del fichero para realizar los accesos, la capa
47
     * tendr? asociada la proyecci?n que se pasa como parametro tambi?n
48
     *
49
     * @param driverName
50
     * @param f DOCUMENT ME!
51
     * @param proj DOCUMENT ME!
52
     *
53
     * @return DOCUMENT ME!
54
     *
55
     * @throws DriverLoadException
56
     * @throws DriverIOException
57
     */
58
    public static FLayer createLayer(String layerName, String driverName, File f,
59
        IProjection proj) throws DriverLoadException, DriverIOException {
60
        //Se obtiene el driver que lee
61
        DriverManager dm = getDM();
62

    
63
        Driver d = dm.getDriver(driverName);
64

    
65
        if (d instanceof VectorialFileDriver)
66
                return createLayer(layerName, (VectorialFileDriver)d, f, proj);
67
        else if (d instanceof RasterDriver)
68
                return createLayer(layerName, (RasterDriver) d, f, proj);
69
        
70
        return null;
71
    }
72

    
73
    /**
74
     * Crea un RandomVectorialFile con el driver que se le pasa como par?metro
75
     * y guard?ndose el nombre del fichero para realizar los accesos, la capa
76
     * tendr? asociada la proyecci?n que se pasa como parametro tambi?n
77
     *
78
     * @param d
79
     * @param f DOCUMENT ME!
80
     * @param proj DOCUMENT ME!
81
     *
82
     * @return DOCUMENT ME!
83
     *
84
     * @throws DriverLoadException
85
     * @throws DriverIOException
86
     */
87
    public static FLyrVect createLayer(String layerName, VectorialFileDriver d, File f,
88
        IProjection proj) throws DriverLoadException, DriverIOException {
89
        //TODO Comprobar si hay un adaptador ya
90
        VectorialFileAdapter adapter = new VectorialFileAdapter(f);
91
        adapter.setDriver((VectorialDriver) d);
92

    
93
        FLyrVect capa = new FLyrVect();
94
        capa.setName(layerName);
95

    
96
        //TODO Meter esto dentro de la comprobaci?n de si hay memoria
97
        if (false) {
98
        } else {
99
            capa.setSource(adapter);
100
            capa.setProjection(proj);
101
        }
102
        
103
        try {
104
                        // Le asignamos tambi?n una legenda por defecto acorde con
105
                        // el tipo de shape que tenga. Tampoco s? si es aqu? el
106
                        // sitio adecuado, pero en fin....
107
                        capa.setLegend(LegendFactory.createSingleSymbolLegend(capa.getShapeType()));
108
                } catch (FieldNotFoundException e) {
109
                        // TODO Auto-generated catch block
110
                        e.printStackTrace();
111
                } catch (DriverException e) {
112
                        // TODO Auto-generated catch block
113
                        e.printStackTrace();
114
                } catch (DriverLoadException e) {
115
                        // TODO Auto-generated catch block
116
                        e.printStackTrace();
117
                } catch (DriverIOException e) {
118
                        // TODO Auto-generated catch block
119
                        e.printStackTrace();
120
                }
121

    
122
        return capa;
123
    }
124
    
125
    public static FLyrRaster createLayer(String layerName, RasterDriver d, File f,
126
            IProjection proj) throws DriverLoadException, DriverIOException {
127
        RasterAdapter adapter = new RasterFileAdapter(f);
128
        adapter.setDriver(d);
129

    
130
        FLyrRaster capa = new FLyrRaster();
131
            capa.setName(layerName);
132
            
133
        //TODO Meter esto dentro de la comprobaci?n de si hay memoria
134
        if (false) {
135
        } else {
136
            capa.setSource(adapter);
137
            capa.setProjection(proj);
138
            capa.load();
139
        }
140
                return capa;
141
    }
142

    
143
    /**
144
     * Crea un RandomVectorialWFS con el driver que se le pasa como par?metro y
145
     * guard?ndose la URL del servidor que se pasa como par?metro
146
     *
147
     * @param driver DOCUMENT ME!
148
     * @param host DOCUMENT ME!
149
     * @param proj DOCUMENT ME!
150
     *
151
     * @return DOCUMENT ME!
152
     *
153
     * @throws UnsupportedOperationException DOCUMENT ME!
154
     */
155
    public static FLyrVect createLayer(WFSDriver driver, URL host,
156
        IProjection proj) {
157
        throw new UnsupportedOperationException();
158
    }
159

    
160
    /**
161
     * Crea un RandomVectorialWFS con el driver que se le pasa como par?metro y
162
     * guard?ndose la URL del servidor que se pasa como par?metro
163
     *
164
     * @param driver DOCUMENT ME!
165
     * @param host DOCUMENT ME!
166
     * @param port DOCUMENT ME!
167
     * @param user DOCUMENT ME!
168
     * @param password DOCUMENT ME!
169
     * @param dbName DOCUMENT ME!
170
     * @param tableName DOCUMENT ME!
171
     * @param proj DOCUMENT ME!
172
     *
173
     * @return DOCUMENT ME!
174
     *
175
     * @throws UnsupportedOperationException DOCUMENT ME!
176
     */
177
    public static FLyrVect createLayer(VectorialDatabaseDriver driver,
178
        String host, int port, String user, String password, String dbName,
179
        String tableName, IProjection proj) {
180
        throw new UnsupportedOperationException();
181
    }
182

    
183
    /**
184
     * Obtiene el adaptador de un driver si ya se ha a?adido el origen de datos
185
     * o null si es un origen de datos nuevo
186
     *
187
     * @param source DOCUMENT ME!
188
     */
189
    private static void getAdapter(Source source) {
190
    }
191

    
192
    /**
193
     * Registra la asociaci?n entre la fuente de datos que se pasa como
194
     * par?metro y el VectorialAdapter que se pasa como par?metro, para
195
     * satisfacer futuras llamadas a getAdapter
196
     *
197
     * @param s DOCUMENT ME!
198
     * @param a DOCUMENT ME!
199
     */
200
    private static void saveSourceAdapter(Source s, VectorialAdapter a) {
201
    }
202

    
203
    /**
204
     * Crea una FLyrComplexRaster que ataca al driver que se pasa como
205
     * par?metro.
206
     *
207
     * @param driver DOCUMENT ME!
208
     * @param f DOCUMENT ME!
209
     * @param proj DOCUMENT ME!
210
     *
211
     * @throws IllegalArgumentException Si se pasa un driver que no implementa
212
     *         GeorreferencedRasterDriver o NotGeorreferencedRasterDriver
213
     */
214
    public static void createLayer(RasterDriver driver, File f, IProjection proj)
215
        throws IllegalArgumentException {
216
    }
217

    
218
    /**
219
     * DOCUMENT ME!
220
     *
221
     * @return DOCUMENT ME!
222
     *
223
     * @throws DriverLoadException
224
     */
225
    public static DriverManager getDM() throws DriverLoadException {
226
        if (driverManager == null) {
227
            driverManager = new DriverManager();
228
            driverManager.loadDrivers(new File(LayerFactory.driversPath));
229
            
230
            DataSourceFactory.setDriverManager(driverManager);
231
        }
232

    
233
        return driverManager;
234
    }
235
    
236
    /**
237
     * sets drivers Directory 
238
     * @param path
239
     */
240
    
241
    public static void setDriversPath(String path) {
242
            LayerFactory.driversPath = path;
243
    }
244
}