diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/auth/identifier/common/CommonIdentifierBundleFactory.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/auth/identifier/common/CommonIdentifierBundleFactory.java index bbb4b0832..af51ba1d6 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/auth/identifier/common/CommonIdentifierBundleFactory.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/auth/identifier/common/CommonIdentifierBundleFactory.java @@ -100,6 +100,12 @@ public class CommonIdentifierBundleFactory implements IdentifierBundleFactory { return ids; } + /** + * Get all Individuals associated with the current user. + * + * TODO Currently only uses the matching property. Should also use + * "mayEditAs" type of association. + */ private Collection getAssociatedIndividuals( HttpServletRequest req) { Collection individuals = new ArrayList(); @@ -109,7 +115,6 @@ public class CommonIdentifierBundleFactory implements IdentifierBundleFactory { log.debug("No Associated Individuals: not logged in."); return individuals; } - String emailAddress = user.getEmailAddress(); WebappDaoFactory wdf = (WebappDaoFactory) context .getAttribute("webappDaoFactory"); @@ -121,22 +126,8 @@ public class CommonIdentifierBundleFactory implements IdentifierBundleFactory { IndividualDao indDao = wdf.getIndividualDao(); SelfEditingConfiguration sec = SelfEditingConfiguration.getBean(req); - String uri = sec.getIndividualUriFromUsername(indDao, emailAddress); - if (uri == null) { - log.debug("Could not find an Individual with a netId of " - + emailAddress); - return individuals; - } + individuals.addAll(sec.getAssociatedIndividuals(indDao, user)); - Individual ind = indDao.getIndividualByURI(uri); - if (ind == null) { - log.warn("Found a URI for the netId " + emailAddress - + " but could not build Individual"); - return individuals; - } - log.debug("Found an Individual for netId " + emailAddress + " URI: " + uri); - - individuals.add(ind); return individuals; } diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/beans/SelfEditingConfiguration.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/beans/SelfEditingConfiguration.java index 4096abc0a..ea1706c48 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/beans/SelfEditingConfiguration.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/beans/SelfEditingConfiguration.java @@ -2,6 +2,9 @@ package edu.cornell.mannlib.vitro.webapp.beans; +import java.util.Collections; +import java.util.List; + import javax.servlet.ServletRequest; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; @@ -64,7 +67,9 @@ public class SelfEditingConfiguration { } private static SelfEditingConfiguration buildBean(HttpSession session) { - String selfEditingIdMatchingProperty = ConfigurationProperties.getBean(session) + ConfigurationProperties config = ConfigurationProperties + .getBean(session); + String selfEditingIdMatchingProperty = config .getProperty(PROPERTY_SELF_EDITING_ID_MATCHING_PROPERTY); return new SelfEditingConfiguration(selfEditingIdMatchingProperty); } @@ -87,26 +92,39 @@ public class SelfEditingConfiguration { } } - // TODO JB This should move to UserAccountsDao. - public String getIndividualUriFromUsername(IndividualDao indDao, - String username) { + /** + * Get all Individuals associated with this user through the matching + * property. Never returns null. + */ + public List getAssociatedIndividuals(IndividualDao indDao, + UserAccount user) { + if (user == null) { + log.debug("user is null"); + return Collections.emptyList(); + } + return getAssociatedIndividuals(indDao, user.getExternalAuthId()); + } + + /** + * Get all Individuals associated with this externalAuthId through the + * matching property. Never returns null. + */ + public List getAssociatedIndividuals(IndividualDao indDao, + String externalAuthId) { if (indDao == null) { log.warn("No IndividualDao"); - return null; + return Collections.emptyList(); } - if (username == null) { - log.debug("username is null"); - return null; + if (externalAuthId == null) { + log.debug("externalAuthId is null"); + return Collections.emptyList(); } if (selfEditingIdMatchingProperty == null) { log.debug("selfEditingMatchingProperty is null"); - return null; + return Collections.emptyList(); } - - String uri = indDao.getIndividualURIFromNetId(username, - selfEditingIdMatchingProperty); - log.debug("Username=" + username + ", individual URI=" + uri); - return uri; + return indDao.getIndividualsByDataProperty( + selfEditingIdMatchingProperty, externalAuthId); } @Override diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/authenticate/BasicAuthenticator.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/authenticate/BasicAuthenticator.java index eca8954af..2135f007f 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/authenticate/BasicAuthenticator.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/authenticate/BasicAuthenticator.java @@ -17,6 +17,7 @@ import org.apache.commons.logging.LogFactory; import edu.cornell.mannlib.vedit.beans.LoginStatusBean; import edu.cornell.mannlib.vedit.beans.LoginStatusBean.AuthenticationSource; import edu.cornell.mannlib.vitro.webapp.beans.BaseResourceBean.RoleLevel; +import edu.cornell.mannlib.vitro.webapp.beans.Individual; import edu.cornell.mannlib.vitro.webapp.beans.SelfEditingConfiguration; import edu.cornell.mannlib.vitro.webapp.beans.UserAccount; import edu.cornell.mannlib.vitro.webapp.controller.edit.Authenticate; @@ -46,7 +47,7 @@ public class BasicAuthenticator extends Authenticator { } return userAccountsDao.getUserAccountByEmail(emailAddress); } - + @Override public UserAccount getAccountForExternalAuth(String externalAuthId) { UserAccountsDao userAccountsDao = getUserAccountsDao(); @@ -103,7 +104,6 @@ public class BasicAuthenticator extends Authenticator { return false; } - @Override public List getAssociatedIndividualUris(UserAccount userAccount) { List uris = new ArrayList(); @@ -195,22 +195,22 @@ public class BasicAuthenticator extends Authenticator { } private List getUrisAssociatedBySelfEditorConfig(UserAccount user) { + List uris = new ArrayList(); if (user == null) { - return Collections.emptyList(); + return uris; } IndividualDao iDao = getIndividualDao(); if (iDao == null) { - return Collections.emptyList(); + return uris; } - String selfEditorUri = SelfEditingConfiguration.getBean(request) - .getIndividualUriFromUsername(iDao, user.getExternalAuthId()); - if (selfEditorUri == null) { - return Collections.emptyList(); - } else { - return Collections.singletonList(selfEditorUri); + List associatedIndividuals = SelfEditingConfiguration + .getBean(request).getAssociatedIndividuals(iDao, user); + for (Individual ind : associatedIndividuals) { + uris.add(ind.getURI()); } + return uris; } @Override @@ -238,15 +238,15 @@ public class BasicAuthenticator extends Authenticator { if (wadf == null) { return null; } - + UserAccountsDao userAccountsDao = wadf.getUserAccountsDao(); if (userAccountsDao == null) { log.error("getUserAccountsDao: no UserAccountsDao"); } - + return userAccountsDao; } - + /** * Get a reference to the IndividualDao, or null. */ diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/freemarker/IndividualController.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/freemarker/IndividualController.java index 50045527b..267b56339 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/freemarker/IndividualController.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/freemarker/IndividualController.java @@ -455,8 +455,10 @@ public class IndividualController extends FreemarkerHttpServlet { netIdStr = vreq.getParameter("netid"); if ( netIdStr != null ){ SelfEditingConfiguration sec = SelfEditingConfiguration.getBean(vreq); - uri = sec.getIndividualUriFromUsername(iwDao, netIdStr); - return iwDao.getIndividualByURI(uri); + List assocInds = sec.getAssociatedIndividuals(iwDao, netIdStr); + if (!assocInds.isEmpty()) { + return assocInds.get(0); + } } return null; diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/IndividualDao.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/IndividualDao.java index 91b7e0987..87d94c262 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/IndividualDao.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/IndividualDao.java @@ -108,10 +108,6 @@ public interface IndividualDao extends ObjectSourceIface { /** * Returns a list of individuals with the given value for the given dataProperty. If * there are no Indiviuals that fit the criteria then an empty list is returned. - * - * @param dataPropertyUri - * @param value - * @return */ public List getIndividualsByDataProperty(String dataPropertyUri, String value); @@ -128,9 +124,6 @@ public interface IndividualDao extends ObjectSourceIface { List getKeywordObjectsForIndividual(String individualURI); - /** In most cases, it's best to let ExternalAuthHelper call this for you. */ - String getIndividualURIFromNetId(String netIdStr, String netidMatchingPropertyUri); - String getNetId(String entityURI); String getStatus(String entityURI); diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/filtering/IndividualDaoFiltering.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/filtering/IndividualDaoFiltering.java index 86c7bb761..ad813013d 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/filtering/IndividualDaoFiltering.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/filtering/IndividualDaoFiltering.java @@ -85,16 +85,6 @@ class IndividualDaoFiltering extends BaseFiltering implements IndividualDao{ innerIndividualDao.fillVClassForIndividual(individual); } - - public String getIndividualURIFromNetId(String netIdStr, String netidMatchingPropertyUri) { - String uri = innerIndividualDao.getIndividualURIFromNetId(netIdStr, netidMatchingPropertyUri); - if( uri == null ) return null; - Individual ent = getIndividualByURI(uri); - if( ent != null && filters.getIndividualFilter().fn(ent) ) - return uri; - else - return null; - } public List getIndividualsByDataProperty(String dataPropertyUri, String value) { return filterAndWrap(innerIndividualDao.getIndividualsByDataProperty(dataPropertyUri,value), filters); diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/jena/IndividualDaoJena.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/jena/IndividualDaoJena.java index 732d40891..978eeef54 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/jena/IndividualDaoJena.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/jena/IndividualDaoJena.java @@ -650,27 +650,6 @@ public class IndividualDaoJena extends JenaBaseDao implements IndividualDao { return keywords; } - public String getIndividualURIFromNetId(String netIdStr, String netidMatchingPropertyUri) { - if (netidMatchingPropertyUri == null) { - return null; - } - - Property prop = getOntModel().getProperty(netidMatchingPropertyUri); - Literal netid = getOntModel().createLiteral(netIdStr); - - ResIterator stmts = null; - try{ - stmts = getOntModel().listResourcesWithProperty(prop, netid); - if (stmts.hasNext()) { - return stmts.nextResource().getURI(); - } else { - return null; - } - } finally{ - if( stmts != null ) stmts.close(); - } - } - /** * In Jena it can be difficult to get an object with a given dataproperty if * you do not care about the datatype or lang of the literal. Use this diff --git a/webapp/test/stubs/edu/cornell/mannlib/vitro/webapp/dao/IndividualDaoStub.java b/webapp/test/stubs/edu/cornell/mannlib/vitro/webapp/dao/IndividualDaoStub.java index 137fe9a8e..4caf12cbe 100644 --- a/webapp/test/stubs/edu/cornell/mannlib/vitro/webapp/dao/IndividualDaoStub.java +++ b/webapp/test/stubs/edu/cornell/mannlib/vitro/webapp/dao/IndividualDaoStub.java @@ -205,13 +205,6 @@ public class IndividualDaoStub implements IndividualDao { "IndividualDaoStub.getKeywordObjectsForIndividual() not implemented."); } - @Override - public String getIndividualURIFromNetId(String netIdStr, - String netidMatchingPropertyUri) { - throw new RuntimeException( - "IndividualDaoStub.getIndividualURIFromNetId() not implemented."); - } - @Override public String getNetId(String entityURI) { throw new RuntimeException( diff --git a/webapp/web/templates/freemarker/body/admin/admin-showAuth.ftl b/webapp/web/templates/freemarker/body/admin/admin-showAuth.ftl index a8e39ff2d..bb1d64f6f 100644 --- a/webapp/web/templates/freemarker/body/admin/admin-showAuth.ftl +++ b/webapp/web/templates/freemarker/body/admin/admin-showAuth.ftl @@ -14,6 +14,7 @@ ${stylesheets.add('First name:${currentUser.firstName} Last name:${currentUser.lastName} Email:${currentUser.emailAddress} + External Auth ID:${currentUser.externalAuthId} Login count:${currentUser.loginCount} <#list currentUser.permissionSetUris as role> Role:${role}