1 | package eu.clarin.cmdi.virtualcollectionregistry.gui.pages; |
---|
2 | |
---|
3 | import eu.clarin.cmdi.virtualcollectionregistry.VirtualCollectionRegistry; |
---|
4 | import eu.clarin.cmdi.virtualcollectionregistry.VirtualCollectionRegistryException; |
---|
5 | import eu.clarin.cmdi.virtualcollectionregistry.VirtualCollectionRegistryPermissionException; |
---|
6 | import eu.clarin.cmdi.virtualcollectionregistry.gui.wizard.CreateVirtualCollectionWizard; |
---|
7 | import eu.clarin.cmdi.virtualcollectionregistry.model.VirtualCollection; |
---|
8 | import eu.clarin.cmdi.virtualcollectionregistry.model.VirtualCollection.State; |
---|
9 | import org.apache.wicket.Page; |
---|
10 | import org.apache.wicket.PageParameters; |
---|
11 | import org.apache.wicket.authorization.UnauthorizedInstantiationException; |
---|
12 | import org.apache.wicket.authorization.strategies.role.Roles; |
---|
13 | import org.apache.wicket.authorization.strategies.role.annotations.AuthorizeInstantiation; |
---|
14 | import org.apache.wicket.spring.injection.annot.SpringBean; |
---|
15 | import org.slf4j.Logger; |
---|
16 | import org.slf4j.LoggerFactory; |
---|
17 | |
---|
18 | @AuthorizeInstantiation(Roles.USER) |
---|
19 | public class EditVirtualCollectionPage extends CreateVirtualCollectionPage { |
---|
20 | |
---|
21 | @SpringBean |
---|
22 | private VirtualCollectionRegistry vcr; |
---|
23 | |
---|
24 | private final static Logger logger = LoggerFactory.getLogger(EditVirtualCollectionPage.class); |
---|
25 | |
---|
26 | public EditVirtualCollectionPage(PageParameters params) throws VirtualCollectionRegistryException { |
---|
27 | final Long id = params.getAsLong("id"); |
---|
28 | final VirtualCollection vc; |
---|
29 | if (id == null) { |
---|
30 | vc = new VirtualCollection(); |
---|
31 | } else { |
---|
32 | vc = vcr.retrieveVirtualCollection(id); |
---|
33 | checkAccess(vc); |
---|
34 | } |
---|
35 | final CreateVirtualCollectionWizard wizard = createWizard(vc, null); |
---|
36 | add(wizard); |
---|
37 | } |
---|
38 | |
---|
39 | private void checkAccess(final VirtualCollection vc) throws VirtualCollectionRegistryPermissionException { |
---|
40 | // do not allow editing of VC's that are non-private or owned |
---|
41 | // by someone else! (except for admin) |
---|
42 | if (!isUserAdmin() |
---|
43 | && ( //only allow editing of private & public |
---|
44 | !(vc.getState() == State.PRIVATE || vc.getState() == State.PUBLIC) |
---|
45 | // only allow editing by the owner |
---|
46 | || !vc.getOwner().equalsPrincipal(getUser()))) { |
---|
47 | logger.warn("User {} attempts to edit virtual collection {} with state {} owned by {}", new Object[]{getUser().getName(), vc.getId(), vc.getState(), vc.getOwner().getName()}); |
---|
48 | throw new UnauthorizedInstantiationException(EditVirtualCollectionPage.class); |
---|
49 | } |
---|
50 | } |
---|
51 | |
---|
52 | EditVirtualCollectionPage(VirtualCollection vc, Page page) { |
---|
53 | super(vc, page); |
---|
54 | } |
---|
55 | } |
---|