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 / FeatureReferenceOID.java

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.Objects;
11
import javax.json.JsonObject;
12
import org.gvsig.fmap.dal.exception.DataException;
13
import org.gvsig.fmap.dal.feature.Feature;
14
import org.gvsig.fmap.dal.feature.FeatureStore;
15
import org.gvsig.fmap.dal.feature.FeatureType;
16
import org.gvsig.fmap.dal.feature.impl.DefaultFeatureStore;
17
import org.gvsig.fmap.dal.feature.spi.FeatureReferenceProviderServices;
18
import org.gvsig.json.Json;
19
import org.gvsig.json.JsonObjectBuilder;
20
import org.gvsig.tools.persistence.Persistent;
21
import org.gvsig.tools.persistence.PersistentState;
22
import org.gvsig.tools.persistence.exception.PersistenceException;
23

    
24
/**
25
 *
26
 * @author fdiaz
27
 */
28

    
29
public class FeatureReferenceOID implements FeatureReferenceProviderServices, Persistent {
30

    
31
    public static final String OID_TYPE = "oid";
32

    
33
    private Object oid;
34
    private WeakReference storeRef;
35
    private String featureTypeId;
36

    
37
    /*friend*/
38
    FeatureReferenceOID(FeatureStore store, Object oid) {
39
        this.oid = oid;
40
            this.storeRef = new WeakReference(store);
41
        this.featureTypeId = store.getDefaultFeatureTypeQuietly().getId();
42
    }
43

    
44
    /*friend*/
45
    FeatureReferenceOID(FeatureStore store, JsonObject code) {
46
        this(store, Json.toObject(code, "oid"));
47
    }
48

    
49
    public FeatureReferenceOID() {
50
        //For persistence use only
51
    }
52

    
53
    @Override
54
    public Object getOID() {
55
        return  this.oid;
56
    }
57

    
58
    @Override
59
    public String[] getKeyNames() {
60
        return null;
61
    }
62

    
63
    @Override
64
    public Object getKeyValue(String name) {
65
        return null;
66
    }
67

    
68
    @Override
69
    public String getFeatureTypeId() {
70
        return featureTypeId;
71
    }
72

    
73
    @Override
74
    public Feature getFeature() throws DataException {
75
        return this.getStore().getFeatureByReference(this);
76
    }
77

    
78
    @Override
79
    public Feature getFeatureQuietly() {
80
        try {
81
            return this.getFeature();
82
        } catch (Exception e) {
83
            return null;
84
        }
85
    }
86

    
87
    @Override
88
    public Feature getFeature(FeatureType featureType) throws DataException {
89
        return this.getStore().getFeatureByReference(this, featureType);
90
    }
91
    
92
    private DefaultFeatureStore getStore() {
93
        return (DefaultFeatureStore) this.storeRef.get();
94
    }
95

    
96
    @Override
97
    public boolean isNewFeature() {
98
        return false;
99
    }
100

    
101
    @Override
102
    public String getCode() {
103
        String s = this.toJsonBuilder().toString();
104
        String r = Base64.getEncoder().encodeToString(s.getBytes());
105
        return r;
106
    }
107

    
108
    @Override
109
    public void saveToState(PersistentState state) throws PersistenceException {
110
        state.set("type", OID_TYPE);
111
        state.set("oid", oid);
112
        state.set("store", (Persistent) storeRef.get());
113
        state.set("featureTypeId", featureTypeId);
114
        state.set("isNewFeature", isNewFeature());
115
    }
116

    
117
    @Override
118
    public void loadFromState(PersistentState state)
119
            throws PersistenceException {
120
        this.oid = state.get("oid");
121
        this.storeRef = new WeakReference(state.get("store"));
122
        this.featureTypeId = state.getString("featureTypeId");
123
    }
124

    
125
    @Override
126
    public boolean equals(Object obj) {
127
        if (!(obj instanceof FeatureReferenceOID)) {
128
            return false;
129
        }
130
        FeatureReferenceOID other = (FeatureReferenceOID) obj;
131

    
132
        FeatureStore otherStore = (FeatureStore) other.storeRef.get();
133
        FeatureStore myrStore = (FeatureStore) this.storeRef.get();
134
        if (otherStore == null || myrStore == null) {
135
            return false;
136
        }
137
        if (!myrStore.equals(otherStore)) {
138
            return false;
139
        }
140
        if (this.oid == other.oid){
141
            return true;
142
        }
143
        if (this.oid != null) {
144
            if(this.oid instanceof Number && other.oid instanceof Number){
145
                return ((Number)this.oid).longValue() == ((Number)other.oid).longValue();
146
            }
147
            return this.oid.equals(other.oid);
148
        }
149
        return false;
150
    }
151

    
152
    @Override
153
    public int hashCode() {
154
        if (this.oid != null) {
155
            return this.oid.hashCode();
156
        }
157
        return -1;
158
    }
159

    
160
    @Override
161
    public JsonObjectBuilder toJsonBuilder() {
162
        JsonObjectBuilder builder = Json.createObjectBuilder();
163
        builder.add("type", OID_TYPE);
164
        builder.add("oid", this.oid);
165
        return builder;
166
    }
167

    
168
    @Override
169
    public String toString() {
170
        return Objects.toString(this.oid);
171
    }
172

    
173
}