NIHVIVO-2343 Create method: UserAccountsDao.getUserAccountsWhoProxyForPage(String profilePageUri)

This commit is contained in:
j2blake 2011-10-28 16:20:19 +00:00
parent 202a657178
commit 7bb12dbeb9
5 changed files with 116 additions and 4 deletions

View file

@ -40,6 +40,11 @@ public interface UserAccountsDao {
*/
UserAccount getUserAccountByExternalAuthId(String externalAuthId);
/**
* Get any UserAccounts who act as proxy editors for this profile page.
*/
Collection<UserAccount> getUserAccountsWhoProxyForPage(String profilePageUri);
/**
* Create a new UserAccount in the model.
*

View file

@ -47,6 +47,12 @@ public class UserAccountsDaoFiltering extends BaseFiltering implements
return innerDao.getUserAccountByExternalAuthId(externalAuthId);
}
@Override
public Collection<UserAccount> getUserAccountsWhoProxyForPage(
String profilePageUri) {
return innerDao.getUserAccountsWhoProxyForPage(profilePageUri);
}
@Override
public String insertUserAccount(UserAccount userAccount) {
return innerDao.insertUserAccount(userAccount);

View file

@ -12,6 +12,8 @@ import java.util.Random;
import com.hp.hpl.jena.ontology.OntClass;
import com.hp.hpl.jena.ontology.OntModel;
import com.hp.hpl.jena.ontology.OntResource;
import com.hp.hpl.jena.rdf.model.Literal;
import com.hp.hpl.jena.rdf.model.Property;
import com.hp.hpl.jena.rdf.model.Resource;
import com.hp.hpl.jena.rdf.model.Statement;
import com.hp.hpl.jena.rdf.model.StmtIterator;
@ -24,6 +26,7 @@ import edu.cornell.mannlib.vitro.webapp.beans.PermissionSet;
import edu.cornell.mannlib.vitro.webapp.beans.UserAccount;
import edu.cornell.mannlib.vitro.webapp.dao.InsertException;
import edu.cornell.mannlib.vitro.webapp.dao.UserAccountsDao;
import edu.cornell.mannlib.vitro.webapp.dao.VitroVocabulary;
/**
* Implement UserAccountsDao for Jena models.
@ -164,6 +167,41 @@ public class UserAccountsDaoJena extends JenaBaseDao implements UserAccountsDao
return getUserAccountByUri(userUri);
}
@Override
public Collection<UserAccount> getUserAccountsWhoProxyForPage(
String profilePageUri) {
List<String> userUris = new ArrayList<String>();
Resource s = null;
Property p = getOntModel().getProperty(
VitroVocabulary.USERACCOUNT_PROXY_EDITOR_FOR);
Resource o = getOntModel().createResource(profilePageUri);
getOntModel().enterCriticalSection(Lock.READ);
try {
StmtIterator stmts = getOntModel().listStatements(s, p, o);
while (stmts.hasNext()) {
Resource subject = stmts.next().getSubject();
if (subject != null) {
userUris.add(subject.getURI());
}
}
stmts.close();
} finally {
getOntModel().leaveCriticalSection();
}
List<UserAccount> userAccounts = new ArrayList<UserAccount>();
for (String userUri : userUris) {
UserAccount ua = getUserAccountByUri(userUri);
if (ua != null) {
userAccounts.add(ua);
}
}
return userAccounts;
}
@Override
public String insertUserAccount(UserAccount userAccount) {
if (userAccount == null) {
@ -214,8 +252,7 @@ public class UserAccountsDaoJena extends JenaBaseDao implements UserAccountsDao
model.add(res, RDF.type, USERACCOUNT_ROOT_USER);
}
updatePropertyResourceURIValues(res,
USERACCOUNT_PROXY_EDITOR_FOR,
updatePropertyResourceURIValues(res, USERACCOUNT_PROXY_EDITOR_FOR,
userAccount.getProxiedIndividualUris(), model);
userAccount.setUri(userUri);
@ -283,8 +320,7 @@ public class UserAccountsDaoJena extends JenaBaseDao implements UserAccountsDao
model.remove(res, RDF.type, USERACCOUNT_ROOT_USER);
}
updatePropertyResourceURIValues(res,
USERACCOUNT_PROXY_EDITOR_FOR,
updatePropertyResourceURIValues(res, USERACCOUNT_PROXY_EDITOR_FOR,
userAccount.getProxiedIndividualUris(), model);
} finally {

View file

@ -232,6 +232,48 @@ public class UserAccountsDaoJenaTest extends AbstractTestClass {
assertEqualAccounts(user1, updated);
}
@Test
public void getProxyEditorsFirst() {
String profileOne = NS_MINE + "userNewProxyOne";
String profileTwo = NS_MINE + "userNewProxyTwo";
userNew.setProxiedIndividualUris(collection(profileOne, profileTwo));
String userUri = dao.insertUserAccount(userNew);
UserAccount user = dao.getUserAccountByUri(userUri);
assertExpectedAccountUris("proxy for profile one",
Collections.singleton(user),
dao.getUserAccountsWhoProxyForPage(profileOne));
}
@Test
public void getProxyEditorsSecond() {
String profileOne = NS_MINE + "userNewProxyOne";
String profileTwo = NS_MINE + "userNewProxyTwo";
userNew.setProxiedIndividualUris(collection(profileOne, profileTwo));
String userUri = dao.insertUserAccount(userNew);
UserAccount user = dao.getUserAccountByUri(userUri);
assertExpectedAccountUris("proxy for profile two",
Collections.singleton(user),
dao.getUserAccountsWhoProxyForPage(profileTwo));
}
@Test
public void getProxyEditorsBogus() {
String profileOne = NS_MINE + "userNewProxyOne";
String profileTwo = NS_MINE + "userNewProxyTwo";
String bogusProfile = NS_MINE + "bogus";
userNew.setProxiedIndividualUris(collection(profileOne, profileTwo));
dao.insertUserAccount(userNew);
assertExpectedAccountUris("proxy for bogus profile",
Collections.<UserAccount> emptySet(),
dao.getUserAccountsWhoProxyForPage(bogusProfile));
}
// ----------------------------------------------------------------------
// Tests for PermissionSet methods
// ----------------------------------------------------------------------
@ -390,6 +432,22 @@ public class UserAccountsDaoJenaTest extends AbstractTestClass {
assertEquals("all permission sets", expectedMaps, actualMaps);
}
private void assertExpectedAccountUris(String label,
Set<UserAccount> expectedUserAccounts,
Collection<UserAccount> actualUserAccounts) {
Set<String> expectedUris = new HashSet<String>();
for (UserAccount ua : expectedUserAccounts) {
expectedUris.add(ua.getUri());
}
Set<String> actualUris = new HashSet<String>();
for (UserAccount ua : actualUserAccounts) {
actualUris.add(ua.getUri());
}
assertEqualSets(label, expectedUris, actualUris);
}
@SuppressWarnings("unused")
private void dumpModelStatements() {
StmtIterator stmts = ontModel.listStatements();

View file

@ -90,4 +90,11 @@ public class UserAccountsDaoStub implements UserAccountsDao {
"UserAccountsDao.getAllUserAccounts() not implemented.");
}
@Override
public Collection<UserAccount> getUserAccountsWhoProxyForPage(
String profilePageUri) {
throw new RuntimeException(
"UserAccountsDaoStub.getUserAccountsWhoProxyForPage() not implemented.");
}
}