Changeset 6347
- Timestamp:
- 07/06/15 07:03:24 (9 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
vlo/trunk/vlo-web-app/src/main/java/eu/clarin/cmdi/vlo/wicket/panels/record/HierarchyPanel.java
r6346 r6347 18 18 19 19 import com.google.common.base.Function; 20 import com.google.common.collect.ImmutableList;21 20 import com.google.common.collect.Iterators; 22 21 import eu.clarin.cmdi.vlo.FacetConstants; … … 27 26 import java.util.Collections; 28 27 import java.util.Iterator; 29 import java.util.List;30 28 import org.apache.solr.common.SolrDocument; 31 29 import org.apache.wicket.Component; … … 39 37 import org.apache.wicket.markup.html.basic.Label; 40 38 import org.apache.wicket.markup.html.link.Link; 41 import org.apache.wicket.markup.html.list.ListItem;42 import org.apache.wicket.markup.html.list.PageableListView;43 39 import org.apache.wicket.markup.html.panel.GenericPanel; 40 import org.apache.wicket.markup.repeater.Item; 41 import org.apache.wicket.markup.repeater.data.DataView; 42 import org.apache.wicket.markup.repeater.data.IDataProvider; 44 43 import org.apache.wicket.model.AbstractReadOnlyModel; 45 44 import org.apache.wicket.model.IModel; 46 import org.apache.wicket.model.LoadableDetachableModel;47 45 import org.apache.wicket.model.PropertyModel; 48 46 import org.apache.wicket.spring.injection.annot.SpringBean; … … 58 56 */ 59 57 public static final int INITIAL_PARENTS_SHOWN = 5; 60 58 61 59 @SpringBean 62 60 private SolrDocumentService documentService; 63 61 64 private final IModel<List<SolrDocument>> parentsModel; 62 // private final IModel<List<SolrDocument>> parentsModel; 63 private final IDataProvider<SolrDocument> parentsProvider; 65 64 66 65 public HierarchyPanel(String id, IModel<SolrDocument> documentModel) { … … 68 67 69 68 // create a list model for the parents 70 parentsModel = createParentsModel(); 69 // parentsModel = createParentsModel(); 70 parentsProvider = createParentsProvider(); 71 71 72 72 add(createParentLinks("parents")); … … 76 76 /** 77 77 * 78 * @return a model that provides a list of the parent documents, model 79 * object never null but can be empty 78 * @return a provider for the parent documents 80 79 */ 81 private IModel<List<SolrDocument>> createParentsModel() { 82 // model that 'loads' (i.e. extracts ids and retrieves the matching 83 // Solr documents) the parents only once 84 return new LoadableDetachableModel<List<SolrDocument>>() { 85 86 @Override 87 protected List<SolrDocument> load() { 88 // get parent IDs 89 final Collection<Object> parentIds = getModel().getObject().getFieldValues(FacetConstants.FIELD_IS_PART_OF); 80 private IDataProvider<SolrDocument> createParentsProvider() { 81 return new IDataProvider<SolrDocument>() { 82 83 private Long size = null; 84 85 @Override 86 public Iterator<? extends SolrDocument> iterator(long first, long count) { 87 final Collection<Object> parentIds = HierarchyPanel.this.getModelObject().getFieldValues(FacetConstants.FIELD_IS_PART_OF); 90 88 if (parentIds == null) { 91 89 // no parents, so provide empty list of documents 92 return Collections.empty List();90 return Collections.emptyIterator(); 93 91 } else { 94 92 // parents found, convert ID collection into documents list 95 final Iterator<SolrDocument> documentsIterator =Iterators.transform(parentIds.iterator(), new Function<Object, SolrDocument>() {93 return Iterators.transform(parentIds.iterator(), new Function<Object, SolrDocument>() { 96 94 97 95 @Override … … 100 98 } 101 99 }); 102 // creation of list will trigger conversion on the fly 103 return ImmutableList.copyOf(documentsIterator); 104 } 105 } 100 } 101 } 102 103 @Override 104 public long size() { 105 if (size == null) { 106 final Collection<Object> fieldValues = HierarchyPanel.this.getModelObject().getFieldValues(FacetConstants.FIELD_IS_PART_OF); 107 if (fieldValues == null) { 108 size = 0L; 109 } else { 110 size = Long.valueOf(fieldValues.size()); 111 } 112 } 113 return size; 114 } 115 116 @Override 117 public IModel<SolrDocument> model(SolrDocument object) { 118 return new SolrDocumentModel(object); 119 } 120 121 @Override 122 public void detach() { 123 size = null; 124 } 125 106 126 }; 107 127 } … … 112 132 final WebMarkupContainer container = new WebMarkupContainer(id); 113 133 114 // actual list of parents (paged) 115 final PageableListView<SolrDocument> parentsView = new PageableListView<SolrDocument>("parentsList", parentsModel, INITIAL_PARENTS_SHOWN) { 116 117 @Override 118 protected void populateItem(ListItem<SolrDocument> item) { 134 final DataView<SolrDocument> parentsView = new DataView<SolrDocument>("parentsList", parentsProvider, INITIAL_PARENTS_SHOWN) { 135 136 @Override 137 protected void populateItem(Item<SolrDocument> item) { 119 138 item.add(new NamedRecordPageLink("link", item.getModel())); 120 139 } … … 122 141 @Override 123 142 protected void onConfigure() { 124 setVisible( !parentsModel.getObject().isEmpty());143 setVisible(parentsProvider.size() > 0); 125 144 } 126 145 }; … … 131 150 @Override 132 151 public void onClick(AjaxRequestTarget target) { 133 parentsView.setItemsPerPage(parents Model.getObject().size());152 parentsView.setItemsPerPage(parentsProvider.size()); 134 153 if (target != null) { 135 154 target.add(container); … … 142 161 } 143 162 }; 144 showAllLink.add(new Label("itemCount", new PropertyModel<Integer>(parents Model, "size")));163 showAllLink.add(new Label("itemCount", new PropertyModel<Integer>(parentsProvider, "size"))); 145 164 146 165 return container … … 169 188 @Override 170 189 public String getObject() { 171 if ( !parentsModel.getObject().isEmpty()) {190 if (parentsProvider.size() > 0) { 172 191 return "has-parent"; 173 192 } else { … … 216 235 public void detachModels() { 217 236 super.detachModels(); 218 parentsModel.detach();219 237 } 220 238
Note: See TracChangeset
for help on using the changeset viewer.