Changeset 6327
- Timestamp:
- 06/30/15 07:04:38 (9 years ago)
- Location:
- vlo/trunk/vlo-web-app/src/main/java/eu/clarin/cmdi/vlo/wicket/panels/record
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
vlo/trunk/vlo-web-app/src/main/java/eu/clarin/cmdi/vlo/wicket/panels/record/HierarchyPanel.html
r6307 r6327 25 25 <wicket:panel> 26 26 <h2>Hierarchy (test)</h2> 27 <ul id="recordtree"> 28 <li> 29 <div wicket:id="parent"> 30 <a wicket:id="link"><span wicket:id="name"></span></a> 31 <span wicket:id="noparent">-</span> 32 </div> 33 <ul> 34 <li id="thisrecord"><span wicket:id="this">this item</span></li> 35 <ul> 36 <li wicket:id="child"><a wicket:id="link"><span wicket:id="name"></span></a></li> 37 </ul> 38 </ul> 39 </li> 40 </ul> 27 <div wicket:id="parent"> 28 <a wicket:id="link"><span wicket:id="name"></span></a> 29 </div> 30 <div wicket:id="tree">[TREE]</div> 31 41 32 </wicket:panel> 42 33 </body> -
vlo/trunk/vlo-web-app/src/main/java/eu/clarin/cmdi/vlo/wicket/panels/record/HierarchyPanel.java
r6307 r6327 17 17 package eu.clarin.cmdi.vlo.wicket.panels.record; 18 18 19 import com.google.common.base.Function; 20 import com.google.common.collect.Iterators; 19 21 import eu.clarin.cmdi.vlo.FacetConstants; 20 22 import eu.clarin.cmdi.vlo.service.PageParametersConverter; 23 import eu.clarin.cmdi.vlo.service.solr.SolrDocumentService; 21 24 import eu.clarin.cmdi.vlo.wicket.components.SolrFieldLabel; 22 import eu.clarin.cmdi.vlo.wicket.model.CollectionListModel;23 25 import eu.clarin.cmdi.vlo.wicket.model.SolrDocumentModel; 24 import eu.clarin.cmdi.vlo.wicket.model.SolrFieldModel;25 26 import eu.clarin.cmdi.vlo.wicket.model.SolrFieldStringModel; 26 27 import eu.clarin.cmdi.vlo.wicket.pages.RecordPage; 27 28 import java.util.Collection; 29 import java.util.Iterator; 28 30 import org.apache.solr.common.SolrDocument; 29 31 import org.apache.wicket.Component; 30 32 import org.apache.wicket.MarkupContainer; 33 import org.apache.wicket.extensions.markup.html.repeater.tree.AbstractTree; 34 import org.apache.wicket.extensions.markup.html.repeater.tree.DefaultNestedTree; 35 import org.apache.wicket.extensions.markup.html.repeater.tree.ITreeProvider; 36 import org.apache.wicket.extensions.markup.html.repeater.util.SortableTreeProvider; 31 37 import org.apache.wicket.markup.html.WebMarkupContainer; 32 38 import org.apache.wicket.markup.html.basic.Label; 33 39 import org.apache.wicket.markup.html.link.Link; 34 import org.apache.wicket.markup.html.list.ListItem;35 import org.apache.wicket.markup.html.list.ListView;36 40 import org.apache.wicket.markup.html.panel.GenericPanel; 37 41 import org.apache.wicket.model.IModel; … … 45 49 public class HierarchyPanel extends GenericPanel<SolrDocument> { 46 50 51 @SpringBean 52 private SolrDocumentService documentService; 53 47 54 @SpringBean(name = "documentParamsConverter") 48 55 private PageParametersConverter<SolrDocument> documentParamConverter; … … 52 59 53 60 add(createParentLink("parent")); 54 add(new SolrFieldLabel("this", documentModel, FacetConstants.FIELD_NAME, new StringResourceModel("recordpage.unnamedrecord", this, null))); 55 add(createChildrenLinks("child")); 61 add(createTree("tree")); 56 62 } 57 63 … … 75 81 parentLink.add(new SolrFieldLabel("name", parentModel, FacetConstants.FIELD_NAME, new StringResourceModel("recordpage.unnamedrecord", this, null))); 76 82 77 final WebMarkupContainer noParentLabel = new WebMarkupContainer("noparent"){78 83 final MarkupContainer parent = new WebMarkupContainer(id){ 84 79 85 @Override 80 86 protected void onConfigure() { 81 87 setVisible(parentModel.getObject() == null); 82 88 } 83 84 89 }; 85 86 final MarkupContainer parent = new WebMarkupContainer(id);87 90 parent.add(parentLink); 88 parent.add(noParentLabel);89 91 90 92 return parent; 91 93 } 92 94 93 private Component createChildrenLinks(String id) { 94 final IModel<Collection<String>> partIdsModel = new SolrFieldModel<>(getModel(), FacetConstants.FIELD_HAS_PART); 95 //TODO: page or limit (collections can be huge!) 96 return new ListView<String>(id, CollectionListModel.of(partIdsModel)) { 95 private AbstractTree createTree(String id) { 96 return new DefaultNestedTree<SolrDocument>(id, createProvider()) { 97 97 98 98 @Override 99 protected void populateItem(ListItem<String> item) { 100 final SolrDocumentModel childModel = new SolrDocumentModel(item.getModel()); 101 final Link childLink = new Link("link") { 99 protected Component newContentComponent(String id, IModel<SolrDocument> node) { 100 return new Label(id, new SolrFieldStringModel(node, FacetConstants.FIELD_NAME)); 101 } 102 103 }; 104 } 105 106 private ITreeProvider createProvider() { 107 return new SortableTreeProvider<SolrDocument, Object>() { 108 109 @Override 110 public Iterator<? extends SolrDocument> getRoots() { 111 return Iterators.singletonIterator(HierarchyPanel.this.getModel().getObject()); 112 } 113 114 @Override 115 public boolean hasChildren(SolrDocument node) { 116 Object partCount = node.getFieldValue(FacetConstants.FIELD_HAS_PART_COUNT); 117 return (partCount instanceof Number) && ((Number) partCount).intValue() > 0; 118 } 119 120 @Override 121 public Iterator<? extends SolrDocument> getChildren(SolrDocument node) { 122 final Collection<Object> parts = node.getFieldValues(FacetConstants.FIELD_HAS_PART); 123 return Iterators.transform(parts.iterator(), new Function<Object, SolrDocument>() { 102 124 103 125 @Override 104 public void onClick() { 105 setResponsePage(RecordPage.class, documentParamConverter.toParameters(childModel.getObject())); 126 public SolrDocument apply(Object input) { 127 String childId = input.toString(); 128 return documentService.getDocument(childId); 106 129 } 107 } ;108 childLink.add(new SolrFieldLabel("name", childModel, FacetConstants.FIELD_NAME, new StringResourceModel("recordpage.unnamedrecord", this, null)));130 }); 131 } 109 132 110 item.add(childLink); 133 @Override 134 public IModel<SolrDocument> model(SolrDocument object) { 135 return new SolrDocumentModel(object); 111 136 } 112 137 };
Note: See TracChangeset
for help on using the changeset viewer.