Statistics
| Revision:

root / branches / v2_0_0_prep / applications / appgvSIG / src / com / iver / cit / gvsig / project / documents / table / ProjectTableFactory.java @ 24759

History | View | Annotate | Download (11.9 KB)

1
package com.iver.cit.gvsig.project.documents.table;
2

    
3
import java.io.File;
4
import java.text.DateFormat;
5
import java.util.Date;
6
import java.util.Hashtable;
7
import java.util.List;
8

    
9
import javax.swing.ImageIcon;
10
import javax.swing.JPanel;
11

    
12
import org.gvsig.fmap.dal.DALLocator;
13
import org.gvsig.fmap.dal.DataManager;
14
import org.gvsig.fmap.dal.DataStoreParameters;
15
import org.gvsig.fmap.dal.exception.ReadException;
16
import org.gvsig.fmap.data.feature.db.DBParameters;
17
import org.gvsig.fmap.data.feature.db.DBStoreParameters;
18

    
19
import com.iver.andami.PluginServices;
20
import com.iver.cit.gvsig.AddLayer;
21
import com.iver.cit.gvsig.addlayer.AddLayerDialog;
22
import com.iver.cit.gvsig.addlayer.fileopen.FileOpenWizard;
23
import com.iver.cit.gvsig.project.Project;
24
import com.iver.cit.gvsig.project.ProjectFactory;
25
import com.iver.cit.gvsig.project.documents.ProjectDocument;
26
import com.iver.cit.gvsig.project.documents.ProjectDocumentFactory;
27
import com.iver.cit.gvsig.project.documents.contextMenu.actions.CopyDocumentContextMenuAction;
28
import com.iver.cit.gvsig.project.documents.contextMenu.actions.CutDocumentContextMenuAction;
29
import com.iver.cit.gvsig.project.documents.contextMenu.actions.PasteDocumentContextMenuAction;
30
import com.iver.cit.gvsig.project.documents.table.gui.DataBaseOpenDialog;
31
import com.iver.cit.gvsig.project.documents.table.gui.Table;
32
import com.iver.utiles.XMLEntity;
33
import com.iver.utiles.extensionPoints.ExtensionPoints;
34
import com.iver.utiles.extensionPoints.ExtensionPointsSingleton;
35
import com.prodevelop.cit.gvsig.vectorialdb.wizard.WizardVectorialDB;
36

    
37

    
38
/**
39
 * Factory of Table.
40
 *
41
 * @author Vicente Caballero Navarro
42
 */
43
public class ProjectTableFactory extends ProjectDocumentFactory {
44
    public static String registerName = "ProjectTable";
45

    
46
    static {
47
                  // A�adimos nuestra extension para el tratamiento de la apertura de ficheros
48
                  // dentro de gvSIG
49
                  ExtensionPoints extensionPoints = ExtensionPointsSingleton.getInstance();
50
                  extensionPoints.add("FileTableOpenDialog", "FileOpenTable", new TableFileOpen());
51
    }
52

    
53
    /**
54
     * Returns image of button.
55
     *
56
     * @return Image button.
57
     */
58
    public ImageIcon getButtonIcon() {
59
        return PluginServices.getIconTheme().get("document-table-icon");
60
    }
61

    
62
    /**
63
     * Returns image of selected button.
64
     *
65
     * @return Image button.
66
     */
67
    public ImageIcon getSelectedButtonIcon() {
68
        return PluginServices.getIconTheme().get("document-table-icon-sel");
69
    }
70

    
71
    /**
72
     * Introduce a gui to be able from the characteristics that we want a ProjectDocument
73
     *
74
     * @param project present Project.
75
     *
76
     * @return new ProjectDocument.
77
     */
78
    public ProjectDocument createFromGUI(Project project) {
79
        try {
80
            AddLayerDialog fopen = new AddLayerDialog(PluginServices.getText(this,
81
                        "Nueva_tabla"));
82
            FileOpenWizard fod = new FileOpenWizard("FileTableOpenDialog", false);
83
            fod.setTitle(PluginServices.getText(this, "Tablas"));
84

    
85
            DataBaseOpenDialog dbod = new DataBaseOpenDialog();
86
            dbod.setClasses(new Class[] { DBParameters.class });
87
            fopen.addWizardTab(PluginServices.getText(this, "Fichero"), fod);
88
//            fopen.addTab(PluginServices.getText(this, "base_datos"), dbod);
89
            WizardVectorialDB wp=new WizardVectorialDB();
90
            wp.initWizard();
91
            fopen.addWizardTab(wp.getTabName(), wp);
92
            PluginServices.getMDIManager().addWindow(fopen);
93
            wp.setMapCtrl(null);
94
                    wp.execute();
95
                    DataManager dm = DALLocator.getDataManager();
96
            if (fopen.isAccepted()) {
97
                JPanel panel = fopen.getSelectedTab();
98

    
99
                if (panel instanceof FileOpenWizard) {
100
                    File[] files = fod.getFiles();
101
                    String[] driverNames = fod.getDriverNames();
102
                    ProjectTable projectTable=null;
103
                    for (int i = 0; i < files.length; i++) {
104
                        String name = files[i].getName();
105
                        List stores = dm.getStoreProviders();
106
                        for (int j = 0; j < stores.size(); j++) {
107
                                DataStoreParameters dsp=dm.createDataStoreParameters(stores[j]);
108
                                if (dsp.getDescription().equals(driverNames[i])){
109
                                        FileStoreParameters fileParameters=(FileStoreParameters)dsp;
110
                                fileParameters.setFile(files[i]);
111

    
112
                                FeatureStore fs=(FeatureStore)dm.createDataStore((DataStoreParameters)fileParameters);
113

    
114

    
115
//                                LayerFactory.getDataSourceFactory().addFileDataSource(driverNames[i],
116
//                                    name, files[i].getAbsolutePath());
117
        //
118
//                                DataSource dataSource = LayerFactory.getDataSourceFactory()
119
//                                                                    .createRandomDataSource(name,
120
//                                        DataSourceFactory.AUTOMATIC_OPENING);
121
//                                SelectableDataSource sds = new SelectableDataSource(dataSource);
122
//                                EditableAdapter auxea = new EditableAdapter();
123
//                                auxea.setOriginalDataSource(sds);
124

    
125
                                // TODO: fjp: ESTO HAY QUE REVISARLO.
126
                                // Por ahora, para obtener un driver que sirva para esta
127
                                // fuente de datos, compruebo que implementa IWriteable.
128
                                // IWriter writer = (IWriter) LayerFactory.getWM().getWriter(driverNames[i]);
129
                                //                                Driver drv = LayerFactory.getDM().getDriver(driverNames[i]);
130
                                //                                if (drv instanceof IWriter)
131
                                //                                {
132
                                //                                        auxea.setWriter((IWriter) drv);
133
                                //                                }
134
                                projectTable = ProjectFactory.createTable(name,
135
                                        fs);
136

    
137
                                projectTable.setProjectDocumentFactory(this);
138

    
139
                                Table t = new Table();
140
                                t.setModel(projectTable);
141
                                PluginServices.getMDIManager().addWindow(t);
142

    
143

    
144
                                }
145
                        }
146
                        return projectTable;
147

    
148
                    }
149
                } else if (panel instanceof WizardVectorialDB) {
150
                    DBStoreParameters[] parameters = (DBStoreParameters[]) wp
151
                                                        .getParameters();
152
//                    int port = -1;
153
//
154
//                    try {
155
//                        port = Integer.parseInt(dbod.getPort());
156
//                    } catch (NumberFormatException e) {
157
//                    }
158
//
159
//                    String name = dbod.getHost() + "/" + dbod.getDataBase();
160
//
161
//                    if (port != -1) {
162
//                        name = dbod.getHost() + ":" + port + "/" +
163
//                            dbod.getDataBase();
164
//                    }
165
//
166
//                    String user = dbod.getUser().trim();
167
//                    String password = dbod.getPassword();
168
//
169
//                    if (user.equals("")) {
170
//                        user = null;
171
//                        password = null;
172
//                    }
173
//
174
//                    name = name + " Table:" + dbod.getTable();
175
//
176
//                    DBParameters dbParameters=(DBParameters)dm.createDataStoreParameters(driverName);
177
//                    dbParameters.setHost(dbod.getHost());
178
//                    dbParameters.setPort(dbod.getPort());
179
//                    dbParameters.setUser(dbod.getUser());
180
//                    dbParameters.setPassw(dbod.getPassword());
181
//                    dbParameters.setDb(dbod.getDataBase());
182
//                    dbParameters.setTableName(dbod.getTable());
183

    
184
                    ProjectTable projectTable = null;
185
                    for (int i = 0; i < parameters.length; i++) {
186
                             FeatureStore fs=(FeatureStore)dm.createDataStore(parameters[i]);
187
                             projectTable = ProjectFactory.createTable(parameters[i].getHost() + "/" + parameters[i].getDb(),
188
                                 fs);
189
                         projectTable.setProjectDocumentFactory(this);
190

    
191
                         Table t = new Table();
192
                         t.setModel(projectTable);
193
                         PluginServices.getMDIManager().addWindow(t);
194
                    }
195
                    return projectTable;
196

    
197
                }
198
            }
199
        } catch (ReadException e) {
200
                        e.printStackTrace();
201
                }
202

    
203
        return null;
204
    }
205

    
206
    /**
207
     * Create a new ProjectTable
208
     *
209
     * @param baseName name
210
     *
211
     * @return ProjectTable.
212
     */
213
    public static ProjectTable createTable(String name, FeatureStore fs) {
214
        ProjectTable t = new ProjectTable();
215

    
216
        if (fs != null) {
217
            t.setModel(fs);
218

    
219
            try {
220
                t.createAlias();
221
            } catch (ReadException e) {
222
                                e.printStackTrace();
223
                        }
224
        }
225

    
226
        t.setName(name);
227
        t.setCreationDate(DateFormat.getInstance().format(new Date()));
228
        int numTables=(ProjectDocument.NUMS.get(registerName)).intValue();
229
        ProjectDocument.NUMS.put(registerName,new Integer(numTables++));
230

    
231
        return t;
232
    }
233

    
234
    /**
235
     * Returns the name of registration in the point of extension.
236
     *
237
     * @return Name of registration
238
     */
239
    public String getRegisterName() {
240
        return registerName;
241
    }
242

    
243
    /**
244
     * Registers in the points of extension the Factory with alias.
245
     *
246
     */
247
    public static void register() {
248
        register(registerName, new ProjectTableFactory(),
249
            "com.iver.cit.gvsig.project.ProjectTable");
250

    
251
        registerAction(registerName,"copy",new CopyDocumentContextMenuAction());
252
        registerAction(registerName,"cut",new CutDocumentContextMenuAction());
253
        registerAction(registerName,"paste",new PasteDocumentContextMenuAction());
254

    
255
        PluginServices.getIconTheme().registerDefault(
256
                        "document-table-icon",
257
                        AddLayer.class.getClassLoader().getResource("images/tablas.png")
258
                );//
259
        PluginServices.getIconTheme().registerDefault(
260
                        "document-table-icon-sel",
261
                        AddLayer.class.getClassLoader().getResource("images/tablas_sel.png")
262
                );
263

    
264
        PluginServices.getIconTheme().registerDefault(
265
                        "edit-copy",
266
                        AddLayer.class.getClassLoader().getResource("images/editcopy.png")
267
                );//
268
        PluginServices.getIconTheme().registerDefault(
269
                        "edit-cut",
270
                        AddLayer.class.getClassLoader().getResource("images/editcut.png")
271
                );
272
        PluginServices.getIconTheme().registerDefault(
273
                        "edit-paste",
274
                        AddLayer.class.getClassLoader().getResource("images/editpaste.png")
275
                );
276
        PluginServices.getIconTheme().registerDefault(
277
                        "edit-delete",
278
                        AddLayer.class.getClassLoader().getResource("images/editdelete.png")
279
                );
280
    }
281

    
282
    /**
283
     * Returns the name of ProjectDocument.
284
     *
285
     * @return Name of ProjectDocument.
286
     */
287
    public String getNameType() {
288
        return PluginServices.getText(this, "Tabla");
289
    }
290

    
291

    
292
    /**
293
     * Create a new ProjectDocument.
294
     *
295
     * @param project Opened project.
296
     *
297
     * @return ProjectDocument.
298
     */
299
    public ProjectDocument create(Project project) {
300
        ProjectTable pt = null;
301

    
302
        pt = ProjectTableFactory.createTable("", null);
303
        pt.setProject(project,0);
304

    
305
        pt.setProjectDocumentFactory(this);
306

    
307
        return pt;
308
    }
309

    
310
    /**
311
     * Returns the priority of de ProjectDocument.
312
     *
313
     * @return Priority.
314
     */
315
    public int getPriority() {
316
        return 1;
317
    }
318

    
319
        public boolean resolveImportXMLConflicts(XMLEntity root, Project project, Hashtable conflicts) {
320
                return true;
321
        }
322
}