001/*
002 * (C) Copyright 2006-2011 Nuxeo SA (http://nuxeo.com/) and others.
003 *
004 * All rights reserved. This program and the accompanying materials
005 * are made available under the terms of the GNU Lesser General Public License
006 * (LGPL) version 2.1 which accompanies this distribution, and is available at
007 * http://www.gnu.org/licenses/lgpl-2.1.html
008 *
009 * This library is distributed in the hope that it will be useful,
010 * but WITHOUT ANY WARRANTY; without even the implied warranty of
011 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
012 * Lesser General Public License for more details.
013 *
014 * Contributors:
015 *     Thomas Roger <troger@nuxeo.com>
016 */
017
018package org.nuxeo.ecm.activity;
019
020import java.io.Serializable;
021import java.security.Principal;
022import java.util.ArrayList;
023import java.util.List;
024
025import org.apache.commons.lang.StringUtils;
026import org.nuxeo.ecm.core.api.DocumentModel;
027import org.nuxeo.ecm.core.api.NuxeoPrincipal;
028import org.nuxeo.ecm.core.api.PropertyException;
029
030/**
031 * Helper class to deal with activity objects.
032 *
033 * @author <a href="mailto:troger@nuxeo.com">Thomas Roger</a>
034 * @since 5.5
035 */
036public class ActivityHelper {
037
038    public static final String SEPARATOR = ":";
039
040    public static final String USER_PREFIX = "user" + SEPARATOR;
041
042    public static final String DOC_PREFIX = "doc" + SEPARATOR;
043
044    public static final String ACTIVITY_PREFIX = "activity" + SEPARATOR;
045
046    private ActivityHelper() {
047        // helper class
048    }
049
050    public static boolean isUser(String activityObject) {
051        return activityObject != null && activityObject.startsWith(USER_PREFIX);
052    }
053
054    public static boolean isDocument(String activityObject) {
055        return activityObject != null && activityObject.startsWith(DOC_PREFIX);
056    }
057
058    public static boolean isActivity(String activityObject) {
059        return activityObject != null && activityObject.startsWith(ACTIVITY_PREFIX);
060    }
061
062    public static String getUsername(String activityObject) {
063        if (!isUser(activityObject)) {
064            throw new IllegalArgumentException(activityObject + " is not a user activity object");
065        }
066        return activityObject.replaceAll(USER_PREFIX, "");
067    }
068
069    public static List<String> getUsernames(List<String> activityObjects) {
070        List<String> usernames = new ArrayList<String>();
071        for (String activityObject : activityObjects) {
072            usernames.add(getUsername(activityObject));
073        }
074        return usernames;
075    }
076
077    public static String getDocumentId(String activityObject) {
078        if (isDocument(activityObject)) {
079            String[] v = activityObject.split(":");
080            return v[2];
081        }
082        return "";
083    }
084
085    public static String getRepositoryName(String activityObject) {
086        if (isDocument(activityObject)) {
087            String[] v = activityObject.split(":");
088            return v[1];
089        }
090        return "";
091    }
092
093    public static String getActivityId(String activityObject) {
094        if (isActivity(activityObject)) {
095            String[] v = activityObject.split(":");
096            return v[1];
097        }
098        return "";
099    }
100
101    public static String createDocumentActivityObject(DocumentModel doc) {
102        return createDocumentActivityObject(doc.getRepositoryName(), doc.getId());
103    }
104
105    public static String createDocumentActivityObject(String repositoryName, String docId) {
106        return DOC_PREFIX + repositoryName + SEPARATOR + docId;
107    }
108
109    public static String createUserActivityObject(Principal principal) {
110        return createUserActivityObject(principal.getName());
111    }
112
113    public static String createUserActivityObject(String username) {
114        return USER_PREFIX + username;
115    }
116
117    public static String createActivityObject(Activity activity) {
118        return createActivityObject(activity.getId());
119    }
120
121    public static String createActivityObject(Serializable activityId) {
122        return ACTIVITY_PREFIX + activityId;
123    }
124
125    public static String generateDisplayName(Principal principal) {
126        if (principal instanceof NuxeoPrincipal) {
127            NuxeoPrincipal nuxeoPrincipal = (NuxeoPrincipal) principal;
128            if (!StringUtils.isBlank(nuxeoPrincipal.getFirstName())
129                    || !StringUtils.isBlank(nuxeoPrincipal.getLastName())) {
130                return nuxeoPrincipal.getFirstName() + " " + nuxeoPrincipal.getLastName();
131            }
132        }
133        return principal.getName();
134    }
135
136    public static String getDocumentTitle(DocumentModel doc) {
137        try {
138            return doc.getTitle();
139        } catch (PropertyException e) {
140            return doc.getId();
141        }
142    }
143
144}