Statistics
| Revision:

svn-gvsig-desktop / trunk / org.gvsig.desktop / org.gvsig.desktop.compat.cdc / org.gvsig.fmap.dal / org.gvsig.fmap.dal.file / org.gvsig.fmap.dal.file.dbf / src / main / java / org / gvsig / fmap / dal / store / dbf / DBFLibrary.java @ 40435

History | View | Annotate | Download (4.18 KB)

1
/* gvSIG. Geographic Information System of the Valencian Government
2
 *
3
 * Copyright (C) 2007-2008 Infrastructures and Transports Department
4
 * of the Valencian Government (CIT)
5
 *
6
 * This program is free software; you can redistribute it and/or
7
 * modify it under the terms of the GNU General Public License
8
 * as published by the Free Software Foundation; either version 2
9
 * of the License, or (at your option) any later version.
10
 *
11
 * This program is distributed in the hope that it will be useful,
12
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
 * GNU General Public License for more details.
15
 *
16
 * You should have received a copy of the GNU General Public License
17
 * along with this program; if not, write to the Free Software
18
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
19
 * MA  02110-1301, USA.
20
 *
21
 */
22

    
23
/*
24
* AUTHORS (In addition to CIT):
25
* 2008 IVER T.I. S.A.   {{Task}}
26
*/
27

    
28
package org.gvsig.fmap.dal.store.dbf;
29

    
30
import java.nio.charset.Charset;
31
import java.util.ArrayList;
32
import java.util.Arrays;
33
import java.util.Iterator;
34
import java.util.LinkedHashSet;
35
import java.util.List;
36
import java.util.Map;
37
import java.util.Set;
38

    
39
import org.gvsig.fmap.dal.DALFileLibrary;
40
import org.gvsig.fmap.dal.DALFileLocator;
41
import org.gvsig.fmap.dal.DALLibrary;
42
import org.gvsig.fmap.dal.DALLocator;
43
import org.gvsig.fmap.dal.FileHelper;
44
import org.gvsig.fmap.dal.spi.DataManagerProviderServices;
45
import org.gvsig.metadata.exceptions.MetadataException;
46
import org.gvsig.tools.ToolsLocator;
47
import org.gvsig.tools.dynobject.DynObjectValueItem;
48
import org.gvsig.tools.dynobject.DynStruct;
49
import org.gvsig.tools.library.AbstractLibrary;
50
import org.gvsig.tools.library.LibraryException;
51

    
52
public class DBFLibrary extends AbstractLibrary {
53

    
54
    @Override
55
    public void doRegistration() {
56
        registerAsServiceOf(DALLibrary.class);
57
        require(DALFileLibrary.class);
58
    }
59

    
60
        @Override
61
        protected void doInitialize() throws LibraryException {
62
        }
63

    
64
        @Override
65
        protected void doPostInitialize() throws LibraryException {
66
                List<Throwable> exs = new ArrayList<Throwable>();
67

    
68
                FileHelper.registerParametersDefinition(
69
                                DBFStoreParameters.PARAMETERS_DEFINITION_NAME, 
70
                                DBFStoreParameters.class,
71
                                "DBFParameters.xml"
72
                );
73
                updateEncodingDefinition();
74
                FileHelper.registerParametersDefinition(
75
                                DBFNewStoreParameters.PARAMETERS_DEFINITION_NAME, 
76
                                DBFNewStoreParameters.class,
77
                                "DBFParameters.xml"
78
                );
79
                try {
80
                        FileHelper.registerMetadataDefinition(
81
                                        DBFStoreProvider.METADATA_DEFINITION_NAME, 
82
                                        DBFStoreProvider.class,
83
                                        "DBFMetadata.xml"
84
                        );
85
                } catch (MetadataException e) {
86
                        exs.add(e);
87
                }
88

    
89
        DataManagerProviderServices dataman = (DataManagerProviderServices) DALLocator
90
                                .getDataManager();
91

    
92
                try {
93
                        if (!dataman.getStoreProviders().contains(DBFStoreProvider.NAME)) {
94
                                dataman.registerStoreProvider(DBFStoreProvider.NAME,
95
                                                DBFStoreProvider.class, DBFStoreParameters.class);
96
                        }
97
                } catch (RuntimeException e) {
98
                        exs.add(e);
99
                }
100

    
101
                try {
102
                        DALFileLocator.getFilesystemServerExplorerManager()
103
                                        .registerProvider(DBFStoreProvider.NAME,
104
                                                        DBFStoreProvider.DESCRIPTION,
105
                                                        DBFFilesystemServerProvider.class);
106
                } catch (RuntimeException e) {
107
                        exs.add(e);
108
                }
109

    
110
                if( exs.size()>0 ) {
111
                        throw new LibraryException(this.getClass(), exs);
112
                }
113
        }
114
        
115
        private static void updateEncodingDefinition() {
116
                DynStruct parametersDefinition = ToolsLocator.getPersistenceManager().getDefinition(DBFStoreParameters.PARAMETERS_DEFINITION_NAME);
117
                
118
                DynObjectValueItem[] values = parametersDefinition.getDynField("encoding").getAvailableValues();
119
            
120
                Set<DynObjectValueItem> charsetSet = new LinkedHashSet<DynObjectValueItem>(160);
121

    
122
                charsetSet.addAll( Arrays.asList(values) );
123
                Map<String,Charset> charsets = Charset.availableCharsets();
124
                Iterator<String> iter = charsets.keySet().iterator();
125
                while (iter.hasNext()){
126
                        String value = (String) iter.next();
127
                        String label= value;
128
                        charsetSet.add(new DynObjectValueItem(value, label));
129
                }
130

    
131
                parametersDefinition.getDynField("Encoding")
132
                        .setAvailableValues(
133
                                        (DynObjectValueItem[]) charsetSet.toArray(new DynObjectValueItem[charsets.size()])
134
                        );
135

    
136
                
137
        }
138
}