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

History | View | Annotate | Download (4.53 KB)

1 45647 fdiaz
/*
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 45688 fdiaz
import java.util.Objects;
11
import javax.json.JsonObject;
12 45938 fdiaz
import org.apache.commons.lang3.math.NumberUtils;
13 45647 fdiaz
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 45688 fdiaz
import org.gvsig.json.Json;
20
import org.gvsig.json.JsonObjectBuilder;
21 45647 fdiaz
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 45688 fdiaz
30 45647 fdiaz
public class FeatureReferenceOID implements FeatureReferenceProviderServices, Persistent {
31
32 45688 fdiaz
    public static final String OID_TYPE = "oid";
33
34 45647 fdiaz
    private Object oid;
35
    private WeakReference storeRef;
36
    private String featureTypeId;
37
38
    /*friend*/
39
    FeatureReferenceOID(FeatureStore store, Object oid) {
40
        this.oid = oid;
41
            this.storeRef = new WeakReference(store);
42
        this.featureTypeId = store.getDefaultFeatureTypeQuietly().getId();
43
    }
44
45 45688 fdiaz
    /*friend*/
46
    FeatureReferenceOID(FeatureStore store, JsonObject code) {
47 45898 fdiaz
        this(store, Json.toObject(code, "oid"));
48 45688 fdiaz
    }
49
50
    public FeatureReferenceOID() {
51
        //For persistence use only
52
    }
53
54 45647 fdiaz
    @Override
55
    public Object getOID() {
56
        return  this.oid;
57
    }
58
59
    @Override
60
    public String[] getKeyNames() {
61
        return null;
62
    }
63
64
    @Override
65
    public Object getKeyValue(String name) {
66
        return null;
67
    }
68
69
    @Override
70
    public String getFeatureTypeId() {
71
        return featureTypeId;
72
    }
73
74
    @Override
75
    public Feature getFeature() throws DataException {
76
        return this.getStore().getFeatureByReference(this);
77
    }
78
79
    @Override
80
    public Feature getFeatureQuietly() {
81
        try {
82
            return this.getFeature();
83
        } catch (Exception e) {
84
            return null;
85
        }
86
    }
87
88
    @Override
89
    public Feature getFeature(FeatureType featureType) throws DataException {
90
        return this.getStore().getFeatureByReference(this, featureType);
91
    }
92
93
    private DefaultFeatureStore getStore() {
94
        return (DefaultFeatureStore) this.storeRef.get();
95
    }
96
97
    @Override
98
    public boolean isNewFeature() {
99
        return false;
100
    }
101
102
    @Override
103
    public String getCode() {
104 45688 fdiaz
        JsonObjectBuilder builder = Json.createObjectBuilder();
105
        builder.add("type", OID_TYPE);
106
        builder.add("oid", this.oid);
107
        String s = builder.toString();
108 45647 fdiaz
        String r = Base64.getEncoder().encodeToString(s.getBytes());
109
        return r;
110
    }
111
112
    @Override
113
    public void saveToState(PersistentState state) throws PersistenceException {
114 45688 fdiaz
        state.set("type", OID_TYPE);
115 45647 fdiaz
        state.set("oid", oid);
116
        state.set("store", (Persistent) storeRef.get());
117
        state.set("featureTypeId", featureTypeId);
118 45738 fdiaz
        state.set("isNewFeature", isNewFeature());
119 45647 fdiaz
    }
120
121
    @Override
122
    public void loadFromState(PersistentState state)
123
            throws PersistenceException {
124
        this.oid = state.get("oid");
125
        this.storeRef = new WeakReference(state.get("store"));
126
        this.featureTypeId = state.getString("featureTypeId");
127
    }
128
129 45688 fdiaz
    @Override
130
    public boolean equals(Object obj) {
131
        if (!(obj instanceof FeatureReferenceOID)) {
132
            return false;
133
        }
134
        FeatureReferenceOID other = (FeatureReferenceOID) obj;
135
136
        FeatureStore otherStore = (FeatureStore) other.storeRef.get();
137
        FeatureStore myrStore = (FeatureStore) this.storeRef.get();
138
        if (otherStore == null || myrStore == null) {
139
            return false;
140
        }
141
        if (!myrStore.equals(otherStore)) {
142
            return false;
143
        }
144
        if (this.oid == other.oid){
145
            return true;
146
        }
147
        if (this.oid != null) {
148 45938 fdiaz
            if(this.oid instanceof Number && other.oid instanceof Number){
149
                return ((Number)this.oid).longValue() == ((Number)other.oid).longValue();
150
            }
151 45688 fdiaz
            return this.oid.equals(other.oid);
152
        }
153
        return false;
154
    }
155
156
    @Override
157
    public int hashCode() {
158
        if (this.oid != null) {
159
            return this.oid.hashCode();
160
        }
161
        return -1;
162
    }
163
164
165 45647 fdiaz
}