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

History | View | Annotate | Download (4.31 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_TYPE));
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
        JsonObjectBuilder builder = Json.createObjectBuilder();
104
        builder.add("type", OID_TYPE);
105
        builder.add("oid", this.oid);
106
        String s = builder.toString();
107
        String r = Base64.getEncoder().encodeToString(s.getBytes());
108
        return r;
109
    }
110

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

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

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

    
135
        FeatureStore otherStore = (FeatureStore) other.storeRef.get();
136
        FeatureStore myrStore = (FeatureStore) this.storeRef.get();
137
        if (otherStore == null || myrStore == null) {
138
            return false;
139
        }
140
        if (!myrStore.equals(otherStore)) {
141
            return false;
142
        }
143
        if (this.oid == other.oid){
144
            return true;
145
        }
146
        if (this.oid != null) {
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

    
161
}