Statistics
| Revision:

root / branches / v2_0_0_prep / libraries / libFMap_dal / src / org / gvsig / fmap / dal / feature / FeatureQueryOrder.java @ 38608

History | View | Annotate | Download (3.74 KB)

1
package org.gvsig.fmap.dal.feature;
2

    
3
import java.util.ArrayList;
4
import java.util.Comparator;
5
import java.util.Iterator;
6
import java.util.List;
7

    
8
import org.gvsig.fmap.dal.feature.impl.DefaultFeatureComparator;
9
import org.gvsig.tools.evaluator.Evaluator;
10
import org.gvsig.tools.lang.Cloneable;
11
import org.gvsig.tools.persistence.Persistent;
12
import org.gvsig.tools.persistence.PersistentState;
13
import org.gvsig.tools.persistence.exception.PersistenceException;
14

    
15
public class FeatureQueryOrder implements Persistent, Cloneable {
16

    
17
        private List members = new ArrayList();
18

    
19
        public class FeatureQueryOrderMember implements Persistent, Cloneable {
20
                String attributeName = null;
21
                Evaluator evaluator = null;
22
                boolean ascending;
23

    
24
                FeatureQueryOrderMember(String attributeName, boolean ascending) {
25
                        this.attributeName = attributeName;
26
                        this.ascending = ascending;
27
                }
28
                FeatureQueryOrderMember(Evaluator evaluator, boolean ascending) {
29
                        this.evaluator = evaluator;
30
            this.ascending = ascending;
31
                }
32
                public boolean hasEvaluator() {
33
                        return this.evaluator != null;
34
                }
35
                public Evaluator getEvaluator() {
36
                        return this.evaluator;
37
                }
38
                public boolean getAscending() {
39
                        return this.ascending;
40
                }
41
                public String getAttributeName() {
42
                        return this.attributeName;
43
                }
44
                public void loadFromState(PersistentState state)
45
                                throws PersistenceException {
46
                        this.attributeName = state.getString("attributeName");
47
                        this.ascending = state.getBoolean("ascending");
48
                        this.evaluator = (Evaluator) state.get("evaluator");
49
                }
50

    
51
                public void saveToState(PersistentState state)
52
                                throws PersistenceException {
53
                        state.set("attributeName", this.attributeName);
54
                        state.set("ascending", this.ascending);
55
                        if (this.evaluator != null) {
56
                                state.set("evaluator", evaluator);
57
                        }
58

    
59
                }
60

    
61
                public Object clone() throws CloneNotSupportedException {
62
                        // Nothing more to clone
63
                        return super.clone();
64
                }
65
        }
66

    
67
        public Object add(String attributeName, boolean ascending) {
68
        FeatureQueryOrderMember member = new FeatureQueryOrderMember(
69
                attributeName, ascending);
70
                if( members.add(member) ) {
71
                        return member;
72
                }
73
                return null;
74
        }
75

    
76
        public Object add(Evaluator evaluator, boolean ascending) {
77
                FeatureQueryOrderMember member = new FeatureQueryOrderMember(
78
                                evaluator,
79
                                ascending);
80
                if (members.add(member)) {
81
                        return member;
82
                }
83
                return null;
84
        }
85

    
86
        public Iterator iterator() {
87
                return members.iterator();
88
        }
89

    
90
        public boolean remove(FeatureQueryOrderMember member) {
91
                return members.remove(member);
92
        }
93

    
94
        public void remove(int index) {
95
                members.remove(index);
96
        }
97

    
98
        public void clear() {
99
                members.clear();
100
        }
101

    
102
        public int size() {
103
                return this.members.size();
104
        }
105

    
106
        public Comparator getFeatureComparator() {
107
                return new DefaultFeatureComparator(this);
108
        }
109

    
110
        public Object clone() throws CloneNotSupportedException {
111
                FeatureQueryOrder clone = (FeatureQueryOrder) super.clone();
112

    
113
                if (members != null) {
114
                        clone.members = new ArrayList(members.size());
115
                        for (int i = 0; i < members.size(); i++) {
116
                                clone.members.add(((Cloneable) members.get(i)).clone());
117
                        }
118
                }
119

    
120
                return clone;
121
        }
122

    
123
        public FeatureQueryOrder getCopy() {
124
                FeatureQueryOrder aCopy = new FeatureQueryOrder();
125
                Iterator iter = this.members.iterator();
126
                FeatureQueryOrderMember member;
127
                while (iter.hasNext()) {
128
                        member = (FeatureQueryOrderMember) iter.next();
129
                        if (member.hasEvaluator()) {
130
                                aCopy.add(member.getEvaluator(), member.getAscending());
131
                        } else {
132
                                aCopy.add(member.getAttributeName(), member.getAscending());
133
                        }
134
                }
135
                return aCopy;
136
        }
137

    
138
        public void loadFromState(PersistentState state)
139
                        throws PersistenceException {
140
                this.members = (List) state.get("menbers");
141
        }
142

    
143
        public void saveToState(PersistentState state) throws PersistenceException {
144
                state.set("menbers", members);
145
        }
146
}