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 @ 40596

History | View | Annotate | Download (4.16 KB)

1
/**
2
 * gvSIG. Desktop Geographic Information System.
3
 *
4
 * Copyright (C) 2007-2013 gvSIG Association.
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 3
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
 * For any additional information, do not hesitate to contact us
22
 * at info AT gvsig.com, or visit our website www.gvsig.com.
23
 */
24

    
25
package org.gvsig.fmap.dal.store.dbf;
26

    
27
import java.nio.charset.Charset;
28
import java.util.ArrayList;
29
import java.util.Arrays;
30
import java.util.Iterator;
31
import java.util.LinkedHashSet;
32
import java.util.List;
33
import java.util.Map;
34
import java.util.Set;
35

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

    
49
public class DBFLibrary extends AbstractLibrary {
50

    
51
    @Override
52
    public void doRegistration() {
53
        registerAsServiceOf(DALLibrary.class);
54
        require(DALFileLibrary.class);
55
    }
56

    
57
        @Override
58
        protected void doInitialize() throws LibraryException {
59
        }
60

    
61
        @Override
62
        protected void doPostInitialize() throws LibraryException {
63
                List<Throwable> exs = new ArrayList<Throwable>();
64

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

    
86
        DataManagerProviderServices dataman = (DataManagerProviderServices) DALLocator
87
                                .getDataManager();
88

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

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

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

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

    
128
                parametersDefinition.getDynField("Encoding")
129
                        .setAvailableValues(
130
                                        (DynObjectValueItem[]) charsetSet.toArray(new DynObjectValueItem[charsets.size()])
131
                        );
132

    
133
                
134
        }
135
}