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

History | View | Annotate | Download (7.68 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 org.gvsig.vcsgis.lib.VCSGisUser;
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
                .setReadOnly(false)
48
                .setDefaultFieldValue("<%=replace(UUID(),'-','')%>");
49
        ft.add(USER_ID, DataTypes.STRING)
50
                .setIsIndexed(true)
51
                .setAllowIndexDuplicateds(false)
52
                .setSize(50)
53
                .setLabel("Identifier");
54
        ft.add(USER_ALLOWED_OPERATIONS, DataTypes.STRING)
55
                .setDataProfileName("Text")
56
                .setIsIndexed(false)
57
                .setSize(200)
58
                .setLabel("Allowed operations")
59
//                .setDefaultFieldValue("add,entities,commit,update,checkout,history,topologyplans,users")
60
                .setDescription("Comma separated operation names without spaces (add,entities,commit,update,checkout,history,topologyplans,users)");
61
        ft.add(USER_ROLES, DataTypes.STRING)
62
                .setDataProfileName("Text")
63
                .setIsIndexed(false)
64
                .setSize(200)
65
                .setLabel("Roles")
66
                .setDescription("Comma separated role names without spaces (admin,...)");
67
        ft.add(USER_DESCRIPTION, DataTypes.STRING)
68
                .setDataProfileName("Text")
69
                .setSize(10240)
70
                .setLabel("Description");
71
        
72
        return ft.getNotEditableCopy();
73
    }
74

    
75
    public static class UserRow extends AbstractRow implements VCSGisUserEditable {
76

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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