Statistics
| Revision:

gvsig-projects-pool / org.gvsig.vcsgis / trunk / org.gvsig.vcsgis / org.gvsig.vcsgis.lib / org.gvsig.vcsgis.lib.impl / src / main / java / org / gvsig / vcsgis / lib / workspace / tables / UsersTable.java @ 3459

History | View | Annotate | Download (6.92 KB)

1
package org.gvsig.vcsgis.lib.workspace.tables;
2

    
3
import java.security.MessageDigest;
4
import java.util.List;
5
import javax.json.JsonObject;
6
import org.apache.commons.codec.binary.Hex;
7
import org.gvsig.vcsgis.lib.VCSGisUser;
8
import org.gvsig.fmap.dal.DALLocator;
9
import org.gvsig.fmap.dal.DataManager;
10
import org.gvsig.fmap.dal.feature.EditableFeatureType;
11
import org.gvsig.fmap.dal.feature.Feature;
12
import org.gvsig.fmap.dal.feature.FeatureSet.DisposableFeatureSetIterable;
13
import org.gvsig.fmap.dal.feature.FeatureStore;
14
import org.gvsig.fmap.dal.feature.FeatureType;
15
import org.gvsig.json.JsonObjectBuilder;
16
import org.gvsig.tools.dataTypes.DataTypes;
17
import org.gvsig.tools.dispose.DisposeUtils;
18
import org.gvsig.vcsgis.lib.VCSGisUserEditable;
19
import org.gvsig.vcsgis.lib.VCSGisUserImpl;
20
import static org.gvsig.vcsgis.lib.VCSGisUtils.updateMessageDigest;
21
import org.gvsig.vcsgis.lib.workspace.VCSGisWorkspace;
22

    
23
/**
24
 *
25
 * @author gvSIG Team
26
 */
27
@SuppressWarnings("UseSpecificCatch")
28
public class UsersTable extends AbstractTable {
29

    
30
    public static final String TABLE_NAME = "VCSGIS_USERS";
31

    
32
    private static final String COD_USER = "COD_USER";
33
    private static final String USER_ID = "USER_ID";
34
    private static final String USER_ALLOWED_OPERATIONS = "USER_ALLOWEDOPERATIONS";
35
    private static final String USER_ROLES = "USER_ROLES";
36
    private static final String USER_DESCRIPTION = "USER_DESCRIPTION";
37

    
38
    public static final FeatureType featureType() {
39
        DataManager dataManager = DALLocator.getDataManager();
40
        EditableFeatureType ft = dataManager.createFeatureType();
41
        ft.setLabel("VCSGIS Users");
42
        ft.getTags().set("ID", TABLE_NAME);
43
        ft.add(COD_USER, DataTypes.STRING)
44
                .setSize(40)
45
                .setIsPrimaryKey(true)
46
                .setLabel("Code");
47
        ft.add(USER_ID, DataTypes.STRING)
48
                .setIsIndexed(true)
49
                .setAllowIndexDuplicateds(false)
50
                .setSize(50)
51
                .setLabel("Identifier");
52
        ft.add(USER_ALLOWED_OPERATIONS, DataTypes.STRING)
53
                .setIsIndexed(false)
54
                .setSize(200)
55
                .setLabel("Allowed operations")
56
                .setDescription("comma separated role names without spaces");
57
        ft.add(USER_DESCRIPTION, DataTypes.STRING)
58
                .setSize(10240)
59
                .setLabel("Description");
60

    
61
        return ft.getNotEditableCopy();
62
    }
63

    
64
    public static class UserRow extends AbstractRow implements VCSGisUserEditable {
65

    
66
        private List<String> operations_list;
67
        private List<String> roles_list;
68
        
69
        public UserRow(VCSGisWorkspace workspace) {
70
            super(workspace, TABLE_NAME, COD_USER);
71
        }
72

    
73
        public UserRow(VCSGisWorkspace workspace, Feature feature) {
74
            super(workspace, TABLE_NAME, COD_USER, feature);
75
        }
76

    
77
        @Override
78
        public String getUserCode() {
79
            return this.getString(COD_USER);
80
        }
81

    
82
        @Override
83
        public String getIdentifier() {
84
            return this.getString(USER_ID);
85
        }
86

    
87
        @Override
88
        public String getDescription() {
89
            return this.getString(USER_DESCRIPTION);
90
        }
91

    
92
        @Override
93
        public String getAllowedOperations() {
94
            return this.getString(USER_ALLOWED_OPERATIONS);
95
        }
96

    
97
        @Override
98
        public void setUserCode(String userCode) {
99
            this.set(COD_USER, userCode);
100
        }
101

    
102
        @Override
103
        public void setAllowedOperations(String roles) {
104
            this.set(USER_ALLOWED_OPERATIONS, roles);
105
        }
106

    
107
        @Override
108
        public void setDescription(String description) {
109
            this.set(USER_DESCRIPTION, description);
110
        }
111

    
112
        @Override
113
        public void setIdentifier(String identifier) {
114
            this.set(USER_ID, identifier);
115
        }
116

    
117
        @Override
118
        public void copy(VCSGisUser source, VCSGisUser target) {
119
            VCSGisUserImpl.copyUser(source, (VCSGisUserEditable) target);
120
        }
121

    
122
        @Override
123
        public VCSGisUser clone() {
124
            try {
125
                VCSGisUserEditable other = (VCSGisUserEditable) super.clone();
126
                VCSGisUserImpl.copyUser(this, other);
127
                return other;
128
            } catch (CloneNotSupportedException ex) {
129
                // Esto no deberia pasar.
130
                return null;
131
            }
132
        }
133

    
134
        @Override
135
        public void copyFrom(VCSGisUser other) {
136
            VCSGisUserImpl.copyUser(other, this);
137
        }
138

    
139
        @Override
140
        public List<String> getAllowedOperationsAsList() {
141
            if (this.operations_list == null) {
142
                this.operations_list = VCSGisUserImpl.getAllowedOperationsAsList(this);
143
            }
144
            return this.operations_list;
145
        }
146

    
147
        @Override
148
        public boolean isAllowedOperation(String roleid) {
149
            return VCSGisUserImpl.isAllowedOperation(this, roleid);
150
        }
151

    
152
        @Override
153
        public void fromJson(JsonObject json) {
154
            VCSGisUserImpl.fromJson(this, json);
155
        }
156

    
157
        @Override
158
        public JsonObject toJson() {
159
            return this.toJsonBuilder().build();
160
        }
161

    
162
        @Override
163
        public JsonObjectBuilder toJsonBuilder() {
164
            return VCSGisUserImpl.toJsonBuilder(this);
165
        }
166

    
167
        @Override
168
        public String toString() {
169
            return VCSGisUserImpl.toString(this);
170
        }
171

    
172
        @Override
173
        public String getRoles() {
174
            return this.getString(USER_ROLES);
175
        }
176

    
177
        @Override
178
        public List<String> getRolesAsList() {
179
            if (this.roles_list == null) {
180
                this.roles_list = VCSGisUserImpl.getRolesAsList(this);
181
            }
182
            return this.roles_list;
183
        }
184

    
185
        @Override
186
        public void setRoles(String roles) {
187
            this.set(USER_ROLES, roles);
188
        }
189
    }
190

    
191
    public UsersTable() {
192
        super(TABLE_NAME, featureType());
193
    }
194

    
195
    public String getHashCode(VCSGisWorkspace workspace) {
196
        FeatureStore store = null;
197
        DisposableFeatureSetIterable changes = null;
198
        try {
199
            MessageDigest md = MessageDigest.getInstance("MD5");
200
            store = workspace.getFeatureStore(TABLE_NAME);
201
            changes = store.getFeatureSet().iterable();
202
            for (Feature change : changes) {
203
                updateMessageDigest(md, change, COD_USER);
204
                updateMessageDigest(md, change, USER_ID);
205
//                updateMessageDigest(md, change, USER_PASSWORD);
206
                updateMessageDigest(md, change, USER_ALLOWED_OPERATIONS);
207
                updateMessageDigest(md, change, USER_DESCRIPTION);
208
            }
209
            String hash = Hex.encodeHexString(md.digest());
210
            return hash;
211
        } catch (Exception ex) {
212
            throw new RuntimeException("Can't retrieve hash of users.", ex);
213
        } finally {
214
            DisposeUtils.dispose(changes);
215
            DisposeUtils.dispose(store);
216
        }
217
    }
218
}