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 / EditingFeatureReference.java @ 45647

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

    
23
/**
24
 *
25
 * @author fdiaz
26
 */
27
public class EditingFeatureReference implements FeatureReferenceProviderServices, Persistent {
28

    
29
    private String uid;
30
    private WeakReference storeRef;
31
    private String featureTypeId;
32

    
33
    /*friend*/
34
    EditingFeatureReference(FeatureStore store, FeatureProvider data) {
35
            this.storeRef = new WeakReference(store);
36
        this.featureTypeId = store.getDefaultFeatureTypeQuietly().getId();
37
        this.generateUUID();
38
    }
39
    
40
    private String generateUUID() {
41
        UUID x = UUID.randomUUID();
42
        String s = x.toString().replace("-", "");
43
        return s;
44
    }
45

    
46
    @Override
47
    public Object getOID() {
48
        return null;
49
    }
50

    
51
    @Override
52
    public String[] getKeyNames() {
53
        return null;
54
    }
55

    
56
    @Override
57
    public Object getKeyValue(String name) {
58
        return null;
59
    }
60

    
61
    @Override
62
    public String getFeatureTypeId() {
63
        return featureTypeId;
64
    }
65

    
66
    @Override
67
    public Feature getFeature() throws DataException {
68
        return this.getStore().getFeatureByReference(this);
69
    }
70

    
71
    @Override
72
    public Feature getFeatureQuietly() {
73
        try {
74
            return this.getFeature();
75
        } catch (Exception e) {
76
            return null;
77
        }
78
    }
79

    
80
    @Override
81
    public Feature getFeature(FeatureType featureType) throws DataException {
82
        return this.getStore().getFeatureByReference(this, featureType);
83
    }
84
    
85
    private DefaultFeatureStore getStore() {
86
        return (DefaultFeatureStore) this.storeRef.get();
87
    }
88

    
89
    @Override
90
    public boolean isNewFeature() {
91
        return true;
92
    }
93

    
94
    @Override
95
    public String getCode() {
96
        Object[] data = new Object[7];
97
        data[0] = "uid";
98
        data[1] = this.uid;
99

    
100
        String s = new JSONArray(data).toString();
101
        String r = Base64.getEncoder().encodeToString(s.getBytes());
102
        return r;
103
    }
104

    
105
    @Override
106
    public void saveToState(PersistentState state) throws PersistenceException {
107
        state.set("uid", uid);
108
        state.set("store", (Persistent) storeRef.get());
109
        state.set("featureTypeId", featureTypeId);
110
    }
111

    
112
    @Override
113
    public void loadFromState(PersistentState state) throws PersistenceException {
114
        this.uid =  state.getString("uuid");
115
        this.storeRef = new WeakReference(state.get("store"));
116
        this.featureTypeId = state.getString("featureTypeId");
117
    }
118

    
119
}