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

History | View | Annotate | Download (7.75 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.fmap.dal.DALLocator;
8
import org.gvsig.fmap.dal.DataManager;
9
import org.gvsig.fmap.dal.feature.EditableFeatureType;
10
import org.gvsig.fmap.dal.feature.Feature;
11
import org.gvsig.fmap.dal.feature.FeatureSet.DisposableFeatureSetIterable;
12
import org.gvsig.fmap.dal.feature.FeatureStore;
13
import org.gvsig.fmap.dal.feature.FeatureType;
14
import org.gvsig.json.JsonObjectBuilder;
15
import org.gvsig.tools.dataTypes.DataTypes;
16
import org.gvsig.tools.dispose.DisposeUtils;
17
import static org.gvsig.vcsgis.lib.VCSGisManager.VCSGISCODELEN;
18
import org.gvsig.vcsgis.lib.VCSGisUser;
19
import org.gvsig.vcsgis.lib.VCSGisUserEditable;
20
import org.gvsig.vcsgis.lib.VCSGisUserImpl;
21
import static org.gvsig.vcsgis.lib.VCSGisUtils.updateMessageDigest;
22
import org.gvsig.vcsgis.lib.workspace.VCSGisWorkspace;
23

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

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

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

    
39
    public static final FeatureType featureType() {
40
        DataManager dataManager = DALLocator.getDataManager();
41
        EditableFeatureType ft = dataManager.createFeatureType();
42
        ft.setLabel("VCSGIS Users");
43
        ft.getTags().set("ID", TABLE_NAME);
44
        ft.add(COD_USER, DataTypes.STRING)
45
                .setSize(VCSGISCODELEN)
46
                .setIsPrimaryKey(true)
47
                .setLabel("Code")
48
                .setReadOnly(false)
49
                .setDefaultFieldValue("<%=replace(UUID(),'-','')%>");
50
        ft.add(USER_ID, DataTypes.STRING)
51
                .setIsIndexed(true)
52
                .setAllowIndexDuplicateds(false)
53
                .setSize(50)
54
                .setLabel("Identifier");
55
        ft.add(USER_ALLOWED_OPERATIONS, DataTypes.STRING)
56
                .setDataProfileName("Text")
57
                .setIsIndexed(false)
58
                .setSize(200)
59
                .setLabel("Allowed operations")
60
//                .setDefaultFieldValue("add,entities,commit,update,checkout,history,topologyplans,users")
61
                .setDescription("Comma separated operation names without spaces (add,entities,commit,update,checkout,history,topologyplans,users)");
62
        ft.add(USER_ROLES, DataTypes.STRING)
63
                .setDataProfileName("Text")
64
                .setIsIndexed(false)
65
                .setSize(200)
66
                .setLabel("Roles")
67
                .setDescription("Comma separated role names without spaces (admin,...)");
68
        ft.add(USER_DESCRIPTION, DataTypes.STRING)
69
                .setDataProfileName("Text")
70
                .setSize(10240)
71
                .setLabel("Description");
72
        
73
        return ft.getNotEditableCopy();
74
    }
75

    
76
    public static class UserRow extends AbstractRow implements VCSGisUserEditable {
77

    
78
        private List<String> operations_list;
79
        private List<String> roles_list;
80
        
81
        public UserRow(VCSGisWorkspace workspace) {
82
            super(workspace, TABLE_NAME, COD_USER);
83
        }
84

    
85
        public UserRow(VCSGisWorkspace workspace, Feature feature) {
86
            super(workspace, TABLE_NAME, COD_USER, feature);
87
        }
88

    
89
        @Override
90
        public String getUserCode() {
91
            return this.getString(COD_USER);
92
        }
93

    
94
        @Override
95
        public String getIdentifier() {
96
            return this.getString(USER_ID);
97
        }
98

    
99
        @Override
100
        public String getDescription() {
101
            return this.getString(USER_DESCRIPTION);
102
        }
103

    
104
        @Override
105
        public String getAllowedOperations() {
106
            return "";
107
//            return this.getString(USER_ALLOWED_OPERATIONS);
108
        }
109

    
110
        @Override
111
        public void setUserCode(String userCode) {
112
            this.set(COD_USER, userCode);
113
        }
114

    
115
        @Override
116
        public void setAllowedOperations(String roles) {
117
//            this.set(USER_ALLOWED_OPERATIONS, roles);
118
        }
119

    
120
        @Override
121
        public void setDescription(String description) {
122
            this.set(USER_DESCRIPTION, description);
123
        }
124

    
125
        @Override
126
        public void setIdentifier(String identifier) {
127
            this.set(USER_ID, identifier);
128
        }
129

    
130
        @Override
131
        public void copy(VCSGisUser source, VCSGisUser target) {
132
            VCSGisUserImpl.copyUser(source, (VCSGisUserEditable) target);
133
        }
134

    
135
        @Override
136
        public VCSGisUser clone() {
137
            try {
138
                VCSGisUserEditable other = (VCSGisUserEditable) super.clone();
139
                VCSGisUserImpl.copyUser(this, other);
140
                return other;
141
            } catch (CloneNotSupportedException ex) {
142
                // Esto no deberia pasar.
143
                return null;
144
            }
145
        }
146

    
147
        @Override
148
        public void copyFrom(VCSGisUser other) {
149
            VCSGisUserImpl.copyUser(other, this);
150
        }
151

    
152
        @Override
153
        public List<String> getAllowedOperationsAsList() {
154
            if (this.operations_list == null) {
155
                this.operations_list = VCSGisUserImpl.getAllowedOperationsAsList(this);
156
            }
157
            return this.operations_list;
158
        }
159

    
160
        @Override
161
        public boolean isAllowedOperation(String roleid) {
162
            return VCSGisUserImpl.isAllowedOperation(this, roleid);
163
        }
164

    
165
        @Override
166
        public void fromJson(JsonObject json) {
167
            VCSGisUserImpl.fromJson(this, json);
168
        }
169

    
170
        @Override
171
        public JsonObject toJson() {
172
            return this.toJsonBuilder().build();
173
        }
174

    
175
        @Override
176
        public JsonObjectBuilder toJsonBuilder() {
177
            return VCSGisUserImpl.toJsonBuilder(this);
178
        }
179

    
180
        @Override
181
        public String toString() {
182
            return VCSGisUserImpl.toString(this);
183
        }
184

    
185
        @Override
186
        public String getRoles() {
187
            return "";
188
//            return this.getString(USER_ROLES);
189
        }
190

    
191
        @Override
192
        public List<String> getRolesAsList() {
193
            if (this.roles_list == null) {
194
                this.roles_list = VCSGisUserImpl.getRolesAsList(this);
195
            }
196
            return this.roles_list;
197
        }
198

    
199
        @Override
200
        public void setRoles(String roles) {
201
            this.set(USER_ROLES, roles);
202
        }
203
    }
204

    
205
    public UsersTable() {
206
        super(TABLE_NAME, featureType());
207
    }
208

    
209
    public String getHashCode(VCSGisWorkspace workspace) {
210
        FeatureStore store = null;
211
        DisposableFeatureSetIterable changes = null;
212
        try {
213
            MessageDigest md = MessageDigest.getInstance("MD5");
214
            store = workspace.getFeatureStore(TABLE_NAME);
215
            changes = store.getFeatureSet().iterable();
216
            for (Feature change : changes) {
217
                updateMessageDigest(md, change, COD_USER);
218
                updateMessageDigest(md, change, USER_ID);
219
//                updateMessageDigest(md, change, USER_PASSWORD);
220
                updateMessageDigest(md, change, USER_ALLOWED_OPERATIONS);
221
                updateMessageDigest(md, change, USER_ROLES);
222
                updateMessageDigest(md, change, USER_DESCRIPTION);
223
            }
224
            String hash = Hex.encodeHexString(md.digest());
225
            return hash;
226
        } catch (Exception ex) {
227
            throw new RuntimeException("Can't retrieve hash of users.", ex);
228
        } finally {
229
            DisposeUtils.dispose(changes);
230
            DisposeUtils.dispose(store);
231
        }
232
    }
233
}