Statistics
| Revision:

svn-gvsig-desktop / trunk / org.gvsig.desktop / org.gvsig.desktop.compat.cdc / org.gvsig.fmap.dal / org.gvsig.fmap.dal.impl / src / main / java / org / gvsig / fmap / dal / feature / impl / featurereference / FeatureReferenceUID.java

History | View | Annotate | Download (4.8 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.fmap.dal.feature.impl.featurereference;
7

    
8
import java.lang.ref.WeakReference;
9
import java.util.Base64;
10
import java.util.Objects;
11
import java.util.UUID;
12
import javax.json.JsonObject;
13
import org.apache.commons.lang3.StringUtils;
14
import org.gvsig.fmap.dal.exception.DataException;
15
import org.gvsig.fmap.dal.feature.Feature;
16
import org.gvsig.fmap.dal.feature.FeatureStore;
17
import org.gvsig.fmap.dal.feature.FeatureType;
18
import org.gvsig.fmap.dal.feature.impl.DefaultFeatureStore;
19
import org.gvsig.fmap.dal.feature.spi.FeatureReferenceProviderServices;
20
import org.gvsig.json.Json;
21
import org.gvsig.json.JsonObjectBuilder;
22
import org.gvsig.tools.persistence.Persistent;
23
import org.gvsig.tools.persistence.PersistentState;
24
import org.gvsig.tools.persistence.exception.PersistenceException;
25

    
26
/**
27
 *
28
 * @author fdiaz
29
 */
30
public class FeatureReferenceUID implements FeatureReferenceProviderServices, Persistent {
31
    
32
    public static final String UID_TYPE = "uid";
33
    
34

    
35
    private String uid;
36
    private WeakReference storeRef;
37
    private String featureTypeId;
38

    
39

    
40
    /*friend*/
41
    FeatureReferenceUID(FeatureStore store) {
42
        this(store, (String)null);
43
    }
44

    
45
    /*friend*/
46
    FeatureReferenceUID(FeatureStore store, JsonObject code) {
47
        this(store, code.getString(UID_TYPE, null));
48
    }
49

    
50
    private FeatureReferenceUID(FeatureStore store, String uid) {
51
            this.storeRef = new WeakReference(store);
52
        this.featureTypeId = store.getDefaultFeatureTypeQuietly().getId();
53
        if(StringUtils.isBlank(uid)){
54
            this.uid = this.generateUUID();
55
        } else {
56
            this.uid = uid;
57
        }
58
    }
59

    
60
    public FeatureReferenceUID() {
61
        //For persistence use only
62
    }
63
    
64
    private String generateUUID() {
65
        UUID x = UUID.randomUUID();
66
        String s = x.toString().replace("-", "");
67
        return s;
68
    }
69

    
70
    @Override
71
    public Object getOID() {
72
        return null;
73
    }
74

    
75
    @Override
76
    public String[] getKeyNames() {
77
        return null;
78
    }
79

    
80
    @Override
81
    public Object getKeyValue(String name) {
82
        return null;
83
    }
84

    
85
    @Override
86
    public String getFeatureTypeId() {
87
        return featureTypeId;
88
    }
89

    
90
    @Override
91
    public Feature getFeature() throws DataException {
92
        return this.getStore().getFeatureByReference(this);
93
    }
94

    
95
    @Override
96
    public Feature getFeatureQuietly() {
97
        try {
98
            return this.getFeature();
99
        } catch (Exception e) {
100
            return null;
101
        }
102
    }
103

    
104
    @Override
105
    public Feature getFeature(FeatureType featureType) throws DataException {
106
        return this.getStore().getFeatureByReference(this, featureType);
107
    }
108
    
109
    private DefaultFeatureStore getStore() {
110
        return (DefaultFeatureStore) this.storeRef.get();
111
    }
112

    
113
    @Override
114
    public boolean isNewFeature() {
115
        return true;
116
    }
117

    
118
    @Override
119
    public String getCode() {
120
        String s = this.toJsonBuilder().toString();
121
        String r = Base64.getEncoder().encodeToString(s.getBytes());
122
        return r;
123
    }
124

    
125
    @Override
126
    public void saveToState(PersistentState state) throws PersistenceException {
127
        state.set("type", UID_TYPE);
128
        state.set("uid", uid);
129
        state.set("store", (Persistent) storeRef.get());
130
        state.set("featureTypeId", featureTypeId);
131
        state.set("isNewFeature", isNewFeature());
132
    }
133

    
134
    @Override
135
    public void loadFromState(PersistentState state) throws PersistenceException {
136
        this.uid =  state.getString("uuid");
137
        this.storeRef = new WeakReference(state.get("store"));
138
        this.featureTypeId = state.getString("featureTypeId");
139
    }
140

    
141
    @Override
142
    public boolean equals(Object obj) {
143
        if (!(obj instanceof FeatureReferenceUID)) {
144
            return false;
145
        }
146
        FeatureReferenceUID other = (FeatureReferenceUID) obj;
147

    
148
        FeatureStore otherStore = (FeatureStore) other.storeRef.get();
149
        FeatureStore myrStore = (FeatureStore) this.storeRef.get();
150
        if (otherStore == null || myrStore == null) {
151
            return false;
152
        }
153
        if (!myrStore.equals(otherStore)) {
154
            return false;
155
        }
156
        return StringUtils.equals(this.uid,other.uid);
157
    }
158

    
159
    @Override
160
    public int hashCode() {
161
        if (this.uid != null) {
162
            return this.uid.hashCode();
163
        }
164
        return -1;
165
    }
166

    
167
    @Override
168
    public JsonObjectBuilder toJsonBuilder() {
169
        JsonObjectBuilder builder = Json.createObjectBuilder();
170
        builder.add("type", UID_TYPE);
171
        builder.add("uid", this.uid);
172
        return builder;
173
    }
174

    
175
    @Override
176
    public String toString() {
177
        return Objects.toString(this.uid);
178
    }
179

    
180
}