Statistics
| Revision:

svn-gvsig-desktop / trunk / org.gvsig.desktop / org.gvsig.desktop.library / org.gvsig.exportto / org.gvsig.exportto.swing / org.gvsig.exportto.swing.prov / org.gvsig.exportto.swing.prov.jdbc / src / main / java / org / gvsig / export / jdbc / service / ExportJDBCAttributeNamesTranslator.java @ 44411

History | View | Annotate | Download (5.34 KB)

1
/*
2
 * To change this license header, choose License Headers in Project Properties.
3
 * To change this template file, choose Tools | Templates
4
 * and open the template in the editor.
5
 */
6
package org.gvsig.export.jdbc.service;
7

    
8
import java.util.ArrayList;
9
import java.util.Collection;
10
import java.util.List;
11
import org.apache.commons.lang3.StringUtils;
12
import org.gvsig.export.ExportAttributes;
13
import org.gvsig.export.spi.AttributeNamesTranslator;
14
import org.gvsig.tools.ToolsLocator;
15
import org.gvsig.tools.dynobject.DynStruct;
16
import org.gvsig.tools.persistence.PersistenceManager;
17
import org.gvsig.tools.persistence.PersistentState;
18
import org.gvsig.tools.persistence.exception.PersistenceException;
19

    
20
/**
21
 *
22
 * @author osc
23
 */
24
public class ExportJDBCAttributeNamesTranslator implements AttributeNamesTranslator {
25

    
26
    private ExportJDBCParameters parameters;
27

    
28
    public ExportJDBCAttributeNamesTranslator(ExportJDBCParameters parameters) {
29
        this.parameters = parameters;
30
    }
31

    
32
    public ExportJDBCAttributeNamesTranslator() {
33

    
34
    }
35

    
36
    public void setParameters(ExportJDBCParameters parameters) {
37
        this.parameters = parameters;
38
    }
39

    
40
    public static void registerPersistence() {
41
        PersistenceManager manager = ToolsLocator.getPersistenceManager();
42
        if (manager.getDefinition("ExportJDBCAttributeNamesTranslator") == null) {
43
            DynStruct definition = manager.addDefinition(ExportJDBCAttributeNamesTranslator.class,
44
                    "ExportJDBCAttributeNamesTranslator", "ExportJDBCAttributeNamesTranslator persistence definition", null, null);
45
            definition.addDynFieldInt("a");
46
        }
47
    }
48

    
49
    @Override
50
    public void saveToState(PersistentState state) throws PersistenceException {
51
        state.set("a", 0);
52
    }
53

    
54
    @Override
55
    public void loadFromState(PersistentState state) throws PersistenceException {
56
        int a = state.getInt("a");
57
    }
58

    
59
    private String buildTranslatedName(String source_name, Collection<String> current_names) {
60

    
61
        String target_name = this.getNameSuggestion(source_name);
62
        if (!current_names.contains(target_name)) {
63
            return target_name;
64
        }
65

    
66
        for (int i = 0; i < 255; i++) {
67
            target_name = source_name + i;
68
            if (!current_names.contains(target_name)) {
69
                return target_name;
70
            }
71
        }
72
        return source_name.substring(0, 4) + "_" + (System.currentTimeMillis() % 1000000);
73
    }
74

    
75
    @Override
76
    public boolean isValidName(ExportAttributes attributes, int index, String name) {
77
        ExportAttributes.ExportAttribute selectedAttr = attributes.get(index);
78
        //
79
        String selfName = this.getNameSuggestion(attributes, index, name);
80
        if (!selfName.equals(name)) {
81
            return false;
82
        }
83

    
84
        // check with others values
85
        boolean valid = true;
86
        for (int i = 0; i < attributes.size(); i++) {
87
            if (i == index) {
88
                continue;
89
            }
90
            ExportAttributes.ExportAttribute attr = attributes.get(i);
91
            String newName = attr.getNewName();
92
            if (newName.equals(name)) {
93
                return false;
94
            }
95
            if (newName.equals(selfName)) {
96
                return false;
97
            }
98
            if (newName.isEmpty()) {
99
                return false;
100
            }
101
            if (this.parameters.getRemoveSpacesInIdentifiers()) {
102
                //if (newName.replaceAll("\\s","") != newName) {
103
                String s = StringUtils.normalizeSpace(newName).replace(" ", "_");
104
                if (!newName.equals(s)) {
105
                    return false;
106
                }
107
            }
108
            if (this.parameters.getTranslateHyphens()) {
109
                if (newName.contains("-")) {
110
                    return false;
111
                }
112
            }
113
            if (this.parameters.getTranslateIdentifiersToLowerCase()) {
114
                if (newName.toLowerCase() != newName) {
115
                    return false;
116
                }
117
            }
118
        }
119
        return valid;
120
    }
121

    
122
    @Override
123
    public String getNameSuggestion(ExportAttributes attributes, int index, String name) {
124
        List names = new ArrayList();
125
        boolean oneTime = true;
126
        for (ExportAttributes.ExportAttribute attribute : attributes) {
127
            if (attribute.getNewName().equals(name) && oneTime) {
128
                oneTime = false;
129
                continue;
130
            }
131
            names.add(attribute.getNewName());
132
        }
133
        String target_name = buildTranslatedName(name, names);
134
        return target_name;
135
    }
136

    
137
    @Override
138
    public AttributeNamesTranslator clone() throws CloneNotSupportedException {
139
        ExportJDBCAttributeNamesTranslator clone = (ExportJDBCAttributeNamesTranslator) super.clone();
140
        return clone;
141
    }
142

    
143
    @Override
144
    public String getNameSuggestion(String name) {
145
        String target_name = name;
146
        if (this.parameters.getRemoveSpacesInIdentifiers()) {
147
            //target_name = target_name.replaceAll("\\s","");
148
            target_name = StringUtils.normalizeSpace(target_name).replace(" ", "_");
149
        }
150
        if (this.parameters.getTranslateHyphens()) {
151
            target_name = target_name.replace("-", "_");
152
        }
153
        if (this.parameters.getTranslateIdentifiersToLowerCase()) {
154
            target_name = target_name.toLowerCase();
155
        }
156
        return target_name;
157

    
158
    }
159

    
160
}