Skip to content

Commit

Permalink
Added unit test for public_frozen collections and implemented delete …
Browse files Browse the repository at this point in the history
…option for admin user for all public collections
  • Loading branch information
WillemElbers committed Apr 7, 2016
1 parent e8d60f0 commit 9caad65
Show file tree
Hide file tree
Showing 6 changed files with 81 additions and 10 deletions.
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
package eu.clarin.cmdi.virtualcollectionregistry.gui.pages;

import eu.clarin.cmdi.virtualcollectionregistry.AdminUsersService;
import eu.clarin.cmdi.virtualcollectionregistry.VirtualCollectionRegistry;
import eu.clarin.cmdi.virtualcollectionregistry.VirtualCollectionRegistryException;
import eu.clarin.cmdi.virtualcollectionregistry.VirtualCollectionRegistryUsageException;
import eu.clarin.cmdi.virtualcollectionregistry.gui.ApplicationSession;
import eu.clarin.cmdi.virtualcollectionregistry.gui.VolatileEntityModel;
import eu.clarin.cmdi.virtualcollectionregistry.gui.dialog.ConfirmationDialog;
import eu.clarin.cmdi.virtualcollectionregistry.gui.dialog.PublishConfirmationDialog;
Expand All @@ -20,6 +22,7 @@
import org.apache.wicket.Component;
import org.apache.wicket.PageParameters;
import org.apache.wicket.Session;
import org.apache.wicket.WicketRuntimeException;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.ajax.markup.html.AjaxLink;
import org.apache.wicket.markup.html.panel.Panel;
Expand All @@ -45,7 +48,33 @@ public class BrowseEditableCollectionsPanel extends Panel {
@SpringBean
private VirtualCollectionRegistry vcr;

private class ActionsColumn extends Panel {
@SpringBean
private AdminUsersService adminUsersService;

private abstract class PanelWithUserInformation extends Panel {

public PanelWithUserInformation(String id, IModel<VirtualCollection> model) {
super(id, model);
}

protected Principal getUser() {
ApplicationSession session = (ApplicationSession) getSession();
Principal principal = session.getPrincipal();
if (principal == null) {
throw new WicketRuntimeException("principal == null");
}
return principal;
}

protected boolean isUserAdmin() {
final String userName = getUser().getName();
final boolean admin = userName != null && adminUsersService.isAdmin(userName);
logger.info("username={}, admin={}", userName, admin);
return admin;
}
}

private class ActionsColumn extends PanelWithUserInformation {

public ActionsColumn(String id, IModel<VirtualCollection> model) {
super(id, model);
Expand Down Expand Up @@ -104,17 +133,21 @@ protected void onClick(AjaxRequestTarget target,
detailsItem.setVisible(false).setEnabled(false);
editItem.setVisible(false).setEnabled(false);
}

if (!vc.isPrivate()) {
publishItem.setVisible(false).setEnabled(false);
deleteItem.setVisible(false).setEnabled(false);
if(!isUserAdmin()) {
deleteItem.setVisible(false).setEnabled(false);
}
}

if(model.getObject().getState() == VirtualCollection.State.PUBLIC_FROZEN) {
editItem.setVisible(false).setEnabled(false);
}
}
}

private class ActionsPanel extends Panel {
private class ActionsPanel extends PanelWithUserInformation {

public ActionsPanel(String id, IModel<VirtualCollection> model) {
super(id, model);
Expand Down Expand Up @@ -163,7 +196,9 @@ public void onClick(AjaxRequestTarget target) {
}
if (!vc.isPrivate()) {
publishLink.setVisible(false).setEnabled(false);
deleteLink.setVisible(false).setEnabled(false);
if(!isUserAdmin()) {
deleteLink.setVisible(false).setEnabled(false);
}
}
if(vc.getState() == VirtualCollection.State.PUBLIC_FROZEN) {
editLink.setVisible(false).setEnabled(false);
Expand Down Expand Up @@ -355,7 +390,7 @@ protected Panel createActionPanel(String componentId,
}

private void doEdit(AjaxRequestTarget target, VirtualCollection vc) {
if(vc.getState() != VirtualCollection.State.PUBLIC_FROZEN) {
if(!vc.isPublicFrozen()) {
if (vc.isPublic()) {
// ask for confirmation when trying to edit a published collection
editPublishedDialog.showDialogue(target, vc);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ private ButtonBarPanel(String id, final IWizard wizard) {
public String getObject() {
if (wizard instanceof CreateVirtualCollectionWizard) {
final CreateVirtualCollectionWizard vcWizard = (CreateVirtualCollectionWizard) wizard;
if (vcWizard.getVirtualCollectionModel().getObject().isPublic()) {
if (vcWizard.getVirtualCollectionModel().getObject().isPublic()) {
return "return confirm('Are you sure you want to update this published collection?');";
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -220,7 +220,11 @@ public void setPersistentIdentifier(PersistentIdentifier persistentId) {
throw new IllegalStateException("illegal state");
}
this.persistentId = persistentId;
this.state = State.PUBLIC;
switch(state) {
case PUBLIC_PENDING: this.state = State.PUBLIC; break;
case PUBLIC_FROZEN_PENDING: this.state = State.PUBLIC_FROZEN; break;
default: throw new IllegalStateException("Invalid state transition. Unexpected source state: "+state);
}
}

public State getState() {
Expand All @@ -239,9 +243,13 @@ public boolean isPrivate() {
}

public boolean isPublic() {
return (state == State.PUBLIC_PENDING) || (state == State.PUBLIC_FROZEN_PENDING) || (state == State.PUBLIC);
return (state == State.PUBLIC_PENDING) || (state == State.PUBLIC);
}

public boolean isPublicFrozen() {
return (state == State.PUBLIC_FROZEN_PENDING) || (state == State.PUBLIC_FROZEN) ;
}

public boolean isDeleted() {
return (state == State.DELETED) || (state == State.DEAD);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ public long getSize(VirtualCollection t, Class<?> type, Type genericType, Annota

@Override
public void writeTo(VirtualCollection vc, Class<?> type, Type genericType, Annotation[] annotations, MediaType mediaType, MultivaluedMap<String, Object> httpHeaders, OutputStream stream) throws IOException, WebApplicationException {
if (!vc.isPublic() || (vc.getPersistentIdentifier() == null)) {
if (!vc.isPublic() || (!vc.isPublicFrozen()) || (vc.getPersistentIdentifier() == null)) {
throw new WebApplicationException(Response.status(Status.NOT_ACCEPTABLE).entity("CMDI not available for unpublished profiles. Please request XML or JSON").build());
}
marshaller.marshalAsCMDI(stream, VirtualCollectionMarshaller.Format.XML, vc);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -112,7 +112,7 @@ public Response getVirtualCollection(@Context Request request)
throws VirtualCollectionRegistryException {
final VirtualCollection vc = registry.retrieveVirtualCollection(id);
// CMDI's should not be returned for non-public VC's, so check this...
if (!vc.isPublic() || (vc.getPersistentIdentifier() == null)) {
if (!(vc.isPublic() || vc.isPublicFrozen()) || (vc.getPersistentIdentifier() == null)) {
// exclude CMDI from the options and check if this is ok for request
final List<Variant> variants = Variant.mediaTypes(
MediaType.TEXT_XML_TYPE,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -95,8 +95,36 @@ public void testGetPublicVirtualCollection() throws Exception {
final Response response = instance.getVirtualCollection(request);
assertEquals(200, response.getStatus());
assertEquals(vc, response.getEntity());
assertEquals(VirtualCollection.State.PUBLIC, vc.getState());
}

/**
* Test of getVirtualCollection method, of class VirtualCollectionResource.
*/
@Test
public void testGetPublicFrozenVirtualCollection() throws Exception {
final Request request = context.mock(Request.class);

// create a public VC to have returned by the registry service
final VirtualCollection vc = new VirtualCollection();
vc.setId(ID);
vc.setName("Test VC");
vc.setState(VirtualCollection.State.PUBLIC_FROZEN_PENDING);
// set PID and set state to public_frozen
vc.setPersistentIdentifier(new PersistentIdentifier(vc, PersistentIdentifier.Type.DUMMY, "PID"));

context.checking(new Expectations() {
{
oneOf(registry).retrieveVirtualCollection(ID);
will(returnValue(vc));
}
});
final Response response = instance.getVirtualCollection(request);
assertEquals(200, response.getStatus());
assertEquals(vc, response.getEntity());
assertEquals(VirtualCollection.State.PUBLIC_FROZEN, vc.getState());
}

/**
* Test of getVirtualCollection method, of class VirtualCollectionResource.
*/
Expand Down

0 comments on commit 9caad65

Please sign in to comment.