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

History | View | Annotate | Download (4.63 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.apache.commons.lang3.math.NumberUtils;
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

    
30
public class FeatureReferenceOID implements FeatureReferenceProviderServices, Persistent {
31

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

    
34
    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
    /*friend*/
46
    FeatureReferenceOID(FeatureStore store, JsonObject code) {
47
        this(store, Json.toObject(code, "oid"));
48
    }
49

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

    
54
    @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
        String s = this.toJsonBuilder().toString();
105
        String r = Base64.getEncoder().encodeToString(s.getBytes());
106
        return r;
107
    }
108

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

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

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

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

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

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

    
169

    
170
}