Statistics
| Revision:

svn-gvsig-desktop / trunk / org.gvsig.desktop / org.gvsig.desktop.framework / org.gvsig.andami / src / main / java / org / gvsig / andami / impl / DefaultArguments.java @ 45098

History | View | Annotate | Download (3.82 KB)

1
package org.gvsig.andami.impl;
2

    
3
import java.time.LocalDate;
4
import java.util.ArrayList;
5
import java.util.Collections;
6
import java.util.Date;
7
import java.util.HashMap;
8
import java.util.Iterator;
9
import java.util.List;
10
import java.util.Map;
11
import org.apache.commons.lang3.BooleanUtils;
12
import org.apache.commons.lang3.StringUtils;
13
import org.gvsig.andami.Arguments;
14
import org.gvsig.tools.dataTypes.DataTypeUtils;
15

    
16
public class DefaultArguments implements Arguments {
17

    
18
    private final String[] args;
19
    protected Map<String, String> flags;
20
    protected List<String> parameters;
21

    
22
    public DefaultArguments(String args[]) {
23
        this.args = args;
24
        this.flags = new HashMap<>();
25
        this.parameters = new ArrayList<>();
26
        this.parse();
27
    }
28

    
29
    private void parse() {
30
        String name;
31
        String value;
32
        boolean acceptFlags = true;
33
        for( String arg : args ) {
34
            if( acceptFlags ) {
35
                if( arg.equals("--") ) {
36
                    acceptFlags = false;
37
                    continue;
38
                }
39
                if( arg.startsWith("--") ) {
40
                    int n = arg.indexOf("=");
41
                    if( n < 0 ) {
42
                        name = arg.substring(2);
43
                        value = "true";
44
                    } else {
45
                        name = arg.substring(2, n);
46
                        value = arg.substring(n + 1);
47
                    }
48
                    this.flags.put(name, value);
49
                } else {
50
                    this.parameters.add(arg);
51
                }
52
            } else {
53
                this.parameters.add(arg);
54
            }
55
        }
56
    }
57

    
58
    @Override
59
    public String get(String name) {
60
        return this.flags.get(name);
61
    }
62

    
63
    @Override
64
    public Object get(String name, Object defaultValue) {
65
        String value = this.get(name);
66
        if( defaultValue == null ) {
67
            return value;
68
        }
69
        if( StringUtils.isBlank(value) ) {
70
            return defaultValue;
71
        }
72
        if( defaultValue instanceof CharSequence ) {
73
            return value;
74
        }
75
        if( defaultValue instanceof Integer ) {
76
            return DataTypeUtils.toInteger(value, (Integer) defaultValue);
77
        }
78
        if( defaultValue instanceof Long ) {
79
            return DataTypeUtils.toLong(value, (Long) defaultValue);
80
        }
81
        if( defaultValue instanceof Boolean ) {
82
            try {
83
                return DataTypeUtils.toBoolean(value, (Boolean) defaultValue);
84
            } catch(Throwable th) {
85
                return BooleanUtils.toBoolean(value);
86
            }
87
        }
88
        if( defaultValue instanceof Double ) {
89
            return DataTypeUtils.toDouble(value, (Double) defaultValue);
90
        }
91
        if( defaultValue instanceof Float ) {
92
            return DataTypeUtils.toDouble(value, (Float) defaultValue);
93
        }
94
        if( defaultValue instanceof Date ) {
95
            return DataTypeUtils.toDate(value, (Date) defaultValue);
96
        }
97
        return value;
98
    }
99

    
100
    @Override
101
    public boolean contains(String name) {
102
        return this.flags.containsKey(name);
103
    }
104

    
105
    @Override
106
    public boolean contains(String name, String value) {
107
        String x = this.flags.get(name);
108
        if( x==null ) {
109
            return false;
110
        }
111
        return StringUtils.equalsIgnoreCase(value, x);
112
    } 
113

    
114
    @Override
115
    public List<String> parameters() {
116
        return Collections.unmodifiableList(parameters);
117
    }
118

    
119
    @Override
120
    public Map<String, String> flags() {
121
        return Collections.unmodifiableMap(flags);
122
    }
123

    
124
    @Override
125
    public int size() {
126
        return this.parameters.size();
127
    }
128

    
129
    @Override
130
    public String get(int n) {
131
        return this.parameters.get(n);
132
    }
133

    
134
    @Override
135
    public Iterator<String> iterator() {
136
        return this.parameters.iterator();
137
    }
138
}