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

History | View | Annotate | Download (4.68 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.UUID;
11
import javax.json.JsonObject;
12
import org.apache.commons.lang3.StringUtils;
13
import org.gvsig.fmap.dal.exception.DataException;
14
import org.gvsig.fmap.dal.feature.Feature;
15
import org.gvsig.fmap.dal.feature.FeatureStore;
16
import org.gvsig.fmap.dal.feature.FeatureType;
17
import org.gvsig.fmap.dal.feature.impl.DefaultFeatureStore;
18
import org.gvsig.fmap.dal.feature.spi.FeatureReferenceProviderServices;
19
import org.gvsig.json.Json;
20
import org.gvsig.json.JsonObjectBuilder;
21
import org.gvsig.tools.persistence.Persistent;
22
import org.gvsig.tools.persistence.PersistentState;
23
import org.gvsig.tools.persistence.exception.PersistenceException;
24

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

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

    
38

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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