Changeset 5475
- Timestamp:
- 07/11/14 14:05:50 (10 years ago)
- Location:
- VirtualCollectionRegistry/trunk/VirtualCollectionRegistry/src/main/java/eu/clarin/cmdi/virtualcollectionregistry/gui
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
VirtualCollectionRegistry/trunk/VirtualCollectionRegistry/src/main/java/eu/clarin/cmdi/virtualcollectionregistry/gui/Application.java
r5436 r5475 9 9 import eu.clarin.cmdi.virtualcollectionregistry.gui.pages.EditVirtualCollectionPage; 10 10 import eu.clarin.cmdi.virtualcollectionregistry.gui.pages.LoginPage; 11 import eu.clarin.cmdi.virtualcollectionregistry.gui.pages.VirtualCollectionDetailsPage; 11 12 import java.io.BufferedReader; 12 13 import java.io.FileInputStream; … … 74 75 mountBookmarkablePage("/admin", AdminPage.class); 75 76 77 // details of an existing collection by ID, e.g. /details/123 78 mount(new MixedParamHybridUrlCodingStrategy("/details", 79 VirtualCollectionDetailsPage.class, new String[]{VirtualCollectionDetailsPage.PARAM_VC_ID})); 76 80 // editing an existing collection by ID, e.g. /edit/123 77 81 mount(new MixedParamHybridUrlCodingStrategy("/edit", -
VirtualCollectionRegistry/trunk/VirtualCollectionRegistry/src/main/java/eu/clarin/cmdi/virtualcollectionregistry/gui/ApplicationSession.java
r5472 r5475 3 3 import de.mpg.aai.shhaa.model.AuthAttribute; 4 4 import de.mpg.aai.shhaa.model.AuthPrincipal; 5 import eu.clarin.cmdi.virtualcollectionregistry.model.User; 5 6 import java.security.Principal; 6 7 import java.util.regex.Pattern; … … 69 70 } 70 71 72 /** 73 * 74 * @param user user to check for 75 * @return whether the specified user is the user currently signed in (false 76 * if {@link #isSignedIn() } returns false) 77 */ 78 public boolean isCurrentUser(User user) { 79 return isSignedIn() && getUser().equals(user.getName()); 80 } 81 71 82 public String getUser() { 72 83 return user; -
VirtualCollectionRegistry/trunk/VirtualCollectionRegistry/src/main/java/eu/clarin/cmdi/virtualcollectionregistry/gui/pages/BasePage.java
r5417 r5475 83 83 } 84 84 85 @Override 86 public ApplicationSession getSession() { 87 return (ApplicationSession) super.getSession(); 88 } 89 90 91 85 92 } // class BasePage -
VirtualCollectionRegistry/trunk/VirtualCollectionRegistry/src/main/java/eu/clarin/cmdi/virtualcollectionregistry/gui/pages/BrowsePrivateCollectionsPage.java
r5440 r5475 1 1 package eu.clarin.cmdi.virtualcollectionregistry.gui.pages; 2 3 2 4 3 import org.apache.wicket.Component; … … 255 254 } 256 255 257 private void doDetails(AjaxRequestTarget target, 258 IModel<VirtualCollection> vc) { 259 setResponsePage(new VirtualCollectionDetailsPage(vc, getPage())); 260 } 261 256 private void doDetails(AjaxRequestTarget target, IModel<VirtualCollection> vc) { 257 setResponsePage(VirtualCollectionDetailsPage.class, VirtualCollectionDetailsPage.createPageParameters(vc.getObject(), getPageReference())); 258 } 262 259 263 260 } // class BrowsePrivateCollectionsPage -
VirtualCollectionRegistry/trunk/VirtualCollectionRegistry/src/main/java/eu/clarin/cmdi/virtualcollectionregistry/gui/pages/BrowsePublicCollectionsPage.java
r1011 r5475 11 11 @SuppressWarnings("serial") 12 12 public class BrowsePublicCollectionsPage extends BasePage { 13 13 14 private class ActionsPanel extends Panel { 15 14 16 public ActionsPanel(String id, IModel<VirtualCollection> model) { 15 17 super(id, model); 16 18 setRenderBodyOnly(true); 17 19 18 final AjaxLink<VirtualCollection> detailsLink =19 new AjaxLink<VirtualCollection>("details", model) {20 @Override21 public void onClick(AjaxRequestTarget target) {22 doDetails(target, getModel());23 }24 };20 final AjaxLink<VirtualCollection> detailsLink 21 = new AjaxLink<VirtualCollection>("details", model) { 22 @Override 23 public void onClick(AjaxRequestTarget target) { 24 doDetails(target, getModel()); 25 } 26 }; 25 27 add(detailsLink); 26 28 } … … 29 31 public BrowsePublicCollectionsPage() { 30 32 super(); 31 final VirtualCollectionTable table =32 new VirtualCollectionTable("collectionsTable", false) {33 @Override34 protected Panel createActionColumn(String componentId,35 IModel<VirtualCollection> model) {36 return new ActionsPanel(componentId, model);37 }33 final VirtualCollectionTable table 34 = new VirtualCollectionTable("collectionsTable", false) { 35 @Override 36 protected Panel createActionColumn(String componentId, 37 IModel<VirtualCollection> model) { 38 return new ActionsPanel(componentId, model); 39 } 38 40 39 @Override40 protected Panel createActionPanel(String componentId,41 IModel<VirtualCollection> model) {42 return new ActionsPanel(componentId, model);43 }44 };41 @Override 42 protected Panel createActionPanel(String componentId, 43 IModel<VirtualCollection> model) { 44 return new ActionsPanel(componentId, model); 45 } 46 }; 45 47 add(table); 46 48 } 47 49 48 private void doDetails(AjaxRequestTarget target, 49 IModel<VirtualCollection> vc) { 50 setResponsePage(new VirtualCollectionDetailsPage(vc, getPage())); 50 private void doDetails(AjaxRequestTarget target, IModel<VirtualCollection> vc) { 51 setResponsePage(VirtualCollectionDetailsPage.class, VirtualCollectionDetailsPage.createPageParameters(vc.getObject(), getPageReference())); 51 52 } 52 53 -
VirtualCollectionRegistry/trunk/VirtualCollectionRegistry/src/main/java/eu/clarin/cmdi/virtualcollectionregistry/gui/pages/VirtualCollectionDetailsPage.java
r5440 r5475 1 1 package eu.clarin.cmdi.virtualcollectionregistry.gui.pages; 2 2 3 import eu.clarin.cmdi.virtualcollectionregistry.gui.Application; 3 4 import eu.clarin.cmdi.virtualcollectionregistry.gui.DateConverter; 5 import eu.clarin.cmdi.virtualcollectionregistry.gui.DetachableVirtualCollectionModel; 4 6 import eu.clarin.cmdi.virtualcollectionregistry.gui.VolatileEntityModel; 7 import eu.clarin.cmdi.virtualcollectionregistry.gui.border.AjaxToggleBorder; 8 import eu.clarin.cmdi.virtualcollectionregistry.model.Creator; 9 import eu.clarin.cmdi.virtualcollectionregistry.model.Resource; 10 import eu.clarin.cmdi.virtualcollectionregistry.model.VirtualCollection; 11 import eu.clarin.cmdi.virtualcollectionregistry.model.VirtualCollection.Type; 5 12 import java.sql.Date; 6 13 import java.util.Collection; … … 9 16 import java.util.List; 10 17 import java.util.Locale; 11 12 import org.apache.wicket.Application;13 18 import org.apache.wicket.Component; 19 import org.apache.wicket.IPageMap; 14 20 import org.apache.wicket.Page; 21 import org.apache.wicket.PageParameters; 22 import org.apache.wicket.PageReference; 23 import org.apache.wicket.Session; 24 import org.apache.wicket.authorization.Action; 25 import org.apache.wicket.authorization.AuthorizationException; 26 import org.apache.wicket.authorization.UnauthorizedActionException; 15 27 import org.apache.wicket.behavior.AbstractBehavior; 16 28 import org.apache.wicket.extensions.ajax.markup.html.repeater.data.table.AjaxFallbackDefaultDataTable; … … 38 50 import org.apache.wicket.util.string.Strings; 39 51 40 import eu.clarin.cmdi.virtualcollectionregistry.gui.border.AjaxToggleBorder;41 import eu.clarin.cmdi.virtualcollectionregistry.model.Creator;42 import eu.clarin.cmdi.virtualcollectionregistry.model.Resource;43 import eu.clarin.cmdi.virtualcollectionregistry.model.VirtualCollection;44 import eu.clarin.cmdi.virtualcollectionregistry.model.VirtualCollection.Type;45 46 47 52 @SuppressWarnings("serial") 48 53 public class VirtualCollectionDetailsPage extends BasePage { 54 55 public static final String PARAM_VC_ID = "id"; 56 public static final String PARAM_BACK_PAGE_ID = "backPage"; 57 public static final String PARAM_BACK_PAGE_VERSION = "backPageVersion"; 58 public static final String PARAM_BACK_PAGE_PAGEMAP_NAME = "backPageMapName"; 59 49 60 private static final IConverter convEnum = new IConverter() { 50 61 @Override 51 62 public String convertToString(Object o, Locale locale) { 52 63 final Enum<?> enumObj = (Enum<?>) o; 53 final String key =54 enumObj.getDeclaringClass().getSimpleName() + "." +55 enumObj.name();64 final String key 65 = enumObj.getDeclaringClass().getSimpleName() + "." 66 + enumObj.name(); 56 67 final String value = Application.get().getResourceSettings() 57 68 .getLocalizer().getString(key, null); … … 75 86 */ 76 87 private static final class HideIfEmptyBehavior extends AbstractBehavior { 88 77 89 private final List<Component> components = new LinkedList<Component>(); 78 90 … … 85 97 public void hideEmptyComponents() { 86 98 for (Component component : components) { 87 Object obj = component.getDefaultModelObject();88 if (obj == null) {89 component.setVisible(false);90 } else {91 if (obj instanceof Collection<?>) {92 if (((Collection<?>) obj).isEmpty()) {93 component.setVisible(false);94 }95 }96 }99 Object obj = component.getDefaultModelObject(); 100 if (obj == null) { 101 component.setVisible(false); 102 } else { 103 if (obj instanceof Collection<?>) { 104 if (((Collection<?>) obj).isEmpty()) { 105 component.setVisible(false); 106 } 107 } 108 } 97 109 } 98 110 } … … 113 125 @Override 114 126 public IConverter getConverter(Class<?> type) { 115 if (VirtualCollection.Type.class.isAssignableFrom(type) ||116 VirtualCollection.Purpose.class.isAssignableFrom(type) ||117 VirtualCollection.Reproducibility.class.isAssignableFrom(type)) {127 if (VirtualCollection.Type.class.isAssignableFrom(type) 128 || VirtualCollection.Purpose.class.isAssignableFrom(type) 129 || VirtualCollection.Reproducibility.class.isAssignableFrom(type)) { 118 130 return convEnum; 119 131 } … … 125 137 } // class VirtualCollectionDetailsPage.TypeLabel 126 138 127 128 139 private final HideIfEmptyBehavior hideIfEmpty = new HideIfEmptyBehavior(); 129 140 130 131 public VirtualCollectionDetailsPage(final IModel<VirtualCollection> model, 132 final Page previousPage) { 141 public VirtualCollectionDetailsPage(PageParameters params) { 142 this(getVirtualCollectionModel(params), getPageReference(params)); 143 } 144 145 public VirtualCollectionDetailsPage(final IModel<VirtualCollection> model, final PageReference previousPage) { 133 146 super(new CompoundPropertyModel<VirtualCollection>(model)); 134 if (previousPage == null) { 135 throw new IllegalArgumentException("previousPage == null"); 136 } 147 if (model == null) { 148 setResponsePage(Application.get().getHomePage()); 149 } else { 150 checkAccess(model.getObject()); 151 } 152 137 153 final Link<Void> backLink = new Link<Void>("back") { 138 154 @Override 139 155 public void onClick() { 140 setResponsePage(previousPage); 156 if (previousPage == null) { 157 setResponsePage(getApplication().getHomePage()); 158 } else { 159 setResponsePage(previousPage.getPage()); 160 } 141 161 } 142 162 }; … … 173 193 item.add(new Label("email").add(hideIfEmpty)); 174 194 item.add(new Label("telephone").add(hideIfEmpty)); 175 final IModel<String> siteModel =176 new ComponentPropertyModel<String>("website");195 final IModel<String> siteModel 196 = new ComponentPropertyModel<String>("website"); 177 197 item.add(new ExternalLink("website", siteModel, siteModel) 178 198 .setPopupSettings(new PopupSettings()) … … 191 211 @Override 192 212 protected ListItem<Creator> newItem(int index) { 193 final IModel<Creator> model =194 getListItemModel(getModel(), index);213 final IModel<Creator> model 214 = getListItemModel(getModel(), index); 195 215 return new OddEvenListItem<Creator>(index, model) { 196 216 @Override … … 213 233 cols[0] = new PropertyColumn<Resource>( 214 234 new Model<String>("Type"), "type") { 215 @Override216 public void populateItem(Item<ICellPopulator<Resource>> item,217 String componentId, IModel<Resource> model) {218 final Resource.Type type = model.getObject().getType();219 item.add(new Label(componentId,220 convEnum.convertToString(type, getLocale())));221 }222 };235 @Override 236 public void populateItem(Item<ICellPopulator<Resource>> item, 237 String componentId, IModel<Resource> model) { 238 final Resource.Type type = model.getObject().getType(); 239 item.add(new Label(componentId, 240 convEnum.convertToString(type, getLocale()))); 241 } 242 }; 223 243 cols[1] = new PropertyColumn<Resource>( 224 244 new Model<String>("Reference"), "ref"); 225 245 226 246 @SuppressWarnings("unchecked") 227 final DataTable<Resource> resourcesTable =228 new AjaxFallbackDefaultDataTable<Resource>("resourcesTable",229 cols,230 new SortableDataProvider<Resource>() {231 @Override232 public Iterator<? extends Resource>247 final DataTable<Resource> resourcesTable 248 = new AjaxFallbackDefaultDataTable<Resource>("resourcesTable", 249 cols, 250 new SortableDataProvider<Resource>() { 251 @Override 252 public Iterator<? extends Resource> 233 253 iterator(int first, int count) { 234 return model.getObject().getResources().listIterator(first);235 }236 237 @Override238 public IModel<Resource> model(Resource resource) {239 return new VolatileEntityModel<Resource>(resource);240 }241 242 @Override243 public int size() {244 return model.getObject().getResources().size();245 }246 },247 64);254 return model.getObject().getResources().listIterator(first); 255 } 256 257 @Override 258 public IModel<Resource> model(Resource resource) { 259 return new VolatileEntityModel<Resource>(resource); 260 } 261 262 @Override 263 public int size() { 264 return model.getObject().getResources().size(); 265 } 266 }, 267 64); 248 268 resources.add(resourcesTable); 249 269 resources.setVisible(model.getObject().getType() == Type.EXTENSIONAL); … … 259 279 } 260 280 281 private static IModel<VirtualCollection> getVirtualCollectionModel(PageParameters params) { 282 final Long collectionId = params.getAsLong(PARAM_VC_ID); 283 if (collectionId == null) { 284 Session.get().error("Collection could not be retrieved, id not provided"); 285 return null; 286 } 287 return new DetachableVirtualCollectionModel(collectionId); 288 } 289 290 private static PageReference getPageReference(PageParameters params) { 291 final Integer pageId = params.getAsInteger(PARAM_BACK_PAGE_ID); 292 final Integer pageVersion = params.getAsInteger(PARAM_BACK_PAGE_VERSION); 293 final String pageMap = params.getString(PARAM_BACK_PAGE_PAGEMAP_NAME); 294 if (pageId != null && pageVersion != null) { 295 for (IPageMap map : Session.get().getPageMaps()) { 296 if (pageMap == null && map.getName() == null || pageMap != null && pageMap.equals(map.getName())) { 297 final Page page = map.get(pageId, pageVersion); 298 if (page != null) { 299 return page.getPageReference(); 300 } 301 } 302 } 303 } 304 return null; 305 } 306 307 public static PageParameters createPageParameters(VirtualCollection vc, PageReference pageReference) { 308 final PageParameters params = new PageParameters(); 309 params.put(VirtualCollectionDetailsPage.PARAM_VC_ID, vc.getId()); 310 311 if (pageReference != null) { 312 params.put(VirtualCollectionDetailsPage.PARAM_BACK_PAGE_ID, pageReference.getPageNumber()); 313 params.put(VirtualCollectionDetailsPage.PARAM_BACK_PAGE_VERSION, pageReference.getPageVersion()); 314 if (pageReference.getPageMapName() != null) { 315 params.put(VirtualCollectionDetailsPage.PARAM_BACK_PAGE_PAGEMAP_NAME, pageReference.getPageMapName()); 316 } 317 } 318 return params; 319 } 320 321 /** 322 * 323 * @param vc collection to check for 324 * @throws UnauthorizedActionException if the VC is private and the current 325 * user is not the owner 326 */ 327 private void checkAccess(final VirtualCollection vc) throws UnauthorizedActionException { 328 if (vc.isPrivate() 329 && !getSession().isCurrentUser(vc.getOwner())) { 330 // user trying to access other user's collection 331 throw new UnauthorizedActionException(this, Component.RENDER); 332 } 333 } 334 261 335 @Override 262 336 protected void onBeforeRender() {
Note: See TracChangeset
for help on using the changeset viewer.