diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/accounts/admin/UserAccountsAddPage.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/accounts/admin/UserAccountsAddPage.java index a5a9ca196..3056e33bb 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/accounts/admin/UserAccountsAddPage.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/accounts/admin/UserAccountsAddPage.java @@ -6,6 +6,9 @@ import java.util.Collections; import java.util.HashMap; import java.util.Map; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + import edu.cornell.mannlib.vitro.webapp.beans.SelfEditingConfiguration; import edu.cornell.mannlib.vitro.webapp.beans.UserAccount; import edu.cornell.mannlib.vitro.webapp.beans.UserAccount.Status; @@ -14,13 +17,14 @@ import edu.cornell.mannlib.vitro.webapp.controller.accounts.UserAccountsPage; import edu.cornell.mannlib.vitro.webapp.controller.authenticate.Authenticator; import edu.cornell.mannlib.vitro.webapp.controller.freemarker.responsevalues.ResponseValues; import edu.cornell.mannlib.vitro.webapp.controller.freemarker.responsevalues.TemplateResponseValues; +import edu.cornell.mannlib.vitro.webapp.dao.InsertException; /** * Handle the "Add new account" form display and submission. - * - * TODO Associate a profile from this account */ public class UserAccountsAddPage extends UserAccountsPage { + private static final Log log = LogFactory.getLog(UserAccountsAddPage.class); + private static final String PARAMETER_SUBMIT = "submitAdd"; private static final String PARAMETER_EMAIL_ADDRESS = "emailAddress"; private static final String PARAMETER_EXTERNAL_AUTH_ID = "externalAuthId"; @@ -28,6 +32,7 @@ public class UserAccountsAddPage extends UserAccountsPage { private static final String PARAMETER_LAST_NAME = "lastName"; private static final String PARAMETER_ROLE = "role"; private static final String PARAMETER_ASSOCIATED_PROFILE_URI = "associatedProfileUri"; + private static final String PARAMETER_NEW_PROFILE_CLASS_URI = "degreeUri"; private static final String ERROR_NO_EMAIL = "errorEmailIsEmpty"; private static final String ERROR_EMAIL_IN_USE = "errorEmailInUse"; @@ -50,6 +55,7 @@ public class UserAccountsAddPage extends UserAccountsPage { private String lastName = ""; private String selectedRoleUri = ""; private String associatedProfileUri = ""; + private String newProfileClassUri = ""; /** The result of validating a "submit" request. */ private String errorCode = ""; @@ -82,6 +88,8 @@ public class UserAccountsAddPage extends UserAccountsPage { selectedRoleUri = getStringParameter(PARAMETER_ROLE, ""); associatedProfileUri = getStringParameter( PARAMETER_ASSOCIATED_PROFILE_URI, ""); + newProfileClassUri = getStringParameter( + PARAMETER_NEW_PROFILE_CLASS_URI, ""); strategy.parseAdditionalParameters(); } @@ -153,6 +161,19 @@ public class UserAccountsAddPage extends UserAccountsPage { // Associate the profile, as appropriate. if (matchingIsEnabled) { + if (!newProfileClassUri.isEmpty()) { + try { + String newProfileUri = UserAccountsProfileCreator + .createProfile(indDao, dpsDao, newProfileClassUri, + this.addedAccount); + associatedProfileUri = newProfileUri; + } catch (InsertException e) { + log.error("Failed to create new profile of class '" + + newProfileClassUri + "' for user '" + + this.addedAccount.getEmailAddress() + "'"); + } + } + SelfEditingConfiguration.getBean(vreq) .associateIndividualWithUserAccount(indDao, dpsDao, this.addedAccount, associatedProfileUri); @@ -164,19 +185,20 @@ public class UserAccountsAddPage extends UserAccountsPage { public final ResponseValues showPage() { Map body = new HashMap(); - body.put("emailAddress", emailAddress); - body.put("externalAuthId", externalAuthId); - body.put("firstName", firstName); - body.put("lastName", lastName); + body.put(PARAMETER_EMAIL_ADDRESS, emailAddress); + body.put(PARAMETER_EXTERNAL_AUTH_ID, externalAuthId); + body.put(PARAMETER_FIRST_NAME, firstName); + body.put(PARAMETER_LAST_NAME, lastName); body.put("selectedRole", selectedRoleUri); body.put("roles", buildRolesList()); body.put("profileTypes", buildProfileTypesList()); + body.put(PARAMETER_NEW_PROFILE_CLASS_URI, newProfileClassUri); body.put("formUrls", buildUrlsMap()); if (!errorCode.isEmpty()) { body.put(errorCode, Boolean.TRUE); } - + if (matchingIsEnabled) { body.put("showAssociation", Boolean.TRUE); } diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/accounts/admin/UserAccountsEditPage.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/accounts/admin/UserAccountsEditPage.java index b8a53b76a..4af9eab6f 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/accounts/admin/UserAccountsEditPage.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/accounts/admin/UserAccountsEditPage.java @@ -18,6 +18,7 @@ import edu.cornell.mannlib.vitro.webapp.controller.accounts.user.UserAccountsUse import edu.cornell.mannlib.vitro.webapp.controller.authenticate.Authenticator; import edu.cornell.mannlib.vitro.webapp.controller.freemarker.responsevalues.ResponseValues; import edu.cornell.mannlib.vitro.webapp.controller.freemarker.responsevalues.TemplateResponseValues; +import edu.cornell.mannlib.vitro.webapp.dao.InsertException; /** * Handle the "Edit Account" form display and submission. @@ -34,6 +35,7 @@ public class UserAccountsEditPage extends UserAccountsPage { private static final String PARAMETER_LAST_NAME = "lastName"; private static final String PARAMETER_ROLE = "role"; private static final String PARAMETER_ASSOCIATED_PROFILE_URI = "associatedProfileUri"; + private static final String PARAMETER_NEW_PROFILE_CLASS_URI = "degreeUri"; private static final String ERROR_NO_EMAIL = "errorEmailIsEmpty"; private static final String ERROR_EMAIL_IN_USE = "errorEmailInUse"; @@ -57,6 +59,7 @@ public class UserAccountsEditPage extends UserAccountsPage { private String lastName = ""; private String selectedRoleUri = ""; private String associatedProfileUri = ""; + private String newProfileClassUri = ""; private UserAccount userAccount; @@ -93,6 +96,8 @@ public class UserAccountsEditPage extends UserAccountsPage { selectedRoleUri = getStringParameter(PARAMETER_ROLE, ""); associatedProfileUri = getStringParameter( PARAMETER_ASSOCIATED_PROFILE_URI, ""); + newProfileClassUri = getStringParameter( + PARAMETER_NEW_PROFILE_CLASS_URI, ""); strategy.parseAdditionalParameters(); } @@ -174,25 +179,27 @@ public class UserAccountsEditPage extends UserAccountsPage { Map body = new HashMap(); body.put("userUri", userUri); - + if (isSubmit()) { body.put("emailAddress", emailAddress); body.put("externalAuthId", externalAuthId); body.put("firstName", firstName); body.put("lastName", lastName); body.put("selectedRole", selectedRoleUri); + body.put(PARAMETER_NEW_PROFILE_CLASS_URI, newProfileClassUri); } else { body.put("emailAddress", userAccount.getEmailAddress()); body.put("externalAuthId", userAccount.getExternalAuthId()); body.put("firstName", userAccount.getFirstName()); body.put("lastName", userAccount.getLastName()); body.put("selectedRole", getExistingRoleUri()); + body.put(PARAMETER_NEW_PROFILE_CLASS_URI, ""); } if (!isRootUser()) { body.put("roles", buildRolesList()); } - + body.put("profileTypes", buildProfileTypesList()); body.put("formUrls", buildUrlsMapWithEditUrl()); @@ -244,6 +251,19 @@ public class UserAccountsEditPage extends UserAccountsPage { // Associate the profile, as appropriate. if (matchingIsEnabled) { + if (!newProfileClassUri.isEmpty()) { + try { + String newProfileUri = UserAccountsProfileCreator + .createProfile(indDao, dpsDao, newProfileClassUri, + userAccount); + associatedProfileUri = newProfileUri; + } catch (InsertException e) { + log.error("Failed to create new profile of class '" + + newProfileClassUri + "' for user '" + + userAccount.getEmailAddress() + "'"); + } + } + SelfEditingConfiguration.getBean(vreq) .associateIndividualWithUserAccount(indDao, dpsDao, userAccount, associatedProfileUri); diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/accounts/admin/UserAccountsProfileCreator.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/accounts/admin/UserAccountsProfileCreator.java new file mode 100644 index 000000000..d4d718cd4 --- /dev/null +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/accounts/admin/UserAccountsProfileCreator.java @@ -0,0 +1,42 @@ +/* $This file is distributed under the terms of the license in /doc/license.txt$ */ + +package edu.cornell.mannlib.vitro.webapp.controller.accounts.admin; + +import edu.cornell.mannlib.vitro.webapp.beans.DataPropertyStatementImpl; +import edu.cornell.mannlib.vitro.webapp.beans.IndividualImpl; +import edu.cornell.mannlib.vitro.webapp.beans.UserAccount; +import edu.cornell.mannlib.vitro.webapp.dao.DataPropertyStatementDao; +import edu.cornell.mannlib.vitro.webapp.dao.IndividualDao; +import edu.cornell.mannlib.vitro.webapp.dao.InsertException; +import edu.cornell.mannlib.vitro.webapp.dao.VitroVocabulary; + +/** + * Create a new profile with the given VClass URI, and info from the user account. + */ +public class UserAccountsProfileCreator { + private static final String URI_FOAF_FIRST_NAME = "http://xmlns.com/foaf/0.1/firstName"; + private static final String URI_FOAF_LAST_NAME = "http://xmlns.com/foaf/0.1/lastName"; + + public static String createProfile(IndividualDao indDao, + DataPropertyStatementDao dpsDao, String profileClassUri, + UserAccount account) throws InsertException { + IndividualImpl i = new IndividualImpl(); + i.setVClassURI(profileClassUri); + String indUri = indDao.insertNewIndividual(i); + + addProp(dpsDao, indUri, URI_FOAF_FIRST_NAME, account.getFirstName()); + addProp(dpsDao, indUri, URI_FOAF_LAST_NAME, account.getLastName()); + + String label = account.getLastName() + ", " + account.getFirstName(); + addProp(dpsDao, indUri, VitroVocabulary.LABEL, label); + + return indUri; + } + + private static void addProp(DataPropertyStatementDao dpsDao, String indUri, + String propertyUri, String value) { + DataPropertyStatementImpl dps = new DataPropertyStatementImpl(indUri, + propertyUri, value); + dpsDao.insertNewDataPropertyStatement(dps); + } +}