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

History | View | Annotate | Download (3 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 org.gvsig.fmap.dal.exception.DataException;
11
import org.gvsig.fmap.dal.feature.Feature;
12
import org.gvsig.fmap.dal.feature.FeatureStore;
13
import org.gvsig.fmap.dal.feature.FeatureType;
14
import org.gvsig.fmap.dal.feature.impl.DefaultFeatureStore;
15
import org.gvsig.fmap.dal.feature.spi.FeatureReferenceProviderServices;
16
import org.gvsig.tools.persistence.Persistent;
17
import org.gvsig.tools.persistence.PersistentState;
18
import org.gvsig.tools.persistence.exception.PersistenceException;
19
import org.json.JSONArray;
20

    
21
/**
22
 *
23
 * @author fdiaz
24
 */
25
public class FeatureReferenceOID implements FeatureReferenceProviderServices, Persistent {
26

    
27
    private Object oid;
28
    private WeakReference storeRef;
29
    private String featureTypeId;
30

    
31
    /*friend*/
32
    FeatureReferenceOID(FeatureStore store, Object oid) {
33
        this.oid = oid;
34
            this.storeRef = new WeakReference(store);
35
        this.featureTypeId = store.getDefaultFeatureTypeQuietly().getId();
36
    }
37

    
38
    @Override
39
    public Object getOID() {
40
        return  this.oid;
41
    }
42

    
43
    @Override
44
    public String[] getKeyNames() {
45
        return null;
46
    }
47

    
48
    @Override
49
    public Object getKeyValue(String name) {
50
        return null;
51
    }
52

    
53
    @Override
54
    public String getFeatureTypeId() {
55
        return featureTypeId;
56
    }
57

    
58
    @Override
59
    public Feature getFeature() throws DataException {
60
        return this.getStore().getFeatureByReference(this);
61
    }
62

    
63
    @Override
64
    public Feature getFeatureQuietly() {
65
        try {
66
            return this.getFeature();
67
        } catch (Exception e) {
68
            return null;
69
        }
70
    }
71

    
72
    @Override
73
    public Feature getFeature(FeatureType featureType) throws DataException {
74
        return this.getStore().getFeatureByReference(this, featureType);
75
    }
76
    
77
    private DefaultFeatureStore getStore() {
78
        return (DefaultFeatureStore) this.storeRef.get();
79
    }
80

    
81
    @Override
82
    public boolean isNewFeature() {
83
        return false;
84
    }
85

    
86
    @Override
87
    public String getCode() {
88
        Object[] data = new Object[7];
89
        data[0] = "oid";
90
        data[1] = this.oid;
91
        String s = new JSONArray(data).toString();
92
        String r = Base64.getEncoder().encodeToString(s.getBytes());
93
        return r;
94
    }
95

    
96
    @Override
97
    public void saveToState(PersistentState state) throws PersistenceException {
98
        state.set("oid", oid);
99
        state.set("store", (Persistent) storeRef.get());
100
        state.set("featureTypeId", featureTypeId);
101
    }
102

    
103
    @Override
104
    public void loadFromState(PersistentState state)
105
            throws PersistenceException {
106
        this.oid = state.get("oid");
107
        this.storeRef = new WeakReference(state.get("store"));
108
        this.featureTypeId = state.getString("featureTypeId");
109
    }
110

    
111
}