Changeset 6755
- Timestamp:
- 11/09/15 13:36:42 (9 years ago)
- Location:
- vlo/branches/vlo-3.3-oeaw/vlo-web-app
- Files:
-
- 1 deleted
- 39 edited
- 6 copied
Legend:
- Unmodified
- Added
- Removed
-
vlo/branches/vlo-3.3-oeaw/vlo-web-app/pom.xml
r6471 r6755 7 7 <groupId>eu.clarin.cmdi</groupId> 8 8 <artifactId>vlo</artifactId> 9 <version>3. 3-SNAPSHOT</version>9 <version>3.4-SNAPSHOT</version> 10 10 </parent> 11 11 … … 14 14 <artifactId>vlo-web-app</artifactId> 15 15 <packaging>war</packaging> 16 <version>3. 3-SNAPSHOT</version>16 <version>3.4-SNAPSHOT</version> 17 17 <name>VLO Web Application</name> 18 18 <description></description> 19 19 20 20 <properties> 21 <wicket.version> 6.19.0</wicket.version>22 <spring.version> 3.2.13.RELEASE</spring.version>21 <wicket.version>7.0.0</wicket.version> 22 <spring.version>4.2.0.RELEASE</spring.version> 23 23 <jetty.version>8.1.17.v20150415</jetty.version> 24 24 <!-- selects the appender for the log4j root logger --> -
vlo/branches/vlo-3.3-oeaw/vlo-web-app/src/main/java/eu/clarin/cmdi/vlo/JavaScriptResources.java
r6350 r6755 21 21 import org.apache.wicket.request.resource.CssResourceReference; 22 22 import org.apache.wicket.request.resource.JavaScriptResourceReference; 23 import org.apache.wicket.request.resource.ResourceReference; 23 24 24 25 /** … … 32 33 private final static JavaScriptResourceReference VLO_SYNTAX_HELP = new JavaScriptResourceReference(VloBasePage.class, "vlo-syntax-help.js"); 33 34 private final static JavaScriptResourceReference VLO_FACETS = new JavaScriptResourceReference(VloBasePage.class, "vlo-facets.js"); 35 private final static JavaScriptResourceReference SEARCH_FORM = new JavaScriptResourceReference(VloBasePage.class, "vlo-searchform.js"); 36 private final static JavaScriptResourceReference FIELDS_TABLE = new JavaScriptResourceReference(RecordPage.class, "vlo-fields-table.js"); 34 37 private final static JavaScriptResourceReference JQUERY_UI = new JavaScriptResourceReference(VloBasePage.class, "jquery-ui-1.11.4.custom/jquery-ui.min.js"); 35 38 private final static CssResourceReference JQUERY_UI_CSS = new CssResourceReference(VloBasePage.class, "jquery-ui-1.11.4.custom/jquery-ui.min.css"); 36 39 private final static JavaScriptResourceReference JQUERY_WATERMARK = new JavaScriptResourceReference(VloBasePage.class, "jquery.watermark-3.1.4/jquery.watermark.min.js"); 37 private final static JavaScriptResourceReference HIGHLIGHT = new JavaScriptResourceReference(RecordPage.class, " searchhi.js");40 private final static JavaScriptResourceReference HIGHLIGHT = new JavaScriptResourceReference(RecordPage.class, "jquery.highlight.js"); 38 41 39 42 public static JavaScriptResourceReference getVloFrontJS() { … … 66 69 return VLO_SYNTAX_HELP; 67 70 } 71 72 public static JavaScriptResourceReference getSearchFormJS() { 73 return SEARCH_FORM; 74 } 68 75 76 public static ResourceReference getFieldsTableJS() { 77 return FIELDS_TABLE; 78 } 79 69 80 } -
vlo/branches/vlo-3.3-oeaw/vlo-web-app/src/main/java/eu/clarin/cmdi/vlo/service/solr/impl/AbstractSolrQueryFactory.java
r6486 r6755 32 32 public abstract class AbstractSolrQueryFactory { 33 33 34 protected static final String SOLR_SEARCH_ALL = null;34 protected static final String SOLR_SEARCH_ALL = "*:*"; 35 35 36 36 protected final void addQueryFacetParameters(final SolrQuery query, QueryFacetsSelection queryFacetsSelections, boolean includeFilterQueries) { -
vlo/branches/vlo-3.3-oeaw/vlo-web-app/src/main/java/eu/clarin/cmdi/vlo/service/solr/impl/SolrDaoImpl.java
r4950 r6755 11 11 import org.apache.solr.common.SolrDocument; 12 12 import org.apache.solr.common.SolrDocumentList; 13 import org.apache.solr.common.SolrException; 13 14 import org.slf4j.Logger; 14 15 import org.slf4j.LoggerFactory; … … 83 84 logger.trace("Response: {}", response); 84 85 return response; 86 } catch(SolrException e) { 87 logger.error("Error getting data:", e); 88 throw new RuntimeException(e); 85 89 } catch (SolrServerException e) { 86 90 logger.error("Error getting data:", e); -
vlo/branches/vlo-3.3-oeaw/vlo-web-app/src/main/java/eu/clarin/cmdi/vlo/service/solr/impl/SolrDocumentQueryFactoryImpl.java
r6456 r6755 62 62 // make a query to look up a specific document by its ID 63 63 final SolrQuery query = getDefaultDocumentQuery(); 64 // we can use the 'fast' request handler here, document ranking is of no interest 65 query.setRequestHandler(FacetConstants.SOLR_REQUEST_HANDLER_FAST); 64 66 // consider all documents 65 67 query.setQuery(SOLR_SEARCH_ALL); … … 73 75 .build(); 74 76 query.addFilterQuery(createFilterOrQuery(idOrQueryMap)); 75 77 76 78 // one result max 77 79 query.setRows(1); -
vlo/branches/vlo-3.3-oeaw/vlo-web-app/src/main/java/eu/clarin/cmdi/vlo/service/solr/impl/SolrFacetQueryFactoryImpl.java
r6494 r6755 17 17 package eu.clarin.cmdi.vlo.service.solr.impl; 18 18 19 import eu.clarin.cmdi.vlo.FacetConstants; 19 20 import eu.clarin.cmdi.vlo.service.solr.SolrFacetQueryFactory; 20 21 import eu.clarin.cmdi.vlo.pojo.QueryFacetsSelection; -
vlo/branches/vlo-3.3-oeaw/vlo-web-app/src/main/java/eu/clarin/cmdi/vlo/wicket/HighlightSearchTermBehavior.java
r5161 r6755 23 23 import org.apache.wicket.markup.head.JavaScriptHeaderItem; 24 24 import org.apache.wicket.markup.head.OnDomReadyHeaderItem; 25 import org.apache.wicket.request.Request; 26 import org.apache.wicket.util.string.StringValue; 27 import org.apache.wicket.util.string.Strings; 25 28 26 29 /** … … 33 36 public class HighlightSearchTermBehavior extends Behavior { 34 37 35 private static final String HIGHLIGHT_FUNCTION = "searchhi.init()";38 private final HighlightSearchTermScriptFactory scriptFactory = new HighlightSearchTermScriptFactory(); 36 39 37 40 @Override … … 39 42 // include highlight script 40 43 response.render(JavaScriptHeaderItem.forReference(JavaScriptResources.getHighlightJS())); 41 // after load, highlight 42 response.render(OnDomReadyHeaderItem.forScript(HIGHLIGHT_FUNCTION)); 44 45 final String words = getWordList(component); 46 if (!Strings.isEmpty(words)) { 47 String selector = getComponentSelector(component.getMarkupId()); 48 // after load, highlight 49 response.render(OnDomReadyHeaderItem.forScript(scriptFactory.createScript(selector, words))); 50 } 51 } 52 53 protected String getComponentSelector(String componentId) { 54 return "#" + componentId; 55 } 56 57 protected String getWordList(Component component) { 58 Request request = component.getPage().getRequestCycle().getRequest(); 59 return request.getQueryParameters().getParameterValue(getQueryParam()).toString(); 60 } 61 62 protected String getQueryParam() { 63 return "q"; 43 64 } 44 65 -
vlo/branches/vlo-3.3-oeaw/vlo-web-app/src/main/java/eu/clarin/cmdi/vlo/wicket/ResourceTypeCssBehaviour.java
r4881 r6755 19 19 import eu.clarin.cmdi.vlo.pojo.ResourceInfo; 20 20 import org.apache.wicket.behavior.AttributeAppender; 21 import org.apache.wicket.migrate.StringResourceModelMigration; 21 22 import org.apache.wicket.model.IModel; 22 import org.apache.wicket.model.StringResourceModel;23 23 24 24 /** … … 35 35 // to one of the properties in resourceTypeClass.properties file 36 36 // (defaults to "") 37 new StringResourceModel("resourcetype.${resourceType}.class", resourceInfoModel, "", new Object[0]));37 StringResourceModelMigration.of("resourcetype.${resourceType}.class", resourceInfoModel, "", new Object[0])); 38 38 // separate CSS classes with a space 39 39 setSeparator(" "); -
vlo/branches/vlo-3.3-oeaw/vlo-web-app/src/main/java/eu/clarin/cmdi/vlo/wicket/model/SolrDocumentModel.java
r6350 r6755 39 39 public SolrDocumentModel(SolrDocument document) { 40 40 super(document); 41 this.docId = Model.of((String) document.getFieldValue(FacetConstants.FIELD_ID)); 41 if (document == null) { 42 this.docId = null; 43 } else { 44 this.docId = Model.of((String) document.getFieldValue(FacetConstants.FIELD_ID)); 45 } 42 46 } 43 47 -
vlo/branches/vlo-3.3-oeaw/vlo-web-app/src/main/java/eu/clarin/cmdi/vlo/wicket/model/SolrFieldNameModel.java
r6206 r6755 20 20 import org.apache.wicket.Application; 21 21 import org.apache.wicket.model.IModel; 22 import org.apache.wicket.model.Model; 22 23 import org.apache.wicket.model.PropertyModel; 23 24 import org.apache.wicket.model.StringResourceModel; 24 import org.apache.wicket.settings.def.ResourceSettings;25 25 26 26 /** … … 41 41 42 42 public SolrFieldNameModel(IModel<String> model) { 43 super("field.${}", 44 model, 45 model.getObject()); // default to internal field name) 43 super("field.${}", model); 44 setDefaultValue(Model.of(model.getObject())); //TODO: check if this is necessary, added on migration to Wicket 7 46 45 } 47 46 -
vlo/branches/vlo-3.3-oeaw/vlo-web-app/src/main/java/eu/clarin/cmdi/vlo/wicket/pages/RecordPage.html
r6350 r6755 51 51 <div id="recorddetails"> 52 52 <a wicket:id="landingPageLink" target="_blank" id="recordlandingpage">Show this record in its original context</a> 53 < wicket:container wicket:id="documentProperties">[PROPERTIES TABLE]</wicket:container>53 <div id="recordProperties" wicket:id="documentProperties">[PROPERTIES TABLE]</div> 54 54 </div> 55 55 -
vlo/branches/vlo-3.3-oeaw/vlo-web-app/src/main/java/eu/clarin/cmdi/vlo/wicket/pages/RecordPage.java
r6305 r6755 20 20 import eu.clarin.cmdi.vlo.FacetConstants; 21 21 import eu.clarin.cmdi.vlo.VloWebAppParameters; 22 import eu.clarin.cmdi.vlo.config.VloConfig; 22 23 import eu.clarin.cmdi.vlo.pojo.QueryFacetsSelection; 23 24 import eu.clarin.cmdi.vlo.pojo.SearchContext; … … 86 87 @SpringBean(name = "documentFieldOrder") 87 88 private List<String> fieldOrder; 89 @SpringBean 90 private VloConfig config; 88 91 89 92 private final IModel<SearchContext> navigationModel; … … 127 130 128 131 addComponents(); 129 add(new HighlightSearchTermBehavior());130 132 } 131 133 … … 135 137 136 138 final WebMarkupContainer topNavigation = new WebMarkupContainer("topnavigation"); 137 topNavigation.setOutputMarkupId(true);138 add(topNavigation);139 140 topNavigation.add(new BreadCrumbPanel("breadcrumbs", selectionModel));141 topNavigation.add(createPermalink("permalink", topNavigation));139 add(topNavigation 140 .add(new BreadCrumbPanel("breadcrumbs", selectionModel)) 141 .add(createPermalink("permalink", topNavigation)) 142 .setOutputMarkupId(true) 143 ); 142 144 143 145 // General information section 144 146 add(new SolrFieldLabel("name", getModel(), FacetConstants.FIELD_NAME, getString("recordpage.unnamedrecord"))); 145 147 add(createLandingPageLink("landingPageLink")); 146 add(new FieldsTablePanel("documentProperties", new DocumentFieldsProvider(getModel(), basicPropertiesFilter, fieldOrder))); 148 149 final FieldsTablePanel fieldsTable = new FieldsTablePanel("documentProperties", new DocumentFieldsProvider(getModel(), basicPropertiesFilter, fieldOrder)); 150 fieldsTable.add(new HighlightSearchTermBehavior()); 151 add(fieldsTable); 147 152 148 153 // Resources section … … 153 158 add(createTechnicalDetailsPanel("technicalProperties")); 154 159 155 add(createHierarchyPanel("recordtree")); 160 if (config.isProcessHierarchies()) { 161 // show hierarchy if applicable 162 add(createHierarchyPanel("recordtree")); 163 } else { 164 // invisible stub 165 add(new WebMarkupContainer("recordtree") { 166 167 @Override 168 public boolean isVisible() { 169 return false; 170 } 171 172 }); 173 } 156 174 157 175 createSearchLinks("searchlinks"); … … 213 231 214 232 private void createSearchLinks(String id) { 215 final SolrFieldModel<String> searchPageModel = new SolrFieldModel< String>(getModel(), FacetConstants.FIELD_SEARCHPAGE);216 final SolrFieldModel<String> searchServiceModel = new SolrFieldModel< String>(getModel(), FacetConstants.FIELD_SEARCH_SERVICE);233 final SolrFieldModel<String> searchPageModel = new SolrFieldModel<>(getModel(), FacetConstants.FIELD_SEARCHPAGE); 234 final SolrFieldModel<String> searchServiceModel = new SolrFieldModel<>(getModel(), FacetConstants.FIELD_SEARCH_SERVICE); 217 235 add(new WebMarkupContainer(id) { 218 236 { 219 237 //Add search page links (can be multiple) 220 add(new ListView<String>("searchPage", new CollectionListModel< String>(searchPageModel)) {238 add(new ListView<String>("searchPage", new CollectionListModel<>(searchPageModel)) { 221 239 222 240 @Override … … 227 245 228 246 // We assume there can be multiple content search endpoints too 229 add(new ListView<String>("contentSearch", new CollectionListModel< String>(searchServiceModel)) {247 add(new ListView<String>("contentSearch", new CollectionListModel<>(searchServiceModel)) { 230 248 231 249 @Override … … 305 323 // Put the name of the record in the page title 306 324 return new StringResourceModel("recordpage.title", 307 new NullFallbackModel(new SolrFieldStringModel(getModel(), FacetConstants.FIELD_NAME), getString("recordpage.unnamedrecord")) ,308 DEFAULT_PAGE_TITLE);325 new NullFallbackModel(new SolrFieldStringModel(getModel(), FacetConstants.FIELD_NAME), getString("recordpage.unnamedrecord"))) 326 .setDefaultValue(DEFAULT_PAGE_TITLE); 309 327 } 310 328 -
vlo/branches/vlo-3.3-oeaw/vlo-web-app/src/main/java/eu/clarin/cmdi/vlo/wicket/pages/SimpleSearchPage.java
r6494 r6755 21 21 import eu.clarin.cmdi.vlo.pojo.QueryFacetsSelection; 22 22 import eu.clarin.cmdi.vlo.service.solr.FacetFieldsService; 23 import eu.clarin.cmdi.vlo.wicket.model.PermaLinkModel; 23 24 import eu.clarin.cmdi.vlo.wicket.panels.search.SearchFormPanel; 24 25 import eu.clarin.cmdi.vlo.wicket.panels.SingleFacetPanel; … … 64 65 65 66 // add an updatable container for breadcrumbs and top links 66 navigation = new WebMarkupContainer("navigation"); 67 navigation.setOutputMarkupId(true); 67 navigation = createNavigation("navigation"); 68 68 add(navigation); 69 70 navigation.add(new BookmarkablePageLink("breadcrumb", getApplication().getHomePage()));71 navigation.add(new TopLinksPanel("topLinks", null));72 69 73 70 // add a persistenet panel for selection of a value for the collection facet … … 88 85 browse = new SimpleSearchBrowsePanel("browse", getModel()); 89 86 add(browse); 87 } 88 89 private WebMarkupContainer createNavigation(String id) { 90 final WebMarkupContainer container = new WebMarkupContainer(id); 91 container.setOutputMarkupId(true); 92 container.add(new BookmarkablePageLink("breadcrumb", getApplication().getHomePage())); 93 container.add(new TopLinksPanel("topLinks", new PermaLinkModel(getPageClass(), getModel())) { 94 95 @Override 96 protected void onChange(AjaxRequestTarget target) { 97 if (target != null) { 98 target.add(container); 99 } 100 } 101 102 }); 103 return container; 90 104 } 91 105 -
vlo/branches/vlo-3.3-oeaw/vlo-web-app/src/main/java/eu/clarin/cmdi/vlo/wicket/pages/VloBasePage.java
r6412 r6755 33 33 import org.apache.wicket.markup.html.link.ExternalLink; 34 34 import org.apache.wicket.markup.html.panel.FeedbackPanel; 35 import org.apache.wicket.migrate.StringResourceModelMigration; 35 36 import org.apache.wicket.model.IModel; 36 37 import org.apache.wicket.model.Model; 37 import org.apache.wicket.model.StringResourceModel;38 38 import org.apache.wicket.request.mapper.parameter.PageParameters; 39 39 import org.apache.wicket.request.resource.CssResourceReference; … … 155 155 */ 156 156 public IModel<String> getPageDescriptionModel() { 157 return new StringResourceModel("vloDescription", null, (Object[]) null);157 return StringResourceModelMigration.of("vloDescription", null, (Object[]) null); 158 158 } 159 159 -
vlo/branches/vlo-3.3-oeaw/vlo-web-app/src/main/java/eu/clarin/cmdi/vlo/wicket/panels/record/FieldsTablePanel.html
r5012 r6755 28 28 <tr wicket:id="documentField"> 29 29 <td class="attribute"> 30 <div wicket:id="fieldName">Description</div>30 <div class="fieldName" wicket:id="fieldName">Description</div> 31 31 </td><td class="attributeValue"> 32 32 <ul class="attributeValues"> -
vlo/branches/vlo-3.3-oeaw/vlo-web-app/src/main/java/eu/clarin/cmdi/vlo/wicket/panels/record/FieldsTablePanel.java
r6268 r6755 20 20 import com.google.common.collect.ImmutableSet; 21 21 import eu.clarin.cmdi.vlo.FacetConstants; 22 import eu.clarin.cmdi.vlo.JavaScriptResources; 22 23 import eu.clarin.cmdi.vlo.config.VloConfig; 23 24 import eu.clarin.cmdi.vlo.pojo.DocumentField; … … 28 29 import eu.clarin.cmdi.vlo.wicket.components.SmartLinkFieldValueLabel; 29 30 import eu.clarin.cmdi.vlo.wicket.model.HandleLinkModel; 31 import eu.clarin.cmdi.vlo.wicket.model.SolrFieldDescriptionModel; 30 32 import eu.clarin.cmdi.vlo.wicket.model.SolrFieldNameModel; 31 33 import eu.clarin.cmdi.vlo.wicket.pages.FacetedSearchPage; … … 35 37 import org.apache.wicket.AttributeModifier; 36 38 import org.apache.wicket.Component; 39 import org.apache.wicket.behavior.AttributeAppender; 37 40 import org.apache.wicket.extensions.markup.html.basic.SmartLinkMultiLineLabel; 41 import org.apache.wicket.markup.head.CssHeaderItem; 42 import org.apache.wicket.markup.head.IHeaderResponse; 43 import org.apache.wicket.markup.head.JavaScriptHeaderItem; 38 44 import org.apache.wicket.markup.html.basic.Label; 39 45 import org.apache.wicket.markup.html.link.Link; … … 89 95 final PropertyModel<String> fieldNameModel = new PropertyModel<String>(fieldModel, "fieldName"); 90 96 final SolrFieldNameModel friendlyFieldNameModel = new SolrFieldNameModel(fieldNameModel); 91 item.add(new Label("fieldName", friendlyFieldNameModel)); 97 final Label fieldName = new Label("fieldName", friendlyFieldNameModel); 98 item.add(fieldName); 99 fieldName.add(new AttributeAppender("title", new SolrFieldDescriptionModel(fieldNameModel))); 92 100 final PropertyModel<List> valuesModel = new PropertyModel<List>(fieldModel, "values"); 93 101 item.add(new ListView("values", valuesModel) { … … 160 168 return true; 161 169 } 170 171 // re-enable for 'fancy' popups for the field descriptions 172 // @Override 173 // public void renderHead(IHeaderResponse response) { 174 // // JQuery UI for tooltips 175 // response.render(CssHeaderItem.forReference(JavaScriptResources.getJQueryUICSS())); 176 // response.render(JavaScriptHeaderItem.forReference(JavaScriptResources.getFieldsTableJS())); 177 // } 162 178 163 179 } -
vlo/branches/vlo-3.3-oeaw/vlo-web-app/src/main/java/eu/clarin/cmdi/vlo/wicket/panels/record/HierarchyPanel.html
r6412 r6755 38 38 <a wicket:id="showAll">Show all... (<span wicket:id="itemCount">999</span>)</a> 39 39 </div> 40 <div id="tree" wicket:id="tree">[TREE]</div> 40 <div wicket:id="treeContainer"> 41 <div id="tree" wicket:id="tree">[TREE]</div> 42 </div> 41 43 </wicket:panel> 42 44 </body> -
vlo/branches/vlo-3.3-oeaw/vlo-web-app/src/main/java/eu/clarin/cmdi/vlo/wicket/panels/record/HierarchyPanel.java
r6412 r6755 21 21 import eu.clarin.cmdi.vlo.FacetConstants; 22 22 import eu.clarin.cmdi.vlo.service.solr.SolrDocumentService; 23 import eu.clarin.cmdi.vlo.wicket.components.AjaxFallbackLinkLabel; 23 24 import eu.clarin.cmdi.vlo.wicket.components.IndicatingNestedTree; 24 25 import eu.clarin.cmdi.vlo.wicket.components.NamedRecordPageLink; 25 26 import eu.clarin.cmdi.vlo.wicket.model.SolrDocumentModel; 27 import java.io.Serializable; 26 28 import java.util.Collection; 27 29 import java.util.Collections; 28 30 import java.util.Iterator; 31 import java.util.Objects; 29 32 import org.apache.solr.common.SolrDocument; 30 33 import org.apache.wicket.Component; 34 import org.apache.wicket.MarkupContainer; 31 35 import org.apache.wicket.ajax.AjaxRequestTarget; 32 36 import org.apache.wicket.behavior.AttributeAppender; … … 58 62 */ 59 63 public static final int INITIAL_PARENTS_SHOWN = 5; 64 public static final int INITIAL_CHILRDEN_SHOWN = 50; 60 65 61 66 @SpringBean … … 63 68 64 69 private final IDataProvider<SolrDocument> parentsProvider; 65 private final AbstractTree<SolrDocument> tree; 70 private final MarkupContainer treeContainer; 71 private final AbstractTree<ModelWrapper<SolrDocument>> tree; 66 72 private final IModel<SolrDocument> pageDocumentModel; 67 73 … … 75 81 76 82 tree = createTree("tree"); 77 add(tree); 83 84 treeContainer = new WebMarkupContainer("treeContainer"); 85 treeContainer.setOutputMarkupId(true); 86 treeContainer.add(tree); 87 add(treeContainer); 78 88 79 89 setOutputMarkupId(true); … … 97 107 // tree root up one level, expand root for traceability by user 98 108 HierarchyPanel.this.setModel(item.getModel()); 99 tree.expand( item.getModelObject());109 tree.expand(new ModelWrapper<>(item.getModel())); 100 110 if (target != null) { 101 111 target.add(HierarchyPanel.this); … … 103 113 } 104 114 }); 105 115 106 116 item.add(new Behavior() { 107 117 … … 148 158 } 149 159 150 private AbstractTree<SolrDocument> createTree(String id) { 151 final AbstractTree<SolrDocument> result = new IndicatingNestedTree<SolrDocument>(id, new HierarchyTreeProvider()) { 152 153 @Override 154 protected Component newContentComponent(String id, final IModel<SolrDocument> node) { 155 return new NamedRecordPageLink(id, node) { 156 157 @Override 158 protected void onConfigure() { 159 setEnabled(!node.equals(pageDocumentModel)); 160 } 161 }; 160 private AbstractTree createTree(String id) { 161 final HierarchyTreeProvider treeProvider = new HierarchyTreeProvider(); 162 final AbstractTree<ModelWrapper<SolrDocument>> result = new IndicatingNestedTree<ModelWrapper<SolrDocument>>(id, treeProvider) { 163 164 @Override 165 protected Component newContentComponent(String id, final IModel<ModelWrapper<SolrDocument>> node) { 166 if (node.getObject().isLimit()) { 167 return new AjaxFallbackLinkLabel(id, node, Model.of("Show all... (" + node.getObject().getCount() + ")")) { 168 169 @Override 170 public void onClick(AjaxRequestTarget target) { 171 treeProvider.setChildrenShown(null); 172 target.add(treeContainer); 173 } 174 175 }; 176 } else { 177 return new NamedRecordPageLink(id, node.getObject().getModel()) { 178 179 @Override 180 protected void onConfigure() { 181 setEnabled(!node.equals(pageDocumentModel)); 182 } 183 }; 184 } 162 185 } 163 186 … … 184 207 } 185 208 186 private class HierarchyTreeProvider extends SortableTreeProvider<SolrDocument, Object> { 187 188 @Override 189 public Iterator<? extends SolrDocument> getRoots() { 190 return Iterators.singletonIterator(HierarchyPanel.this.getModel().getObject()); 191 } 192 193 @Override 194 public boolean hasChildren(SolrDocument node) { 195 Object partCount = node.getFieldValue(FacetConstants.FIELD_HAS_PART_COUNT); 196 return (partCount instanceof Number) && ((Number) partCount).intValue() > 0; 197 } 198 199 @Override 200 public Iterator<? extends SolrDocument> getChildren(SolrDocument node) { 201 final Collection<Object> parts = node.getFieldValues(FacetConstants.FIELD_HAS_PART); 202 return Iterators.transform(parts.iterator(), new Function<Object, SolrDocument>() { 203 204 @Override 205 public SolrDocument apply(Object childId) { 206 return documentService.getDocument(childId.toString()); 207 } 208 }); 209 } 210 211 @Override 212 public IModel<SolrDocument> model(SolrDocument object) { 213 return new SolrDocumentModel(object); 209 private class HierarchyTreeProvider extends SortableTreeProvider<ModelWrapper<SolrDocument>, Object> { 210 211 private Integer childrenShown = INITIAL_CHILRDEN_SHOWN; 212 213 public void setChildrenShown(Integer childrenShown) { 214 this.childrenShown = childrenShown; 215 } 216 217 @Override 218 public Iterator<? extends ModelWrapper<SolrDocument>> getRoots() { 219 return Iterators.singletonIterator( 220 new ModelWrapper<>( 221 HierarchyPanel.this.getModel())); 222 } 223 224 @Override 225 public boolean hasChildren(ModelWrapper<SolrDocument> node) { 226 if (node.isLimit()) { 227 return false; 228 } else { 229 final Object partCount = node.getModelObject().getFieldValue(FacetConstants.FIELD_HAS_PART_COUNT); 230 return (partCount instanceof Number) && ((Number) partCount).intValue() > 0; 231 } 232 } 233 234 @Override 235 public Iterator<? extends ModelWrapper<SolrDocument>> getChildren(ModelWrapper<SolrDocument> node) { 236 if (node.isLimit()) { 237 return Collections.emptyIterator(); 238 } else { 239 final Collection<Object> parts = node.getModelObject().getFieldValues(FacetConstants.FIELD_HAS_PART); 240 final Iterator<Object> objectIterator; 241 if (childrenShown == null) { 242 // unlimited 243 objectIterator = parts.iterator(); 244 } else { 245 objectIterator = Iterators.limit(parts.iterator(), childrenShown); 246 } 247 final Iterator<ModelWrapper<SolrDocument>> iterator = Iterators.transform(objectIterator, new Function<Object, ModelWrapper<SolrDocument>>() { 248 249 @Override 250 public ModelWrapper<SolrDocument> apply(Object childId) { 251 final SolrDocument document = documentService.getDocument(childId.toString()); 252 return new ModelWrapper<>(new SolrDocumentModel(document)); 253 } 254 }); 255 if (childrenShown != null && parts.size() > childrenShown) { 256 return Iterators.concat(iterator, // add empty model wrapper to indicate "end of page" 257 Iterators.singletonIterator(new ModelWrapper<SolrDocument>(parts.size()))); 258 } else { 259 return iterator; 260 } 261 } 262 } 263 264 @Override 265 public IModel<ModelWrapper<SolrDocument>> model(ModelWrapper<SolrDocument> object) { 266 return object; 214 267 } 215 268 } … … 269 322 } 270 323 324 private class ModelWrapper<T> extends AbstractReadOnlyModel<ModelWrapper<T>> implements Serializable { 325 326 /** 327 * Limit reached? 328 */ 329 private final boolean limit; 330 331 /** 332 * Total number of items (if beyond the limit) 333 */ 334 private final int count; 335 336 /** 337 * Inner model 338 */ 339 private final IModel<T> model; 340 341 public ModelWrapper(int count) { 342 this.limit = true; 343 this.count = count; 344 this.model = null; 345 } 346 347 public ModelWrapper(IModel<T> model) { 348 this.limit = false; 349 this.count = -1; 350 this.model = model; 351 } 352 353 public boolean isLimit() { 354 return limit; 355 } 356 357 public IModel<T> getModel() { 358 return model; 359 } 360 361 public int getCount() { 362 return count; 363 } 364 365 public T getModelObject() { 366 if (model == null) { 367 return null; 368 } else { 369 return model.getObject(); 370 } 371 } 372 373 // as IModel<T> 374 @Override 375 public void detach() { 376 if (model != null) { 377 model.detach(); 378 } 379 } 380 381 // as IModel<T> 382 @Override 383 public ModelWrapper<T> getObject() { 384 return this; 385 } 386 387 @Override 388 public int hashCode() { 389 int hash = 5; 390 hash = 41 * hash + (this.limit ? 1 : 0); 391 hash = 41 * hash + Objects.hashCode(this.model); 392 return hash; 393 } 394 395 @Override 396 public boolean equals(Object obj) { 397 if (obj == null) { 398 return false; 399 } 400 if (getClass() != obj.getClass()) { 401 return false; 402 } 403 final ModelWrapper<?> other = (ModelWrapper<?>) obj; 404 if (this.limit != other.limit) { 405 return false; 406 } 407 if (!Objects.equals(this.model, other.model)) { 408 return false; 409 } 410 return true; 411 } 412 413 } 414 271 415 } -
vlo/branches/vlo-3.3-oeaw/vlo-web-app/src/main/java/eu/clarin/cmdi/vlo/wicket/panels/record/RecordNavigationPanel.java
r4872 r6755 22 22 import org.apache.wicket.markup.html.basic.Label; 23 23 import org.apache.wicket.markup.html.panel.GenericPanel; 24 import org.apache.wicket.migrate.StringResourceModelMigration; 24 25 import org.apache.wicket.model.AbstractReadOnlyModel; 25 26 import org.apache.wicket.model.IModel; 26 27 import org.apache.wicket.model.PropertyModel; 27 import org.apache.wicket.model.StringResourceModel;28 28 29 29 /** … … 38 38 super(id, model); 39 39 40 41 40 42 // Add a label 'record X of Y' 41 add(new Label("recordIndex", new StringResourceModel("record.navigation.index", this, model,43 add(new Label("recordIndex", StringResourceModelMigration.of("record.navigation.index", this, model, 42 44 new Object[]{ 43 45 // These values get inserted into the string … … 45 47 new ShiftedIndexModel(new PropertyModel<Long>(model, "index"), +1), 46 48 // Second: total result count, unmodified 47 new PropertyModel< Integer>(model, "resultCount")49 new PropertyModel<>(model, "resultCount") 48 50 } 49 51 ))); -
vlo/branches/vlo-3.3-oeaw/vlo-web-app/src/main/java/eu/clarin/cmdi/vlo/wicket/panels/record/ResourceLinkDetailsPanel.java
r4907 r6755 20 20 import org.apache.wicket.markup.html.basic.Label; 21 21 import org.apache.wicket.markup.html.panel.Panel; 22 import org.apache.wicket.migrate.StringResourceModelMigration; 22 23 import org.apache.wicket.model.CompoundPropertyModel; 23 24 import org.apache.wicket.model.IModel; 24 import org.apache.wicket.model.StringResourceModel;25 25 26 26 /** … … 34 34 public ResourceLinkDetailsPanel(String id, IModel<ResourceInfo> model) { 35 35 super(id, model); 36 setDefaultModel(new CompoundPropertyModel< ResourceInfo>(model));36 setDefaultModel(new CompoundPropertyModel<>(model)); 37 37 // get the friendly name of the resource type dynamically from the resource bundle 38 add(new Label("resourceType", new StringResourceModel("resourcetype.${resourceType}.singular", model, model.getObject().getResourceType())));38 add(new Label("resourceType", StringResourceModelMigration.of("resourcetype.${resourceType}.singular", model, model.getObject().getResourceType()))); 39 39 add(new Label("fileName")); 40 40 add(new Label("mimeType")); -
vlo/branches/vlo-3.3-oeaw/vlo-web-app/src/main/java/eu/clarin/cmdi/vlo/wicket/panels/record/ResourceLinksPanel.java
r6350 r6755 25 25 import java.util.Collection; 26 26 import java.util.List; 27 import org.apache.wicket.Component;28 27 import org.apache.wicket.MarkupContainer; 29 28 import org.apache.wicket.ajax.AjaxRequestTarget; … … 62 61 63 62 // list view that shows all resources as links that show a resource details panel when clicked 64 final ResourcesListView resourceListing = new ResourcesListView("resource", new CollectionListModel< String>(model));63 final ResourcesListView resourceListing = new ResourcesListView("resource", new CollectionListModel<>(model)); 65 64 add(resourceListing); 66 65 … … 90 89 private class ResourcesListView extends PageableListView<String> { 91 90 92 public ResourcesListView(String id, IModel<? extends List< ? extendsString>> model) {91 public ResourcesListView(String id, IModel<? extends List<String>> model) { 93 92 super(id, model, ITEMS_PER_PAGE); 94 93 setReuseItems(true); -
vlo/branches/vlo-3.3-oeaw/vlo-web-app/src/main/java/eu/clarin/cmdi/vlo/wicket/panels/search/AdvancedSearchOptionsPanel.html
r6494 r6755 31 31 <label for="onlyfcs">Only include resources that support content search</label> 32 32 </li> 33 <li >33 <li wicket:id="collectionsSection"> 34 34 <input wicket:id="collection" type="checkbox" id="onlycollections"/> 35 35 <label for="onlycollections">Only include collection resources</label> -
vlo/branches/vlo-3.3-oeaw/vlo-web-app/src/main/java/eu/clarin/cmdi/vlo/wicket/panels/search/AdvancedSearchOptionsPanel.java
r6493 r6755 19 19 import com.google.common.collect.ImmutableSet; 20 20 import eu.clarin.cmdi.vlo.FacetConstants; 21 import eu.clarin.cmdi.vlo.config.VloConfig; 21 22 import eu.clarin.cmdi.vlo.pojo.ExpansionState; 22 23 import eu.clarin.cmdi.vlo.pojo.FacetSelection; … … 27 28 import eu.clarin.cmdi.vlo.wicket.panels.ExpandablePanel; 28 29 import java.util.Collection; 30 import org.apache.wicket.MarkupContainer; 29 31 import org.apache.wicket.ajax.AjaxRequestTarget; 30 32 import org.apache.wicket.ajax.form.OnChangeAjaxBehavior; 33 import org.apache.wicket.markup.html.WebMarkupContainer; 31 34 import org.apache.wicket.markup.html.basic.Label; 32 35 import org.apache.wicket.markup.html.form.CheckBox; 33 36 import org.apache.wicket.markup.html.form.Form; 34 37 import org.apache.wicket.model.IModel; 38 import org.apache.wicket.spring.injection.annot.SpringBean; 35 39 36 40 /** … … 45 49 public abstract class AdvancedSearchOptionsPanel extends ExpandablePanel<QueryFacetsSelection> { 46 50 51 @SpringBean 52 private VloConfig config; 53 47 54 /** 48 55 * The fields that this panel provides options for … … 58 65 final CheckBox fcsCheck = createFieldNotEmptyOption("fcs", FacetConstants.FIELD_SEARCH_SERVICE); 59 66 options.add(fcsCheck); 67 68 final MarkupContainer collectionsSection = new WebMarkupContainer("collectionsSection"); 60 69 final CheckBox collectionCheck = createFieldNotEmptyOption("collection", FacetConstants.FIELD_HAS_PART_COUNT); 61 options.add(collectionCheck); 70 collectionsSection.add(collectionCheck); 71 collectionsSection.setVisible(config.isProcessHierarchies()); 72 options.add(collectionsSection); 73 62 74 63 75 add(options); -
vlo/branches/vlo-3.3-oeaw/vlo-web-app/src/main/java/eu/clarin/cmdi/vlo/wicket/panels/search/AllFacetValuesPanel.java
r6494 r6755 131 131 132 132 private DataView<FacetField.Count> createValuesView(String id) { 133 final IModel<String> fieldNameModel = new PropertyModel< String>(getModel(), "name");133 final IModel<String> fieldNameModel = new PropertyModel<>(getModel(), "name"); 134 134 return new DataView<FacetField.Count>(id, valuesProvider, ITEMS_PER_PAGE) { 135 135 136 136 @Override 137 137 protected void populateItem(final Item<FacetField.Count> item) { 138 item.setDefaultModel(new CompoundPropertyModel< FacetField.Count>(item.getModel()));138 item.setDefaultModel(new CompoundPropertyModel<>(item.getModel())); 139 139 140 140 // link to select an individual facet value … … 170 170 options.add(sortSelect); 171 171 172 final TextField filterField = new TextField< String>("filter", new PropertyModel(filterModel, "name"));172 final TextField filterField = new TextField<>("filter", new PropertyModel(filterModel, "name")); 173 173 filterField.add(new AjaxFormComponentUpdatingBehavior("keyup") { 174 174 … … 202 202 203 203 // Model that holds the actual number of occurences filtered on 204 final IModel<Integer> minOccurenceModel = new PropertyModel< Integer>(filterModel, "minimalOccurence");204 final IModel<Integer> minOccurenceModel = new PropertyModel<>(filterModel, "minimalOccurence"); 205 205 // Model that represents the filter state ('bridge' between filter and selection) 206 206 final IModel<Boolean> bridgeStateModel = Model.of(false); 207 207 // Model that represents the *selected* number of minimal occurences (passes it on if not decoupled) 208 final IModel<Integer> minOccurenceSelectModel = new BridgeOuterModel< Integer>(minOccurenceModel, bridgeStateModel, 2);208 final IModel<Integer> minOccurenceSelectModel = new BridgeOuterModel<>(minOccurenceModel, bridgeStateModel, 2); 209 209 // Model that links the actual filter, selection and bridge (object opens and closes it) 210 final IModel<Boolean> minOccurenceCheckBoxModel = new BridgeModel< Integer>(minOccurenceModel, minOccurenceSelectModel, bridgeStateModel, 0);210 final IModel<Boolean> minOccurenceCheckBoxModel = new BridgeModel<>(minOccurenceModel, minOccurenceSelectModel, bridgeStateModel, 0); 211 211 212 212 // checkbox to open and close the 'bridge' … … 216 216 217 217 // Dropdown to select a value (which is applied to the filter if the 'bridge' is open) 218 final DropDownChoice<Integer> minOccurence = new DropDownChoice< Integer>("minOccurences", minOccurenceSelectModel, ImmutableList.of(2, 5, 10, 100, 1000));218 final DropDownChoice<Integer> minOccurence = new DropDownChoice<>("minOccurences", minOccurenceSelectModel, ImmutableList.of(2, 5, 10, 100, 1000)); 219 219 minOccurence.add(new UpdateOptionsFormBehavior(options) { 220 220 -
vlo/branches/vlo-3.3-oeaw/vlo-web-app/src/main/java/eu/clarin/cmdi/vlo/wicket/panels/search/FacetValuesPanel.java
r6501 r6755 77 77 @SpringBean 78 78 private FieldValueConverterProvider fieldValueConverterProvider; 79 79 80 /** 80 81 * Creates a new panel with selectable values for a single facet … … 133 134 private Form createFilterForm(String id) { 134 135 final Form filterForm = new Form(id); 135 final TextField<String> filterField = new TextField< String>("filterText",136 final TextField<String> filterField = new TextField<>("filterText", 136 137 new PropertyModel<String>(filterModel, "name")); 137 138 // make field update … … 155 156 */ 156 157 private DataView createValuesView(String id) { 157 final FacetFieldValuesProvider valuesProvider = new FacetFieldValuesProvider(getModel(), MAX_NUMBER_OF_FACETS_TO_SHOW, LOW_PRIORITY_VALUES, fieldValueConverterProvider) {158 final FacetFieldValuesProvider valuesProvider = new FacetFieldValuesProvider(getModel(), MAX_NUMBER_OF_FACETS_TO_SHOW, LOW_PRIORITY_VALUES, fieldValueConverterProvider) { 158 159 159 160 @Override … … 164 165 }; 165 166 // partition the values according to the specified partition size 166 final PartitionedDataProvider<Count, FieldValuesOrder> partitionedValuesProvider = new PartitionedDataProvider< FacetField.Count, FieldValuesOrder>(valuesProvider, subListSize);167 final PartitionedDataProvider<Count, FieldValuesOrder> partitionedValuesProvider = new PartitionedDataProvider<>(valuesProvider, subListSize); 167 168 168 169 // create the view for the partitions 169 final DataView<List< ? extends Count>> valuesView = new DataView<List<? extendsCount>>(id, partitionedValuesProvider) {170 171 @Override 172 protected void populateItem(Item<List< ? extendsCount>> item) {170 final DataView<List<Count>> valuesView = new DataView<List<Count>>(id, partitionedValuesProvider) { 171 172 @Override 173 protected void populateItem(Item<List<Count>> item) { 173 174 // create a list view for the values in this partition 174 item.add(new ListView <Count>("facetValues", item.getModel()) {175 item.add(new ListView("facetValues", item.getModel()) { 175 176 176 177 @Override 177 protected void populateItem(ListItem <Count>item) {178 protected void populateItem(ListItem item) { 178 179 addFacetValue("facetSelect", item); 179 180 } … … 191 192 */ 192 193 private void addFacetValue(String id, final ListItem<Count> item) { 193 item.setDefaultModel(new CompoundPropertyModel< Count>(item.getModel()));194 item.setDefaultModel(new CompoundPropertyModel<>(item.getModel())); 194 195 195 196 // link to select an individual facet value -
vlo/branches/vlo-3.3-oeaw/vlo-web-app/src/main/java/eu/clarin/cmdi/vlo/wicket/panels/search/FacetsPanel.java
r6494 r6755 74 74 // making it dynamic in case the selection and therefore 75 75 // set of available values changes 76 // TODO: Limit to number of items shown while keeping 'more' function?77 76 item.add( 78 77 new FacetPanel("facet", -
vlo/branches/vlo-3.3-oeaw/vlo-web-app/src/main/java/eu/clarin/cmdi/vlo/wicket/panels/search/SearchFormPanel.java
r6507 r6755 21 21 import eu.clarin.cmdi.vlo.service.solr.AutoCompleteService; 22 22 import java.util.Iterator; 23 import org.apache.wicket.Component; 23 24 import org.apache.wicket.ajax.AjaxRequestTarget; 25 import org.apache.wicket.ajax.attributes.AjaxCallListener; 26 import org.apache.wicket.ajax.attributes.AjaxRequestAttributes; 24 27 import org.apache.wicket.ajax.markup.html.form.AjaxFallbackButton; 25 28 import org.apache.wicket.extensions.ajax.markup.html.autocomplete.AutoCompleteTextField; … … 43 46 private AutoCompleteService autoCompleteDao; 44 47 48 //private final AjaxIndicatorAppender indicatorAppender = new AjaxIndicatorAppender(); 45 49 public SearchFormPanel(String id, IModel<QueryFacetsSelection> model) { 46 50 super(id, model); … … 65 69 SearchFormPanel.this.onSubmit(target); 66 70 } 71 72 @Override 73 protected void updateAjaxAttributes(AjaxRequestAttributes attributes) { 74 super.updateAjaxAttributes(attributes); 75 76 // listener to start/stop indicating progress 77 AjaxCallListener listener = new AjaxCallListener() { 78 79 @Override 80 public CharSequence getBeforeHandler(Component component) { 81 return ("startSearch();"); 82 } 83 84 @Override 85 public CharSequence getCompleteHandler(Component component) { 86 return ("endSearch();"); 87 } 88 89 }; 90 attributes.getAjaxCallListeners().add(listener); 91 } 92 67 93 } 68 94 ); … … 70 96 add(form); 71 97 } 72 98 73 99 protected abstract void onSubmit(AjaxRequestTarget target); 74 100 … … 79 105 response.render(JavaScriptHeaderItem.forReference(JavaScriptResources.getJQueryUIJS())); 80 106 response.render(JavaScriptHeaderItem.forReference(JavaScriptResources.getSyntaxHelpJS())); 107 response.render(JavaScriptHeaderItem.forReference(JavaScriptResources.getSearchFormJS())); 81 108 } 82 109 } -
vlo/branches/vlo-3.3-oeaw/vlo-web-app/src/main/java/eu/clarin/cmdi/vlo/wicket/panels/search/SearchResultItemCollapsedPanel.java
r4998 r6755 33 33 import org.apache.wicket.markup.repeater.data.DataView; 34 34 import org.apache.wicket.markup.repeater.data.IDataProvider; 35 import org.apache.wicket.migrate.StringResourceModelMigration; 35 36 import org.apache.wicket.model.IModel; 36 37 import org.apache.wicket.model.StringResourceModel; … … 59 60 60 61 // get model for resources 61 final SolrFieldModel<String> resourcesModel = new SolrFieldModel< String>(documentModel, FacetConstants.FIELD_RESOURCE);62 final SolrFieldModel<String> resourcesModel = new SolrFieldModel<>(documentModel, FacetConstants.FIELD_RESOURCE); 62 63 // wrap with a count provider 63 64 final ResouceTypeCountDataProvider countProvider = new ResouceTypeCountDataProvider(resourcesModel, countingService); … … 112 113 // first create a string model that provides the type of resources 113 114 // in the right number (plural or singular, conveniently supplied by ResourceTypeCount) 114 final StringResourceModel resourceTypeModel = new StringResourceModel("resourcetype.${resourceType}.${number}", resourceTypeCountModel, "?");115 final StringResourceModel resourceTypeModel = StringResourceModelMigration.of("resourcetype.${resourceType}.${number}", resourceTypeCountModel, "?"); 115 116 // inject this into the resource string that combines it with count 116 return new StringResourceModel("resources.typecount", this, resourceTypeCountModel, resourceTypeModel);117 return StringResourceModelMigration.of("resources.typecount", this, resourceTypeCountModel, resourceTypeModel); 117 118 } 118 119 } -
vlo/branches/vlo-3.3-oeaw/vlo-web-app/src/main/java/eu/clarin/cmdi/vlo/wicket/panels/search/SearchResultItemExpandedPanel.java
r6268 r6755 37 37 import org.apache.solr.common.SolrDocument; 38 38 import org.apache.wicket.ajax.AjaxRequestTarget; 39 import org.apache.wicket.extensions.markup.html.basic.SmartLinkLabel;40 39 import org.apache.wicket.markup.html.WebMarkupContainer; 41 40 import org.apache.wicket.markup.html.basic.Label; … … 44 43 import org.apache.wicket.markup.html.list.PageableListView; 45 44 import org.apache.wicket.markup.html.panel.GenericPanel; 45 import org.apache.wicket.migrate.StringResourceModelMigration; 46 46 import org.apache.wicket.model.AbstractReadOnlyModel; 47 47 import org.apache.wicket.model.IModel; 48 48 import org.apache.wicket.model.Model; 49 49 import org.apache.wicket.model.PropertyModel; 50 import org.apache.wicket.model.StringResourceModel;51 50 import org.apache.wicket.spring.injection.annot.SpringBean; 52 51 … … 94 93 95 94 private WebMarkupContainer createResourcesView(String id, final IModel<SearchContext> selectionModel) { 96 final SolrFieldModel<String> resourceModel = new SolrFieldModel< String>(getModel(), FacetConstants.FIELD_RESOURCE);95 final SolrFieldModel<String> resourceModel = new SolrFieldModel<>(getModel(), FacetConstants.FIELD_RESOURCE); 97 96 // create a container for the list view that is only visible if there actually are resources 98 97 final WebMarkupContainer container = new WebMarkupContainer(id) { … … 119 118 }; 120 119 // add a record page link that shows the number of resources not shown 121 moreLink.add(new Label("moreLabel", new StringResourceModel("resources.more", new AbstractReadOnlyModel<Integer>() {120 moreLink.add(new Label("moreLabel", StringResourceModelMigration.of("resources.more", new AbstractReadOnlyModel<Integer>() { 122 121 123 122 @Override … … 134 133 private PageableListView createResourcesList(String id, SolrFieldModel<String> resourceModel) { 135 134 // list of resources in this record 136 final IModel<List<String>> resourceListModel = new CollectionListModel< String>(resourceModel);135 final IModel<List<String>> resourceListModel = new CollectionListModel<>(resourceModel); 137 136 // use a a pageable view so that the number of resources actually shown is limited 138 137 return new PageableListView<String>(id, resourceListModel, MAX_RESOURCES_TO_SHOW) { -
vlo/branches/vlo-3.3-oeaw/vlo-web-app/src/main/java/eu/clarin/cmdi/vlo/wicket/panels/search/SearchResultItemPanel.java
r6232 r6755 21 21 import eu.clarin.cmdi.vlo.pojo.ExpansionState; 22 22 import eu.clarin.cmdi.vlo.pojo.SearchContext; 23 import eu.clarin.cmdi.vlo.wicket.HighlightSearchTermScriptFactory; 23 24 import eu.clarin.cmdi.vlo.wicket.components.RecordPageLink; 24 25 import eu.clarin.cmdi.vlo.wicket.components.SolrFieldLabel; … … 35 36 import org.apache.wicket.model.IModel; 36 37 import org.apache.wicket.spring.injection.annot.SpringBean; 38 import org.apache.wicket.util.string.Strings; 37 39 38 40 /** … … 44 46 @SpringBean 45 47 private VloConfig config; 46 48 47 49 private final Panel collapsedDetails; 48 50 private final Panel expandedDetails; 49 51 private final IModel<ExpansionState> expansionStateModel; 52 private final IModel<SearchContext> selectionModel; 50 53 51 54 /** … … 61 64 super(id, documentModel); 62 65 this.expansionStateModel = expansionStateModel; 66 this.selectionModel = selectionModel; 63 67 64 68 final Link recordLink = new RecordPageLink("recordLink", documentModel, selectionModel); … … 100 104 // parial update (just this search result item) 101 105 target.add(SearchResultItemPanel.this); 106 107 // in case of a query, update highlight matching search terms after collapse/expand 108 final String query = selectionModel.getObject().getSelection().getQuery(); 109 if (!Strings.isEmpty(query)) { 110 final HighlightSearchTermScriptFactory scriptFactory = new HighlightSearchTermScriptFactory(); 111 final String selector = "#" + SearchResultItemPanel.this.getMarkupId(); 112 target.appendJavaScript(scriptFactory.createScript(selector, query)); 113 } 102 114 } 103 115 } -
vlo/branches/vlo-3.3-oeaw/vlo-web-app/src/main/java/eu/clarin/cmdi/vlo/wicket/panels/search/SearchResultsPanel.java
r6191 r6755 18 18 19 19 import eu.clarin.cmdi.vlo.pojo.QueryFacetsSelection; 20 import eu.clarin.cmdi.vlo.wicket.HighlightSearchTermBehavior; 21 import eu.clarin.cmdi.vlo.wicket.HighlightSearchTermScriptFactory; 20 22 import eu.clarin.cmdi.vlo.wicket.model.SearchContextModel; 21 23 import eu.clarin.cmdi.vlo.wicket.model.SearchResultExpansionStateModel; … … 26 28 import java.util.Set; 27 29 import org.apache.solr.common.SolrDocument; 30 import org.apache.wicket.Component; 31 import org.apache.wicket.ajax.AbstractDefaultAjaxBehavior; 28 32 import org.apache.wicket.ajax.AjaxRequestTarget; 29 33 import org.apache.wicket.ajax.form.AjaxFormComponentUpdatingBehavior; … … 41 45 import org.apache.wicket.model.Model; 42 46 import org.apache.wicket.model.PropertyModel; 47 import org.apache.wicket.util.string.StringValue; 43 48 44 49 /** … … 93 98 //For Ajax updating of search results 94 99 setOutputMarkupId(true); 100 101 add(new HighlightSearchTermBehavior(){ 102 103 @Override 104 protected String getComponentSelector(String componentId) { 105 return ".searchresultitem"; //"h3, .searchresultdescription" 106 } 107 108 @Override 109 protected String getWordList(Component component) { 110 return selectionModel.getObject().getQuery(); 111 } 112 113 }); 95 114 } 96 115 -
vlo/branches/vlo-3.3-oeaw/vlo-web-app/src/main/java/eu/clarin/cmdi/vlo/wicket/panels/search/SimpleSearchBrowsePanel.java
r6494 r6755 29 29 import org.apache.wicket.markup.html.list.ListView; 30 30 import org.apache.wicket.markup.html.panel.GenericPanel; 31 import org.apache.wicket.migrate.StringResourceModelMigration; 31 32 import org.apache.wicket.model.AbstractReadOnlyModel; 32 33 import org.apache.wicket.model.IModel; 33 34 import org.apache.wicket.model.Model; 34 35 import org.apache.wicket.model.PropertyModel; 35 import org.apache.wicket.model.StringResourceModel;36 36 import org.apache.wicket.spring.injection.annot.SpringBean; 37 37 … … 85 85 }; 86 86 // set label on basis of string defined in resource bundle that takes the count model as a parameter 87 browseAllLink.add(new Label("recordCount", new StringResourceModel("simplesearch.allrecords", documentCountModel, new Object[]{})));87 browseAllLink.add(new Label("recordCount", StringResourceModelMigration.of("simplesearch.allrecords", documentCountModel, new Object[]{}))); 88 88 add(browseAllLink); 89 89 … … 113 113 * Model that holds the currently selected facet 114 114 */ 115 private final IModel<String> selectedFacetModel = new Model< String>(null);115 private final IModel<String> selectedFacetModel = new Model<>(null); 116 116 private final IModel<QueryFacetsSelection> selectionModel; 117 117 -
vlo/branches/vlo-3.3-oeaw/vlo-web-app/src/main/java/eu/clarin/cmdi/vlo/wicket/provider/FacetFieldValuesProvider.java
r6040 r6755 88 88 */ 89 89 public FacetFieldValuesProvider(IModel<FacetField> model, int max, Collection<String> lowPriorityValues, FieldValueConverterProvider fieldValueConverterProvider) { 90 this(model, max, lowPriorityValues, new SortParam< FieldValuesOrder>(FieldValuesOrder.COUNT, false), fieldValueConverterProvider);90 this(model, max, lowPriorityValues, new SortParam<>(FieldValuesOrder.COUNT, false), fieldValueConverterProvider); 91 91 } 92 92 … … 122 122 123 123 @Override 124 public Iterator< ? extendsFacetField.Count> iterator(long first, long count) {124 public Iterator<FacetField.Count> iterator(long first, long count) { 125 125 // return iterator starting at specified offset 126 126 return getList().listIterator((int) first); … … 128 128 129 129 @Override 130 public List< ? extendsFacetField.Count> getList() {130 public List<FacetField.Count> getList() { 131 131 final Iterable<Count> filteredValues = getFilteredValues(); 132 132 // sort what remains -
vlo/branches/vlo-3.3-oeaw/vlo-web-app/src/main/java/eu/clarin/cmdi/vlo/wicket/provider/ListProvider.java
r5140 r6755 26 26 public interface ListProvider<T> { 27 27 28 List< ? extendsT> getList();28 List<T> getList(); 29 29 30 30 } -
vlo/branches/vlo-3.3-oeaw/vlo-web-app/src/main/java/eu/clarin/cmdi/vlo/wicket/provider/PartitionedDataProvider.java
r5154 r6755 17 17 package eu.clarin.cmdi.vlo.wicket.provider; 18 18 19 import com.google.common.base.Functions; 19 20 import com.google.common.collect.ImmutableList; 20 21 import com.google.common.collect.Iterators; … … 34 35 * @param <S> the type of the sorting parameter 35 36 */ 36 public class PartitionedDataProvider<T, S> implements ISortableDataProvider<List< ? extendsT>, S> {37 public class PartitionedDataProvider<T, S> implements ISortableDataProvider<List<T>, S> { 37 38 38 private final ISortableDataProvider< ? extendsT, S> provider;39 private final ISortableDataProvider<T, S> provider; 39 40 private final int partitionSize; 40 41 … … 51 52 52 53 @Override 53 public Iterator<? extends List< ? extendsT>> iterator(long first, long count) {54 public Iterator<? extends List<T>> iterator(long first, long count) { 54 55 if (partitionSize > 0) { 55 56 // translate first, count to item level 56 57 final long itemsFirst = first * partitionSize; 57 58 final long itemsCount = count * partitionSize; 59 // reduce wildcard to upper bound (i.e. remove "? extends") 60 final Iterator<T> iterator 61 = Iterators.transform(provider.iterator(itemsFirst, itemsCount), Functions.<T>identity()); 58 62 // split up values 59 return Iterators.partition( provider.iterator(itemsFirst, itemsCount), partitionSize);63 return Iterators.partition(iterator, partitionSize); 60 64 } else { 61 65 // return a single list (wrapped in a singleton iterator) 62 final List< ? extendsT> valuesList;66 final List<T> valuesList; 63 67 if (provider instanceof ListProvider) { 64 68 // get list straight out of provider, prevent double wrapping … … 91 95 92 96 @Override 93 public IModel<List< ? extends T>> model(List<? extendsT> object) {97 public IModel<List<T>> model(List<T> object) { 94 98 // Iterators.partition sometimes returns lists that are not deeply serializable, 95 99 // so we need to copy this into a serializable list here :( -
vlo/branches/vlo-3.3-oeaw/vlo-web-app/src/main/less/eu/clarin/cmdi/vlo/wicket/pages/inc/vlo-search.less
r6350 r6755 143 143 #searchresultitems .searchresultdescription a { 144 144 text-decoration: underline; 145 } 146 147 .searchresultitem .searchword { 148 font-weight: bold; 145 149 } 146 150 -
vlo/branches/vlo-3.3-oeaw/vlo-web-app/src/main/resources/fieldNames.properties
r6291 r6755 42 42 field._hierarchyWeight=Hierarchy level 43 43 field._hasPart=Has part(s) 44 field._hasPartCount=Child count 44 45 field._isPartOf=Is part of -
vlo/branches/vlo-3.3-oeaw/vlo-web-app/src/main/webapp/iframe/vlo-embed-base.html
r6394 r6755 42 42 text-align:left; 43 43 max-width:600px; 44 min-width:270px 44 min-width:270px; 45 45 46 46 margin:8px 15px 2px 20px; -
vlo/branches/vlo-3.3-oeaw/vlo-web-app/src/test/java/eu/clarin/cmdi/vlo/service/solr/impl/SolrFacetQueryFactoryImplTest.java
r6284 r6755 58 58 59 59 // default: query selects all values 60 assert Null(query.getQuery());60 assertEquals("*:*", query.getQuery()); 61 61 62 62 // no selection -> no filter queries … … 82 82 83 83 // default: query selects all values 84 assert Null(query.getQuery());84 assertEquals("*:*", query.getQuery()); 85 85 86 86 // Only empty selections -> no filter queries … … 107 107 108 108 // default: query selects all values 109 assert Null(query.getQuery());109 assertEquals("*:*", query.getQuery()); 110 110 111 111 // Expecting three filter queries as three values have been selected in total
Note: See TracChangeset
for help on using the changeset viewer.