server/src/main/java/org/iri_research/renkan/models/Project.java
author ymh <ymh.work@gmail.com>
Mon, 21 Oct 2013 17:55:12 +0200
branchuser_management
changeset 224 0167b777ad15
parent 222 6ac00231ee34
child 232 b7000ff4989b
permissions -rw-r--r--
remove deprecated warnings + fix date picker default langauge
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
45
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
     1
package org.iri_research.renkan.models;
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
     2
51
3247fccfbd3f update on renkan
ymh <ymh.work@gmail.com>
parents: 47
diff changeset
     3
import java.io.UnsupportedEncodingException;
3247fccfbd3f update on renkan
ymh <ymh.work@gmail.com>
parents: 47
diff changeset
     4
import java.security.MessageDigest;
3247fccfbd3f update on renkan
ymh <ymh.work@gmail.com>
parents: 47
diff changeset
     5
import java.security.NoSuchAlgorithmException;
46
7e132e2a48ca add most of the model and repositories
ymh <ymh.work@gmail.com>
parents: 45
diff changeset
     6
import java.util.ArrayList;
51
3247fccfbd3f update on renkan
ymh <ymh.work@gmail.com>
parents: 47
diff changeset
     7
import java.util.Date;
84
b4b83e9b808d Add copy for projects
ymh <ymh.work@gmail.com>
parents: 80
diff changeset
     8
import java.util.HashMap;
46
7e132e2a48ca add most of the model and repositories
ymh <ymh.work@gmail.com>
parents: 45
diff changeset
     9
import java.util.List;
84
b4b83e9b808d Add copy for projects
ymh <ymh.work@gmail.com>
parents: 80
diff changeset
    10
import java.util.Map;
46
7e132e2a48ca add most of the model and repositories
ymh <ymh.work@gmail.com>
parents: 45
diff changeset
    11
106
d34e253f5c32 Simplify spring integration + correct key for collaborative usage
ymh <ymh.work@gmail.com>
parents: 84
diff changeset
    12
import javax.crypto.spec.SecretKeySpec;
d34e253f5c32 Simplify spring integration + correct key for collaborative usage
ymh <ymh.work@gmail.com>
parents: 84
diff changeset
    13
51
3247fccfbd3f update on renkan
ymh <ymh.work@gmail.com>
parents: 47
diff changeset
    14
import org.apache.commons.codec.binary.Hex;
3247fccfbd3f update on renkan
ymh <ymh.work@gmail.com>
parents: 47
diff changeset
    15
import org.iri_research.renkan.Constants;
80
5295e118320b add link for publish
ymh <ymh.work@gmail.com>
parents: 77
diff changeset
    16
import org.iri_research.renkan.Constants.EditMode;
224
0167b777ad15 remove deprecated warnings + fix date picker default langauge
ymh <ymh.work@gmail.com>
parents: 222
diff changeset
    17
import org.iri_research.renkan.RenkanException;
215
a282eebbc5e0 - add users to Renkan
ymh <ymh.work@gmail.com>
parents: 135
diff changeset
    18
import org.iri_research.renkan.utils.ColorGenerator;
45
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
    19
import org.slf4j.Logger;
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
    20
import org.slf4j.LoggerFactory;
84
b4b83e9b808d Add copy for projects
ymh <ymh.work@gmail.com>
parents: 80
diff changeset
    21
import org.springframework.beans.factory.annotation.Autowired;
46
7e132e2a48ca add most of the model and repositories
ymh <ymh.work@gmail.com>
parents: 45
diff changeset
    22
import org.springframework.data.mongodb.core.mapping.DBRef;
45
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
    23
import org.springframework.data.mongodb.core.mapping.Document;
71
9af0874ce43f First version of space level.
ymh <ymh.work@gmail.com>
parents: 60
diff changeset
    24
import org.springframework.data.mongodb.core.mapping.Field;
9af0874ce43f First version of space level.
ymh <ymh.work@gmail.com>
parents: 60
diff changeset
    25
220
ecbb104cf3b6 Upgrade to jetty 8, Jersey 2.3, cometd 2.7, coweb 1.0.1 and more...
ymh <ymh.work@gmail.com>
parents: 215
diff changeset
    26
import com.fasterxml.jackson.annotation.JsonFormat;
71
9af0874ce43f First version of space level.
ymh <ymh.work@gmail.com>
parents: 60
diff changeset
    27
import com.fasterxml.jackson.annotation.JsonProperty;
45
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
    28
222
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
    29
@Document(collection = "projects")
45
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
    30
public class Project extends AbstractRenkanModel<String> {
222
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
    31
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
    32
    @SuppressWarnings("unused")
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
    33
    private static Logger logger = LoggerFactory.getLogger(Project.class);
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
    34
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
    35
    @Field("rev_counter")
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
    36
    private int revCounter = 1;
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
    37
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
    38
    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSZ", timezone = "GMT")
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
    39
    private Date created;
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
    40
    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSZ", timezone = "GMT")
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
    41
    private Date updated;
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
    42
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
    43
    // Space
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
    44
    @Field("space_id")
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
    45
    @JsonProperty("space_id")
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
    46
    private String spaceId = null;
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
    47
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
    48
    // Nodes
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
    49
    @DBRef
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
    50
    private List<Node> nodes = new ArrayList<Node>();
46
7e132e2a48ca add most of the model and repositories
ymh <ymh.work@gmail.com>
parents: 45
diff changeset
    51
222
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
    52
    // edges
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
    53
    @DBRef
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
    54
    private List<Edge> edges = new ArrayList<Edge>();
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
    55
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
    56
    // Users
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
    57
    private List<RenkanUser> users = new ArrayList<RenkanUser>();
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
    58
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
    59
    public Project(Project project) {
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
    60
        this(project.spaceId, Constants.UUID_GENERATOR.generate().toString(),
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
    61
                project.title, project.description, project.uri, new Date());
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
    62
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
    63
        Map<String, Node> nodeCloneMap = new HashMap<String, Node>(
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
    64
                project.nodes.size());
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
    65
        for (Node node : project.nodes) {
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
    66
            Node newNode = new Node(node, this.id);
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
    67
            this.nodes.add(newNode);
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
    68
            nodeCloneMap.put(node.id, newNode);
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
    69
        }
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
    70
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
    71
        for (Edge edge : project.edges) {
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
    72
            this.edges.add(new Edge(edge, nodeCloneMap.get(edge.getFrom()),
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
    73
                    nodeCloneMap.get(edge.getTo()), this.id));
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
    74
        }
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
    75
        for (RenkanUser user : project.users) {
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
    76
            this.users.add(new RenkanUser(user));
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
    77
        }
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
    78
    }
84
b4b83e9b808d Add copy for projects
ymh <ymh.work@gmail.com>
parents: 80
diff changeset
    79
222
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
    80
    public Project(String spaceId, String id, String title, String description,
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
    81
            String uri, Date created, int revCounter) {
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
    82
        super(id, title, description, uri, null);
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
    83
        this.revCounter = revCounter;
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
    84
        this.spaceId = spaceId;
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
    85
        this.created = created;
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
    86
        if (this.created == null) {
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
    87
            this.created = new Date();
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
    88
        }
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
    89
        this.setUpdated(new Date());
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
    90
    }
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
    91
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
    92
    @Autowired(required = true)
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
    93
    public Project(String spaceId, String id, String title, String description,
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
    94
            String uri, Date created) {
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
    95
        this(spaceId, id, title, description, uri, created, 1);
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
    96
    }
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
    97
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
    98
    @SuppressWarnings("unused")
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
    99
    private Project() {
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
   100
    }
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
   101
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
   102
    public int getRevCounter() {
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
   103
        return this.revCounter;
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
   104
    }
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
   105
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
   106
    public List<Node> getNodes() {
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
   107
        return this.nodes;
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
   108
    }
45
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   109
222
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
   110
    public List<Edge> getEdges() {
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
   111
        return this.edges;
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
   112
    }
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
   113
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
   114
    public List<RenkanUser> getUsers() {
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
   115
        return this.users;
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
   116
    }
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
   117
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
   118
    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSZ", timezone = "GMT")
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
   119
    public Date getCreated() {
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
   120
        return created;
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
   121
    }
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
   122
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
   123
    public void setCreated(Date date) {
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
   124
        this.created = date;
46
7e132e2a48ca add most of the model and repositories
ymh <ymh.work@gmail.com>
parents: 45
diff changeset
   125
222
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
   126
    }
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
   127
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
   128
    @JsonProperty("space_id")
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
   129
    public String getSpaceId() {
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
   130
        return spaceId;
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
   131
    }
45
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   132
222
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
   133
    private String getRawKey(String prefix, Constants.EditMode editMode) {
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
   134
        StringBuffer key = new StringBuffer(prefix != null ? prefix + "|" : "");
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
   135
        key.append(this.getId());
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
   136
        key.append('|');
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
   137
        key.append(this.getSpaceId());
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
   138
        key.append('|');
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
   139
        key.append(this.getCreated().getTime());
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
   140
        key.append('|');
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
   141
        key.append(editMode.toString());
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
   142
        return key.toString();
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
   143
    }
77
4f2511a70880 add bin config from spaces.
ymh <ymh.work@gmail.com>
parents: 71
diff changeset
   144
222
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
   145
    public String getKey(int editMode) throws RenkanException {
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
   146
        return this.getKey(EditMode.fromInt(editMode));
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
   147
    }
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
   148
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
   149
    public String getKey(Constants.EditMode editMode) throws RenkanException {
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
   150
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
   151
        String rawKey = this.getRawKey("", editMode);
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
   152
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
   153
        MessageDigest md;
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
   154
        try {
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
   155
            md = MessageDigest.getInstance("SHA-256");
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
   156
        } catch (NoSuchAlgorithmException e) {
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
   157
            throw new RenkanException("NoSuchAlgorithmException digest: "
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
   158
                    + e.getMessage(), e);
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
   159
        }
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
   160
        String key;
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
   161
        final SecretKeySpec secret_key = new SecretKeySpec(
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
   162
                Constants.KEYHEX.getBytes(), "HmacSHA256");
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
   163
        md.update(secret_key.getEncoded());
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
   164
        try {
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
   165
            key = Hex.encodeHexString(md.digest(rawKey.getBytes("UTF-8")));
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
   166
        } catch (UnsupportedEncodingException e) {
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
   167
            throw new RenkanException("UnsupportedEncodingException digest: "
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
   168
                    + e.getMessage(), e);
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
   169
        }
51
3247fccfbd3f update on renkan
ymh <ymh.work@gmail.com>
parents: 47
diff changeset
   170
222
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
   171
        return key;
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
   172
    }
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
   173
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
   174
    public boolean checkKey(String key, Constants.EditMode editMode)
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
   175
            throws RenkanException {
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
   176
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
   177
        if (key == null || key.isEmpty()) {
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
   178
            return false;
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
   179
        }
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
   180
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
   181
        String signature = key;
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
   182
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
   183
        String new_key = this.getKey(editMode);
51
3247fccfbd3f update on renkan
ymh <ymh.work@gmail.com>
parents: 47
diff changeset
   184
222
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
   185
        return new_key.equals(signature);
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
   186
    }
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
   187
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
   188
    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSZ", timezone = "GMT")
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
   189
    public Date getUpdated() {
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
   190
        return updated;
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
   191
    }
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
   192
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
   193
    public void setUpdated(Date updated) {
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
   194
        this.updated = updated;
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
   195
    }
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
   196
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
   197
    public void addUser(User user) {
127
906fed13c1e1 space admin edit.
ymh <ymh.work@gmail.com>
parents: 106
diff changeset
   198
222
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
   199
        if (user == null) {
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
   200
            // we add an anonymous user
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
   201
            // find an unique user name
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
   202
            this.addUser(null, null);
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
   203
        } else {
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
   204
            // if user is already in list do nothing
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
   205
            for (RenkanUser renkanUser : this.users) {
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
   206
                if (renkanUser.getUserId() != null
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
   207
                        && renkanUser.getUserId().equals(user.getId())) {
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
   208
                    return;
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
   209
                }
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
   210
            }
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
   211
            // user not found
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
   212
            this.users.add(new RenkanUser(this.getId(), user.getId(), user
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
   213
                    .getColor(), user.getUsername()));
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
   214
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
   215
        }
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
   216
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
   217
    }
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
   218
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
   219
    public void addUser(String username, String color) {
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
   220
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
   221
        if (username == null) {
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
   222
            // find a new username
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
   223
            int i = 0;
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
   224
            boolean usernameFound = true;
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
   225
            while (i++ < 1000000 && usernameFound) {
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
   226
                username = String.format("%s-%s",
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
   227
                        Constants.ANONYMOUS_USER_BASE_NAME, i);
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
   228
                usernameFound = false;
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
   229
                for (RenkanUser renkanUser : this.users) {
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
   230
                    if (username.equals(renkanUser.getUsername())) {
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
   231
                        usernameFound = true;
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
   232
                        break;
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
   233
                    }
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
   234
                }
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
   235
            }
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
   236
        }
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
   237
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
   238
        if (color == null) {
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
   239
            int i = 0;
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
   240
            boolean colorFound = true;
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
   241
            while (i++ < 10000000 && colorFound) {
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
   242
                color = "#" + ColorGenerator.randomColorHex();
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
   243
                colorFound = false;
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
   244
                for (RenkanUser renkanUser : this.users) {
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
   245
                    if (username.equals(renkanUser.getUsername())) {
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
   246
                        colorFound = true;
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
   247
                        break;
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
   248
                    }
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
   249
                }
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
   250
            }
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
   251
        }
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
   252
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
   253
        RenkanUser ruser = new RenkanUser(this.getId(), null, color, username);
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
   254
        this.users.add(ruser);
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
   255
    }
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
   256
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
   257
    @Override
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
   258
    protected String getRawKeyPart() {
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
   259
        return Long.toString(this.getCreated().getTime());
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
   260
    }
6ac00231ee34 Manage users. (not passwords)
ymh <ymh.work@gmail.com>
parents: 220
diff changeset
   261
45
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   262
}