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

History | View | Annotate | Download (6.23 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_ROLES = "USER_ROLES";
35
    private static final String USER_DESCRIPTION = "USER_DESCRIPTION";
36

    
37
    public static final FeatureType featureType() {
38
        DataManager dataManager = DALLocator.getDataManager();
39
        EditableFeatureType ft = dataManager.createFeatureType();
40
        ft.setLabel("VCSGIS Users");
41
        ft.getTags().set("ID", TABLE_NAME);
42
        ft.add(COD_USER, DataTypes.STRING)
43
                .setSize(40)
44
                .setIsPrimaryKey(true)
45
                .setLabel("Code")
46
                .setReadOnly(true);
47
        ft.add(USER_ID, DataTypes.STRING)
48
                .setIsIndexed(true)
49
                .setAllowIndexDuplicateds(false)
50
                .setSize(50)
51
                .setLabel("Identifier");
52
        ft.add(USER_ROLES, DataTypes.STRING)
53
                .setIsIndexed(false)
54
                .setSize(200)
55
                .setLabel("Roles")
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> roles_list;
67
        
68
        public UserRow(VCSGisWorkspace workspace) {
69
            super(workspace, TABLE_NAME, COD_USER);
70
        }
71

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

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

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

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

    
91
        @Override
92
        public String getRoles() {
93
            return this.getString(USER_ROLES);
94
        }
95

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

    
101
        @Override
102
        public void setRoles(String roles) {
103
            this.set(USER_ROLES, roles);
104
        }
105

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

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

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

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

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

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

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

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

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

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

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

    
172
    public UsersTable() {
173
        super(TABLE_NAME, featureType());
174
    }
175

    
176
    public String getHashCode(VCSGisWorkspace workspace) {
177
        FeatureStore store = null;
178
        DisposableFeatureSetIterable changes = null;
179
        try {
180
            MessageDigest md = MessageDigest.getInstance("MD5");
181
            store = workspace.getFeatureStore(TABLE_NAME);
182
            changes = store.getFeatureSet().iterable();
183
            for (Feature change : changes) {
184
                updateMessageDigest(md, change, COD_USER);
185
                updateMessageDigest(md, change, USER_ID);
186
//                updateMessageDigest(md, change, USER_PASSWORD);
187
                updateMessageDigest(md, change, USER_ROLES);
188
                updateMessageDigest(md, change, USER_DESCRIPTION);
189
            }
190
            String hash = Hex.encodeHexString(md.digest());
191
            return hash;
192
        } catch (Exception ex) {
193
            throw new RuntimeException("Can't retrieve hash of users.", ex);
194
        } finally {
195
            DisposeUtils.dispose(changes);
196
            DisposeUtils.dispose(store);
197
        }
198
    }
199
}