Changeset 6327


Ignore:
Timestamp:
06/30/15 07:04:38 (9 years ago)
Author:
Twan Goosen
Message:

md hierarchy in tree

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  
    2525        <wicket:panel>
    2626            <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
    4132        </wicket:panel>
    4233    </body>
  • vlo/trunk/vlo-web-app/src/main/java/eu/clarin/cmdi/vlo/wicket/panels/record/HierarchyPanel.java

    r6307 r6327  
    1717package eu.clarin.cmdi.vlo.wicket.panels.record;
    1818
     19import com.google.common.base.Function;
     20import com.google.common.collect.Iterators;
    1921import eu.clarin.cmdi.vlo.FacetConstants;
    2022import eu.clarin.cmdi.vlo.service.PageParametersConverter;
     23import eu.clarin.cmdi.vlo.service.solr.SolrDocumentService;
    2124import eu.clarin.cmdi.vlo.wicket.components.SolrFieldLabel;
    22 import eu.clarin.cmdi.vlo.wicket.model.CollectionListModel;
    2325import eu.clarin.cmdi.vlo.wicket.model.SolrDocumentModel;
    24 import eu.clarin.cmdi.vlo.wicket.model.SolrFieldModel;
    2526import eu.clarin.cmdi.vlo.wicket.model.SolrFieldStringModel;
    2627import eu.clarin.cmdi.vlo.wicket.pages.RecordPage;
    2728import java.util.Collection;
     29import java.util.Iterator;
    2830import org.apache.solr.common.SolrDocument;
    2931import org.apache.wicket.Component;
    3032import org.apache.wicket.MarkupContainer;
     33import org.apache.wicket.extensions.markup.html.repeater.tree.AbstractTree;
     34import org.apache.wicket.extensions.markup.html.repeater.tree.DefaultNestedTree;
     35import org.apache.wicket.extensions.markup.html.repeater.tree.ITreeProvider;
     36import org.apache.wicket.extensions.markup.html.repeater.util.SortableTreeProvider;
    3137import org.apache.wicket.markup.html.WebMarkupContainer;
    3238import org.apache.wicket.markup.html.basic.Label;
    3339import 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;
    3640import org.apache.wicket.markup.html.panel.GenericPanel;
    3741import org.apache.wicket.model.IModel;
     
    4549public class HierarchyPanel extends GenericPanel<SolrDocument> {
    4650
     51    @SpringBean
     52    private SolrDocumentService documentService;
     53
    4754    @SpringBean(name = "documentParamsConverter")
    4855    private PageParametersConverter<SolrDocument> documentParamConverter;
     
    5259
    5360        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"));
    5662    }
    5763
     
    7581        parentLink.add(new SolrFieldLabel("name", parentModel, FacetConstants.FIELD_NAME, new StringResourceModel("recordpage.unnamedrecord", this, null)));
    7682
    77         final WebMarkupContainer noParentLabel = new WebMarkupContainer("noparent") {
    78 
     83        final MarkupContainer parent = new WebMarkupContainer(id){
     84           
    7985            @Override
    8086            protected void onConfigure() {
    8187                setVisible(parentModel.getObject() == null);
    8288            }
    83 
    8489        };
    85 
    86         final MarkupContainer parent = new WebMarkupContainer(id);
    8790        parent.add(parentLink);
    88         parent.add(noParentLabel);
    8991
    9092        return parent;
    9193    }
    9294
    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()) {
    9797
    9898            @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>() {
    102124
    103125                    @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);
    106129                    }
    107                 };
    108                 childLink.add(new SolrFieldLabel("name", childModel, FacetConstants.FIELD_NAME, new StringResourceModel("recordpage.unnamedrecord", this, null)));
     130                });
     131            }
    109132
    110                 item.add(childLink);
     133            @Override
     134            public IModel<SolrDocument> model(SolrDocument object) {
     135                return new SolrDocumentModel(object);
    111136            }
    112137        };
Note: See TracChangeset for help on using the changeset viewer.