diff --git a/source/java/org/alfresco/repo/person/PersonDetails.java b/source/java/org/alfresco/repo/person/PersonDetails.java new file mode 100644 index 0000000000..4c6863bba4 --- /dev/null +++ b/source/java/org/alfresco/repo/person/PersonDetails.java @@ -0,0 +1,201 @@ +/* + * Copyright (C) 2005-2007 Alfresco Software Limited. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + + * As a special exception to the terms and conditions of version 2.0 of + * the GPL, you may redistribute this Program in connection with Free/Libre + * and Open Source Software ("FLOSS") applications as described in Alfresco's + * FLOSS exception. You should have received a copy of the text describing + * the FLOSS exception, and it is also available here: + * http://www.alfresco.com/legal/licensing" + */ +package org.alfresco.repo.person; + +import java.net.URL; + +/** + * @author Glen Johnson + */ +public class PersonDetails +{ + private String userName; + private String title; + private String firstName; + private String lastName; + private String organisation; + private String jobTitle; + private String emailAddress; + private String bio; + private URL avatarUrl; + + public PersonDetails(String userName, String title, String firstName, String lastName, String organisation, + String jobTitle, String emailAddress, String bio, URL avatarUrl) + { + this.userName = userName; + this.title = title; + this.firstName = firstName; + this.lastName = lastName; + this.organisation = organisation; + this.jobTitle = jobTitle; + this.emailAddress = emailAddress; + this.bio = bio; + this.avatarUrl = avatarUrl; + } + + /** + * @return the userName + */ + public String getUserName() + { + return userName; + } + + /** + * @param userName the userName to set + */ + public void setUserName(String userName) + { + this.userName = userName; + } + + /** + * @return the title + */ + public String getTitle() + { + return title; + } + + /** + * @param title the title to set + */ + public void setTitle(String title) + { + this.title = title; + } + + /** + * @return the firstName + */ + public String getFirstName() + { + return firstName; + } + + /** + * @param firstName the firstName to set + */ + public void setFirstName(String firstName) + { + this.firstName = firstName; + } + + /** + * @return the lastName + */ + public String getLastName() + { + return lastName; + } + + /** + * @param lastName the lastName to set + */ + public void setLastName(String lastName) + { + this.lastName = lastName; + } + + /** + * @return the organisation + */ + public String getOrganisation() + { + return organisation; + } + + /** + * @param organisation the organisation to set + */ + public void setOrganisation(String organisation) + { + this.organisation = organisation; + } + + /** + * @return the jobTitle + */ + public String getJobTitle() + { + return jobTitle; + } + + /** + * @param jobTitle the jobTitle to set + */ + public void setJobTitle(String jobTitle) + { + this.jobTitle = jobTitle; + } + + /** + * @return the emailAddress + */ + public String getEmailAddress() + { + return emailAddress; + } + + /** + * @param emailAddress the emailAddress to set + */ + public void setEmailAddress(String emailAddress) + { + this.emailAddress = emailAddress; + } + + /** + * @return the bio + */ + public String getBio() + { + return bio; + } + + /** + * @param bio the bio to set + */ + public void setBio(String bio) + { + this.bio = bio; + } + + /** + * @return the avatarUrl + */ + public URL getAvatarUrl() + { + return avatarUrl; + } + + /** + * @param avatarUrl the avatarUrl to set + */ + public void setAvatarUrl(URL avatarUrl) + { + this.avatarUrl = avatarUrl; + } +} diff --git a/source/java/org/alfresco/repo/person/PersonModel.java b/source/java/org/alfresco/repo/person/PersonModel.java new file mode 100644 index 0000000000..edc23badfb --- /dev/null +++ b/source/java/org/alfresco/repo/person/PersonModel.java @@ -0,0 +1,52 @@ +/* + * Copyright (C) 2005-2007 Alfresco Software Limited. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + + * As a special exception to the terms and conditions of version 2.0 of + * the GPL, you may redistribute this Program in connection with Free/Libre + * and Open Source Software ("FLOSS") applications as described in Alfresco's + * FLOSS exception. You should have received a copy of the text describing + * the FLOSS exception, and it is also available here: + * http://www.alfresco.com/legal/licensing" + */ +package org.alfresco.repo.person; + +import org.alfresco.service.namespace.QName; + +/** + * Person model constants + * + * @author Glen Johnson + */ +public interface PersonModel +{ + // Person Model + public static final String PERSON_MODEL_URL = "http://www.alfresco.org/model/person/1.0"; + public static final String PERSON_MODEL_PREFIX = "pers"; + + // Person + public static final QName TYPE_PERSON = QName.createQName(PERSON_MODEL_URL, "person"); + public static final QName PROP_PERSON_USER_NAME = QName.createQName(PERSON_MODEL_URL, "personUserName"); + public static final QName PROP_PERSON_TITLE = QName.createQName(PERSON_MODEL_URL, "personTitle"); + public static final QName PROP_PERSON_FIRST_NAME = QName.createQName(PERSON_MODEL_URL, "personFirstName"); + public static final QName PROP_PERSON_LAST_NAME = QName.createQName(PERSON_MODEL_URL, "personLastName"); + public static final QName PROP_PERSON_ORGANISATION = QName.createQName(PERSON_MODEL_URL, "personOrganisation"); + public static final QName PROP_PERSON_JOB_TITLE = QName.createQName(PERSON_MODEL_URL, "personJobTitle"); + public static final QName PROP_PERSON_EMAIL = QName.createQName(PERSON_MODEL_URL, "personEmail"); + public static final QName PROP_PERSON_BIO = QName.createQName(PERSON_MODEL_URL, "personBio"); + public static final QName PROP_PERSON_AVATAR_URL = QName.createQName(PERSON_MODEL_URL, "personAvatarUrl"); + // TODO glen.johnson@alfresco.com add something here for person filter preset +} diff --git a/source/java/org/alfresco/repo/person/PersonService.java b/source/java/org/alfresco/repo/person/PersonService.java new file mode 100644 index 0000000000..2ef4bff382 --- /dev/null +++ b/source/java/org/alfresco/repo/person/PersonService.java @@ -0,0 +1,65 @@ +package org.alfresco.repo.person; + +import java.net.URL; +import java.util.List; + +/** + * Person service API. + *
+ * This service API is designed to support the public facing Person API
+ *
+ * @author Glen Johnson
+ */
+public interface PersonService
+{
+ /**
+ * Create a new person.
+ *
+ * @param userName unique identifier for person
+ * @param title person's title
+ * @param firstName person's first name
+ * @param lastName person's last name
+ * @param organisation organisation to whom the person belongs
+ * @param jobTitle person's job title
+ * @param emailAddress person's email address
+ * @param bio person's biography
+ * @param avatarUrl person's avatar URL
+ */
+ PersonDetails createPerson(String userName, String title, String firstName, String lastName,
+ String organisation, String jobTitle, String emailAddress, String bio, URL avatarUrl);
+
+ /**
+ * List the available people. This list can optionally be filtered by User Name and/or preset person filter name.
+ *
+ * @param userNameFilter user name filter
+ * @param personPresetFilter person preset filter
+ * @return List
+ * Returns null if the User Name cannot be found.
+ *
+ * @param userName the person's User Name
+ * @return details the person's details
+ */
+ PersonDetails getPerson(String userName);
+
+ /**
+ * Update a person's details
+ *
+ * Note that the User Name cannot be updated once the person has been created.
+ *
+ * @param details person's details
+ */
+ void updatePerson(PersonDetails personDetails);
+
+ /**
+ * Delete the person.
+ *
+ * @param userName person's User Name
+ */
+ void deletePerson(String userName);
+}
diff --git a/source/java/org/alfresco/repo/person/PersonServiceImpl.java b/source/java/org/alfresco/repo/person/PersonServiceImpl.java
new file mode 100644
index 0000000000..a14bb0d141
--- /dev/null
+++ b/source/java/org/alfresco/repo/person/PersonServiceImpl.java
@@ -0,0 +1,223 @@
+/*
+ * Copyright (C) 2005-2007 Alfresco Software Limited.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+
+ * As a special exception to the terms and conditions of version 2.0 of
+ * the GPL, you may redistribute this Program in connection with Free/Libre
+ * and Open Source Software ("FLOSS") applications as described in Alfresco's
+ * FLOSS exception. You should have recieved a copy of the text describing
+ * the FLOSS exception, and it is also available here:
+ * http://www.alfresco.com/legal/licensing"
+ */
+package org.alfresco.repo.person;
+
+import java.io.Serializable;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.Random;
+
+import org.alfresco.error.AlfrescoRuntimeException;
+import org.alfresco.model.ContentModel;
+import org.alfresco.service.cmr.repository.NodeRef;
+import org.alfresco.service.cmr.repository.NodeService;
+import org.alfresco.service.cmr.repository.StoreRef;
+import org.alfresco.service.cmr.search.ResultSet;
+import org.alfresco.service.cmr.search.SearchService;
+import org.alfresco.service.namespace.NamespaceService;
+import org.alfresco.service.namespace.QName;
+import org.alfresco.util.ISO9075;
+import org.alfresco.util.PropertyMap;
+
+/**
+ * Provides the implementation for the Person Service
+ *
+ * @author Glen Johnson
+ */
+public class PersonServiceImpl implements PersonService
+{
+ private NodeService nodeService;
+ private SearchService searchService;
+
+ // Random number generator to create random number for User Name
+ private static final Random RANDOMIZER = new Random();
+
+ // Max number for User Name
+ private static final int MAX_USER_NAME_INT = 999999;
+ private static final int USER_NAME_LENGTH = new Integer(MAX_USER_NAME_INT).toString().length();
+
+ public static final StoreRef PERSON_DM_STORE = new StoreRef(StoreRef.PROTOCOL_WORKSPACE, "PersonStore");
+
+ public void setNodeService(NodeService nodeService)
+ {
+ this.nodeService = nodeService;
+ }
+
+ public void setSearchService(SearchService searchService)
+ {
+ this.searchService = searchService;
+ }
+
+ public PersonDetails createPerson(String userName, String title, String firstName, String lastName,
+ String organisation, String jobTitle, String emailAddress, String bio, URL avatarUrl)
+ {
+ // If User Name not specified then create User Name from random integer between 0 and 999999
+ if (userName == null)
+ {
+ userName = new Integer(RANDOMIZER.nextInt(MAX_USER_NAME_INT + 1)).toString();
+ for (int i=userName.length(); i < USER_NAME_LENGTH; i++)
+ {
+ userName = "0" + userName;
+ }
+ }
+
+ // TODO glen.johnson@alfresco.com Check that User Name does not already exist
+
+ // TODO glen.johnson@alfresco.com set value for personParent node reference
+ NodeRef personParent = null;
+
+ // TODO glen.johnson@alfresco.com generate password and create account per person
+
+ // Create the person node
+ PropertyMap properties = new PropertyMap(9);
+ properties.put(ContentModel.PROP_NAME, userName);
+ properties.put(PersonModel.PROP_PERSON_TITLE, title);
+ properties.put(PersonModel.PROP_PERSON_FIRST_NAME, firstName);
+ properties.put(PersonModel.PROP_PERSON_LAST_NAME, lastName);
+ properties.put(PersonModel.PROP_PERSON_ORGANISATION, organisation);
+ properties.put(PersonModel.PROP_PERSON_JOB_TITLE, jobTitle);
+ properties.put(PersonModel.PROP_PERSON_EMAIL, emailAddress);
+ properties.put(PersonModel.PROP_PERSON_BIO, bio);
+ properties.put(PersonModel.PROP_PERSON_AVATAR_URL, avatarUrl);
+ NodeRef personNodeRef = this.nodeService.createNode(
+ personParent,
+ ContentModel.ASSOC_CONTAINS,
+ QName.createQName(NamespaceService.CONTENT_MODEL_1_0_URI, userName),
+ PersonModel.TYPE_PERSON,
+ properties).getChildRef();
+
+ // Return created person details
+ PersonDetails personDetails = new PersonDetails(userName, title, firstName, lastName, organisation,
+ jobTitle, emailAddress, bio, avatarUrl);
+ return personDetails;
+ }
+
+ public List