use of edu.harvard.iq.dataverse.Dataverse in project dataverse by IQSS.
the class ExplicitGroupTest method recursiveStructuralContainment.
@Test
public void recursiveStructuralContainment() throws GroupException {
Dataverse dvParent = makeDataverse();
ExplicitGroup parentGroup = roleAssigneeSvc.add(makeExplicitGroup(prv));
ExplicitGroup childGroup = roleAssigneeSvc.add(makeExplicitGroup(prv));
ExplicitGroup grandChildGroup = roleAssigneeSvc.add(makeExplicitGroup(prv));
parentGroup.setOwner(dvParent);
childGroup.setOwner(dvParent);
grandChildGroup.setOwner(dvParent);
childGroup.add(grandChildGroup);
parentGroup.add(childGroup);
AuthenticatedUser au = roleAssigneeSvc.add(makeAuthenticatedUser("Jane", "Doe"));
grandChildGroup.add(au);
childGroup.add(GuestUser.get());
assertTrue(grandChildGroup.structuralContains(au));
assertTrue(childGroup.structuralContains(au));
assertTrue(parentGroup.structuralContains(au));
assertTrue(childGroup.structuralContains(GuestUser.get()));
assertTrue(parentGroup.structuralContains(GuestUser.get()));
grandChildGroup.remove(au);
assertFalse(grandChildGroup.structuralContains(au));
assertFalse(childGroup.structuralContains(au));
assertFalse(parentGroup.structuralContains(au));
childGroup.add(AuthenticatedUsers.get());
assertFalse(grandChildGroup.structuralContains(au));
assertFalse(childGroup.structuralContains(au));
assertFalse(parentGroup.structuralContains(au));
assertTrue(childGroup.structuralContains(AuthenticatedUsers.get()));
final IpGroup ipGroup = new IpGroup(new IpGroupProvider(null));
grandChildGroup.add(ipGroup);
ipGroup.add(IpAddressRange.make(IpAddress.valueOf("0.0.1.1"), IpAddress.valueOf("0.0.255.255")));
assertTrue(grandChildGroup.structuralContains(ipGroup));
assertTrue(childGroup.structuralContains(ipGroup));
assertTrue(parentGroup.structuralContains(ipGroup));
}
use of edu.harvard.iq.dataverse.Dataverse in project dataverse by IQSS.
the class ExplicitGroupTest method adds.
@Test
public void adds() throws GroupException {
Dataverse dvParent = makeDataverse();
ExplicitGroup g1 = new ExplicitGroup(prv);
g1.setOwner(dvParent);
AuthenticatedUser au1 = makeAuthenticatedUser("Lauren", "Ipsum");
g1.add(au1);
g1.add(GuestUser.get());
assertTrue(g1.structuralContains(GuestUser.get()));
assertTrue(g1.structuralContains(au1));
assertFalse(g1.structuralContains(makeAuthenticatedUser("Sima", "Kneidle")));
assertFalse(g1.structuralContains(AllUsers.get()));
}
use of edu.harvard.iq.dataverse.Dataverse in project dataverse by IQSS.
the class ExplicitGroupTest method recursiveLogicalContainment.
@Test
public void recursiveLogicalContainment() throws GroupException {
Dataverse dvParent = makeDataverse();
ExplicitGroup parentGroup = roleAssigneeSvc.add(makeExplicitGroup("parent", prv));
ExplicitGroup childGroup = roleAssigneeSvc.add(makeExplicitGroup("child", prv));
ExplicitGroup grandChildGroup = roleAssigneeSvc.add(makeExplicitGroup("grandChild", prv));
parentGroup.setOwner(dvParent);
childGroup.setOwner(dvParent);
grandChildGroup.setOwner(dvParent);
childGroup.add(grandChildGroup);
parentGroup.add(childGroup);
AuthenticatedUser au = roleAssigneeSvc.add(makeAuthenticatedUser("Jane", "Doe"));
grandChildGroup.add(au);
childGroup.add(GuestUser.get());
DataverseRequest auReq = makeRequest(au);
DataverseRequest guestReq = makeRequest();
assertTrue(grandChildGroup.contains(auReq));
assertTrue(childGroup.contains(auReq));
assertTrue(parentGroup.contains(auReq));
assertTrue(childGroup.contains(guestReq));
assertTrue(parentGroup.contains(guestReq));
grandChildGroup.remove(au);
assertFalse(grandChildGroup.contains(auReq));
assertFalse(childGroup.contains(auReq));
assertFalse(parentGroup.contains(auReq));
childGroup.add(AuthenticatedUsers.get());
assertFalse(grandChildGroup.contains(auReq));
assertTrue(childGroup.contains(auReq));
assertTrue(parentGroup.contains(auReq));
final IpGroup ipGroup = roleAssigneeSvc.add(new IpGroup(new IpGroupProvider(null)));
grandChildGroup.add(ipGroup);
ipGroup.add(IpAddressRange.make(IpAddress.valueOf("0.0.1.1"), IpAddress.valueOf("0.0.255.255")));
final IpAddress ip = IpAddress.valueOf("0.0.128.128");
final DataverseRequest request = new DataverseRequest(GuestUser.get(), ip);
assertTrue(ipGroup.contains(request));
assertTrue(grandChildGroup.contains(request));
assertTrue(parentGroup.contains(request));
childGroup.add(GuestUser.get());
assertTrue(childGroup.contains(guestReq));
assertTrue(parentGroup.contains(guestReq));
assertFalse(grandChildGroup.contains(guestReq));
}
use of edu.harvard.iq.dataverse.Dataverse in project dataverse by IQSS.
the class SavedSearchServiceBean method makeLinksForSingleSavedSearch.
/**
* The "Saved Search" and highly related "Linked Dataverses and Linked
* Datasets" features can be thought of as periodic execution of the
* LinkDataverseCommand and LinkDatasetCommand. As of this writing that
* periodic execution can be triggered via a cron job but we'd like to put
* it on an EJB timer as part of
* https://github.com/IQSS/dataverse/issues/2543 .
*
* The commands are executed by the creator of the SavedSearch. What happens
* if the users loses the permission that the command requires? Should the
* commands continue to be executed periodically as some "system" user?
*
* @return Debug information in the form of a JSON object, which is much
* more structured that a simple String.
*/
public JsonObjectBuilder makeLinksForSingleSavedSearch(DataverseRequest dvReq, SavedSearch savedSearch, boolean debugFlag) throws SearchException, CommandException {
JsonObjectBuilder response = Json.createObjectBuilder();
JsonArrayBuilder savedSearchArrayBuilder = Json.createArrayBuilder();
JsonArrayBuilder infoPerHit = Json.createArrayBuilder();
SolrQueryResponse queryResponse = findHits(savedSearch);
for (SolrSearchResult solrSearchResult : queryResponse.getSolrSearchResults()) {
JsonObjectBuilder hitInfo = Json.createObjectBuilder();
hitInfo.add("name", solrSearchResult.getNameSort());
hitInfo.add("dvObjectId", solrSearchResult.getEntityId());
DvObject dvObjectThatDefinitionPointWillLinkTo = dvObjectService.findDvObject(solrSearchResult.getEntityId());
if (dvObjectThatDefinitionPointWillLinkTo == null) {
hitInfo.add(resultString, "Could not find DvObject with id " + solrSearchResult.getEntityId());
infoPerHit.add(hitInfo);
break;
}
if (dvObjectThatDefinitionPointWillLinkTo.isInstanceofDataverse()) {
Dataverse dataverseToLinkTo = (Dataverse) dvObjectThatDefinitionPointWillLinkTo;
if (wouldResultInLinkingToItself(savedSearch.getDefinitionPoint(), dataverseToLinkTo)) {
hitInfo.add(resultString, "Skipping because dataverse id " + dataverseToLinkTo.getId() + " would link to itself.");
} else if (alreadyLinkedToTheDataverse(savedSearch.getDefinitionPoint(), dataverseToLinkTo)) {
hitInfo.add(resultString, "Skipping because dataverse " + savedSearch.getDefinitionPoint().getId() + " already links to dataverse " + dataverseToLinkTo.getId() + ".");
} else if (dataverseToLinkToIsAlreadyPartOfTheSubtree(savedSearch.getDefinitionPoint(), dataverseToLinkTo)) {
hitInfo.add(resultString, "Skipping because " + dataverseToLinkTo + " is already part of the subtree for " + savedSearch.getDefinitionPoint());
} else {
DataverseLinkingDataverse link = commandEngine.submitInNewTransaction(new LinkDataverseCommand(dvReq, savedSearch.getDefinitionPoint(), dataverseToLinkTo));
hitInfo.add(resultString, "Persisted DataverseLinkingDataverse id " + link.getId() + " link of " + dataverseToLinkTo + " to " + savedSearch.getDefinitionPoint());
}
} else if (dvObjectThatDefinitionPointWillLinkTo.isInstanceofDataset()) {
Dataset datasetToLinkTo = (Dataset) dvObjectThatDefinitionPointWillLinkTo;
if (alreadyLinkedToTheDataset(savedSearch.getDefinitionPoint(), datasetToLinkTo)) {
hitInfo.add(resultString, "Skipping because dataverse " + savedSearch.getDefinitionPoint() + " already links to dataset " + datasetToLinkTo + ".");
} else if (datasetToLinkToIsAlreadyPartOfTheSubtree(savedSearch.getDefinitionPoint(), datasetToLinkTo)) {
// already there from normal search/browse
hitInfo.add(resultString, "Skipping because dataset " + datasetToLinkTo.getId() + " is already part of the subtree for " + savedSearch.getDefinitionPoint().getAlias());
} else if (datasetAncestorAlreadyLinked(savedSearch.getDefinitionPoint(), datasetToLinkTo)) {
hitInfo.add(resultString, "FIXME: implement this?");
} else {
DatasetLinkingDataverse link = commandEngine.submitInNewTransaction(new LinkDatasetCommand(dvReq, savedSearch.getDefinitionPoint(), datasetToLinkTo));
hitInfo.add(resultString, "Persisted DatasetLinkingDataverse id " + link.getId() + " link of " + link.getDataset() + " to " + link.getLinkingDataverse());
}
} else if (dvObjectThatDefinitionPointWillLinkTo.isInstanceofDataFile()) {
hitInfo.add(resultString, "Skipping because the search matched a file. The matched file id was " + dvObjectThatDefinitionPointWillLinkTo.getId() + ".");
} else {
hitInfo.add(resultString, "Unexpected DvObject type.");
}
infoPerHit.add(hitInfo);
}
JsonObjectBuilder info = getInfo(savedSearch, infoPerHit);
if (debugFlag) {
info.add("debug", getDebugInfo(savedSearch));
}
savedSearchArrayBuilder.add(info);
response.add("hits for saved search id " + savedSearch.getId(), savedSearchArrayBuilder);
return response;
}
Aggregations