From 3916bcddb998a1e665d684310224accd201d6a02 Mon Sep 17 00:00:00 2001 From: indianauthority97 Date: Thu, 18 May 2017 20:04:09 +0530 Subject: [PATCH 01/36] Added search bar UI --- src/main/java/org/sigmah/client/Sigmah.java | 1 + .../sigmah/client/inject/ClientModule.java | 4 + .../org/sigmah/client/inject/Injector.java | 3 + .../ui/presenter/ApplicationPresenter.java | 5 +- .../ui/presenter/zone/SearchPresenter.java | 82 ++++++++++++ .../client/ui/view/ApplicationView.java | 12 +- .../ui/view/zone/OrganizationBannerView.java | 7 +- .../client/ui/view/zone/SearchView.java | 118 ++++++++++++++++++ .../java/org/sigmah/client/ui/zone/Zone.java | 1 + .../org/sigmah/public/css/sigmah.css | 2 + 10 files changed, 231 insertions(+), 4 deletions(-) create mode 100644 src/main/java/org/sigmah/client/ui/presenter/zone/SearchPresenter.java create mode 100644 src/main/java/org/sigmah/client/ui/view/zone/SearchView.java diff --git a/src/main/java/org/sigmah/client/Sigmah.java b/src/main/java/org/sigmah/client/Sigmah.java index 945d395ee..53788a648 100644 --- a/src/main/java/org/sigmah/client/Sigmah.java +++ b/src/main/java/org/sigmah/client/Sigmah.java @@ -132,6 +132,7 @@ private void clientInitializing() { injector.getAppLoaderPresenter(); injector.getMenuBannerPresenter(); injector.getMessageBannerPresenter(); + injector.getSearchPresenter(); // Pages. injector.getLoginPresenter(); diff --git a/src/main/java/org/sigmah/client/inject/ClientModule.java b/src/main/java/org/sigmah/client/inject/ClientModule.java index fd444c03d..40c0e9f1c 100644 --- a/src/main/java/org/sigmah/client/inject/ClientModule.java +++ b/src/main/java/org/sigmah/client/inject/ClientModule.java @@ -30,6 +30,7 @@ import org.sigmah.client.security.AuthenticationProvider; import org.sigmah.client.security.SecureDispatchAsync; import org.sigmah.client.security.SecureExceptionHandler; +import org.sigmah.client.ui.presenter.zone.SearchPresenter; import org.sigmah.client.ui.theme.SigmahTheme; import org.sigmah.client.ui.theme.Theme; @@ -66,6 +67,9 @@ protected void configure() { // StateManager (for indicators). bind(IStateManager.class).to(GXTStateManager.class); + //possibly later, also other search related classes, like results view + //bind(SearchPresenter.class).in(Singleton.class); + } } diff --git a/src/main/java/org/sigmah/client/inject/Injector.java b/src/main/java/org/sigmah/client/inject/Injector.java index 160b1af70..ff8b546ca 100644 --- a/src/main/java/org/sigmah/client/inject/Injector.java +++ b/src/main/java/org/sigmah/client/inject/Injector.java @@ -99,6 +99,7 @@ import org.sigmah.client.ui.presenter.zone.MessageBannerPresenter; import org.sigmah.client.ui.presenter.zone.OfflineBannerPresenter; import org.sigmah.client.ui.presenter.zone.OrganizationBannerPresenter; +import org.sigmah.client.ui.presenter.zone.SearchPresenter; import org.sigmah.client.ui.theme.Theme; import org.sigmah.offline.dao.FileDataAsyncDAO; import org.sigmah.offline.dao.TransfertAsyncDAO; @@ -178,6 +179,8 @@ public interface Injector extends Ginjector { MenuBannerPresenter getMenuBannerPresenter(); MessageBannerPresenter getMessageBannerPresenter(); + + SearchPresenter getSearchPresenter(); CreditsPresenter getCreditsPresenter(); diff --git a/src/main/java/org/sigmah/client/ui/presenter/ApplicationPresenter.java b/src/main/java/org/sigmah/client/ui/presenter/ApplicationPresenter.java index 3449fd3a1..57507fefc 100644 --- a/src/main/java/org/sigmah/client/ui/presenter/ApplicationPresenter.java +++ b/src/main/java/org/sigmah/client/ui/presenter/ApplicationPresenter.java @@ -35,6 +35,7 @@ import org.sigmah.client.ui.presenter.zone.MessageBannerPresenter; import org.sigmah.client.ui.presenter.zone.OfflineBannerPresenter; import org.sigmah.client.ui.presenter.zone.OrganizationBannerPresenter; +import org.sigmah.client.ui.presenter.zone.SearchPresenter; import org.sigmah.client.ui.view.ApplicationView; import org.sigmah.client.ui.view.base.ViewInterface; import org.sigmah.client.ui.view.base.ViewPopupInterface; @@ -95,7 +96,7 @@ public static interface View extends ViewInterface { */ void initZones(OrganizationBannerPresenter.View organizationBannerView, AuthenticationBannerPresenter.View authenticationBannerPresenter, OfflineBannerPresenter.View offlineBannerPresenter, AppLoaderPresenter.View appLoaderPresenter, MenuBannerPresenter.View menuBannerPresenter, - MessageBannerPresenter.View messageBannerPresenter); + MessageBannerPresenter.View messageBannerPresenter, SearchPresenter.View searchPresenter); /** * Returns the credits widget capable of handling a {@code ClickHandler}. @@ -142,7 +143,7 @@ public ApplicationPresenter(final View view, final Injector injector) { view.initZones(injector.getOrganizationBannerPresenter().getView(), injector.getAuthenticationBannerPresenter().getView(), injector .getOfflineBannerPresenter().getView(), injector.getAppLoaderPresenter().getView(), injector.getMenuBannerPresenter().getView(), injector - .getMessageBannerPresenter().getView()); + .getMessageBannerPresenter().getView(), injector.getSearchPresenter().getView()); } diff --git a/src/main/java/org/sigmah/client/ui/presenter/zone/SearchPresenter.java b/src/main/java/org/sigmah/client/ui/presenter/zone/SearchPresenter.java new file mode 100644 index 000000000..aef5a0c92 --- /dev/null +++ b/src/main/java/org/sigmah/client/ui/presenter/zone/SearchPresenter.java @@ -0,0 +1,82 @@ +package org.sigmah.client.ui.presenter.zone; + +import org.sigmah.client.inject.Injector; +import org.sigmah.client.ui.presenter.base.AbstractZonePresenter; +import org.sigmah.client.ui.view.base.ViewInterface; +import org.sigmah.client.ui.view.zone.SearchView; +import org.sigmah.client.ui.zone.Zone; +import org.sigmah.client.ui.zone.ZoneRequest; + +import com.google.gwt.user.client.ui.HasHTML; +import com.google.gwt.user.client.ui.Panel; +import com.google.inject.ImplementedBy; +import com.google.inject.Inject; +import com.google.inject.Singleton; + +/* + * #%L + * Sigmah + * %% + * Copyright (C) 2010 - 2016 URD + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program. If not, see + * . + * #L% + */ + +/** +* Organization banner presenter displaying organization's name and logo. +* +* @author +*/ + +@Singleton +public class SearchPresenter extends AbstractZonePresenter { + + @Inject + public SearchPresenter(View view, Injector injector) { + super(view, injector); + // TODO Auto-generated constructor stub + } + + /** + * View interface. + */ + @ImplementedBy(SearchView.class) + public static interface View extends ViewInterface { + + HasHTML getNameLabel(); + Panel getSearchBarPanel(); + + } + + /** + * {@inheritDoc} + */ + @Override + public Zone getZone() { + // TODO Auto-generated method stub + return Zone.SEARCH_BANNER; + } + + /** + * {@inheritDoc} + */ + @Override + public void onZoneRequest(ZoneRequest zoneRequest) { + // TODO Auto-generated method stub + + } + +} diff --git a/src/main/java/org/sigmah/client/ui/view/ApplicationView.java b/src/main/java/org/sigmah/client/ui/view/ApplicationView.java index 7cf87859c..a15cf6234 100644 --- a/src/main/java/org/sigmah/client/ui/view/ApplicationView.java +++ b/src/main/java/org/sigmah/client/ui/view/ApplicationView.java @@ -33,6 +33,7 @@ import org.sigmah.client.ui.presenter.zone.MessageBannerPresenter; import org.sigmah.client.ui.presenter.zone.OfflineBannerPresenter; import org.sigmah.client.ui.presenter.zone.OrganizationBannerPresenter; +import org.sigmah.client.ui.presenter.zone.SearchPresenter; import org.sigmah.client.ui.view.base.AbstractView; import org.sigmah.client.ui.view.base.HasPageMessage; import org.sigmah.client.ui.view.zone.MessageBannerView; @@ -48,6 +49,7 @@ import com.google.gwt.user.client.ui.Anchor; import com.google.gwt.user.client.ui.FlowPanel; import com.google.gwt.user.client.ui.HTML; +import com.google.gwt.user.client.ui.HorizontalPanel; import com.google.gwt.user.client.ui.InlineLabel; import com.google.gwt.user.client.ui.IsWidget; import com.google.gwt.user.client.ui.Panel; @@ -178,6 +180,7 @@ private boolean isCalculatedSize(final int width, final int height) { private Panel headerLeftPanel; private Panel headerMenuPanel; private Panel headerMiddlePanel; + private Panel headerMiddleRightPanel; private Panel headerRightPanel; private Panel menuPanel; private Panel messagePanel; @@ -225,6 +228,9 @@ private void buildView() { headerMiddlePanel = new FlowPanel(); headerMiddlePanel.getElement().setId("header-middle"); + + headerMiddleRightPanel = new HorizontalPanel(); + headerMiddleRightPanel.getElement().setId("header-middle-right"); headerRightPanel = new FlowPanel(); headerRightPanel.getElement().setId("header-right"); @@ -234,6 +240,7 @@ private void buildView() { headerPanel.add(headerLeftPanel); headerPanel.add(headerMiddlePanel); + headerPanel.add(headerMiddleRightPanel); headerPanel.add(headerRightPanel); // Menu. @@ -365,7 +372,7 @@ public void hideLoadingPanel() { @Override public void initZones(OrganizationBannerPresenter.View organizationBannerView, AuthenticationBannerPresenter.View authenticationBannerPresenter, OfflineBannerPresenter.View offlineBannerPresenter, AppLoaderPresenter.View appLoaderPresenter, MenuBannerPresenter.View menuBannerPresenter, - MessageBannerPresenter.View messageBannerPresenter) { + MessageBannerPresenter.View messageBannerPresenter, SearchPresenter.View searchView) { // Organization logo. headerLeftPanel.add(organizationBannerView.getLogoPanel()); @@ -375,6 +382,9 @@ public void initZones(OrganizationBannerPresenter.View organizationBannerView, A // Organization name. headerMiddlePanel.add(organizationBannerView.getNamePanel()); + + //here is where I should add my search panels + headerMiddleRightPanel.add(searchView.getSearchBarPanel()); // User name. headerRightPanel.add(authenticationBannerPresenter.getLogoutPanel()); diff --git a/src/main/java/org/sigmah/client/ui/view/zone/OrganizationBannerView.java b/src/main/java/org/sigmah/client/ui/view/zone/OrganizationBannerView.java index 3b8ccb1b5..a69abb2e4 100644 --- a/src/main/java/org/sigmah/client/ui/view/zone/OrganizationBannerView.java +++ b/src/main/java/org/sigmah/client/ui/view/zone/OrganizationBannerView.java @@ -27,6 +27,7 @@ import com.google.gwt.user.client.ui.HTML; import com.google.gwt.user.client.ui.HasHTML; +import com.google.gwt.user.client.ui.HorizontalPanel; import com.google.gwt.user.client.ui.Panel; import com.google.gwt.user.client.ui.SimplePanel; @@ -40,6 +41,7 @@ public class OrganizationBannerView extends AbstractView implements Organization private Panel logoPanel; private Panel namePanel; private HTML nameLabel; + //private HTML searchText; /** * {@inheritDoc} @@ -50,11 +52,14 @@ public void initialize() { logoPanel = new SimplePanel(); logoPanel.getElement().setId("orglogo"); - namePanel = new SimplePanel(); + namePanel = new HorizontalPanel(); namePanel.getElement().setId("orgname"); nameLabel = new HTML(); namePanel.add(nameLabel); + +// searchText = new HTML("Search1"); +// namePanel.add(searchText); // initWidget(); Useless. diff --git a/src/main/java/org/sigmah/client/ui/view/zone/SearchView.java b/src/main/java/org/sigmah/client/ui/view/zone/SearchView.java new file mode 100644 index 000000000..f58142bff --- /dev/null +++ b/src/main/java/org/sigmah/client/ui/view/zone/SearchView.java @@ -0,0 +1,118 @@ +package org.sigmah.client.ui.view.zone; + +import org.sigmah.client.i18n.I18N; + +/* + * #%L + * Sigmah + * %% + * Copyright (C) 2010 - 2016 URD + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program. If not, see + * . + * #L% + */ + +import org.sigmah.client.ui.presenter.zone.SearchPresenter; +import org.sigmah.client.ui.res.icon.IconImageBundle; +import org.sigmah.client.ui.view.base.AbstractView; + +import com.google.gwt.user.client.ui.Button; +import com.google.gwt.user.client.ui.HTML; +import com.google.gwt.user.client.ui.HasHTML; +import com.google.gwt.user.client.ui.HorizontalPanel; +import com.google.gwt.user.client.ui.ListBox; +import com.google.gwt.user.client.ui.Panel; +import com.google.gwt.user.client.ui.SimplePanel; +import com.google.gwt.user.client.ui.TextBox; +import com.google.gwt.user.client.ui.Widget; + + +/** + * Search view (just a widgets set). + * + * @author + */ +public class SearchView extends AbstractView implements SearchPresenter.View { + + private Panel searchBarPanel; + private ListBox searchOptions; + private HTML searchForLabel; + private TextBox searchText; + private Button searchButton; + + /** + * {@inheritDoc} + */ + @Override + public void initialize() { + + + searchBarPanel = new HorizontalPanel(); + searchBarPanel.getElement().setId("search-bar"); + + searchForLabel = new HTML("Search for"); + //searchForLabel.setStylePrimaryName("search-for"); + searchForLabel.getElement().setId("search-for"); + + String[] optionStrings = { "All", "Projects", "OrgUnits", "Contacts", "Files" }; + searchOptions = new ListBox(); + for( int i = 0; i < 5; i++ ){ + searchOptions.addItem(optionStrings[i]); + } + + + searchText = new TextBox(); + searchText.setText("Enter search text"); + + searchButton = new Button("Go"); + + searchBarPanel.add(searchForLabel); + searchBarPanel.add(searchOptions); + searchBarPanel.add(searchText); + searchBarPanel.add(searchButton); + + + // initWidget(); Useless. + + } + + /** + * {@inheritDoc} + */ + @Override + public Panel getSearchBarPanel() { + return searchBarPanel; + } + + + /** + * {@inheritDoc} + */ + @Override + public void onViewRevealed() { + // Nothing to do here. + } + + + /** + * {@inheritDoc} + */ + @Override + public HasHTML getNameLabel() { + return searchForLabel; + } + +} + diff --git a/src/main/java/org/sigmah/client/ui/zone/Zone.java b/src/main/java/org/sigmah/client/ui/zone/Zone.java index 6517aeb45..d5e1fc318 100644 --- a/src/main/java/org/sigmah/client/ui/zone/Zone.java +++ b/src/main/java/org/sigmah/client/ui/zone/Zone.java @@ -44,6 +44,7 @@ public enum Zone implements IsSerializable { OFFLINE_BANNER("offline-banner"), MENU_BANNER("menu-banner"), MESSAGE_BANNER("message-banner"), + SEARCH_BANNER("search-banner"), ; diff --git a/src/main/resources/org/sigmah/public/css/sigmah.css b/src/main/resources/org/sigmah/public/css/sigmah.css index 59af517e2..a418c52ab 100644 --- a/src/main/resources/org/sigmah/public/css/sigmah.css +++ b/src/main/resources/org/sigmah/public/css/sigmah.css @@ -28,6 +28,8 @@ body {font-family:Arial;font-size:8pt} #header{height:56px;width:100%;float:left;background:url(../images/header/header-bg.jpg) repeat-x;clear:both;} #header-left{height:56px;width:135px;float:left;padding-left:25px;background-color:#E86F00;background:url(../images/header/header-bg-left.jpg) no-repeat;} #header-middle{height:56px;width:420px;float:left;background:url(../images/header/header-bg-middle.jpg) no-repeat;} +#header-middle-right{height:56px;float:left;background-color:transparent;vertical-align:middle;padding-top:23px;} +#search-for{font-family:Arial;font-size:11pt;color:#fff;padding-top:2px;padding-right:5px;} #header-right{height:56px;width:360px;float:right;background:url(../images/header/header-bg-right.jpg) no-repeat top right} #orglogo{width:100%;height:100%;background-color:transparent;background-position:left center;background-repeat:no-repeat;opacity:0.5;} #orgname{height:40px;width:420px;float:left;padding-top:9px;padding-left:6px;font-size:18px;font-weight:700;color:#fff;clear:both;text-transform:uppercase;} From 17b6d5fc32891fda2951dd1d608022bda53c30ad Mon Sep 17 00:00:00 2001 From: indianauthority97 Date: Wed, 24 May 2017 00:23:36 +0530 Subject: [PATCH 02/36] Worked on SearchResults classes --- src/main/java/org/sigmah/client/Sigmah.java | 1 + .../org/sigmah/client/inject/Injector.java | 3 + .../java/org/sigmah/client/page/Page.java | 6 +- .../ui/presenter/SearchResultsPresenter.java | 568 ++++++++++++++++++ .../ui/presenter/zone/SearchPresenter.java | 191 ++++++ .../client/ui/view/SearchResultsView.java | 560 +++++++++++++++++ .../client/ui/view/zone/SearchView.java | 31 +- 7 files changed, 1357 insertions(+), 3 deletions(-) create mode 100644 src/main/java/org/sigmah/client/ui/presenter/SearchResultsPresenter.java create mode 100644 src/main/java/org/sigmah/client/ui/view/SearchResultsView.java diff --git a/src/main/java/org/sigmah/client/Sigmah.java b/src/main/java/org/sigmah/client/Sigmah.java index 53788a648..75c00cbbb 100644 --- a/src/main/java/org/sigmah/client/Sigmah.java +++ b/src/main/java/org/sigmah/client/Sigmah.java @@ -166,6 +166,7 @@ private void clientInitializing() { injector.getReportCreatePresenter(); injector.getAttachFilePresenter(); injector.getImportationPresenter(); + injector.getSearchResultsPresenter(); injector.getAdminPresenter(); injector.getUsersAdminPresenter(); diff --git a/src/main/java/org/sigmah/client/inject/Injector.java b/src/main/java/org/sigmah/client/inject/Injector.java index ff8b546ca..e58874b51 100644 --- a/src/main/java/org/sigmah/client/inject/Injector.java +++ b/src/main/java/org/sigmah/client/inject/Injector.java @@ -35,6 +35,7 @@ import org.sigmah.client.ui.presenter.HelpPresenter; import org.sigmah.client.ui.presenter.LoginPresenter; import org.sigmah.client.ui.presenter.MockUpPresenter; +import org.sigmah.client.ui.presenter.SearchResultsPresenter; import org.sigmah.client.ui.presenter.admin.AdminPresenter; import org.sigmah.client.ui.presenter.admin.CategoriesAdminPresenter; import org.sigmah.client.ui.presenter.admin.ParametersAdminPresenter; @@ -207,6 +208,8 @@ public interface Injector extends Ginjector { AttachFilePresenter getAttachFilePresenter(); ImportationPresenter getImportationPresenter(); + + SearchResultsPresenter getSearchResultsPresenter(); // ---- Project presenters. diff --git a/src/main/java/org/sigmah/client/page/Page.java b/src/main/java/org/sigmah/client/page/Page.java index a3b750cc5..34b5a9b14 100644 --- a/src/main/java/org/sigmah/client/page/Page.java +++ b/src/main/java/org/sigmah/client/page/Page.java @@ -114,7 +114,9 @@ public enum Page implements IsSerializable { CREDITS("credits", true), HELP("help", true), CREATE_PROJECT("create-project", true), - IMPORT_VALUES("import-values"), ; + IMPORT_VALUES("import-values"), + //aditya + SEARCH_RESULTS("search-results") ; private final String parentKey; private final String token; @@ -320,6 +322,8 @@ public static String getTitle(final Page page) { return I18N.CONSTANTS.adminboard(); case CREATE_PROJECT: return I18N.CONSTANTS.createProject(); + case SEARCH_RESULTS: + return "search-results"; default: return PropertyName.error(page.token); } diff --git a/src/main/java/org/sigmah/client/ui/presenter/SearchResultsPresenter.java b/src/main/java/org/sigmah/client/ui/presenter/SearchResultsPresenter.java new file mode 100644 index 000000000..c515f2bbf --- /dev/null +++ b/src/main/java/org/sigmah/client/ui/presenter/SearchResultsPresenter.java @@ -0,0 +1,568 @@ +package org.sigmah.client.ui.presenter; + +/* + * #%L + * Sigmah + * %% + * Copyright (C) 2010 - 2016 URD + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program. If not, see + * . + * #L% + */ + + +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +import org.sigmah.client.dispatch.CommandResultHandler; +import org.sigmah.client.dispatch.monitor.LoadingMask; +import org.sigmah.client.i18n.I18N; +import org.sigmah.client.inject.Injector; +import org.sigmah.client.page.Page; +import org.sigmah.client.page.PageRequest; +import org.sigmah.client.page.RequestParameter; +import org.sigmah.client.ui.presenter.base.AbstractPagePresenter; +import org.sigmah.client.ui.presenter.contact.dashboardlist.ContactsListWidget; +import org.sigmah.client.ui.presenter.project.treegrid.ProjectsListWidget; +import org.sigmah.client.ui.presenter.project.treegrid.ProjectsListWidget.LoadingMode; +import org.sigmah.client.ui.presenter.project.treegrid.ProjectsListWidget.RefreshMode; +import org.sigmah.client.ui.res.icon.IconImageBundle; +import org.sigmah.client.ui.view.DashboardView; +import org.sigmah.client.ui.view.SearchResultsView; +import org.sigmah.client.ui.view.base.ViewInterface; +import org.sigmah.client.ui.widget.HasTreeGrid.TreeGridEventHandler; +import org.sigmah.client.ui.widget.WorkInProgressWidget; +import org.sigmah.client.ui.widget.orgunit.OrgUnitTreeGrid; +import org.sigmah.client.util.ClientUtils; +import org.sigmah.shared.command.GetMonitoredPoints; +import org.sigmah.shared.command.GetOrgUnits; +import org.sigmah.shared.command.GetReminders; +import org.sigmah.shared.command.result.ListResult; +import org.sigmah.shared.dto.orgunit.OrgUnitDTO; +import org.sigmah.shared.dto.referential.GlobalPermissionEnum; +import org.sigmah.shared.dto.reminder.MonitoredPointDTO; +import org.sigmah.shared.dto.reminder.ReminderDTO; +import org.sigmah.shared.util.ProfileUtils; + +import com.allen_sauer.gwt.log.client.Log; +import com.extjs.gxt.ui.client.event.BaseEvent; +import com.extjs.gxt.ui.client.event.ButtonEvent; +import com.extjs.gxt.ui.client.event.Events; +import com.extjs.gxt.ui.client.event.Listener; +import com.extjs.gxt.ui.client.store.ListStore; +import com.extjs.gxt.ui.client.widget.Component; +import com.google.gwt.user.client.rpc.AsyncCallback; +import com.google.gwt.user.client.ui.AbstractImagePrototype; +import com.google.inject.ImplementedBy; +import com.google.inject.Inject; +import com.google.inject.Singleton; +import org.sigmah.client.event.OfflineEvent; +import org.sigmah.client.event.handler.OfflineHandler; +import org.sigmah.client.ui.notif.ConfirmCallback; +import org.sigmah.client.ui.notif.N10N; +import org.sigmah.client.ui.zone.Zone; +import org.sigmah.client.util.profiler.Checkpoint; +import org.sigmah.client.util.profiler.Execution; +import org.sigmah.client.util.profiler.ExecutionAsyncDAO; +import org.sigmah.client.util.profiler.Profiler; +import org.sigmah.client.util.profiler.Scenario; +import org.sigmah.offline.status.ApplicationState; +import org.sigmah.offline.sync.UpdateDates; +import org.sigmah.shared.command.SendProbeReport; +import org.sigmah.shared.command.result.Result; +import org.sigmah.shared.dto.profile.CheckPointDTO; +import org.sigmah.shared.dto.profile.ExecutionDTO; + +/** + * Dashboard page presenter. + * + * @author Tom Miette (tmiette@ideia.fr) + * @author Denis Colliot (dcolliot@ideia.fr) + */ +@Singleton +public class SearchResultsPresenter extends AbstractPagePresenter { + + public static interface ReminderOrMonitoredPointHandler{ + public void onLabelClickEvent(Integer projectId); + } + + /** + * View interface. + */ + @ImplementedBy(SearchResultsView.class) + public static interface View extends ViewInterface { + + void setReminderOrMonitoredPointHandler(ReminderOrMonitoredPointHandler handler); + + + /** + * Returns the reminders wrapper component. + * + * @return The reminders wrapper component. + */ + Component getRemindersPanel(); + + /** + * Returns the reminders list store. + * + * @return The reminders list store. + */ + ListStore getRemindersStore(); + + /** + * Returns the monitored points wrapper component. + * + * @return The monitored points wrapper component. + */ + Component getMonitoredPointsPanel(); + + /** + * Returns the monitored points list store. + * + * @return The monitored points list store. + */ + ListStore getMonitoredPointsStore(); + + /** + * Clears the menu buttons component and removes all the buttons. + */ + void clearMenuButtons(); + + /** + * Adds a navigation button to the menu buttons panel. + * + * @param buttonText + * (required) The button label. + * @param buttonIcon + * (optional) Button icon displayed next to the label. + * @param clickHandler + * The button click handler implementation. + */ + void addMenuButton(final String buttonText, final AbstractImagePrototype buttonIcon, final Listener clickHandler); + + /** + * Ask the button panel to relayout itself. + */ + void layoutButtons(); + + /** + * Ask the main container to relayout itself. + */ + void layoutViews(); + + /** + * Returns the OrgUnit tree grid component. + * + * @return The OrgUnit tree grid component. + */ + OrgUnitTreeGrid getOrgUnitsTreeGrid(); + + /** + * Sets the org units panel header title. + * + * @param title + * The new title. + */ + void setPanelsTitleSuffix(String title); + + /** + * Returns the {@link ContactsListWidget} widget. + * + * @return The contacts list widget. + */ + ContactsListWidget getContactsList(); + + /** + * Returns the {@link ProjectsListWidget} widget. + * + * @return The projects list widget. + */ + ProjectsListWidget getProjectsList(); + + } + + private Integer lastUserId; + + private final ExecutionAsyncDAO executionAsyncDAO = new ExecutionAsyncDAO(); + + /** + * Presenters's initialization. + * + * @param view + * Presenter's view interface. + * @param injector + * Injected client injector. + */ + @Inject + public SearchResultsPresenter(final View view, final Injector injector) { + super(view, injector); + } + + /** + * {@inheritDoc} + */ + @Override + public Page getPage() { + return Page.SEARCH_RESULTS; + } + + /** + * {@inheritDoc} + */ + @Override + public void onBind() { + + // Org units tree grid events handler. + view.getOrgUnitsTreeGrid().setTreeGridEventHandler(new TreeGridEventHandler() { + + @Override + public void onRowClickEvent(final OrgUnitDTO rowElement) { + eventBus.navigateRequest(Page.ORGUNIT_DASHBOARD.requestWith(RequestParameter.ID, rowElement.getId())); + } + }); + + if (auth().getSecondaryOrgUnitIds().isEmpty()) { + view.getOrgUnitsTreeGrid().getDisplayOnlyMainOrgUnitCheckbox().setVisible(false); + } else { + view.getOrgUnitsTreeGrid().getDisplayOnlyMainOrgUnitCheckbox().setValue(true); + view.getOrgUnitsTreeGrid().getDisplayOnlyMainOrgUnitCheckbox().addListener(Events.Change, new Listener() { + @Override + public void handleEvent(BaseEvent event) { + loadReminders(); + loadMonitoredPoints(); + loadContacts(); + loadProjects(true); + loadOrgUnits(); + } + }); + } + + // Projects widget initialization. + view.getProjectsList().init(RefreshMode.ON_FIRST_TIME, LoadingMode.CHUNK); + + + view.setReminderOrMonitoredPointHandler(new ReminderOrMonitoredPointHandler() { + @Override + public void onLabelClickEvent(Integer projectId) { + Profiler.INSTANCE.startScenario(Scenario.OPEN_PROJECT); + eventBus.navigateRequest(Page.PROJECT_DASHBOARD.requestWith(RequestParameter.ID, projectId)); + } + }); + + // Listening to connection state changes to refresh the available buttons. + // Fixes mantis #682 and #683 + eventBus.addHandler(OfflineEvent.getType(), new OfflineHandler() { + + @Override + public void handleEvent(OfflineEvent event) { + initializeMenuButtons(event.getState()); + } + }); + } + + /** + * {@inheritDoc} + */ + @Override + public void onPageRequest(final PageRequest request) { + + // Reloads the reminders store. + loadReminders(); + + // Reloads the monitored points store. + loadMonitoredPoints(); + + // Initializes menu buttons. + initializeMenuButtons(); + + // Reloads OrgUnits. + loadOrgUnits(); + + // Reloads contacts. + loadContacts(); + + // Reloads projects. + loadProjects(false); + + // Ask the user to synchronize its favorite projects. + // BUGFIX #701: only showing this message if the user is online. + final boolean userIsOnline = injector.getApplicationStateManager().getState() == ApplicationState.ONLINE; + final boolean userIsDifferent = auth().getUserId() != null && !auth().getUserId().equals(lastUserId); + final boolean userHasSynchronized = UpdateDates.getDatabaseUpdateDate(auth()) != null; + if(userIsOnline && userIsDifferent && !userHasSynchronized) { + N10N.confirmation(I18N.CONSTANTS.offlineModeHeader(), I18N.CONSTANTS.sigmahOfflineWelcome(), new ConfirmCallback() { + + @Override + public void onAction() { + eventBus.updateZoneRequest(Zone.OFFLINE_BANNER.requestWith(RequestParameter.PULL_DATABASE, true)); + } + }); + } + lastUserId = auth().getUserId(); + } + + @Override + protected void onViewRevealed() { + // BUGFIX #786: Relayout the views on reveal to avoid having the last project hidden. + view.layoutViews(); + } + + // ------------------------------------------------------------------------------------------- + // + // UTILITY METHODS. + // + // ------------------------------------------------------------------------------------------- + + /** + * Performs a dispatch command to load the reminders list and populates the view store. + */ + private void loadReminders() { + Set orgUnitIds = getOrgUnitIds(); + + dispatch.execute(new GetReminders(ReminderDTO.Mode.BASE, orgUnitIds), new CommandResultHandler>() { + + @Override + public void onCommandSuccess(final ListResult result) { + + final List reminderListToLoad = new ArrayList(); + + // Only show the undeleted reminders. + for (final ReminderDTO reminder : result.getList()) { + + // TODO [PERF] Filter should be performed on server-side. + final Boolean deleted = reminder.getDeleted(); + + if (Log.isDebugEnabled()) { + Log.debug("Deleted reminder? " + deleted); + } + + if (ClientUtils.isNotTrue(deleted)) { + reminderListToLoad.add(reminder); + } + } + + view.getRemindersStore().removeAll(); + view.getRemindersStore().add(reminderListToLoad); + } + }, new LoadingMask(view.getRemindersPanel())); + } + + /** + * Performs a dispatch command to load the monitored points list and populates the view store. + */ + private void loadMonitoredPoints() { + Set orgUnitIds = getOrgUnitIds(); + + dispatch.execute(new GetMonitoredPoints(MonitoredPointDTO.Mode.BASE, orgUnitIds), new CommandResultHandler>() { + + @Override + public void onCommandSuccess(final ListResult result) { + + final List pointListToLoad = new ArrayList(); + + // Only show the undeleted monitored points. + for (final MonitoredPointDTO p : result.getList()) { + + // TODO [PERF] Filter should be performed on server-side. + final Boolean deleted = p.getDeleted(); + + if (Log.isDebugEnabled()) { + Log.debug("Deleted monitored point? " + deleted); + } + + if (ClientUtils.isNotTrue(deleted)) { + pointListToLoad.add(p); + } + } + + view.getMonitoredPointsStore().removeAll(); + view.getMonitoredPointsStore().add(pointListToLoad); + } + }, new LoadingMask(view.getMonitoredPointsPanel())); + } + + /** + * Initializes menu buttons based on authenticated user profile permissions. + */ + private void initializeMenuButtons() { + initializeMenuButtons(injector.getApplicationStateManager().getState()); + } + + private void initializeMenuButtons(ApplicationState applicationState) { + + view.clearMenuButtons(); + + final boolean online = applicationState == ApplicationState.UNKNOWN || applicationState == ApplicationState.ONLINE; + + // Create project. + if (online && ProfileUtils.isGranted(auth(), GlobalPermissionEnum.CREATE_PROJECT)) { + + final PageRequest request = new PageRequest(Page.CREATE_PROJECT); + request.addParameter(RequestParameter.TYPE, CreateProjectPresenter.Mode.PROJECT); + + view.addMenuButton(I18N.CONSTANTS.createProjectNewProject(), IconImageBundle.ICONS.add(), new ButtonClickHandler(request)); + } + + // Draft project. + if (online && ProfileUtils.isGranted(auth(), GlobalPermissionEnum.CREATE_TEST_PROJECT)) { + + final PageRequest request = new PageRequest(Page.CREATE_PROJECT); + request.addParameter(RequestParameter.TYPE, CreateProjectPresenter.Mode.TEST_PROJECT); + + view.addMenuButton(I18N.CONSTANTS.createTestProject(), IconImageBundle.ICONS.add(), new ButtonClickHandler(request)); + } + + // Users administration. + if (online && ProfileUtils.isGranted(auth(), GlobalPermissionEnum.VIEW_ADMIN)) { + view.addMenuButton(I18N.CONSTANTS.adminboard(), IconImageBundle.ICONS.setup(), new ButtonClickHandler(getDefaultAdminPage())); + } + + // Import. + if (online && ProfileUtils.isGranted(auth(), GlobalPermissionEnum.IMPORT_BUTTON)) { + view.addMenuButton(I18N.CONSTANTS.importItem(), null, new ButtonClickHandler(Page.IMPORT_VALUES)); + } + + + // TODO Handle other menus buttons. + // There are two ways to show these menus (authentication / profile). + // if (auth().isShowMenus()) { + // view.addMenuButton(I18N.CONSTANTS.dataEntry(), IconImageBundle.ICONS.dataEntry(), new SiteGridPageState()); + // view.addMenuButton(I18N.CONSTANTS.reports(), IconImageBundle.ICONS.report(), new ReportListPageState()); + // view.addMenuButton(I18N.CONSTANTS.charts(), IconImageBundle.ICONS.barChart(), new ChartPageState()); + // view.addMenuButton(I18N.CONSTANTS.maps(), IconImageBundle.ICONS.map(), new MapPageState()); + // view.addMenuButton(I18N.CONSTANTS.tables(), IconImageBundle.ICONS.table(), new PivotPageState()); + // view.addMenuButton(I18N.CONSTANTS.setup(), IconImageBundle.ICONS.setup(), new DbListPageState()); + // } + + view.layoutButtons(); + } + + /** + * Find the page of the administration to show by default for the current user. + * + * @return First page of the administration to show. + */ + private Page getDefaultAdminPage() { + final Page[] administrationPages = new Page[] { + Page.ADMIN_USERS, Page.ADMIN_ORG_UNITS, + Page.ADMIN_PROJECTS_MODELS, Page.ADMIN_ORG_UNITS_MODELS, + Page.ADMIN_CONTACT_MODELS, Page.ADMIN_REPORTS_MODELS, + Page.ADMIN_CATEGORIES, Page.ADMIN_IMPORTATION_SCHEME, + Page.ADMIN_PARAMETERS + }; + + final GlobalPermissionEnum[] accessRights = new GlobalPermissionEnum[] { + GlobalPermissionEnum.MANAGE_USERS, GlobalPermissionEnum.MANAGE_ORG_UNITS, + GlobalPermissionEnum.MANAGE_PROJECT_MODELS, GlobalPermissionEnum.MANAGE_ORG_UNIT_MODELS, + GlobalPermissionEnum.MANAGE_CONTACT_MODELS, GlobalPermissionEnum.MANAGE_REPORT_MODELS, + GlobalPermissionEnum.MANAGE_CATEGORIES, GlobalPermissionEnum.MANAGE_IMPORTATION_SCHEMES, + GlobalPermissionEnum.MANAGE_SETTINGS + }; + + for(int index = 0; index < accessRights.length; index++) { + if (accessRights[index] == null || ProfileUtils.isGranted(auth(), accessRights[index])) { + return administrationPages[index]; + } + } + + return Page.ADMIN_USERS; + } + + /** + * {@link Listener} implementation navigating to a given {@link PageRequest}. + * + * @author Denis Colliot (dcolliot@ideia.fr) + */ + private class ButtonClickHandler implements Listener { + + private final PageRequest request; + + private ButtonClickHandler(final Page page) { + this.request = page != null ? page.request() : null; + } + + private ButtonClickHandler(final PageRequest request) { + this.request = request; + } + + /** + * {@inheritDoc} + */ + @Override + public void handleEvent(final ButtonEvent be) { + + if (request != null) { + eventBus.navigateRequest(request); + + } else { + WorkInProgressWidget.popup(true); + } + } + } + + private void loadContacts() { + if (view.getContactsList() != null) { + view.getContactsList().refresh(view.getOrgUnitsTreeGrid().getDisplayOnlyMainOrgUnitCheckbox().getValue()); + } + } + + private void loadProjects(boolean forceRefresh) { + if (view.getOrgUnitsTreeGrid().getDisplayOnlyMainOrgUnitCheckbox().getValue()) { + view.getProjectsList().refresh(true, forceRefresh, auth().getMainOrgUnitId()); + } else { + view.getProjectsList().refresh(true, forceRefresh, auth().getOrgUnitIds().toArray(new Integer[auth().getOrgUnitIds().size()])); + } + } + + /** + * Retrieves OrgUnits and populates tree grid store. + */ + private void loadOrgUnits() { + Set orgUnitIds = getOrgUnitIds(); + dispatch.execute(new GetOrgUnits(orgUnitIds, OrgUnitDTO.Mode.WITH_TREE), new CommandResultHandler>() { + @Override + public void onCommandSuccess(final ListResult result) { + view.getOrgUnitsTreeGrid().getStore().removeAll(); + view.getOrgUnitsTreeGrid().getStore().add(result.getData(), true); + for (OrgUnitDTO orgUnitDTO : view.getOrgUnitsTreeGrid().getStore().getRootItems()) { + view.getOrgUnitsTreeGrid().getTreeGrid().setExpanded(orgUnitDTO, true, false); + } + + OrgUnitDTO mainOrgUnitDTO = view.getOrgUnitsTreeGrid().getStore().findModel(OrgUnitDTO.ID, auth().getMainOrgUnitId()); + String panelTitle = " - "; + if (auth().getSecondaryOrgUnitIds().isEmpty()) { + panelTitle += mainOrgUnitDTO.getName() + " (" + mainOrgUnitDTO.getFullName() + ")"; + } else if (view.getOrgUnitsTreeGrid().getDisplayOnlyMainOrgUnitCheckbox().getValue()) { + panelTitle += I18N.CONSTANTS.myMainOrganisationalUnitPanelTitle() + " " + mainOrgUnitDTO.getName() + " (" + mainOrgUnitDTO.getFullName() + ")"; + } else { + panelTitle += I18N.CONSTANTS.allMyOrganisationalUnitsPanelTitle(); + } + view.setPanelsTitleSuffix(panelTitle); + } + }); + } + + Set getOrgUnitIds() { + Set orgUnitIds = new HashSet(); + if (view.getOrgUnitsTreeGrid().getDisplayOnlyMainOrgUnitCheckbox().getValue()) { + orgUnitIds.add(auth().getMainOrgUnitId()); + } else { + orgUnitIds.addAll(auth().getOrgUnitIds()); + } + return orgUnitIds; + } +} diff --git a/src/main/java/org/sigmah/client/ui/presenter/zone/SearchPresenter.java b/src/main/java/org/sigmah/client/ui/presenter/zone/SearchPresenter.java index aef5a0c92..51bcf781d 100644 --- a/src/main/java/org/sigmah/client/ui/presenter/zone/SearchPresenter.java +++ b/src/main/java/org/sigmah/client/ui/presenter/zone/SearchPresenter.java @@ -1,14 +1,35 @@ package org.sigmah.client.ui.presenter.zone; +import java.util.HashMap; +import java.util.Map; + +import org.sigmah.client.event.UpdateEvent; +import org.sigmah.client.event.handler.UpdateHandler; +import org.sigmah.client.i18n.I18N; import org.sigmah.client.inject.Injector; +import org.sigmah.client.page.Page; +import org.sigmah.client.page.PageRequest; +import org.sigmah.client.page.RequestParameter; import org.sigmah.client.ui.presenter.base.AbstractZonePresenter; +import org.sigmah.client.ui.presenter.zone.MenuBannerPresenter.MenuTabId; import org.sigmah.client.ui.view.base.ViewInterface; import org.sigmah.client.ui.view.zone.SearchView; +import org.sigmah.client.ui.widget.tab.Tab; +import org.sigmah.client.ui.widget.tab.TabBar; +import org.sigmah.client.ui.widget.tab.TabId; +import org.sigmah.client.ui.widget.tab.TabBar.TabBarListener; import org.sigmah.client.ui.zone.Zone; import org.sigmah.client.ui.zone.ZoneRequest; +import org.sigmah.client.util.ClientUtils; +import org.sigmah.shared.conf.PropertyName; +import com.google.gwt.event.dom.client.ClickEvent; +import com.google.gwt.event.dom.client.ClickHandler; +import com.google.gwt.user.client.ui.Button; import com.google.gwt.user.client.ui.HasHTML; +import com.google.gwt.user.client.ui.ListBox; import com.google.gwt.user.client.ui.Panel; +import com.google.gwt.user.client.ui.TextBox; import com.google.inject.ImplementedBy; import com.google.inject.Inject; import com.google.inject.Singleton; @@ -49,6 +70,11 @@ public SearchPresenter(View view, Injector injector) { super(view, injector); // TODO Auto-generated constructor stub } + + /** + * Project tab id. + */ + private final static String SEARCH_RESULTS_TAB_ID="searchResultsTabId"; /** * View interface. @@ -58,6 +84,9 @@ public static interface View extends ViewInterface { HasHTML getNameLabel(); Panel getSearchBarPanel(); + ListBox getSearchOptions(); + TextBox getSearchText(); + Button getSearchButton(); } @@ -69,6 +98,168 @@ public Zone getZone() { // TODO Auto-generated method stub return Zone.SEARCH_BANNER; } + + /** + * Utility method to add a tab. + * + * @param request + * The page request. + */ + private void addTab(final PageRequest request) { + + // Login case? + if (Page.LOGIN.equals(request.getPage()) || Page.RESET_PASSWORD.equals(request.getPage())) { + return; + } + + boolean closeable = true; + String styleName = "default"; + + // Homepage case ? + if (Page.SEARCH_RESULTS.equals(request.getPage())) { + closeable = false; + styleName = "home"; + } + + // Builds the tab. + final Tab tab = new Tab(new MenuTabId(request), closeable, styleName); + + if(request.getPage()==Page.SEARCH_RESULTS){ + tab.getElement().setId(DASHBOARD_HOME_TAB_ID); + } + // Adds the tab. + view.getTabBar().addTab(tab); + requests.put(tab.getId(), new PageRequest(request)); // Important: create a new instance. + + // Sets the first title. + final String pageTitle = Page.getTitle(request.getPage()); + final String tabTitle = ClientUtils.isNotBlank(pageTitle) && !PropertyName.isErrorKey(pageTitle) ? pageTitle : I18N.CONSTANTS.loading(); + view.getTabBar().updateTitle(tab.getId(), tabTitle); + + } + + /** + * Builds the unique tab id from the page request. + * + * @author Tom Miette (tmiette@ideia.fr) + */ + private static class MenuTabId implements TabId { + + private final String token; + private final Map params; + + private MenuTabId(final PageRequest request) { + + this.token = request.getPage().getParentKey() != null ? request.getPage().getParentKey() : request.getPage().getToken(); + this.params = request.getParameters(true); + + } + + /** + * {@inheritDoc} + */ + @Override + public boolean equals(Object obj) { + + if (obj == null) { + return false; + } + if (getClass() != obj.getClass()) { + return false; + } + + final MenuTabId other = (MenuTabId) obj; + + // Compares tokens. + boolean equals = token.equals(other.token); + + // Compares parameters maps sizes. + if (equals) { + equals &= params.size() == other.params.size(); + } + + // Compares parameters keys and values. + if (equals) { + for (final Map.Entry entry : params.entrySet()) { + + // Key exists ? + if (!other.params.keySet().contains(entry.getKey())) { + equals = false; + break; + } + + // Values equals ? + if (!entry.getValue().equals(other.params.get(entry.getKey()))) { + equals = false; + break; + } + + } + } + + return equals; + + } + + /** + * {@inheritDoc} + */ + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((params == null) ? 0 : params.hashCode()); + result = prime * result + ((token == null) ? 0 : token.hashCode()); + return result; + } + + } + + /** + * {@inheritDoc} + */ + @Override + public void onBind() { + + view.getSearchButton().addClickHandler(new ClickHandler() { + + @Override + public void onClick(ClickEvent event) { + // Add the search results tab. + addTab(new PageRequest(Page.SEARCH_RESULTS)); + } + + }); + + + + // Project delete event handler. + registerHandler(eventBus.addHandler(UpdateEvent.getType(), new UpdateHandler() { + + @Override + public void onUpdate(final UpdateEvent event) { + + if (event.concern(UpdateEvent.PROJECT_DELETE)) { + final PageRequest request = event.getParam(0); + view.getTabBar().removeTab(new MenuTabId(request)); + } + } + })); + + // Contact delete event handler. + registerHandler(eventBus.addHandler(UpdateEvent.getType(), new UpdateHandler() { + + @Override + public void onUpdate(final UpdateEvent event) { + + if (event.concern(UpdateEvent.CONTACT_DELETE)) { + final PageRequest request = event.getParam(0); + view.getTabBar().removeTab(new MenuTabId(request)); + } + } + })); + + } /** * {@inheritDoc} diff --git a/src/main/java/org/sigmah/client/ui/view/SearchResultsView.java b/src/main/java/org/sigmah/client/ui/view/SearchResultsView.java new file mode 100644 index 000000000..6f884339a --- /dev/null +++ b/src/main/java/org/sigmah/client/ui/view/SearchResultsView.java @@ -0,0 +1,560 @@ + +package org.sigmah.client.ui.view; + +/* + * #%L + * Sigmah + * %% + * Copyright (C) 2010 - 2016 URD + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program. If not, see + * . + * #L% + */ + + +import java.util.Arrays; +import java.util.Date; +import java.util.List; + +import org.sigmah.client.i18n.I18N; +import org.sigmah.client.ui.presenter.SearchResultsPresenter; +import org.sigmah.client.ui.presenter.contact.dashboardlist.ContactsListWidget; +import org.sigmah.client.ui.presenter.project.treegrid.ProjectsListWidget; +import org.sigmah.client.ui.res.icon.IconImageBundle; +import org.sigmah.client.ui.view.base.AbstractView; +import org.sigmah.client.ui.widget.button.Button; +import org.sigmah.client.ui.widget.form.Forms; +import org.sigmah.client.ui.widget.layout.Layouts; +import org.sigmah.client.ui.widget.layout.Layouts.Margin; +import org.sigmah.client.ui.widget.orgunit.OrgUnitTreeGrid; +import org.sigmah.client.ui.widget.panel.Panels; +import org.sigmah.client.util.ClientUtils; +import org.sigmah.client.util.DateUtils; +import org.sigmah.shared.dto.reminder.MonitoredPointDTO; +import org.sigmah.shared.dto.reminder.ReminderDTO; + +import com.extjs.gxt.ui.client.Style.LayoutRegion; +import com.extjs.gxt.ui.client.event.ButtonEvent; +import com.extjs.gxt.ui.client.event.Events; +import com.extjs.gxt.ui.client.event.Listener; +import com.extjs.gxt.ui.client.store.ListStore; +import com.extjs.gxt.ui.client.widget.Component; +import com.extjs.gxt.ui.client.widget.ContentPanel; +import com.extjs.gxt.ui.client.widget.Label; +import com.extjs.gxt.ui.client.widget.LayoutContainer; +import com.extjs.gxt.ui.client.widget.grid.ColumnConfig; +import com.extjs.gxt.ui.client.widget.grid.ColumnData; +import com.extjs.gxt.ui.client.widget.grid.ColumnModel; +import com.extjs.gxt.ui.client.widget.grid.Grid; +import com.extjs.gxt.ui.client.widget.grid.GridCellRenderer; +import com.extjs.gxt.ui.client.widget.grid.filters.DateFilter; +import com.extjs.gxt.ui.client.widget.grid.filters.GridFilters; +import com.extjs.gxt.ui.client.widget.grid.filters.StringFilter; +import com.google.gwt.event.dom.client.ClickEvent; +import com.google.gwt.event.dom.client.ClickHandler; +import com.google.gwt.i18n.client.DateTimeFormat; +import com.google.gwt.user.client.ui.AbstractImagePrototype; +import com.google.gwt.user.client.ui.Widget; +import com.google.inject.Inject; +import com.google.inject.Provider; +import com.google.inject.Singleton; +import org.sigmah.client.ui.presenter.DashboardPresenter.ReminderOrMonitoredPointHandler; + + +/** + * Dashboard view. + * + * @author Tom Miette (tmiette@ideia.fr) + * @author Denis Colliot (dcolliot@ideia.fr) + */ +@Singleton +public class SearchResultsView extends AbstractView implements SearchResultsPresenter.View { + + /** + * Reminders expected date label style name. + */ + private static final String EXPECTED_DATE_LABEL_STYLE = "points-date-exceeded"; + + @Inject + private Provider contactsListWidgetProvider; + + @Inject + private Provider projectsListWidgetProvider; + + private ContentPanel remindersPanel; + private ListStore remindersStore; + + private ContentPanel monitoredPointsPanel; + private ListStore monitoredPointsStore; + + private LayoutContainer menuButtonsContainer; + + private ContentPanel orgUnitsPanel; + private OrgUnitTreeGrid orgUnitsTreeGrid; + + private ContactsListWidget contactsListWidget; + + private ProjectsListWidget projectsListWidget; + + private static ReminderOrMonitoredPointHandler handler; + + final ReminderOrMonitoredPointHandler getReminderOrMonitoredPointHandler() { + return handler; + } + + /** + * {@inheritDoc} + */ + + @Override + public void setReminderOrMonitoredPointHandler( SearchResultsPresenter.ReminderOrMonitoredPointHandler handler) { + // TODO Auto-generated method stub + + } + + /** + * {@inheritDoc} + */ + @Override + public void initialize() { + + // -- + // Left panel (Reminders + MonitoredPoints + Buttons). + // -- + final LayoutContainer leftContainer = Layouts.vBox(); + + leftContainer.add(createRemindersPanel(), Layouts.vBoxData(Margin.BOTTOM)); + leftContainer.add(createMonitoredPointsPanel(), Layouts.vBoxData(Margin.BOTTOM)); + leftContainer.add(createMenuButtonsPanel(), Layouts.vBoxData()); + + add(leftContainer, Layouts.borderLayoutData(LayoutRegion.WEST, Layouts.LEFT_COLUMN_WIDTH)); + + // -- + // Center panel (OrgUnits + Contacts + Projects). + // -- + final LayoutContainer centerContainer = Layouts.vBox(); + + // -- + // Center-Up panel (OrgUnits + Contacts). + // -- + final LayoutContainer centerUpContainer = Layouts.hBox(); + + centerUpContainer.add(createOrgUnitsPanel(), Layouts.hBoxData(1.0)); + + centerUpContainer.add(createContactsPanel(), Layouts.hBoxData(1.0, Margin.LEFT)); + + centerContainer.add(centerUpContainer, Layouts.vBoxData(1.0, Margin.BOTTOM, Margin.LEFT)); + centerContainer.add(createProjectsPanel(), Layouts.vBoxData(1.0, Margin.LEFT)); + + add(centerContainer); + + } + + /** + * {@inheritDoc} + */ + @Override + public Component getRemindersPanel() { + return remindersPanel; + } + + /** + * {@inheritDoc} + */ + @Override + public ListStore getRemindersStore() { + return remindersStore; + } + + /** + * {@inheritDoc} + */ + @Override + public Component getMonitoredPointsPanel() { + return monitoredPointsPanel; + } + + /** + * {@inheritDoc} + */ + @Override + public ListStore getMonitoredPointsStore() { + return monitoredPointsStore; + } + + /** + * {@inheritDoc} + */ + @Override + public void clearMenuButtons() { + menuButtonsContainer.removeAll(); + } + + /** + * {@inheritDoc} + */ + @Override + public void addMenuButton(final String buttonText, final AbstractImagePrototype buttonIcon, final Listener clickHandler) { + + if (ClientUtils.isBlank(buttonText)) { + throw new IllegalArgumentException("Invalid button text."); + } + + final Button button = Forms.button(buttonText, buttonIcon); + + if (clickHandler != null) { + button.addListener(Events.OnClick, clickHandler); + } + + menuButtonsContainer.add(button, Layouts.vBoxData()); + } + + /** + * {@inheritDoc} + */ + @Override + public void layoutButtons() { + menuButtonsContainer.layout(); + } + + /** + * {@inheritDoc} + */ + @Override + public void layoutViews() { + if (contactsListWidget != null) { + contactsListWidget.getView().syncSize(); + projectsListWidget.getView().syncSize(); + } + } + + /** + * {@inheritDoc} + */ + @Override + public OrgUnitTreeGrid getOrgUnitsTreeGrid() { + return orgUnitsTreeGrid; + } + + /** + * {@inheritDoc} + */ + @Override + public void setPanelsTitleSuffix(final String suffix) { + orgUnitsPanel.setHeadingText(I18N.CONSTANTS.orgunitTree() + suffix); + + projectsListWidget.setTitleSupplier(new ProjectsListWidget.TitleSupplier() { + @Override + public String supplyTitle(int projectCount) { + return ProjectsListWidget.DEFAULT_TITLE_SUPPLIER.supplyTitle(projectCount) + suffix; + } + }); + } + + /** + * {@inheritDoc} + */ + @Override + public ContactsListWidget getContactsList() { + return contactsListWidget; + } + + /** + * {@inheritDoc} + */ + @Override + public ProjectsListWidget getProjectsList() { + return projectsListWidget; + } + + // ------------------------------------------------------------------------------------------- + // + // UTILITY METHODS. + // + // ------------------------------------------------------------------------------------------- + /** + * Creates the reminders component. + * + * @return The reminders component widget. + */ + private Component createRemindersPanel() { + + remindersStore = new ListStore(); + final Grid reminderGrid = new Grid(remindersStore, new ColumnModel(createRemindersGridColumns())); + reminderGrid.getView().setForceFit(true); + reminderGrid.setAutoExpandColumn(ReminderDTO.LABEL); + + remindersPanel = Panels.content(I18N.CONSTANTS.reminderPoints()); + remindersPanel.add(reminderGrid); + + return remindersPanel; + } + + /** + * Creates the monitored points component. + * + * @return The monitored points component widget. + */ + private Component createMonitoredPointsPanel() { + + monitoredPointsStore = new ListStore(); + final Grid monitoredPointsGrid = new Grid(monitoredPointsStore, new ColumnModel(createMonitoredPointsGridColumns())); + monitoredPointsGrid.getView().setForceFit(true); + monitoredPointsGrid.setAutoExpandColumn(MonitoredPointDTO.LABEL); + + final GridFilters filters = new GridFilters(); + filters.setLocal(true); + filters.addFilter(new StringFilter(MonitoredPointDTO.LABEL)); + filters.addFilter(new DateFilter(MonitoredPointDTO.EXPECTED_DATE)); + monitoredPointsGrid.addPlugin(filters); + + monitoredPointsPanel = Panels.content(I18N.CONSTANTS.monitoredPoints()); + monitoredPointsPanel.add(monitoredPointsGrid); + + return monitoredPointsPanel; + } + + /** + * Creates the menu buttons component. + * + * @return The menu buttons component widget. + */ + private Component createMenuButtonsPanel() { + + final ContentPanel menuButtonsPanel = Panels.content(I18N.CONSTANTS.menu()); + + menuButtonsContainer = Layouts.vBox(); + menuButtonsPanel.add(menuButtonsContainer); + + return menuButtonsPanel; + } + + /** + * Creates the OrgUnits component. + * + * @return The OrgUnits component widget. + */ + private Component createOrgUnitsPanel() { + + orgUnitsPanel = Panels.content(I18N.CONSTANTS.orgunitTree()); + orgUnitsTreeGrid = new OrgUnitTreeGrid(false); + + orgUnitsPanel.setTopComponent(orgUnitsTreeGrid.getToolbar()); + orgUnitsPanel.add(orgUnitsTreeGrid.getTreeGrid()); + + return orgUnitsPanel; + } + + /** + * Creates the contacts component. + * + * @return The contacts component widget. + */ + private Widget createContactsPanel() { + + contactsListWidget = contactsListWidgetProvider.get(); + contactsListWidget.initialize(); + + return contactsListWidget.getView().asWidget(); + } + + /** + * Creates the projects component. + * + * @return The projects component widget. + */ + private Widget createProjectsPanel() { + + projectsListWidget = projectsListWidgetProvider.get(); + projectsListWidget.initialize(); + + return projectsListWidget.getView().asWidget(); + } + + /** + * Builds the reminders grid columns configuration. + * + * @return The reminders grid columns list. + */ + private static List createRemindersGridColumns() { + + final DateTimeFormat format = DateUtils.DATE_SHORT; + final Date now = new Date(); + + // Icon column. + final ColumnConfig iconColumn = new ColumnConfig(); + iconColumn.setId("icon"); + iconColumn.setHeaderHtml(""); + iconColumn.setWidth(16); + iconColumn.setResizable(false); + iconColumn.setRenderer(new GridCellRenderer() { + + @Override + public Object render(final ReminderDTO model, final String property, final ColumnData config, final int rowIndex, final int colIndex, + final ListStore store, final Grid grid) { + + if (DateUtils.DAY_COMPARATOR.compare(now, model.getExpectedDate()) > 0) { + return IconImageBundle.ICONS.overdueReminder().createImage(); + } else { + return IconImageBundle.ICONS.openedReminder().createImage(); + } + } + }); + + // Label column. + final ColumnConfig labelColumn = new ColumnConfig(); + labelColumn.setId(ReminderDTO.LABEL); + labelColumn.setHeaderHtml(I18N.CONSTANTS.monitoredPointLabel()); + labelColumn.setWidth(100); + + // Ajout du HREF + labelColumn.setRenderer(new GridCellRenderer() { + + @Override + public Object render(final ReminderDTO model, String property, ColumnData config, int rowIndex, int colIndex, ListStore store, + Grid grid) { + + final com.google.gwt.user.client.ui.Label label = new com.google.gwt.user.client.ui.Label((String) model.get(property)); + + label.addStyleName("hyperlink-label"); + label.addClickHandler(new ClickHandler() { + + @Override + public void onClick(ClickEvent event) { + handler.onLabelClickEvent(model.getProjectId()); + } + }); + + label.setTitle(I18N.CONSTANTS.projectLabelWithDots() + ' ' + model.getProjectCode() + " - " + model.getProjectName()); + + return label; + } + }); + + // Expected date column. + final ColumnConfig expectedDateColumn = new ColumnConfig(); + expectedDateColumn.setId(ReminderDTO.EXPECTED_DATE); + expectedDateColumn.setHeaderHtml(I18N.CONSTANTS.monitoredPointExpectedDate()); + expectedDateColumn.setWidth(60); + expectedDateColumn.setDateTimeFormat(format); + expectedDateColumn.setRenderer(new GridCellRenderer() { + + @Override + public Object render(final ReminderDTO model, final String property, final ColumnData config, final int rowIndex, final int colIndex, + final ListStore store, final Grid grid) { + + final Label label = new Label(format.format(model.getExpectedDate())); + if (!model.isCompleted() && DateUtils.DAY_COMPARATOR.compare(now, model.getExpectedDate()) > 0) { + label.addStyleName(EXPECTED_DATE_LABEL_STYLE); + } + return label; + } + }); + + return Arrays.asList(new ColumnConfig[] { + iconColumn, + labelColumn, + expectedDateColumn + }); + } + + /** + * Builds the monitored points grid columns configuration. + * + * @return The monitored points grid columns list. + */ + private static List createMonitoredPointsGridColumns() { + + final DateTimeFormat format = DateUtils.DATE_SHORT; + final Date now = new Date(); + + // Icon + final ColumnConfig iconColumn = new ColumnConfig(); + iconColumn.setId("icon"); + iconColumn.setHeaderHtml(""); + iconColumn.setWidth(16); + iconColumn.setResizable(false); + iconColumn.setRenderer(new GridCellRenderer() { + + @Override + public Object render(final MonitoredPointDTO model, final String property, final ColumnData config, final int rowIndex, final int colIndex, + final ListStore store, final Grid grid) { + + if (DateUtils.DAY_COMPARATOR.compare(now, model.getExpectedDate()) > 0) { + return IconImageBundle.ICONS.overduePoint().createImage(); + } else { + return IconImageBundle.ICONS.openedPoint().createImage(); + } + } + }); + + // Label. + final ColumnConfig labelColumn = new ColumnConfig(); + labelColumn.setId(MonitoredPointDTO.LABEL); + labelColumn.setHeaderHtml(I18N.CONSTANTS.monitoredPointLabel()); + labelColumn.setWidth(100); + + labelColumn.setRenderer(new GridCellRenderer() { + + @Override + public Object render(final MonitoredPointDTO model, String property, ColumnData config, int rowIndex, int colIndex, ListStore store, + Grid grid) { + + final com.google.gwt.user.client.ui.Label label = new com.google.gwt.user.client.ui.Label((String) model.get(property)); + label.addStyleName("hyperlink-label"); + + label.addClickHandler(new ClickHandler() { + + @Override + public void onClick(ClickEvent event) { + handler.onLabelClickEvent(model.getProjectId()); + } + }); + + label.setTitle(I18N.CONSTANTS.projectLabelWithDots() + ' ' + model.getProjectCode() + " - " + model.getProjectName()); + + return label; + } + }); + + // Expected date. + final ColumnConfig expectedDateColumn = new ColumnConfig(); + expectedDateColumn.setId(MonitoredPointDTO.EXPECTED_DATE); + expectedDateColumn.setHeaderHtml(I18N.CONSTANTS.monitoredPointExpectedDate()); + expectedDateColumn.setWidth(60); + expectedDateColumn.setDateTimeFormat(format); + expectedDateColumn.setRenderer(new GridCellRenderer() { + + @Override + public Object render(final MonitoredPointDTO model, final String property, final ColumnData config, final int rowIndex, final int colIndex, + final ListStore store, final Grid grid) { + + final Label label = new Label(format.format(model.getExpectedDate())); + if (!model.isCompleted() && DateUtils.DAY_COMPARATOR.compare(now, model.getExpectedDate()) > 0) { + label.addStyleName(EXPECTED_DATE_LABEL_STYLE); + + } + return label; + } + }); + + return Arrays.asList(new ColumnConfig[] { + iconColumn, + labelColumn, + expectedDateColumn + }); + } + +} diff --git a/src/main/java/org/sigmah/client/ui/view/zone/SearchView.java b/src/main/java/org/sigmah/client/ui/view/zone/SearchView.java index f58142bff..5ac228f7a 100644 --- a/src/main/java/org/sigmah/client/ui/view/zone/SearchView.java +++ b/src/main/java/org/sigmah/client/ui/view/zone/SearchView.java @@ -83,11 +83,11 @@ public void initialize() { searchBarPanel.add(searchText); searchBarPanel.add(searchButton); - - // initWidget(); Useless. + // initWidget(); Useless } + /** * {@inheritDoc} */ @@ -113,6 +113,33 @@ public void onViewRevealed() { public HasHTML getNameLabel() { return searchForLabel; } + + + /** + * {@inheritDoc} + */ + @Override + public ListBox getSearchOptions() { + return searchOptions; + } + + + /** + * {@inheritDoc} + */ + @Override + public TextBox getSearchText() { + return searchText; + } + + + /** + * {@inheritDoc} + */ + @Override + public Button getSearchButton() { + return searchButton; + } } From e052d70fe352dcc988be7a136f2c736b8e9b576f Mon Sep 17 00:00:00 2001 From: indianauthority97 Date: Fri, 26 May 2017 20:35:00 +0530 Subject: [PATCH 03/36] New tab opens but is Singleton --- .../ui/presenter/SearchResultsPresenter.java | 448 +----------------- .../ui/presenter/zone/SearchPresenter.java | 159 +------ .../client/ui/view/SearchResultsView.java | 346 +------------- .../client/ui/view/zone/SearchView.java | 5 +- 4 files changed, 33 insertions(+), 925 deletions(-) diff --git a/src/main/java/org/sigmah/client/ui/presenter/SearchResultsPresenter.java b/src/main/java/org/sigmah/client/ui/presenter/SearchResultsPresenter.java index c515f2bbf..7adff38a0 100644 --- a/src/main/java/org/sigmah/client/ui/presenter/SearchResultsPresenter.java +++ b/src/main/java/org/sigmah/client/ui/presenter/SearchResultsPresenter.java @@ -24,8 +24,10 @@ import java.util.ArrayList; +import java.util.HashMap; import java.util.HashSet; import java.util.List; +import java.util.Map; import java.util.Set; import org.sigmah.client.dispatch.CommandResultHandler; @@ -47,6 +49,8 @@ import org.sigmah.client.ui.widget.HasTreeGrid.TreeGridEventHandler; import org.sigmah.client.ui.widget.WorkInProgressWidget; import org.sigmah.client.ui.widget.orgunit.OrgUnitTreeGrid; +import org.sigmah.client.ui.widget.tab.Tab; +import org.sigmah.client.ui.widget.tab.TabId; import org.sigmah.client.util.ClientUtils; import org.sigmah.shared.command.GetMonitoredPoints; import org.sigmah.shared.command.GetOrgUnits; @@ -65,13 +69,17 @@ import com.extjs.gxt.ui.client.event.Listener; import com.extjs.gxt.ui.client.store.ListStore; import com.extjs.gxt.ui.client.widget.Component; +import com.google.gwt.event.dom.client.ClickEvent; +import com.google.gwt.event.dom.client.ClickHandler; import com.google.gwt.user.client.rpc.AsyncCallback; import com.google.gwt.user.client.ui.AbstractImagePrototype; import com.google.inject.ImplementedBy; import com.google.inject.Inject; import com.google.inject.Singleton; import org.sigmah.client.event.OfflineEvent; +import org.sigmah.client.event.UpdateEvent; import org.sigmah.client.event.handler.OfflineHandler; +import org.sigmah.client.event.handler.UpdateHandler; import org.sigmah.client.ui.notif.ConfirmCallback; import org.sigmah.client.ui.notif.N10N; import org.sigmah.client.ui.zone.Zone; @@ -84,6 +92,7 @@ import org.sigmah.offline.sync.UpdateDates; import org.sigmah.shared.command.SendProbeReport; import org.sigmah.shared.command.result.Result; +import org.sigmah.shared.conf.PropertyName; import org.sigmah.shared.dto.profile.CheckPointDTO; import org.sigmah.shared.dto.profile.ExecutionDTO; @@ -100,105 +109,24 @@ public static interface ReminderOrMonitoredPointHandler{ public void onLabelClickEvent(Integer projectId); } + // Page requests linked to the tabs. + private HashMap requests; + +// /** +// * Search results tab id. +// */ +// private final static String SEARCH_RESULTS_TAB_ID="searchResultsTabId"; + /** * View interface. */ @ImplementedBy(SearchResultsView.class) public static interface View extends ViewInterface { - void setReminderOrMonitoredPointHandler(ReminderOrMonitoredPointHandler handler); - - /** - * Returns the reminders wrapper component. - * - * @return The reminders wrapper component. - */ - Component getRemindersPanel(); - - /** - * Returns the reminders list store. - * - * @return The reminders list store. - */ - ListStore getRemindersStore(); - - /** - * Returns the monitored points wrapper component. - * - * @return The monitored points wrapper component. - */ - Component getMonitoredPointsPanel(); - - /** - * Returns the monitored points list store. - * - * @return The monitored points list store. - */ - ListStore getMonitoredPointsStore(); - - /** - * Clears the menu buttons component and removes all the buttons. - */ - void clearMenuButtons(); - - /** - * Adds a navigation button to the menu buttons panel. - * - * @param buttonText - * (required) The button label. - * @param buttonIcon - * (optional) Button icon displayed next to the label. - * @param clickHandler - * The button click handler implementation. - */ - void addMenuButton(final String buttonText, final AbstractImagePrototype buttonIcon, final Listener clickHandler); - - /** - * Ask the button panel to relayout itself. - */ - void layoutButtons(); - - /** - * Ask the main container to relayout itself. - */ - void layoutViews(); - - /** - * Returns the OrgUnit tree grid component. - * - * @return The OrgUnit tree grid component. - */ - OrgUnitTreeGrid getOrgUnitsTreeGrid(); - - /** - * Sets the org units panel header title. - * - * @param title - * The new title. - */ - void setPanelsTitleSuffix(String title); - - /** - * Returns the {@link ContactsListWidget} widget. - * - * @return The contacts list widget. - */ - ContactsListWidget getContactsList(); - - /** - * Returns the {@link ProjectsListWidget} widget. - * - * @return The projects list widget. - */ - ProjectsListWidget getProjectsList(); } - private Integer lastUserId; - - private final ExecutionAsyncDAO executionAsyncDAO = new ExecutionAsyncDAO(); - /** * Presenters's initialization. * @@ -220,349 +148,11 @@ public Page getPage() { return Page.SEARCH_RESULTS; } - /** - * {@inheritDoc} - */ @Override - public void onBind() { - - // Org units tree grid events handler. - view.getOrgUnitsTreeGrid().setTreeGridEventHandler(new TreeGridEventHandler() { - - @Override - public void onRowClickEvent(final OrgUnitDTO rowElement) { - eventBus.navigateRequest(Page.ORGUNIT_DASHBOARD.requestWith(RequestParameter.ID, rowElement.getId())); - } - }); - - if (auth().getSecondaryOrgUnitIds().isEmpty()) { - view.getOrgUnitsTreeGrid().getDisplayOnlyMainOrgUnitCheckbox().setVisible(false); - } else { - view.getOrgUnitsTreeGrid().getDisplayOnlyMainOrgUnitCheckbox().setValue(true); - view.getOrgUnitsTreeGrid().getDisplayOnlyMainOrgUnitCheckbox().addListener(Events.Change, new Listener() { - @Override - public void handleEvent(BaseEvent event) { - loadReminders(); - loadMonitoredPoints(); - loadContacts(); - loadProjects(true); - loadOrgUnits(); - } - }); - } - - // Projects widget initialization. - view.getProjectsList().init(RefreshMode.ON_FIRST_TIME, LoadingMode.CHUNK); + public void onPageRequest(PageRequest request) { + // TODO Auto-generated method stub - - view.setReminderOrMonitoredPointHandler(new ReminderOrMonitoredPointHandler() { - @Override - public void onLabelClickEvent(Integer projectId) { - Profiler.INSTANCE.startScenario(Scenario.OPEN_PROJECT); - eventBus.navigateRequest(Page.PROJECT_DASHBOARD.requestWith(RequestParameter.ID, projectId)); - } - }); - - // Listening to connection state changes to refresh the available buttons. - // Fixes mantis #682 and #683 - eventBus.addHandler(OfflineEvent.getType(), new OfflineHandler() { - - @Override - public void handleEvent(OfflineEvent event) { - initializeMenuButtons(event.getState()); - } - }); } - /** - * {@inheritDoc} - */ - @Override - public void onPageRequest(final PageRequest request) { - - // Reloads the reminders store. - loadReminders(); - - // Reloads the monitored points store. - loadMonitoredPoints(); - - // Initializes menu buttons. - initializeMenuButtons(); - - // Reloads OrgUnits. - loadOrgUnits(); - - // Reloads contacts. - loadContacts(); - - // Reloads projects. - loadProjects(false); - - // Ask the user to synchronize its favorite projects. - // BUGFIX #701: only showing this message if the user is online. - final boolean userIsOnline = injector.getApplicationStateManager().getState() == ApplicationState.ONLINE; - final boolean userIsDifferent = auth().getUserId() != null && !auth().getUserId().equals(lastUserId); - final boolean userHasSynchronized = UpdateDates.getDatabaseUpdateDate(auth()) != null; - if(userIsOnline && userIsDifferent && !userHasSynchronized) { - N10N.confirmation(I18N.CONSTANTS.offlineModeHeader(), I18N.CONSTANTS.sigmahOfflineWelcome(), new ConfirmCallback() { - - @Override - public void onAction() { - eventBus.updateZoneRequest(Zone.OFFLINE_BANNER.requestWith(RequestParameter.PULL_DATABASE, true)); - } - }); - } - lastUserId = auth().getUserId(); - } - - @Override - protected void onViewRevealed() { - // BUGFIX #786: Relayout the views on reveal to avoid having the last project hidden. - view.layoutViews(); - } - - // ------------------------------------------------------------------------------------------- - // - // UTILITY METHODS. - // - // ------------------------------------------------------------------------------------------- - - /** - * Performs a dispatch command to load the reminders list and populates the view store. - */ - private void loadReminders() { - Set orgUnitIds = getOrgUnitIds(); - - dispatch.execute(new GetReminders(ReminderDTO.Mode.BASE, orgUnitIds), new CommandResultHandler>() { - - @Override - public void onCommandSuccess(final ListResult result) { - - final List reminderListToLoad = new ArrayList(); - - // Only show the undeleted reminders. - for (final ReminderDTO reminder : result.getList()) { - - // TODO [PERF] Filter should be performed on server-side. - final Boolean deleted = reminder.getDeleted(); - - if (Log.isDebugEnabled()) { - Log.debug("Deleted reminder? " + deleted); - } - - if (ClientUtils.isNotTrue(deleted)) { - reminderListToLoad.add(reminder); - } - } - - view.getRemindersStore().removeAll(); - view.getRemindersStore().add(reminderListToLoad); - } - }, new LoadingMask(view.getRemindersPanel())); - } - - /** - * Performs a dispatch command to load the monitored points list and populates the view store. - */ - private void loadMonitoredPoints() { - Set orgUnitIds = getOrgUnitIds(); - - dispatch.execute(new GetMonitoredPoints(MonitoredPointDTO.Mode.BASE, orgUnitIds), new CommandResultHandler>() { - - @Override - public void onCommandSuccess(final ListResult result) { - - final List pointListToLoad = new ArrayList(); - - // Only show the undeleted monitored points. - for (final MonitoredPointDTO p : result.getList()) { - - // TODO [PERF] Filter should be performed on server-side. - final Boolean deleted = p.getDeleted(); - - if (Log.isDebugEnabled()) { - Log.debug("Deleted monitored point? " + deleted); - } - - if (ClientUtils.isNotTrue(deleted)) { - pointListToLoad.add(p); - } - } - - view.getMonitoredPointsStore().removeAll(); - view.getMonitoredPointsStore().add(pointListToLoad); - } - }, new LoadingMask(view.getMonitoredPointsPanel())); - } - - /** - * Initializes menu buttons based on authenticated user profile permissions. - */ - private void initializeMenuButtons() { - initializeMenuButtons(injector.getApplicationStateManager().getState()); - } - - private void initializeMenuButtons(ApplicationState applicationState) { - - view.clearMenuButtons(); - - final boolean online = applicationState == ApplicationState.UNKNOWN || applicationState == ApplicationState.ONLINE; - - // Create project. - if (online && ProfileUtils.isGranted(auth(), GlobalPermissionEnum.CREATE_PROJECT)) { - - final PageRequest request = new PageRequest(Page.CREATE_PROJECT); - request.addParameter(RequestParameter.TYPE, CreateProjectPresenter.Mode.PROJECT); - - view.addMenuButton(I18N.CONSTANTS.createProjectNewProject(), IconImageBundle.ICONS.add(), new ButtonClickHandler(request)); - } - - // Draft project. - if (online && ProfileUtils.isGranted(auth(), GlobalPermissionEnum.CREATE_TEST_PROJECT)) { - - final PageRequest request = new PageRequest(Page.CREATE_PROJECT); - request.addParameter(RequestParameter.TYPE, CreateProjectPresenter.Mode.TEST_PROJECT); - - view.addMenuButton(I18N.CONSTANTS.createTestProject(), IconImageBundle.ICONS.add(), new ButtonClickHandler(request)); - } - - // Users administration. - if (online && ProfileUtils.isGranted(auth(), GlobalPermissionEnum.VIEW_ADMIN)) { - view.addMenuButton(I18N.CONSTANTS.adminboard(), IconImageBundle.ICONS.setup(), new ButtonClickHandler(getDefaultAdminPage())); - } - - // Import. - if (online && ProfileUtils.isGranted(auth(), GlobalPermissionEnum.IMPORT_BUTTON)) { - view.addMenuButton(I18N.CONSTANTS.importItem(), null, new ButtonClickHandler(Page.IMPORT_VALUES)); - } - - - // TODO Handle other menus buttons. - // There are two ways to show these menus (authentication / profile). - // if (auth().isShowMenus()) { - // view.addMenuButton(I18N.CONSTANTS.dataEntry(), IconImageBundle.ICONS.dataEntry(), new SiteGridPageState()); - // view.addMenuButton(I18N.CONSTANTS.reports(), IconImageBundle.ICONS.report(), new ReportListPageState()); - // view.addMenuButton(I18N.CONSTANTS.charts(), IconImageBundle.ICONS.barChart(), new ChartPageState()); - // view.addMenuButton(I18N.CONSTANTS.maps(), IconImageBundle.ICONS.map(), new MapPageState()); - // view.addMenuButton(I18N.CONSTANTS.tables(), IconImageBundle.ICONS.table(), new PivotPageState()); - // view.addMenuButton(I18N.CONSTANTS.setup(), IconImageBundle.ICONS.setup(), new DbListPageState()); - // } - - view.layoutButtons(); - } - /** - * Find the page of the administration to show by default for the current user. - * - * @return First page of the administration to show. - */ - private Page getDefaultAdminPage() { - final Page[] administrationPages = new Page[] { - Page.ADMIN_USERS, Page.ADMIN_ORG_UNITS, - Page.ADMIN_PROJECTS_MODELS, Page.ADMIN_ORG_UNITS_MODELS, - Page.ADMIN_CONTACT_MODELS, Page.ADMIN_REPORTS_MODELS, - Page.ADMIN_CATEGORIES, Page.ADMIN_IMPORTATION_SCHEME, - Page.ADMIN_PARAMETERS - }; - - final GlobalPermissionEnum[] accessRights = new GlobalPermissionEnum[] { - GlobalPermissionEnum.MANAGE_USERS, GlobalPermissionEnum.MANAGE_ORG_UNITS, - GlobalPermissionEnum.MANAGE_PROJECT_MODELS, GlobalPermissionEnum.MANAGE_ORG_UNIT_MODELS, - GlobalPermissionEnum.MANAGE_CONTACT_MODELS, GlobalPermissionEnum.MANAGE_REPORT_MODELS, - GlobalPermissionEnum.MANAGE_CATEGORIES, GlobalPermissionEnum.MANAGE_IMPORTATION_SCHEMES, - GlobalPermissionEnum.MANAGE_SETTINGS - }; - - for(int index = 0; index < accessRights.length; index++) { - if (accessRights[index] == null || ProfileUtils.isGranted(auth(), accessRights[index])) { - return administrationPages[index]; - } - } - - return Page.ADMIN_USERS; - } - - /** - * {@link Listener} implementation navigating to a given {@link PageRequest}. - * - * @author Denis Colliot (dcolliot@ideia.fr) - */ - private class ButtonClickHandler implements Listener { - - private final PageRequest request; - - private ButtonClickHandler(final Page page) { - this.request = page != null ? page.request() : null; - } - - private ButtonClickHandler(final PageRequest request) { - this.request = request; - } - - /** - * {@inheritDoc} - */ - @Override - public void handleEvent(final ButtonEvent be) { - - if (request != null) { - eventBus.navigateRequest(request); - - } else { - WorkInProgressWidget.popup(true); - } - } - } - - private void loadContacts() { - if (view.getContactsList() != null) { - view.getContactsList().refresh(view.getOrgUnitsTreeGrid().getDisplayOnlyMainOrgUnitCheckbox().getValue()); - } - } - - private void loadProjects(boolean forceRefresh) { - if (view.getOrgUnitsTreeGrid().getDisplayOnlyMainOrgUnitCheckbox().getValue()) { - view.getProjectsList().refresh(true, forceRefresh, auth().getMainOrgUnitId()); - } else { - view.getProjectsList().refresh(true, forceRefresh, auth().getOrgUnitIds().toArray(new Integer[auth().getOrgUnitIds().size()])); - } - } - - /** - * Retrieves OrgUnits and populates tree grid store. - */ - private void loadOrgUnits() { - Set orgUnitIds = getOrgUnitIds(); - dispatch.execute(new GetOrgUnits(orgUnitIds, OrgUnitDTO.Mode.WITH_TREE), new CommandResultHandler>() { - @Override - public void onCommandSuccess(final ListResult result) { - view.getOrgUnitsTreeGrid().getStore().removeAll(); - view.getOrgUnitsTreeGrid().getStore().add(result.getData(), true); - for (OrgUnitDTO orgUnitDTO : view.getOrgUnitsTreeGrid().getStore().getRootItems()) { - view.getOrgUnitsTreeGrid().getTreeGrid().setExpanded(orgUnitDTO, true, false); - } - - OrgUnitDTO mainOrgUnitDTO = view.getOrgUnitsTreeGrid().getStore().findModel(OrgUnitDTO.ID, auth().getMainOrgUnitId()); - String panelTitle = " - "; - if (auth().getSecondaryOrgUnitIds().isEmpty()) { - panelTitle += mainOrgUnitDTO.getName() + " (" + mainOrgUnitDTO.getFullName() + ")"; - } else if (view.getOrgUnitsTreeGrid().getDisplayOnlyMainOrgUnitCheckbox().getValue()) { - panelTitle += I18N.CONSTANTS.myMainOrganisationalUnitPanelTitle() + " " + mainOrgUnitDTO.getName() + " (" + mainOrgUnitDTO.getFullName() + ")"; - } else { - panelTitle += I18N.CONSTANTS.allMyOrganisationalUnitsPanelTitle(); - } - view.setPanelsTitleSuffix(panelTitle); - } - }); - } - - Set getOrgUnitIds() { - Set orgUnitIds = new HashSet(); - if (view.getOrgUnitsTreeGrid().getDisplayOnlyMainOrgUnitCheckbox().getValue()) { - orgUnitIds.add(auth().getMainOrgUnitId()); - } else { - orgUnitIds.addAll(auth().getOrgUnitIds()); - } - return orgUnitIds; - } } diff --git a/src/main/java/org/sigmah/client/ui/presenter/zone/SearchPresenter.java b/src/main/java/org/sigmah/client/ui/presenter/zone/SearchPresenter.java index 51bcf781d..26fd50d4e 100644 --- a/src/main/java/org/sigmah/client/ui/presenter/zone/SearchPresenter.java +++ b/src/main/java/org/sigmah/client/ui/presenter/zone/SearchPresenter.java @@ -10,8 +10,8 @@ import org.sigmah.client.page.Page; import org.sigmah.client.page.PageRequest; import org.sigmah.client.page.RequestParameter; +import org.sigmah.client.ui.presenter.CreateProjectPresenter; import org.sigmah.client.ui.presenter.base.AbstractZonePresenter; -import org.sigmah.client.ui.presenter.zone.MenuBannerPresenter.MenuTabId; import org.sigmah.client.ui.view.base.ViewInterface; import org.sigmah.client.ui.view.zone.SearchView; import org.sigmah.client.ui.widget.tab.Tab; @@ -23,6 +23,7 @@ import org.sigmah.client.util.ClientUtils; import org.sigmah.shared.conf.PropertyName; +import com.extjs.gxt.ui.client.event.Events; import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.event.dom.client.ClickHandler; import com.google.gwt.user.client.ui.Button; @@ -70,11 +71,6 @@ public SearchPresenter(View view, Injector injector) { super(view, injector); // TODO Auto-generated constructor stub } - - /** - * Project tab id. - */ - private final static String SEARCH_RESULTS_TAB_ID="searchResultsTabId"; /** * View interface. @@ -99,122 +95,6 @@ public Zone getZone() { return Zone.SEARCH_BANNER; } - /** - * Utility method to add a tab. - * - * @param request - * The page request. - */ - private void addTab(final PageRequest request) { - - // Login case? - if (Page.LOGIN.equals(request.getPage()) || Page.RESET_PASSWORD.equals(request.getPage())) { - return; - } - - boolean closeable = true; - String styleName = "default"; - - // Homepage case ? - if (Page.SEARCH_RESULTS.equals(request.getPage())) { - closeable = false; - styleName = "home"; - } - - // Builds the tab. - final Tab tab = new Tab(new MenuTabId(request), closeable, styleName); - - if(request.getPage()==Page.SEARCH_RESULTS){ - tab.getElement().setId(DASHBOARD_HOME_TAB_ID); - } - // Adds the tab. - view.getTabBar().addTab(tab); - requests.put(tab.getId(), new PageRequest(request)); // Important: create a new instance. - - // Sets the first title. - final String pageTitle = Page.getTitle(request.getPage()); - final String tabTitle = ClientUtils.isNotBlank(pageTitle) && !PropertyName.isErrorKey(pageTitle) ? pageTitle : I18N.CONSTANTS.loading(); - view.getTabBar().updateTitle(tab.getId(), tabTitle); - - } - - /** - * Builds the unique tab id from the page request. - * - * @author Tom Miette (tmiette@ideia.fr) - */ - private static class MenuTabId implements TabId { - - private final String token; - private final Map params; - - private MenuTabId(final PageRequest request) { - - this.token = request.getPage().getParentKey() != null ? request.getPage().getParentKey() : request.getPage().getToken(); - this.params = request.getParameters(true); - - } - - /** - * {@inheritDoc} - */ - @Override - public boolean equals(Object obj) { - - if (obj == null) { - return false; - } - if (getClass() != obj.getClass()) { - return false; - } - - final MenuTabId other = (MenuTabId) obj; - - // Compares tokens. - boolean equals = token.equals(other.token); - - // Compares parameters maps sizes. - if (equals) { - equals &= params.size() == other.params.size(); - } - - // Compares parameters keys and values. - if (equals) { - for (final Map.Entry entry : params.entrySet()) { - - // Key exists ? - if (!other.params.keySet().contains(entry.getKey())) { - equals = false; - break; - } - - // Values equals ? - if (!entry.getValue().equals(other.params.get(entry.getKey()))) { - equals = false; - break; - } - - } - } - - return equals; - - } - - /** - * {@inheritDoc} - */ - @Override - public int hashCode() { - final int prime = 31; - int result = 1; - result = prime * result + ((params == null) ? 0 : params.hashCode()); - result = prime * result + ((token == null) ? 0 : token.hashCode()); - return result; - } - - } - /** * {@inheritDoc} */ @@ -225,39 +105,14 @@ public void onBind() { @Override public void onClick(ClickEvent event) { - // Add the search results tab. - addTab(new PageRequest(Page.SEARCH_RESULTS)); + + final PageRequest request = new PageRequest(Page.SEARCH_RESULTS); + //have to add a request param here so that it opens a tab with a new title + //request.addParameter(RequestParameter.HEADER, view.getSearchText()); + eventBus.navigateRequest(request); } }); - - - - // Project delete event handler. - registerHandler(eventBus.addHandler(UpdateEvent.getType(), new UpdateHandler() { - - @Override - public void onUpdate(final UpdateEvent event) { - - if (event.concern(UpdateEvent.PROJECT_DELETE)) { - final PageRequest request = event.getParam(0); - view.getTabBar().removeTab(new MenuTabId(request)); - } - } - })); - - // Contact delete event handler. - registerHandler(eventBus.addHandler(UpdateEvent.getType(), new UpdateHandler() { - - @Override - public void onUpdate(final UpdateEvent event) { - - if (event.concern(UpdateEvent.CONTACT_DELETE)) { - final PageRequest request = event.getParam(0); - view.getTabBar().removeTab(new MenuTabId(request)); - } - } - })); } diff --git a/src/main/java/org/sigmah/client/ui/view/SearchResultsView.java b/src/main/java/org/sigmah/client/ui/view/SearchResultsView.java index 6f884339a..52ca0631d 100644 --- a/src/main/java/org/sigmah/client/ui/view/SearchResultsView.java +++ b/src/main/java/org/sigmah/client/ui/view/SearchResultsView.java @@ -87,42 +87,9 @@ public class SearchResultsView extends AbstractView implements SearchResultsPres */ private static final String EXPECTED_DATE_LABEL_STYLE = "points-date-exceeded"; - @Inject - private Provider contactsListWidgetProvider; - - @Inject - private Provider projectsListWidgetProvider; - private ContentPanel remindersPanel; private ListStore remindersStore; - - private ContentPanel monitoredPointsPanel; - private ListStore monitoredPointsStore; - - private LayoutContainer menuButtonsContainer; - - private ContentPanel orgUnitsPanel; - private OrgUnitTreeGrid orgUnitsTreeGrid; - - private ContactsListWidget contactsListWidget; - - private ProjectsListWidget projectsListWidget; - - private static ReminderOrMonitoredPointHandler handler; - - final ReminderOrMonitoredPointHandler getReminderOrMonitoredPointHandler() { - return handler; - } - - /** - * {@inheritDoc} - */ - - @Override - public void setReminderOrMonitoredPointHandler( SearchResultsPresenter.ReminderOrMonitoredPointHandler handler) { - // TODO Auto-generated method stub - - } + /** * {@inheritDoc} @@ -130,154 +97,16 @@ public void setReminderOrMonitoredPointHandler( SearchResultsPresenter.ReminderO @Override public void initialize() { - // -- - // Left panel (Reminders + MonitoredPoints + Buttons). - // -- - final LayoutContainer leftContainer = Layouts.vBox(); - - leftContainer.add(createRemindersPanel(), Layouts.vBoxData(Margin.BOTTOM)); - leftContainer.add(createMonitoredPointsPanel(), Layouts.vBoxData(Margin.BOTTOM)); - leftContainer.add(createMenuButtonsPanel(), Layouts.vBoxData()); - - add(leftContainer, Layouts.borderLayoutData(LayoutRegion.WEST, Layouts.LEFT_COLUMN_WIDTH)); - // -- // Center panel (OrgUnits + Contacts + Projects). // -- final LayoutContainer centerContainer = Layouts.vBox(); - - // -- - // Center-Up panel (OrgUnits + Contacts). - // -- - final LayoutContainer centerUpContainer = Layouts.hBox(); - - centerUpContainer.add(createOrgUnitsPanel(), Layouts.hBoxData(1.0)); - - centerUpContainer.add(createContactsPanel(), Layouts.hBoxData(1.0, Margin.LEFT)); - - centerContainer.add(centerUpContainer, Layouts.vBoxData(1.0, Margin.BOTTOM, Margin.LEFT)); - centerContainer.add(createProjectsPanel(), Layouts.vBoxData(1.0, Margin.LEFT)); + centerContainer.add(createRemindersPanel(), Layouts.vBoxData(Margin.BOTTOM)); add(centerContainer); } - /** - * {@inheritDoc} - */ - @Override - public Component getRemindersPanel() { - return remindersPanel; - } - - /** - * {@inheritDoc} - */ - @Override - public ListStore getRemindersStore() { - return remindersStore; - } - - /** - * {@inheritDoc} - */ - @Override - public Component getMonitoredPointsPanel() { - return monitoredPointsPanel; - } - - /** - * {@inheritDoc} - */ - @Override - public ListStore getMonitoredPointsStore() { - return monitoredPointsStore; - } - - /** - * {@inheritDoc} - */ - @Override - public void clearMenuButtons() { - menuButtonsContainer.removeAll(); - } - - /** - * {@inheritDoc} - */ - @Override - public void addMenuButton(final String buttonText, final AbstractImagePrototype buttonIcon, final Listener clickHandler) { - - if (ClientUtils.isBlank(buttonText)) { - throw new IllegalArgumentException("Invalid button text."); - } - - final Button button = Forms.button(buttonText, buttonIcon); - - if (clickHandler != null) { - button.addListener(Events.OnClick, clickHandler); - } - - menuButtonsContainer.add(button, Layouts.vBoxData()); - } - - /** - * {@inheritDoc} - */ - @Override - public void layoutButtons() { - menuButtonsContainer.layout(); - } - - /** - * {@inheritDoc} - */ - @Override - public void layoutViews() { - if (contactsListWidget != null) { - contactsListWidget.getView().syncSize(); - projectsListWidget.getView().syncSize(); - } - } - - /** - * {@inheritDoc} - */ - @Override - public OrgUnitTreeGrid getOrgUnitsTreeGrid() { - return orgUnitsTreeGrid; - } - - /** - * {@inheritDoc} - */ - @Override - public void setPanelsTitleSuffix(final String suffix) { - orgUnitsPanel.setHeadingText(I18N.CONSTANTS.orgunitTree() + suffix); - - projectsListWidget.setTitleSupplier(new ProjectsListWidget.TitleSupplier() { - @Override - public String supplyTitle(int projectCount) { - return ProjectsListWidget.DEFAULT_TITLE_SUPPLIER.supplyTitle(projectCount) + suffix; - } - }); - } - - /** - * {@inheritDoc} - */ - @Override - public ContactsListWidget getContactsList() { - return contactsListWidget; - } - - /** - * {@inheritDoc} - */ - @Override - public ProjectsListWidget getProjectsList() { - return projectsListWidget; - } // ------------------------------------------------------------------------------------------- // @@ -296,93 +125,12 @@ private Component createRemindersPanel() { reminderGrid.getView().setForceFit(true); reminderGrid.setAutoExpandColumn(ReminderDTO.LABEL); - remindersPanel = Panels.content(I18N.CONSTANTS.reminderPoints()); + remindersPanel = Panels.content("Search Results"); remindersPanel.add(reminderGrid); return remindersPanel; } - /** - * Creates the monitored points component. - * - * @return The monitored points component widget. - */ - private Component createMonitoredPointsPanel() { - - monitoredPointsStore = new ListStore(); - final Grid monitoredPointsGrid = new Grid(monitoredPointsStore, new ColumnModel(createMonitoredPointsGridColumns())); - monitoredPointsGrid.getView().setForceFit(true); - monitoredPointsGrid.setAutoExpandColumn(MonitoredPointDTO.LABEL); - - final GridFilters filters = new GridFilters(); - filters.setLocal(true); - filters.addFilter(new StringFilter(MonitoredPointDTO.LABEL)); - filters.addFilter(new DateFilter(MonitoredPointDTO.EXPECTED_DATE)); - monitoredPointsGrid.addPlugin(filters); - - monitoredPointsPanel = Panels.content(I18N.CONSTANTS.monitoredPoints()); - monitoredPointsPanel.add(monitoredPointsGrid); - - return monitoredPointsPanel; - } - - /** - * Creates the menu buttons component. - * - * @return The menu buttons component widget. - */ - private Component createMenuButtonsPanel() { - - final ContentPanel menuButtonsPanel = Panels.content(I18N.CONSTANTS.menu()); - - menuButtonsContainer = Layouts.vBox(); - menuButtonsPanel.add(menuButtonsContainer); - - return menuButtonsPanel; - } - - /** - * Creates the OrgUnits component. - * - * @return The OrgUnits component widget. - */ - private Component createOrgUnitsPanel() { - - orgUnitsPanel = Panels.content(I18N.CONSTANTS.orgunitTree()); - orgUnitsTreeGrid = new OrgUnitTreeGrid(false); - - orgUnitsPanel.setTopComponent(orgUnitsTreeGrid.getToolbar()); - orgUnitsPanel.add(orgUnitsTreeGrid.getTreeGrid()); - - return orgUnitsPanel; - } - - /** - * Creates the contacts component. - * - * @return The contacts component widget. - */ - private Widget createContactsPanel() { - - contactsListWidget = contactsListWidgetProvider.get(); - contactsListWidget.initialize(); - - return contactsListWidget.getView().asWidget(); - } - - /** - * Creates the projects component. - * - * @return The projects component widget. - */ - private Widget createProjectsPanel() { - - projectsListWidget = projectsListWidgetProvider.get(); - projectsListWidget.initialize(); - - return projectsListWidget.getView().asWidget(); - } - /** * Builds the reminders grid columns configuration. * @@ -433,7 +181,7 @@ public Object render(final ReminderDTO model, String property, ColumnData config @Override public void onClick(ClickEvent event) { - handler.onLabelClickEvent(model.getProjectId()); + //handler.onLabelClickEvent(model.getProjectId()); } }); @@ -470,91 +218,5 @@ public Object render(final ReminderDTO model, final String property, final Colum }); } - /** - * Builds the monitored points grid columns configuration. - * - * @return The monitored points grid columns list. - */ - private static List createMonitoredPointsGridColumns() { - - final DateTimeFormat format = DateUtils.DATE_SHORT; - final Date now = new Date(); - - // Icon - final ColumnConfig iconColumn = new ColumnConfig(); - iconColumn.setId("icon"); - iconColumn.setHeaderHtml(""); - iconColumn.setWidth(16); - iconColumn.setResizable(false); - iconColumn.setRenderer(new GridCellRenderer() { - - @Override - public Object render(final MonitoredPointDTO model, final String property, final ColumnData config, final int rowIndex, final int colIndex, - final ListStore store, final Grid grid) { - - if (DateUtils.DAY_COMPARATOR.compare(now, model.getExpectedDate()) > 0) { - return IconImageBundle.ICONS.overduePoint().createImage(); - } else { - return IconImageBundle.ICONS.openedPoint().createImage(); - } - } - }); - - // Label. - final ColumnConfig labelColumn = new ColumnConfig(); - labelColumn.setId(MonitoredPointDTO.LABEL); - labelColumn.setHeaderHtml(I18N.CONSTANTS.monitoredPointLabel()); - labelColumn.setWidth(100); - - labelColumn.setRenderer(new GridCellRenderer() { - - @Override - public Object render(final MonitoredPointDTO model, String property, ColumnData config, int rowIndex, int colIndex, ListStore store, - Grid grid) { - - final com.google.gwt.user.client.ui.Label label = new com.google.gwt.user.client.ui.Label((String) model.get(property)); - label.addStyleName("hyperlink-label"); - - label.addClickHandler(new ClickHandler() { - - @Override - public void onClick(ClickEvent event) { - handler.onLabelClickEvent(model.getProjectId()); - } - }); - - label.setTitle(I18N.CONSTANTS.projectLabelWithDots() + ' ' + model.getProjectCode() + " - " + model.getProjectName()); - - return label; - } - }); - - // Expected date. - final ColumnConfig expectedDateColumn = new ColumnConfig(); - expectedDateColumn.setId(MonitoredPointDTO.EXPECTED_DATE); - expectedDateColumn.setHeaderHtml(I18N.CONSTANTS.monitoredPointExpectedDate()); - expectedDateColumn.setWidth(60); - expectedDateColumn.setDateTimeFormat(format); - expectedDateColumn.setRenderer(new GridCellRenderer() { - - @Override - public Object render(final MonitoredPointDTO model, final String property, final ColumnData config, final int rowIndex, final int colIndex, - final ListStore store, final Grid grid) { - - final Label label = new Label(format.format(model.getExpectedDate())); - if (!model.isCompleted() && DateUtils.DAY_COMPARATOR.compare(now, model.getExpectedDate()) > 0) { - label.addStyleName(EXPECTED_DATE_LABEL_STYLE); - - } - return label; - } - }); - - return Arrays.asList(new ColumnConfig[] { - iconColumn, - labelColumn, - expectedDateColumn - }); - } } diff --git a/src/main/java/org/sigmah/client/ui/view/zone/SearchView.java b/src/main/java/org/sigmah/client/ui/view/zone/SearchView.java index 5ac228f7a..dd0b04b12 100644 --- a/src/main/java/org/sigmah/client/ui/view/zone/SearchView.java +++ b/src/main/java/org/sigmah/client/ui/view/zone/SearchView.java @@ -74,11 +74,12 @@ public void initialize() { searchText = new TextBox(); - searchText.setText("Enter search text"); + //searchText.setText("Enter search text"); + searchText.getElement().setPropertyString("placeholder", "Search text"); searchButton = new Button("Go"); - searchBarPanel.add(searchForLabel); + //searchBarPanel.add(searchForLabel); searchBarPanel.add(searchOptions); searchBarPanel.add(searchText); searchBarPanel.add(searchButton); From e3a44e5025ac306319775ef8fce5a1c5a4157ad3 Mon Sep 17 00:00:00 2001 From: indianauthority97 Date: Mon, 29 May 2017 11:54:30 +0530 Subject: [PATCH 04/36] Work on Search results page title --- .../java/org/sigmah/client/page/Page.java | 2 +- .../ui/presenter/SearchResultsPresenter.java | 18 +++++++--------- .../presenter/zone/MenuBannerPresenter.java | 8 ++++++- .../ui/presenter/zone/SearchPresenter.java | 20 ++++++++++++++++-- .../client/ui/view/SearchResultsView.java | 21 ++++++++++++++----- 5 files changed, 49 insertions(+), 20 deletions(-) diff --git a/src/main/java/org/sigmah/client/page/Page.java b/src/main/java/org/sigmah/client/page/Page.java index 34b5a9b14..fac8efe63 100644 --- a/src/main/java/org/sigmah/client/page/Page.java +++ b/src/main/java/org/sigmah/client/page/Page.java @@ -323,7 +323,7 @@ public static String getTitle(final Page page) { case CREATE_PROJECT: return I18N.CONSTANTS.createProject(); case SEARCH_RESULTS: - return "search-results"; + return "Search Results"; default: return PropertyName.error(page.token); } diff --git a/src/main/java/org/sigmah/client/ui/presenter/SearchResultsPresenter.java b/src/main/java/org/sigmah/client/ui/presenter/SearchResultsPresenter.java index 7adff38a0..3a0ebcb6d 100644 --- a/src/main/java/org/sigmah/client/ui/presenter/SearchResultsPresenter.java +++ b/src/main/java/org/sigmah/client/ui/presenter/SearchResultsPresenter.java @@ -71,6 +71,7 @@ import com.extjs.gxt.ui.client.widget.Component; import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.event.dom.client.ClickHandler; +import com.google.gwt.user.client.Window; import com.google.gwt.user.client.rpc.AsyncCallback; import com.google.gwt.user.client.ui.AbstractImagePrototype; import com.google.inject.ImplementedBy; @@ -83,6 +84,7 @@ import org.sigmah.client.ui.notif.ConfirmCallback; import org.sigmah.client.ui.notif.N10N; import org.sigmah.client.ui.zone.Zone; +import org.sigmah.client.ui.zone.ZoneRequest; import org.sigmah.client.util.profiler.Checkpoint; import org.sigmah.client.util.profiler.Execution; import org.sigmah.client.util.profiler.ExecutionAsyncDAO; @@ -104,13 +106,6 @@ */ @Singleton public class SearchResultsPresenter extends AbstractPagePresenter { - - public static interface ReminderOrMonitoredPointHandler{ - public void onLabelClickEvent(Integer projectId); - } - - // Page requests linked to the tabs. - private HashMap requests; // /** // * Search results tab id. @@ -122,9 +117,7 @@ public static interface ReminderOrMonitoredPointHandler{ */ @ImplementedBy(SearchResultsView.class) public static interface View extends ViewInterface { - - - + void initialize( String searchText ); } /** @@ -151,7 +144,10 @@ public Page getPage() { @Override public void onPageRequest(PageRequest request) { // TODO Auto-generated method stub - + //view.initialize() is default + String title = (String)request.getData(RequestParameter.TITLE); + Window.alert("Title is " + title ); + view.initialize(title); } diff --git a/src/main/java/org/sigmah/client/ui/presenter/zone/MenuBannerPresenter.java b/src/main/java/org/sigmah/client/ui/presenter/zone/MenuBannerPresenter.java index bd2236647..9fe9bb08c 100644 --- a/src/main/java/org/sigmah/client/ui/presenter/zone/MenuBannerPresenter.java +++ b/src/main/java/org/sigmah/client/ui/presenter/zone/MenuBannerPresenter.java @@ -49,6 +49,7 @@ import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.event.dom.client.ClickHandler; import com.google.gwt.event.dom.client.HasClickHandlers; +import com.google.gwt.user.client.Window; import com.google.gwt.user.client.ui.Panel; import com.google.inject.ImplementedBy; import com.google.inject.Inject; @@ -219,10 +220,12 @@ public void onZoneRequest(final ZoneRequest zoneRequest) { // Simple page request: add a new tab. if (tabTitle == null) { + Window.alert("Gubi tabtitle/header is null"); addTab(request); } // Page request + title: tab title update. else { + Window.alert("Gubi tabtitle/header is not null, it is " + tabTitle ); view.getTabBar().updateTitle(new MenuTabId(request), tabTitle); } @@ -270,15 +273,18 @@ private void addTab(final PageRequest request) { if(request.getPage()==Page.DASHBOARD){ tab.getElement().setId(DASHBOARD_HOME_TAB_ID); - } + } + // Adds the tab. view.getTabBar().addTab(tab); requests.put(tab.getId(), new PageRequest(request)); // Important: create a new instance. // Sets the first title. final String pageTitle = Page.getTitle(request.getPage()); + Log.error("pageTitle is " + pageTitle ); final String tabTitle = ClientUtils.isNotBlank(pageTitle) && !PropertyName.isErrorKey(pageTitle) ? pageTitle : I18N.CONSTANTS.loading(); view.getTabBar().updateTitle(tab.getId(), tabTitle); + Log.error("tabTitle is " + tabTitle ); } diff --git a/src/main/java/org/sigmah/client/ui/presenter/zone/SearchPresenter.java b/src/main/java/org/sigmah/client/ui/presenter/zone/SearchPresenter.java index 26fd50d4e..fe6e70771 100644 --- a/src/main/java/org/sigmah/client/ui/presenter/zone/SearchPresenter.java +++ b/src/main/java/org/sigmah/client/ui/presenter/zone/SearchPresenter.java @@ -23,9 +23,11 @@ import org.sigmah.client.util.ClientUtils; import org.sigmah.shared.conf.PropertyName; +import com.allen_sauer.gwt.log.client.Log; import com.extjs.gxt.ui.client.event.Events; import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.event.dom.client.ClickHandler; +import com.google.gwt.user.client.Window; import com.google.gwt.user.client.ui.Button; import com.google.gwt.user.client.ui.HasHTML; import com.google.gwt.user.client.ui.ListBox; @@ -71,6 +73,7 @@ public SearchPresenter(View view, Injector injector) { super(view, injector); // TODO Auto-generated constructor stub } + /** * View interface. @@ -106,10 +109,23 @@ public void onBind() { @Override public void onClick(ClickEvent event) { - final PageRequest request = new PageRequest(Page.SEARCH_RESULTS); //have to add a request param here so that it opens a tab with a new title //request.addParameter(RequestParameter.HEADER, view.getSearchText()); - eventBus.navigateRequest(request); + String searchText = view.getSearchText().getText(); + if(searchText.length() > 0){ + final PageRequest request = new PageRequest(Page.SEARCH_RESULTS); + request.addData(RequestParameter.HEADER, searchText ); + request.addData(RequestParameter.TITLE, searchText ); + //request.addParameter(RequestParameter.ID, ); + //request.addParameter(RequestParameter.HEADER, searchText ); + //request.addParameter(RequestParameter.TITLE, searchText + " Search Results"); + Log.error("Title set to " + request.getData(RequestParameter.TITLE)); + Window.alert("Title set to " + request.getData(RequestParameter.TITLE)); + Log.error("Header set to " + request.getData(RequestParameter.HEADER)); + Window.alert("Header set to " + request.getData(RequestParameter.HEADER)); + eventBus.navigateRequest(request); + + } } }); diff --git a/src/main/java/org/sigmah/client/ui/view/SearchResultsView.java b/src/main/java/org/sigmah/client/ui/view/SearchResultsView.java index 52ca0631d..e763893a2 100644 --- a/src/main/java/org/sigmah/client/ui/view/SearchResultsView.java +++ b/src/main/java/org/sigmah/client/ui/view/SearchResultsView.java @@ -65,6 +65,7 @@ import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.event.dom.client.ClickHandler; import com.google.gwt.i18n.client.DateTimeFormat; +import com.google.gwt.user.client.Window; import com.google.gwt.user.client.ui.AbstractImagePrototype; import com.google.gwt.user.client.ui.Widget; import com.google.inject.Inject; @@ -86,9 +87,11 @@ public class SearchResultsView extends AbstractView implements SearchResultsPres * Reminders expected date label style name. */ private static final String EXPECTED_DATE_LABEL_STYLE = "points-date-exceeded"; + private String searchText; private ContentPanel remindersPanel; private ListStore remindersStore; + private LayoutContainer centerContainer; /** @@ -100,14 +103,20 @@ public void initialize() { // -- // Center panel (OrgUnits + Contacts + Projects). // -- - final LayoutContainer centerContainer = Layouts.vBox(); - centerContainer.add(createRemindersPanel(), Layouts.vBoxData(Margin.BOTTOM)); + } + + public void initialize(String searchText) { + this.searchText = searchText; + centerContainer = Layouts.vBox(); + Window.alert("Searchtext set to " + searchText ); + centerContainer.add(createRemindersPanel(), Layouts.vBoxData(Margin.BOTTOM)); add(centerContainer); - } + + // ------------------------------------------------------------------------------------------- // // UTILITY METHODS. @@ -121,11 +130,13 @@ public void initialize() { private Component createRemindersPanel() { remindersStore = new ListStore(); - final Grid reminderGrid = new Grid(remindersStore, new ColumnModel(createRemindersGridColumns())); + Grid reminderGrid = new Grid(remindersStore, new ColumnModel(createRemindersGridColumns())); reminderGrid.getView().setForceFit(true); reminderGrid.setAutoExpandColumn(ReminderDTO.LABEL); - remindersPanel = Panels.content("Search Results"); + Window.alert("Searchtext is currently " + searchText ); + remindersPanel = Panels.content("Search results for \"" + searchText + "\""); + //remindersPanel.repaint(); remindersPanel.add(reminderGrid); return remindersPanel; From 695f257260c0dc82015e66512dfa1eae3ef03f5e Mon Sep 17 00:00:00 2001 From: indianauthority97 Date: Wed, 31 May 2017 15:45:12 +0530 Subject: [PATCH 05/36] Multiple tabs open but bugs exist --- .../ui/presenter/SearchResultsPresenter.java | 7 +--- .../presenter/zone/MenuBannerPresenter.java | 37 +++++++++++++++---- .../ui/presenter/zone/SearchPresenter.java | 15 ++++---- .../client/ui/view/SearchResultsView.java | 2 +- .../client/ui/view/zone/SearchView.java | 4 +- 5 files changed, 42 insertions(+), 23 deletions(-) diff --git a/src/main/java/org/sigmah/client/ui/presenter/SearchResultsPresenter.java b/src/main/java/org/sigmah/client/ui/presenter/SearchResultsPresenter.java index 3a0ebcb6d..e8597a8ff 100644 --- a/src/main/java/org/sigmah/client/ui/presenter/SearchResultsPresenter.java +++ b/src/main/java/org/sigmah/client/ui/presenter/SearchResultsPresenter.java @@ -106,11 +106,6 @@ */ @Singleton public class SearchResultsPresenter extends AbstractPagePresenter { - -// /** -// * Search results tab id. -// */ -// private final static String SEARCH_RESULTS_TAB_ID="searchResultsTabId"; /** * View interface. @@ -146,7 +141,7 @@ public void onPageRequest(PageRequest request) { // TODO Auto-generated method stub //view.initialize() is default String title = (String)request.getData(RequestParameter.TITLE); - Window.alert("Title is " + title ); + //Window.alert("Title is " + title ); view.initialize(title); } diff --git a/src/main/java/org/sigmah/client/ui/presenter/zone/MenuBannerPresenter.java b/src/main/java/org/sigmah/client/ui/presenter/zone/MenuBannerPresenter.java index 9fe9bb08c..1241f4aac 100644 --- a/src/main/java/org/sigmah/client/ui/presenter/zone/MenuBannerPresenter.java +++ b/src/main/java/org/sigmah/client/ui/presenter/zone/MenuBannerPresenter.java @@ -55,6 +55,7 @@ import com.google.inject.Inject; import com.google.inject.Singleton; +import org.apache.commons.lang3.StringEscapeUtils; /** * Menu banner presenter displaying main tabs. * @@ -72,9 +73,15 @@ public class MenuBannerPresenter extends AbstractZonePresenter params; - private MenuTabId(final PageRequest request) { + private MenuTabId(PageRequest request) { this.token = request.getPage().getParentKey() != null ? request.getPage().getParentKey() : request.getPage().getToken(); this.params = request.getParameters(true); @@ -325,6 +347,7 @@ public boolean equals(Object obj) { // Compares parameters maps sizes. if (equals) { + //Window.alert("Found some existing tab!"); equals &= params.size() == other.params.size(); } diff --git a/src/main/java/org/sigmah/client/ui/presenter/zone/SearchPresenter.java b/src/main/java/org/sigmah/client/ui/presenter/zone/SearchPresenter.java index fe6e70771..6f342d8e6 100644 --- a/src/main/java/org/sigmah/client/ui/presenter/zone/SearchPresenter.java +++ b/src/main/java/org/sigmah/client/ui/presenter/zone/SearchPresenter.java @@ -116,13 +116,14 @@ public void onClick(ClickEvent event) { final PageRequest request = new PageRequest(Page.SEARCH_RESULTS); request.addData(RequestParameter.HEADER, searchText ); request.addData(RequestParameter.TITLE, searchText ); - //request.addParameter(RequestParameter.ID, ); - //request.addParameter(RequestParameter.HEADER, searchText ); - //request.addParameter(RequestParameter.TITLE, searchText + " Search Results"); - Log.error("Title set to " + request.getData(RequestParameter.TITLE)); - Window.alert("Title set to " + request.getData(RequestParameter.TITLE)); - Log.error("Header set to " + request.getData(RequestParameter.HEADER)); - Window.alert("Header set to " + request.getData(RequestParameter.HEADER)); + request.addParameter(RequestParameter.ID, searchText.replaceAll("\\W", "")); + request.addParameter(RequestParameter.CONTENT, searchText ); + request.addParameter(RequestParameter.HEADER, searchText ); + request.addParameter(RequestParameter.TITLE, searchText ); + //Log.error("Title set to " + request.getData(RequestParameter.TITLE)); + //Window.alert("Title set to " + request.getData(RequestParameter.TITLE)); + //Log.error("Header set to " + request.getData(RequestParameter.HEADER)); + //Window.alert("Header set to " + request.getData(RequestParameter.HEADER)); eventBus.navigateRequest(request); } diff --git a/src/main/java/org/sigmah/client/ui/view/SearchResultsView.java b/src/main/java/org/sigmah/client/ui/view/SearchResultsView.java index e763893a2..5325c09ae 100644 --- a/src/main/java/org/sigmah/client/ui/view/SearchResultsView.java +++ b/src/main/java/org/sigmah/client/ui/view/SearchResultsView.java @@ -134,7 +134,7 @@ private Component createRemindersPanel() { reminderGrid.getView().setForceFit(true); reminderGrid.setAutoExpandColumn(ReminderDTO.LABEL); - Window.alert("Searchtext is currently " + searchText ); + //Window.alert("Searchtext is currently " + searchText ); remindersPanel = Panels.content("Search results for \"" + searchText + "\""); //remindersPanel.repaint(); remindersPanel.add(reminderGrid); diff --git a/src/main/java/org/sigmah/client/ui/view/zone/SearchView.java b/src/main/java/org/sigmah/client/ui/view/zone/SearchView.java index dd0b04b12..91b17eab5 100644 --- a/src/main/java/org/sigmah/client/ui/view/zone/SearchView.java +++ b/src/main/java/org/sigmah/client/ui/view/zone/SearchView.java @@ -75,13 +75,13 @@ public void initialize() { searchText = new TextBox(); //searchText.setText("Enter search text"); - searchText.getElement().setPropertyString("placeholder", "Search text"); + searchText.getElement().setPropertyString("placeholder", "Search"); searchButton = new Button("Go"); //searchBarPanel.add(searchForLabel); - searchBarPanel.add(searchOptions); searchBarPanel.add(searchText); + searchBarPanel.add(searchOptions); searchBarPanel.add(searchButton); // initWidget(); Useless From 5f749b4a16873732c23b6d184d33bc09c972810e Mon Sep 17 00:00:00 2001 From: indianauthority97 Date: Sun, 4 Jun 2017 19:24:27 +0530 Subject: [PATCH 06/36] Attempt at connecting to Solr Server --- pom.xml | 20 ++- .../sigmah/client/search/SearchService.java | 13 ++ .../client/search/SearchServiceAsync.java | 12 ++ .../ui/presenter/SearchResultsPresenter.java | 14 +- .../ui/presenter/zone/SearchPresenter.java | 122 ++++++++++++--- .../client/ui/view/SearchResultsView.java | 17 ++- .../server/search/SearchServiceImpl.java | 16 ++ .../sigmah/server/search/SolrSearcher.java | 144 ++++++++++++++++++ .../shared/dto/search/SearchResultsDTO.java | 27 ++++ src/main/webapp/WEB-INF/web.xml | 42 ++--- 10 files changed, 374 insertions(+), 53 deletions(-) create mode 100644 src/main/java/org/sigmah/client/search/SearchService.java create mode 100644 src/main/java/org/sigmah/client/search/SearchServiceAsync.java create mode 100644 src/main/java/org/sigmah/server/search/SearchServiceImpl.java create mode 100644 src/main/java/org/sigmah/server/search/SolrSearcher.java create mode 100644 src/main/java/org/sigmah/shared/dto/search/SearchResultsDTO.java diff --git a/pom.xml b/pom.xml index ca9fefbba..73d2cfee7 100644 --- a/pom.xml +++ b/pom.xml @@ -214,7 +214,7 @@ org.hibernate.dialect.PostgreSQLDialect org.postgresql.Driver update - true + false true ${sigmah.database.url} ${sigmah.database.user} @@ -551,6 +551,15 @@ mail 1.4.5 + + + + solr-solrj + org.apache.solr + 6.5.0 + jar + compile + @@ -1039,6 +1048,13 @@ sigmah-dev + + jdbc:postgresql://localhost:5432/sigmah + sigmah + hamsig + /home/sigmah_dev + /home/sigmah_dev/archives + PRETTY @@ -1047,7 +1063,7 @@ - true + false diff --git a/src/main/java/org/sigmah/client/search/SearchService.java b/src/main/java/org/sigmah/client/search/SearchService.java new file mode 100644 index 000000000..780aee90c --- /dev/null +++ b/src/main/java/org/sigmah/client/search/SearchService.java @@ -0,0 +1,13 @@ +package org.sigmah.client.search; + +import java.util.ArrayList; + +import org.sigmah.shared.dto.search.SearchResultsDTO; +import com.google.gwt.user.client.rpc.RemoteService; +import com.google.gwt.user.client.rpc.RemoteServiceRelativePath; + +@RemoteServiceRelativePath("search") +public interface SearchService extends RemoteService { + //TODO Add method stubs here + ArrayList search(String searchStr); +} diff --git a/src/main/java/org/sigmah/client/search/SearchServiceAsync.java b/src/main/java/org/sigmah/client/search/SearchServiceAsync.java new file mode 100644 index 000000000..e223493cb --- /dev/null +++ b/src/main/java/org/sigmah/client/search/SearchServiceAsync.java @@ -0,0 +1,12 @@ +package org.sigmah.client.search; + +import java.util.ArrayList; + +import org.sigmah.shared.dto.search.SearchResultsDTO; +import com.google.gwt.user.client.rpc.AsyncCallback; + + +public interface SearchServiceAsync { + + public void search(String searchStr, AsyncCallback> callback); +} diff --git a/src/main/java/org/sigmah/client/ui/presenter/SearchResultsPresenter.java b/src/main/java/org/sigmah/client/ui/presenter/SearchResultsPresenter.java index e8597a8ff..e56ae2c52 100644 --- a/src/main/java/org/sigmah/client/ui/presenter/SearchResultsPresenter.java +++ b/src/main/java/org/sigmah/client/ui/presenter/SearchResultsPresenter.java @@ -1,5 +1,7 @@ package org.sigmah.client.ui.presenter; +import java.io.IOException; + /* * #%L * Sigmah @@ -30,6 +32,7 @@ import java.util.Map; import java.util.Set; +import org.apache.solr.client.solrj.SolrServerException; import org.sigmah.client.dispatch.CommandResultHandler; import org.sigmah.client.dispatch.monitor.LoadingMask; import org.sigmah.client.i18n.I18N; @@ -37,6 +40,8 @@ import org.sigmah.client.page.Page; import org.sigmah.client.page.PageRequest; import org.sigmah.client.page.RequestParameter; +import org.sigmah.client.search.SearchService; +import org.sigmah.client.search.SearchServiceAsync; import org.sigmah.client.ui.presenter.base.AbstractPagePresenter; import org.sigmah.client.ui.presenter.contact.dashboardlist.ContactsListWidget; import org.sigmah.client.ui.presenter.project.treegrid.ProjectsListWidget; @@ -69,6 +74,7 @@ import com.extjs.gxt.ui.client.event.Listener; import com.extjs.gxt.ui.client.store.ListStore; import com.extjs.gxt.ui.client.widget.Component; +import com.google.gwt.core.client.GWT; import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.event.dom.client.ClickHandler; import com.google.gwt.user.client.Window; @@ -97,6 +103,7 @@ import org.sigmah.shared.conf.PropertyName; import org.sigmah.shared.dto.profile.CheckPointDTO; import org.sigmah.shared.dto.profile.ExecutionDTO; +import org.sigmah.shared.dto.search.SearchResultsDTO; /** * Dashboard page presenter. @@ -137,12 +144,17 @@ public Page getPage() { } @Override - public void onPageRequest(PageRequest request) { + public void onPageRequest(PageRequest request){ // TODO Auto-generated method stub //view.initialize() is default String title = (String)request.getData(RequestParameter.TITLE); //Window.alert("Title is " + title ); view.initialize(title); +// SearchResultsDTO search_res = new SearchResultsDTO(); +// Map results = search_res.getResult(); +// for (Map.Entry entry : results.entrySet()){ +// Window.alert(entry.getKey() + "/" + entry.getValue()); +// } } diff --git a/src/main/java/org/sigmah/client/ui/presenter/zone/SearchPresenter.java b/src/main/java/org/sigmah/client/ui/presenter/zone/SearchPresenter.java index 6f342d8e6..c6e833d1b 100644 --- a/src/main/java/org/sigmah/client/ui/presenter/zone/SearchPresenter.java +++ b/src/main/java/org/sigmah/client/ui/presenter/zone/SearchPresenter.java @@ -1,5 +1,6 @@ package org.sigmah.client.ui.presenter.zone; +import java.util.ArrayList; import java.util.HashMap; import java.util.Map; @@ -10,6 +11,8 @@ import org.sigmah.client.page.Page; import org.sigmah.client.page.PageRequest; import org.sigmah.client.page.RequestParameter; +import org.sigmah.client.search.SearchService; +import org.sigmah.client.search.SearchServiceAsync; import org.sigmah.client.ui.presenter.CreateProjectPresenter; import org.sigmah.client.ui.presenter.base.AbstractZonePresenter; import org.sigmah.client.ui.view.base.ViewInterface; @@ -22,16 +25,26 @@ import org.sigmah.client.ui.zone.ZoneRequest; import org.sigmah.client.util.ClientUtils; import org.sigmah.shared.conf.PropertyName; +import org.sigmah.shared.dto.search.SearchResultsDTO; import com.allen_sauer.gwt.log.client.Log; import com.extjs.gxt.ui.client.event.Events; +import com.google.gwt.core.client.GWT; import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.event.dom.client.ClickHandler; +import com.google.gwt.event.dom.client.KeyCodes; +import com.google.gwt.event.dom.client.KeyDownEvent; +import com.google.gwt.event.dom.client.KeyDownHandler; +import com.google.gwt.event.dom.client.KeyUpEvent; +import com.google.gwt.event.dom.client.KeyUpHandler; import com.google.gwt.user.client.Window; +import com.google.gwt.user.client.rpc.AsyncCallback; import com.google.gwt.user.client.ui.Button; import com.google.gwt.user.client.ui.HasHTML; +import com.google.gwt.user.client.ui.Label; import com.google.gwt.user.client.ui.ListBox; import com.google.gwt.user.client.ui.Panel; +import com.google.gwt.user.client.ui.RootPanel; import com.google.gwt.user.client.ui.TextBox; import com.google.inject.ImplementedBy; import com.google.inject.Inject; @@ -60,20 +73,22 @@ */ /** -* Organization banner presenter displaying organization's name and logo. -* -* @author -*/ + * Organization banner presenter displaying organization's name and logo. + * + * @author + */ @Singleton public class SearchPresenter extends AbstractZonePresenter { - + + private final SearchServiceAsync searchService = GWT.create(SearchService.class); + private ArrayList searchResults = new ArrayList(); + @Inject public SearchPresenter(View view, Injector injector) { super(view, injector); // TODO Auto-generated constructor stub } - /** * View interface. @@ -82,9 +97,13 @@ public SearchPresenter(View view, Injector injector) { public static interface View extends ViewInterface { HasHTML getNameLabel(); + Panel getSearchBarPanel(); + ListBox getSearchOptions(); + TextBox getSearchText(); + Button getSearchButton(); } @@ -97,41 +116,98 @@ public Zone getZone() { // TODO Auto-generated method stub return Zone.SEARCH_BANNER; } - + /** * {@inheritDoc} */ @Override public void onBind() { - + + view.getSearchButton().addKeyUpHandler( new KeyUpHandler() { + + @Override + public void onKeyUp(KeyUpEvent event) { + if (event.getNativeKeyCode() == KeyCodes.KEY_ENTER) { + String searchText = view.getSearchText().getText(); + if (searchText.length() > 0) { + final PageRequest request = new PageRequest(Page.SEARCH_RESULTS); + request.addData(RequestParameter.HEADER, searchText); + request.addData(RequestParameter.TITLE, searchText); + request.addParameter(RequestParameter.ID, searchText.replaceAll("\\W", "")); + request.addParameter(RequestParameter.CONTENT, searchText); + request.addParameter(RequestParameter.HEADER, searchText); + request.addParameter(RequestParameter.TITLE, searchText); + // Log.error("Title set to " + + // request.getData(RequestParameter.TITLE)); + // Window.alert("Title set to " + + // request.getData(RequestParameter.TITLE)); + // Log.error("Header set to " + + // request.getData(RequestParameter.HEADER)); + // Window.alert("Header set to " + + // request.getData(RequestParameter.HEADER)); + search(); + eventBus.navigateRequest(request); + } + } + } + + }); + + view.getSearchButton().addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { - - //have to add a request param here so that it opens a tab with a new title - //request.addParameter(RequestParameter.HEADER, view.getSearchText()); + + // have to add a request param here so that it opens a tab with + // a new title + // request.addParameter(RequestParameter.HEADER, + // view.getSearchText()); String searchText = view.getSearchText().getText(); - if(searchText.length() > 0){ + if (searchText.length() > 0) { final PageRequest request = new PageRequest(Page.SEARCH_RESULTS); - request.addData(RequestParameter.HEADER, searchText ); - request.addData(RequestParameter.TITLE, searchText ); + request.addData(RequestParameter.HEADER, searchText); + request.addData(RequestParameter.TITLE, searchText); request.addParameter(RequestParameter.ID, searchText.replaceAll("\\W", "")); - request.addParameter(RequestParameter.CONTENT, searchText ); - request.addParameter(RequestParameter.HEADER, searchText ); - request.addParameter(RequestParameter.TITLE, searchText ); - //Log.error("Title set to " + request.getData(RequestParameter.TITLE)); - //Window.alert("Title set to " + request.getData(RequestParameter.TITLE)); - //Log.error("Header set to " + request.getData(RequestParameter.HEADER)); - //Window.alert("Header set to " + request.getData(RequestParameter.HEADER)); + request.addParameter(RequestParameter.CONTENT, searchText); + request.addParameter(RequestParameter.HEADER, searchText); + request.addParameter(RequestParameter.TITLE, searchText); + // Log.error("Title set to " + + // request.getData(RequestParameter.TITLE)); + // Window.alert("Title set to " + + // request.getData(RequestParameter.TITLE)); + // Log.error("Header set to " + + // request.getData(RequestParameter.HEADER)); + // Window.alert("Header set to " + + // request.getData(RequestParameter.HEADER)); + search(); eventBus.navigateRequest(request); - + } } }); } + private void search() { + + String textToServer = view.getSearchText().getText(); + + // Send the input to the server. + searchService.search(textToServer, new AsyncCallback>() { + public void onFailure(Throwable caught) { + Window.alert("Failure on the server side!"); + caught.printStackTrace(); + } + + public void onSuccess(ArrayList result) { + searchResults = result; + for( SearchResultsDTO doc : searchResults ){ + Window.alert(doc.getResult().toString()); + } + } + }); + } /** * {@inheritDoc} @@ -139,7 +215,7 @@ public void onClick(ClickEvent event) { @Override public void onZoneRequest(ZoneRequest zoneRequest) { // TODO Auto-generated method stub - + } } diff --git a/src/main/java/org/sigmah/client/ui/view/SearchResultsView.java b/src/main/java/org/sigmah/client/ui/view/SearchResultsView.java index 5325c09ae..7e5395ac1 100644 --- a/src/main/java/org/sigmah/client/ui/view/SearchResultsView.java +++ b/src/main/java/org/sigmah/client/ui/view/SearchResultsView.java @@ -1,6 +1,8 @@ package org.sigmah.client.ui.view; +import java.util.ArrayList; + /* * #%L * Sigmah @@ -27,8 +29,11 @@ import java.util.Arrays; import java.util.Date; import java.util.List; +import java.util.Map; import org.sigmah.client.i18n.I18N; +import org.sigmah.client.search.SearchService; +import org.sigmah.client.search.SearchServiceAsync; import org.sigmah.client.ui.presenter.SearchResultsPresenter; import org.sigmah.client.ui.presenter.contact.dashboardlist.ContactsListWidget; import org.sigmah.client.ui.presenter.project.treegrid.ProjectsListWidget; @@ -62,6 +67,7 @@ import com.extjs.gxt.ui.client.widget.grid.filters.DateFilter; import com.extjs.gxt.ui.client.widget.grid.filters.GridFilters; import com.extjs.gxt.ui.client.widget.grid.filters.StringFilter; +import com.google.gwt.core.client.GWT; import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.event.dom.client.ClickHandler; import com.google.gwt.i18n.client.DateTimeFormat; @@ -71,6 +77,7 @@ import com.google.inject.Inject; import com.google.inject.Provider; import com.google.inject.Singleton; + import org.sigmah.client.ui.presenter.DashboardPresenter.ReminderOrMonitoredPointHandler; @@ -99,14 +106,10 @@ public class SearchResultsView extends AbstractView implements SearchResultsPres */ @Override public void initialize() { - - // -- - // Center panel (OrgUnits + Contacts + Projects). - // -- - + //default } - public void initialize(String searchText) { + public void initialize(final String searchText) { this.searchText = searchText; centerContainer = Layouts.vBox(); Window.alert("Searchtext set to " + searchText ); @@ -231,3 +234,5 @@ public Object render(final ReminderDTO model, final String property, final Colum } + + diff --git a/src/main/java/org/sigmah/server/search/SearchServiceImpl.java b/src/main/java/org/sigmah/server/search/SearchServiceImpl.java new file mode 100644 index 000000000..8336b7acb --- /dev/null +++ b/src/main/java/org/sigmah/server/search/SearchServiceImpl.java @@ -0,0 +1,16 @@ +package org.sigmah.server.search; + +import com.google.gwt.user.server.rpc.RemoteServiceServlet; + +import java.util.ArrayList; +import org.sigmah.client.search.SearchService; +import org.sigmah.server.search.SolrSearcher; +import org.sigmah.shared.dto.search.SearchResultsDTO; + +@SuppressWarnings("serial") +public class SearchServiceImpl extends RemoteServiceServlet implements SearchService{ + //implementation of the Search Methods + public ArrayList search(String searchStr){ + return SolrSearcher.getInstance().search(searchStr); + } +} diff --git a/src/main/java/org/sigmah/server/search/SolrSearcher.java b/src/main/java/org/sigmah/server/search/SolrSearcher.java new file mode 100644 index 000000000..1da8b47a8 --- /dev/null +++ b/src/main/java/org/sigmah/server/search/SolrSearcher.java @@ -0,0 +1,144 @@ +package org.sigmah.server.search; + +import java.io.IOException; +import java.net.MalformedURLException; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.Map; + +import org.apache.solr.client.solrj.*; +import org.apache.solr.client.solrj.SolrQuery.ORDER; +import org.apache.solr.client.solrj.impl.*; +import org.apache.solr.client.solrj.request.QueryRequest; +import org.apache.solr.client.solrj.response.QueryResponse; +import org.apache.solr.common.SolrDocument; +import org.apache.solr.common.SolrDocumentList; +import org.apache.solr.common.util.NamedList; +import org.sigmah.shared.dto.search.SearchResultsDTO; + +import com.google.gwt.json.client.JSONArray; +import com.google.gwt.json.client.JSONObject; +import com.google.gwt.user.client.Window; + +public class SolrSearcher { + + private String urlString; + private SolrClient solrServer; + private static SolrSearcher instance; + + public String getUrlString() { + return urlString; + } + + private SolrSearcher() { + } + + public static SolrSearcher getInstance() { // Singleton + + if (instance == null) { + instance = new SolrSearcher(); + try { + instance.loadServer(); + } catch (MalformedURLException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + return instance; + } + + private void loadServer() throws MalformedURLException { + urlString = "http://localhost:8983/solr/Test_Sigmah"; + solrServer = new HttpSolrClient.Builder(urlString).build(); + Window.alert("Successful solr connection!"); + } + + public SolrDocumentList SolrTestQuery() { + SolrQuery query = new SolrQuery(); + query.setQuery("*:*"); + QueryResponse response; + try { + response = solrServer.query(query); + SolrDocumentList list = response.getResults(); + for (SolrDocument doc : response.getResults()) { + Window.alert(doc.toString()); + } + return list; + } catch (SolrServerException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + return null; + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + return null; + } + + } + + public ArrayList search(String searchStr) { + + ArrayList searchList = new ArrayList(); + + SolrQuery query = new SolrQuery(); + query.setQuery("*:*"); + + //query.addSortField("weight", ORDER.desc); + + QueryResponse rsp = null; + + try { + if (solrServer != null) { + rsp = solrServer.query(query); + } + } catch (SolrServerException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + if (rsp != null) { + Iterator iter = rsp.getResults().iterator(); + while (iter.hasNext()) { + SearchResultsDTO descriptor = new SearchResultsDTO(); + SolrDocument resultDoc = (SolrDocument) iter.next(); + + //Will make this more specific later + Map results = resultDoc.getFieldValueMap(); + for (Map.Entry entry : results.entrySet()){ + descriptor.getResult().add(entry.getKey().toString() + " ::: " + entry.getValue().toString()); + } + +// descriptor.setUrlOrName((String) resultDoc.getFieldValue("id")); +// descriptor.setSubText((String) resultDoc.getFieldValue("links")); +// descriptor.setRelevance((String) resultDoc.getFieldValue("cat")); + + searchList.add(descriptor); + + } + +// SolrQuery q = new SolrQuery(); +// QueryRequest req = new QueryRequest(q); +// +// NoOpResponseParser rawJsonResponseParser = new NoOpResponseParser(); +// rawJsonResponseParser.setWriterType("json"); +// req.setResponseParser(rawJsonResponseParser); +// +// NamedList resp = null; +// try { +// resp = solrServer.request(req); +// } catch (SolrServerException | IOException e) { +// // TODO Auto-generated catch block +// e.printStackTrace(); +// } +// String jsonResponse = (String) resp.get("response"); +// +// System.out.println(jsonResponse ); + } + + return searchList; + } + +} \ No newline at end of file diff --git a/src/main/java/org/sigmah/shared/dto/search/SearchResultsDTO.java b/src/main/java/org/sigmah/shared/dto/search/SearchResultsDTO.java new file mode 100644 index 000000000..81de0c9d4 --- /dev/null +++ b/src/main/java/org/sigmah/shared/dto/search/SearchResultsDTO.java @@ -0,0 +1,27 @@ +package org.sigmah.shared.dto.search; + +import java.io.Serializable; +import java.util.ArrayList; + +public class SearchResultsDTO implements Serializable{ + + /** + * Serial version UID. + */ + private static final long serialVersionUID = -1227917435084017780L; + + private ArrayList result; + + public SearchResultsDTO(){ + + } + + public ArrayList getResult() { + return result; + } + + public void setResult(ArrayList result) { + this.result = result; + } + +} diff --git a/src/main/webapp/WEB-INF/web.xml b/src/main/webapp/WEB-INF/web.xml index 52d1f4e67..c6c7b3175 100644 --- a/src/main/webapp/WEB-INF/web.xml +++ b/src/main/webapp/WEB-INF/web.xml @@ -1,25 +1,13 @@ - + org.sigmah.server.inject.ServletContextListener + + + + SearchServiceImpl + + org.sigmah.server.search.SearchServiceImpl + + + + SearchServiceImpl + /sigmah/search + From 883460a8aa5438a65993838f9646629fa0e97fcb Mon Sep 17 00:00:00 2001 From: indianauthority97 Date: Wed, 7 Jun 2017 16:37:55 +0530 Subject: [PATCH 07/36] Minor changes to the search classes --- .../ui/presenter/SearchResultsPresenter.java | 1 - .../ui/presenter/zone/SearchPresenter.java | 32 ++++++------- .../server/search/SearchServiceImpl.java | 1 + .../sigmah/server/search/SolrSearcher.java | 47 ++++++++----------- .../shared/dto/search/SearchResultsDTO.java | 6 +-- 5 files changed, 39 insertions(+), 48 deletions(-) diff --git a/src/main/java/org/sigmah/client/ui/presenter/SearchResultsPresenter.java b/src/main/java/org/sigmah/client/ui/presenter/SearchResultsPresenter.java index e56ae2c52..8bf2fe3d0 100644 --- a/src/main/java/org/sigmah/client/ui/presenter/SearchResultsPresenter.java +++ b/src/main/java/org/sigmah/client/ui/presenter/SearchResultsPresenter.java @@ -32,7 +32,6 @@ import java.util.Map; import java.util.Set; -import org.apache.solr.client.solrj.SolrServerException; import org.sigmah.client.dispatch.CommandResultHandler; import org.sigmah.client.dispatch.monitor.LoadingMask; import org.sigmah.client.i18n.I18N; diff --git a/src/main/java/org/sigmah/client/ui/presenter/zone/SearchPresenter.java b/src/main/java/org/sigmah/client/ui/presenter/zone/SearchPresenter.java index c6e833d1b..02dde5fb4 100644 --- a/src/main/java/org/sigmah/client/ui/presenter/zone/SearchPresenter.java +++ b/src/main/java/org/sigmah/client/ui/presenter/zone/SearchPresenter.java @@ -130,13 +130,13 @@ public void onKeyUp(KeyUpEvent event) { if (event.getNativeKeyCode() == KeyCodes.KEY_ENTER) { String searchText = view.getSearchText().getText(); if (searchText.length() > 0) { - final PageRequest request = new PageRequest(Page.SEARCH_RESULTS); - request.addData(RequestParameter.HEADER, searchText); - request.addData(RequestParameter.TITLE, searchText); - request.addParameter(RequestParameter.ID, searchText.replaceAll("\\W", "")); - request.addParameter(RequestParameter.CONTENT, searchText); - request.addParameter(RequestParameter.HEADER, searchText); - request.addParameter(RequestParameter.TITLE, searchText); +// final PageRequest request = new PageRequest(Page.SEARCH_RESULTS); +// request.addData(RequestParameter.HEADER, searchText); +// request.addData(RequestParameter.TITLE, searchText); +// request.addParameter(RequestParameter.ID, searchText.replaceAll("\\W", "")); +// request.addParameter(RequestParameter.CONTENT, searchText); +// request.addParameter(RequestParameter.HEADER, searchText); +// request.addParameter(RequestParameter.TITLE, searchText); // Log.error("Title set to " + // request.getData(RequestParameter.TITLE)); // Window.alert("Title set to " + @@ -146,7 +146,7 @@ public void onKeyUp(KeyUpEvent event) { // Window.alert("Header set to " + // request.getData(RequestParameter.HEADER)); search(); - eventBus.navigateRequest(request); +// eventBus.navigateRequest(request); } } } @@ -165,13 +165,13 @@ public void onClick(ClickEvent event) { // view.getSearchText()); String searchText = view.getSearchText().getText(); if (searchText.length() > 0) { - final PageRequest request = new PageRequest(Page.SEARCH_RESULTS); - request.addData(RequestParameter.HEADER, searchText); - request.addData(RequestParameter.TITLE, searchText); - request.addParameter(RequestParameter.ID, searchText.replaceAll("\\W", "")); - request.addParameter(RequestParameter.CONTENT, searchText); - request.addParameter(RequestParameter.HEADER, searchText); - request.addParameter(RequestParameter.TITLE, searchText); +// final PageRequest request = new PageRequest(Page.SEARCH_RESULTS); +// request.addData(RequestParameter.HEADER, searchText); +// request.addData(RequestParameter.TITLE, searchText); +// request.addParameter(RequestParameter.ID, searchText.replaceAll("\\W", "")); +// request.addParameter(RequestParameter.CONTENT, searchText); +// request.addParameter(RequestParameter.HEADER, searchText); +// request.addParameter(RequestParameter.TITLE, searchText); // Log.error("Title set to " + // request.getData(RequestParameter.TITLE)); // Window.alert("Title set to " + @@ -181,7 +181,7 @@ public void onClick(ClickEvent event) { // Window.alert("Header set to " + // request.getData(RequestParameter.HEADER)); search(); - eventBus.navigateRequest(request); +// eventBus.navigateRequest(request); } } diff --git a/src/main/java/org/sigmah/server/search/SearchServiceImpl.java b/src/main/java/org/sigmah/server/search/SearchServiceImpl.java index 8336b7acb..d8a7145f0 100644 --- a/src/main/java/org/sigmah/server/search/SearchServiceImpl.java +++ b/src/main/java/org/sigmah/server/search/SearchServiceImpl.java @@ -10,6 +10,7 @@ @SuppressWarnings("serial") public class SearchServiceImpl extends RemoteServiceServlet implements SearchService{ //implementation of the Search Methods + @Override public ArrayList search(String searchStr){ return SolrSearcher.getInstance().search(searchStr); } diff --git a/src/main/java/org/sigmah/server/search/SolrSearcher.java b/src/main/java/org/sigmah/server/search/SolrSearcher.java index 1da8b47a8..533084947 100644 --- a/src/main/java/org/sigmah/server/search/SolrSearcher.java +++ b/src/main/java/org/sigmah/server/search/SolrSearcher.java @@ -16,9 +16,11 @@ import org.apache.solr.common.util.NamedList; import org.sigmah.shared.dto.search.SearchResultsDTO; +import com.allen_sauer.gwt.log.client.Log; import com.google.gwt.json.client.JSONArray; import com.google.gwt.json.client.JSONObject; import com.google.gwt.user.client.Window; +import java.net.*; public class SolrSearcher { @@ -41,6 +43,8 @@ public static SolrSearcher getInstance() { // Singleton instance.loadServer(); } catch (MalformedURLException e) { // TODO Auto-generated catch block + System.out.println("GUBI SOLR CONNECTION FAILED"); + Log.error("GUBI SOLR CONNECTION FAILED"); e.printStackTrace(); } } @@ -50,7 +54,9 @@ public static SolrSearcher getInstance() { // Singleton private void loadServer() throws MalformedURLException { urlString = "http://localhost:8983/solr/Test_Sigmah"; solrServer = new HttpSolrClient.Builder(urlString).build(); - Window.alert("Successful solr connection!"); + //Window.alert("Successful solr connection!"); + System.out.println("GUBI SOLR CONNECTION CONNECTED"); + Log.error("GUBI SOLR CONNECTION CONNECTED"); } public SolrDocumentList SolrTestQuery() { @@ -59,17 +65,23 @@ public SolrDocumentList SolrTestQuery() { QueryResponse response; try { response = solrServer.query(query); + System.out.println("GUBI SOLR QUERY HAPPENED"); + Log.error("GUBI SOLR QUERY HAPPENED"); SolrDocumentList list = response.getResults(); for (SolrDocument doc : response.getResults()) { - Window.alert(doc.toString()); + //Window.alert(doc.toString()); } return list; } catch (SolrServerException e) { // TODO Auto-generated catch block e.printStackTrace(); + System.out.println("GUBI SOLR SERVER EXCEPTION HAPPENED"); + Log.error("GUBI SOLR SERVER EXCEPTION HAPPENED"); return null; } catch (IOException e) { // TODO Auto-generated catch block + System.out.println("GUBI SOLR SERVER EXCEPTION HAPPENED"); + Log.error("GUBI SOLR SERVER EXCEPTION HAPPENED"); e.printStackTrace(); return null; } @@ -106,36 +118,15 @@ public ArrayList search(String searchStr) { SolrDocument resultDoc = (SolrDocument) iter.next(); //Will make this more specific later - Map results = resultDoc.getFieldValueMap(); - for (Map.Entry entry : results.entrySet()){ - descriptor.getResult().add(entry.getKey().toString() + " ::: " + entry.getValue().toString()); - } - -// descriptor.setUrlOrName((String) resultDoc.getFieldValue("id")); -// descriptor.setSubText((String) resultDoc.getFieldValue("links")); -// descriptor.setRelevance((String) resultDoc.getFieldValue("cat")); - +// Map results = resultDoc.getFieldValueMap(); +// for (Map.Entry entry : results.entrySet()){ +// descriptor.getResult().add(entry.getKey().toString() + " ::: " + entry.getValue().toString()); +// } + descriptor.setResult(resultDoc.toString()); searchList.add(descriptor); } -// SolrQuery q = new SolrQuery(); -// QueryRequest req = new QueryRequest(q); -// -// NoOpResponseParser rawJsonResponseParser = new NoOpResponseParser(); -// rawJsonResponseParser.setWriterType("json"); -// req.setResponseParser(rawJsonResponseParser); -// -// NamedList resp = null; -// try { -// resp = solrServer.request(req); -// } catch (SolrServerException | IOException e) { -// // TODO Auto-generated catch block -// e.printStackTrace(); -// } -// String jsonResponse = (String) resp.get("response"); -// -// System.out.println(jsonResponse ); } return searchList; diff --git a/src/main/java/org/sigmah/shared/dto/search/SearchResultsDTO.java b/src/main/java/org/sigmah/shared/dto/search/SearchResultsDTO.java index 81de0c9d4..fad24b71a 100644 --- a/src/main/java/org/sigmah/shared/dto/search/SearchResultsDTO.java +++ b/src/main/java/org/sigmah/shared/dto/search/SearchResultsDTO.java @@ -10,17 +10,17 @@ public class SearchResultsDTO implements Serializable{ */ private static final long serialVersionUID = -1227917435084017780L; - private ArrayList result; + private String result; public SearchResultsDTO(){ } - public ArrayList getResult() { + public String getResult() { return result; } - public void setResult(ArrayList result) { + public void setResult(String result) { this.result = result; } From 34597daf62f4a9080edda55829e56baf7bd7a68f Mon Sep 17 00:00:00 2001 From: indianauthority97 Date: Fri, 9 Jun 2017 20:23:03 +0530 Subject: [PATCH 08/36] Added an index button to do full import --- pom.xml | 2 +- .../sigmah/client/search/SearchService.java | 1 + .../client/search/SearchServiceAsync.java | 1 + .../ui/presenter/SearchResultsPresenter.java | 15 +- .../presenter/zone/MenuBannerPresenter.java | 12 +- .../ui/presenter/zone/SearchPresenter.java | 85 +++++++---- .../client/ui/view/SearchResultsView.java | 138 +++++------------- .../client/ui/view/zone/SearchView.java | 11 ++ .../server/search/SearchServiceImpl.java | 6 + .../sigmah/server/search/SolrSearcher.java | 50 +++++-- 10 files changed, 164 insertions(+), 157 deletions(-) diff --git a/pom.xml b/pom.xml index 73d2cfee7..0779680e3 100644 --- a/pom.xml +++ b/pom.xml @@ -1049,7 +1049,7 @@ - jdbc:postgresql://localhost:5432/sigmah + jdbc:postgresql://localhost:5432/sigmah_demo sigmah hamsig /home/sigmah_dev diff --git a/src/main/java/org/sigmah/client/search/SearchService.java b/src/main/java/org/sigmah/client/search/SearchService.java index 780aee90c..90dae6372 100644 --- a/src/main/java/org/sigmah/client/search/SearchService.java +++ b/src/main/java/org/sigmah/client/search/SearchService.java @@ -10,4 +10,5 @@ public interface SearchService extends RemoteService { //TODO Add method stubs here ArrayList search(String searchStr); + Boolean index(); } diff --git a/src/main/java/org/sigmah/client/search/SearchServiceAsync.java b/src/main/java/org/sigmah/client/search/SearchServiceAsync.java index e223493cb..8d74c3d92 100644 --- a/src/main/java/org/sigmah/client/search/SearchServiceAsync.java +++ b/src/main/java/org/sigmah/client/search/SearchServiceAsync.java @@ -9,4 +9,5 @@ public interface SearchServiceAsync { public void search(String searchStr, AsyncCallback> callback); + public void index(AsyncCallback callback); } diff --git a/src/main/java/org/sigmah/client/ui/presenter/SearchResultsPresenter.java b/src/main/java/org/sigmah/client/ui/presenter/SearchResultsPresenter.java index 8bf2fe3d0..64a8ba3d5 100644 --- a/src/main/java/org/sigmah/client/ui/presenter/SearchResultsPresenter.java +++ b/src/main/java/org/sigmah/client/ui/presenter/SearchResultsPresenter.java @@ -117,8 +117,9 @@ public class SearchResultsPresenter extends AbstractPagePresenter results = search_res.getResult(); -// for (Map.Entry entry : results.entrySet()){ -// Window.alert(entry.getKey() + "/" + entry.getValue()); -// } + view.addSearchData(request.getData(RequestParameter.CONTENT)); } diff --git a/src/main/java/org/sigmah/client/ui/presenter/zone/MenuBannerPresenter.java b/src/main/java/org/sigmah/client/ui/presenter/zone/MenuBannerPresenter.java index 1241f4aac..cd30c3302 100644 --- a/src/main/java/org/sigmah/client/ui/presenter/zone/MenuBannerPresenter.java +++ b/src/main/java/org/sigmah/client/ui/presenter/zone/MenuBannerPresenter.java @@ -293,17 +293,17 @@ private void addTab(final PageRequest request) { // Adds the tab. view.getTabBar().addTab(tab); - Window.alert("Added tab!"); + //Window.alert("Added tab!"); requests.put(tab.getId(), new PageRequest(request)); // Important: create a new instance. - - // Sets the first title. - final String pageTitle = Page.getTitle(request.getPage()); - //Window.alert("pageTitle is " + pageTitle ); - final String tabTitle = ClientUtils.isNotBlank(pageTitle) && !PropertyName.isErrorKey(pageTitle) ? pageTitle : I18N.CONSTANTS.loading(); + if(request.getPage()==Page.SEARCH_RESULTS){ view.getTabBar().updateTitle(tab.getId(), "\""+ searchTabTitle + "\""); Window.alert("Updated search tab title!"); }else{ + // Sets the first title. + final String pageTitle = Page.getTitle(request.getPage()); + //Window.alert("pageTitle is " + pageTitle ); + final String tabTitle = ClientUtils.isNotBlank(pageTitle) && !PropertyName.isErrorKey(pageTitle) ? pageTitle : I18N.CONSTANTS.loading(); view.getTabBar().updateTitle(tab.getId(), tabTitle); } //Window.alert("tabTitle is " + tabTitle ); diff --git a/src/main/java/org/sigmah/client/ui/presenter/zone/SearchPresenter.java b/src/main/java/org/sigmah/client/ui/presenter/zone/SearchPresenter.java index 02dde5fb4..66a950335 100644 --- a/src/main/java/org/sigmah/client/ui/presenter/zone/SearchPresenter.java +++ b/src/main/java/org/sigmah/client/ui/presenter/zone/SearchPresenter.java @@ -83,6 +83,7 @@ public class SearchPresenter extends AbstractZonePresenter private final SearchServiceAsync searchService = GWT.create(SearchService.class); private ArrayList searchResults = new ArrayList(); + private Boolean dih_success; @Inject public SearchPresenter(View view, Injector injector) { @@ -105,6 +106,8 @@ public static interface View extends ViewInterface { TextBox getSearchText(); Button getSearchButton(); + + Button getIndexButton(); } @@ -123,21 +126,15 @@ public Zone getZone() { @Override public void onBind() { - view.getSearchButton().addKeyUpHandler( new KeyUpHandler() { - + view.getSearchText().addKeyUpHandler(new KeyUpHandler() { + @Override public void onKeyUp(KeyUpEvent event) { if (event.getNativeKeyCode() == KeyCodes.KEY_ENTER) { + String searchText = view.getSearchText().getText(); if (searchText.length() > 0) { -// final PageRequest request = new PageRequest(Page.SEARCH_RESULTS); -// request.addData(RequestParameter.HEADER, searchText); -// request.addData(RequestParameter.TITLE, searchText); -// request.addParameter(RequestParameter.ID, searchText.replaceAll("\\W", "")); -// request.addParameter(RequestParameter.CONTENT, searchText); -// request.addParameter(RequestParameter.HEADER, searchText); -// request.addParameter(RequestParameter.TITLE, searchText); - // Log.error("Title set to " + + /// Log.error("Title set to " + // request.getData(RequestParameter.TITLE)); // Window.alert("Title set to " + // request.getData(RequestParameter.TITLE)); @@ -146,32 +143,31 @@ public void onKeyUp(KeyUpEvent event) { // Window.alert("Header set to " + // request.getData(RequestParameter.HEADER)); search(); -// eventBus.navigateRequest(request); + if (searchResults != null) { + final PageRequest request = new PageRequest(Page.SEARCH_RESULTS); + // request.addData(RequestParameter.HEADER, + // searchText); + request.addData(RequestParameter.TITLE, searchText); + request.addData(RequestParameter.CONTENT, searchResults); + request.addParameter(RequestParameter.ID, searchText.replaceAll("\\W", "")); + // request.addParameter(RequestParameter.HEADER, + // searchText); + request.addParameter(RequestParameter.TITLE, searchText); + eventBus.navigateRequest(request); + } } } } - + }); - view.getSearchButton().addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { - - // have to add a request param here so that it opens a tab with - // a new title - // request.addParameter(RequestParameter.HEADER, - // view.getSearchText()); + String searchText = view.getSearchText().getText(); if (searchText.length() > 0) { -// final PageRequest request = new PageRequest(Page.SEARCH_RESULTS); -// request.addData(RequestParameter.HEADER, searchText); -// request.addData(RequestParameter.TITLE, searchText); -// request.addParameter(RequestParameter.ID, searchText.replaceAll("\\W", "")); -// request.addParameter(RequestParameter.CONTENT, searchText); -// request.addParameter(RequestParameter.HEADER, searchText); -// request.addParameter(RequestParameter.TITLE, searchText); // Log.error("Title set to " + // request.getData(RequestParameter.TITLE)); // Window.alert("Title set to " + @@ -181,14 +177,31 @@ public void onClick(ClickEvent event) { // Window.alert("Header set to " + // request.getData(RequestParameter.HEADER)); search(); -// eventBus.navigateRequest(request); + if (searchResults != null) { + final PageRequest request = new PageRequest(Page.SEARCH_RESULTS); + // request.addData(RequestParameter.HEADER, searchText); + request.addData(RequestParameter.TITLE, searchText); + request.addData(RequestParameter.CONTENT, searchResults); + request.addParameter(RequestParameter.ID, searchText.replaceAll("\\W", "")); + // request.addParameter(RequestParameter.HEADER,searchText); + request.addParameter(RequestParameter.TITLE, searchText); + eventBus.navigateRequest(request); + } } } }); + + view.getIndexButton().addClickHandler(new ClickHandler() { + public void onClick(ClickEvent event) { + index(); + } + }); } + + private void search() { String textToServer = view.getSearchText().getText(); @@ -202,12 +215,30 @@ public void onFailure(Throwable caught) { public void onSuccess(ArrayList result) { searchResults = result; - for( SearchResultsDTO doc : searchResults ){ + for (SearchResultsDTO doc : searchResults) { Window.alert(doc.getResult().toString()); } } }); } + + private void index() { + searchService.index(new AsyncCallback() { + public void onFailure(Throwable caught) { + Window.alert("Failure on the server side!"); + caught.printStackTrace(); + } + + public void onSuccess(Boolean result) { + dih_success = result; + if( dih_success == true ){ + Window.alert("Successfully completed Full Import!"); + }else{ + Window.alert("Failed to complete Full Import!"); + } + } + }); + } /** * {@inheritDoc} diff --git a/src/main/java/org/sigmah/client/ui/view/SearchResultsView.java b/src/main/java/org/sigmah/client/ui/view/SearchResultsView.java index 7e5395ac1..60e19c164 100644 --- a/src/main/java/org/sigmah/client/ui/view/SearchResultsView.java +++ b/src/main/java/org/sigmah/client/ui/view/SearchResultsView.java @@ -51,6 +51,7 @@ import org.sigmah.shared.dto.reminder.ReminderDTO; import com.extjs.gxt.ui.client.Style.LayoutRegion; +import com.extjs.gxt.ui.client.Style.Scroll; import com.extjs.gxt.ui.client.event.ButtonEvent; import com.extjs.gxt.ui.client.event.Events; import com.extjs.gxt.ui.client.event.Listener; @@ -58,6 +59,7 @@ import com.extjs.gxt.ui.client.widget.Component; import com.extjs.gxt.ui.client.widget.ContentPanel; import com.extjs.gxt.ui.client.widget.Label; +import com.extjs.gxt.ui.client.widget.Layout; import com.extjs.gxt.ui.client.widget.LayoutContainer; import com.extjs.gxt.ui.client.widget.grid.ColumnConfig; import com.extjs.gxt.ui.client.widget.grid.ColumnData; @@ -67,6 +69,7 @@ import com.extjs.gxt.ui.client.widget.grid.filters.DateFilter; import com.extjs.gxt.ui.client.widget.grid.filters.GridFilters; import com.extjs.gxt.ui.client.widget.grid.filters.StringFilter; +import com.extjs.gxt.ui.client.widget.layout.FitLayout; import com.google.gwt.core.client.GWT; import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.event.dom.client.ClickHandler; @@ -89,14 +92,11 @@ */ @Singleton public class SearchResultsView extends AbstractView implements SearchResultsPresenter.View { - - /** - * Reminders expected date label style name. - */ - private static final String EXPECTED_DATE_LABEL_STYLE = "points-date-exceeded"; + private String searchText; - private ContentPanel remindersPanel; + private ContentPanel searchResultsPanel; + private ListStore remindersStore; private LayoutContainer centerContainer; @@ -109,11 +109,12 @@ public void initialize() { //default } - public void initialize(final String searchText) { + public void initialize(String searchText) { this.searchText = searchText; centerContainer = Layouts.vBox(); Window.alert("Searchtext set to " + searchText ); - centerContainer.add(createRemindersPanel(), Layouts.vBoxData(Margin.BOTTOM)); + createSearchResultsPanel(); + centerContainer.add(searchResultsPanel, Layouts.vBoxData(Margin.BOTTOM)); add(centerContainer); } @@ -130,108 +131,45 @@ public void initialize(final String searchText) { * * @return The reminders component widget. */ - private Component createRemindersPanel() { - - remindersStore = new ListStore(); - Grid reminderGrid = new Grid(remindersStore, new ColumnModel(createRemindersGridColumns())); - reminderGrid.getView().setForceFit(true); - reminderGrid.setAutoExpandColumn(ReminderDTO.LABEL); + private void createSearchResultsPanel() { //Window.alert("Searchtext is currently " + searchText ); - remindersPanel = Panels.content("Search results for \"" + searchText + "\""); + setContentPanel("Search results for \"" + searchText + "\"", false, null, null ); //remindersPanel.repaint(); - remindersPanel.add(reminderGrid); - return remindersPanel; } + + public void setContentPanel(String title, boolean collapsible, Layout layout, Scroll scroll, String... stylenames) { - /** - * Builds the reminders grid columns configuration. - * - * @return The reminders grid columns list. - */ - private static List createRemindersGridColumns() { - - final DateTimeFormat format = DateUtils.DATE_SHORT; - final Date now = new Date(); - - // Icon column. - final ColumnConfig iconColumn = new ColumnConfig(); - iconColumn.setId("icon"); - iconColumn.setHeaderHtml(""); - iconColumn.setWidth(16); - iconColumn.setResizable(false); - iconColumn.setRenderer(new GridCellRenderer() { - - @Override - public Object render(final ReminderDTO model, final String property, final ColumnData config, final int rowIndex, final int colIndex, - final ListStore store, final Grid grid) { - - if (DateUtils.DAY_COMPARATOR.compare(now, model.getExpectedDate()) > 0) { - return IconImageBundle.ICONS.overdueReminder().createImage(); - } else { - return IconImageBundle.ICONS.openedReminder().createImage(); - } - } - }); - - // Label column. - final ColumnConfig labelColumn = new ColumnConfig(); - labelColumn.setId(ReminderDTO.LABEL); - labelColumn.setHeaderHtml(I18N.CONSTANTS.monitoredPointLabel()); - labelColumn.setWidth(100); - - // Ajout du HREF - labelColumn.setRenderer(new GridCellRenderer() { - - @Override - public Object render(final ReminderDTO model, String property, ColumnData config, int rowIndex, int colIndex, ListStore store, - Grid grid) { - - final com.google.gwt.user.client.ui.Label label = new com.google.gwt.user.client.ui.Label((String) model.get(property)); - - label.addStyleName("hyperlink-label"); - label.addClickHandler(new ClickHandler() { - - @Override - public void onClick(ClickEvent event) { - //handler.onLabelClickEvent(model.getProjectId()); - } - }); - - label.setTitle(I18N.CONSTANTS.projectLabelWithDots() + ' ' + model.getProjectCode() + " - " + model.getProjectName()); - - return label; - } - }); - - // Expected date column. - final ColumnConfig expectedDateColumn = new ColumnConfig(); - expectedDateColumn.setId(ReminderDTO.EXPECTED_DATE); - expectedDateColumn.setHeaderHtml(I18N.CONSTANTS.monitoredPointExpectedDate()); - expectedDateColumn.setWidth(60); - expectedDateColumn.setDateTimeFormat(format); - expectedDateColumn.setRenderer(new GridCellRenderer() { - - @Override - public Object render(final ReminderDTO model, final String property, final ColumnData config, final int rowIndex, final int colIndex, - final ListStore store, final Grid grid) { - - final Label label = new Label(format.format(model.getExpectedDate())); - if (!model.isCompleted() && DateUtils.DAY_COMPARATOR.compare(now, model.getExpectedDate()) > 0) { - label.addStyleName(EXPECTED_DATE_LABEL_STYLE); + searchResultsPanel = new ContentPanel(layout != null ? layout : new FitLayout()); + + searchResultsPanel.setHeadingHtml(ClientUtils.isNotBlank(title) ? title : null); + searchResultsPanel.setHeaderVisible(ClientUtils.isNotBlank(title)); + searchResultsPanel.setCollapsible(collapsible); + + if (ClientUtils.isNotEmpty(stylenames)) { + for (String stylename : stylenames) { + if (ClientUtils.isBlank(stylename)) { + continue; } - return label; + searchResultsPanel.addStyleName(stylename); } - }); + } - return Arrays.asList(new ColumnConfig[] { - iconColumn, - labelColumn, - expectedDateColumn - }); - } + if (scroll != null) { + searchResultsPanel.setScrollMode(scroll); + } + } + + public void addSearchData(Object searchData){ + if( searchData != null ){ + Window.alert("Received search results!"); + }else{ + Window.alert("Failed to receive search results!"); + } + + } } diff --git a/src/main/java/org/sigmah/client/ui/view/zone/SearchView.java b/src/main/java/org/sigmah/client/ui/view/zone/SearchView.java index 91b17eab5..d3fbd23bb 100644 --- a/src/main/java/org/sigmah/client/ui/view/zone/SearchView.java +++ b/src/main/java/org/sigmah/client/ui/view/zone/SearchView.java @@ -51,6 +51,7 @@ public class SearchView extends AbstractView implements SearchPresenter.View { private HTML searchForLabel; private TextBox searchText; private Button searchButton; + private Button indexButton; /** * {@inheritDoc} @@ -78,11 +79,13 @@ public void initialize() { searchText.getElement().setPropertyString("placeholder", "Search"); searchButton = new Button("Go"); + indexButton = new Button("DIH"); //searchBarPanel.add(searchForLabel); searchBarPanel.add(searchText); searchBarPanel.add(searchOptions); searchBarPanel.add(searchButton); + searchBarPanel.add(indexButton); // initWidget(); Useless @@ -141,6 +144,14 @@ public TextBox getSearchText() { public Button getSearchButton() { return searchButton; } + + /** + * {@inheritDoc} + */ + @Override + public Button getIndexButton() { + return indexButton; + } } diff --git a/src/main/java/org/sigmah/server/search/SearchServiceImpl.java b/src/main/java/org/sigmah/server/search/SearchServiceImpl.java index d8a7145f0..d22a4592c 100644 --- a/src/main/java/org/sigmah/server/search/SearchServiceImpl.java +++ b/src/main/java/org/sigmah/server/search/SearchServiceImpl.java @@ -14,4 +14,10 @@ public class SearchServiceImpl extends RemoteServiceServlet implements SearchSer public ArrayList search(String searchStr){ return SolrSearcher.getInstance().search(searchStr); } + + @Override + public Boolean index() { + // TODO Auto-generated method stub + return SolrSearcher.getInstance().FullDataImport(); + } } diff --git a/src/main/java/org/sigmah/server/search/SolrSearcher.java b/src/main/java/org/sigmah/server/search/SolrSearcher.java index 533084947..b9da4f497 100644 --- a/src/main/java/org/sigmah/server/search/SolrSearcher.java +++ b/src/main/java/org/sigmah/server/search/SolrSearcher.java @@ -13,6 +13,7 @@ import org.apache.solr.client.solrj.response.QueryResponse; import org.apache.solr.common.SolrDocument; import org.apache.solr.common.SolrDocumentList; +import org.apache.solr.common.params.ModifiableSolrParams; import org.apache.solr.common.util.NamedList; import org.sigmah.shared.dto.search.SearchResultsDTO; @@ -36,7 +37,7 @@ private SolrSearcher() { } public static SolrSearcher getInstance() { // Singleton - + if (instance == null) { instance = new SolrSearcher(); try { @@ -54,7 +55,7 @@ public static SolrSearcher getInstance() { // Singleton private void loadServer() throws MalformedURLException { urlString = "http://localhost:8983/solr/Test_Sigmah"; solrServer = new HttpSolrClient.Builder(urlString).build(); - //Window.alert("Successful solr connection!"); + // Window.alert("Successful solr connection!"); System.out.println("GUBI SOLR CONNECTION CONNECTED"); Log.error("GUBI SOLR CONNECTION CONNECTED"); } @@ -69,7 +70,7 @@ public SolrDocumentList SolrTestQuery() { Log.error("GUBI SOLR QUERY HAPPENED"); SolrDocumentList list = response.getResults(); for (SolrDocument doc : response.getResults()) { - //Window.alert(doc.toString()); + // Window.alert(doc.toString()); } return list; } catch (SolrServerException e) { @@ -93,10 +94,10 @@ public ArrayList search(String searchStr) { ArrayList searchList = new ArrayList(); SolrQuery query = new SolrQuery(); - query.setQuery("*:*"); + query.setQuery(searchStr); + + // query.addSortField("weight", ORDER.desc); - //query.addSortField("weight", ORDER.desc); - QueryResponse rsp = null; try { @@ -116,20 +117,41 @@ public ArrayList search(String searchStr) { while (iter.hasNext()) { SearchResultsDTO descriptor = new SearchResultsDTO(); SolrDocument resultDoc = (SolrDocument) iter.next(); - - //Will make this more specific later -// Map results = resultDoc.getFieldValueMap(); -// for (Map.Entry entry : results.entrySet()){ -// descriptor.getResult().add(entry.getKey().toString() + " ::: " + entry.getValue().toString()); -// } + + // Will make this more specific later + // Map results = resultDoc.getFieldValueMap(); + // for (Map.Entry entry : results.entrySet()){ + // descriptor.getResult().add(entry.getKey().toString() + " ::: + // " + entry.getValue().toString()); + // } descriptor.setResult(resultDoc.toString()); searchList.add(descriptor); } - + } return searchList; } - + + public Boolean FullDataImport() { + ModifiableSolrParams params = new ModifiableSolrParams(); + params.set("qt", "/dataimport"); + params.set("command", "full-import"); + try { + QueryResponse response = solrServer.query(params); + if (response != null) { + System.out.println("Successful FULL DATA IMPORT!"); + return true; + } else { + System.out.println("Failure in FULL DATA IMPORT!"); + return false; + } + } catch (SolrServerException | IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + return false; + } + } + } \ No newline at end of file From c08b492a5a647c977db4c31d44cb74e3bdf9b782 Mon Sep 17 00:00:00 2001 From: indianauthority97 Date: Tue, 13 Jun 2017 00:51:57 +0530 Subject: [PATCH 09/36] Attempt at presentation of results on screen --- .../ui/presenter/zone/SearchPresenter.java | 6 +- .../client/ui/view/SearchResultsView.java | 138 ++++++++++++++++-- .../sigmah/server/search/SolrIndexJob.java | 15 ++ .../shared/dto/search/SearchResultsDTO.java | 12 +- 4 files changed, 158 insertions(+), 13 deletions(-) create mode 100644 src/main/java/org/sigmah/server/search/SolrIndexJob.java diff --git a/src/main/java/org/sigmah/client/ui/presenter/zone/SearchPresenter.java b/src/main/java/org/sigmah/client/ui/presenter/zone/SearchPresenter.java index 66a950335..48a6c4edd 100644 --- a/src/main/java/org/sigmah/client/ui/presenter/zone/SearchPresenter.java +++ b/src/main/java/org/sigmah/client/ui/presenter/zone/SearchPresenter.java @@ -215,9 +215,9 @@ public void onFailure(Throwable caught) { public void onSuccess(ArrayList result) { searchResults = result; - for (SearchResultsDTO doc : searchResults) { - Window.alert(doc.getResult().toString()); - } +// for (SearchResultsDTO doc : searchResults) { +// Window.alert(doc.getResult().toString()); +// } } }); } diff --git a/src/main/java/org/sigmah/client/ui/view/SearchResultsView.java b/src/main/java/org/sigmah/client/ui/view/SearchResultsView.java index 60e19c164..5ab98e863 100644 --- a/src/main/java/org/sigmah/client/ui/view/SearchResultsView.java +++ b/src/main/java/org/sigmah/client/ui/view/SearchResultsView.java @@ -49,6 +49,7 @@ import org.sigmah.client.util.DateUtils; import org.sigmah.shared.dto.reminder.MonitoredPointDTO; import org.sigmah.shared.dto.reminder.ReminderDTO; +import org.sigmah.shared.dto.search.SearchResultsDTO; import com.extjs.gxt.ui.client.Style.LayoutRegion; import com.extjs.gxt.ui.client.Style.Scroll; @@ -76,6 +77,10 @@ import com.google.gwt.i18n.client.DateTimeFormat; import com.google.gwt.user.client.Window; import com.google.gwt.user.client.ui.AbstractImagePrototype; +import com.google.gwt.user.client.ui.HTML; +import com.google.gwt.user.client.ui.HorizontalPanel; +import com.google.gwt.user.client.ui.Panel; +import com.google.gwt.user.client.ui.VerticalPanel; import com.google.gwt.user.client.ui.Widget; import com.google.inject.Inject; import com.google.inject.Provider; @@ -94,11 +99,16 @@ public class SearchResultsView extends AbstractView implements SearchResultsPresenter.View { private String searchText; + + private static final String EXPECTED_DATE_LABEL_STYLE = "points-date-exceeded"; private ContentPanel searchResultsPanel; + ListStore searchResultsStore; - private ListStore remindersStore; private LayoutContainer centerContainer; + +// private ContentPanel resultsShowPanel; +// private ListStore remindersStore; /** @@ -114,7 +124,9 @@ public void initialize(String searchText) { centerContainer = Layouts.vBox(); Window.alert("Searchtext set to " + searchText ); createSearchResultsPanel(); - centerContainer.add(searchResultsPanel, Layouts.vBoxData(Margin.BOTTOM)); + addResultsPanel(); + centerContainer.add(searchResultsPanel, Layouts.vBoxData(Margin.TOP)); + //centerContainer.add(addResultsPanel(), Layouts.vBoxData(Margin.BOTTOM)); add(centerContainer); } @@ -126,20 +138,17 @@ public void initialize(String searchText) { // UTILITY METHODS. // // ------------------------------------------------------------------------------------------- - /** - * Creates the reminders component. - * - * @return The reminders component widget. - */ + private void createSearchResultsPanel() { //Window.alert("Searchtext is currently " + searchText ); setContentPanel("Search results for \"" + searchText + "\"", false, null, null ); - //remindersPanel.repaint(); } public void setContentPanel(String title, boolean collapsible, Layout layout, Scroll scroll, String... stylenames) { + +// searchResultsPanel = new VerticalPanel(); searchResultsPanel = new ContentPanel(layout != null ? layout : new FitLayout()); @@ -162,9 +171,120 @@ public void setContentPanel(String title, boolean collapsible, Layout layout, Sc } + private static List createSearchResultsGridColumns() { + +// final DateTimeFormat format = DateUtils.DATE_SHORT; +// final Date now = new Date(); + + // Icon column. +// final ColumnConfig iconColumn = new ColumnConfig(); +// iconColumn.setId("icon"); +// iconColumn.setHeaderHtml(""); +// iconColumn.setWidth(16); +// iconColumn.setResizable(false); +// iconColumn.setRenderer(new GridCellRenderer() { +// +// @Override +// public Object render(final ReminderDTO model, final String property, final ColumnData config, final int rowIndex, final int colIndex, +// final ListStore store, final Grid grid) { +// +// if (DateUtils.DAY_COMPARATOR.compare(now, model.getExpectedDate()) > 0) { +// return IconImageBundle.ICONS.overdueReminder().createImage(); +// } else { +// return IconImageBundle.ICONS.openedReminder().createImage(); +// } +// } +// }); + + // Label column. + final ColumnConfig labelColumn = new ColumnConfig(); + labelColumn.setId("label"); + labelColumn.setHeaderHtml("Label"); + labelColumn.setWidth(100); + + // Add link + labelColumn.setRenderer(new GridCellRenderer() { + + @Override + public Object render(final SearchResultsDTO model, String property, ColumnData config, int rowIndex, int colIndex, ListStore store, + Grid grid) { + + final com.google.gwt.user.client.ui.Label label = new com.google.gwt.user.client.ui.Label(model.getResult()); + label.addStyleName("hyperlink-label"); + label.addClickHandler(new ClickHandler() { + + @Override + public void onClick(ClickEvent event) { +// handler.onLabelClickEvent(model.getProjectId()); + } + }); + + //label.setTitle(I18N.CONSTANTS.projectLabelWithDots() + ' ' + model.getProjectCode() + " - " + model.getProjectName()); + label.setTitle(model.getResult()); + return label; + } + + }); + + // Expected date column. +// final ColumnConfig expectedDateColumn = new ColumnConfig(); +// expectedDateColumn.setId(ReminderDTO.EXPECTED_DATE); +// expectedDateColumn.setHeaderHtml(I18N.CONSTANTS.monitoredPointExpectedDate()); +// expectedDateColumn.setWidth(60); +// expectedDateColumn.setDateTimeFormat(format); +// expectedDateColumn.setRenderer(new GridCellRenderer() { +// +// @Override +// public Object render(final ReminderDTO model, final String property, final ColumnData config, final int rowIndex, final int colIndex, +// final ListStore store, final Grid grid) { +// +// final Label label = new Label(format.format(model.getExpectedDate())); +// if (!model.isCompleted() && DateUtils.DAY_COMPARATOR.compare(now, model.getExpectedDate()) > 0) { +// label.addStyleName(EXPECTED_DATE_LABEL_STYLE); +// } +// return label; +// } +// }); + + return Arrays.asList(new ColumnConfig[] { + //iconColumn, + labelColumn, + //expectedDateColumn + }); + } + + private void addResultsPanel() { + + Grid searchResultsGrid = new Grid(searchResultsStore, new ColumnModel(createSearchResultsGridColumns())); + searchResultsGrid.getView().setForceFit(true); + searchResultsGrid.setAutoExpandColumn("Label"); + +// remindersPanel = Panels.content(I18N.CONSTANTS.reminderPoints()); + //resultsShowPanel = setContentPanel("Search Results", false, null, null); + searchResultsPanel.add(searchResultsGrid); + + } + public void addSearchData(Object searchData){ if( searchData != null ){ - Window.alert("Received search results!"); + Window.alert("Received search results!: \n" + searchData.toString()); + searchResultsStore = new ListStore(); + for (Object object : (ArrayList)searchData ) { + searchResultsStore.add(object != null ? (SearchResultsDTO)object : null); + //Window.alert("Received search result!: \n" + object.getResult()); + } + +// for( SearchResultsDTO element: searchResultsStore ){ +// +// Window.alert("Received search result!: \n" + element.getResult()); +// +//// Widget widget = new Widget(); +//// HorizontalPanel panel = new HorizontalPanel(); +//// HTML html = new HTML("---------------------------------------------------\n" + +//// element.getResult() + "---------------------------------------------------\n"); +//// panel.add(html); +//// searchResultsPanel.add(panel); +// } }else{ Window.alert("Failed to receive search results!"); } diff --git a/src/main/java/org/sigmah/server/search/SolrIndexJob.java b/src/main/java/org/sigmah/server/search/SolrIndexJob.java new file mode 100644 index 000000000..91e98aebe --- /dev/null +++ b/src/main/java/org/sigmah/server/search/SolrIndexJob.java @@ -0,0 +1,15 @@ +package org.sigmah.server.search; + +import org.quartz.Job; +import org.quartz.JobExecutionContext; +import org.quartz.JobExecutionException; + +public class SolrIndexJob implements Job{ + + @Override + public void execute(JobExecutionContext context) throws JobExecutionException { + // TODO Auto-generated method stub + + } + +} diff --git a/src/main/java/org/sigmah/shared/dto/search/SearchResultsDTO.java b/src/main/java/org/sigmah/shared/dto/search/SearchResultsDTO.java index fad24b71a..d9213b505 100644 --- a/src/main/java/org/sigmah/shared/dto/search/SearchResultsDTO.java +++ b/src/main/java/org/sigmah/shared/dto/search/SearchResultsDTO.java @@ -3,8 +3,12 @@ import java.io.Serializable; import java.util.ArrayList; -public class SearchResultsDTO implements Serializable{ +import org.sigmah.shared.dto.base.AbstractModelDataEntityDTO; + +public class SearchResultsDTO extends AbstractModelDataEntityDTO implements Serializable +{ + //public static final String ENTITY_NAME = "search.SearchResults"; /** * Serial version UID. */ @@ -23,5 +27,11 @@ public String getResult() { public void setResult(String result) { this.result = result; } + + @Override + public String getEntityName() { + // TODO Auto-generated method stub + return null; + } } From cfa0418e88e7592089216c150cb03cd29b3f9d42 Mon Sep 17 00:00:00 2001 From: indianauthority97 Date: Wed, 14 Jun 2017 00:59:36 +0530 Subject: [PATCH 10/36] Results rendering but views not changing --- .../ui/presenter/SearchResultsPresenter.java | 23 +- .../presenter/zone/MenuBannerPresenter.java | 3 +- .../ui/presenter/zone/SearchPresenter.java | 68 +++-- .../client/ui/view/SearchResultsView.java | 247 ++++++++++-------- 4 files changed, 195 insertions(+), 146 deletions(-) diff --git a/src/main/java/org/sigmah/client/ui/presenter/SearchResultsPresenter.java b/src/main/java/org/sigmah/client/ui/presenter/SearchResultsPresenter.java index 64a8ba3d5..4625f1bc9 100644 --- a/src/main/java/org/sigmah/client/ui/presenter/SearchResultsPresenter.java +++ b/src/main/java/org/sigmah/client/ui/presenter/SearchResultsPresenter.java @@ -73,6 +73,7 @@ import com.extjs.gxt.ui.client.event.Listener; import com.extjs.gxt.ui.client.store.ListStore; import com.extjs.gxt.ui.client.widget.Component; +import com.extjs.gxt.ui.client.widget.ContentPanel; import com.google.gwt.core.client.GWT; import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.event.dom.client.ClickHandler; @@ -105,12 +106,11 @@ import org.sigmah.shared.dto.search.SearchResultsDTO; /** - * Dashboard page presenter. + *Search Results page presenter. + * * - * @author Tom Miette (tmiette@ideia.fr) - * @author Denis Colliot (dcolliot@ideia.fr) */ -@Singleton + public class SearchResultsPresenter extends AbstractPagePresenter { /** @@ -120,6 +120,8 @@ public class SearchResultsPresenter extends AbstractPagePresenter private final SearchServiceAsync searchService = GWT.create(SearchService.class); private ArrayList searchResults = new ArrayList(); private Boolean dih_success; + String textToServer; @Inject public SearchPresenter(View view, Injector injector) { @@ -132,8 +133,8 @@ public void onBind() { public void onKeyUp(KeyUpEvent event) { if (event.getNativeKeyCode() == KeyCodes.KEY_ENTER) { - String searchText = view.getSearchText().getText(); - if (searchText.length() > 0) { + textToServer = view.getSearchText().getText(); + if (textToServer.length() > 0) { /// Log.error("Title set to " + // request.getData(RequestParameter.TITLE)); // Window.alert("Title set to " + @@ -143,18 +144,18 @@ public void onKeyUp(KeyUpEvent event) { // Window.alert("Header set to " + // request.getData(RequestParameter.HEADER)); search(); - if (searchResults != null) { - final PageRequest request = new PageRequest(Page.SEARCH_RESULTS); - // request.addData(RequestParameter.HEADER, - // searchText); - request.addData(RequestParameter.TITLE, searchText); - request.addData(RequestParameter.CONTENT, searchResults); - request.addParameter(RequestParameter.ID, searchText.replaceAll("\\W", "")); - // request.addParameter(RequestParameter.HEADER, - // searchText); - request.addParameter(RequestParameter.TITLE, searchText); - eventBus.navigateRequest(request); - } +// if (searchResults != null) { +// final PageRequest request = new PageRequest(Page.SEARCH_RESULTS); +// // request.addData(RequestParameter.HEADER, +// // searchText); +// request.addData(RequestParameter.TITLE, searchText); +// request.addData(RequestParameter.CONTENT, searchResults); +// request.addParameter(RequestParameter.ID, searchText.replaceAll("\\W", "")); +// // request.addParameter(RequestParameter.HEADER, +// // searchText); +// request.addParameter(RequestParameter.TITLE, searchText); +// eventBus.navigateRequest(request); +// } } } } @@ -166,8 +167,8 @@ public void onKeyUp(KeyUpEvent event) { @Override public void onClick(ClickEvent event) { - String searchText = view.getSearchText().getText(); - if (searchText.length() > 0) { + textToServer = view.getSearchText().getText(); + if (textToServer.length() > 0) { // Log.error("Title set to " + // request.getData(RequestParameter.TITLE)); // Window.alert("Title set to " + @@ -177,16 +178,16 @@ public void onClick(ClickEvent event) { // Window.alert("Header set to " + // request.getData(RequestParameter.HEADER)); search(); - if (searchResults != null) { - final PageRequest request = new PageRequest(Page.SEARCH_RESULTS); - // request.addData(RequestParameter.HEADER, searchText); - request.addData(RequestParameter.TITLE, searchText); - request.addData(RequestParameter.CONTENT, searchResults); - request.addParameter(RequestParameter.ID, searchText.replaceAll("\\W", "")); - // request.addParameter(RequestParameter.HEADER,searchText); - request.addParameter(RequestParameter.TITLE, searchText); - eventBus.navigateRequest(request); - } +// if (searchResults != null) { +// final PageRequest request = new PageRequest(Page.SEARCH_RESULTS); +// // request.addData(RequestParameter.HEADER, searchText); +// request.addData(RequestParameter.TITLE, searchText); +// request.addData(RequestParameter.CONTENT, searchResults); +// request.addParameter(RequestParameter.ID, searchText.replaceAll("\\W", "")); +// // request.addParameter(RequestParameter.HEADER,searchText); +// request.addParameter(RequestParameter.TITLE, searchText); +// eventBus.navigateRequest(request); +// } } } @@ -204,8 +205,6 @@ public void onClick(ClickEvent event) { private void search() { - String textToServer = view.getSearchText().getText(); - // Send the input to the server. searchService.search(textToServer, new AsyncCallback>() { public void onFailure(Throwable caught) { @@ -218,6 +217,19 @@ public void onSuccess(ArrayList result) { // for (SearchResultsDTO doc : searchResults) { // Window.alert(doc.getResult().toString()); // } + + if (searchResults != null) { + PageRequest request = new PageRequest(Page.SEARCH_RESULTS); + // request.addData(RequestParameter.HEADER, searchText); + request.addData(RequestParameter.TITLE, textToServer ); + request.addData(RequestParameter.CONTENT, searchResults); + request.addParameter(RequestParameter.ID, textToServer.replaceAll("\\W", "")); + // request.addParameter(RequestParameter.HEADER,searchText); + request.addParameter(RequestParameter.TITLE, textToServer); + eventBus.navigateRequest(request); + } + + } }); } diff --git a/src/main/java/org/sigmah/client/ui/view/SearchResultsView.java b/src/main/java/org/sigmah/client/ui/view/SearchResultsView.java index 5ab98e863..c359d38b1 100644 --- a/src/main/java/org/sigmah/client/ui/view/SearchResultsView.java +++ b/src/main/java/org/sigmah/client/ui/view/SearchResultsView.java @@ -25,7 +25,6 @@ * #L% */ - import java.util.Arrays; import java.util.Date; import java.util.List; @@ -86,53 +85,57 @@ import com.google.inject.Provider; import com.google.inject.Singleton; -import org.sigmah.client.ui.presenter.DashboardPresenter.ReminderOrMonitoredPointHandler; - - /** * Dashboard view. * * @author Tom Miette (tmiette@ideia.fr) * @author Denis Colliot (dcolliot@ideia.fr) */ -@Singleton + public class SearchResultsView extends AbstractView implements SearchResultsPresenter.View { - + private String searchText; - - private static final String EXPECTED_DATE_LABEL_STYLE = "points-date-exceeded"; private ContentPanel searchResultsPanel; + ListStore searchResultsStore; - + private LayoutContainer centerContainer; -// private ContentPanel resultsShowPanel; -// private ListStore remindersStore; - - + private ContentPanel resultsShowPanel; + // private ListStore remindersStore; + /** * {@inheritDoc} */ @Override public void initialize() { - //default + // default } + public ContentPanel getSearchResultsPanel() { + return searchResultsPanel; + } + + public ListStore getSearchResultsStore() { + return searchResultsStore; + } + + public LayoutContainer getCenterContainer() { + return centerContainer; + } + public void initialize(String searchText) { this.searchText = searchText; centerContainer = Layouts.vBox(); - Window.alert("Searchtext set to " + searchText ); + Window.alert("Searchtext set to " + searchText); createSearchResultsPanel(); - addResultsPanel(); centerContainer.add(searchResultsPanel, Layouts.vBoxData(Margin.TOP)); - //centerContainer.add(addResultsPanel(), Layouts.vBoxData(Margin.BOTTOM)); + // centerContainer.add(addResultsPanel(), + // Layouts.vBoxData(Margin.BOTTOM)); add(centerContainer); } - - - // ------------------------------------------------------------------------------------------- // // UTILITY METHODS. @@ -141,19 +144,19 @@ public void initialize(String searchText) { private void createSearchResultsPanel() { - //Window.alert("Searchtext is currently " + searchText ); - setContentPanel("Search results for \"" + searchText + "\"", false, null, null ); + // Window.alert("Searchtext is currently " + searchText ); + setContentPanel("Search results for \"" + searchText + "\"", false, null, null); } - + public void setContentPanel(String title, boolean collapsible, Layout layout, Scroll scroll, String... stylenames) { - -// searchResultsPanel = new VerticalPanel(); + + // searchResultsPanel = new VerticalPanel(); searchResultsPanel = new ContentPanel(layout != null ? layout : new FitLayout()); - searchResultsPanel.setHeadingHtml(ClientUtils.isNotBlank(title) ? title : null); - searchResultsPanel.setHeaderVisible(ClientUtils.isNotBlank(title)); + searchResultsPanel.setHeadingHtml(title); + searchResultsPanel.setHeaderVisible(true); searchResultsPanel.setCollapsible(collapsible); if (ClientUtils.isNotEmpty(stylenames)) { @@ -170,56 +173,62 @@ public void setContentPanel(String title, boolean collapsible, Layout layout, Sc } } - + private static List createSearchResultsGridColumns() { -// final DateTimeFormat format = DateUtils.DATE_SHORT; -// final Date now = new Date(); + // final DateTimeFormat format = DateUtils.DATE_SHORT; + // final Date now = new Date(); // Icon column. -// final ColumnConfig iconColumn = new ColumnConfig(); -// iconColumn.setId("icon"); -// iconColumn.setHeaderHtml(""); -// iconColumn.setWidth(16); -// iconColumn.setResizable(false); -// iconColumn.setRenderer(new GridCellRenderer() { -// -// @Override -// public Object render(final ReminderDTO model, final String property, final ColumnData config, final int rowIndex, final int colIndex, -// final ListStore store, final Grid grid) { -// -// if (DateUtils.DAY_COMPARATOR.compare(now, model.getExpectedDate()) > 0) { -// return IconImageBundle.ICONS.overdueReminder().createImage(); -// } else { -// return IconImageBundle.ICONS.openedReminder().createImage(); -// } -// } -// }); - - // Label column. - final ColumnConfig labelColumn = new ColumnConfig(); - labelColumn.setId("label"); - labelColumn.setHeaderHtml("Label"); - labelColumn.setWidth(100); - - // Add link - labelColumn.setRenderer(new GridCellRenderer() { + // final ColumnConfig iconColumn = new ColumnConfig(); + // iconColumn.setId("icon"); + // iconColumn.setHeaderHtml(""); + // iconColumn.setWidth(16); + // iconColumn.setResizable(false); + // iconColumn.setRenderer(new GridCellRenderer() { + // + // @Override + // public Object render(final ReminderDTO model, final String property, + // final ColumnData config, final int rowIndex, final int colIndex, + // final ListStore store, final Grid grid) { + // + // if (DateUtils.DAY_COMPARATOR.compare(now, model.getExpectedDate()) > + // 0) { + // return IconImageBundle.ICONS.overdueReminder().createImage(); + // } else { + // return IconImageBundle.ICONS.openedReminder().createImage(); + // } + // } + // }); + + // Label column. + ColumnConfig labelColumn = new ColumnConfig(); + labelColumn.setId("label"); + labelColumn.setHeaderHtml("Label"); + labelColumn.setWidth(100); + + // Add link + labelColumn.setRenderer(new GridCellRenderer() { @Override - public Object render(final SearchResultsDTO model, String property, ColumnData config, int rowIndex, int colIndex, ListStore store, - Grid grid) { + public Object render(SearchResultsDTO model, String property, ColumnData config, int rowIndex, int colIndex, + ListStore store, Grid grid) { - final com.google.gwt.user.client.ui.Label label = new com.google.gwt.user.client.ui.Label(model.getResult()); + com.google.gwt.user.client.ui.Label label = new com.google.gwt.user.client.ui.Label(model.getResult()); + Window.alert("Label is : " + model.getResult() + + "\n property: " + property + "\nconfig: " + config.toString() + "\nrowindex: " + rowIndex + + "\ncolIndex:" + colIndex ); label.addStyleName("hyperlink-label"); label.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { -// handler.onLabelClickEvent(model.getProjectId()); + // handler.onLabelClickEvent(model.getProjectId()); } }); - - //label.setTitle(I18N.CONSTANTS.projectLabelWithDots() + ' ' + model.getProjectCode() + " - " + model.getProjectName()); + + // label.setTitle(I18N.CONSTANTS.projectLabelWithDots() + ' ' + + // model.getProjectCode() + " - " + model.getProjectName()); label.setTitle(model.getResult()); return label; } @@ -227,70 +236,84 @@ public void onClick(ClickEvent event) { }); // Expected date column. -// final ColumnConfig expectedDateColumn = new ColumnConfig(); -// expectedDateColumn.setId(ReminderDTO.EXPECTED_DATE); -// expectedDateColumn.setHeaderHtml(I18N.CONSTANTS.monitoredPointExpectedDate()); -// expectedDateColumn.setWidth(60); -// expectedDateColumn.setDateTimeFormat(format); -// expectedDateColumn.setRenderer(new GridCellRenderer() { -// -// @Override -// public Object render(final ReminderDTO model, final String property, final ColumnData config, final int rowIndex, final int colIndex, -// final ListStore store, final Grid grid) { -// -// final Label label = new Label(format.format(model.getExpectedDate())); -// if (!model.isCompleted() && DateUtils.DAY_COMPARATOR.compare(now, model.getExpectedDate()) > 0) { -// label.addStyleName(EXPECTED_DATE_LABEL_STYLE); -// } -// return label; -// } -// }); + // final ColumnConfig expectedDateColumn = new ColumnConfig(); + // expectedDateColumn.setId(ReminderDTO.EXPECTED_DATE); + // expectedDateColumn.setHeaderHtml(I18N.CONSTANTS.monitoredPointExpectedDate()); + // expectedDateColumn.setWidth(60); + // expectedDateColumn.setDateTimeFormat(format); + // expectedDateColumn.setRenderer(new GridCellRenderer() { + // + // @Override + // public Object render(final ReminderDTO model, final String property, + // final ColumnData config, final int rowIndex, final int colIndex, + // final ListStore store, final Grid grid) { + // + // final Label label = new + // Label(format.format(model.getExpectedDate())); + // if (!model.isCompleted() && DateUtils.DAY_COMPARATOR.compare(now, + // model.getExpectedDate()) > 0) { + // label.addStyleName(EXPECTED_DATE_LABEL_STYLE); + // } + // return label; + // } + // }); return Arrays.asList(new ColumnConfig[] { - //iconColumn, - labelColumn, - //expectedDateColumn + // iconColumn, + labelColumn + // expectedDateColumn }); } - - private void addResultsPanel() { - Grid searchResultsGrid = new Grid(searchResultsStore, new ColumnModel(createSearchResultsGridColumns())); + public void addResultsPanel() { + + Grid searchResultsGrid = new Grid(searchResultsStore, + new ColumnModel(createSearchResultsGridColumns())); searchResultsGrid.getView().setForceFit(true); - searchResultsGrid.setAutoExpandColumn("Label"); + searchResultsGrid.setAutoExpandColumn("label"); -// remindersPanel = Panels.content(I18N.CONSTANTS.reminderPoints()); - //resultsShowPanel = setContentPanel("Search Results", false, null, null); + // remindersPanel = Panels.content(I18N.CONSTANTS.reminderPoints()); + // resultsShowPanel = setContentPanel("Search Results", false, null, + // null); searchResultsPanel.add(searchResultsGrid); } - - public void addSearchData(Object searchData){ - if( searchData != null ){ + + public void addSearchData(Object searchData) { + if (searchData != null) { Window.alert("Received search results!: \n" + searchData.toString()); searchResultsStore = new ListStore(); - for (Object object : (ArrayList)searchData ) { - searchResultsStore.add(object != null ? (SearchResultsDTO)object : null); - //Window.alert("Received search result!: \n" + object.getResult()); + for (Object object : (ArrayList) searchData) { + searchResultsStore.add(object != null ? (SearchResultsDTO) object : null); + // Window.alert("Received search result!: \n" + + // object.getResult()); } - -// for( SearchResultsDTO element: searchResultsStore ){ -// -// Window.alert("Received search result!: \n" + element.getResult()); -// -//// Widget widget = new Widget(); -//// HorizontalPanel panel = new HorizontalPanel(); -//// HTML html = new HTML("---------------------------------------------------\n" + -//// element.getResult() + "---------------------------------------------------\n"); -//// panel.add(html); -//// searchResultsPanel.add(panel); -// } - }else{ + + // for( SearchResultsDTO element: searchResultsStore ){ + // + // Window.alert("Received search result!: \n" + + // element.getResult()); + // + //// Widget widget = new Widget(); + //// HorizontalPanel panel = new HorizontalPanel(); + //// HTML html = new + // HTML("---------------------------------------------------\n" + + //// element.getResult() + + // "---------------------------------------------------\n"); + //// panel.add(html); + //// searchResultsPanel.add(panel); + // } + } else { Window.alert("Failed to receive search results!"); } - + + } + + @Override + public void onViewRevealed() { + // Default implementation does nothing. + // Can be overridden by sub views implementations. + Window.alert("Overriding onViewReavealed!"); } } - - From 882cc0edd994ed22262a97946bb94c0a7ed996f7 Mon Sep 17 00:00:00 2001 From: indianauthority97 Date: Wed, 14 Jun 2017 17:23:49 +0530 Subject: [PATCH 11/36] Fixed Search results view changing issue and cleaned code --- .../ui/presenter/SearchResultsPresenter.java | 16 +-- .../ui/presenter/base/AbstractPresenter.java | 2 +- .../presenter/zone/MenuBannerPresenter.java | 7 +- .../client/ui/view/ApplicationView.java | 2 +- .../client/ui/view/SearchResultsView.java | 124 ++++-------------- 5 files changed, 35 insertions(+), 116 deletions(-) diff --git a/src/main/java/org/sigmah/client/ui/presenter/SearchResultsPresenter.java b/src/main/java/org/sigmah/client/ui/presenter/SearchResultsPresenter.java index 4625f1bc9..9667db4a1 100644 --- a/src/main/java/org/sigmah/client/ui/presenter/SearchResultsPresenter.java +++ b/src/main/java/org/sigmah/client/ui/presenter/SearchResultsPresenter.java @@ -118,7 +118,7 @@ public class SearchResultsPresenter extends AbstractPagePresenter remindersStore; - /** * {@inheritDoc} */ @Override public void initialize() { // default + //Window.alert("Initializing Search View!"); } public ContentPanel getSearchResultsPanel() { @@ -125,15 +123,9 @@ public LayoutContainer getCenterContainer() { return centerContainer; } - public void initialize(String searchText) { + public void setSearchString(String searchText) { this.searchText = searchText; - centerContainer = Layouts.vBox(); - Window.alert("Searchtext set to " + searchText); - createSearchResultsPanel(); - centerContainer.add(searchResultsPanel, Layouts.vBoxData(Margin.TOP)); - // centerContainer.add(addResultsPanel(), - // Layouts.vBoxData(Margin.BOTTOM)); - add(centerContainer); + //Window.alert("Searchtext set to " + searchText); } // ------------------------------------------------------------------------------------------- @@ -150,12 +142,12 @@ private void createSearchResultsPanel() { } public void setContentPanel(String title, boolean collapsible, Layout layout, Scroll scroll, String... stylenames) { - - // searchResultsPanel = new VerticalPanel(); - + searchResultsPanel = new ContentPanel(layout != null ? layout : new FitLayout()); + searchResultsPanel.layout(); searchResultsPanel.setHeadingHtml(title); + searchResultsPanel.layout(); searchResultsPanel.setHeaderVisible(true); searchResultsPanel.setCollapsible(collapsible); @@ -176,31 +168,6 @@ public void setContentPanel(String title, boolean collapsible, Layout layout, Sc private static List createSearchResultsGridColumns() { - // final DateTimeFormat format = DateUtils.DATE_SHORT; - // final Date now = new Date(); - - // Icon column. - // final ColumnConfig iconColumn = new ColumnConfig(); - // iconColumn.setId("icon"); - // iconColumn.setHeaderHtml(""); - // iconColumn.setWidth(16); - // iconColumn.setResizable(false); - // iconColumn.setRenderer(new GridCellRenderer() { - // - // @Override - // public Object render(final ReminderDTO model, final String property, - // final ColumnData config, final int rowIndex, final int colIndex, - // final ListStore store, final Grid grid) { - // - // if (DateUtils.DAY_COMPARATOR.compare(now, model.getExpectedDate()) > - // 0) { - // return IconImageBundle.ICONS.overdueReminder().createImage(); - // } else { - // return IconImageBundle.ICONS.openedReminder().createImage(); - // } - // } - // }); - // Label column. ColumnConfig labelColumn = new ColumnConfig(); labelColumn.setId("label"); @@ -215,9 +182,9 @@ public Object render(SearchResultsDTO model, String property, ColumnData config, ListStore store, Grid grid) { com.google.gwt.user.client.ui.Label label = new com.google.gwt.user.client.ui.Label(model.getResult()); - Window.alert("Label is : " + model.getResult() + - "\n property: " + property + "\nconfig: " + config.toString() + "\nrowindex: " + rowIndex + - "\ncolIndex:" + colIndex ); +// Window.alert("Label is : " + model.getResult() + +// "\n property: " + property + "\nconfig: " + config.toString() + "\nrowindex: " + rowIndex + +// "\ncolIndex:" + colIndex ); label.addStyleName("hyperlink-label"); label.addClickHandler(new ClickHandler() { @@ -226,94 +193,57 @@ public void onClick(ClickEvent event) { // handler.onLabelClickEvent(model.getProjectId()); } }); - - // label.setTitle(I18N.CONSTANTS.projectLabelWithDots() + ' ' + - // model.getProjectCode() + " - " + model.getProjectName()); + label.setTitle(model.getResult()); return label; } }); - // Expected date column. - // final ColumnConfig expectedDateColumn = new ColumnConfig(); - // expectedDateColumn.setId(ReminderDTO.EXPECTED_DATE); - // expectedDateColumn.setHeaderHtml(I18N.CONSTANTS.monitoredPointExpectedDate()); - // expectedDateColumn.setWidth(60); - // expectedDateColumn.setDateTimeFormat(format); - // expectedDateColumn.setRenderer(new GridCellRenderer() { - // - // @Override - // public Object render(final ReminderDTO model, final String property, - // final ColumnData config, final int rowIndex, final int colIndex, - // final ListStore store, final Grid grid) { - // - // final Label label = new - // Label(format.format(model.getExpectedDate())); - // if (!model.isCompleted() && DateUtils.DAY_COMPARATOR.compare(now, - // model.getExpectedDate()) > 0) { - // label.addStyleName(EXPECTED_DATE_LABEL_STYLE); - // } - // return label; - // } - // }); - return Arrays.asList(new ColumnConfig[] { - // iconColumn, labelColumn - // expectedDateColumn }); } public void addResultsPanel() { + + if( centerContainer == null ){ + centerContainer = Layouts.vBox(); + centerContainer.layout(); + } + else{ + centerContainer.removeAll(); + centerContainer.layout(); + } + createSearchResultsPanel(); + searchResultsPanel.layout(); Grid searchResultsGrid = new Grid(searchResultsStore, new ColumnModel(createSearchResultsGridColumns())); searchResultsGrid.getView().setForceFit(true); searchResultsGrid.setAutoExpandColumn("label"); - - // remindersPanel = Panels.content(I18N.CONSTANTS.reminderPoints()); - // resultsShowPanel = setContentPanel("Search Results", false, null, - // null); searchResultsPanel.add(searchResultsGrid); + searchResultsPanel.layout(); + + centerContainer.add(searchResultsPanel, Layouts.vBoxData(Margin.TOP)); + centerContainer.layout(); + add(centerContainer); } public void addSearchData(Object searchData) { if (searchData != null) { - Window.alert("Received search results!: \n" + searchData.toString()); + //Window.alert("Received search results!: \n" + searchData.toString()); searchResultsStore = new ListStore(); for (Object object : (ArrayList) searchData) { searchResultsStore.add(object != null ? (SearchResultsDTO) object : null); // Window.alert("Received search result!: \n" + // object.getResult()); } - - // for( SearchResultsDTO element: searchResultsStore ){ - // - // Window.alert("Received search result!: \n" + - // element.getResult()); - // - //// Widget widget = new Widget(); - //// HorizontalPanel panel = new HorizontalPanel(); - //// HTML html = new - // HTML("---------------------------------------------------\n" + - //// element.getResult() + - // "---------------------------------------------------\n"); - //// panel.add(html); - //// searchResultsPanel.add(panel); - // } } else { Window.alert("Failed to receive search results!"); } } - - @Override - public void onViewRevealed() { - // Default implementation does nothing. - // Can be overridden by sub views implementations. - Window.alert("Overriding onViewReavealed!"); - } } From 8dd81b444321a9d794f7c199b8d6f385857695d3 Mon Sep 17 00:00:00 2001 From: indianauthority97 Date: Thu, 22 Jun 2017 18:28:07 +0530 Subject: [PATCH 12/36] [Issue #535]: Attempt at opening a project on clicking project search result --- .../ui/presenter/SearchResultsPresenter.java | 42 ++++-- .../client/ui/view/SearchResultsView.java | 125 ++++++++++++++---- .../sigmah/server/search/SolrSearcher.java | 6 +- .../shared/dto/search/SearchResultsDTO.java | 13 +- 4 files changed, 144 insertions(+), 42 deletions(-) diff --git a/src/main/java/org/sigmah/client/ui/presenter/SearchResultsPresenter.java b/src/main/java/org/sigmah/client/ui/presenter/SearchResultsPresenter.java index 9667db4a1..59130379e 100644 --- a/src/main/java/org/sigmah/client/ui/presenter/SearchResultsPresenter.java +++ b/src/main/java/org/sigmah/client/ui/presenter/SearchResultsPresenter.java @@ -24,7 +24,6 @@ * #L% */ - import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; @@ -41,6 +40,7 @@ import org.sigmah.client.page.RequestParameter; import org.sigmah.client.search.SearchService; import org.sigmah.client.search.SearchServiceAsync; +import org.sigmah.client.ui.presenter.DashboardPresenter.ReminderOrMonitoredPointHandler; import org.sigmah.client.ui.presenter.base.AbstractPagePresenter; import org.sigmah.client.ui.presenter.contact.dashboardlist.ContactsListWidget; import org.sigmah.client.ui.presenter.project.treegrid.ProjectsListWidget; @@ -106,36 +106,47 @@ import org.sigmah.shared.dto.search.SearchResultsDTO; /** - *Search Results page presenter. + * Search Results page presenter. * * */ public class SearchResultsPresenter extends AbstractPagePresenter { - + /** * View interface. + * */ + + public static interface ReminderOrMonitoredPointHandler{ + public void onLabelClickEvent(Integer projectId); + } @ImplementedBy(SearchResultsView.class) public interface View extends ViewInterface { + + void setReminderOrMonitoredPointHandler(ReminderOrMonitoredPointHandler handler); + void setSearchString(String searchText); + void addSearchData(Object searchData); + void addResultsPanel(); + ContentPanel getSearchResultsPanel(); } - + /** * Presenters's initialization. * * @param view - * Presenter's view interface. + * Presenter's view interface. * @param injector - * Injected client injector. + * Injected client injector. */ @Inject public SearchResultsPresenter(View view, Injector injector) { super(view, injector); - //injector.getPageManager().registerPage(this, isPopupView()); + // injector.getPageManager().registerPage(this, isPopupView()); } /** @@ -147,12 +158,23 @@ public Page getPage() { } @Override - public void onPageRequest(PageRequest request){ + public void onPageRequest(PageRequest request) { // TODO Auto-generated method stub - //view.initialize() is default + // view.initialize() is default String title = request.getData(RequestParameter.TITLE).toString(); - //Window.alert("Executing onPageRequest, title is " + title ); + // Window.alert("Executing onPageRequest, title is " + title ); view.setSearchString(title); + view.setReminderOrMonitoredPointHandler(new ReminderOrMonitoredPointHandler() { + @Override + public void onLabelClickEvent(Integer projectId) { +// Profiler.INSTANCE.startScenario(Scenario.OPEN_PROJECT); + Window.alert("Opening project " + projectId ); +// eventBus.navigateRequest(Page.SEARCH_RESULTS.requestWith(RequestParameter.ID, projectId)); + PageRequest request = new PageRequest(Page.PROJECT_DASHBOARD); + request.addParameter(RequestParameter.ID, projectId ); + eventBus.navigateRequest(request); + } + }); view.addSearchData(request.getData(RequestParameter.CONTENT)); view.addResultsPanel(); } diff --git a/src/main/java/org/sigmah/client/ui/view/SearchResultsView.java b/src/main/java/org/sigmah/client/ui/view/SearchResultsView.java index 710521a33..da659dacc 100644 --- a/src/main/java/org/sigmah/client/ui/view/SearchResultsView.java +++ b/src/main/java/org/sigmah/client/ui/view/SearchResultsView.java @@ -27,13 +27,18 @@ import java.util.Arrays; import java.util.Date; +import java.util.HashMap; import java.util.List; import java.util.Map; import org.sigmah.client.i18n.I18N; +import org.sigmah.client.page.Page; +import org.sigmah.client.page.PageRequest; +import org.sigmah.client.page.RequestParameter; import org.sigmah.client.search.SearchService; import org.sigmah.client.search.SearchServiceAsync; import org.sigmah.client.ui.presenter.SearchResultsPresenter; +import org.sigmah.client.ui.presenter.SearchResultsPresenter.ReminderOrMonitoredPointHandler; import org.sigmah.client.ui.presenter.contact.dashboardlist.ContactsListWidget; import org.sigmah.client.ui.presenter.project.treegrid.ProjectsListWidget; import org.sigmah.client.ui.res.icon.IconImageBundle; @@ -70,10 +75,15 @@ import com.extjs.gxt.ui.client.widget.grid.filters.GridFilters; import com.extjs.gxt.ui.client.widget.grid.filters.StringFilter; import com.extjs.gxt.ui.client.widget.layout.FitLayout; +import com.google.gson.Gson; +import com.google.gson.reflect.TypeToken; import com.google.gwt.core.client.GWT; import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.event.dom.client.ClickHandler; import com.google.gwt.i18n.client.DateTimeFormat; +import com.google.gwt.json.client.JSONObject; +import com.google.gwt.json.client.JSONParser; +import com.google.gwt.json.client.JSONValue; import com.google.gwt.user.client.Window; import com.google.gwt.user.client.ui.AbstractImagePrototype; import com.google.gwt.user.client.ui.HTML; @@ -102,15 +112,33 @@ public class SearchResultsView extends AbstractView implements SearchResultsPres private LayoutContainer centerContainer; + private ArrayList> listMaps = new ArrayList>(); + + // private Map ProjectIDTo + + private static ReminderOrMonitoredPointHandler handler; + + final ReminderOrMonitoredPointHandler getReminderOrMonitoredPointHandler() { + return handler; + } + + /** + * {@inheritDoc} + */ + @Override + public void setReminderOrMonitoredPointHandler(final ReminderOrMonitoredPointHandler handler) { + this.handler = handler; + } + /** * {@inheritDoc} */ @Override public void initialize() { // default - //Window.alert("Initializing Search View!"); + // Window.alert("Initializing Search View!"); } - + public ContentPanel getSearchResultsPanel() { return searchResultsPanel; } @@ -125,7 +153,7 @@ public LayoutContainer getCenterContainer() { public void setSearchString(String searchText) { this.searchText = searchText; - //Window.alert("Searchtext set to " + searchText); + // Window.alert("Searchtext set to " + searchText); } // ------------------------------------------------------------------------------------------- @@ -142,7 +170,7 @@ private void createSearchResultsPanel() { } public void setContentPanel(String title, boolean collapsible, Layout layout, Scroll scroll, String... stylenames) { - + searchResultsPanel = new ContentPanel(layout != null ? layout : new FitLayout()); searchResultsPanel.layout(); @@ -166,7 +194,7 @@ public void setContentPanel(String title, boolean collapsible, Layout layout, Sc } - private static List createSearchResultsGridColumns() { + private List createSearchResultsGridColumns() { // Label column. ColumnConfig labelColumn = new ColumnConfig(); @@ -178,40 +206,66 @@ private static List createSearchResultsGridColumns() { labelColumn.setRenderer(new GridCellRenderer() { @Override - public Object render(SearchResultsDTO model, String property, ColumnData config, int rowIndex, int colIndex, - ListStore store, Grid grid) { + public Object render(final SearchResultsDTO model, String property, ColumnData config, int rowIndex, + int colIndex, ListStore store, Grid grid) { + + Map retMap = toMap(model.getResult()); + + if (retMap.get("doc_type").toString().equals("PROJECT")) { + model.setDTOid(retMap.get("databaseid").toString()); + Window.alert("Set the id = " + model.getDTOid()); + } + + if (retMap != null) { + listMaps.add(retMap); + // Window.alert(retMap.entrySet().toString()); + } + + Window.alert(retMap.get("doc_type").toString()); + Window.alert(retMap.get("doc_id").toString()); com.google.gwt.user.client.ui.Label label = new com.google.gwt.user.client.ui.Label(model.getResult()); -// Window.alert("Label is : " + model.getResult() + -// "\n property: " + property + "\nconfig: " + config.toString() + "\nrowindex: " + rowIndex + -// "\ncolIndex:" + colIndex ); + // HTML h = new HTML(); + // h.setText(model.getResult()); + + // Window.alert("Label is : " + model.getResult() + + // "\n property: " + property + "\nconfig: " + config.toString() + // + "\nrowindex: " + rowIndex + + // "\ncolIndex:" + colIndex ); label.addStyleName("hyperlink-label"); - label.addClickHandler(new ClickHandler() { + // label.setHeight(""); + if (retMap.get("doc_type").toString().equals("PROJECT")) { + Window.alert("Adding project " + model.getDTOid()); + Window.alert("Integer " + Integer.parseInt(model.getDTOid())); + // final Integer project_id = + // Integer.parseInt(retMap.get("databaseid")); + label.addClickHandler(new ClickHandler() { + + @Override + public void onClick(ClickEvent event) { + // handler.onLabelClickEvent(project_id); + handler.onLabelClickEvent(Integer.parseInt(model.getDTOid())); + // PageRequest request = new PageRequest(Page.PROJECT_DASHBOARD); + //request.addParameter(RequestParameter.ID, Integer.parseInt(model.getDTOid()) ); + } + }); + } - @Override - public void onClick(ClickEvent event) { - // handler.onLabelClickEvent(model.getProjectId()); - } - }); - label.setTitle(model.getResult()); return label; } }); - return Arrays.asList(new ColumnConfig[] { - labelColumn - }); + return Arrays.asList(new ColumnConfig[] { labelColumn }); } public void addResultsPanel() { - - if( centerContainer == null ){ + + if (centerContainer == null) { centerContainer = Layouts.vBox(); centerContainer.layout(); - } - else{ + } else { centerContainer.removeAll(); centerContainer.layout(); } @@ -220,23 +274,40 @@ public void addResultsPanel() { Grid searchResultsGrid = new Grid(searchResultsStore, new ColumnModel(createSearchResultsGridColumns())); - searchResultsGrid.getView().setForceFit(true); + searchResultsGrid.getView().setForceFit(false); + searchResultsGrid.getView().setAutoFill(true); searchResultsGrid.setAutoExpandColumn("label"); searchResultsPanel.add(searchResultsGrid); searchResultsPanel.layout(); - + centerContainer.add(searchResultsPanel, Layouts.vBoxData(Margin.TOP)); centerContainer.layout(); add(centerContainer); } + public static Map toMap(String jsonStr) { + Map map = new HashMap(); + + JSONValue parsed = JSONParser.parseStrict(jsonStr); + JSONObject jsonObj = parsed.isObject(); + if (jsonObj != null) { + for (String key : jsonObj.keySet()) { + map.put(key.replaceAll("^\"|\"$", ""), jsonObj.get(key).toString().replaceAll("^\"|\"$", "")); + } + } + + return map; + } + public void addSearchData(Object searchData) { if (searchData != null) { - //Window.alert("Received search results!: \n" + searchData.toString()); + // Window.alert("Received search results!: \n" + + // searchData.toString()); searchResultsStore = new ListStore(); for (Object object : (ArrayList) searchData) { searchResultsStore.add(object != null ? (SearchResultsDTO) object : null); + // Window.alert("Received search result!: \n" + // object.getResult()); } diff --git a/src/main/java/org/sigmah/server/search/SolrSearcher.java b/src/main/java/org/sigmah/server/search/SolrSearcher.java index b9da4f497..bd374191f 100644 --- a/src/main/java/org/sigmah/server/search/SolrSearcher.java +++ b/src/main/java/org/sigmah/server/search/SolrSearcher.java @@ -18,6 +18,8 @@ import org.sigmah.shared.dto.search.SearchResultsDTO; import com.allen_sauer.gwt.log.client.Log; +import com.google.gson.Gson; +import com.google.gson.JsonObject; import com.google.gwt.json.client.JSONArray; import com.google.gwt.json.client.JSONObject; import com.google.gwt.user.client.Window; @@ -113,6 +115,7 @@ public ArrayList search(String searchStr) { } if (rsp != null) { + Gson gson = new Gson(); Iterator iter = rsp.getResults().iterator(); while (iter.hasNext()) { SearchResultsDTO descriptor = new SearchResultsDTO(); @@ -124,7 +127,8 @@ public ArrayList search(String searchStr) { // descriptor.getResult().add(entry.getKey().toString() + " ::: // " + entry.getValue().toString()); // } - descriptor.setResult(resultDoc.toString()); + //System.out.println(gson.toJson(resultDoc).toString()); + descriptor.setResult(gson.toJson(resultDoc).toString()); searchList.add(descriptor); } diff --git a/src/main/java/org/sigmah/shared/dto/search/SearchResultsDTO.java b/src/main/java/org/sigmah/shared/dto/search/SearchResultsDTO.java index d9213b505..df1db4ebe 100644 --- a/src/main/java/org/sigmah/shared/dto/search/SearchResultsDTO.java +++ b/src/main/java/org/sigmah/shared/dto/search/SearchResultsDTO.java @@ -15,10 +15,7 @@ public class SearchResultsDTO extends AbstractModelDataEntityDTO implem private static final long serialVersionUID = -1227917435084017780L; private String result; - - public SearchResultsDTO(){ - - } + private String DTOid; public String getResult() { return result; @@ -33,5 +30,13 @@ public String getEntityName() { // TODO Auto-generated method stub return null; } + + public String getDTOid() { + return DTOid; + } + + public void setDTOid(String dTOid) { + DTOid = dTOid; + } } From b533347715de0570c50c6ccd8f15d7ccdab608bd Mon Sep 17 00:00:00 2001 From: indianauthority97 Date: Tue, 27 Jun 2017 19:16:45 +0530 Subject: [PATCH 13/36] [Issue #535]:Contacts, OrgUnits open on clicking results --- .../ui/presenter/SearchResultsPresenter.java | 50 ++++++++++-- .../client/ui/view/SearchResultsView.java | 79 ++++++++++++++++--- .../shared/dto/search/SearchResultsDTO.java | 10 +++ 3 files changed, 121 insertions(+), 18 deletions(-) diff --git a/src/main/java/org/sigmah/client/ui/presenter/SearchResultsPresenter.java b/src/main/java/org/sigmah/client/ui/presenter/SearchResultsPresenter.java index 59130379e..26a2f249b 100644 --- a/src/main/java/org/sigmah/client/ui/presenter/SearchResultsPresenter.java +++ b/src/main/java/org/sigmah/client/ui/presenter/SearchResultsPresenter.java @@ -40,7 +40,9 @@ import org.sigmah.client.page.RequestParameter; import org.sigmah.client.search.SearchService; import org.sigmah.client.search.SearchServiceAsync; -import org.sigmah.client.ui.presenter.DashboardPresenter.ReminderOrMonitoredPointHandler; +import org.sigmah.client.ui.presenter.SearchResultsPresenter.ContactResultsClickHandler; +import org.sigmah.client.ui.presenter.SearchResultsPresenter.OrgUnitResultsClickHandler; +import org.sigmah.client.ui.presenter.SearchResultsPresenter.ProjectResultsClickHandler; import org.sigmah.client.ui.presenter.base.AbstractPagePresenter; import org.sigmah.client.ui.presenter.contact.dashboardlist.ContactsListWidget; import org.sigmah.client.ui.presenter.project.treegrid.ProjectsListWidget; @@ -118,14 +120,24 @@ public class SearchResultsPresenter extends AbstractPagePresenter ProjectIDTo - private static ReminderOrMonitoredPointHandler handler; + private static SearchResultsClickHandler handler; - final ReminderOrMonitoredPointHandler getReminderOrMonitoredPointHandler() { + final SearchResultsClickHandler getSearchResultsClickHandler() { return handler; } @@ -126,7 +129,17 @@ final ReminderOrMonitoredPointHandler getReminderOrMonitoredPointHandler() { * {@inheritDoc} */ @Override - public void setReminderOrMonitoredPointHandler(final ReminderOrMonitoredPointHandler handler) { + public void setProjectClickHandler(final ProjectResultsClickHandler handler) { + this.handler = handler; + } + + @Override + public void setContactClickHandler(final ContactResultsClickHandler handler) { + this.handler = handler; + } + + @Override + public void setOrgUnitClickHandler(final OrgUnitResultsClickHandler handler) { this.handler = handler; } @@ -210,19 +223,25 @@ public Object render(final SearchResultsDTO model, String property, ColumnData c int colIndex, ListStore store, Grid grid) { Map retMap = toMap(model.getResult()); + + model.setDTOtype(retMap.get("doc_type").toString()); if (retMap.get("doc_type").toString().equals("PROJECT")) { model.setDTOid(retMap.get("databaseid").toString()); - Window.alert("Set the id = " + model.getDTOid()); + // Window.alert("Set the id = " + model.getDTOid()); + } else if (retMap.get("doc_type").toString().equals("CONTACT")) { + model.setDTOid(retMap.get("id_contact").toString()); + } else if (retMap.get("doc_type").toString().equals("ORG_UNIT")) { + model.setDTOid(retMap.get("org_unit_id").toString()); } - + if (retMap != null) { listMaps.add(retMap); // Window.alert(retMap.entrySet().toString()); } - Window.alert(retMap.get("doc_type").toString()); - Window.alert(retMap.get("doc_id").toString()); + // Window.alert(retMap.get("doc_type").toString()); + // Window.alert(retMap.get("doc_id").toString()); com.google.gwt.user.client.ui.Label label = new com.google.gwt.user.client.ui.Label(model.getResult()); // HTML h = new HTML(); @@ -235,8 +254,42 @@ public Object render(final SearchResultsDTO model, String property, ColumnData c label.addStyleName("hyperlink-label"); // label.setHeight(""); if (retMap.get("doc_type").toString().equals("PROJECT")) { - Window.alert("Adding project " + model.getDTOid()); - Window.alert("Integer " + Integer.parseInt(model.getDTOid())); + // Window.alert("Adding project " + model.getDTOid()); + // Window.alert("Integer " + + // Integer.parseInt(model.getDTOid())); + // final Integer project_id = + // Integer.parseInt(retMap.get("databaseid")); + label.addClickHandler(new ClickHandler() { + + @Override + public void onClick(ClickEvent event) { + ((ProjectResultsClickHandler) handler) + .onLabelClickEvent(Integer.parseInt(model.getDTOid())); + } + }); + } + + if (retMap.get("doc_type").toString().equals("CONTACT")) { + // Window.alert("Adding project " + model.getDTOid()); + // Window.alert("Integer " + + // Integer.parseInt(model.getDTOid())); + // final Integer project_id = + // Integer.parseInt(retMap.get("databaseid")); + label.addClickHandler(new ClickHandler() { + + @Override + public void onClick(ClickEvent event) { + // handler.onLabelClickEvent(project_id); + ((ContactResultsClickHandler) handler) + .onLabelClickEvent(Integer.parseInt(model.getDTOid())); + } + }); + } + + if (retMap.get("doc_type").toString().equals("ORG_UNIT")) { + // Window.alert("Adding project " + model.getDTOid()); + // Window.alert("Integer " + + // Integer.parseInt(model.getDTOid())); // final Integer project_id = // Integer.parseInt(retMap.get("databaseid")); label.addClickHandler(new ClickHandler() { @@ -244,9 +297,8 @@ public Object render(final SearchResultsDTO model, String property, ColumnData c @Override public void onClick(ClickEvent event) { // handler.onLabelClickEvent(project_id); - handler.onLabelClickEvent(Integer.parseInt(model.getDTOid())); - // PageRequest request = new PageRequest(Page.PROJECT_DASHBOARD); - //request.addParameter(RequestParameter.ID, Integer.parseInt(model.getDTOid()) ); + ((OrgUnitResultsClickHandler) handler) + .onLabelClickEvent(Integer.parseInt(model.getDTOid())); } }); } @@ -258,6 +310,7 @@ public void onClick(ClickEvent event) { }); return Arrays.asList(new ColumnConfig[] { labelColumn }); + } public void addResultsPanel() { diff --git a/src/main/java/org/sigmah/shared/dto/search/SearchResultsDTO.java b/src/main/java/org/sigmah/shared/dto/search/SearchResultsDTO.java index df1db4ebe..6055c747b 100644 --- a/src/main/java/org/sigmah/shared/dto/search/SearchResultsDTO.java +++ b/src/main/java/org/sigmah/shared/dto/search/SearchResultsDTO.java @@ -16,6 +16,7 @@ public class SearchResultsDTO extends AbstractModelDataEntityDTO implem private String result; private String DTOid; + private String DTOtype; public String getResult() { return result; @@ -38,5 +39,14 @@ public String getDTOid() { public void setDTOid(String dTOid) { DTOid = dTOid; } + + public String getDTOtype() { + return DTOtype; + } + + public void setDTOtype(String dTOtype) { + DTOtype = dTOtype; + } + } From 0fc5440dfbb404842313095366379f9cf7968ba2 Mon Sep 17 00:00:00 2001 From: indianauthority97 Date: Wed, 28 Jun 2017 19:13:10 +0530 Subject: [PATCH 14/36] [Issue 535]: Made search results pretty --- .../ui/presenter/SearchResultsPresenter.java | 9 -- .../client/ui/view/SearchResultsView.java | 86 +++++++++++++------ 2 files changed, 60 insertions(+), 35 deletions(-) diff --git a/src/main/java/org/sigmah/client/ui/presenter/SearchResultsPresenter.java b/src/main/java/org/sigmah/client/ui/presenter/SearchResultsPresenter.java index 26a2f249b..46dbaaa3a 100644 --- a/src/main/java/org/sigmah/client/ui/presenter/SearchResultsPresenter.java +++ b/src/main/java/org/sigmah/client/ui/presenter/SearchResultsPresenter.java @@ -40,9 +40,6 @@ import org.sigmah.client.page.RequestParameter; import org.sigmah.client.search.SearchService; import org.sigmah.client.search.SearchServiceAsync; -import org.sigmah.client.ui.presenter.SearchResultsPresenter.ContactResultsClickHandler; -import org.sigmah.client.ui.presenter.SearchResultsPresenter.OrgUnitResultsClickHandler; -import org.sigmah.client.ui.presenter.SearchResultsPresenter.ProjectResultsClickHandler; import org.sigmah.client.ui.presenter.base.AbstractPagePresenter; import org.sigmah.client.ui.presenter.contact.dashboardlist.ContactsListWidget; import org.sigmah.client.ui.presenter.project.treegrid.ProjectsListWidget; @@ -185,9 +182,7 @@ public void onPageRequest(PageRequest request) { view.setProjectClickHandler(new ProjectResultsClickHandler() { @Override public void onLabelClickEvent(Integer projectId) { -// Profiler.INSTANCE.startScenario(Scenario.OPEN_PROJECT); Window.alert("Opening project " + projectId ); -// eventBus.navigateRequest(Page.SEARCH_RESULTS.requestWith(RequestParameter.ID, projectId)); PageRequest request = new PageRequest(Page.PROJECT_DASHBOARD); request.addParameter(RequestParameter.ID, projectId ); eventBus.navigateRequest(request); @@ -196,9 +191,7 @@ public void onLabelClickEvent(Integer projectId) { view.setContactClickHandler(new ContactResultsClickHandler() { @Override public void onLabelClickEvent(Integer contactId) { -// Profiler.INSTANCE.startScenario(Scenario.OPEN_PROJECT); Window.alert("Opening Contact " + contactId ); -// eventBus.navigateRequest(Page.SEARCH_RESULTS.requestWith(RequestParameter.ID, projectId)); PageRequest request = new PageRequest(Page.CONTACT_DASHBOARD); request.addParameter(RequestParameter.ID, contactId ); eventBus.navigateRequest(request); @@ -207,9 +200,7 @@ public void onLabelClickEvent(Integer contactId) { view.setOrgUnitClickHandler(new OrgUnitResultsClickHandler() { @Override public void onLabelClickEvent(Integer orgUnitId) { -// Profiler.INSTANCE.startScenario(Scenario.OPEN_PROJECT); Window.alert("Opening OrgUnit " + orgUnitId ); -// eventBus.navigateRequest(Page.SEARCH_RESULTS.requestWith(RequestParameter.ID, projectId)); PageRequest request = new PageRequest(Page.ORGUNIT_DASHBOARD); request.addParameter(RequestParameter.ID, orgUnitId ); eventBus.navigateRequest(request); diff --git a/src/main/java/org/sigmah/client/ui/view/SearchResultsView.java b/src/main/java/org/sigmah/client/ui/view/SearchResultsView.java index 781476285..fc2caf699 100644 --- a/src/main/java/org/sigmah/client/ui/view/SearchResultsView.java +++ b/src/main/java/org/sigmah/client/ui/view/SearchResultsView.java @@ -212,7 +212,7 @@ private List createSearchResultsGridColumns() { // Label column. ColumnConfig labelColumn = new ColumnConfig(); labelColumn.setId("label"); - labelColumn.setHeaderHtml("Label"); + labelColumn.setHeaderHtml("Sort"); labelColumn.setWidth(100); // Add link @@ -225,6 +225,9 @@ public Object render(final SearchResultsDTO model, String property, ColumnData c Map retMap = toMap(model.getResult()); model.setDTOtype(retMap.get("doc_type").toString()); + HTML h = new HTML(getNiceText(retMap)); + + //Window.alert(getNiceText(retMap)); if (retMap.get("doc_type").toString().equals("PROJECT")) { model.setDTOid(retMap.get("databaseid").toString()); @@ -237,13 +240,9 @@ public Object render(final SearchResultsDTO model, String property, ColumnData c if (retMap != null) { listMaps.add(retMap); - // Window.alert(retMap.entrySet().toString()); } - // Window.alert(retMap.get("doc_type").toString()); - // Window.alert(retMap.get("doc_id").toString()); - - com.google.gwt.user.client.ui.Label label = new com.google.gwt.user.client.ui.Label(model.getResult()); + com.google.gwt.user.client.ui.Label label = new com.google.gwt.user.client.ui.Label(); // HTML h = new HTML(); // h.setText(model.getResult()); @@ -254,12 +253,9 @@ public Object render(final SearchResultsDTO model, String property, ColumnData c label.addStyleName("hyperlink-label"); // label.setHeight(""); if (retMap.get("doc_type").toString().equals("PROJECT")) { - // Window.alert("Adding project " + model.getDTOid()); - // Window.alert("Integer " + - // Integer.parseInt(model.getDTOid())); - // final Integer project_id = - // Integer.parseInt(retMap.get("databaseid")); - label.addClickHandler(new ClickHandler() { + + //label.setText(model.getResult()); + h.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { @@ -270,12 +266,8 @@ public void onClick(ClickEvent event) { } if (retMap.get("doc_type").toString().equals("CONTACT")) { - // Window.alert("Adding project " + model.getDTOid()); - // Window.alert("Integer " + - // Integer.parseInt(model.getDTOid())); - // final Integer project_id = - // Integer.parseInt(retMap.get("databaseid")); - label.addClickHandler(new ClickHandler() { + //label.setText(model.getResult()); + h.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { @@ -287,12 +279,8 @@ public void onClick(ClickEvent event) { } if (retMap.get("doc_type").toString().equals("ORG_UNIT")) { - // Window.alert("Adding project " + model.getDTOid()); - // Window.alert("Integer " + - // Integer.parseInt(model.getDTOid())); - // final Integer project_id = - // Integer.parseInt(retMap.get("databaseid")); - label.addClickHandler(new ClickHandler() { + //label.setText(model.getResult()); + h.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { @@ -303,8 +291,8 @@ public void onClick(ClickEvent event) { }); } - label.setTitle(model.getResult()); - return label; + //label.setTitle(model.getResult()); + return h; } }); @@ -312,6 +300,52 @@ public void onClick(ClickEvent event) { return Arrays.asList(new ColumnConfig[] { labelColumn }); } + + public String getNiceText( Map resultsMap ){ + String htmlBuilder = ""; + if(resultsMap.get("doc_type").toString().equals("PROJECT")){ + htmlBuilder+="
" + + "

" + resultsMap.get("project_name") + " - " + resultsMap.get("project_fullname") + + "

"; + htmlBuilder+="
"; + htmlBuilder+="

"; + htmlBuilder+="
Active Phase: " + resultsMap.get("phase_model_name"); + htmlBuilder+="
Organisational Unit: " + resultsMap.get("project_org_unit_name") + " - " + resultsMap.get("project_org_unit_fullname"); + htmlBuilder+="
Amendment Status: " + resultsMap.get("amendment_status"); + htmlBuilder+="
Project Model: " + resultsMap.get("pmodel_name"); + htmlBuilder+="


"; + } + if(resultsMap.get("doc_type").toString().equals("ORG_UNIT")){ + htmlBuilder+="
" + + "

" + resultsMap.get("org_unit_name") + " - " + resultsMap.get("org_unit_fullname") + + "

"; + htmlBuilder+="
"; + htmlBuilder+="

"; + htmlBuilder+="
Model: " + resultsMap.get("org_unit_model_name"); + htmlBuilder+="
" + "Country: " + resultsMap.get("org_unit_country_iso2") + " - " + resultsMap.get("org_unit_country_name"); + htmlBuilder+="


"; + } + if(resultsMap.get("doc_type").toString().equals("CONTACT")){ + htmlBuilder+="
" + + "

"; + if( resultsMap.get("user_firstname") != null ){ + htmlBuilder+= resultsMap.get("user_firstname") + " - " + resultsMap.get("user_name"); + htmlBuilder+="

"; + } + else{ + //for organization contacts + htmlBuilder+= resultsMap.get("organization_name"); + htmlBuilder+="
"; + return htmlBuilder; + } + htmlBuilder+="
"; + htmlBuilder+="

"; + htmlBuilder+="
Email ID: " + resultsMap.get("user_email"); + htmlBuilder+="
Locale: " + resultsMap.get("user_locale"); + htmlBuilder+="


"; + } + return htmlBuilder; + } public void addResultsPanel() { From 049a3ee89c9469e5a99243a86d18047fd909970a Mon Sep 17 00:00:00 2001 From: indianauthority97 Date: Wed, 28 Jun 2017 21:39:01 +0530 Subject: [PATCH 15/36] [Issue 535]:Added search filtering and resolved first-time connection error --- .../sigmah/client/search/SearchService.java | 2 +- .../client/search/SearchServiceAsync.java | 2 +- .../ui/presenter/zone/SearchPresenter.java | 93 ++++++++----------- .../server/search/SearchServiceImpl.java | 4 +- .../sigmah/server/search/SolrSearcher.java | 9 +- 5 files changed, 48 insertions(+), 62 deletions(-) diff --git a/src/main/java/org/sigmah/client/search/SearchService.java b/src/main/java/org/sigmah/client/search/SearchService.java index 90dae6372..469b56b03 100644 --- a/src/main/java/org/sigmah/client/search/SearchService.java +++ b/src/main/java/org/sigmah/client/search/SearchService.java @@ -9,6 +9,6 @@ @RemoteServiceRelativePath("search") public interface SearchService extends RemoteService { //TODO Add method stubs here - ArrayList search(String searchStr); + ArrayList search(String searchStr, String filter); Boolean index(); } diff --git a/src/main/java/org/sigmah/client/search/SearchServiceAsync.java b/src/main/java/org/sigmah/client/search/SearchServiceAsync.java index 8d74c3d92..7d6b85dc1 100644 --- a/src/main/java/org/sigmah/client/search/SearchServiceAsync.java +++ b/src/main/java/org/sigmah/client/search/SearchServiceAsync.java @@ -8,6 +8,6 @@ public interface SearchServiceAsync { - public void search(String searchStr, AsyncCallback> callback); + public void search(String searchStr, String filter, AsyncCallback> callback); public void index(AsyncCallback callback); } diff --git a/src/main/java/org/sigmah/client/ui/presenter/zone/SearchPresenter.java b/src/main/java/org/sigmah/client/ui/presenter/zone/SearchPresenter.java index a3fed41ed..522ed5df6 100644 --- a/src/main/java/org/sigmah/client/ui/presenter/zone/SearchPresenter.java +++ b/src/main/java/org/sigmah/client/ui/presenter/zone/SearchPresenter.java @@ -84,7 +84,9 @@ public class SearchPresenter extends AbstractZonePresenter private final SearchServiceAsync searchService = GWT.create(SearchService.class); private ArrayList searchResults = new ArrayList(); private Boolean dih_success; - String textToServer; + String textToServer = "default search text"; + String filter = "All"; + boolean firstsearch = true; @Inject public SearchPresenter(View view, Injector injector) { @@ -107,7 +109,7 @@ public static interface View extends ViewInterface { TextBox getSearchText(); Button getSearchButton(); - + Button getIndexButton(); } @@ -132,30 +134,12 @@ public void onBind() { @Override public void onKeyUp(KeyUpEvent event) { if (event.getNativeKeyCode() == KeyCodes.KEY_ENTER) { - + textToServer = view.getSearchText().getText(); + int sel_ind = view.getSearchOptions().getSelectedIndex(); + filter = view.getSearchOptions().getValue(sel_ind); if (textToServer.length() > 0) { - /// Log.error("Title set to " + - // request.getData(RequestParameter.TITLE)); - // Window.alert("Title set to " + - // request.getData(RequestParameter.TITLE)); - // Log.error("Header set to " + - // request.getData(RequestParameter.HEADER)); - // Window.alert("Header set to " + - // request.getData(RequestParameter.HEADER)); search(); -// if (searchResults != null) { -// final PageRequest request = new PageRequest(Page.SEARCH_RESULTS); -// // request.addData(RequestParameter.HEADER, -// // searchText); -// request.addData(RequestParameter.TITLE, searchText); -// request.addData(RequestParameter.CONTENT, searchResults); -// request.addParameter(RequestParameter.ID, searchText.replaceAll("\\W", "")); -// // request.addParameter(RequestParameter.HEADER, -// // searchText); -// request.addParameter(RequestParameter.TITLE, searchText); -// eventBus.navigateRequest(request); -// } } } } @@ -166,34 +150,17 @@ public void onKeyUp(KeyUpEvent event) { @Override public void onClick(ClickEvent event) { - + textToServer = view.getSearchText().getText(); + int sel_ind = view.getSearchOptions().getSelectedIndex(); + filter = view.getSearchOptions().getValue(sel_ind); if (textToServer.length() > 0) { - // Log.error("Title set to " + - // request.getData(RequestParameter.TITLE)); - // Window.alert("Title set to " + - // request.getData(RequestParameter.TITLE)); - // Log.error("Header set to " + - // request.getData(RequestParameter.HEADER)); - // Window.alert("Header set to " + - // request.getData(RequestParameter.HEADER)); search(); -// if (searchResults != null) { -// final PageRequest request = new PageRequest(Page.SEARCH_RESULTS); -// // request.addData(RequestParameter.HEADER, searchText); -// request.addData(RequestParameter.TITLE, searchText); -// request.addData(RequestParameter.CONTENT, searchResults); -// request.addParameter(RequestParameter.ID, searchText.replaceAll("\\W", "")); -// // request.addParameter(RequestParameter.HEADER,searchText); -// request.addParameter(RequestParameter.TITLE, searchText); -// eventBus.navigateRequest(request); -// } - } } }); - + view.getIndexButton().addClickHandler(new ClickHandler() { public void onClick(ClickEvent event) { index(); @@ -201,39 +168,53 @@ public void onClick(ClickEvent event) { }); } - private void search() { + if (firstsearch) { + // dummy call just to make connection + searchService.search(textToServer, filter, new AsyncCallback>() { + public void onFailure(Throwable caught) { + //Window.alert("Could not make connection!"); + caught.printStackTrace(); + } + + public void onSuccess(ArrayList result) { + //Window.alert("Excellent, solr connection up!"); + firstsearch = false; + } + }); + } // Send the input to the server. - searchService.search(textToServer, new AsyncCallback>() { + //Window.alert("Filter is: " + filter); + searchService.search(textToServer, filter, new AsyncCallback>() { public void onFailure(Throwable caught) { Window.alert("Failure on the server side!"); + firstsearch = true; //will try to set up a connnection again caught.printStackTrace(); } public void onSuccess(ArrayList result) { searchResults = result; -// for (SearchResultsDTO doc : searchResults) { -// Window.alert(doc.getResult().toString()); -// } - + // for (SearchResultsDTO doc : searchResults) { + // Window.alert(doc.getResult().toString()); + // } + if (searchResults != null) { PageRequest request = new PageRequest(Page.SEARCH_RESULTS); // request.addData(RequestParameter.HEADER, searchText); - request.addData(RequestParameter.TITLE, textToServer ); + request.addData(RequestParameter.TITLE, textToServer); request.addData(RequestParameter.CONTENT, searchResults); request.addParameter(RequestParameter.ID, textToServer.replaceAll("\\W", "")); // request.addParameter(RequestParameter.HEADER,searchText); request.addParameter(RequestParameter.TITLE, textToServer); eventBus.navigateRequest(request); } - - + } }); } - + private void index() { searchService.index(new AsyncCallback() { public void onFailure(Throwable caught) { @@ -243,9 +224,9 @@ public void onFailure(Throwable caught) { public void onSuccess(Boolean result) { dih_success = result; - if( dih_success == true ){ + if (dih_success == true) { Window.alert("Successfully completed Full Import!"); - }else{ + } else { Window.alert("Failed to complete Full Import!"); } } diff --git a/src/main/java/org/sigmah/server/search/SearchServiceImpl.java b/src/main/java/org/sigmah/server/search/SearchServiceImpl.java index d22a4592c..a3e5d17b3 100644 --- a/src/main/java/org/sigmah/server/search/SearchServiceImpl.java +++ b/src/main/java/org/sigmah/server/search/SearchServiceImpl.java @@ -11,8 +11,8 @@ public class SearchServiceImpl extends RemoteServiceServlet implements SearchService{ //implementation of the Search Methods @Override - public ArrayList search(String searchStr){ - return SolrSearcher.getInstance().search(searchStr); + public ArrayList search(String searchStr, String filter){ + return SolrSearcher.getInstance().search(searchStr, filter); } @Override diff --git a/src/main/java/org/sigmah/server/search/SolrSearcher.java b/src/main/java/org/sigmah/server/search/SolrSearcher.java index bd374191f..1acddc9b0 100644 --- a/src/main/java/org/sigmah/server/search/SolrSearcher.java +++ b/src/main/java/org/sigmah/server/search/SolrSearcher.java @@ -91,13 +91,18 @@ public SolrDocumentList SolrTestQuery() { } - public ArrayList search(String searchStr) { + public ArrayList search(String searchStr, String filter) { ArrayList searchList = new ArrayList(); SolrQuery query = new SolrQuery(); query.setQuery(searchStr); - + if( filter.equals("Projects")) + query.set("fq", "PROJECT"); + else if(filter.equals("Contacts")) + query.set("fq", "CONTACT"); + else if(filter.equals("OrgUnits")) + query.set("fq", "ORG_UNIT"); // query.addSortField("weight", ORDER.desc); QueryResponse rsp = null; From 14db114fb65209fc14836fbf4fb6ca62d45587ed Mon Sep 17 00:00:00 2001 From: indianauthority97 Date: Fri, 30 Jun 2017 20:52:20 +0530 Subject: [PATCH 16/36] [Issue #535]:Added icons to differentiate between types of results --- .../ui/presenter/SearchResultsPresenter.java | 6 +- .../ui/presenter/zone/SearchPresenter.java | 9 +-- .../client/ui/view/SearchResultsView.java | 62 ++++++++++++++++--- 3 files changed, 63 insertions(+), 14 deletions(-) diff --git a/src/main/java/org/sigmah/client/ui/presenter/SearchResultsPresenter.java b/src/main/java/org/sigmah/client/ui/presenter/SearchResultsPresenter.java index 46dbaaa3a..702374435 100644 --- a/src/main/java/org/sigmah/client/ui/presenter/SearchResultsPresenter.java +++ b/src/main/java/org/sigmah/client/ui/presenter/SearchResultsPresenter.java @@ -182,7 +182,7 @@ public void onPageRequest(PageRequest request) { view.setProjectClickHandler(new ProjectResultsClickHandler() { @Override public void onLabelClickEvent(Integer projectId) { - Window.alert("Opening project " + projectId ); + //Window.alert("Opening project " + projectId ); PageRequest request = new PageRequest(Page.PROJECT_DASHBOARD); request.addParameter(RequestParameter.ID, projectId ); eventBus.navigateRequest(request); @@ -191,7 +191,7 @@ public void onLabelClickEvent(Integer projectId) { view.setContactClickHandler(new ContactResultsClickHandler() { @Override public void onLabelClickEvent(Integer contactId) { - Window.alert("Opening Contact " + contactId ); + //Window.alert("Opening Contact " + contactId ); PageRequest request = new PageRequest(Page.CONTACT_DASHBOARD); request.addParameter(RequestParameter.ID, contactId ); eventBus.navigateRequest(request); @@ -200,7 +200,7 @@ public void onLabelClickEvent(Integer contactId) { view.setOrgUnitClickHandler(new OrgUnitResultsClickHandler() { @Override public void onLabelClickEvent(Integer orgUnitId) { - Window.alert("Opening OrgUnit " + orgUnitId ); + //Window.alert("Opening OrgUnit " + orgUnitId ); PageRequest request = new PageRequest(Page.ORGUNIT_DASHBOARD); request.addParameter(RequestParameter.ID, orgUnitId ); eventBus.navigateRequest(request); diff --git a/src/main/java/org/sigmah/client/ui/presenter/zone/SearchPresenter.java b/src/main/java/org/sigmah/client/ui/presenter/zone/SearchPresenter.java index 522ed5df6..a020474dc 100644 --- a/src/main/java/org/sigmah/client/ui/presenter/zone/SearchPresenter.java +++ b/src/main/java/org/sigmah/client/ui/presenter/zone/SearchPresenter.java @@ -176,6 +176,7 @@ private void search() { searchService.search(textToServer, filter, new AsyncCallback>() { public void onFailure(Throwable caught) { //Window.alert("Could not make connection!"); + firstsearch = false; caught.printStackTrace(); } @@ -190,7 +191,7 @@ public void onSuccess(ArrayList result) { searchService.search(textToServer, filter, new AsyncCallback>() { public void onFailure(Throwable caught) { Window.alert("Failure on the server side!"); - firstsearch = true; //will try to set up a connnection again + //firstsearch = true; //will try to set up a connnection again caught.printStackTrace(); } @@ -203,11 +204,11 @@ public void onSuccess(ArrayList result) { if (searchResults != null) { PageRequest request = new PageRequest(Page.SEARCH_RESULTS); // request.addData(RequestParameter.HEADER, searchText); - request.addData(RequestParameter.TITLE, textToServer); + request.addData(RequestParameter.TITLE, textToServer.replaceAll("[^a-zA-Z0-9\\s]", "")); request.addData(RequestParameter.CONTENT, searchResults); - request.addParameter(RequestParameter.ID, textToServer.replaceAll("\\W", "")); + request.addParameter(RequestParameter.ID, textToServer.replaceAll("[^a-zA-Z0-9\\s]", "").replaceAll(" ", "-")); // request.addParameter(RequestParameter.HEADER,searchText); - request.addParameter(RequestParameter.TITLE, textToServer); + //request.addParameter(RequestParameter.TITLE, textToServer); eventBus.navigateRequest(request); } diff --git a/src/main/java/org/sigmah/client/ui/view/SearchResultsView.java b/src/main/java/org/sigmah/client/ui/view/SearchResultsView.java index fc2caf699..de1594686 100644 --- a/src/main/java/org/sigmah/client/ui/view/SearchResultsView.java +++ b/src/main/java/org/sigmah/client/ui/view/SearchResultsView.java @@ -45,6 +45,9 @@ import org.sigmah.client.ui.presenter.contact.dashboardlist.ContactsListWidget; import org.sigmah.client.ui.presenter.project.treegrid.ProjectsListWidget; import org.sigmah.client.ui.res.icon.IconImageBundle; +import org.sigmah.client.ui.res.icon.dashboard.funding.FundingIconProvider; +import org.sigmah.client.ui.res.icon.dashboard.funding.FundingIconProvider.IconSize; +import org.sigmah.client.ui.res.icon.orgunit.OrgUnitImageBundle; import org.sigmah.client.ui.view.base.AbstractView; import org.sigmah.client.ui.widget.button.Button; import org.sigmah.client.ui.widget.form.Forms; @@ -54,6 +57,8 @@ import org.sigmah.client.ui.widget.panel.Panels; import org.sigmah.client.util.ClientUtils; import org.sigmah.client.util.DateUtils; +import org.sigmah.shared.dto.referential.ContactModelType; +import org.sigmah.shared.dto.referential.ProjectModelType; import org.sigmah.shared.dto.reminder.MonitoredPointDTO; import org.sigmah.shared.dto.reminder.ReminderDTO; import org.sigmah.shared.dto.search.SearchResultsDTO; @@ -304,9 +309,16 @@ public void onClick(ClickEvent event) { public String getNiceText( Map resultsMap ){ String htmlBuilder = ""; if(resultsMap.get("doc_type").toString().equals("PROJECT")){ - htmlBuilder+="
" + - "

" + resultsMap.get("project_name") + " - " + resultsMap.get("project_fullname") + - "

"; + + ProjectModelType pmt = null; + if( resultsMap.get("type_pmodel").equals("FUNDING"))pmt = ProjectModelType.FUNDING; + if( resultsMap.get("type_pmodel").equals("NGO"))pmt = ProjectModelType.NGO; + if( resultsMap.get("type_pmodel").equals("LOCAL_PARTNER"))pmt = ProjectModelType.LOCAL_PARTNER; + + htmlBuilder+="
" + + "
" + getProjectLogo(pmt).getHTML() + "

" + +"

" + resultsMap.get("project_name") + " - " + resultsMap.get("project_fullname") + + "

"; htmlBuilder+="
"; htmlBuilder+="

"; htmlBuilder+="
Active Phase: " + resultsMap.get("phase_model_name"); @@ -316,8 +328,9 @@ public String getNiceText( Map resultsMap ){ htmlBuilder+="


"; } if(resultsMap.get("doc_type").toString().equals("ORG_UNIT")){ - htmlBuilder+="
" + - "

" + resultsMap.get("org_unit_name") + " - " + resultsMap.get("org_unit_fullname") + + htmlBuilder+="
" + + "
" + getOrgUnitLogo().getHTML() + "

" + +"

" + resultsMap.get("org_unit_name") + " - " + resultsMap.get("org_unit_fullname") + "

"; htmlBuilder+="
"; htmlBuilder+="

"; @@ -326,8 +339,14 @@ public String getNiceText( Map resultsMap ){ htmlBuilder+="


"; } if(resultsMap.get("doc_type").toString().equals("CONTACT")){ - htmlBuilder+="
" + - "

"; + + ContactModelType cmt = null; + if( resultsMap.get("contact_model_type").equals("INDIVIDUAL"))cmt = ContactModelType.INDIVIDUAL; + if( resultsMap.get("contact_model_type").equals("ORGANIZATION"))cmt = ContactModelType.ORGANIZATION; + + htmlBuilder+="
" + getContactLogo(cmt) + "

"; + htmlBuilder+="
" + + "

"; if( resultsMap.get("user_firstname") != null ){ htmlBuilder+= resultsMap.get("user_firstname") + " - " + resultsMap.get("user_name"); htmlBuilder+="

"; @@ -403,5 +422,34 @@ public void addSearchData(Object searchData) { } } + + public AbstractImagePrototype getProjectLogo(final ProjectModelType projectType) { + + final AbstractImagePrototype projectIcon = FundingIconProvider.getProjectTypeIcon(projectType, IconSize.MEDIUM); + return projectIcon; + } + + public HTML getContactLogo(ContactModelType type){ + HTML avatar = new HTML(); + avatar.setWidth(36 + "px"); + avatar.setHeight(36 + "px"); + avatar.setStyleName("contact-card-avatar"); + avatar.getElement().getStyle().clearBackgroundImage(); + switch (type) { + case INDIVIDUAL: + avatar.addStyleName("contact-card-avatar-individual"); + break; + case ORGANIZATION: + avatar.addStyleName("contact-card-avatar-organization"); + break; + default: + throw new IllegalStateException("Unknown ContactModelType : " + type); + } + return avatar; + } + + public AbstractImagePrototype getOrgUnitLogo(){ + return OrgUnitImageBundle.ICONS.orgUnitSmall(); + } } From 9d15b0a2a1d9454307721e3bec0d8f03847740d4 Mon Sep 17 00:00:00 2001 From: indianauthority97 Date: Wed, 5 Jul 2017 18:09:29 +0530 Subject: [PATCH 17/36] [Issue #535]:Added filtering (using existing permissions of user) for project results --- .../sigmah/client/page/RequestParameter.java | 5 +- .../sigmah/client/search/SearchService.java | 2 +- .../client/search/SearchServiceAsync.java | 2 +- .../ui/presenter/SearchResultsPresenter.java | 10 + .../ui/presenter/zone/SearchPresenter.java | 73 +++++-- .../client/ui/view/SearchResultsView.java | 181 +++++++++++------- .../server/search/SearchServiceImpl.java | 12 +- .../sigmah/server/search/SolrDocFilter.java | 43 +++++ .../sigmah/server/search/SolrSearcher.java | 13 +- 9 files changed, 251 insertions(+), 90 deletions(-) create mode 100644 src/main/java/org/sigmah/server/search/SolrDocFilter.java diff --git a/src/main/java/org/sigmah/client/page/RequestParameter.java b/src/main/java/org/sigmah/client/page/RequestParameter.java index 3f43d0814..0b4894c23 100644 --- a/src/main/java/org/sigmah/client/page/RequestParameter.java +++ b/src/main/java/org/sigmah/client/page/RequestParameter.java @@ -65,7 +65,10 @@ public enum RequestParameter { CLOSE_CURRENT_TAB, CONTACT_ID, ELEMENTS, - PROJECT_ID; + PROJECT_ID, + FILTER_PROJECT_IDS, + FILTER_CONTACT_IDS, + FILTER_ORGUNIT_IDS; // If the parameter is part of the tab uniqueness logic. private final boolean unique; diff --git a/src/main/java/org/sigmah/client/search/SearchService.java b/src/main/java/org/sigmah/client/search/SearchService.java index 469b56b03..122a3aeda 100644 --- a/src/main/java/org/sigmah/client/search/SearchService.java +++ b/src/main/java/org/sigmah/client/search/SearchService.java @@ -9,6 +9,6 @@ @RemoteServiceRelativePath("search") public interface SearchService extends RemoteService { //TODO Add method stubs here - ArrayList search(String searchStr, String filter); + ArrayList search(String searchStr, String filter, Integer UserID); Boolean index(); } diff --git a/src/main/java/org/sigmah/client/search/SearchServiceAsync.java b/src/main/java/org/sigmah/client/search/SearchServiceAsync.java index 7d6b85dc1..62977a797 100644 --- a/src/main/java/org/sigmah/client/search/SearchServiceAsync.java +++ b/src/main/java/org/sigmah/client/search/SearchServiceAsync.java @@ -8,6 +8,6 @@ public interface SearchServiceAsync { - public void search(String searchStr, String filter, AsyncCallback> callback); + public void search(String searchStr, String filter, Integer UserID, AsyncCallback> callback); public void index(AsyncCallback callback); } diff --git a/src/main/java/org/sigmah/client/ui/presenter/SearchResultsPresenter.java b/src/main/java/org/sigmah/client/ui/presenter/SearchResultsPresenter.java index 702374435..4d598a495 100644 --- a/src/main/java/org/sigmah/client/ui/presenter/SearchResultsPresenter.java +++ b/src/main/java/org/sigmah/client/ui/presenter/SearchResultsPresenter.java @@ -25,6 +25,8 @@ */ import java.util.ArrayList; +import java.util.Arrays; +import java.util.Date; import java.util.HashMap; import java.util.HashSet; import java.util.List; @@ -57,8 +59,10 @@ import org.sigmah.client.util.ClientUtils; import org.sigmah.shared.command.GetMonitoredPoints; import org.sigmah.shared.command.GetOrgUnits; +import org.sigmah.shared.command.GetProjects; import org.sigmah.shared.command.GetReminders; import org.sigmah.shared.command.result.ListResult; +import org.sigmah.shared.dto.ProjectDTO; import org.sigmah.shared.dto.orgunit.OrgUnitDTO; import org.sigmah.shared.dto.referential.GlobalPermissionEnum; import org.sigmah.shared.dto.reminder.MonitoredPointDTO; @@ -148,6 +152,8 @@ public interface View extends ViewInterface { void setContactClickHandler(ContactResultsClickHandler handler); void setOrgUnitClickHandler(OrgUnitResultsClickHandler handler); + + void setProjectIdsForFiltering(Set projectIdsForFiltering); } /** @@ -206,8 +212,12 @@ public void onLabelClickEvent(Integer orgUnitId) { eventBus.navigateRequest(request); } }); + //getProjectsForFiltering(); + view.setProjectIdsForFiltering((Set) request.getData(RequestParameter.FILTER_PROJECT_IDS)); view.addSearchData(request.getData(RequestParameter.CONTENT)); + //Window.alert("Completed addSearchData!"); view.addResultsPanel(); + //Window.alert("Completed addResultsPanel!"); } } diff --git a/src/main/java/org/sigmah/client/ui/presenter/zone/SearchPresenter.java b/src/main/java/org/sigmah/client/ui/presenter/zone/SearchPresenter.java index a020474dc..85e7c4bc6 100644 --- a/src/main/java/org/sigmah/client/ui/presenter/zone/SearchPresenter.java +++ b/src/main/java/org/sigmah/client/ui/presenter/zone/SearchPresenter.java @@ -1,9 +1,14 @@ package org.sigmah.client.ui.presenter.zone; import java.util.ArrayList; +import java.util.Arrays; import java.util.HashMap; +import java.util.HashSet; +import java.util.List; import java.util.Map; +import java.util.Set; +import org.sigmah.client.dispatch.CommandResultHandler; import org.sigmah.client.event.UpdateEvent; import org.sigmah.client.event.handler.UpdateHandler; import org.sigmah.client.i18n.I18N; @@ -24,7 +29,11 @@ import org.sigmah.client.ui.zone.Zone; import org.sigmah.client.ui.zone.ZoneRequest; import org.sigmah.client.util.ClientUtils; +import org.sigmah.shared.command.GetProjects; +import org.sigmah.shared.command.result.Authentication; +import org.sigmah.shared.command.result.ListResult; import org.sigmah.shared.conf.PropertyName; +import org.sigmah.shared.dto.ProjectDTO; import org.sigmah.shared.dto.search.SearchResultsDTO; import com.allen_sauer.gwt.log.client.Log; @@ -87,6 +96,7 @@ public class SearchPresenter extends AbstractZonePresenter String textToServer = "default search text"; String filter = "All"; boolean firstsearch = true; + private Integer userID; @Inject public SearchPresenter(View view, Injector injector) { @@ -170,10 +180,18 @@ public void onClick(ClickEvent event) { } private void search() { - + + Authentication auth = auth(); + + userID = auth.getUserId(); +// Window.alert("User ID of current user is: " + userID ); +// Window.alert("Project IDs in which user is a member" + auth.getMemberOfProjectIds().toString()); +// Window.alert("OrgUnit IDs in which user is a member" + auth.getOrgUnitIds().toString()); +// Window.alert("Sec OrgUnit IDs" + auth.getSecondaryOrgUnitIds().toString()); + if (firstsearch) { // dummy call just to make connection - searchService.search(textToServer, filter, new AsyncCallback>() { + searchService.search(textToServer, filter, userID, new AsyncCallback>() { public void onFailure(Throwable caught) { //Window.alert("Could not make connection!"); firstsearch = false; @@ -188,7 +206,7 @@ public void onSuccess(ArrayList result) { } // Send the input to the server. //Window.alert("Filter is: " + filter); - searchService.search(textToServer, filter, new AsyncCallback>() { + searchService.search(textToServer, filter, userID, new AsyncCallback>() { public void onFailure(Throwable caught) { Window.alert("Failure on the server side!"); //firstsearch = true; //will try to set up a connnection again @@ -200,18 +218,7 @@ public void onSuccess(ArrayList result) { // for (SearchResultsDTO doc : searchResults) { // Window.alert(doc.getResult().toString()); // } - - if (searchResults != null) { - PageRequest request = new PageRequest(Page.SEARCH_RESULTS); - // request.addData(RequestParameter.HEADER, searchText); - request.addData(RequestParameter.TITLE, textToServer.replaceAll("[^a-zA-Z0-9\\s]", "")); - request.addData(RequestParameter.CONTENT, searchResults); - request.addParameter(RequestParameter.ID, textToServer.replaceAll("[^a-zA-Z0-9\\s]", "").replaceAll(" ", "-")); - // request.addParameter(RequestParameter.HEADER,searchText); - //request.addParameter(RequestParameter.TITLE, textToServer); - eventBus.navigateRequest(request); - } - + filterAndPageRequest(); } }); } @@ -233,6 +240,42 @@ public void onSuccess(Boolean result) { } }); } + + private void filterAndPageRequest() { + Integer[] orgUnitsIds = auth().getOrgUnitIds().toArray(new Integer[auth().getOrgUnitIds().size()]); + List orgUnitsIdsAsList = orgUnitsIds != null ? Arrays.asList(orgUnitsIds) : null; + //Window.alert("OrgUnitIds: " +orgUnitsIdsAsList.toString()); + GetProjects cmd = new GetProjects(orgUnitsIdsAsList, null); + cmd.setMappingMode(ProjectDTO.Mode._USE_PROJECT_MAPPER); + final Set projectIdsForFiltering = new HashSet(); + + dispatch.execute(cmd, new CommandResultHandler>() { + + @Override + public void onCommandSuccess(final ListResult result) { + + List projectsForFiltering = result.getList(); + //applyProjectFilters(); + for( ProjectDTO projDTO: projectsForFiltering ){ + //Window.alert("Project ID?: " + projDTO.getId() + " Proj Name: " + projDTO.getName()); + projectIdsForFiltering.add(projDTO.getId()); + } + //Window.alert("Completed getting the project for filtering: " + projectIdsForFiltering.toString()); + if (searchResults != null) { + PageRequest request = new PageRequest(Page.SEARCH_RESULTS); + // request.addData(RequestParameter.HEADER, searchText); + request.addData(RequestParameter.TITLE, textToServer); + request.addData(RequestParameter.CONTENT, searchResults); + request.addData(RequestParameter.FILTER_PROJECT_IDS, projectIdsForFiltering); + request.addParameter(RequestParameter.ID, textToServer.replaceAll("[^a-zA-Z0-9\\s]", "").replaceAll(" ", "-")); + // request.addParameter(RequestParameter.HEADER,searchText); + //request.addParameter(RequestParameter.TITLE, textToServer); + eventBus.navigateRequest(request); + } + } + + }); + } /** * {@inheritDoc} diff --git a/src/main/java/org/sigmah/client/ui/view/SearchResultsView.java b/src/main/java/org/sigmah/client/ui/view/SearchResultsView.java index de1594686..418ebd02b 100644 --- a/src/main/java/org/sigmah/client/ui/view/SearchResultsView.java +++ b/src/main/java/org/sigmah/client/ui/view/SearchResultsView.java @@ -28,8 +28,10 @@ import java.util.Arrays; import java.util.Date; import java.util.HashMap; +import java.util.HashSet; import java.util.List; import java.util.Map; +import java.util.Set; import org.sigmah.client.i18n.I18N; import org.sigmah.client.page.Page; @@ -57,6 +59,7 @@ import org.sigmah.client.ui.widget.panel.Panels; import org.sigmah.client.util.ClientUtils; import org.sigmah.client.util.DateUtils; +import org.sigmah.shared.dto.ProjectDTO; import org.sigmah.shared.dto.referential.ContactModelType; import org.sigmah.shared.dto.referential.ProjectModelType; import org.sigmah.shared.dto.reminder.MonitoredPointDTO; @@ -111,6 +114,10 @@ */ public class SearchResultsView extends AbstractView implements SearchResultsPresenter.View { + + private List projectsForFiltering; + + private Set projectIdsForFiltering; private String searchText; @@ -173,12 +180,82 @@ public void setSearchString(String searchText) { this.searchText = searchText; // Window.alert("Searchtext set to " + searchText); } + + public List getProjectsForFiltering() { + return projectsForFiltering; + } + + public void setProjectsForFiltering(List projectsForFiltering) { + this.projectsForFiltering = projectsForFiltering; + for( ProjectDTO projDTO: projectsForFiltering ){ + //Window.alert("Project ID?: " + projDTO.getId() + " Proj Name: " + projDTO.getName()); + projectIdsForFiltering.add(projDTO.getId()); + } + //Window.alert(projectIdsForFiltering.toString()); + } + + public Set getProjectIdsForFiltering() { + return projectIdsForFiltering; + } + + public void setProjectIdsForFiltering(Set projectIdsForFiltering) { + this.projectIdsForFiltering = projectIdsForFiltering; + } // ------------------------------------------------------------------------------------------- // // UTILITY METHODS. // // ------------------------------------------------------------------------------------------- + + + + public void addSearchData(Object searchData) { + if (searchData != null) { + // Window.alert("Received search results!: \n" + + // searchData.toString()); + searchResultsStore = new ListStore(); + for (Object object : (ArrayList) searchData) { + + SearchResultsDTO temp = object != null ? (SearchResultsDTO) object : null; + if( filter(temp)) { + searchResultsStore.add(temp); + } + + // Window.alert("Received search result!: \n" + + // object.getResult()); + } + } else { + Window.alert("Failed to receive search results!"); + } + } + + public void addResultsPanel() { + + //Window.alert("Started addResultsPanel!"); + if (centerContainer == null) { + centerContainer = Layouts.vBox(); + centerContainer.layout(); + } else { + centerContainer.removeAll(); + centerContainer.layout(); + } + createSearchResultsPanel(); + searchResultsPanel.layout(); + ColumnModel columns = new ColumnModel(createSearchResultsGridColumns()); + + Grid searchResultsGrid = new Grid(searchResultsStore, columns); + searchResultsGrid.getView().setForceFit(false); + searchResultsGrid.getView().setAutoFill(true); + searchResultsGrid.setAutoExpandColumn("label"); + searchResultsPanel.add(searchResultsGrid); + searchResultsPanel.layout(); + + centerContainer.add(searchResultsPanel, Layouts.vBoxData(Margin.TOP)); + centerContainer.layout(); + add(centerContainer); + + } private void createSearchResultsPanel() { @@ -187,12 +264,15 @@ private void createSearchResultsPanel() { } - public void setContentPanel(String title, boolean collapsible, Layout layout, Scroll scroll, String... stylenames) { + private void setContentPanel(String title, boolean collapsible, Layout layout, Scroll scroll, String... stylenames) { + //Window.alert("Started setContentPanel!"); searchResultsPanel = new ContentPanel(layout != null ? layout : new FitLayout()); searchResultsPanel.layout(); + //Window.alert("Hello!"); searchResultsPanel.setHeadingHtml(title); + //Window.alert("Hello!"); searchResultsPanel.layout(); searchResultsPanel.setHeaderVisible(true); searchResultsPanel.setCollapsible(collapsible); @@ -209,10 +289,14 @@ public void setContentPanel(String title, boolean collapsible, Layout layout, Sc if (scroll != null) { searchResultsPanel.setScrollMode(scroll); } + + //Window.alert("Ended setContentPanel!"); } private List createSearchResultsGridColumns() { + + //Window.alert("Started createSearchResultsGridColumns!"); // Label column. ColumnConfig labelColumn = new ColumnConfig(); @@ -228,35 +312,14 @@ public Object render(final SearchResultsDTO model, String property, ColumnData c int colIndex, ListStore store, Grid grid) { Map retMap = toMap(model.getResult()); - - model.setDTOtype(retMap.get("doc_type").toString()); HTML h = new HTML(getNiceText(retMap)); //Window.alert(getNiceText(retMap)); - if (retMap.get("doc_type").toString().equals("PROJECT")) { - model.setDTOid(retMap.get("databaseid").toString()); - // Window.alert("Set the id = " + model.getDTOid()); - } else if (retMap.get("doc_type").toString().equals("CONTACT")) { - model.setDTOid(retMap.get("id_contact").toString()); - } else if (retMap.get("doc_type").toString().equals("ORG_UNIT")) { - model.setDTOid(retMap.get("org_unit_id").toString()); - } - - if (retMap != null) { - listMaps.add(retMap); - } - - com.google.gwt.user.client.ui.Label label = new com.google.gwt.user.client.ui.Label(); - // HTML h = new HTML(); - // h.setText(model.getResult()); +// if (retMap != null) { +// listMaps.add(retMap); +// } - // Window.alert("Label is : " + model.getResult() + - // "\n property: " + property + "\nconfig: " + config.toString() - // + "\nrowindex: " + rowIndex + - // "\ncolIndex:" + colIndex ); - label.addStyleName("hyperlink-label"); - // label.setHeight(""); if (retMap.get("doc_type").toString().equals("PROJECT")) { //label.setText(model.getResult()); @@ -301,9 +364,31 @@ public void onClick(ClickEvent event) { } }); - + + //Window.alert("Completed createSearchResultsGridColumns!"); return Arrays.asList(new ColumnConfig[] { labelColumn }); - + } + + public boolean filter(SearchResultsDTO dto){ + + if(dto == null) return false; + + Map retMap = toMap(dto.getResult()); + dto.setDTOtype(retMap.get("doc_type").toString()); + + if (retMap.get("doc_type").toString().equals("PROJECT")) { + dto.setDTOid(retMap.get("databaseid").toString()); + if(!projectIdsForFiltering.contains( Integer.parseInt(dto.getDTOid())) ) { + //Window.alert("Found project not to be included!"); + return false; + } + + } else if (retMap.get("doc_type").toString().equals("CONTACT")) { + dto.setDTOid(retMap.get("id_contact").toString()); + } else if (retMap.get("doc_type").toString().equals("ORG_UNIT")) { + dto.setDTOid(retMap.get("org_unit_id").toString()); + } + return true; } public String getNiceText( Map resultsMap ){ @@ -366,31 +451,6 @@ public String getNiceText( Map resultsMap ){ return htmlBuilder; } - public void addResultsPanel() { - - if (centerContainer == null) { - centerContainer = Layouts.vBox(); - centerContainer.layout(); - } else { - centerContainer.removeAll(); - centerContainer.layout(); - } - createSearchResultsPanel(); - searchResultsPanel.layout(); - - Grid searchResultsGrid = new Grid(searchResultsStore, - new ColumnModel(createSearchResultsGridColumns())); - searchResultsGrid.getView().setForceFit(false); - searchResultsGrid.getView().setAutoFill(true); - searchResultsGrid.setAutoExpandColumn("label"); - searchResultsPanel.add(searchResultsGrid); - searchResultsPanel.layout(); - - centerContainer.add(searchResultsPanel, Layouts.vBoxData(Margin.TOP)); - centerContainer.layout(); - add(centerContainer); - - } public static Map toMap(String jsonStr) { Map map = new HashMap(); @@ -405,23 +465,6 @@ public static Map toMap(String jsonStr) { return map; } - - public void addSearchData(Object searchData) { - if (searchData != null) { - // Window.alert("Received search results!: \n" + - // searchData.toString()); - searchResultsStore = new ListStore(); - for (Object object : (ArrayList) searchData) { - searchResultsStore.add(object != null ? (SearchResultsDTO) object : null); - - // Window.alert("Received search result!: \n" + - // object.getResult()); - } - } else { - Window.alert("Failed to receive search results!"); - } - - } public AbstractImagePrototype getProjectLogo(final ProjectModelType projectType) { diff --git a/src/main/java/org/sigmah/server/search/SearchServiceImpl.java b/src/main/java/org/sigmah/server/search/SearchServiceImpl.java index a3e5d17b3..b4360517b 100644 --- a/src/main/java/org/sigmah/server/search/SearchServiceImpl.java +++ b/src/main/java/org/sigmah/server/search/SearchServiceImpl.java @@ -3,6 +3,11 @@ import com.google.gwt.user.server.rpc.RemoteServiceServlet; import java.util.ArrayList; + +import javax.servlet.ServletContext; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpSession; + import org.sigmah.client.search.SearchService; import org.sigmah.server.search.SolrSearcher; import org.sigmah.shared.dto.search.SearchResultsDTO; @@ -11,8 +16,11 @@ public class SearchServiceImpl extends RemoteServiceServlet implements SearchService{ //implementation of the Search Methods @Override - public ArrayList search(String searchStr, String filter){ - return SolrSearcher.getInstance().search(searchStr, filter); + public ArrayList search(String searchStr, String filter, Integer userID){ +// HttpServletRequest request = this.getThreadLocalRequest(); +// HttpSession session = request.getSession(); +// ServletContext context = session.getServletContext(); + return SolrSearcher.getInstance().search(searchStr, filter, userID); } @Override diff --git a/src/main/java/org/sigmah/server/search/SolrDocFilter.java b/src/main/java/org/sigmah/server/search/SolrDocFilter.java new file mode 100644 index 000000000..35a2d4557 --- /dev/null +++ b/src/main/java/org/sigmah/server/search/SolrDocFilter.java @@ -0,0 +1,43 @@ +package org.sigmah.server.search; + +import java.util.List; +import java.util.Set; + +import org.apache.solr.common.SolrDocument; +import org.sigmah.server.dao.ContactDAO; +import org.sigmah.server.dao.OrgUnitDAO; +import org.sigmah.server.dao.ProjectDAO; +import org.sigmah.server.domain.Contact; + +import com.allen_sauer.gwt.log.client.Log; + +public class SolrDocFilter { + + private ProjectDAO projectDAO; + private OrgUnitDAO orgUnitDAO; + private ContactDAO contactDAO; + Set memberOfProjectIds; + Set orgUnitIds; + List contacts; + + + public SolrDocFilter(Integer userID){ + System.out.println("User Id = " + userID.toString()); + orgUnitIds = orgUnitDAO.getOrgUnitTreeIdsByUserId(userID); + System.out.println("OrgUnit IDs = " + orgUnitIds.toString()); + memberOfProjectIds = projectDAO.findProjectIdsByTeamMemberIdAndOrgUnitIds(userID, orgUnitIds); + System.out.println("member of Project IDs = " + memberOfProjectIds.toString()); + //contacts = contactDAO.findByIds(memberOfProjectIds); + } + + public boolean doFilter(SolrDocument resultDoc){ + if(resultDoc.getFieldValue("doc_type").equals("PROJECT")){ + System.out.println("HEYYYO!"); + Integer projectID = (Integer)resultDoc.getFieldValue("databaseid"); + System.out.println("Found Project ID: " + projectID ); + if(memberOfProjectIds.contains(projectID))return true; + return false; + } + return true; + } +} diff --git a/src/main/java/org/sigmah/server/search/SolrSearcher.java b/src/main/java/org/sigmah/server/search/SolrSearcher.java index 1acddc9b0..184ecf405 100644 --- a/src/main/java/org/sigmah/server/search/SolrSearcher.java +++ b/src/main/java/org/sigmah/server/search/SolrSearcher.java @@ -91,7 +91,7 @@ public SolrDocumentList SolrTestQuery() { } - public ArrayList search(String searchStr, String filter) { + public ArrayList search(String searchStr, String filter, Integer userID) { ArrayList searchList = new ArrayList(); @@ -121,6 +121,9 @@ else if(filter.equals("OrgUnits")) if (rsp != null) { Gson gson = new Gson(); + System.out.println("UserID is " + userID); + //SolrDocFilter docFilter = new SolrDocFilter(userID); + System.out.println("Initialized"); Iterator iter = rsp.getResults().iterator(); while (iter.hasNext()) { SearchResultsDTO descriptor = new SearchResultsDTO(); @@ -134,7 +137,15 @@ else if(filter.equals("OrgUnits")) // } //System.out.println(gson.toJson(resultDoc).toString()); descriptor.setResult(gson.toJson(resultDoc).toString()); + + //here, i have to do some sort of filtering based on the current user and permissions + //i.e early binding + System.out.println("Hi there!"); searchList.add(descriptor); +// if( docFilter.doFilter(resultDoc) ){ +// System.out.println("Going to add :" + descriptor.toString()); +// searchList.add(descriptor); +// } } From d3e1fb389d7295fb3a2a2dd2e4d6b7764b7446ae Mon Sep 17 00:00:00 2001 From: indianauthority97 Date: Fri, 7 Jul 2017 14:05:01 +0530 Subject: [PATCH 18/36] [Issue #535]: Contacts and OrgUnits permmission filtering and cleaning code --- .../ui/presenter/SearchResultsPresenter.java | 6 + .../ui/presenter/zone/SearchPresenter.java | 145 ++++++++++++++---- .../client/ui/view/SearchResultsView.java | 65 ++++---- .../sigmah/server/search/SolrDocFilter.java | 43 ------ .../sigmah/server/search/SolrSearcher.java | 10 +- 5 files changed, 152 insertions(+), 117 deletions(-) delete mode 100644 src/main/java/org/sigmah/server/search/SolrDocFilter.java diff --git a/src/main/java/org/sigmah/client/ui/presenter/SearchResultsPresenter.java b/src/main/java/org/sigmah/client/ui/presenter/SearchResultsPresenter.java index 4d598a495..d50feaa6b 100644 --- a/src/main/java/org/sigmah/client/ui/presenter/SearchResultsPresenter.java +++ b/src/main/java/org/sigmah/client/ui/presenter/SearchResultsPresenter.java @@ -154,6 +154,10 @@ public interface View extends ViewInterface { void setOrgUnitClickHandler(OrgUnitResultsClickHandler handler); void setProjectIdsForFiltering(Set projectIdsForFiltering); + + void setOrgUnitIdsForFiltering(Set orgUnitIdsForFiltering); + + void setContactIdsForFiltering(Set orgUnitIdsForFiltering); } /** @@ -214,6 +218,8 @@ public void onLabelClickEvent(Integer orgUnitId) { }); //getProjectsForFiltering(); view.setProjectIdsForFiltering((Set) request.getData(RequestParameter.FILTER_PROJECT_IDS)); + view.setOrgUnitIdsForFiltering((Set) request.getData(RequestParameter.FILTER_ORGUNIT_IDS)); + view.setContactIdsForFiltering((Set) request.getData(RequestParameter.FILTER_CONTACT_IDS)); view.addSearchData(request.getData(RequestParameter.CONTENT)); //Window.alert("Completed addSearchData!"); view.addResultsPanel(); diff --git a/src/main/java/org/sigmah/client/ui/presenter/zone/SearchPresenter.java b/src/main/java/org/sigmah/client/ui/presenter/zone/SearchPresenter.java index 85e7c4bc6..5317d42c0 100644 --- a/src/main/java/org/sigmah/client/ui/presenter/zone/SearchPresenter.java +++ b/src/main/java/org/sigmah/client/ui/presenter/zone/SearchPresenter.java @@ -9,6 +9,7 @@ import java.util.Set; import org.sigmah.client.dispatch.CommandResultHandler; +import org.sigmah.client.dispatch.monitor.LoadingMask; import org.sigmah.client.event.UpdateEvent; import org.sigmah.client.event.handler.UpdateHandler; import org.sigmah.client.i18n.I18N; @@ -29,15 +30,22 @@ import org.sigmah.client.ui.zone.Zone; import org.sigmah.client.ui.zone.ZoneRequest; import org.sigmah.client.util.ClientUtils; +import org.sigmah.shared.command.GetContacts; +import org.sigmah.shared.command.GetOrgUnits; import org.sigmah.shared.command.GetProjects; import org.sigmah.shared.command.result.Authentication; import org.sigmah.shared.command.result.ListResult; import org.sigmah.shared.conf.PropertyName; +import org.sigmah.shared.dto.ContactDTO; import org.sigmah.shared.dto.ProjectDTO; +import org.sigmah.shared.dto.orgunit.OrgUnitDTO; +import org.sigmah.shared.dto.referential.GlobalPermissionEnum; import org.sigmah.shared.dto.search.SearchResultsDTO; +import org.sigmah.shared.util.ProfileUtils; import com.allen_sauer.gwt.log.client.Log; import com.extjs.gxt.ui.client.event.Events; +import com.extjs.gxt.ui.client.store.TreeStore; import com.google.gwt.core.client.GWT; import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.event.dom.client.ClickHandler; @@ -92,6 +100,9 @@ public class SearchPresenter extends AbstractZonePresenter private final SearchServiceAsync searchService = GWT.create(SearchService.class); private ArrayList searchResults = new ArrayList(); + Set projectIdsForFiltering; + Set orgUnitIdsForFiltering; + Set contactIdsForFiltering; private Boolean dih_success; String textToServer = "default search text"; String filter = "All"; @@ -180,36 +191,40 @@ public void onClick(ClickEvent event) { } private void search() { - + Authentication auth = auth(); - + userID = auth.getUserId(); -// Window.alert("User ID of current user is: " + userID ); -// Window.alert("Project IDs in which user is a member" + auth.getMemberOfProjectIds().toString()); -// Window.alert("OrgUnit IDs in which user is a member" + auth.getOrgUnitIds().toString()); -// Window.alert("Sec OrgUnit IDs" + auth.getSecondaryOrgUnitIds().toString()); - + // Window.alert("User ID of current user is: " + userID ); + // Window.alert("Project IDs in which user is a member" + + // auth.getMemberOfProjectIds().toString()); + // Window.alert("OrgUnit IDs in which user is a member" + + // auth.getOrgUnitIds().toString()); + // Window.alert("Sec OrgUnit IDs" + + // auth.getSecondaryOrgUnitIds().toString()); + if (firstsearch) { // dummy call just to make connection searchService.search(textToServer, filter, userID, new AsyncCallback>() { public void onFailure(Throwable caught) { - //Window.alert("Could not make connection!"); + // Window.alert("Could not make connection!"); firstsearch = false; caught.printStackTrace(); } public void onSuccess(ArrayList result) { - //Window.alert("Excellent, solr connection up!"); + // Window.alert("Excellent, solr connection up!"); firstsearch = false; } }); } // Send the input to the server. - //Window.alert("Filter is: " + filter); + // Window.alert("Filter is: " + filter); searchService.search(textToServer, filter, userID, new AsyncCallback>() { + public void onFailure(Throwable caught) { Window.alert("Failure on the server side!"); - //firstsearch = true; //will try to set up a connnection again + // firstsearch = true; //will try to set up a connnection again caught.printStackTrace(); } @@ -218,8 +233,9 @@ public void onSuccess(ArrayList result) { // for (SearchResultsDTO doc : searchResults) { // Window.alert(doc.getResult().toString()); // } - filterAndPageRequest(); + loadProjectIdsForFiltering(); } + }); } @@ -240,43 +256,104 @@ public void onSuccess(Boolean result) { } }); } - - private void filterAndPageRequest() { + + private void loadProjectIdsForFiltering() { Integer[] orgUnitsIds = auth().getOrgUnitIds().toArray(new Integer[auth().getOrgUnitIds().size()]); List orgUnitsIdsAsList = orgUnitsIds != null ? Arrays.asList(orgUnitsIds) : null; - //Window.alert("OrgUnitIds: " +orgUnitsIdsAsList.toString()); + // Window.alert("OrgUnitIds: " +orgUnitsIdsAsList.toString()); GetProjects cmd = new GetProjects(orgUnitsIdsAsList, null); cmd.setMappingMode(ProjectDTO.Mode._USE_PROJECT_MAPPER); - final Set projectIdsForFiltering = new HashSet(); - + dispatch.execute(cmd, new CommandResultHandler>() { @Override public void onCommandSuccess(final ListResult result) { - - List projectsForFiltering = result.getList(); - //applyProjectFilters(); - for( ProjectDTO projDTO: projectsForFiltering ){ - //Window.alert("Project ID?: " + projDTO.getId() + " Proj Name: " + projDTO.getName()); - projectIdsForFiltering.add(projDTO.getId()); + projectIdsForFiltering = new HashSet(); + + if (ProfileUtils.isGranted(auth(), GlobalPermissionEnum.VIEW_ALL_PROJECTS)) { + List projectsForFiltering = result.getList(); + // applyProjectFilters(); + for (ProjectDTO projDTO : projectsForFiltering) { + // Window.alert("Project ID?: " + projDTO.getId() + " + // Proj + // Name: " + projDTO.getName()); + projectIdsForFiltering.add(projDTO.getId()); + } } - //Window.alert("Completed getting the project for filtering: " + projectIdsForFiltering.toString()); - if (searchResults != null) { - PageRequest request = new PageRequest(Page.SEARCH_RESULTS); - // request.addData(RequestParameter.HEADER, searchText); - request.addData(RequestParameter.TITLE, textToServer); - request.addData(RequestParameter.CONTENT, searchResults); - request.addData(RequestParameter.FILTER_PROJECT_IDS, projectIdsForFiltering); - request.addParameter(RequestParameter.ID, textToServer.replaceAll("[^a-zA-Z0-9\\s]", "").replaceAll(" ", "-")); - // request.addParameter(RequestParameter.HEADER,searchText); - //request.addParameter(RequestParameter.TITLE, textToServer); - eventBus.navigateRequest(request); + + else if (ProfileUtils.isGranted(auth(), GlobalPermissionEnum.VIEW_MY_PROJECTS)) { + projectIdsForFiltering.addAll(auth().getMemberOfProjectIds()); } + + loadOrgUnitIdsForFiltering(); + // Window.alert("Completed getting the project for filtering: " + // + projectIdsForFiltering.toString()); } }); } + private void loadOrgUnitIdsForFiltering() { + + Set orgUnitIds = new HashSet(); + orgUnitIds.addAll(auth().getOrgUnitIds()); + dispatch.execute(new GetOrgUnits(orgUnitIds, OrgUnitDTO.Mode.WITH_TREE), + new CommandResultHandler>() { + @Override + public void onCommandSuccess(final ListResult result) { + orgUnitIdsForFiltering = new HashSet(); + TreeStore orgUnitsForFilteringTree = new TreeStore(); + orgUnitsForFilteringTree.add(result.getData(), true); + List orgUnitsForFiltering = orgUnitsForFilteringTree.getAllItems(); + for (OrgUnitDTO dto : orgUnitsForFiltering) { + orgUnitIdsForFiltering.add(dto.getId()); + } + loadContactIdsForFiltering(); + } + }); + + } + + private void loadContactIdsForFiltering() { + GetContacts cmd = new GetContacts(); + dispatch.execute(cmd, new CommandResultHandler>() { + + @Override + public void onCommandFailure(final Throwable e) { + Window.alert("Error while getting contacts."); + } + + @Override + public void onCommandSuccess(final ListResult result) { + + contactIdsForFiltering = new HashSet(); + + if (ProfileUtils.isGranted(auth(), GlobalPermissionEnum.VIEW_VISIBLE_CONTACTS)) { + List contactsForFiltering = result.getData(); + for (ContactDTO dto : contactsForFiltering) { + contactIdsForFiltering.add(dto.getId()); + } + Window.alert("Contacts for filtering: " + contactIdsForFiltering.toString()); + } + doPageRequest(); + } + }); + } + + public void doPageRequest() { + if (searchResults != null) { + PageRequest request = new PageRequest(Page.SEARCH_RESULTS); + request.addData(RequestParameter.TITLE, textToServer); + request.addData(RequestParameter.CONTENT, searchResults); + request.addData(RequestParameter.FILTER_PROJECT_IDS, projectIdsForFiltering); + request.addData(RequestParameter.FILTER_ORGUNIT_IDS, orgUnitIdsForFiltering); + request.addData(RequestParameter.FILTER_CONTACT_IDS, contactIdsForFiltering); + request.addParameter(RequestParameter.ID, + textToServer.replaceAll("[^a-zA-Z0-9\\s]", "").replaceAll(" ", "-")); + eventBus.navigateRequest(request); + } + } + /** * {@inheritDoc} */ diff --git a/src/main/java/org/sigmah/client/ui/view/SearchResultsView.java b/src/main/java/org/sigmah/client/ui/view/SearchResultsView.java index 418ebd02b..1675f47f9 100644 --- a/src/main/java/org/sigmah/client/ui/view/SearchResultsView.java +++ b/src/main/java/org/sigmah/client/ui/view/SearchResultsView.java @@ -115,9 +115,11 @@ public class SearchResultsView extends AbstractView implements SearchResultsPresenter.View { - private List projectsForFiltering; - private Set projectIdsForFiltering; + + private Set orgUnitIdsForFiltering; + + private Set contactIdsForFiltering; private String searchText; @@ -127,10 +129,6 @@ public class SearchResultsView extends AbstractView implements SearchResultsPres private LayoutContainer centerContainer; - private ArrayList> listMaps = new ArrayList>(); - - // private Map ProjectIDTo - private static SearchResultsClickHandler handler; final SearchResultsClickHandler getSearchResultsClickHandler() { @@ -181,19 +179,6 @@ public void setSearchString(String searchText) { // Window.alert("Searchtext set to " + searchText); } - public List getProjectsForFiltering() { - return projectsForFiltering; - } - - public void setProjectsForFiltering(List projectsForFiltering) { - this.projectsForFiltering = projectsForFiltering; - for( ProjectDTO projDTO: projectsForFiltering ){ - //Window.alert("Project ID?: " + projDTO.getId() + " Proj Name: " + projDTO.getName()); - projectIdsForFiltering.add(projDTO.getId()); - } - //Window.alert(projectIdsForFiltering.toString()); - } - public Set getProjectIdsForFiltering() { return projectIdsForFiltering; } @@ -201,14 +186,28 @@ public Set getProjectIdsForFiltering() { public void setProjectIdsForFiltering(Set projectIdsForFiltering) { this.projectIdsForFiltering = projectIdsForFiltering; } + + public Set getOrgUnitIdsForFiltering() { + return orgUnitIdsForFiltering; + } + + public void setOrgUnitIdsForFiltering(Set orgUnitIdsForFiltering) { + this.orgUnitIdsForFiltering = orgUnitIdsForFiltering; + } + + public Set getContactIdsForFiltering() { + return contactIdsForFiltering; + } + public void setContactIdsForFiltering(Set contactIdsForFiltering) { + this.contactIdsForFiltering = contactIdsForFiltering; + } + // ------------------------------------------------------------------------------------------- // // UTILITY METHODS. // // ------------------------------------------------------------------------------------------- - - public void addSearchData(Object searchData) { if (searchData != null) { @@ -313,16 +312,9 @@ public Object render(final SearchResultsDTO model, String property, ColumnData c Map retMap = toMap(model.getResult()); HTML h = new HTML(getNiceText(retMap)); - - //Window.alert(getNiceText(retMap)); - -// if (retMap != null) { -// listMaps.add(retMap); -// } if (retMap.get("doc_type").toString().equals("PROJECT")) { - //label.setText(model.getResult()); h.addClickHandler(new ClickHandler() { @Override @@ -334,7 +326,7 @@ public void onClick(ClickEvent event) { } if (retMap.get("doc_type").toString().equals("CONTACT")) { - //label.setText(model.getResult()); + h.addClickHandler(new ClickHandler() { @Override @@ -347,19 +339,18 @@ public void onClick(ClickEvent event) { } if (retMap.get("doc_type").toString().equals("ORG_UNIT")) { - //label.setText(model.getResult()); + h.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { - // handler.onLabelClickEvent(project_id); + ((OrgUnitResultsClickHandler) handler) .onLabelClickEvent(Integer.parseInt(model.getDTOid())); } }); } - - //label.setTitle(model.getResult()); + return h; } @@ -385,8 +376,16 @@ public boolean filter(SearchResultsDTO dto){ } else if (retMap.get("doc_type").toString().equals("CONTACT")) { dto.setDTOid(retMap.get("id_contact").toString()); + if(!contactIdsForFiltering.contains( Integer.parseInt(dto.getDTOid())) ) { + Window.alert("Found Contact not to be included: " + dto.getDTOid() ); + return false; + } } else if (retMap.get("doc_type").toString().equals("ORG_UNIT")) { dto.setDTOid(retMap.get("org_unit_id").toString()); + if(!orgUnitIdsForFiltering.contains( Integer.parseInt(dto.getDTOid())) ) { + //Window.alert("Found OrgUnit not to be included!"); + return false; + } } return true; } diff --git a/src/main/java/org/sigmah/server/search/SolrDocFilter.java b/src/main/java/org/sigmah/server/search/SolrDocFilter.java deleted file mode 100644 index 35a2d4557..000000000 --- a/src/main/java/org/sigmah/server/search/SolrDocFilter.java +++ /dev/null @@ -1,43 +0,0 @@ -package org.sigmah.server.search; - -import java.util.List; -import java.util.Set; - -import org.apache.solr.common.SolrDocument; -import org.sigmah.server.dao.ContactDAO; -import org.sigmah.server.dao.OrgUnitDAO; -import org.sigmah.server.dao.ProjectDAO; -import org.sigmah.server.domain.Contact; - -import com.allen_sauer.gwt.log.client.Log; - -public class SolrDocFilter { - - private ProjectDAO projectDAO; - private OrgUnitDAO orgUnitDAO; - private ContactDAO contactDAO; - Set memberOfProjectIds; - Set orgUnitIds; - List contacts; - - - public SolrDocFilter(Integer userID){ - System.out.println("User Id = " + userID.toString()); - orgUnitIds = orgUnitDAO.getOrgUnitTreeIdsByUserId(userID); - System.out.println("OrgUnit IDs = " + orgUnitIds.toString()); - memberOfProjectIds = projectDAO.findProjectIdsByTeamMemberIdAndOrgUnitIds(userID, orgUnitIds); - System.out.println("member of Project IDs = " + memberOfProjectIds.toString()); - //contacts = contactDAO.findByIds(memberOfProjectIds); - } - - public boolean doFilter(SolrDocument resultDoc){ - if(resultDoc.getFieldValue("doc_type").equals("PROJECT")){ - System.out.println("HEYYYO!"); - Integer projectID = (Integer)resultDoc.getFieldValue("databaseid"); - System.out.println("Found Project ID: " + projectID ); - if(memberOfProjectIds.contains(projectID))return true; - return false; - } - return true; - } -} diff --git a/src/main/java/org/sigmah/server/search/SolrSearcher.java b/src/main/java/org/sigmah/server/search/SolrSearcher.java index 184ecf405..87c643f40 100644 --- a/src/main/java/org/sigmah/server/search/SolrSearcher.java +++ b/src/main/java/org/sigmah/server/search/SolrSearcher.java @@ -121,9 +121,9 @@ else if(filter.equals("OrgUnits")) if (rsp != null) { Gson gson = new Gson(); - System.out.println("UserID is " + userID); + //System.out.println("UserID is " + userID); //SolrDocFilter docFilter = new SolrDocFilter(userID); - System.out.println("Initialized"); + //System.out.println("Initialized"); Iterator iter = rsp.getResults().iterator(); while (iter.hasNext()) { SearchResultsDTO descriptor = new SearchResultsDTO(); @@ -140,12 +140,8 @@ else if(filter.equals("OrgUnits")) //here, i have to do some sort of filtering based on the current user and permissions //i.e early binding - System.out.println("Hi there!"); + //System.out.println("Hi there!"); searchList.add(descriptor); -// if( docFilter.doFilter(resultDoc) ){ -// System.out.println("Going to add :" + descriptor.toString()); -// searchList.add(descriptor); -// } } From dd095d67ee68ca8e9f0f8e23f4e5a74d17147367 Mon Sep 17 00:00:00 2001 From: indianauthority97 Date: Sun, 9 Jul 2017 13:36:13 +0530 Subject: [PATCH 19/36] [Issue #535]: Added an auto full-data import indexing job --- .../sigmah/client/search/SearchService.java | 1 + .../client/search/SearchServiceAsync.java | 1 + .../ui/presenter/DashboardPresenter.java | 26 ++++++++++ .../ui/presenter/zone/SearchPresenter.java | 18 +++++-- .../server/search/SearchServiceImpl.java | 8 +++ .../sigmah/server/search/SolrIndexJob.java | 10 +++- .../server/search/SolrIndexJobActivator.java | 49 +++++++++++++++++++ .../sigmah/server/search/SolrSearcher.java | 23 ++++----- 8 files changed, 118 insertions(+), 18 deletions(-) create mode 100644 src/main/java/org/sigmah/server/search/SolrIndexJobActivator.java diff --git a/src/main/java/org/sigmah/client/search/SearchService.java b/src/main/java/org/sigmah/client/search/SearchService.java index 122a3aeda..cb8b1f488 100644 --- a/src/main/java/org/sigmah/client/search/SearchService.java +++ b/src/main/java/org/sigmah/client/search/SearchService.java @@ -11,4 +11,5 @@ public interface SearchService extends RemoteService { //TODO Add method stubs here ArrayList search(String searchStr, String filter, Integer UserID); Boolean index(); + Boolean autoIndex(); } diff --git a/src/main/java/org/sigmah/client/search/SearchServiceAsync.java b/src/main/java/org/sigmah/client/search/SearchServiceAsync.java index 62977a797..9009f953d 100644 --- a/src/main/java/org/sigmah/client/search/SearchServiceAsync.java +++ b/src/main/java/org/sigmah/client/search/SearchServiceAsync.java @@ -10,4 +10,5 @@ public interface SearchServiceAsync { public void search(String searchStr, String filter, Integer UserID, AsyncCallback> callback); public void index(AsyncCallback callback); + public void autoIndex(AsyncCallback callback); } diff --git a/src/main/java/org/sigmah/client/ui/presenter/DashboardPresenter.java b/src/main/java/org/sigmah/client/ui/presenter/DashboardPresenter.java index d57f9bc0d..004871f79 100644 --- a/src/main/java/org/sigmah/client/ui/presenter/DashboardPresenter.java +++ b/src/main/java/org/sigmah/client/ui/presenter/DashboardPresenter.java @@ -35,6 +35,8 @@ import org.sigmah.client.page.Page; import org.sigmah.client.page.PageRequest; import org.sigmah.client.page.RequestParameter; +import org.sigmah.client.search.SearchService; +import org.sigmah.client.search.SearchServiceAsync; import org.sigmah.client.ui.presenter.base.AbstractPagePresenter; import org.sigmah.client.ui.presenter.contact.dashboardlist.ContactsListWidget; import org.sigmah.client.ui.presenter.project.treegrid.ProjectsListWidget; @@ -64,6 +66,8 @@ import com.extjs.gxt.ui.client.event.Listener; import com.extjs.gxt.ui.client.store.ListStore; import com.extjs.gxt.ui.client.widget.Component; +import com.google.gwt.core.client.GWT; +import com.google.gwt.user.client.Window; import com.google.gwt.user.client.rpc.AsyncCallback; import com.google.gwt.user.client.ui.AbstractImagePrototype; import com.google.inject.ImplementedBy; @@ -94,6 +98,8 @@ */ @Singleton public class DashboardPresenter extends AbstractPagePresenter { + + private final SearchServiceAsync searchServiceForAutoIndex = GWT.create(SearchService.class); public static interface ReminderOrMonitoredPointHandler{ public void onLabelClickEvent(Integer projectId); @@ -271,6 +277,26 @@ public void handleEvent(OfflineEvent event) { initializeMenuButtons(event.getState()); } }); + + + //related to search auto indexing + searchServiceForAutoIndex.autoIndex(new AsyncCallback(){ + + @Override + public void onFailure(Throwable caught) { + // TODO Auto-generated method stub + //Window.alert("Failed to start/continue auto indexing!"); + } + + @Override + public void onSuccess(Boolean result) { + // TODO Auto-generated method stub +// if( result ) Window.alert("Started/continued auto indexing!"); +// else Window.alert("Failed to start/continue auto indexing! ( back end issue )"); + } + + }); + } /** diff --git a/src/main/java/org/sigmah/client/ui/presenter/zone/SearchPresenter.java b/src/main/java/org/sigmah/client/ui/presenter/zone/SearchPresenter.java index 5317d42c0..1199d7e63 100644 --- a/src/main/java/org/sigmah/client/ui/presenter/zone/SearchPresenter.java +++ b/src/main/java/org/sigmah/client/ui/presenter/zone/SearchPresenter.java @@ -265,6 +265,11 @@ private void loadProjectIdsForFiltering() { cmd.setMappingMode(ProjectDTO.Mode._USE_PROJECT_MAPPER); dispatch.execute(cmd, new CommandResultHandler>() { + + @Override + public void onCommandFailure(final Throwable e) { + //Window.alert("Error while getting contacts."); + } @Override public void onCommandSuccess(final ListResult result) { @@ -299,6 +304,12 @@ private void loadOrgUnitIdsForFiltering() { orgUnitIds.addAll(auth().getOrgUnitIds()); dispatch.execute(new GetOrgUnits(orgUnitIds, OrgUnitDTO.Mode.WITH_TREE), new CommandResultHandler>() { + + @Override + public void onCommandFailure(final Throwable e) { + // Window.alert("Error while getting contacts."); + } + @Override public void onCommandSuccess(final ListResult result) { orgUnitIdsForFiltering = new HashSet(); @@ -320,20 +331,21 @@ private void loadContactIdsForFiltering() { @Override public void onCommandFailure(final Throwable e) { - Window.alert("Error while getting contacts."); + // Window.alert("Error while getting contacts."); } @Override public void onCommandSuccess(final ListResult result) { contactIdsForFiltering = new HashSet(); - + if (ProfileUtils.isGranted(auth(), GlobalPermissionEnum.VIEW_VISIBLE_CONTACTS)) { List contactsForFiltering = result.getData(); for (ContactDTO dto : contactsForFiltering) { contactIdsForFiltering.add(dto.getId()); } - Window.alert("Contacts for filtering: " + contactIdsForFiltering.toString()); + // Window.alert("Contacts for filtering: " + + // contactIdsForFiltering.toString()); } doPageRequest(); } diff --git a/src/main/java/org/sigmah/server/search/SearchServiceImpl.java b/src/main/java/org/sigmah/server/search/SearchServiceImpl.java index b4360517b..bb028abd2 100644 --- a/src/main/java/org/sigmah/server/search/SearchServiceImpl.java +++ b/src/main/java/org/sigmah/server/search/SearchServiceImpl.java @@ -28,4 +28,12 @@ public Boolean index() { // TODO Auto-generated method stub return SolrSearcher.getInstance().FullDataImport(); } + + @Override + public Boolean autoIndex() { + // TODO Auto-generated method stub + if( SolrIndexJobActivator.getSolrIndexJobActivator() == null ) + return false; + return true; + } } diff --git a/src/main/java/org/sigmah/server/search/SolrIndexJob.java b/src/main/java/org/sigmah/server/search/SolrIndexJob.java index 91e98aebe..e868f0b3e 100644 --- a/src/main/java/org/sigmah/server/search/SolrIndexJob.java +++ b/src/main/java/org/sigmah/server/search/SolrIndexJob.java @@ -1,15 +1,23 @@ package org.sigmah.server.search; +import java.util.Calendar; + import org.quartz.Job; +import org.quartz.JobDetail; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; +import org.quartz.Scheduler; +import org.quartz.SchedulerException; +import org.quartz.Trigger; +import org.quartz.impl.StdSchedulerFactory; public class SolrIndexJob implements Job{ @Override public void execute(JobExecutionContext context) throws JobExecutionException { + SolrSearcher.getInstance(); // TODO Auto-generated method stub - + SolrSearcher.FullDataImport(); } } diff --git a/src/main/java/org/sigmah/server/search/SolrIndexJobActivator.java b/src/main/java/org/sigmah/server/search/SolrIndexJobActivator.java new file mode 100644 index 000000000..104ced13d --- /dev/null +++ b/src/main/java/org/sigmah/server/search/SolrIndexJobActivator.java @@ -0,0 +1,49 @@ +package org.sigmah.server.search; + +import org.quartz.JobDetail; +import org.quartz.Scheduler; +import org.quartz.SchedulerException; +import org.quartz.Trigger; +import org.quartz.TriggerUtils; +import org.quartz.impl.StdSchedulerFactory; +import org.sigmah.server.autoExport.QuartzScheduler; + + +public class SolrIndexJobActivator { + + private static Scheduler scheduler; + private static SolrIndexJobActivator instance; + + public static SolrIndexJobActivator getSolrIndexJobActivator(){ + if( instance == null ){ + instance = new SolrIndexJobActivator(); + } + return instance; + } + + private SolrIndexJobActivator() { + + try { + + scheduler = StdSchedulerFactory.getDefaultScheduler(); + scheduler.start(); + + System.out.println("Started Scheduler!"); + + final JobDetail solrIndexJobDetail = new JobDetail("solrIndexJob", null, SolrIndexJob.class); + Trigger solrIndexTrigger = TriggerUtils.makeMinutelyTrigger(10); + solrIndexTrigger.setName("solrIndexTrigger"); + try { + scheduler.scheduleJob(solrIndexJobDetail, solrIndexTrigger); + } catch (SchedulerException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + // scheduler.shutdown(); + } catch (SchedulerException e1) { + // TODO Auto-generated catch block + e1.printStackTrace(); + } + } +} diff --git a/src/main/java/org/sigmah/server/search/SolrSearcher.java b/src/main/java/org/sigmah/server/search/SolrSearcher.java index 87c643f40..7f00240ca 100644 --- a/src/main/java/org/sigmah/server/search/SolrSearcher.java +++ b/src/main/java/org/sigmah/server/search/SolrSearcher.java @@ -28,7 +28,7 @@ public class SolrSearcher { private String urlString; - private SolrClient solrServer; + private static SolrClient solrServer; private static SolrSearcher instance; public String getUrlString() { @@ -46,8 +46,7 @@ public static SolrSearcher getInstance() { // Singleton instance.loadServer(); } catch (MalformedURLException e) { // TODO Auto-generated catch block - System.out.println("GUBI SOLR CONNECTION FAILED"); - Log.error("GUBI SOLR CONNECTION FAILED"); + System.out.println("SOLR CONNECTION FAILED"); e.printStackTrace(); } } @@ -58,8 +57,7 @@ private void loadServer() throws MalformedURLException { urlString = "http://localhost:8983/solr/Test_Sigmah"; solrServer = new HttpSolrClient.Builder(urlString).build(); // Window.alert("Successful solr connection!"); - System.out.println("GUBI SOLR CONNECTION CONNECTED"); - Log.error("GUBI SOLR CONNECTION CONNECTED"); + System.out.println("SOLR CONNECTION CONNECTED"); } public SolrDocumentList SolrTestQuery() { @@ -68,8 +66,7 @@ public SolrDocumentList SolrTestQuery() { QueryResponse response; try { response = solrServer.query(query); - System.out.println("GUBI SOLR QUERY HAPPENED"); - Log.error("GUBI SOLR QUERY HAPPENED"); + System.out.println("SOLR QUERY HAPPENED"); SolrDocumentList list = response.getResults(); for (SolrDocument doc : response.getResults()) { // Window.alert(doc.toString()); @@ -78,13 +75,11 @@ public SolrDocumentList SolrTestQuery() { } catch (SolrServerException e) { // TODO Auto-generated catch block e.printStackTrace(); - System.out.println("GUBI SOLR SERVER EXCEPTION HAPPENED"); - Log.error("GUBI SOLR SERVER EXCEPTION HAPPENED"); + System.out.println("GUBI SOLR SERVER EXCEPTION Failed"); return null; } catch (IOException e) { // TODO Auto-generated catch block - System.out.println("GUBI SOLR SERVER EXCEPTION HAPPENED"); - Log.error("GUBI SOLR SERVER EXCEPTION HAPPENED"); + System.out.println("GUBI SOLR SERVER EXCEPTION Failed"); e.printStackTrace(); return null; } @@ -150,17 +145,17 @@ else if(filter.equals("OrgUnits")) return searchList; } - public Boolean FullDataImport() { + public static Boolean FullDataImport() { ModifiableSolrParams params = new ModifiableSolrParams(); params.set("qt", "/dataimport"); params.set("command", "full-import"); try { QueryResponse response = solrServer.query(params); if (response != null) { - System.out.println("Successful FULL DATA IMPORT!"); + System.out.println("Successful FULL DATA IMPORT! " + System.currentTimeMillis()); return true; } else { - System.out.println("Failure in FULL DATA IMPORT!"); + System.out.println("Failure in FULL DATA IMPORT! " + System.currentTimeMillis()); return false; } } catch (SolrServerException | IOException e) { From 0604656280e0fc5eb3c3e2ff4c253870a7b4e0e6 Mon Sep 17 00:00:00 2001 From: indianauthority97 Date: Sun, 9 Jul 2017 19:35:44 +0530 Subject: [PATCH 20/36] [Issue #535]: Modified pom.xml to include global sigmah core url property --- pom.xml | 17 ++--- .../sigmah/server/search/SolrSearcher.java | 15 +++- .../org/sigmah/shared/conf/PropertyKey.java | 73 ++++++++++++------- src/main/resources/sigmah.properties | 4 + 4 files changed, 71 insertions(+), 38 deletions(-) diff --git a/pom.xml b/pom.xml index 0779680e3..1bad1d68e 100644 --- a/pom.xml +++ b/pom.xml @@ -214,7 +214,7 @@ org.hibernate.dialect.PostgreSQLDialect org.postgresql.Driver update - false + true true ${sigmah.database.url} ${sigmah.database.user} @@ -253,6 +253,12 @@ ABQIAAAAaKyZGjYsJ9quclBfsnGc-xRxtna0S6DNUYSvLTUdQl9eB6x9_xQH4P0V3CSFEY_MypecLWSdS3Q8IQ + + + + + Test_Sigmah + http://localhost:8983/solr/${solr.core.name} @@ -1048,13 +1054,6 @@ sigmah-dev - - jdbc:postgresql://localhost:5432/sigmah_demo - sigmah - hamsig - /home/sigmah_dev - /home/sigmah_dev/archives - PRETTY @@ -1063,7 +1062,7 @@ - false + true diff --git a/src/main/java/org/sigmah/server/search/SolrSearcher.java b/src/main/java/org/sigmah/server/search/SolrSearcher.java index 7f00240ca..84aa9c571 100644 --- a/src/main/java/org/sigmah/server/search/SolrSearcher.java +++ b/src/main/java/org/sigmah/server/search/SolrSearcher.java @@ -15,6 +15,9 @@ import org.apache.solr.common.SolrDocumentList; import org.apache.solr.common.params.ModifiableSolrParams; import org.apache.solr.common.util.NamedList; +import org.sigmah.server.conf.BasicProperties; +import org.sigmah.server.conf.Properties; +import org.sigmah.shared.conf.PropertyKey; import org.sigmah.shared.dto.search.SearchResultsDTO; import com.allen_sauer.gwt.log.client.Log; @@ -23,10 +26,14 @@ import com.google.gwt.json.client.JSONArray; import com.google.gwt.json.client.JSONObject; import com.google.gwt.user.client.Window; +import com.google.inject.Inject; + import java.net.*; public class SolrSearcher { + private Properties properties = new BasicProperties(); + private String urlString; private static SolrClient solrServer; private static SolrSearcher instance; @@ -54,7 +61,9 @@ public static SolrSearcher getInstance() { // Singleton } private void loadServer() throws MalformedURLException { - urlString = "http://localhost:8983/solr/Test_Sigmah"; + //urlString = "http://localhost:8983/solr/Test_Sigmah"; + urlString = properties.getProperty(PropertyKey.SOLR_CORE_URL); + System.out.println("SOLR CONNECTING TO: " + urlString); solrServer = new HttpSolrClient.Builder(urlString).build(); // Window.alert("Successful solr connection!"); System.out.println("SOLR CONNECTION CONNECTED"); @@ -75,11 +84,11 @@ public SolrDocumentList SolrTestQuery() { } catch (SolrServerException e) { // TODO Auto-generated catch block e.printStackTrace(); - System.out.println("GUBI SOLR SERVER EXCEPTION Failed"); + System.out.println("SOLR SERVER EXCEPTION Failed"); return null; } catch (IOException e) { // TODO Auto-generated catch block - System.out.println("GUBI SOLR SERVER EXCEPTION Failed"); + System.out.println("SOLR SERVER EXCEPTION Failed"); e.printStackTrace(); return null; } diff --git a/src/main/java/org/sigmah/shared/conf/PropertyKey.java b/src/main/java/org/sigmah/shared/conf/PropertyKey.java index aef24a3d5..c34d8c0cb 100644 --- a/src/main/java/org/sigmah/shared/conf/PropertyKey.java +++ b/src/main/java/org/sigmah/shared/conf/PropertyKey.java @@ -38,34 +38,49 @@ public enum PropertyKey implements IsSerializable { // // -------------------------------------------------------------------------------- - APP_NAME(PropertyName.n("app", "name")), - VERSION_NAME(PropertyName.n(PropertyName.PREFIX_VERSION, "name")), - VERSION_NUMBER(PropertyName.n(PropertyName.PREFIX_VERSION, "number")), - VERSION_DATE(PropertyName.n(PropertyName.PREFIX_VERSION, "date")), - VERSION_REFERENCE(PropertyName.n(PropertyName.PREFIX_VERSION, "reference")), - VERSION_MANAGERS(PropertyName.n(PropertyName.PREFIX_VERSION, "managers")), - VERSION_PARTNERS(PropertyName.n(PropertyName.PREFIX_VERSION, "partners")), - VERSION_DEVELOPERS(PropertyName.n(PropertyName.PREFIX_VERSION, "developers")), - VERSION_CONTRIBUTORS(PropertyName.n(PropertyName.PREFIX_VERSION, "contributors")), + APP_NAME(PropertyName.n("app", "name")), VERSION_NAME(PropertyName.n(PropertyName.PREFIX_VERSION, + "name")), VERSION_NUMBER(PropertyName.n(PropertyName.PREFIX_VERSION, "number")), VERSION_DATE( + PropertyName.n(PropertyName.PREFIX_VERSION, "date")), VERSION_REFERENCE( + PropertyName.n(PropertyName.PREFIX_VERSION, "reference")), VERSION_MANAGERS( + PropertyName.n(PropertyName.PREFIX_VERSION, "managers")), VERSION_PARTNERS( + PropertyName.n(PropertyName.PREFIX_VERSION, + "partners")), VERSION_DEVELOPERS( + PropertyName.n(PropertyName.PREFIX_VERSION, + "developers")), VERSION_CONTRIBUTORS( + PropertyName.n(PropertyName.PREFIX_VERSION, + "contributors")), // -------------------------------------------------------------------------------- // // Mails properties. // // -------------------------------------------------------------------------------- - MAIL_HOSTNAME(PropertyName.n(PropertyName.PREFIX_MAIL, "hostname")), - MAIL_PORT(PropertyName.n(PropertyName.PREFIX_MAIL, "port")), - MAIL_FROM_ADDRESS(PropertyName.n(PropertyName.PREFIX_MAIL, "from", "address")), - MAIL_FROM_NAME(PropertyName.n(PropertyName.PREFIX_MAIL, "from", "name")), - MAIL_AUTH_USERNAME(PropertyName.n(PropertyName.PREFIX_MAIL, "auth", "username")), - MAIL_AUTH_PASSWORD(PropertyName.n(PropertyName.PREFIX_MAIL, "auth", "password")), - MAIL_ENCODING(PropertyName.n(PropertyName.PREFIX_MAIL, "encoding")), - MAIL_CONTENT_TYPE(PropertyName.n(PropertyName.PREFIX_MAIL, "contentType")), - MAIL_SUPPORT_TO(PropertyName.n(PropertyName.PREFIX_MAIL, "support", "to")), - MAIL_OPTIMISATION_TO_ADDRESS(PropertyName.n(PropertyName.PREFIX_MAIL,"optimisation", "to", "address")), - MAIL_OPTIMISATION_COPY_ADDRESS(PropertyName.n(PropertyName.PREFIX_MAIL,"optimisation", "copy", "address")), - MAIL_OPTIMISATION_MARKDOWN_FILE_NAME(PropertyName.n(PropertyName.PREFIX_MAIL,"optimisation", "markdownfile","name")), - MAIL_OPTIMISATION_JSON_FILE_NAME(PropertyName.n(PropertyName.PREFIX_MAIL,"optimisation", "jsonfile","name")), + MAIL_HOSTNAME(PropertyName.n(PropertyName.PREFIX_MAIL, "hostname")), MAIL_PORT(PropertyName.n( + PropertyName.PREFIX_MAIL, + "port")), MAIL_FROM_ADDRESS(PropertyName.n(PropertyName.PREFIX_MAIL, "from", "address")), MAIL_FROM_NAME( + PropertyName.n(PropertyName.PREFIX_MAIL, "from", "name")), MAIL_AUTH_USERNAME(PropertyName + .n(PropertyName.PREFIX_MAIL, "auth", "username")), MAIL_AUTH_PASSWORD(PropertyName.n( + PropertyName.PREFIX_MAIL, "auth", + "password")), MAIL_ENCODING(PropertyName.n(PropertyName.PREFIX_MAIL, + "encoding")), MAIL_CONTENT_TYPE(PropertyName.n(PropertyName.PREFIX_MAIL, + "contentType")), MAIL_SUPPORT_TO(PropertyName.n( + PropertyName.PREFIX_MAIL, "support", + "to")), MAIL_OPTIMISATION_TO_ADDRESS(PropertyName.n( + PropertyName.PREFIX_MAIL, "optimisation", "to", + "address")), MAIL_OPTIMISATION_COPY_ADDRESS( + PropertyName.n(PropertyName.PREFIX_MAIL, + "optimisation", "copy", + "address")), MAIL_OPTIMISATION_MARKDOWN_FILE_NAME( + PropertyName.n( + PropertyName.PREFIX_MAIL, + "optimisation", + "markdownfile", + "name")), MAIL_OPTIMISATION_JSON_FILE_NAME( + PropertyName + .n(PropertyName.PREFIX_MAIL, + "optimisation", + "jsonfile", + "name")), // -------------------------------------------------------------------------------- // // Maps API properties. @@ -80,11 +95,17 @@ public enum PropertyKey implements IsSerializable { // // -------------------------------------------------------------------------------- - FILE_REPOSITORY_NAME(PropertyName.n("files", "repository", "name")), - FILE_UPLOAD_MAX_SIZE(PropertyName.n("files", "upload", "maxSize")), - ARCHIVE_REPOSITORY_NAME(PropertyName.n("archives", "repository", "name")), - + FILE_REPOSITORY_NAME(PropertyName.n("files", "repository", "name")), FILE_UPLOAD_MAX_SIZE( + PropertyName.n("files", "upload", "maxSize")), ARCHIVE_REPOSITORY_NAME( + PropertyName.n("archives", "repository", "name")), + // -------------------------------------------------------------------------------- + // + // Solr properties. + // + // -------------------------------------------------------------------------------- + + SOLR_CORE_URL(PropertyName.n("solr", "core", "url")) ; private final String key; diff --git a/src/main/resources/sigmah.properties b/src/main/resources/sigmah.properties index 103443d7a..2bea503c6 100644 --- a/src/main/resources/sigmah.properties +++ b/src/main/resources/sigmah.properties @@ -63,3 +63,7 @@ mail.optimisation.jsonfile.name=sigmah_performance_brut_report.json # MAPS API # -- maps.key=${maps.key} +# -- +# SOLR +# -- +solr.core.url=${solr.core.url} \ No newline at end of file From 1fd1e1c048ddb2c0d472b6852d5789cad2c91769 Mon Sep 17 00:00:00 2001 From: indianauthority97 Date: Mon, 10 Jul 2017 13:05:15 +0530 Subject: [PATCH 21/36] [Issue #535]:Added solr sonfig files --- .../sigmah/client/search/SearchService.java | 2 +- .../client/search/SearchServiceAsync.java | 2 +- .../ui/presenter/zone/SearchPresenter.java | 16 +- .../server/search/SearchServiceImpl.java | 4 +- .../sigmah/server/search/SolrIndexJob.java | 2 +- .../sigmah/server/search/SolrSearcher.java | 17 +- .../solr_config/Test_Sigmah/conf/currency.xml | 67 + .../Test_Sigmah/conf/data-config.xml | 214 + .../Test_Sigmah/conf/dataimport.properties | 7 + .../solr_config/Test_Sigmah/conf/elevate.xml | 42 + .../Test_Sigmah/conf/lang/contractions_ca.txt | 8 + .../Test_Sigmah/conf/lang/contractions_fr.txt | 15 + .../Test_Sigmah/conf/lang/contractions_ga.txt | 5 + .../Test_Sigmah/conf/lang/contractions_it.txt | 23 + .../Test_Sigmah/conf/lang/hyphenations_ga.txt | 5 + .../Test_Sigmah/conf/lang/stemdict_nl.txt | 6 + .../Test_Sigmah/conf/lang/stoptags_ja.txt | 420 ++ .../Test_Sigmah/conf/lang/stopwords_ar.txt | 125 + .../Test_Sigmah/conf/lang/stopwords_bg.txt | 193 + .../Test_Sigmah/conf/lang/stopwords_ca.txt | 220 + .../Test_Sigmah/conf/lang/stopwords_cz.txt | 172 + .../Test_Sigmah/conf/lang/stopwords_da.txt | 110 + .../Test_Sigmah/conf/lang/stopwords_de.txt | 294 ++ .../Test_Sigmah/conf/lang/stopwords_el.txt | 78 + .../Test_Sigmah/conf/lang/stopwords_en.txt | 54 + .../Test_Sigmah/conf/lang/stopwords_es.txt | 356 ++ .../Test_Sigmah/conf/lang/stopwords_eu.txt | 99 + .../Test_Sigmah/conf/lang/stopwords_fa.txt | 313 ++ .../Test_Sigmah/conf/lang/stopwords_fi.txt | 97 + .../Test_Sigmah/conf/lang/stopwords_fr.txt | 186 + .../Test_Sigmah/conf/lang/stopwords_ga.txt | 110 + .../Test_Sigmah/conf/lang/stopwords_gl.txt | 161 + .../Test_Sigmah/conf/lang/stopwords_hi.txt | 235 + .../Test_Sigmah/conf/lang/stopwords_hu.txt | 211 + .../Test_Sigmah/conf/lang/stopwords_hy.txt | 46 + .../Test_Sigmah/conf/lang/stopwords_id.txt | 359 ++ .../Test_Sigmah/conf/lang/stopwords_it.txt | 303 ++ .../Test_Sigmah/conf/lang/stopwords_ja.txt | 127 + .../Test_Sigmah/conf/lang/stopwords_lv.txt | 172 + .../Test_Sigmah/conf/lang/stopwords_nl.txt | 119 + .../Test_Sigmah/conf/lang/stopwords_no.txt | 194 + .../Test_Sigmah/conf/lang/stopwords_pt.txt | 253 ++ .../Test_Sigmah/conf/lang/stopwords_ro.txt | 233 + .../Test_Sigmah/conf/lang/stopwords_ru.txt | 243 ++ .../Test_Sigmah/conf/lang/stopwords_sv.txt | 133 + .../Test_Sigmah/conf/lang/stopwords_th.txt | 119 + .../Test_Sigmah/conf/lang/stopwords_tr.txt | 212 + .../Test_Sigmah/conf/lang/userdict_ja.txt | 29 + .../Test_Sigmah/conf/mapping-FoldToASCII.txt | 3813 +++++++++++++++++ .../solr_config/Test_Sigmah/conf/params.json | 20 + .../Test_Sigmah/conf/protwords.txt | 21 + .../solr_config/Test_Sigmah/conf/schema.xml | 1163 +++++ .../Test_Sigmah/conf/solrconfig.xml | 1418 ++++++ .../Test_Sigmah/conf/stopwords.txt | 210 + .../solr_config/Test_Sigmah/conf/synonyms.txt | 29 + .../solr_config/Test_Sigmah/core.properties | 3 + .../Test_Sigmah/data/index/_4e.dii | Bin 0 -> 86 bytes .../Test_Sigmah/data/index/_4e.dim | Bin 0 -> 801 bytes .../Test_Sigmah/data/index/_4e.fdt | Bin 0 -> 3041 bytes .../Test_Sigmah/data/index/_4e.fdx | Bin 0 -> 84 bytes .../Test_Sigmah/data/index/_4e.fnm | Bin 0 -> 9871 bytes .../Test_Sigmah/data/index/_4e.nvd | Bin 0 -> 995 bytes .../Test_Sigmah/data/index/_4e.nvm | Bin 0 -> 308 bytes .../solr_config/Test_Sigmah/data/index/_4e.si | Bin 0 -> 527 bytes .../Test_Sigmah/data/index/_4e_Lucene50_0.doc | Bin 0 -> 1814 bytes .../Test_Sigmah/data/index/_4e_Lucene50_0.pos | Bin 0 -> 3245 bytes .../Test_Sigmah/data/index/_4e_Lucene50_0.tim | Bin 0 -> 11098 bytes .../Test_Sigmah/data/index/_4e_Lucene50_0.tip | Bin 0 -> 1693 bytes .../Test_Sigmah/data/index/_4e_Lucene54_0.dvd | Bin 0 -> 1612 bytes .../Test_Sigmah/data/index/_4e_Lucene54_0.dvm | Bin 0 -> 4034 bytes .../Test_Sigmah/data/index/segments_4w | Bin 0 -> 167 bytes .../Test_Sigmah/data/index/write.lock | 0 .../data/tlog/tlog.0000000000000000186 | Bin 0 -> 22119 bytes .../data/tlog/tlog.0000000000000000187 | Bin 0 -> 22119 bytes .../data/tlog/tlog.0000000000000000188 | Bin 0 -> 22119 bytes 75 files changed, 13054 insertions(+), 34 deletions(-) create mode 100644 src/main/resources/solr_config/Test_Sigmah/conf/currency.xml create mode 100644 src/main/resources/solr_config/Test_Sigmah/conf/data-config.xml create mode 100644 src/main/resources/solr_config/Test_Sigmah/conf/dataimport.properties create mode 100644 src/main/resources/solr_config/Test_Sigmah/conf/elevate.xml create mode 100644 src/main/resources/solr_config/Test_Sigmah/conf/lang/contractions_ca.txt create mode 100644 src/main/resources/solr_config/Test_Sigmah/conf/lang/contractions_fr.txt create mode 100644 src/main/resources/solr_config/Test_Sigmah/conf/lang/contractions_ga.txt create mode 100644 src/main/resources/solr_config/Test_Sigmah/conf/lang/contractions_it.txt create mode 100644 src/main/resources/solr_config/Test_Sigmah/conf/lang/hyphenations_ga.txt create mode 100644 src/main/resources/solr_config/Test_Sigmah/conf/lang/stemdict_nl.txt create mode 100644 src/main/resources/solr_config/Test_Sigmah/conf/lang/stoptags_ja.txt create mode 100644 src/main/resources/solr_config/Test_Sigmah/conf/lang/stopwords_ar.txt create mode 100644 src/main/resources/solr_config/Test_Sigmah/conf/lang/stopwords_bg.txt create mode 100644 src/main/resources/solr_config/Test_Sigmah/conf/lang/stopwords_ca.txt create mode 100644 src/main/resources/solr_config/Test_Sigmah/conf/lang/stopwords_cz.txt create mode 100644 src/main/resources/solr_config/Test_Sigmah/conf/lang/stopwords_da.txt create mode 100644 src/main/resources/solr_config/Test_Sigmah/conf/lang/stopwords_de.txt create mode 100644 src/main/resources/solr_config/Test_Sigmah/conf/lang/stopwords_el.txt create mode 100644 src/main/resources/solr_config/Test_Sigmah/conf/lang/stopwords_en.txt create mode 100644 src/main/resources/solr_config/Test_Sigmah/conf/lang/stopwords_es.txt create mode 100644 src/main/resources/solr_config/Test_Sigmah/conf/lang/stopwords_eu.txt create mode 100644 src/main/resources/solr_config/Test_Sigmah/conf/lang/stopwords_fa.txt create mode 100644 src/main/resources/solr_config/Test_Sigmah/conf/lang/stopwords_fi.txt create mode 100644 src/main/resources/solr_config/Test_Sigmah/conf/lang/stopwords_fr.txt create mode 100644 src/main/resources/solr_config/Test_Sigmah/conf/lang/stopwords_ga.txt create mode 100644 src/main/resources/solr_config/Test_Sigmah/conf/lang/stopwords_gl.txt create mode 100644 src/main/resources/solr_config/Test_Sigmah/conf/lang/stopwords_hi.txt create mode 100644 src/main/resources/solr_config/Test_Sigmah/conf/lang/stopwords_hu.txt create mode 100644 src/main/resources/solr_config/Test_Sigmah/conf/lang/stopwords_hy.txt create mode 100644 src/main/resources/solr_config/Test_Sigmah/conf/lang/stopwords_id.txt create mode 100644 src/main/resources/solr_config/Test_Sigmah/conf/lang/stopwords_it.txt create mode 100644 src/main/resources/solr_config/Test_Sigmah/conf/lang/stopwords_ja.txt create mode 100644 src/main/resources/solr_config/Test_Sigmah/conf/lang/stopwords_lv.txt create mode 100644 src/main/resources/solr_config/Test_Sigmah/conf/lang/stopwords_nl.txt create mode 100644 src/main/resources/solr_config/Test_Sigmah/conf/lang/stopwords_no.txt create mode 100644 src/main/resources/solr_config/Test_Sigmah/conf/lang/stopwords_pt.txt create mode 100644 src/main/resources/solr_config/Test_Sigmah/conf/lang/stopwords_ro.txt create mode 100644 src/main/resources/solr_config/Test_Sigmah/conf/lang/stopwords_ru.txt create mode 100644 src/main/resources/solr_config/Test_Sigmah/conf/lang/stopwords_sv.txt create mode 100644 src/main/resources/solr_config/Test_Sigmah/conf/lang/stopwords_th.txt create mode 100644 src/main/resources/solr_config/Test_Sigmah/conf/lang/stopwords_tr.txt create mode 100644 src/main/resources/solr_config/Test_Sigmah/conf/lang/userdict_ja.txt create mode 100644 src/main/resources/solr_config/Test_Sigmah/conf/mapping-FoldToASCII.txt create mode 100644 src/main/resources/solr_config/Test_Sigmah/conf/params.json create mode 100644 src/main/resources/solr_config/Test_Sigmah/conf/protwords.txt create mode 100644 src/main/resources/solr_config/Test_Sigmah/conf/schema.xml create mode 100644 src/main/resources/solr_config/Test_Sigmah/conf/solrconfig.xml create mode 100644 src/main/resources/solr_config/Test_Sigmah/conf/stopwords.txt create mode 100644 src/main/resources/solr_config/Test_Sigmah/conf/synonyms.txt create mode 100644 src/main/resources/solr_config/Test_Sigmah/core.properties create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_4e.dii create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_4e.dim create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_4e.fdt create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_4e.fdx create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_4e.fnm create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_4e.nvd create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_4e.nvm create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_4e.si create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_4e_Lucene50_0.doc create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_4e_Lucene50_0.pos create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_4e_Lucene50_0.tim create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_4e_Lucene50_0.tip create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_4e_Lucene54_0.dvd create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_4e_Lucene54_0.dvm create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/segments_4w create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/write.lock create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/tlog/tlog.0000000000000000186 create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/tlog/tlog.0000000000000000187 create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/tlog/tlog.0000000000000000188 diff --git a/src/main/java/org/sigmah/client/search/SearchService.java b/src/main/java/org/sigmah/client/search/SearchService.java index cb8b1f488..4be5006b9 100644 --- a/src/main/java/org/sigmah/client/search/SearchService.java +++ b/src/main/java/org/sigmah/client/search/SearchService.java @@ -9,7 +9,7 @@ @RemoteServiceRelativePath("search") public interface SearchService extends RemoteService { //TODO Add method stubs here - ArrayList search(String searchStr, String filter, Integer UserID); + ArrayList search(String searchStr, String filter); Boolean index(); Boolean autoIndex(); } diff --git a/src/main/java/org/sigmah/client/search/SearchServiceAsync.java b/src/main/java/org/sigmah/client/search/SearchServiceAsync.java index 9009f953d..fa8da38e4 100644 --- a/src/main/java/org/sigmah/client/search/SearchServiceAsync.java +++ b/src/main/java/org/sigmah/client/search/SearchServiceAsync.java @@ -8,7 +8,7 @@ public interface SearchServiceAsync { - public void search(String searchStr, String filter, Integer UserID, AsyncCallback> callback); + public void search(String searchStr, String filter, AsyncCallback> callback); public void index(AsyncCallback callback); public void autoIndex(AsyncCallback callback); } diff --git a/src/main/java/org/sigmah/client/ui/presenter/zone/SearchPresenter.java b/src/main/java/org/sigmah/client/ui/presenter/zone/SearchPresenter.java index 1199d7e63..73a3e88ea 100644 --- a/src/main/java/org/sigmah/client/ui/presenter/zone/SearchPresenter.java +++ b/src/main/java/org/sigmah/client/ui/presenter/zone/SearchPresenter.java @@ -192,20 +192,10 @@ public void onClick(ClickEvent event) { private void search() { - Authentication auth = auth(); - - userID = auth.getUserId(); - // Window.alert("User ID of current user is: " + userID ); - // Window.alert("Project IDs in which user is a member" + - // auth.getMemberOfProjectIds().toString()); - // Window.alert("OrgUnit IDs in which user is a member" + - // auth.getOrgUnitIds().toString()); - // Window.alert("Sec OrgUnit IDs" + - // auth.getSecondaryOrgUnitIds().toString()); - + if (firstsearch) { // dummy call just to make connection - searchService.search(textToServer, filter, userID, new AsyncCallback>() { + searchService.search(textToServer, filter, new AsyncCallback>() { public void onFailure(Throwable caught) { // Window.alert("Could not make connection!"); firstsearch = false; @@ -220,7 +210,7 @@ public void onSuccess(ArrayList result) { } // Send the input to the server. // Window.alert("Filter is: " + filter); - searchService.search(textToServer, filter, userID, new AsyncCallback>() { + searchService.search(textToServer, filter, new AsyncCallback>() { public void onFailure(Throwable caught) { Window.alert("Failure on the server side!"); diff --git a/src/main/java/org/sigmah/server/search/SearchServiceImpl.java b/src/main/java/org/sigmah/server/search/SearchServiceImpl.java index bb028abd2..481fd7810 100644 --- a/src/main/java/org/sigmah/server/search/SearchServiceImpl.java +++ b/src/main/java/org/sigmah/server/search/SearchServiceImpl.java @@ -16,11 +16,11 @@ public class SearchServiceImpl extends RemoteServiceServlet implements SearchService{ //implementation of the Search Methods @Override - public ArrayList search(String searchStr, String filter, Integer userID){ + public ArrayList search(String searchStr, String filter){ // HttpServletRequest request = this.getThreadLocalRequest(); // HttpSession session = request.getSession(); // ServletContext context = session.getServletContext(); - return SolrSearcher.getInstance().search(searchStr, filter, userID); + return SolrSearcher.getInstance().search(searchStr, filter); } @Override diff --git a/src/main/java/org/sigmah/server/search/SolrIndexJob.java b/src/main/java/org/sigmah/server/search/SolrIndexJob.java index e868f0b3e..c88baabf3 100644 --- a/src/main/java/org/sigmah/server/search/SolrIndexJob.java +++ b/src/main/java/org/sigmah/server/search/SolrIndexJob.java @@ -15,8 +15,8 @@ public class SolrIndexJob implements Job{ @Override public void execute(JobExecutionContext context) throws JobExecutionException { + SolrSearcher.getInstance(); - // TODO Auto-generated method stub SolrSearcher.FullDataImport(); } diff --git a/src/main/java/org/sigmah/server/search/SolrSearcher.java b/src/main/java/org/sigmah/server/search/SolrSearcher.java index 84aa9c571..81a2fc94d 100644 --- a/src/main/java/org/sigmah/server/search/SolrSearcher.java +++ b/src/main/java/org/sigmah/server/search/SolrSearcher.java @@ -95,7 +95,7 @@ public SolrDocumentList SolrTestQuery() { } - public ArrayList search(String searchStr, String filter, Integer userID) { + public ArrayList search(String searchStr, String filter) { ArrayList searchList = new ArrayList(); @@ -125,26 +125,11 @@ else if(filter.equals("OrgUnits")) if (rsp != null) { Gson gson = new Gson(); - //System.out.println("UserID is " + userID); - //SolrDocFilter docFilter = new SolrDocFilter(userID); - //System.out.println("Initialized"); Iterator iter = rsp.getResults().iterator(); while (iter.hasNext()) { SearchResultsDTO descriptor = new SearchResultsDTO(); SolrDocument resultDoc = (SolrDocument) iter.next(); - - // Will make this more specific later - // Map results = resultDoc.getFieldValueMap(); - // for (Map.Entry entry : results.entrySet()){ - // descriptor.getResult().add(entry.getKey().toString() + " ::: - // " + entry.getValue().toString()); - // } - //System.out.println(gson.toJson(resultDoc).toString()); descriptor.setResult(gson.toJson(resultDoc).toString()); - - //here, i have to do some sort of filtering based on the current user and permissions - //i.e early binding - //System.out.println("Hi there!"); searchList.add(descriptor); } diff --git a/src/main/resources/solr_config/Test_Sigmah/conf/currency.xml b/src/main/resources/solr_config/Test_Sigmah/conf/currency.xml new file mode 100644 index 000000000..3a9c58afe --- /dev/null +++ b/src/main/resources/solr_config/Test_Sigmah/conf/currency.xml @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/solr_config/Test_Sigmah/conf/data-config.xml b/src/main/resources/solr_config/Test_Sigmah/conf/data-config.xml new file mode 100644 index 000000000..eb91a54f3 --- /dev/null +++ b/src/main/resources/solr_config/Test_Sigmah/conf/data-config.xml @@ -0,0 +1,214 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/resources/solr_config/Test_Sigmah/conf/dataimport.properties b/src/main/resources/solr_config/Test_Sigmah/conf/dataimport.properties new file mode 100644 index 000000000..63e6bb008 --- /dev/null +++ b/src/main/resources/solr_config/Test_Sigmah/conf/dataimport.properties @@ -0,0 +1,7 @@ +#Sun Jul 09 14:39:34 UTC 2017 +project.last_index_time=2017-07-09 14\:39\:34 +userlogin.last_index_time=2017-05-14 19\:28\:44 +last_index_time=2017-07-09 14\:39\:34 +contact.last_index_time=2017-07-09 14\:39\:34 +org_unit.last_index_time=2017-07-09 14\:39\:34 +country.last_index_time=2017-05-14 19\:50\:19 diff --git a/src/main/resources/solr_config/Test_Sigmah/conf/elevate.xml b/src/main/resources/solr_config/Test_Sigmah/conf/elevate.xml new file mode 100644 index 000000000..2c09ebed6 --- /dev/null +++ b/src/main/resources/solr_config/Test_Sigmah/conf/elevate.xml @@ -0,0 +1,42 @@ + + + + + + + + diff --git a/src/main/resources/solr_config/Test_Sigmah/conf/lang/contractions_ca.txt b/src/main/resources/solr_config/Test_Sigmah/conf/lang/contractions_ca.txt new file mode 100644 index 000000000..307a85f91 --- /dev/null +++ b/src/main/resources/solr_config/Test_Sigmah/conf/lang/contractions_ca.txt @@ -0,0 +1,8 @@ +# Set of Catalan contractions for ElisionFilter +# TODO: load this as a resource from the analyzer and sync it in build.xml +d +l +m +n +s +t diff --git a/src/main/resources/solr_config/Test_Sigmah/conf/lang/contractions_fr.txt b/src/main/resources/solr_config/Test_Sigmah/conf/lang/contractions_fr.txt new file mode 100644 index 000000000..f1bba51b2 --- /dev/null +++ b/src/main/resources/solr_config/Test_Sigmah/conf/lang/contractions_fr.txt @@ -0,0 +1,15 @@ +# Set of French contractions for ElisionFilter +# TODO: load this as a resource from the analyzer and sync it in build.xml +l +m +t +qu +n +s +j +d +c +jusqu +quoiqu +lorsqu +puisqu diff --git a/src/main/resources/solr_config/Test_Sigmah/conf/lang/contractions_ga.txt b/src/main/resources/solr_config/Test_Sigmah/conf/lang/contractions_ga.txt new file mode 100644 index 000000000..9ebe7fa34 --- /dev/null +++ b/src/main/resources/solr_config/Test_Sigmah/conf/lang/contractions_ga.txt @@ -0,0 +1,5 @@ +# Set of Irish contractions for ElisionFilter +# TODO: load this as a resource from the analyzer and sync it in build.xml +d +m +b diff --git a/src/main/resources/solr_config/Test_Sigmah/conf/lang/contractions_it.txt b/src/main/resources/solr_config/Test_Sigmah/conf/lang/contractions_it.txt new file mode 100644 index 000000000..cac040953 --- /dev/null +++ b/src/main/resources/solr_config/Test_Sigmah/conf/lang/contractions_it.txt @@ -0,0 +1,23 @@ +# Set of Italian contractions for ElisionFilter +# TODO: load this as a resource from the analyzer and sync it in build.xml +c +l +all +dall +dell +nell +sull +coll +pell +gl +agl +dagl +degl +negl +sugl +un +m +t +s +v +d diff --git a/src/main/resources/solr_config/Test_Sigmah/conf/lang/hyphenations_ga.txt b/src/main/resources/solr_config/Test_Sigmah/conf/lang/hyphenations_ga.txt new file mode 100644 index 000000000..4d2642cc5 --- /dev/null +++ b/src/main/resources/solr_config/Test_Sigmah/conf/lang/hyphenations_ga.txt @@ -0,0 +1,5 @@ +# Set of Irish hyphenations for StopFilter +# TODO: load this as a resource from the analyzer and sync it in build.xml +h +n +t diff --git a/src/main/resources/solr_config/Test_Sigmah/conf/lang/stemdict_nl.txt b/src/main/resources/solr_config/Test_Sigmah/conf/lang/stemdict_nl.txt new file mode 100644 index 000000000..441072971 --- /dev/null +++ b/src/main/resources/solr_config/Test_Sigmah/conf/lang/stemdict_nl.txt @@ -0,0 +1,6 @@ +# Set of overrides for the dutch stemmer +# TODO: load this as a resource from the analyzer and sync it in build.xml +fiets fiets +bromfiets bromfiets +ei eier +kind kinder diff --git a/src/main/resources/solr_config/Test_Sigmah/conf/lang/stoptags_ja.txt b/src/main/resources/solr_config/Test_Sigmah/conf/lang/stoptags_ja.txt new file mode 100644 index 000000000..71b750845 --- /dev/null +++ b/src/main/resources/solr_config/Test_Sigmah/conf/lang/stoptags_ja.txt @@ -0,0 +1,420 @@ +# +# This file defines a Japanese stoptag set for JapanesePartOfSpeechStopFilter. +# +# Any token with a part-of-speech tag that exactly matches those defined in this +# file are removed from the token stream. +# +# Set your own stoptags by uncommenting the lines below. Note that comments are +# not allowed on the same line as a stoptag. See LUCENE-3745 for frequency lists, +# etc. that can be useful for building you own stoptag set. +# +# The entire possible tagset is provided below for convenience. +# +##### +# noun: unclassified nouns +#名詞 +# +# noun-common: Common nouns or nouns where the sub-classification is undefined +#名詞-一般 +# +# noun-proper: Proper nouns where the sub-classification is undefined +#名詞-固有名詞 +# +# noun-proper-misc: miscellaneous proper nouns +#名詞-固有名詞-一般 +# +# noun-proper-person: Personal names where the sub-classification is undefined +#名詞-固有名詞-人名 +# +# noun-proper-person-misc: names that cannot be divided into surname and +# given name; foreign names; names where the surname or given name is unknown. +# e.g. お市の方 +#名詞-固有名詞-人名-一般 +# +# noun-proper-person-surname: Mainly Japanese surnames. +# e.g. 山田 +#名詞-固有名詞-人名-姓 +# +# noun-proper-person-given_name: Mainly Japanese given names. +# e.g. 太郎 +#名詞-固有名詞-人名-名 +# +# noun-proper-organization: Names representing organizations. +# e.g. 通産省, NHK +#名詞-固有名詞-組織 +# +# noun-proper-place: Place names where the sub-classification is undefined +#名詞-固有名詞-地域 +# +# noun-proper-place-misc: Place names excluding countries. +# e.g. アジア, バルセロナ, 京都 +#名詞-固有名詞-地域-一般 +# +# noun-proper-place-country: Country names. +# e.g. 日本, オーストラリア +#名詞-固有名詞-地域-国 +# +# noun-pronoun: Pronouns where the sub-classification is undefined +#名詞-代名詞 +# +# noun-pronoun-misc: miscellaneous pronouns: +# e.g. それ, ここ, あいつ, あなた, あちこち, いくつ, どこか, なに, みなさん, みんな, わたくし, われわれ +#名詞-代名詞-一般 +# +# noun-pronoun-contraction: Spoken language contraction made by combining a +# pronoun and the particle 'wa'. +# e.g. ありゃ, こりゃ, こりゃあ, そりゃ, そりゃあ +#名詞-代名詞-縮約 +# +# noun-adverbial: Temporal nouns such as names of days or months that behave +# like adverbs. Nouns that represent amount or ratios and can be used adverbially, +# e.g. 金曜, 一月, 午後, 少量 +#名詞-副詞可能 +# +# noun-verbal: Nouns that take arguments with case and can appear followed by +# 'suru' and related verbs (する, できる, なさる, くださる) +# e.g. インプット, 愛着, 悪化, 悪戦苦闘, 一安心, 下取り +#名詞-サ変接続 +# +# noun-adjective-base: The base form of adjectives, words that appear before な ("na") +# e.g. 健康, 安易, 駄目, だめ +#名詞-形容動詞語幹 +# +# noun-numeric: Arabic numbers, Chinese numerals, and counters like 何 (回), 数. +# e.g. 0, 1, 2, 何, 数, 幾 +#名詞-数 +# +# noun-affix: noun affixes where the sub-classification is undefined +#名詞-非自立 +# +# noun-affix-misc: Of adnominalizers, the case-marker の ("no"), and words that +# attach to the base form of inflectional words, words that cannot be classified +# into any of the other categories below. This category includes indefinite nouns. +# e.g. あかつき, 暁, かい, 甲斐, 気, きらい, 嫌い, くせ, 癖, こと, 事, ごと, 毎, しだい, 次第, +# 順, せい, 所為, ついで, 序で, つもり, 積もり, 点, どころ, の, はず, 筈, はずみ, 弾み, +# 拍子, ふう, ふり, 振り, ほう, 方, 旨, もの, 物, 者, ゆえ, 故, ゆえん, 所以, わけ, 訳, +# わり, 割り, 割, ん-口語/, もん-口語/ +#名詞-非自立-一般 +# +# noun-affix-adverbial: noun affixes that that can behave as adverbs. +# e.g. あいだ, 間, あげく, 挙げ句, あと, 後, 余り, 以外, 以降, 以後, 以上, 以前, 一方, うえ, +# 上, うち, 内, おり, 折り, かぎり, 限り, きり, っきり, 結果, ころ, 頃, さい, 際, 最中, さなか, +# 最中, じたい, 自体, たび, 度, ため, 為, つど, 都度, とおり, 通り, とき, 時, ところ, 所, +# とたん, 途端, なか, 中, のち, 後, ばあい, 場合, 日, ぶん, 分, ほか, 他, まえ, 前, まま, +# 儘, 侭, みぎり, 矢先 +#名詞-非自立-副詞可能 +# +# noun-affix-aux: noun affixes treated as 助動詞 ("auxiliary verb") in school grammars +# with the stem よう(だ) ("you(da)"). +# e.g. よう, やう, 様 (よう) +#名詞-非自立-助動詞語幹 +# +# noun-affix-adjective-base: noun affixes that can connect to the indeclinable +# connection form な (aux "da"). +# e.g. みたい, ふう +#名詞-非自立-形容動詞語幹 +# +# noun-special: special nouns where the sub-classification is undefined. +#名詞-特殊 +# +# noun-special-aux: The そうだ ("souda") stem form that is used for reporting news, is +# treated as 助動詞 ("auxiliary verb") in school grammars, and attach to the base +# form of inflectional words. +# e.g. そう +#名詞-特殊-助動詞語幹 +# +# noun-suffix: noun suffixes where the sub-classification is undefined. +#名詞-接尾 +# +# noun-suffix-misc: Of the nouns or stem forms of other parts of speech that connect +# to ガル or タイ and can combine into compound nouns, words that cannot be classified into +# any of the other categories below. In general, this category is more inclusive than +# 接尾語 ("suffix") and is usually the last element in a compound noun. +# e.g. おき, かた, 方, 甲斐 (がい), がかり, ぎみ, 気味, ぐるみ, (~した) さ, 次第, 済 (ず) み, +# よう, (でき)っこ, 感, 観, 性, 学, 類, 面, 用 +#名詞-接尾-一般 +# +# noun-suffix-person: Suffixes that form nouns and attach to person names more often +# than other nouns. +# e.g. 君, 様, 著 +#名詞-接尾-人名 +# +# noun-suffix-place: Suffixes that form nouns and attach to place names more often +# than other nouns. +# e.g. 町, 市, 県 +#名詞-接尾-地域 +# +# noun-suffix-verbal: Of the suffixes that attach to nouns and form nouns, those that +# can appear before スル ("suru"). +# e.g. 化, 視, 分け, 入り, 落ち, 買い +#名詞-接尾-サ変接続 +# +# noun-suffix-aux: The stem form of そうだ (様態) that is used to indicate conditions, +# is treated as 助動詞 ("auxiliary verb") in school grammars, and attach to the +# conjunctive form of inflectional words. +# e.g. そう +#名詞-接尾-助動詞語幹 +# +# noun-suffix-adjective-base: Suffixes that attach to other nouns or the conjunctive +# form of inflectional words and appear before the copula だ ("da"). +# e.g. 的, げ, がち +#名詞-接尾-形容動詞語幹 +# +# noun-suffix-adverbial: Suffixes that attach to other nouns and can behave as adverbs. +# e.g. 後 (ご), 以後, 以降, 以前, 前後, 中, 末, 上, 時 (じ) +#名詞-接尾-副詞可能 +# +# noun-suffix-classifier: Suffixes that attach to numbers and form nouns. This category +# is more inclusive than 助数詞 ("classifier") and includes common nouns that attach +# to numbers. +# e.g. 個, つ, 本, 冊, パーセント, cm, kg, カ月, か国, 区画, 時間, 時半 +#名詞-接尾-助数詞 +# +# noun-suffix-special: Special suffixes that mainly attach to inflecting words. +# e.g. (楽し) さ, (考え) 方 +#名詞-接尾-特殊 +# +# noun-suffix-conjunctive: Nouns that behave like conjunctions and join two words +# together. +# e.g. (日本) 対 (アメリカ), 対 (アメリカ), (3) 対 (5), (女優) 兼 (主婦) +#名詞-接続詞的 +# +# noun-verbal_aux: Nouns that attach to the conjunctive particle て ("te") and are +# semantically verb-like. +# e.g. ごらん, ご覧, 御覧, 頂戴 +#名詞-動詞非自立的 +# +# noun-quotation: text that cannot be segmented into words, proverbs, Chinese poetry, +# dialects, English, etc. Currently, the only entry for 名詞 引用文字列 ("noun quotation") +# is いわく ("iwaku"). +#名詞-引用文字列 +# +# noun-nai_adjective: Words that appear before the auxiliary verb ない ("nai") and +# behave like an adjective. +# e.g. 申し訳, 仕方, とんでも, 違い +#名詞-ナイ形容詞語幹 +# +##### +# prefix: unclassified prefixes +#接頭詞 +# +# prefix-nominal: Prefixes that attach to nouns (including adjective stem forms) +# excluding numerical expressions. +# e.g. お (水), 某 (氏), 同 (社), 故 (~氏), 高 (品質), お (見事), ご (立派) +#接頭詞-名詞接続 +# +# prefix-verbal: Prefixes that attach to the imperative form of a verb or a verb +# in conjunctive form followed by なる/なさる/くださる. +# e.g. お (読みなさい), お (座り) +#接頭詞-動詞接続 +# +# prefix-adjectival: Prefixes that attach to adjectives. +# e.g. お (寒いですねえ), バカ (でかい) +#接頭詞-形容詞接続 +# +# prefix-numerical: Prefixes that attach to numerical expressions. +# e.g. 約, およそ, 毎時 +#接頭詞-数接続 +# +##### +# verb: unclassified verbs +#動詞 +# +# verb-main: +#動詞-自立 +# +# verb-auxiliary: +#動詞-非自立 +# +# verb-suffix: +#動詞-接尾 +# +##### +# adjective: unclassified adjectives +#形容詞 +# +# adjective-main: +#形容詞-自立 +# +# adjective-auxiliary: +#形容詞-非自立 +# +# adjective-suffix: +#形容詞-接尾 +# +##### +# adverb: unclassified adverbs +#副詞 +# +# adverb-misc: Words that can be segmented into one unit and where adnominal +# modification is not possible. +# e.g. あいかわらず, 多分 +#副詞-一般 +# +# adverb-particle_conjunction: Adverbs that can be followed by の, は, に, +# な, する, だ, etc. +# e.g. こんなに, そんなに, あんなに, なにか, なんでも +#副詞-助詞類接続 +# +##### +# adnominal: Words that only have noun-modifying forms. +# e.g. この, その, あの, どの, いわゆる, なんらかの, 何らかの, いろんな, こういう, そういう, ああいう, +# どういう, こんな, そんな, あんな, どんな, 大きな, 小さな, おかしな, ほんの, たいした, +# 「(, も) さる (ことながら)」, 微々たる, 堂々たる, 単なる, いかなる, 我が」「同じ, 亡き +#連体詞 +# +##### +# conjunction: Conjunctions that can occur independently. +# e.g. が, けれども, そして, じゃあ, それどころか +接続詞 +# +##### +# particle: unclassified particles. +助詞 +# +# particle-case: case particles where the subclassification is undefined. +助詞-格助詞 +# +# particle-case-misc: Case particles. +# e.g. から, が, で, と, に, へ, より, を, の, にて +助詞-格助詞-一般 +# +# particle-case-quote: the "to" that appears after nouns, a person’s speech, +# quotation marks, expressions of decisions from a meeting, reasons, judgements, +# conjectures, etc. +# e.g. ( だ) と (述べた.), ( である) と (して執行猶予...) +助詞-格助詞-引用 +# +# particle-case-compound: Compounds of particles and verbs that mainly behave +# like case particles. +# e.g. という, といった, とかいう, として, とともに, と共に, でもって, にあたって, に当たって, に当って, +# にあたり, に当たり, に当り, に当たる, にあたる, において, に於いて,に於て, における, に於ける, +# にかけ, にかけて, にかんし, に関し, にかんして, に関して, にかんする, に関する, に際し, +# に際して, にしたがい, に従い, に従う, にしたがって, に従って, にたいし, に対し, にたいして, +# に対して, にたいする, に対する, について, につき, につけ, につけて, につれ, につれて, にとって, +# にとり, にまつわる, によって, に依って, に因って, により, に依り, に因り, による, に依る, に因る, +# にわたって, にわたる, をもって, を以って, を通じ, を通じて, を通して, をめぐって, をめぐり, をめぐる, +# って-口語/, ちゅう-関西弁「という」/, (何) ていう (人)-口語/, っていう-口語/, といふ, とかいふ +助詞-格助詞-連語 +# +# particle-conjunctive: +# e.g. から, からには, が, けれど, けれども, けど, し, つつ, て, で, と, ところが, どころか, とも, ども, +# ながら, なり, ので, のに, ば, ものの, や ( した), やいなや, (ころん) じゃ(いけない)-口語/, +# (行っ) ちゃ(いけない)-口語/, (言っ) たって (しかたがない)-口語/, (それがなく)ったって (平気)-口語/ +助詞-接続助詞 +# +# particle-dependency: +# e.g. こそ, さえ, しか, すら, は, も, ぞ +助詞-係助詞 +# +# particle-adverbial: +# e.g. がてら, かも, くらい, 位, ぐらい, しも, (学校) じゃ(これが流行っている)-口語/, +# (それ)じゃあ (よくない)-口語/, ずつ, (私) なぞ, など, (私) なり (に), (先生) なんか (大嫌い)-口語/, +# (私) なんぞ, (先生) なんて (大嫌い)-口語/, のみ, だけ, (私) だって-口語/, だに, +# (彼)ったら-口語/, (お茶) でも (いかが), 等 (とう), (今後) とも, ばかり, ばっか-口語/, ばっかり-口語/, +# ほど, 程, まで, 迄, (誰) も (が)([助詞-格助詞] および [助詞-係助詞] の前に位置する「も」) +助詞-副助詞 +# +# particle-interjective: particles with interjective grammatical roles. +# e.g. (松島) や +助詞-間投助詞 +# +# particle-coordinate: +# e.g. と, たり, だの, だり, とか, なり, や, やら +助詞-並立助詞 +# +# particle-final: +# e.g. かい, かしら, さ, ぜ, (だ)っけ-口語/, (とまってる) で-方言/, な, ナ, なあ-口語/, ぞ, ね, ネ, +# ねぇ-口語/, ねえ-口語/, ねん-方言/, の, のう-口語/, や, よ, ヨ, よぉ-口語/, わ, わい-口語/ +助詞-終助詞 +# +# particle-adverbial/conjunctive/final: The particle "ka" when unknown whether it is +# adverbial, conjunctive, or sentence final. For example: +# (a) 「A か B か」. Ex:「(国内で運用する) か,(海外で運用する) か (.)」 +# (b) Inside an adverb phrase. Ex:「(幸いという) か (, 死者はいなかった.)」 +# 「(祈りが届いたせい) か (, 試験に合格した.)」 +# (c) 「かのように」. Ex:「(何もなかった) か (のように振る舞った.)」 +# e.g. か +助詞-副助詞/並立助詞/終助詞 +# +# particle-adnominalizer: The "no" that attaches to nouns and modifies +# non-inflectional words. +助詞-連体化 +# +# particle-adnominalizer: The "ni" and "to" that appear following nouns and adverbs +# that are giongo, giseigo, or gitaigo. +# e.g. に, と +助詞-副詞化 +# +# particle-special: A particle that does not fit into one of the above classifications. +# This includes particles that are used in Tanka, Haiku, and other poetry. +# e.g. かな, けむ, ( しただろう) に, (あんた) にゃ(わからん), (俺) ん (家) +助詞-特殊 +# +##### +# auxiliary-verb: +助動詞 +# +##### +# interjection: Greetings and other exclamations. +# e.g. おはよう, おはようございます, こんにちは, こんばんは, ありがとう, どうもありがとう, ありがとうございます, +# いただきます, ごちそうさま, さよなら, さようなら, はい, いいえ, ごめん, ごめんなさい +#感動詞 +# +##### +# symbol: unclassified Symbols. +記号 +# +# symbol-misc: A general symbol not in one of the categories below. +# e.g. [○◎@$〒→+] +記号-一般 +# +# symbol-comma: Commas +# e.g. [,、] +記号-読点 +# +# symbol-period: Periods and full stops. +# e.g. [..。] +記号-句点 +# +# symbol-space: Full-width whitespace. +記号-空白 +# +# symbol-open_bracket: +# e.g. [({‘“『【] +記号-括弧開 +# +# symbol-close_bracket: +# e.g. [)}’”』」】] +記号-括弧閉 +# +# symbol-alphabetic: +#記号-アルファベット +# +##### +# other: unclassified other +#その他 +# +# other-interjection: Words that are hard to classify as noun-suffixes or +# sentence-final particles. +# e.g. (だ)ァ +その他-間投 +# +##### +# filler: Aizuchi that occurs during a conversation or sounds inserted as filler. +# e.g. あの, うんと, えと +フィラー +# +##### +# non-verbal: non-verbal sound. +非言語音 +# +##### +# fragment: +#語断片 +# +##### +# unknown: unknown part of speech. +#未知語 +# +##### End of file diff --git a/src/main/resources/solr_config/Test_Sigmah/conf/lang/stopwords_ar.txt b/src/main/resources/solr_config/Test_Sigmah/conf/lang/stopwords_ar.txt new file mode 100644 index 000000000..046829db6 --- /dev/null +++ b/src/main/resources/solr_config/Test_Sigmah/conf/lang/stopwords_ar.txt @@ -0,0 +1,125 @@ +# This file was created by Jacques Savoy and is distributed under the BSD license. +# See http://members.unine.ch/jacques.savoy/clef/index.html. +# Also see http://www.opensource.org/licenses/bsd-license.html +# Cleaned on October 11, 2009 (not normalized, so use before normalization) +# This means that when modifying this list, you might need to add some +# redundant entries, for example containing forms with both أ and ا +من +ومن +منها +منه +في +وفي +فيها +فيه +و +ف +ثم +او +أو +ب +بها +به +ا +أ +اى +اي +أي +أى +لا +ولا +الا +ألا +إلا +لكن +ما +وما +كما +فما +عن +مع +اذا +إذا +ان +أن +إن +انها +أنها +إنها +انه +أنه +إنه +بان +بأن +فان +فأن +وان +وأن +وإن +التى +التي +الذى +الذي +الذين +الى +الي +إلى +إلي +على +عليها +عليه +اما +أما +إما +ايضا +أيضا +كل +وكل +لم +ولم +لن +ولن +هى +هي +هو +وهى +وهي +وهو +فهى +فهي +فهو +انت +أنت +لك +لها +له +هذه +هذا +تلك +ذلك +هناك +كانت +كان +يكون +تكون +وكانت +وكان +غير +بعض +قد +نحو +بين +بينما +منذ +ضمن +حيث +الان +الآن +خلال +بعد +قبل +حتى +عند +عندما +لدى +جميع diff --git a/src/main/resources/solr_config/Test_Sigmah/conf/lang/stopwords_bg.txt b/src/main/resources/solr_config/Test_Sigmah/conf/lang/stopwords_bg.txt new file mode 100644 index 000000000..1ae4ba2ae --- /dev/null +++ b/src/main/resources/solr_config/Test_Sigmah/conf/lang/stopwords_bg.txt @@ -0,0 +1,193 @@ +# This file was created by Jacques Savoy and is distributed under the BSD license. +# See http://members.unine.ch/jacques.savoy/clef/index.html. +# Also see http://www.opensource.org/licenses/bsd-license.html +а +аз +ако +ала +бе +без +беше +би +бил +била +били +било +близо +бъдат +бъде +бяха +в +вас +ваш +ваша +вероятно +вече +взема +ви +вие +винаги +все +всеки +всички +всичко +всяка +във +въпреки +върху +г +ги +главно +го +д +да +дали +до +докато +докога +дори +досега +доста +е +едва +един +ето +за +зад +заедно +заради +засега +затова +защо +защото +и +из +или +им +има +имат +иска +й +каза +как +каква +какво +както +какъв +като +кога +когато +което +които +кой +който +колко +която +къде +където +към +ли +м +ме +между +мен +ми +мнозина +мога +могат +може +моля +момента +му +н +на +над +назад +най +направи +напред +например +нас +не +него +нея +ни +ние +никой +нито +но +някои +някой +няма +обаче +около +освен +особено +от +отгоре +отново +още +пак +по +повече +повечето +под +поне +поради +после +почти +прави +пред +преди +през +при +пък +първо +с +са +само +се +сега +си +скоро +след +сме +според +сред +срещу +сте +съм +със +също +т +тази +така +такива +такъв +там +твой +те +тези +ти +тн +то +това +тогава +този +той +толкова +точно +трябва +тук +тъй +тя +тях +у +харесва +ч +че +често +чрез +ще +щом +я diff --git a/src/main/resources/solr_config/Test_Sigmah/conf/lang/stopwords_ca.txt b/src/main/resources/solr_config/Test_Sigmah/conf/lang/stopwords_ca.txt new file mode 100644 index 000000000..3da65deaf --- /dev/null +++ b/src/main/resources/solr_config/Test_Sigmah/conf/lang/stopwords_ca.txt @@ -0,0 +1,220 @@ +# Catalan stopwords from http://github.com/vcl/cue.language (Apache 2 Licensed) +a +abans +ací +ah +així +això +al +als +aleshores +algun +alguna +algunes +alguns +alhora +allà +allí +allò +altra +altre +altres +amb +ambdós +ambdues +apa +aquell +aquella +aquelles +aquells +aquest +aquesta +aquestes +aquests +aquí +baix +cada +cadascú +cadascuna +cadascunes +cadascuns +com +contra +d'un +d'una +d'unes +d'uns +dalt +de +del +dels +des +després +dins +dintre +donat +doncs +durant +e +eh +el +els +em +en +encara +ens +entre +érem +eren +éreu +es +és +esta +està +estàvem +estaven +estàveu +esteu +et +etc +ets +fins +fora +gairebé +ha +han +has +havia +he +hem +heu +hi +ho +i +igual +iguals +ja +l'hi +la +les +li +li'n +llavors +m'he +ma +mal +malgrat +mateix +mateixa +mateixes +mateixos +me +mentre +més +meu +meus +meva +meves +molt +molta +moltes +molts +mon +mons +n'he +n'hi +ne +ni +no +nogensmenys +només +nosaltres +nostra +nostre +nostres +o +oh +oi +on +pas +pel +pels +per +però +perquè +poc +poca +pocs +poques +potser +propi +qual +quals +quan +quant +que +què +quelcom +qui +quin +quina +quines +quins +s'ha +s'han +sa +semblant +semblants +ses +seu +seus +seva +seva +seves +si +sobre +sobretot +sóc +solament +sols +son +són +sons +sota +sou +t'ha +t'han +t'he +ta +tal +també +tampoc +tan +tant +tanta +tantes +teu +teus +teva +teves +ton +tons +tot +tota +totes +tots +un +una +unes +uns +us +va +vaig +vam +van +vas +veu +vosaltres +vostra +vostre +vostres diff --git a/src/main/resources/solr_config/Test_Sigmah/conf/lang/stopwords_cz.txt b/src/main/resources/solr_config/Test_Sigmah/conf/lang/stopwords_cz.txt new file mode 100644 index 000000000..53c6097da --- /dev/null +++ b/src/main/resources/solr_config/Test_Sigmah/conf/lang/stopwords_cz.txt @@ -0,0 +1,172 @@ +a +s +k +o +i +u +v +z +dnes +cz +tímto +budeš +budem +byli +jseš +můj +svým +ta +tomto +tohle +tuto +tyto +jej +zda +proč +máte +tato +kam +tohoto +kdo +kteří +mi +nám +tom +tomuto +mít +nic +proto +kterou +byla +toho +protože +asi +ho +naši +napište +re +což +tím +takže +svých +její +svými +jste +aj +tu +tedy +teto +bylo +kde +ke +pravé +ji +nad +nejsou +či +pod +téma +mezi +přes +ty +pak +vám +ani +když +však +neg +jsem +tento +článku +články +aby +jsme +před +pta +jejich +byl +ještě +až +bez +také +pouze +první +vaše +která +nás +nový +tipy +pokud +může +strana +jeho +své +jiné +zprávy +nové +není +vás +jen +podle +zde +už +být +více +bude +již +než +který +by +které +co +nebo +ten +tak +má +při +od +po +jsou +jak +další +ale +si +se +ve +to +jako +za +zpět +ze +do +pro +je +na +atd +atp +jakmile +přičemž +já +on +ona +ono +oni +ony +my +vy +jí +ji +mě +mne +jemu +tomu +těm +těmu +němu +němuž +jehož +jíž +jelikož +jež +jakož +načež diff --git a/src/main/resources/solr_config/Test_Sigmah/conf/lang/stopwords_da.txt b/src/main/resources/solr_config/Test_Sigmah/conf/lang/stopwords_da.txt new file mode 100644 index 000000000..42e6145b9 --- /dev/null +++ b/src/main/resources/solr_config/Test_Sigmah/conf/lang/stopwords_da.txt @@ -0,0 +1,110 @@ + | From svn.tartarus.org/snowball/trunk/website/algorithms/danish/stop.txt + | This file is distributed under the BSD License. + | See http://snowball.tartarus.org/license.php + | Also see http://www.opensource.org/licenses/bsd-license.html + | - Encoding was converted to UTF-8. + | - This notice was added. + | + | NOTE: To use this file with StopFilterFactory, you must specify format="snowball" + + | A Danish stop word list. Comments begin with vertical bar. Each stop + | word is at the start of a line. + + | This is a ranked list (commonest to rarest) of stopwords derived from + | a large text sample. + + +og | and +i | in +jeg | I +det | that (dem. pronoun)/it (pers. pronoun) +at | that (in front of a sentence)/to (with infinitive) +en | a/an +den | it (pers. pronoun)/that (dem. pronoun) +til | to/at/for/until/against/by/of/into, more +er | present tense of "to be" +som | who, as +på | on/upon/in/on/at/to/after/of/with/for, on +de | they +med | with/by/in, along +han | he +af | of/by/from/off/for/in/with/on, off +for | at/for/to/from/by/of/ago, in front/before, because +ikke | not +der | who/which, there/those +var | past tense of "to be" +mig | me/myself +sig | oneself/himself/herself/itself/themselves +men | but +et | a/an/one, one (number), someone/somebody/one +har | present tense of "to have" +om | round/about/for/in/a, about/around/down, if +vi | we +min | my +havde | past tense of "to have" +ham | him +hun | she +nu | now +over | over/above/across/by/beyond/past/on/about, over/past +da | then, when/as/since +fra | from/off/since, off, since +du | you +ud | out +sin | his/her/its/one's +dem | them +os | us/ourselves +op | up +man | you/one +hans | his +hvor | where +eller | or +hvad | what +skal | must/shall etc. +selv | myself/youself/herself/ourselves etc., even +her | here +alle | all/everyone/everybody etc. +vil | will (verb) +blev | past tense of "to stay/to remain/to get/to become" +kunne | could +ind | in +når | when +være | present tense of "to be" +dog | however/yet/after all +noget | something +ville | would +jo | you know/you see (adv), yes +deres | their/theirs +efter | after/behind/according to/for/by/from, later/afterwards +ned | down +skulle | should +denne | this +end | than +dette | this +mit | my/mine +også | also +under | under/beneath/below/during, below/underneath +have | have +dig | you +anden | other +hende | her +mine | my +alt | everything +meget | much/very, plenty of +sit | his, her, its, one's +sine | his, her, its, one's +vor | our +mod | against +disse | these +hvis | if +din | your/yours +nogle | some +hos | by/at +blive | be/become +mange | many +ad | by/through +bliver | present tense of "to be/to become" +hendes | her/hers +været | be +thi | for (conj) +jer | you +sådan | such, like this/like that diff --git a/src/main/resources/solr_config/Test_Sigmah/conf/lang/stopwords_de.txt b/src/main/resources/solr_config/Test_Sigmah/conf/lang/stopwords_de.txt new file mode 100644 index 000000000..86525e7ae --- /dev/null +++ b/src/main/resources/solr_config/Test_Sigmah/conf/lang/stopwords_de.txt @@ -0,0 +1,294 @@ + | From svn.tartarus.org/snowball/trunk/website/algorithms/german/stop.txt + | This file is distributed under the BSD License. + | See http://snowball.tartarus.org/license.php + | Also see http://www.opensource.org/licenses/bsd-license.html + | - Encoding was converted to UTF-8. + | - This notice was added. + | + | NOTE: To use this file with StopFilterFactory, you must specify format="snowball" + + | A German stop word list. Comments begin with vertical bar. Each stop + | word is at the start of a line. + + | The number of forms in this list is reduced significantly by passing it + | through the German stemmer. + + +aber | but + +alle | all +allem +allen +aller +alles + +als | than, as +also | so +am | an + dem +an | at + +ander | other +andere +anderem +anderen +anderer +anderes +anderm +andern +anderr +anders + +auch | also +auf | on +aus | out of +bei | by +bin | am +bis | until +bist | art +da | there +damit | with it +dann | then + +der | the +den +des +dem +die +das + +daß | that + +derselbe | the same +derselben +denselben +desselben +demselben +dieselbe +dieselben +dasselbe + +dazu | to that + +dein | thy +deine +deinem +deinen +deiner +deines + +denn | because + +derer | of those +dessen | of him + +dich | thee +dir | to thee +du | thou + +dies | this +diese +diesem +diesen +dieser +dieses + + +doch | (several meanings) +dort | (over) there + + +durch | through + +ein | a +eine +einem +einen +einer +eines + +einig | some +einige +einigem +einigen +einiger +einiges + +einmal | once + +er | he +ihn | him +ihm | to him + +es | it +etwas | something + +euer | your +eure +eurem +euren +eurer +eures + +für | for +gegen | towards +gewesen | p.p. of sein +hab | have +habe | have +haben | have +hat | has +hatte | had +hatten | had +hier | here +hin | there +hinter | behind + +ich | I +mich | me +mir | to me + + +ihr | you, to her +ihre +ihrem +ihren +ihrer +ihres +euch | to you + +im | in + dem +in | in +indem | while +ins | in + das +ist | is + +jede | each, every +jedem +jeden +jeder +jedes + +jene | that +jenem +jenen +jener +jenes + +jetzt | now +kann | can + +kein | no +keine +keinem +keinen +keiner +keines + +können | can +könnte | could +machen | do +man | one + +manche | some, many a +manchem +manchen +mancher +manches + +mein | my +meine +meinem +meinen +meiner +meines + +mit | with +muss | must +musste | had to +nach | to(wards) +nicht | not +nichts | nothing +noch | still, yet +nun | now +nur | only +ob | whether +oder | or +ohne | without +sehr | very + +sein | his +seine +seinem +seinen +seiner +seines + +selbst | self +sich | herself + +sie | they, she +ihnen | to them + +sind | are +so | so + +solche | such +solchem +solchen +solcher +solches + +soll | shall +sollte | should +sondern | but +sonst | else +über | over +um | about, around +und | and + +uns | us +unse +unsem +unsen +unser +unses + +unter | under +viel | much +vom | von + dem +von | from +vor | before +während | while +war | was +waren | were +warst | wast +was | what +weg | away, off +weil | because +weiter | further + +welche | which +welchem +welchen +welcher +welches + +wenn | when +werde | will +werden | will +wie | how +wieder | again +will | want +wir | we +wird | will +wirst | willst +wo | where +wollen | want +wollte | wanted +würde | would +würden | would +zu | to +zum | zu + dem +zur | zu + der +zwar | indeed +zwischen | between + diff --git a/src/main/resources/solr_config/Test_Sigmah/conf/lang/stopwords_el.txt b/src/main/resources/solr_config/Test_Sigmah/conf/lang/stopwords_el.txt new file mode 100644 index 000000000..232681f5b --- /dev/null +++ b/src/main/resources/solr_config/Test_Sigmah/conf/lang/stopwords_el.txt @@ -0,0 +1,78 @@ +# Lucene Greek Stopwords list +# Note: by default this file is used after GreekLowerCaseFilter, +# so when modifying this file use 'σ' instead of 'ς' +ο +η +το +οι +τα +του +τησ +των +τον +την +και +κι +κ +ειμαι +εισαι +ειναι +ειμαστε +ειστε +στο +στον +στη +στην +μα +αλλα +απο +για +προσ +με +σε +ωσ +παρα +αντι +κατα +μετα +θα +να +δε +δεν +μη +μην +επι +ενω +εαν +αν +τοτε +που +πωσ +ποιοσ +ποια +ποιο +ποιοι +ποιεσ +ποιων +ποιουσ +αυτοσ +αυτη +αυτο +αυτοι +αυτων +αυτουσ +αυτεσ +αυτα +εκεινοσ +εκεινη +εκεινο +εκεινοι +εκεινεσ +εκεινα +εκεινων +εκεινουσ +οπωσ +ομωσ +ισωσ +οσο +οτι diff --git a/src/main/resources/solr_config/Test_Sigmah/conf/lang/stopwords_en.txt b/src/main/resources/solr_config/Test_Sigmah/conf/lang/stopwords_en.txt new file mode 100644 index 000000000..2c164c0b2 --- /dev/null +++ b/src/main/resources/solr_config/Test_Sigmah/conf/lang/stopwords_en.txt @@ -0,0 +1,54 @@ +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# a couple of test stopwords to test that the words are really being +# configured from this file: +stopworda +stopwordb + +# Standard english stop words taken from Lucene's StopAnalyzer +a +an +and +are +as +at +be +but +by +for +if +in +into +is +it +no +not +of +on +or +such +that +the +their +then +there +these +they +this +to +was +will +with diff --git a/src/main/resources/solr_config/Test_Sigmah/conf/lang/stopwords_es.txt b/src/main/resources/solr_config/Test_Sigmah/conf/lang/stopwords_es.txt new file mode 100644 index 000000000..487d78c8d --- /dev/null +++ b/src/main/resources/solr_config/Test_Sigmah/conf/lang/stopwords_es.txt @@ -0,0 +1,356 @@ + | From svn.tartarus.org/snowball/trunk/website/algorithms/spanish/stop.txt + | This file is distributed under the BSD License. + | See http://snowball.tartarus.org/license.php + | Also see http://www.opensource.org/licenses/bsd-license.html + | - Encoding was converted to UTF-8. + | - This notice was added. + | + | NOTE: To use this file with StopFilterFactory, you must specify format="snowball" + + | A Spanish stop word list. Comments begin with vertical bar. Each stop + | word is at the start of a line. + + + | The following is a ranked list (commonest to rarest) of stopwords + | deriving from a large sample of text. + + | Extra words have been added at the end. + +de | from, of +la | the, her +que | who, that +el | the +en | in +y | and +a | to +los | the, them +del | de + el +se | himself, from him etc +las | the, them +por | for, by, etc +un | a +para | for +con | with +no | no +una | a +su | his, her +al | a + el + | es from SER +lo | him +como | how +más | more +pero | pero +sus | su plural +le | to him, her +ya | already +o | or + | fue from SER +este | this + | ha from HABER +sí | himself etc +porque | because +esta | this + | son from SER +entre | between + | está from ESTAR +cuando | when +muy | very +sin | without +sobre | on + | ser from SER + | tiene from TENER +también | also +me | me +hasta | until +hay | there is/are +donde | where + | han from HABER +quien | whom, that + | están from ESTAR + | estado from ESTAR +desde | from +todo | all +nos | us +durante | during + | estados from ESTAR +todos | all +uno | a +les | to them +ni | nor +contra | against +otros | other + | fueron from SER +ese | that +eso | that + | había from HABER +ante | before +ellos | they +e | and (variant of y) +esto | this +mí | me +antes | before +algunos | some +qué | what? +unos | a +yo | I +otro | other +otras | other +otra | other +él | he +tanto | so much, many +esa | that +estos | these +mucho | much, many +quienes | who +nada | nothing +muchos | many +cual | who + | sea from SER +poco | few +ella | she +estar | to be + | haber from HABER +estas | these + | estaba from ESTAR + | estamos from ESTAR +algunas | some +algo | something +nosotros | we + + | other forms + +mi | me +mis | mi plural +tú | thou +te | thee +ti | thee +tu | thy +tus | tu plural +ellas | they +nosotras | we +vosotros | you +vosotras | you +os | you +mío | mine +mía | +míos | +mías | +tuyo | thine +tuya | +tuyos | +tuyas | +suyo | his, hers, theirs +suya | +suyos | +suyas | +nuestro | ours +nuestra | +nuestros | +nuestras | +vuestro | yours +vuestra | +vuestros | +vuestras | +esos | those +esas | those + + | forms of estar, to be (not including the infinitive): +estoy +estás +está +estamos +estáis +están +esté +estés +estemos +estéis +estén +estaré +estarás +estará +estaremos +estaréis +estarán +estaría +estarías +estaríamos +estaríais +estarían +estaba +estabas +estábamos +estabais +estaban +estuve +estuviste +estuvo +estuvimos +estuvisteis +estuvieron +estuviera +estuvieras +estuviéramos +estuvierais +estuvieran +estuviese +estuvieses +estuviésemos +estuvieseis +estuviesen +estando +estado +estada +estados +estadas +estad + + | forms of haber, to have (not including the infinitive): +he +has +ha +hemos +habéis +han +haya +hayas +hayamos +hayáis +hayan +habré +habrás +habrá +habremos +habréis +habrán +habría +habrías +habríamos +habríais +habrían +había +habías +habíamos +habíais +habían +hube +hubiste +hubo +hubimos +hubisteis +hubieron +hubiera +hubieras +hubiéramos +hubierais +hubieran +hubiese +hubieses +hubiésemos +hubieseis +hubiesen +habiendo +habido +habida +habidos +habidas + + | forms of ser, to be (not including the infinitive): +soy +eres +es +somos +sois +son +sea +seas +seamos +seáis +sean +seré +serás +será +seremos +seréis +serán +sería +serías +seríamos +seríais +serían +era +eras +éramos +erais +eran +fui +fuiste +fue +fuimos +fuisteis +fueron +fuera +fueras +fuéramos +fuerais +fueran +fuese +fueses +fuésemos +fueseis +fuesen +siendo +sido + | sed also means 'thirst' + + | forms of tener, to have (not including the infinitive): +tengo +tienes +tiene +tenemos +tenéis +tienen +tenga +tengas +tengamos +tengáis +tengan +tendré +tendrás +tendrá +tendremos +tendréis +tendrán +tendría +tendrías +tendríamos +tendríais +tendrían +tenía +tenías +teníamos +teníais +tenían +tuve +tuviste +tuvo +tuvimos +tuvisteis +tuvieron +tuviera +tuvieras +tuviéramos +tuvierais +tuvieran +tuviese +tuvieses +tuviésemos +tuvieseis +tuviesen +teniendo +tenido +tenida +tenidos +tenidas +tened + diff --git a/src/main/resources/solr_config/Test_Sigmah/conf/lang/stopwords_eu.txt b/src/main/resources/solr_config/Test_Sigmah/conf/lang/stopwords_eu.txt new file mode 100644 index 000000000..25f1db934 --- /dev/null +++ b/src/main/resources/solr_config/Test_Sigmah/conf/lang/stopwords_eu.txt @@ -0,0 +1,99 @@ +# example set of basque stopwords +al +anitz +arabera +asko +baina +bat +batean +batek +bati +batzuei +batzuek +batzuetan +batzuk +bera +beraiek +berau +berauek +bere +berori +beroriek +beste +bezala +da +dago +dira +ditu +du +dute +edo +egin +ere +eta +eurak +ez +gainera +gu +gutxi +guzti +haiei +haiek +haietan +hainbeste +hala +han +handik +hango +hara +hari +hark +hartan +hau +hauei +hauek +hauetan +hemen +hemendik +hemengo +hi +hona +honek +honela +honetan +honi +hor +hori +horiei +horiek +horietan +horko +horra +horrek +horrela +horretan +horri +hortik +hura +izan +ni +noiz +nola +non +nondik +nongo +nor +nora +ze +zein +zen +zenbait +zenbat +zer +zergatik +ziren +zituen +zu +zuek +zuen +zuten diff --git a/src/main/resources/solr_config/Test_Sigmah/conf/lang/stopwords_fa.txt b/src/main/resources/solr_config/Test_Sigmah/conf/lang/stopwords_fa.txt new file mode 100644 index 000000000..723641c6d --- /dev/null +++ b/src/main/resources/solr_config/Test_Sigmah/conf/lang/stopwords_fa.txt @@ -0,0 +1,313 @@ +# This file was created by Jacques Savoy and is distributed under the BSD license. +# See http://members.unine.ch/jacques.savoy/clef/index.html. +# Also see http://www.opensource.org/licenses/bsd-license.html +# Note: by default this file is used after normalization, so when adding entries +# to this file, use the arabic 'ي' instead of 'ی' +انان +نداشته +سراسر +خياه +ايشان +وي +تاكنون +بيشتري +دوم +پس +ناشي +وگو +يا +داشتند +سپس +هنگام +هرگز +پنج +نشان +امسال +ديگر +گروهي +شدند +چطور +ده +و +دو +نخستين +ولي +چرا +چه +وسط +ه +كدام +قابل +يك +رفت +هفت +همچنين +در +هزار +بله +بلي +شايد +اما +شناسي +گرفته +دهد +داشته +دانست +داشتن +خواهيم +ميليارد +وقتيكه +امد +خواهد +جز +اورده +شده +بلكه +خدمات +شدن +برخي +نبود +بسياري +جلوگيري +حق +كردند +نوعي +بعري +نكرده +نظير +نبايد +بوده +بودن +داد +اورد +هست +جايي +شود +دنبال +داده +بايد +سابق +هيچ +همان +انجا +كمتر +كجاست +گردد +كسي +تر +مردم +تان +دادن +بودند +سري +جدا +ندارند +مگر +يكديگر +دارد +دهند +بنابراين +هنگامي +سمت +جا +انچه +خود +دادند +زياد +دارند +اثر +بدون +بهترين +بيشتر +البته +به +براساس +بيرون +كرد +بعضي +گرفت +توي +اي +ميليون +او +جريان +تول +بر +مانند +برابر +باشيم +مدتي +گويند +اكنون +تا +تنها +جديد +چند +بي +نشده +كردن +كردم +گويد +كرده +كنيم +نمي +نزد +روي +قصد +فقط +بالاي +ديگران +اين +ديروز +توسط +سوم +ايم +دانند +سوي +استفاده +شما +كنار +داريم +ساخته +طور +امده +رفته +نخست +بيست +نزديك +طي +كنيد +از +انها +تمامي +داشت +يكي +طريق +اش +چيست +روب +نمايد +گفت +چندين +چيزي +تواند +ام +ايا +با +ان +ايد +ترين +اينكه +ديگري +راه +هايي +بروز +همچنان +پاعين +كس +حدود +مختلف +مقابل +چيز +گيرد +ندارد +ضد +همچون +سازي +شان +مورد +باره +مرسي +خويش +برخوردار +چون +خارج +شش +هنوز +تحت +ضمن +هستيم +گفته +فكر +بسيار +پيش +براي +روزهاي +انكه +نخواهد +بالا +كل +وقتي +كي +چنين +كه +گيري +نيست +است +كجا +كند +نيز +يابد +بندي +حتي +توانند +عقب +خواست +كنند +بين +تمام +همه +ما +باشند +مثل +شد +اري +باشد +اره +طبق +بعد +اگر +صورت +غير +جاي +بيش +ريزي +اند +زيرا +چگونه +بار +لطفا +مي +درباره +من +ديده +همين +گذاري +برداري +علت +گذاشته +هم +فوق +نه +ها +شوند +اباد +همواره +هر +اول +خواهند +چهار +نام +امروز +مان +هاي +قبل +كنم +سعي +تازه +را +هستند +زير +جلوي +عنوان +بود diff --git a/src/main/resources/solr_config/Test_Sigmah/conf/lang/stopwords_fi.txt b/src/main/resources/solr_config/Test_Sigmah/conf/lang/stopwords_fi.txt new file mode 100644 index 000000000..4372c9a05 --- /dev/null +++ b/src/main/resources/solr_config/Test_Sigmah/conf/lang/stopwords_fi.txt @@ -0,0 +1,97 @@ + | From svn.tartarus.org/snowball/trunk/website/algorithms/finnish/stop.txt + | This file is distributed under the BSD License. + | See http://snowball.tartarus.org/license.php + | Also see http://www.opensource.org/licenses/bsd-license.html + | - Encoding was converted to UTF-8. + | - This notice was added. + | + | NOTE: To use this file with StopFilterFactory, you must specify format="snowball" + +| forms of BE + +olla +olen +olet +on +olemme +olette +ovat +ole | negative form + +oli +olisi +olisit +olisin +olisimme +olisitte +olisivat +olit +olin +olimme +olitte +olivat +ollut +olleet + +en | negation +et +ei +emme +ette +eivät + +|Nom Gen Acc Part Iness Elat Illat Adess Ablat Allat Ess Trans +minä minun minut minua minussa minusta minuun minulla minulta minulle | I +sinä sinun sinut sinua sinussa sinusta sinuun sinulla sinulta sinulle | you +hän hänen hänet häntä hänessä hänestä häneen hänellä häneltä hänelle | he she +me meidän meidät meitä meissä meistä meihin meillä meiltä meille | we +te teidän teidät teitä teissä teistä teihin teillä teiltä teille | you +he heidän heidät heitä heissä heistä heihin heillä heiltä heille | they + +tämä tämän tätä tässä tästä tähän tallä tältä tälle tänä täksi | this +tuo tuon tuotä tuossa tuosta tuohon tuolla tuolta tuolle tuona tuoksi | that +se sen sitä siinä siitä siihen sillä siltä sille sinä siksi | it +nämä näiden näitä näissä näistä näihin näillä näiltä näille näinä näiksi | these +nuo noiden noita noissa noista noihin noilla noilta noille noina noiksi | those +ne niiden niitä niissä niistä niihin niillä niiltä niille niinä niiksi | they + +kuka kenen kenet ketä kenessä kenestä keneen kenellä keneltä kenelle kenenä keneksi| who +ketkä keiden ketkä keitä keissä keistä keihin keillä keiltä keille keinä keiksi | (pl) +mikä minkä minkä mitä missä mistä mihin millä miltä mille minä miksi | which what +mitkä | (pl) + +joka jonka jota jossa josta johon jolla jolta jolle jona joksi | who which +jotka joiden joita joissa joista joihin joilla joilta joille joina joiksi | (pl) + +| conjunctions + +että | that +ja | and +jos | if +koska | because +kuin | than +mutta | but +niin | so +sekä | and +sillä | for +tai | or +vaan | but +vai | or +vaikka | although + + +| prepositions + +kanssa | with +mukaan | according to +noin | about +poikki | across +yli | over, across + +| other + +kun | when +niin | so +nyt | now +itse | self + diff --git a/src/main/resources/solr_config/Test_Sigmah/conf/lang/stopwords_fr.txt b/src/main/resources/solr_config/Test_Sigmah/conf/lang/stopwords_fr.txt new file mode 100644 index 000000000..749abae68 --- /dev/null +++ b/src/main/resources/solr_config/Test_Sigmah/conf/lang/stopwords_fr.txt @@ -0,0 +1,186 @@ + | From svn.tartarus.org/snowball/trunk/website/algorithms/french/stop.txt + | This file is distributed under the BSD License. + | See http://snowball.tartarus.org/license.php + | Also see http://www.opensource.org/licenses/bsd-license.html + | - Encoding was converted to UTF-8. + | - This notice was added. + | + | NOTE: To use this file with StopFilterFactory, you must specify format="snowball" + + | A French stop word list. Comments begin with vertical bar. Each stop + | word is at the start of a line. + +au | a + le +aux | a + les +avec | with +ce | this +ces | these +dans | with +de | of +des | de + les +du | de + le +elle | she +en | `of them' etc +et | and +eux | them +il | he +je | I +la | the +le | the +leur | their +lui | him +ma | my (fem) +mais | but +me | me +même | same; as in moi-même (myself) etc +mes | me (pl) +moi | me +mon | my (masc) +ne | not +nos | our (pl) +notre | our +nous | we +on | one +ou | where +par | by +pas | not +pour | for +qu | que before vowel +que | that +qui | who +sa | his, her (fem) +se | oneself +ses | his (pl) +son | his, her (masc) +sur | on +ta | thy (fem) +te | thee +tes | thy (pl) +toi | thee +ton | thy (masc) +tu | thou +un | a +une | a +vos | your (pl) +votre | your +vous | you + + | single letter forms + +c | c' +d | d' +j | j' +l | l' +à | to, at +m | m' +n | n' +s | s' +t | t' +y | there + + | forms of être (not including the infinitive): +été +étée +étées +étés +étant +suis +es +est +sommes +êtes +sont +serai +seras +sera +serons +serez +seront +serais +serait +serions +seriez +seraient +étais +était +étions +étiez +étaient +fus +fut +fûmes +fûtes +furent +sois +soit +soyons +soyez +soient +fusse +fusses +fût +fussions +fussiez +fussent + + | forms of avoir (not including the infinitive): +ayant +eu +eue +eues +eus +ai +as +avons +avez +ont +aurai +auras +aura +aurons +aurez +auront +aurais +aurait +aurions +auriez +auraient +avais +avait +avions +aviez +avaient +eut +eûmes +eûtes +eurent +aie +aies +ait +ayons +ayez +aient +eusse +eusses +eût +eussions +eussiez +eussent + + | Later additions (from Jean-Christophe Deschamps) +ceci | this +cela | that +celà | that +cet | this +cette | this +ici | here +ils | they +les | the (pl) +leurs | their (pl) +quel | which +quels | which +quelle | which +quelles | which +sans | without +soi | oneself + diff --git a/src/main/resources/solr_config/Test_Sigmah/conf/lang/stopwords_ga.txt b/src/main/resources/solr_config/Test_Sigmah/conf/lang/stopwords_ga.txt new file mode 100644 index 000000000..9ff88d747 --- /dev/null +++ b/src/main/resources/solr_config/Test_Sigmah/conf/lang/stopwords_ga.txt @@ -0,0 +1,110 @@ + +a +ach +ag +agus +an +aon +ar +arna +as +b' +ba +beirt +bhúr +caoga +ceathair +ceathrar +chomh +chtó +chuig +chun +cois +céad +cúig +cúigear +d' +daichead +dar +de +deich +deichniúr +den +dhá +do +don +dtí +dá +dár +dó +faoi +faoin +faoina +faoinár +fara +fiche +gach +gan +go +gur +haon +hocht +i +iad +idir +in +ina +ins +inár +is +le +leis +lena +lenár +m' +mar +mo +mé +na +nach +naoi +naonúr +ná +ní +níor +nó +nócha +ocht +ochtar +os +roimh +sa +seacht +seachtar +seachtó +seasca +seisear +siad +sibh +sinn +sna +sé +sí +tar +thar +thú +triúr +trí +trína +trínár +tríocha +tú +um +ár +é +éis +í +ó +ón +óna +ónár diff --git a/src/main/resources/solr_config/Test_Sigmah/conf/lang/stopwords_gl.txt b/src/main/resources/solr_config/Test_Sigmah/conf/lang/stopwords_gl.txt new file mode 100644 index 000000000..d8760b12c --- /dev/null +++ b/src/main/resources/solr_config/Test_Sigmah/conf/lang/stopwords_gl.txt @@ -0,0 +1,161 @@ +# galican stopwords +a +aínda +alí +aquel +aquela +aquelas +aqueles +aquilo +aquí +ao +aos +as +así +á +ben +cando +che +co +coa +comigo +con +connosco +contigo +convosco +coas +cos +cun +cuns +cunha +cunhas +da +dalgunha +dalgunhas +dalgún +dalgúns +das +de +del +dela +delas +deles +desde +deste +do +dos +dun +duns +dunha +dunhas +e +el +ela +elas +eles +en +era +eran +esa +esas +ese +eses +esta +estar +estaba +está +están +este +estes +estiven +estou +eu +é +facer +foi +foron +fun +había +hai +iso +isto +la +las +lle +lles +lo +los +mais +me +meu +meus +min +miña +miñas +moi +na +nas +neste +nin +no +non +nos +nosa +nosas +noso +nosos +nós +nun +nunha +nuns +nunhas +o +os +ou +ó +ós +para +pero +pode +pois +pola +polas +polo +polos +por +que +se +senón +ser +seu +seus +sexa +sido +sobre +súa +súas +tamén +tan +te +ten +teñen +teño +ter +teu +teus +ti +tido +tiña +tiven +túa +túas +un +unha +unhas +uns +vos +vosa +vosas +voso +vosos +vós diff --git a/src/main/resources/solr_config/Test_Sigmah/conf/lang/stopwords_hi.txt b/src/main/resources/solr_config/Test_Sigmah/conf/lang/stopwords_hi.txt new file mode 100644 index 000000000..86286bb08 --- /dev/null +++ b/src/main/resources/solr_config/Test_Sigmah/conf/lang/stopwords_hi.txt @@ -0,0 +1,235 @@ +# Also see http://www.opensource.org/licenses/bsd-license.html +# See http://members.unine.ch/jacques.savoy/clef/index.html. +# This file was created by Jacques Savoy and is distributed under the BSD license. +# Note: by default this file also contains forms normalized by HindiNormalizer +# for spelling variation (see section below), such that it can be used whether or +# not you enable that feature. When adding additional entries to this list, +# please add the normalized form as well. +अंदर +अत +अपना +अपनी +अपने +अभी +आदि +आप +इत्यादि +इन +इनका +इन्हीं +इन्हें +इन्हों +इस +इसका +इसकी +इसके +इसमें +इसी +इसे +उन +उनका +उनकी +उनके +उनको +उन्हीं +उन्हें +उन्हों +उस +उसके +उसी +उसे +एक +एवं +एस +ऐसे +और +कई +कर +करता +करते +करना +करने +करें +कहते +कहा +का +काफ़ी +कि +कितना +किन्हें +किन्हों +किया +किर +किस +किसी +किसे +की +कुछ +कुल +के +को +कोई +कौन +कौनसा +गया +घर +जब +जहाँ +जा +जितना +जिन +जिन्हें +जिन्हों +जिस +जिसे +जीधर +जैसा +जैसे +जो +तक +तब +तरह +तिन +तिन्हें +तिन्हों +तिस +तिसे +तो +था +थी +थे +दबारा +दिया +दुसरा +दूसरे +दो +द्वारा +न +नहीं +ना +निहायत +नीचे +ने +पर +पर +पहले +पूरा +पे +फिर +बनी +बही +बहुत +बाद +बाला +बिलकुल +भी +भीतर +मगर +मानो +मे +में +यदि +यह +यहाँ +यही +या +यिह +ये +रखें +रहा +रहे +ऱ्वासा +लिए +लिये +लेकिन +व +वर्ग +वह +वह +वहाँ +वहीं +वाले +वुह +वे +वग़ैरह +संग +सकता +सकते +सबसे +सभी +साथ +साबुत +साभ +सारा +से +सो +ही +हुआ +हुई +हुए +है +हैं +हो +होता +होती +होते +होना +होने +# additional normalized forms of the above +अपनि +जेसे +होति +सभि +तिंहों +इंहों +दवारा +इसि +किंहें +थि +उंहों +ओर +जिंहें +वहिं +अभि +बनि +हि +उंहिं +उंहें +हें +वगेरह +एसे +रवासा +कोन +निचे +काफि +उसि +पुरा +भितर +हे +बहि +वहां +कोइ +यहां +जिंहों +तिंहें +किसि +कइ +यहि +इंहिं +जिधर +इंहें +अदि +इतयादि +हुइ +कोनसा +इसकि +दुसरे +जहां +अप +किंहों +उनकि +भि +वरग +हुअ +जेसा +नहिं diff --git a/src/main/resources/solr_config/Test_Sigmah/conf/lang/stopwords_hu.txt b/src/main/resources/solr_config/Test_Sigmah/conf/lang/stopwords_hu.txt new file mode 100644 index 000000000..37526da8a --- /dev/null +++ b/src/main/resources/solr_config/Test_Sigmah/conf/lang/stopwords_hu.txt @@ -0,0 +1,211 @@ + | From svn.tartarus.org/snowball/trunk/website/algorithms/hungarian/stop.txt + | This file is distributed under the BSD License. + | See http://snowball.tartarus.org/license.php + | Also see http://www.opensource.org/licenses/bsd-license.html + | - Encoding was converted to UTF-8. + | - This notice was added. + | + | NOTE: To use this file with StopFilterFactory, you must specify format="snowball" + +| Hungarian stop word list +| prepared by Anna Tordai + +a +ahogy +ahol +aki +akik +akkor +alatt +által +általában +amely +amelyek +amelyekben +amelyeket +amelyet +amelynek +ami +amit +amolyan +amíg +amikor +át +abban +ahhoz +annak +arra +arról +az +azok +azon +azt +azzal +azért +aztán +azután +azonban +bár +be +belül +benne +cikk +cikkek +cikkeket +csak +de +e +eddig +egész +egy +egyes +egyetlen +egyéb +egyik +egyre +ekkor +el +elég +ellen +elő +először +előtt +első +én +éppen +ebben +ehhez +emilyen +ennek +erre +ez +ezt +ezek +ezen +ezzel +ezért +és +fel +felé +hanem +hiszen +hogy +hogyan +igen +így +illetve +ill. +ill +ilyen +ilyenkor +ison +ismét +itt +jó +jól +jobban +kell +kellett +keresztül +keressünk +ki +kívül +között +közül +legalább +lehet +lehetett +legyen +lenne +lenni +lesz +lett +maga +magát +majd +majd +már +más +másik +meg +még +mellett +mert +mely +melyek +mi +mit +míg +miért +milyen +mikor +minden +mindent +mindenki +mindig +mint +mintha +mivel +most +nagy +nagyobb +nagyon +ne +néha +nekem +neki +nem +néhány +nélkül +nincs +olyan +ott +össze +ő +ők +őket +pedig +persze +rá +s +saját +sem +semmi +sok +sokat +sokkal +számára +szemben +szerint +szinte +talán +tehát +teljes +tovább +továbbá +több +úgy +ugyanis +új +újabb +újra +után +utána +utolsó +vagy +vagyis +valaki +valami +valamint +való +vagyok +van +vannak +volt +voltam +voltak +voltunk +vissza +vele +viszont +volna diff --git a/src/main/resources/solr_config/Test_Sigmah/conf/lang/stopwords_hy.txt b/src/main/resources/solr_config/Test_Sigmah/conf/lang/stopwords_hy.txt new file mode 100644 index 000000000..60c1c50fb --- /dev/null +++ b/src/main/resources/solr_config/Test_Sigmah/conf/lang/stopwords_hy.txt @@ -0,0 +1,46 @@ +# example set of Armenian stopwords. +այդ +այլ +այն +այս +դու +դուք +եմ +են +ենք +ես +եք +է +էի +էին +էինք +էիր +էիք +էր +ըստ +թ +ի +ին +իսկ +իր +կամ +համար +հետ +հետո +մենք +մեջ +մի +ն +նա +նաև +նրա +նրանք +որ +որը +որոնք +որպես +ու +ում +պիտի +վրա +և diff --git a/src/main/resources/solr_config/Test_Sigmah/conf/lang/stopwords_id.txt b/src/main/resources/solr_config/Test_Sigmah/conf/lang/stopwords_id.txt new file mode 100644 index 000000000..4617f83a5 --- /dev/null +++ b/src/main/resources/solr_config/Test_Sigmah/conf/lang/stopwords_id.txt @@ -0,0 +1,359 @@ +# from appendix D of: A Study of Stemming Effects on Information +# Retrieval in Bahasa Indonesia +ada +adanya +adalah +adapun +agak +agaknya +agar +akan +akankah +akhirnya +aku +akulah +amat +amatlah +anda +andalah +antar +diantaranya +antara +antaranya +diantara +apa +apaan +mengapa +apabila +apakah +apalagi +apatah +atau +ataukah +ataupun +bagai +bagaikan +sebagai +sebagainya +bagaimana +bagaimanapun +sebagaimana +bagaimanakah +bagi +bahkan +bahwa +bahwasanya +sebaliknya +banyak +sebanyak +beberapa +seberapa +begini +beginian +beginikah +beginilah +sebegini +begitu +begitukah +begitulah +begitupun +sebegitu +belum +belumlah +sebelum +sebelumnya +sebenarnya +berapa +berapakah +berapalah +berapapun +betulkah +sebetulnya +biasa +biasanya +bila +bilakah +bisa +bisakah +sebisanya +boleh +bolehkah +bolehlah +buat +bukan +bukankah +bukanlah +bukannya +cuma +percuma +dahulu +dalam +dan +dapat +dari +daripada +dekat +demi +demikian +demikianlah +sedemikian +dengan +depan +di +dia +dialah +dini +diri +dirinya +terdiri +dong +dulu +enggak +enggaknya +entah +entahlah +terhadap +terhadapnya +hal +hampir +hanya +hanyalah +harus +haruslah +harusnya +seharusnya +hendak +hendaklah +hendaknya +hingga +sehingga +ia +ialah +ibarat +ingin +inginkah +inginkan +ini +inikah +inilah +itu +itukah +itulah +jangan +jangankan +janganlah +jika +jikalau +juga +justru +kala +kalau +kalaulah +kalaupun +kalian +kami +kamilah +kamu +kamulah +kan +kapan +kapankah +kapanpun +dikarenakan +karena +karenanya +ke +kecil +kemudian +kenapa +kepada +kepadanya +ketika +seketika +khususnya +kini +kinilah +kiranya +sekiranya +kita +kitalah +kok +lagi +lagian +selagi +lah +lain +lainnya +melainkan +selaku +lalu +melalui +terlalu +lama +lamanya +selama +selama +selamanya +lebih +terlebih +bermacam +macam +semacam +maka +makanya +makin +malah +malahan +mampu +mampukah +mana +manakala +manalagi +masih +masihkah +semasih +masing +mau +maupun +semaunya +memang +mereka +merekalah +meski +meskipun +semula +mungkin +mungkinkah +nah +namun +nanti +nantinya +nyaris +oleh +olehnya +seorang +seseorang +pada +padanya +padahal +paling +sepanjang +pantas +sepantasnya +sepantasnyalah +para +pasti +pastilah +per +pernah +pula +pun +merupakan +rupanya +serupa +saat +saatnya +sesaat +saja +sajalah +saling +bersama +sama +sesama +sambil +sampai +sana +sangat +sangatlah +saya +sayalah +se +sebab +sebabnya +sebuah +tersebut +tersebutlah +sedang +sedangkan +sedikit +sedikitnya +segala +segalanya +segera +sesegera +sejak +sejenak +sekali +sekalian +sekalipun +sesekali +sekaligus +sekarang +sekarang +sekitar +sekitarnya +sela +selain +selalu +seluruh +seluruhnya +semakin +sementara +sempat +semua +semuanya +sendiri +sendirinya +seolah +seperti +sepertinya +sering +seringnya +serta +siapa +siapakah +siapapun +disini +disinilah +sini +sinilah +sesuatu +sesuatunya +suatu +sesudah +sesudahnya +sudah +sudahkah +sudahlah +supaya +tadi +tadinya +tak +tanpa +setelah +telah +tentang +tentu +tentulah +tentunya +tertentu +seterusnya +tapi +tetapi +setiap +tiap +setidaknya +tidak +tidakkah +tidaklah +toh +waduh +wah +wahai +sewaktu +walau +walaupun +wong +yaitu +yakni +yang diff --git a/src/main/resources/solr_config/Test_Sigmah/conf/lang/stopwords_it.txt b/src/main/resources/solr_config/Test_Sigmah/conf/lang/stopwords_it.txt new file mode 100644 index 000000000..1219cc773 --- /dev/null +++ b/src/main/resources/solr_config/Test_Sigmah/conf/lang/stopwords_it.txt @@ -0,0 +1,303 @@ + | From svn.tartarus.org/snowball/trunk/website/algorithms/italian/stop.txt + | This file is distributed under the BSD License. + | See http://snowball.tartarus.org/license.php + | Also see http://www.opensource.org/licenses/bsd-license.html + | - Encoding was converted to UTF-8. + | - This notice was added. + | + | NOTE: To use this file with StopFilterFactory, you must specify format="snowball" + + | An Italian stop word list. Comments begin with vertical bar. Each stop + | word is at the start of a line. + +ad | a (to) before vowel +al | a + il +allo | a + lo +ai | a + i +agli | a + gli +all | a + l' +agl | a + gl' +alla | a + la +alle | a + le +con | with +col | con + il +coi | con + i (forms collo, cogli etc are now very rare) +da | from +dal | da + il +dallo | da + lo +dai | da + i +dagli | da + gli +dall | da + l' +dagl | da + gll' +dalla | da + la +dalle | da + le +di | of +del | di + il +dello | di + lo +dei | di + i +degli | di + gli +dell | di + l' +degl | di + gl' +della | di + la +delle | di + le +in | in +nel | in + el +nello | in + lo +nei | in + i +negli | in + gli +nell | in + l' +negl | in + gl' +nella | in + la +nelle | in + le +su | on +sul | su + il +sullo | su + lo +sui | su + i +sugli | su + gli +sull | su + l' +sugl | su + gl' +sulla | su + la +sulle | su + le +per | through, by +tra | among +contro | against +io | I +tu | thou +lui | he +lei | she +noi | we +voi | you +loro | they +mio | my +mia | +miei | +mie | +tuo | +tua | +tuoi | thy +tue | +suo | +sua | +suoi | his, her +sue | +nostro | our +nostra | +nostri | +nostre | +vostro | your +vostra | +vostri | +vostre | +mi | me +ti | thee +ci | us, there +vi | you, there +lo | him, the +la | her, the +li | them +le | them, the +gli | to him, the +ne | from there etc +il | the +un | a +uno | a +una | a +ma | but +ed | and +se | if +perché | why, because +anche | also +come | how +dov | where (as dov') +dove | where +che | who, that +chi | who +cui | whom +non | not +più | more +quale | who, that +quanto | how much +quanti | +quanta | +quante | +quello | that +quelli | +quella | +quelle | +questo | this +questi | +questa | +queste | +si | yes +tutto | all +tutti | all + + | single letter forms: + +a | at +c | as c' for ce or ci +e | and +i | the +l | as l' +o | or + + | forms of avere, to have (not including the infinitive): + +ho +hai +ha +abbiamo +avete +hanno +abbia +abbiate +abbiano +avrò +avrai +avrà +avremo +avrete +avranno +avrei +avresti +avrebbe +avremmo +avreste +avrebbero +avevo +avevi +aveva +avevamo +avevate +avevano +ebbi +avesti +ebbe +avemmo +aveste +ebbero +avessi +avesse +avessimo +avessero +avendo +avuto +avuta +avuti +avute + + | forms of essere, to be (not including the infinitive): +sono +sei +è +siamo +siete +sia +siate +siano +sarò +sarai +sarà +saremo +sarete +saranno +sarei +saresti +sarebbe +saremmo +sareste +sarebbero +ero +eri +era +eravamo +eravate +erano +fui +fosti +fu +fummo +foste +furono +fossi +fosse +fossimo +fossero +essendo + + | forms of fare, to do (not including the infinitive, fa, fat-): +faccio +fai +facciamo +fanno +faccia +facciate +facciano +farò +farai +farà +faremo +farete +faranno +farei +faresti +farebbe +faremmo +fareste +farebbero +facevo +facevi +faceva +facevamo +facevate +facevano +feci +facesti +fece +facemmo +faceste +fecero +facessi +facesse +facessimo +facessero +facendo + + | forms of stare, to be (not including the infinitive): +sto +stai +sta +stiamo +stanno +stia +stiate +stiano +starò +starai +starà +staremo +starete +staranno +starei +staresti +starebbe +staremmo +stareste +starebbero +stavo +stavi +stava +stavamo +stavate +stavano +stetti +stesti +stette +stemmo +steste +stettero +stessi +stesse +stessimo +stessero +stando diff --git a/src/main/resources/solr_config/Test_Sigmah/conf/lang/stopwords_ja.txt b/src/main/resources/solr_config/Test_Sigmah/conf/lang/stopwords_ja.txt new file mode 100644 index 000000000..d4321be6b --- /dev/null +++ b/src/main/resources/solr_config/Test_Sigmah/conf/lang/stopwords_ja.txt @@ -0,0 +1,127 @@ +# +# This file defines a stopword set for Japanese. +# +# This set is made up of hand-picked frequent terms from segmented Japanese Wikipedia. +# Punctuation characters and frequent kanji have mostly been left out. See LUCENE-3745 +# for frequency lists, etc. that can be useful for making your own set (if desired) +# +# Note that there is an overlap between these stopwords and the terms stopped when used +# in combination with the JapanesePartOfSpeechStopFilter. When editing this file, note +# that comments are not allowed on the same line as stopwords. +# +# Also note that stopping is done in a case-insensitive manner. Change your StopFilter +# configuration if you need case-sensitive stopping. Lastly, note that stopping is done +# using the same character width as the entries in this file. Since this StopFilter is +# normally done after a CJKWidthFilter in your chain, you would usually want your romaji +# entries to be in half-width and your kana entries to be in full-width. +# +の +に +は +を +た +が +で +て +と +し +れ +さ +ある +いる +も +する +から +な +こと +として +い +や +れる +など +なっ +ない +この +ため +その +あっ +よう +また +もの +という +あり +まで +られ +なる +へ +か +だ +これ +によって +により +おり +より +による +ず +なり +られる +において +ば +なかっ +なく +しかし +について +せ +だっ +その後 +できる +それ +う +ので +なお +のみ +でき +き +つ +における +および +いう +さらに +でも +ら +たり +その他 +に関する +たち +ます +ん +なら +に対して +特に +せる +及び +これら +とき +では +にて +ほか +ながら +うち +そして +とともに +ただし +かつて +それぞれ +または +お +ほど +ものの +に対する +ほとんど +と共に +といった +です +とも +ところ +ここ +##### End of file diff --git a/src/main/resources/solr_config/Test_Sigmah/conf/lang/stopwords_lv.txt b/src/main/resources/solr_config/Test_Sigmah/conf/lang/stopwords_lv.txt new file mode 100644 index 000000000..e21a23c06 --- /dev/null +++ b/src/main/resources/solr_config/Test_Sigmah/conf/lang/stopwords_lv.txt @@ -0,0 +1,172 @@ +# Set of Latvian stopwords from A Stemming Algorithm for Latvian, Karlis Kreslins +# the original list of over 800 forms was refined: +# pronouns, adverbs, interjections were removed +# +# prepositions +aiz +ap +ar +apakš +ārpus +augšpus +bez +caur +dēļ +gar +iekš +iz +kopš +labad +lejpus +līdz +no +otrpus +pa +par +pār +pēc +pie +pirms +pret +priekš +starp +šaipus +uz +viņpus +virs +virspus +zem +apakšpus +# Conjunctions +un +bet +jo +ja +ka +lai +tomēr +tikko +turpretī +arī +kaut +gan +tādēļ +tā +ne +tikvien +vien +kā +ir +te +vai +kamēr +# Particles +ar +diezin +droši +diemžēl +nebūt +ik +it +taču +nu +pat +tiklab +iekšpus +nedz +tik +nevis +turpretim +jeb +iekam +iekām +iekāms +kolīdz +līdzko +tiklīdz +jebšu +tālab +tāpēc +nekā +itin +jā +jau +jel +nē +nezin +tad +tikai +vis +tak +iekams +vien +# modal verbs +būt +biju +biji +bija +bijām +bijāt +esmu +esi +esam +esat +būšu +būsi +būs +būsim +būsiet +tikt +tiku +tiki +tika +tikām +tikāt +tieku +tiec +tiek +tiekam +tiekat +tikšu +tiks +tiksim +tiksiet +tapt +tapi +tapāt +topat +tapšu +tapsi +taps +tapsim +tapsiet +kļūt +kļuvu +kļuvi +kļuva +kļuvām +kļuvāt +kļūstu +kļūsti +kļūst +kļūstam +kļūstat +kļūšu +kļūsi +kļūs +kļūsim +kļūsiet +# verbs +varēt +varēju +varējām +varēšu +varēsim +var +varēji +varējāt +varēsi +varēsiet +varat +varēja +varēs diff --git a/src/main/resources/solr_config/Test_Sigmah/conf/lang/stopwords_nl.txt b/src/main/resources/solr_config/Test_Sigmah/conf/lang/stopwords_nl.txt new file mode 100644 index 000000000..47a2aeacf --- /dev/null +++ b/src/main/resources/solr_config/Test_Sigmah/conf/lang/stopwords_nl.txt @@ -0,0 +1,119 @@ + | From svn.tartarus.org/snowball/trunk/website/algorithms/dutch/stop.txt + | This file is distributed under the BSD License. + | See http://snowball.tartarus.org/license.php + | Also see http://www.opensource.org/licenses/bsd-license.html + | - Encoding was converted to UTF-8. + | - This notice was added. + | + | NOTE: To use this file with StopFilterFactory, you must specify format="snowball" + + | A Dutch stop word list. Comments begin with vertical bar. Each stop + | word is at the start of a line. + + | This is a ranked list (commonest to rarest) of stopwords derived from + | a large sample of Dutch text. + + | Dutch stop words frequently exhibit homonym clashes. These are indicated + | clearly below. + +de | the +en | and +van | of, from +ik | I, the ego +te | (1) chez, at etc, (2) to, (3) too +dat | that, which +die | that, those, who, which +in | in, inside +een | a, an, one +hij | he +het | the, it +niet | not, nothing, naught +zijn | (1) to be, being, (2) his, one's, its +is | is +was | (1) was, past tense of all persons sing. of 'zijn' (to be) (2) wax, (3) the washing, (4) rise of river +op | on, upon, at, in, up, used up +aan | on, upon, to (as dative) +met | with, by +als | like, such as, when +voor | (1) before, in front of, (2) furrow +had | had, past tense all persons sing. of 'hebben' (have) +er | there +maar | but, only +om | round, about, for etc +hem | him +dan | then +zou | should/would, past tense all persons sing. of 'zullen' +of | or, whether, if +wat | what, something, anything +mijn | possessive and noun 'mine' +men | people, 'one' +dit | this +zo | so, thus, in this way +door | through by +over | over, across +ze | she, her, they, them +zich | oneself +bij | (1) a bee, (2) by, near, at +ook | also, too +tot | till, until +je | you +mij | me +uit | out of, from +der | Old Dutch form of 'van der' still found in surnames +daar | (1) there, (2) because +haar | (1) her, their, them, (2) hair +naar | (1) unpleasant, unwell etc, (2) towards, (3) as +heb | present first person sing. of 'to have' +hoe | how, why +heeft | present third person sing. of 'to have' +hebben | 'to have' and various parts thereof +deze | this +u | you +want | (1) for, (2) mitten, (3) rigging +nog | yet, still +zal | 'shall', first and third person sing. of verb 'zullen' (will) +me | me +zij | she, they +nu | now +ge | 'thou', still used in Belgium and south Netherlands +geen | none +omdat | because +iets | something, somewhat +worden | to become, grow, get +toch | yet, still +al | all, every, each +waren | (1) 'were' (2) to wander, (3) wares, (3) +veel | much, many +meer | (1) more, (2) lake +doen | to do, to make +toen | then, when +moet | noun 'spot/mote' and present form of 'to must' +ben | (1) am, (2) 'are' in interrogative second person singular of 'to be' +zonder | without +kan | noun 'can' and present form of 'to be able' +hun | their, them +dus | so, consequently +alles | all, everything, anything +onder | under, beneath +ja | yes, of course +eens | once, one day +hier | here +wie | who +werd | imperfect third person sing. of 'become' +altijd | always +doch | yet, but etc +wordt | present third person sing. of 'become' +wezen | (1) to be, (2) 'been' as in 'been fishing', (3) orphans +kunnen | to be able +ons | us/our +zelf | self +tegen | against, towards, at +na | after, near +reeds | already +wil | (1) present tense of 'want', (2) 'will', noun, (3) fender +kon | could; past tense of 'to be able' +niets | nothing +uw | your +iemand | somebody +geweest | been; past participle of 'be' +andere | other diff --git a/src/main/resources/solr_config/Test_Sigmah/conf/lang/stopwords_no.txt b/src/main/resources/solr_config/Test_Sigmah/conf/lang/stopwords_no.txt new file mode 100644 index 000000000..a7a2c28ba --- /dev/null +++ b/src/main/resources/solr_config/Test_Sigmah/conf/lang/stopwords_no.txt @@ -0,0 +1,194 @@ + | From svn.tartarus.org/snowball/trunk/website/algorithms/norwegian/stop.txt + | This file is distributed under the BSD License. + | See http://snowball.tartarus.org/license.php + | Also see http://www.opensource.org/licenses/bsd-license.html + | - Encoding was converted to UTF-8. + | - This notice was added. + | + | NOTE: To use this file with StopFilterFactory, you must specify format="snowball" + + | A Norwegian stop word list. Comments begin with vertical bar. Each stop + | word is at the start of a line. + + | This stop word list is for the dominant bokmål dialect. Words unique + | to nynorsk are marked *. + + | Revised by Jan Bruusgaard , Jan 2005 + +og | and +i | in +jeg | I +det | it/this/that +at | to (w. inf.) +en | a/an +et | a/an +den | it/this/that +til | to +er | is/am/are +som | who/that +på | on +de | they / you(formal) +med | with +han | he +av | of +ikke | not +ikkje | not * +der | there +så | so +var | was/were +meg | me +seg | you +men | but +ett | one +har | have +om | about +vi | we +min | my +mitt | my +ha | have +hadde | had +hun | she +nå | now +over | over +da | when/as +ved | by/know +fra | from +du | you +ut | out +sin | your +dem | them +oss | us +opp | up +man | you/one +kan | can +hans | his +hvor | where +eller | or +hva | what +skal | shall/must +selv | self (reflective) +sjøl | self (reflective) +her | here +alle | all +vil | will +bli | become +ble | became +blei | became * +blitt | have become +kunne | could +inn | in +når | when +være | be +kom | come +noen | some +noe | some +ville | would +dere | you +som | who/which/that +deres | their/theirs +kun | only/just +ja | yes +etter | after +ned | down +skulle | should +denne | this +for | for/because +deg | you +si | hers/his +sine | hers/his +sitt | hers/his +mot | against +å | to +meget | much +hvorfor | why +dette | this +disse | these/those +uten | without +hvordan | how +ingen | none +din | your +ditt | your +blir | become +samme | same +hvilken | which +hvilke | which (plural) +sånn | such a +inni | inside/within +mellom | between +vår | our +hver | each +hvem | who +vors | us/ours +hvis | whose +både | both +bare | only/just +enn | than +fordi | as/because +før | before +mange | many +også | also +slik | just +vært | been +være | to be +båe | both * +begge | both +siden | since +dykk | your * +dykkar | yours * +dei | they * +deira | them * +deires | theirs * +deim | them * +di | your (fem.) * +då | as/when * +eg | I * +ein | a/an * +eit | a/an * +eitt | a/an * +elles | or * +honom | he * +hjå | at * +ho | she * +hoe | she * +henne | her +hennar | her/hers +hennes | hers +hoss | how * +hossen | how * +ikkje | not * +ingi | noone * +inkje | noone * +korleis | how * +korso | how * +kva | what/which * +kvar | where * +kvarhelst | where * +kven | who/whom * +kvi | why * +kvifor | why * +me | we * +medan | while * +mi | my * +mine | my * +mykje | much * +no | now * +nokon | some (masc./neut.) * +noka | some (fem.) * +nokor | some * +noko | some * +nokre | some * +si | his/hers * +sia | since * +sidan | since * +so | so * +somt | some * +somme | some * +um | about* +upp | up * +vere | be * +vore | was * +verte | become * +vort | become * +varte | became * +vart | became * + diff --git a/src/main/resources/solr_config/Test_Sigmah/conf/lang/stopwords_pt.txt b/src/main/resources/solr_config/Test_Sigmah/conf/lang/stopwords_pt.txt new file mode 100644 index 000000000..acfeb01af --- /dev/null +++ b/src/main/resources/solr_config/Test_Sigmah/conf/lang/stopwords_pt.txt @@ -0,0 +1,253 @@ + | From svn.tartarus.org/snowball/trunk/website/algorithms/portuguese/stop.txt + | This file is distributed under the BSD License. + | See http://snowball.tartarus.org/license.php + | Also see http://www.opensource.org/licenses/bsd-license.html + | - Encoding was converted to UTF-8. + | - This notice was added. + | + | NOTE: To use this file with StopFilterFactory, you must specify format="snowball" + + | A Portuguese stop word list. Comments begin with vertical bar. Each stop + | word is at the start of a line. + + + | The following is a ranked list (commonest to rarest) of stopwords + | deriving from a large sample of text. + + | Extra words have been added at the end. + +de | of, from +a | the; to, at; her +o | the; him +que | who, that +e | and +do | de + o +da | de + a +em | in +um | a +para | for + | é from SER +com | with +não | not, no +uma | a +os | the; them +no | em + o +se | himself etc +na | em + a +por | for +mais | more +as | the; them +dos | de + os +como | as, like +mas | but + | foi from SER +ao | a + o +ele | he +das | de + as + | tem from TER +à | a + a +seu | his +sua | her +ou | or + | ser from SER +quando | when +muito | much + | há from HAV +nos | em + os; us +já | already, now + | está from EST +eu | I +também | also +só | only, just +pelo | per + o +pela | per + a +até | up to +isso | that +ela | he +entre | between + | era from SER +depois | after +sem | without +mesmo | same +aos | a + os + | ter from TER +seus | his +quem | whom +nas | em + as +me | me +esse | that +eles | they + | estão from EST +você | you + | tinha from TER + | foram from SER +essa | that +num | em + um +nem | nor +suas | her +meu | my +às | a + as +minha | my + | têm from TER +numa | em + uma +pelos | per + os +elas | they + | havia from HAV + | seja from SER +qual | which + | será from SER +nós | we + | tenho from TER +lhe | to him, her +deles | of them +essas | those +esses | those +pelas | per + as +este | this + | fosse from SER +dele | of him + + | other words. There are many contractions such as naquele = em+aquele, + | mo = me+o, but they are rare. + | Indefinite article plural forms are also rare. + +tu | thou +te | thee +vocês | you (plural) +vos | you +lhes | to them +meus | my +minhas +teu | thy +tua +teus +tuas +nosso | our +nossa +nossos +nossas + +dela | of her +delas | of them + +esta | this +estes | these +estas | these +aquele | that +aquela | that +aqueles | those +aquelas | those +isto | this +aquilo | that + + | forms of estar, to be (not including the infinitive): +estou +está +estamos +estão +estive +esteve +estivemos +estiveram +estava +estávamos +estavam +estivera +estivéramos +esteja +estejamos +estejam +estivesse +estivéssemos +estivessem +estiver +estivermos +estiverem + + | forms of haver, to have (not including the infinitive): +hei +há +havemos +hão +houve +houvemos +houveram +houvera +houvéramos +haja +hajamos +hajam +houvesse +houvéssemos +houvessem +houver +houvermos +houverem +houverei +houverá +houveremos +houverão +houveria +houveríamos +houveriam + + | forms of ser, to be (not including the infinitive): +sou +somos +são +era +éramos +eram +fui +foi +fomos +foram +fora +fôramos +seja +sejamos +sejam +fosse +fôssemos +fossem +for +formos +forem +serei +será +seremos +serão +seria +seríamos +seriam + + | forms of ter, to have (not including the infinitive): +tenho +tem +temos +tém +tinha +tínhamos +tinham +tive +teve +tivemos +tiveram +tivera +tivéramos +tenha +tenhamos +tenham +tivesse +tivéssemos +tivessem +tiver +tivermos +tiverem +terei +terá +teremos +terão +teria +teríamos +teriam diff --git a/src/main/resources/solr_config/Test_Sigmah/conf/lang/stopwords_ro.txt b/src/main/resources/solr_config/Test_Sigmah/conf/lang/stopwords_ro.txt new file mode 100644 index 000000000..4fdee90a5 --- /dev/null +++ b/src/main/resources/solr_config/Test_Sigmah/conf/lang/stopwords_ro.txt @@ -0,0 +1,233 @@ +# This file was created by Jacques Savoy and is distributed under the BSD license. +# See http://members.unine.ch/jacques.savoy/clef/index.html. +# Also see http://www.opensource.org/licenses/bsd-license.html +acea +aceasta +această +aceea +acei +aceia +acel +acela +acele +acelea +acest +acesta +aceste +acestea +aceşti +aceştia +acolo +acum +ai +aia +aibă +aici +al +ăla +ale +alea +ălea +altceva +altcineva +am +ar +are +aş +aşadar +asemenea +asta +ăsta +astăzi +astea +ăstea +ăştia +asupra +aţi +au +avea +avem +aveţi +azi +bine +bucur +bună +ca +că +căci +când +care +cărei +căror +cărui +cât +câte +câţi +către +câtva +ce +cel +ceva +chiar +cînd +cine +cineva +cît +cîte +cîţi +cîtva +contra +cu +cum +cumva +curând +curînd +da +dă +dacă +dar +datorită +de +deci +deja +deoarece +departe +deşi +din +dinaintea +dintr +dintre +drept +după +ea +ei +el +ele +eram +este +eşti +eu +face +fără +fi +fie +fiecare +fii +fim +fiţi +iar +ieri +îi +îl +îmi +împotriva +în +înainte +înaintea +încât +încît +încotro +între +întrucât +întrucît +îţi +la +lângă +le +li +lîngă +lor +lui +mă +mâine +mea +mei +mele +mereu +meu +mi +mine +mult +multă +mulţi +ne +nicăieri +nici +nimeni +nişte +noastră +noastre +noi +noştri +nostru +nu +ori +oricând +oricare +oricât +orice +oricînd +oricine +oricît +oricum +oriunde +până +pe +pentru +peste +pînă +poate +pot +prea +prima +primul +prin +printr +sa +să +săi +sale +sau +său +se +şi +sînt +sîntem +sînteţi +spre +sub +sunt +suntem +sunteţi +ta +tăi +tale +tău +te +ţi +ţie +tine +toată +toate +tot +toţi +totuşi +tu +un +una +unde +undeva +unei +unele +uneori +unor +vă +vi +voastră +voastre +voi +voştri +vostru +vouă +vreo +vreun diff --git a/src/main/resources/solr_config/Test_Sigmah/conf/lang/stopwords_ru.txt b/src/main/resources/solr_config/Test_Sigmah/conf/lang/stopwords_ru.txt new file mode 100644 index 000000000..55271400c --- /dev/null +++ b/src/main/resources/solr_config/Test_Sigmah/conf/lang/stopwords_ru.txt @@ -0,0 +1,243 @@ + | From svn.tartarus.org/snowball/trunk/website/algorithms/russian/stop.txt + | This file is distributed under the BSD License. + | See http://snowball.tartarus.org/license.php + | Also see http://www.opensource.org/licenses/bsd-license.html + | - Encoding was converted to UTF-8. + | - This notice was added. + | + | NOTE: To use this file with StopFilterFactory, you must specify format="snowball" + + | a russian stop word list. comments begin with vertical bar. each stop + | word is at the start of a line. + + | this is a ranked list (commonest to rarest) of stopwords derived from + | a large text sample. + + | letter `ё' is translated to `е'. + +и | and +в | in/into +во | alternative form +не | not +что | what/that +он | he +на | on/onto +я | i +с | from +со | alternative form +как | how +а | milder form of `no' (but) +то | conjunction and form of `that' +все | all +она | she +так | so, thus +его | him +но | but +да | yes/and +ты | thou +к | towards, by +у | around, chez +же | intensifier particle +вы | you +за | beyond, behind +бы | conditional/subj. particle +по | up to, along +только | only +ее | her +мне | to me +было | it was +вот | here is/are, particle +от | away from +меня | me +еще | still, yet, more +нет | no, there isnt/arent +о | about +из | out of +ему | to him +теперь | now +когда | when +даже | even +ну | so, well +вдруг | suddenly +ли | interrogative particle +если | if +уже | already, but homonym of `narrower' +или | or +ни | neither +быть | to be +был | he was +него | prepositional form of его +до | up to +вас | you accusative +нибудь | indef. suffix preceded by hyphen +опять | again +уж | already, but homonym of `adder' +вам | to you +сказал | he said +ведь | particle `after all' +там | there +потом | then +себя | oneself +ничего | nothing +ей | to her +может | usually with `быть' as `maybe' +они | they +тут | here +где | where +есть | there is/are +надо | got to, must +ней | prepositional form of ей +для | for +мы | we +тебя | thee +их | them, their +чем | than +была | she was +сам | self +чтоб | in order to +без | without +будто | as if +человек | man, person, one +чего | genitive form of `what' +раз | once +тоже | also +себе | to oneself +под | beneath +жизнь | life +будет | will be +ж | short form of intensifer particle `же' +тогда | then +кто | who +этот | this +говорил | was saying +того | genitive form of `that' +потому | for that reason +этого | genitive form of `this' +какой | which +совсем | altogether +ним | prepositional form of `его', `они' +здесь | here +этом | prepositional form of `этот' +один | one +почти | almost +мой | my +тем | instrumental/dative plural of `тот', `то' +чтобы | full form of `in order that' +нее | her (acc.) +кажется | it seems +сейчас | now +были | they were +куда | where to +зачем | why +сказать | to say +всех | all (acc., gen. preposn. plural) +никогда | never +сегодня | today +можно | possible, one can +при | by +наконец | finally +два | two +об | alternative form of `о', about +другой | another +хоть | even +после | after +над | above +больше | more +тот | that one (masc.) +через | across, in +эти | these +нас | us +про | about +всего | in all, only, of all +них | prepositional form of `они' (they) +какая | which, feminine +много | lots +разве | interrogative particle +сказала | she said +три | three +эту | this, acc. fem. sing. +моя | my, feminine +впрочем | moreover, besides +хорошо | good +свою | ones own, acc. fem. sing. +этой | oblique form of `эта', fem. `this' +перед | in front of +иногда | sometimes +лучше | better +чуть | a little +том | preposn. form of `that one' +нельзя | one must not +такой | such a one +им | to them +более | more +всегда | always +конечно | of course +всю | acc. fem. sing of `all' +между | between + + + | b: some paradigms + | + | personal pronouns + | + | я меня мне мной [мною] + | ты тебя тебе тобой [тобою] + | он его ему им [него, нему, ним] + | она ее эи ею [нее, нэи, нею] + | оно его ему им [него, нему, ним] + | + | мы нас нам нами + | вы вас вам вами + | они их им ими [них, ним, ними] + | + | себя себе собой [собою] + | + | demonstrative pronouns: этот (this), тот (that) + | + | этот эта это эти + | этого эты это эти + | этого этой этого этих + | этому этой этому этим + | этим этой этим [этою] этими + | этом этой этом этих + | + | тот та то те + | того ту то те + | того той того тех + | тому той тому тем + | тем той тем [тою] теми + | том той том тех + | + | determinative pronouns + | + | (a) весь (all) + | + | весь вся все все + | всего всю все все + | всего всей всего всех + | всему всей всему всем + | всем всей всем [всею] всеми + | всем всей всем всех + | + | (b) сам (himself etc) + | + | сам сама само сами + | самого саму само самих + | самого самой самого самих + | самому самой самому самим + | самим самой самим [самою] самими + | самом самой самом самих + | + | stems of verbs `to be', `to have', `to do' and modal + | + | быть бы буд быв есть суть + | име + | дел + | мог мож мочь + | уме + | хоч хот + | долж + | можн + | нужн + | нельзя + diff --git a/src/main/resources/solr_config/Test_Sigmah/conf/lang/stopwords_sv.txt b/src/main/resources/solr_config/Test_Sigmah/conf/lang/stopwords_sv.txt new file mode 100644 index 000000000..096f87f67 --- /dev/null +++ b/src/main/resources/solr_config/Test_Sigmah/conf/lang/stopwords_sv.txt @@ -0,0 +1,133 @@ + | From svn.tartarus.org/snowball/trunk/website/algorithms/swedish/stop.txt + | This file is distributed under the BSD License. + | See http://snowball.tartarus.org/license.php + | Also see http://www.opensource.org/licenses/bsd-license.html + | - Encoding was converted to UTF-8. + | - This notice was added. + | + | NOTE: To use this file with StopFilterFactory, you must specify format="snowball" + + | A Swedish stop word list. Comments begin with vertical bar. Each stop + | word is at the start of a line. + + | This is a ranked list (commonest to rarest) of stopwords derived from + | a large text sample. + + | Swedish stop words occasionally exhibit homonym clashes. For example + | så = so, but also seed. These are indicated clearly below. + +och | and +det | it, this/that +att | to (with infinitive) +i | in, at +en | a +jag | I +hon | she +som | who, that +han | he +på | on +den | it, this/that +med | with +var | where, each +sig | him(self) etc +för | for +så | so (also: seed) +till | to +är | is +men | but +ett | a +om | if; around, about +hade | had +de | they, these/those +av | of +icke | not, no +mig | me +du | you +henne | her +då | then, when +sin | his +nu | now +har | have +inte | inte någon = no one +hans | his +honom | him +skulle | 'sake' +hennes | her +där | there +min | my +man | one (pronoun) +ej | nor +vid | at, by, on (also: vast) +kunde | could +något | some etc +från | from, off +ut | out +när | when +efter | after, behind +upp | up +vi | we +dem | them +vara | be +vad | what +över | over +än | than +dig | you +kan | can +sina | his +här | here +ha | have +mot | towards +alla | all +under | under (also: wonder) +någon | some etc +eller | or (else) +allt | all +mycket | much +sedan | since +ju | why +denna | this/that +själv | myself, yourself etc +detta | this/that +åt | to +utan | without +varit | was +hur | how +ingen | no +mitt | my +ni | you +bli | to be, become +blev | from bli +oss | us +din | thy +dessa | these/those +några | some etc +deras | their +blir | from bli +mina | my +samma | (the) same +vilken | who, that +er | you, your +sådan | such a +vår | our +blivit | from bli +dess | its +inom | within +mellan | between +sådant | such a +varför | why +varje | each +vilka | who, that +ditt | thy +vem | who +vilket | who, that +sitta | his +sådana | such a +vart | each +dina | thy +vars | whose +vårt | our +våra | our +ert | your +era | your +vilkas | whose + diff --git a/src/main/resources/solr_config/Test_Sigmah/conf/lang/stopwords_th.txt b/src/main/resources/solr_config/Test_Sigmah/conf/lang/stopwords_th.txt new file mode 100644 index 000000000..07f0fabe6 --- /dev/null +++ b/src/main/resources/solr_config/Test_Sigmah/conf/lang/stopwords_th.txt @@ -0,0 +1,119 @@ +# Thai stopwords from: +# "Opinion Detection in Thai Political News Columns +# Based on Subjectivity Analysis" +# Khampol Sukhum, Supot Nitsuwat, and Choochart Haruechaiyasak +ไว้ +ไม่ +ไป +ได้ +ให้ +ใน +โดย +แห่ง +แล้ว +และ +แรก +แบบ +แต่ +เอง +เห็น +เลย +เริ่ม +เรา +เมื่อ +เพื่อ +เพราะ +เป็นการ +เป็น +เปิดเผย +เปิด +เนื่องจาก +เดียวกัน +เดียว +เช่น +เฉพาะ +เคย +เข้า +เขา +อีก +อาจ +อะไร +ออก +อย่าง +อยู่ +อยาก +หาก +หลาย +หลังจาก +หลัง +หรือ +หนึ่ง +ส่วน +ส่ง +สุด +สําหรับ +ว่า +วัน +ลง +ร่วม +ราย +รับ +ระหว่าง +รวม +ยัง +มี +มาก +มา +พร้อม +พบ +ผ่าน +ผล +บาง +น่า +นี้ +นํา +นั้น +นัก +นอกจาก +ทุก +ที่สุด +ที่ +ทําให้ +ทํา +ทาง +ทั้งนี้ +ทั้ง +ถ้า +ถูก +ถึง +ต้อง +ต่างๆ +ต่าง +ต่อ +ตาม +ตั้งแต่ +ตั้ง +ด้าน +ด้วย +ดัง +ซึ่ง +ช่วง +จึง +จาก +จัด +จะ +คือ +ความ +ครั้ง +คง +ขึ้น +ของ +ขอ +ขณะ +ก่อน +ก็ +การ +กับ +กัน +กว่า +กล่าว diff --git a/src/main/resources/solr_config/Test_Sigmah/conf/lang/stopwords_tr.txt b/src/main/resources/solr_config/Test_Sigmah/conf/lang/stopwords_tr.txt new file mode 100644 index 000000000..84d9408d4 --- /dev/null +++ b/src/main/resources/solr_config/Test_Sigmah/conf/lang/stopwords_tr.txt @@ -0,0 +1,212 @@ +# Turkish stopwords from LUCENE-559 +# merged with the list from "Information Retrieval on Turkish Texts" +# (http://www.users.muohio.edu/canf/papers/JASIST2008offPrint.pdf) +acaba +altmış +altı +ama +ancak +arada +aslında +ayrıca +bana +bazı +belki +ben +benden +beni +benim +beri +beş +bile +bin +bir +birçok +biri +birkaç +birkez +birşey +birşeyi +biz +bize +bizden +bizi +bizim +böyle +böylece +bu +buna +bunda +bundan +bunlar +bunları +bunların +bunu +bunun +burada +çok +çünkü +da +daha +dahi +de +defa +değil +diğer +diye +doksan +dokuz +dolayı +dolayısıyla +dört +edecek +eden +ederek +edilecek +ediliyor +edilmesi +ediyor +eğer +elli +en +etmesi +etti +ettiği +ettiğini +gibi +göre +halen +hangi +hatta +hem +henüz +hep +hepsi +her +herhangi +herkesin +hiç +hiçbir +için +iki +ile +ilgili +ise +işte +itibaren +itibariyle +kadar +karşın +katrilyon +kendi +kendilerine +kendini +kendisi +kendisine +kendisini +kez +ki +kim +kimden +kime +kimi +kimse +kırk +milyar +milyon +mu +mü +mı +nasıl +ne +neden +nedenle +nerde +nerede +nereye +niye +niçin +o +olan +olarak +oldu +olduğu +olduğunu +olduklarını +olmadı +olmadığı +olmak +olması +olmayan +olmaz +olsa +olsun +olup +olur +olursa +oluyor +on +ona +ondan +onlar +onlardan +onları +onların +onu +onun +otuz +oysa +öyle +pek +rağmen +sadece +sanki +sekiz +seksen +sen +senden +seni +senin +siz +sizden +sizi +sizin +şey +şeyden +şeyi +şeyler +şöyle +şu +şuna +şunda +şundan +şunları +şunu +tarafından +trilyon +tüm +üç +üzere +var +vardı +ve +veya +ya +yani +yapacak +yapılan +yapılması +yapıyor +yapmak +yaptı +yaptığı +yaptığını +yaptıkları +yedi +yerine +yetmiş +yine +yirmi +yoksa +yüz +zaten diff --git a/src/main/resources/solr_config/Test_Sigmah/conf/lang/userdict_ja.txt b/src/main/resources/solr_config/Test_Sigmah/conf/lang/userdict_ja.txt new file mode 100644 index 000000000..6f0368e4d --- /dev/null +++ b/src/main/resources/solr_config/Test_Sigmah/conf/lang/userdict_ja.txt @@ -0,0 +1,29 @@ +# +# This is a sample user dictionary for Kuromoji (JapaneseTokenizer) +# +# Add entries to this file in order to override the statistical model in terms +# of segmentation, readings and part-of-speech tags. Notice that entries do +# not have weights since they are always used when found. This is by-design +# in order to maximize ease-of-use. +# +# Entries are defined using the following CSV format: +# , ... , ... , +# +# Notice that a single half-width space separates tokens and readings, and +# that the number tokens and readings must match exactly. +# +# Also notice that multiple entries with the same is undefined. +# +# Whitespace only lines are ignored. Comments are not allowed on entry lines. +# + +# Custom segmentation for kanji compounds +日本経済新聞,日本 経済 新聞,ニホン ケイザイ シンブン,カスタム名詞 +関西国際空港,関西 国際 空港,カンサイ コクサイ クウコウ,カスタム名詞 + +# Custom segmentation for compound katakana +トートバッグ,トート バッグ,トート バッグ,かずカナ名詞 +ショルダーバッグ,ショルダー バッグ,ショルダー バッグ,かずカナ名詞 + +# Custom reading for former sumo wrestler +朝青龍,朝青龍,アサショウリュウ,カスタム人名 diff --git a/src/main/resources/solr_config/Test_Sigmah/conf/mapping-FoldToASCII.txt b/src/main/resources/solr_config/Test_Sigmah/conf/mapping-FoldToASCII.txt new file mode 100644 index 000000000..9a84b6eac --- /dev/null +++ b/src/main/resources/solr_config/Test_Sigmah/conf/mapping-FoldToASCII.txt @@ -0,0 +1,3813 @@ +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + + +# This map converts alphabetic, numeric, and symbolic Unicode characters +# which are not in the first 127 ASCII characters (the "Basic Latin" Unicode +# block) into their ASCII equivalents, if one exists. +# +# Characters from the following Unicode blocks are converted; however, only +# those characters with reasonable ASCII alternatives are converted: +# +# - C1 Controls and Latin-1 Supplement: http://www.unicode.org/charts/PDF/U0080.pdf +# - Latin Extended-A: http://www.unicode.org/charts/PDF/U0100.pdf +# - Latin Extended-B: http://www.unicode.org/charts/PDF/U0180.pdf +# - Latin Extended Additional: http://www.unicode.org/charts/PDF/U1E00.pdf +# - Latin Extended-C: http://www.unicode.org/charts/PDF/U2C60.pdf +# - Latin Extended-D: http://www.unicode.org/charts/PDF/UA720.pdf +# - IPA Extensions: http://www.unicode.org/charts/PDF/U0250.pdf +# - Phonetic Extensions: http://www.unicode.org/charts/PDF/U1D00.pdf +# - Phonetic Extensions Supplement: http://www.unicode.org/charts/PDF/U1D80.pdf +# - General Punctuation: http://www.unicode.org/charts/PDF/U2000.pdf +# - Superscripts and Subscripts: http://www.unicode.org/charts/PDF/U2070.pdf +# - Enclosed Alphanumerics: http://www.unicode.org/charts/PDF/U2460.pdf +# - Dingbats: http://www.unicode.org/charts/PDF/U2700.pdf +# - Supplemental Punctuation: http://www.unicode.org/charts/PDF/U2E00.pdf +# - Alphabetic Presentation Forms: http://www.unicode.org/charts/PDF/UFB00.pdf +# - Halfwidth and Fullwidth Forms: http://www.unicode.org/charts/PDF/UFF00.pdf +# +# See: http://en.wikipedia.org/wiki/Latin_characters_in_Unicode +# +# The set of character conversions supported by this map is a superset of +# those supported by the map represented by mapping-ISOLatin1Accent.txt. +# +# See the bottom of this file for the Perl script used to generate the contents +# of this file (without this header) from ASCIIFoldingFilter.java. + + +# Syntax: +# "source" => "target" +# "source".length() > 0 (source cannot be empty.) +# "target".length() >= 0 (target can be empty.) + + +# À [LATIN CAPITAL LETTER A WITH GRAVE] +"\u00C0" => "A" + +# Á [LATIN CAPITAL LETTER A WITH ACUTE] +"\u00C1" => "A" + +#  [LATIN CAPITAL LETTER A WITH CIRCUMFLEX] +"\u00C2" => "A" + +# à [LATIN CAPITAL LETTER A WITH TILDE] +"\u00C3" => "A" + +# Ä [LATIN CAPITAL LETTER A WITH DIAERESIS] +"\u00C4" => "A" + +# Å [LATIN CAPITAL LETTER A WITH RING ABOVE] +"\u00C5" => "A" + +# Ā [LATIN CAPITAL LETTER A WITH MACRON] +"\u0100" => "A" + +# Ă [LATIN CAPITAL LETTER A WITH BREVE] +"\u0102" => "A" + +# Ą [LATIN CAPITAL LETTER A WITH OGONEK] +"\u0104" => "A" + +# Ə http://en.wikipedia.org/wiki/Schwa [LATIN CAPITAL LETTER SCHWA] +"\u018F" => "A" + +# Ǎ [LATIN CAPITAL LETTER A WITH CARON] +"\u01CD" => "A" + +# Ǟ [LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON] +"\u01DE" => "A" + +# Ǡ [LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON] +"\u01E0" => "A" + +# Ǻ [LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE] +"\u01FA" => "A" + +# Ȁ [LATIN CAPITAL LETTER A WITH DOUBLE GRAVE] +"\u0200" => "A" + +# Ȃ [LATIN CAPITAL LETTER A WITH INVERTED BREVE] +"\u0202" => "A" + +# Ȧ [LATIN CAPITAL LETTER A WITH DOT ABOVE] +"\u0226" => "A" + +# Ⱥ [LATIN CAPITAL LETTER A WITH STROKE] +"\u023A" => "A" + +# ᴀ [LATIN LETTER SMALL CAPITAL A] +"\u1D00" => "A" + +# Ḁ [LATIN CAPITAL LETTER A WITH RING BELOW] +"\u1E00" => "A" + +# Ạ [LATIN CAPITAL LETTER A WITH DOT BELOW] +"\u1EA0" => "A" + +# Ả [LATIN CAPITAL LETTER A WITH HOOK ABOVE] +"\u1EA2" => "A" + +# Ấ [LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE] +"\u1EA4" => "A" + +# Ầ [LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE] +"\u1EA6" => "A" + +# Ẩ [LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE] +"\u1EA8" => "A" + +# Ẫ [LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE] +"\u1EAA" => "A" + +# Ậ [LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW] +"\u1EAC" => "A" + +# Ắ [LATIN CAPITAL LETTER A WITH BREVE AND ACUTE] +"\u1EAE" => "A" + +# Ằ [LATIN CAPITAL LETTER A WITH BREVE AND GRAVE] +"\u1EB0" => "A" + +# Ẳ [LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE] +"\u1EB2" => "A" + +# Ẵ [LATIN CAPITAL LETTER A WITH BREVE AND TILDE] +"\u1EB4" => "A" + +# Ặ [LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW] +"\u1EB6" => "A" + +# Ⓐ [CIRCLED LATIN CAPITAL LETTER A] +"\u24B6" => "A" + +# A [FULLWIDTH LATIN CAPITAL LETTER A] +"\uFF21" => "A" + +# à [LATIN SMALL LETTER A WITH GRAVE] +"\u00E0" => "a" + +# á [LATIN SMALL LETTER A WITH ACUTE] +"\u00E1" => "a" + +# â [LATIN SMALL LETTER A WITH CIRCUMFLEX] +"\u00E2" => "a" + +# ã [LATIN SMALL LETTER A WITH TILDE] +"\u00E3" => "a" + +# ä [LATIN SMALL LETTER A WITH DIAERESIS] +"\u00E4" => "a" + +# å [LATIN SMALL LETTER A WITH RING ABOVE] +"\u00E5" => "a" + +# ā [LATIN SMALL LETTER A WITH MACRON] +"\u0101" => "a" + +# ă [LATIN SMALL LETTER A WITH BREVE] +"\u0103" => "a" + +# ą [LATIN SMALL LETTER A WITH OGONEK] +"\u0105" => "a" + +# ǎ [LATIN SMALL LETTER A WITH CARON] +"\u01CE" => "a" + +# ǟ [LATIN SMALL LETTER A WITH DIAERESIS AND MACRON] +"\u01DF" => "a" + +# ǡ [LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON] +"\u01E1" => "a" + +# ǻ [LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE] +"\u01FB" => "a" + +# ȁ [LATIN SMALL LETTER A WITH DOUBLE GRAVE] +"\u0201" => "a" + +# ȃ [LATIN SMALL LETTER A WITH INVERTED BREVE] +"\u0203" => "a" + +# ȧ [LATIN SMALL LETTER A WITH DOT ABOVE] +"\u0227" => "a" + +# ɐ [LATIN SMALL LETTER TURNED A] +"\u0250" => "a" + +# ə [LATIN SMALL LETTER SCHWA] +"\u0259" => "a" + +# ɚ [LATIN SMALL LETTER SCHWA WITH HOOK] +"\u025A" => "a" + +# ᶏ [LATIN SMALL LETTER A WITH RETROFLEX HOOK] +"\u1D8F" => "a" + +# ᶕ [LATIN SMALL LETTER SCHWA WITH RETROFLEX HOOK] +"\u1D95" => "a" + +# ạ [LATIN SMALL LETTER A WITH RING BELOW] +"\u1E01" => "a" + +# ả [LATIN SMALL LETTER A WITH RIGHT HALF RING] +"\u1E9A" => "a" + +# ạ [LATIN SMALL LETTER A WITH DOT BELOW] +"\u1EA1" => "a" + +# ả [LATIN SMALL LETTER A WITH HOOK ABOVE] +"\u1EA3" => "a" + +# ấ [LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE] +"\u1EA5" => "a" + +# ầ [LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE] +"\u1EA7" => "a" + +# ẩ [LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE] +"\u1EA9" => "a" + +# ẫ [LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE] +"\u1EAB" => "a" + +# ậ [LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW] +"\u1EAD" => "a" + +# ắ [LATIN SMALL LETTER A WITH BREVE AND ACUTE] +"\u1EAF" => "a" + +# ằ [LATIN SMALL LETTER A WITH BREVE AND GRAVE] +"\u1EB1" => "a" + +# ẳ [LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE] +"\u1EB3" => "a" + +# ẵ [LATIN SMALL LETTER A WITH BREVE AND TILDE] +"\u1EB5" => "a" + +# ặ [LATIN SMALL LETTER A WITH BREVE AND DOT BELOW] +"\u1EB7" => "a" + +# ₐ [LATIN SUBSCRIPT SMALL LETTER A] +"\u2090" => "a" + +# ₔ [LATIN SUBSCRIPT SMALL LETTER SCHWA] +"\u2094" => "a" + +# ⓐ [CIRCLED LATIN SMALL LETTER A] +"\u24D0" => "a" + +# ⱥ [LATIN SMALL LETTER A WITH STROKE] +"\u2C65" => "a" + +# Ɐ [LATIN CAPITAL LETTER TURNED A] +"\u2C6F" => "a" + +# a [FULLWIDTH LATIN SMALL LETTER A] +"\uFF41" => "a" + +# Ꜳ [LATIN CAPITAL LETTER AA] +"\uA732" => "AA" + +# Æ [LATIN CAPITAL LETTER AE] +"\u00C6" => "AE" + +# Ǣ [LATIN CAPITAL LETTER AE WITH MACRON] +"\u01E2" => "AE" + +# Ǽ [LATIN CAPITAL LETTER AE WITH ACUTE] +"\u01FC" => "AE" + +# ᴁ [LATIN LETTER SMALL CAPITAL AE] +"\u1D01" => "AE" + +# Ꜵ [LATIN CAPITAL LETTER AO] +"\uA734" => "AO" + +# Ꜷ [LATIN CAPITAL LETTER AU] +"\uA736" => "AU" + +# Ꜹ [LATIN CAPITAL LETTER AV] +"\uA738" => "AV" + +# Ꜻ [LATIN CAPITAL LETTER AV WITH HORIZONTAL BAR] +"\uA73A" => "AV" + +# Ꜽ [LATIN CAPITAL LETTER AY] +"\uA73C" => "AY" + +# ⒜ [PARENTHESIZED LATIN SMALL LETTER A] +"\u249C" => "(a)" + +# ꜳ [LATIN SMALL LETTER AA] +"\uA733" => "aa" + +# æ [LATIN SMALL LETTER AE] +"\u00E6" => "ae" + +# ǣ [LATIN SMALL LETTER AE WITH MACRON] +"\u01E3" => "ae" + +# ǽ [LATIN SMALL LETTER AE WITH ACUTE] +"\u01FD" => "ae" + +# ᴂ [LATIN SMALL LETTER TURNED AE] +"\u1D02" => "ae" + +# ꜵ [LATIN SMALL LETTER AO] +"\uA735" => "ao" + +# ꜷ [LATIN SMALL LETTER AU] +"\uA737" => "au" + +# ꜹ [LATIN SMALL LETTER AV] +"\uA739" => "av" + +# ꜻ [LATIN SMALL LETTER AV WITH HORIZONTAL BAR] +"\uA73B" => "av" + +# ꜽ [LATIN SMALL LETTER AY] +"\uA73D" => "ay" + +# Ɓ [LATIN CAPITAL LETTER B WITH HOOK] +"\u0181" => "B" + +# Ƃ [LATIN CAPITAL LETTER B WITH TOPBAR] +"\u0182" => "B" + +# Ƀ [LATIN CAPITAL LETTER B WITH STROKE] +"\u0243" => "B" + +# ʙ [LATIN LETTER SMALL CAPITAL B] +"\u0299" => "B" + +# ᴃ [LATIN LETTER SMALL CAPITAL BARRED B] +"\u1D03" => "B" + +# Ḃ [LATIN CAPITAL LETTER B WITH DOT ABOVE] +"\u1E02" => "B" + +# Ḅ [LATIN CAPITAL LETTER B WITH DOT BELOW] +"\u1E04" => "B" + +# Ḇ [LATIN CAPITAL LETTER B WITH LINE BELOW] +"\u1E06" => "B" + +# Ⓑ [CIRCLED LATIN CAPITAL LETTER B] +"\u24B7" => "B" + +# B [FULLWIDTH LATIN CAPITAL LETTER B] +"\uFF22" => "B" + +# ƀ [LATIN SMALL LETTER B WITH STROKE] +"\u0180" => "b" + +# ƃ [LATIN SMALL LETTER B WITH TOPBAR] +"\u0183" => "b" + +# ɓ [LATIN SMALL LETTER B WITH HOOK] +"\u0253" => "b" + +# ᵬ [LATIN SMALL LETTER B WITH MIDDLE TILDE] +"\u1D6C" => "b" + +# ᶀ [LATIN SMALL LETTER B WITH PALATAL HOOK] +"\u1D80" => "b" + +# ḃ [LATIN SMALL LETTER B WITH DOT ABOVE] +"\u1E03" => "b" + +# ḅ [LATIN SMALL LETTER B WITH DOT BELOW] +"\u1E05" => "b" + +# ḇ [LATIN SMALL LETTER B WITH LINE BELOW] +"\u1E07" => "b" + +# ⓑ [CIRCLED LATIN SMALL LETTER B] +"\u24D1" => "b" + +# b [FULLWIDTH LATIN SMALL LETTER B] +"\uFF42" => "b" + +# ⒝ [PARENTHESIZED LATIN SMALL LETTER B] +"\u249D" => "(b)" + +# Ç [LATIN CAPITAL LETTER C WITH CEDILLA] +"\u00C7" => "C" + +# Ć [LATIN CAPITAL LETTER C WITH ACUTE] +"\u0106" => "C" + +# Ĉ [LATIN CAPITAL LETTER C WITH CIRCUMFLEX] +"\u0108" => "C" + +# Ċ [LATIN CAPITAL LETTER C WITH DOT ABOVE] +"\u010A" => "C" + +# Č [LATIN CAPITAL LETTER C WITH CARON] +"\u010C" => "C" + +# Ƈ [LATIN CAPITAL LETTER C WITH HOOK] +"\u0187" => "C" + +# Ȼ [LATIN CAPITAL LETTER C WITH STROKE] +"\u023B" => "C" + +# ʗ [LATIN LETTER STRETCHED C] +"\u0297" => "C" + +# ᴄ [LATIN LETTER SMALL CAPITAL C] +"\u1D04" => "C" + +# Ḉ [LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE] +"\u1E08" => "C" + +# Ⓒ [CIRCLED LATIN CAPITAL LETTER C] +"\u24B8" => "C" + +# C [FULLWIDTH LATIN CAPITAL LETTER C] +"\uFF23" => "C" + +# ç [LATIN SMALL LETTER C WITH CEDILLA] +"\u00E7" => "c" + +# ć [LATIN SMALL LETTER C WITH ACUTE] +"\u0107" => "c" + +# ĉ [LATIN SMALL LETTER C WITH CIRCUMFLEX] +"\u0109" => "c" + +# ċ [LATIN SMALL LETTER C WITH DOT ABOVE] +"\u010B" => "c" + +# č [LATIN SMALL LETTER C WITH CARON] +"\u010D" => "c" + +# ƈ [LATIN SMALL LETTER C WITH HOOK] +"\u0188" => "c" + +# ȼ [LATIN SMALL LETTER C WITH STROKE] +"\u023C" => "c" + +# ɕ [LATIN SMALL LETTER C WITH CURL] +"\u0255" => "c" + +# ḉ [LATIN SMALL LETTER C WITH CEDILLA AND ACUTE] +"\u1E09" => "c" + +# ↄ [LATIN SMALL LETTER REVERSED C] +"\u2184" => "c" + +# ⓒ [CIRCLED LATIN SMALL LETTER C] +"\u24D2" => "c" + +# Ꜿ [LATIN CAPITAL LETTER REVERSED C WITH DOT] +"\uA73E" => "c" + +# ꜿ [LATIN SMALL LETTER REVERSED C WITH DOT] +"\uA73F" => "c" + +# c [FULLWIDTH LATIN SMALL LETTER C] +"\uFF43" => "c" + +# ⒞ [PARENTHESIZED LATIN SMALL LETTER C] +"\u249E" => "(c)" + +# Ð [LATIN CAPITAL LETTER ETH] +"\u00D0" => "D" + +# Ď [LATIN CAPITAL LETTER D WITH CARON] +"\u010E" => "D" + +# Đ [LATIN CAPITAL LETTER D WITH STROKE] +"\u0110" => "D" + +# Ɖ [LATIN CAPITAL LETTER AFRICAN D] +"\u0189" => "D" + +# Ɗ [LATIN CAPITAL LETTER D WITH HOOK] +"\u018A" => "D" + +# Ƌ [LATIN CAPITAL LETTER D WITH TOPBAR] +"\u018B" => "D" + +# ᴅ [LATIN LETTER SMALL CAPITAL D] +"\u1D05" => "D" + +# ᴆ [LATIN LETTER SMALL CAPITAL ETH] +"\u1D06" => "D" + +# Ḋ [LATIN CAPITAL LETTER D WITH DOT ABOVE] +"\u1E0A" => "D" + +# Ḍ [LATIN CAPITAL LETTER D WITH DOT BELOW] +"\u1E0C" => "D" + +# Ḏ [LATIN CAPITAL LETTER D WITH LINE BELOW] +"\u1E0E" => "D" + +# Ḑ [LATIN CAPITAL LETTER D WITH CEDILLA] +"\u1E10" => "D" + +# Ḓ [LATIN CAPITAL LETTER D WITH CIRCUMFLEX BELOW] +"\u1E12" => "D" + +# Ⓓ [CIRCLED LATIN CAPITAL LETTER D] +"\u24B9" => "D" + +# Ꝺ [LATIN CAPITAL LETTER INSULAR D] +"\uA779" => "D" + +# D [FULLWIDTH LATIN CAPITAL LETTER D] +"\uFF24" => "D" + +# ð [LATIN SMALL LETTER ETH] +"\u00F0" => "d" + +# ď [LATIN SMALL LETTER D WITH CARON] +"\u010F" => "d" + +# đ [LATIN SMALL LETTER D WITH STROKE] +"\u0111" => "d" + +# ƌ [LATIN SMALL LETTER D WITH TOPBAR] +"\u018C" => "d" + +# ȡ [LATIN SMALL LETTER D WITH CURL] +"\u0221" => "d" + +# ɖ [LATIN SMALL LETTER D WITH TAIL] +"\u0256" => "d" + +# ɗ [LATIN SMALL LETTER D WITH HOOK] +"\u0257" => "d" + +# ᵭ [LATIN SMALL LETTER D WITH MIDDLE TILDE] +"\u1D6D" => "d" + +# ᶁ [LATIN SMALL LETTER D WITH PALATAL HOOK] +"\u1D81" => "d" + +# ᶑ [LATIN SMALL LETTER D WITH HOOK AND TAIL] +"\u1D91" => "d" + +# ḋ [LATIN SMALL LETTER D WITH DOT ABOVE] +"\u1E0B" => "d" + +# ḍ [LATIN SMALL LETTER D WITH DOT BELOW] +"\u1E0D" => "d" + +# ḏ [LATIN SMALL LETTER D WITH LINE BELOW] +"\u1E0F" => "d" + +# ḑ [LATIN SMALL LETTER D WITH CEDILLA] +"\u1E11" => "d" + +# ḓ [LATIN SMALL LETTER D WITH CIRCUMFLEX BELOW] +"\u1E13" => "d" + +# ⓓ [CIRCLED LATIN SMALL LETTER D] +"\u24D3" => "d" + +# ꝺ [LATIN SMALL LETTER INSULAR D] +"\uA77A" => "d" + +# d [FULLWIDTH LATIN SMALL LETTER D] +"\uFF44" => "d" + +# DŽ [LATIN CAPITAL LETTER DZ WITH CARON] +"\u01C4" => "DZ" + +# DZ [LATIN CAPITAL LETTER DZ] +"\u01F1" => "DZ" + +# Dž [LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON] +"\u01C5" => "Dz" + +# Dz [LATIN CAPITAL LETTER D WITH SMALL LETTER Z] +"\u01F2" => "Dz" + +# ⒟ [PARENTHESIZED LATIN SMALL LETTER D] +"\u249F" => "(d)" + +# ȸ [LATIN SMALL LETTER DB DIGRAPH] +"\u0238" => "db" + +# dž [LATIN SMALL LETTER DZ WITH CARON] +"\u01C6" => "dz" + +# dz [LATIN SMALL LETTER DZ] +"\u01F3" => "dz" + +# ʣ [LATIN SMALL LETTER DZ DIGRAPH] +"\u02A3" => "dz" + +# ʥ [LATIN SMALL LETTER DZ DIGRAPH WITH CURL] +"\u02A5" => "dz" + +# È [LATIN CAPITAL LETTER E WITH GRAVE] +"\u00C8" => "E" + +# É [LATIN CAPITAL LETTER E WITH ACUTE] +"\u00C9" => "E" + +# Ê [LATIN CAPITAL LETTER E WITH CIRCUMFLEX] +"\u00CA" => "E" + +# Ë [LATIN CAPITAL LETTER E WITH DIAERESIS] +"\u00CB" => "E" + +# Ē [LATIN CAPITAL LETTER E WITH MACRON] +"\u0112" => "E" + +# Ĕ [LATIN CAPITAL LETTER E WITH BREVE] +"\u0114" => "E" + +# Ė [LATIN CAPITAL LETTER E WITH DOT ABOVE] +"\u0116" => "E" + +# Ę [LATIN CAPITAL LETTER E WITH OGONEK] +"\u0118" => "E" + +# Ě [LATIN CAPITAL LETTER E WITH CARON] +"\u011A" => "E" + +# Ǝ [LATIN CAPITAL LETTER REVERSED E] +"\u018E" => "E" + +# Ɛ [LATIN CAPITAL LETTER OPEN E] +"\u0190" => "E" + +# Ȅ [LATIN CAPITAL LETTER E WITH DOUBLE GRAVE] +"\u0204" => "E" + +# Ȇ [LATIN CAPITAL LETTER E WITH INVERTED BREVE] +"\u0206" => "E" + +# Ȩ [LATIN CAPITAL LETTER E WITH CEDILLA] +"\u0228" => "E" + +# Ɇ [LATIN CAPITAL LETTER E WITH STROKE] +"\u0246" => "E" + +# ᴇ [LATIN LETTER SMALL CAPITAL E] +"\u1D07" => "E" + +# Ḕ [LATIN CAPITAL LETTER E WITH MACRON AND GRAVE] +"\u1E14" => "E" + +# Ḗ [LATIN CAPITAL LETTER E WITH MACRON AND ACUTE] +"\u1E16" => "E" + +# Ḙ [LATIN CAPITAL LETTER E WITH CIRCUMFLEX BELOW] +"\u1E18" => "E" + +# Ḛ [LATIN CAPITAL LETTER E WITH TILDE BELOW] +"\u1E1A" => "E" + +# Ḝ [LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE] +"\u1E1C" => "E" + +# Ẹ [LATIN CAPITAL LETTER E WITH DOT BELOW] +"\u1EB8" => "E" + +# Ẻ [LATIN CAPITAL LETTER E WITH HOOK ABOVE] +"\u1EBA" => "E" + +# Ẽ [LATIN CAPITAL LETTER E WITH TILDE] +"\u1EBC" => "E" + +# Ế [LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE] +"\u1EBE" => "E" + +# Ề [LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE] +"\u1EC0" => "E" + +# Ể [LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE] +"\u1EC2" => "E" + +# Ễ [LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE] +"\u1EC4" => "E" + +# Ệ [LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW] +"\u1EC6" => "E" + +# Ⓔ [CIRCLED LATIN CAPITAL LETTER E] +"\u24BA" => "E" + +# ⱻ [LATIN LETTER SMALL CAPITAL TURNED E] +"\u2C7B" => "E" + +# E [FULLWIDTH LATIN CAPITAL LETTER E] +"\uFF25" => "E" + +# è [LATIN SMALL LETTER E WITH GRAVE] +"\u00E8" => "e" + +# é [LATIN SMALL LETTER E WITH ACUTE] +"\u00E9" => "e" + +# ê [LATIN SMALL LETTER E WITH CIRCUMFLEX] +"\u00EA" => "e" + +# ë [LATIN SMALL LETTER E WITH DIAERESIS] +"\u00EB" => "e" + +# ē [LATIN SMALL LETTER E WITH MACRON] +"\u0113" => "e" + +# ĕ [LATIN SMALL LETTER E WITH BREVE] +"\u0115" => "e" + +# ė [LATIN SMALL LETTER E WITH DOT ABOVE] +"\u0117" => "e" + +# ę [LATIN SMALL LETTER E WITH OGONEK] +"\u0119" => "e" + +# ě [LATIN SMALL LETTER E WITH CARON] +"\u011B" => "e" + +# ǝ [LATIN SMALL LETTER TURNED E] +"\u01DD" => "e" + +# ȅ [LATIN SMALL LETTER E WITH DOUBLE GRAVE] +"\u0205" => "e" + +# ȇ [LATIN SMALL LETTER E WITH INVERTED BREVE] +"\u0207" => "e" + +# ȩ [LATIN SMALL LETTER E WITH CEDILLA] +"\u0229" => "e" + +# ɇ [LATIN SMALL LETTER E WITH STROKE] +"\u0247" => "e" + +# ɘ [LATIN SMALL LETTER REVERSED E] +"\u0258" => "e" + +# ɛ [LATIN SMALL LETTER OPEN E] +"\u025B" => "e" + +# ɜ [LATIN SMALL LETTER REVERSED OPEN E] +"\u025C" => "e" + +# ɝ [LATIN SMALL LETTER REVERSED OPEN E WITH HOOK] +"\u025D" => "e" + +# ɞ [LATIN SMALL LETTER CLOSED REVERSED OPEN E] +"\u025E" => "e" + +# ʚ [LATIN SMALL LETTER CLOSED OPEN E] +"\u029A" => "e" + +# ᴈ [LATIN SMALL LETTER TURNED OPEN E] +"\u1D08" => "e" + +# ᶒ [LATIN SMALL LETTER E WITH RETROFLEX HOOK] +"\u1D92" => "e" + +# ᶓ [LATIN SMALL LETTER OPEN E WITH RETROFLEX HOOK] +"\u1D93" => "e" + +# ᶔ [LATIN SMALL LETTER REVERSED OPEN E WITH RETROFLEX HOOK] +"\u1D94" => "e" + +# ḕ [LATIN SMALL LETTER E WITH MACRON AND GRAVE] +"\u1E15" => "e" + +# ḗ [LATIN SMALL LETTER E WITH MACRON AND ACUTE] +"\u1E17" => "e" + +# ḙ [LATIN SMALL LETTER E WITH CIRCUMFLEX BELOW] +"\u1E19" => "e" + +# ḛ [LATIN SMALL LETTER E WITH TILDE BELOW] +"\u1E1B" => "e" + +# ḝ [LATIN SMALL LETTER E WITH CEDILLA AND BREVE] +"\u1E1D" => "e" + +# ẹ [LATIN SMALL LETTER E WITH DOT BELOW] +"\u1EB9" => "e" + +# ẻ [LATIN SMALL LETTER E WITH HOOK ABOVE] +"\u1EBB" => "e" + +# ẽ [LATIN SMALL LETTER E WITH TILDE] +"\u1EBD" => "e" + +# ế [LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE] +"\u1EBF" => "e" + +# ề [LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE] +"\u1EC1" => "e" + +# ể [LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE] +"\u1EC3" => "e" + +# ễ [LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE] +"\u1EC5" => "e" + +# ệ [LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW] +"\u1EC7" => "e" + +# ₑ [LATIN SUBSCRIPT SMALL LETTER E] +"\u2091" => "e" + +# ⓔ [CIRCLED LATIN SMALL LETTER E] +"\u24D4" => "e" + +# ⱸ [LATIN SMALL LETTER E WITH NOTCH] +"\u2C78" => "e" + +# e [FULLWIDTH LATIN SMALL LETTER E] +"\uFF45" => "e" + +# ⒠ [PARENTHESIZED LATIN SMALL LETTER E] +"\u24A0" => "(e)" + +# Ƒ [LATIN CAPITAL LETTER F WITH HOOK] +"\u0191" => "F" + +# Ḟ [LATIN CAPITAL LETTER F WITH DOT ABOVE] +"\u1E1E" => "F" + +# Ⓕ [CIRCLED LATIN CAPITAL LETTER F] +"\u24BB" => "F" + +# ꜰ [LATIN LETTER SMALL CAPITAL F] +"\uA730" => "F" + +# Ꝼ [LATIN CAPITAL LETTER INSULAR F] +"\uA77B" => "F" + +# ꟻ [LATIN EPIGRAPHIC LETTER REVERSED F] +"\uA7FB" => "F" + +# F [FULLWIDTH LATIN CAPITAL LETTER F] +"\uFF26" => "F" + +# ƒ [LATIN SMALL LETTER F WITH HOOK] +"\u0192" => "f" + +# ᵮ [LATIN SMALL LETTER F WITH MIDDLE TILDE] +"\u1D6E" => "f" + +# ᶂ [LATIN SMALL LETTER F WITH PALATAL HOOK] +"\u1D82" => "f" + +# ḟ [LATIN SMALL LETTER F WITH DOT ABOVE] +"\u1E1F" => "f" + +# ẛ [LATIN SMALL LETTER LONG S WITH DOT ABOVE] +"\u1E9B" => "f" + +# ⓕ [CIRCLED LATIN SMALL LETTER F] +"\u24D5" => "f" + +# ꝼ [LATIN SMALL LETTER INSULAR F] +"\uA77C" => "f" + +# f [FULLWIDTH LATIN SMALL LETTER F] +"\uFF46" => "f" + +# ⒡ [PARENTHESIZED LATIN SMALL LETTER F] +"\u24A1" => "(f)" + +# ff [LATIN SMALL LIGATURE FF] +"\uFB00" => "ff" + +# ffi [LATIN SMALL LIGATURE FFI] +"\uFB03" => "ffi" + +# ffl [LATIN SMALL LIGATURE FFL] +"\uFB04" => "ffl" + +# fi [LATIN SMALL LIGATURE FI] +"\uFB01" => "fi" + +# fl [LATIN SMALL LIGATURE FL] +"\uFB02" => "fl" + +# Ĝ [LATIN CAPITAL LETTER G WITH CIRCUMFLEX] +"\u011C" => "G" + +# Ğ [LATIN CAPITAL LETTER G WITH BREVE] +"\u011E" => "G" + +# Ġ [LATIN CAPITAL LETTER G WITH DOT ABOVE] +"\u0120" => "G" + +# Ģ [LATIN CAPITAL LETTER G WITH CEDILLA] +"\u0122" => "G" + +# Ɠ [LATIN CAPITAL LETTER G WITH HOOK] +"\u0193" => "G" + +# Ǥ [LATIN CAPITAL LETTER G WITH STROKE] +"\u01E4" => "G" + +# ǥ [LATIN SMALL LETTER G WITH STROKE] +"\u01E5" => "G" + +# Ǧ [LATIN CAPITAL LETTER G WITH CARON] +"\u01E6" => "G" + +# ǧ [LATIN SMALL LETTER G WITH CARON] +"\u01E7" => "G" + +# Ǵ [LATIN CAPITAL LETTER G WITH ACUTE] +"\u01F4" => "G" + +# ɢ [LATIN LETTER SMALL CAPITAL G] +"\u0262" => "G" + +# ʛ [LATIN LETTER SMALL CAPITAL G WITH HOOK] +"\u029B" => "G" + +# Ḡ [LATIN CAPITAL LETTER G WITH MACRON] +"\u1E20" => "G" + +# Ⓖ [CIRCLED LATIN CAPITAL LETTER G] +"\u24BC" => "G" + +# Ᵹ [LATIN CAPITAL LETTER INSULAR G] +"\uA77D" => "G" + +# Ꝿ [LATIN CAPITAL LETTER TURNED INSULAR G] +"\uA77E" => "G" + +# G [FULLWIDTH LATIN CAPITAL LETTER G] +"\uFF27" => "G" + +# ĝ [LATIN SMALL LETTER G WITH CIRCUMFLEX] +"\u011D" => "g" + +# ğ [LATIN SMALL LETTER G WITH BREVE] +"\u011F" => "g" + +# ġ [LATIN SMALL LETTER G WITH DOT ABOVE] +"\u0121" => "g" + +# ģ [LATIN SMALL LETTER G WITH CEDILLA] +"\u0123" => "g" + +# ǵ [LATIN SMALL LETTER G WITH ACUTE] +"\u01F5" => "g" + +# ɠ [LATIN SMALL LETTER G WITH HOOK] +"\u0260" => "g" + +# ɡ [LATIN SMALL LETTER SCRIPT G] +"\u0261" => "g" + +# ᵷ [LATIN SMALL LETTER TURNED G] +"\u1D77" => "g" + +# ᵹ [LATIN SMALL LETTER INSULAR G] +"\u1D79" => "g" + +# ᶃ [LATIN SMALL LETTER G WITH PALATAL HOOK] +"\u1D83" => "g" + +# ḡ [LATIN SMALL LETTER G WITH MACRON] +"\u1E21" => "g" + +# ⓖ [CIRCLED LATIN SMALL LETTER G] +"\u24D6" => "g" + +# ꝿ [LATIN SMALL LETTER TURNED INSULAR G] +"\uA77F" => "g" + +# g [FULLWIDTH LATIN SMALL LETTER G] +"\uFF47" => "g" + +# ⒢ [PARENTHESIZED LATIN SMALL LETTER G] +"\u24A2" => "(g)" + +# Ĥ [LATIN CAPITAL LETTER H WITH CIRCUMFLEX] +"\u0124" => "H" + +# Ħ [LATIN CAPITAL LETTER H WITH STROKE] +"\u0126" => "H" + +# Ȟ [LATIN CAPITAL LETTER H WITH CARON] +"\u021E" => "H" + +# ʜ [LATIN LETTER SMALL CAPITAL H] +"\u029C" => "H" + +# Ḣ [LATIN CAPITAL LETTER H WITH DOT ABOVE] +"\u1E22" => "H" + +# Ḥ [LATIN CAPITAL LETTER H WITH DOT BELOW] +"\u1E24" => "H" + +# Ḧ [LATIN CAPITAL LETTER H WITH DIAERESIS] +"\u1E26" => "H" + +# Ḩ [LATIN CAPITAL LETTER H WITH CEDILLA] +"\u1E28" => "H" + +# Ḫ [LATIN CAPITAL LETTER H WITH BREVE BELOW] +"\u1E2A" => "H" + +# Ⓗ [CIRCLED LATIN CAPITAL LETTER H] +"\u24BD" => "H" + +# Ⱨ [LATIN CAPITAL LETTER H WITH DESCENDER] +"\u2C67" => "H" + +# Ⱶ [LATIN CAPITAL LETTER HALF H] +"\u2C75" => "H" + +# H [FULLWIDTH LATIN CAPITAL LETTER H] +"\uFF28" => "H" + +# ĥ [LATIN SMALL LETTER H WITH CIRCUMFLEX] +"\u0125" => "h" + +# ħ [LATIN SMALL LETTER H WITH STROKE] +"\u0127" => "h" + +# ȟ [LATIN SMALL LETTER H WITH CARON] +"\u021F" => "h" + +# ɥ [LATIN SMALL LETTER TURNED H] +"\u0265" => "h" + +# ɦ [LATIN SMALL LETTER H WITH HOOK] +"\u0266" => "h" + +# ʮ [LATIN SMALL LETTER TURNED H WITH FISHHOOK] +"\u02AE" => "h" + +# ʯ [LATIN SMALL LETTER TURNED H WITH FISHHOOK AND TAIL] +"\u02AF" => "h" + +# ḣ [LATIN SMALL LETTER H WITH DOT ABOVE] +"\u1E23" => "h" + +# ḥ [LATIN SMALL LETTER H WITH DOT BELOW] +"\u1E25" => "h" + +# ḧ [LATIN SMALL LETTER H WITH DIAERESIS] +"\u1E27" => "h" + +# ḩ [LATIN SMALL LETTER H WITH CEDILLA] +"\u1E29" => "h" + +# ḫ [LATIN SMALL LETTER H WITH BREVE BELOW] +"\u1E2B" => "h" + +# ẖ [LATIN SMALL LETTER H WITH LINE BELOW] +"\u1E96" => "h" + +# ⓗ [CIRCLED LATIN SMALL LETTER H] +"\u24D7" => "h" + +# ⱨ [LATIN SMALL LETTER H WITH DESCENDER] +"\u2C68" => "h" + +# ⱶ [LATIN SMALL LETTER HALF H] +"\u2C76" => "h" + +# h [FULLWIDTH LATIN SMALL LETTER H] +"\uFF48" => "h" + +# Ƕ http://en.wikipedia.org/wiki/Hwair [LATIN CAPITAL LETTER HWAIR] +"\u01F6" => "HV" + +# ⒣ [PARENTHESIZED LATIN SMALL LETTER H] +"\u24A3" => "(h)" + +# ƕ [LATIN SMALL LETTER HV] +"\u0195" => "hv" + +# Ì [LATIN CAPITAL LETTER I WITH GRAVE] +"\u00CC" => "I" + +# Í [LATIN CAPITAL LETTER I WITH ACUTE] +"\u00CD" => "I" + +# Î [LATIN CAPITAL LETTER I WITH CIRCUMFLEX] +"\u00CE" => "I" + +# Ï [LATIN CAPITAL LETTER I WITH DIAERESIS] +"\u00CF" => "I" + +# Ĩ [LATIN CAPITAL LETTER I WITH TILDE] +"\u0128" => "I" + +# Ī [LATIN CAPITAL LETTER I WITH MACRON] +"\u012A" => "I" + +# Ĭ [LATIN CAPITAL LETTER I WITH BREVE] +"\u012C" => "I" + +# Į [LATIN CAPITAL LETTER I WITH OGONEK] +"\u012E" => "I" + +# İ [LATIN CAPITAL LETTER I WITH DOT ABOVE] +"\u0130" => "I" + +# Ɩ [LATIN CAPITAL LETTER IOTA] +"\u0196" => "I" + +# Ɨ [LATIN CAPITAL LETTER I WITH STROKE] +"\u0197" => "I" + +# Ǐ [LATIN CAPITAL LETTER I WITH CARON] +"\u01CF" => "I" + +# Ȉ [LATIN CAPITAL LETTER I WITH DOUBLE GRAVE] +"\u0208" => "I" + +# Ȋ [LATIN CAPITAL LETTER I WITH INVERTED BREVE] +"\u020A" => "I" + +# ɪ [LATIN LETTER SMALL CAPITAL I] +"\u026A" => "I" + +# ᵻ [LATIN SMALL CAPITAL LETTER I WITH STROKE] +"\u1D7B" => "I" + +# Ḭ [LATIN CAPITAL LETTER I WITH TILDE BELOW] +"\u1E2C" => "I" + +# Ḯ [LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE] +"\u1E2E" => "I" + +# Ỉ [LATIN CAPITAL LETTER I WITH HOOK ABOVE] +"\u1EC8" => "I" + +# Ị [LATIN CAPITAL LETTER I WITH DOT BELOW] +"\u1ECA" => "I" + +# Ⓘ [CIRCLED LATIN CAPITAL LETTER I] +"\u24BE" => "I" + +# ꟾ [LATIN EPIGRAPHIC LETTER I LONGA] +"\uA7FE" => "I" + +# I [FULLWIDTH LATIN CAPITAL LETTER I] +"\uFF29" => "I" + +# ì [LATIN SMALL LETTER I WITH GRAVE] +"\u00EC" => "i" + +# í [LATIN SMALL LETTER I WITH ACUTE] +"\u00ED" => "i" + +# î [LATIN SMALL LETTER I WITH CIRCUMFLEX] +"\u00EE" => "i" + +# ï [LATIN SMALL LETTER I WITH DIAERESIS] +"\u00EF" => "i" + +# ĩ [LATIN SMALL LETTER I WITH TILDE] +"\u0129" => "i" + +# ī [LATIN SMALL LETTER I WITH MACRON] +"\u012B" => "i" + +# ĭ [LATIN SMALL LETTER I WITH BREVE] +"\u012D" => "i" + +# į [LATIN SMALL LETTER I WITH OGONEK] +"\u012F" => "i" + +# ı [LATIN SMALL LETTER DOTLESS I] +"\u0131" => "i" + +# ǐ [LATIN SMALL LETTER I WITH CARON] +"\u01D0" => "i" + +# ȉ [LATIN SMALL LETTER I WITH DOUBLE GRAVE] +"\u0209" => "i" + +# ȋ [LATIN SMALL LETTER I WITH INVERTED BREVE] +"\u020B" => "i" + +# ɨ [LATIN SMALL LETTER I WITH STROKE] +"\u0268" => "i" + +# ᴉ [LATIN SMALL LETTER TURNED I] +"\u1D09" => "i" + +# ᵢ [LATIN SUBSCRIPT SMALL LETTER I] +"\u1D62" => "i" + +# ᵼ [LATIN SMALL LETTER IOTA WITH STROKE] +"\u1D7C" => "i" + +# ᶖ [LATIN SMALL LETTER I WITH RETROFLEX HOOK] +"\u1D96" => "i" + +# ḭ [LATIN SMALL LETTER I WITH TILDE BELOW] +"\u1E2D" => "i" + +# ḯ [LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE] +"\u1E2F" => "i" + +# ỉ [LATIN SMALL LETTER I WITH HOOK ABOVE] +"\u1EC9" => "i" + +# ị [LATIN SMALL LETTER I WITH DOT BELOW] +"\u1ECB" => "i" + +# ⁱ [SUPERSCRIPT LATIN SMALL LETTER I] +"\u2071" => "i" + +# ⓘ [CIRCLED LATIN SMALL LETTER I] +"\u24D8" => "i" + +# i [FULLWIDTH LATIN SMALL LETTER I] +"\uFF49" => "i" + +# IJ [LATIN CAPITAL LIGATURE IJ] +"\u0132" => "IJ" + +# ⒤ [PARENTHESIZED LATIN SMALL LETTER I] +"\u24A4" => "(i)" + +# ij [LATIN SMALL LIGATURE IJ] +"\u0133" => "ij" + +# Ĵ [LATIN CAPITAL LETTER J WITH CIRCUMFLEX] +"\u0134" => "J" + +# Ɉ [LATIN CAPITAL LETTER J WITH STROKE] +"\u0248" => "J" + +# ᴊ [LATIN LETTER SMALL CAPITAL J] +"\u1D0A" => "J" + +# Ⓙ [CIRCLED LATIN CAPITAL LETTER J] +"\u24BF" => "J" + +# J [FULLWIDTH LATIN CAPITAL LETTER J] +"\uFF2A" => "J" + +# ĵ [LATIN SMALL LETTER J WITH CIRCUMFLEX] +"\u0135" => "j" + +# ǰ [LATIN SMALL LETTER J WITH CARON] +"\u01F0" => "j" + +# ȷ [LATIN SMALL LETTER DOTLESS J] +"\u0237" => "j" + +# ɉ [LATIN SMALL LETTER J WITH STROKE] +"\u0249" => "j" + +# ɟ [LATIN SMALL LETTER DOTLESS J WITH STROKE] +"\u025F" => "j" + +# ʄ [LATIN SMALL LETTER DOTLESS J WITH STROKE AND HOOK] +"\u0284" => "j" + +# ʝ [LATIN SMALL LETTER J WITH CROSSED-TAIL] +"\u029D" => "j" + +# ⓙ [CIRCLED LATIN SMALL LETTER J] +"\u24D9" => "j" + +# ⱼ [LATIN SUBSCRIPT SMALL LETTER J] +"\u2C7C" => "j" + +# j [FULLWIDTH LATIN SMALL LETTER J] +"\uFF4A" => "j" + +# ⒥ [PARENTHESIZED LATIN SMALL LETTER J] +"\u24A5" => "(j)" + +# Ķ [LATIN CAPITAL LETTER K WITH CEDILLA] +"\u0136" => "K" + +# Ƙ [LATIN CAPITAL LETTER K WITH HOOK] +"\u0198" => "K" + +# Ǩ [LATIN CAPITAL LETTER K WITH CARON] +"\u01E8" => "K" + +# ᴋ [LATIN LETTER SMALL CAPITAL K] +"\u1D0B" => "K" + +# Ḱ [LATIN CAPITAL LETTER K WITH ACUTE] +"\u1E30" => "K" + +# Ḳ [LATIN CAPITAL LETTER K WITH DOT BELOW] +"\u1E32" => "K" + +# Ḵ [LATIN CAPITAL LETTER K WITH LINE BELOW] +"\u1E34" => "K" + +# Ⓚ [CIRCLED LATIN CAPITAL LETTER K] +"\u24C0" => "K" + +# Ⱪ [LATIN CAPITAL LETTER K WITH DESCENDER] +"\u2C69" => "K" + +# Ꝁ [LATIN CAPITAL LETTER K WITH STROKE] +"\uA740" => "K" + +# Ꝃ [LATIN CAPITAL LETTER K WITH DIAGONAL STROKE] +"\uA742" => "K" + +# Ꝅ [LATIN CAPITAL LETTER K WITH STROKE AND DIAGONAL STROKE] +"\uA744" => "K" + +# K [FULLWIDTH LATIN CAPITAL LETTER K] +"\uFF2B" => "K" + +# ķ [LATIN SMALL LETTER K WITH CEDILLA] +"\u0137" => "k" + +# ƙ [LATIN SMALL LETTER K WITH HOOK] +"\u0199" => "k" + +# ǩ [LATIN SMALL LETTER K WITH CARON] +"\u01E9" => "k" + +# ʞ [LATIN SMALL LETTER TURNED K] +"\u029E" => "k" + +# ᶄ [LATIN SMALL LETTER K WITH PALATAL HOOK] +"\u1D84" => "k" + +# ḱ [LATIN SMALL LETTER K WITH ACUTE] +"\u1E31" => "k" + +# ḳ [LATIN SMALL LETTER K WITH DOT BELOW] +"\u1E33" => "k" + +# ḵ [LATIN SMALL LETTER K WITH LINE BELOW] +"\u1E35" => "k" + +# ⓚ [CIRCLED LATIN SMALL LETTER K] +"\u24DA" => "k" + +# ⱪ [LATIN SMALL LETTER K WITH DESCENDER] +"\u2C6A" => "k" + +# ꝁ [LATIN SMALL LETTER K WITH STROKE] +"\uA741" => "k" + +# ꝃ [LATIN SMALL LETTER K WITH DIAGONAL STROKE] +"\uA743" => "k" + +# ꝅ [LATIN SMALL LETTER K WITH STROKE AND DIAGONAL STROKE] +"\uA745" => "k" + +# k [FULLWIDTH LATIN SMALL LETTER K] +"\uFF4B" => "k" + +# ⒦ [PARENTHESIZED LATIN SMALL LETTER K] +"\u24A6" => "(k)" + +# Ĺ [LATIN CAPITAL LETTER L WITH ACUTE] +"\u0139" => "L" + +# Ļ [LATIN CAPITAL LETTER L WITH CEDILLA] +"\u013B" => "L" + +# Ľ [LATIN CAPITAL LETTER L WITH CARON] +"\u013D" => "L" + +# Ŀ [LATIN CAPITAL LETTER L WITH MIDDLE DOT] +"\u013F" => "L" + +# Ł [LATIN CAPITAL LETTER L WITH STROKE] +"\u0141" => "L" + +# Ƚ [LATIN CAPITAL LETTER L WITH BAR] +"\u023D" => "L" + +# ʟ [LATIN LETTER SMALL CAPITAL L] +"\u029F" => "L" + +# ᴌ [LATIN LETTER SMALL CAPITAL L WITH STROKE] +"\u1D0C" => "L" + +# Ḷ [LATIN CAPITAL LETTER L WITH DOT BELOW] +"\u1E36" => "L" + +# Ḹ [LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON] +"\u1E38" => "L" + +# Ḻ [LATIN CAPITAL LETTER L WITH LINE BELOW] +"\u1E3A" => "L" + +# Ḽ [LATIN CAPITAL LETTER L WITH CIRCUMFLEX BELOW] +"\u1E3C" => "L" + +# Ⓛ [CIRCLED LATIN CAPITAL LETTER L] +"\u24C1" => "L" + +# Ⱡ [LATIN CAPITAL LETTER L WITH DOUBLE BAR] +"\u2C60" => "L" + +# Ɫ [LATIN CAPITAL LETTER L WITH MIDDLE TILDE] +"\u2C62" => "L" + +# Ꝇ [LATIN CAPITAL LETTER BROKEN L] +"\uA746" => "L" + +# Ꝉ [LATIN CAPITAL LETTER L WITH HIGH STROKE] +"\uA748" => "L" + +# Ꞁ [LATIN CAPITAL LETTER TURNED L] +"\uA780" => "L" + +# L [FULLWIDTH LATIN CAPITAL LETTER L] +"\uFF2C" => "L" + +# ĺ [LATIN SMALL LETTER L WITH ACUTE] +"\u013A" => "l" + +# ļ [LATIN SMALL LETTER L WITH CEDILLA] +"\u013C" => "l" + +# ľ [LATIN SMALL LETTER L WITH CARON] +"\u013E" => "l" + +# ŀ [LATIN SMALL LETTER L WITH MIDDLE DOT] +"\u0140" => "l" + +# ł [LATIN SMALL LETTER L WITH STROKE] +"\u0142" => "l" + +# ƚ [LATIN SMALL LETTER L WITH BAR] +"\u019A" => "l" + +# ȴ [LATIN SMALL LETTER L WITH CURL] +"\u0234" => "l" + +# ɫ [LATIN SMALL LETTER L WITH MIDDLE TILDE] +"\u026B" => "l" + +# ɬ [LATIN SMALL LETTER L WITH BELT] +"\u026C" => "l" + +# ɭ [LATIN SMALL LETTER L WITH RETROFLEX HOOK] +"\u026D" => "l" + +# ᶅ [LATIN SMALL LETTER L WITH PALATAL HOOK] +"\u1D85" => "l" + +# ḷ [LATIN SMALL LETTER L WITH DOT BELOW] +"\u1E37" => "l" + +# ḹ [LATIN SMALL LETTER L WITH DOT BELOW AND MACRON] +"\u1E39" => "l" + +# ḻ [LATIN SMALL LETTER L WITH LINE BELOW] +"\u1E3B" => "l" + +# ḽ [LATIN SMALL LETTER L WITH CIRCUMFLEX BELOW] +"\u1E3D" => "l" + +# ⓛ [CIRCLED LATIN SMALL LETTER L] +"\u24DB" => "l" + +# ⱡ [LATIN SMALL LETTER L WITH DOUBLE BAR] +"\u2C61" => "l" + +# ꝇ [LATIN SMALL LETTER BROKEN L] +"\uA747" => "l" + +# ꝉ [LATIN SMALL LETTER L WITH HIGH STROKE] +"\uA749" => "l" + +# ꞁ [LATIN SMALL LETTER TURNED L] +"\uA781" => "l" + +# l [FULLWIDTH LATIN SMALL LETTER L] +"\uFF4C" => "l" + +# LJ [LATIN CAPITAL LETTER LJ] +"\u01C7" => "LJ" + +# Ỻ [LATIN CAPITAL LETTER MIDDLE-WELSH LL] +"\u1EFA" => "LL" + +# Lj [LATIN CAPITAL LETTER L WITH SMALL LETTER J] +"\u01C8" => "Lj" + +# ⒧ [PARENTHESIZED LATIN SMALL LETTER L] +"\u24A7" => "(l)" + +# lj [LATIN SMALL LETTER LJ] +"\u01C9" => "lj" + +# ỻ [LATIN SMALL LETTER MIDDLE-WELSH LL] +"\u1EFB" => "ll" + +# ʪ [LATIN SMALL LETTER LS DIGRAPH] +"\u02AA" => "ls" + +# ʫ [LATIN SMALL LETTER LZ DIGRAPH] +"\u02AB" => "lz" + +# Ɯ [LATIN CAPITAL LETTER TURNED M] +"\u019C" => "M" + +# ᴍ [LATIN LETTER SMALL CAPITAL M] +"\u1D0D" => "M" + +# Ḿ [LATIN CAPITAL LETTER M WITH ACUTE] +"\u1E3E" => "M" + +# Ṁ [LATIN CAPITAL LETTER M WITH DOT ABOVE] +"\u1E40" => "M" + +# Ṃ [LATIN CAPITAL LETTER M WITH DOT BELOW] +"\u1E42" => "M" + +# Ⓜ [CIRCLED LATIN CAPITAL LETTER M] +"\u24C2" => "M" + +# Ɱ [LATIN CAPITAL LETTER M WITH HOOK] +"\u2C6E" => "M" + +# ꟽ [LATIN EPIGRAPHIC LETTER INVERTED M] +"\uA7FD" => "M" + +# ꟿ [LATIN EPIGRAPHIC LETTER ARCHAIC M] +"\uA7FF" => "M" + +# M [FULLWIDTH LATIN CAPITAL LETTER M] +"\uFF2D" => "M" + +# ɯ [LATIN SMALL LETTER TURNED M] +"\u026F" => "m" + +# ɰ [LATIN SMALL LETTER TURNED M WITH LONG LEG] +"\u0270" => "m" + +# ɱ [LATIN SMALL LETTER M WITH HOOK] +"\u0271" => "m" + +# ᵯ [LATIN SMALL LETTER M WITH MIDDLE TILDE] +"\u1D6F" => "m" + +# ᶆ [LATIN SMALL LETTER M WITH PALATAL HOOK] +"\u1D86" => "m" + +# ḿ [LATIN SMALL LETTER M WITH ACUTE] +"\u1E3F" => "m" + +# ṁ [LATIN SMALL LETTER M WITH DOT ABOVE] +"\u1E41" => "m" + +# ṃ [LATIN SMALL LETTER M WITH DOT BELOW] +"\u1E43" => "m" + +# ⓜ [CIRCLED LATIN SMALL LETTER M] +"\u24DC" => "m" + +# m [FULLWIDTH LATIN SMALL LETTER M] +"\uFF4D" => "m" + +# ⒨ [PARENTHESIZED LATIN SMALL LETTER M] +"\u24A8" => "(m)" + +# Ñ [LATIN CAPITAL LETTER N WITH TILDE] +"\u00D1" => "N" + +# Ń [LATIN CAPITAL LETTER N WITH ACUTE] +"\u0143" => "N" + +# Ņ [LATIN CAPITAL LETTER N WITH CEDILLA] +"\u0145" => "N" + +# Ň [LATIN CAPITAL LETTER N WITH CARON] +"\u0147" => "N" + +# Ŋ http://en.wikipedia.org/wiki/Eng_(letter) [LATIN CAPITAL LETTER ENG] +"\u014A" => "N" + +# Ɲ [LATIN CAPITAL LETTER N WITH LEFT HOOK] +"\u019D" => "N" + +# Ǹ [LATIN CAPITAL LETTER N WITH GRAVE] +"\u01F8" => "N" + +# Ƞ [LATIN CAPITAL LETTER N WITH LONG RIGHT LEG] +"\u0220" => "N" + +# ɴ [LATIN LETTER SMALL CAPITAL N] +"\u0274" => "N" + +# ᴎ [LATIN LETTER SMALL CAPITAL REVERSED N] +"\u1D0E" => "N" + +# Ṅ [LATIN CAPITAL LETTER N WITH DOT ABOVE] +"\u1E44" => "N" + +# Ṇ [LATIN CAPITAL LETTER N WITH DOT BELOW] +"\u1E46" => "N" + +# Ṉ [LATIN CAPITAL LETTER N WITH LINE BELOW] +"\u1E48" => "N" + +# Ṋ [LATIN CAPITAL LETTER N WITH CIRCUMFLEX BELOW] +"\u1E4A" => "N" + +# Ⓝ [CIRCLED LATIN CAPITAL LETTER N] +"\u24C3" => "N" + +# N [FULLWIDTH LATIN CAPITAL LETTER N] +"\uFF2E" => "N" + +# ñ [LATIN SMALL LETTER N WITH TILDE] +"\u00F1" => "n" + +# ń [LATIN SMALL LETTER N WITH ACUTE] +"\u0144" => "n" + +# ņ [LATIN SMALL LETTER N WITH CEDILLA] +"\u0146" => "n" + +# ň [LATIN SMALL LETTER N WITH CARON] +"\u0148" => "n" + +# ʼn [LATIN SMALL LETTER N PRECEDED BY APOSTROPHE] +"\u0149" => "n" + +# ŋ http://en.wikipedia.org/wiki/Eng_(letter) [LATIN SMALL LETTER ENG] +"\u014B" => "n" + +# ƞ [LATIN SMALL LETTER N WITH LONG RIGHT LEG] +"\u019E" => "n" + +# ǹ [LATIN SMALL LETTER N WITH GRAVE] +"\u01F9" => "n" + +# ȵ [LATIN SMALL LETTER N WITH CURL] +"\u0235" => "n" + +# ɲ [LATIN SMALL LETTER N WITH LEFT HOOK] +"\u0272" => "n" + +# ɳ [LATIN SMALL LETTER N WITH RETROFLEX HOOK] +"\u0273" => "n" + +# ᵰ [LATIN SMALL LETTER N WITH MIDDLE TILDE] +"\u1D70" => "n" + +# ᶇ [LATIN SMALL LETTER N WITH PALATAL HOOK] +"\u1D87" => "n" + +# ṅ [LATIN SMALL LETTER N WITH DOT ABOVE] +"\u1E45" => "n" + +# ṇ [LATIN SMALL LETTER N WITH DOT BELOW] +"\u1E47" => "n" + +# ṉ [LATIN SMALL LETTER N WITH LINE BELOW] +"\u1E49" => "n" + +# ṋ [LATIN SMALL LETTER N WITH CIRCUMFLEX BELOW] +"\u1E4B" => "n" + +# ⁿ [SUPERSCRIPT LATIN SMALL LETTER N] +"\u207F" => "n" + +# ⓝ [CIRCLED LATIN SMALL LETTER N] +"\u24DD" => "n" + +# n [FULLWIDTH LATIN SMALL LETTER N] +"\uFF4E" => "n" + +# NJ [LATIN CAPITAL LETTER NJ] +"\u01CA" => "NJ" + +# Nj [LATIN CAPITAL LETTER N WITH SMALL LETTER J] +"\u01CB" => "Nj" + +# ⒩ [PARENTHESIZED LATIN SMALL LETTER N] +"\u24A9" => "(n)" + +# nj [LATIN SMALL LETTER NJ] +"\u01CC" => "nj" + +# Ò [LATIN CAPITAL LETTER O WITH GRAVE] +"\u00D2" => "O" + +# Ó [LATIN CAPITAL LETTER O WITH ACUTE] +"\u00D3" => "O" + +# Ô [LATIN CAPITAL LETTER O WITH CIRCUMFLEX] +"\u00D4" => "O" + +# Õ [LATIN CAPITAL LETTER O WITH TILDE] +"\u00D5" => "O" + +# Ö [LATIN CAPITAL LETTER O WITH DIAERESIS] +"\u00D6" => "O" + +# Ø [LATIN CAPITAL LETTER O WITH STROKE] +"\u00D8" => "O" + +# Ō [LATIN CAPITAL LETTER O WITH MACRON] +"\u014C" => "O" + +# Ŏ [LATIN CAPITAL LETTER O WITH BREVE] +"\u014E" => "O" + +# Ő [LATIN CAPITAL LETTER O WITH DOUBLE ACUTE] +"\u0150" => "O" + +# Ɔ [LATIN CAPITAL LETTER OPEN O] +"\u0186" => "O" + +# Ɵ [LATIN CAPITAL LETTER O WITH MIDDLE TILDE] +"\u019F" => "O" + +# Ơ [LATIN CAPITAL LETTER O WITH HORN] +"\u01A0" => "O" + +# Ǒ [LATIN CAPITAL LETTER O WITH CARON] +"\u01D1" => "O" + +# Ǫ [LATIN CAPITAL LETTER O WITH OGONEK] +"\u01EA" => "O" + +# Ǭ [LATIN CAPITAL LETTER O WITH OGONEK AND MACRON] +"\u01EC" => "O" + +# Ǿ [LATIN CAPITAL LETTER O WITH STROKE AND ACUTE] +"\u01FE" => "O" + +# Ȍ [LATIN CAPITAL LETTER O WITH DOUBLE GRAVE] +"\u020C" => "O" + +# Ȏ [LATIN CAPITAL LETTER O WITH INVERTED BREVE] +"\u020E" => "O" + +# Ȫ [LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON] +"\u022A" => "O" + +# Ȭ [LATIN CAPITAL LETTER O WITH TILDE AND MACRON] +"\u022C" => "O" + +# Ȯ [LATIN CAPITAL LETTER O WITH DOT ABOVE] +"\u022E" => "O" + +# Ȱ [LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON] +"\u0230" => "O" + +# ᴏ [LATIN LETTER SMALL CAPITAL O] +"\u1D0F" => "O" + +# ᴐ [LATIN LETTER SMALL CAPITAL OPEN O] +"\u1D10" => "O" + +# Ṍ [LATIN CAPITAL LETTER O WITH TILDE AND ACUTE] +"\u1E4C" => "O" + +# Ṏ [LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS] +"\u1E4E" => "O" + +# Ṑ [LATIN CAPITAL LETTER O WITH MACRON AND GRAVE] +"\u1E50" => "O" + +# Ṓ [LATIN CAPITAL LETTER O WITH MACRON AND ACUTE] +"\u1E52" => "O" + +# Ọ [LATIN CAPITAL LETTER O WITH DOT BELOW] +"\u1ECC" => "O" + +# Ỏ [LATIN CAPITAL LETTER O WITH HOOK ABOVE] +"\u1ECE" => "O" + +# Ố [LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE] +"\u1ED0" => "O" + +# Ồ [LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE] +"\u1ED2" => "O" + +# Ổ [LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE] +"\u1ED4" => "O" + +# Ỗ [LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE] +"\u1ED6" => "O" + +# Ộ [LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW] +"\u1ED8" => "O" + +# Ớ [LATIN CAPITAL LETTER O WITH HORN AND ACUTE] +"\u1EDA" => "O" + +# Ờ [LATIN CAPITAL LETTER O WITH HORN AND GRAVE] +"\u1EDC" => "O" + +# Ở [LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE] +"\u1EDE" => "O" + +# Ỡ [LATIN CAPITAL LETTER O WITH HORN AND TILDE] +"\u1EE0" => "O" + +# Ợ [LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW] +"\u1EE2" => "O" + +# Ⓞ [CIRCLED LATIN CAPITAL LETTER O] +"\u24C4" => "O" + +# Ꝋ [LATIN CAPITAL LETTER O WITH LONG STROKE OVERLAY] +"\uA74A" => "O" + +# Ꝍ [LATIN CAPITAL LETTER O WITH LOOP] +"\uA74C" => "O" + +# O [FULLWIDTH LATIN CAPITAL LETTER O] +"\uFF2F" => "O" + +# ò [LATIN SMALL LETTER O WITH GRAVE] +"\u00F2" => "o" + +# ó [LATIN SMALL LETTER O WITH ACUTE] +"\u00F3" => "o" + +# ô [LATIN SMALL LETTER O WITH CIRCUMFLEX] +"\u00F4" => "o" + +# õ [LATIN SMALL LETTER O WITH TILDE] +"\u00F5" => "o" + +# ö [LATIN SMALL LETTER O WITH DIAERESIS] +"\u00F6" => "o" + +# ø [LATIN SMALL LETTER O WITH STROKE] +"\u00F8" => "o" + +# ō [LATIN SMALL LETTER O WITH MACRON] +"\u014D" => "o" + +# ŏ [LATIN SMALL LETTER O WITH BREVE] +"\u014F" => "o" + +# ő [LATIN SMALL LETTER O WITH DOUBLE ACUTE] +"\u0151" => "o" + +# ơ [LATIN SMALL LETTER O WITH HORN] +"\u01A1" => "o" + +# ǒ [LATIN SMALL LETTER O WITH CARON] +"\u01D2" => "o" + +# ǫ [LATIN SMALL LETTER O WITH OGONEK] +"\u01EB" => "o" + +# ǭ [LATIN SMALL LETTER O WITH OGONEK AND MACRON] +"\u01ED" => "o" + +# ǿ [LATIN SMALL LETTER O WITH STROKE AND ACUTE] +"\u01FF" => "o" + +# ȍ [LATIN SMALL LETTER O WITH DOUBLE GRAVE] +"\u020D" => "o" + +# ȏ [LATIN SMALL LETTER O WITH INVERTED BREVE] +"\u020F" => "o" + +# ȫ [LATIN SMALL LETTER O WITH DIAERESIS AND MACRON] +"\u022B" => "o" + +# ȭ [LATIN SMALL LETTER O WITH TILDE AND MACRON] +"\u022D" => "o" + +# ȯ [LATIN SMALL LETTER O WITH DOT ABOVE] +"\u022F" => "o" + +# ȱ [LATIN SMALL LETTER O WITH DOT ABOVE AND MACRON] +"\u0231" => "o" + +# ɔ [LATIN SMALL LETTER OPEN O] +"\u0254" => "o" + +# ɵ [LATIN SMALL LETTER BARRED O] +"\u0275" => "o" + +# ᴖ [LATIN SMALL LETTER TOP HALF O] +"\u1D16" => "o" + +# ᴗ [LATIN SMALL LETTER BOTTOM HALF O] +"\u1D17" => "o" + +# ᶗ [LATIN SMALL LETTER OPEN O WITH RETROFLEX HOOK] +"\u1D97" => "o" + +# ṍ [LATIN SMALL LETTER O WITH TILDE AND ACUTE] +"\u1E4D" => "o" + +# ṏ [LATIN SMALL LETTER O WITH TILDE AND DIAERESIS] +"\u1E4F" => "o" + +# ṑ [LATIN SMALL LETTER O WITH MACRON AND GRAVE] +"\u1E51" => "o" + +# ṓ [LATIN SMALL LETTER O WITH MACRON AND ACUTE] +"\u1E53" => "o" + +# ọ [LATIN SMALL LETTER O WITH DOT BELOW] +"\u1ECD" => "o" + +# ỏ [LATIN SMALL LETTER O WITH HOOK ABOVE] +"\u1ECF" => "o" + +# ố [LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE] +"\u1ED1" => "o" + +# ồ [LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE] +"\u1ED3" => "o" + +# ổ [LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE] +"\u1ED5" => "o" + +# ỗ [LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE] +"\u1ED7" => "o" + +# ộ [LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW] +"\u1ED9" => "o" + +# ớ [LATIN SMALL LETTER O WITH HORN AND ACUTE] +"\u1EDB" => "o" + +# ờ [LATIN SMALL LETTER O WITH HORN AND GRAVE] +"\u1EDD" => "o" + +# ở [LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE] +"\u1EDF" => "o" + +# ỡ [LATIN SMALL LETTER O WITH HORN AND TILDE] +"\u1EE1" => "o" + +# ợ [LATIN SMALL LETTER O WITH HORN AND DOT BELOW] +"\u1EE3" => "o" + +# ₒ [LATIN SUBSCRIPT SMALL LETTER O] +"\u2092" => "o" + +# ⓞ [CIRCLED LATIN SMALL LETTER O] +"\u24DE" => "o" + +# ⱺ [LATIN SMALL LETTER O WITH LOW RING INSIDE] +"\u2C7A" => "o" + +# ꝋ [LATIN SMALL LETTER O WITH LONG STROKE OVERLAY] +"\uA74B" => "o" + +# ꝍ [LATIN SMALL LETTER O WITH LOOP] +"\uA74D" => "o" + +# o [FULLWIDTH LATIN SMALL LETTER O] +"\uFF4F" => "o" + +# Œ [LATIN CAPITAL LIGATURE OE] +"\u0152" => "OE" + +# ɶ [LATIN LETTER SMALL CAPITAL OE] +"\u0276" => "OE" + +# Ꝏ [LATIN CAPITAL LETTER OO] +"\uA74E" => "OO" + +# Ȣ http://en.wikipedia.org/wiki/OU [LATIN CAPITAL LETTER OU] +"\u0222" => "OU" + +# ᴕ [LATIN LETTER SMALL CAPITAL OU] +"\u1D15" => "OU" + +# ⒪ [PARENTHESIZED LATIN SMALL LETTER O] +"\u24AA" => "(o)" + +# œ [LATIN SMALL LIGATURE OE] +"\u0153" => "oe" + +# ᴔ [LATIN SMALL LETTER TURNED OE] +"\u1D14" => "oe" + +# ꝏ [LATIN SMALL LETTER OO] +"\uA74F" => "oo" + +# ȣ http://en.wikipedia.org/wiki/OU [LATIN SMALL LETTER OU] +"\u0223" => "ou" + +# Ƥ [LATIN CAPITAL LETTER P WITH HOOK] +"\u01A4" => "P" + +# ᴘ [LATIN LETTER SMALL CAPITAL P] +"\u1D18" => "P" + +# Ṕ [LATIN CAPITAL LETTER P WITH ACUTE] +"\u1E54" => "P" + +# Ṗ [LATIN CAPITAL LETTER P WITH DOT ABOVE] +"\u1E56" => "P" + +# Ⓟ [CIRCLED LATIN CAPITAL LETTER P] +"\u24C5" => "P" + +# Ᵽ [LATIN CAPITAL LETTER P WITH STROKE] +"\u2C63" => "P" + +# Ꝑ [LATIN CAPITAL LETTER P WITH STROKE THROUGH DESCENDER] +"\uA750" => "P" + +# Ꝓ [LATIN CAPITAL LETTER P WITH FLOURISH] +"\uA752" => "P" + +# Ꝕ [LATIN CAPITAL LETTER P WITH SQUIRREL TAIL] +"\uA754" => "P" + +# P [FULLWIDTH LATIN CAPITAL LETTER P] +"\uFF30" => "P" + +# ƥ [LATIN SMALL LETTER P WITH HOOK] +"\u01A5" => "p" + +# ᵱ [LATIN SMALL LETTER P WITH MIDDLE TILDE] +"\u1D71" => "p" + +# ᵽ [LATIN SMALL LETTER P WITH STROKE] +"\u1D7D" => "p" + +# ᶈ [LATIN SMALL LETTER P WITH PALATAL HOOK] +"\u1D88" => "p" + +# ṕ [LATIN SMALL LETTER P WITH ACUTE] +"\u1E55" => "p" + +# ṗ [LATIN SMALL LETTER P WITH DOT ABOVE] +"\u1E57" => "p" + +# ⓟ [CIRCLED LATIN SMALL LETTER P] +"\u24DF" => "p" + +# ꝑ [LATIN SMALL LETTER P WITH STROKE THROUGH DESCENDER] +"\uA751" => "p" + +# ꝓ [LATIN SMALL LETTER P WITH FLOURISH] +"\uA753" => "p" + +# ꝕ [LATIN SMALL LETTER P WITH SQUIRREL TAIL] +"\uA755" => "p" + +# ꟼ [LATIN EPIGRAPHIC LETTER REVERSED P] +"\uA7FC" => "p" + +# p [FULLWIDTH LATIN SMALL LETTER P] +"\uFF50" => "p" + +# ⒫ [PARENTHESIZED LATIN SMALL LETTER P] +"\u24AB" => "(p)" + +# Ɋ [LATIN CAPITAL LETTER SMALL Q WITH HOOK TAIL] +"\u024A" => "Q" + +# Ⓠ [CIRCLED LATIN CAPITAL LETTER Q] +"\u24C6" => "Q" + +# Ꝗ [LATIN CAPITAL LETTER Q WITH STROKE THROUGH DESCENDER] +"\uA756" => "Q" + +# Ꝙ [LATIN CAPITAL LETTER Q WITH DIAGONAL STROKE] +"\uA758" => "Q" + +# Q [FULLWIDTH LATIN CAPITAL LETTER Q] +"\uFF31" => "Q" + +# ĸ http://en.wikipedia.org/wiki/Kra_(letter) [LATIN SMALL LETTER KRA] +"\u0138" => "q" + +# ɋ [LATIN SMALL LETTER Q WITH HOOK TAIL] +"\u024B" => "q" + +# ʠ [LATIN SMALL LETTER Q WITH HOOK] +"\u02A0" => "q" + +# ⓠ [CIRCLED LATIN SMALL LETTER Q] +"\u24E0" => "q" + +# ꝗ [LATIN SMALL LETTER Q WITH STROKE THROUGH DESCENDER] +"\uA757" => "q" + +# ꝙ [LATIN SMALL LETTER Q WITH DIAGONAL STROKE] +"\uA759" => "q" + +# q [FULLWIDTH LATIN SMALL LETTER Q] +"\uFF51" => "q" + +# ⒬ [PARENTHESIZED LATIN SMALL LETTER Q] +"\u24AC" => "(q)" + +# ȹ [LATIN SMALL LETTER QP DIGRAPH] +"\u0239" => "qp" + +# Ŕ [LATIN CAPITAL LETTER R WITH ACUTE] +"\u0154" => "R" + +# Ŗ [LATIN CAPITAL LETTER R WITH CEDILLA] +"\u0156" => "R" + +# Ř [LATIN CAPITAL LETTER R WITH CARON] +"\u0158" => "R" + +# Ȓ [LATIN CAPITAL LETTER R WITH DOUBLE GRAVE] +"\u0210" => "R" + +# Ȓ [LATIN CAPITAL LETTER R WITH INVERTED BREVE] +"\u0212" => "R" + +# Ɍ [LATIN CAPITAL LETTER R WITH STROKE] +"\u024C" => "R" + +# ʀ [LATIN LETTER SMALL CAPITAL R] +"\u0280" => "R" + +# ʁ [LATIN LETTER SMALL CAPITAL INVERTED R] +"\u0281" => "R" + +# ᴙ [LATIN LETTER SMALL CAPITAL REVERSED R] +"\u1D19" => "R" + +# ᴚ [LATIN LETTER SMALL CAPITAL TURNED R] +"\u1D1A" => "R" + +# Ṙ [LATIN CAPITAL LETTER R WITH DOT ABOVE] +"\u1E58" => "R" + +# Ṛ [LATIN CAPITAL LETTER R WITH DOT BELOW] +"\u1E5A" => "R" + +# Ṝ [LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON] +"\u1E5C" => "R" + +# Ṟ [LATIN CAPITAL LETTER R WITH LINE BELOW] +"\u1E5E" => "R" + +# Ⓡ [CIRCLED LATIN CAPITAL LETTER R] +"\u24C7" => "R" + +# Ɽ [LATIN CAPITAL LETTER R WITH TAIL] +"\u2C64" => "R" + +# Ꝛ [LATIN CAPITAL LETTER R ROTUNDA] +"\uA75A" => "R" + +# Ꞃ [LATIN CAPITAL LETTER INSULAR R] +"\uA782" => "R" + +# R [FULLWIDTH LATIN CAPITAL LETTER R] +"\uFF32" => "R" + +# ŕ [LATIN SMALL LETTER R WITH ACUTE] +"\u0155" => "r" + +# ŗ [LATIN SMALL LETTER R WITH CEDILLA] +"\u0157" => "r" + +# ř [LATIN SMALL LETTER R WITH CARON] +"\u0159" => "r" + +# ȑ [LATIN SMALL LETTER R WITH DOUBLE GRAVE] +"\u0211" => "r" + +# ȓ [LATIN SMALL LETTER R WITH INVERTED BREVE] +"\u0213" => "r" + +# ɍ [LATIN SMALL LETTER R WITH STROKE] +"\u024D" => "r" + +# ɼ [LATIN SMALL LETTER R WITH LONG LEG] +"\u027C" => "r" + +# ɽ [LATIN SMALL LETTER R WITH TAIL] +"\u027D" => "r" + +# ɾ [LATIN SMALL LETTER R WITH FISHHOOK] +"\u027E" => "r" + +# ɿ [LATIN SMALL LETTER REVERSED R WITH FISHHOOK] +"\u027F" => "r" + +# ᵣ [LATIN SUBSCRIPT SMALL LETTER R] +"\u1D63" => "r" + +# ᵲ [LATIN SMALL LETTER R WITH MIDDLE TILDE] +"\u1D72" => "r" + +# ᵳ [LATIN SMALL LETTER R WITH FISHHOOK AND MIDDLE TILDE] +"\u1D73" => "r" + +# ᶉ [LATIN SMALL LETTER R WITH PALATAL HOOK] +"\u1D89" => "r" + +# ṙ [LATIN SMALL LETTER R WITH DOT ABOVE] +"\u1E59" => "r" + +# ṛ [LATIN SMALL LETTER R WITH DOT BELOW] +"\u1E5B" => "r" + +# ṝ [LATIN SMALL LETTER R WITH DOT BELOW AND MACRON] +"\u1E5D" => "r" + +# ṟ [LATIN SMALL LETTER R WITH LINE BELOW] +"\u1E5F" => "r" + +# ⓡ [CIRCLED LATIN SMALL LETTER R] +"\u24E1" => "r" + +# ꝛ [LATIN SMALL LETTER R ROTUNDA] +"\uA75B" => "r" + +# ꞃ [LATIN SMALL LETTER INSULAR R] +"\uA783" => "r" + +# r [FULLWIDTH LATIN SMALL LETTER R] +"\uFF52" => "r" + +# ⒭ [PARENTHESIZED LATIN SMALL LETTER R] +"\u24AD" => "(r)" + +# Ś [LATIN CAPITAL LETTER S WITH ACUTE] +"\u015A" => "S" + +# Ŝ [LATIN CAPITAL LETTER S WITH CIRCUMFLEX] +"\u015C" => "S" + +# Ş [LATIN CAPITAL LETTER S WITH CEDILLA] +"\u015E" => "S" + +# Š [LATIN CAPITAL LETTER S WITH CARON] +"\u0160" => "S" + +# Ș [LATIN CAPITAL LETTER S WITH COMMA BELOW] +"\u0218" => "S" + +# Ṡ [LATIN CAPITAL LETTER S WITH DOT ABOVE] +"\u1E60" => "S" + +# Ṣ [LATIN CAPITAL LETTER S WITH DOT BELOW] +"\u1E62" => "S" + +# Ṥ [LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE] +"\u1E64" => "S" + +# Ṧ [LATIN CAPITAL LETTER S WITH CARON AND DOT ABOVE] +"\u1E66" => "S" + +# Ṩ [LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE] +"\u1E68" => "S" + +# Ⓢ [CIRCLED LATIN CAPITAL LETTER S] +"\u24C8" => "S" + +# ꜱ [LATIN LETTER SMALL CAPITAL S] +"\uA731" => "S" + +# ꞅ [LATIN SMALL LETTER INSULAR S] +"\uA785" => "S" + +# S [FULLWIDTH LATIN CAPITAL LETTER S] +"\uFF33" => "S" + +# ś [LATIN SMALL LETTER S WITH ACUTE] +"\u015B" => "s" + +# ŝ [LATIN SMALL LETTER S WITH CIRCUMFLEX] +"\u015D" => "s" + +# ş [LATIN SMALL LETTER S WITH CEDILLA] +"\u015F" => "s" + +# š [LATIN SMALL LETTER S WITH CARON] +"\u0161" => "s" + +# ſ http://en.wikipedia.org/wiki/Long_S [LATIN SMALL LETTER LONG S] +"\u017F" => "s" + +# ș [LATIN SMALL LETTER S WITH COMMA BELOW] +"\u0219" => "s" + +# ȿ [LATIN SMALL LETTER S WITH SWASH TAIL] +"\u023F" => "s" + +# ʂ [LATIN SMALL LETTER S WITH HOOK] +"\u0282" => "s" + +# ᵴ [LATIN SMALL LETTER S WITH MIDDLE TILDE] +"\u1D74" => "s" + +# ᶊ [LATIN SMALL LETTER S WITH PALATAL HOOK] +"\u1D8A" => "s" + +# ṡ [LATIN SMALL LETTER S WITH DOT ABOVE] +"\u1E61" => "s" + +# ṣ [LATIN SMALL LETTER S WITH DOT BELOW] +"\u1E63" => "s" + +# ṥ [LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE] +"\u1E65" => "s" + +# ṧ [LATIN SMALL LETTER S WITH CARON AND DOT ABOVE] +"\u1E67" => "s" + +# ṩ [LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE] +"\u1E69" => "s" + +# ẜ [LATIN SMALL LETTER LONG S WITH DIAGONAL STROKE] +"\u1E9C" => "s" + +# ẝ [LATIN SMALL LETTER LONG S WITH HIGH STROKE] +"\u1E9D" => "s" + +# ⓢ [CIRCLED LATIN SMALL LETTER S] +"\u24E2" => "s" + +# Ꞅ [LATIN CAPITAL LETTER INSULAR S] +"\uA784" => "s" + +# s [FULLWIDTH LATIN SMALL LETTER S] +"\uFF53" => "s" + +# ẞ [LATIN CAPITAL LETTER SHARP S] +"\u1E9E" => "SS" + +# ⒮ [PARENTHESIZED LATIN SMALL LETTER S] +"\u24AE" => "(s)" + +# ß [LATIN SMALL LETTER SHARP S] +"\u00DF" => "ss" + +# st [LATIN SMALL LIGATURE ST] +"\uFB06" => "st" + +# Ţ [LATIN CAPITAL LETTER T WITH CEDILLA] +"\u0162" => "T" + +# Ť [LATIN CAPITAL LETTER T WITH CARON] +"\u0164" => "T" + +# Ŧ [LATIN CAPITAL LETTER T WITH STROKE] +"\u0166" => "T" + +# Ƭ [LATIN CAPITAL LETTER T WITH HOOK] +"\u01AC" => "T" + +# Ʈ [LATIN CAPITAL LETTER T WITH RETROFLEX HOOK] +"\u01AE" => "T" + +# Ț [LATIN CAPITAL LETTER T WITH COMMA BELOW] +"\u021A" => "T" + +# Ⱦ [LATIN CAPITAL LETTER T WITH DIAGONAL STROKE] +"\u023E" => "T" + +# ᴛ [LATIN LETTER SMALL CAPITAL T] +"\u1D1B" => "T" + +# Ṫ [LATIN CAPITAL LETTER T WITH DOT ABOVE] +"\u1E6A" => "T" + +# Ṭ [LATIN CAPITAL LETTER T WITH DOT BELOW] +"\u1E6C" => "T" + +# Ṯ [LATIN CAPITAL LETTER T WITH LINE BELOW] +"\u1E6E" => "T" + +# Ṱ [LATIN CAPITAL LETTER T WITH CIRCUMFLEX BELOW] +"\u1E70" => "T" + +# Ⓣ [CIRCLED LATIN CAPITAL LETTER T] +"\u24C9" => "T" + +# Ꞇ [LATIN CAPITAL LETTER INSULAR T] +"\uA786" => "T" + +# T [FULLWIDTH LATIN CAPITAL LETTER T] +"\uFF34" => "T" + +# ţ [LATIN SMALL LETTER T WITH CEDILLA] +"\u0163" => "t" + +# ť [LATIN SMALL LETTER T WITH CARON] +"\u0165" => "t" + +# ŧ [LATIN SMALL LETTER T WITH STROKE] +"\u0167" => "t" + +# ƫ [LATIN SMALL LETTER T WITH PALATAL HOOK] +"\u01AB" => "t" + +# ƭ [LATIN SMALL LETTER T WITH HOOK] +"\u01AD" => "t" + +# ț [LATIN SMALL LETTER T WITH COMMA BELOW] +"\u021B" => "t" + +# ȶ [LATIN SMALL LETTER T WITH CURL] +"\u0236" => "t" + +# ʇ [LATIN SMALL LETTER TURNED T] +"\u0287" => "t" + +# ʈ [LATIN SMALL LETTER T WITH RETROFLEX HOOK] +"\u0288" => "t" + +# ᵵ [LATIN SMALL LETTER T WITH MIDDLE TILDE] +"\u1D75" => "t" + +# ṫ [LATIN SMALL LETTER T WITH DOT ABOVE] +"\u1E6B" => "t" + +# ṭ [LATIN SMALL LETTER T WITH DOT BELOW] +"\u1E6D" => "t" + +# ṯ [LATIN SMALL LETTER T WITH LINE BELOW] +"\u1E6F" => "t" + +# ṱ [LATIN SMALL LETTER T WITH CIRCUMFLEX BELOW] +"\u1E71" => "t" + +# ẗ [LATIN SMALL LETTER T WITH DIAERESIS] +"\u1E97" => "t" + +# ⓣ [CIRCLED LATIN SMALL LETTER T] +"\u24E3" => "t" + +# ⱦ [LATIN SMALL LETTER T WITH DIAGONAL STROKE] +"\u2C66" => "t" + +# t [FULLWIDTH LATIN SMALL LETTER T] +"\uFF54" => "t" + +# Þ [LATIN CAPITAL LETTER THORN] +"\u00DE" => "TH" + +# Ꝧ [LATIN CAPITAL LETTER THORN WITH STROKE THROUGH DESCENDER] +"\uA766" => "TH" + +# Ꜩ [LATIN CAPITAL LETTER TZ] +"\uA728" => "TZ" + +# ⒯ [PARENTHESIZED LATIN SMALL LETTER T] +"\u24AF" => "(t)" + +# ʨ [LATIN SMALL LETTER TC DIGRAPH WITH CURL] +"\u02A8" => "tc" + +# þ [LATIN SMALL LETTER THORN] +"\u00FE" => "th" + +# ᵺ [LATIN SMALL LETTER TH WITH STRIKETHROUGH] +"\u1D7A" => "th" + +# ꝧ [LATIN SMALL LETTER THORN WITH STROKE THROUGH DESCENDER] +"\uA767" => "th" + +# ʦ [LATIN SMALL LETTER TS DIGRAPH] +"\u02A6" => "ts" + +# ꜩ [LATIN SMALL LETTER TZ] +"\uA729" => "tz" + +# Ù [LATIN CAPITAL LETTER U WITH GRAVE] +"\u00D9" => "U" + +# Ú [LATIN CAPITAL LETTER U WITH ACUTE] +"\u00DA" => "U" + +# Û [LATIN CAPITAL LETTER U WITH CIRCUMFLEX] +"\u00DB" => "U" + +# Ü [LATIN CAPITAL LETTER U WITH DIAERESIS] +"\u00DC" => "U" + +# Ũ [LATIN CAPITAL LETTER U WITH TILDE] +"\u0168" => "U" + +# Ū [LATIN CAPITAL LETTER U WITH MACRON] +"\u016A" => "U" + +# Ŭ [LATIN CAPITAL LETTER U WITH BREVE] +"\u016C" => "U" + +# Ů [LATIN CAPITAL LETTER U WITH RING ABOVE] +"\u016E" => "U" + +# Ű [LATIN CAPITAL LETTER U WITH DOUBLE ACUTE] +"\u0170" => "U" + +# Ų [LATIN CAPITAL LETTER U WITH OGONEK] +"\u0172" => "U" + +# Ư [LATIN CAPITAL LETTER U WITH HORN] +"\u01AF" => "U" + +# Ǔ [LATIN CAPITAL LETTER U WITH CARON] +"\u01D3" => "U" + +# Ǖ [LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON] +"\u01D5" => "U" + +# Ǘ [LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE] +"\u01D7" => "U" + +# Ǚ [LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON] +"\u01D9" => "U" + +# Ǜ [LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE] +"\u01DB" => "U" + +# Ȕ [LATIN CAPITAL LETTER U WITH DOUBLE GRAVE] +"\u0214" => "U" + +# Ȗ [LATIN CAPITAL LETTER U WITH INVERTED BREVE] +"\u0216" => "U" + +# Ʉ [LATIN CAPITAL LETTER U BAR] +"\u0244" => "U" + +# ᴜ [LATIN LETTER SMALL CAPITAL U] +"\u1D1C" => "U" + +# ᵾ [LATIN SMALL CAPITAL LETTER U WITH STROKE] +"\u1D7E" => "U" + +# Ṳ [LATIN CAPITAL LETTER U WITH DIAERESIS BELOW] +"\u1E72" => "U" + +# Ṵ [LATIN CAPITAL LETTER U WITH TILDE BELOW] +"\u1E74" => "U" + +# Ṷ [LATIN CAPITAL LETTER U WITH CIRCUMFLEX BELOW] +"\u1E76" => "U" + +# Ṹ [LATIN CAPITAL LETTER U WITH TILDE AND ACUTE] +"\u1E78" => "U" + +# Ṻ [LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS] +"\u1E7A" => "U" + +# Ụ [LATIN CAPITAL LETTER U WITH DOT BELOW] +"\u1EE4" => "U" + +# Ủ [LATIN CAPITAL LETTER U WITH HOOK ABOVE] +"\u1EE6" => "U" + +# Ứ [LATIN CAPITAL LETTER U WITH HORN AND ACUTE] +"\u1EE8" => "U" + +# Ừ [LATIN CAPITAL LETTER U WITH HORN AND GRAVE] +"\u1EEA" => "U" + +# Ử [LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE] +"\u1EEC" => "U" + +# Ữ [LATIN CAPITAL LETTER U WITH HORN AND TILDE] +"\u1EEE" => "U" + +# Ự [LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW] +"\u1EF0" => "U" + +# Ⓤ [CIRCLED LATIN CAPITAL LETTER U] +"\u24CA" => "U" + +# U [FULLWIDTH LATIN CAPITAL LETTER U] +"\uFF35" => "U" + +# ù [LATIN SMALL LETTER U WITH GRAVE] +"\u00F9" => "u" + +# ú [LATIN SMALL LETTER U WITH ACUTE] +"\u00FA" => "u" + +# û [LATIN SMALL LETTER U WITH CIRCUMFLEX] +"\u00FB" => "u" + +# ü [LATIN SMALL LETTER U WITH DIAERESIS] +"\u00FC" => "u" + +# ũ [LATIN SMALL LETTER U WITH TILDE] +"\u0169" => "u" + +# ū [LATIN SMALL LETTER U WITH MACRON] +"\u016B" => "u" + +# ŭ [LATIN SMALL LETTER U WITH BREVE] +"\u016D" => "u" + +# ů [LATIN SMALL LETTER U WITH RING ABOVE] +"\u016F" => "u" + +# ű [LATIN SMALL LETTER U WITH DOUBLE ACUTE] +"\u0171" => "u" + +# ų [LATIN SMALL LETTER U WITH OGONEK] +"\u0173" => "u" + +# ư [LATIN SMALL LETTER U WITH HORN] +"\u01B0" => "u" + +# ǔ [LATIN SMALL LETTER U WITH CARON] +"\u01D4" => "u" + +# ǖ [LATIN SMALL LETTER U WITH DIAERESIS AND MACRON] +"\u01D6" => "u" + +# ǘ [LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE] +"\u01D8" => "u" + +# ǚ [LATIN SMALL LETTER U WITH DIAERESIS AND CARON] +"\u01DA" => "u" + +# ǜ [LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE] +"\u01DC" => "u" + +# ȕ [LATIN SMALL LETTER U WITH DOUBLE GRAVE] +"\u0215" => "u" + +# ȗ [LATIN SMALL LETTER U WITH INVERTED BREVE] +"\u0217" => "u" + +# ʉ [LATIN SMALL LETTER U BAR] +"\u0289" => "u" + +# ᵤ [LATIN SUBSCRIPT SMALL LETTER U] +"\u1D64" => "u" + +# ᶙ [LATIN SMALL LETTER U WITH RETROFLEX HOOK] +"\u1D99" => "u" + +# ṳ [LATIN SMALL LETTER U WITH DIAERESIS BELOW] +"\u1E73" => "u" + +# ṵ [LATIN SMALL LETTER U WITH TILDE BELOW] +"\u1E75" => "u" + +# ṷ [LATIN SMALL LETTER U WITH CIRCUMFLEX BELOW] +"\u1E77" => "u" + +# ṹ [LATIN SMALL LETTER U WITH TILDE AND ACUTE] +"\u1E79" => "u" + +# ṻ [LATIN SMALL LETTER U WITH MACRON AND DIAERESIS] +"\u1E7B" => "u" + +# ụ [LATIN SMALL LETTER U WITH DOT BELOW] +"\u1EE5" => "u" + +# ủ [LATIN SMALL LETTER U WITH HOOK ABOVE] +"\u1EE7" => "u" + +# ứ [LATIN SMALL LETTER U WITH HORN AND ACUTE] +"\u1EE9" => "u" + +# ừ [LATIN SMALL LETTER U WITH HORN AND GRAVE] +"\u1EEB" => "u" + +# ử [LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE] +"\u1EED" => "u" + +# ữ [LATIN SMALL LETTER U WITH HORN AND TILDE] +"\u1EEF" => "u" + +# ự [LATIN SMALL LETTER U WITH HORN AND DOT BELOW] +"\u1EF1" => "u" + +# ⓤ [CIRCLED LATIN SMALL LETTER U] +"\u24E4" => "u" + +# u [FULLWIDTH LATIN SMALL LETTER U] +"\uFF55" => "u" + +# ⒰ [PARENTHESIZED LATIN SMALL LETTER U] +"\u24B0" => "(u)" + +# ᵫ [LATIN SMALL LETTER UE] +"\u1D6B" => "ue" + +# Ʋ [LATIN CAPITAL LETTER V WITH HOOK] +"\u01B2" => "V" + +# Ʌ [LATIN CAPITAL LETTER TURNED V] +"\u0245" => "V" + +# ᴠ [LATIN LETTER SMALL CAPITAL V] +"\u1D20" => "V" + +# Ṽ [LATIN CAPITAL LETTER V WITH TILDE] +"\u1E7C" => "V" + +# Ṿ [LATIN CAPITAL LETTER V WITH DOT BELOW] +"\u1E7E" => "V" + +# Ỽ [LATIN CAPITAL LETTER MIDDLE-WELSH V] +"\u1EFC" => "V" + +# Ⓥ [CIRCLED LATIN CAPITAL LETTER V] +"\u24CB" => "V" + +# Ꝟ [LATIN CAPITAL LETTER V WITH DIAGONAL STROKE] +"\uA75E" => "V" + +# Ꝩ [LATIN CAPITAL LETTER VEND] +"\uA768" => "V" + +# V [FULLWIDTH LATIN CAPITAL LETTER V] +"\uFF36" => "V" + +# ʋ [LATIN SMALL LETTER V WITH HOOK] +"\u028B" => "v" + +# ʌ [LATIN SMALL LETTER TURNED V] +"\u028C" => "v" + +# ᵥ [LATIN SUBSCRIPT SMALL LETTER V] +"\u1D65" => "v" + +# ᶌ [LATIN SMALL LETTER V WITH PALATAL HOOK] +"\u1D8C" => "v" + +# ṽ [LATIN SMALL LETTER V WITH TILDE] +"\u1E7D" => "v" + +# ṿ [LATIN SMALL LETTER V WITH DOT BELOW] +"\u1E7F" => "v" + +# ⓥ [CIRCLED LATIN SMALL LETTER V] +"\u24E5" => "v" + +# ⱱ [LATIN SMALL LETTER V WITH RIGHT HOOK] +"\u2C71" => "v" + +# ⱴ [LATIN SMALL LETTER V WITH CURL] +"\u2C74" => "v" + +# ꝟ [LATIN SMALL LETTER V WITH DIAGONAL STROKE] +"\uA75F" => "v" + +# v [FULLWIDTH LATIN SMALL LETTER V] +"\uFF56" => "v" + +# Ꝡ [LATIN CAPITAL LETTER VY] +"\uA760" => "VY" + +# ⒱ [PARENTHESIZED LATIN SMALL LETTER V] +"\u24B1" => "(v)" + +# ꝡ [LATIN SMALL LETTER VY] +"\uA761" => "vy" + +# Ŵ [LATIN CAPITAL LETTER W WITH CIRCUMFLEX] +"\u0174" => "W" + +# Ƿ http://en.wikipedia.org/wiki/Wynn [LATIN CAPITAL LETTER WYNN] +"\u01F7" => "W" + +# ᴡ [LATIN LETTER SMALL CAPITAL W] +"\u1D21" => "W" + +# Ẁ [LATIN CAPITAL LETTER W WITH GRAVE] +"\u1E80" => "W" + +# Ẃ [LATIN CAPITAL LETTER W WITH ACUTE] +"\u1E82" => "W" + +# Ẅ [LATIN CAPITAL LETTER W WITH DIAERESIS] +"\u1E84" => "W" + +# Ẇ [LATIN CAPITAL LETTER W WITH DOT ABOVE] +"\u1E86" => "W" + +# Ẉ [LATIN CAPITAL LETTER W WITH DOT BELOW] +"\u1E88" => "W" + +# Ⓦ [CIRCLED LATIN CAPITAL LETTER W] +"\u24CC" => "W" + +# Ⱳ [LATIN CAPITAL LETTER W WITH HOOK] +"\u2C72" => "W" + +# W [FULLWIDTH LATIN CAPITAL LETTER W] +"\uFF37" => "W" + +# ŵ [LATIN SMALL LETTER W WITH CIRCUMFLEX] +"\u0175" => "w" + +# ƿ http://en.wikipedia.org/wiki/Wynn [LATIN LETTER WYNN] +"\u01BF" => "w" + +# ʍ [LATIN SMALL LETTER TURNED W] +"\u028D" => "w" + +# ẁ [LATIN SMALL LETTER W WITH GRAVE] +"\u1E81" => "w" + +# ẃ [LATIN SMALL LETTER W WITH ACUTE] +"\u1E83" => "w" + +# ẅ [LATIN SMALL LETTER W WITH DIAERESIS] +"\u1E85" => "w" + +# ẇ [LATIN SMALL LETTER W WITH DOT ABOVE] +"\u1E87" => "w" + +# ẉ [LATIN SMALL LETTER W WITH DOT BELOW] +"\u1E89" => "w" + +# ẘ [LATIN SMALL LETTER W WITH RING ABOVE] +"\u1E98" => "w" + +# ⓦ [CIRCLED LATIN SMALL LETTER W] +"\u24E6" => "w" + +# ⱳ [LATIN SMALL LETTER W WITH HOOK] +"\u2C73" => "w" + +# w [FULLWIDTH LATIN SMALL LETTER W] +"\uFF57" => "w" + +# ⒲ [PARENTHESIZED LATIN SMALL LETTER W] +"\u24B2" => "(w)" + +# Ẋ [LATIN CAPITAL LETTER X WITH DOT ABOVE] +"\u1E8A" => "X" + +# Ẍ [LATIN CAPITAL LETTER X WITH DIAERESIS] +"\u1E8C" => "X" + +# Ⓧ [CIRCLED LATIN CAPITAL LETTER X] +"\u24CD" => "X" + +# X [FULLWIDTH LATIN CAPITAL LETTER X] +"\uFF38" => "X" + +# ᶍ [LATIN SMALL LETTER X WITH PALATAL HOOK] +"\u1D8D" => "x" + +# ẋ [LATIN SMALL LETTER X WITH DOT ABOVE] +"\u1E8B" => "x" + +# ẍ [LATIN SMALL LETTER X WITH DIAERESIS] +"\u1E8D" => "x" + +# ₓ [LATIN SUBSCRIPT SMALL LETTER X] +"\u2093" => "x" + +# ⓧ [CIRCLED LATIN SMALL LETTER X] +"\u24E7" => "x" + +# x [FULLWIDTH LATIN SMALL LETTER X] +"\uFF58" => "x" + +# ⒳ [PARENTHESIZED LATIN SMALL LETTER X] +"\u24B3" => "(x)" + +# Ý [LATIN CAPITAL LETTER Y WITH ACUTE] +"\u00DD" => "Y" + +# Ŷ [LATIN CAPITAL LETTER Y WITH CIRCUMFLEX] +"\u0176" => "Y" + +# Ÿ [LATIN CAPITAL LETTER Y WITH DIAERESIS] +"\u0178" => "Y" + +# Ƴ [LATIN CAPITAL LETTER Y WITH HOOK] +"\u01B3" => "Y" + +# Ȳ [LATIN CAPITAL LETTER Y WITH MACRON] +"\u0232" => "Y" + +# Ɏ [LATIN CAPITAL LETTER Y WITH STROKE] +"\u024E" => "Y" + +# ʏ [LATIN LETTER SMALL CAPITAL Y] +"\u028F" => "Y" + +# Ẏ [LATIN CAPITAL LETTER Y WITH DOT ABOVE] +"\u1E8E" => "Y" + +# Ỳ [LATIN CAPITAL LETTER Y WITH GRAVE] +"\u1EF2" => "Y" + +# Ỵ [LATIN CAPITAL LETTER Y WITH DOT BELOW] +"\u1EF4" => "Y" + +# Ỷ [LATIN CAPITAL LETTER Y WITH HOOK ABOVE] +"\u1EF6" => "Y" + +# Ỹ [LATIN CAPITAL LETTER Y WITH TILDE] +"\u1EF8" => "Y" + +# Ỿ [LATIN CAPITAL LETTER Y WITH LOOP] +"\u1EFE" => "Y" + +# Ⓨ [CIRCLED LATIN CAPITAL LETTER Y] +"\u24CE" => "Y" + +# Y [FULLWIDTH LATIN CAPITAL LETTER Y] +"\uFF39" => "Y" + +# ý [LATIN SMALL LETTER Y WITH ACUTE] +"\u00FD" => "y" + +# ÿ [LATIN SMALL LETTER Y WITH DIAERESIS] +"\u00FF" => "y" + +# ŷ [LATIN SMALL LETTER Y WITH CIRCUMFLEX] +"\u0177" => "y" + +# ƴ [LATIN SMALL LETTER Y WITH HOOK] +"\u01B4" => "y" + +# ȳ [LATIN SMALL LETTER Y WITH MACRON] +"\u0233" => "y" + +# ɏ [LATIN SMALL LETTER Y WITH STROKE] +"\u024F" => "y" + +# ʎ [LATIN SMALL LETTER TURNED Y] +"\u028E" => "y" + +# ẏ [LATIN SMALL LETTER Y WITH DOT ABOVE] +"\u1E8F" => "y" + +# ẙ [LATIN SMALL LETTER Y WITH RING ABOVE] +"\u1E99" => "y" + +# ỳ [LATIN SMALL LETTER Y WITH GRAVE] +"\u1EF3" => "y" + +# ỵ [LATIN SMALL LETTER Y WITH DOT BELOW] +"\u1EF5" => "y" + +# ỷ [LATIN SMALL LETTER Y WITH HOOK ABOVE] +"\u1EF7" => "y" + +# ỹ [LATIN SMALL LETTER Y WITH TILDE] +"\u1EF9" => "y" + +# ỿ [LATIN SMALL LETTER Y WITH LOOP] +"\u1EFF" => "y" + +# ⓨ [CIRCLED LATIN SMALL LETTER Y] +"\u24E8" => "y" + +# y [FULLWIDTH LATIN SMALL LETTER Y] +"\uFF59" => "y" + +# ⒴ [PARENTHESIZED LATIN SMALL LETTER Y] +"\u24B4" => "(y)" + +# Ź [LATIN CAPITAL LETTER Z WITH ACUTE] +"\u0179" => "Z" + +# Ż [LATIN CAPITAL LETTER Z WITH DOT ABOVE] +"\u017B" => "Z" + +# Ž [LATIN CAPITAL LETTER Z WITH CARON] +"\u017D" => "Z" + +# Ƶ [LATIN CAPITAL LETTER Z WITH STROKE] +"\u01B5" => "Z" + +# Ȝ http://en.wikipedia.org/wiki/Yogh [LATIN CAPITAL LETTER YOGH] +"\u021C" => "Z" + +# Ȥ [LATIN CAPITAL LETTER Z WITH HOOK] +"\u0224" => "Z" + +# ᴢ [LATIN LETTER SMALL CAPITAL Z] +"\u1D22" => "Z" + +# Ẑ [LATIN CAPITAL LETTER Z WITH CIRCUMFLEX] +"\u1E90" => "Z" + +# Ẓ [LATIN CAPITAL LETTER Z WITH DOT BELOW] +"\u1E92" => "Z" + +# Ẕ [LATIN CAPITAL LETTER Z WITH LINE BELOW] +"\u1E94" => "Z" + +# Ⓩ [CIRCLED LATIN CAPITAL LETTER Z] +"\u24CF" => "Z" + +# Ⱬ [LATIN CAPITAL LETTER Z WITH DESCENDER] +"\u2C6B" => "Z" + +# Ꝣ [LATIN CAPITAL LETTER VISIGOTHIC Z] +"\uA762" => "Z" + +# Z [FULLWIDTH LATIN CAPITAL LETTER Z] +"\uFF3A" => "Z" + +# ź [LATIN SMALL LETTER Z WITH ACUTE] +"\u017A" => "z" + +# ż [LATIN SMALL LETTER Z WITH DOT ABOVE] +"\u017C" => "z" + +# ž [LATIN SMALL LETTER Z WITH CARON] +"\u017E" => "z" + +# ƶ [LATIN SMALL LETTER Z WITH STROKE] +"\u01B6" => "z" + +# ȝ http://en.wikipedia.org/wiki/Yogh [LATIN SMALL LETTER YOGH] +"\u021D" => "z" + +# ȥ [LATIN SMALL LETTER Z WITH HOOK] +"\u0225" => "z" + +# ɀ [LATIN SMALL LETTER Z WITH SWASH TAIL] +"\u0240" => "z" + +# ʐ [LATIN SMALL LETTER Z WITH RETROFLEX HOOK] +"\u0290" => "z" + +# ʑ [LATIN SMALL LETTER Z WITH CURL] +"\u0291" => "z" + +# ᵶ [LATIN SMALL LETTER Z WITH MIDDLE TILDE] +"\u1D76" => "z" + +# ᶎ [LATIN SMALL LETTER Z WITH PALATAL HOOK] +"\u1D8E" => "z" + +# ẑ [LATIN SMALL LETTER Z WITH CIRCUMFLEX] +"\u1E91" => "z" + +# ẓ [LATIN SMALL LETTER Z WITH DOT BELOW] +"\u1E93" => "z" + +# ẕ [LATIN SMALL LETTER Z WITH LINE BELOW] +"\u1E95" => "z" + +# ⓩ [CIRCLED LATIN SMALL LETTER Z] +"\u24E9" => "z" + +# ⱬ [LATIN SMALL LETTER Z WITH DESCENDER] +"\u2C6C" => "z" + +# ꝣ [LATIN SMALL LETTER VISIGOTHIC Z] +"\uA763" => "z" + +# z [FULLWIDTH LATIN SMALL LETTER Z] +"\uFF5A" => "z" + +# ⒵ [PARENTHESIZED LATIN SMALL LETTER Z] +"\u24B5" => "(z)" + +# ⁰ [SUPERSCRIPT ZERO] +"\u2070" => "0" + +# ₀ [SUBSCRIPT ZERO] +"\u2080" => "0" + +# ⓪ [CIRCLED DIGIT ZERO] +"\u24EA" => "0" + +# ⓿ [NEGATIVE CIRCLED DIGIT ZERO] +"\u24FF" => "0" + +# 0 [FULLWIDTH DIGIT ZERO] +"\uFF10" => "0" + +# ¹ [SUPERSCRIPT ONE] +"\u00B9" => "1" + +# ₁ [SUBSCRIPT ONE] +"\u2081" => "1" + +# ① [CIRCLED DIGIT ONE] +"\u2460" => "1" + +# ⓵ [DOUBLE CIRCLED DIGIT ONE] +"\u24F5" => "1" + +# ❶ [DINGBAT NEGATIVE CIRCLED DIGIT ONE] +"\u2776" => "1" + +# ➀ [DINGBAT CIRCLED SANS-SERIF DIGIT ONE] +"\u2780" => "1" + +# ➊ [DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT ONE] +"\u278A" => "1" + +# 1 [FULLWIDTH DIGIT ONE] +"\uFF11" => "1" + +# ⒈ [DIGIT ONE FULL STOP] +"\u2488" => "1." + +# ⑴ [PARENTHESIZED DIGIT ONE] +"\u2474" => "(1)" + +# ² [SUPERSCRIPT TWO] +"\u00B2" => "2" + +# ₂ [SUBSCRIPT TWO] +"\u2082" => "2" + +# ② [CIRCLED DIGIT TWO] +"\u2461" => "2" + +# ⓶ [DOUBLE CIRCLED DIGIT TWO] +"\u24F6" => "2" + +# ❷ [DINGBAT NEGATIVE CIRCLED DIGIT TWO] +"\u2777" => "2" + +# ➁ [DINGBAT CIRCLED SANS-SERIF DIGIT TWO] +"\u2781" => "2" + +# ➋ [DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT TWO] +"\u278B" => "2" + +# 2 [FULLWIDTH DIGIT TWO] +"\uFF12" => "2" + +# ⒉ [DIGIT TWO FULL STOP] +"\u2489" => "2." + +# ⑵ [PARENTHESIZED DIGIT TWO] +"\u2475" => "(2)" + +# ³ [SUPERSCRIPT THREE] +"\u00B3" => "3" + +# ₃ [SUBSCRIPT THREE] +"\u2083" => "3" + +# ③ [CIRCLED DIGIT THREE] +"\u2462" => "3" + +# ⓷ [DOUBLE CIRCLED DIGIT THREE] +"\u24F7" => "3" + +# ❸ [DINGBAT NEGATIVE CIRCLED DIGIT THREE] +"\u2778" => "3" + +# ➂ [DINGBAT CIRCLED SANS-SERIF DIGIT THREE] +"\u2782" => "3" + +# ➌ [DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT THREE] +"\u278C" => "3" + +# 3 [FULLWIDTH DIGIT THREE] +"\uFF13" => "3" + +# ⒊ [DIGIT THREE FULL STOP] +"\u248A" => "3." + +# ⑶ [PARENTHESIZED DIGIT THREE] +"\u2476" => "(3)" + +# ⁴ [SUPERSCRIPT FOUR] +"\u2074" => "4" + +# ₄ [SUBSCRIPT FOUR] +"\u2084" => "4" + +# ④ [CIRCLED DIGIT FOUR] +"\u2463" => "4" + +# ⓸ [DOUBLE CIRCLED DIGIT FOUR] +"\u24F8" => "4" + +# ❹ [DINGBAT NEGATIVE CIRCLED DIGIT FOUR] +"\u2779" => "4" + +# ➃ [DINGBAT CIRCLED SANS-SERIF DIGIT FOUR] +"\u2783" => "4" + +# ➍ [DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT FOUR] +"\u278D" => "4" + +# 4 [FULLWIDTH DIGIT FOUR] +"\uFF14" => "4" + +# ⒋ [DIGIT FOUR FULL STOP] +"\u248B" => "4." + +# ⑷ [PARENTHESIZED DIGIT FOUR] +"\u2477" => "(4)" + +# ⁵ [SUPERSCRIPT FIVE] +"\u2075" => "5" + +# ₅ [SUBSCRIPT FIVE] +"\u2085" => "5" + +# ⑤ [CIRCLED DIGIT FIVE] +"\u2464" => "5" + +# ⓹ [DOUBLE CIRCLED DIGIT FIVE] +"\u24F9" => "5" + +# ❺ [DINGBAT NEGATIVE CIRCLED DIGIT FIVE] +"\u277A" => "5" + +# ➄ [DINGBAT CIRCLED SANS-SERIF DIGIT FIVE] +"\u2784" => "5" + +# ➎ [DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT FIVE] +"\u278E" => "5" + +# 5 [FULLWIDTH DIGIT FIVE] +"\uFF15" => "5" + +# ⒌ [DIGIT FIVE FULL STOP] +"\u248C" => "5." + +# ⑸ [PARENTHESIZED DIGIT FIVE] +"\u2478" => "(5)" + +# ⁶ [SUPERSCRIPT SIX] +"\u2076" => "6" + +# ₆ [SUBSCRIPT SIX] +"\u2086" => "6" + +# ⑥ [CIRCLED DIGIT SIX] +"\u2465" => "6" + +# ⓺ [DOUBLE CIRCLED DIGIT SIX] +"\u24FA" => "6" + +# ❻ [DINGBAT NEGATIVE CIRCLED DIGIT SIX] +"\u277B" => "6" + +# ➅ [DINGBAT CIRCLED SANS-SERIF DIGIT SIX] +"\u2785" => "6" + +# ➏ [DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT SIX] +"\u278F" => "6" + +# 6 [FULLWIDTH DIGIT SIX] +"\uFF16" => "6" + +# ⒍ [DIGIT SIX FULL STOP] +"\u248D" => "6." + +# ⑹ [PARENTHESIZED DIGIT SIX] +"\u2479" => "(6)" + +# ⁷ [SUPERSCRIPT SEVEN] +"\u2077" => "7" + +# ₇ [SUBSCRIPT SEVEN] +"\u2087" => "7" + +# ⑦ [CIRCLED DIGIT SEVEN] +"\u2466" => "7" + +# ⓻ [DOUBLE CIRCLED DIGIT SEVEN] +"\u24FB" => "7" + +# ❼ [DINGBAT NEGATIVE CIRCLED DIGIT SEVEN] +"\u277C" => "7" + +# ➆ [DINGBAT CIRCLED SANS-SERIF DIGIT SEVEN] +"\u2786" => "7" + +# ➐ [DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT SEVEN] +"\u2790" => "7" + +# 7 [FULLWIDTH DIGIT SEVEN] +"\uFF17" => "7" + +# ⒎ [DIGIT SEVEN FULL STOP] +"\u248E" => "7." + +# ⑺ [PARENTHESIZED DIGIT SEVEN] +"\u247A" => "(7)" + +# ⁸ [SUPERSCRIPT EIGHT] +"\u2078" => "8" + +# ₈ [SUBSCRIPT EIGHT] +"\u2088" => "8" + +# ⑧ [CIRCLED DIGIT EIGHT] +"\u2467" => "8" + +# ⓼ [DOUBLE CIRCLED DIGIT EIGHT] +"\u24FC" => "8" + +# ❽ [DINGBAT NEGATIVE CIRCLED DIGIT EIGHT] +"\u277D" => "8" + +# ➇ [DINGBAT CIRCLED SANS-SERIF DIGIT EIGHT] +"\u2787" => "8" + +# ➑ [DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT EIGHT] +"\u2791" => "8" + +# 8 [FULLWIDTH DIGIT EIGHT] +"\uFF18" => "8" + +# ⒏ [DIGIT EIGHT FULL STOP] +"\u248F" => "8." + +# ⑻ [PARENTHESIZED DIGIT EIGHT] +"\u247B" => "(8)" + +# ⁹ [SUPERSCRIPT NINE] +"\u2079" => "9" + +# ₉ [SUBSCRIPT NINE] +"\u2089" => "9" + +# ⑨ [CIRCLED DIGIT NINE] +"\u2468" => "9" + +# ⓽ [DOUBLE CIRCLED DIGIT NINE] +"\u24FD" => "9" + +# ❾ [DINGBAT NEGATIVE CIRCLED DIGIT NINE] +"\u277E" => "9" + +# ➈ [DINGBAT CIRCLED SANS-SERIF DIGIT NINE] +"\u2788" => "9" + +# ➒ [DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT NINE] +"\u2792" => "9" + +# 9 [FULLWIDTH DIGIT NINE] +"\uFF19" => "9" + +# ⒐ [DIGIT NINE FULL STOP] +"\u2490" => "9." + +# ⑼ [PARENTHESIZED DIGIT NINE] +"\u247C" => "(9)" + +# ⑩ [CIRCLED NUMBER TEN] +"\u2469" => "10" + +# ⓾ [DOUBLE CIRCLED NUMBER TEN] +"\u24FE" => "10" + +# ❿ [DINGBAT NEGATIVE CIRCLED NUMBER TEN] +"\u277F" => "10" + +# ➉ [DINGBAT CIRCLED SANS-SERIF NUMBER TEN] +"\u2789" => "10" + +# ➓ [DINGBAT NEGATIVE CIRCLED SANS-SERIF NUMBER TEN] +"\u2793" => "10" + +# ⒑ [NUMBER TEN FULL STOP] +"\u2491" => "10." + +# ⑽ [PARENTHESIZED NUMBER TEN] +"\u247D" => "(10)" + +# ⑪ [CIRCLED NUMBER ELEVEN] +"\u246A" => "11" + +# ⓫ [NEGATIVE CIRCLED NUMBER ELEVEN] +"\u24EB" => "11" + +# ⒒ [NUMBER ELEVEN FULL STOP] +"\u2492" => "11." + +# ⑾ [PARENTHESIZED NUMBER ELEVEN] +"\u247E" => "(11)" + +# ⑫ [CIRCLED NUMBER TWELVE] +"\u246B" => "12" + +# ⓬ [NEGATIVE CIRCLED NUMBER TWELVE] +"\u24EC" => "12" + +# ⒓ [NUMBER TWELVE FULL STOP] +"\u2493" => "12." + +# ⑿ [PARENTHESIZED NUMBER TWELVE] +"\u247F" => "(12)" + +# ⑬ [CIRCLED NUMBER THIRTEEN] +"\u246C" => "13" + +# ⓭ [NEGATIVE CIRCLED NUMBER THIRTEEN] +"\u24ED" => "13" + +# ⒔ [NUMBER THIRTEEN FULL STOP] +"\u2494" => "13." + +# ⒀ [PARENTHESIZED NUMBER THIRTEEN] +"\u2480" => "(13)" + +# ⑭ [CIRCLED NUMBER FOURTEEN] +"\u246D" => "14" + +# ⓮ [NEGATIVE CIRCLED NUMBER FOURTEEN] +"\u24EE" => "14" + +# ⒕ [NUMBER FOURTEEN FULL STOP] +"\u2495" => "14." + +# ⒁ [PARENTHESIZED NUMBER FOURTEEN] +"\u2481" => "(14)" + +# ⑮ [CIRCLED NUMBER FIFTEEN] +"\u246E" => "15" + +# ⓯ [NEGATIVE CIRCLED NUMBER FIFTEEN] +"\u24EF" => "15" + +# ⒖ [NUMBER FIFTEEN FULL STOP] +"\u2496" => "15." + +# ⒂ [PARENTHESIZED NUMBER FIFTEEN] +"\u2482" => "(15)" + +# ⑯ [CIRCLED NUMBER SIXTEEN] +"\u246F" => "16" + +# ⓰ [NEGATIVE CIRCLED NUMBER SIXTEEN] +"\u24F0" => "16" + +# ⒗ [NUMBER SIXTEEN FULL STOP] +"\u2497" => "16." + +# ⒃ [PARENTHESIZED NUMBER SIXTEEN] +"\u2483" => "(16)" + +# ⑰ [CIRCLED NUMBER SEVENTEEN] +"\u2470" => "17" + +# ⓱ [NEGATIVE CIRCLED NUMBER SEVENTEEN] +"\u24F1" => "17" + +# ⒘ [NUMBER SEVENTEEN FULL STOP] +"\u2498" => "17." + +# ⒄ [PARENTHESIZED NUMBER SEVENTEEN] +"\u2484" => "(17)" + +# ⑱ [CIRCLED NUMBER EIGHTEEN] +"\u2471" => "18" + +# ⓲ [NEGATIVE CIRCLED NUMBER EIGHTEEN] +"\u24F2" => "18" + +# ⒙ [NUMBER EIGHTEEN FULL STOP] +"\u2499" => "18." + +# ⒅ [PARENTHESIZED NUMBER EIGHTEEN] +"\u2485" => "(18)" + +# ⑲ [CIRCLED NUMBER NINETEEN] +"\u2472" => "19" + +# ⓳ [NEGATIVE CIRCLED NUMBER NINETEEN] +"\u24F3" => "19" + +# ⒚ [NUMBER NINETEEN FULL STOP] +"\u249A" => "19." + +# ⒆ [PARENTHESIZED NUMBER NINETEEN] +"\u2486" => "(19)" + +# ⑳ [CIRCLED NUMBER TWENTY] +"\u2473" => "20" + +# ⓴ [NEGATIVE CIRCLED NUMBER TWENTY] +"\u24F4" => "20" + +# ⒛ [NUMBER TWENTY FULL STOP] +"\u249B" => "20." + +# ⒇ [PARENTHESIZED NUMBER TWENTY] +"\u2487" => "(20)" + +# « [LEFT-POINTING DOUBLE ANGLE QUOTATION MARK] +"\u00AB" => "\"" + +# » [RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK] +"\u00BB" => "\"" + +# “ [LEFT DOUBLE QUOTATION MARK] +"\u201C" => "\"" + +# ” [RIGHT DOUBLE QUOTATION MARK] +"\u201D" => "\"" + +# „ [DOUBLE LOW-9 QUOTATION MARK] +"\u201E" => "\"" + +# ″ [DOUBLE PRIME] +"\u2033" => "\"" + +# ‶ [REVERSED DOUBLE PRIME] +"\u2036" => "\"" + +# ❝ [HEAVY DOUBLE TURNED COMMA QUOTATION MARK ORNAMENT] +"\u275D" => "\"" + +# ❞ [HEAVY DOUBLE COMMA QUOTATION MARK ORNAMENT] +"\u275E" => "\"" + +# ❮ [HEAVY LEFT-POINTING ANGLE QUOTATION MARK ORNAMENT] +"\u276E" => "\"" + +# ❯ [HEAVY RIGHT-POINTING ANGLE QUOTATION MARK ORNAMENT] +"\u276F" => "\"" + +# " [FULLWIDTH QUOTATION MARK] +"\uFF02" => "\"" + +# ‘ [LEFT SINGLE QUOTATION MARK] +"\u2018" => "\'" + +# ’ [RIGHT SINGLE QUOTATION MARK] +"\u2019" => "\'" + +# ‚ [SINGLE LOW-9 QUOTATION MARK] +"\u201A" => "\'" + +# ‛ [SINGLE HIGH-REVERSED-9 QUOTATION MARK] +"\u201B" => "\'" + +# ′ [PRIME] +"\u2032" => "\'" + +# ‵ [REVERSED PRIME] +"\u2035" => "\'" + +# ‹ [SINGLE LEFT-POINTING ANGLE QUOTATION MARK] +"\u2039" => "\'" + +# › [SINGLE RIGHT-POINTING ANGLE QUOTATION MARK] +"\u203A" => "\'" + +# ❛ [HEAVY SINGLE TURNED COMMA QUOTATION MARK ORNAMENT] +"\u275B" => "\'" + +# ❜ [HEAVY SINGLE COMMA QUOTATION MARK ORNAMENT] +"\u275C" => "\'" + +# ' [FULLWIDTH APOSTROPHE] +"\uFF07" => "\'" + +# ‐ [HYPHEN] +"\u2010" => "-" + +# ‑ [NON-BREAKING HYPHEN] +"\u2011" => "-" + +# ‒ [FIGURE DASH] +"\u2012" => "-" + +# – [EN DASH] +"\u2013" => "-" + +# — [EM DASH] +"\u2014" => "-" + +# ⁻ [SUPERSCRIPT MINUS] +"\u207B" => "-" + +# ₋ [SUBSCRIPT MINUS] +"\u208B" => "-" + +# - [FULLWIDTH HYPHEN-MINUS] +"\uFF0D" => "-" + +# ⁅ [LEFT SQUARE BRACKET WITH QUILL] +"\u2045" => "[" + +# ❲ [LIGHT LEFT TORTOISE SHELL BRACKET ORNAMENT] +"\u2772" => "[" + +# [ [FULLWIDTH LEFT SQUARE BRACKET] +"\uFF3B" => "[" + +# ⁆ [RIGHT SQUARE BRACKET WITH QUILL] +"\u2046" => "]" + +# ❳ [LIGHT RIGHT TORTOISE SHELL BRACKET ORNAMENT] +"\u2773" => "]" + +# ] [FULLWIDTH RIGHT SQUARE BRACKET] +"\uFF3D" => "]" + +# ⁽ [SUPERSCRIPT LEFT PARENTHESIS] +"\u207D" => "(" + +# ₍ [SUBSCRIPT LEFT PARENTHESIS] +"\u208D" => "(" + +# ❨ [MEDIUM LEFT PARENTHESIS ORNAMENT] +"\u2768" => "(" + +# ❪ [MEDIUM FLATTENED LEFT PARENTHESIS ORNAMENT] +"\u276A" => "(" + +# ( [FULLWIDTH LEFT PARENTHESIS] +"\uFF08" => "(" + +# ⸨ [LEFT DOUBLE PARENTHESIS] +"\u2E28" => "((" + +# ⁾ [SUPERSCRIPT RIGHT PARENTHESIS] +"\u207E" => ")" + +# ₎ [SUBSCRIPT RIGHT PARENTHESIS] +"\u208E" => ")" + +# ❩ [MEDIUM RIGHT PARENTHESIS ORNAMENT] +"\u2769" => ")" + +# ❫ [MEDIUM FLATTENED RIGHT PARENTHESIS ORNAMENT] +"\u276B" => ")" + +# ) [FULLWIDTH RIGHT PARENTHESIS] +"\uFF09" => ")" + +# ⸩ [RIGHT DOUBLE PARENTHESIS] +"\u2E29" => "))" + +# ❬ [MEDIUM LEFT-POINTING ANGLE BRACKET ORNAMENT] +"\u276C" => "<" + +# ❰ [HEAVY LEFT-POINTING ANGLE BRACKET ORNAMENT] +"\u2770" => "<" + +# < [FULLWIDTH LESS-THAN SIGN] +"\uFF1C" => "<" + +# ❭ [MEDIUM RIGHT-POINTING ANGLE BRACKET ORNAMENT] +"\u276D" => ">" + +# ❱ [HEAVY RIGHT-POINTING ANGLE BRACKET ORNAMENT] +"\u2771" => ">" + +# > [FULLWIDTH GREATER-THAN SIGN] +"\uFF1E" => ">" + +# ❴ [MEDIUM LEFT CURLY BRACKET ORNAMENT] +"\u2774" => "{" + +# { [FULLWIDTH LEFT CURLY BRACKET] +"\uFF5B" => "{" + +# ❵ [MEDIUM RIGHT CURLY BRACKET ORNAMENT] +"\u2775" => "}" + +# } [FULLWIDTH RIGHT CURLY BRACKET] +"\uFF5D" => "}" + +# ⁺ [SUPERSCRIPT PLUS SIGN] +"\u207A" => "+" + +# ₊ [SUBSCRIPT PLUS SIGN] +"\u208A" => "+" + +# + [FULLWIDTH PLUS SIGN] +"\uFF0B" => "+" + +# ⁼ [SUPERSCRIPT EQUALS SIGN] +"\u207C" => "=" + +# ₌ [SUBSCRIPT EQUALS SIGN] +"\u208C" => "=" + +# = [FULLWIDTH EQUALS SIGN] +"\uFF1D" => "=" + +# ! [FULLWIDTH EXCLAMATION MARK] +"\uFF01" => "!" + +# ‼ [DOUBLE EXCLAMATION MARK] +"\u203C" => "!!" + +# ⁉ [EXCLAMATION QUESTION MARK] +"\u2049" => "!?" + +# # [FULLWIDTH NUMBER SIGN] +"\uFF03" => "#" + +# $ [FULLWIDTH DOLLAR SIGN] +"\uFF04" => "$" + +# ⁒ [COMMERCIAL MINUS SIGN] +"\u2052" => "%" + +# % [FULLWIDTH PERCENT SIGN] +"\uFF05" => "%" + +# & [FULLWIDTH AMPERSAND] +"\uFF06" => "&" + +# ⁎ [LOW ASTERISK] +"\u204E" => "*" + +# * [FULLWIDTH ASTERISK] +"\uFF0A" => "*" + +# , [FULLWIDTH COMMA] +"\uFF0C" => "," + +# . [FULLWIDTH FULL STOP] +"\uFF0E" => "." + +# ⁄ [FRACTION SLASH] +"\u2044" => "/" + +# / [FULLWIDTH SOLIDUS] +"\uFF0F" => "/" + +# : [FULLWIDTH COLON] +"\uFF1A" => ":" + +# ⁏ [REVERSED SEMICOLON] +"\u204F" => ";" + +# ; [FULLWIDTH SEMICOLON] +"\uFF1B" => ";" + +# ? [FULLWIDTH QUESTION MARK] +"\uFF1F" => "?" + +# ⁇ [DOUBLE QUESTION MARK] +"\u2047" => "??" + +# ⁈ [QUESTION EXCLAMATION MARK] +"\u2048" => "?!" + +# @ [FULLWIDTH COMMERCIAL AT] +"\uFF20" => "@" + +# \ [FULLWIDTH REVERSE SOLIDUS] +"\uFF3C" => "\\" + +# ‸ [CARET] +"\u2038" => "^" + +# ^ [FULLWIDTH CIRCUMFLEX ACCENT] +"\uFF3E" => "^" + +# _ [FULLWIDTH LOW LINE] +"\uFF3F" => "_" + +# ⁓ [SWUNG DASH] +"\u2053" => "~" + +# ~ [FULLWIDTH TILDE] +"\uFF5E" => "~" + +################################################################ +# Below is the Perl script used to generate the above mappings # +# from ASCIIFoldingFilter.java: # +################################################################ +# +# #!/usr/bin/perl +# +# use warnings; +# use strict; +# +# my @source_chars = (); +# my @source_char_descriptions = (); +# my $target = ''; +# +# while (<>) { +# if (/case\s+'(\\u[A-F0-9]+)':\s*\/\/\s*(.*)/i) { +# push @source_chars, $1; +# push @source_char_descriptions, $2; +# next; +# } +# if (/output\[[^\]]+\]\s*=\s*'(\\'|\\\\|.)'/) { +# $target .= $1; +# next; +# } +# if (/break;/) { +# $target = "\\\"" if ($target eq '"'); +# for my $source_char_num (0..$#source_chars) { +# print "# $source_char_descriptions[$source_char_num]\n"; +# print "\"$source_chars[$source_char_num]\" => \"$target\"\n\n"; +# } +# @source_chars = (); +# @source_char_descriptions = (); +# $target = ''; +# } +# } diff --git a/src/main/resources/solr_config/Test_Sigmah/conf/params.json b/src/main/resources/solr_config/Test_Sigmah/conf/params.json new file mode 100644 index 000000000..06114ef25 --- /dev/null +++ b/src/main/resources/solr_config/Test_Sigmah/conf/params.json @@ -0,0 +1,20 @@ +{"params":{ + "query":{ + "defType":"edismax", + "q.alt":"*:*", + "rows":"10", + "fl":"*,score", + "":{"v":0} + }, + "facets":{ + "facet":"on", + "facet.mincount": "1", + "":{"v":0} + }, + "velocity":{ + "wt": "velocity", + "v.template":"browse", + "v.layout": "layout", + "":{"v":0} + } +}} \ No newline at end of file diff --git a/src/main/resources/solr_config/Test_Sigmah/conf/protwords.txt b/src/main/resources/solr_config/Test_Sigmah/conf/protwords.txt new file mode 100644 index 000000000..1dfc0abec --- /dev/null +++ b/src/main/resources/solr_config/Test_Sigmah/conf/protwords.txt @@ -0,0 +1,21 @@ +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +#----------------------------------------------------------------------- +# Use a protected word file to protect against the stemmer reducing two +# unrelated words to the same base word. + +# Some non-words that normally won't be encountered, +# just to test that they won't be stemmed. +dontstems +zwhacky + diff --git a/src/main/resources/solr_config/Test_Sigmah/conf/schema.xml b/src/main/resources/solr_config/Test_Sigmah/conf/schema.xml new file mode 100644 index 000000000..b969c59fd --- /dev/null +++ b/src/main/resources/solr_config/Test_Sigmah/conf/schema.xml @@ -0,0 +1,1163 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + doc_id + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/solr_config/Test_Sigmah/conf/solrconfig.xml b/src/main/resources/solr_config/Test_Sigmah/conf/solrconfig.xml new file mode 100644 index 000000000..82eeaf922 --- /dev/null +++ b/src/main/resources/solr_config/Test_Sigmah/conf/solrconfig.xml @@ -0,0 +1,1418 @@ + + + + + + + + + + 6.5.0 + + + + + + + + + + + + + + + + + + + + + + + ${solr.data.dir:} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ${solr.lock.type:native} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ${solr.ulog.dir:} + ${solr.ulog.numVersionBuckets:65536} + + + + + ${solr.autoCommit.maxTime:15000} + false + + + + + + ${solr.autoSoftCommit.maxTime:-1} + + + + + + + + + + + + + + + + 1024 + + + + + + + + + + + + + + + + + + + + + + + + + true + + + + + + 20 + + + 200 + + + + + + + + + + + + + + + + false + + + + + + + + + + + + + + + + + + + + + + data-config.xml + + + + + + + explicit + 1000 + + + + + + + + + + + + + + + explicit + json + true + + + + + + + + explicit + + + + + + _text_ + + + + + + add-unknown-fields-to-the-schema + + + + + + + true + ignored_ + _text_ + + + + + + + + + text_general + + + + + + default + _text_ + solr.DirectSolrSpellChecker + + internal + + 0.5 + + 2 + + 1 + + 5 + + 4 + + 0.01 + + + + + + + + + + + + default + on + true + 10 + 5 + 5 + true + true + 10 + 5 + + + spellcheck + + + + + + + + + + true + + + tvComponent + + + + + + + + + + + + true + false + + + terms + + + + + + + + string + elevate.xml + + + + + + explicit + + + elevator + + + + + + + + + + + 100 + + + + + + + + 70 + + 0.5 + + [-\w ,/\n\"']{20,200} + + + + + + + ]]> + ]]> + + + + + + + + + + + + + + + + + + + + + + + + ,, + ,, + ,, + ,, + ,]]> + ]]> + + + + + + 10 + .,!? + + + + + + + WORD + + + en + US + + + + + + + + + + + + + + [^\w-\.] + _ + + + + + + + yyyy-MM-dd'T'HH:mm:ss.SSSZ + yyyy-MM-dd'T'HH:mm:ss,SSSZ + yyyy-MM-dd'T'HH:mm:ss.SSS + yyyy-MM-dd'T'HH:mm:ss,SSS + yyyy-MM-dd'T'HH:mm:ssZ + yyyy-MM-dd'T'HH:mm:ss + yyyy-MM-dd'T'HH:mmZ + yyyy-MM-dd'T'HH:mm + yyyy-MM-dd HH:mm:ss.SSSZ + yyyy-MM-dd HH:mm:ss,SSSZ + yyyy-MM-dd HH:mm:ss.SSS + yyyy-MM-dd HH:mm:ss,SSS + yyyy-MM-dd HH:mm:ssZ + yyyy-MM-dd HH:mm:ss + yyyy-MM-dd HH:mmZ + yyyy-MM-dd HH:mm + yyyy-MM-dd + + + + strings + + java.lang.Boolean + booleans + + + java.util.Date + tdates + + + java.lang.Long + java.lang.Integer + tlongs + + + java.lang.Number + tdoubles + + + + + + + + + + + + + + + + + + + + + + + text/plain; charset=UTF-8 + + + + + ${velocity.template.base.dir:} + ${velocity.solr.resource.loader.enabled:true} + ${velocity.params.resource.loader.enabled:false} + + + + + 5 + + + + + + + + + + + + + + diff --git a/src/main/resources/solr_config/Test_Sigmah/conf/stopwords.txt b/src/main/resources/solr_config/Test_Sigmah/conf/stopwords.txt new file mode 100644 index 000000000..516c3b319 --- /dev/null +++ b/src/main/resources/solr_config/Test_Sigmah/conf/stopwords.txt @@ -0,0 +1,210 @@ +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# Standard english stop words taken from Lucene's StopAnalyzer +a +an +and +are +as +at +be +but +by +for +if +in +into +is +it +no +not +of +on +or +such +that +the +their +then +there +these +they +this +to +was +will +with +# From svn.tartarus.org/snowball/trunk/website/algorithms/french/stop.txt +# This file is distributed under the BSD License. +# See http://snowball.tartarus.org/license.php +# Also see http://www.opensource.org/licenses/bsd-license.html +# - Encoding was converted to UTF-8. +# - This notice was added. +# A French stop word list. Comments begin with vertical bar. Each stop +# word is at the start of a line. +au +aux +avec +ce +ces +dans +de +des +du +elle +en +et +eux +il +je +la +le +leur +lui +ma +mais +me +même +mes +moi +mon +ne +nos +notre +nous +on +ou +par +pas +pour +qu +que +qui +sa +se +ses +son +sur +ta +te +tes +toi +ton +tu +un +une +vos +votre +vous +été +étée +étées +étés +étant +suis +es +est +sommes +êtes +sont +serai +seras +sera +serons +serez +seront +serais +serait +serions +seriez +seraient +étais +était +étions +étiez +étaient +fus +fut +fûmes +fûtes +furent +sois +soit +soyons +soyez +soient +fusse +fusses +fût +fussions +fussiez +fussent +ayant +eu +eue +eues +eus +ai +as +avons +avez +ont +aurai +auras +aura +aurons +aurez +auront +aurais +aurait +aurions +auriez +auraient +avais +avait +avions +aviez +avaient +eut +eûmes +eûtes +eurent +aie +aies +ait +ayons +ayez +aient +eusse +eusses +eût +eussions +eussiez +eussent +ceci +cela +celà +cet +cette +ici +ils +les +leurs +quel +quels +quelle +quelles +sans +soi diff --git a/src/main/resources/solr_config/Test_Sigmah/conf/synonyms.txt b/src/main/resources/solr_config/Test_Sigmah/conf/synonyms.txt new file mode 100644 index 000000000..7f7212830 --- /dev/null +++ b/src/main/resources/solr_config/Test_Sigmah/conf/synonyms.txt @@ -0,0 +1,29 @@ +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +#----------------------------------------------------------------------- +#some test synonym mappings unlikely to appear in real input text +aaafoo => aaabar +bbbfoo => bbbfoo bbbbar +cccfoo => cccbar cccbaz +fooaaa,baraaa,bazaaa + +# Some synonym groups specific to this example +GB,gib,gigabyte,gigabytes +MB,mib,megabyte,megabytes +Television, Televisions, TV, TVs +#notice we use "gib" instead of "GiB" so any WordDelimiterFilter coming +#after us won't split it into two words. + +# Synonym mappings can be used for spelling correction too +pixima => pixma + diff --git a/src/main/resources/solr_config/Test_Sigmah/core.properties b/src/main/resources/solr_config/Test_Sigmah/core.properties new file mode 100644 index 000000000..949131ac8 --- /dev/null +++ b/src/main/resources/solr_config/Test_Sigmah/core.properties @@ -0,0 +1,3 @@ +#Written by CorePropertiesLocator +#Wed May 10 15:56:03 UTC 2017 +name=Test_Sigmah diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_4e.dii b/src/main/resources/solr_config/Test_Sigmah/data/index/_4e.dii new file mode 100644 index 0000000000000000000000000000000000000000..0b1eade3b0ddc9ca2a129bd7efdd968dd19d1712 GIT binary patch literal 86 zcmcD&o+B>dQ<|KbmuhAZke``XQtXyrl$%)Mn_7~{00asrqNcDO`FZg6)w|md-TpX< lfnBhNMR*6RXr19}R>c*}Qr;@-nGR@7egRSp0zt{CmjRZJA0Pk# literal 0 HcmV?d00001 diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_4e.dim b/src/main/resources/solr_config/Test_Sigmah/data/index/_4e.dim new file mode 100644 index 0000000000000000000000000000000000000000..aacc0d93f69c087b2728f6bc9d6d69640c33f8e7 GIT binary patch literal 801 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%0A|_ntdIZ|Ao$58~DSZm1k}G z(2veAQG~n41WL9pR^DgiOX*S)qBsazETexWWP~0{*Q3Y6`j~H3D)tme69VS}()Dei aTuWjKe!jnQ<|KbmuhMdT#{dun&Ot3nv+uOmRMZknU|7U!N9=4sBj``3hR-d2X9}! iyZzAZkCPaf7=fY;RzS>fUi^T@A8g!MniI!H$_y? z&-|yyZ?=B?@qYdD*S84HpXsw@_5qc4g$E*1jITy3 zLbk9v*|fjPNsy(5IrrLa5j?_SO#l4eV!!30xY=Yciv8DdFBArmqAwIG76u9qWU1e( z8$kAZEnB|7g*leEP+ zp%R5GQbVBmnAUJxf-@zgJ`!!gxQZ<73TW6h?V6nEAB7UDsQR#qN`ONh21`bULDMmw z(;;bx8GVm{23#?+!yKsGnQgOgF0Pwn$s# zQmtsR!;_TDM#@GhJ3&iiOy^r6S21TVvC?JCF3>w@%9wN$Xa57BF;{YJ4m40(Z>7h= z4oG%`hC8GM(8gxQG7lQ(gqymVteGawJ)WFq*u^rVt-U@RzUCq{<1jQ)_W6iXcTsEw zW{BJGiLrXO=p&zerg+ z1Dd6JV)lvg+e~&AG~TI<=iZB_MbM~obtL7jsd5vyTmp@|nz7BuInYQ=(U*wWnc#UJ zCYYN__f_Hr(A4CG-G<5JMbNNws#7bqrTitoyXr!*NSwJ0dbBf<2|n*XuJ|CQu_2IR zDx_C^M9OzO`K077@|urO^BX=&|CtTRtj?BwL~Xc=&B@HPEY~+Bk`eR`ACX2)mx7v1 zM#_B6O&>9aYz(vfEg#EQ?ed{8_tUpQANq<#N?VwPcYHAM?(pkx=6}u16Fm&>{{lV6 BAFKcX literal 0 HcmV?d00001 diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_4e.nvd b/src/main/resources/solr_config/Test_Sigmah/data/index/_4e.nvd new file mode 100644 index 0000000000000000000000000000000000000000..0f7e0a4c6a3bb19a512d36d7b580c6583a07ecec GIT binary patch literal 995 zcmcD&o+B>kQ<|KbmuhP4mtT}y?2=fL$N&TiC!(gX9{G9j_SL)F58eJaiJ<@t@_{4> z13?iAD1`DV&;iIWOi+UkFqMEr&{fr7S5{dGR0zUg3dqB*459$05Xi%)tO96a3D7f@ zmF3u#VTe{>h+q{!2_UR0z=BZ6LMYtIP-H+}0&9SXg8TM%r+HDX92 e1i;Fmeng03uwX$2qT!MUG$y}*acW*3d<+1(P_1A9 literal 0 HcmV?d00001 diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_4e.nvm b/src/main/resources/solr_config/Test_Sigmah/data/index/_4e.nvm new file mode 100644 index 0000000000000000000000000000000000000000..efc7434d50add620e3d56e4e01a50ecce9b37f2f GIT binary patch literal 308 zcmcD&o+B>mQ<|KbmuhP4mtT}y?3-GWn37nM$N&TiC!(gX9{G9j_SL)F58eJaiGh(3 zBn$-FOfXgu3yf9C4Pz~kfU%A%!C3EC9gt5$>V5~T27^~G4##-|q2>1_ZOnw3J LH3NfZ<#GW4ERQU% literal 0 HcmV?d00001 diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_4e.si b/src/main/resources/solr_config/Test_Sigmah/data/index/_4e.si new file mode 100644 index 0000000000000000000000000000000000000000..71a01a2fe62b68b52890c7bda7166a6024cdf621 GIT binary patch literal 527 zcmZWm&r8EF6z+s>thy;Gcyu?tEHtxQ-APb45C#hMV<%EgpK2lbLl!4ozAKDw15AZeWs>OC%2PdTwthY literal 0 HcmV?d00001 diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_4e_Lucene50_0.doc b/src/main/resources/solr_config/Test_Sigmah/data/index/_4e_Lucene50_0.doc new file mode 100644 index 0000000000000000000000000000000000000000..56d80cd7d478de5c0106d4d6b7f667f016daab18 GIT binary patch literal 1814 zcmZ`)OK%e~5MIyhWV_k8?zY`7X`3cXsEVkNdO;!*p$df?2X07QIFzcYgj%UBe}uK_<**yX^;%FJ1PCDzkB}uD9)jpVRF4kv875-Dm?6f34}p(vPl5!o;1VEG)g$)dh~c{ zKf@kJ<>W*x%L&K6l>jx}XJ{hs6sAhl%Ao}q`oXu>5;nPN3UIQ-TZ5Fj8gxr+8X4S_ z^ODBZ!t%`JJ}hQPdHV>l7+|b)Ki0-ztSR4P73#n$m^n7ytApuJ6U=FfQ(T6JAm5fH zl^DX?T}Kdh){BvD37Thb-v?VSLPdePOf8GNxq{fJG{!#E zugFd7w9*t_o4L*b6^wvI!Ijj~4SJw3Qjmn9iaLrd5W`T1sv~eVT`+6u`?f?~L8Cun zjc~?KD4t>+7T@C@C&*9BQpJ&BC0$+!WRK67TZ?RJ%z=cp$*YTN`?M*DR!tjI&QC(D z%jEjiEfeW$ck9wqM%&-zR+BZIZ%tgI4n60$nl`VQe5%7g5 co~(@gCfKUN_HN{KPYWJTE?hgMWHPv6~|Qs&)H*Dq5cV{nMzjxH* z%zklKp5|#<8cmZiA^M-crqGKtsc=nUkfxNpX9sCwk!YH%2|#Ra7B;%XuDUSGb+cmX_9f=mm}2&-p9jxNyyTmY*i$0@#i8)|8Yc zSo5?AV>{K7n!-^b4RlzYCK*pk$#@*hxm_nb6|o|gMGGuuk+N8qqpp@z77H|`EOMh| zcY&70E}K$L1p9!7_<^VGw=$YJ^+TLzW*wC)&OZuddRQMZ_vS_-auDWc7=0X-p zDhcJ5ys25>Fho;sL{5dTdAZN{BITf+#rAdfgUq3V?WHL=+31DP0$@Ir3!ey|eB!baZ!rhs><-)3mb^>enw#{N2jrNB=W3x5@}4+& zY)fg%O*sKtZz*`ZEn^`x=Zm(q^Px9b3L>clCPSTj`Iap~TB1{Ml$LRX{U~o4Q$XKj zV?w>-=X%G_buaFKy&{$VhG3A6FiBcBq=8ZvGafW$%-%T{T=rVzFY>ZQnu0SF*CvdE z#vucIXok>&8Ba^w(w4or&Y4sZtKNh%?<>--4`WJuQ=~<@(WNDN$Jj9L0M-qj{2L&S zvE0S{SW}tC5)Y01lBG>acL>jf*Krg|3wW&9AFMd;tl4SNOa+=% z(^7$-VtBzPSR8Ui9C-LNq|vOJQ$G!2R=fdwCfQr;o4~u|V_M)BxqrhfB$MH&`^~_z zj+eDScaO1kHrBx*bfhG&!oJ$&Y@NjS0P& z^<~wpnz3Q}R&?yo`WC$pA=>NS=!$5I2arzYfy5fC&{Z;p1q?7-|{ZqMeQKfRG4`3O9%XKZu9YDRoo3EH?a0`i#1&FNErm zYNQr9!dglce&ArBrti9bA=ChQJ+h+Dhc1px8M*LG`0J5sq!AhX3ikVNc%dhZQG;pX z=;3e}F&NSr^#kd3EfdTJuY{H$ylZ*`;$kk41^E#z3ugN&w5->4OZql&9WwGwJx|Zj z-3QnPJJ7{@>LF&jO?O&Ku)18A^AI5$@H|-38UD0q7%sbq!;&&;oW+<6uM8L>t6mCJ zIMbc?U<{sA&w{5RIlIxXhgnXwq;;j?U02qX3fEg>@CLy;NZVICQFyfzg;#BtVXsJC zF8I>AVfw(}@Wa3>h0lc+Ap9^~;+h#c2RIMU@w7V0rd0>W)sH-B>22cF{+=Vn_9IW( z-H*d|SRpOaUjCjfL0Y1=h}++ezc_R?-AKk~G#OapVr;KyP_OR{bk} ztY3$!;K?eWrcWx{%48Qw1+N_bS83=u@Vx0;7E^4()@4F*TGaTCttHYDb^Qu&9T524 zHY@`9f1tn{*i*RPQRfa}+bg&Eu7m*B?X-uSh22HnFE}Ip3%c`=;koX1_UyhvS7)bw zg}S?P_@whZ{t4=wtAF+X>A~kcF2eC5CK7u=kRt+50+hJzF6VJRa} literal 0 HcmV?d00001 diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_4e_Lucene50_0.tim b/src/main/resources/solr_config/Test_Sigmah/data/index/_4e_Lucene50_0.tim new file mode 100644 index 0000000000000000000000000000000000000000..65b82df5e3752f0aa271295b787c7e7fa66d613f GIT binary patch literal 11098 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_4e_Lucene50_0.tip b/src/main/resources/solr_config/Test_Sigmah/data/index/_4e_Lucene50_0.tip new file mode 100644 index 0000000000000000000000000000000000000000..e7d64da3b7165db0a3ce928eff64b1c6ba469f0c GIT binary patch literal 1693 zcmZvdO-K}B9LC@IzccTAK^-KeVEee`smsPxrLE%T znxPeI2rU)53%ev~n)bDzqz3Emg3`8WX*<%whFJriqGv8M{CMVhpZ9tH!_>^zSCk#A zZ>qiEYql(()!cCDL}Q(Gl`+QmPMzsg#!I8A*>r3yRR|cTuGCtMmdAb8UE{pQkDvBA zGKERyyL&HJq?^iy&u>fBsp)e(>lG(sJJAp9Dr8}5=quqx`o0q;d%z`h3%_eUWP!v<-< zhU&*#0jt}ju=GOuD6L3->ZYeONg4V{H~B*z=hHmT|L`vPi99Z+WLv(W^eHhVseD#8 zlnyZ{M#U$wCa$Z!>X7L=|@^1c9JGdKL`mRM%x$Lv4qroHZ4k%C^#8dtf(X`RS_RmDuGB5 z6A}X|Or4mGSXdZ3U=RZfBVs6sm6Z{xBHUeU--QUF@CN(mckli0-TB?EeBKI&N;{ja z?UtO(-`H$4w{}{$^UXU=fGqam>ND^ApKp&oeSQ7z=*Pa#i8O>>&jWzx#MroR=H#i< z{#ozT^yCDGlm24ARshK%!-Xa<48>Vp08kXRsA)bYFyb`nV^kF~KgdBCBj`RXTrsh0 zHxpIYO~C4Z9u5P%9TJ z0IT2q)@xZ#7Fh-_725fDfJ-}G_ic4aaU`nI>6nN6{KKIrduvEinNufHjNOctG=1PL`H1-alD$McsP!WBZEn)|Avwu z^~t&O7v>h1&cx2fm&4J8`ACACUGK!?)UEb^MZNbQ|Bn1m=dVj1?Ka(dtHix`qJk?jHCt?O79 zZ@TmI$*<=F!O&bdG9O)7Tw2C$l0Y4UBb^%=qX*r4k6wJlh|RkA^n0HG&|Y3T{0+A1 B9V-9; literal 0 HcmV?d00001 diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_4e_Lucene54_0.dvm b/src/main/resources/solr_config/Test_Sigmah/data/index/_4e_Lucene54_0.dvm new file mode 100644 index 0000000000000000000000000000000000000000..52837d37f9abb2500c890d0ffd9c2e652f0ba7e7 GIT binary patch literal 4034 zcmb7`du-H25XXPd>-A_4ij-1H@#K+1c~~uANuhUFszIRi0p)6;N`*=hkVZ;0q?igA zYa*qggb*L({-9AF8i*2tkXTL8N-!-@D5W5cQBo*iwGpel+}-)^7VhF7?jQHrnVsM4 z?#%4o`r1|{B+gy8wDh&oDU-9-EL~W#YF+8t?9z&oWhE6Q8f%`WqV0C$-`{kcy>$57 zj^DSrr1eWF12uzNur`gLWq1dp2beEV$NUWZfoNgeiiMmErhxOn7r`E)eS_$DmFP?a z1K>Skw43O<shN|Ge6X79#u2fV4%)xK4hY~-z3>xFT);+R$ql+ zTOW~uLK-pmf=%Fkq7?&<0G|Z2!D8??qJ5p{SV43S1O4D#Vl*=Ax+pWyJVC9tnQXLH zuZ^BWJUS~u z7N+rDsgOparphhqqhRFqx~QjqWuU|%W!j|}DFv5SoSo>VxH+>3VU6 zpl9Ysg1*Na1+#KJg1u$Dxb*3Vhcl=m(gR0URH|j|iBhxg;a1G-VOzDn@0?Zn2cNog`c)+CzCN>xjf3b$HWDpYCz zJ3&@Xit>^JFAE~P=rp2df?L7Ua=j~4l^5JRR=F30WXpbWDQMV{HU|o8gG-KC8_3$) z81cszq!AOx#{3>Ko&XkdVkNjyPN1>IpEF7ZZ<(5c!wB`tHIUbB!#s< zPOWx7R0ki7n4X!Gnac+B%;!IRpL6E3z2i7%f4qBvN^4WPk=|dry5WGUCh&|ZUEj66 z`$)-rV6-hgymYNLbq~v=+#IK7!=|lXSwzxN?;vH<3*UX=HhoX44fnz3Zp3{aULv@2 zbXh7#=}TRfj6GzqoY@{iV|JpPnPkmQd_>M{kG_~XX&PE9m>)>CRnv!KdmJ7SAG*V-u+vC1YJs(iU?gwW2PqIR7R zn_$FY3V#rk;xO6E64lqs@b!uZW5#vnLK-nY1-}FFnzQiyu*5$ZyD=xyxHSh{1l}Op z*NBegL?^phd2`}b;k-?9G!Cijf{a<+2pZ8eyN-JHP8knb?RF?eZ7Bq!$cHc9D&{9- zVd9U?#5uO2NpGQ$tO<}&s8$i=>qPr1(eVn=iGVw2K>mjqjZnGT<(8V0jHLdP9p%Ie z%WkF*>|X~_N7MX~C)>W76n?Vpt12Ke$G4oCA)j#YddusLKV7+J9;;f;91rLR%fS#a zx0aa47Q^lHV3)T9auo>sycWnk#C#9fNt_Qq^Zg|AXC(JqkOE45F61R(IameOf+6q# z*Z{VGokadL|VIPEjP}=v9J-ZCVcZD8SrL51I!;>t_%;6Cl%`w*Nrk?zj zPk#3q(zx+ye)aZ(qH;{m|`?lbKA)*;s)RAi#VJNX!Rf zMxYRLyh$n}n(9d$KBdX2d8uYb|Dgb+4aSDiATb6;zU2Je+{}`Y%-mGp;M8PZLla9& ZGebi|a}y(TlLH!)Ux1YXi96D3f&kBVMHK)5 literal 0 HcmV?d00001 diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/write.lock b/src/main/resources/solr_config/Test_Sigmah/data/index/write.lock new file mode 100644 index 000000000..e69de29bb diff --git a/src/main/resources/solr_config/Test_Sigmah/data/tlog/tlog.0000000000000000186 b/src/main/resources/solr_config/Test_Sigmah/data/tlog/tlog.0000000000000000186 new file mode 100644 index 0000000000000000000000000000000000000000..f6f12d8b8804cc6743236632128518eaebcdb975 GIT binary patch literal 22119 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/solr_config/Test_Sigmah/data/tlog/tlog.0000000000000000187 b/src/main/resources/solr_config/Test_Sigmah/data/tlog/tlog.0000000000000000187 new file mode 100644 index 0000000000000000000000000000000000000000..3ac8494d94fe0db1105a2dc5b6a174b1993e27d7 GIT binary patch literal 22119 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/solr_config/Test_Sigmah/data/tlog/tlog.0000000000000000188 b/src/main/resources/solr_config/Test_Sigmah/data/tlog/tlog.0000000000000000188 new file mode 100644 index 0000000000000000000000000000000000000000..51ee132190a7adec02f7590cd792f558117982b8 GIT binary patch literal 22119 zcmeI4Yi!%r6~|?FO&>_N6i6Rvn~t%a_!TF5SeBI-m1t3Zbhd2k;fMTC7>RP&$`ngc zZk#5av!vL74U0b&7}gCQ&|>q3UoB{pN0ohP&>%J@~2CV3?AwWNDz=mPx zQX)n1k|L={X;U;nf`}3?slR^zbI-XCw%*^`9h;hnrs5M*qhx166j*Mxu<39(9=RC0 z=cB%hv%hdU9PK^Fd*INQE|T{=^!sx=k(&<3z9;Stz{i|yCM7UyESF(~RE{l(^WH%? zw3g>sF)uKg6rX1~u^_!Q=k3bm(YRj=^Qjc3v4Fg zbyu1bn02}9_k`KYR z7DUvBbTSco#i6{F&KEgR*kCi!{r&RC%g0ivmBS+f&7~RaJ+_c{w~a)5c}Y3xqyA7H znxaJ_!w^}PL#H9liFH?B`BNqJI}))l)r)?!ROxuQ z@rMo?07y*}O#$$@3?RfPMhZJbE)U%Yh9VXQ`zEGB`SawweMGRARf#Sq8E6>}WDF3Xij zF=_$Fg_TC)cz#8NV{)YtIDUJq3das83UD5!qqiAI!%9U%W~ok8=ZPkz%DFicJiq?m zcQ8CHlq!fyfb<7tNN4r|q;2{!bN)h$A*FK{T1+u@JAF>8J$B)Y1xyncT1c&Fm#)Xz+0+VLgb)6DjRbgLfv50T{q){{tT1ejUeG)8oz>#MZ#o zUs4TAHx;+=kYmDd0SrpCc%k5tMl$lkYN`kohg1c(jm`M6H{=0=qcL{(N2?6cH4Wn$ zg>Fx|NJn*bN;TLZ-MYHY*L>x5PjxuQO;aPDpF3OAFoA0aes>i!OwIHHdBfqjt5dd0 z5UlcLeXC4gGPX+Uq6MqCT#dEL@>^s#T0fqXO4@Po1u|3NV4^ z!yO`15EXW-h65UEk54DaZI5i)1R2PMnEx9Y9Pfo-G0B-m~Sal zPF`*p$S+>D1oGnLTL+nZ`;D`kRUo&E>o~{gpgzXrTkN@pMfqAGSCgk;LkTq^u1N+> zzWuX*;VDY(hzn!_sISSOZq@*Gs|KiB7C`m5yp08Qt8t)iSp#*e5um<#_r2zzb^@rx zDYoz#hV_kizhN_~0-XTsjtuLzl1X==3{;*}7#{!bxA2*$g{)y}J)bqrtX%^h%TX4e z2O#%uNw=<=iki*VT>xtH2=e}?u7WPoSFW0DIh(bTanEHfCfsmcIUki~m&Qk2o^^y`+c|z9bpb;tXH|xJZ`2a(5G??vdiQK&8^Xb!f{nHKk%&Ql8#wYk79N}Zs{zy zg}o_xWpYxvhT@gwJqBKxTrl>Ee3?(w4=1R?qTT)q3;=%EEBoQ5z8^y2kGpU`EK`Pl zSfVWW!FpAIFP$KtytIjKUFC-)W!Dc+49=rAFh9IVS@FXnRi7U^!-*)A_IS7SR5(*i zmnLdG(I4gW;&Crk}v74U<7pv-KO)xtFhForHx!(HZapSmTkh zHKK&RHT1iR<*>0e!sga+S+7IzIrZSbpFwwCWsR^+YXtwgH;CH6tr50ljc}dTfH`WH z+t-iv6@w#rp)}oBn(k(x@PGpxqr~q!vyb?sr}JNY1Fy!h>3oDfIAM?Mgd298kQz30 z!pg9@6PyE&~d`juw5to^FKlK^)V;#AuCQ;9b-; zIPvl6`Omus)j~<_(mv|>m+<<*Le~%l2Y?|SC>tWSPu~#3j}K4dS<@0}XoyA9f+4(? zCk1drkgZdj=+;$P(*kMJ5M=9vs0rK<=SeGuNRo9LVvHPixt;hFnK!{P#O_WyZ=rVZ zy*9^x?uc5B5dS=1PqKt80FL;g?1-SgBlPQtr7On6wu@IR4BPsAgY^&FlK21p2D*8* zC$5+c+a`UQ()ykQPSgn2OPs%AY1lS-#p-cGU_ouK9J;U@(6%D7%PP8nGI!=imzzS(pWp_cNENT;bS1PmPV@jH)l-Y|$ zWp;ebxXkXU+uFoX0>*I1Ai3nDO-IwFBOi@nm2Q$LIlim>EM8Wv8a z1qLm{M{DTkfAZex3EI$EhOt^ca@3!$k|G(lEg3 zmhZi?Kz~U8lZ5mM&F9hb{3BD*Q8F@~B;(^#+7+ZoB@n_@jwcB)*S>u=M2odzigm-6 z2l`;k0DSlIHV(CXUafp8$)rsTs@Kxb7SoY1@lnfB^rNM+tWXe9Yn7W z$Jo_1`gE^!Kw7%Xv}J`J=_RuUE^^Z7gkVAX*iraBG}56)T%|?`be5sMJ>#(LVRoEK zkQ16Ul1NTaHz}(dw5e{=Z(H2~yXwX*soRkN1uEip#28+zAuZC&*Ia2qOOSR>mUh~v zv`hA-_1Tp+QJ1u1Mb=E(!RAT}TB@ZzX;a$xN!!#8+Ld;;E@>%dEpJTiu?)Q3TxCH@ zP^mba;F@{%e^EB8od;nr_g+Br+owo$5Z&_%(vtTb%vGZxpADSxE70)wI;@UkrM zrd@%3Hqjk)I_>H^Z%JQGz->!##@aejxOFvGSWps#O~}G-*%Wr#ZnzzEy6g(OP>--3 z6jMB7BCWf*(t?)iaJy|&+NgbL-FBr-)+6nqIApX16Ky@s)fU7AZRcfdU$?1k+`hIR zyV@?+qwV1t*p(Jhgi#B$G>Nb7B` zw4kLrCS12E?YwgVlx|7hbkRW;SjMXy*4_6qsJv~o*`?Be`dJOiARqpAd6cix zvUViOqg=BxUerl3g=b;ka(|lUO2bktCqFTx(9*9tLuADq16fhw*&cZGLU}JwYvoo- z?ZPZDJb*)5LJ(-tv;Z%ap|M&+TbjWVL6AhV~s z(`t)_)x^x{5Yrvo-Qjk3s(#c@F*7}rYymw~$zIRZSw2hEd9_p+ZeHgFr~o+wGC9{R zkdxex2OEpzcpFL1=$M+E1s!q@jh=>wVpU{pC^g!~)p4e6bj)6$xwD`FN&p&p@@?*h z1!$r=DY8XqZY4*a(T1CN6*P-F(5U8+n?z2d6XiP#9-sx_@yikCrUiIXkJcS=%=2aA z^ag`xazPz&mUZBf*ZDVz9K89es53eFS&lkD3V`D+gM(J)@7r%yXX$iRl|`l69H&=F zi(z4 Date: Sun, 16 Jul 2017 21:45:05 +0530 Subject: [PATCH 22/36] [Issue #535]: Added a panel in admin settings for solr settings --- .../ui/presenter/DashboardPresenter.java | 360 ++++++++++-------- .../admin/ParametersAdminPresenter.java | 36 ++ .../ui/presenter/zone/SearchPresenter.java | 47 ++- .../ui/view/admin/ParametersAdminView.java | 92 ++++- .../client/ui/view/zone/SearchView.java | 12 +- 5 files changed, 341 insertions(+), 206 deletions(-) diff --git a/src/main/java/org/sigmah/client/ui/presenter/DashboardPresenter.java b/src/main/java/org/sigmah/client/ui/presenter/DashboardPresenter.java index 004871f79..9217c471c 100644 --- a/src/main/java/org/sigmah/client/ui/presenter/DashboardPresenter.java +++ b/src/main/java/org/sigmah/client/ui/presenter/DashboardPresenter.java @@ -22,7 +22,6 @@ * #L% */ - import java.util.ArrayList; import java.util.HashSet; import java.util.List; @@ -98,22 +97,21 @@ */ @Singleton public class DashboardPresenter extends AbstractPagePresenter { - + private final SearchServiceAsync searchServiceForAutoIndex = GWT.create(SearchService.class); - public static interface ReminderOrMonitoredPointHandler{ - public void onLabelClickEvent(Integer projectId); - } - + public static interface ReminderOrMonitoredPointHandler { + public void onLabelClickEvent(Integer projectId); + } + /** * View interface. */ @ImplementedBy(DashboardView.class) public static interface View extends ViewInterface { - void setReminderOrMonitoredPointHandler(ReminderOrMonitoredPointHandler handler); - - + void setReminderOrMonitoredPointHandler(ReminderOrMonitoredPointHandler handler); + /** * Returns the reminders wrapper component. * @@ -151,24 +149,25 @@ public static interface View extends ViewInterface { * Adds a navigation button to the menu buttons panel. * * @param buttonText - * (required) The button label. + * (required) The button label. * @param buttonIcon - * (optional) Button icon displayed next to the label. + * (optional) Button icon displayed next to the label. * @param clickHandler - * The button click handler implementation. + * The button click handler implementation. */ - void addMenuButton(final String buttonText, final AbstractImagePrototype buttonIcon, final Listener clickHandler); + void addMenuButton(final String buttonText, final AbstractImagePrototype buttonIcon, + final Listener clickHandler); /** * Ask the button panel to relayout itself. */ void layoutButtons(); - + /** * Ask the main container to relayout itself. */ void layoutViews(); - + /** * Returns the OrgUnit tree grid component. * @@ -180,7 +179,7 @@ public static interface View extends ViewInterface { * Sets the org units panel header title. * * @param title - * The new title. + * The new title. */ void setPanelsTitleSuffix(String title); @@ -197,20 +196,20 @@ public static interface View extends ViewInterface { * @return The projects list widget. */ ProjectsListWidget getProjectsList(); - + } - + private Integer lastUserId; - + private final ExecutionAsyncDAO executionAsyncDAO = new ExecutionAsyncDAO(); - + /** * Presenters's initialization. * * @param view - * Presenter's view interface. + * Presenter's view interface. * @param injector - * Injected client injector. + * Injected client injector. */ @Inject public DashboardPresenter(final View view, final Injector injector) { @@ -244,31 +243,32 @@ public void onRowClickEvent(final OrgUnitDTO rowElement) { view.getOrgUnitsTreeGrid().getDisplayOnlyMainOrgUnitCheckbox().setVisible(false); } else { view.getOrgUnitsTreeGrid().getDisplayOnlyMainOrgUnitCheckbox().setValue(true); - view.getOrgUnitsTreeGrid().getDisplayOnlyMainOrgUnitCheckbox().addListener(Events.Change, new Listener() { - @Override - public void handleEvent(BaseEvent event) { - loadReminders(); - loadMonitoredPoints(); - loadContacts(); - loadProjects(true); - loadOrgUnits(); - } - }); + view.getOrgUnitsTreeGrid().getDisplayOnlyMainOrgUnitCheckbox().addListener(Events.Change, + new Listener() { + @Override + public void handleEvent(BaseEvent event) { + loadReminders(); + loadMonitoredPoints(); + loadContacts(); + loadProjects(true); + loadOrgUnits(); + } + }); } // Projects widget initialization. view.getProjectsList().init(RefreshMode.ON_FIRST_TIME, LoadingMode.CHUNK); - - - view.setReminderOrMonitoredPointHandler(new ReminderOrMonitoredPointHandler() { - @Override - public void onLabelClickEvent(Integer projectId) { + + view.setReminderOrMonitoredPointHandler(new ReminderOrMonitoredPointHandler() { + @Override + public void onLabelClickEvent(Integer projectId) { Profiler.INSTANCE.startScenario(Scenario.OPEN_PROJECT); - eventBus.navigateRequest(Page.PROJECT_DASHBOARD.requestWith(RequestParameter.ID, projectId)); - } - }); - - // Listening to connection state changes to refresh the available buttons. + eventBus.navigateRequest(Page.PROJECT_DASHBOARD.requestWith(RequestParameter.ID, projectId)); + } + }); + + // Listening to connection state changes to refresh the available + // buttons. // Fixes mantis #682 and #683 eventBus.addHandler(OfflineEvent.getType(), new OfflineHandler() { @@ -277,26 +277,31 @@ public void handleEvent(OfflineEvent event) { initializeMenuButtons(event.getState()); } }); - - - //related to search auto indexing - searchServiceForAutoIndex.autoIndex(new AsyncCallback(){ - @Override - public void onFailure(Throwable caught) { - // TODO Auto-generated method stub - //Window.alert("Failed to start/continue auto indexing!"); - } + // related to search auto indexing + if (ProfileUtils.isGranted(auth(), GlobalPermissionEnum.MANAGE_SETTINGS)) { + //only admin can do auto-indexing + searchServiceForAutoIndex.autoIndex(new AsyncCallback() { + + @Override + public void onFailure(Throwable caught) { + // TODO Auto-generated method stub + // Window.alert("Failed to start/continue auto indexing!"); + } + + @Override + public void onSuccess(Boolean result) { + // TODO Auto-generated method stub + // if( result ) Window.alert("Started/continued auto + // indexing!"); + // else Window.alert("Failed to start/continue auto + // indexing! ( back end issue )"); + } + + }); + + } - @Override - public void onSuccess(Boolean result) { - // TODO Auto-generated method stub -// if( result ) Window.alert("Started/continued auto indexing!"); -// else Window.alert("Failed to start/continue auto indexing! ( back end issue )"); - } - - }); - } /** @@ -322,27 +327,30 @@ public void onPageRequest(final PageRequest request) { // Reloads projects. loadProjects(false); - + // Ask the user to synchronize its favorite projects. // BUGFIX #701: only showing this message if the user is online. final boolean userIsOnline = injector.getApplicationStateManager().getState() == ApplicationState.ONLINE; final boolean userIsDifferent = auth().getUserId() != null && !auth().getUserId().equals(lastUserId); final boolean userHasSynchronized = UpdateDates.getDatabaseUpdateDate(auth()) != null; - if(userIsOnline && userIsDifferent && !userHasSynchronized) { - N10N.confirmation(I18N.CONSTANTS.offlineModeHeader(), I18N.CONSTANTS.sigmahOfflineWelcome(), new ConfirmCallback() { - - @Override - public void onAction() { - eventBus.updateZoneRequest(Zone.OFFLINE_BANNER.requestWith(RequestParameter.PULL_DATABASE, true)); - } - }); + if (userIsOnline && userIsDifferent && !userHasSynchronized) { + N10N.confirmation(I18N.CONSTANTS.offlineModeHeader(), I18N.CONSTANTS.sigmahOfflineWelcome(), + new ConfirmCallback() { + + @Override + public void onAction() { + eventBus.updateZoneRequest( + Zone.OFFLINE_BANNER.requestWith(RequestParameter.PULL_DATABASE, true)); + } + }); } lastUserId = auth().getUserId(); } @Override protected void onViewRevealed() { - // BUGFIX #786: Relayout the views on reveal to avoid having the last project hidden. + // BUGFIX #786: Relayout the views on reveal to avoid having the last + // project hidden. view.layoutViews(); } @@ -353,71 +361,77 @@ protected void onViewRevealed() { // ------------------------------------------------------------------------------------------- /** - * Performs a dispatch command to load the reminders list and populates the view store. + * Performs a dispatch command to load the reminders list and populates the + * view store. */ private void loadReminders() { Set orgUnitIds = getOrgUnitIds(); - dispatch.execute(new GetReminders(ReminderDTO.Mode.BASE, orgUnitIds), new CommandResultHandler>() { + dispatch.execute(new GetReminders(ReminderDTO.Mode.BASE, orgUnitIds), + new CommandResultHandler>() { - @Override - public void onCommandSuccess(final ListResult result) { + @Override + public void onCommandSuccess(final ListResult result) { - final List reminderListToLoad = new ArrayList(); + final List reminderListToLoad = new ArrayList(); - // Only show the undeleted reminders. - for (final ReminderDTO reminder : result.getList()) { + // Only show the undeleted reminders. + for (final ReminderDTO reminder : result.getList()) { - // TODO [PERF] Filter should be performed on server-side. - final Boolean deleted = reminder.getDeleted(); + // TODO [PERF] Filter should be performed on + // server-side. + final Boolean deleted = reminder.getDeleted(); - if (Log.isDebugEnabled()) { - Log.debug("Deleted reminder? " + deleted); - } + if (Log.isDebugEnabled()) { + Log.debug("Deleted reminder? " + deleted); + } - if (ClientUtils.isNotTrue(deleted)) { - reminderListToLoad.add(reminder); - } - } + if (ClientUtils.isNotTrue(deleted)) { + reminderListToLoad.add(reminder); + } + } - view.getRemindersStore().removeAll(); - view.getRemindersStore().add(reminderListToLoad); - } - }, new LoadingMask(view.getRemindersPanel())); + view.getRemindersStore().removeAll(); + view.getRemindersStore().add(reminderListToLoad); + } + }, new LoadingMask(view.getRemindersPanel())); } /** - * Performs a dispatch command to load the monitored points list and populates the view store. + * Performs a dispatch command to load the monitored points list and + * populates the view store. */ private void loadMonitoredPoints() { Set orgUnitIds = getOrgUnitIds(); - dispatch.execute(new GetMonitoredPoints(MonitoredPointDTO.Mode.BASE, orgUnitIds), new CommandResultHandler>() { + dispatch.execute(new GetMonitoredPoints(MonitoredPointDTO.Mode.BASE, orgUnitIds), + new CommandResultHandler>() { - @Override - public void onCommandSuccess(final ListResult result) { + @Override + public void onCommandSuccess(final ListResult result) { - final List pointListToLoad = new ArrayList(); + final List pointListToLoad = new ArrayList(); - // Only show the undeleted monitored points. - for (final MonitoredPointDTO p : result.getList()) { + // Only show the undeleted monitored points. + for (final MonitoredPointDTO p : result.getList()) { - // TODO [PERF] Filter should be performed on server-side. - final Boolean deleted = p.getDeleted(); + // TODO [PERF] Filter should be performed on + // server-side. + final Boolean deleted = p.getDeleted(); - if (Log.isDebugEnabled()) { - Log.debug("Deleted monitored point? " + deleted); - } + if (Log.isDebugEnabled()) { + Log.debug("Deleted monitored point? " + deleted); + } - if (ClientUtils.isNotTrue(deleted)) { - pointListToLoad.add(p); - } - } + if (ClientUtils.isNotTrue(deleted)) { + pointListToLoad.add(p); + } + } - view.getMonitoredPointsStore().removeAll(); - view.getMonitoredPointsStore().add(pointListToLoad); - } - }, new LoadingMask(view.getMonitoredPointsPanel())); + view.getMonitoredPointsStore().removeAll(); + view.getMonitoredPointsStore().add(pointListToLoad); + } + }, new LoadingMask(view.getMonitoredPointsPanel())); } /** @@ -426,12 +440,13 @@ public void onCommandSuccess(final ListResult result) { private void initializeMenuButtons() { initializeMenuButtons(injector.getApplicationStateManager().getState()); } - + private void initializeMenuButtons(ApplicationState applicationState) { view.clearMenuButtons(); - - final boolean online = applicationState == ApplicationState.UNKNOWN || applicationState == ApplicationState.ONLINE; + + final boolean online = applicationState == ApplicationState.UNKNOWN + || applicationState == ApplicationState.ONLINE; // Create project. if (online && ProfileUtils.isGranted(auth(), GlobalPermissionEnum.CREATE_PROJECT)) { @@ -439,7 +454,8 @@ private void initializeMenuButtons(ApplicationState applicationState) { final PageRequest request = new PageRequest(Page.CREATE_PROJECT); request.addParameter(RequestParameter.TYPE, CreateProjectPresenter.Mode.PROJECT); - view.addMenuButton(I18N.CONSTANTS.createProjectNewProject(), IconImageBundle.ICONS.add(), new ButtonClickHandler(request)); + view.addMenuButton(I18N.CONSTANTS.createProjectNewProject(), IconImageBundle.ICONS.add(), + new ButtonClickHandler(request)); } // Draft project. @@ -448,67 +464,71 @@ private void initializeMenuButtons(ApplicationState applicationState) { final PageRequest request = new PageRequest(Page.CREATE_PROJECT); request.addParameter(RequestParameter.TYPE, CreateProjectPresenter.Mode.TEST_PROJECT); - view.addMenuButton(I18N.CONSTANTS.createTestProject(), IconImageBundle.ICONS.add(), new ButtonClickHandler(request)); + view.addMenuButton(I18N.CONSTANTS.createTestProject(), IconImageBundle.ICONS.add(), + new ButtonClickHandler(request)); } // Users administration. if (online && ProfileUtils.isGranted(auth(), GlobalPermissionEnum.VIEW_ADMIN)) { - view.addMenuButton(I18N.CONSTANTS.adminboard(), IconImageBundle.ICONS.setup(), new ButtonClickHandler(getDefaultAdminPage())); + view.addMenuButton(I18N.CONSTANTS.adminboard(), IconImageBundle.ICONS.setup(), + new ButtonClickHandler(getDefaultAdminPage())); } // Import. if (online && ProfileUtils.isGranted(auth(), GlobalPermissionEnum.IMPORT_BUTTON)) { view.addMenuButton(I18N.CONSTANTS.importItem(), null, new ButtonClickHandler(Page.IMPORT_VALUES)); } - - + // TODO Handle other menus buttons. // There are two ways to show these menus (authentication / profile). // if (auth().isShowMenus()) { - // view.addMenuButton(I18N.CONSTANTS.dataEntry(), IconImageBundle.ICONS.dataEntry(), new SiteGridPageState()); - // view.addMenuButton(I18N.CONSTANTS.reports(), IconImageBundle.ICONS.report(), new ReportListPageState()); - // view.addMenuButton(I18N.CONSTANTS.charts(), IconImageBundle.ICONS.barChart(), new ChartPageState()); - // view.addMenuButton(I18N.CONSTANTS.maps(), IconImageBundle.ICONS.map(), new MapPageState()); - // view.addMenuButton(I18N.CONSTANTS.tables(), IconImageBundle.ICONS.table(), new PivotPageState()); - // view.addMenuButton(I18N.CONSTANTS.setup(), IconImageBundle.ICONS.setup(), new DbListPageState()); + // view.addMenuButton(I18N.CONSTANTS.dataEntry(), + // IconImageBundle.ICONS.dataEntry(), new SiteGridPageState()); + // view.addMenuButton(I18N.CONSTANTS.reports(), + // IconImageBundle.ICONS.report(), new ReportListPageState()); + // view.addMenuButton(I18N.CONSTANTS.charts(), + // IconImageBundle.ICONS.barChart(), new ChartPageState()); + // view.addMenuButton(I18N.CONSTANTS.maps(), + // IconImageBundle.ICONS.map(), new MapPageState()); + // view.addMenuButton(I18N.CONSTANTS.tables(), + // IconImageBundle.ICONS.table(), new PivotPageState()); + // view.addMenuButton(I18N.CONSTANTS.setup(), + // IconImageBundle.ICONS.setup(), new DbListPageState()); // } - + view.layoutButtons(); } - + /** - * Find the page of the administration to show by default for the current user. + * Find the page of the administration to show by default for the current + * user. * * @return First page of the administration to show. */ private Page getDefaultAdminPage() { - final Page[] administrationPages = new Page[] { - Page.ADMIN_USERS, Page.ADMIN_ORG_UNITS, - Page.ADMIN_PROJECTS_MODELS, Page.ADMIN_ORG_UNITS_MODELS, - Page.ADMIN_CONTACT_MODELS, Page.ADMIN_REPORTS_MODELS, - Page.ADMIN_CATEGORIES, Page.ADMIN_IMPORTATION_SCHEME, - Page.ADMIN_PARAMETERS - }; - - final GlobalPermissionEnum[] accessRights = new GlobalPermissionEnum[] { - GlobalPermissionEnum.MANAGE_USERS, GlobalPermissionEnum.MANAGE_ORG_UNITS, - GlobalPermissionEnum.MANAGE_PROJECT_MODELS, GlobalPermissionEnum.MANAGE_ORG_UNIT_MODELS, - GlobalPermissionEnum.MANAGE_CONTACT_MODELS, GlobalPermissionEnum.MANAGE_REPORT_MODELS, - GlobalPermissionEnum.MANAGE_CATEGORIES, GlobalPermissionEnum.MANAGE_IMPORTATION_SCHEMES, - GlobalPermissionEnum.MANAGE_SETTINGS - }; - - for(int index = 0; index < accessRights.length; index++) { + final Page[] administrationPages = new Page[] { Page.ADMIN_USERS, Page.ADMIN_ORG_UNITS, + Page.ADMIN_PROJECTS_MODELS, Page.ADMIN_ORG_UNITS_MODELS, Page.ADMIN_CONTACT_MODELS, + Page.ADMIN_REPORTS_MODELS, Page.ADMIN_CATEGORIES, Page.ADMIN_IMPORTATION_SCHEME, + Page.ADMIN_PARAMETERS }; + + final GlobalPermissionEnum[] accessRights = new GlobalPermissionEnum[] { GlobalPermissionEnum.MANAGE_USERS, + GlobalPermissionEnum.MANAGE_ORG_UNITS, GlobalPermissionEnum.MANAGE_PROJECT_MODELS, + GlobalPermissionEnum.MANAGE_ORG_UNIT_MODELS, GlobalPermissionEnum.MANAGE_CONTACT_MODELS, + GlobalPermissionEnum.MANAGE_REPORT_MODELS, GlobalPermissionEnum.MANAGE_CATEGORIES, + GlobalPermissionEnum.MANAGE_IMPORTATION_SCHEMES, GlobalPermissionEnum.MANAGE_SETTINGS }; + + for (int index = 0; index < accessRights.length; index++) { if (accessRights[index] == null || ProfileUtils.isGranted(auth(), accessRights[index])) { return administrationPages[index]; } } - + return Page.ADMIN_USERS; } /** - * {@link Listener} implementation navigating to a given {@link PageRequest}. + * {@link Listener} implementation navigating to a given + * {@link PageRequest}. * * @author Denis Colliot (dcolliot@ideia.fr) */ @@ -549,7 +569,8 @@ private void loadProjects(boolean forceRefresh) { if (view.getOrgUnitsTreeGrid().getDisplayOnlyMainOrgUnitCheckbox().getValue()) { view.getProjectsList().refresh(true, forceRefresh, auth().getMainOrgUnitId()); } else { - view.getProjectsList().refresh(true, forceRefresh, auth().getOrgUnitIds().toArray(new Integer[auth().getOrgUnitIds().size()])); + view.getProjectsList().refresh(true, forceRefresh, + auth().getOrgUnitIds().toArray(new Integer[auth().getOrgUnitIds().size()])); } } @@ -558,27 +579,30 @@ private void loadProjects(boolean forceRefresh) { */ private void loadOrgUnits() { Set orgUnitIds = getOrgUnitIds(); - dispatch.execute(new GetOrgUnits(orgUnitIds, OrgUnitDTO.Mode.WITH_TREE), new CommandResultHandler>() { - @Override - public void onCommandSuccess(final ListResult result) { - view.getOrgUnitsTreeGrid().getStore().removeAll(); - view.getOrgUnitsTreeGrid().getStore().add(result.getData(), true); - for (OrgUnitDTO orgUnitDTO : view.getOrgUnitsTreeGrid().getStore().getRootItems()) { - view.getOrgUnitsTreeGrid().getTreeGrid().setExpanded(orgUnitDTO, true, false); - } - - OrgUnitDTO mainOrgUnitDTO = view.getOrgUnitsTreeGrid().getStore().findModel(OrgUnitDTO.ID, auth().getMainOrgUnitId()); - String panelTitle = " - "; - if (auth().getSecondaryOrgUnitIds().isEmpty()) { - panelTitle += mainOrgUnitDTO.getName() + " (" + mainOrgUnitDTO.getFullName() + ")"; - } else if (view.getOrgUnitsTreeGrid().getDisplayOnlyMainOrgUnitCheckbox().getValue()) { - panelTitle += I18N.CONSTANTS.myMainOrganisationalUnitPanelTitle() + " " + mainOrgUnitDTO.getName() + " (" + mainOrgUnitDTO.getFullName() + ")"; - } else { - panelTitle += I18N.CONSTANTS.allMyOrganisationalUnitsPanelTitle(); - } - view.setPanelsTitleSuffix(panelTitle); - } - }); + dispatch.execute(new GetOrgUnits(orgUnitIds, OrgUnitDTO.Mode.WITH_TREE), + new CommandResultHandler>() { + @Override + public void onCommandSuccess(final ListResult result) { + view.getOrgUnitsTreeGrid().getStore().removeAll(); + view.getOrgUnitsTreeGrid().getStore().add(result.getData(), true); + for (OrgUnitDTO orgUnitDTO : view.getOrgUnitsTreeGrid().getStore().getRootItems()) { + view.getOrgUnitsTreeGrid().getTreeGrid().setExpanded(orgUnitDTO, true, false); + } + + OrgUnitDTO mainOrgUnitDTO = view.getOrgUnitsTreeGrid().getStore().findModel(OrgUnitDTO.ID, + auth().getMainOrgUnitId()); + String panelTitle = " - "; + if (auth().getSecondaryOrgUnitIds().isEmpty()) { + panelTitle += mainOrgUnitDTO.getName() + " (" + mainOrgUnitDTO.getFullName() + ")"; + } else if (view.getOrgUnitsTreeGrid().getDisplayOnlyMainOrgUnitCheckbox().getValue()) { + panelTitle += I18N.CONSTANTS.myMainOrganisationalUnitPanelTitle() + " " + + mainOrgUnitDTO.getName() + " (" + mainOrgUnitDTO.getFullName() + ")"; + } else { + panelTitle += I18N.CONSTANTS.allMyOrganisationalUnitsPanelTitle(); + } + view.setPanelsTitleSuffix(panelTitle); + } + }); } Set getOrgUnitIds() { diff --git a/src/main/java/org/sigmah/client/ui/presenter/admin/ParametersAdminPresenter.java b/src/main/java/org/sigmah/client/ui/presenter/admin/ParametersAdminPresenter.java index 17f288630..6933b34d9 100644 --- a/src/main/java/org/sigmah/client/ui/presenter/admin/ParametersAdminPresenter.java +++ b/src/main/java/org/sigmah/client/ui/presenter/admin/ParametersAdminPresenter.java @@ -1,5 +1,7 @@ package org.sigmah.client.ui.presenter.admin; +import com.google.gwt.core.client.GWT; + /* * #%L * Sigmah @@ -25,6 +27,8 @@ import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.event.dom.client.ClickHandler; import com.google.gwt.user.client.Timer; +import com.google.gwt.user.client.Window; +import com.google.gwt.user.client.rpc.AsyncCallback; import com.google.gwt.user.client.ui.Image; import com.google.inject.ImplementedBy; import com.google.inject.Inject; @@ -51,6 +55,8 @@ import org.sigmah.client.page.Page; import org.sigmah.client.page.PageRequest; import org.sigmah.client.page.RequestParameter; +import org.sigmah.client.search.SearchService; +import org.sigmah.client.search.SearchServiceAsync; import org.sigmah.client.ui.notif.N10N; import org.sigmah.client.ui.presenter.base.HasForm; import org.sigmah.client.ui.view.admin.ParametersAdminView; @@ -92,6 +98,8 @@ public class ParametersAdminPresenter extends AbstractAdminPresenter(){ + + @Override + public void componentSelected(ButtonEvent ce) { + // TODO Auto-generated method stub + searchService.index(new AsyncCallback() { + public void onFailure(Throwable caught) { + Window.alert("Failure on the server side!"); + caught.printStackTrace(); + } + + public void onSuccess(Boolean result) { + Boolean dih_success = result; + if (dih_success == true) { + Window.alert("Successfully completed Full Import!"); + } else { + Window.alert("Failed to complete Full Import!"); + } + } + }); + } + + }); + } /** @@ -575,5 +610,6 @@ public void onCommandSuccess(final VoidResult result) { }, view.getExportManagementSaveButton()); } + } diff --git a/src/main/java/org/sigmah/client/ui/presenter/zone/SearchPresenter.java b/src/main/java/org/sigmah/client/ui/presenter/zone/SearchPresenter.java index 73a3e88ea..f03b1ab22 100644 --- a/src/main/java/org/sigmah/client/ui/presenter/zone/SearchPresenter.java +++ b/src/main/java/org/sigmah/client/ui/presenter/zone/SearchPresenter.java @@ -107,7 +107,6 @@ public class SearchPresenter extends AbstractZonePresenter String textToServer = "default search text"; String filter = "All"; boolean firstsearch = true; - private Integer userID; @Inject public SearchPresenter(View view, Injector injector) { @@ -131,7 +130,7 @@ public static interface View extends ViewInterface { Button getSearchButton(); - Button getIndexButton(); + //Button getIndexButton(); } @@ -182,11 +181,11 @@ public void onClick(ClickEvent event) { }); - view.getIndexButton().addClickHandler(new ClickHandler() { - public void onClick(ClickEvent event) { - index(); - } - }); +// view.getIndexButton().addClickHandler(new ClickHandler() { +// public void onClick(ClickEvent event) { +// index(); +// } +// }); } @@ -229,23 +228,23 @@ public void onSuccess(ArrayList result) { }); } - private void index() { - searchService.index(new AsyncCallback() { - public void onFailure(Throwable caught) { - Window.alert("Failure on the server side!"); - caught.printStackTrace(); - } - - public void onSuccess(Boolean result) { - dih_success = result; - if (dih_success == true) { - Window.alert("Successfully completed Full Import!"); - } else { - Window.alert("Failed to complete Full Import!"); - } - } - }); - } +// private void index() { +// searchService.index(new AsyncCallback() { +// public void onFailure(Throwable caught) { +// Window.alert("Failure on the server side!"); +// caught.printStackTrace(); +// } +// +// public void onSuccess(Boolean result) { +// dih_success = result; +// if (dih_success == true) { +// Window.alert("Successfully completed Full Import!"); +// } else { +// Window.alert("Failed to complete Full Import!"); +// } +// } +// }); +// } private void loadProjectIdsForFiltering() { Integer[] orgUnitsIds = auth().getOrgUnitIds().toArray(new Integer[auth().getOrgUnitIds().size()]); diff --git a/src/main/java/org/sigmah/client/ui/view/admin/ParametersAdminView.java b/src/main/java/org/sigmah/client/ui/view/admin/ParametersAdminView.java index a401e2b31..523fba450 100644 --- a/src/main/java/org/sigmah/client/ui/view/admin/ParametersAdminView.java +++ b/src/main/java/org/sigmah/client/ui/view/admin/ParametersAdminView.java @@ -42,8 +42,10 @@ import com.extjs.gxt.ui.client.Style.LayoutRegion; import com.extjs.gxt.ui.client.Style.Orientation; -import com.extjs.gxt.ui.client.store.ListStore; -import com.extjs.gxt.ui.client.widget.ContentPanel; +import com.extjs.gxt.ui.client.store.ListStore; +import com.extjs.gxt.ui.client.util.Margins; +import com.extjs.gxt.ui.client.widget.ContentPanel; +import com.extjs.gxt.ui.client.widget.Html; import com.extjs.gxt.ui.client.widget.LayoutContainer; import com.extjs.gxt.ui.client.widget.form.AdapterField; import com.extjs.gxt.ui.client.widget.form.CheckBox; @@ -54,7 +56,10 @@ import com.extjs.gxt.ui.client.widget.form.RadioGroup; import com.extjs.gxt.ui.client.widget.form.SimpleComboBox; import com.extjs.gxt.ui.client.widget.form.SpinnerField; -import com.extjs.gxt.ui.client.widget.form.TextField; +import com.extjs.gxt.ui.client.widget.form.TextField; +import com.extjs.gxt.ui.client.widget.layout.BorderLayoutData; +import com.extjs.gxt.ui.client.widget.layout.FlowData; +import com.extjs.gxt.ui.client.widget.layout.LayoutData; import com.google.gwt.event.dom.client.LoadEvent; import com.google.gwt.event.dom.client.LoadHandler; import com.google.gwt.i18n.client.NumberFormat; @@ -108,7 +113,12 @@ public class ParametersAdminView extends AbstractView implements ParametersAdmin private SimpleComboBox policyTypeCombo; private SpinnerField frequencyField; private DateField scheduledDateField; - private Button passwordExpirationSaveButton; + private Button passwordExpirationSaveButton; + + private FormPanel solrSettingsForm; + private TextField solrCoreUrlTextField; + private Button solrSaveConfigButton; + private Button manualIndexButton; /** * {@inheritDoc} @@ -124,8 +134,20 @@ public void initialize() { // bottomContainer.add(createExportManagementPanel(), Layouts.hBoxData(Margin.HALF_RIGHT)); // bottomContainer.add(createPasswordExpirationManagementPanel(), Layouts.hBoxData(Margin.HALF_LEFT)); - add(topContainer, Layouts.borderLayoutData(LayoutRegion.NORTH, 0.5f, Margin.BOTTOM)); - add(createExportManagementPanel(), Layouts.borderLayoutData(LayoutRegion.CENTER, 0.5f)); + add(topContainer, Layouts.borderLayoutData(LayoutRegion.NORTH, 0.5f, Margin.HALF_BOTTOM)); + + //add() + + final LayoutContainer bottomWestContainer = Layouts.hBox(); + bottomWestContainer.add(createExportManagementPanel(),Layouts.hBoxData(Margin.HALF_RIGHT)); + final LayoutContainer bottomEastContainer = Layouts.hBox(); + bottomEastContainer.add(createSolrSettingsPanel(),Layouts.hBoxData(Margin.HALF_LEFT)); + + //add(createExportManagementPanel(), Layouts.borderLayoutData(LayoutRegion.WEST, 0.5f)); + + add(bottomWestContainer, Layouts.borderLayoutData(LayoutRegion.WEST, 0.5f, Margin.HALF_TOP)); + add(bottomEastContainer, Layouts.borderLayoutData(LayoutRegion.EAST, 0.5f, Margin.HALF_TOP)); + } /** @@ -231,8 +253,37 @@ private ContentPanel createExportManagementPanel() { panel.add(exportManagementForm); return panel; + } + + + + private ContentPanel createSolrSettingsPanel() { + + final ContentPanel panel = Panels.content("Solr Search Settings", CSS_ADMIN_PARAMETERS); + + solrSettingsForm = Forms.panel(150); + + solrCoreUrlTextField = Forms.text("Solr Core Url", true); + solrSettingsForm.add(solrCoreUrlTextField); + + solrSettingsForm.add(new Html("

")); + manualIndexButton = Forms.button("Manual Index"); + //manualIndexButton.setAutoWidth(false); + + //manualIndexButton.setStyleAttribute("text-align", "centre"); + //solrSettingsForm.add(new Html("
")); + //solrSettingsForm.add(manualIndexButton); + final LayoutData buttonLayoutData = new BorderLayoutData(LayoutRegion.EAST); + //final LayoutData layoutData = new FlowData(0, 0, 0, 0); + ((BorderLayoutData) buttonLayoutData).setMargins(new Margins(0, 100, 0, 100)); + solrSettingsForm.add(manualIndexButton, buttonLayoutData); + solrSaveConfigButton = Forms.button(I18N.CONSTANTS.organizationManagementSaveChanges(), IconImageBundle.ICONS.save()); + solrSettingsForm.addButton(solrSaveConfigButton); + + panel.add(solrSettingsForm); + + return panel; } - /** * Creates the password expiration policy management panel. * @@ -433,6 +484,31 @@ public ExportFormat getSelectedExportFormat() { @Override public Button getExportManagementSaveButton() { return exportManagementSaveButton; - } + } + + public TextField getSolrCoreUrlTextField() { + return solrCoreUrlTextField; + } + + public void setSolrCoreUrlTextField(TextField solrCoreUrlTextField) { + this.solrCoreUrlTextField = solrCoreUrlTextField; + } + + public Button getSolrSaveConfigButton() { + return solrSaveConfigButton; + } + + public void setSolrSaveConfigButton(Button solrSaveConfigButton) { + this.solrSaveConfigButton = solrSaveConfigButton; + } + + public Button getManualIndexButton() { + return manualIndexButton; + } + + public void setManualIndexButton(Button manualIndexButton) { + this.manualIndexButton = manualIndexButton; + } + } diff --git a/src/main/java/org/sigmah/client/ui/view/zone/SearchView.java b/src/main/java/org/sigmah/client/ui/view/zone/SearchView.java index d3fbd23bb..0eae8b12e 100644 --- a/src/main/java/org/sigmah/client/ui/view/zone/SearchView.java +++ b/src/main/java/org/sigmah/client/ui/view/zone/SearchView.java @@ -79,13 +79,13 @@ public void initialize() { searchText.getElement().setPropertyString("placeholder", "Search"); searchButton = new Button("Go"); - indexButton = new Button("DIH"); +// indexButton = new Button("DIH"); //searchBarPanel.add(searchForLabel); searchBarPanel.add(searchText); searchBarPanel.add(searchOptions); searchBarPanel.add(searchButton); - searchBarPanel.add(indexButton); +// searchBarPanel.add(indexButton); // initWidget(); Useless @@ -148,10 +148,10 @@ public Button getSearchButton() { /** * {@inheritDoc} */ - @Override - public Button getIndexButton() { - return indexButton; - } +// @Override +// public Button getIndexButton() { +// return indexButton; +// } } From bec9e807d9a725b308c9da154574b9e68489aa5d Mon Sep 17 00:00:00 2001 From: indianauthority97 Date: Wed, 19 Jul 2017 17:04:50 +0530 Subject: [PATCH 23/36] [Issue #535]:Added a column to table organization to store and use solrcore_url --- .../sigmah/client/search/SearchService.java | 1 + .../client/search/SearchServiceAsync.java | 1 + .../ui/presenter/DashboardPresenter.java | 12 +- .../admin/ParametersAdminPresenter.java | 245 +++++++++++++----- .../ui/view/admin/ParametersAdminView.java | 11 +- .../handler/SecureNavigationAsyncHandler.java | 2 +- .../sigmah/offline/js/AuthenticationJS.java | 10 + .../sigmah/server/domain/Organization.java | 13 + .../server/domain/util/EntityConstants.java | 1 + .../handler/UpdateOrganizationHandler.java | 1 + .../sigmah/server/handler/util/Handlers.java | 3 +- .../server/search/SearchServiceImpl.java | 7 + .../server/search/SolrIndexJobActivator.java | 2 +- .../sigmah/server/search/SolrSearcher.java | 27 +- .../shared/command/result/Authentication.java | 23 +- .../dto/organization/OrganizationDTO.java | 10 + .../db/migration/V21__solr_core_url_field.sql | 1 + 17 files changed, 284 insertions(+), 86 deletions(-) create mode 100644 src/main/resources/db/migration/V21__solr_core_url_field.sql diff --git a/src/main/java/org/sigmah/client/search/SearchService.java b/src/main/java/org/sigmah/client/search/SearchService.java index 4be5006b9..000a380d7 100644 --- a/src/main/java/org/sigmah/client/search/SearchService.java +++ b/src/main/java/org/sigmah/client/search/SearchService.java @@ -12,4 +12,5 @@ public interface SearchService extends RemoteService { ArrayList search(String searchStr, String filter); Boolean index(); Boolean autoIndex(); + Boolean updateCore(String solrCoreUrl); } diff --git a/src/main/java/org/sigmah/client/search/SearchServiceAsync.java b/src/main/java/org/sigmah/client/search/SearchServiceAsync.java index fa8da38e4..068585d24 100644 --- a/src/main/java/org/sigmah/client/search/SearchServiceAsync.java +++ b/src/main/java/org/sigmah/client/search/SearchServiceAsync.java @@ -11,4 +11,5 @@ public interface SearchServiceAsync { public void search(String searchStr, String filter, AsyncCallback> callback); public void index(AsyncCallback callback); public void autoIndex(AsyncCallback callback); + public void updateCore(String solrCoreUrl, AsyncCallback callback); } diff --git a/src/main/java/org/sigmah/client/ui/presenter/DashboardPresenter.java b/src/main/java/org/sigmah/client/ui/presenter/DashboardPresenter.java index 9217c471c..205ed2790 100644 --- a/src/main/java/org/sigmah/client/ui/presenter/DashboardPresenter.java +++ b/src/main/java/org/sigmah/client/ui/presenter/DashboardPresenter.java @@ -280,22 +280,22 @@ public void handleEvent(OfflineEvent event) { // related to search auto indexing if (ProfileUtils.isGranted(auth(), GlobalPermissionEnum.MANAGE_SETTINGS)) { - //only admin can do auto-indexing + // only admin can do auto-indexing searchServiceForAutoIndex.autoIndex(new AsyncCallback() { @Override public void onFailure(Throwable caught) { // TODO Auto-generated method stub - // Window.alert("Failed to start/continue auto indexing!"); + Window.alert("Failed to start/continue auto indexing!"); } @Override public void onSuccess(Boolean result) { // TODO Auto-generated method stub - // if( result ) Window.alert("Started/continued auto - // indexing!"); - // else Window.alert("Failed to start/continue auto - // indexing! ( back end issue )"); + if (result) + Window.alert("Started/continued auto indexing!"); + else + Window.alert("Failed to start/continue auto indexing! ( back end issue )"); } }); diff --git a/src/main/java/org/sigmah/client/ui/presenter/admin/ParametersAdminPresenter.java b/src/main/java/org/sigmah/client/ui/presenter/admin/ParametersAdminPresenter.java index 6933b34d9..7b7f9d6ff 100644 --- a/src/main/java/org/sigmah/client/ui/presenter/admin/ParametersAdminPresenter.java +++ b/src/main/java/org/sigmah/client/ui/presenter/admin/ParametersAdminPresenter.java @@ -99,7 +99,7 @@ public class ParametersAdminPresenter extends AbstractAdminPresenter + * @return The selected backup download type, or {@code null} if no + * option is selected. + * */ LoadingScope getSelectedBackupDownloadType(); @@ -156,11 +155,11 @@ public static interface View extends AbstractAdminPresenter.View { * Sets the selected export management format. * * @param exportFormat - * The export management format: - *
    - *
  • {@link ExportFormat#XLS}
  • - *
  • {@link ExportFormat#ODS}
  • - *
+ * The export management format: + *
    + *
  • {@link ExportFormat#XLS}
  • + *
  • {@link ExportFormat#ODS}
  • + *
*/ void setSelectedExportFormat(ExportFormat exportFormat); @@ -178,6 +177,16 @@ public static interface View extends AbstractAdminPresenter.View { Button getExportManagementSaveButton(); + // Solr Settings Panel + + Button getManualIndexButton(); + + TextField getSolrCoreUrlTextField(); + + Button getSolrSaveConfigButton(); + + FormPanel getSolrSettingsForm(); + } /** @@ -186,7 +195,8 @@ public static interface View extends AbstractAdminPresenter.View { private static final int BACKUP_STATUS_UPDATE_TIMER_DELAY = 5000; /** - * Timer used to regularly update the backup status once a backup process has been started. + * Timer used to regularly update the backup status once a backup process + * has been started. */ private Timer updateBackupStatusTimer; @@ -196,9 +206,9 @@ public static interface View extends AbstractAdminPresenter.View { * Presenters's initialization. * * @param view - * Presenter's view interface. + * Presenter's view interface. * @param injector - * Injected client injector. + * Injected client injector. */ @Inject protected ParametersAdminPresenter(View view, Injector injector, ImageProvider imageProvider) { @@ -244,7 +254,8 @@ public void handleEvent(final FormEvent be) { // Updates logo preview with uploaded file. displayLogo(newLogoFileName); - N10N.validNotif(I18N.CONSTANTS.organizationManagementLogoNotificationTitle(), I18N.CONSTANTS.organizationManagementLogoNotificationMessage()); + N10N.validNotif(I18N.CONSTANTS.organizationManagementLogoNotificationTitle(), + I18N.CONSTANTS.organizationManagementLogoNotificationMessage()); // Launches general form save (for organization name). saveGeneralParametersForm(newLogoFileName); @@ -267,8 +278,8 @@ public void componentSelected(final ButtonEvent ce) { if (ClientUtils.isNotBlank(logoFileName)) { // Submit logo file upload form. - final ServletUrlBuilder urlBuilder = - new ServletUrlBuilder(injector.getAuthenticationProvider(), injector.getPageManager(), Servlet.FILE, ServletMethod.UPLOAD_ORGANIZATION_LOGO); + final ServletUrlBuilder urlBuilder = new ServletUrlBuilder(injector.getAuthenticationProvider(), + injector.getPageManager(), Servlet.FILE, ServletMethod.UPLOAD_ORGANIZATION_LOGO); urlBuilder.addParameter(RequestParameter.ID, auth().getOrganizationId()); view.getGeneralParametersForm().setAction(urlBuilder.toString()); @@ -335,6 +346,25 @@ public void componentSelected(final ButtonEvent ce) { } }); + view.getSolrSaveConfigButton().addSelectionListener(new SelectionListener() { + + @Override + public void componentSelected(final ButtonEvent ce) { + + final String newSolrCoreUrl = view.getSolrCoreUrlTextField().getValue(); + + if (ClientUtils.isBlank(newSolrCoreUrl)) { + N10N.warn("The Solr Core Url value cannot be empty"); + return; + } + + view.getSolrSaveConfigButton().setLoading(true); + + saveSolrSettingsForm(newSolrCoreUrl); + + } + }); + } /** @@ -343,7 +373,8 @@ public void componentSelected(final ButtonEvent ce) { @Override public void onPageRequest(final PageRequest request) { - // 'General Parameters' form reset is processed in 'onViewRevealed()' due to 'FileUploadField' constraints. + // 'General Parameters' form reset is processed in 'onViewRevealed()' + // due to 'FileUploadField' constraints. view.getBackupForm().reset(); view.getBackupForm().clearAll(); view.getExportManagementForm().reset(); @@ -354,35 +385,40 @@ public void onPageRequest(final PageRequest request) { displayLogo(auth().getOrganizationLogo()); // Retrieves OrgUnits and populates store. - dispatch.execute(new GetOrgUnits(OrgUnitDTO.Mode.WITH_TREE), new CommandResultHandler>() { + dispatch.execute(new GetOrgUnits(OrgUnitDTO.Mode.WITH_TREE), + new CommandResultHandler>() { - @Override - public void onCommandSuccess(final ListResult result) { - for (OrgUnitDTO orgUnitDTO : result.getData()) { - // Recursily fills the store. - fillOrgUnitsCombobox(orgUnitDTO, view.getBackupManagementOrgUnitsComboBox().getStore()); - } - } + @Override + public void onCommandSuccess(final ListResult result) { + for (OrgUnitDTO orgUnitDTO : result.getData()) { + // Recursily fills the store. + fillOrgUnitsCombobox(orgUnitDTO, view.getBackupManagementOrgUnitsComboBox().getStore()); + } + } - }); + }); // Updates backup status. updateBackupStatus(true); updateBackupStatusTimer.scheduleRepeating(BACKUP_STATUS_UPDATE_TIMER_DELAY); // Retrieves configured export format. - dispatch.execute(new GetGlobalExportSettings(auth().getOrganizationId(), false), new CommandResultHandler() { + dispatch.execute(new GetGlobalExportSettings(auth().getOrganizationId(), false), + new CommandResultHandler() { - @Override - public void onCommandSuccess(final GlobalExportSettingsDTO result) { - view.setSelectedExportFormat(result.getDefaultOrganizationExportFormat()); - view.getExportManagementForm().resetValueHasChanged(); - } + @Override + public void onCommandSuccess(final GlobalExportSettingsDTO result) { + view.setSelectedExportFormat(result.getDefaultOrganizationExportFormat()); + view.getExportManagementForm().resetValueHasChanged(); + } - }, view.getExportManagementSaveButton()); - - view.getManualIndexButton().addSelectionListener(new SelectionListener(){ + }, view.getExportManagementSaveButton()); + + view.getSolrCoreUrlTextField().setValue(auth().getOrganizationSolrCoreUrl()); + + view.getManualIndexButton().addSelectionListener(new SelectionListener() { + // funnily this is getting fired twice on button click @Override public void componentSelected(ButtonEvent ce) { // TODO Auto-generated method stub @@ -402,9 +438,9 @@ public void onSuccess(Boolean result) { } }); } - + }); - + } /** @@ -412,7 +448,8 @@ public void onSuccess(Boolean result) { */ @Override protected void onViewRevealed() { - // 'FileUploadField' reset needs to be processed once view has been rendered. + // 'FileUploadField' reset needs to be processed once view has been + // rendered. view.getLogoFileField().reset(); } @@ -422,10 +459,7 @@ protected void onViewRevealed() { @Override public FormPanel[] getForms() { // Backup form does not not manage data to be saved. - return new FormPanel[] { - view.getGeneralParametersForm(), - view.getExportManagementForm() - }; + return new FormPanel[] { view.getGeneralParametersForm(), view.getExportManagementForm() }; } /** @@ -446,7 +480,7 @@ protected void onLeavingOk() { * Function to display the organization logo * * @param organisationLogo - * File id of the logo + * File id of the logo */ private void displayLogo(final String organisationLogo) { imageProvider.provideDataUrl(organisationLogo, new SuccessCallback() { @@ -461,38 +495,41 @@ public void onSuccess(String dataUrl) { * Updates the backup status. * * @param saveButtonLoading - * {@code true} to set the save button in loading mode during update, {@code false} to ignore it. + * {@code true} to set the save button in loading mode during + * update, {@code false} to ignore it. */ private void updateBackupStatus(final boolean saveButtonLoading) { - dispatch.execute(new BackupArchiveManagementCommand(auth().getOrganizationId()), new CommandResultHandler() { - - @Override - public void onCommandSuccess(final BackupDTO result) { - view.getBackupStatus().update(result, new ClickHandler() { + dispatch.execute(new BackupArchiveManagementCommand(auth().getOrganizationId()), + new CommandResultHandler() { @Override - public void onClick(final ClickEvent event) { + public void onCommandSuccess(final BackupDTO result) { + view.getBackupStatus().update(result, new ClickHandler() { - final ServletUrlBuilder builder = - new ServletUrlBuilder(injector.getAuthenticationProvider(), injector.getPageManager(), Servlet.FILE, ServletMethod.DOWNLOAD_ARCHIVE); - builder.addParameter(RequestParameter.ID, result.getArchiveFileName()); + @Override + public void onClick(final ClickEvent event) { - ClientUtils.launchDownload(builder.toString()); + final ServletUrlBuilder builder = new ServletUrlBuilder( + injector.getAuthenticationProvider(), injector.getPageManager(), Servlet.FILE, + ServletMethod.DOWNLOAD_ARCHIVE); + builder.addParameter(RequestParameter.ID, result.getArchiveFileName()); + + ClientUtils.launchDownload(builder.toString()); + } + }); } - }); - } - }, saveButtonLoading ? view.getBackupSaveButton() : null); + }, saveButtonLoading ? view.getBackupSaveButton() : null); } /** * Fills combobox with given the children of the given root org units. * * @param unit - * The root org unit. + * The root org unit. * @param store - * The field store. + * The field store. */ private static void fillOrgUnitsCombobox(final OrgUnitDTO unit, final ListStore store) { @@ -510,7 +547,8 @@ private static void fillOrgUnitsCombobox(final OrgUnitDTO unit, final ListStore< * Validates and saves the general parameters form. * * @param organizationLogoFileName - * The organization logo file name (should never be {@code null}). + * The organization logo file name (should never be + * {@code null}). */ private void saveGeneralParametersForm(final String organizationLogoFileName) { @@ -523,6 +561,7 @@ private void saveGeneralParametersForm(final String organizationLogoFileName) { organizationDTO.setId(auth().getOrganizationId()); organizationDTO.setName(view.getOrganizationNameTextField().getValue()); organizationDTO.setLogo(organizationLogoFileName); + organizationDTO.setSolrCoreUrl(auth().getOrganizationSolrCoreUrl()); // Saves new organization name. dispatch.execute(new UpdateOrganization(organizationDTO), new CommandResultHandler() { @@ -536,7 +575,7 @@ public void onCommandFailure(final Throwable e) { public void onCommandSuccess(final OrganizationDTO result) { N10N.validNotif(I18N.CONSTANTS.organizationManagementSaveChangesNotificationTitle(), - I18N.CONSTANTS.organizationManagementSaveChangesNotificationMessage()); + I18N.CONSTANTS.organizationManagementSaveChangesNotificationMessage()); view.getGeneralParametersForm().resetValueHasChanged(); @@ -553,7 +592,8 @@ private void saveBackupFilesForm() { return; } - if (view.getSelectedBackupDownloadType() == null || view.getBackupManagementOrgUnitsComboBox().getValue() == null) { + if (view.getSelectedBackupDownloadType() == null + || view.getBackupManagementOrgUnitsComboBox().getValue() == null) { N10N.warn(I18N.CONSTANTS.form_validation_ko()); return; } @@ -599,17 +639,90 @@ private void saveExportManagementForm() { @Override public void onCommandFailure(final Throwable caught) { - N10N.warn(I18N.CONSTANTS.saveExportConfiguration(), I18N.MESSAGES.adminStandardCreationFailure(I18N.CONSTANTS.defaultExportFormat())); + N10N.warn(I18N.CONSTANTS.saveExportConfiguration(), + I18N.MESSAGES.adminStandardCreationFailure(I18N.CONSTANTS.defaultExportFormat())); } @Override public void onCommandSuccess(final VoidResult result) { - N10N.validNotif(I18N.CONSTANTS.exportManagementSaveChangesNotificationTitle(), I18N.CONSTANTS.exportManagementSaveChangesNotificationMessage()); + N10N.validNotif(I18N.CONSTANTS.exportManagementSaveChangesNotificationTitle(), + I18N.CONSTANTS.exportManagementSaveChangesNotificationMessage()); view.getExportManagementForm().resetValueHasChanged(); } }, view.getExportManagementSaveButton()); } - + + /** + * Validates and saves the solr settings form. + * + * @param solrCoreUrl + * The solrCoreUrl (should never be {@code null}). + */ + private void saveSolrSettingsForm(final String solrCoreUrl) { + + if (!view.getSolrSettingsForm().isValid()) { + view.getSolrSaveConfigButton().setLoading(false); + return; + } + + final OrganizationDTO organizationDTO = new OrganizationDTO(); + organizationDTO.setId(auth().getOrganizationId()); + organizationDTO.setName(auth().getOrganizationName()); + organizationDTO.setLogo(auth().getOrganizationLogo()); + organizationDTO.setSolrCoreUrl(solrCoreUrl); + + // Saves new organization name. + dispatch.execute(new UpdateOrganization(organizationDTO), new CommandResultHandler() { + + @Override + public void onCommandFailure(final Throwable e) { + N10N.error(I18N.CONSTANTS.organizationManagementWebServiceNotificationError()); + } + + @Override + public void onCommandSuccess(final OrganizationDTO result) { + + N10N.validNotif(I18N.CONSTANTS.organizationManagementSaveChangesNotificationTitle(), + I18N.CONSTANTS.organizationManagementSaveChangesNotificationMessage()); + + view.getSolrSettingsForm().resetValueHasChanged(); + searchService.updateCore(solrCoreUrl, new AsyncCallback() { + public void onFailure(Throwable caught) { + Window.alert("Could not update Solr Core. Check that the url is valid!"); + caught.printStackTrace(); + } + + public void onSuccess(Boolean result) { + Boolean dih_success = result; + if (dih_success == true) { + Window.alert("Successfully updated Solr Core!"); + } else { + Window.alert("Failed to update Solr Core! Check that the url is valid!"); + } + } + }); + searchService.autoIndex(new AsyncCallback() { + + @Override + public void onFailure(Throwable caught) { + // TODO Auto-generated method stub + Window.alert("Failed to start/continue auto indexing!"); + } + + @Override + public void onSuccess(Boolean result) { + // TODO Auto-generated method stub + if (result) + Window.alert("Started/continued auto indexing!"); + else + Window.alert("Failed to start/continue auto indexing! ( back end issue )"); + } + + }); + + } + }, view.getSolrSaveConfigButton()); + } } diff --git a/src/main/java/org/sigmah/client/ui/view/admin/ParametersAdminView.java b/src/main/java/org/sigmah/client/ui/view/admin/ParametersAdminView.java index 523fba450..212329596 100644 --- a/src/main/java/org/sigmah/client/ui/view/admin/ParametersAdminView.java +++ b/src/main/java/org/sigmah/client/ui/view/admin/ParametersAdminView.java @@ -509,6 +509,13 @@ public Button getManualIndexButton() { public void setManualIndexButton(Button manualIndexButton) { this.manualIndexButton = manualIndexButton; } - - + + public FormPanel getSolrSettingsForm() { + return solrSettingsForm; + } + + public void setSolrSettingsForm(FormPanel solrSettingsForm) { + this.solrSettingsForm = solrSettingsForm; + } + } diff --git a/src/main/java/org/sigmah/offline/handler/SecureNavigationAsyncHandler.java b/src/main/java/org/sigmah/offline/handler/SecureNavigationAsyncHandler.java index c1f7f31d4..cc26166cb 100644 --- a/src/main/java/org/sigmah/offline/handler/SecureNavigationAsyncHandler.java +++ b/src/main/java/org/sigmah/offline/handler/SecureNavigationAsyncHandler.java @@ -86,7 +86,7 @@ public void onRequestSuccess(Authentication authentication) { } result.setAuthentication(new Authentication(null, "anonymous@nowhere.com", "anonymous", null, language, null, - null, null, null, null, null, Collections.emptySet())); + null, null, null, null, null, Collections.emptySet(), null)); } } }); diff --git a/src/main/java/org/sigmah/offline/js/AuthenticationJS.java b/src/main/java/org/sigmah/offline/js/AuthenticationJS.java index 98b044e1f..9fb285f14 100644 --- a/src/main/java/org/sigmah/offline/js/AuthenticationJS.java +++ b/src/main/java/org/sigmah/offline/js/AuthenticationJS.java @@ -66,6 +66,7 @@ public static AuthenticationJS toJavaScript(Authentication authentication) { authenticationJS.setSecondaryOrgUnitIds(authentication.getSecondaryOrgUnitIds()); authenticationJS.setAggregatedProfiles(authentication.getAggregatedProfiles()); authenticationJS.setMemberOfProjectIds(authentication.getMemberOfProjectIds()); + authenticationJS.setOrganizationSolrCoreUrl(authentication.getOrganizationSolrCoreUrl()); return authenticationJS; } @@ -80,6 +81,7 @@ public Authentication toAuthentication() { getOrganizationId(), getOrganizationName(), getOrganizationLogo(), + getOrganizationSolrCoreUrl(), getMainOrgUnitId(), getSecondaryOrgUnitIdsDTO(), getAggregatedProfilesDTO(), @@ -168,6 +170,14 @@ public native String getOrganizationLogo() /*-{ public native void setOrganizationLogo(String organizationLogo) /*-{ this.organizationLogo = organizationLogo; }-*/; + + public native String getOrganizationSolrCoreUrl() /*-{ + return this.organizationSolrCoreUrl; + }-*/; + + public native void setOrganizationSolrCoreUrl(String organizationSolrCoreUrl) /*-{ + this.organizationSolrCoreUrl = organizationSolrCoreUrl; + }-*/; public Integer getMainOrgUnitId() { return Values.getInteger(this, "orgUnitId"); diff --git a/src/main/java/org/sigmah/server/domain/Organization.java b/src/main/java/org/sigmah/server/domain/Organization.java index 917297d0c..02512f601 100644 --- a/src/main/java/org/sigmah/server/domain/Organization.java +++ b/src/main/java/org/sigmah/server/domain/Organization.java @@ -69,6 +69,9 @@ public class Organization extends AbstractEntityId { @Column(name = EntityConstants.ORGANIZATION_COLUMN_LOGO, nullable = true, columnDefinition = EntityConstants.COLUMN_DEFINITION_TEXT) private String logo; + + @Column(name = EntityConstants.ORGANIZATION_SOLRCORE_URL, nullable = true, columnDefinition = EntityConstants.COLUMN_DEFINITION_TEXT) + private String solrcore_url; // constructeur @@ -152,4 +155,14 @@ public void setOrgUnit(List orgUnit) { this.orgUnit = orgUnit; } + public String getSolrcore_url() { + return solrcore_url; + } + + public void setSolrcore_url(String solrcore_url) { + this.solrcore_url = solrcore_url; + } + + + } diff --git a/src/main/java/org/sigmah/server/domain/util/EntityConstants.java b/src/main/java/org/sigmah/server/domain/util/EntityConstants.java index 66ade06cd..cb21e3adc 100644 --- a/src/main/java/org/sigmah/server/domain/util/EntityConstants.java +++ b/src/main/java/org/sigmah/server/domain/util/EntityConstants.java @@ -896,6 +896,7 @@ private EntityConstants() { public static final String ORGANIZATION_COLUMN_ID = "id_organization"; public static final String ORGANIZATION_COLUMN_NAME = "name"; public static final String ORGANIZATION_COLUMN_LOGO = "logo"; + public static final String ORGANIZATION_SOLRCORE_URL = "solrcore_url"; // TODO Replace with 'OrgUnit' id column. public static final String ORGANIZATION_COLUMN_ROOT_ORG_UNIT = "id_root_org_unit"; diff --git a/src/main/java/org/sigmah/server/handler/UpdateOrganizationHandler.java b/src/main/java/org/sigmah/server/handler/UpdateOrganizationHandler.java index fe2e63f96..b4e684d16 100644 --- a/src/main/java/org/sigmah/server/handler/UpdateOrganizationHandler.java +++ b/src/main/java/org/sigmah/server/handler/UpdateOrganizationHandler.java @@ -82,6 +82,7 @@ public OrganizationDTO execute(final UpdateOrganization cmd, final UserExecution organization.setName(form.getName()); organization.setLogo(form.getLogo()); + organization.setSolrcore_url(form.getSolrCoreUrl()); organizationDAO.persist(organization, context.getUser()); diff --git a/src/main/java/org/sigmah/server/handler/util/Handlers.java b/src/main/java/org/sigmah/server/handler/util/Handlers.java index 17ab84fd6..7cc4b063f 100644 --- a/src/main/java/org/sigmah/server/handler/util/Handlers.java +++ b/src/main/java/org/sigmah/server/handler/util/Handlers.java @@ -103,9 +103,10 @@ public static Authentication createAuthentication(final User user, final Languag final String organizationName = organization != null ? organization.getName() : null; final String organizationLogo = organization != null ? organization.getLogo() : null; final Integer orgUnitId = orgUnitWithProfiles != null && orgUnitWithProfiles.getOrgUnit() != null ? orgUnitWithProfiles.getOrgUnit().getId() : null; + final String organization_solrcore_url = organization != null ? organization.getSolrcore_url() : null; return new Authentication(user.getId(), user.getEmail(), user.getName(), user.getFirstName(), Languages.notNull(language), organizationId, - organizationName, organizationLogo, orgUnitId, secondaryOrgUnitIds, Handlers.aggregateProfiles(user, mapper), memberOfProjectIds); + organizationName, organizationLogo, orgUnitId, secondaryOrgUnitIds, Handlers.aggregateProfiles(user, mapper), memberOfProjectIds, organization_solrcore_url); } /** diff --git a/src/main/java/org/sigmah/server/search/SearchServiceImpl.java b/src/main/java/org/sigmah/server/search/SearchServiceImpl.java index 481fd7810..273f6756d 100644 --- a/src/main/java/org/sigmah/server/search/SearchServiceImpl.java +++ b/src/main/java/org/sigmah/server/search/SearchServiceImpl.java @@ -36,4 +36,11 @@ public Boolean autoIndex() { return false; return true; } + + @Override + public Boolean updateCore(String solrCoreUrl) { + // TODO Auto-generated method stub + if( SolrSearcher.getNewInstance(solrCoreUrl) != null ) return true; + return false; + } } diff --git a/src/main/java/org/sigmah/server/search/SolrIndexJobActivator.java b/src/main/java/org/sigmah/server/search/SolrIndexJobActivator.java index 104ced13d..fe385a9a8 100644 --- a/src/main/java/org/sigmah/server/search/SolrIndexJobActivator.java +++ b/src/main/java/org/sigmah/server/search/SolrIndexJobActivator.java @@ -14,7 +14,7 @@ public class SolrIndexJobActivator { private static Scheduler scheduler; private static SolrIndexJobActivator instance; - public static SolrIndexJobActivator getSolrIndexJobActivator(){ + public static SolrIndexJobActivator getSolrIndexJobActivator(){ //Singleton if( instance == null ){ instance = new SolrIndexJobActivator(); } diff --git a/src/main/java/org/sigmah/server/search/SolrSearcher.java b/src/main/java/org/sigmah/server/search/SolrSearcher.java index 81a2fc94d..5c06492d1 100644 --- a/src/main/java/org/sigmah/server/search/SolrSearcher.java +++ b/src/main/java/org/sigmah/server/search/SolrSearcher.java @@ -33,7 +33,7 @@ public class SolrSearcher { private Properties properties = new BasicProperties(); - + private String urlString; private static SolrClient solrServer; private static SolrSearcher instance; @@ -60,9 +60,24 @@ public static SolrSearcher getInstance() { // Singleton return instance; } + public static SolrSearcher getNewInstance(String solrCoreUrl) { //only for use when solr core url has been updated + + instance = new SolrSearcher(); + instance.urlString = solrCoreUrl; + try { + instance.loadServer(); + } catch (MalformedURLException e) { + // TODO Auto-generated catch block + System.out.println("SOLR CONNECTION FAILED"); + e.printStackTrace(); + } + return instance; + } + private void loadServer() throws MalformedURLException { - //urlString = "http://localhost:8983/solr/Test_Sigmah"; - urlString = properties.getProperty(PropertyKey.SOLR_CORE_URL); + // urlString = "http://localhost:8983/solr/Test_Sigmah"; + // urlString = properties.getProperty(PropertyKey.SOLR_CORE_URL); + //urlString = System.out.println("SOLR CONNECTING TO: " + urlString); solrServer = new HttpSolrClient.Builder(urlString).build(); // Window.alert("Successful solr connection!"); @@ -101,11 +116,11 @@ public ArrayList search(String searchStr, String filter) { SolrQuery query = new SolrQuery(); query.setQuery(searchStr); - if( filter.equals("Projects")) + if (filter.equals("Projects")) query.set("fq", "PROJECT"); - else if(filter.equals("Contacts")) + else if (filter.equals("Contacts")) query.set("fq", "CONTACT"); - else if(filter.equals("OrgUnits")) + else if (filter.equals("OrgUnits")) query.set("fq", "ORG_UNIT"); // query.addSortField("weight", ORDER.desc); diff --git a/src/main/java/org/sigmah/shared/command/result/Authentication.java b/src/main/java/org/sigmah/shared/command/result/Authentication.java index 6e414c888..0dca99c34 100644 --- a/src/main/java/org/sigmah/shared/command/result/Authentication.java +++ b/src/main/java/org/sigmah/shared/command/result/Authentication.java @@ -93,6 +93,11 @@ public class Authentication implements Result { * The currently authenticated user's Organization logo path. */ private String organizationLogo; + + /** + * The currently authenticated user's Organization solr core path. + */ + private String organizationSolrCoreUrl; /** * The currently authenticated user's OrgUnit id. @@ -157,8 +162,8 @@ public Authentication(final Language language) { */ public Authentication(Integer userId, String userEmail, String userName, String userFirstName, Language language, Integer organizationId, String organizationName, String organizationLogo, Integer mainOrgUnitId, - Set secondaryOrgUnitIds, Map aggregatedProfiles, Set memberOfProjectIds) { - this(userId, userEmail, userName, userFirstName, language, organizationId, organizationName, organizationLogo, + Set secondaryOrgUnitIds, Map aggregatedProfiles, Set memberOfProjectIds, String solrcore_url) { + this(userId, userEmail, userName, userFirstName, language, organizationId, organizationName, organizationLogo, solrcore_url, mainOrgUnitId, secondaryOrgUnitIds, aggregatedProfiles, memberOfProjectIds, false); } @@ -189,7 +194,7 @@ public Authentication(Integer userId, String userEmail, String userName, String * true to allow the user to use Sigmah without cookie. */ public Authentication(Integer userId, String userEmail, String userName, String userFirstName, Language language, - Integer organizationId, String organizationName, String organizationLogo, Integer mainOrgUnitId, + Integer organizationId, String organizationName, String organizationLogo, String organizationSolrCoreUrl, Integer mainOrgUnitId, Set secondaryOrgUnitIds, Map aggregatedProfiles, Set memberOfProjectIds, boolean authorized) { this.userId = userId; this.userEmail = userEmail; @@ -204,6 +209,7 @@ public Authentication(Integer userId, String userEmail, String userName, String this.aggregatedProfiles = aggregatedProfiles; this.memberOfProjectIds = memberOfProjectIds; this.authorized = authorized; + this.organizationSolrCoreUrl = organizationSolrCoreUrl; } /** @@ -222,6 +228,7 @@ public String toString() { builder.append("organizationId", organizationId); builder.append("organizationName", organizationName); builder.append("organizationLogo", organizationLogo); + builder.append("organizationSolrCoreUrl", organizationSolrCoreUrl); builder.append("mainOrgUnitId", mainOrgUnitId); StringBuilder serializedSecondaryOrgUnitIds = new StringBuilder("["); @@ -364,6 +371,16 @@ public String getOrganizationLogo() { return organizationLogo; } + + /** + * Returns the authenticated user's Organization Solr Core Url or {@code null} if anonymous. + * + * @return The authenticated user's Organization Solr Core Url or {@code null} if anonymous. + */ + public String getOrganizationSolrCoreUrl() { + return organizationSolrCoreUrl; + } + /** * Returns the authenticated user's main OrgUnit id or {@code null} if anonymous. * diff --git a/src/main/java/org/sigmah/shared/dto/organization/OrganizationDTO.java b/src/main/java/org/sigmah/shared/dto/organization/OrganizationDTO.java index 9e7787fc4..805b35fdb 100644 --- a/src/main/java/org/sigmah/shared/dto/organization/OrganizationDTO.java +++ b/src/main/java/org/sigmah/shared/dto/organization/OrganizationDTO.java @@ -46,6 +46,7 @@ public class OrganizationDTO extends AbstractModelDataEntityDTO { private static final String ROOT = "root"; private static final String NAME = "name"; private static final String LOGO = "logo"; + private static final String SOLRCORE_URL = "solrcore_url"; /** * Mapping configurations. @@ -108,6 +109,7 @@ protected void appendToString(final ToStringBuilder builder) { builder.append(NAME, getName()); builder.append(LOGO, getLogo()); builder.append(ROOT, getRoot()); + builder.append(SOLRCORE_URL, getSolrCoreUrl()); } /** @@ -144,5 +146,13 @@ public OrgUnitDTO getRoot() { public void setRoot(OrgUnitDTO root) { set(ROOT, root); } + + public String getSolrCoreUrl(){ + return get(SOLRCORE_URL); + } + + public void setSolrCoreUrl(String solrCoreUrl){ + set(SOLRCORE_URL, solrCoreUrl); + } } diff --git a/src/main/resources/db/migration/V21__solr_core_url_field.sql b/src/main/resources/db/migration/V21__solr_core_url_field.sql new file mode 100644 index 000000000..76c61e917 --- /dev/null +++ b/src/main/resources/db/migration/V21__solr_core_url_field.sql @@ -0,0 +1 @@ +ALTER TABLE organization ADD COLUMN solrcore_url TEXT ; \ No newline at end of file From ae9af1afc2995b92b9c50dc02cb8fed0c23aed5e Mon Sep 17 00:00:00 2001 From: indianauthority97 Date: Fri, 28 Jul 2017 15:43:44 +0530 Subject: [PATCH 24/36] [Issue #535]:Multiple failed attempts at querying the database for a list of FileVersion objects to use for File Indexing --- .../sigmah/client/search/SearchService.java | 2 + .../client/search/SearchServiceAsync.java | 2 + .../ui/presenter/DashboardPresenter.java | 17 ++++ .../ui/presenter/zone/SearchPresenter.java | 53 ++++++----- .../client/ui/view/zone/SearchView.java | 12 +-- .../java/org/sigmah/server/dao/FileDAO.java | 1 + .../server/dao/impl/FileHibernateDAO.java | 38 +++++++- .../file/impl/LocalFileStorageProvider.java | 5 +- .../handler/PrepareFileUploadHandler.java | 2 +- .../server/inject/ConfigurationModule.java | 4 + .../server/inject/ServletContextListener.java | 7 +- .../server/search/FilesSolrHandler.java | 92 +++++++++++++++++++ .../sigmah/server/search/SearchModule.java | 36 ++++++++ .../server/search/SearchServiceImpl.java | 11 +++ .../sigmah/server/search/SolrSearcher.java | 65 ++++++------- 15 files changed, 280 insertions(+), 67 deletions(-) create mode 100644 src/main/java/org/sigmah/server/search/FilesSolrHandler.java create mode 100644 src/main/java/org/sigmah/server/search/SearchModule.java diff --git a/src/main/java/org/sigmah/client/search/SearchService.java b/src/main/java/org/sigmah/client/search/SearchService.java index 000a380d7..5f4291e80 100644 --- a/src/main/java/org/sigmah/client/search/SearchService.java +++ b/src/main/java/org/sigmah/client/search/SearchService.java @@ -1,5 +1,6 @@ package org.sigmah.client.search; +import java.io.IOException; import java.util.ArrayList; import org.sigmah.shared.dto.search.SearchResultsDTO; @@ -13,4 +14,5 @@ public interface SearchService extends RemoteService { Boolean index(); Boolean autoIndex(); Boolean updateCore(String solrCoreUrl); + Boolean filesIndex() throws IOException; } diff --git a/src/main/java/org/sigmah/client/search/SearchServiceAsync.java b/src/main/java/org/sigmah/client/search/SearchServiceAsync.java index 068585d24..f3c152e77 100644 --- a/src/main/java/org/sigmah/client/search/SearchServiceAsync.java +++ b/src/main/java/org/sigmah/client/search/SearchServiceAsync.java @@ -1,5 +1,6 @@ package org.sigmah.client.search; +import java.io.IOException; import java.util.ArrayList; import org.sigmah.shared.dto.search.SearchResultsDTO; @@ -12,4 +13,5 @@ public interface SearchServiceAsync { public void index(AsyncCallback callback); public void autoIndex(AsyncCallback callback); public void updateCore(String solrCoreUrl, AsyncCallback callback); + public void filesIndex(AsyncCallback callback) throws IOException; } diff --git a/src/main/java/org/sigmah/client/ui/presenter/DashboardPresenter.java b/src/main/java/org/sigmah/client/ui/presenter/DashboardPresenter.java index 205ed2790..de17210a3 100644 --- a/src/main/java/org/sigmah/client/ui/presenter/DashboardPresenter.java +++ b/src/main/java/org/sigmah/client/ui/presenter/DashboardPresenter.java @@ -277,6 +277,23 @@ public void handleEvent(OfflineEvent event) { initializeMenuButtons(event.getState()); } }); + + + searchServiceForAutoIndex.updateCore(auth().getOrganizationSolrCoreUrl(), new AsyncCallback() { + public void onFailure(Throwable caught) { + Window.alert("Could not update Solr Core. Check that the url is valid!"); + caught.printStackTrace(); + } + + public void onSuccess(Boolean result) { + Boolean dih_success = result; + if (dih_success == true) { + Window.alert("Successfully updated Solr Core!"); + } else { + Window.alert("Failed to update Solr Core! Check that the url is valid!"); + } + } + }); // related to search auto indexing if (ProfileUtils.isGranted(auth(), GlobalPermissionEnum.MANAGE_SETTINGS)) { diff --git a/src/main/java/org/sigmah/client/ui/presenter/zone/SearchPresenter.java b/src/main/java/org/sigmah/client/ui/presenter/zone/SearchPresenter.java index f03b1ab22..f0e9ac154 100644 --- a/src/main/java/org/sigmah/client/ui/presenter/zone/SearchPresenter.java +++ b/src/main/java/org/sigmah/client/ui/presenter/zone/SearchPresenter.java @@ -1,5 +1,6 @@ package org.sigmah.client.ui.presenter.zone; +import java.io.IOException; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; @@ -130,7 +131,7 @@ public static interface View extends ViewInterface { Button getSearchButton(); - //Button getIndexButton(); + Button getIndexButton(); } @@ -181,11 +182,17 @@ public void onClick(ClickEvent event) { }); -// view.getIndexButton().addClickHandler(new ClickHandler() { -// public void onClick(ClickEvent event) { -// index(); -// } -// }); + view.getIndexButton().addClickHandler(new ClickHandler() { + public void onClick(ClickEvent event) { + try { + filesIndex(); + } catch (IOException e) { + // TODO Auto-generated catch block + Window.alert("IO Exception!"); + e.printStackTrace(); + } + } + }); } @@ -228,23 +235,23 @@ public void onSuccess(ArrayList result) { }); } -// private void index() { -// searchService.index(new AsyncCallback() { -// public void onFailure(Throwable caught) { -// Window.alert("Failure on the server side!"); -// caught.printStackTrace(); -// } -// -// public void onSuccess(Boolean result) { -// dih_success = result; -// if (dih_success == true) { -// Window.alert("Successfully completed Full Import!"); -// } else { -// Window.alert("Failed to complete Full Import!"); -// } -// } -// }); -// } + private void filesIndex() throws IOException { + searchService.filesIndex(new AsyncCallback() { + public void onFailure(Throwable caught) { + Window.alert("Failure on the server side!"); + caught.printStackTrace(); + } + + public void onSuccess(Boolean result) { + dih_success = result; + if (dih_success == true) { + Window.alert("Successfully completed Files Import!"); + } else { + Window.alert("Failed to complete Files Import!"); + } + } + }); + } private void loadProjectIdsForFiltering() { Integer[] orgUnitsIds = auth().getOrgUnitIds().toArray(new Integer[auth().getOrgUnitIds().size()]); diff --git a/src/main/java/org/sigmah/client/ui/view/zone/SearchView.java b/src/main/java/org/sigmah/client/ui/view/zone/SearchView.java index 0eae8b12e..93e1a9170 100644 --- a/src/main/java/org/sigmah/client/ui/view/zone/SearchView.java +++ b/src/main/java/org/sigmah/client/ui/view/zone/SearchView.java @@ -79,13 +79,13 @@ public void initialize() { searchText.getElement().setPropertyString("placeholder", "Search"); searchButton = new Button("Go"); -// indexButton = new Button("DIH"); + indexButton = new Button("FIndex"); //searchBarPanel.add(searchForLabel); searchBarPanel.add(searchText); searchBarPanel.add(searchOptions); searchBarPanel.add(searchButton); -// searchBarPanel.add(indexButton); + searchBarPanel.add(indexButton); // initWidget(); Useless @@ -148,10 +148,10 @@ public Button getSearchButton() { /** * {@inheritDoc} */ -// @Override -// public Button getIndexButton() { -// return indexButton; -// } + @Override + public Button getIndexButton() { + return indexButton; + } } diff --git a/src/main/java/org/sigmah/server/dao/FileDAO.java b/src/main/java/org/sigmah/server/dao/FileDAO.java index 77c062d68..0bd5bd368 100644 --- a/src/main/java/org/sigmah/server/dao/FileDAO.java +++ b/src/main/java/org/sigmah/server/dao/FileDAO.java @@ -51,6 +51,7 @@ public interface FileDAO extends DAO { */ List findVersions(Collection filesIds, LoadingScope loadingScope); + List findAllVersions(); /** * Retrieves the {@link FileVersion} corresponding to the given {@code versionId}. * diff --git a/src/main/java/org/sigmah/server/dao/impl/FileHibernateDAO.java b/src/main/java/org/sigmah/server/dao/impl/FileHibernateDAO.java index aacc62448..268207849 100644 --- a/src/main/java/org/sigmah/server/dao/impl/FileHibernateDAO.java +++ b/src/main/java/org/sigmah/server/dao/impl/FileHibernateDAO.java @@ -31,7 +31,8 @@ import javax.persistence.EntityManager; import javax.persistence.NoResultException; -import javax.persistence.Query; +import javax.persistence.Query; +import javax.persistence.QueryTimeoutException; import javax.persistence.TypedQuery; import org.apache.commons.collections4.CollectionUtils; @@ -129,6 +130,41 @@ public List findVersions(final Collection filesIds, Loadin query.setParameter("filesIds", filesIds); return query.getResultList(); + } + + @Override + public List findAllVersions(){ + final String request; + //select last versions of all files which are not deleted +// request = "SELECT " +// + " fv " +// + "FROM " +// + " File f INNER JOIN f.versions fv " +// + "WHERE " +// + " f.dateDeleted IS NULL " +// + " AND fv.versionNumber IN (" +// + " SELECT max(fv2.versionNumber) FROM FileVersion fv2 WHERE fv2.parentFile = f" +// + " )"; + request = "SELECT " + + "fv " + + "FROM " + + " FileVersion "; +// + "WHERE " +// + " fv.versionNumber IN (" +// + " SELECT max(fv2.versionNumber) FROM FileVersion fv2 WHERE fv2.id = fv.id" +// + " )"; + System.out.println("GUBI " + request ); + System.out.println("This should not be null also:" + em()); + final TypedQuery query = em().createQuery(request, FileVersion.class); + List res = null; + try{ + res = query.getResultList(); + }catch( Exception e){ + System.out.println("Here's an error!"); + e.printStackTrace(); + } + System.out.println("GUBI " + res.toString()); + return res; } /** diff --git a/src/main/java/org/sigmah/server/file/impl/LocalFileStorageProvider.java b/src/main/java/org/sigmah/server/file/impl/LocalFileStorageProvider.java index cc17bdf7b..6782c37c8 100644 --- a/src/main/java/org/sigmah/server/file/impl/LocalFileStorageProvider.java +++ b/src/main/java/org/sigmah/server/file/impl/LocalFileStorageProvider.java @@ -59,8 +59,9 @@ public LocalFileStorageProvider(final Properties properties) { */ @Override public OutputStream create(final String storageId) throws IOException { - - return Files.newOutputStream(Paths.get(getStorageRootPath(), storageId)); + //Files. + return Files.newOutputStream(Paths.get(getStorageRootPath(), storageId)); + } diff --git a/src/main/java/org/sigmah/server/handler/PrepareFileUploadHandler.java b/src/main/java/org/sigmah/server/handler/PrepareFileUploadHandler.java index d66c83606..90f59cc10 100644 --- a/src/main/java/org/sigmah/server/handler/PrepareFileUploadHandler.java +++ b/src/main/java/org/sigmah/server/handler/PrepareFileUploadHandler.java @@ -63,7 +63,7 @@ public class PrepareFileUploadHandler extends AbstractCommandHandler docs; + //solrServer. + //solrdoc.addField(arg0, arg1); + + + //2. I get all the files(How?) as java file objects and for each I request the solr server with an update query + + //instance.fileStorageProvider.open(storageId) + System.out.println("I AM HERE!"); + System.out.println(fileDAO); +// Collection filesIds = new ArrayList(); +// filesIds.add(3887); +// filesIds.add(3902); +// filesIds.add(3905); +// filesIds.add(3907); +// filesIds.add(3910); + //List listFileVersions = fileDAO.findVersions(filesIds, null); + List listFileVersions = fileDAO.findAllVersions(); + System.out.println("GUBI" + listFileVersions.toString()); + //will this method even work? + List filePaths = new ArrayList(); + for( FileVersion fv : listFileVersions){ + System.out.println("IAMHERE Name: " + fv.getName() + " Path: " + fv.getPath()); + filePaths.add(fv.getPath()); +// //fv.getAuthor().getOrganization(); +// ServletUrlBuilder urlBuilder = +// new ServletUrlBuilder(authenticationProvider, pageManager, ServletConstants.Servlet.FILE, ServletConstants.ServletMethod.DOWNLOAD_FILE); +// urlBuilder.addParameter(RequestParameter.ID, fv.getParentFile().getId()); + } + + ContentStreamUpdateRequest req = new ContentStreamUpdateRequest("/update/extract"); + String filename = "/home/aditya/test-tika.pdf"; + req.addFile(new File(filename), "pdf"); + req.setParam("commit", "true"); + //req.setParam(ExtractingParams.EXTRACT_ONLY, "true"); + //req.setParam("literal.doc_type", "FILE"); + + NamedList result = null; + try { + result = SolrSearcher.solrServer.request(req); + return true; + } catch (SolrServerException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + return false; + } + //System.out.println("Result: " + result.toString()); + } +} + diff --git a/src/main/java/org/sigmah/server/search/SearchModule.java b/src/main/java/org/sigmah/server/search/SearchModule.java new file mode 100644 index 000000000..9815ffd6f --- /dev/null +++ b/src/main/java/org/sigmah/server/search/SearchModule.java @@ -0,0 +1,36 @@ +package org.sigmah.server.search; + +import javax.validation.Validation; +import javax.validation.Validator; +import javax.validation.ValidatorFactory; + +import org.sigmah.server.dao.FileDAO; +import org.sigmah.server.dao.impl.FileHibernateDAO; +import org.sigmah.server.dao.util.SQLDialect; +import org.sigmah.server.dao.util.SQLDialectProvider; + +import com.google.inject.AbstractModule; +import com.google.inject.Singleton; +import com.google.inject.persist.jpa.JpaPersistModule; + +public class SearchModule extends AbstractModule { + + @Override + protected void configure() { + // TODO Auto-generated method stub + + // Binds providers. + bind(SQLDialect.class).toProvider(SQLDialectProvider.class).in(Singleton.class); + + // Installs the JPA module. + install(new JpaPersistModule("sigmah-dev")); + + // JSR-303 : bean validation. + final ValidatorFactory factory = Validation.buildDefaultValidatorFactory(); + final Validator validator = factory.getValidator(); + bind(Validator.class).toInstance(validator); + + bind(FileDAO.class).to(FileHibernateDAO.class).in(Singleton.class); + } + +} diff --git a/src/main/java/org/sigmah/server/search/SearchServiceImpl.java b/src/main/java/org/sigmah/server/search/SearchServiceImpl.java index 273f6756d..5c634e798 100644 --- a/src/main/java/org/sigmah/server/search/SearchServiceImpl.java +++ b/src/main/java/org/sigmah/server/search/SearchServiceImpl.java @@ -1,7 +1,9 @@ package org.sigmah.server.search; import com.google.gwt.user.server.rpc.RemoteServiceServlet; +import com.google.inject.Inject; +import java.io.IOException; import java.util.ArrayList; import javax.servlet.ServletContext; @@ -14,6 +16,7 @@ @SuppressWarnings("serial") public class SearchServiceImpl extends RemoteServiceServlet implements SearchService{ + //implementation of the Search Methods @Override public ArrayList search(String searchStr, String filter){ @@ -43,4 +46,12 @@ public Boolean updateCore(String solrCoreUrl) { if( SolrSearcher.getNewInstance(solrCoreUrl) != null ) return true; return false; } + + @Override + public Boolean filesIndex() throws IOException { + // TODO Auto-generated method stub + FilesSolrHandler filesSolrHandler = new FilesSolrHandler(); + System.out.println("This is not supposed to be null: " + filesSolrHandler.getFileDAO()); + return filesSolrHandler.FilesImport(SolrSearcher.getInstance()); + } } diff --git a/src/main/java/org/sigmah/server/search/SolrSearcher.java b/src/main/java/org/sigmah/server/search/SolrSearcher.java index 5c06492d1..cebf8ad67 100644 --- a/src/main/java/org/sigmah/server/search/SolrSearcher.java +++ b/src/main/java/org/sigmah/server/search/SolrSearcher.java @@ -1,24 +1,34 @@ package org.sigmah.server.search; +import java.io.File; import java.io.IOException; import java.net.MalformedURLException; import java.util.ArrayList; +import java.util.Collection; import java.util.Iterator; +import java.util.List; import java.util.Map; import org.apache.solr.client.solrj.*; import org.apache.solr.client.solrj.SolrQuery.ORDER; import org.apache.solr.client.solrj.impl.*; +import org.apache.solr.client.solrj.request.ContentStreamUpdateRequest; import org.apache.solr.client.solrj.request.QueryRequest; import org.apache.solr.client.solrj.response.QueryResponse; import org.apache.solr.common.SolrDocument; import org.apache.solr.common.SolrDocumentList; +import org.apache.solr.common.SolrInputDocument; import org.apache.solr.common.params.ModifiableSolrParams; import org.apache.solr.common.util.NamedList; import org.sigmah.server.conf.BasicProperties; import org.sigmah.server.conf.Properties; +import org.sigmah.server.dao.FileDAO; +import org.sigmah.server.domain.value.FileVersion; +import org.sigmah.server.file.FileStorageProvider; import org.sigmah.shared.conf.PropertyKey; import org.sigmah.shared.dto.search.SearchResultsDTO; +import org.sigmah.shared.servlet.ServletUrlBuilder; +import org.sigmah.shared.servlet.ServletConstants; import com.allen_sauer.gwt.log.client.Log; import com.google.gson.Gson; @@ -33,9 +43,12 @@ public class SolrSearcher { private Properties properties = new BasicProperties(); + +// @Inject +// private FileStorageProvider fileStorageProvider; private String urlString; - private static SolrClient solrServer; + public static SolrClient solrServer; private static SolrSearcher instance; public String getUrlString() { @@ -51,9 +64,10 @@ public static SolrSearcher getInstance() { // Singleton instance = new SolrSearcher(); try { instance.loadServer(); - } catch (MalformedURLException e) { + } catch (Exception e) { // TODO Auto-generated catch block System.out.println("SOLR CONNECTION FAILED"); + instance = null; e.printStackTrace(); } } @@ -66,10 +80,12 @@ public static SolrSearcher getNewInstance(String solrCoreUrl) { //only for use w instance.urlString = solrCoreUrl; try { instance.loadServer(); - } catch (MalformedURLException e) { + } catch (Exception e) { // TODO Auto-generated catch block System.out.println("SOLR CONNECTION FAILED"); + instance = null; e.printStackTrace(); + return null; } return instance; } @@ -84,45 +100,27 @@ private void loadServer() throws MalformedURLException { System.out.println("SOLR CONNECTION CONNECTED"); } - public SolrDocumentList SolrTestQuery() { - SolrQuery query = new SolrQuery(); - query.setQuery("*:*"); - QueryResponse response; - try { - response = solrServer.query(query); - System.out.println("SOLR QUERY HAPPENED"); - SolrDocumentList list = response.getResults(); - for (SolrDocument doc : response.getResults()) { - // Window.alert(doc.toString()); - } - return list; - } catch (SolrServerException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - System.out.println("SOLR SERVER EXCEPTION Failed"); - return null; - } catch (IOException e) { - // TODO Auto-generated catch block - System.out.println("SOLR SERVER EXCEPTION Failed"); - e.printStackTrace(); - return null; - } - - } - public ArrayList search(String searchStr, String filter) { ArrayList searchList = new ArrayList(); SolrQuery query = new SolrQuery(); query.setQuery(searchStr); - if (filter.equals("Projects")) + //query.addSort("doc_id", ORDER.desc); + + if (filter.equals("Projects")){ query.set("fq", "PROJECT"); - else if (filter.equals("Contacts")) + //query.set("qt", "/searchproject"); + } + else if (filter.equals("Contacts")){ query.set("fq", "CONTACT"); - else if (filter.equals("OrgUnits")) + } + else if (filter.equals("OrgUnits")){ query.set("fq", "ORG_UNIT"); // query.addSortField("weight", ORDER.desc); + }else{ + //query.set("qt", "/search"); + } QueryResponse rsp = null; @@ -141,6 +139,9 @@ else if (filter.equals("OrgUnits")) if (rsp != null) { Gson gson = new Gson(); Iterator iter = rsp.getResults().iterator(); + //rsp.get + //rsp.getHighlighting().get("ORG_UNIT_1637").get("org_unit_model_name").get(0); //returns highlighted string + //how do i send it from back-end to front end, very hard while (iter.hasNext()) { SearchResultsDTO descriptor = new SearchResultsDTO(); SolrDocument resultDoc = (SolrDocument) iter.next(); From b2351976788474259fe1edf7df76ddb93454afde Mon Sep 17 00:00:00 2001 From: indianauthority97 Date: Sun, 30 Jul 2017 17:33:07 +0530 Subject: [PATCH 25/36] [Issue #535]:Added File indexing capability via existing command pattern, changed solr configs files --- .../ui/presenter/zone/SearchPresenter.java | 46 +- .../server/dao/impl/FileHibernateDAO.java | 787 +++++++++--------- .../server/inject/CommandHandlerModule.java | 128 +-- .../server/inject/ConfigurationModule.java | 6 +- .../server/search/FilesSolrHandler.java | 92 -- .../server/search/FilesSolrManager.java | 9 + .../search/FilesSolrManagerHandler.java | 46 + .../server/search/FilesSolrManagerImpl.java | 120 +++ .../sigmah/server/search/SearchModule.java | 36 - .../server/search/SearchServiceImpl.java | 17 +- .../sigmah/server/search/SolrSearcher.java | 3 - .../server/security/impl/AccessRights.java | 1 + .../shared/command/FilesSolrIndexCommand.java | 27 + .../shared/dto/search/FilesSolrIndexDTO.java | 16 + .../Test_Sigmah/conf/dataimport.properties | 10 +- .../solr_config/Test_Sigmah/conf/schema.xml | 30 +- .../Test_Sigmah/conf/solrconfig.xml | 71 +- .../Test_Sigmah/data/index/_4e.dii | Bin 86 -> 0 bytes .../Test_Sigmah/data/index/_4e.fdx | Bin 84 -> 0 bytes .../solr_config/Test_Sigmah/data/index/_4e.si | Bin 527 -> 0 bytes .../Test_Sigmah/data/index/_ma.dii | Bin 0 -> 86 bytes .../data/index/{_4e.dim => _ma.dim} | Bin 801 -> 801 bytes .../data/index/{_4e.fdt => _ma.fdt} | Bin 3041 -> 3041 bytes .../Test_Sigmah/data/index/_ma.fdx | Bin 0 -> 84 bytes .../data/index/{_4e.fnm => _ma.fnm} | Bin 9871 -> 9871 bytes .../data/index/{_4e.nvd => _ma.nvd} | Bin 995 -> 995 bytes .../data/index/{_4e.nvm => _ma.nvm} | Bin 308 -> 308 bytes .../solr_config/Test_Sigmah/data/index/_ma.si | Bin 0 -> 527 bytes ...{_4e_Lucene50_0.doc => _ma_Lucene50_0.doc} | Bin 1814 -> 1814 bytes ...{_4e_Lucene50_0.pos => _ma_Lucene50_0.pos} | Bin 3245 -> 3245 bytes ...{_4e_Lucene50_0.tim => _ma_Lucene50_0.tim} | Bin 11098 -> 11098 bytes ...{_4e_Lucene50_0.tip => _ma_Lucene50_0.tip} | Bin 1693 -> 1693 bytes ...{_4e_Lucene54_0.dvd => _ma_Lucene54_0.dvd} | Bin 1612 -> 1612 bytes ...{_4e_Lucene54_0.dvm => _ma_Lucene54_0.dvm} | Bin 4034 -> 4034 bytes .../Test_Sigmah/data/index/segments_4w | Bin 167 -> 0 bytes .../Test_Sigmah/data/index/segments_mg | Bin 0 -> 167 bytes .../data/tlog/tlog.0000000000000000187 | Bin 22119 -> 0 bytes .../data/tlog/tlog.0000000000000000188 | Bin 22119 -> 0 bytes .../data/tlog/tlog.0000000000000000811 | Bin 0 -> 28848 bytes .../data/tlog/tlog.0000000000000000812 | Bin 0 -> 38426 bytes .../data/tlog/tlog.0000000000000000813 | Bin 0 -> 32597 bytes .../data/tlog/tlog.0000000000000000814 | Bin 0 -> 10250 bytes .../data/tlog/tlog.0000000000000000815 | Bin 0 -> 7704 bytes .../data/tlog/tlog.0000000000000000816 | Bin 0 -> 8562 bytes .../data/tlog/tlog.0000000000000000817 | Bin 0 -> 6441 bytes .../data/tlog/tlog.0000000000000000818 | Bin 0 -> 24149 bytes .../data/tlog/tlog.0000000000000000819 | Bin 0 -> 44512 bytes ...0000000000186 => tlog.0000000000000000820} | Bin 22119 -> 22129 bytes 48 files changed, 766 insertions(+), 679 deletions(-) delete mode 100644 src/main/java/org/sigmah/server/search/FilesSolrHandler.java create mode 100644 src/main/java/org/sigmah/server/search/FilesSolrManager.java create mode 100644 src/main/java/org/sigmah/server/search/FilesSolrManagerHandler.java create mode 100644 src/main/java/org/sigmah/server/search/FilesSolrManagerImpl.java delete mode 100644 src/main/java/org/sigmah/server/search/SearchModule.java create mode 100644 src/main/java/org/sigmah/shared/command/FilesSolrIndexCommand.java create mode 100644 src/main/java/org/sigmah/shared/dto/search/FilesSolrIndexDTO.java delete mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_4e.dii delete mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_4e.fdx delete mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_4e.si create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_ma.dii rename src/main/resources/solr_config/Test_Sigmah/data/index/{_4e.dim => _ma.dim} (90%) rename src/main/resources/solr_config/Test_Sigmah/data/index/{_4e.fdt => _ma.fdt} (69%) create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_ma.fdx rename src/main/resources/solr_config/Test_Sigmah/data/index/{_4e.fnm => _ma.fnm} (98%) rename src/main/resources/solr_config/Test_Sigmah/data/index/{_4e.nvd => _ma.nvd} (90%) rename src/main/resources/solr_config/Test_Sigmah/data/index/{_4e.nvm => _ma.nvm} (62%) create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_ma.si rename src/main/resources/solr_config/Test_Sigmah/data/index/{_4e_Lucene50_0.doc => _ma_Lucene50_0.doc} (95%) rename src/main/resources/solr_config/Test_Sigmah/data/index/{_4e_Lucene50_0.pos => _ma_Lucene50_0.pos} (98%) rename src/main/resources/solr_config/Test_Sigmah/data/index/{_4e_Lucene50_0.tim => _ma_Lucene50_0.tim} (93%) rename src/main/resources/solr_config/Test_Sigmah/data/index/{_4e_Lucene50_0.tip => _ma_Lucene50_0.tip} (92%) rename src/main/resources/solr_config/Test_Sigmah/data/index/{_4e_Lucene54_0.dvd => _ma_Lucene54_0.dvd} (96%) rename src/main/resources/solr_config/Test_Sigmah/data/index/{_4e_Lucene54_0.dvm => _ma_Lucene54_0.dvm} (86%) delete mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/segments_4w create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/segments_mg delete mode 100644 src/main/resources/solr_config/Test_Sigmah/data/tlog/tlog.0000000000000000187 delete mode 100644 src/main/resources/solr_config/Test_Sigmah/data/tlog/tlog.0000000000000000188 create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/tlog/tlog.0000000000000000811 create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/tlog/tlog.0000000000000000812 create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/tlog/tlog.0000000000000000813 create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/tlog/tlog.0000000000000000814 create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/tlog/tlog.0000000000000000815 create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/tlog/tlog.0000000000000000816 create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/tlog/tlog.0000000000000000817 create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/tlog/tlog.0000000000000000818 create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/tlog/tlog.0000000000000000819 rename src/main/resources/solr_config/Test_Sigmah/data/tlog/{tlog.0000000000000000186 => tlog.0000000000000000820} (51%) diff --git a/src/main/java/org/sigmah/client/ui/presenter/zone/SearchPresenter.java b/src/main/java/org/sigmah/client/ui/presenter/zone/SearchPresenter.java index f0e9ac154..a460f77dc 100644 --- a/src/main/java/org/sigmah/client/ui/presenter/zone/SearchPresenter.java +++ b/src/main/java/org/sigmah/client/ui/presenter/zone/SearchPresenter.java @@ -20,6 +20,7 @@ import org.sigmah.client.page.RequestParameter; import org.sigmah.client.search.SearchService; import org.sigmah.client.search.SearchServiceAsync; +import org.sigmah.client.ui.notif.N10N; import org.sigmah.client.ui.presenter.CreateProjectPresenter; import org.sigmah.client.ui.presenter.base.AbstractZonePresenter; import org.sigmah.client.ui.view.base.ViewInterface; @@ -31,16 +32,20 @@ import org.sigmah.client.ui.zone.Zone; import org.sigmah.client.ui.zone.ZoneRequest; import org.sigmah.client.util.ClientUtils; +import org.sigmah.shared.command.BackupArchiveManagementCommand; +import org.sigmah.shared.command.FilesSolrIndexCommand; import org.sigmah.shared.command.GetContacts; import org.sigmah.shared.command.GetOrgUnits; import org.sigmah.shared.command.GetProjects; import org.sigmah.shared.command.result.Authentication; import org.sigmah.shared.command.result.ListResult; import org.sigmah.shared.conf.PropertyName; +import org.sigmah.shared.dto.BackupDTO; import org.sigmah.shared.dto.ContactDTO; import org.sigmah.shared.dto.ProjectDTO; import org.sigmah.shared.dto.orgunit.OrgUnitDTO; import org.sigmah.shared.dto.referential.GlobalPermissionEnum; +import org.sigmah.shared.dto.search.FilesSolrIndexDTO; import org.sigmah.shared.dto.search.SearchResultsDTO; import org.sigmah.shared.util.ProfileUtils; @@ -236,21 +241,42 @@ public void onSuccess(ArrayList result) { } private void filesIndex() throws IOException { - searchService.filesIndex(new AsyncCallback() { - public void onFailure(Throwable caught) { - Window.alert("Failure on the server side!"); - caught.printStackTrace(); - } + + dispatch.execute(new FilesSolrIndexCommand(), new CommandResultHandler() { + + @Override + public void onCommandSuccess(final FilesSolrIndexDTO result) { + + if (result == null) { + Window.alert("Yeh kya ho gya!"); - public void onSuccess(Boolean result) { - dih_success = result; - if (dih_success == true) { - Window.alert("Successfully completed Files Import!"); } else { - Window.alert("Failed to complete Files Import!"); + //N10N.warn(I18N.CONSTANTS.backupManagement_process_alreadyRunning()); + if( result.isResult()){ + Window.alert("Successfully completed files indexing!"); + }else{ + Window.alert("Failed to complete files indexing!"); + } } + } + }); +// searchService.filesIndex(new AsyncCallback() { +// public void onFailure(Throwable caught) { +// Window.alert("Failure on the server side!"); +// caught.printStackTrace(); +// } +// +// public void onSuccess(Boolean result) { +// dih_success = result; +// if (dih_success == true) { +// Window.alert("Successfully completed Files Import!"); +// } else { +// Window.alert("Failed to complete Files Import!"); +// } +// } +// }); } private void loadProjectIdsForFiltering() { diff --git a/src/main/java/org/sigmah/server/dao/impl/FileHibernateDAO.java b/src/main/java/org/sigmah/server/dao/impl/FileHibernateDAO.java index 268207849..0275f339d 100644 --- a/src/main/java/org/sigmah/server/dao/impl/FileHibernateDAO.java +++ b/src/main/java/org/sigmah/server/dao/impl/FileHibernateDAO.java @@ -22,411 +22,402 @@ * #L% */ - -import java.io.IOException; -import java.util.Collection; -import java.util.Date; -import java.util.List; -import java.util.Map; - -import javax.persistence.EntityManager; -import javax.persistence.NoResultException; +import java.io.IOException; +import java.util.Collection; +import java.util.Date; +import java.util.List; +import java.util.Map; + +import javax.persistence.EntityManager; +import javax.persistence.NoResultException; import javax.persistence.Query; import javax.persistence.QueryTimeoutException; -import javax.persistence.TypedQuery; - -import org.apache.commons.collections4.CollectionUtils; -import org.sigmah.client.util.ClientUtils; -import org.sigmah.server.dao.FileDAO; -import org.sigmah.server.dao.base.AbstractDAO; -import org.sigmah.server.dispatch.impl.UserDispatch; -import org.sigmah.server.domain.User; -import org.sigmah.server.domain.element.FlexibleElement; -import org.sigmah.server.domain.value.File; -import org.sigmah.server.domain.value.FileVersion; -import org.sigmah.server.domain.value.Value; -import org.sigmah.shared.dto.value.FileDTO.LoadingScope; -import org.sigmah.shared.dto.value.FileUploadUtils; -import org.sigmah.shared.util.ValueResultUtils; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import com.google.inject.persist.Transactional; -import org.sigmah.server.domain.util.DomainFilters; -import static org.sigmah.shared.util.ValueResultUtils.normalizeFileName; - -/** - * {@link FileDAO} implementation. - * - * @author Denis Colliot (dcolliot@ideia.fr) (v2.0) - */ -public class FileHibernateDAO extends AbstractDAO implements FileDAO { - - /** - * Logger. - */ - private static final Logger LOGGER = LoggerFactory.getLogger(UserDispatch.class); - - /** - * {@inheritDoc} - */ - @Override - public List findVersions(final Collection filesIds, LoadingScope loadingScope) { - - if (CollectionUtils.isEmpty(filesIds)) { - throw new IllegalArgumentException("Invalid files ids collection."); - } - - if (loadingScope == null) { - loadingScope = LoadingScope.LAST_VERSION; - } - - // NOTE : StringBuilder has been removed here since all the strings used here are constants. - final String request; - - switch (loadingScope) { - case ALL_VERSIONS: - // Retrieves all versions of each file. - request = "SELECT " - + " fv " - + "FROM " - + " File f INNER JOIN f.versions fv " - + "WHERE " - + " f.id IN (:filesIds)"; - break; - - case LAST_VERSION: - // Retrieves only the last version of each file. - request = "SELECT " - + " fv " - + "FROM " - + " File f INNER JOIN f.versions fv " - + "WHERE " - + " f.id IN (:filesIds) " - + " AND fv.versionNumber IN (" - + " SELECT max(fv2.versionNumber) FROM FileVersion fv2 WHERE fv2.parentFile = f" - + " )"; - break; - - case LAST_VERSION_FROM_NOT_DELETED_FILES: - // Retrieves only the last version of each file if the file has not been deleted. - request = "SELECT " - + " fv " - + "FROM " - + " File f INNER JOIN f.versions fv " - + "WHERE " - + " f.id IN (:filesIds) " - + " AND f.dateDeleted IS NULL " - + " AND fv.versionNumber IN (" - + " SELECT max(fv2.versionNumber) FROM FileVersion fv2 WHERE fv2.parentFile = f" - + " )"; - break; - - default: - throw new IllegalArgumentException("Invalid file versions loading mode."); - } - - final TypedQuery query = em().createQuery(request, FileVersion.class); - query.setParameter("filesIds", filesIds); - - return query.getResultList(); - } - +import javax.persistence.TypedQuery; + +import org.apache.commons.collections4.CollectionUtils; +import org.sigmah.client.util.ClientUtils; +import org.sigmah.server.dao.FileDAO; +import org.sigmah.server.dao.base.AbstractDAO; +import org.sigmah.server.dispatch.impl.UserDispatch; +import org.sigmah.server.domain.User; +import org.sigmah.server.domain.element.FlexibleElement; +import org.sigmah.server.domain.value.File; +import org.sigmah.server.domain.value.FileVersion; +import org.sigmah.server.domain.value.Value; +import org.sigmah.shared.dto.value.FileDTO.LoadingScope; +import org.sigmah.shared.dto.value.FileUploadUtils; +import org.sigmah.shared.util.ValueResultUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import com.google.inject.persist.Transactional; +import org.sigmah.server.domain.util.DomainFilters; +import static org.sigmah.shared.util.ValueResultUtils.normalizeFileName; + +/** + * {@link FileDAO} implementation. + * + * @author Denis Colliot (dcolliot@ideia.fr) (v2.0) + */ +public class FileHibernateDAO extends AbstractDAO implements FileDAO { + + /** + * Logger. + */ + private static final Logger LOGGER = LoggerFactory.getLogger(UserDispatch.class); + + /** + * {@inheritDoc} + */ @Override - public List findAllVersions(){ + public List findVersions(final Collection filesIds, LoadingScope loadingScope) { + + if (CollectionUtils.isEmpty(filesIds)) { + throw new IllegalArgumentException("Invalid files ids collection."); + } + + if (loadingScope == null) { + loadingScope = LoadingScope.LAST_VERSION; + } + + // NOTE : StringBuilder has been removed here since all the strings used + // here are constants. final String request; - //select last versions of all files which are not deleted -// request = "SELECT " -// + " fv " -// + "FROM " -// + " File f INNER JOIN f.versions fv " -// + "WHERE " -// + " f.dateDeleted IS NULL " -// + " AND fv.versionNumber IN (" -// + " SELECT max(fv2.versionNumber) FROM FileVersion fv2 WHERE fv2.parentFile = f" -// + " )"; - request = "SELECT " - + "fv " - + "FROM " - + " FileVersion "; -// + "WHERE " -// + " fv.versionNumber IN (" -// + " SELECT max(fv2.versionNumber) FROM FileVersion fv2 WHERE fv2.id = fv.id" -// + " )"; - System.out.println("GUBI " + request ); - System.out.println("This should not be null also:" + em()); + + switch (loadingScope) { + case ALL_VERSIONS: + // Retrieves all versions of each file. + request = "SELECT " + " fv " + "FROM " + " File f INNER JOIN f.versions fv " + "WHERE " + + " f.id IN (:filesIds)"; + break; + + case LAST_VERSION: + // Retrieves only the last version of each file. + request = "SELECT " + " fv " + "FROM " + " File f INNER JOIN f.versions fv " + "WHERE " + + " f.id IN (:filesIds) " + " AND fv.versionNumber IN (" + + " SELECT max(fv2.versionNumber) FROM FileVersion fv2 WHERE fv2.parentFile = f" + " )"; + break; + + case LAST_VERSION_FROM_NOT_DELETED_FILES: + // Retrieves only the last version of each file if the file has not + // been deleted. + request = "SELECT " + " fv " + "FROM " + " File f INNER JOIN f.versions fv " + "WHERE " + + " f.id IN (:filesIds) " + " AND f.dateDeleted IS NULL " + " AND fv.versionNumber IN (" + + " SELECT max(fv2.versionNumber) FROM FileVersion fv2 WHERE fv2.parentFile = f" + " )"; + break; + + default: + throw new IllegalArgumentException("Invalid file versions loading mode."); + } + final TypedQuery query = em().createQuery(request, FileVersion.class); + query.setParameter("filesIds", filesIds); + + return query.getResultList(); + } + + @Override + public List findAllVersions() { + final String request; + //select last versions of all files which are not deleted + request = "SELECT " + + " fv " + + "FROM " + + " File f INNER JOIN f.versions fv " + + "WHERE " + + " f.dateDeleted IS NULL " + + " AND fv.versionNumber IN (" + + " SELECT max(fv2.versionNumber) FROM FileVersion fv2 WHERE" + + " fv2.parentFile = f" + + " )"; + //System.out.println("GUBI " + request); List res = null; - try{ + try { + DomainFilters.disableUserFilter(em()); + //hope this works to get all the files + System.out.println("This should not be null also:" + em()); + final TypedQuery query = em().createQuery(request, FileVersion.class); res = query.getResultList(); - }catch( Exception e){ - System.out.println("Here's an error!"); + } catch (RuntimeException e) { + System.out.println("Here's an error!" + em()); e.printStackTrace(); } - System.out.println("GUBI " + res.toString()); + //System.out.println("GUBI " + res.toString()); return res; - } - - /** - * {@inheritDoc} - */ - @Override - public FileVersion getVersion(final Integer versionId) { - - final TypedQuery query = em().createQuery("SELECT fv FROM FileVersion fv WHERE fv.id = :id", FileVersion.class); - query.setParameter("id", versionId); - - return query.getSingleResult(); - } - - /** - * {@inheritDoc} - */ - @Override - public FileVersion getLastVersion(Integer fileId) { - - final TypedQuery query = - em().createQuery("SELECT fv FROM FileVersion fv WHERE fv.parentFile.id = :fileId ORDER BY fv.versionNumber DESC", FileVersion.class); - - query.setParameter("fileId", fileId); - query.setMaxResults(1); - - return query.getSingleResult(); - } - - /** - * {@inheritDoc} - */ - @Override - public Integer saveOrUpdate(final Map properties, final String physicalName, final int size) { - - // Uploaded file's id. - Integer id = ClientUtils.asInt(properties.get(FileUploadUtils.DOCUMENT_ID)); - - // Author id. - final int authorId = ClientUtils.asInt(properties.get(FileUploadUtils.DOCUMENT_AUTHOR), 0); - - try { - - if (id == null) { - // New file (first version). - id = saveNewFile(properties, physicalName, size, authorId); - - } else { - // New version. - id = saveNewVersion(properties, physicalName, size, id, authorId); - } - - } catch (IOException e) { - final String name = properties.get(FileUploadUtils.DOCUMENT_NAME); - throw new IllegalStateException("Error while trying to save the file '" + name + "' (id #" + id + ") for author #" + authorId + ".", e); - } - - return id; - } - - /** - * Saves a new file. - * - * @param properties - * The properties map of the uploaded file (see {@link FileUploadUtils}). - * @param physicalName - * The uploaded file content. - * @param size - * Size of the uploaded file. - * @param authorId - * The author id. - * @return The id of the just saved file. - * @throws IOException - */ - @Transactional - protected Integer saveNewFile(Map properties, String physicalName, int size, int authorId) throws IOException { - - final EntityManager em = em(); - - LOGGER.debug("[saveNewFile] New file."); - - // -------------------------------------------------------------------- - // STEP 1 : saves the file. - // -------------------------------------------------------------------- - LOGGER.debug("[saveNewFile] Saves the new file."); - final File file = new File(); - - // Gets the details of the name of the file. - final String fullName = ValueResultUtils.normalizeFileName(properties.get(FileUploadUtils.DOCUMENT_NAME)); - final int index = fullName.indexOf('.'); - - final String name = index > 0 ? fullName.substring(0, index) : fullName; - final String extension = index > 0 && index < fullName.length() ? fullName.substring(index + 1) : null; - - file.setName(name); - - // Creates and adds the new version. - file.addVersion(createVersion(1, name, extension, authorId, physicalName, size)); - - em.persist(file); - - // -------------------------------------------------------------------- - // STEP 2 : gets the current value for this list of files. - // -------------------------------------------------------------------- - - // Element id. - final int elementId = ClientUtils.asInt(properties.get(FileUploadUtils.DOCUMENT_FLEXIBLE_ELEMENT), 0); - - // Project id. - final int projectId = ClientUtils.asInt(properties.get(FileUploadUtils.DOCUMENT_PROJECT), 0); - - // Retrieving the current value - final TypedQuery query = em.createQuery("SELECT v FROM Value v WHERE v.containerId = :projectId and v.element.id = :elementId", Value.class); - query.setParameter("projectId", projectId); - query.setParameter("elementId", elementId); - - Value currentValue = null; - - try { - currentValue = query.getSingleResult(); - } catch (NoResultException nre) { - // No current value - } - - // -------------------------------------------------------------------- - // STEP 3 : creates or updates the value with the new file id. - // -------------------------------------------------------------------- - - // The value already exists, must update it. - if (currentValue != null) { - currentValue.setLastModificationAction('U'); - - // Sets the value (adds a new file id). - currentValue.setValue(currentValue.getValue() + ValueResultUtils.DEFAULT_VALUE_SEPARATOR + String.valueOf(file.getId())); - } - // The value for this list of files doesn't exist already, must - // create it. - else { - currentValue = new Value(); - - // Creation of the value - currentValue.setLastModificationAction('C'); - - // Parent element - final FlexibleElement element = em.find(FlexibleElement.class, elementId); - currentValue.setElement(element); - - // Container - currentValue.setContainerId(projectId); - - // Sets the value (one file id). - currentValue.setValue(String.valueOf(file.getId())); - } - - // Modifier - final User user = em.find(User.class, authorId); - currentValue.setLastModificationUser(user); - - // Last update date - currentValue.setLastModificationDate(new Date()); - - // Saves or updates the new value. - em.merge(currentValue); - - return file.getId(); - } - - /** - * Saves a new file. - * - * @param properties - * The properties map of the uploaded file (see {@link FileUploadUtils}). - * @param physicalName - * The uploaded file content. - * @param size - * Size of the uploaded file. - * @param id - * The file which gets a new version. - * @param authorId - * The author id. - * @return The file id (must be the same as the parameter). - * @throws IOException - */ - @Transactional - protected Integer saveNewVersion(Map properties, String physicalName, int size, Integer id, int authorId) throws IOException { - - final EntityManager em = em(); - - LOGGER.debug("[save] New file version."); - - // Gets the details of the name of the file. - final String fullName = normalizeFileName(properties.get(FileUploadUtils.DOCUMENT_NAME)); - final int index = fullName.indexOf('.'); - - final String name = index > 0 ? fullName.substring(0, index) : fullName; - final String extension = index > 0 && index < fullName.length() ? fullName.substring(index + 1) : null; - - // Creates and adds the new version. - final File file = em.find(File.class, Integer.valueOf(id)); - - if (LOGGER.isDebugEnabled()) { - LOGGER.debug("[save] Found file: " + file.getName() + "."); - } - - Integer versionNumber; - - DomainFilters.disableDeletedFilter(em); - - final Query query = em.createQuery("SELECT max(fv.versionNumber)+1 AS newVersionNumber FROM FileVersion AS fv WHERE parentFile=:parentFile"); - query.setParameter("parentFile", file); - versionNumber = (Integer) query.getSingleResult(); - if (versionNumber == null) { - versionNumber = 0; - } - - final FileVersion version = createVersion(versionNumber, name, extension, authorId, physicalName, size); - version.setComments(properties.get(FileUploadUtils.DOCUMENT_COMMENTS)); - file.addVersion(version); - - em.persist(file); - - return file.getId(); - } - - /** - * Creates a file version with the given number and author. - * - * @param versionNumber - * The version number. - * @param name - * The version name. - * @param extension - * The version extension. - * @param authorId - * The author id. - * @param content - * The version content. - * @return The version just created. - * @throws IOException - */ - private static FileVersion createVersion(int versionNumber, String name, String extension, int authorId, String physicalName, int size) throws IOException { - - if (LOGGER.isDebugEnabled()) { - LOGGER.debug("[createVersion] Creates a new file version # + " + versionNumber + "."); - } - - final FileVersion version = new FileVersion(); - - // Sets attributes. - version.setVersionNumber(versionNumber); - version.setName(name); - version.setExtension(extension); - version.setAddedDate(new Date()); - version.setSize((long) size); - final User user = new User(); - user.setId(authorId); - version.setAuthor(user); - - // Saves content. - version.setPath(physicalName); - - return version; - } - -} + } + + /** + * {@inheritDoc} + */ + @Override + public FileVersion getVersion(final Integer versionId) { + + final TypedQuery query = em().createQuery("SELECT fv FROM FileVersion fv WHERE fv.id = :id", + FileVersion.class); + query.setParameter("id", versionId); + + return query.getSingleResult(); + } + + /** + * {@inheritDoc} + */ + @Override + public FileVersion getLastVersion(Integer fileId) { + + final TypedQuery query = em().createQuery( + "SELECT fv FROM FileVersion fv WHERE fv.parentFile.id = :fileId ORDER BY fv.versionNumber DESC", + FileVersion.class); + + query.setParameter("fileId", fileId); + query.setMaxResults(1); + + return query.getSingleResult(); + } + + /** + * {@inheritDoc} + */ + @Override + public Integer saveOrUpdate(final Map properties, final String physicalName, final int size) { + + // Uploaded file's id. + Integer id = ClientUtils.asInt(properties.get(FileUploadUtils.DOCUMENT_ID)); + + // Author id. + final int authorId = ClientUtils.asInt(properties.get(FileUploadUtils.DOCUMENT_AUTHOR), 0); + + try { + + if (id == null) { + // New file (first version). + id = saveNewFile(properties, physicalName, size, authorId); + + } else { + // New version. + id = saveNewVersion(properties, physicalName, size, id, authorId); + } + + } catch (IOException e) { + final String name = properties.get(FileUploadUtils.DOCUMENT_NAME); + throw new IllegalStateException( + "Error while trying to save the file '" + name + "' (id #" + id + ") for author #" + authorId + ".", + e); + } + + return id; + } + + /** + * Saves a new file. + * + * @param properties + * The properties map of the uploaded file (see + * {@link FileUploadUtils}). + * @param physicalName + * The uploaded file content. + * @param size + * Size of the uploaded file. + * @param authorId + * The author id. + * @return The id of the just saved file. + * @throws IOException + */ + @Transactional + protected Integer saveNewFile(Map properties, String physicalName, int size, int authorId) + throws IOException { + + final EntityManager em = em(); + + LOGGER.debug("[saveNewFile] New file."); + + // -------------------------------------------------------------------- + // STEP 1 : saves the file. + // -------------------------------------------------------------------- + LOGGER.debug("[saveNewFile] Saves the new file."); + final File file = new File(); + + // Gets the details of the name of the file. + final String fullName = ValueResultUtils.normalizeFileName(properties.get(FileUploadUtils.DOCUMENT_NAME)); + final int index = fullName.indexOf('.'); + + final String name = index > 0 ? fullName.substring(0, index) : fullName; + final String extension = index > 0 && index < fullName.length() ? fullName.substring(index + 1) : null; + + file.setName(name); + + // Creates and adds the new version. + file.addVersion(createVersion(1, name, extension, authorId, physicalName, size)); + + em.persist(file); + + // -------------------------------------------------------------------- + // STEP 2 : gets the current value for this list of files. + // -------------------------------------------------------------------- + + // Element id. + final int elementId = ClientUtils.asInt(properties.get(FileUploadUtils.DOCUMENT_FLEXIBLE_ELEMENT), 0); + + // Project id. + final int projectId = ClientUtils.asInt(properties.get(FileUploadUtils.DOCUMENT_PROJECT), 0); + + // Retrieving the current value + final TypedQuery query = em.createQuery( + "SELECT v FROM Value v WHERE v.containerId = :projectId and v.element.id = :elementId", Value.class); + query.setParameter("projectId", projectId); + query.setParameter("elementId", elementId); + + Value currentValue = null; + + try { + currentValue = query.getSingleResult(); + } catch (NoResultException nre) { + // No current value + } + + // -------------------------------------------------------------------- + // STEP 3 : creates or updates the value with the new file id. + // -------------------------------------------------------------------- + + // The value already exists, must update it. + if (currentValue != null) { + currentValue.setLastModificationAction('U'); + + // Sets the value (adds a new file id). + currentValue.setValue( + currentValue.getValue() + ValueResultUtils.DEFAULT_VALUE_SEPARATOR + String.valueOf(file.getId())); + } + // The value for this list of files doesn't exist already, must + // create it. + else { + currentValue = new Value(); + + // Creation of the value + currentValue.setLastModificationAction('C'); + + // Parent element + final FlexibleElement element = em.find(FlexibleElement.class, elementId); + currentValue.setElement(element); + + // Container + currentValue.setContainerId(projectId); + + // Sets the value (one file id). + currentValue.setValue(String.valueOf(file.getId())); + } + + // Modifier + final User user = em.find(User.class, authorId); + currentValue.setLastModificationUser(user); + + // Last update date + currentValue.setLastModificationDate(new Date()); + + // Saves or updates the new value. + em.merge(currentValue); + + return file.getId(); + } + + /** + * Saves a new file. + * + * @param properties + * The properties map of the uploaded file (see + * {@link FileUploadUtils}). + * @param physicalName + * The uploaded file content. + * @param size + * Size of the uploaded file. + * @param id + * The file which gets a new version. + * @param authorId + * The author id. + * @return The file id (must be the same as the parameter). + * @throws IOException + */ + @Transactional + protected Integer saveNewVersion(Map properties, String physicalName, int size, Integer id, + int authorId) throws IOException { + + final EntityManager em = em(); + + LOGGER.debug("[save] New file version."); + + // Gets the details of the name of the file. + final String fullName = normalizeFileName(properties.get(FileUploadUtils.DOCUMENT_NAME)); + final int index = fullName.indexOf('.'); + + final String name = index > 0 ? fullName.substring(0, index) : fullName; + final String extension = index > 0 && index < fullName.length() ? fullName.substring(index + 1) : null; + + // Creates and adds the new version. + final File file = em.find(File.class, Integer.valueOf(id)); + + if (LOGGER.isDebugEnabled()) { + LOGGER.debug("[save] Found file: " + file.getName() + "."); + } + + Integer versionNumber; + + DomainFilters.disableDeletedFilter(em); + + final Query query = em.createQuery( + "SELECT max(fv.versionNumber)+1 AS newVersionNumber FROM FileVersion AS fv WHERE parentFile=:parentFile"); + query.setParameter("parentFile", file); + versionNumber = (Integer) query.getSingleResult(); + if (versionNumber == null) { + versionNumber = 0; + } + + final FileVersion version = createVersion(versionNumber, name, extension, authorId, physicalName, size); + version.setComments(properties.get(FileUploadUtils.DOCUMENT_COMMENTS)); + file.addVersion(version); + + em.persist(file); + + return file.getId(); + } + + /** + * Creates a file version with the given number and author. + * + * @param versionNumber + * The version number. + * @param name + * The version name. + * @param extension + * The version extension. + * @param authorId + * The author id. + * @param content + * The version content. + * @return The version just created. + * @throws IOException + */ + private static FileVersion createVersion(int versionNumber, String name, String extension, int authorId, + String physicalName, int size) throws IOException { + + if (LOGGER.isDebugEnabled()) { + LOGGER.debug("[createVersion] Creates a new file version # + " + versionNumber + "."); + } + + final FileVersion version = new FileVersion(); + + // Sets attributes. + version.setVersionNumber(versionNumber); + version.setName(name); + version.setExtension(extension); + version.setAddedDate(new Date()); + version.setSize((long) size); + final User user = new User(); + user.setId(authorId); + version.setAuthor(user); + + // Saves content. + version.setPath(physicalName); + + return version; + } + +} diff --git a/src/main/java/org/sigmah/server/inject/CommandHandlerModule.java b/src/main/java/org/sigmah/server/inject/CommandHandlerModule.java index 024ffc753..c236451d5 100644 --- a/src/main/java/org/sigmah/server/inject/CommandHandlerModule.java +++ b/src/main/java/org/sigmah/server/inject/CommandHandlerModule.java @@ -149,131 +149,8 @@ import org.sigmah.server.handler.UpdateSubscriptionHandler; import org.sigmah.server.handler.UploadSliceHandler; import org.sigmah.server.inject.dispatch.AbstractCommandHandlerModule; -import org.sigmah.shared.command.AddOrgUnit; -import org.sigmah.shared.command.AmendmentActionCommand; -import org.sigmah.shared.command.AutomatedImport; -import org.sigmah.shared.command.BackupArchiveManagementCommand; -import org.sigmah.shared.command.BatchCommand; -import org.sigmah.shared.command.ChangePasswordCommand; -import org.sigmah.shared.command.ChangePhase; -import org.sigmah.shared.command.CheckContactDuplication; -import org.sigmah.shared.command.CheckModelUsage; -import org.sigmah.shared.command.CopyLogFrame; -import org.sigmah.shared.command.CreateEntity; -import org.sigmah.shared.command.DeactivateUsers; -import org.sigmah.shared.command.DedupeContact; -import org.sigmah.shared.command.Delete; -import org.sigmah.shared.command.DeleteCategories; -import org.sigmah.shared.command.DeleteFlexibleElements; -import org.sigmah.shared.command.DeleteImportationSchemeModels; -import org.sigmah.shared.command.DeleteImportationSchemes; -import org.sigmah.shared.command.DeletePrivacyGroups; -import org.sigmah.shared.command.DeleteProfiles; -import org.sigmah.shared.command.DeleteReportModels; -import org.sigmah.shared.command.DisableFlexibleElements; -import org.sigmah.shared.command.DownloadSlice; -import org.sigmah.shared.command.GenerateElement; -import org.sigmah.shared.command.GetAdminEntities; -import org.sigmah.shared.command.GetAvailableFrameworks; -import org.sigmah.shared.command.GetAvailableStatusForModel; -import org.sigmah.shared.command.GetBaseMaps; -import org.sigmah.shared.command.GetCalendar; -import org.sigmah.shared.command.GetCategories; -import org.sigmah.shared.command.GetContact; -import org.sigmah.shared.command.GetContactDuplicatedProperties; -import org.sigmah.shared.command.GetContactHistory; -import org.sigmah.shared.command.GetContactModel; -import org.sigmah.shared.command.GetContactModelCopy; -import org.sigmah.shared.command.GetContactModels; -import org.sigmah.shared.command.GetContactRelationships; -import org.sigmah.shared.command.GetContacts; -import org.sigmah.shared.command.GetCountries; -import org.sigmah.shared.command.GetCountry; -import org.sigmah.shared.command.GetFilesFromFavoriteProjects; -import org.sigmah.shared.command.GetFrameworkFulfillmentsByProjectModelId; -import org.sigmah.shared.command.GetGlobalContactExportSettings; -import org.sigmah.shared.command.GetGlobalContactExports; -import org.sigmah.shared.command.GetGlobalExportSettings; -import org.sigmah.shared.command.GetGlobalExports; -import org.sigmah.shared.command.GetHistory; -import org.sigmah.shared.command.GetImportInformation; -import org.sigmah.shared.command.GetImportationSchemeModels; -import org.sigmah.shared.command.GetImportationSchemes; -import org.sigmah.shared.command.GetIndicatorDataSources; -import org.sigmah.shared.command.GetIndicators; -import org.sigmah.shared.command.GetLayoutGroupIterations; -import org.sigmah.shared.command.GetLinkedProjects; -import org.sigmah.shared.command.GetMainSite; -import org.sigmah.shared.command.GetMonitoredPoints; -import org.sigmah.shared.command.GetMonthlyReports; -import org.sigmah.shared.command.GetOrgUnit; -import org.sigmah.shared.command.GetOrgUnitModel; -import org.sigmah.shared.command.GetOrgUnitModelCopy; -import org.sigmah.shared.command.GetOrgUnitModels; -import org.sigmah.shared.command.GetOrgUnits; -import org.sigmah.shared.command.GetOrgUnitsByModel; -import org.sigmah.shared.command.GetOrganization; -import org.sigmah.shared.command.GetPrivacyGroups; -import org.sigmah.shared.command.GetProfiles; -import org.sigmah.shared.command.GetProfilesWithDetails; -import org.sigmah.shared.command.GetProject; -import org.sigmah.shared.command.GetProjectDocuments; -import org.sigmah.shared.command.GetProjectModel; -import org.sigmah.shared.command.GetProjectModelCopy; -import org.sigmah.shared.command.GetProjectModels; -import org.sigmah.shared.command.GetProjectReport; -import org.sigmah.shared.command.GetProjectReportModels; -import org.sigmah.shared.command.GetProjectReports; -import org.sigmah.shared.command.GetProjectTeamMembers; -import org.sigmah.shared.command.GetProjects; -import org.sigmah.shared.command.GetProjectsByModel; -import org.sigmah.shared.command.GetProjectsFromId; -import org.sigmah.shared.command.GetProperties; -import org.sigmah.shared.command.GetReminders; -import org.sigmah.shared.command.GetReportDef; -import org.sigmah.shared.command.GetReportElements; -import org.sigmah.shared.command.GetReportModels; -import org.sigmah.shared.command.GetReportTemplates; -import org.sigmah.shared.command.GetSchema; -import org.sigmah.shared.command.GetSitePoints; -import org.sigmah.shared.command.GetSites; -import org.sigmah.shared.command.GetSitesCount; -import org.sigmah.shared.command.GetSyncRegions; -import org.sigmah.shared.command.GetTestProjects; -import org.sigmah.shared.command.GetUserDatabase; -import org.sigmah.shared.command.GetUserUnitsByUser; -import org.sigmah.shared.command.GetUsersByOrgUnit; -import org.sigmah.shared.command.GetUsersByOrganization; -import org.sigmah.shared.command.GetUsersWithProfiles; -import org.sigmah.shared.command.GetValue; -import org.sigmah.shared.command.GetValueFromLinkedProjects; -import org.sigmah.shared.command.LoginCommand; -import org.sigmah.shared.command.MoveOrgUnit; -import org.sigmah.shared.command.PasswordManagementCommand; -import org.sigmah.shared.command.Ping; -import org.sigmah.shared.command.PrepareFileUpload; -import org.sigmah.shared.command.PromoteProjectReportDraft; -import org.sigmah.shared.command.RemoveOrgUnit; -import org.sigmah.shared.command.RemoveProjectReportDraft; -import org.sigmah.shared.command.SecureNavigationCommand; -import org.sigmah.shared.command.SendProbeReport; -import org.sigmah.shared.command.Synchronize; -import org.sigmah.shared.command.UpdateContact; -import org.sigmah.shared.command.UpdateEntity; -import org.sigmah.shared.command.UpdateGlobalContactExportSettingsCommand; -import org.sigmah.shared.command.UpdateGlobalExportSettingsCommand; -import org.sigmah.shared.command.UpdateLayoutGroupIterations; -import org.sigmah.shared.command.UpdateLogFrame; -import org.sigmah.shared.command.UpdateMonitoredPoints; -import org.sigmah.shared.command.UpdateMonthlyReports; -import org.sigmah.shared.command.UpdateOrganization; -import org.sigmah.shared.command.UpdateProject; -import org.sigmah.shared.command.UpdateProjectFavorite; -import org.sigmah.shared.command.UpdateProjectReportModel; -import org.sigmah.shared.command.UpdateProjectTeamMembers; -import org.sigmah.shared.command.UpdateReminders; -import org.sigmah.shared.command.UpdateSubscription; -import org.sigmah.shared.command.UploadSlice; +import org.sigmah.server.search.FilesSolrManagerHandler; +import org.sigmah.shared.command.*; /** *

@@ -298,6 +175,7 @@ protected void configureHandlers() { bindHandler(AmendmentActionCommand.class, AmendmentActionCommandHandler.class); bindHandler(AutomatedImport.class, AutomatedImportHandler.class); bindHandler(BackupArchiveManagementCommand.class, BackupArchiveManagementHandler.class); + bindHandler(FilesSolrIndexCommand.class, FilesSolrManagerHandler.class); bindHandler(BatchCommand.class, BatchCommandHandler.class); bindHandler(ChangePasswordCommand.class, ChangePasswordCommandHandler.class); bindHandler(ChangePhase.class, ChangePhaseHandler.class); diff --git a/src/main/java/org/sigmah/server/inject/ConfigurationModule.java b/src/main/java/org/sigmah/server/inject/ConfigurationModule.java index 589626ff5..e56239625 100644 --- a/src/main/java/org/sigmah/server/inject/ConfigurationModule.java +++ b/src/main/java/org/sigmah/server/inject/ConfigurationModule.java @@ -32,7 +32,8 @@ import org.sigmah.server.file.impl.BackupArchiveManagerImpl; import org.sigmah.server.file.impl.LocalFileStorageProvider; import org.sigmah.server.file.impl.LogoManagerImpl; -import org.sigmah.server.search.FilesSolrHandler; +import org.sigmah.server.search.FilesSolrManager; +import org.sigmah.server.search.FilesSolrManagerImpl; import org.sigmah.server.search.SolrSearcher; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -74,7 +75,8 @@ protected void configure() { bind(BackupArchiveManager.class).to(BackupArchiveManagerImpl.class).in(Singleton.class); install(new FactoryModuleBuilder().build(BackupArchiveJobFactory.class)); - //bind(FilesSolrHandler.class).in(Singleton.class); + //Solr Files Handler + bind(FilesSolrManager.class).to(FilesSolrManagerImpl.class).in(Singleton.class); } } diff --git a/src/main/java/org/sigmah/server/search/FilesSolrHandler.java b/src/main/java/org/sigmah/server/search/FilesSolrHandler.java deleted file mode 100644 index f88dea267..000000000 --- a/src/main/java/org/sigmah/server/search/FilesSolrHandler.java +++ /dev/null @@ -1,92 +0,0 @@ -package org.sigmah.server.search; - -import java.io.File; -import java.io.IOException; -import java.util.ArrayList; -import java.util.Collection; -import java.util.List; - - -import org.apache.solr.client.solrj.SolrServerException; -import org.apache.solr.client.solrj.request.ContentStreamUpdateRequest; -import org.apache.solr.common.util.NamedList; -import org.hibernate.metamodel.source.binder.Binder; -import org.sigmah.server.dao.FileDAO; -import org.sigmah.server.dao.impl.FileHibernateDAO; -import org.sigmah.server.domain.value.FileVersion; -import org.sigmah.server.inject.PersistenceModule; - -import com.google.inject.Guice; -import com.google.inject.Inject; -import com.google.inject.Injector; -import com.google.inject.Singleton; - -public class FilesSolrHandler { - - @Inject - public FileDAO fileDAO; - -// public FilesSolrHandler(){ -// PersistenceModule pm = new PersistenceModule(); -// Injector injector = Guice.createInjector(pm); -// fileDAO = injector.getInstance(FileHibernateDAO.class); -// -// } -// - public FileDAO getFileDAO() { - return fileDAO; - } - - public Boolean FilesImport(SolrSearcher instance) throws IOException{ - //1. I get all the files(How?) and their metadata, add it to a list of solr docs and then index them -// SolrDocument solrdoc = new SolrDocument(); -// Collection docs; - //solrServer. - //solrdoc.addField(arg0, arg1); - - - //2. I get all the files(How?) as java file objects and for each I request the solr server with an update query - - //instance.fileStorageProvider.open(storageId) - System.out.println("I AM HERE!"); - System.out.println(fileDAO); -// Collection filesIds = new ArrayList(); -// filesIds.add(3887); -// filesIds.add(3902); -// filesIds.add(3905); -// filesIds.add(3907); -// filesIds.add(3910); - //List listFileVersions = fileDAO.findVersions(filesIds, null); - List listFileVersions = fileDAO.findAllVersions(); - System.out.println("GUBI" + listFileVersions.toString()); - //will this method even work? - List filePaths = new ArrayList(); - for( FileVersion fv : listFileVersions){ - System.out.println("IAMHERE Name: " + fv.getName() + " Path: " + fv.getPath()); - filePaths.add(fv.getPath()); -// //fv.getAuthor().getOrganization(); -// ServletUrlBuilder urlBuilder = -// new ServletUrlBuilder(authenticationProvider, pageManager, ServletConstants.Servlet.FILE, ServletConstants.ServletMethod.DOWNLOAD_FILE); -// urlBuilder.addParameter(RequestParameter.ID, fv.getParentFile().getId()); - } - - ContentStreamUpdateRequest req = new ContentStreamUpdateRequest("/update/extract"); - String filename = "/home/aditya/test-tika.pdf"; - req.addFile(new File(filename), "pdf"); - req.setParam("commit", "true"); - //req.setParam(ExtractingParams.EXTRACT_ONLY, "true"); - //req.setParam("literal.doc_type", "FILE"); - - NamedList result = null; - try { - result = SolrSearcher.solrServer.request(req); - return true; - } catch (SolrServerException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - return false; - } - //System.out.println("Result: " + result.toString()); - } -} - diff --git a/src/main/java/org/sigmah/server/search/FilesSolrManager.java b/src/main/java/org/sigmah/server/search/FilesSolrManager.java new file mode 100644 index 000000000..9802c2e58 --- /dev/null +++ b/src/main/java/org/sigmah/server/search/FilesSolrManager.java @@ -0,0 +1,9 @@ +package org.sigmah.server.search; + +import java.io.IOException; + +public interface FilesSolrManager { + + public Boolean FilesImport(SolrSearcher instance) throws IOException; + +} diff --git a/src/main/java/org/sigmah/server/search/FilesSolrManagerHandler.java b/src/main/java/org/sigmah/server/search/FilesSolrManagerHandler.java new file mode 100644 index 000000000..46db03d67 --- /dev/null +++ b/src/main/java/org/sigmah/server/search/FilesSolrManagerHandler.java @@ -0,0 +1,46 @@ +package org.sigmah.server.search; + +import java.io.IOException; + +import org.sigmah.server.dispatch.impl.UserDispatch.UserExecutionContext; +import org.sigmah.server.file.BackupArchiveManager; +import org.sigmah.server.handler.base.AbstractCommandHandler; +import org.sigmah.shared.command.BackupArchiveManagementCommand; +import org.sigmah.shared.command.FilesSolrIndexCommand; +import org.sigmah.shared.dispatch.CommandException; +import org.sigmah.shared.dto.BackupDTO; +import org.sigmah.shared.dto.search.FilesSolrIndexDTO; + +import com.google.inject.Inject; + +public class FilesSolrManagerHandler extends AbstractCommandHandler{ + + /** + * Injected {@link BackupArchiveManager}. + */ + private final FilesSolrManager filesSolrManager; + + + @Inject + public FilesSolrManagerHandler(final FilesSolrManager filesSolrManager) { + this.filesSolrManager = filesSolrManager; + } + + @Override + protected FilesSolrIndexDTO execute(FilesSolrIndexCommand command, UserExecutionContext context) + throws CommandException { + // TODO Auto-generated method stub + FilesSolrIndexDTO res = new FilesSolrIndexDTO(); + try { + filesSolrManager.FilesImport(SolrSearcher.getInstance()); + res.setResult(true); + + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + res.setResult(false); + } + return res; + } + +} diff --git a/src/main/java/org/sigmah/server/search/FilesSolrManagerImpl.java b/src/main/java/org/sigmah/server/search/FilesSolrManagerImpl.java new file mode 100644 index 000000000..dc5f8f315 --- /dev/null +++ b/src/main/java/org/sigmah/server/search/FilesSolrManagerImpl.java @@ -0,0 +1,120 @@ +package org.sigmah.server.search; + +import java.io.File; +import java.io.IOException; +import java.io.InputStream; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; + +import org.apache.commons.io.FileUtils; +import org.apache.solr.client.solrj.SolrServerException; +import org.apache.solr.client.solrj.request.ContentStreamUpdateRequest; +import org.apache.solr.common.util.NamedList; +import org.hibernate.metamodel.source.binder.Binder; +import org.sigmah.server.conf.Properties; +import org.sigmah.server.dao.FileDAO; +import org.sigmah.server.dao.OrgUnitDAO; +import org.sigmah.server.dao.impl.FileHibernateDAO; +import org.sigmah.server.domain.value.FileVersion; +import org.sigmah.server.file.FileStorageProvider; +import org.sigmah.server.inject.PersistenceModule; +import org.sigmah.shared.conf.PropertyKey; + +import com.google.inject.Guice; +import com.google.inject.Inject; +import com.google.inject.Injector; +import com.google.inject.Singleton; + +public class FilesSolrManagerImpl implements FilesSolrManager { + + /** + * Injected {@link FileDAO}. + */ + public FileDAO fileDAO; + + /** + * Injected {@link FileDAO}. + */ + private FileStorageProvider fileStorageProvider; + + /** + * Injected application properties. + */ + private final Properties properties; + + @Inject + public FilesSolrManagerImpl(FileDAO fileDAO, FileStorageProvider fileStorageProvider, Properties properties) { + this.fileDAO = fileDAO; + this.fileStorageProvider = fileStorageProvider; + this.properties = properties; + } + + public FileDAO getFileDAO() { + return fileDAO; + } + + @Override + public Boolean FilesImport(SolrSearcher instance) throws IOException { + + // 2. I get all the files(How?) as java file objects and for each I + // request the solr server with an update query + + System.out.println("I AM HERE!"); + List listFileVersions = fileDAO.findAllVersions(); + Boolean allFilesIndexed = true; + for (FileVersion fv : listFileVersions) { + if (fileStorageProvider.exists(fv.getPath())) { + allFilesIndexed = allFilesIndexed && indexFile(fv); + } + } + return allFilesIndexed; + + } + + public Boolean indexFile(FileVersion fv){ + ContentStreamUpdateRequest req = new ContentStreamUpdateRequest("/update/extract"); + try { + Path path = Paths.get(getStorageRootPath(), fv.getPath()); + System.out.println("Path for the file: " + path.toString()); +// InputStream inputStream = fileStorageProvider.open(filename); +// FileUtils.copyInputStreamToFile(inputStream, file); + req.addFile(new File(path.toString()), "pdforword"); + } catch (IOException e1) { + // TODO Auto-generated catch block + e1.printStackTrace(); + } + req.setParam("commit", "true"); + // req.setParam(ExtractingParams.EXTRACT_ONLY, "true"); + req.setParam("literal.doc_id", "FILE_" + fv.getId().toString()); + req.setParam("literal.doc_type", "FILE"); + req.setParam("literal.file_id", fv.getPath()); + req.setParam("literal.file_name", fv.getName()); + req.setParam("literal.file_ext", fv.getExtension()); + req.setParam("literal.file_comments", fv.getComments()); + req.setParam("literal.file_added_date", fv.getAddedDate().toString()); + req.setParam("literal.file_version_num", fv.getVersionNumber().toString()); + req.setParam("literal.file_size", fv.getSize().toString()); + req.setParam("literal.file_author", fv.getAuthor().getFullName()); + req.setParam("literal.file_author_organization", fv.getAuthor().getOrganization().getName()); + req.setParam("literal.file_author_email", fv.getAuthor().getEmail()); + //req.setParam("literal.file_author_email", fv.getAuthor().); + + NamedList result = null; + try { + result = SolrSearcher.solrServer.request(req); + return true; + } catch (SolrServerException | IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + return false; + } + } + + private String getStorageRootPath() { + return properties.getProperty(PropertyKey.FILE_REPOSITORY_NAME); + } + +} diff --git a/src/main/java/org/sigmah/server/search/SearchModule.java b/src/main/java/org/sigmah/server/search/SearchModule.java deleted file mode 100644 index 9815ffd6f..000000000 --- a/src/main/java/org/sigmah/server/search/SearchModule.java +++ /dev/null @@ -1,36 +0,0 @@ -package org.sigmah.server.search; - -import javax.validation.Validation; -import javax.validation.Validator; -import javax.validation.ValidatorFactory; - -import org.sigmah.server.dao.FileDAO; -import org.sigmah.server.dao.impl.FileHibernateDAO; -import org.sigmah.server.dao.util.SQLDialect; -import org.sigmah.server.dao.util.SQLDialectProvider; - -import com.google.inject.AbstractModule; -import com.google.inject.Singleton; -import com.google.inject.persist.jpa.JpaPersistModule; - -public class SearchModule extends AbstractModule { - - @Override - protected void configure() { - // TODO Auto-generated method stub - - // Binds providers. - bind(SQLDialect.class).toProvider(SQLDialectProvider.class).in(Singleton.class); - - // Installs the JPA module. - install(new JpaPersistModule("sigmah-dev")); - - // JSR-303 : bean validation. - final ValidatorFactory factory = Validation.buildDefaultValidatorFactory(); - final Validator validator = factory.getValidator(); - bind(Validator.class).toInstance(validator); - - bind(FileDAO.class).to(FileHibernateDAO.class).in(Singleton.class); - } - -} diff --git a/src/main/java/org/sigmah/server/search/SearchServiceImpl.java b/src/main/java/org/sigmah/server/search/SearchServiceImpl.java index 5c634e798..df3a1e731 100644 --- a/src/main/java/org/sigmah/server/search/SearchServiceImpl.java +++ b/src/main/java/org/sigmah/server/search/SearchServiceImpl.java @@ -50,8 +50,19 @@ public Boolean updateCore(String solrCoreUrl) { @Override public Boolean filesIndex() throws IOException { // TODO Auto-generated method stub - FilesSolrHandler filesSolrHandler = new FilesSolrHandler(); - System.out.println("This is not supposed to be null: " + filesSolrHandler.getFileDAO()); - return filesSolrHandler.FilesImport(SolrSearcher.getInstance()); +// System.out.println("Tryna file index, wth is happening here?"); +// FilesSolrHandler filesSolrHandler = null; +// try { +// filesSolrHandler = new FilesSolrHandler(); +// //injector.injectMembers(filesSolrHandler); +// System.out.println("Is this null: " + filesSolrHandler); +// } catch (RuntimeException e) { +// // TODO Auto-generated catch block +// System.out.println("HELL: " + filesSolrHandler); +// e.printStackTrace(); +// } +// System.out.println("This is not supposed to be null: " + filesSolrHandler.getFileDAO()); +// return filesSolrHandler.FilesImport(SolrSearcher.getInstance()); + return true; } } diff --git a/src/main/java/org/sigmah/server/search/SolrSearcher.java b/src/main/java/org/sigmah/server/search/SolrSearcher.java index cebf8ad67..e374b94f6 100644 --- a/src/main/java/org/sigmah/server/search/SolrSearcher.java +++ b/src/main/java/org/sigmah/server/search/SolrSearcher.java @@ -43,9 +43,6 @@ public class SolrSearcher { private Properties properties = new BasicProperties(); - -// @Inject -// private FileStorageProvider fileStorageProvider; private String urlString; public static SolrClient solrServer; diff --git a/src/main/java/org/sigmah/server/security/impl/AccessRights.java b/src/main/java/org/sigmah/server/security/impl/AccessRights.java index 0704a3743..d4acc6fb3 100644 --- a/src/main/java/org/sigmah/server/security/impl/AccessRights.java +++ b/src/main/java/org/sigmah/server/security/impl/AccessRights.java @@ -132,6 +132,7 @@ final class AccessRights { sperm(commandToken(AddOrgUnit.class), GrantType.AUTHENTICATED_ONLY); sperm(commandToken(AmendmentActionCommand.class), GrantType.AUTHENTICATED_ONLY); sperm(commandToken(BackupArchiveManagementCommand.class), GrantType.AUTHENTICATED_ONLY); + sperm(commandToken(FilesSolrIndexCommand.class), GrantType.AUTHENTICATED_ONLY); sperm(commandToken(BatchCommand.class), GrantType.AUTHENTICATED_ONLY); sperm(commandToken(ChangePasswordCommand.class), GrantType.AUTHENTICATED_ONLY, GlobalPermissionEnum.CHANGE_PASSWORD); sperm(commandToken(ChangePhase.class), GrantType.AUTHENTICATED_ONLY, GlobalPermissionEnum.CHANGE_PHASE); diff --git a/src/main/java/org/sigmah/shared/command/FilesSolrIndexCommand.java b/src/main/java/org/sigmah/shared/command/FilesSolrIndexCommand.java new file mode 100644 index 000000000..381108ac7 --- /dev/null +++ b/src/main/java/org/sigmah/shared/command/FilesSolrIndexCommand.java @@ -0,0 +1,27 @@ +package org.sigmah.shared.command; + +import org.sigmah.shared.command.base.AbstractCommand; +import org.sigmah.shared.dto.BackupDTO; +import org.sigmah.shared.dto.search.FilesSolrIndexDTO; + +public class FilesSolrIndexCommand extends AbstractCommand{ + + private FilesSolrIndexDTO filesSolrIndexDTO; + + public FilesSolrIndexCommand() { + // Serialization. + } + + public FilesSolrIndexCommand(FilesSolrIndexDTO filesSolrIndexDTO) { + this.filesSolrIndexDTO = filesSolrIndexDTO; + } + + public FilesSolrIndexDTO getFilesSolrIndexDTO() { + return filesSolrIndexDTO; + } + + public void setFilesSolrIndexDTO(FilesSolrIndexDTO filesSolrIndexDTO) { + this.filesSolrIndexDTO = filesSolrIndexDTO; + } + +} diff --git a/src/main/java/org/sigmah/shared/dto/search/FilesSolrIndexDTO.java b/src/main/java/org/sigmah/shared/dto/search/FilesSolrIndexDTO.java new file mode 100644 index 000000000..e6c7edb79 --- /dev/null +++ b/src/main/java/org/sigmah/shared/dto/search/FilesSolrIndexDTO.java @@ -0,0 +1,16 @@ +package org.sigmah.shared.dto.search; + +import org.sigmah.shared.dto.base.DTO; + +public class FilesSolrIndexDTO implements DTO{ + + public boolean result; + + public boolean isResult() { + return result; + } + + public void setResult(boolean result) { + this.result = result; + } +} diff --git a/src/main/resources/solr_config/Test_Sigmah/conf/dataimport.properties b/src/main/resources/solr_config/Test_Sigmah/conf/dataimport.properties index 63e6bb008..be6956ede 100644 --- a/src/main/resources/solr_config/Test_Sigmah/conf/dataimport.properties +++ b/src/main/resources/solr_config/Test_Sigmah/conf/dataimport.properties @@ -1,7 +1,7 @@ -#Sun Jul 09 14:39:34 UTC 2017 -project.last_index_time=2017-07-09 14\:39\:34 +#Sun Jul 30 11:43:27 UTC 2017 +project.last_index_time=2017-07-30 11\:43\:25 userlogin.last_index_time=2017-05-14 19\:28\:44 -last_index_time=2017-07-09 14\:39\:34 -contact.last_index_time=2017-07-09 14\:39\:34 -org_unit.last_index_time=2017-07-09 14\:39\:34 +last_index_time=2017-07-30 11\:43\:25 +contact.last_index_time=2017-07-30 11\:43\:26 +org_unit.last_index_time=2017-07-30 11\:43\:26 country.last_index_time=2017-05-14 19\:50\:19 diff --git a/src/main/resources/solr_config/Test_Sigmah/conf/schema.xml b/src/main/resources/solr_config/Test_Sigmah/conf/schema.xml index b969c59fd..3190d72bd 100644 --- a/src/main/resources/solr_config/Test_Sigmah/conf/schema.xml +++ b/src/main/resources/solr_config/Test_Sigmah/conf/schema.xml @@ -117,7 +117,7 @@ WARNING: The _text_ catch-all field will significantly increase your index size. If you don't need it, consider removing it and the corresponding copyField directive. --> - + @@ -227,6 +227,21 @@ + + + + + + + + + + + + + + + @@ -496,6 +511,19 @@ + + + + + + + + diff --git a/src/main/resources/solr_config/Test_Sigmah/conf/solrconfig.xml b/src/main/resources/solr_config/Test_Sigmah/conf/solrconfig.xml index 82eeaf922..e798eb55d 100644 --- a/src/main/resources/solr_config/Test_Sigmah/conf/solrconfig.xml +++ b/src/main/resources/solr_config/Test_Sigmah/conf/solrconfig.xml @@ -855,13 +855,69 @@ http://wiki.apache.org/solr/ExtractingRequestHandler --> + + + + - true + ignored_ - _text_ + ignored_ + ignored_ + ignored_ + content + title + true + attr_ + true + true + + + + + + explicit + dismax + + project_fullname^2.5 project_name^2 pmodel_name^1.5 project_org_unit_fullname^1.0 phase_model_name^1.2 project_org_unit_name^0.8 project_country_name^0.5 amendment_status ^0.5 project_country_iso2^0.2 pmodel_status^0.1 + + + + + + + + explicit + dismax + + org_unit_fullname^2.5 org_unit_country_name org_unit_model_name + + + + + + + explicit + dismax + + project_fullname^2.5 project_name^2 pmodel_name^1.5 project_org_unit_fullname org_unit_model_status org_unit_model_title org_unit_model_organization_name + + + + + + + explicit + dismax + + project_fullname^2.5 project_name^2 pmodel_name^1.5 project_org_unit_fullname^1.0 phase_model_name^1.2 project_org_unit_name^0.8 project_country_name^0.5 amendment_status ^0.5 project_country_iso2^0.2 pmodel_status^0.1 + @@ -1196,6 +1252,13 @@ + + content + title + ^[\r\n\t ]+ + + true + [^\w-\.] @@ -1225,7 +1288,7 @@ yyyy-MM-dd - + diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_4e.dii b/src/main/resources/solr_config/Test_Sigmah/data/index/_4e.dii deleted file mode 100644 index 0b1eade3b0ddc9ca2a129bd7efdd968dd19d1712..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 86 zcmcD&o+B>dQ<|KbmuhAZke``XQtXyrl$%)Mn_7~{00asrqNcDO`FZg6)w|md-TpX< lfnBhNMR*6RXr19}R>c*}Qr;@-nGR@7egRSp0zt{CmjRZJA0Pk# diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_4e.fdx b/src/main/resources/solr_config/Test_Sigmah/data/index/_4e.fdx deleted file mode 100644 index a831c0fac83e12de5536cef10e3f875cb5982ca7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 84 zcmcD&o+B>nQ<|KbmuhMdT#{dun&Ot3nv+uOmRMZknU|7U!N9=4sBj``3hR-d2X9}! iyZzAZkCPaf7=fY;RzS>fUi^T@thy;Gcyu?tEHtxQ-APb45C#hMV<%EgpK2lbLl!4ozAKDw15AZeWs>OC%2PdTwthY diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_ma.dii b/src/main/resources/solr_config/Test_Sigmah/data/index/_ma.dii new file mode 100644 index 0000000000000000000000000000000000000000..892be60e27f3c466738d087910bc09928cd493e0 GIT binary patch literal 86 zcmcD&o+B>dQ<|KbmuhAZke``XQtXyrl$%)Mn_7~{00fk)G_!c4;TtBFiesxJ0OBAHG5`Po delta 32 qcmV+*0N?+i2B8L!ArK(QT9gIE`N7-O-M7Nq@shDI>;eQFyvHR0jSyu3 diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_4e.fdt b/src/main/resources/solr_config/Test_Sigmah/data/index/_ma.fdt similarity index 69% rename from src/main/resources/solr_config/Test_Sigmah/data/index/_4e.fdt rename to src/main/resources/solr_config/Test_Sigmah/data/index/_ma.fdt index 6bfbae1b1d5e8060f07c5aba4070668c5f376eb6..43ebe6b79256348c4fc47925a43db00f2a16f7df 100644 GIT binary patch delta 583 zcmaDT{!n~^szB#lrMZPok0!Nq{I>k)G_!c3sg>kB{^N%qzGbSillMP<_?D{3L^stS z&Xz@nNgF#d+2zEYi}Euobc6Cs(^D1J@EROmo|wgEzkx|cih<<|>tq2A5zz_;F}Dha zj3%Zf)*BdW7#vL>F*4Llw&XC8O;#u^PAyVsVA#Ut>F44Z=IIjZ=u^iautkuM`R(LR zjuyr(lleGbF)B~~$*IBkZL$)VYW-Rv{U6M;*;x6z7oEyxH z!Lp1x3_T2*(->DUa`Z9?8uv1M;W)*3f{7{EbrbVBpf=9n!z=R+uLLSz$H-gX&k(@n zn^|0ZO@w7VqcFQ5gZ~RA#*j^n0{&B2XE9G@;1DyN%J9V9V-xcwpk7w@jKsXei4079 z3{E$gncQud_$M&vGMoWX98Bk!1P-Y(wub-}Ujr(h$H_94f&U5<1OE&LUHy4%8jM^F zcbF7cG0$KK@QvKWe9MbTsNR=>AE=7uDPJJaJYQdLCjKc5x{)nFyIBI5M7e)33mDyD z5;(C&IC>Ma)(+CJjEn~~ NCcj{S0u}KlRRA6)tp5N2 delta 598 zcmaDT{!n~^s(`|Ys41*RejdDi_3rjVw?9srXlf-n_x$n058pCX*~$AKKYUA7XoBlf z!IveobQ3mqWU_mRITz(;R_F%hm!_vGtl^!1czI%Gaq0#p8A%4_FKi0A`6;P6JD7O< zgWMhcJfj>#JpKL38N}Sm88VufmRN6KtY&aDeZfnf`mr=N>w zn5RpqqfZ@!z!m{M<~Nf&Ia(MuPv+x%#i%s-C#MGE*U3s;s`YDx^nWnVVq@X&WZ>Cu zxs=G^7~I=oy9zbfkVu63d0k3 zk4?;%fO=WoGZOO>ConMaF*w~|W^%V+;_qkBVK@$=IG9c{2^>;pY!3k{z6Ml0gOg|66OBLEMRngITM>-?p0gcHo7@%O^4bHCsAkn)i diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_ma.fdx b/src/main/resources/solr_config/Test_Sigmah/data/index/_ma.fdx new file mode 100644 index 0000000000000000000000000000000000000000..99b9d5c48da31340c9dfb96f6f09eb350c8307ab GIT binary patch literal 84 zcmcD&o+B>nQ<|KbmuhMdT#{dun&Ot3nv+uOmRMZknU|7U!N9=4*g02eZei1-N$niJ hEk8QVEM{P01d1|P0WrgQ@dFx@UjS8s!LsV=lK|EF8v+0T literal 0 HcmV?d00001 diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_4e.fnm b/src/main/resources/solr_config/Test_Sigmah/data/index/_ma.fnm similarity index 98% rename from src/main/resources/solr_config/Test_Sigmah/data/index/_4e.fnm rename to src/main/resources/solr_config/Test_Sigmah/data/index/_ma.fnm index e085487847cd7cb711c2db1bc32e637c82020ba8..51a671176029ee37c8e6df9c6da0d08025b0d71f 100644 GIT binary patch delta 32 ocmeD8?f0D^EzmhvX>MWDqe<-?zb!vH%`D!iouJ0zu6NNM0O*4atpET3 delta 32 qcmV+*0N?+QO^;2G8xSDKT9gIE`N7-O-M7Nq@shDCU?v1}Qe#gEhY$_` diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_4e.nvd b/src/main/resources/solr_config/Test_Sigmah/data/index/_ma.nvd similarity index 90% rename from src/main/resources/solr_config/Test_Sigmah/data/index/_4e.nvd rename to src/main/resources/solr_config/Test_Sigmah/data/index/_ma.nvd index 0f7e0a4c6a3bb19a512d36d7b580c6583a07ecec..0f298504b103cc5a887ee8bcc21ab7d923426033 100644 GIT binary patch delta 32 ocmaFN{+NA<AZPrMZPok0!Nq{I>k)G_!c4)>dYg#zL`W0Pb@RA^-pY delta 32 qcmV+*0N?-P2jd5j8W14JT9gIE`N7-O-M7Nq@shDBwF3lv>A~X?4iW4C diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_4e.nvm b/src/main/resources/solr_config/Test_Sigmah/data/index/_ma.nvm similarity index 62% rename from src/main/resources/solr_config/Test_Sigmah/data/index/_4e.nvm rename to src/main/resources/solr_config/Test_Sigmah/data/index/_ma.nvm index efc7434d50add620e3d56e4e01a50ecce9b37f2f..e3e3f32d9cd80fad6b2a750518906178a4a61be9 100644 GIT binary patch delta 32 ocmdnOw1sJcoIvMXrMZPok0!Nq{I>k)G_!c49up%=UZL_I0NtbwT>t<8 delta 32 qcmV+*0N?+#0<;2<9uOeNT9gIE`N7-O-M7Nq@shDF0s#a`d8ZKl=?_N$ diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_ma.si b/src/main/resources/solr_config/Test_Sigmah/data/index/_ma.si new file mode 100644 index 0000000000000000000000000000000000000000..bf4cf6edc7eece99cfa391df23bf5f9dc2e7b245 GIT binary patch literal 527 zcmZ8eJx{|h6ikuQ(m)F;NQ@vBSZXCDNec^7p+!iQK!iOqu~UL#JJ?ConFX=J#L)l3 zKVW2MVr6Ck=cA}#$$s|Ty?f90;aj+|HcC89vE6a-m|z;8QlBY`QhAtePjBzuAMY2x z_CNd2LSjl)PBq)evGc7hFrkhDnoO2%UQWg8(R^|SA?E#uWM8Epnx~3VWFE>4 xA|@)EWjDGLGmgk)G_!c4(E~P?OG|~D0O5WPG5`Po delta 32 qcmV+*0N?+X4wep(A`l?RT9gIE`N7-O-M7Nq@shDJ;06RmWG9vXXAk-S diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_4e_Lucene50_0.pos b/src/main/resources/solr_config/Test_Sigmah/data/index/_ma_Lucene50_0.pos similarity index 98% rename from src/main/resources/solr_config/Test_Sigmah/data/index/_4e_Lucene50_0.pos rename to src/main/resources/solr_config/Test_Sigmah/data/index/_ma_Lucene50_0.pos index 9303e9921593bef532a528b0d799f614ce3234b3..a39f7428d22dd29c0e8a71f455b01f140975e56a 100644 GIT binary patch delta 32 ocmZ20xmI$5l0fHNrMZPok0!Nq{I>k)G_!c4Q8^C_@A2qs0OcPJ3;+NC delta 32 qcmV+*0N?+u8Lb(RA`l?RT9gIE`N7-O-M7Nq@shDJcMJrzFs$VVUl8m7 diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_4e_Lucene50_0.tim b/src/main/resources/solr_config/Test_Sigmah/data/index/_ma_Lucene50_0.tim similarity index 93% rename from src/main/resources/solr_config/Test_Sigmah/data/index/_4e_Lucene50_0.tim rename to src/main/resources/solr_config/Test_Sigmah/data/index/_ma_Lucene50_0.tim index 65b82df5e3752f0aa271295b787c7e7fa66d613f..ffd05e390ea5f8024387ef276aa7b7fba78beb5a 100644 GIT binary patch delta 469 zcmZWltxAMZ6a-z+Tf}Y?!Jy#z|7l_}8TSn=Ht_)#EMjxrWZ38v_%@rwH&|?1oG+X1 zaAxkzoU@s4<}XKw&+Fs${o~i`)BbO7uihS(XBYoxci#)KaA7qY;z^WDKv8aNMnlr8 z*iwd+3HZXSIhdGbC})ZJgpAubgNC|$s#pyTC%7rtbnD;-Y8G&q8Bv7Lf@2s%Z!I-U ziA0bLRK}DJp*vT0)Ntgf5q_W@CkxSVr=Wru$O}~hC}1HeU?WtM1hbUD3aIbdFq=w4 zFAHWxFK(g*UXMGftS-!CKm5F`i$bLP{TajXD=K(GWh@idO#64(I(4MDI0%zGhW3j_s< zUX8d(Z*$ty_AJkr=hu6?`)?Qbo3B65tM`wmm(|zp&C&6H?(%yPI;?GkPN5!FRYC+9 z#AdFuMuMDaYkJibUI+{&iWK)WOaU1!4kuEr#F#m^@&wNTUZa&RXlU|piX5q43n59{ zl$Z@GnZcc0OLUJ}+?MXun4ms_xr7KBk_=5Z?KWzmWu6Q{)YiO%=ZyJ6f?6Bi23F!1 zt}0ZR#iAvP5_50{_Jjp035mdJF=k0-g|It!>F#+20MhJ51#&oNqynw3#?VO7mUcSl wFzaAk)G_!c3jtQ?JzX_W;5Sp+Vvzctn)nQ}NnD9;+ E0KoDP6#xJL delta 49 zcmV-10M7rN4V?{;91tMLT9gIE`N7-O-M7Nq@sg1&Gz~TnI0iBXHU>2YGzK!UZ7c=^ HDamc)3(OM$ diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_4e_Lucene54_0.dvd b/src/main/resources/solr_config/Test_Sigmah/data/index/_ma_Lucene54_0.dvd similarity index 96% rename from src/main/resources/solr_config/Test_Sigmah/data/index/_4e_Lucene54_0.dvd rename to src/main/resources/solr_config/Test_Sigmah/data/index/_ma_Lucene54_0.dvd index 8cbfb1320e2ae4a2f197b1ce86817c1ca38ddee2..28e8fda42768e2f68eee9a709368a192f97eaea2 100644 GIT binary patch delta 32 ocmX@ZbB1SvoIvMXrMZPok0!Nq{I>k)G_!c4o)jAk)0+LU0Ol+WiU0rr delta 32 qcmV+*0N?-249pCW9uOeNT9gIE`N7-O-M7Nq@shDF8U_S8tvtI27Z3~p diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_4e_Lucene54_0.dvm b/src/main/resources/solr_config/Test_Sigmah/data/index/_ma_Lucene54_0.dvm similarity index 86% rename from src/main/resources/solr_config/Test_Sigmah/data/index/_4e_Lucene54_0.dvm rename to src/main/resources/solr_config/Test_Sigmah/data/index/_ma_Lucene54_0.dvm index 52837d37f9abb2500c890d0ffd9c2e652f0ba7e7..c21729568d2aad1caede15e86920577476194cdc 100644 GIT binary patch delta 348 zcmX>ke@K3Ul0fHNrMZPok0!Nq{I>k)G_!c4(OTa6nLhKhfi0O5aEfYJ{j^baWgGl7Aj9%S(^AOl4I`v9T; zH-PDP3<6LZBL9xz0EExT0HvYgj29q$CIu)BvG^SmRGirWBF+*3p*ad5H0J^abCAXF jxS$eT4G;;g15o+{gyx2d^FS@&X_zd+zltTc_jm{Z=7om3 delta 348 zcmX>ke@K3Ul7PaAs41*RejdDi_3rjVw?9tWXtb8M{!-0KzYh!yqCnbT0ZKbS=>jOd z073^$fY5;gP#UT(FagSMfYMO)ffu0s4-h&?0ZKoB(7`}+>OmF0B7 z04P5JN*6%s1}HrNN-u!Y8=&+7D18A+KY-BTQ2pT(7|g*w4~J?DhiV9iY6ypE_yExu S!2qQdCX4W|Vwv}0V;=zEn1mq! diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/segments_4w b/src/main/resources/solr_config/Test_Sigmah/data/index/segments_4w deleted file mode 100644 index 45645f875aa7e7b3e203d2232607c4e9f5c4185f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 167 zcmcD&o+HjtoSL4SnpaZHz`($!a3X37>ye)aZ(qH;{m|`?lbKA)*;s)RAi#VJNX!Rf zMxYRLyh$n}n(9d$KBdX2d8uYb|Dgb+4aSDiATb6;zU2Je+{}`Y%-mGp;M8PZLla9& ZGebi|a}y(TlLH!)Ux1YXi96D3f&kBVMHK)5 diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/segments_mg b/src/main/resources/solr_config/Test_Sigmah/data/index/segments_mg new file mode 100644 index 0000000000000000000000000000000000000000..6cf69a27f9d912761b8d1e04028e765e5a6b917d GIT binary patch literal 167 zcmcD&o+HjtoSL4SnpaZHz`(%PIag_JVbh~Y?Hs=?KRV4UVaiQsV+BfpfM6H{1G6%a z!3Y#$j?YbGL{nYN;ZvHNnwM&3^dAa9+F)!L4H9Eu(^b literal 0 HcmV?d00001 diff --git a/src/main/resources/solr_config/Test_Sigmah/data/tlog/tlog.0000000000000000187 b/src/main/resources/solr_config/Test_Sigmah/data/tlog/tlog.0000000000000000187 deleted file mode 100644 index 3ac8494d94fe0db1105a2dc5b6a174b1993e27d7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22119 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 diff --git a/src/main/resources/solr_config/Test_Sigmah/data/tlog/tlog.0000000000000000188 b/src/main/resources/solr_config/Test_Sigmah/data/tlog/tlog.0000000000000000188 deleted file mode 100644 index 51ee132190a7adec02f7590cd792f558117982b8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22119 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 V=P$SFznbu5_k*1~ckcY={{>t1)tCSP literal 0 HcmV?d00001 diff --git a/src/main/resources/solr_config/Test_Sigmah/data/tlog/tlog.0000000000000000812 b/src/main/resources/solr_config/Test_Sigmah/data/tlog/tlog.0000000000000000812 new file mode 100644 index 0000000000000000000000000000000000000000..9233d8780238f31a81fbd291a763c09a21cc14dd GIT binary patch literal 38426 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/solr_config/Test_Sigmah/data/tlog/tlog.0000000000000000813 b/src/main/resources/solr_config/Test_Sigmah/data/tlog/tlog.0000000000000000813 new file mode 100644 index 0000000000000000000000000000000000000000..563e108c6d6d2737c047b5b6c8b37b4eedb3094a GIT binary patch literal 32597 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 b{rE4`j}M+7ot`{DczU|~;xXT;{U`npbp8kH literal 0 HcmV?d00001 diff --git a/src/main/resources/solr_config/Test_Sigmah/data/tlog/tlog.0000000000000000814 b/src/main/resources/solr_config/Test_Sigmah/data/tlog/tlog.0000000000000000814 new file mode 100644 index 0000000000000000000000000000000000000000..a4af65d2984b2c0db2ad262374996b1dbf42bfc8 GIT binary patch literal 10250 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 YD?j+&o4*|Ozw|eL>*1Rl8yheG4^?q)H2?qr literal 0 HcmV?d00001 diff --git a/src/main/resources/solr_config/Test_Sigmah/data/tlog/tlog.0000000000000000815 b/src/main/resources/solr_config/Test_Sigmah/data/tlog/tlog.0000000000000000815 new file mode 100644 index 0000000000000000000000000000000000000000..6965c4cd7c5d32de7df99a85ac74cdd999050562 GIT binary patch literal 7704 zcmb_hNpBp-6{a1p%H}0b;#hXm; zw{N`N+r4r7jh%C@v^pQU_g|jZ!`xVv^p*xXRXtgiBV&6ilR91CC%Mej#`HU5hcegq zWT{O)&o9(Lx#(9U2`nYDRP%|6d*!51-iXup)P*S{XX&+0&haCibokGGWgTqx@+xZu zugKPN_#rNOR_$wA)D6!{Q_8eg>P&4v9iG7-m6IohHHEUJR<0+DqPBlAECU8gX1&m6y8TReH_PX# z2%D(c2ItBfZ_>>S3U-^P2U$@T!(Lv

o?#gws9%-zI{oLz-ls*w^Hp%%328s5mOi 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 H_O<^7Jznm} literal 0 HcmV?d00001 diff --git a/src/main/resources/solr_config/Test_Sigmah/data/tlog/tlog.0000000000000000817 b/src/main/resources/solr_config/Test_Sigmah/data/tlog/tlog.0000000000000000817 new file mode 100644 index 0000000000000000000000000000000000000000..86690d874854c00ec3017ca6e424190a7c5771d9 GIT binary patch literal 6441 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/solr_config/Test_Sigmah/data/tlog/tlog.0000000000000000818 b/src/main/resources/solr_config/Test_Sigmah/data/tlog/tlog.0000000000000000818 new file mode 100644 index 0000000000000000000000000000000000000000..abc72916e0f13334610998773e6b30a1647a957a GIT binary patch literal 24149 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/solr_config/Test_Sigmah/data/tlog/tlog.0000000000000000186 b/src/main/resources/solr_config/Test_Sigmah/data/tlog/tlog.0000000000000000820 similarity index 51% rename from src/main/resources/solr_config/Test_Sigmah/data/tlog/tlog.0000000000000000186 rename to src/main/resources/solr_config/Test_Sigmah/data/tlog/tlog.0000000000000000820 index f6f12d8b8804cc6743236632128518eaebcdb975..cb20febf668b0c87b86e1f33bc17abb89a23e9ba 100644 GIT binary patch delta 1386 zcmZ|OOH30%7{Kw}DF~ERkVmPN)J3#K1l?joO??5uAQ31P@D)uP5)Q^hQ4%%b&?cC8 z(8DI-Bmn5mOI#^Br6bv=ylurBS=1e?+Tw~!LR03C&Boq^9=wt$22QhSzK_T-E zEF)dn9ia0Kp!Y0If_}&mn%tzOMtt@`=u8ddq3Fy6_Ss$Ji*gq^>C>1A&}Tw_(c!|q z_$_jfSiw5<>?29CdBwzHg6Ku#&@S?JQpoRq+Pa|~C>?|e_7Oenb1{*o7hyeGUr*wje?WvF@orK(fpjpyE6d}thiB#l3v#f%YSu%@5?i%u9-#h4* zXF<0KUE!Maegs|Nx?SjMl(r7?s`>}$Y82WXLf4`=Qc*)b*UrE>*SK2u{cF;5D!8Ej zAYRa7asc1*Ib;<-@LgdCV=75s-<|;uaWdo2c&Wou*bqFNIQZ~ zu2Z1a^B@&;_}DH`q=H@)Ez&`=Pq?`1pqDJ=n|n|4&1myxn+ENhQ~W?S4O;6!S)HI| zjUL#X)d|`sHs|(}aMPO1zlZ(mfykY{+XL5b-iWYYr;*#whS4E0oR^^AodX+T6+dY& zCa;^nim+m9$R=snE<$@J4mVZes@4*c*D{$Yvcsbx&5GhIB2}%k8G|_7C13?92zt-X zWDHUeh<`7`ZqgutkGFcsr}mc_BNL*axJ!PVjD-;5Z|uK==f`2VUJNTL`5FF}X|tlj qu=r^h3O}&7dtC&zTVJcfw|5UUM{B!6ZRaB0ZK0OP>5gW)XXigUH_vSV delta 1398 zcmZ|OUr19?90%}o@5q77yyl#1#=PceWE*Z}s}xJcF!9f(&i?4;hGRwqwGt}W!vyWA z9tMY=O1MEqe}pE7UVIQ=B?(f{6u)!X8KHu-}{Moj*CjDBI z@~uw)N_MS8NP9x!>CKCA%`C&<)wOJ~1uZ;S(n!=S-ZWkN>tf$+_hlzPO-u!Sj#?l@IZ8KW z2g}v}6Meo!h{cPE63ZX@Ai5>!ZkrNUdDjiy#ilGIj3vJJOH4%e6Gxmmm>%a#Jn;q- zOYFVtvBh|&_>v)(XDC}N?EWh{TOc-+5=*pMMF&n~X*OjpK*Meyd*%5Ay}1DNYEYA) z1@Df~BxoI~#?`^zb^I2pfgVKFX`;=?zWR6Jo^v`V?mMsWd)lZHIzjgWIVnW%1RZpz zw~;;#4jWf9oDeB!4x10q^{!6lJ=r3G!ZD>8)ClOqQ%1(g-LE{R&Q95PVr z2{jANfL_L09`wl>x6nLj990ATbJihL1D!@KfQGxBLJOe#2hu^`_8bjM5wxb) zCA0{74YdTCI&V%cl}%15pqm%OjZz9I-YBJlI{S~oR}&gNOJlIk2O%x~M9PZ^Ku4TOG1f X%Y#Y(RCshU5giQ=B`%H+^5usA70kZ; From 9b2bdd4ec31ee66ad1c9f5e2d7a43c09a4fab0b9 Mon Sep 17 00:00:00 2001 From: indianauthority97 Date: Sun, 30 Jul 2017 17:57:18 +0530 Subject: [PATCH 26/36] [Issue #535]:Small error in last commit --- .../sigmah/client/search/SearchService.java | 1 - .../client/search/SearchServiceAsync.java | 2 -- .../server/inject/ServletContextListener.java | 3 +- .../server/search/FilesSolrManager.java | 4 +++ .../server/search/FilesSolrManagerImpl.java | 1 + .../server/search/SearchServiceImpl.java | 32 ------------------- 6 files changed, 6 insertions(+), 37 deletions(-) diff --git a/src/main/java/org/sigmah/client/search/SearchService.java b/src/main/java/org/sigmah/client/search/SearchService.java index 5f4291e80..9a6d405c9 100644 --- a/src/main/java/org/sigmah/client/search/SearchService.java +++ b/src/main/java/org/sigmah/client/search/SearchService.java @@ -14,5 +14,4 @@ public interface SearchService extends RemoteService { Boolean index(); Boolean autoIndex(); Boolean updateCore(String solrCoreUrl); - Boolean filesIndex() throws IOException; } diff --git a/src/main/java/org/sigmah/client/search/SearchServiceAsync.java b/src/main/java/org/sigmah/client/search/SearchServiceAsync.java index f3c152e77..068585d24 100644 --- a/src/main/java/org/sigmah/client/search/SearchServiceAsync.java +++ b/src/main/java/org/sigmah/client/search/SearchServiceAsync.java @@ -1,6 +1,5 @@ package org.sigmah.client.search; -import java.io.IOException; import java.util.ArrayList; import org.sigmah.shared.dto.search.SearchResultsDTO; @@ -13,5 +12,4 @@ public interface SearchServiceAsync { public void index(AsyncCallback callback); public void autoIndex(AsyncCallback callback); public void updateCore(String solrCoreUrl, AsyncCallback callback); - public void filesIndex(AsyncCallback callback) throws IOException; } diff --git a/src/main/java/org/sigmah/server/inject/ServletContextListener.java b/src/main/java/org/sigmah/server/inject/ServletContextListener.java index b8a121915..50c5f7111 100644 --- a/src/main/java/org/sigmah/server/inject/ServletContextListener.java +++ b/src/main/java/org/sigmah/server/inject/ServletContextListener.java @@ -36,8 +36,7 @@ import com.google.inject.Guice; import com.google.inject.Injector; import com.google.inject.servlet.GuiceServletContextListener; -import org.sigmah.server.autoExport.QuartzScheduler; -import org.sigmah.server.search.SearchModule; +import org.sigmah.server.autoExport.QuartzScheduler; /** * Builds the Guice injector. diff --git a/src/main/java/org/sigmah/server/search/FilesSolrManager.java b/src/main/java/org/sigmah/server/search/FilesSolrManager.java index 9802c2e58..a03b42900 100644 --- a/src/main/java/org/sigmah/server/search/FilesSolrManager.java +++ b/src/main/java/org/sigmah/server/search/FilesSolrManager.java @@ -2,8 +2,12 @@ import java.io.IOException; +import org.sigmah.server.domain.value.FileVersion; + public interface FilesSolrManager { public Boolean FilesImport(SolrSearcher instance) throws IOException; + + Boolean indexFile(FileVersion fv); } diff --git a/src/main/java/org/sigmah/server/search/FilesSolrManagerImpl.java b/src/main/java/org/sigmah/server/search/FilesSolrManagerImpl.java index dc5f8f315..f421e3cf9 100644 --- a/src/main/java/org/sigmah/server/search/FilesSolrManagerImpl.java +++ b/src/main/java/org/sigmah/server/search/FilesSolrManagerImpl.java @@ -74,6 +74,7 @@ public Boolean FilesImport(SolrSearcher instance) throws IOException { } + @Override public Boolean indexFile(FileVersion fv){ ContentStreamUpdateRequest req = new ContentStreamUpdateRequest("/update/extract"); try { diff --git a/src/main/java/org/sigmah/server/search/SearchServiceImpl.java b/src/main/java/org/sigmah/server/search/SearchServiceImpl.java index df3a1e731..6b0733c4c 100644 --- a/src/main/java/org/sigmah/server/search/SearchServiceImpl.java +++ b/src/main/java/org/sigmah/server/search/SearchServiceImpl.java @@ -1,15 +1,7 @@ package org.sigmah.server.search; import com.google.gwt.user.server.rpc.RemoteServiceServlet; -import com.google.inject.Inject; - -import java.io.IOException; import java.util.ArrayList; - -import javax.servlet.ServletContext; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpSession; - import org.sigmah.client.search.SearchService; import org.sigmah.server.search.SolrSearcher; import org.sigmah.shared.dto.search.SearchResultsDTO; @@ -20,21 +12,16 @@ public class SearchServiceImpl extends RemoteServiceServlet implements SearchSer //implementation of the Search Methods @Override public ArrayList search(String searchStr, String filter){ -// HttpServletRequest request = this.getThreadLocalRequest(); -// HttpSession session = request.getSession(); -// ServletContext context = session.getServletContext(); return SolrSearcher.getInstance().search(searchStr, filter); } @Override public Boolean index() { - // TODO Auto-generated method stub return SolrSearcher.getInstance().FullDataImport(); } @Override public Boolean autoIndex() { - // TODO Auto-generated method stub if( SolrIndexJobActivator.getSolrIndexJobActivator() == null ) return false; return true; @@ -42,27 +29,8 @@ public Boolean autoIndex() { @Override public Boolean updateCore(String solrCoreUrl) { - // TODO Auto-generated method stub if( SolrSearcher.getNewInstance(solrCoreUrl) != null ) return true; return false; } - @Override - public Boolean filesIndex() throws IOException { - // TODO Auto-generated method stub -// System.out.println("Tryna file index, wth is happening here?"); -// FilesSolrHandler filesSolrHandler = null; -// try { -// filesSolrHandler = new FilesSolrHandler(); -// //injector.injectMembers(filesSolrHandler); -// System.out.println("Is this null: " + filesSolrHandler); -// } catch (RuntimeException e) { -// // TODO Auto-generated catch block -// System.out.println("HELL: " + filesSolrHandler); -// e.printStackTrace(); -// } -// System.out.println("This is not supposed to be null: " + filesSolrHandler.getFileDAO()); -// return filesSolrHandler.FilesImport(SolrSearcher.getInstance()); - return true; - } } From 1f7d1f3ccd4320656fe254d09485d9ded34906b1 Mon Sep 17 00:00:00 2001 From: indianauthority97 Date: Sun, 30 Jul 2017 22:41:47 +0530 Subject: [PATCH 27/36] [Issue #535]:Modified automatic and manual indexing to include files indexing --- .../sigmah/client/search/SearchService.java | 1 - .../client/search/SearchServiceAsync.java | 1 - .../ui/presenter/DashboardPresenter.java | 28 +--------- .../admin/ParametersAdminPresenter.java | 55 +++++++++++-------- .../ui/presenter/zone/SearchPresenter.java | 15 ----- .../java/org/sigmah/server/dao/FileDAO.java | 5 ++ .../server/dao/impl/FileHibernateDAO.java | 3 - .../server/inject/ConfigurationModule.java | 2 +- .../server/inject/ServletContextListener.java | 10 ++-- .../search/FilesSolrManagerHandler.java | 6 +- .../server/search/FilesSolrManagerImpl.java | 31 ++++------- .../server/search/SearchServiceImpl.java | 7 --- .../sigmah/server/search/SolrIndexJob.java | 36 +++++++++++- .../server/search/SolrIndexJobActivator.java | 51 +++++++---------- .../sigmah/server/search/SolrSearcher.java | 8 ++- 15 files changed, 116 insertions(+), 143 deletions(-) diff --git a/src/main/java/org/sigmah/client/search/SearchService.java b/src/main/java/org/sigmah/client/search/SearchService.java index 9a6d405c9..0c2a3c5c0 100644 --- a/src/main/java/org/sigmah/client/search/SearchService.java +++ b/src/main/java/org/sigmah/client/search/SearchService.java @@ -12,6 +12,5 @@ public interface SearchService extends RemoteService { //TODO Add method stubs here ArrayList search(String searchStr, String filter); Boolean index(); - Boolean autoIndex(); Boolean updateCore(String solrCoreUrl); } diff --git a/src/main/java/org/sigmah/client/search/SearchServiceAsync.java b/src/main/java/org/sigmah/client/search/SearchServiceAsync.java index 068585d24..e322183cf 100644 --- a/src/main/java/org/sigmah/client/search/SearchServiceAsync.java +++ b/src/main/java/org/sigmah/client/search/SearchServiceAsync.java @@ -10,6 +10,5 @@ public interface SearchServiceAsync { public void search(String searchStr, String filter, AsyncCallback> callback); public void index(AsyncCallback callback); - public void autoIndex(AsyncCallback callback); public void updateCore(String solrCoreUrl, AsyncCallback callback); } diff --git a/src/main/java/org/sigmah/client/ui/presenter/DashboardPresenter.java b/src/main/java/org/sigmah/client/ui/presenter/DashboardPresenter.java index de17210a3..d32add6ec 100644 --- a/src/main/java/org/sigmah/client/ui/presenter/DashboardPresenter.java +++ b/src/main/java/org/sigmah/client/ui/presenter/DashboardPresenter.java @@ -98,7 +98,7 @@ @Singleton public class DashboardPresenter extends AbstractPagePresenter { - private final SearchServiceAsync searchServiceForAutoIndex = GWT.create(SearchService.class); + private final SearchServiceAsync searchService = GWT.create(SearchService.class); public static interface ReminderOrMonitoredPointHandler { public void onLabelClickEvent(Integer projectId); @@ -279,7 +279,7 @@ public void handleEvent(OfflineEvent event) { }); - searchServiceForAutoIndex.updateCore(auth().getOrganizationSolrCoreUrl(), new AsyncCallback() { + searchService.updateCore(auth().getOrganizationSolrCoreUrl(), new AsyncCallback() { public void onFailure(Throwable caught) { Window.alert("Could not update Solr Core. Check that the url is valid!"); caught.printStackTrace(); @@ -295,30 +295,6 @@ public void onSuccess(Boolean result) { } }); - // related to search auto indexing - if (ProfileUtils.isGranted(auth(), GlobalPermissionEnum.MANAGE_SETTINGS)) { - // only admin can do auto-indexing - searchServiceForAutoIndex.autoIndex(new AsyncCallback() { - - @Override - public void onFailure(Throwable caught) { - // TODO Auto-generated method stub - Window.alert("Failed to start/continue auto indexing!"); - } - - @Override - public void onSuccess(Boolean result) { - // TODO Auto-generated method stub - if (result) - Window.alert("Started/continued auto indexing!"); - else - Window.alert("Failed to start/continue auto indexing! ( back end issue )"); - } - - }); - - } - } /** diff --git a/src/main/java/org/sigmah/client/ui/presenter/admin/ParametersAdminPresenter.java b/src/main/java/org/sigmah/client/ui/presenter/admin/ParametersAdminPresenter.java index 7b7f9d6ff..b35017d0a 100644 --- a/src/main/java/org/sigmah/client/ui/presenter/admin/ParametersAdminPresenter.java +++ b/src/main/java/org/sigmah/client/ui/presenter/admin/ParametersAdminPresenter.java @@ -67,6 +67,7 @@ import org.sigmah.client.util.ImageProvider; import org.sigmah.offline.sync.SuccessCallback; import org.sigmah.shared.command.BackupArchiveManagementCommand; +import org.sigmah.shared.command.FilesSolrIndexCommand; import org.sigmah.shared.command.GetGlobalExportSettings; import org.sigmah.shared.command.GetOrgUnits; import org.sigmah.shared.command.UpdateGlobalExportSettingsCommand; @@ -77,6 +78,7 @@ import org.sigmah.shared.dto.GlobalExportSettingsDTO; import org.sigmah.shared.dto.organization.OrganizationDTO; import org.sigmah.shared.dto.orgunit.OrgUnitDTO; +import org.sigmah.shared.dto.search.FilesSolrIndexDTO; import org.sigmah.shared.dto.value.FileDTO.LoadingScope; import org.sigmah.shared.servlet.ServletConstants; import org.sigmah.shared.servlet.ServletConstants.Servlet; @@ -416,11 +418,13 @@ public void onCommandSuccess(final GlobalExportSettingsDTO result) { view.getSolrCoreUrlTextField().setValue(auth().getOrganizationSolrCoreUrl()); - view.getManualIndexButton().addSelectionListener(new SelectionListener() { + // view.getManualIndexButton(). + view.getManualIndexButton().addListener(Events.OnClick, new Listener() { // funnily this is getting fired twice on button click + @Override - public void componentSelected(ButtonEvent ce) { + public void handleEvent(ButtonEvent be) { // TODO Auto-generated method stub searchService.index(new AsyncCallback() { public void onFailure(Throwable caught) { @@ -430,10 +434,10 @@ public void onFailure(Throwable caught) { public void onSuccess(Boolean result) { Boolean dih_success = result; - if (dih_success == true) { - Window.alert("Successfully completed Full Import!"); + if (dih_success) { + FilesImport(); } else { - Window.alert("Failed to complete Full Import!"); + Window.alert("Failed to complete data Import!"); } } }); @@ -443,6 +447,29 @@ public void onSuccess(Boolean result) { } + public void FilesImport() { + dispatch.execute(new FilesSolrIndexCommand(), new CommandResultHandler() { + + @Override + public void onCommandSuccess(final FilesSolrIndexDTO result) { + + if (result == null) { + Window.alert("Unsuccessful files indexing!"); + + } else { + // N10N.warn(I18N.CONSTANTS.backupManagement_process_alreadyRunning()); + if (result.isResult()) { + Window.alert("Successfully completed data and files import!"); + } else { + Window.alert("Failed to complete files indexing!"); + } + } + + } + + }); + } + /** * {@inheritDoc} */ @@ -702,24 +729,6 @@ public void onSuccess(Boolean result) { } } }); - searchService.autoIndex(new AsyncCallback() { - - @Override - public void onFailure(Throwable caught) { - // TODO Auto-generated method stub - Window.alert("Failed to start/continue auto indexing!"); - } - - @Override - public void onSuccess(Boolean result) { - // TODO Auto-generated method stub - if (result) - Window.alert("Started/continued auto indexing!"); - else - Window.alert("Failed to start/continue auto indexing! ( back end issue )"); - } - - }); } }, view.getSolrSaveConfigButton()); diff --git a/src/main/java/org/sigmah/client/ui/presenter/zone/SearchPresenter.java b/src/main/java/org/sigmah/client/ui/presenter/zone/SearchPresenter.java index a460f77dc..ff48da568 100644 --- a/src/main/java/org/sigmah/client/ui/presenter/zone/SearchPresenter.java +++ b/src/main/java/org/sigmah/client/ui/presenter/zone/SearchPresenter.java @@ -262,21 +262,6 @@ public void onCommandSuccess(final FilesSolrIndexDTO result) { } }); -// searchService.filesIndex(new AsyncCallback() { -// public void onFailure(Throwable caught) { -// Window.alert("Failure on the server side!"); -// caught.printStackTrace(); -// } -// -// public void onSuccess(Boolean result) { -// dih_success = result; -// if (dih_success == true) { -// Window.alert("Successfully completed Files Import!"); -// } else { -// Window.alert("Failed to complete Files Import!"); -// } -// } -// }); } private void loadProjectIdsForFiltering() { diff --git a/src/main/java/org/sigmah/server/dao/FileDAO.java b/src/main/java/org/sigmah/server/dao/FileDAO.java index 0bd5bd368..3b618e84f 100644 --- a/src/main/java/org/sigmah/server/dao/FileDAO.java +++ b/src/main/java/org/sigmah/server/dao/FileDAO.java @@ -51,6 +51,11 @@ public interface FileDAO extends DAO { */ List findVersions(Collection filesIds, LoadingScope loadingScope); + /** + * Finds the {@link FileVersion} list corresponding to all {@code filesIds} in the database. + * + * @return The {@link FileVersion} list corresponding to all {@code filesIds}in the database. + */ List findAllVersions(); /** * Retrieves the {@link FileVersion} corresponding to the given {@code versionId}. diff --git a/src/main/java/org/sigmah/server/dao/impl/FileHibernateDAO.java b/src/main/java/org/sigmah/server/dao/impl/FileHibernateDAO.java index 0275f339d..44e38a727 100644 --- a/src/main/java/org/sigmah/server/dao/impl/FileHibernateDAO.java +++ b/src/main/java/org/sigmah/server/dao/impl/FileHibernateDAO.java @@ -130,19 +130,16 @@ public List findAllVersions() { + " SELECT max(fv2.versionNumber) FROM FileVersion fv2 WHERE" + " fv2.parentFile = f" + " )"; - //System.out.println("GUBI " + request); List res = null; try { DomainFilters.disableUserFilter(em()); //hope this works to get all the files - System.out.println("This should not be null also:" + em()); final TypedQuery query = em().createQuery(request, FileVersion.class); res = query.getResultList(); } catch (RuntimeException e) { System.out.println("Here's an error!" + em()); e.printStackTrace(); } - //System.out.println("GUBI " + res.toString()); return res; } diff --git a/src/main/java/org/sigmah/server/inject/ConfigurationModule.java b/src/main/java/org/sigmah/server/inject/ConfigurationModule.java index e56239625..3bfaa2b60 100644 --- a/src/main/java/org/sigmah/server/inject/ConfigurationModule.java +++ b/src/main/java/org/sigmah/server/inject/ConfigurationModule.java @@ -76,7 +76,7 @@ protected void configure() { install(new FactoryModuleBuilder().build(BackupArchiveJobFactory.class)); //Solr Files Handler - bind(FilesSolrManager.class).to(FilesSolrManagerImpl.class).in(Singleton.class); + bind(FilesSolrManager.class).to(FilesSolrManagerImpl.class); } } diff --git a/src/main/java/org/sigmah/server/inject/ServletContextListener.java b/src/main/java/org/sigmah/server/inject/ServletContextListener.java index 50c5f7111..59c525064 100644 --- a/src/main/java/org/sigmah/server/inject/ServletContextListener.java +++ b/src/main/java/org/sigmah/server/inject/ServletContextListener.java @@ -36,7 +36,8 @@ import com.google.inject.Guice; import com.google.inject.Injector; import com.google.inject.servlet.GuiceServletContextListener; -import org.sigmah.server.autoExport.QuartzScheduler; +import org.sigmah.server.autoExport.QuartzScheduler; +import org.sigmah.server.search.SolrIndexJobActivator; /** * Builds the Guice injector. @@ -80,9 +81,7 @@ protected Injector getInjector() { // I18nServer module. new I18nServerModule(), // scheduler Module - new SchedulerModule()); - // search module - //new SearchModule()); + new SchedulerModule()); } @Override @@ -98,7 +97,8 @@ public void contextInitialized(ServletContextEvent servletContextEvent) { public void run() { if(!Thread.currentThread().isInterrupted()) { // Context has been initialized. - injector.getInstance(GlobalExportJobActivator.class); + injector.getInstance(GlobalExportJobActivator.class); + injector.getInstance(SolrIndexJobActivator.class); } } diff --git a/src/main/java/org/sigmah/server/search/FilesSolrManagerHandler.java b/src/main/java/org/sigmah/server/search/FilesSolrManagerHandler.java index 46db03d67..15b905dd6 100644 --- a/src/main/java/org/sigmah/server/search/FilesSolrManagerHandler.java +++ b/src/main/java/org/sigmah/server/search/FilesSolrManagerHandler.java @@ -18,25 +18,23 @@ public class FilesSolrManagerHandler extends AbstractCommandHandler listFileVersions = fileDAO.findAllVersions(); Boolean allFilesIndexed = true; for (FileVersion fv : listFileVersions) { if (fileStorageProvider.exists(fv.getPath())) { - allFilesIndexed = allFilesIndexed && indexFile(fv); + allFilesIndexed = allFilesIndexed && indexFile(fv); } } return allFilesIndexed; - + } @Override - public Boolean indexFile(FileVersion fv){ + public Boolean indexFile(FileVersion fv) { ContentStreamUpdateRequest req = new ContentStreamUpdateRequest("/update/extract"); try { Path path = Paths.get(getStorageRootPath(), fv.getPath()); - System.out.println("Path for the file: " + path.toString()); -// InputStream inputStream = fileStorageProvider.open(filename); -// FileUtils.copyInputStreamToFile(inputStream, file); + System.out.println("Path for the file to be indexed: " + path.toString()); req.addFile(new File(path.toString()), "pdforword"); } catch (IOException e1) { - // TODO Auto-generated catch block e1.printStackTrace(); } req.setParam("commit", "true"); @@ -101,21 +91,20 @@ public Boolean indexFile(FileVersion fv){ req.setParam("literal.file_author", fv.getAuthor().getFullName()); req.setParam("literal.file_author_organization", fv.getAuthor().getOrganization().getName()); req.setParam("literal.file_author_email", fv.getAuthor().getEmail()); - //req.setParam("literal.file_author_email", fv.getAuthor().); - + // req.setParam("literal.file_author_email", fv.getAuthor().); + NamedList result = null; try { result = SolrSearcher.solrServer.request(req); return true; } catch (SolrServerException | IOException e) { - // TODO Auto-generated catch block e.printStackTrace(); return false; } } - + private String getStorageRootPath() { return properties.getProperty(PropertyKey.FILE_REPOSITORY_NAME); } - + } diff --git a/src/main/java/org/sigmah/server/search/SearchServiceImpl.java b/src/main/java/org/sigmah/server/search/SearchServiceImpl.java index 6b0733c4c..ee4d07547 100644 --- a/src/main/java/org/sigmah/server/search/SearchServiceImpl.java +++ b/src/main/java/org/sigmah/server/search/SearchServiceImpl.java @@ -20,13 +20,6 @@ public Boolean index() { return SolrSearcher.getInstance().FullDataImport(); } - @Override - public Boolean autoIndex() { - if( SolrIndexJobActivator.getSolrIndexJobActivator() == null ) - return false; - return true; - } - @Override public Boolean updateCore(String solrCoreUrl) { if( SolrSearcher.getNewInstance(solrCoreUrl) != null ) return true; diff --git a/src/main/java/org/sigmah/server/search/SolrIndexJob.java b/src/main/java/org/sigmah/server/search/SolrIndexJob.java index c88baabf3..5c9ae031a 100644 --- a/src/main/java/org/sigmah/server/search/SolrIndexJob.java +++ b/src/main/java/org/sigmah/server/search/SolrIndexJob.java @@ -1,8 +1,13 @@ package org.sigmah.server.search; +import java.io.IOException; import java.util.Calendar; +import javax.persistence.EntityManager; +import javax.persistence.EntityTransaction; + import org.quartz.Job; +import org.quartz.JobDataMap; import org.quartz.JobDetail; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; @@ -10,14 +15,39 @@ import org.quartz.SchedulerException; import org.quartz.Trigger; import org.quartz.impl.StdSchedulerFactory; +import com.google.inject.Injector; public class SolrIndexJob implements Job{ @Override - public void execute(JobExecutionContext context) throws JobExecutionException { + public void execute(JobExecutionContext executionContext) throws JobExecutionException { + + final JobDataMap dataMap = executionContext.getJobDetail().getJobDataMap(); + final EntityManager em = (EntityManager) dataMap.get("em"); + final Injector injector = (Injector) dataMap.get("injector"); + System.out.println("Starting Solr Full Data Import!"); + SolrSearcher.getInstance().FullDataImport(); + System.out.println("Finished Solr Full Data Import!"); + EntityTransaction tx = null; + + try { + tx = em.getTransaction(); + tx.begin(); + FilesSolrManager filesSolrManager = injector.getInstance(FilesSolrManager.class); + System.out.println("Starting Files Solr Indexing!"); + filesSolrManager.FilesImport(SolrSearcher.getInstance()); + System.out.println("Finished Files Solr Indexing!"); + tx.commit(); + System.out.println("Scheduled indexing of solr server over"); + + }catch(RuntimeException | IOException e){ + if (tx != null && tx.isActive()) + tx.rollback(); + System.out.println("Could not complete Files Solr Indexing!"); + System.out.println("Ran into unexpected Runtime Exception while indexing files!"); + e.printStackTrace(); + } - SolrSearcher.getInstance(); - SolrSearcher.FullDataImport(); } } diff --git a/src/main/java/org/sigmah/server/search/SolrIndexJobActivator.java b/src/main/java/org/sigmah/server/search/SolrIndexJobActivator.java index fe385a9a8..2f2d27329 100644 --- a/src/main/java/org/sigmah/server/search/SolrIndexJobActivator.java +++ b/src/main/java/org/sigmah/server/search/SolrIndexJobActivator.java @@ -1,5 +1,7 @@ package org.sigmah.server.search; +import javax.persistence.EntityManager; + import org.quartz.JobDetail; import org.quartz.Scheduler; import org.quartz.SchedulerException; @@ -8,42 +10,31 @@ import org.quartz.impl.StdSchedulerFactory; import org.sigmah.server.autoExport.QuartzScheduler; +import com.google.inject.Inject; +import com.google.inject.Injector; +import com.google.inject.Provider; +import com.google.inject.Singleton; +@Singleton public class SolrIndexJobActivator { - private static Scheduler scheduler; - private static SolrIndexJobActivator instance; - - public static SolrIndexJobActivator getSolrIndexJobActivator(){ //Singleton - if( instance == null ){ - instance = new SolrIndexJobActivator(); - } - return instance; - } + private final Provider entityManagerProvider; - private SolrIndexJobActivator() { + @Inject + public SolrIndexJobActivator(final QuartzScheduler quartz, Provider entityManagerProvider, final Injector injector) { + this.entityManagerProvider = entityManagerProvider; + + JobDetail solrIndexJobDetail = new JobDetail("solrIndexJob", null, SolrIndexJob.class); + solrIndexJobDetail.getJobDataMap().put("em", this.entityManagerProvider.get()); + solrIndexJobDetail.getJobDataMap().put("injector", injector); + Trigger solrIndexTrigger = TriggerUtils.makeMinutelyTrigger(10); + solrIndexTrigger.setName("solrIndexTrigger"); try { - - scheduler = StdSchedulerFactory.getDefaultScheduler(); - scheduler.start(); - - System.out.println("Started Scheduler!"); - - final JobDetail solrIndexJobDetail = new JobDetail("solrIndexJob", null, SolrIndexJob.class); - Trigger solrIndexTrigger = TriggerUtils.makeMinutelyTrigger(10); - solrIndexTrigger.setName("solrIndexTrigger"); - try { - scheduler.scheduleJob(solrIndexJobDetail, solrIndexTrigger); - } catch (SchedulerException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - - // scheduler.shutdown(); - } catch (SchedulerException e1) { - // TODO Auto-generated catch block - e1.printStackTrace(); + quartz.getScheduler().scheduleJob(solrIndexJobDetail, solrIndexTrigger); + } catch (SchedulerException e) { + System.out.println("Failed to execute Solr Index Job due to Scheduler Exception!"); + e.printStackTrace(); } } } diff --git a/src/main/java/org/sigmah/server/search/SolrSearcher.java b/src/main/java/org/sigmah/server/search/SolrSearcher.java index e374b94f6..19cf0a5ab 100644 --- a/src/main/java/org/sigmah/server/search/SolrSearcher.java +++ b/src/main/java/org/sigmah/server/search/SolrSearcher.java @@ -90,10 +90,8 @@ public static SolrSearcher getNewInstance(String solrCoreUrl) { //only for use w private void loadServer() throws MalformedURLException { // urlString = "http://localhost:8983/solr/Test_Sigmah"; // urlString = properties.getProperty(PropertyKey.SOLR_CORE_URL); - //urlString = System.out.println("SOLR CONNECTING TO: " + urlString); solrServer = new HttpSolrClient.Builder(urlString).build(); - // Window.alert("Successful solr connection!"); System.out.println("SOLR CONNECTION CONNECTED"); } @@ -115,7 +113,11 @@ else if (filter.equals("Contacts")){ else if (filter.equals("OrgUnits")){ query.set("fq", "ORG_UNIT"); // query.addSortField("weight", ORDER.desc); - }else{ + }else if (filter.equals("Files")){ + query.set("fq", "FILE"); + // query.addSortField("weight", ORDER.desc); + } + else{ //query.set("qt", "/search"); } From 035c7287914aadc7aeebf19ba008e641316b1b1f Mon Sep 17 00:00:00 2001 From: indianauthority97 Date: Wed, 2 Aug 2017 23:02:15 +0530 Subject: [PATCH 28/36] [Issue #535]:Presentation of files in search results --- .../ui/presenter/SearchResultsPresenter.java | 21 +- .../client/ui/view/SearchResultsView.java | 333 +++++++++++------- .../client/ui/view/zone/SearchView.java | 2 +- .../server/inject/ServletContextListener.java | 1 - 4 files changed, 220 insertions(+), 137 deletions(-) diff --git a/src/main/java/org/sigmah/client/ui/presenter/SearchResultsPresenter.java b/src/main/java/org/sigmah/client/ui/presenter/SearchResultsPresenter.java index d50feaa6b..826fd1e81 100644 --- a/src/main/java/org/sigmah/client/ui/presenter/SearchResultsPresenter.java +++ b/src/main/java/org/sigmah/client/ui/presenter/SearchResultsPresenter.java @@ -67,6 +67,7 @@ import org.sigmah.shared.dto.referential.GlobalPermissionEnum; import org.sigmah.shared.dto.reminder.MonitoredPointDTO; import org.sigmah.shared.dto.reminder.ReminderDTO; +import org.sigmah.shared.dto.report.ReportReference; import org.sigmah.shared.util.ProfileUtils; import com.allen_sauer.gwt.log.client.Log; @@ -107,6 +108,9 @@ import org.sigmah.shared.dto.profile.CheckPointDTO; import org.sigmah.shared.dto.profile.ExecutionDTO; import org.sigmah.shared.dto.search.SearchResultsDTO; +import org.sigmah.shared.file.Cause; +import org.sigmah.shared.file.ProgressListener; +import org.sigmah.shared.file.TransfertManager; /** * Search Results page presenter. @@ -120,6 +124,7 @@ public class SearchResultsPresenter extends AbstractPagePresenter projectIdsForFiltering); void setOrgUnitIdsForFiltering(Set orgUnitIdsForFiltering); @@ -193,6 +204,7 @@ public void onPageRequest(PageRequest request) { @Override public void onLabelClickEvent(Integer projectId) { //Window.alert("Opening project " + projectId ); + Window.alert(eventBus.toString()); PageRequest request = new PageRequest(Page.PROJECT_DASHBOARD); request.addParameter(RequestParameter.ID, projectId ); eventBus.navigateRequest(request); @@ -202,6 +214,7 @@ public void onLabelClickEvent(Integer projectId) { @Override public void onLabelClickEvent(Integer contactId) { //Window.alert("Opening Contact " + contactId ); + Window.alert(eventBus.toString()); PageRequest request = new PageRequest(Page.CONTACT_DASHBOARD); request.addParameter(RequestParameter.ID, contactId ); eventBus.navigateRequest(request); @@ -211,11 +224,18 @@ public void onLabelClickEvent(Integer contactId) { @Override public void onLabelClickEvent(Integer orgUnitId) { //Window.alert("Opening OrgUnit " + orgUnitId ); + Window.alert(eventBus.toString()); PageRequest request = new PageRequest(Page.ORGUNIT_DASHBOARD); request.addParameter(RequestParameter.ID, orgUnitId ); eventBus.navigateRequest(request); } }); + view.setFileClickHandler(new FilesResultsClickHandler() { + @Override + public void onLabelClickEvent(){ + Window.alert(eventBus.toString()); + }; + }); //getProjectsForFiltering(); view.setProjectIdsForFiltering((Set) request.getData(RequestParameter.FILTER_PROJECT_IDS)); view.setOrgUnitIdsForFiltering((Set) request.getData(RequestParameter.FILTER_ORGUNIT_IDS)); @@ -225,5 +245,4 @@ public void onLabelClickEvent(Integer orgUnitId) { view.addResultsPanel(); //Window.alert("Completed addResultsPanel!"); } - } diff --git a/src/main/java/org/sigmah/client/ui/view/SearchResultsView.java b/src/main/java/org/sigmah/client/ui/view/SearchResultsView.java index 1675f47f9..bc8f45509 100644 --- a/src/main/java/org/sigmah/client/ui/view/SearchResultsView.java +++ b/src/main/java/org/sigmah/client/ui/view/SearchResultsView.java @@ -41,6 +41,7 @@ import org.sigmah.client.search.SearchServiceAsync; import org.sigmah.client.ui.presenter.SearchResultsPresenter; import org.sigmah.client.ui.presenter.SearchResultsPresenter.ContactResultsClickHandler; +import org.sigmah.client.ui.presenter.SearchResultsPresenter.FilesResultsClickHandler; import org.sigmah.client.ui.presenter.SearchResultsPresenter.OrgUnitResultsClickHandler; import org.sigmah.client.ui.presenter.SearchResultsPresenter.ProjectResultsClickHandler; import org.sigmah.client.ui.presenter.SearchResultsPresenter.SearchResultsClickHandler; @@ -61,10 +62,12 @@ import org.sigmah.client.util.DateUtils; import org.sigmah.shared.dto.ProjectDTO; import org.sigmah.shared.dto.referential.ContactModelType; +import org.sigmah.shared.dto.referential.GlobalPermissionEnum; import org.sigmah.shared.dto.referential.ProjectModelType; import org.sigmah.shared.dto.reminder.MonitoredPointDTO; import org.sigmah.shared.dto.reminder.ReminderDTO; import org.sigmah.shared.dto.search.SearchResultsDTO; +import org.sigmah.shared.util.ProfileUtils; import com.extjs.gxt.ui.client.Style.LayoutRegion; import com.extjs.gxt.ui.client.Style.Scroll; @@ -114,11 +117,11 @@ */ public class SearchResultsView extends AbstractView implements SearchResultsPresenter.View { - + private Set projectIdsForFiltering; - + private Set orgUnitIdsForFiltering; - + private Set contactIdsForFiltering; private String searchText; @@ -152,6 +155,12 @@ public void setContactClickHandler(final ContactResultsClickHandler handler) { public void setOrgUnitClickHandler(final OrgUnitResultsClickHandler handler) { this.handler = handler; } + + @Override + public void setFileClickHandler(final FilesResultsClickHandler handler) { + // TODO Auto-generated method stub + this.handler = handler; + } /** * {@inheritDoc} @@ -178,7 +187,7 @@ public void setSearchString(String searchText) { this.searchText = searchText; // Window.alert("Searchtext set to " + searchText); } - + public Set getProjectIdsForFiltering() { return projectIdsForFiltering; } @@ -186,7 +195,7 @@ public Set getProjectIdsForFiltering() { public void setProjectIdsForFiltering(Set projectIdsForFiltering) { this.projectIdsForFiltering = projectIdsForFiltering; } - + public Set getOrgUnitIdsForFiltering() { return orgUnitIdsForFiltering; } @@ -194,7 +203,7 @@ public Set getOrgUnitIdsForFiltering() { public void setOrgUnitIdsForFiltering(Set orgUnitIdsForFiltering) { this.orgUnitIdsForFiltering = orgUnitIdsForFiltering; } - + public Set getContactIdsForFiltering() { return contactIdsForFiltering; } @@ -202,7 +211,7 @@ public Set getContactIdsForFiltering() { public void setContactIdsForFiltering(Set contactIdsForFiltering) { this.contactIdsForFiltering = contactIdsForFiltering; } - + // ------------------------------------------------------------------------------------------- // // UTILITY METHODS. @@ -215,9 +224,9 @@ public void addSearchData(Object searchData) { // searchData.toString()); searchResultsStore = new ListStore(); for (Object object : (ArrayList) searchData) { - + SearchResultsDTO temp = object != null ? (SearchResultsDTO) object : null; - if( filter(temp)) { + if (filter(temp)) { searchResultsStore.add(temp); } @@ -228,10 +237,50 @@ public void addSearchData(Object searchData) { Window.alert("Failed to receive search results!"); } } - + + public boolean filter(SearchResultsDTO dto) { + + if (dto == null) + return false; + + Map retMap = toMap(dto.getResult()); + dto.setDTOtype(retMap.get("doc_type").toString()); + + if (retMap.get("doc_type").toString().equals("PROJECT")) { + dto.setDTOid(retMap.get("databaseid").toString()); + if (!projectIdsForFiltering.contains(Integer.parseInt(dto.getDTOid()))) { + // Window.alert("Found project not to be included!"); + return false; + } + + } else if (retMap.get("doc_type").toString().equals("CONTACT")) { + dto.setDTOid(retMap.get("id_contact").toString()); + if (!contactIdsForFiltering.contains(Integer.parseInt(dto.getDTOid()))) { + //Window.alert("Found Contact not to be included: " + dto.getDTOid()); + return false; + } + } else if (retMap.get("doc_type").toString().equals("ORG_UNIT")) { + dto.setDTOid(retMap.get("org_unit_id").toString()); + if (!orgUnitIdsForFiltering.contains(Integer.parseInt(dto.getDTOid()))) { + // Window.alert("Found OrgUnit not to be included!"); + return false; + } + } + else if (retMap.get("doc_type").toString().equals("FILE")) { + dto.setDTOid(retMap.get("file_id").toString()); +// if (!orgUnitIdsForFiltering.contains(Integer.parseInt(dto.getDTOid()))) { +// // Window.alert("Found OrgUnit not to be included!"); +// return false; +// } + return true; + + } + return true; + } + public void addResultsPanel() { - //Window.alert("Started addResultsPanel!"); + // Window.alert("Started addResultsPanel!"); if (centerContainer == null) { centerContainer = Layouts.vBox(); centerContainer.layout(); @@ -239,10 +288,10 @@ public void addResultsPanel() { centerContainer.removeAll(); centerContainer.layout(); } - createSearchResultsPanel(); + setContentPanel("Search results for \"" + searchText + "\"", false, null, null); searchResultsPanel.layout(); ColumnModel columns = new ColumnModel(createSearchResultsGridColumns()); - + Grid searchResultsGrid = new Grid(searchResultsStore, columns); searchResultsGrid.getView().setForceFit(false); searchResultsGrid.getView().setAutoFill(true); @@ -256,22 +305,16 @@ public void addResultsPanel() { } - private void createSearchResultsPanel() { - - // Window.alert("Searchtext is currently " + searchText ); - setContentPanel("Search results for \"" + searchText + "\"", false, null, null); + private void setContentPanel(String title, boolean collapsible, Layout layout, Scroll scroll, + String... stylenames) { - } - - private void setContentPanel(String title, boolean collapsible, Layout layout, Scroll scroll, String... stylenames) { - - //Window.alert("Started setContentPanel!"); + // Window.alert("Started setContentPanel!"); searchResultsPanel = new ContentPanel(layout != null ? layout : new FitLayout()); searchResultsPanel.layout(); - //Window.alert("Hello!"); + // Window.alert("Hello!"); searchResultsPanel.setHeadingHtml(title); - //Window.alert("Hello!"); + // Window.alert("Hello!"); searchResultsPanel.layout(); searchResultsPanel.setHeaderVisible(true); searchResultsPanel.setCollapsible(collapsible); @@ -288,20 +331,21 @@ private void setContentPanel(String title, boolean collapsible, Layout layout, S if (scroll != null) { searchResultsPanel.setScrollMode(scroll); } - - //Window.alert("Ended setContentPanel!"); + + // Window.alert("Ended setContentPanel!"); } private List createSearchResultsGridColumns() { - - //Window.alert("Started createSearchResultsGridColumns!"); + + // Window.alert("Started createSearchResultsGridColumns!"); // Label column. ColumnConfig labelColumn = new ColumnConfig(); labelColumn.setId("label"); labelColumn.setHeaderHtml("Sort"); labelColumn.setWidth(100); + //labelColumn.setResizable(true); // Add link labelColumn.setRenderer(new GridCellRenderer() { @@ -314,7 +358,7 @@ public Object render(final SearchResultsDTO model, String property, ColumnData c HTML h = new HTML(getNiceText(retMap)); if (retMap.get("doc_type").toString().equals("PROJECT")) { - + h.addClickHandler(new ClickHandler() { @Override @@ -326,7 +370,7 @@ public void onClick(ClickEvent event) { } if (retMap.get("doc_type").toString().equals("CONTACT")) { - + h.addClickHandler(new ClickHandler() { @Override @@ -339,117 +383,138 @@ public void onClick(ClickEvent event) { } if (retMap.get("doc_type").toString().equals("ORG_UNIT")) { - + h.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { - + ((OrgUnitResultsClickHandler) handler) .onLabelClickEvent(Integer.parseInt(model.getDTOid())); } }); } + if (retMap.get("doc_type").toString().equals("FILE")) { + + h.addClickHandler(new ClickHandler() { + + @Override + public void onClick(ClickEvent event) { + + ((FilesResultsClickHandler) handler) + .onLabelClickEvent(); + } + }); + } + return h; } }); - - //Window.alert("Completed createSearchResultsGridColumns!"); + + // Window.alert("Completed createSearchResultsGridColumns!"); return Arrays.asList(new ColumnConfig[] { labelColumn }); } - - public boolean filter(SearchResultsDTO dto){ - - if(dto == null) return false; - - Map retMap = toMap(dto.getResult()); - dto.setDTOtype(retMap.get("doc_type").toString()); - - if (retMap.get("doc_type").toString().equals("PROJECT")) { - dto.setDTOid(retMap.get("databaseid").toString()); - if(!projectIdsForFiltering.contains( Integer.parseInt(dto.getDTOid())) ) { - //Window.alert("Found project not to be included!"); - return false; - } - - } else if (retMap.get("doc_type").toString().equals("CONTACT")) { - dto.setDTOid(retMap.get("id_contact").toString()); - if(!contactIdsForFiltering.contains( Integer.parseInt(dto.getDTOid())) ) { - Window.alert("Found Contact not to be included: " + dto.getDTOid() ); - return false; - } - } else if (retMap.get("doc_type").toString().equals("ORG_UNIT")) { - dto.setDTOid(retMap.get("org_unit_id").toString()); - if(!orgUnitIdsForFiltering.contains( Integer.parseInt(dto.getDTOid())) ) { - //Window.alert("Found OrgUnit not to be included!"); - return false; - } - } - return true; - } - - public String getNiceText( Map resultsMap ){ + + public String getNiceText(Map resultsMap) { String htmlBuilder = ""; - if(resultsMap.get("doc_type").toString().equals("PROJECT")){ - + if (resultsMap.get("doc_type").toString().equals("PROJECT")) { + ProjectModelType pmt = null; - if( resultsMap.get("type_pmodel").equals("FUNDING"))pmt = ProjectModelType.FUNDING; - if( resultsMap.get("type_pmodel").equals("NGO"))pmt = ProjectModelType.NGO; - if( resultsMap.get("type_pmodel").equals("LOCAL_PARTNER"))pmt = ProjectModelType.LOCAL_PARTNER; - - htmlBuilder+="
" - + "
" + getProjectLogo(pmt).getHTML() + "

" - +"

" + resultsMap.get("project_name") + " - " + resultsMap.get("project_fullname") - + "

"; - htmlBuilder+="
"; - htmlBuilder+="

"; - htmlBuilder+="
Active Phase: " + resultsMap.get("phase_model_name"); - htmlBuilder+="
Organisational Unit: " + resultsMap.get("project_org_unit_name") + " - " + resultsMap.get("project_org_unit_fullname"); - htmlBuilder+="
Amendment Status: " + resultsMap.get("amendment_status"); - htmlBuilder+="
Project Model: " + resultsMap.get("pmodel_name"); - htmlBuilder+="


"; + if (resultsMap.get("type_pmodel").equals("FUNDING")) + pmt = ProjectModelType.FUNDING; + if (resultsMap.get("type_pmodel").equals("NGO")) + pmt = ProjectModelType.NGO; + if (resultsMap.get("type_pmodel").equals("LOCAL_PARTNER")) + pmt = ProjectModelType.LOCAL_PARTNER; + + htmlBuilder += "
" + + "
" + getProjectLogo(pmt).getHTML() + "

" + "

" + resultsMap.get("project_name") + + " - " + resultsMap.get("project_fullname") + "

"; + htmlBuilder += "
"; + htmlBuilder += "

"; + htmlBuilder += "
Active Phase: " + resultsMap.get("phase_model_name"); + htmlBuilder += "
Organisational Unit: " + resultsMap.get("project_org_unit_name") + " - " + + resultsMap.get("project_org_unit_fullname"); + htmlBuilder += "
Amendment Status: " + resultsMap.get("amendment_status"); + htmlBuilder += "
Project Model: " + resultsMap.get("pmodel_name"); + htmlBuilder += "


"; } - if(resultsMap.get("doc_type").toString().equals("ORG_UNIT")){ - htmlBuilder+="
" - + "
" + getOrgUnitLogo().getHTML() + "

" - +"

" + resultsMap.get("org_unit_name") + " - " + resultsMap.get("org_unit_fullname") + - "

"; - htmlBuilder+="
"; - htmlBuilder+="

"; - htmlBuilder+="
Model: " + resultsMap.get("org_unit_model_name"); - htmlBuilder+="
" + "Country: " + resultsMap.get("org_unit_country_iso2") + " - " + resultsMap.get("org_unit_country_name"); - htmlBuilder+="


"; + if (resultsMap.get("doc_type").toString().equals("ORG_UNIT")) { + htmlBuilder += "
" + + "
" + getOrgUnitLogo().getHTML() + "

" + "

" + resultsMap.get("org_unit_name") + + " - " + resultsMap.get("org_unit_fullname") + "

"; + htmlBuilder += "
"; + htmlBuilder += "

"; + htmlBuilder += "
Model: " + resultsMap.get("org_unit_model_name"); + htmlBuilder += "
" + "Country: " + resultsMap.get("org_unit_country_iso2") + " - " + + resultsMap.get("org_unit_country_name"); + htmlBuilder += "


"; } - if(resultsMap.get("doc_type").toString().equals("CONTACT")){ - + if (resultsMap.get("doc_type").toString().equals("CONTACT")) { + ContactModelType cmt = null; - if( resultsMap.get("contact_model_type").equals("INDIVIDUAL"))cmt = ContactModelType.INDIVIDUAL; - if( resultsMap.get("contact_model_type").equals("ORGANIZATION"))cmt = ContactModelType.ORGANIZATION; - - htmlBuilder+="
" + getContactLogo(cmt) + "

"; - htmlBuilder+="
" - + "

"; - if( resultsMap.get("user_firstname") != null ){ - htmlBuilder+= resultsMap.get("user_firstname") + " - " + resultsMap.get("user_name"); - htmlBuilder+="

"; - } - else{ - //for organization contacts - htmlBuilder+= resultsMap.get("organization_name"); - htmlBuilder+="
"; + if (resultsMap.get("contact_model_type").equals("INDIVIDUAL")) + cmt = ContactModelType.INDIVIDUAL; + if (resultsMap.get("contact_model_type").equals("ORGANIZATION")) + cmt = ContactModelType.ORGANIZATION; + + htmlBuilder += "
" + getContactLogo(cmt) + "

"; + htmlBuilder += "
" + + "

"; + if (resultsMap.get("user_firstname") != null) { + htmlBuilder += resultsMap.get("user_firstname") + " - " + resultsMap.get("user_name"); + htmlBuilder += "

"; + } else { + // for organization contacts + htmlBuilder += resultsMap.get("organization_name"); + htmlBuilder += "
"; return htmlBuilder; } - htmlBuilder+="
"; - htmlBuilder+="

"; - htmlBuilder+="
Email ID: " + resultsMap.get("user_email"); - htmlBuilder+="
Locale: " + resultsMap.get("user_locale"); - htmlBuilder+="


"; + htmlBuilder += "
"; + htmlBuilder += "

"; + htmlBuilder += "
Email ID: " + resultsMap.get("user_email"); + htmlBuilder += "
Locale: " + resultsMap.get("user_locale"); + htmlBuilder += "


"; + } + if (resultsMap.get("doc_type").toString().equals("FILE")) { + htmlBuilder += "
" + IconImageBundle.ICONS.attach().createImage() + "

"; + htmlBuilder += "
" + + "

"; + if(resultsMap.get("title") != null){ + htmlBuilder += resultsMap.get("title") + " - " + resultsMap.get("file_name") + "." + resultsMap.get("file_ext"); + }else{ + htmlBuilder += resultsMap.get("file_name") + "." + resultsMap.get("file_ext"); + } + htmlBuilder += "

"; + htmlBuilder += "
"; + htmlBuilder += "

"; + htmlBuilder += "
Author: " + resultsMap.get("file_author") + " - " + resultsMap.get("file_author_email"); + htmlBuilder += "

"; + htmlBuilder += "

"; + //Window.alert(resultsMap.get("content").substring(0, 400)); + //Window.alert(resultsMap.get("content").substring(0, 400).replaceAll("\\r\\n|\\r|\\n", "")); + String contentString; + if(resultsMap.get("title") != null){ + contentString = resultsMap.get("content").substring(resultsMap.get("title").length()+1, min(900,resultsMap.get("content").length()) ).replaceAll("\\\\n", ""); + }else{ + contentString = resultsMap.get("content").substring(0, min(900,resultsMap.get("content").length())).replaceAll("\\\\n", ""); + } + int i; + for( i = 180; i<= min(800,contentString.length()); i+=180 ){ + htmlBuilder += "
" + contentString.substring(i-180, i); + } + htmlBuilder += "
" + contentString.substring(i-180,contentString.length()) + "...
"; + htmlBuilder += "


"; } return htmlBuilder; } + private int min(int i, int length) { + // TODO Auto-generated method stub + if(i < length)return i; else return length; + } public static Map toMap(String jsonStr) { Map map = new HashMap(); @@ -464,33 +529,33 @@ public static Map toMap(String jsonStr) { return map; } - + public AbstractImagePrototype getProjectLogo(final ProjectModelType projectType) { final AbstractImagePrototype projectIcon = FundingIconProvider.getProjectTypeIcon(projectType, IconSize.MEDIUM); return projectIcon; } - - public HTML getContactLogo(ContactModelType type){ + + public HTML getContactLogo(ContactModelType type) { HTML avatar = new HTML(); - avatar.setWidth(36 + "px"); - avatar.setHeight(36 + "px"); - avatar.setStyleName("contact-card-avatar"); - avatar.getElement().getStyle().clearBackgroundImage(); - switch (type) { - case INDIVIDUAL: - avatar.addStyleName("contact-card-avatar-individual"); - break; - case ORGANIZATION: - avatar.addStyleName("contact-card-avatar-organization"); - break; - default: - throw new IllegalStateException("Unknown ContactModelType : " + type); - } - return avatar; + avatar.setWidth(36 + "px"); + avatar.setHeight(36 + "px"); + avatar.setStyleName("contact-card-avatar"); + avatar.getElement().getStyle().clearBackgroundImage(); + switch (type) { + case INDIVIDUAL: + avatar.addStyleName("contact-card-avatar-individual"); + break; + case ORGANIZATION: + avatar.addStyleName("contact-card-avatar-organization"); + break; + default: + throw new IllegalStateException("Unknown ContactModelType : " + type); + } + return avatar; } - - public AbstractImagePrototype getOrgUnitLogo(){ + + public AbstractImagePrototype getOrgUnitLogo() { return OrgUnitImageBundle.ICONS.orgUnitSmall(); } diff --git a/src/main/java/org/sigmah/client/ui/view/zone/SearchView.java b/src/main/java/org/sigmah/client/ui/view/zone/SearchView.java index 93e1a9170..0814674d5 100644 --- a/src/main/java/org/sigmah/client/ui/view/zone/SearchView.java +++ b/src/main/java/org/sigmah/client/ui/view/zone/SearchView.java @@ -85,7 +85,7 @@ public void initialize() { searchBarPanel.add(searchText); searchBarPanel.add(searchOptions); searchBarPanel.add(searchButton); - searchBarPanel.add(indexButton); + //searchBarPanel.add(indexButton); // initWidget(); Useless diff --git a/src/main/java/org/sigmah/server/inject/ServletContextListener.java b/src/main/java/org/sigmah/server/inject/ServletContextListener.java index 59c525064..28f08b04b 100644 --- a/src/main/java/org/sigmah/server/inject/ServletContextListener.java +++ b/src/main/java/org/sigmah/server/inject/ServletContextListener.java @@ -89,7 +89,6 @@ public void contextInitialized(ServletContextEvent servletContextEvent) { super.contextInitialized(servletContextEvent); final Injector injector = (Injector) servletContextEvent.getServletContext().getAttribute(Injector.class.getName()); - executorService = Executors.newScheduledThreadPool(1); executorService.schedule(new Runnable() { From 05abe0bedabdc78f88fa6c0eba9a654b38c6dd46 Mon Sep 17 00:00:00 2001 From: indianauthority97 Date: Sat, 5 Aug 2017 15:43:56 +0530 Subject: [PATCH 29/36] [Issue #535]:Made UI changes and very rudimentary files results filtering --- .../ui/presenter/SearchResultsPresenter.java | 51 +++++++++++-- .../client/ui/view/SearchResultsView.java | 71 ++++++++++++------ .../server/search/FilesSolrManagerImpl.java | 2 + .../shared/dto/search/SearchResultsDTO.java | 20 +++++ .../Test_Sigmah/conf/dataimport.properties | 10 +-- .../solr_config/Test_Sigmah/conf/schema.xml | 2 + .../Test_Sigmah/data/index/_21d.dii | Bin 0 -> 87 bytes .../Test_Sigmah/data/index/_21d.dim | Bin 0 -> 795 bytes .../Test_Sigmah/data/index/_21d.fdt | Bin 0 -> 95449 bytes .../Test_Sigmah/data/index/_21d.fdx | Bin 0 -> 104 bytes .../Test_Sigmah/data/index/_21d.fnm | Bin 0 -> 14158 bytes .../Test_Sigmah/data/index/_21d.nvd | Bin 0 -> 1883 bytes .../Test_Sigmah/data/index/_21d.nvm | Bin 0 -> 448 bytes .../Test_Sigmah/data/index/_21d.si | Bin 0 -> 579 bytes .../data/index/_21d_Lucene50_0.doc | Bin 0 -> 13282 bytes .../data/index/_21d_Lucene50_0.pos | Bin 0 -> 62830 bytes .../data/index/_21d_Lucene50_0.tim | Bin 0 -> 72161 bytes .../data/index/_21d_Lucene50_0.tip | Bin 0 -> 3670 bytes .../data/index/_21d_Lucene54_0.dvd | Bin 0 -> 1914 bytes .../data/index/_21d_Lucene54_0.dvm | Bin 0 -> 4106 bytes .../Test_Sigmah/data/index/_21e.fdt | Bin 0 -> 17488 bytes .../Test_Sigmah/data/index/_21e.fdx | Bin 0 -> 85 bytes .../Test_Sigmah/data/index/_21e.fnm | Bin 0 -> 1857 bytes .../Test_Sigmah/data/index/_21e.nvd | Bin 0 -> 59 bytes .../Test_Sigmah/data/index/_21e.nvm | Bin 0 -> 208 bytes .../Test_Sigmah/data/index/_21e.si | Bin 0 -> 523 bytes .../data/index/_21e_Lucene50_0.doc | Bin 0 -> 110 bytes .../data/index/_21e_Lucene50_0.pos | Bin 0 -> 12378 bytes .../data/index/_21e_Lucene50_0.tim | Bin 0 -> 20942 bytes .../data/index/_21e_Lucene50_0.tip | Bin 0 -> 915 bytes .../data/index/_21e_Lucene54_0.dvd | Bin 0 -> 94 bytes .../data/index/_21e_Lucene54_0.dvm | Bin 0 -> 240 bytes .../Test_Sigmah/data/index/_21f.fdt | Bin 0 -> 5345 bytes .../Test_Sigmah/data/index/_21f.fdx | Bin 0 -> 84 bytes .../Test_Sigmah/data/index/_21f.fnm | Bin 0 -> 1858 bytes .../Test_Sigmah/data/index/_21f.nvd | Bin 0 -> 59 bytes .../Test_Sigmah/data/index/_21f.nvm | Bin 0 -> 208 bytes .../Test_Sigmah/data/index/_21f.si | Bin 0 -> 523 bytes .../data/index/_21f_Lucene50_0.doc | Bin 0 -> 110 bytes .../data/index/_21f_Lucene50_0.pos | Bin 0 -> 3306 bytes .../data/index/_21f_Lucene50_0.tim | Bin 0 -> 12836 bytes .../data/index/_21f_Lucene50_0.tip | Bin 0 -> 650 bytes .../data/index/_21f_Lucene54_0.dvd | Bin 0 -> 94 bytes .../data/index/_21f_Lucene54_0.dvm | Bin 0 -> 240 bytes .../Test_Sigmah/data/index/_21g.fdt | Bin 0 -> 3565 bytes .../Test_Sigmah/data/index/_21g.fdx | Bin 0 -> 84 bytes .../Test_Sigmah/data/index/_21g.fnm | Bin 0 -> 1858 bytes .../Test_Sigmah/data/index/_21g.nvd | Bin 0 -> 59 bytes .../Test_Sigmah/data/index/_21g.nvm | Bin 0 -> 208 bytes .../Test_Sigmah/data/index/_21g.si | Bin 0 -> 523 bytes .../data/index/_21g_Lucene50_0.doc | Bin 0 -> 110 bytes .../data/index/_21g_Lucene50_0.pos | Bin 0 -> 2373 bytes .../data/index/_21g_Lucene50_0.tim | Bin 0 -> 9688 bytes .../data/index/_21g_Lucene50_0.tip | Bin 0 -> 564 bytes .../data/index/_21g_Lucene54_0.dvd | Bin 0 -> 94 bytes .../data/index/_21g_Lucene54_0.dvm | Bin 0 -> 240 bytes .../Test_Sigmah/data/index/_21h.fdt | Bin 0 -> 4576 bytes .../Test_Sigmah/data/index/_21h.fdx | Bin 0 -> 84 bytes .../Test_Sigmah/data/index/_21h.fnm | Bin 0 -> 1858 bytes .../Test_Sigmah/data/index/_21h.nvd | Bin 0 -> 59 bytes .../Test_Sigmah/data/index/_21h.nvm | Bin 0 -> 208 bytes .../Test_Sigmah/data/index/_21h.si | Bin 0 -> 523 bytes .../data/index/_21h_Lucene50_0.doc | Bin 0 -> 110 bytes .../data/index/_21h_Lucene50_0.pos | Bin 0 -> 2886 bytes .../data/index/_21h_Lucene50_0.tim | Bin 0 -> 11039 bytes .../data/index/_21h_Lucene50_0.tip | Bin 0 -> 578 bytes .../data/index/_21h_Lucene54_0.dvd | Bin 0 -> 94 bytes .../data/index/_21h_Lucene54_0.dvm | Bin 0 -> 240 bytes .../Test_Sigmah/data/index/_21i.fdt | Bin 0 -> 2938 bytes .../Test_Sigmah/data/index/_21i.fdx | Bin 0 -> 84 bytes .../Test_Sigmah/data/index/_21i.fnm | Bin 0 -> 1949 bytes .../Test_Sigmah/data/index/_21i.nvd | Bin 0 -> 59 bytes .../Test_Sigmah/data/index/_21i.nvm | Bin 0 -> 218 bytes .../Test_Sigmah/data/index/_21i.si | Bin 0 -> 523 bytes .../data/index/_21i_Lucene50_0.doc | Bin 0 -> 110 bytes .../data/index/_21i_Lucene50_0.pos | Bin 0 -> 1960 bytes .../data/index/_21i_Lucene50_0.tim | Bin 0 -> 8707 bytes .../data/index/_21i_Lucene50_0.tip | Bin 0 -> 569 bytes .../data/index/_21i_Lucene54_0.dvd | Bin 0 -> 94 bytes .../data/index/_21i_Lucene54_0.dvm | Bin 0 -> 240 bytes .../Test_Sigmah/data/index/_21j.fdt | Bin 0 -> 13622 bytes .../Test_Sigmah/data/index/_21j.fdx | Bin 0 -> 84 bytes .../Test_Sigmah/data/index/_21j.fnm | Bin 0 -> 1857 bytes .../Test_Sigmah/data/index/_21j.nvd | Bin 0 -> 59 bytes .../Test_Sigmah/data/index/_21j.nvm | Bin 0 -> 208 bytes .../Test_Sigmah/data/index/_21j.si | Bin 0 -> 523 bytes .../data/index/_21j_Lucene50_0.doc | Bin 0 -> 110 bytes .../data/index/_21j_Lucene50_0.pos | Bin 0 -> 8749 bytes .../data/index/_21j_Lucene50_0.tim | Bin 0 -> 19117 bytes .../data/index/_21j_Lucene50_0.tip | Bin 0 -> 893 bytes .../data/index/_21j_Lucene54_0.dvd | Bin 0 -> 94 bytes .../data/index/_21j_Lucene54_0.dvm | Bin 0 -> 240 bytes .../Test_Sigmah/data/index/_21k.fdt | Bin 0 -> 27218 bytes .../Test_Sigmah/data/index/_21k.fdx | Bin 0 -> 85 bytes .../Test_Sigmah/data/index/_21k.fnm | Bin 0 -> 1857 bytes .../Test_Sigmah/data/index/_21k.nvd | Bin 0 -> 59 bytes .../Test_Sigmah/data/index/_21k.nvm | Bin 0 -> 208 bytes .../Test_Sigmah/data/index/_21k.si | Bin 0 -> 523 bytes .../data/index/_21k_Lucene50_0.doc | Bin 0 -> 110 bytes .../data/index/_21k_Lucene50_0.pos | Bin 0 -> 17512 bytes .../data/index/_21k_Lucene50_0.tim | Bin 0 -> 28034 bytes .../data/index/_21k_Lucene50_0.tip | Bin 0 -> 1120 bytes .../data/index/_21k_Lucene54_0.dvd | Bin 0 -> 94 bytes .../data/index/_21k_Lucene54_0.dvm | Bin 0 -> 240 bytes .../Test_Sigmah/data/index/_21l.fdt | Bin 0 -> 1057 bytes .../Test_Sigmah/data/index/_21l.fdx | Bin 0 -> 84 bytes .../Test_Sigmah/data/index/_21l.fnm | Bin 0 -> 1766 bytes .../Test_Sigmah/data/index/_21l.nvd | Bin 0 -> 59 bytes .../Test_Sigmah/data/index/_21l.nvm | Bin 0 -> 198 bytes .../Test_Sigmah/data/index/_21l.si | Bin 0 -> 523 bytes .../data/index/_21l_Lucene50_0.doc | Bin 0 -> 110 bytes .../data/index/_21l_Lucene50_0.pos | Bin 0 -> 678 bytes .../data/index/_21l_Lucene50_0.tim | Bin 0 -> 2865 bytes .../data/index/_21l_Lucene50_0.tip | Bin 0 -> 450 bytes .../data/index/_21l_Lucene54_0.dvd | Bin 0 -> 94 bytes .../data/index/_21l_Lucene54_0.dvm | Bin 0 -> 240 bytes .../Test_Sigmah/data/index/_ma.dii | Bin 86 -> 0 bytes .../Test_Sigmah/data/index/_ma.dim | Bin 801 -> 0 bytes .../Test_Sigmah/data/index/_ma.fdt | Bin 3041 -> 0 bytes .../Test_Sigmah/data/index/_ma.fdx | Bin 84 -> 0 bytes .../Test_Sigmah/data/index/_ma.fnm | Bin 9871 -> 0 bytes .../Test_Sigmah/data/index/_ma.nvd | Bin 995 -> 0 bytes .../Test_Sigmah/data/index/_ma.nvm | Bin 308 -> 0 bytes .../solr_config/Test_Sigmah/data/index/_ma.si | Bin 527 -> 0 bytes .../Test_Sigmah/data/index/_ma_Lucene50_0.doc | Bin 1814 -> 0 bytes .../Test_Sigmah/data/index/_ma_Lucene50_0.pos | Bin 3245 -> 0 bytes .../Test_Sigmah/data/index/_ma_Lucene50_0.tim | Bin 11098 -> 0 bytes .../Test_Sigmah/data/index/_ma_Lucene50_0.tip | Bin 1693 -> 0 bytes .../Test_Sigmah/data/index/_ma_Lucene54_0.dvd | Bin 1612 -> 0 bytes .../Test_Sigmah/data/index/_ma_Lucene54_0.dvm | Bin 4034 -> 0 bytes .../Test_Sigmah/data/index/segments_1yb | Bin 0 -> 681 bytes .../Test_Sigmah/data/index/segments_mg | Bin 167 -> 0 bytes .../data/tlog/tlog.0000000000000000820 | Bin 22129 -> 0 bytes ...0000000000811 => tlog.0000000000000002538} | Bin 28848 -> 28899 bytes ...0000000000812 => tlog.0000000000000002539} | Bin 38426 -> 38477 bytes ...0000000000813 => tlog.0000000000000002540} | Bin 32597 -> 32648 bytes ...0000000000814 => tlog.0000000000000002541} | Bin 10250 -> 10293 bytes ...0000000000815 => tlog.0000000000000002542} | Bin 7704 -> 7747 bytes ...0000000000816 => tlog.0000000000000002543} | Bin 8562 -> 8605 bytes ...0000000000817 => tlog.0000000000000002544} | Bin 6441 -> 6491 bytes ...0000000000818 => tlog.0000000000000002545} | Bin 24149 -> 24200 bytes ...0000000000819 => tlog.0000000000000002546} | Bin 44512 -> 44563 bytes .../data/tlog/tlog.0000000000000002547 | Bin 0 -> 2718 bytes 143 files changed, 123 insertions(+), 33 deletions(-) create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_21d.dii create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_21d.dim create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_21d.fdt create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_21d.fdx create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_21d.fnm create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_21d.nvd create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_21d.nvm create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_21d.si create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_21d_Lucene50_0.doc create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_21d_Lucene50_0.pos create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_21d_Lucene50_0.tim create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_21d_Lucene50_0.tip create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_21d_Lucene54_0.dvd create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_21d_Lucene54_0.dvm create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_21e.fdt create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_21e.fdx create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_21e.fnm create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_21e.nvd create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_21e.nvm create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_21e.si create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_21e_Lucene50_0.doc create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_21e_Lucene50_0.pos create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_21e_Lucene50_0.tim create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_21e_Lucene50_0.tip create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_21e_Lucene54_0.dvd create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_21e_Lucene54_0.dvm create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_21f.fdt create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_21f.fdx create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_21f.fnm create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_21f.nvd create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_21f.nvm create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_21f.si create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_21f_Lucene50_0.doc create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_21f_Lucene50_0.pos create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_21f_Lucene50_0.tim create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_21f_Lucene50_0.tip create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_21f_Lucene54_0.dvd create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_21f_Lucene54_0.dvm create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_21g.fdt create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_21g.fdx create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_21g.fnm create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_21g.nvd create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_21g.nvm create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_21g.si create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_21g_Lucene50_0.doc create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_21g_Lucene50_0.pos create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_21g_Lucene50_0.tim create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_21g_Lucene50_0.tip create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_21g_Lucene54_0.dvd create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_21g_Lucene54_0.dvm create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_21h.fdt create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_21h.fdx create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_21h.fnm create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_21h.nvd create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_21h.nvm create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_21h.si create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_21h_Lucene50_0.doc create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_21h_Lucene50_0.pos create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_21h_Lucene50_0.tim create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_21h_Lucene50_0.tip create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_21h_Lucene54_0.dvd create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_21h_Lucene54_0.dvm create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_21i.fdt create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_21i.fdx create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_21i.fnm create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_21i.nvd create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_21i.nvm create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_21i.si create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_21i_Lucene50_0.doc create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_21i_Lucene50_0.pos create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_21i_Lucene50_0.tim create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_21i_Lucene50_0.tip create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_21i_Lucene54_0.dvd create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_21i_Lucene54_0.dvm create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_21j.fdt create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_21j.fdx create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_21j.fnm create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_21j.nvd create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_21j.nvm create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_21j.si create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_21j_Lucene50_0.doc create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_21j_Lucene50_0.pos create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_21j_Lucene50_0.tim create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_21j_Lucene50_0.tip create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_21j_Lucene54_0.dvd create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_21j_Lucene54_0.dvm create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_21k.fdt create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_21k.fdx create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_21k.fnm create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_21k.nvd create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_21k.nvm create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_21k.si create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_21k_Lucene50_0.doc create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_21k_Lucene50_0.pos create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_21k_Lucene50_0.tim create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_21k_Lucene50_0.tip create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_21k_Lucene54_0.dvd create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_21k_Lucene54_0.dvm create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_21l.fdt create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_21l.fdx create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_21l.fnm create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_21l.nvd create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_21l.nvm create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_21l.si create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_21l_Lucene50_0.doc create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_21l_Lucene50_0.pos create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_21l_Lucene50_0.tim create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_21l_Lucene50_0.tip create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_21l_Lucene54_0.dvd create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_21l_Lucene54_0.dvm delete mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_ma.dii delete mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_ma.dim delete mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_ma.fdt delete mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_ma.fdx delete mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_ma.fnm delete mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_ma.nvd delete mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_ma.nvm delete mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_ma.si delete mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_ma_Lucene50_0.doc delete mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_ma_Lucene50_0.pos delete mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_ma_Lucene50_0.tim delete mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_ma_Lucene50_0.tip delete mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_ma_Lucene54_0.dvd delete mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_ma_Lucene54_0.dvm create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/segments_1yb delete mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/segments_mg delete mode 100644 src/main/resources/solr_config/Test_Sigmah/data/tlog/tlog.0000000000000000820 rename src/main/resources/solr_config/Test_Sigmah/data/tlog/{tlog.0000000000000000811 => tlog.0000000000000002538} (93%) rename src/main/resources/solr_config/Test_Sigmah/data/tlog/{tlog.0000000000000000812 => tlog.0000000000000002539} (95%) rename src/main/resources/solr_config/Test_Sigmah/data/tlog/{tlog.0000000000000000813 => tlog.0000000000000002540} (94%) rename src/main/resources/solr_config/Test_Sigmah/data/tlog/{tlog.0000000000000000814 => tlog.0000000000000002541} (64%) rename src/main/resources/solr_config/Test_Sigmah/data/tlog/{tlog.0000000000000000815 => tlog.0000000000000002542} (53%) rename src/main/resources/solr_config/Test_Sigmah/data/tlog/{tlog.0000000000000000816 => tlog.0000000000000002543} (65%) rename src/main/resources/solr_config/Test_Sigmah/data/tlog/{tlog.0000000000000000817 => tlog.0000000000000002544} (50%) rename src/main/resources/solr_config/Test_Sigmah/data/tlog/{tlog.0000000000000000818 => tlog.0000000000000002545} (92%) rename src/main/resources/solr_config/Test_Sigmah/data/tlog/{tlog.0000000000000000819 => tlog.0000000000000002546} (95%) create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/tlog/tlog.0000000000000002547 diff --git a/src/main/java/org/sigmah/client/ui/presenter/SearchResultsPresenter.java b/src/main/java/org/sigmah/client/ui/presenter/SearchResultsPresenter.java index 826fd1e81..fefe164f7 100644 --- a/src/main/java/org/sigmah/client/ui/presenter/SearchResultsPresenter.java +++ b/src/main/java/org/sigmah/client/ui/presenter/SearchResultsPresenter.java @@ -108,6 +108,7 @@ import org.sigmah.shared.dto.profile.CheckPointDTO; import org.sigmah.shared.dto.profile.ExecutionDTO; import org.sigmah.shared.dto.search.SearchResultsDTO; +import org.sigmah.shared.dto.value.FileVersionDTO; import org.sigmah.shared.file.Cause; import org.sigmah.shared.file.ProgressListener; import org.sigmah.shared.file.TransfertManager; @@ -124,6 +125,9 @@ public class SearchResultsPresenter extends AbstractPagePresenter orgUnitIdsForFiltering); void setContactIdsForFiltering(Set orgUnitIdsForFiltering); + + void setUserId(String userId); } /** @@ -204,7 +210,7 @@ public void onPageRequest(PageRequest request) { @Override public void onLabelClickEvent(Integer projectId) { //Window.alert("Opening project " + projectId ); - Window.alert(eventBus.toString()); + //Window.alert(eventBus.toString()); PageRequest request = new PageRequest(Page.PROJECT_DASHBOARD); request.addParameter(RequestParameter.ID, projectId ); eventBus.navigateRequest(request); @@ -214,7 +220,7 @@ public void onLabelClickEvent(Integer projectId) { @Override public void onLabelClickEvent(Integer contactId) { //Window.alert("Opening Contact " + contactId ); - Window.alert(eventBus.toString()); + //Window.alert(eventBus.toString()); PageRequest request = new PageRequest(Page.CONTACT_DASHBOARD); request.addParameter(RequestParameter.ID, contactId ); eventBus.navigateRequest(request); @@ -224,7 +230,7 @@ public void onLabelClickEvent(Integer contactId) { @Override public void onLabelClickEvent(Integer orgUnitId) { //Window.alert("Opening OrgUnit " + orgUnitId ); - Window.alert(eventBus.toString()); + //Window.alert(eventBus.toString()); PageRequest request = new PageRequest(Page.ORGUNIT_DASHBOARD); request.addParameter(RequestParameter.ID, orgUnitId ); eventBus.navigateRequest(request); @@ -232,17 +238,50 @@ public void onLabelClickEvent(Integer orgUnitId) { }); view.setFileClickHandler(new FilesResultsClickHandler() { @Override - public void onLabelClickEvent(){ - Window.alert(eventBus.toString()); + public void onLabelClickEvent(final FileVersionDTO fv){ + //Window.alert(transfertManager.toString()); + transfertManager.canDownload(fv, new AsyncCallback() { + + @Override + public void onFailure(Throwable caught) { + N10N.error("Unable to download!", "Check if the file exists. You may not have permission to view this file!"); + } + + @Override + public void onSuccess(Boolean result) { + if (result) { + transfertManager.download(fv, new ProgressListener() { + + @Override + public void onProgress(double progress, double speed) { + } + + @Override + public void onFailure(Cause cause) { + N10N.error("Unable to download!", "Check if the file exists. You may not have permission to view this file!"); + } + + @Override + public void onLoad(String result) { + } + }); + } else { + N10N.error("Unable to download!", "Check if the file exists. You may not have permission to view this file!"); + } + } + }); }; }); //getProjectsForFiltering(); view.setProjectIdsForFiltering((Set) request.getData(RequestParameter.FILTER_PROJECT_IDS)); view.setOrgUnitIdsForFiltering((Set) request.getData(RequestParameter.FILTER_ORGUNIT_IDS)); view.setContactIdsForFiltering((Set) request.getData(RequestParameter.FILTER_CONTACT_IDS)); + Window.alert(auth().getUserId().toString()); + view.setUserId(auth().getUserId().toString()); view.addSearchData(request.getData(RequestParameter.CONTENT)); //Window.alert("Completed addSearchData!"); view.addResultsPanel(); //Window.alert("Completed addResultsPanel!"); } + } diff --git a/src/main/java/org/sigmah/client/ui/view/SearchResultsView.java b/src/main/java/org/sigmah/client/ui/view/SearchResultsView.java index bc8f45509..fbb3e6a6d 100644 --- a/src/main/java/org/sigmah/client/ui/view/SearchResultsView.java +++ b/src/main/java/org/sigmah/client/ui/view/SearchResultsView.java @@ -67,6 +67,7 @@ import org.sigmah.shared.dto.reminder.MonitoredPointDTO; import org.sigmah.shared.dto.reminder.ReminderDTO; import org.sigmah.shared.dto.search.SearchResultsDTO; +import org.sigmah.shared.dto.value.FileVersionDTO; import org.sigmah.shared.util.ProfileUtils; import com.extjs.gxt.ui.client.Style.LayoutRegion; @@ -125,6 +126,8 @@ public class SearchResultsView extends AbstractView implements SearchResultsPres private Set contactIdsForFiltering; private String searchText; + + private String userId; private ContentPanel searchResultsPanel; @@ -212,12 +215,21 @@ public void setContactIdsForFiltering(Set contactIdsForFiltering) { this.contactIdsForFiltering = contactIdsForFiltering; } + public String getUserId() { + return userId; + } + + public void setUserId(String userId) { + this.userId = userId; + } // ------------------------------------------------------------------------------------------- // // UTILITY METHODS. // // ------------------------------------------------------------------------------------------- + + public void addSearchData(Object searchData) { if (searchData != null) { // Window.alert("Received search results!: \n" + @@ -267,13 +279,17 @@ public boolean filter(SearchResultsDTO dto) { } } else if (retMap.get("doc_type").toString().equals("FILE")) { - dto.setDTOid(retMap.get("file_id").toString()); -// if (!orgUnitIdsForFiltering.contains(Integer.parseInt(dto.getDTOid()))) { -// // Window.alert("Found OrgUnit not to be included!"); +// if(projectIdsForFiltering.size() == 0 || orgUnitIdsForFiltering.size() == 0 ) //cannot view projects or orgunits // return false; -// } - return true; - + dto.setDTOid(retMap.get("file_version_id").toString()); + dto.setFile_name(retMap.get("file_name")); + dto.setFile_ext(retMap.get("file_ext")); + if( retMap.get("file_author_id").equals(getUserId())){ + //temporary filter, since I am unable to implement a better filter, + //users can only view those files of which they are the authors! + return true; + } + return false; } return true; } @@ -402,8 +418,13 @@ public void onClick(ClickEvent event) { @Override public void onClick(ClickEvent event) { + FileVersionDTO fv = new FileVersionDTO(); + fv.setAvailable(true); + fv.setExtension(model.getFile_ext()); + fv.setId(Integer.parseInt(model.getDTOid())); + fv.setName(model.getFile_name()); ((FilesResultsClickHandler) handler) - .onLabelClickEvent(); + .onLabelClickEvent(fv); } }); } @@ -429,9 +450,11 @@ public String getNiceText(Map resultsMap) { if (resultsMap.get("type_pmodel").equals("LOCAL_PARTNER")) pmt = ProjectModelType.LOCAL_PARTNER; - htmlBuilder += "
" - + "
" + getProjectLogo(pmt).getHTML() + "

" + "

" + resultsMap.get("project_name") - + " - " + resultsMap.get("project_fullname") + "

"; + htmlBuilder += "
"; + htmlBuilder += "
" + getProjectLogo(pmt).getHTML() + "
" + + "
" + + resultsMap.get("project_name") + + " - " + resultsMap.get("project_fullname") + "
"; htmlBuilder += "
"; htmlBuilder += "

"; htmlBuilder += "
Active Phase: " + resultsMap.get("phase_model_name"); @@ -442,9 +465,11 @@ public String getNiceText(Map resultsMap) { htmlBuilder += "


"; } if (resultsMap.get("doc_type").toString().equals("ORG_UNIT")) { - htmlBuilder += "
" - + "
" + getOrgUnitLogo().getHTML() + "

" + "

" + resultsMap.get("org_unit_name") - + " - " + resultsMap.get("org_unit_fullname") + "

"; + htmlBuilder += "
"; + htmlBuilder += "
" + getOrgUnitLogo().getHTML() + "
" + + "
" + + resultsMap.get("org_unit_name") + + " - " + resultsMap.get("org_unit_fullname") + "
"; htmlBuilder += "
"; htmlBuilder += "

"; htmlBuilder += "
Model: " + resultsMap.get("org_unit_model_name"); @@ -460,16 +485,17 @@ public String getNiceText(Map resultsMap) { if (resultsMap.get("contact_model_type").equals("ORGANIZATION")) cmt = ContactModelType.ORGANIZATION; - htmlBuilder += "

" + getContactLogo(cmt) + "

"; - htmlBuilder += "
" - + "

"; + //htmlBuilder += "
" + getContactLogo(cmt) + "

"; + htmlBuilder += "
"; + htmlBuilder += "
" + getContactLogo(cmt) + "
" + + "
"; if (resultsMap.get("user_firstname") != null) { htmlBuilder += resultsMap.get("user_firstname") + " - " + resultsMap.get("user_name"); - htmlBuilder += "

"; + htmlBuilder += "
"; } else { // for organization contacts htmlBuilder += resultsMap.get("organization_name"); - htmlBuilder += "
"; + htmlBuilder += "
"; return htmlBuilder; } htmlBuilder += "
"; @@ -479,15 +505,15 @@ public String getNiceText(Map resultsMap) { htmlBuilder += "


"; } if (resultsMap.get("doc_type").toString().equals("FILE")) { - htmlBuilder += "
" + IconImageBundle.ICONS.attach().createImage() + "

"; - htmlBuilder += "
" - + "

"; + htmlBuilder += "
"; + htmlBuilder += "
" + IconImageBundle.ICONS.attach().createImage() + "
" + + "
"; if(resultsMap.get("title") != null){ htmlBuilder += resultsMap.get("title") + " - " + resultsMap.get("file_name") + "." + resultsMap.get("file_ext"); }else{ htmlBuilder += resultsMap.get("file_name") + "." + resultsMap.get("file_ext"); } - htmlBuilder += "

"; + htmlBuilder += ""; htmlBuilder += "
"; htmlBuilder += "

"; htmlBuilder += "
Author: " + resultsMap.get("file_author") + " - " + resultsMap.get("file_author_email"); @@ -542,6 +568,7 @@ public HTML getContactLogo(ContactModelType type) { avatar.setHeight(36 + "px"); avatar.setStyleName("contact-card-avatar"); avatar.getElement().getStyle().clearBackgroundImage(); + avatar.getElement().getStyle().clearPadding(); switch (type) { case INDIVIDUAL: avatar.addStyleName("contact-card-avatar-individual"); diff --git a/src/main/java/org/sigmah/server/search/FilesSolrManagerImpl.java b/src/main/java/org/sigmah/server/search/FilesSolrManagerImpl.java index cba9778cb..35d1dcc54 100644 --- a/src/main/java/org/sigmah/server/search/FilesSolrManagerImpl.java +++ b/src/main/java/org/sigmah/server/search/FilesSolrManagerImpl.java @@ -91,6 +91,8 @@ public Boolean indexFile(FileVersion fv) { req.setParam("literal.file_author", fv.getAuthor().getFullName()); req.setParam("literal.file_author_organization", fv.getAuthor().getOrganization().getName()); req.setParam("literal.file_author_email", fv.getAuthor().getEmail()); + req.setParam("literal.file_version_id", fv.getId().toString()); + req.setParam("literal.file_author_id", fv.getAuthor().getId().toString()); // req.setParam("literal.file_author_email", fv.getAuthor().); NamedList result = null; diff --git a/src/main/java/org/sigmah/shared/dto/search/SearchResultsDTO.java b/src/main/java/org/sigmah/shared/dto/search/SearchResultsDTO.java index 6055c747b..aba819b8d 100644 --- a/src/main/java/org/sigmah/shared/dto/search/SearchResultsDTO.java +++ b/src/main/java/org/sigmah/shared/dto/search/SearchResultsDTO.java @@ -17,6 +17,10 @@ public class SearchResultsDTO extends AbstractModelDataEntityDTO implem private String result; private String DTOid; private String DTOtype; + + //only for files + private String file_name; + private String file_ext; public String getResult() { return result; @@ -47,6 +51,22 @@ public String getDTOtype() { public void setDTOtype(String dTOtype) { DTOtype = dTOtype; } + + public String getFile_name() { + return file_name; + } + + public void setFile_name(String file_name) { + this.file_name = file_name; + } + + public String getFile_ext() { + return file_ext; + } + + public void setFile_ext(String file_ext) { + this.file_ext = file_ext; + } } diff --git a/src/main/resources/solr_config/Test_Sigmah/conf/dataimport.properties b/src/main/resources/solr_config/Test_Sigmah/conf/dataimport.properties index be6956ede..9ded00a69 100644 --- a/src/main/resources/solr_config/Test_Sigmah/conf/dataimport.properties +++ b/src/main/resources/solr_config/Test_Sigmah/conf/dataimport.properties @@ -1,7 +1,7 @@ -#Sun Jul 30 11:43:27 UTC 2017 -project.last_index_time=2017-07-30 11\:43\:25 +#Sat Aug 05 10:07:47 UTC 2017 +project.last_index_time=2017-08-05 10\:07\:46 userlogin.last_index_time=2017-05-14 19\:28\:44 -last_index_time=2017-07-30 11\:43\:25 -contact.last_index_time=2017-07-30 11\:43\:26 -org_unit.last_index_time=2017-07-30 11\:43\:26 +last_index_time=2017-08-05 10\:07\:46 +contact.last_index_time=2017-08-05 10\:07\:46 +org_unit.last_index_time=2017-08-05 10\:07\:46 country.last_index_time=2017-05-14 19\:50\:19 diff --git a/src/main/resources/solr_config/Test_Sigmah/conf/schema.xml b/src/main/resources/solr_config/Test_Sigmah/conf/schema.xml index 3190d72bd..905ba3062 100644 --- a/src/main/resources/solr_config/Test_Sigmah/conf/schema.xml +++ b/src/main/resources/solr_config/Test_Sigmah/conf/schema.xml @@ -242,6 +242,8 @@ + + diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_21d.dii b/src/main/resources/solr_config/Test_Sigmah/data/index/_21d.dii new file mode 100644 index 0000000000000000000000000000000000000000..7f3586c01d91862d9dea82180c4e2023f406215c GIT binary patch literal 87 zcmcD&o+B>dQ<|KbmuhAZke``XQtXyrl$%)Mn_7~{00gFYa_V@VazBpzTU&Bz+oW0s mcEJMSSxlm5nGBz?DmJr7bu+7MVLhNR`2|Qd2z+VRn+yP6?H!x| literal 0 HcmV?d00001 diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_21d.dim b/src/main/resources/solr_config/Test_Sigmah/data/index/_21d.dim new file mode 100644 index 0000000000000000000000000000000000000000..92753f6e17e662b91f84cf405d3a02635a3a74df GIT binary patch literal 795 zcmZ8fT}TvB7(Mrn>x{EbHWj!O!KOV}AxM!0D-E;Wq|Ap6f;M8IDFh|c$cZ9Uwn*|J z+NkiQAAB$fdPt~EtO567ANIk(LduPxC;}fPAA0HUyE830eef|b-*@gg_nd3J>#L7- zoj=vx-`(1h8tCnJ2RjDNopD^@xDKdxf9M;j{Tlsp?B}ri=J~B*s4-w2U;uT%dSDH( z7BH187?ONbGKGV8ucMvsUulBuPUZgO5meeDJ|%fb(8*Oy)fl0Y5<}lkxudFVr%4P7 z&4CC|?K2Re=@Sx_3TQrm4WI*2pq7OA{E2Aeuh|LF6~8GC=UPO@Iw1y+j|umET3i@i z7DMCnVkBP@qva)W?MJDN&CGQyTfDgWb)nc$pS2b5>GzVCpBwXDU0Dn%HGQQCc{(Yz z<=iy+9mY|^H2Px|UI_dSLAVd`2bBfR`7AfEfvqZuPCs6FFcC%@KH48t77T-b<9gr? zxf0kzPLLn}oCs{F-pW7k6`9K=;XH$IUe1f$jRPV#9;3@{FHaSBob0i=m%o(trXyNN zwH{nl;)&Omb6w|Cip+%a4#K81DEQS81({Gp^ep}p)6DjLoJ1=>z3VDu?_m#*o<%}q z85i;Pd$6_@AyV;Buk@tR#-=v{7MIS-w)sr&5M+l02gx)`4k=j9DVaxA3=PuSMC03q dPho4>-z;fRSzwHpBZa2hOY+6b+Hx`StFV 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%0DD}ZN!k;7PON`L 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 T(>ZjWw;w*U58yao-;W!AEMT?% literal 0 HcmV?d00001 diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_21d_Lucene50_0.doc b/src/main/resources/solr_config/Test_Sigmah/data/index/_21d_Lucene50_0.doc new file mode 100644 index 0000000000000000000000000000000000000000..b4ac3cadd3e38928334d145ad49c0d87cf376ae7 GIT binary patch literal 13282 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

=eh8e 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�Xed5-zEmjESj40z=@rJQ=|v^_zJ(>i~` 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

WGJ;-N@uO~V2sgW7o9>bK9 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_21d_Lucene50_0.tip b/src/main/resources/solr_config/Test_Sigmah/data/index/_21d_Lucene50_0.tip new file mode 100644 index 0000000000000000000000000000000000000000..00ed948b22b1780428a3626edb24e6640d3f8fc1 GIT binary patch literal 3670 zcmZ{nSxi({7{~9q=PomMwma;1EWt^d(gz=0z@;xXeP~kChbEdP?Mq`}fYD*V0jzzn zsiTZS6%=p-g}Py(6%12nEL2WCwd@hGo!Cco^=V?|jSup6?gf z{L~ce|Ai?bYUehK!LZF>iBI~<9BtS`Q524BH~pe~sc?NayEnPfk+oO&Iwi_rHbk!e zVfAKm41c+G8wq16q}9||6s|bgKO3=YJtMo2DN=d-8J>#Jtmf8nk=#b|9l>qjBnKTC zq`E_|mQa2GOGi>L#hw`H)#E!h>6T-OkVr&U#2TtGwiR~;S^OzeWXb)=4d#*q?nkaW9UCQyd~hu#*dPh)O8$N$>59KujN?Li=Nzfb zch6z7Cz(5;=Zoz#BAIQR|7pd7viQkQ72@5};-mKmI)@+Z$0>Rrna*Iy9DIE>pX`;< zjF`Pk=reH*2FxFOq)PIQb{|C5T8xhlfnK${$-Vqq$(oWwb^KxYm-r*}F zD_dknOi2ZAT%LrhFd{rY&c{h^7rmwtm+-V1VV9GSmFBHMGZw`W3v<>$;|IM$j6O*} zZ$pf{G@d;jP2*D)f{-R6#Ua#J!~dxNMAw%R*k)0WnuUWVb~J`Xg$4fG_0sYVV&v#R7v3a!3;Pt?^79lO zAuZJK=4F1{h>Qi?I>{$5KM;YZ*U($-^0m??$#Y1j>D{Dwxt^I_hgaE^YxJJqEfaAE z*}mY9RxV#)M%GY=$<3hNl^boaTnWleR#+|v<>nKh-1-ETr$G66E+A{gH%Y3?MxkH> zTM@x%E*=yq7u(HJvdJm3lk%H&gg5db2iZn>cRr2}l}{BD(#YHE$mR?73^!?tVv&&V zBBT*&`w3};*)nocQJ?Fk%Y_)Ecs5SxqCDI|VwKn3bYUhFk@AlL!WC7fl{~9*dk9lh zwn`6865TXWRkabCsIx~1Nz|$NI9XE7I0!*hqXb=&YQRd!!LcjV|7DR{>bo6;9O|L5 z_n1*_M4I#ph#Bg)05i~a^?0!lGf3zT1jOQsnv1f$3EL3ttrlqWwRSAo$} zaD&r#plI>v5GbDlhZplY!03Fiq*wrAN-TH?Cb`fL$`|42OI9%Y3S6?Z1dP540#kIr zNt_Tc8PN&8dGUG~Sh50q^WrVo*n4wek}9~t`#oTEE&ML);ZEvdPa0tdo8Y(e*a3FZ z3~qz?6qZ}yzFR*a!xy=&9PFgs2FlOjDPO?Gy5I}Z1IxX4z>=?Ezx(UJ=mGe$O~NJT zKu@&$V0l02iS_{Ki8d9yv07U()VDSrylmR^F);dYIw&8@0_7~wDs6U#CwjvKpD8Pp z-H<(&4altW)AFnGYI(h;S2L$MF8(Fn6(JI}yS3BWEWaYZTYgXdhWt|f z&-mN@ANqItPxxmB6b9S~cpNYgU=2JScr~y(up{tI;NhSPLFGXWL9c?|2Av4L5_~VX zEqEk2E#&tQXGmSh%aECnY^hkfEj^Q7OE%qE-QT(zU6*cBcXa;07S-ijpJu=E{^d?l Jac7_8{10K1Tp<7e literal 0 HcmV?d00001 diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_21d_Lucene54_0.dvd b/src/main/resources/solr_config/Test_Sigmah/data/index/_21d_Lucene54_0.dvd new file mode 100644 index 0000000000000000000000000000000000000000..5a204aa07cf54acdbbb1a767e7e6de19388f9fb2 GIT binary patch literal 1914 zcmc(f%TE(g6o+TpPI;Bb^dTb8p*%`?&7C{XmDaWtOle6eB`&lfP)Q6yqY#M+%9f?N zFmdI^P1(6HF)@)p!MJhbf@n5`bxdS^O!?j=PRxbQAI-#zDd&bghr=Uo1@(HTl_ zua-7Tik!H!T3FfGF5OS8Y^^Y8DW5kU`M$M$y?(O0_3_Qq-Da#TipSM)SaY7CPlLH@3jCdkTEGPQX;G5|-VY@+~I4ZwndV%xm0l}GnX#{5l{>%Rw&jeHVCVbI3$wCAXdXz$Yrl3(Q5^w1PDW!up$yx zDLoYnfZ}K*mE=(X$)iFiRuVNQrvw0DiR6?Z$th`?j`Qn^lhS}Hwi>F6IvDjM>S5Hx z!BC*1&DYexxfmAps+;3H9u9RnYIW4>sM*o-p*s}_1t+Jb`-ev&W6|-^f$-3vFu~AM zp|{T(2R+?At%9rV-wd))eihX-$kh)nw&uDER(`^Oo?e8EG6WjucwQm#R?1PISA z}v-9(d i`Pm)fb%;7fY4g@S%N{M4uhayGk!Rnr^yd2~H+};@j5N^z literal 0 HcmV?d00001 diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_21d_Lucene54_0.dvm b/src/main/resources/solr_config/Test_Sigmah/data/index/_21d_Lucene54_0.dvm new file mode 100644 index 0000000000000000000000000000000000000000..c9db62314402ce3551a78425a8f5b31a0f7ac4ac GIT binary patch literal 4106 zcmZ{nd2Cfh6o=>Dckg`*Z7FCe(AJg$q0)t0p$opsd#^kjTZ+^KC|i|^m0d_ELH4r6 znwZj{Xy7HCE>Pp62&cy|5qOSF7pZZ{R_31CS ztoBLkmu$v#VZqyI0t?t~^dz=WM;iw=5sei@b12ch!JrPC=2Bj#K{eC%peJ#LI@%&| zCsChDG zdfvXaqp73*4yK+9d3Du8M*dyzKyCov1>Xk|w}nMLC8Uq8mQh^xF#RDKjj_wN9d{w= zTpAYzhc^+^`EG=q&SMbFz<9<-_i2=>0a0`|Cl>^JBaK^9q7AUa%N! zAx?zd$C%d)-ivj{Ta#^KDcQ9yBY&+QapGZUeZ2CHXmq)l7H{`uk2IHas~B_bA+@U+ zd`L8+z(jBaI3BD3{~(&b5v{pIPk%57J|KE=SA7>{v?V?jE$*3C)+5?-n(f*Reg}3E zjb2~^m<5)CGr(I!vx8{OA$sD$0C=D1MHYM)WV9QiRJ0q&MtieIw3BGW^(pub2(N~h zWMcrB0b>8gG|0%Qd4pu@RiY;jdbIOeiel16pD6 z2X6_EefCb8V9AF&CMx%1`$oF(QY=>@nd!xksg;UhGofqlH2>hvueNi~{%~nZy~7ta zb0=J`2+VZ2WO}W`>ht_vbN#YSw;ir(XmPmaP_x5LZPy*XabL&#zT#VPSra6VSTHIIZa>xxZ2TrsA_pIU7KDTr)>Cq(eyfQqXn9dhDqj% zetJJmlV1^UG<@iFWMF(Ai?P2#Ig{|BRE;yP_G3)W#e}OW3WRFL#q05rC0x-ivNZ92 z%#2tB!-9WDmcVs1vw2Z?bO|%tmJ0mXF@po-*_lCjFY0=BLg$)HBd%TGw;*bwfp=>R zB)yRdjsvHIxbNmolC9Z956^{Yo-yD(q8C-scU~rB`9OIt=5n$z*NStQviHok?NX7T zCq$BFcw{=(V*EXME}g*^Qi;DZAKQ2ZmN~+NZR%X4(LOvn{)G3z=%6w}T{0V!lvC6$ z^Ms9;Op_RkIZeHopFsQ;jQJVzS@0a#3bujg!3*F;@Dg}g?*7sfDsvb!+f~S9Y_=z> zh*1O08#eA7ned2Thv%I#8Fy2Z=euy!3D0tSX6GQ~88yu^Y@Du`qxpyESMvqK73-QE zR(|2=!rybHs-JoPm?W+YUHPe|Zikf9We~93D31iCf7-M(ScNfbsEse8 zkhIJ(zw8jqoj-D;VBXI1#e#mVqS|4~*sTr&Po8ubE=zHEXU-JCg2T>@mt{c<9htjI zCc_G*MY`OWH>(JFVYnk!QM!t-2sWi%YqX;qOe5;oa04vmx67KHp}gQlSqpo3LCs+E zX*OF3FIBi97B7N0QmYnYbv?Yuk8UAZXq&;)(#!5_wd>vRvY+poe*(^)xgr%$sg?Fa zbtv+G3u$DEG`Ug<>D7wIAgh&IMk=o@@OsupSn#QyIm?1(oZRxYQ7Z0hnB5^y3$|8A zj#{AuHh=b5LFTyPGR z3D810!+l>ZHh3X< zlhgWCb0#-=zvPT`ikaz9R-a6!C;x&{H~eeWUnEN;8g7k7Kae6F;f{!r=m>|}qpdBW z*2qLO)YYEo428SKJ9XXY>gpIbB5mPtM{6X~-a_|sRKm#VvSQNPrHtmpOme^culLad z4-193m7Yw9{FI)j zPlm{3jhvpRcNXTHnK!0IUf)eG%B1N>6CyvG5qdV8%joeb!&GLcj5NJdY9`yi(0g5sYrlt|7b6Q6=t{{YzS0NsGA0Plb--FP9r+f0GqP~7;LRV4GK zk(v;3JuSwKIIXXk$mzd?F(W~Do<4|&3Z~FgsZ3nI99Sc~WeU1WLy1q(H;wdqHYPGN zMo#<+)#hjLGw1uj9zl&i#9(9RWK1EBmV}1YP_GnOS=;++ptgKB_far-Cw%N?4lKBf+ z4{e`5$i7C}Ec2cHm(k-U5;^+%EQG(ZUx{>KdYm3GGoh?z`BY{yNjKHWK69EPU^GuQ z2kGGwMo>%{dNwG`Jl$2(2Y{cVYK$RV$jTHy9xkM5nS*qr@u?f&!0c2qK1Cr>f#}6& zjb_o8$dx^{SUOKij1WBbL%{*8mf+r_rEqie)aY<2%g1R`rPvwNU^ z)`&w31^GVCuH~>BhUnqU%)5}KQ=rdelAo}LjsG2>kU~eu{2ZhwIeg2)E5){RrHGz0 z9%4uNxNaunB5%Z}(#bsq!(1t5K_oJ#vzw;r^eXwOjA{4*WS-ki2Pl;ao(4md%aYSy zAzUuu=?r=}uH$30@(FY0AK)_<>1>XOm>8izNExDkuWo|_v2;QVQiR@%hbhC1W@w{Q zSuqC;xunW?EAJ8Ulo6C7DI?$ts3-OK=gw4yaY=aSt_%f#hT%XNUu! z1|s;Zh&It9QZT3Urs&~p5kLS>&;_NTxv$wo^r_0Epv|h zCo;4Jk@iq6z@2;*1#{pp985Uh6yczV1V!|>{3k6<&0^TlQ%Mk}xDX$nF2twAcye;m z$OSKeu{gbjY4mab^z<2!ZHdy4^5zxERK2oyb-3T9obOvTAks7o~mGXg%NF*l>N|o~E zkr+Kxh_3c~0B-G>(sPOHB$1q6WYvrT87r)tg+8tCyNeb!rRNs&qbx>2nAYj&%!%pb zY)gR8dmjjkQsR1I{$77(qS z^r95N0wd7hTtHB_K`gBmKK{m+QrLt5iJ5FL>$y54_L7A6oTsB1|Eg`5zuCl2@vcah~ zDv4ceC`UMA%Elb67Hw%cwJazKXcA{(w_ETrHW zI7XRkHkqomf@W={^lBn}kNYX3QsUJoeF~gzgRRnqbTnp?^azR~!!r8;y5>05#WiKNEv&R`vI18EJ0JgTusX-apJ~G#1Mky z=0BEgUb`l~A|!^&8>}Y~8)^Dlmbc+$1eFLdwFH$Ffd2tl0ZU>d&6LJEf`4a1M5}g8r+}KjNoHR4{Av9JN;}fqw|>V>h&0MySN3j8Qk$rmKL5Fqll=Cb8pz4kkUpR!`V$ zRu;+dwuFyLb%qE^jUw>W(@Ds#uG_1UNBcX zZ3BP{L4=e=tkzumxicI$vQBrDKnQnIx|wxS9`G`CYM;HAfJMH@<~2erM>%@!gwV^a zMamhBUc1H}qs=VrQrf6eAI4!ST{FhD2=80)Qe+okZAL7yHY)n1cI(RkCs@?vgO2S4 z@bl*JJVxAQT($3~t)12>#hvH$PfXN!Eyr-!Fpm-f)5MKZnGTh!!REflv$=1BY%yRhDx~fHncV?8%}p?)9*Q9jSc2Jcs*BVdwlGD zge@+<2KaidF3`Totv2mJxE)nx55N^rq`&PEdVCFFx0;yF%%sG!A9B7PvMYk3!O-{K zFOQ96jd*h6a}`eYN!6aiSz-Wsp2~PWDcQBmHPB=1&8B{1i-}Z5|6T*ZVUx6l=tgFG zx6L&TY}N)L_#0(v%1x9#=}kr86n8i|nI4dIN~lUQontr)!xKh6K83~Vbkv5(#wfRC zjr8%XHcry_fTL!DbI%*pr=wo~O6u0uqK zQ&gozYt9DSOYyW4s_S_o*Nmjb7To3ffqh5Ff`0uRP1O8d#JzJJ&xGqD%g9K7Y>P6wX1Kp! z>5q+UAIGVowf%klBdtnJ>xgDiw|!G)DRoO9aJbGX5zS~vd6xxFm%#LHo+a+1oFEZ; zpB|@Z#uBkzk~9e>WK~~;?SyzPu<8((PnMjajcWi0p848=mt(x_?I#qcB5j!EbvVLFWc}1$*~UDx$vwA3=M2*5`lT3 zE`%3crNUHJa@Dw0vEJdqEx_BMhi+o%hZv{8?GOPE6OqVwAUmW1Qb&}h8J@+ZUjzRo z8zW9f5tng+EWyRtLTm98+h#-16<)(jC{v|LB{BmZE9Xy^S+fpr%g?OQO__WP zuxbWRmwV^F_o(I#uFZjDv(fxRb%HKRuyHSMN;K73eM%3oqtbjRo4aUx5WbZ8NyrS0 z5QRr?l)(1Z@&N*S`aN7eVuO2REfVHKA`ppmJRpY?M*Q+J_PiBNu$#tSJ)Td^o#TYF zd=RRPQ8`jPc35GFu$IVn;!+mX&D}wJjPx#J zukUjVDg+K@ja(C*!U}DBT?;9I8CJV__J6Qe(@L3tNBK+2#CHj*h z7W)hPh%zsc?J0p1D-P_X*d|sn+gU!8AWq~zQ{op(aJ2*;P%f7!m>BRnfEwUUr3;nO zx7|<*P{P@H4BWuIZg7AUh6bS&yB(!qIph{C-A6$_tJE5YS}}CQ153d(rY%$3M#0nJ zJ3@G^CJ^uqS^mcGRSPBT4$&q)@LB$V^{w64RuOzHSJlx?8sTtby^%{BDK{$--9DWp zji}gmChs8P&;emnj2y3N33&mbVvKXxZr9T9TZbsC<&saAqN}noD4?omUKu^z;Wb3L zw6#W4dLc|2K&v!lEFu2v5%8(MAy2-(ijs5Nu?nD zCaIUgzpEkUWM3<7(P;QOi#O@2;5XJqi4~m-xB-juKUd*uJHOM*Uf@CmZg=2Ms@2?5 z6@KKuo|J}EinQaVrArhzDpAE(UIN(RfTJ#WN5f6XMr2i->&?zlVi@gj`UCiZ2%1RHAV!(sG}k?xZ#q@Pz{tB2Hl z(tq{smGy>LjVdW&YeZ`}d={{tGI-C;KCXp?kbY~k9)%v$FZv&?<|ljZCKO1qB1roV zK5jjvOq0BrOdIC+o*^-roYZ4Be9^*)Hl1gqB5U{4)_z#KpOmq9PTx0|LbY(cg?$V{ ziEpb1m$f#TKf?uAf$dBf3sNpxDUJx}va$0j*jNo5*WlZIgB6~yfDUVqNm|rkog7Ct z%3z=#wgVe=S0=k^V8q>^=NG|wgsn2fA`8YE1=m}B+55_c8DDCJni`0g!@C-Vb87BV zTWzm#rfT^}V%{R1@-iLz2IfnU40CJ=t0pzudzggrOgcmlmKEzHh?c3a2j`9NFt_4C1;)}a=kc@?eKX=-QdV+MMK1&Q~I-B$yp2?E}+76rc83# zQ;eSt?9U5uze^kchXz}V*-njJE#dVp+dcxH&bo2qCw6!l8U{!9xu~SWDxap@>=)*2 zxeq)1Bq*2-4chqiLesYdz{O&u*G~MP+Ane^*Qn`7id6HCI_;gO{jnqo1gHB5qCV)f zepjouf}@wnOEOxvC^K;tTbNA$9cq^fjwI;+xC*!rI#o-Do!6)lf;ul-JWO3!)6P`O zQD;j;w1h>pOGG}mY_1;MNJqH>9}2cE7B$+ts+8|HA;1G ztK}$kiB8H}?UcD%MT>|&?gqmK|FmnX?G!^XE2yI~_*V%hM23_;Hz~Ie9#Xbh0c#+# zMOku3<=C*YWSbZ&h2nwH`b*ln1u27jJKMjsj);Due9z0!3^B@hEvGtgu|>q%H4^Ud0)YHj*HD8E^R$GR+sK#P}@5p&J$Zh%@td{G`Isl-zXbm$k^;8Fh`3ZOJ~BRZ`N z?Ih#QKINCD=^o~dT(&qp-bNe?cdz{Boq{lWbhL0K}3m{p_6wBjm;nA?~9&^MGY%w+DMT{^eUR!mZ<$}X_u;~YjTeU$T* z*Caf~&0Hvb19BVU6AkQ$bb#75B&g=hV`coQAJ2Ee%a#arG^*|Rr~tW6*@yTGFHAMy zcu+GYDKoYOu!a7o@{AiEWooReM9Ud+8wF{HTQ!cz5lWgT1BUFjXKF2G9h_6-RUWez z<@y&NC=gc5Q6uD`Cb+&1-?O}xnpf~h!K4ORDw(KMP-fxG^mLy$n;}X^TIbQmFg4|f zOkDsFbi;=F4m~FhTcHbZfW*0tOuDBW+F318$y(S_509%2x%_W!*lfeKh<^gOe-ZAr zvK6&j{??G+NOzUPsg3+w#?%tFfo#k6^UbFwHrLclUKZscc4 zE>#M!f7~Fxo!f0Jti}f^rIF+^@d5Bz1%F)y=UO$ru0j*LZET~ZcfQB99(AniH?EUTcyXtmu@9jiQBcN>g2CVoxP5x7ThnK5oF% z18h|3Bh@IsrXHSTbwP0|gD*k(5mP7kl!ptc#P6JxsP)81p7MriNe2n8ES7MA6F&DUDTeE+HFL`n{t{Ep zX7G<9zn=H_)YScpz$1J0XNCPG(3YM6TJ~wgR3&cVB#qw1aZ|&>LiRA@b{wOPr7deA zeN2DKp@t&$_^}0VmZ26Qi^C)^=jYN0&xDZD9&$hwi?)he6!pQ$b0z0zTty zhltZBV?KwG>XZz7rVQHX0N| zeXHnGY;-HDUEOrNS0-hYxZ+E0{Igq&x2f9X@530ffY;5Jm1<^f9oqw5(5)09&!^3@B_UBNotxR6DuKWMEm$tz)`MC==ctLhGl zje452B9j`NV^)03PFs2+!-2{$725TT?O4Q##ILI%gfnE28j)U8dVu;Dl%aD=iS&HR zeACAOHre3LDp*wZaFE;*NkWW!3d#Ip&(OS-sNcAl-BR`iwacm3o}BM-rssVQ<~3Db z;fY3Or!u3|tEjcZj2}z|cTtxR**_S5B|{0W8XRc~wt6IA3tR%Vdj1YSyejd_H7&cl zz1K*`ji;zrM*3iWTxFXaB!2LooUx~HtOEzJhmb+*4_rq%wao}R%=7qB0+}O3Q&ssxynQ7Q%|Bh2a+MT7sksAxuhGXVhOO@`W4)4CREGYHjWX zfRD@I#}+uQ1CL)2rB}Y}7$f3LL1)w$Z$LlQD$>6e6vhqhG_3{No=@kMDxw%Wda0XJ;@1rbuSsm7^m~zTL2g#zz zXE@>5y1HD#?d25>;Ix(-(+()HsfC&nZ{}FQ+c~=jwZzW@*oqPXn(Jz`iQ7A+yB+MW zcIgV2bcHn>h(-+nn>ec;-vvlA_!jVcCl+Ms zI9N$q!9^e=nL{1}HS3MCSvPx$@jHug9l$ZbZ;|j-kL3g^49X(JevsaSC_Vhk3=S?} zs|56cg^FIC9d5Spr!Dvn>zS8c*Hx3_M1EYtKEwwYR{L-YEc>ZD&fx-tzuP>Q`K(1^ zTIHW0L_r?*!MZkZErl$}Tihd*@&Aj+q`y1d)MkUIK`0V4p5uFZiDM;@VDRyK#}NYIOT>DNLod_#R^WFeHu$9K56n7(ierfv%a5X z%H>})@z*Oqlf^rEVyjr2K3U*lj{oH#mBTKOUo2L|knb}_# z^Fo{wiG=CjlU6wF({|@2tU}lbc%MT)nZbr?=>|*gXi%guLPdI+5rmdP z{&HD*z0Mzw452gucrIv>lUn!&Mo4N~MpD!NvauKI*)Gs@t&{cF;?ot7CDACC>+H_b zLYg9*i8SB}A0PDM7+{@OA+qvo9v)1`cT+^#C7W0Ba}vqtES2e3I7CY<`=uEDrt%3& z_gRFo_jm`pzdcIg+7PwNGU*ZxAM<#VcLnfzWUnHg?uK`5^7Sa40&v(1|5yZn2VRA? zoie^!8EzIM)n)3$r4sB~6d}XGIgL@WZC%;{%c(#W3sQmP%_(CdAG#P}h21-MCSx}O z|CfYy%dVr`HaJX8;e_I4unPDcV7m~siI4o!&w*qy@j7SEaUO=c<>D7LaF{Dn9y#SsYC9bx#Q9w*U(ZKJJv`s!CTOX470~Wkhf(~eG6Yoib zqrJo81<9heF9EHC_NuxL9s;~gX_EfvP-qXsb2OMijjOb_&QExHR4g`@kcrf z0=5$FV|^4Y%}=oyt?{mVEagpqWNk!bZ?ibB#xR+v)&e%53mnJ<%4#(3{<_mBv3GXWMQj+gpwf{2#8RSQ|eU*^g@=H8$qP; z{p16(5P`V22>#^j$;30M8&Qbaud3ClLS;|dR5I&hb@8bm+AaT88=J*KG#C!MPIJJw#1>Wlk^|0M7*$B@s}fDY$2j~4=37`{4c2?5 zF@>ZQjarzw=NG{ReU|&F?bvF)q)g3iEtenW)(aH83FU*Fy|2t?>NiOQR@p%pY;@M{ z_CF)J-UhZq?TM3PvW8KN;6F>%k=`s?=g_4V>(S?=507eImrh$z{Q6@J$APBvp(oOfK*St(Ao7>b>U4#Vl0= z9>$xN!rxlLg|xV10enOj0)&R(#d33Uwk$Ll#8g;r>uo^y}(a!R~&4N{~^yzcn zIy1AOAFgyjznewCr!2Q{R)ulDX0Elt6D#4LVSYoY{6aakl$q)Bj~iFTNX3~pj>kAb zl{OK3rhZI}65=*K<=)-_S2&)^e7sEF%Hd=ijBxBILb-3%yjRV~__Hz$y76;6+{Stm z#O?OE;r?>?wv<;mH&e^1kg9aDKZA5^5j%|Jxr~!# zr<2qTCGbjUzAqRp6=LEARcfn(2kdptai=#zO6UhArRh(b;cnTn)kci+z2a-hS-4}q zH0@lfpuf2}fN%;v97s~aAZVNv%Y+|@nkE-7UN2*#64{a5DgI{%*>)3%>FgoED)2YQ zEix`@v;NG^Ua-MCJV$Fme%izvHjn9BhNoMPx?>}2SM_&`Rk2ZW>5UGPL2Ju!zj$Z= zg<^C~{}Z+g`o(ChcSFB2cxa6}Wpl!zCV4>_-tJ}tsvt^H#I9S&AI0Kn%kn-l{fv7# z?iTQ(Ps=3)ABd{i;u10h;%O@TU74CXqu5db?D9@oY26sgXF}Vo)~6&yUQ+mBr{!W^ zsx*0e<{g=%GOArfHribL{K`5#eszsxZ?+!k^eXQIWPR-49M^-i$Bv&?6pI^WborF4 z=KHGqjdVyM?KPE^wcM2@@Q7^r0!HV}Ho|Ymep%YN7%q_EBe|W9!Sgk6ONot-G%H{tSNnI6|m!xnYlX|FyU5}e7D`s+kcEJ8B?AFMUxc8y}dk*Cu2$Sf&r2|fF zkd^{g@OLQ(O=t5f#AG}!LYZ`p^c54KZC`N_8Z6>c6K%$lY5*Vkb0#jY!1q?c-?h!T z0@bs>m9uxt@uyZchc>?iJ1oA8G|z@D65CvYhA%cp0r9CdLMiJ77pB46bVP=_8hA!x z(K`HKfj^%)(*@rMey}D&Euc$6aEgV$XQw&Ys7g@GP(b z$6EvNq=dBsOx7 zq?D)+?+ph74MrjvoHr>1Ti=u}qMvrsL&j4xod+Y~mZ*qNXQL2lF*-@`djSvA_u9n? zWE~Ih-8R35(miD4JI?{sM?Rm+Z`DSKNxfDqpUm0CB~%j3n;YejAoF3h^uY$(dV33z z{Ez+YY0ua`BbO0@)63QLoE2UK>$;*adA(ER^?K@9#+MiKD=f}ay||LW9`Y&_uP1{5 z9j2!jsEVR`^}AKVzm_^btVaB|9HxfJdoqwOdiviMxNs33!|{S;)NxhwuTn6!U@Nua z7lA@1%=Z_|gcq&@q+|I9F|Xg47hti75`CnYD5}y4lLnGa54Z6GsB^pRXoBrXCy#(- zF$bF+K2ReeWpY=oYP87&b^qzbjlJYCX~OR~yoz3vZ?ql47%gCKXC-?Ac$^xwbz!pA zz9aBHviH$_t38CVa;2b|FRwU{7z25vr?dKm1>Th)T}1lfTIAS9ow+_IbVzV%XVloM ze2Zb)t#er)odLn4c)JxJS;p4SM?!zn%%uNBB~(#oO9y+%BUosa!XyCfs~MZ4WM}O8 ze3LgYCaKA{t4TxlPZ{qr+ZWK2C(Fa(PDlVGuqi*~T)O21iazs~8-XB=yK`PT9B!}8 zWCyV{^Sy+5kbcH6;X&%sZLYBdaKB09bDoy|Rnko*KsWrjLfDB16g-8=%d9w22e*Lq zNvR~u+*X3mFX)>e3HZ8(jh9p<|2v3#2v=0d)CdSU*gp_{Duv1VYi$YByESisA8|Mz zB4Vjwd?CDI~oEQfnKY4V}ec(h$PXq9ecYWqFSLu88!DK01BWvsTQ z)<_@u`IjV7`Xe-SP;QGv*7qJHrf3ZYkHiT2Sj*U!=f#$JR;K(>}Y*Tjzl6+8}K?+i(SN^9KwA{#tQy~ zvfN4SLS?H5{4r&PMQ#0a38*kk9j~^q9sCjc)Du&3ISoikoKxtf;N5yf6Lx{;WRj~R zk#oTtJ$Jsnpf4p6_9XC*dZ2Y&Nf8Aasv(gT*sg&{YozrxZ*6OY{DO~xtqp2BqHnD4 z>4%+Zj!0&;-7ww#%4QTqkD;!IuUJ+791OC7YgC3GC?H6!< zmSp)6$E!(PpRAE@s4HMFv#G11iTLF$s`%Am}vnOCm& z=0DfuJ0$514$i1bz6Abm1a@#WcLf1kKU7!{JX}_>Z2^1CE^!&C)A4bkE(o4g3Y2D+DiIpRILk{?Hs5B&<-o5*sQ^+b;c4gayd`A$du5q;`bj6E&XR@UFLNkraU72PCSPr+52jJ^3hlC~|KtPK5c zEaj2fV)ILYd5>b7jas~29#!nJ!A_gMDfr5$?F7D96 z1m-RuI6x9ZOBY!d?_C-tgW{>wfvAC3S@4uQ~f6Ll=YJqb&oxg5lB%T;2rdFDA`y4LBDA+gAq_ zL}|Y*B054!`a+2G4Q-K1__PP_bm5sQ-0FZ^s;#dwxDVv+ekWNK|6+yBpiZ1pPQ_s_ zUrpss+zpncPKZ0$$xYPm<83~62Ui0Ey}47@Y6dAB%VqgjO!_|#jeyh6id>ODO2b)q z)?=oUSQGXTx;B7mh&?t>+`CMRh>hXVDdU8ShGg#bV)lzcID<@4bk!?b;3{_y-K^o+ zp_0-#L|`gmTpd*nnq)IesX=@sJWS}jL#!TwKQjEUFH1BbPe|0aV+*;Ovr|tv%8UZ? zt1TtUeg=jIPKVfBNZ;G%I3UJTB#(>0sa29g<~p^Fe=EbwbYNeoLc5ingIMde)XT0V zfS0$ZO<&-CQelz_vXuu0 zyDT7asRPKRHWDJHHSy=k;q82foUte}=s16=Qc_D+1TOuhs*>+xL1>~fbXZOjs8 zaIKr70ai0S0r|hJ6n-axn)z3~^bWvg-~9F*UFeTbJ+Af^h^$`ju-?Gg6B1Z<+CSyt zLN@V0i5zIwf_GZ*x6E3G@-Klpl+v#`4>givC+!6M9oojgtB}-lh^r%Cj*1CUqrv-S z@Fy2_zn|>l-&xh{vuokBg-9mJrO2M!3D5NRj)_8&KUw5&%NH|AbCj=gH}katO4d2d;QhGf#l>yn_4=Kvs zCXlieP_)d?DqyP{zTBy%4n^S-A2}>nwJgEyirRhBI)B2rhO5cyUGV90)g;%%pSD|1 z(#QvLF7_nNX;ZSpQ%oJdtO9&qe>%T&Oc?Vfbj^u(0gx$os}0Wf@<#($2ILkL(|=tw zX3P%|j(pdswNx*d_YSp-5wSp>8vttfy&5h`j#2&onADtFSRaDtwhDdnIk&1qm3&GC zA^TVB;jt#zaUArr`pm@51gHMIod;;LudRU+Is6&@)B5m^@|nMGRkJT`4O8^}aanAB zu=4XUzX-IIs``EP`0HJ&{$p!#(}|Ax9!i3&TbF8DYW3o4GbH6v51J-{W)@po0e>m6 za79c6#^+Wo?43+EiSBiBM#6XNtREbsDKp0t9Upnd3maO%U%}2SVtw1-*`}D0*2kah zr8^AM#O9Y#_@Vk4)};xTK2R zSt5N%V&&2W^+xVJqHmObV2Bw$7b&V{;pi;)R zdU=%w{et{DJwZ6T3jQGBPpo*B1`Dv(oLd-&n`+>72Ut0IXk)u+r0%9@n7jrrxI`+o ztQanLh`srJ3hdkE&6anxQ!nP4ar~*mI%KkiO?|VC?`*>BP_%4wZ|46;oEW==Fb8;y zOudD#OM&zQsySO1!$m++#ccph^rR(tr3??s)cmbYn~4RU+qK4;=?+Zo9EfFR2Vpn_g zR&f-G*hQl)p=e8+5*RkJx%XUZqRJ+E4X7ESx7lROF*SH2`1>*|O35lfZOy{P%Y@lo zx(gn1u`_@-j;W?&-RG{2@zptfHnfI}5kX}W*%i0bg3^dxS4X7jJEQ^855~W1*I4QMiTdd?(U# zuQG1gq2*FR9t;x!#XfkLRwEqlQercDG8HI#wp&c)^V#ktOJ-+hn@`8LQq4rDme9eQ zpO7}~V9qz-GPxzy;WaeiDw=Io*_Fd%LoX^C|YGk9YF?ybY`i+WZUl8I-R z?a7f%kM{6+u(m<8w_Eu!^R$7iM*j$Vgd%p(xa^Z`z6cjZz&!~)sBfggCf05vk@I7` zwp-}ru%4e7`L`Fk7ts9ltsP>9pjFQZvGU)sw`Pb4~fjg3H4H5ECm~}ItzOqisn4vP0-YoPSX(+H!ro^ z-XR^wij?CR+!ls!+T{aNM8|SPtMGnDk0G{;p`VKfWH0G#vcj zh_h+vx3ZNqNmP7nS8b%lX{AK{ujSwbDK%U>l_>%(xKP2{WFW`W>CNi&cr8C$g(nqw zc1T*en0k`ta1k+#$&jkF>bcNN%|W9%I~OEB#d(|^80H}PN#j#-K}zrG&+MPj`u!kfaB zcQ2D*q20QhIQYyEe#oiM2jy&xSRQrrYa8GNsLdB%C6SB#fsaW13>t2-5ZtAvZis!;XnavQ%Zk6Z!4M(UFbt@0({{{TdnV|JUa?CZ zXpQ2Z(ec!LDP?m-aI6Ccb@)L89y2C|qj;$uEn_TG$9`=0^fLU+DMB;}v|EJ8Upg&9 zS+h>_n*culc@~V5wEl^~m;YOOWYgXQy@|v-3@FJ(d z6p6DI2468KaQ=qItLv#<8(k@4J4@%s?>8WgCJfO4^wiv$-UwN1?ih!BIX+MJD$a)# zs9ZzFGg$5LDxqR6C3(WM>eFj|sgYyxixyZ`;>{^V@C!?hiejE@%;!6>#e$uN)Lw$) zeZIuSB!zNzY6R9#)9t$hC;wv;)<%czGu#0Ub^)qgKVR&vtMyldw4Y$bb$a?#E47*rGOBel33yxLH zazvhIU5U)J#af#%zj8SIfCtym^cMTwa`u@U8`c*!S*;>u?wTqQD=h3;-^ue5gpr>s zVyfENE7K&em*IyM&@1~*(Nf~M3LRRfQ^EnJWlxcNDFV!240^i20e8yB>g056rx`_4 z9JJ96^xKLuR=fNP^_Xhmo(46aqx>D>qL6-&V@%+?9B0t;tgEr6^;wstrjC?f5VXL+hXcf)eJ6Gs)zpfXECTR S7`WgAI&uH|_xdlttNMRrutO98 literal 0 HcmV?d00001 diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_21e.fdx b/src/main/resources/solr_config/Test_Sigmah/data/index/_21e.fdx new file mode 100644 index 0000000000000000000000000000000000000000..098b689e5c7b05bcb958c74656c8f19e5c1302f2 GIT binary patch literal 85 zcmcD&o+B>nQ<|KbmuhMdT#{dun&Ot3nv+uOmRMZknU|7U!N9=4XnH57j^`=&EwkZ|04l0PwPST-u)j_J&Dpf%chvUe-)Pu{NBp0a#JNOawyEyw9 zL~wBv!7m}2UQMZD#s|LTmY3h}f4P^-#~mDrM(j-WB8k2%j_Eo3S4_s@cEpRPw5j`seXmeg#YZTW#Q5cnVhtN zxPy@9>H?PjbM$Ir{<|nd2h> literal 0 HcmV?d00001 diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_21e.nvd b/src/main/resources/solr_config/Test_Sigmah/data/index/_21e.nvd new file mode 100644 index 0000000000000000000000000000000000000000..afa86cc58d47cf1e1c446b625af789f975bc7c7b GIT binary patch literal 59 zcmcD&o+B>kQ<|KbmuhP4mtT}y?2=fL$N&VUcXH}@o^n5q{99XcY1^bah65UtUw|Y) JVD9~xQUHTT6=47X literal 0 HcmV?d00001 diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_21e.nvm b/src/main/resources/solr_config/Test_Sigmah/data/index/_21e.nvm new file mode 100644 index 0000000000000000000000000000000000000000..75ba23d84df1228632d4720dff999839fa467f59 GIT binary patch literal 208 zcmcD&o+B>mQ<|KbmuhP4mtT}y?3-GWn37nM$N&VUcXH}@o^n5q{99XcY1^ba21bx5 z2&A|{Xa9X$(yq{Y-S!@1bEUhY~46CUB}(m9k<=}O#}JG z3)z;h131O283UwRM5H7U6bt3LET2%m#6&zPEFw5t5DR~}z%mm^!zCsIH}V`juJXXz tP8n491Z4;gVw6BWpbQ5BU<#3T-1jbh@1oy7RbKWUzKf4kl-rM|$3NGGquKxf literal 0 HcmV?d00001 diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_21e_Lucene50_0.doc b/src/main/resources/solr_config/Test_Sigmah/data/index/_21e_Lucene50_0.doc new file mode 100644 index 0000000000000000000000000000000000000000..12fb510cd44a4d0e9c8ed72da9ada750fbcf86d6 GIT binary patch literal 110 zcmcD&o+B>lQ<|KbmuhMdkY8MqnU`K1UX)pqTI7wh=DQOv5Ir#$`lV5<$00AreH$MQc CLmqfawwq9xe#V1lXFLI!&%5B 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 KTh{#Z#{UBs*ALAA literal 0 HcmV?d00001 diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_21e_Lucene50_0.tim b/src/main/resources/solr_config/Test_Sigmah/data/index/_21e_Lucene50_0.tim new file mode 100644 index 0000000000000000000000000000000000000000..73828c1eda2bd50cee65401272c9b0fa1e8515a1 GIT binary patch literal 20942 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 w?YA7Tp@97Hyot7!;tG>j(l5JKBu`o*rW zApSGAuCV~d(Q)mrGYf4?n#y(6nIDyjye&Gb%xn#!O?MwnG9Rj`s}i7%_l+L(ZIn=A z?bxvU@YZd#9Lx?jFUR)0>T6i*-8SXn_c{!oFEo=oG(!pdUIb?&Jo{X(L&fLUS7m%r z3sI;QTuyda9hSlQbT5VX1({mWFkhCD6%Eg3<*OGRm$JA za`mQG{;{H!f0nfJFTK2;)Y89a^m17%*E3rA&!k?~nuvs!7KsJhuo6LM+7GXDak>FJ~Z literal 0 HcmV?d00001 diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_21e_Lucene54_0.dvd b/src/main/resources/solr_config/Test_Sigmah/data/index/_21e_Lucene54_0.dvd new file mode 100644 index 0000000000000000000000000000000000000000..1a2bad95e768a6e126e4302aa5c4bf92d627be05 GIT binary patch literal 94 zcmcD&o+B>mQ<|KbmuhO_lAj!wm{Xcs?2=fL$N&VUcXH}@o^n5q{99XcY1^baE||)A f12<0}*LY(~BU6w%5C=pb(3t!JM1#QLlQ<|KbmuhO_lAj!wm{Xcs?3-GWn37nM$N&VUcXH}@o^n5q{99XcY1^ba zE|}_g12HBsMuz`Tz{$x7QVs-`VhnImhzNrdOpXD@aFb?|MrdYXL5O2$_JYa5HT!We lu)yqv+Th11dRz9!*#%H81A`w(0sjGw$uD3+Yo@wo0|23wO~C*F literal 0 HcmV?d00001 diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_21f.fdt b/src/main/resources/solr_config/Test_Sigmah/data/index/_21f.fdt new file mode 100644 index 0000000000000000000000000000000000000000..9fdb5b689588a1d694506d915e149b10c804681f GIT binary patch literal 5345 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 Gi~k46gl9Sc literal 0 HcmV?d00001 diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_21f.fdx b/src/main/resources/solr_config/Test_Sigmah/data/index/_21f.fdx new file mode 100644 index 0000000000000000000000000000000000000000..159423198c9beafc31f63650eea87107721f33ca GIT binary patch literal 84 zcmcD&o+B>nQ<|KbmuhMdT#{dun&Ot3nv+uOmRMZknU|7U!N9=4XnH57j^`=&x>fUjS8sfm{BaHUQ!T8#4d^ literal 0 HcmV?d00001 diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_21f.fnm b/src/main/resources/solr_config/Test_Sigmah/data/index/_21f.fnm new file mode 100644 index 0000000000000000000000000000000000000000..47533d540076068465d5a87c868a93b6ec085ad5 GIT binary patch literal 1858 zcmcD&o+B>gQ<|KbmuhC$C$ zl6Xc2W`_Szz$6=xS_IY?kY8MqnU`MdmS2>cSfZB(rZ^x*n;PI!R$Q8vmRZ4Qz`z+_ zmReMtnV%QW!N9->H(m~Ayi0y^SYl3TDt7ZtaH@k_z?PDq9G{sY#>B`BGo1yOtI!;e z({NOECb*1)xdEp+Fa-=8AV-!|7NklKYG(?jW#**DCzh6EkQ<|KbmuhP4mtT}y?2=fL$N&VUcXH}@o^n5q{99XcY1^a*h65UtUw|Y) JU~<%hcmRT?6+!?2 literal 0 HcmV?d00001 diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_21f.nvm b/src/main/resources/solr_config/Test_Sigmah/data/index/_21f.nvm new file mode 100644 index 0000000000000000000000000000000000000000..7966133fec23f8e95744b1dbbcf9a6ab2c6feeec GIT binary patch literal 208 zcmcD&o+B>mQ<|KbmuhP4mtT}y?3-GWn37nM$N&VUcXH}@o^n5q{99XcY1^a*21bx5 z2xPcHXa_c;8BlW7TVgb^CYMn3 z7cbsK@K1=Q9}~s`fj7_le7s4H-{alxBn=QjebYr#jEESMkSdB&vp?ed_E+ok`sYr( zy*xcgOsUJQ=7n6fUu}(YbrO+u-n#WOA7qF?%C^s$AH-(CY?d&V!lI*@Hjr@d#xOSGVyHz&?E@R=4a$Mff|=@L*td2HHA{(zFj^2h|K_<% zozs*BNDbqZ&ors7g0?JR0lnuqy{Wu8i-KnE!G({Lj$!M@k?Hgu>u_MTyPj!;Uim_{ z<>>%scnQ;Uj0P*1G+eV}b~1FYJojQaJX2l|p1;eFR1|xB`S=G3%A%M6 literal 0 HcmV?d00001 diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_21f_Lucene50_0.doc b/src/main/resources/solr_config/Test_Sigmah/data/index/_21f_Lucene50_0.doc new file mode 100644 index 0000000000000000000000000000000000000000..05fdf7d5510a0dd42ba947254be39827b9265331 GIT binary patch literal 110 zcmcD&o+B>lQ<|KbmuhMdkY8MqnU`K1UX)pqTI7wh=DQOv5Ir#$`lV5<$00Ga}>9qi` Ccpg9i literal 0 HcmV?d00001 diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_21f_Lucene50_0.pos b/src/main/resources/solr_config/Test_Sigmah/data/index/_21f_Lucene50_0.pos new file mode 100644 index 0000000000000000000000000000000000000000..d14dc838116bbbf00b32a141930164f75e52003e GIT binary patch literal 3306 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 Y8=cPZCw~8JANfb-JDrdG$%PyK8@Wy(w*UYD literal 0 HcmV?d00001 diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_21f_Lucene50_0.tip b/src/main/resources/solr_config/Test_Sigmah/data/index/_21f_Lucene50_0.tip new file mode 100644 index 0000000000000000000000000000000000000000..80de34c8a1f34bca4d1fc9ec5bde428124541dea GIT binary patch literal 650 zcmcD&o+B>ol#`#F9a5B<8j@O+TkM&al3KyQz`$&JC#R0*Dfi>ZzqKWowoPi_@+nPD z%}X^kh&QkYYGZZ_4go4-Wnh%lxmc<)y+G!DuEgPNfwvi4bJJMno3Lm6mtb&mW?gfyofnbl8X)9 z2~0m8VQ~Tr)6Zqtg|A^1{=EpR@SjOoh5zCZK898GKWt&d!t@`jmCTJ;y~Ese2%Fi= z%}v;a_ko4Ymon~QT*0)T=^E2prWWSe%$t}`GCyGc&fLeclw}VKDDoK?n1T;zOnw1j LGcaU)3tI#L9PFNl literal 0 HcmV?d00001 diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_21f_Lucene54_0.dvd b/src/main/resources/solr_config/Test_Sigmah/data/index/_21f_Lucene54_0.dvd new file mode 100644 index 0000000000000000000000000000000000000000..7e91c9cf8bce1471da64b1f091ee85dc0361a0d3 GIT binary patch literal 94 zcmcD&o+B>mQ<|KbmuhO_lAj!wm{Xcs?2=fL$N&VUcXH}@o^n5q{99XcY1^a*E||)A f12<0}*LY(~BMXo^5C=pb(3t!JM1#P-DdmCy2yq=h literal 0 HcmV?d00001 diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_21f_Lucene54_0.dvm b/src/main/resources/solr_config/Test_Sigmah/data/index/_21f_Lucene54_0.dvm new file mode 100644 index 0000000000000000000000000000000000000000..92cc3d6d23f9daff5be585527796bce8d31e2b0c GIT binary patch literal 240 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_21g.fnm b/src/main/resources/solr_config/Test_Sigmah/data/index/_21g.fnm new file mode 100644 index 0000000000000000000000000000000000000000..3a808f5cfa64135a78e7f622ecfcca57c4e6dc95 GIT binary patch literal 1858 zcmd6oF-yZh6vr>Eq$w4(4l0O_;v^kfR~M;Ps}=>p={RyP^&q*Eiz!vi_`tVhdHMbRcX@Z&dh!?NyRi!rHXCgLKJQ3RMI@=#i+?lyR(n1B zxYm#Nwg*2C33Z z2qU2+bqKM>_|+W0t=v=Q$M845S=cug*j%|(@P(39&goM{seXkog#YYo7UA*?g`B*B zIB7_Ibpgx&I%eGyK2R3xa}`nunDE;uGhsB61+asGUz%Kn3j0ioA=AkS?qb*+V@u9Y z2ZKJFt%Y;olrs%`7?P@yL}Cd082H-6_vm5>Dn=mq0S0`|!1GH?#=#+m#m)}h5eB>B oDyc#09tJ!c(0qFYKgN*EOiWO6*PmcG9@g*P)8AuS&-Q5T3njbbEC2ui literal 0 HcmV?d00001 diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_21g.nvd b/src/main/resources/solr_config/Test_Sigmah/data/index/_21g.nvd new file mode 100644 index 0000000000000000000000000000000000000000..e9619badbb7eeccf2cfb05ca92d62069e6518987 GIT binary patch literal 59 zcmcD&o+B>kQ<|KbmuhP4mtT}y?2=fL$N&VUcXH}@o^n5q{99XcY1^bGh65UtUw|Y) JVETH4BmjbZ6z~85 literal 0 HcmV?d00001 diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_21g.nvm b/src/main/resources/solr_config/Test_Sigmah/data/index/_21g.nvm new file mode 100644 index 0000000000000000000000000000000000000000..e9d1ccb84aa34624582eb22c2ba6e19d4024bcc9 GIT binary patch literal 208 zcmcD&o+B>mQ<|KbmuhP4mtT}y?3-GWn37nM$N&VUcXH}@o^n5q{99XcY1^bG21bx5 z2xPcHXa_c;8BlW7TVfB?j)!i2t$Q>@l;}yZIw1DNm_Q%gLg0b8T<;K z{S02bcoV@dA)2!Hq{n2{A z__`J^PxrSHQ|fZ7c_CNrTU(-B9fc&FwXR?WL52yUZ2gqMAi~>+lqHlw5mM5g(~QeQ z(*S!w_l;d+wS;3SEEvtSfrNXPhOrVAp(;jofDQBplQ<|KbmuhMdkY8MqnU`K1UX)pqTI7wh=DQOv5Ir#$`lV5<$0D&!0?Ee9< CtsXuA literal 0 HcmV?d00001 diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_21g_Lucene50_0.pos b/src/main/resources/solr_config/Test_Sigmah/data/index/_21g_Lucene50_0.pos new file mode 100644 index 0000000000000000000000000000000000000000..e7d3b4a5c8f91169eba64bbc540d72a79cccc291 GIT binary patch literal 2373 zcmajhc~Dl@6##I~z4yU~7}+GaAuf%$#A>u?8mmp41jI=lYE3ffXgi&%5v56u?`}GA z01*&mlSM&5*%URXKm=s@WN~2^5oBK!CFsUM?EIJ z$^P?l7hlszTmh9ZW|U?aYSK;8ZH^jMfQ!pGj>M%(I@97}_VwF!*p*pn)tFTm4VyGUc42r7UsW^J?LSo@ z!RfRUJpPX=UnN+)S#j#pHqGm`YR$`yhu8IxOy`~d4tv;LGJKOTY<*<@$$3TQX{d8e z?bK^F+D`{=k)Aw8AW^P&#mXW!Dojz9;5^8Fg?ic(330l1)EnD%XGC)9Z|>p6}84GWUHcqM!8(PkIKT=`(r=c`?U4d6ebzG{~R_S4ZH3B1OHy z*UwJlRlG?3K^C(xIxGg&a+&*%p9tk!913L)FQKDGrSJkr;7r3XTndqR)H*^pH)-7H z1DP)>pl9X7CAqTB@dh<0uo^SEY2Hl&OadHyO$RNz*ckI;*{m5Jt5?@2@*ue_OLj1C zF(LA06g$VyLLw~|ni5tGb^L_5%=_s*h-39EQXKH&52>fjr&{X4gIGHmHY&ABo-$&3 zo!+NeP$T_W74@L4te3g5O4iBxHa^)9FV2b6ESB5G(Ls8OHaK?4Dw(Suf?D{8NTQiy zjCQk1+Q$#GEO2e(wJe;a@FU!pR)~Ie%YywUQ8UdJEy7*2^H|!e2Fe&-$SzYYZ)ZjF z44r3ahTdMJ*i19CFkNjl-)zcT*4FbU_z>&lvB*c3igEEmK36Mvl&y2Ed z3XOB;j+vG%chh9D1dCGhK(^NE4s@vR9%0Gqae7Tf;b0O8Gv2qIYMT!^vTjc6=LKpP z%A-lbzECu%dDHvs>Sm2tKIds`TUJMdL%Y!ac*jKD>vl)2RyXCS*^7#Q<-O$onlRzZ zTV*%xT613v%7K}eWzE7ectS&r{5GbsM>3OY!Hb5AM&?vQd*nIlh2qhGJS>OgF_s`Y z)h@Mac?W5jT>N3;yfM-8QG`fm5%i@@VexF%^foj~&+s;yy7swnmp5g-V;}3FBQQlP z@~!$*lMzuN2k0#x$t~?~u?DCSIpUI>VA*Pm8n_|hcZZ}WtL8V=QohVb1VSTi=02!W zHBSXs>!ZR$MDscRI>qPZm^?;HWGuU2=xcXMW-Te(`n%tU7w)b|L)d?#bV`Pbz znWWH2X<;;bfiW1k5pxTZNPHi6;0CfnW8@D{Nd^f)hrs4lcNs*x+K{fhTtxn;0rjE> z1a^|QTjBA)53M4_F<DL z9JN3IYKD)Wp?0#(U&%lX_%;bu`e7WM1rbFw(Wn~E<38+z3*a6+h40ZLe4rj(g<28{ z!BB(R;W%7|EJ#w?AQ3)GMOt(R;!!3V#^ZPto*-L#9rk7^iHez?`xUa^kCa0;iidpM zq`S^F4WB~~z!SHkt+C{{udH8!0FpwgaXMDl-6xMxIP!sDoQ_T?`~D~N+xP~`#IdN6 z#E?pIOW7EU`-xWfT|BSs2ms3z#GqGP$n!C^x|iVngj9jY}Pc#gAbY(Dx(x8G=lSm~WWq=M`F!_y1 z35it-Ar3!6miBR|0g^}{IjG!5Q{Jm1wQvT{h{4MmaUfiPOV|g^f2FJw*Wdv(XM&U~ zyP}mRFrvmxA-_DUR#a0jNDe59+xQx`0iwbl47b+Zp0&phO z6HlcGN>GvFt{hYBT1gMudX3yeC&^qLq$+p?X~U0>is6-`AgID8;4j|LN0d{fgN%?> zW#~sdS!90=OkeX_&3W=hjVC-Juhb9)3=kOT5B+RF0Ac+vQQpFkZvCtuMY)@+{|O|; B;o$%P literal 0 HcmV?d00001 diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_21g_Lucene50_0.tim b/src/main/resources/solr_config/Test_Sigmah/data/index/_21g_Lucene50_0.tim new file mode 100644 index 0000000000000000000000000000000000000000..d2fe011286ac9d453c9a6d6dd56ef8b73b5aabc5 GIT binary patch literal 9688 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_21g_Lucene54_0.dvd b/src/main/resources/solr_config/Test_Sigmah/data/index/_21g_Lucene54_0.dvd new file mode 100644 index 0000000000000000000000000000000000000000..cbb85e082919269b6654c5cf694dc1d7aca99d40 GIT binary patch literal 94 zcmcD&o+B>mQ<|KbmuhO_lAj!wm{Xcs?2=fL$N&VUcXH}@o^n5q{99XcY1^bGE||)A f12<0}*LY(~V*`*n5C=pb(3t!JM1w%Pfb9|h1;8BG literal 0 HcmV?d00001 diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_21g_Lucene54_0.dvm b/src/main/resources/solr_config/Test_Sigmah/data/index/_21g_Lucene54_0.dvm new file mode 100644 index 0000000000000000000000000000000000000000..26c9afbc5ed34d96f96ce91499f865d4c396faf3 GIT binary patch literal 240 zcmcD&o+B>lQ<|KbmuhO_lAj!wm{Xcs?3-GWn37nM$N&VUcXH}@o^n5q{99XcY1^bG zE|}_g12HBsMuz`Tz{$x7QVs-`VhnImhzNrdOpXD@aFb?|MrdYXL5O2$_JYa5HT!We lu)yqv+Th11dRz9U^9LxGfx!=?fd7ET|0|1?5P8$FK literal 0 HcmV?d00001 diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_21h.fdt b/src/main/resources/solr_config/Test_Sigmah/data/index/_21h.fdt new file mode 100644 index 0000000000000000000000000000000000000000..08beda6e6d0249f15cf284eb04447c6a5a3ed9b1 GIT binary patch literal 4576 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 Q+Y$WA=Kp^-C)xM^4^>;M1& literal 0 HcmV?d00001 diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_21h.fdx b/src/main/resources/solr_config/Test_Sigmah/data/index/_21h.fdx new file mode 100644 index 0000000000000000000000000000000000000000..c700bf7790129051739dbbe5dc79186fc4602ebf GIT binary patch literal 84 zcmcD&o+B>nQ<|KbmuhMdT#{dun&Ot3nv+uOmRMZknU|7U!N9=4XnH57j^`=& literal 0 HcmV?d00001 diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_21h.fnm b/src/main/resources/solr_config/Test_Sigmah/data/index/_21h.fnm new file mode 100644 index 0000000000000000000000000000000000000000..bf81e672ee60e9417a83491ad8242be11256956b GIT binary patch literal 1858 zcmcD&o+B>gQ<|KbmuhC$C$ zl6Xc2W`_Szz$6=xS_IY?kY8MqnU`MdmS2>cSfZB(rZ^x*n;PI!R$Q8vmRZ4Qz`z+_ zmReMtnV%QW!N9->H(m~Ayi0y^SYl3TDt7ZtaH@k_z?PDq9G{sY#>B`BGo1yOtI!;e z({NOECb*1)xdEp+Fa-=8AV-!|7NklKYG(?jW#**DCzh6E>;4kQ<|KbmuhP4mtT}y?2=fL$N&VUcXH}@o^n5q{99XcY1^b0h65UtUw|Y) JVAe(lRRDsO6v_Yq literal 0 HcmV?d00001 diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_21h.nvm b/src/main/resources/solr_config/Test_Sigmah/data/index/_21h.nvm new file mode 100644 index 0000000000000000000000000000000000000000..a9ad89fa4ae78e9ed189ee1d209e1fb735fb6ab2 GIT binary patch literal 208 zcmcD&o+B>mQ<|KbmuhP4mtT}y?3-GWn37nM$N&VUcXH}@o^n5q{99XcY1^b021bx5 z2xPcHXaTz^Cx+ zGkEdhO$1*;G;LR*7zq6T_kI7DFUj#+yxW_kAtGpCd1!_a5$9w|6-8+{@A19<+4;Es zz7wy{%Lj=mO}W*)kgM^dtx>K{B9bmTw?P(w3=v4#_5};V810`@mQWUmh!TB8GcKF9 z35LM%%|mmugs~hf7|n8kg!?z9xe*tkDn=au2N*5NLBPVf8ellEcZzA25)olk3A=yh zxl5DNl!Zv0#wnj`a(Z>pmJMuR^j)_t;2yoIh9m71b+=1&j&QS09mO1y! z7jg{W03u4(a|}%3qDI=1gc&SJlHrw#R0R|@dG3`^UdiDlQ<|KbmuhMdkY8MqnU`K1UX)pqTI7wh=DQOv5Ir#$`lV5<$0D;UO3oHP# CKptfP literal 0 HcmV?d00001 diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_21h_Lucene50_0.pos b/src/main/resources/solr_config/Test_Sigmah/data/index/_21h_Lucene50_0.pos new file mode 100644 index 0000000000000000000000000000000000000000..b9675e6df0657c8613e572b9691b388d39fe06be GIT binary patch literal 2886 zcmZwJX;2nN8V7Kn?w%PB0wKg$@xsJ4Zf>(ibC}hjiAlMZNp@4aSx&AC`3Oo%!xiZHAxI;zy(R zZAeAU7S&J#*PxpmA!AlSxMAg0iBg)1u7ST&4WrwWelx_)rh3t@2kkl#Yk6f=5S~yb zY?9^L$Eslx$E|kSGPZsAUNh1%mEaA?Z)?~ePX8Cm< zqxPAOh>VxJNy|d}O%L@Ub&yrjXl}1|>K8@7uDI_iWHoBD2u45BwF4}KpB466JB;vZ zG0jh_2~;USeQ1A^7Rv8xS7?~Xrqgs7Wy4>)H%@G-WNHO1G{r+ddF?3&9)O)`AkGmk zJc5tfcI?U42TdV3LmW3A$z`F7Z3P@t@>T2!3%qUJ#gSLTpS!A_(IV|mvo>)CR>wj; zwJwJe>uxe;6NC#Fr9EHxbd=?Y)iJd~?KWl79pkK>yKkS?tgeZ1eoAEH)3itSrFH1r zG_`P502`*|G)nc@+OVyIpVu7KW3pOfD2li7XuD?9 zig>w?eR4Ppeb%D6(8sNE!4qa7SDO&W^#FbsE57=D^(?rlm*_3il<*ftJYT!a?x>!c zJsUN-G3CtSww2{jDVfVNWpn+p1L-IgJ;b$oApPc#o~TNcz!r6YH0#jEZ4l= zhf75!Btxw>p+00Y_`Z^A7l4EK<1cPq6`{I_^;NuBG*atkmW;}Uqn4nzYWr`Po><-l z_qJYo*O|}KeFb{6TFM*sUKXyF(v#vSkHCkvk82lHFKDH1JW1__au%SEu{h+-$Mgg_ zS)|f(+<_YO0$y&)x2^$C+n?S{6B(?Um1?PaxQ;?uizyb(YLliyP@1u?IL#gP8Pl>r zmdspn0$4QgI%-{poDSBT289x+yC3Xd-}dC47mvN2{&N01W6S)MSRTf_SBzTSddXku z)(foD7Wa!#@PiwAv$3D;>9pKzR7P5MK?;Bw8n^u7p3AgQ)Usl>BACa~qsu~{?OOTJ zYK(`{E|}V!LmQZf?#Pb*9O=(H;5b^?!75Bs;3WNFT6l{FF}(Kf8#(J--pHrLbln~s z_4Q3F*98J`g%>XJPSXkLg6=7%*zC^>ow(_mUO@9iEZj71Wzoh0aD)U{v}x(K_n&fK zTM2$Vhz`**sp!KLG0a=k6Fe7%!6nU&=Cdeq-?aETyxa@UuyNgE{cQUnoTEc**yOqO z^UpuO%RIE3>UEk+hajFg9&Fa)^b0KL1@9##Z^rW$aZVl3YG@L7Ku3+&wN{lbNn> z03T%+L>X^17NLveJ#&uvX*24rg(3gEA+3BUs<{_WAkHj^#XohAMp7RU$r_+TZPj~K zFXTgu=#-wV7Og7Z?Tq(r2mmKBZt`P!T7hVzXQ?k6v%S45QO(p6RCo2d3BCKZ_2R3B zIno=4{n>Fogs+;m+|*OFa_&I`M5J2D8+naL=dI$N7*?lEo4?=9_ekrWv;1t;lGUpf z^@%|}k-3o+{SFU=laKp0E^4D1(i}Nb|R^=ovVZwE$oL{r629BgF?ig{+VPy`2w1hwiqH8 z%8sNC1><3|u^bmDMM|cWflk5@svzeTdy=LoUg(q*MS@WttW8IE(2ux6YKI&gNJ?-o z`FdX9NVx}Hl#fCmc7hU^6F3G=ATVK z2>KRs(7d37Qa$oRv(QC+@PZkXFDIh&FhtJFsGOW7UtPh+;G2G_5 z(HxaA^2d*)bd@iYTXH)xq->G%rL#~=Twr}MX~W*wUG_vtQoU3G@6>`4qU<+&c#@Pr zEM3s;Y2vPAy+{gnv?4sS~>?;32DUP#2tL#*I?P> zmrh6z3b5@LE~O#ErNf!%t&8Y} z6fFgVD-6LHR4GyNsQduNPzVZ?AKA8N3Vyn7y@ zDHKdD;p<@W>1~oMdny%5p0sNDJ!uFkjjzH0u9Z5mtI~k8(70?7gRde72t#ImGVxz> zurn&fk@&1Mr_UYSMGB1UbbJXtzg v1Jz_mGOKco7^?Wo1f&HB7MKt784+w;Az2~DKXJkDkN2AYjpthWM8kgpt0$#X literal 0 HcmV?d00001 diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_21h_Lucene50_0.tim b/src/main/resources/solr_config/Test_Sigmah/data/index/_21h_Lucene50_0.tim new file mode 100644 index 0000000000000000000000000000000000000000..bb7b18e13a85d38df48c463aa271a71585775711 GIT binary patch literal 11039 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 M-|0N?$CJbV0dE<#e*gdg literal 0 HcmV?d00001 diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_21h_Lucene50_0.tip b/src/main/resources/solr_config/Test_Sigmah/data/index/_21h_Lucene50_0.tip new file mode 100644 index 0000000000000000000000000000000000000000..289bda974662199399106029865b2a19b57572f1 GIT binary patch literal 578 zcmcD&o+B>ol#`#F9a5B<8j@O+TkM&al3KyQz`$&JC#R0*Dfi>ZzqKWowoPi`@+nPD z%}X^kh&QkYYGZZ_4go4-Wnh%ld0(vhH(zmmj`aIXk=yCq?^9V;Cb4_(mS9j+VsKu> zR3dHkiK$ppc@a~Aq+}OUt|ad?resOxdrXOvtZWLXhOsbina0e(z{r3qET!35s&u(P zZf%~#%^cy!nLK~fS-+;TGd@@^$si%gz<6m9bFn<*u|>=UvW$D1n3H80w_IXQltnd! zh3UXHEM^0Re_<6qxC*QAp>J4)4?n{yd<47j(OFnkAKQgp_!Cy)lbf&#pT-t~EKH}b zVO4!*5?I*0g>g3H1IF)+eN0Q4_Ap&$dd1YpJcD^X^D*YT%wK>?K!Az+fX3t(5HmQ<|KbmuhO_lAj!wm{Xcs?2=fL$N&VUcXH}@o^n5q{99XcY1^b0E||)A f12<0}*LY(~V`Gpy5C=pb(3t!JM1#P?H`km13q>AE literal 0 HcmV?d00001 diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_21h_Lucene54_0.dvm b/src/main/resources/solr_config/Test_Sigmah/data/index/_21h_Lucene54_0.dvm new file mode 100644 index 0000000000000000000000000000000000000000..b16d4d3f87a7c7b8e4745b534b9147a03ea4d6fb GIT binary patch literal 240 zcmcD&o+B>lQ<|KbmuhO_lAj!wm{Xcs?3-GWn37nM$N&VUcXH}@o^n5q{99XcY1^b0 zE|}_g12HBsMuz`Tz{$x7QVs-`VhnImhzNrdOpXD@aFb?|MrdYXL5O2$_JYa5HT!We ku)yqv+Th11dRz8prT~=7z~Bc`z<)qv@(Y-d^Y_?V0EZ7u_5c6? literal 0 HcmV?d00001 diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_21i.fdt b/src/main/resources/solr_config/Test_Sigmah/data/index/_21i.fdt new file mode 100644 index 0000000000000000000000000000000000000000..554ac54e6df8e0732345f11a4a48f7d0d646953a GIT binary patch literal 2938 zcmW-jdu$xV9mjvOk2~8*)N=@=r4b$TXyV9sxpV9|ke1w$2N*)QBs|(msGi-Oy`9|d z&U$9{E@ug1B7t}WDNsTish~8iLJR+xw4yJn22xa{N+pFNkZ21@(?W|x&ru~%DNTQH zmQH7Bcjhsm8*8-K2P~%b&rvX2ipaY1HGMTvy~YJ0A%t{@!d=Rw&bs0 z|Ku+7>T{3Y2lMm90;}}DFZOqybXIOrQtT`5mU)ZQ?TV$Ro?=3C`m$pO(m(C29Iw`< z%GIgz_&6OOzoxqJn(>X5>QwC=XK5oyL`wHeUw?Dsh6OUXeR{{XZ?3<3{f6(j*80gq zuCo;C3r>lxhW=<>i&ny-id3ziIjb8fZRAFlwgk_?}bqLO$iQ^_0oes>lw{`E(W)5<+D@1Fa@_hH3;I)s0eR$%3qC;?QW+z5o}G1>?s(PpYQ zR;zBqN2U$!GEHSl8P#1L8>};J(HrxW(}4A;iI}0&l%)YpdNgE-ho+de!GI&-i(3? zg{6xmQ(Ws;Aw!+DFy>jP;wn1;o+f=F(tx9udFsm~M6qVcJStju)4%Wg9N*S@v zCV;Kva$(MpM{P5P$m@iPWgGv-Uqnc zdNhl%<195}mqA^ofjCFtNuV;=L_RH;QF9}}5i9FT)lPW&V^Y(ZIBCIJQcBiZv#iU@ zVIH3)XHay`f*$Rn^V;!FI2zJaYObl*d)u1Lm_oPd=LtIFcd$YoBrprlqGA~~NVjsm zi)3gkEG}F|=BdtGEw0To7L41)*gA^dj-*n;i|3#w)7GV=4~-B_hXsbbOV?<2fn*&% zivOuQZB#XnV|{=$v|(x$nUB!n6nX(;?%|7F zn(&thcz|~Nwgbb3x{vQ4BkyQ#XpRZOie(tCDa`9$k}>SWb%ka}pjOg?dmU@1UH384 zKOoCR*{!#v48BX6h>qO9-hvi+_ zCiUBQY}rzUs$$u8Qs@$Lu`|P2+Kt3{QVVi^f()E;;1^EcqS$skjWUAa%ba$9>s;>f z!$6)Pb&Oc|LmNizZ65R6%RWouaci-F&k0PG&UMByk@(ACZ4Sb$KuBWsku@y9HekTB zSY{bMagbEe>CZz0-KXCr*3~wA8Ae!qmpu}*-B1#%-6p3o%g(q^Ch(R^erh2lhUE){ z)S%RwBM1m-tuQY*GpIQiog)CJ-9^G;8s#lbLnRYbc~ik@VDqEb+$u(6(5WYg9o6?!|5gdg*Fi*T3S)MAe7 z(5{Mvec&vX(1;z@$~k5s$}#X#1QhL)=rOdxT<;k1!+dV8M?Yu7KkZq(L$uK5aIuM| z=!mZrn`3lN%8di?4vfr+6V|MU8sCzu=bdI5&7_t%?gLhnuDO}@iUUo$L#p5=Qqr$G z&14iWC_2M4_@>OV}d3msT zux{`wxW|EO2WhUZBsC*a?ZC&RH2oi|6jU8JMY065V?-ic>jWsp5E^OgCvJupQz%07 zz`zW0Bscto#W+=x1-ID?T{Mh}B_cM6$f1Dx4BOh0ACp5F4rIv0fIkEczR%~!k=OCv zq|UOex1xBRj%0Uu=%QTPFyz34&J{-frZ|(~5J7{-VR?Met>em-{}%amJ@ilautTmK z+O3h?J zRZWvk12uHx?_KZ*5Nv1Xk2mycGJ`!t5&vB{fDp#%gNd68#fymbR1t~;-{2m1t1}ymr!Mn*)tTcT@$St xBpY0`?Db3f%W&N3q3JZvL3AhU_z^cL!+JiQ6A3xF=3DRKF#Xx5_4<3G{|D-mzD@uD literal 0 HcmV?d00001 diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_21i.fdx b/src/main/resources/solr_config/Test_Sigmah/data/index/_21i.fdx new file mode 100644 index 0000000000000000000000000000000000000000..29b75b9914f80688210decd8ee650555ef3c2078 GIT binary patch literal 84 zcmcD&o+B>nQ<|KbmuhMdT#{dun&Ot3nv+uOmRMZknU|7U!N9=4XnH57j^`=&%^DUjS8s!S^*g!vN+&8`=N> literal 0 HcmV?d00001 diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_21i.fnm b/src/main/resources/solr_config/Test_Sigmah/data/index/_21i.fnm new file mode 100644 index 0000000000000000000000000000000000000000..d90ad387861899136d29a93fe0717920c94bf3f3 GIT binary patch literal 1949 zcmd6oze~eF6vr>EwkZ{VbWlNbc9IUQs~{4sR;?BUr{l=I)Pv+sl8e-Wj{X7qzX)#r z4K6NjBKS{;rWaGHnDK#c$@22~eDCruxAE*R)Y`EN64vXE0H3#{ry`P6^TofOdaJ&k zeq8CN``a5*D^U%7O)XL+pWjtj?m%eX>!?Tz*^3+%228Jc=3%GkW<9Shiak&CtvadD z3kV~jB(({#M);Kszopz0=Ev|izmeNF5|p@dso?VktC-Oz@>2Z@p9}xl*T}p74RPSf8noLcoOYpv;8PNEX0027YmT6)Nm8DF#d@Be;WMvyCk| zKP?RUOu81%fm6;j>|#hNMiPku>|x-mW8b5VAt)Px;QJWxSp(00Vloa6Ff66?&>dp1 x%dV0dr0!tAC$-Q%9ATi-+0S-f@M8?g^w@AF*GLz`@wj^TKD>E{)qQX_zW@Zv2nPTF literal 0 HcmV?d00001 diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_21i.nvd b/src/main/resources/solr_config/Test_Sigmah/data/index/_21i.nvd new file mode 100644 index 0000000000000000000000000000000000000000..b234a41f4f1eb41fa7a0e37c52bff7f045a6cae0 GIT binary patch literal 59 zcmcD&o+B>kQ<|KbmuhP4mtT}y?2=fL$N&VUcXH}@o^n5q{99XcY1^bWh65UtUw|Y) JV4lka2>^l>6s7mQ<|KbmuhP4mtT}y?3-GWn37nM$N&VUcXH}@o^n5q{99XcY1^bW21bx5 z2xPcHXad`;8BlWx+F0l^(3e*2nB_B@f2cqTO--svbzcOP>=oqJ@`*N zd-dwYi#HMc6QY|hLF&T7%zN|R%^)gop^Es<88G zp1IUHO<0K3ah&i=O{&XAYZkD8-gDjFL~hQau$g&q5#VXZuyte4bRE~x-F|!7H;o98 z6c@pmQ~?y-jPi@evn^i-Fok6moc%-MKbS5BQ_3rU*vK34XrV|%(*+FDZ~>DW)V9iL rbWc!*;4nfl=l-+!NJV*gzMlU8&EBKB literal 0 HcmV?d00001 diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_21i_Lucene50_0.doc b/src/main/resources/solr_config/Test_Sigmah/data/index/_21i_Lucene50_0.doc new file mode 100644 index 0000000000000000000000000000000000000000..9fbe44df8ab12c6ba76da9361461c760848931c8 GIT binary patch literal 110 zcmcD&o+B>lQ<|KbmuhMdkY8MqnU`K1UX)pqTI7wh=DQOv5Ir#$`lV5<$0D&o<2X+Af DvKt!)(0R)~z5s^)Hf&OT){^_}Q<}P#Yx!dP^?}7Fc z)*Ft9qpl}ickTT6TgH!_{F?nmcZ|F0)RviQySh$%XF0IS^u@w|c= zJ1rZb37X-Ka$lLyE>ZWETFtRz*P#f@&|uLBSDosdJm0R?Oj`J_9epVe4fIf#|IAVT z+T6`cl=@n#wh;<2&FaYvO?wK>SAs9MX=FoZP-aoqL?Ty|TZ_^=WEUGo94(DT^ORr16OC`@1!@38${3DSR$nP-4xj?jw z7JeG+kA{lujb6KlEPa%!HRhXM8x{{`rTy&tVK#j{LSM!c9BMTc&!<0i*|zEAci%Yf z8D}P!1>P*quvy+MYI(g(W4B#;WQ*{Xz04$yJV4*U)8%Dh+&#d2SihK%_uur>8flPq z+1+9h>H>Y9E3>bMNei=S+eY5B(|_CCp-J5YxM3YsueqaiuUn$Z=i^?l+;GNfOzX~b z*gavC1N>kdOJz0OgZCW{kR>wX>Dq?nZP6u0xi|bQvNuo35+2X1d9_I77kG~BVwq1} z7g^w{Y1=8SH=on>@)8logL$Hi{3Ob`QGl0+y>upFL_k3^*y5E-(I z8}J8lOXl*l7iu=u!8OhD3B_(q(Yh965zf*nVG#gP++Ck5>)4>Y!dxA9j*AqbS?w#b z!ChVx3p8orcQ}#?`6+o-G%&o>J9HeFunxDFwi(yP z?lxG2%3%FZJW0B-iZyYo0$GEMVDG=23F`{MTU=JJd|b}z-u+-4?Za)N^~Iu6)`?*2 zmaQXOOsi+ud6~Dj_?=+6pu5jn`OHepJZ5EXfYqO06rEdh4yL?X{oYx2)b?Wsr@M>Y&8$@h$uMbT zvD|A%(5kt8;rvH=UB=5xJY6j5;zbXyWaYep=k86GKl1rQ#Vmv$9)ggy$zO%ACY~Tn zB3~99ss89Zvt0i`1c^xICVpTij^7X!GD6NuUwtIEng>sD5hhu$=wK#Zz)ec}D}MSE z*8N<*NZ>x)Lrm!W>?F(@wbd0iWy6GQx_EZTLNFN>yBrpj1$6O=3PvYorA7c*R~4e~xQAfv^O1leJk zsQvY}9x{VIgF8;KNPPewR}U`kEu+4bHHif=FU+h=FoXSY4S!>q4PKx)x8O96!Lpw7 zQKQN@h=LV&EK+U(n6D@{9Aa@4KZwQ!9E2hIaFNC^joiRfDS<3y25QKJ-tejiMJRso zuZQsBvJw-)`4p9qHy(WV5BDGmvZ#a5JV;r>#~7-*&tsI*0p;)u{DPOD8ye`}WF7}8 zu+a@WumE!563yc0`Czv%jAF17Lm>hhAYFY|`_Y?f=`k4aC!C{3wNI7JIY?9*>A0Wb zs){C@uApXh8fHTxJ-}8-r@Q!VCU}B7?7f7cR1el)d>Ms*zY3k`p{%vHqD#b<$fp7G`^@R-l$2jFs0sZa*6hb>qP&xHM z4ceCDB7AilhM|hu;j=tYIlYc=jz9%^QZxP4a(y7>;I0JRf8zKf?4=@#R??JWQ0Y8_ z7anft!ZL{= z%7mND$4YICbgnwQp_}fr2e?eMaA}rd&|G?vaQe9ZvJ0?w@DfR literal 0 HcmV?d00001 diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_21i_Lucene50_0.tim b/src/main/resources/solr_config/Test_Sigmah/data/index/_21i_Lucene50_0.tim new file mode 100644 index 0000000000000000000000000000000000000000..ec2d1f4f4f13953eadccb10c902179aaa6d46e98 GIT binary patch literal 8707 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_21i_Lucene50_0.tip b/src/main/resources/solr_config/Test_Sigmah/data/index/_21i_Lucene50_0.tip new file mode 100644 index 0000000000000000000000000000000000000000..f62d78a036516d9d952f11a69840d9416ca00fda GIT binary patch literal 569 zcmcD&o+B>ol#`#F9a5B<8j@O+TkM&al3KyQz`$&JC#R0*Dfi>ZzqKWowoPi|@+nPD z%}X^kh&QkYYGZZ_4go4-Wnh%iKUl8SS*&tCUw&t%RBO6OV=DLRWR_+N4z<_P4EzEN z63>{5<@wr}3S^n@G3Cml>Skf=pT^9j!D*OYx@XtwDRsY(A zUHBDN;lHb}3jgoIE_@1`FjGStcHwPcVe`@+#{G=f7~e9sFwJJ##B`GB0n>M;KIWy& bdzddXgPa8dOpFIKCcl8N85j=f)!YIA5IlrN literal 0 HcmV?d00001 diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_21i_Lucene54_0.dvd b/src/main/resources/solr_config/Test_Sigmah/data/index/_21i_Lucene54_0.dvd new file mode 100644 index 0000000000000000000000000000000000000000..b5e690d38f0c51660cb0fbae8f345975c68af0ce GIT binary patch literal 94 zcmcD&o+B>mQ<|KbmuhO_lAj!wm{Xcs?2=fL$N&VUcXH}@o^n5q{99XcY1^bWE||)A f12<0}*LY(~V>6IC5C=pb(3t!JM1w&3#Ih6s2xlEU literal 0 HcmV?d00001 diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_21i_Lucene54_0.dvm b/src/main/resources/solr_config/Test_Sigmah/data/index/_21i_Lucene54_0.dvm new file mode 100644 index 0000000000000000000000000000000000000000..e5af8d65716deb70a4b85349af3351208ac3c35b GIT binary patch literal 240 zcmcD&o+B>lQ<|KbmuhO_lAj!wm{Xcs?3-GWn37nM$N&VUcXH}@o^n5q{99XcY1^bW zE|}_g12HBsMuz`Tz{$x7QVs-`VhnImhzNrdOpXD@aFb?|MrdYXL5O2$_JYa5HT!We ku)yqv+Th11dRz8pR|1sFz~Bc`z<)qv@(Y+y)uwAp0hjen`~Uy| literal 0 HcmV?d00001 diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_21j.fdt b/src/main/resources/solr_config/Test_Sigmah/data/index/_21j.fdt new file mode 100644 index 0000000000000000000000000000000000000000..0737c543cce9a46c633ba833c43d24d8c5e67d3b GIT binary patch literal 13622 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_21j.fdx b/src/main/resources/solr_config/Test_Sigmah/data/index/_21j.fdx new file mode 100644 index 0000000000000000000000000000000000000000..d62bf9fee3f3c2bd48e13a3d1aa7f56cb27f2148 GIT binary patch literal 84 zcmcD&o+B>nQ<|KbmuhMdT#{dun&Ot3nv+uOmRMZknU|7U!N9=4XnH57j^`=&R@1E1d1|P0WrgptOFX8UjS8sLC3lHrvT;A8`J;* literal 0 HcmV?d00001 diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_21j.fnm b/src/main/resources/solr_config/Test_Sigmah/data/index/_21j.fnm new file mode 100644 index 0000000000000000000000000000000000000000..51590880847b0cc1c404b2bf73f53b5999131f36 GIT binary patch literal 1857 zcmd6oF-yZh6vr>EwkZ|04l0Pw4k8^|R~M;Pt5gNS={RyP_26Q2hu?Gq^sto~>HQeVZ3DkJz6%|8m=b-4$q4S)u(`&Td_PSa z^qJvaI0sHSL)f(;DH%y5`mkpMUmiP;mJLDC2n64^0iQMS^b%8XaA3ny^t3`y*tP+m pM1c|xZJ>wqnZ6ytk8DV$#|9|5>W^(W?pJT$27kvvy?57MzW`%=kQ<|KbmuhP4mtT}y?2=fL$N&VUcXH}@o^n5q{99XcY1^a@h65UtUw|Y) JprLocY5;>z6?Oms literal 0 HcmV?d00001 diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_21j.nvm b/src/main/resources/solr_config/Test_Sigmah/data/index/_21j.nvm new file mode 100644 index 0000000000000000000000000000000000000000..a56454f2a872dcfb331ab9a451c833ad8f294c31 GIT binary patch literal 208 zcmcD&o+B>mQ<|KbmuhP4mtT}y?3-GWn37nM$N&VUcXH}@o^n5q{99XcY1^a@21bx5 z2&A|{XaIe;Kh$HG;LR*m=JjLKF|Am^XKR-+U|~%08`wzTs$S1$}>7)nx@s9_vo(u+4{Iz z+{%}yhkKRN>T2m(phoS-SYbjRhcubDZv4~-DW-_=&2#Pt5#BvvJZ9XNA*1c3%!S%C zAvgf02lwH6ktV7zR}9MmD&4z=a4pIYRVsQPIKXT$0el|Jbf2KUy_Hw65qv9TOf}gMK#6_Nr&W8$eUi z%>u7@D#!Fp5HnGT6H1l=k`uVuj2n3)5mvN<@V_@=LB&@vNNuM) qpDP*1XcXcIi4o((mw+&YjpLzv>A4rf;i>k#_xM$Oq^5b_uZv&hTcnQw literal 0 HcmV?d00001 diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_21j_Lucene50_0.doc b/src/main/resources/solr_config/Test_Sigmah/data/index/_21j_Lucene50_0.doc new file mode 100644 index 0000000000000000000000000000000000000000..4c94b012a653ab69f7d00509fecd0bf5efa06f64 GIT binary patch literal 110 zcmcD&o+B>lQ<|KbmuhMdkY8MqnU`K1UX)pqTI7wh=DQOv5Ir#$`lV5<$00GW3FTVo- DvVk7u literal 0 HcmV?d00001 diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_21j_Lucene50_0.pos b/src/main/resources/solr_config/Test_Sigmah/data/index/_21j_Lucene50_0.pos new file mode 100644 index 0000000000000000000000000000000000000000..5f25753bfe896c05a62194faf2a9c34d6139cd00 GIT binary patch literal 8749 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 Bi_8E3 literal 0 HcmV?d00001 diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_21j_Lucene50_0.tim b/src/main/resources/solr_config/Test_Sigmah/data/index/_21j_Lucene50_0.tim new file mode 100644 index 0000000000000000000000000000000000000000..9e5b32eac72d940d550c2ec36a525fad55b304d8 GIT binary patch literal 19117 zcmds9dyFJUdGGG(?wOli@12d`XTXmOi?LZ|W@mP17dsep*f?wCeM!}HF%HjMqvS0+-vQYPc{u<|p*Fhuw7!q?0{ zJomNRzW0mS-~8!YU)Q)X_hlrz%_Geh;HiT}^JQ_Gsc4w~LZUL6=#RkT#wi~EW%KHX zO+#GSYFbP9>zGZad1bTNw3x+t%K4E&HwY3yVh3Xt*+D$X zYQfZtGH2Cbeq=yp23*Kq~|>1Xx;I${q!6}d#x%pJu(#LcsK>}AeWCf?AV#wxJ4yd=1F207~*vBof66k?cZI=ZcyftoYx zHNir@Ph+S?&#>N>%=-XOKCgTB73^&k1DMY|7Q{5hknM^v~}ucl=goZDYCFYIU2<)lO@r-CS*Vh39VyFO{~J zD&Lfj^zuwO()aRINEz7@df~{C7Y=ODX^n`A6H6vS0$-Vd*RIUAFxEX9f9`cjWXCYT z4oVye@Ye>zH|<2pflDM*E_fU0%T_9rb@S{JJ|GH6+58dE1Sm15U;+bNwr=e|06-7w z$pa%s4Y=SBNHI)|3j>D%XoB)B9$$T`=;_{LS%Gu|x#fkMZWu~$n44pJJkBF~Jdv48 zL}ku+63Prcd1gjV^2v}CATea7IcHig?cZO@2Tz%iK^@}A@>hx- zPrP&pj86#~n){6#{=+h?Mc4Dkt`~;37r9;%x)2=K%VYyHl*v5ih6x|w3pfmexB$rs zWi+ghyvQdqbVuG~9t96HMsX^mdElFbsu4(rB2ZM#Xn-N^BeBzB(619lnte97D$KWv~V|2jBNhK{6-)wYl>y6!q$mOsO6 z=-xv1=HaUG{L%i0fyzZ%B^k&|v@}(bMn6j#gSw{)fn`yR4dcv0W-+Fe-v!-o8`nQ1 zEJO}o=Al44rz)sz1j~MRc~JM)$ys@DNb3;8aNY+#<8<98Sk9O=*xTCDS1EKDPDzGp z>d1+N>6DW&hK_5C2@3rN-@=-tk5SPXv#Z=1DSuR-wN#_1K)DrsM^aNqH&fVTSEX=> zDK1dw%vSiOW^BdMjb$1wLfXd;tgni!T)G$s10$wtV(&!W_&O5k3Ok4qyUd|G>@tZx zLXV}|d`0#(yN>q11yN@C-opxJLMh7J#7OV~kCgTpDuFRz0`mb)L{@v$1D|XgFTYzD z*3uAGb7Yg$k`^dPC#=*7;nJZS@png)ce2~#rD46Ca}76UZM4H|i4|Kn%q zX+Y!m08s+OW*SX~4^bVsP@EFB_t(&7{CHk_Hacnn_m1y%cyx#F!mBeK*`WS(fSLa$)Pm@^Ry-82bHNM z#}3?BHbT^sS`vNPq78=?Hpq={Nuok+${M6-gVY<|ep@J#wk!(;A|5*)Dqm0xjDk;( z<4u%_g>^+tL6q93FFQ*UWs$TYBz8bx1(N)52}~8BB2*%*^0U@0Y&Ijk2kCQlJR+8#pun)D+0n-GyFf&@gK2rVIc@KOk(GDH%iEs2|WYKUml zgRg_T^43!iJ}pa>Z>t~(q1gzjAje~uNIteyCc?oTj$V1XaTHHt@FI}{(WxD0YASMn zBoJSiJJ$jz4*rW^ieRN6i?x_q{JYyGnD^^3di56c|Lv?oqX7>LAH!3HncWi0RT!;M?nk)HJ@Z^Y$tf+l4Q8#VNo@bOPSjAmL^^Tyl?gVovN~V9Au6;qrvN&kK##;;jm2mw5X#?ll*HzXi_eyD zKB4DJ8>|6T?RNI-fSC#6a{MkI*+5^d(N{86c!NGvS#8edYZ z7*lB_F+A-C;`|K{yHKi8RIpE>t07(B*l?j8sTyAvu|)uL

)Od;J@m6BMHp%KRB)vDklHYW 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 XRYU*WaPZ^LzWblKZW#SH-!%PSPjdbg literal 0 HcmV?d00001 diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_21j_Lucene50_0.tip b/src/main/resources/solr_config/Test_Sigmah/data/index/_21j_Lucene50_0.tip new file mode 100644 index 0000000000000000000000000000000000000000..3b03f32de785ab8b2ec404d6ff9a5295d5a5b15a GIT binary patch literal 893 zcmZvaUr19?9LLW&zjN=k%}@+nKMbn3=t-$j4}s8w6!g}7=qdK+s+TtJ*j?C5k`~ek zd{A4d^%qXlpv4Np(bgXbi9#ql_ihHsxi9DU`~1G=d-$GnTi=8| z`%Z_=;3Z#7*L`{{Vx8>{=~oCL;C&bFt=({cyzu*KeC^55P1m{0LA_h|HeYOR72BZg zyidp!LOlmIt^EnJA#1p&I%_6R^5tVH{W9E0-qJiJ$CJ!FsMiUp{n0`adYVMRb0(#$ z541S$nThgj7o+KImxYdqX!LOsV)dd?`h;xcl@_f|2u%!txzmu|K^FPfSSc39$^krQ z6qtcK?*0PnK;iEAw)Zm~tETkKBNjr(#Y!osiY$28Ku6tvG|d8NPqnEIT6;(JW1w0> zfwkb?`a`>KA!~WI&4wkzz0s+C_484$3cscs$vC}7N#z2dyjDq1AfJRd^3g5|OV>3g zH-pTW2+d0|3X``);+`hR!~HE0*H*#E5Jb?HKw=%jXiMPQ02qj3#5P}ojsgQK6(NK* zx1*G;f7XI%muz(c0;s%?P?mYB`O#k3Oc7epRkte!=d<%5-iiF5j`O*GIZjLQ{2wXK zev{$_Ies=FRWB~e@s<=XXQcSK{K%D*RJ~G`;um8MJ~78`@Nu5zIsSqFmQ<|KbmuhO_lAj!wm{Xcs?2=fL$N&VUcXH}@o^n5q{99XcY1^a@E||)A f12<0}*LY(~V@r@a5C=pb(3t!JM1z2|9FH>q1)>}G literal 0 HcmV?d00001 diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_21j_Lucene54_0.dvm b/src/main/resources/solr_config/Test_Sigmah/data/index/_21j_Lucene54_0.dvm new file mode 100644 index 0000000000000000000000000000000000000000..f0b8fb8ca0b20760eb55849be4fdd528c14fc1ca GIT binary patch literal 240 zcmcD&o+B>lQ<|KbmuhO_lAj!wm{Xcs?3-GWn37nM$N&VUcXH}@o^n5q{99XcY1^a@ zE|}_g12HBsMuz`Tz{$x7QVs-`VhnImhzNrdOpXD@aFb?|MrdYXL5O2$_JYa5HT!We lu)yqv+Th11dRzA9mIY8Q1A`w(0sjGw$uD3+^XDpu005_VN literal 0 HcmV?d00001 diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_21k.fdt b/src/main/resources/solr_config/Test_Sigmah/data/index/_21k.fdt new file mode 100644 index 0000000000000000000000000000000000000000..e20e8f0a1488cf29de7b427fdced0a0c9aaa6d2f GIT binary patch literal 27218 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_21k.fnm b/src/main/resources/solr_config/Test_Sigmah/data/index/_21k.fnm new file mode 100644 index 0000000000000000000000000000000000000000..cba49809bba35f50ff243dd721005160d2791eb6 GIT binary patch literal 1857 zcmd6oF-yZh6vr>EwkZ|04l0PwPST-ub&+bdN>vb?jwAO{4=#6-yp&qdRdCer;_PQ| zad8n5^h1cIS5vB(@xZs-^78xrFZXiUc$5ost=Izv>(zz;$(zd85lO24Brm64%P%J% z7x-{@b4@A*iqJ#qkUaVPuH14PLi1c(M<`S$YUnUvxaOP19ir>ithOljebIBOq(r+A zMnWs<65@>TD=B_cd&f-1@HfAf**6jtxb~>v^EoG<(kHS~{R*E6|Jhf|!lfB9IcWoN z2O;tN43_?N%!)50P!{8<4k-jo$cB}fFdD@I*s_6N9N&cwJ4}f_!(;@vZP;96OTM3` z4f@P*FPsCXoFVMkkd%xh5`EaUfiI7pN6UtwXas`q*?`X)czTJcIM}ygDSBEVC~Vt+ pPoh8x2R6{d`ApxA;DkQ<|KbmuhP4mtT}y?2=fL$N&VUcXH}@o^n5q{99XcY1^bOh65UtUw|Y) JprxW<8UTXN6(Rrt literal 0 HcmV?d00001 diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_21k.nvm b/src/main/resources/solr_config/Test_Sigmah/data/index/_21k.nvm new file mode 100644 index 0000000000000000000000000000000000000000..d9b75914d37ac12c62838cae40be72159f1f8992 GIT binary patch literal 208 zcmcD&o+B>mQ<|KbmuhP4mtT}y?3-GWn37nM$N&VUcXH}@o^n5q{99XcY1^bO21bx5 z2qe2fXaC9Pfl~uG>_c;!%%Y7TUVDdJ@zPgrP#ccq*~UwrZ1HU4^kg$UncY{F5BM#arz`8e)oF+s7kqVW z{P>_St*WM;6>3y|jU^`ZK}6GO;|5M3m|%(+Uq9zCjPcGf;|b$XMvOLRG#6@9x4=Fy z18dJ(EnuRIIb+xkP;lqkvR2}}sgluM-~hA61b{po>yRL~yOFzjN@YZFDQx|RXDL;| zQXXP`7^h-vDEI83wJzuav*UT4k-9mL!g`h=BqT}8a!l*M_FT_%9JARDZ0j~CUdS;6 z6C_O3G7N}lIbZ1n6~z!u=hR)LM*k!wrAn4QGAGZ%Wt1#nh=mK7>UIt*jv|%qvQb|$ nj!{3tF%o^o36y{^gpH$~e;N1}z21rTvitN^e59srp1D7N-Jhcq literal 0 HcmV?d00001 diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_21k_Lucene50_0.doc b/src/main/resources/solr_config/Test_Sigmah/data/index/_21k_Lucene50_0.doc new file mode 100644 index 0000000000000000000000000000000000000000..30dc9f85c6496a5be9fb9e3d348e9271c9221bbf GIT binary patch literal 110 zcmcD&o+B>lQ<|KbmuhMdkY8MqnU`K1UX)pqTI7wh=DQOv5Ir#$`lV5<$0D&*HouvS@ Ccpjku literal 0 HcmV?d00001 diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_21k_Lucene50_0.pos b/src/main/resources/solr_config/Test_Sigmah/data/index/_21k_Lucene50_0.pos new file mode 100644 index 0000000000000000000000000000000000000000..054f652bbe41cd9b404376ad66205d26877e4bb8 GIT binary patch literal 17512 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_21k_Lucene54_0.dvm b/src/main/resources/solr_config/Test_Sigmah/data/index/_21k_Lucene54_0.dvm new file mode 100644 index 0000000000000000000000000000000000000000..fe27b51c193f5c3b34ae40fc2633e9a65013856a GIT binary patch literal 240 zcmcD&o+B>lQ<|KbmuhO_lAj!wm{Xcs?3-GWn37nM$N&VUcXH}@o^n5q{99XcY1^bO zE|}_g12HBsMuz`Tz{$x7QVs-`VhnImhzNrdOpXD@aFb?|MrdYXL5O2$_JYa5HT!We ku)yqv+Th11dRzA9lLRQ2fx!=?fd7ETVg<_|37v)~nrRs{ zHuT+dPYahFTZRj=#WZdol_Ie3pgsooNAKvmWm)DuJ)6sw3nkO48|AWKBcCnTjS{P? zkjq>7dZAFL+h*1>v*nzbFP6$?ep|oOo!jA&H)5&IEQ#KNOxCu;72^%nan)u6U4 z=?Q4l7%P!{dIwG_WFT6P!HN?otm__x>(fmc$%cAuuGHX~>gLHHQhdBw$WHk@3)qIl zS8&yEd}FlfaGlNp{0W;4=2I)GNN7v%Z-64e7XatsND#aHDwrOLHgxWTO5O48eE{!5 z=OfTJ|1jcS01H|qe48A<4?d%iJq{x!%=`!(RkW-7p>J{!eo~pt|R@Bh7VzK5qFs>@;<@J3OV6L=vhV_z>b#?uHd3t#)1fz z&cT+NzR4npLbbHl@F5(5xmFYhd>OkE7w}3-jiubKp!9sFB_B^5%LvysYKeca z9=nGR(qgOxOm}56Q;))o+ORzJL!zYUpU30|K6%L#4ROZtc>{OfO;POITxSunvd75; zEa7zEEOB~7o2Ijsbmb;)brU_qL8wNdY+38jOImkP!|xGd4L--@cL>@oL<{f|!ngQ} zR31|X*uw74XSE%NKmmFax3KFQ-0?MPD&Z>5Wipu)S|@yjud8N?Jlh{);=Zo0;ep&5 z?j3M~7d3bvldG7VV_$iIwLbU*lWTZmv&*2T9xUU*LEIdC`=0vq|Hp+B1Lgk!WCuRa literal 0 HcmV?d00001 diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_21l.fdx b/src/main/resources/solr_config/Test_Sigmah/data/index/_21l.fdx new file mode 100644 index 0000000000000000000000000000000000000000..067b6eb04fbdfc0155659e5abbbe821e6e8a62e1 GIT binary patch literal 84 zcmcD&o+B>nQ<|KbmuhMdT#{dun&Ot3nv+uOmRMZknU|7U!N9=4XnH57j^`=&S17F1d1|P0Wm{A#{rGWFMz7Rz<1aBVgTJ&8t?!B literal 0 HcmV?d00001 diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_21l.fnm b/src/main/resources/solr_config/Test_Sigmah/data/index/_21l.fnm new file mode 100644 index 0000000000000000000000000000000000000000..ef9b4333bc0d995012a9699d230b59ecfea782a0 GIT binary patch literal 1766 zcmcD&o+B>gQ<|KbmuhC$C$ zl6Xc2W`_Szz$6=xS_IY?kY8MqnU`MdmS2>cSfZB(rZ^x*n;PI!R$Q8vmRZ4Qz`z+_ zmReMtnV%QW!N9->H(m~Ayi0y^SYl3TDt7ZtaH@k_z?PDq9G{sY#>B`BGo1yOtI!;e z({NOECb*1)xdEp+Fa-=8AV-!|7NklKYG(?jW#**DCzh6EkQ<|KbmuhP4mtT}y?2=fL$N&VUcXH}@o^n5q{99XcY1^b8h65UtUw|Y) Jpfio(A^?Ic6yg8? literal 0 HcmV?d00001 diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_21l.nvm b/src/main/resources/solr_config/Test_Sigmah/data/index/_21l.nvm new file mode 100644 index 0000000000000000000000000000000000000000..15b1c775287cad90cc631b1fefe330a5ef0ba598 GIT binary patch literal 198 zcmcD&o+B>mQ<|KbmuhP4mtT}y?3-GWn37nM$N&VUcXH}@o^n5q{99XcY1^b821bx5 z2;{gyXa35K)&0|Ea5 Ojma-yB29-yP6Gf32_&EZ literal 0 HcmV?d00001 diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_21l.si b/src/main/resources/solr_config/Test_Sigmah/data/index/_21l.si new file mode 100644 index 0000000000000000000000000000000000000000..c7c7d1ce68c19396546638e30f6966fbb634c80a GIT binary patch literal 523 zcmZvZPfNov7{)uHo9i|eCwSDOmxZQl*Lf1u4TOn8y?83M$+k+9l%y@Y=qK=`A4Tx& zXYk_1n+Sdh(e$4%G!XLU_vU$@H_5?kxZRy3KBjnJICw@djZf&5DT-3F-oo4VN9+Ca z>n47Ay1$c5smrNmfgH7OZG{PS63}GPy7p2Jq?jVcH_y1|hj{mh@rZFR4j65hX)ffZ z3BeHPF6_hg0uw3BGn!!miF;QNu7!D1RYn~E3+N3dfXDs0>Jcw(Kx^%5@W`R7X!i&)(%I`h3lM;M#swY-ot0{k&1E(A1{9Z6=0(m literal 0 HcmV?d00001 diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_21l_Lucene50_0.doc b/src/main/resources/solr_config/Test_Sigmah/data/index/_21l_Lucene50_0.doc new file mode 100644 index 0000000000000000000000000000000000000000..9b0ffd57dbef04f503234896d9bb208b17a5e9b2 GIT binary patch literal 110 zcmcD&o+B>lQ<|KbmuhMdkY8MqnU`K1UX)pqTI7wh=DQOv5Ir#$`lV5<$00GVWdYb^U Ca~>Q3 literal 0 HcmV?d00001 diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_21l_Lucene50_0.pos b/src/main/resources/solr_config/Test_Sigmah/data/index/_21l_Lucene50_0.pos new file mode 100644 index 0000000000000000000000000000000000000000..b4416ff74485579900d7dec2d3d9010e164f43f7 GIT binary patch literal 678 zcmZ8fT}V_>5Z-fl?_KY``*Wq3vkOJ|Vp$MNwq-?IVAh^JwtI_y=plNDMHj?EH$p54 zdW)qNcYBG*)PBgHR1Ehe$aFW;%%~_q*M8{_@*zq}LuxL$1P;v1nKS3i%=awz_CbArX#RBcSzlvJ$-O?}8Im8!gZXEr zhjOnw?#jp$+OYiEmes;>XRk0KztX0(IdxKNbEIh(Oo8fE)$OWJZG}c_n`0U{XFc%I za0#ljb2RiEcIvD{x}cTr4*Y~!>krHgKv{^r$!m8!g>LAD7FQbL&Wq|>? zCe+8M?tcL{;5%NAxxS&j2EU-0c0!7B_89y+dqM+e=%{hJ1xf6GnOe%(7$}lhY?s86 zJW1Su+9PDOdGm~Of?kJ5WRwhvapyhQ5n{uzOJ{vh*{w9uAiD#W0!gGrlIUJ3iLOFP zoU=|EBYlO8{WiR_m}cQFIJ~mFMOD0tk_Ab$Zd%Zd=u?0g2Py9d>sF;q^(mdweHwFh zDQSC#1`;^m43@iuyo|#L&e2MyNi(r+&T(i8U^7Q4n&UdF2zih=7gpT2hw~Lk*jl^x zhZOiQ-9&h?r9Ptj*O_(B+l3(KWPgK_B%G~AE;>lya1nZ`4%t|R2wmLc>)M82f* zRFLH_23>*;n0mndA7~Dv;SHQiaj2_=FJC};g?u3`B(RtBlR8^35VOf55);8S6VM12 T^S_{fRpPU;dxo5^`;`0(8a2Kk literal 0 HcmV?d00001 diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_21l_Lucene50_0.tim b/src/main/resources/solr_config/Test_Sigmah/data/index/_21l_Lucene50_0.tim new file mode 100644 index 0000000000000000000000000000000000000000..ff46c0fdce57a04988ca18be56d26faf48a18b47 GIT binary patch literal 2865 zcmb_e&5ImG6z{68?%CPhkS|n1ZYroKL(lBY?94$zjQLpI#Ha!BGE1eqdZx17U7hOc z-AzCd#1BjeX!PKJAR>Yy3Z4W(1VKcwvz&^gD~B-R#Gt)9D0$r`PBQ-F@9wyVH)l-EJHO%}&tl zw}SR!uOGBYkM(1>-|UippR)OtRhlp!i6RuaOB)nZ>e3{s(Trxdj5Y|G;&oRLI`RW}i;meL_T&oeh=nU@+cjO2bQq@oGQ7>gbham+&oIF?|h8tXzv zxfCHQ3SdQ=G_0Zefyg@LnNe z)evF>mNrsPa7C$5PIR-LN3oE47jDk7xqKv)00-tH?&V^gN&jp~m1N%8k|&8K?UbO} z85(vAzl(N4&k|aH-LV#&@e?=$0IkrRG8o{tSX}o~A2fQm?3U`RsV8;OA>aIUK@FqQHiLed?(Z zBrG2!Ut_LX7X)T7ugn1MTA9Hp_^|~1JuTX`H6{x#vfXQ0)DQq5zzlGvRC(+0@6220 zEQ$PeUPK~A8!fbJj8{cn2h9R*8pj%Fsz>984bo_N@C87(#{g(ig06ins`HKmh*@yz zm1<&RNo+C1PU|v8P1M>ZP2H5A?vxlNDdFz2KoI7%f8=TnkMzc(hRFCBu zVDW*a%jEoUU>oR@a0it=EsWU1L&LtHnwTNy*{klh3FrR`^sO;$<8Au@vynAs^pwmK z2HyooZ=`3%$!!>T(s0Vg@b+=6qgbPEqZb2TD?i-G(=k8K4SolZ;k5``?@YRO(7MA8 zLfg7vmtm@H!yvc@3~c1vSs>>e2h2bVs+o$}&^E7oPyNW!@?mqWz-9)HJ4f_@Y42#- zG60GIbKS!&Kfc!IC!B(f>>XUU8=Cwja=d-xjAx?U+&Zc zKK|#B@0%sZ4qL|f+F=aIaI0I6V0;CB2;bz8=MlbgRA*1^3jI6g;!DR|7h&rSb7?Fg z{PB`DGRPZo+{4$FJP+Y1`ntM1it&fA1BAB)@o9v=JZ{#}g`>gnIfVbRL#E!*;snB< dp3qj1dYih0b)5PyUp;*J58HN}&%U|z(Z7ypR|5b5 literal 0 HcmV?d00001 diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_21l_Lucene50_0.tip b/src/main/resources/solr_config/Test_Sigmah/data/index/_21l_Lucene50_0.tip new file mode 100644 index 0000000000000000000000000000000000000000..21e120165803b06960471d76e4a76eadeb043a8e GIT binary patch literal 450 zcmcD&o+B>ol#`#F9a5B<8j@O+TkM&al3KyQz`$&JC#R0*Dfi>ZzqKWowoU5c@+nPD z%}X^kh&QkYYGZZ_4go4-WnkpxKV8JRF^lDXGBfji9tH+R22^==mYErhI``QyWtg42 zn6QbS!z%g@o2ct6Y@%-0u!*{374_)Drq**ER#B|B`K-dG)^`_H(Qnv9{WgI`&BF`Z t8Rs%?W<1GwpYbbWH`79;SEBUVH!m literal 0 HcmV?d00001 diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_21l_Lucene54_0.dvd b/src/main/resources/solr_config/Test_Sigmah/data/index/_21l_Lucene54_0.dvd new file mode 100644 index 0000000000000000000000000000000000000000..fa1b5802d6c3b3d3e15c30e45106d3b7e8765ca8 GIT binary patch literal 94 zcmcD&o+B>mQ<|KbmuhO_lAj!wm{Xcs?2=fL$N&VUcXH}@o^n5q{99XcY1^b8E||)A f12<0}*LY(~Q*)3y5C=pb(3t!JM1#PZIU=P13TPcf literal 0 HcmV?d00001 diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_21l_Lucene54_0.dvm b/src/main/resources/solr_config/Test_Sigmah/data/index/_21l_Lucene54_0.dvm new file mode 100644 index 0000000000000000000000000000000000000000..b0108993a805a7e5e15b549257192794af350913 GIT binary patch literal 240 zcmcD&o+B>lQ<|KbmuhO_lAj!wm{Xcs?3-GWn37nM$N&VUcXH}@o^n5q{99XcY1^b8 zE|}_g12HBsMuz`Tz{$x7QVs-`VhnImhzNrdOpXD@aFb?|MrdYXL5O2$_JYa5HT!We ku)yqv+Th11dRz7ucL0>jz~Bc`z<)qv@(Y-d^=zXr0EhTY$p8QV literal 0 HcmV?d00001 diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_ma.dii b/src/main/resources/solr_config/Test_Sigmah/data/index/_ma.dii deleted file mode 100644 index 892be60e27f3c466738d087910bc09928cd493e0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 86 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 bK1P-n3v)G&kPFLRo4_~wFTW*`dlLQ+0kGkc diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_ma.fdx b/src/main/resources/solr_config/Test_Sigmah/data/index/_ma.fdx deleted file mode 100644 index 99b9d5c48da31340c9dfb96f6f09eb350c8307ab..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 84 zcmcD&o+B>nQ<|KbmuhMdT#{dun&Ot3nv+uOmRMZknU|7U!N9=4*g02eZei1-N$niJ hEk8QVEM{P01d1|P0WrgQ@dFx@UjS8s!LsV=lK|EF8v+0T diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_ma.fnm b/src/main/resources/solr_config/Test_Sigmah/data/index/_ma.fnm deleted file mode 100644 index 51a671176029ee37c8e6df9c6da0d08025b0d71f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9871 zcmdT~O-~dt7~WkJmt8(~VG&S4{QgEnK=BJj#h7^T!o;>hh z{0pAEd-CepgSMUN42y2!!IIZW2qBsDedg)Y=lv+FU&4veM{z(oU7lZOG$apsQ$z** zyxTgu_2SLf_ixKTR=%%&j0)>DMo?Rd=QL2LB?t`*rDE}C`s|s0Or>4nv4|Ao8_~Lu zEv)96_E$LxvNS*AUb`oPCpe7hpWj>TwOkZ8o9tDw_d4!{LO)XUl|scrU%`Pa^;&fY z$X>5yYggNr0K{>NmV5-*uelClDJfT|{R~GmVZ0AC<3lMck-{pD_W0msxE*57DM3$T zvO(2e(0mL=ZOR?ge$Y_&X}!e}mHR-W96%i^BPKX17Ydp6l>XLJdcK#PYh!VewiqW= zqL4*u05l(y8g5H)ri9c-qAeI#k%e6W4ZEgYlN0@;P+}ETA68KbaHzvz$;cpRI!1Fk zB<(Px?;+5DD@Jyh;|(f@K?60%xhso~fQDPog^>DO4K&`e$!-KITKD3{#c~4&iglRU zM3{6i52*2sQP7-BcInOdn^cygF;5(gNE%Sq$x5OIXnMxd649sz=@x=2O2$1g(@#Wz z7};Mc_PGWCUYAl;n{A2`Rwh6rt!?W=Y~wTOC2MPC;HSFbVPp!lk{f~GO8b*N+$fM# zE1DeeB;~S^vQf%G&=MKZ`Bumc%-L(KbQyC9^bVRbCf&s8{{U#rmE4>G4b;|K>9Mc_ zlEa|k4rl?iv6->Vg2p-Krfw!{rb+XNC#M;7vCL@es1Jv)xd_cT3{8|{KBClJ6kCBA z;*NV_tiIjxY+^j&~ih(0D6)cAw6wFZkHO zac6T~vYhiF%cMS*^tcYY}H59hO5||%uLI2dsiYELErHaY1nirsL5oc z%-5{>h%sPenC0*KSiWkP4~4m(z6biyS1eN6!YsV+gNaY4KYTO)Yi6DYbDvj#0l(TE AO8@`> diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_ma.nvd b/src/main/resources/solr_config/Test_Sigmah/data/index/_ma.nvd deleted file mode 100644 index 0f298504b103cc5a887ee8bcc21ab7d923426033..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 995 zcmcD&o+B>kQ<|KbmuhP4mtT}y?2=fL$N&VLbCu>6Ha(iu&hgvwqtnb{h5|6i2a+HR z1Vt#I5X!4S2Oz^RK@B>uS!E?qAqayhAP>7Thys{GAP=9i3ZRK4K+jZG zmSb0jAzFbUf>i(|fUv3n3qlQihkpX!LtN|hl@*mU~6lG|fN+2KTTM$5#A&Lvp zSyM^C`%q;yAlvYON*KVS1}FtJje&rRVU`k529FZBdRQXC?h1r5m^-km!w^N*h#`p( d04sy~5h04ff&~?bhD#pMnEV39X)F|51^}Gxsg?i$ diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_ma.nvm b/src/main/resources/solr_config/Test_Sigmah/data/index/_ma.nvm deleted file mode 100644 index e3e3f32d9cd80fad6b2a750518906178a4a61be9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 308 zcmcD&o+B>mQ<|KbmuhP4mtT}y?3-GWn37nM$N&VLbCu>6Ha(iu&hgvwqtnb{21Z7Z zFc4@n!B{~oFjgfujI}@l#yYM9W4%*`vKU2GVJsUp7%N#F#_H09u{P?#SU2=xtpDav z7L%G4jOA+sW0ly#ShMY5tV8xN)=LK{i&?-C#xi$;vErOztX5YTYt4Tk;6I=-`31z+ K3=DaN%6|Z)YAVD4 diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_ma.si b/src/main/resources/solr_config/Test_Sigmah/data/index/_ma.si deleted file mode 100644 index bf4cf6edc7eece99cfa391df23bf5f9dc2e7b245..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 527 zcmZ8eJx{|h6ikuQ(m)F;NQ@vBSZXCDNec^7p+!iQK!iOqu~UL#JJ?ConFX=J#L)l3 zKVW2MVr6Ck=cA}#$$s|Ty?f90;aj+|HcC89vE6a-m|z;8QlBY`QhAtePjBzuAMY2x z_CNd2LSjl)PBq)evGc7hFrkhDnoO2%UQWg8(R^|SA?E#uWM8Epnx~3VWFE>4 xA|@)EWjDGLGmgi3sVoqyB6hu;?668&}`#yL!U3c^m*jeB~@EGH}d)pRX;Fj(K% z9Bz#wjF;d(QYZw)up7k9N>Cnn2tE)GpCthgK?D$1BOpG*SPU35!btGGcb8Xe3UQ-w z39x~4#3H)ha%`h_yV~)5QJzm<+ zsK-$`IT6b;!b#JLhnk)+G!}OX6D4ZJ&;sx&<}~4erQ! zL6dS}dFpZ><#VL0eT0|~F;aREX=5z59q9wgTnds$SemIrFM-UtKZHn7 z#X3%>X*0Pwx2isP*!0;t`ji_NZ<7gjcB&7F2J+lDlDGjby9#Yne!^|QC{gRSSjB2V3(Wz3+u!9@lhvJXP2AYl{$i<~JiLU5h1!V$t@>J+t+e2kExJb`@P#Oz btc;pXuv>=RxP>2&zW$N_I-#H6`&a(~<%~yU diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_ma_Lucene50_0.pos b/src/main/resources/solr_config/Test_Sigmah/data/index/_ma_Lucene50_0.pos deleted file mode 100644 index a39f7428d22dd29c0e8a71f455b01f140975e56a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3245 zcma)8O>7%Q6!z}y&aS=oj_qB09gdtha^b)Ui8BXo95`@5R#g;%pl}aSN&FMHp>-)$ zD8+W#y6wTW1p%d-A21Ta<)>-lp9IN3+tAYHuMS0+mcn~$uVcGLFrVkmn>RoE=Djy> z{7iM&7<%rlm&31ypL+87*ABe7|J8j5UU*~wo8dR0=YSGD`S{7#N3R_jm+wD)_t_H% zT=wjjp3KrLO-jQ_G9rZk^H&$Tkt8LqF7(rcl6CDNNtz^_B5hHz;^ z+fufaTQbM3xZ`Ys#Q<@(;@&d&ZR4)-H@hKkE8EId_h{hgpzXEm~%Q#yGmk7EQ(FASd$dRsvLGSq@tLk31x{J zE;@6xD0bL{a@JoIE%~(nv_Auw20_>4_SDvP>%yjXRbSS}jkv;J3l&Av8Fo}y)NHV2ID4M_TFSRM%f*NPg0w&<;V2E`F#B2FF(!c? zWg|kh?dNLS&s8_>fW17G{(@kT4l_yGFr>ax6jLrVWyIP!<6m(%$$j!llhg%!D5{Ma z2aR_O@Szz%3#MERZAV*i<2rj%Ni4f#%Dg8}J3fpktxb{U>1Kx(=pAFzxC7WQc=B(6 zIL4AyTS%}3`;G0g22@Acy&iI)>CoM~+Kw@7hjFW|3+P^~U}<5vB(8-b+50fY1n+L{fpdVzk_DKv3tz1WjrKRy)H*!ngbME7kWxK9InfMFi352 zWi_;I>=sCLk(%P=z>w(k(039sWYlm_rvvEN^D++MTSqM33u zttO=$KgsZdkFhA^iYV~#X-K1KHKTs)$E^tB4*MNroseN^q+E+Km-e+(gZ(1$TY5%Dp+NQh4pugZ-^vwene5Uh+bip+k8CO(` zX%RqFs|(ZW44)*YExHQ!%vfAYidwJfu9sG8v9IA!-zk>bV8=mV5W7J@Z z*m~F;Mhu2@O8rneq^106|K-3kgm*=+L0ruF(jY&qrNM091XlE_-ju%g{Qw#Hx}K#M z>AttwCVRVs57c*<=`@{5DaNXDRn9_$Y{K)&6GEA1$}(vHF_mdmi0 zrw#{vX~Qr*U~u?h;1zdm6YBicJ1xiQf$w= ziq2k4SYd@UPrLcMmIP^mR@zEe+Dca}rLmW%6mKVu!dppW@JP}~heVN^z=7`aH(B$p zda-^RD1#@?-3O#1*`9_+O=_XTbBOXGKh~F-w;*#comKJC>G63)Jx|ymdg} zciU(Z$p3u>-oUQHb&uM22-|MC#djnGxK5`vWH0P2>U_Z->0Qv7hYZhkwzFpU3_997 z^(xfamBS~U=kZTa`&_-N|4$D-?{W~17cr4o3;Y}rc;chPX>~adG$Ie0N{=1`tpTNP YU{Aqb#jUx0Wbuikw``H;s~0Q(0DP|Q+yDRo diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_ma_Lucene50_0.tim b/src/main/resources/solr_config/Test_Sigmah/data/index/_ma_Lucene50_0.tim deleted file mode 100644 index ffd05e390ea5f8024387ef276aa7b7fba78beb5a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11098 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 diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_ma_Lucene54_0.dvm b/src/main/resources/solr_config/Test_Sigmah/data/index/_ma_Lucene54_0.dvm deleted file mode 100644 index c21729568d2aad1caede15e86920577476194cdc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4034 zcmb7`Yiv|S6vyw}$M){BU0S4+Qi^MVT$G2^0+tlIyQLZgDoA(uX zp(M66)DV1N_5+Rb&|s7hgv9*-QVFI!Dy2Mx5G94urBZ>))4BKjX9~OVgY#j3a~}81 z%$YN@6KGnTnl^FyypnfHMhq`lI&XUM;^igF3QNk1=NFe3E4*#knz{Ae)t5G{H}8)6 zEC17F9^w5)R(D0UJ$M^MQ1YxE=mFYm)X}~Hexqyvz%1|;@O7}AXtWVsZxhWl zFa$mzx_v~?d6POyX&*%lS_;(?OHtU&osD0Hg~E_4S_0L3RswoTu#*N2sgo*fUC7gV z(V@4d!ePpsh{JwsD{PA4HjL`(+Irrq`N)s8>L=yM)iBgr+G8$??*o#3bt3IyxBMy$ z-@3RRm`N6G2Urh2B4FoBAy+oBS3d0QMNWH=QT^5jJv zxo?h>A4F#fDPpe}_MLg{DhWh>EU^7~V_v`XLGD;G_S1I)KFI}Y0aG5LsVa7iCG#jk z3)d7&D1=kyNU=ng2`9_)P*47fL^+3)Yv;jI0xkftP0D{Il;x$Wsf>v^Xo;vgmPY~D zv?N4Qf;Xp46Md1eS*dXgniaPoJ{PezOp7h;s8>uPS>=pGx>t#rjkYkh80T&n62yYs+kC-i2*8M=r`2(~-e)rbpn@5O;oKXNnoQ zbTQIpO-8wlD6L)Rmo!QvEK9*UqKbbLeH+QfN@Bt;L|4^bYOk(h?v{u(i1Vi%m&F_! zbK?SiEpKYArB`e*Yb`PhxMTDlPl*NS__Nbft!^TeT^0k>OF1?Riax4$So{MwbGdl` zF^3zg#}PO8<_sKsrg^u+!Ecswh7RmmQQ>f}VPawWupF^L`Y;+x&z4gY3ZI-=HdHzP zdxP{zSu)BbM41{Fg^`8jgB!sUV!n&AWfa^zdYJ_y`SM>}3JO-FOn^dP(GEk#6F|qF=;??c@-`9j956~WT8S>c2X-_0&E_xw-XpqkHF(aNq|kRI z%h~RN>bplX#`4qiCvyYKfBEx|ZH|4hW01}9TenS>+ghKi=601XQ(XvE51y2z8@Re- zCn77Oi)PA`*c*lB7=uVt2;+bUrT^+zFriarb#_iQvv* zqEzU$XrI2Q!XG9A>6g zaE1P)!l5MhcB7Bjl>5 zz-LC>VTyeal;AKK^V8(l^YQhF^_?D@t;t7YSw=65Ad3akJuUebY8shaJxSQCX z1%`D;_NWpe*{*p$ zPLx5nGXEWo(?wpCQW3#jSR8 z4YYjJ6Tjlg?>k8vAKos$-yoj?o50gxGk69(3!VedgTLeUc8#_-xO-$!Z3|fxrKsxg G)PDghZz8Aw diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/segments_1yb b/src/main/resources/solr_config/Test_Sigmah/data/index/segments_1yb new file mode 100644 index 0000000000000000000000000000000000000000..f5edafe563e145e0163f5a427c474ed9a44f4e3d GIT binary patch literal 681 zcmcD&o+HjtoSL4SnpaZHz`(#}dMBrj=PCE&$iKBEm$psnWj3r#Vq*o$fPh{u0|QqS zkiiKQVu?30OkqS*U(4ZBnw*-KYG(8w3PAc`Y#0p^1M5#k*I!4P{xo#`4W#K$N7vs( zn*I!Q{Vk;F&qUYXMwCZ;j-$k1K9CZCX#Or6|OU}>D%`6GY%uV$TPEF=D dG&L}^G%`0cw=gs|JD@T71vr@iiMlnlzW~rqXAJ-V literal 0 HcmV?d00001 diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/segments_mg b/src/main/resources/solr_config/Test_Sigmah/data/index/segments_mg deleted file mode 100644 index 6cf69a27f9d912761b8d1e04028e765e5a6b917d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 167 zcmcD&o+HjtoSL4SnpaZHz`(%PIag_JVbh~Y?Hs=?KRV4UVaiQsV+BfpfM6H{1G6%a z!3Y#$j?YbGL{nYN;ZvHNnwM&3^dAa9+F)!L4H9Eu(^b diff --git a/src/main/resources/solr_config/Test_Sigmah/data/tlog/tlog.0000000000000000820 b/src/main/resources/solr_config/Test_Sigmah/data/tlog/tlog.0000000000000000820 deleted file mode 100644 index cb20febf668b0c87b86e1f33bc17abb89a23e9ba..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22129 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 URqT9lu~UAxY%&xM!rnXo54bNUqyPW_ diff --git a/src/main/resources/solr_config/Test_Sigmah/data/tlog/tlog.0000000000000000811 b/src/main/resources/solr_config/Test_Sigmah/data/tlog/tlog.0000000000000002538 similarity index 93% rename from src/main/resources/solr_config/Test_Sigmah/data/tlog/tlog.0000000000000000811 rename to src/main/resources/solr_config/Test_Sigmah/data/tlog/tlog.0000000000000002538 index ea0a497ef0ef9dcf2baece3eee16355b84393af0..9df9d9d9d33858ed7d07b6349c3afca9a8c8628b 100644 GIT binary patch delta 544 zcmdn+kn!0O=A_0amX>7X7sY3$=!3assYS(^ z`FTM8L`4~4jg#(kR86pCab{KO#;IzIY^o)hB{`{^cQaZr$*_nuJF<)3mc3D~ zz`!7&&tc!d!0>RsmP$%uN$TW_oT8gmSn64FADKHBhmd}-pO<$;hST79{K}sBoGt+YuGxYL{(qBzJ$RW)CS_P!|jhdl>g|V6O+sVe9 z#w_m?4c~*@#P&hiP|xJ!WOo)5iBFn92jmx(=NF}XRw*eeP5lBUzk<{;egl)=!Q_w0 z>8!H6KedW8^U`xt^-{_*e@!;z(q{Y(Ht`Qw*W`s<;-ac)i8;lo{~3@}{$~U!lKao3 zpIA_klbM`Y0t{q*pvC{0p$`1d(lq%2o8;uTTqcaHAjM4o*(O_Z%Zadq4gSvop*WQc z4gYh2z;lm*}s!@!WUq1h!tH`w1NC_co;-#y;d K&xL`3K@b3=Ji;mf delta 541 zcmaF-ka5F9#tGtTyc(J5dHF@DDe;DBnK`NPiKQhO`9<-mxrv!MnqZN<#N5=0ibfL` z3JYr^DN#$wPma$_*|qkIjzkqBl(rWEC(l2`5i#0$O4lhs4EKXH;s$7tg_RQSKz|dURz+BhJNWsX+%D~Xd*iz5Z z+~m26o2QTK3pGOn3u80mmpYChs}zC-J>7jBJzi;oB;$=O4J}_!4(Bvxd826fcCsRu zDBC+_Lp_uClXF;1BtB>Y&Cf3?&o4^(s8Ui?n)(S$eg>&y`~oJwg2``_dst-|zfVr& z(q{Yt5@G)dR{0CW7Wu83mY7qV`UlD5e?bzm|MU|J3UV@&6H7Al^Ynps{bzu>_CI6O zWL<8_$qL*ij7%W4O#hiD=Wxr3uz=0|&kCW~lnf33vxDUI{&PTtI3X05iF<&Lf_p}O zaY=Du@3*(E_Y*xx58KE%i0J>J#Ng@J)V F5C9^xzJ>q* diff --git a/src/main/resources/solr_config/Test_Sigmah/data/tlog/tlog.0000000000000000812 b/src/main/resources/solr_config/Test_Sigmah/data/tlog/tlog.0000000000000002539 similarity index 95% rename from src/main/resources/solr_config/Test_Sigmah/data/tlog/tlog.0000000000000000812 rename to src/main/resources/solr_config/Test_Sigmah/data/tlog/tlog.0000000000000002539 index 9233d8780238f31a81fbd291a763c09a21cc14dd..b305d0ce7482c7866daee2d788f800ac012e3ae6 100644 GIT binary patch delta 552 zcmbQWhUx4YrU~L)0veg=dHF@DDe)6+jV3k;%j>0O=A_0amX>7X7sY3$=!3assYS(^ z`FTM8L`4~4jg#(kR86pCab{KO#;IzIY^o)hB{`{^cQaZriL;0`JF<)3mc21w zfq_9lpToX^f#KnNgUwtl+gTVNP5!_k!S-0WASLa|WIj%b(5E_%DY=<>3c;T4zK$Nx zG~GOXT;q)`jf|cv8JoUP0kK{hB!ZMU6lbRACT8g67p1?_H#Ao$%hgRQN=+>;NK8(B ztpd{bM$ORJ#MHv#?PNbrW0rS{hVLiyvxu^NP&U*v{Wy66r-{TTO`yg3MdkTLDW6qJ zib_+zfXS~Qb&TJ@^7CoK(G(vdmwTeYmt4e}iP%|A2M<1+m5c zsir076sP`YKvMgk5hNw|pGiNlpdcqRIk5y7g!(|M|1(3K_@AX|@&h)>$sF7!jI1EV zCjZ%NLNZDfyh`&F3@jB4Ev<|VtW3=nLPMMtj0_CT{iy@2 z2=PEDUK95K9|iY}{Nj@0qkIjzkqBl(rEGuAO5YXYUZ(v|}INxxyKFfBN zdadHjy!4z@y_B-dM+S*0xtVzm#hK~3i5YtNMd^?A4b2tGa&^;+Qd5fy5|dM(m^&Bc zXIAJ2<(HX63 z%7%KT?Lvs5JExnEVV<$M^+APUhzlpWMSL%lLhA4VO0K z50Du9Pq31%icJ< zfPq0kpToX^f#KnNU6qu?lGMo`I7K(Bu=KGoKAL=wLxSzGazRSklgWQLB!ZsmIHu%g z<|zbwy8AkMJkxaZ^l^KMO)$?stD$7C5US>B&o#X!SzQuR{GGJj3B;?idP4U%R51J?By z#1{LfnwFSTocf;uN$r0|kd)kiCjG>Mf}G6c#1ddY>I1F*&kS|qf0m}n57;CpA7|s8 z%*?IM$O_V6@}JEnJT*ljIJH2*$WX!1!phLt%EVY9G{jlK$iUF-KRejo{~QpCQ_0Ze zKNm=&-hXb05D$dnHE|E{QE<=5FD@xgF3Kz@QLxklYUhK<@^9YGU0uv40FNpLhU(DC H4)vk{dc4S* delta 604 zcmeD9&v^A8;{`5i#0kBnQBLfp7qnA34AWIa2J>7jBJzjBZf+XXOEsacHPfp-8mVcvY_|^nyl9{f7rLK`- zh@pj*p)t^;sCUYSdZzCu=dhSKf6xTlmtRz#UzGAurKG4d^%I!?Z?P8IgVS5k$G}7yR7Jc7O(~XSs@gglA+0ec96U-2SkJuLUEb62lyzs zXXF=`6ekyD7L+Jh>KU5-=Z47gY<|UEU98Ltk75RfYWHTB1l?eNpP={cegWN~Iy>c;t{EYb$ej_jhhWp643Ffa(%ao9I7 zFg%=Zr;?Ibk~;Yzx9DaUR(ICP>$oJ?pQr#$sCYX0ESE&cGabj2+{`?MU{7~nM~~;4 zZk|4_@y3=$7B7^HO<$^jSg#BcK}sBoGt+YuGxYL{(qHR46(wfo#Rr!b6{Y5-q!ztV z0qJ|IYGi0(Z1iq254SPPdqu+!AZwjJDj6AnQZ_a){j6?iqGtdEUo;C+((;SS^NUix zDj6DoQ?@j>_^y&(nw0rN-y^j=C$*$RHy|-NJFzI`CrIwsWJO+4mfuPyW|JRqi-Qbh z{0Aas{xhhUnwp#aXH@gcFUn2K`OgGY^Pd@L=6@ED0?z-eDrTl8hX2_nGjfV?{AUL_ z<39&Tis?V+#wK>NiQ`9Wrg{1?!7 zOvx;%OjK}8$;bpcvGTtlNV;A~(fGeG#5NHOC87{_iUHM#1B2tg1S}~2OTwHk1+hyS zJp}&C05!>Ch|1aDF$PD1E+i5*f9L%msVomq01OODFPdEvbc6kUg5pDb{N3YS{ahFr G7z6`5i#0p$n@hdeQATwq`Q z=Y~)`AdMLQ_|FS6y#7C*zGF&eNoAsfV@gIQ(C?N1`LU}PP&EE82yvGXh8|(C2mgxz z)rbNE{=XP3(Ep3WJS_onjU-A~O9KP@zZ6iHG>R}tRA#d<-+xIyS$N80U{JayKRLdnvLICxELogcmAY}NCJW!KW=D3>+p;&EKQJ%|SZzMT63m)w?p&0g zS)m)0Uz(n(;8v8FcX)YXW^t;*V-=tw6;I5K3=GY64a{|oj1-KFtPD)73{3S*%}t-` zIHu%g<|zbwy8AkMJkxaZ^l^_jK1kRreu~>CMr0lWMpP17FB)+iT;@UpF@=Or;?H7FOX4;zro}m z5Gnar#n{x;;Gddbeo<~>&VL4=qW_GF7XO(*vYh{!RZI-cO#ZV>-peh{&I+>rKO0Df z=|B7A0(MW{{~Qp<{^xA6XPunKBR=^9JMZKi9#d5=bf^61#t`8FIgIH)FUWLZJ`8Do zkaWa<0Y#(#f)IBIVW<%XyZ^rkP>m=sg#L@cLg&9Y%uf;+nk0d$r8bxFHVP<9!=s&n cLDHw$B|$gX-zO+O#K+$~-qp{Afq_8~0Bz^l`Tzg` delta 605 zcmX?XGs9+rxSFI!W_n(JQEE!OVOnNRYJ6g8Nk)EAd}?lDW{xIUBrh>Hb)urt#D&7b z+DJ;&Qu34IGgCHh(PZJ<-R#INdeh`!*#-s%0gKJAS%O(L3=&gvGxHpZGt+YuGxYL{ z(jS{R7L{Zs1MSF5EKANvEy+uaH#B=P*^Wzs{izDjw2EhwW4R>MpR2fe`nbMOH8e9e zGJC1x2r@JI-%c)M6SaA#WNh|c+0fMJgSw%K zo&gYi)GSCz%P%U=FG~5OXz^Lu%*g1AzGF&eNoAsfV@gJ5c4ATGSCHtp$sbuoS-&e8 zS^fYS#rP9U{sNKWzg3J)O%492`Q;boCg%JFs`;mA@t*-Cr~aQ&#l+CepvUBSO3{37x2WWa-h5CKPQF= z*W`~pV%pp|?BKyr&kIr?&ZlVfpC95p0SqOAU{C!Q0;&-P2HSrTSdje}g?jYA7=|Ws qplXTD^LZNulqKPD&A=e((Cm_+8|?2B6d&T_?;h{!=fc3iAP4}FzSmp; diff --git a/src/main/resources/solr_config/Test_Sigmah/data/tlog/tlog.0000000000000000816 b/src/main/resources/solr_config/Test_Sigmah/data/tlog/tlog.0000000000000002543 similarity index 65% rename from src/main/resources/solr_config/Test_Sigmah/data/tlog/tlog.0000000000000000816 rename to src/main/resources/solr_config/Test_Sigmah/data/tlog/tlog.0000000000000002543 index 3654c0fe852f2d2ccedff3c546e66132c6d6a4e6..de92aa1dbc867d2e36432109a3669bf3c207a8c4 100644 GIT binary patch delta 624 zcmez5G}n28xR|I$W_n(JQEE!OHjI&(n?BLg$VfXaGbc4Zv9u&3zep`5KRG@#MGr{` z$khjP%TkMqGxPI+{E50U!WtlzC6xuKnqbM|%&OFl3!RwxSs0of*+p;5-pmwWU=T3b z{E0c2CCA*kC_l48Hz>a}JypT2C^7Hw^2E&IRD~zXKvSNY8yOgy>l&Er8W|}V8Ce;a zSQ(n?nHict({W76&CF8>_H_4k^mwl6=IP@aZ)|C7{6fjt^rZ@j^~xX-q{N{(Gd(vk zLodH5{q^KR4h_CHDj>ygRn3jfjV#_x{?1{{@m|sJgOZ`a$H^NxMMFO6d!&}2EXF*Go?Fo1&p z%tna?1v#0?i6y{r*3T^lx#m9$#1sEnCr5LI^Rt27^`9L=aexd<<;3cq|6C9?+}LG# z6ixo~LR9d9-T9v%C?Wt1q5pzV7ylQ6$O{7{L^j)U3yCRh14%$(Ht;>@a4 zZ7?gbv?L?HNDU;NnX>VK6Ei>a!)8Zz(VHd*H!omd5HQ*-$dbzTJ$D-I3Dr<3bAB-oxQ1GPV&JcmO<{e_B~r;qDPRdZu=Ba2r$jv!qM!Jh8E zjvlWyK~nL?md3_!CM$3nbG%hFe5Yh+@P4u*t7ymveUH@goYayM-GId8?8Ks!kD3K3 zY57Iv`9&$8lr4-6KdYpdCS`s>SN0Vo_szt}z|ct7z+BhZFvQTn3Wy90qP~L+X8Zvn zCm-e%=Tk8Oy6U%@Uw%<;V$L71|%`nKy1VR3_6Ae#uf%p@So8rv7jI)GdZy& zGe1v1w;1G-|4a~{{bz2nXPvyBOMLPIE?a&Uu+#ptLMS$nnQ8yovAXF$2SgDkc3Cb( zlmFZh6+B?){^tdX@Bu^VKR?vr{{ns=we`yEopX1&<*zY35pN# P@pq4R^>blhU=RcV3n#fp diff --git a/src/main/resources/solr_config/Test_Sigmah/data/tlog/tlog.0000000000000000817 b/src/main/resources/solr_config/Test_Sigmah/data/tlog/tlog.0000000000000002544 similarity index 50% rename from src/main/resources/solr_config/Test_Sigmah/data/tlog/tlog.0000000000000000817 rename to src/main/resources/solr_config/Test_Sigmah/data/tlog/tlog.0000000000000002544 index 86690d874854c00ec3017ca6e424190a7c5771d9..43ea9c251ce8ab179a8f7838e634e88b3d3288e7 100644 GIT binary patch delta 685 zcmZ2!blYfxxQMt$W_n(JQEE!OCX7)q(cQ>MJ1sLOH9oPlBqP5_EhRrWJ~KrRNeIZ* z2Xo6(i;6Sz^ML$`+A_i#AeAMR1*w`~$>Pka)Q$567}-=yGD~t&H?L=OW)f!+ZFXcA zy)ApQD}jMQz>LGbfq~)SeB;fWEa@yvkGd!S=Mck!x#b_5I~V0=R_F%hm!_vGxD_Sl z9bTT8S)8iyL>Xx7)5!*E*N98+>L^Av(T-F+QBo@=^!`nbj$TN<0aP%<`ssRClX zGDrj|aVXAA&rQtG%P&fQZO<`Tkw=~HjS5KlTU8@-GZTw- zd(O!XJQ_@ox+lNqP(;FFqK^#{Q*tx&9Evm3a}zW4@{7`+*mF#79gp@)k~G_P2_L z?-WhmPj+Mxwfms&ky@UUT2i7LkeHmESd{WnvmhlczosCM&RsO}@Y- zsjY2fZU6)SnT!$(3UV@&6H7Al^Yn9zL6-k#hWO<_%jA6SaDG;>GybzdD0YxJO#eAR z_H+K{ga~qhcn1Hu6%GIMKty=KPWjIV6yaAi`7Z!<(|H3m#<=c@`1rfWyZX5>Ffa%L0E(l!$p8QV diff --git a/src/main/resources/solr_config/Test_Sigmah/data/tlog/tlog.0000000000000000818 b/src/main/resources/solr_config/Test_Sigmah/data/tlog/tlog.0000000000000002545 similarity index 92% rename from src/main/resources/solr_config/Test_Sigmah/data/tlog/tlog.0000000000000000818 rename to src/main/resources/solr_config/Test_Sigmah/data/tlog/tlog.0000000000000002545 index abc72916e0f13334610998773e6b30a1647a957a..47926d6e0963dbebea98f11827a6e67d74bf992c 100644 GIT binary patch delta 546 zcmcb*hp}TX;{1%ii3w zfPq0kpToX^f#KnNO_h|ylGMo$IYl?CuvD@zKAL=iLxSzGazRSklgaNmBqE;bIHu%g z<|zbwy8AkMJkxaZ^l^qEq$IVd^0f*`?;BN1QxgNrx07`_jal9)8omeF&GtdrP|xJ!-q~~i~UngOUx-w{m+1;_CF&?O7=gKequpEPG)jq2{1VIfmZ)#hPd!QOVi~0 zY?70oahWi(g4CM)XR`@UO;K0O=A_0amX>7X7sY3$=!3assYS(^ z`FTM8L`4~4jg#(kR86pCab{KO#;IzIY^o)hB{`{^cQaZr$*_nuJF<)3mc98T zfq_9lpToX^f#KnN1C^A-lGMqK+@hORSmv_SKQebN%FnFO4azS~PgQU$O3XXFJTbF4 zRpGI6K}y;ab0Y&ob6o>-T_a-!Lt`rg6DtE_J!1o-r#g-)xtVzi!Jh8Ejvmi6-8_9< z>3R5CRG&jpg!<%WpxKqy`l_W&OS_l*4FlH%l|%z_dHOFcug|9lWx{>?|Y ke=bxOfX5jF!^#KEE(yB9{ystRAwK@@@veR@3=9l{00R!m@&Et; delta 529 zcmbPyhv~s>rU~L|yc(J5dHF@DDe;DBnK`NPiKQhO`9<-mxrv!MnqZN<#N5=0ibfL` z3JYr^DN#$wPma$_*|qkIjzkqBl(rc?vKv2`5i#0$O4lhs4EKXH;s$7tg_RQSKz|dURz+BhJSi#WP%D}|Rz*x`N!05S(o2QTK z3pGPiBV%)empYChD-?n~-F+QBUTL~<0wv>(Elo{cPtN5uW_hD%_;#`)mnhpiWkWsF z_mlT?nn--m1e%{;RGwdy@=>Lvs5JExnEVV<$M^+Ieg%`?Ci`;9GJc=Di&dNP2S|kd zCs^e#5L@K8YFc7Waq1r=5B~*8$o$h!EGWpyOinDx%+J#Y+V!6S>e~N|lV!O57@0uI znEo?Qj%Jq?{m%k6^FJ$uVpB3S|IZFmp!c5xBE$)yxJ=vwd=%U>@{3D~lZ!G7N)#;h v49)&?Lu7e2f9L+WP?;AVFANMTFEzU)=mz`y1jUE=_`Aou`nfPLFbDzwzr4Fz diff --git a/src/main/resources/solr_config/Test_Sigmah/data/tlog/tlog.0000000000000002547 b/src/main/resources/solr_config/Test_Sigmah/data/tlog/tlog.0000000000000002547 new file mode 100644 index 0000000000000000000000000000000000000000..2af556a7ffefa6e91090dd85c5721c40f19a69df GIT binary patch literal 2718 zcmds3NpB-X6mCXBkU>bSN2G^{NUXTqZO3ak7-t#e!Qhbbj7CDpRNSw-OX==vs;iSY z2Q*@Coae$X;D_)p;KZ=+>kr^nx3@$j6A*B~wrp3`_qOkQuk0&VuM}?ddwat{um4JC zB~g+`UUF}hdy$an44WD9JHTUA$`Ou3Xoo3WTd;W15u+h@ ztc5LF<`#!26Y@jr^5QXuj0c5mCt@M4Y7c50W4@K}6I{s-xnpOaQ#Vl>u1}MuDv*Uk z4W8{C4`U`1%5i`E(iz-HL<%F7g{e-@7B^QWi^6ak%`hHn-0eK_>?hBC{MfExJn_t< z?K_6?>HBL7p_gm5n!R@0+|A;eo8$JwM4-iDHuBL@{D4_mO48a!m!*Nqfbx{Z)8|-( zd?ZC8TxAJy90pdufBUswZofWBVX=Th?6^W63F#EK@?y;aaoS#GaUAebCTQs}ax4*J zME(dIGL@LZb@>QMf;1$8EbSncVuVRTT|!}}C-)m$Qt)GQPoy5gHOZonK4d&W_-vUV z$DcPUcDZ5NP1CMHd3|HOu~BPUExZ23+RX$dym7NL*xUKCaIM?h8Lqc#jjvv4mFr(G z>#yI~DM6|)C)^8}ZxJ8g)`qXL0J$TQ5#vl z7@E~`%Qc%wZ}m#GR(0$3y6f2Gnq6*H>}sRgva3HnU;ZgG{`tMj3Dy1^;`}mK;@5wS z{omU69)GhFu_zj|x4?uR2J{`%uklnxYK?0r-P7(G~1ref?fD*8ez#tF`l28cc zlN=^=Iu=|7{UUa`5|Xn3GL~rv20j9E&sUIL79d=R#Ss~j!N8Y@u%|B(pe_P(2r%h6 z07YX7M_l>YKJ{8rn;eM@3fo8`M}!hU-6mPAQCyNi5S#+;`a%hh0RDL5lTrwURFow( zs>b#soX5{=FnMHd`5axyQ_!V)hzDa@CXNVo$=XaOuXB)TfI5Q^n2x`AoCU@etO{TYN>RvhFF{jcg4GLM~b zYKu$iR)jQi&_((sq)F5LrCFE!kQCI9cRN;x64tL<`7a=p&l{ZS+?*bpOikS`=ZHBO zqs(X~rJ#`~{DpEZj@8`yL1N}wo>Foyvy-`HfMiChdZxt8;0@Z9~q~u A-v9sr literal 0 HcmV?d00001 From fb2f93e544042753fc7b5e2854492445d5a67296 Mon Sep 17 00:00:00 2001 From: indianauthority97 Date: Mon, 7 Aug 2017 01:12:30 +0530 Subject: [PATCH 30/36] [Issue #535]:Multiple changes to UIs of search bar, results and admin --- .../ui/presenter/DashboardPresenter.java | 2 +- .../ui/presenter/SearchResultsPresenter.java | 2 +- .../admin/ParametersAdminPresenter.java | 38 +- .../ui/presenter/zone/SearchPresenter.java | 104 +-- .../client/ui/view/ApplicationView.java | 4 +- .../client/ui/view/SearchResultsView.java | 105 ++- .../ui/view/admin/ParametersAdminView.java | 881 +++++++++--------- .../client/ui/view/zone/SearchView.java | 141 ++- .../sigmah/server/search/SolrSearcher.java | 10 +- 9 files changed, 664 insertions(+), 623 deletions(-) diff --git a/src/main/java/org/sigmah/client/ui/presenter/DashboardPresenter.java b/src/main/java/org/sigmah/client/ui/presenter/DashboardPresenter.java index d32add6ec..ed5305b9a 100644 --- a/src/main/java/org/sigmah/client/ui/presenter/DashboardPresenter.java +++ b/src/main/java/org/sigmah/client/ui/presenter/DashboardPresenter.java @@ -288,7 +288,7 @@ public void onFailure(Throwable caught) { public void onSuccess(Boolean result) { Boolean dih_success = result; if (dih_success == true) { - Window.alert("Successfully updated Solr Core!"); + //Window.alert("Successfully updated Solr Core!"); } else { Window.alert("Failed to update Solr Core! Check that the url is valid!"); } diff --git a/src/main/java/org/sigmah/client/ui/presenter/SearchResultsPresenter.java b/src/main/java/org/sigmah/client/ui/presenter/SearchResultsPresenter.java index fefe164f7..c6036c027 100644 --- a/src/main/java/org/sigmah/client/ui/presenter/SearchResultsPresenter.java +++ b/src/main/java/org/sigmah/client/ui/presenter/SearchResultsPresenter.java @@ -276,7 +276,7 @@ public void onLoad(String result) { view.setProjectIdsForFiltering((Set) request.getData(RequestParameter.FILTER_PROJECT_IDS)); view.setOrgUnitIdsForFiltering((Set) request.getData(RequestParameter.FILTER_ORGUNIT_IDS)); view.setContactIdsForFiltering((Set) request.getData(RequestParameter.FILTER_CONTACT_IDS)); - Window.alert(auth().getUserId().toString()); +// Window.alert(auth().getUserId().toString()); view.setUserId(auth().getUserId().toString()); view.addSearchData(request.getData(RequestParameter.CONTENT)); //Window.alert("Completed addSearchData!"); diff --git a/src/main/java/org/sigmah/client/ui/presenter/admin/ParametersAdminPresenter.java b/src/main/java/org/sigmah/client/ui/presenter/admin/ParametersAdminPresenter.java index b35017d0a..9acb07c0f 100644 --- a/src/main/java/org/sigmah/client/ui/presenter/admin/ParametersAdminPresenter.java +++ b/src/main/java/org/sigmah/client/ui/presenter/admin/ParametersAdminPresenter.java @@ -421,23 +421,25 @@ public void onCommandSuccess(final GlobalExportSettingsDTO result) { // view.getManualIndexButton(). view.getManualIndexButton().addListener(Events.OnClick, new Listener() { - // funnily this is getting fired twice on button click - @Override public void handleEvent(ButtonEvent be) { // TODO Auto-generated method stub searchService.index(new AsyncCallback() { public void onFailure(Throwable caught) { - Window.alert("Failure on the server side!"); +// Window.alert("Failure on the server side!"); + N10N.errorNotif("Failed to complete Solr Data Import!", + "Check your connection with Solr Server!"); caught.printStackTrace(); } public void onSuccess(Boolean result) { - Boolean dih_success = result; - if (dih_success) { + Boolean fih_success = result; + if (fih_success) { FilesImport(); } else { - Window.alert("Failed to complete data Import!"); +// Window.alert("Failed to complete data Import!"); + N10N.errorNotif("Failed to complete Solr Data Import!", + "Check your connection with Solr Server!"); } } }); @@ -454,14 +456,18 @@ public void FilesImport() { public void onCommandSuccess(final FilesSolrIndexDTO result) { if (result == null) { - Window.alert("Unsuccessful files indexing!"); + N10N.errorNotif("Failed to complete Solr Files Import!", + "Check your connection with Solr Server!"); } else { // N10N.warn(I18N.CONSTANTS.backupManagement_process_alreadyRunning()); if (result.isResult()) { - Window.alert("Successfully completed data and files import!"); +// Window.alert("Successfully completed data and files import!"); + N10N.validNotif("Successfully completed data and files import!", + "You can now carry out search."); } else { - Window.alert("Failed to complete files indexing!"); + N10N.errorNotif("Failed to index all files to Solr Server!", + "Check your connection with Solr Server!"); } } @@ -699,7 +705,7 @@ private void saveSolrSettingsForm(final String solrCoreUrl) { organizationDTO.setLogo(auth().getOrganizationLogo()); organizationDTO.setSolrCoreUrl(solrCoreUrl); - // Saves new organization name. + // Saves new organization core url. dispatch.execute(new UpdateOrganization(organizationDTO), new CommandResultHandler() { @Override @@ -716,16 +722,22 @@ public void onCommandSuccess(final OrganizationDTO result) { view.getSolrSettingsForm().resetValueHasChanged(); searchService.updateCore(solrCoreUrl, new AsyncCallback() { public void onFailure(Throwable caught) { - Window.alert("Could not update Solr Core. Check that the url is valid!"); +// Window.alert("Could not update Solr Core. Check that the url is valid!"); + N10N.errorNotif("Failed to update Solr Core!", + "Check that the url entered is valid!"); caught.printStackTrace(); } public void onSuccess(Boolean result) { Boolean dih_success = result; if (dih_success == true) { - Window.alert("Successfully updated Solr Core!"); + N10N.validNotif("Successfully updated Solr Core!", + "You can now carry out search."); +// Window.alert("Successfully updated Solr Core!"); } else { - Window.alert("Failed to update Solr Core! Check that the url is valid!"); + N10N.errorNotif("Failed to update Solr Core!", + "Check that the url entered is valid!"); +// Window.alert("Check that the url is valid!"); } } }); diff --git a/src/main/java/org/sigmah/client/ui/presenter/zone/SearchPresenter.java b/src/main/java/org/sigmah/client/ui/presenter/zone/SearchPresenter.java index ff48da568..cdcad159a 100644 --- a/src/main/java/org/sigmah/client/ui/presenter/zone/SearchPresenter.java +++ b/src/main/java/org/sigmah/client/ui/presenter/zone/SearchPresenter.java @@ -50,8 +50,15 @@ import org.sigmah.shared.util.ProfileUtils; import com.allen_sauer.gwt.log.client.Log; +import com.extjs.gxt.ui.client.event.ButtonEvent; +import com.extjs.gxt.ui.client.event.ComponentEvent; import com.extjs.gxt.ui.client.event.Events; +import com.extjs.gxt.ui.client.event.KeyEvent; +import com.extjs.gxt.ui.client.event.KeyListener; +import com.extjs.gxt.ui.client.event.Listener; import com.extjs.gxt.ui.client.store.TreeStore; +import com.extjs.gxt.ui.client.widget.form.SimpleComboBox; +import com.extjs.gxt.ui.client.widget.form.TextField; import com.google.gwt.core.client.GWT; import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.event.dom.client.ClickHandler; @@ -62,7 +69,10 @@ import com.google.gwt.event.dom.client.KeyUpHandler; import com.google.gwt.user.client.Window; import com.google.gwt.user.client.rpc.AsyncCallback; -import com.google.gwt.user.client.ui.Button; +//import com.google.gwt.user.client.ui.Button; +import org.sigmah.client.ui.widget.button.Button; + +import com.google.gwt.user.client.ui.FlexTable; import com.google.gwt.user.client.ui.HasHTML; import com.google.gwt.user.client.ui.Label; import com.google.gwt.user.client.ui.ListBox; @@ -126,17 +136,15 @@ public SearchPresenter(View view, Injector injector) { @ImplementedBy(SearchView.class) public static interface View extends ViewInterface { - HasHTML getNameLabel(); - - Panel getSearchBarPanel(); + Button getNewSearchButton(); - ListBox getSearchOptions(); + SimpleComboBox getSearchOptionsComboBox(); - TextBox getSearchText(); + TextField getSearchTextField(); - Button getSearchButton(); + Panel getSearchBarPanel(); - Button getIndexButton(); + List getNewSearchOptions(); } @@ -155,15 +163,16 @@ public Zone getZone() { @Override public void onBind() { - view.getSearchText().addKeyUpHandler(new KeyUpHandler() { + view.getNewSearchButton().addListener(Events.OnClick, new Listener() { @Override - public void onKeyUp(KeyUpEvent event) { - if (event.getNativeKeyCode() == KeyCodes.KEY_ENTER) { - - textToServer = view.getSearchText().getText(); - int sel_ind = view.getSearchOptions().getSelectedIndex(); - filter = view.getSearchOptions().getValue(sel_ind); + public void handleEvent(ButtonEvent be) { + // TODO Auto-generated method stub + textToServer = view.getSearchTextField().getValue(); + view.getSearchTextField().clear(); + int sel_ind = view.getSearchOptionsComboBox().getSelectedIndex(); + filter = view.getNewSearchOptions().get(sel_ind); + if (textToServer != null) { if (textToServer.length() > 0) { search(); } @@ -171,30 +180,21 @@ public void onKeyUp(KeyUpEvent event) { } }); - - view.getSearchButton().addClickHandler(new ClickHandler() { - + + view.getSearchTextField().addKeyListener(new KeyListener() { + @Override - public void onClick(ClickEvent event) { - - textToServer = view.getSearchText().getText(); - int sel_ind = view.getSearchOptions().getSelectedIndex(); - filter = view.getSearchOptions().getValue(sel_ind); - if (textToServer.length() > 0) { - search(); - } - } - - }); - - view.getIndexButton().addClickHandler(new ClickHandler() { - public void onClick(ClickEvent event) { - try { - filesIndex(); - } catch (IOException e) { - // TODO Auto-generated catch block - Window.alert("IO Exception!"); - e.printStackTrace(); + public void componentKeyUp(ComponentEvent event){ + if (event.getKeyCode() == KeyCodes.KEY_ENTER){ + if (view.getSearchTextField().getValue() != null){ + if(view.getSearchTextField().getValue().length() > 0 ){ + textToServer = view.getSearchTextField().getValue(); + view.getSearchTextField().clear(); + int sel_ind = view.getSearchOptionsComboBox().getSelectedIndex(); + filter = view.getNewSearchOptions().get(sel_ind); + search(); + } + } } } }); @@ -203,7 +203,6 @@ public void onClick(ClickEvent event) { private void search() { - if (firstsearch) { // dummy call just to make connection searchService.search(textToServer, filter, new AsyncCallback>() { @@ -240,29 +239,6 @@ public void onSuccess(ArrayList result) { }); } - private void filesIndex() throws IOException { - - dispatch.execute(new FilesSolrIndexCommand(), new CommandResultHandler() { - - @Override - public void onCommandSuccess(final FilesSolrIndexDTO result) { - - if (result == null) { - Window.alert("Yeh kya ho gya!"); - - } else { - //N10N.warn(I18N.CONSTANTS.backupManagement_process_alreadyRunning()); - if( result.isResult()){ - Window.alert("Successfully completed files indexing!"); - }else{ - Window.alert("Failed to complete files indexing!"); - } - } - - } - - }); - } private void loadProjectIdsForFiltering() { Integer[] orgUnitsIds = auth().getOrgUnitIds().toArray(new Integer[auth().getOrgUnitIds().size()]); @@ -272,10 +248,10 @@ private void loadProjectIdsForFiltering() { cmd.setMappingMode(ProjectDTO.Mode._USE_PROJECT_MAPPER); dispatch.execute(cmd, new CommandResultHandler>() { - + @Override public void onCommandFailure(final Throwable e) { - //Window.alert("Error while getting contacts."); + // Window.alert("Error while getting contacts."); } @Override diff --git a/src/main/java/org/sigmah/client/ui/view/ApplicationView.java b/src/main/java/org/sigmah/client/ui/view/ApplicationView.java index 42a8de229..3a41191db 100644 --- a/src/main/java/org/sigmah/client/ui/view/ApplicationView.java +++ b/src/main/java/org/sigmah/client/ui/view/ApplicationView.java @@ -241,7 +241,7 @@ private void buildView() { headerPanel.add(headerLeftPanel); headerPanel.add(headerMiddlePanel); headerPanel.add(headerMiddleRightPanel); - headerPanel.add(headerRightPanel); + headerPanel.add(headerRightPanel); // Menu. @@ -383,7 +383,7 @@ public void initZones(OrganizationBannerPresenter.View organizationBannerView, A // Organization name. headerMiddlePanel.add(organizationBannerView.getNamePanel()); - //here is where I should add my search panels + //Search Bar panel headerMiddleRightPanel.add(searchView.getSearchBarPanel()); // User name. diff --git a/src/main/java/org/sigmah/client/ui/view/SearchResultsView.java b/src/main/java/org/sigmah/client/ui/view/SearchResultsView.java index fbb3e6a6d..179d22aa6 100644 --- a/src/main/java/org/sigmah/client/ui/view/SearchResultsView.java +++ b/src/main/java/org/sigmah/client/ui/view/SearchResultsView.java @@ -93,16 +93,20 @@ import com.google.gson.Gson; import com.google.gson.reflect.TypeToken; import com.google.gwt.core.client.GWT; +import com.google.gwt.dom.client.Element; +import com.google.gwt.dom.client.SpanElement; import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.event.dom.client.ClickHandler; import com.google.gwt.i18n.client.DateTimeFormat; import com.google.gwt.json.client.JSONObject; import com.google.gwt.json.client.JSONParser; import com.google.gwt.json.client.JSONValue; +import com.google.gwt.user.client.DOM; import com.google.gwt.user.client.Window; import com.google.gwt.user.client.ui.AbstractImagePrototype; import com.google.gwt.user.client.ui.HTML; import com.google.gwt.user.client.ui.HorizontalPanel; +import com.google.gwt.user.client.ui.InlineHTML; import com.google.gwt.user.client.ui.Panel; import com.google.gwt.user.client.ui.VerticalPanel; import com.google.gwt.user.client.ui.Widget; @@ -451,87 +455,118 @@ public String getNiceText(Map resultsMap) { pmt = ProjectModelType.LOCAL_PARTNER; htmlBuilder += "

"; - htmlBuilder += "
" + getProjectLogo(pmt).getHTML() + "
" - + "
" + htmlBuilder += "
" + + getProjectLogo(pmt).getHTML() + "
" + + "
" + resultsMap.get("project_name") + " - " + resultsMap.get("project_fullname") + "
"; htmlBuilder += "
"; htmlBuilder += "

"; htmlBuilder += "
Active Phase: " + resultsMap.get("phase_model_name"); - htmlBuilder += "
Organisational Unit: " + resultsMap.get("project_org_unit_name") + " - " - + resultsMap.get("project_org_unit_fullname"); + htmlBuilder += "
Organisational Unit: " + resultsMap.get("project_org_unit_name") + + " - " + resultsMap.get("project_org_unit_fullname"); htmlBuilder += "
Amendment Status: " + resultsMap.get("amendment_status"); htmlBuilder += "
Project Model: " + resultsMap.get("pmodel_name"); + htmlBuilder += "
Project Model Type: " + resultsMap.get("type_pmodel"); + htmlBuilder += "
Start Date: " + resultsMap.get("project_startdate"); + htmlBuilder += "
Planned Budget: " + resultsMap.get("planned_budget"); htmlBuilder += "


"; } if (resultsMap.get("doc_type").toString().equals("ORG_UNIT")) { - htmlBuilder += "
"; - htmlBuilder += "
" + getOrgUnitLogo().getHTML() + "
" - + "
" + htmlBuilder += "
"; + htmlBuilder += "
" + + getOrgUnitLogo().getHTML() + "
" + + "
" + resultsMap.get("org_unit_name") + " - " + resultsMap.get("org_unit_fullname") + "
"; htmlBuilder += "
"; htmlBuilder += "

"; htmlBuilder += "
Model: " + resultsMap.get("org_unit_model_name"); + htmlBuilder += "
Model Status: " + resultsMap.get("org_unit_model_status"); htmlBuilder += "
" + "Country: " + resultsMap.get("org_unit_country_iso2") + " - " + resultsMap.get("org_unit_country_name"); + htmlBuilder += "
Planned Budget: " + resultsMap.get("org_unit_planned_budget"); + htmlBuilder += "
Organization: " + resultsMap.get("org_unit_model_organization_name"); htmlBuilder += "


"; } if (resultsMap.get("doc_type").toString().equals("CONTACT")) { - ContactModelType cmt = null; - if (resultsMap.get("contact_model_type").equals("INDIVIDUAL")) - cmt = ContactModelType.INDIVIDUAL; - if (resultsMap.get("contact_model_type").equals("ORGANIZATION")) - cmt = ContactModelType.ORGANIZATION; - - //htmlBuilder += "
" + getContactLogo(cmt) + "

"; +// ContactModelType cmt = null; +// if (resultsMap.get("contact_model_type").equals("INDIVIDUAL")) +// cmt = ContactModelType.INDIVIDUAL; +// if (resultsMap.get("contact_model_type").equals("ORGANIZATION")) +// cmt = ContactModelType.ORGANIZATION; + htmlBuilder += "
"; - htmlBuilder += "
" + getContactLogo(cmt) + "
" - + "
"; + htmlBuilder += "
" + + "
" + + IconImageBundle.ICONS.user().createImage() + "
" + + "
"; if (resultsMap.get("user_firstname") != null) { htmlBuilder += resultsMap.get("user_firstname") + " - " + resultsMap.get("user_name"); htmlBuilder += "
"; } else { // for organization contacts htmlBuilder += resultsMap.get("organization_name"); - htmlBuilder += "

"; + htmlBuilder += "
"; + htmlBuilder += "
"; + htmlBuilder += "
Contact type: " + resultsMap.get("contact_model_type"); + htmlBuilder += "
Contact Model Name: " + resultsMap.get("contact_model_name"); + htmlBuilder += "

"; return htmlBuilder; } htmlBuilder += "
"; htmlBuilder += "

"; htmlBuilder += "
Email ID: " + resultsMap.get("user_email"); htmlBuilder += "
Locale: " + resultsMap.get("user_locale"); + htmlBuilder += "
Contact type: " + resultsMap.get("contact_model_type"); + htmlBuilder += "
Contact Model Name: " + resultsMap.get("contact_model_name"); htmlBuilder += "


"; + } if (resultsMap.get("doc_type").toString().equals("FILE")) { htmlBuilder += "
"; - htmlBuilder += "
" + IconImageBundle.ICONS.attach().createImage() + "
" - + "
"; + htmlBuilder += "
" + + IconImageBundle.ICONS.attach().createImage() + "
" + + "
"; if(resultsMap.get("title") != null){ - htmlBuilder += resultsMap.get("title") + " - " + resultsMap.get("file_name") + "." + resultsMap.get("file_ext"); + htmlBuilder += resultsMap.get("title") + " - " + resultsMap.get("file_name") + "." + + resultsMap.get("file_ext"); }else{ htmlBuilder += resultsMap.get("file_name") + "." + resultsMap.get("file_ext"); } htmlBuilder += "
"; - htmlBuilder += "
"; + htmlBuilder += "
"; htmlBuilder += "

"; - htmlBuilder += "
Author: " + resultsMap.get("file_author") + " - " + resultsMap.get("file_author_email"); + htmlBuilder += "
Author: " + resultsMap.get("file_author") + " - " + + resultsMap.get("file_author_email"); htmlBuilder += "

"; htmlBuilder += "

"; - //Window.alert(resultsMap.get("content").substring(0, 400)); - //Window.alert(resultsMap.get("content").substring(0, 400).replaceAll("\\r\\n|\\r|\\n", "")); String contentString; if(resultsMap.get("title") != null){ - contentString = resultsMap.get("content").substring(resultsMap.get("title").length()+1, min(900,resultsMap.get("content").length()) ).replaceAll("\\\\n", ""); + contentString = resultsMap.get("content") + .substring(resultsMap.get("title").length()+1, + min(900,resultsMap.get("content").length()) ).replaceAll("\\\\n", ""); }else{ - contentString = resultsMap.get("content").substring(0, min(900,resultsMap.get("content").length())).replaceAll("\\\\n", ""); + contentString = resultsMap.get("content").substring(0, + min(900,resultsMap.get("content").length())).replaceAll("\\\\n", ""); } int i; for( i = 180; i<= min(800,contentString.length()); i+=180 ){ htmlBuilder += "
" + contentString.substring(i-180, i); } - htmlBuilder += "
" + contentString.substring(i-180,contentString.length()) + "...
"; + htmlBuilder += "
" + contentString.substring(i-180,contentString.length()) + + "...
"; htmlBuilder += "


"; } return htmlBuilder; @@ -563,17 +598,27 @@ public AbstractImagePrototype getProjectLogo(final ProjectModelType projectType) } public HTML getContactLogo(ContactModelType type) { + //Element spanElement = DOM.createSpan(); HTML avatar = new HTML(); - avatar.setWidth(36 + "px"); - avatar.setHeight(36 + "px"); + //avatar.setStyleName(); avatar.setStyleName("contact-card-avatar"); avatar.getElement().getStyle().clearBackgroundImage(); avatar.getElement().getStyle().clearPadding(); + avatar.getElement().getStyle().clearHeight(); + avatar.getElement().getStyle().clearWidth(); + avatar.setWidth(36 + "px"); + avatar.setHeight(36 + "px"); + avatar.getElement().setAttribute("display", "inline"); + avatar.getElement().setAttribute("padding-left", "10px"); + switch (type) { case INDIVIDUAL: - avatar.addStyleName("contact-card-avatar-individual"); + //avatar.getElement().setAttribute("background-image", "url(\"../images/icon/individual-128.png\");"); + avatar.addStyleName("contact-card-avatar-individual"); break; case ORGANIZATION: + //avatar.getElement().setAttribute("background-image", "url(\"../images/icon/organization-128.png\");"); + //avatar.addStyleName("background-image: url(\"../images/icon/organization-128.png\");"); avatar.addStyleName("contact-card-avatar-organization"); break; default: diff --git a/src/main/java/org/sigmah/client/ui/view/admin/ParametersAdminView.java b/src/main/java/org/sigmah/client/ui/view/admin/ParametersAdminView.java index 212329596..be6047168 100644 --- a/src/main/java/org/sigmah/client/ui/view/admin/ParametersAdminView.java +++ b/src/main/java/org/sigmah/client/ui/view/admin/ParametersAdminView.java @@ -22,240 +22,249 @@ * #L% */ - -import org.sigmah.client.i18n.I18N; -import org.sigmah.client.ui.presenter.admin.ParametersAdminPresenter; -import org.sigmah.client.ui.res.icon.IconImageBundle; -import org.sigmah.client.ui.view.base.AbstractView; -import org.sigmah.client.ui.widget.BackupStatusWidget; -import org.sigmah.client.ui.widget.button.Button; -import org.sigmah.client.ui.widget.form.FormPanel; -import org.sigmah.client.ui.widget.form.Forms; -import org.sigmah.client.ui.widget.layout.Layouts; -import org.sigmah.client.ui.widget.layout.Layouts.Margin; -import org.sigmah.client.ui.widget.panel.Panels; -import org.sigmah.client.util.ClientUtils; -import org.sigmah.shared.dto.orgunit.OrgUnitDTO; -import org.sigmah.shared.dto.value.FileDTO.LoadingScope; -import org.sigmah.shared.util.ExportUtils.ExportFormat; -import org.sigmah.shared.util.Pair; - -import com.extjs.gxt.ui.client.Style.LayoutRegion; -import com.extjs.gxt.ui.client.Style.Orientation; +import org.sigmah.client.i18n.I18N; +import org.sigmah.client.ui.presenter.admin.ParametersAdminPresenter; +import org.sigmah.client.ui.res.icon.IconImageBundle; +import org.sigmah.client.ui.view.base.AbstractView; +import org.sigmah.client.ui.widget.BackupStatusWidget; +import org.sigmah.client.ui.widget.button.Button; +import org.sigmah.client.ui.widget.form.FormPanel; +import org.sigmah.client.ui.widget.form.Forms; +import org.sigmah.client.ui.widget.layout.Layouts; +import org.sigmah.client.ui.widget.layout.Layouts.Margin; +import org.sigmah.client.ui.widget.panel.Panels; +import org.sigmah.client.util.ClientUtils; +import org.sigmah.shared.dto.orgunit.OrgUnitDTO; +import org.sigmah.shared.dto.value.FileDTO.LoadingScope; +import org.sigmah.shared.util.ExportUtils.ExportFormat; +import org.sigmah.shared.util.Pair; + +import com.extjs.gxt.ui.client.Style.LayoutRegion; +import com.extjs.gxt.ui.client.Style.Orientation; import com.extjs.gxt.ui.client.store.ListStore; import com.extjs.gxt.ui.client.util.Margins; import com.extjs.gxt.ui.client.widget.ContentPanel; import com.extjs.gxt.ui.client.widget.Html; -import com.extjs.gxt.ui.client.widget.LayoutContainer; -import com.extjs.gxt.ui.client.widget.form.AdapterField; -import com.extjs.gxt.ui.client.widget.form.CheckBox; -import com.extjs.gxt.ui.client.widget.form.ComboBox; -import com.extjs.gxt.ui.client.widget.form.DateField; -import com.extjs.gxt.ui.client.widget.form.FileUploadField; -import com.extjs.gxt.ui.client.widget.form.Radio; -import com.extjs.gxt.ui.client.widget.form.RadioGroup; -import com.extjs.gxt.ui.client.widget.form.SimpleComboBox; -import com.extjs.gxt.ui.client.widget.form.SpinnerField; +import com.extjs.gxt.ui.client.widget.Label; +import com.extjs.gxt.ui.client.widget.LayoutContainer; +import com.extjs.gxt.ui.client.widget.form.AdapterField; +import com.extjs.gxt.ui.client.widget.form.CheckBox; +import com.extjs.gxt.ui.client.widget.form.ComboBox; +import com.extjs.gxt.ui.client.widget.form.DateField; +import com.extjs.gxt.ui.client.widget.form.FileUploadField; +import com.extjs.gxt.ui.client.widget.form.Radio; +import com.extjs.gxt.ui.client.widget.form.RadioGroup; +import com.extjs.gxt.ui.client.widget.form.SimpleComboBox; +import com.extjs.gxt.ui.client.widget.form.SpinnerField; import com.extjs.gxt.ui.client.widget.form.TextField; import com.extjs.gxt.ui.client.widget.layout.BorderLayoutData; import com.extjs.gxt.ui.client.widget.layout.FlowData; +import com.extjs.gxt.ui.client.widget.layout.HBoxLayout; import com.extjs.gxt.ui.client.widget.layout.LayoutData; -import com.google.gwt.event.dom.client.LoadEvent; -import com.google.gwt.event.dom.client.LoadHandler; -import com.google.gwt.i18n.client.NumberFormat; -import com.google.gwt.user.client.ui.Image; -import com.google.gwt.user.client.ui.SimplePanel; -import com.google.inject.Singleton; -import java.util.Arrays; -import java.util.Date; -import org.sigmah.shared.dto.password.ExpirationPolicy; - -/** - * {@link ParametersAdminPresenter}'s view implementation. - * - * @author Maxime Lombard (mlombard@ideia.fr) - * @author Denis Colliot (dcolliot@ideia.fr) - */ -@Singleton -public class ParametersAdminView extends AbstractView implements ParametersAdminPresenter.View { - - // CSS styles. - private static final String CSS_ADMIN_PARAMETERS = "admin-parameters"; - private static final String CSS_PREVIEW_WRAPPER = "preview-wrapper"; - private static final int LOGO_IMAGE_HEIGHT = 150; - - // General parameters. - private FormPanel generalForm; - private TextField generalOrganizationNameTextField; - private FileUploadField generalLogoFileField; - private Image generalLogoPreview; - private Button generalSaveButton; - - // Backup. - private FormPanel backupManagementForm; - private RadioGroup backupManagementRadioGroup; - private Radio backupManagementAllVersionsRadio; - private Radio backupManagementLastVersionRadio; - private ComboBox backupManagementOrgUnitsComboBox; - private BackupStatusWidget backupManagementStatus; - private Button backupManagementSaveButton; - - // Export. - private FormPanel exportManagementForm; - private RadioGroup exportManagementRadioGroup; - private Radio exportManagementOdsRadio; - private Radio exportManagementXlsRadio; - private Button exportManagementSaveButton; - - // Export. - private FormPanel passwordExpirationManagementForm; - private CheckBox resetNewUserPasswordCheckBox; - private SimpleComboBox policyTypeCombo; - private SpinnerField frequencyField; - private DateField scheduledDateField; +import com.google.gwt.event.dom.client.LoadEvent; +import com.google.gwt.event.dom.client.LoadHandler; +import com.google.gwt.i18n.client.NumberFormat; +import com.google.gwt.user.client.ui.FlexTable; +import com.google.gwt.user.client.ui.HasHorizontalAlignment; +import com.google.gwt.user.client.ui.Image; +import com.google.gwt.user.client.ui.SimplePanel; +import com.google.inject.Singleton; +import java.util.Arrays; +import java.util.Date; +import org.sigmah.shared.dto.password.ExpirationPolicy; + +/** + * {@link ParametersAdminPresenter}'s view implementation. + * + * @author Maxime Lombard (mlombard@ideia.fr) + * @author Denis Colliot (dcolliot@ideia.fr) + */ +@Singleton +public class ParametersAdminView extends AbstractView implements ParametersAdminPresenter.View { + + // CSS styles. + private static final String CSS_ADMIN_PARAMETERS = "admin-parameters"; + private static final String CSS_PREVIEW_WRAPPER = "preview-wrapper"; + private static final int LOGO_IMAGE_HEIGHT = 150; + + // General parameters. + private FormPanel generalForm; + private TextField generalOrganizationNameTextField; + private FileUploadField generalLogoFileField; + private Image generalLogoPreview; + private Button generalSaveButton; + + // Backup. + private FormPanel backupManagementForm; + private RadioGroup backupManagementRadioGroup; + private Radio backupManagementAllVersionsRadio; + private Radio backupManagementLastVersionRadio; + private ComboBox backupManagementOrgUnitsComboBox; + private BackupStatusWidget backupManagementStatus; + private Button backupManagementSaveButton; + + // Export. + private FormPanel exportManagementForm; + private RadioGroup exportManagementRadioGroup; + private Radio exportManagementOdsRadio; + private Radio exportManagementXlsRadio; + private Button exportManagementSaveButton; + + // Export. + private FormPanel passwordExpirationManagementForm; + private CheckBox resetNewUserPasswordCheckBox; + private SimpleComboBox policyTypeCombo; + private SpinnerField frequencyField; + private DateField scheduledDateField; private Button passwordExpirationSaveButton; - + private FormPanel solrSettingsForm; private TextField solrCoreUrlTextField; private Button solrSaveConfigButton; - private Button manualIndexButton; - - /** - * {@inheritDoc} - */ - @Override - public void initialize() { - - final LayoutContainer topContainer = Layouts.hBox(); - topContainer.add(createGeneralParametersPanel(), Layouts.hBoxData(Margin.HALF_RIGHT)); - topContainer.add(createBackupParametersPanel(), Layouts.hBoxData(Margin.HALF_LEFT)); - - // final LayoutContainer bottomContainer = Layouts.hBox(); - // bottomContainer.add(createExportManagementPanel(), Layouts.hBoxData(Margin.HALF_RIGHT)); - // bottomContainer.add(createPasswordExpirationManagementPanel(), Layouts.hBoxData(Margin.HALF_LEFT)); - + private Button manualIndexButton; + + /** + * {@inheritDoc} + */ + @Override + public void initialize() { + + final LayoutContainer topContainer = Layouts.hBox(); + topContainer.add(createGeneralParametersPanel(), Layouts.hBoxData(Margin.HALF_RIGHT)); + topContainer.add(createBackupParametersPanel(), Layouts.hBoxData(Margin.HALF_LEFT)); + + // final LayoutContainer bottomContainer = Layouts.hBox(); + // bottomContainer.add(createExportManagementPanel(), + // Layouts.hBoxData(Margin.HALF_RIGHT)); + // bottomContainer.add(createPasswordExpirationManagementPanel(), + // Layouts.hBoxData(Margin.HALF_LEFT)); + add(topContainer, Layouts.borderLayoutData(LayoutRegion.NORTH, 0.5f, Margin.HALF_BOTTOM)); - - //add() - + + // add() + final LayoutContainer bottomWestContainer = Layouts.hBox(); - bottomWestContainer.add(createExportManagementPanel(),Layouts.hBoxData(Margin.HALF_RIGHT)); + bottomWestContainer.add(createExportManagementPanel(), Layouts.hBoxData(Margin.HALF_RIGHT)); final LayoutContainer bottomEastContainer = Layouts.hBox(); - bottomEastContainer.add(createSolrSettingsPanel(),Layouts.hBoxData(Margin.HALF_LEFT)); - - //add(createExportManagementPanel(), Layouts.borderLayoutData(LayoutRegion.WEST, 0.5f)); - + bottomEastContainer.add(createSolrSettingsPanel(), Layouts.hBoxData(Margin.HALF_LEFT)); + + // add(createExportManagementPanel(), + // Layouts.borderLayoutData(LayoutRegion.WEST, 0.5f)); + add(bottomWestContainer, Layouts.borderLayoutData(LayoutRegion.WEST, 0.5f, Margin.HALF_TOP)); add(bottomEastContainer, Layouts.borderLayoutData(LayoutRegion.EAST, 0.5f, Margin.HALF_TOP)); - - } - - /** - * Creates the general parameters panel. - * - * @return The general parameters panel. - */ - private ContentPanel createGeneralParametersPanel() { - - final ContentPanel panel = Panels.content(I18N.CONSTANTS.organizationManagementTitle(), CSS_ADMIN_PARAMETERS); - - generalForm = Forms.panel(150); - - generalOrganizationNameTextField = Forms.text(I18N.CONSTANTS.organizationManagementOrganizationName(), true); - generalForm.add(generalOrganizationNameTextField); - - generalLogoFileField = Forms.upload(I18N.CONSTANTS.organizationManagementLogoUpload()); - generalForm.add(generalLogoFileField); - - generalLogoPreview = new Image(); - final SimplePanel previewWrapper = new SimplePanel(generalLogoPreview); - previewWrapper.setStyleName(CSS_PREVIEW_WRAPPER); - final AdapterField logoImageField = new AdapterField(previewWrapper); - logoImageField.setFieldLabel(I18N.CONSTANTS.organizationManagementActualLogo()); - logoImageField.setResizeWidget(false); - generalForm.add(logoImageField); - - generalLogoPreview.addLoadHandler(new LoadHandler() { - - @Override - public void onLoad(final LoadEvent event) { - - final Pair ratio = - ClientUtils.ratio(generalLogoPreview.getWidth(), generalLogoPreview.getHeight(), generalForm.getFieldWidth(), LOGO_IMAGE_HEIGHT); - - generalLogoPreview.setPixelSize(ratio.left, ratio.right); - } - }); - - generalSaveButton = Forms.button(I18N.CONSTANTS.organizationManagementSaveChanges(), IconImageBundle.ICONS.save()); - generalForm.addButton(generalSaveButton); - - panel.add(generalForm); - - return panel; - } - - /** - * Creates the backup parameters panel. - * - * @return The backup parameters panel. - */ - private ContentPanel createBackupParametersPanel() { - - final ContentPanel panel = Panels.content(I18N.CONSTANTS.backupManagementTitle()); - - backupManagementForm = Forms.panel(300); - - backupManagementAllVersionsRadio = Forms.radio(I18N.CONSTANTS.backupManagementAllVersion()); - backupManagementLastVersionRadio = Forms.radio(I18N.CONSTANTS.backupManagementOneVersion()); - - backupManagementRadioGroup = - Forms.radioGroup(I18N.CONSTANTS.backupManagementDownload(), Orientation.VERTICAL, backupManagementAllVersionsRadio, backupManagementLastVersionRadio); - backupManagementForm.add(backupManagementRadioGroup); - - backupManagementOrgUnitsComboBox = - Forms.combobox(I18N.CONSTANTS.backupManagementRootOrganization(), true, OrgUnitDTO.ID, OrgUnitDTO.FULL_NAME, new ListStore()); - backupManagementForm.add(backupManagementOrgUnitsComboBox); - - backupManagementStatus = new BackupStatusWidget(); - backupManagementForm.add(Forms.adapter(I18N.CONSTANTS.backupManagement_status_formLabel(), backupManagementStatus)); - - backupManagementSaveButton = Forms.button(I18N.CONSTANTS.backupManagementBackupAllFiles(), IconImageBundle.ICONS.save()); - backupManagementForm.addButton(backupManagementSaveButton); - - panel.add(backupManagementForm); - - return panel; - } - - /** - * Creates the export management panel. - * - * @return The export management panel. - */ - private ContentPanel createExportManagementPanel() { - - final ContentPanel panel = Panels.content(I18N.CONSTANTS.defaultExportFormat()); - - exportManagementForm = Forms.panel(200); - - // File format. - exportManagementOdsRadio = Forms.radio(I18N.CONSTANTS.openDocumentSpreadsheet()); - exportManagementXlsRadio = Forms.radio(I18N.CONSTANTS.msExcel()); - - exportManagementRadioGroup = Forms.radioGroup(I18N.CONSTANTS.chooseFileType(), Orientation.VERTICAL, exportManagementOdsRadio, exportManagementXlsRadio); - exportManagementForm.add(exportManagementRadioGroup); - - // button - exportManagementSaveButton = Forms.button(I18N.CONSTANTS.saveExportConfiguration(), IconImageBundle.ICONS.save()); - exportManagementForm.addButton(exportManagementSaveButton); - - panel.add(exportManagementForm); - - return panel; + + } + + /** + * Creates the general parameters panel. + * + * @return The general parameters panel. + */ + private ContentPanel createGeneralParametersPanel() { + + final ContentPanel panel = Panels.content(I18N.CONSTANTS.organizationManagementTitle(), CSS_ADMIN_PARAMETERS); + + generalForm = Forms.panel(150); + + generalOrganizationNameTextField = Forms.text(I18N.CONSTANTS.organizationManagementOrganizationName(), true); + generalForm.add(generalOrganizationNameTextField); + + generalLogoFileField = Forms.upload(I18N.CONSTANTS.organizationManagementLogoUpload()); + generalForm.add(generalLogoFileField); + + generalLogoPreview = new Image(); + final SimplePanel previewWrapper = new SimplePanel(generalLogoPreview); + previewWrapper.setStyleName(CSS_PREVIEW_WRAPPER); + final AdapterField logoImageField = new AdapterField(previewWrapper); + logoImageField.setFieldLabel(I18N.CONSTANTS.organizationManagementActualLogo()); + logoImageField.setResizeWidget(false); + generalForm.add(logoImageField); + + generalLogoPreview.addLoadHandler(new LoadHandler() { + + @Override + public void onLoad(final LoadEvent event) { + + final Pair ratio = ClientUtils.ratio(generalLogoPreview.getWidth(), + generalLogoPreview.getHeight(), generalForm.getFieldWidth(), LOGO_IMAGE_HEIGHT); + + generalLogoPreview.setPixelSize(ratio.left, ratio.right); + } + }); + + generalSaveButton = Forms.button(I18N.CONSTANTS.organizationManagementSaveChanges(), + IconImageBundle.ICONS.save()); + generalForm.addButton(generalSaveButton); + + panel.add(generalForm); + + return panel; + } + + /** + * Creates the backup parameters panel. + * + * @return The backup parameters panel. + */ + private ContentPanel createBackupParametersPanel() { + + final ContentPanel panel = Panels.content(I18N.CONSTANTS.backupManagementTitle()); + + backupManagementForm = Forms.panel(300); + + backupManagementAllVersionsRadio = Forms.radio(I18N.CONSTANTS.backupManagementAllVersion()); + backupManagementLastVersionRadio = Forms.radio(I18N.CONSTANTS.backupManagementOneVersion()); + + backupManagementRadioGroup = Forms.radioGroup(I18N.CONSTANTS.backupManagementDownload(), Orientation.VERTICAL, + backupManagementAllVersionsRadio, backupManagementLastVersionRadio); + backupManagementForm.add(backupManagementRadioGroup); + + backupManagementOrgUnitsComboBox = Forms.combobox(I18N.CONSTANTS.backupManagementRootOrganization(), true, + OrgUnitDTO.ID, OrgUnitDTO.FULL_NAME, new ListStore()); + backupManagementForm.add(backupManagementOrgUnitsComboBox); + + backupManagementStatus = new BackupStatusWidget(); + backupManagementForm + .add(Forms.adapter(I18N.CONSTANTS.backupManagement_status_formLabel(), backupManagementStatus)); + + backupManagementSaveButton = Forms.button(I18N.CONSTANTS.backupManagementBackupAllFiles(), + IconImageBundle.ICONS.save()); + backupManagementForm.addButton(backupManagementSaveButton); + + panel.add(backupManagementForm); + + return panel; + } + + /** + * Creates the export management panel. + * + * @return The export management panel. + */ + private ContentPanel createExportManagementPanel() { + + final ContentPanel panel = Panels.content(I18N.CONSTANTS.defaultExportFormat()); + + exportManagementForm = Forms.panel(200); + + // File format. + exportManagementOdsRadio = Forms.radio(I18N.CONSTANTS.openDocumentSpreadsheet()); + exportManagementXlsRadio = Forms.radio(I18N.CONSTANTS.msExcel()); + + exportManagementRadioGroup = Forms.radioGroup(I18N.CONSTANTS.chooseFileType(), Orientation.VERTICAL, + exportManagementOdsRadio, exportManagementXlsRadio); + exportManagementForm.add(exportManagementRadioGroup); + + // button + exportManagementSaveButton = Forms.button(I18N.CONSTANTS.saveExportConfiguration(), + IconImageBundle.ICONS.save()); + exportManagementForm.addButton(exportManagementSaveButton); + + panel.add(exportManagementForm); + + return panel; } - - private ContentPanel createSolrSettingsPanel() { @@ -268,222 +277,236 @@ private ContentPanel createSolrSettingsPanel() { solrSettingsForm.add(new Html("

")); manualIndexButton = Forms.button("Manual Index"); - //manualIndexButton.setAutoWidth(false); + + FlexTable table = new FlexTable(); + + table.setWidth("100%"); + + table.setHTML(0, 0, " "); + + Label l = new Label("Perform manual Solr indexing, consisting of Import of Data and Files :"); + l.getElement().setAttribute("font-family","tahoma"); + l.getElement().setAttribute("font-size","12px"); + table.setWidget(1, 0, l); + table.getCellFormatter().setHorizontalAlignment(1, 0, HasHorizontalAlignment.ALIGN_CENTER); + + table.setHTML(2, 0, " "); + + table.setWidget(3, 0, manualIndexButton); + table.getCellFormatter().setHorizontalAlignment(3, 0, HasHorizontalAlignment.ALIGN_CENTER); - //manualIndexButton.setStyleAttribute("text-align", "centre"); - //solrSettingsForm.add(new Html("
")); - //solrSettingsForm.add(manualIndexButton); - final LayoutData buttonLayoutData = new BorderLayoutData(LayoutRegion.EAST); - //final LayoutData layoutData = new FlowData(0, 0, 0, 0); - ((BorderLayoutData) buttonLayoutData).setMargins(new Margins(0, 100, 0, 100)); - solrSettingsForm.add(manualIndexButton, buttonLayoutData); - solrSaveConfigButton = Forms.button(I18N.CONSTANTS.organizationManagementSaveChanges(), IconImageBundle.ICONS.save()); + solrSettingsForm.add(table); + + solrSaveConfigButton = Forms.button(I18N.CONSTANTS.organizationManagementSaveChanges(), + IconImageBundle.ICONS.save()); solrSettingsForm.addButton(solrSaveConfigButton); panel.add(solrSettingsForm); return panel; - } - /** - * Creates the password expiration policy management panel. - * - * @return The password expiration policy management panel. - */ - private ContentPanel createPasswordExpirationManagementPanel() { - - final ContentPanel panel = Panels.content(I18N.CONSTANTS.userPasswordSettings()); - - passwordExpirationManagementForm = Forms.panel(300); - - resetNewUserPasswordCheckBox = Forms.checkbox(I18N.CONSTANTS.resetNewUserPasswords()); - resetNewUserPasswordCheckBox.setFieldLabel(I18N.CONSTANTS.resetNewUserPasswords()); - - policyTypeCombo = new SimpleComboBox(); - policyTypeCombo.add(Arrays.asList(ExpirationPolicy.values())); - policyTypeCombo.setTriggerAction(ComboBox.TriggerAction.ALL); - policyTypeCombo.setEditable(false); - policyTypeCombo.setAllowBlank(false); - policyTypeCombo.setFieldLabel(I18N.CONSTANTS.automaticExpirationPolicy()); - - frequencyField = new SpinnerField(); - frequencyField.setMinValue(0); - frequencyField.setValue(0); - frequencyField.setWidth(40); - frequencyField.setFormat(NumberFormat.getFormat("0")); - frequencyField.setIncrement(1); - frequencyField.setFieldLabel(I18N.CONSTANTS.every()); - - scheduledDateField = new DateField(); - scheduledDateField.setMinValue(new Date()); - scheduledDateField.setFieldLabel(I18N.CONSTANTS.at()); - - passwordExpirationManagementForm.add(resetNewUserPasswordCheckBox); - passwordExpirationManagementForm.add(policyTypeCombo); - passwordExpirationManagementForm.add(frequencyField); - passwordExpirationManagementForm.add(scheduledDateField); - - // button - passwordExpirationSaveButton = Forms.button(I18N.CONSTANTS.saveExportConfiguration(), IconImageBundle.ICONS.save()); - passwordExpirationManagementForm.addButton(passwordExpirationSaveButton); - - panel.add(passwordExpirationManagementForm); - - return panel; - } - - // -- - // General. - // -- - - @Override - public FormPanel getGeneralParametersForm() { - return generalForm; - } - - @Override - public TextField getOrganizationNameTextField() { - return generalOrganizationNameTextField; - } - - @Override - public FileUploadField getLogoFileField() { - return generalLogoFileField; - } - - @Override - public Image getLogoPreview() { - return generalLogoPreview; - } - - @Override - public Button getGeneralParametersSaveButton() { - return generalSaveButton; - } - - // -- - // Backup. - // -- - - @Override - public FormPanel getBackupForm() { - return backupManagementForm; - } - - /** - * {@inheritDoc} - */ - @Override - public void setSelectedBackupDownloadFormat(final LoadingScope downloadType) { - - backupManagementAllVersionsRadio.setValue(null); - backupManagementLastVersionRadio.setValue(null); - - if (downloadType == null) { - return; - } - - switch (downloadType) { - case ALL_VERSIONS: - backupManagementAllVersionsRadio.setValue(true); - break; - - case LAST_VERSION: - backupManagementLastVersionRadio.setValue(true); - break; - - default: - break; - } - } - - /** - * {@inheritDoc} - */ - @Override - public LoadingScope getSelectedBackupDownloadType() { - - if (backupManagementAllVersionsRadio.equals(backupManagementRadioGroup.getValue())) { - return LoadingScope.ALL_VERSIONS; - - } else if (backupManagementLastVersionRadio.equals(backupManagementRadioGroup.getValue())) { - return LoadingScope.LAST_VERSION; - - } else { - return null; - } - } - - @Override - public ComboBox getBackupManagementOrgUnitsComboBox() { - return backupManagementOrgUnitsComboBox; - } - - @Override - public Button getBackupSaveButton() { - return backupManagementSaveButton; - } - - @Override - public BackupStatusWidget getBackupStatus() { - return backupManagementStatus; - } - - // -- - // Export. - // -- - - @Override - public FormPanel getExportManagementForm() { - return exportManagementForm; - } - - /** - * {@inheritDoc} - */ - @Override - public void setSelectedExportFormat(final ExportFormat exportFormat) { - - exportManagementXlsRadio.setValue(null); - exportManagementOdsRadio.setValue(null); - - if (exportFormat == null) { - return; - } - - switch (exportFormat) { - case XLS: - exportManagementXlsRadio.setValue(true); - break; - - case ODS: - exportManagementOdsRadio.setValue(true); - break; - - default: - break; - } - } - - /** - * {@inheritDoc} - */ - @Override - public ExportFormat getSelectedExportFormat() { - - if (exportManagementOdsRadio.equals(exportManagementRadioGroup.getValue())) { - return ExportFormat.ODS; - - } else if (exportManagementXlsRadio.equals(exportManagementRadioGroup.getValue())) { - return ExportFormat.XLS; - - } else { - return null; - } - } - - @Override - public Button getExportManagementSaveButton() { - return exportManagementSaveButton; + } + + /** + * Creates the password expiration policy management panel. + * + * @return The password expiration policy management panel. + */ + private ContentPanel createPasswordExpirationManagementPanel() { + + final ContentPanel panel = Panels.content(I18N.CONSTANTS.userPasswordSettings()); + + passwordExpirationManagementForm = Forms.panel(300); + + resetNewUserPasswordCheckBox = Forms.checkbox(I18N.CONSTANTS.resetNewUserPasswords()); + resetNewUserPasswordCheckBox.setFieldLabel(I18N.CONSTANTS.resetNewUserPasswords()); + + policyTypeCombo = new SimpleComboBox(); + policyTypeCombo.add(Arrays.asList(ExpirationPolicy.values())); + policyTypeCombo.setTriggerAction(ComboBox.TriggerAction.ALL); + policyTypeCombo.setEditable(false); + policyTypeCombo.setAllowBlank(false); + policyTypeCombo.setFieldLabel(I18N.CONSTANTS.automaticExpirationPolicy()); + + frequencyField = new SpinnerField(); + frequencyField.setMinValue(0); + frequencyField.setValue(0); + frequencyField.setWidth(40); + frequencyField.setFormat(NumberFormat.getFormat("0")); + frequencyField.setIncrement(1); + frequencyField.setFieldLabel(I18N.CONSTANTS.every()); + + scheduledDateField = new DateField(); + scheduledDateField.setMinValue(new Date()); + scheduledDateField.setFieldLabel(I18N.CONSTANTS.at()); + + passwordExpirationManagementForm.add(resetNewUserPasswordCheckBox); + passwordExpirationManagementForm.add(policyTypeCombo); + passwordExpirationManagementForm.add(frequencyField); + passwordExpirationManagementForm.add(scheduledDateField); + + // button + passwordExpirationSaveButton = Forms.button(I18N.CONSTANTS.saveExportConfiguration(), + IconImageBundle.ICONS.save()); + passwordExpirationManagementForm.addButton(passwordExpirationSaveButton); + + panel.add(passwordExpirationManagementForm); + + return panel; + } + + // -- + // General. + // -- + + @Override + public FormPanel getGeneralParametersForm() { + return generalForm; + } + + @Override + public TextField getOrganizationNameTextField() { + return generalOrganizationNameTextField; + } + + @Override + public FileUploadField getLogoFileField() { + return generalLogoFileField; + } + + @Override + public Image getLogoPreview() { + return generalLogoPreview; + } + + @Override + public Button getGeneralParametersSaveButton() { + return generalSaveButton; + } + + // -- + // Backup. + // -- + + @Override + public FormPanel getBackupForm() { + return backupManagementForm; + } + + /** + * {@inheritDoc} + */ + @Override + public void setSelectedBackupDownloadFormat(final LoadingScope downloadType) { + + backupManagementAllVersionsRadio.setValue(null); + backupManagementLastVersionRadio.setValue(null); + + if (downloadType == null) { + return; + } + + switch (downloadType) { + case ALL_VERSIONS: + backupManagementAllVersionsRadio.setValue(true); + break; + + case LAST_VERSION: + backupManagementLastVersionRadio.setValue(true); + break; + + default: + break; + } + } + + /** + * {@inheritDoc} + */ + @Override + public LoadingScope getSelectedBackupDownloadType() { + + if (backupManagementAllVersionsRadio.equals(backupManagementRadioGroup.getValue())) { + return LoadingScope.ALL_VERSIONS; + + } else if (backupManagementLastVersionRadio.equals(backupManagementRadioGroup.getValue())) { + return LoadingScope.LAST_VERSION; + + } else { + return null; + } + } + + @Override + public ComboBox getBackupManagementOrgUnitsComboBox() { + return backupManagementOrgUnitsComboBox; + } + + @Override + public Button getBackupSaveButton() { + return backupManagementSaveButton; + } + + @Override + public BackupStatusWidget getBackupStatus() { + return backupManagementStatus; + } + + // -- + // Export. + // -- + + @Override + public FormPanel getExportManagementForm() { + return exportManagementForm; + } + + /** + * {@inheritDoc} + */ + @Override + public void setSelectedExportFormat(final ExportFormat exportFormat) { + + exportManagementXlsRadio.setValue(null); + exportManagementOdsRadio.setValue(null); + + if (exportFormat == null) { + return; + } + + switch (exportFormat) { + case XLS: + exportManagementXlsRadio.setValue(true); + break; + + case ODS: + exportManagementOdsRadio.setValue(true); + break; + + default: + break; + } + } + + /** + * {@inheritDoc} + */ + @Override + public ExportFormat getSelectedExportFormat() { + + if (exportManagementOdsRadio.equals(exportManagementRadioGroup.getValue())) { + return ExportFormat.ODS; + + } else if (exportManagementXlsRadio.equals(exportManagementRadioGroup.getValue())) { + return ExportFormat.XLS; + + } else { + return null; + } + } + + @Override + public Button getExportManagementSaveButton() { + return exportManagementSaveButton; } public TextField getSolrCoreUrlTextField() { @@ -516,6 +539,6 @@ public FormPanel getSolrSettingsForm() { public void setSolrSettingsForm(FormPanel solrSettingsForm) { this.solrSettingsForm = solrSettingsForm; - } - -} + } + +} diff --git a/src/main/java/org/sigmah/client/ui/view/zone/SearchView.java b/src/main/java/org/sigmah/client/ui/view/zone/SearchView.java index 0814674d5..24644c2a2 100644 --- a/src/main/java/org/sigmah/client/ui/view/zone/SearchView.java +++ b/src/main/java/org/sigmah/client/ui/view/zone/SearchView.java @@ -1,5 +1,8 @@ package org.sigmah.client.ui.view.zone; +import java.util.Arrays; +import java.util.List; + import org.sigmah.client.i18n.I18N; /* @@ -27,8 +30,18 @@ import org.sigmah.client.ui.presenter.zone.SearchPresenter; import org.sigmah.client.ui.res.icon.IconImageBundle; import org.sigmah.client.ui.view.base.AbstractView; - -import com.google.gwt.user.client.ui.Button; +import org.sigmah.client.ui.widget.form.Forms; +import org.sigmah.shared.dto.orgunit.OrgUnitDTO; +import org.sigmah.shared.dto.password.ExpirationPolicy; + +import com.extjs.gxt.ui.client.widget.form.ComboBox; +import com.extjs.gxt.ui.client.widget.form.SimpleComboBox; +import com.extjs.gxt.ui.client.widget.form.SimpleComboValue; +import com.extjs.gxt.ui.client.widget.form.TextField; +//import com.google.gwt.user.client.ui.Button; +import org.sigmah.client.ui.widget.button.Button; +import com.google.gwt.user.client.ui.FlexTable; +import com.google.gwt.user.client.ui.FlowPanel; import com.google.gwt.user.client.ui.HTML; import com.google.gwt.user.client.ui.HasHTML; import com.google.gwt.user.client.ui.HorizontalPanel; @@ -47,111 +60,83 @@ public class SearchView extends AbstractView implements SearchPresenter.View { private Panel searchBarPanel; - private ListBox searchOptions; - private HTML searchForLabel; - private TextBox searchText; - private Button searchButton; - private Button indexButton; + private TextField searchTextField; + private SimpleComboBox searchOptionsComboBox; + private Button newSearchButton; + List newSearchOptions; /** * {@inheritDoc} */ @Override public void initialize() { - - - searchBarPanel = new HorizontalPanel(); - searchBarPanel.getElement().setId("search-bar"); - - searchForLabel = new HTML("Search for"); - //searchForLabel.setStylePrimaryName("search-for"); - searchForLabel.getElement().setId("search-for"); - String[] optionStrings = { "All", "Projects", "OrgUnits", "Contacts", "Files" }; - searchOptions = new ListBox(); - for( int i = 0; i < 5; i++ ){ - searchOptions.addItem(optionStrings[i]); - } + searchTextField = Forms.text("Search", false); + searchTextField.setEmptyText("Search"); + searchTextField.setWidth(190); + searchOptionsComboBox = new SimpleComboBox(); + newSearchOptions = Arrays.asList("All", "Projects", "OrgUnits", "Contacts", "Your Files"); + searchOptionsComboBox.add(newSearchOptions); + searchOptionsComboBox.setTriggerAction(ComboBox.TriggerAction.ALL); + searchOptionsComboBox.setEditable(false); + searchOptionsComboBox.setWidth(75); + searchOptionsComboBox.setSimpleValue("All"); - searchText = new TextBox(); - //searchText.setText("Enter search text"); - searchText.getElement().setPropertyString("placeholder", "Search"); - searchButton = new Button("Go"); - indexButton = new Button("FIndex"); + newSearchButton = Forms.button("Go"); - //searchBarPanel.add(searchForLabel); - searchBarPanel.add(searchText); - searchBarPanel.add(searchOptions); - searchBarPanel.add(searchButton); - //searchBarPanel.add(indexButton); - - // initWidget(); Useless + searchBarPanel = new HorizontalPanel(); + searchBarPanel.getElement().setId("search-bar"); + searchBarPanel.add(searchTextField); + searchBarPanel.add(searchOptionsComboBox); + searchBarPanel.add(newSearchButton); } + + public TextField getSearchTextField() { + return searchTextField; + } + public void setSearchTextField(TextField searchTextField) { + this.searchTextField = searchTextField; + } - /** - * {@inheritDoc} - */ - @Override - public Panel getSearchBarPanel() { - return searchBarPanel; + public SimpleComboBox getSearchOptionsComboBox() { + return searchOptionsComboBox; } + public void setSearchOptionsComboBox(SimpleComboBox searchOptionsComboBox) { + this.searchOptionsComboBox = searchOptionsComboBox; + } - /** - * {@inheritDoc} - */ - @Override - public void onViewRevealed() { - // Nothing to do here. + public Button getNewSearchButton() { + return newSearchButton; } - - /** - * {@inheritDoc} - */ - @Override - public HasHTML getNameLabel() { - return searchForLabel; + public void setNewSearchButton(Button newSearchButton) { + this.newSearchButton = newSearchButton; } - - - /** - * {@inheritDoc} - */ - @Override - public ListBox getSearchOptions() { - return searchOptions; + + public List getNewSearchOptions() { + return newSearchOptions; } - - /** - * {@inheritDoc} - */ - @Override - public TextBox getSearchText() { - return searchText; + public void setNewSearchOptions(List newSearchOptions) { + this.newSearchOptions = newSearchOptions; } - - /** - * {@inheritDoc} - */ @Override - public Button getSearchButton() { - return searchButton; + public Panel getSearchBarPanel() { + return searchBarPanel; } - - /** - * {@inheritDoc} - */ + @Override - public Button getIndexButton() { - return indexButton; + public void onViewRevealed() { + // Nothing to do here. } + } + diff --git a/src/main/java/org/sigmah/server/search/SolrSearcher.java b/src/main/java/org/sigmah/server/search/SolrSearcher.java index 19cf0a5ab..00d122e2b 100644 --- a/src/main/java/org/sigmah/server/search/SolrSearcher.java +++ b/src/main/java/org/sigmah/server/search/SolrSearcher.java @@ -104,17 +104,17 @@ public ArrayList search(String searchStr, String filter) { //query.addSort("doc_id", ORDER.desc); if (filter.equals("Projects")){ - query.set("fq", "PROJECT"); + query.set("fq", "doc_type:PROJECT"); //query.set("qt", "/searchproject"); } else if (filter.equals("Contacts")){ - query.set("fq", "CONTACT"); + query.set("fq", "doc_type:CONTACT"); } else if (filter.equals("OrgUnits")){ - query.set("fq", "ORG_UNIT"); + query.set("fq", "doc_type:ORG_UNIT"); // query.addSortField("weight", ORDER.desc); - }else if (filter.equals("Files")){ - query.set("fq", "FILE"); + }else if (filter.equals("Your Files")){ + query.set("fq", "doc_type:FILE"); // query.addSortField("weight", ORDER.desc); } else{ From 39b19a1aa688299e83f710606e6cf7fb2f18f023 Mon Sep 17 00:00:00 2001 From: indianauthority97 Date: Tue, 8 Aug 2017 13:09:29 +0530 Subject: [PATCH 31/36] [Issue #535]:Added proper errror messages for different cases --- .../sigmah/client/page/RequestParameter.java | 4 +- .../ui/presenter/DashboardPresenter.java | 7 +- .../ui/presenter/SearchResultsPresenter.java | 30 +-- .../ui/presenter/zone/SearchPresenter.java | 123 ++++++++-- .../client/ui/view/SearchResultsView.java | 223 +++++------------- .../client/ui/view/zone/SearchView.java | 2 +- .../server/search/SearchServiceImpl.java | 10 +- .../sigmah/server/search/SolrIndexJob.java | 5 +- .../sigmah/server/search/SolrSearcher.java | 29 ++- 9 files changed, 218 insertions(+), 215 deletions(-) diff --git a/src/main/java/org/sigmah/client/page/RequestParameter.java b/src/main/java/org/sigmah/client/page/RequestParameter.java index 0b4894c23..30c15ff38 100644 --- a/src/main/java/org/sigmah/client/page/RequestParameter.java +++ b/src/main/java/org/sigmah/client/page/RequestParameter.java @@ -66,9 +66,7 @@ public enum RequestParameter { CONTACT_ID, ELEMENTS, PROJECT_ID, - FILTER_PROJECT_IDS, - FILTER_CONTACT_IDS, - FILTER_ORGUNIT_IDS; + ; // If the parameter is part of the tab uniqueness logic. private final boolean unique; diff --git a/src/main/java/org/sigmah/client/ui/presenter/DashboardPresenter.java b/src/main/java/org/sigmah/client/ui/presenter/DashboardPresenter.java index ed5305b9a..fdc83149d 100644 --- a/src/main/java/org/sigmah/client/ui/presenter/DashboardPresenter.java +++ b/src/main/java/org/sigmah/client/ui/presenter/DashboardPresenter.java @@ -281,7 +281,9 @@ public void handleEvent(OfflineEvent event) { searchService.updateCore(auth().getOrganizationSolrCoreUrl(), new AsyncCallback() { public void onFailure(Throwable caught) { - Window.alert("Could not update Solr Core. Check that the url is valid!"); + N10N.errorNotif("Failed to connect to Solr!", + "Check your connection with Solr Server or the Solr Core Url!"); + //Window.alert("Could not update Solr Core. Check that the url is valid!"); caught.printStackTrace(); } @@ -290,7 +292,8 @@ public void onSuccess(Boolean result) { if (dih_success == true) { //Window.alert("Successfully updated Solr Core!"); } else { - Window.alert("Failed to update Solr Core! Check that the url is valid!"); + N10N.errorNotif("Failed to connect to Solr!", + "Check your connection with Solr Server or the Solr Core Url!"); } } }); diff --git a/src/main/java/org/sigmah/client/ui/presenter/SearchResultsPresenter.java b/src/main/java/org/sigmah/client/ui/presenter/SearchResultsPresenter.java index c6036c027..4ac9e6471 100644 --- a/src/main/java/org/sigmah/client/ui/presenter/SearchResultsPresenter.java +++ b/src/main/java/org/sigmah/client/ui/presenter/SearchResultsPresenter.java @@ -154,7 +154,7 @@ public interface View extends ViewInterface { void setSearchString(String searchText); - void addSearchData(Object searchData); + boolean addSearchData(Object searchData); void addResultsPanel(); @@ -168,13 +168,13 @@ public interface View extends ViewInterface { void setFileClickHandler(FilesResultsClickHandler handler); - void setProjectIdsForFiltering(Set projectIdsForFiltering); +// void setProjectIdsForFiltering(Set projectIdsForFiltering); +// +// void setOrgUnitIdsForFiltering(Set orgUnitIdsForFiltering); +// +// void setContactIdsForFiltering(Set orgUnitIdsForFiltering); - void setOrgUnitIdsForFiltering(Set orgUnitIdsForFiltering); - - void setContactIdsForFiltering(Set orgUnitIdsForFiltering); - - void setUserId(String userId); +// void setUserId(String userId); } /** @@ -272,16 +272,12 @@ public void onLoad(String result) { }); }; }); - //getProjectsForFiltering(); - view.setProjectIdsForFiltering((Set) request.getData(RequestParameter.FILTER_PROJECT_IDS)); - view.setOrgUnitIdsForFiltering((Set) request.getData(RequestParameter.FILTER_ORGUNIT_IDS)); - view.setContactIdsForFiltering((Set) request.getData(RequestParameter.FILTER_CONTACT_IDS)); -// Window.alert(auth().getUserId().toString()); - view.setUserId(auth().getUserId().toString()); - view.addSearchData(request.getData(RequestParameter.CONTENT)); - //Window.alert("Completed addSearchData!"); - view.addResultsPanel(); - //Window.alert("Completed addResultsPanel!"); + + if( view.addSearchData(request.getData(RequestParameter.CONTENT)) ){ + view.addResultsPanel(); + }else{ + + } } } diff --git a/src/main/java/org/sigmah/client/ui/presenter/zone/SearchPresenter.java b/src/main/java/org/sigmah/client/ui/presenter/zone/SearchPresenter.java index cdcad159a..c7e73b852 100644 --- a/src/main/java/org/sigmah/client/ui/presenter/zone/SearchPresenter.java +++ b/src/main/java/org/sigmah/client/ui/presenter/zone/SearchPresenter.java @@ -67,6 +67,9 @@ import com.google.gwt.event.dom.client.KeyDownHandler; import com.google.gwt.event.dom.client.KeyUpEvent; import com.google.gwt.event.dom.client.KeyUpHandler; +import com.google.gwt.json.client.JSONObject; +import com.google.gwt.json.client.JSONParser; +import com.google.gwt.json.client.JSONValue; import com.google.gwt.user.client.Window; import com.google.gwt.user.client.rpc.AsyncCallback; //import com.google.gwt.user.client.ui.Button; @@ -180,14 +183,14 @@ public void handleEvent(ButtonEvent be) { } }); - + view.getSearchTextField().addKeyListener(new KeyListener() { - + @Override - public void componentKeyUp(ComponentEvent event){ - if (event.getKeyCode() == KeyCodes.KEY_ENTER){ - if (view.getSearchTextField().getValue() != null){ - if(view.getSearchTextField().getValue().length() > 0 ){ + public void componentKeyUp(ComponentEvent event) { + if (event.getKeyCode() == KeyCodes.KEY_ENTER) { + if (view.getSearchTextField().getValue() != null) { + if (view.getSearchTextField().getValue().length() > 0) { textToServer = view.getSearchTextField().getValue(); view.getSearchTextField().clear(); int sel_ind = view.getSearchOptionsComboBox().getSelectedIndex(); @@ -223,23 +226,31 @@ public void onSuccess(ArrayList result) { searchService.search(textToServer, filter, new AsyncCallback>() { public void onFailure(Throwable caught) { - Window.alert("Failure on the server side!"); + // Window.alert("Failure on the server side!"); + N10N.error("Error connecting to Solr", "Solr Server connection is not available. Try later!"); // firstsearch = true; //will try to set up a connnection again caught.printStackTrace(); } public void onSuccess(ArrayList result) { - searchResults = result; - // for (SearchResultsDTO doc : searchResults) { - // Window.alert(doc.getResult().toString()); - // } - loadProjectIdsForFiltering(); + if (result == null) { + N10N.error("Error connecting to Solr", "Solr Server connection is not available. Try later!"); + } else { + searchResults = result; + if (result.size() == 0) { + N10N.info("No search results found", "There are no search results or " + + "they may not be accessible!"); + } + else { + loadProjectIdsForFiltering(); + } + } + } }); } - private void loadProjectIdsForFiltering() { Integer[] orgUnitsIds = auth().getOrgUnitIds().toArray(new Integer[auth().getOrgUnitIds().size()]); List orgUnitsIdsAsList = orgUnitsIds != null ? Arrays.asList(orgUnitsIds) : null; @@ -336,19 +347,89 @@ public void onCommandSuccess(final ListResult result) { } public void doPageRequest() { - if (searchResults != null) { + if (searchResults != null && searchResults.size() > 0) { PageRequest request = new PageRequest(Page.SEARCH_RESULTS); request.addData(RequestParameter.TITLE, textToServer); - request.addData(RequestParameter.CONTENT, searchResults); - request.addData(RequestParameter.FILTER_PROJECT_IDS, projectIdsForFiltering); - request.addData(RequestParameter.FILTER_ORGUNIT_IDS, orgUnitIdsForFiltering); - request.addData(RequestParameter.FILTER_CONTACT_IDS, contactIdsForFiltering); - request.addParameter(RequestParameter.ID, - textToServer.replaceAll("[^a-zA-Z0-9\\s]", "").replaceAll(" ", "-")); - eventBus.navigateRequest(request); + + ArrayList filteredSearchResults = new ArrayList(); + for( SearchResultsDTO dto : searchResults){ + if (filter(dto)){ + filteredSearchResults.add(dto); + } + } + if (filteredSearchResults.size() == 0) { + N10N.info("No search results found", "There are no search results or" + + " they may not be accessible!"); + }else{ + request.addData(RequestParameter.CONTENT, filteredSearchResults); + request.addParameter(RequestParameter.ID, + textToServer.replaceAll("[^a-zA-Z0-9\\s]", "").replaceAll(" ", "-")); + eventBus.navigateRequest(request); + } + + } + } + + public boolean filter(SearchResultsDTO dto) { + + if (dto == null) + return false; + + Map retMap = toMap(dto.getResult()); + dto.setDTOtype(retMap.get("doc_type").toString()); + + if (retMap.get("doc_type").toString().equals("PROJECT")) { + dto.setDTOid(retMap.get("databaseid").toString()); + if (!projectIdsForFiltering.contains(Integer.parseInt(dto.getDTOid()))) { + // Window.alert("Found project not to be included!"); + return false; + } + + } else if (retMap.get("doc_type").toString().equals("CONTACT")) { + dto.setDTOid(retMap.get("id_contact").toString()); + if (!contactIdsForFiltering.contains(Integer.parseInt(dto.getDTOid()))) { + // Window.alert("Found Contact not to be included: " + + // dto.getDTOid()); + return false; + } + } else if (retMap.get("doc_type").toString().equals("ORG_UNIT")) { + dto.setDTOid(retMap.get("org_unit_id").toString()); + if (!orgUnitIdsForFiltering.contains(Integer.parseInt(dto.getDTOid()))) { + // Window.alert("Found OrgUnit not to be included!"); + return false; + } + } else if (retMap.get("doc_type").toString().equals("FILE")) { + // if(projectIdsForFiltering.size() == 0 || + // orgUnitIdsForFiltering.size() == 0 ) //cannot view projects or + // orgunits + // return false; + dto.setDTOid(retMap.get("file_version_id").toString()); + dto.setFile_name(retMap.get("file_name")); + dto.setFile_ext(retMap.get("file_ext")); + //Window.alert(retMap.toString() + "\n" + retMap.get("file_author_id") + " " + auth().getUserId().toString()); + if (retMap.get("file_author_id").equals(auth().getUserId().toString())) { + // temporary filter, since I am unable to implement a better + // filter, users can only view those files of which they are the authors.. + return true; + } + return false; } + return true; } + public static Map toMap(String jsonStr) { + Map map = new HashMap(); + + JSONValue parsed = JSONParser.parseStrict(jsonStr); + JSONObject jsonObj = parsed.isObject(); + if (jsonObj != null) { + for (String key : jsonObj.keySet()) { + map.put(key.replaceAll("^\"|\"$", ""), jsonObj.get(key).toString().replaceAll("^\"|\"$", "")); + } + } + + return map; + } /** * {@inheritDoc} */ diff --git a/src/main/java/org/sigmah/client/ui/view/SearchResultsView.java b/src/main/java/org/sigmah/client/ui/view/SearchResultsView.java index 179d22aa6..698892c6f 100644 --- a/src/main/java/org/sigmah/client/ui/view/SearchResultsView.java +++ b/src/main/java/org/sigmah/client/ui/view/SearchResultsView.java @@ -39,6 +39,7 @@ import org.sigmah.client.page.RequestParameter; import org.sigmah.client.search.SearchService; import org.sigmah.client.search.SearchServiceAsync; +import org.sigmah.client.ui.notif.N10N; import org.sigmah.client.ui.presenter.SearchResultsPresenter; import org.sigmah.client.ui.presenter.SearchResultsPresenter.ContactResultsClickHandler; import org.sigmah.client.ui.presenter.SearchResultsPresenter.FilesResultsClickHandler; @@ -47,6 +48,7 @@ import org.sigmah.client.ui.presenter.SearchResultsPresenter.SearchResultsClickHandler; import org.sigmah.client.ui.presenter.contact.dashboardlist.ContactsListWidget; import org.sigmah.client.ui.presenter.project.treegrid.ProjectsListWidget; +import org.sigmah.client.ui.presenter.zone.SearchPresenter; import org.sigmah.client.ui.res.icon.IconImageBundle; import org.sigmah.client.ui.res.icon.dashboard.funding.FundingIconProvider; import org.sigmah.client.ui.res.icon.dashboard.funding.FundingIconProvider.IconSize; @@ -123,15 +125,7 @@ public class SearchResultsView extends AbstractView implements SearchResultsPresenter.View { - private Set projectIdsForFiltering; - - private Set orgUnitIdsForFiltering; - - private Set contactIdsForFiltering; - private String searchText; - - private String userId; private ContentPanel searchResultsPanel; @@ -162,7 +156,7 @@ public void setContactClickHandler(final ContactResultsClickHandler handler) { public void setOrgUnitClickHandler(final OrgUnitResultsClickHandler handler) { this.handler = handler; } - + @Override public void setFileClickHandler(final FilesResultsClickHandler handler) { // TODO Auto-generated method stub @@ -195,46 +189,13 @@ public void setSearchString(String searchText) { // Window.alert("Searchtext set to " + searchText); } - public Set getProjectIdsForFiltering() { - return projectIdsForFiltering; - } - - public void setProjectIdsForFiltering(Set projectIdsForFiltering) { - this.projectIdsForFiltering = projectIdsForFiltering; - } - - public Set getOrgUnitIdsForFiltering() { - return orgUnitIdsForFiltering; - } - - public void setOrgUnitIdsForFiltering(Set orgUnitIdsForFiltering) { - this.orgUnitIdsForFiltering = orgUnitIdsForFiltering; - } - - public Set getContactIdsForFiltering() { - return contactIdsForFiltering; - } - - public void setContactIdsForFiltering(Set contactIdsForFiltering) { - this.contactIdsForFiltering = contactIdsForFiltering; - } - - public String getUserId() { - return userId; - } - - public void setUserId(String userId) { - this.userId = userId; - } // ------------------------------------------------------------------------------------------- // // UTILITY METHODS. // // ------------------------------------------------------------------------------------------- - - - public void addSearchData(Object searchData) { + public boolean addSearchData(Object searchData) { if (searchData != null) { // Window.alert("Received search results!: \n" + // searchData.toString()); @@ -242,60 +203,13 @@ public void addSearchData(Object searchData) { for (Object object : (ArrayList) searchData) { SearchResultsDTO temp = object != null ? (SearchResultsDTO) object : null; - if (filter(temp)) { - searchResultsStore.add(temp); - } - - // Window.alert("Received search result!: \n" + - // object.getResult()); + searchResultsStore.add(temp); } + return true; } else { Window.alert("Failed to receive search results!"); - } - } - - public boolean filter(SearchResultsDTO dto) { - - if (dto == null) return false; - - Map retMap = toMap(dto.getResult()); - dto.setDTOtype(retMap.get("doc_type").toString()); - - if (retMap.get("doc_type").toString().equals("PROJECT")) { - dto.setDTOid(retMap.get("databaseid").toString()); - if (!projectIdsForFiltering.contains(Integer.parseInt(dto.getDTOid()))) { - // Window.alert("Found project not to be included!"); - return false; - } - - } else if (retMap.get("doc_type").toString().equals("CONTACT")) { - dto.setDTOid(retMap.get("id_contact").toString()); - if (!contactIdsForFiltering.contains(Integer.parseInt(dto.getDTOid()))) { - //Window.alert("Found Contact not to be included: " + dto.getDTOid()); - return false; - } - } else if (retMap.get("doc_type").toString().equals("ORG_UNIT")) { - dto.setDTOid(retMap.get("org_unit_id").toString()); - if (!orgUnitIdsForFiltering.contains(Integer.parseInt(dto.getDTOid()))) { - // Window.alert("Found OrgUnit not to be included!"); - return false; - } } - else if (retMap.get("doc_type").toString().equals("FILE")) { -// if(projectIdsForFiltering.size() == 0 || orgUnitIdsForFiltering.size() == 0 ) //cannot view projects or orgunits -// return false; - dto.setDTOid(retMap.get("file_version_id").toString()); - dto.setFile_name(retMap.get("file_name")); - dto.setFile_ext(retMap.get("file_ext")); - if( retMap.get("file_author_id").equals(getUserId())){ - //temporary filter, since I am unable to implement a better filter, - //users can only view those files of which they are the authors! - return true; - } - return false; - } - return true; } public void addResultsPanel() { @@ -365,7 +279,7 @@ private List createSearchResultsGridColumns() { labelColumn.setId("label"); labelColumn.setHeaderHtml("Sort"); labelColumn.setWidth(100); - //labelColumn.setResizable(true); + // labelColumn.setResizable(true); // Add link labelColumn.setRenderer(new GridCellRenderer() { @@ -374,7 +288,7 @@ private List createSearchResultsGridColumns() { public Object render(final SearchResultsDTO model, String property, ColumnData config, int rowIndex, int colIndex, ListStore store, Grid grid) { - Map retMap = toMap(model.getResult()); + Map retMap = SearchPresenter.toMap(model.getResult()); HTML h = new HTML(getNiceText(retMap)); if (retMap.get("doc_type").toString().equals("PROJECT")) { @@ -414,7 +328,7 @@ public void onClick(ClickEvent event) { } }); } - + if (retMap.get("doc_type").toString().equals("FILE")) { h.addClickHandler(new ClickHandler() { @@ -427,8 +341,7 @@ public void onClick(ClickEvent event) { fv.setExtension(model.getFile_ext()); fv.setId(Integer.parseInt(model.getDTOid())); fv.setName(model.getFile_name()); - ((FilesResultsClickHandler) handler) - .onLabelClickEvent(fv); + ((FilesResultsClickHandler) handler).onLabelClickEvent(fv); } }); } @@ -455,18 +368,17 @@ public String getNiceText(Map resultsMap) { pmt = ProjectModelType.LOCAL_PARTNER; htmlBuilder += "
"; - htmlBuilder += "
" - + getProjectLogo(pmt).getHTML() + "
" - + "
" - + resultsMap.get("project_name") - + " - " + resultsMap.get("project_fullname") + "
"; + htmlBuilder += "
" + + getProjectLogo(pmt).getHTML() + "
" + + "
" + + resultsMap.get("project_name") + " - " + resultsMap.get("project_fullname") + "
"; htmlBuilder += "
"; htmlBuilder += "

"; htmlBuilder += "
Active Phase: " + resultsMap.get("phase_model_name"); - htmlBuilder += "
Organisational Unit: " + resultsMap.get("project_org_unit_name") - + " - " + resultsMap.get("project_org_unit_fullname"); + htmlBuilder += "
Organisational Unit: " + resultsMap.get("project_org_unit_name") + " - " + + resultsMap.get("project_org_unit_fullname"); htmlBuilder += "
Amendment Status: " + resultsMap.get("amendment_status"); htmlBuilder += "
Project Model: " + resultsMap.get("pmodel_name"); htmlBuilder += "
Project Model Type: " + resultsMap.get("type_pmodel"); @@ -476,13 +388,12 @@ public String getNiceText(Map resultsMap) { } if (resultsMap.get("doc_type").toString().equals("ORG_UNIT")) { htmlBuilder += "

"; - htmlBuilder += "
" - + getOrgUnitLogo().getHTML() + "
" + htmlBuilder += "
" + + getOrgUnitLogo().getHTML() + "
" + "
" - + resultsMap.get("org_unit_name") - + " - " + resultsMap.get("org_unit_fullname") + "
"; + + resultsMap.get("org_unit_name") + " - " + resultsMap.get("org_unit_fullname") + "
"; htmlBuilder += "
"; htmlBuilder += "

"; htmlBuilder += "
Model: " + resultsMap.get("org_unit_model_name"); @@ -495,20 +406,18 @@ public String getNiceText(Map resultsMap) { } if (resultsMap.get("doc_type").toString().equals("CONTACT")) { -// ContactModelType cmt = null; -// if (resultsMap.get("contact_model_type").equals("INDIVIDUAL")) -// cmt = ContactModelType.INDIVIDUAL; -// if (resultsMap.get("contact_model_type").equals("ORGANIZATION")) -// cmt = ContactModelType.ORGANIZATION; - + // ContactModelType cmt = null; + // if (resultsMap.get("contact_model_type").equals("INDIVIDUAL")) + // cmt = ContactModelType.INDIVIDUAL; + // if (resultsMap.get("contact_model_type").equals("ORGANIZATION")) + // cmt = ContactModelType.ORGANIZATION; + htmlBuilder += "

"; - htmlBuilder += "
" - + "
" - + IconImageBundle.ICONS.user().createImage() + "
" - + "
" + + IconImageBundle.ICONS.user().createImage() + "
" + + "
"; + + "cursor:pointer;color:#482a1e;display:inline;" + "white-space:nowrap;\">"; if (resultsMap.get("user_firstname") != null) { htmlBuilder += resultsMap.get("user_firstname") + " - " + resultsMap.get("user_name"); htmlBuilder += "
"; @@ -529,44 +438,42 @@ public String getNiceText(Map resultsMap) { htmlBuilder += "
Contact type: " + resultsMap.get("contact_model_type"); htmlBuilder += "
Contact Model Name: " + resultsMap.get("contact_model_name"); htmlBuilder += "


"; - + } if (resultsMap.get("doc_type").toString().equals("FILE")) { htmlBuilder += "
"; - htmlBuilder += "
" - + IconImageBundle.ICONS.attach().createImage() + "
" + htmlBuilder += "
" + + IconImageBundle.ICONS.attach().createImage() + "
" + "
"; - if(resultsMap.get("title") != null){ - htmlBuilder += resultsMap.get("title") + " - " + resultsMap.get("file_name") + "." + if (resultsMap.get("title") != null) { + htmlBuilder += resultsMap.get("title") + " - " + resultsMap.get("file_name") + "." + resultsMap.get("file_ext"); - }else{ + } else { htmlBuilder += resultsMap.get("file_name") + "." + resultsMap.get("file_ext"); } htmlBuilder += "
"; htmlBuilder += "
"; htmlBuilder += "

"; - htmlBuilder += "
Author: " + resultsMap.get("file_author") + " - " - + resultsMap.get("file_author_email"); + htmlBuilder += "
Author: " + resultsMap.get("file_author") + " - " + resultsMap.get("file_author_email"); htmlBuilder += "

"; htmlBuilder += "

"; String contentString; - if(resultsMap.get("title") != null){ + if (resultsMap.get("title") != null) { contentString = resultsMap.get("content") - .substring(resultsMap.get("title").length()+1, - min(900,resultsMap.get("content").length()) ).replaceAll("\\\\n", ""); - }else{ - contentString = resultsMap.get("content").substring(0, - min(900,resultsMap.get("content").length())).replaceAll("\\\\n", ""); + .substring(resultsMap.get("title").length() + 1, min(900, resultsMap.get("content").length())) + .replaceAll("\\\\n", ""); + } else { + contentString = resultsMap.get("content").substring(0, min(900, resultsMap.get("content").length())) + .replaceAll("\\\\n", ""); } int i; - for( i = 180; i<= min(800,contentString.length()); i+=180 ){ - htmlBuilder += "
" + contentString.substring(i-180, i); + for (i = 180; i <= min(800, contentString.length()); i += 180) { + htmlBuilder += "
" + contentString.substring(i - 180, i); } - htmlBuilder += "
" + contentString.substring(i-180,contentString.length()) - + "...
"; + htmlBuilder += "
" + contentString.substring(i - 180, contentString.length()) + "...
"; htmlBuilder += "


"; } return htmlBuilder; @@ -574,21 +481,10 @@ public String getNiceText(Map resultsMap) { private int min(int i, int length) { // TODO Auto-generated method stub - if(i < length)return i; else return length; - } - - public static Map toMap(String jsonStr) { - Map map = new HashMap(); - - JSONValue parsed = JSONParser.parseStrict(jsonStr); - JSONObject jsonObj = parsed.isObject(); - if (jsonObj != null) { - for (String key : jsonObj.keySet()) { - map.put(key.replaceAll("^\"|\"$", ""), jsonObj.get(key).toString().replaceAll("^\"|\"$", "")); - } - } - - return map; + if (i < length) + return i; + else + return length; } public AbstractImagePrototype getProjectLogo(final ProjectModelType projectType) { @@ -598,9 +494,9 @@ public AbstractImagePrototype getProjectLogo(final ProjectModelType projectType) } public HTML getContactLogo(ContactModelType type) { - //Element spanElement = DOM.createSpan(); + // Element spanElement = DOM.createSpan(); HTML avatar = new HTML(); - //avatar.setStyleName(); + // avatar.setStyleName(); avatar.setStyleName("contact-card-avatar"); avatar.getElement().getStyle().clearBackgroundImage(); avatar.getElement().getStyle().clearPadding(); @@ -610,15 +506,18 @@ public HTML getContactLogo(ContactModelType type) { avatar.setHeight(36 + "px"); avatar.getElement().setAttribute("display", "inline"); avatar.getElement().setAttribute("padding-left", "10px"); - + switch (type) { case INDIVIDUAL: - //avatar.getElement().setAttribute("background-image", "url(\"../images/icon/individual-128.png\");"); - avatar.addStyleName("contact-card-avatar-individual"); + // avatar.getElement().setAttribute("background-image", + // "url(\"../images/icon/individual-128.png\");"); + avatar.addStyleName("contact-card-avatar-individual"); break; case ORGANIZATION: - //avatar.getElement().setAttribute("background-image", "url(\"../images/icon/organization-128.png\");"); - //avatar.addStyleName("background-image: url(\"../images/icon/organization-128.png\");"); + // avatar.getElement().setAttribute("background-image", + // "url(\"../images/icon/organization-128.png\");"); + // avatar.addStyleName("background-image: + // url(\"../images/icon/organization-128.png\");"); avatar.addStyleName("contact-card-avatar-organization"); break; default: diff --git a/src/main/java/org/sigmah/client/ui/view/zone/SearchView.java b/src/main/java/org/sigmah/client/ui/view/zone/SearchView.java index 24644c2a2..8a8f01cbe 100644 --- a/src/main/java/org/sigmah/client/ui/view/zone/SearchView.java +++ b/src/main/java/org/sigmah/client/ui/view/zone/SearchView.java @@ -80,7 +80,7 @@ public void initialize() { searchOptionsComboBox.add(newSearchOptions); searchOptionsComboBox.setTriggerAction(ComboBox.TriggerAction.ALL); searchOptionsComboBox.setEditable(false); - searchOptionsComboBox.setWidth(75); + searchOptionsComboBox.setWidth(78); searchOptionsComboBox.setSimpleValue("All"); diff --git a/src/main/java/org/sigmah/server/search/SearchServiceImpl.java b/src/main/java/org/sigmah/server/search/SearchServiceImpl.java index ee4d07547..2b01c7a75 100644 --- a/src/main/java/org/sigmah/server/search/SearchServiceImpl.java +++ b/src/main/java/org/sigmah/server/search/SearchServiceImpl.java @@ -2,6 +2,8 @@ import com.google.gwt.user.server.rpc.RemoteServiceServlet; import java.util.ArrayList; +import java.util.List; + import org.sigmah.client.search.SearchService; import org.sigmah.server.search.SolrSearcher; import org.sigmah.shared.dto.search.SearchResultsDTO; @@ -12,7 +14,10 @@ public class SearchServiceImpl extends RemoteServiceServlet implements SearchSer //implementation of the Search Methods @Override public ArrayList search(String searchStr, String filter){ - return SolrSearcher.getInstance().search(searchStr, filter); + if( SolrSearcher.getInstance() != null ){ + return SolrSearcher.getInstance().search(searchStr, filter); + } + return null; } @Override @@ -22,7 +27,8 @@ public Boolean index() { @Override public Boolean updateCore(String solrCoreUrl) { - if( SolrSearcher.getNewInstance(solrCoreUrl) != null ) return true; + if( SolrSearcher.getNewInstance(solrCoreUrl) != null ) + return true; return false; } diff --git a/src/main/java/org/sigmah/server/search/SolrIndexJob.java b/src/main/java/org/sigmah/server/search/SolrIndexJob.java index 5c9ae031a..12e583553 100644 --- a/src/main/java/org/sigmah/server/search/SolrIndexJob.java +++ b/src/main/java/org/sigmah/server/search/SolrIndexJob.java @@ -26,7 +26,10 @@ public void execute(JobExecutionContext executionContext) throws JobExecutionExc final EntityManager em = (EntityManager) dataMap.get("em"); final Injector injector = (Injector) dataMap.get("injector"); System.out.println("Starting Solr Full Data Import!"); - SolrSearcher.getInstance().FullDataImport(); + if( !SolrSearcher.getInstance().FullDataImport()){ + System.out.println("Could not finish Full Data Import!"); + return; + } System.out.println("Finished Solr Full Data Import!"); EntityTransaction tx = null; diff --git a/src/main/java/org/sigmah/server/search/SolrSearcher.java b/src/main/java/org/sigmah/server/search/SolrSearcher.java index 00d122e2b..557426901 100644 --- a/src/main/java/org/sigmah/server/search/SolrSearcher.java +++ b/src/main/java/org/sigmah/server/search/SolrSearcher.java @@ -61,11 +61,20 @@ public static SolrSearcher getInstance() { // Singleton instance = new SolrSearcher(); try { instance.loadServer(); - } catch (Exception e) { + } catch (SolrServerException e) { // TODO Auto-generated catch block System.out.println("SOLR CONNECTION FAILED"); instance = null; e.printStackTrace(); + } catch (MalformedURLException e) { + // TODO Auto-generated catch block + System.out.println("SOLR CONNECTION FAILED"); + instance = null; + e.printStackTrace(); + } catch (IOException e){ + System.out.println("SOLR CONNECTION FAILED"); + instance = null; + e.printStackTrace(); } } return instance; @@ -77,19 +86,25 @@ public static SolrSearcher getNewInstance(String solrCoreUrl) { //only for use w instance.urlString = solrCoreUrl; try { instance.loadServer(); - } catch (Exception e) { + } catch (SolrServerException e) { // TODO Auto-generated catch block System.out.println("SOLR CONNECTION FAILED"); instance = null; e.printStackTrace(); - return null; + } catch (MalformedURLException e) { + // TODO Auto-generated catch block + System.out.println("SOLR CONNECTION FAILED"); + instance = null; + e.printStackTrace(); + } catch (IOException e){ + System.out.println("SOLR CONNECTION FAILED"); + instance = null; + e.printStackTrace(); } return instance; } - private void loadServer() throws MalformedURLException { - // urlString = "http://localhost:8983/solr/Test_Sigmah"; - // urlString = properties.getProperty(PropertyKey.SOLR_CORE_URL); + private void loadServer() throws MalformedURLException, SolrServerException, IOException { System.out.println("SOLR CONNECTING TO: " + urlString); solrServer = new HttpSolrClient.Builder(urlString).build(); System.out.println("SOLR CONNECTION CONNECTED"); @@ -130,9 +145,11 @@ else if (filter.equals("OrgUnits")){ } catch (SolrServerException e) { // TODO Auto-generated catch block e.printStackTrace(); + return null; } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); + return null; } if (rsp != null) { From 6b2ed5f460a302c937d10d66cf1af9615eb19b8b Mon Sep 17 00:00:00 2001 From: indianauthority97 Date: Sat, 12 Aug 2017 14:11:25 +0530 Subject: [PATCH 32/36] [Issue #535]:Code cleanup #1 --- .../sigmah/client/inject/ClientModule.java | 1 - .../sigmah/client/search/SearchService.java | 1 - .../ui/presenter/DashboardPresenter.java | 35 +- .../ui/presenter/SearchResultsPresenter.java | 131 +------ .../admin/ParametersAdminPresenter.java | 94 +++-- .../presenter/zone/MenuBannerPresenter.java | 31 -- .../ui/presenter/zone/SearchPresenter.java | 62 +--- .../client/ui/view/SearchResultsView.java | 345 +++++++----------- .../ui/view/admin/ParametersAdminView.java | 12 +- .../client/ui/view/zone/SearchView.java | 26 +- .../server/dao/impl/FileHibernateDAO.java | 6 +- .../sigmah/server/domain/Organization.java | 4 +- .../handler/UpdateOrganizationHandler.java | 2 +- .../sigmah/server/handler/util/Handlers.java | 2 +- .../server/inject/ConfigurationModule.java | 1 - .../server/search/FilesSolrManager.java | 2 +- .../search/FilesSolrManagerHandler.java | 4 +- .../server/search/FilesSolrManagerImpl.java | 21 +- .../server/search/SearchServiceImpl.java | 4 +- .../sigmah/server/search/SolrIndexJob.java | 11 +- .../server/search/SolrIndexJobActivator.java | 2 - .../sigmah/server/search/SolrSearcher.java | 40 +- .../shared/command/FilesSolrIndexCommand.java | 1 - .../shared/dto/search/SearchResultsDTO.java | 10 +- 24 files changed, 249 insertions(+), 599 deletions(-) diff --git a/src/main/java/org/sigmah/client/inject/ClientModule.java b/src/main/java/org/sigmah/client/inject/ClientModule.java index 40c0e9f1c..4267c8fab 100644 --- a/src/main/java/org/sigmah/client/inject/ClientModule.java +++ b/src/main/java/org/sigmah/client/inject/ClientModule.java @@ -30,7 +30,6 @@ import org.sigmah.client.security.AuthenticationProvider; import org.sigmah.client.security.SecureDispatchAsync; import org.sigmah.client.security.SecureExceptionHandler; -import org.sigmah.client.ui.presenter.zone.SearchPresenter; import org.sigmah.client.ui.theme.SigmahTheme; import org.sigmah.client.ui.theme.Theme; diff --git a/src/main/java/org/sigmah/client/search/SearchService.java b/src/main/java/org/sigmah/client/search/SearchService.java index 0c2a3c5c0..5eff32ad3 100644 --- a/src/main/java/org/sigmah/client/search/SearchService.java +++ b/src/main/java/org/sigmah/client/search/SearchService.java @@ -1,6 +1,5 @@ package org.sigmah.client.search; -import java.io.IOException; import java.util.ArrayList; import org.sigmah.shared.dto.search.SearchResultsDTO; diff --git a/src/main/java/org/sigmah/client/ui/presenter/DashboardPresenter.java b/src/main/java/org/sigmah/client/ui/presenter/DashboardPresenter.java index fdc83149d..87b1fcf4e 100644 --- a/src/main/java/org/sigmah/client/ui/presenter/DashboardPresenter.java +++ b/src/main/java/org/sigmah/client/ui/presenter/DashboardPresenter.java @@ -29,6 +29,8 @@ import org.sigmah.client.dispatch.CommandResultHandler; import org.sigmah.client.dispatch.monitor.LoadingMask; +import org.sigmah.client.event.OfflineEvent; +import org.sigmah.client.event.handler.OfflineHandler; import org.sigmah.client.i18n.I18N; import org.sigmah.client.inject.Injector; import org.sigmah.client.page.Page; @@ -36,6 +38,8 @@ import org.sigmah.client.page.RequestParameter; import org.sigmah.client.search.SearchService; import org.sigmah.client.search.SearchServiceAsync; +import org.sigmah.client.ui.notif.ConfirmCallback; +import org.sigmah.client.ui.notif.N10N; import org.sigmah.client.ui.presenter.base.AbstractPagePresenter; import org.sigmah.client.ui.presenter.contact.dashboardlist.ContactsListWidget; import org.sigmah.client.ui.presenter.project.treegrid.ProjectsListWidget; @@ -47,7 +51,13 @@ import org.sigmah.client.ui.widget.HasTreeGrid.TreeGridEventHandler; import org.sigmah.client.ui.widget.WorkInProgressWidget; import org.sigmah.client.ui.widget.orgunit.OrgUnitTreeGrid; +import org.sigmah.client.ui.zone.Zone; import org.sigmah.client.util.ClientUtils; +import org.sigmah.client.util.profiler.ExecutionAsyncDAO; +import org.sigmah.client.util.profiler.Profiler; +import org.sigmah.client.util.profiler.Scenario; +import org.sigmah.offline.status.ApplicationState; +import org.sigmah.offline.sync.UpdateDates; import org.sigmah.shared.command.GetMonitoredPoints; import org.sigmah.shared.command.GetOrgUnits; import org.sigmah.shared.command.GetReminders; @@ -66,28 +76,11 @@ import com.extjs.gxt.ui.client.store.ListStore; import com.extjs.gxt.ui.client.widget.Component; import com.google.gwt.core.client.GWT; -import com.google.gwt.user.client.Window; import com.google.gwt.user.client.rpc.AsyncCallback; import com.google.gwt.user.client.ui.AbstractImagePrototype; import com.google.inject.ImplementedBy; import com.google.inject.Inject; import com.google.inject.Singleton; -import org.sigmah.client.event.OfflineEvent; -import org.sigmah.client.event.handler.OfflineHandler; -import org.sigmah.client.ui.notif.ConfirmCallback; -import org.sigmah.client.ui.notif.N10N; -import org.sigmah.client.ui.zone.Zone; -import org.sigmah.client.util.profiler.Checkpoint; -import org.sigmah.client.util.profiler.Execution; -import org.sigmah.client.util.profiler.ExecutionAsyncDAO; -import org.sigmah.client.util.profiler.Profiler; -import org.sigmah.client.util.profiler.Scenario; -import org.sigmah.offline.status.ApplicationState; -import org.sigmah.offline.sync.UpdateDates; -import org.sigmah.shared.command.SendProbeReport; -import org.sigmah.shared.command.result.Result; -import org.sigmah.shared.dto.profile.CheckPointDTO; -import org.sigmah.shared.dto.profile.ExecutionDTO; /** * Dashboard page presenter. @@ -281,19 +274,17 @@ public void handleEvent(OfflineEvent event) { searchService.updateCore(auth().getOrganizationSolrCoreUrl(), new AsyncCallback() { public void onFailure(Throwable caught) { - N10N.errorNotif("Failed to connect to Solr!", - "Check your connection with Solr Server or the Solr Core Url!"); + N10N.error("Error connecting to Solr", "Solr Server connection is not available."); //Window.alert("Could not update Solr Core. Check that the url is valid!"); caught.printStackTrace(); } public void onSuccess(Boolean result) { Boolean dih_success = result; - if (dih_success == true) { + if (dih_success) { //Window.alert("Successfully updated Solr Core!"); } else { - N10N.errorNotif("Failed to connect to Solr!", - "Check your connection with Solr Server or the Solr Core Url!"); + N10N.error("Error connecting to Solr", "Solr Server connection is not available."); } } }); diff --git a/src/main/java/org/sigmah/client/ui/presenter/SearchResultsPresenter.java b/src/main/java/org/sigmah/client/ui/presenter/SearchResultsPresenter.java index 4ac9e6471..16bfa468d 100644 --- a/src/main/java/org/sigmah/client/ui/presenter/SearchResultsPresenter.java +++ b/src/main/java/org/sigmah/client/ui/presenter/SearchResultsPresenter.java @@ -1,117 +1,22 @@ package org.sigmah.client.ui.presenter; -import java.io.IOException; - -/* - * #%L - * Sigmah - * %% - * Copyright (C) 2010 - 2016 URD - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program. If not, see - * . - * #L% - */ - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Date; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; - -import org.sigmah.client.dispatch.CommandResultHandler; -import org.sigmah.client.dispatch.monitor.LoadingMask; -import org.sigmah.client.i18n.I18N; import org.sigmah.client.inject.Injector; import org.sigmah.client.page.Page; import org.sigmah.client.page.PageRequest; import org.sigmah.client.page.RequestParameter; -import org.sigmah.client.search.SearchService; -import org.sigmah.client.search.SearchServiceAsync; +import org.sigmah.client.ui.notif.N10N; import org.sigmah.client.ui.presenter.base.AbstractPagePresenter; -import org.sigmah.client.ui.presenter.contact.dashboardlist.ContactsListWidget; -import org.sigmah.client.ui.presenter.project.treegrid.ProjectsListWidget; -import org.sigmah.client.ui.presenter.project.treegrid.ProjectsListWidget.LoadingMode; -import org.sigmah.client.ui.presenter.project.treegrid.ProjectsListWidget.RefreshMode; -import org.sigmah.client.ui.res.icon.IconImageBundle; -import org.sigmah.client.ui.view.DashboardView; import org.sigmah.client.ui.view.SearchResultsView; import org.sigmah.client.ui.view.base.ViewInterface; -import org.sigmah.client.ui.widget.HasTreeGrid.TreeGridEventHandler; -import org.sigmah.client.ui.widget.WorkInProgressWidget; -import org.sigmah.client.ui.widget.orgunit.OrgUnitTreeGrid; -import org.sigmah.client.ui.widget.tab.Tab; -import org.sigmah.client.ui.widget.tab.TabId; -import org.sigmah.client.util.ClientUtils; -import org.sigmah.shared.command.GetMonitoredPoints; -import org.sigmah.shared.command.GetOrgUnits; -import org.sigmah.shared.command.GetProjects; -import org.sigmah.shared.command.GetReminders; -import org.sigmah.shared.command.result.ListResult; -import org.sigmah.shared.dto.ProjectDTO; -import org.sigmah.shared.dto.orgunit.OrgUnitDTO; -import org.sigmah.shared.dto.referential.GlobalPermissionEnum; -import org.sigmah.shared.dto.reminder.MonitoredPointDTO; -import org.sigmah.shared.dto.reminder.ReminderDTO; -import org.sigmah.shared.dto.report.ReportReference; -import org.sigmah.shared.util.ProfileUtils; +import org.sigmah.shared.dto.value.FileVersionDTO; +import org.sigmah.shared.file.Cause; +import org.sigmah.shared.file.ProgressListener; +import org.sigmah.shared.file.TransfertManager; -import com.allen_sauer.gwt.log.client.Log; -import com.extjs.gxt.ui.client.event.BaseEvent; -import com.extjs.gxt.ui.client.event.ButtonEvent; -import com.extjs.gxt.ui.client.event.Events; -import com.extjs.gxt.ui.client.event.Listener; -import com.extjs.gxt.ui.client.store.ListStore; -import com.extjs.gxt.ui.client.widget.Component; import com.extjs.gxt.ui.client.widget.ContentPanel; -import com.google.gwt.core.client.GWT; -import com.google.gwt.event.dom.client.ClickEvent; -import com.google.gwt.event.dom.client.ClickHandler; -import com.google.gwt.user.client.Window; import com.google.gwt.user.client.rpc.AsyncCallback; -import com.google.gwt.user.client.ui.AbstractImagePrototype; import com.google.inject.ImplementedBy; import com.google.inject.Inject; -import com.google.inject.Singleton; -import org.sigmah.client.event.OfflineEvent; -import org.sigmah.client.event.UpdateEvent; -import org.sigmah.client.event.handler.OfflineHandler; -import org.sigmah.client.event.handler.UpdateHandler; -import org.sigmah.client.ui.notif.ConfirmCallback; -import org.sigmah.client.ui.notif.N10N; -import org.sigmah.client.ui.zone.Zone; -import org.sigmah.client.ui.zone.ZoneRequest; -import org.sigmah.client.util.profiler.Checkpoint; -import org.sigmah.client.util.profiler.Execution; -import org.sigmah.client.util.profiler.ExecutionAsyncDAO; -import org.sigmah.client.util.profiler.Profiler; -import org.sigmah.client.util.profiler.Scenario; -import org.sigmah.offline.status.ApplicationState; -import org.sigmah.offline.sync.UpdateDates; -import org.sigmah.shared.command.SendProbeReport; -import org.sigmah.shared.command.result.Result; -import org.sigmah.shared.conf.PropertyName; -import org.sigmah.shared.dto.profile.CheckPointDTO; -import org.sigmah.shared.dto.profile.ExecutionDTO; -import org.sigmah.shared.dto.search.SearchResultsDTO; -import org.sigmah.shared.dto.value.FileVersionDTO; -import org.sigmah.shared.file.Cause; -import org.sigmah.shared.file.ProgressListener; -import org.sigmah.shared.file.TransfertManager; /** * Search Results page presenter. @@ -167,14 +72,7 @@ public interface View extends ViewInterface { void setOrgUnitClickHandler(OrgUnitResultsClickHandler handler); void setFileClickHandler(FilesResultsClickHandler handler); - -// void setProjectIdsForFiltering(Set projectIdsForFiltering); -// -// void setOrgUnitIdsForFiltering(Set orgUnitIdsForFiltering); -// -// void setContactIdsForFiltering(Set orgUnitIdsForFiltering); - -// void setUserId(String userId); + } /** @@ -188,7 +86,6 @@ public interface View extends ViewInterface { @Inject public SearchResultsPresenter(View view, Injector injector) { super(view, injector); - // injector.getPageManager().registerPage(this, isPopupView()); } /** @@ -201,16 +98,11 @@ public Page getPage() { @Override public void onPageRequest(PageRequest request) { - // TODO Auto-generated method stub - // view.initialize() is default String title = request.getData(RequestParameter.TITLE).toString(); - // Window.alert("Executing onPageRequest, title is " + title ); view.setSearchString(title); view.setProjectClickHandler(new ProjectResultsClickHandler() { @Override public void onLabelClickEvent(Integer projectId) { - //Window.alert("Opening project " + projectId ); - //Window.alert(eventBus.toString()); PageRequest request = new PageRequest(Page.PROJECT_DASHBOARD); request.addParameter(RequestParameter.ID, projectId ); eventBus.navigateRequest(request); @@ -219,8 +111,6 @@ public void onLabelClickEvent(Integer projectId) { view.setContactClickHandler(new ContactResultsClickHandler() { @Override public void onLabelClickEvent(Integer contactId) { - //Window.alert("Opening Contact " + contactId ); - //Window.alert(eventBus.toString()); PageRequest request = new PageRequest(Page.CONTACT_DASHBOARD); request.addParameter(RequestParameter.ID, contactId ); eventBus.navigateRequest(request); @@ -229,8 +119,6 @@ public void onLabelClickEvent(Integer contactId) { view.setOrgUnitClickHandler(new OrgUnitResultsClickHandler() { @Override public void onLabelClickEvent(Integer orgUnitId) { - //Window.alert("Opening OrgUnit " + orgUnitId ); - //Window.alert(eventBus.toString()); PageRequest request = new PageRequest(Page.ORGUNIT_DASHBOARD); request.addParameter(RequestParameter.ID, orgUnitId ); eventBus.navigateRequest(request); @@ -239,12 +127,11 @@ public void onLabelClickEvent(Integer orgUnitId) { view.setFileClickHandler(new FilesResultsClickHandler() { @Override public void onLabelClickEvent(final FileVersionDTO fv){ - //Window.alert(transfertManager.toString()); transfertManager.canDownload(fv, new AsyncCallback() { @Override public void onFailure(Throwable caught) { - N10N.error("Unable to download!", "Check if the file exists. You may not have permission to view this file!"); + N10N.error("Unable to download!", "Check if the file exists. You may not have access to this file!"); } @Override @@ -258,7 +145,7 @@ public void onProgress(double progress, double speed) { @Override public void onFailure(Cause cause) { - N10N.error("Unable to download!", "Check if the file exists. You may not have permission to view this file!"); + N10N.error("Unable to download!", "Check if the file exists. You may not have access to this file!"); } @Override @@ -266,7 +153,7 @@ public void onLoad(String result) { } }); } else { - N10N.error("Unable to download!", "Check if the file exists. You may not have permission to view this file!"); + N10N.error("Unable to download!", "Check if the file exists. You may not have access to this file!"); } } }); diff --git a/src/main/java/org/sigmah/client/ui/presenter/admin/ParametersAdminPresenter.java b/src/main/java/org/sigmah/client/ui/presenter/admin/ParametersAdminPresenter.java index 9acb07c0f..e45b880c4 100644 --- a/src/main/java/org/sigmah/client/ui/presenter/admin/ParametersAdminPresenter.java +++ b/src/main/java/org/sigmah/client/ui/presenter/admin/ParametersAdminPresenter.java @@ -1,52 +1,5 @@ package org.sigmah.client.ui.presenter.admin; -import com.google.gwt.core.client.GWT; - -/* - * #%L - * Sigmah - * %% - * Copyright (C) 2010 - 2016 URD - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program. If not, see - * . - * #L% - */ - -import com.google.gwt.event.dom.client.ClickEvent; -import com.google.gwt.event.dom.client.ClickHandler; -import com.google.gwt.user.client.Timer; -import com.google.gwt.user.client.Window; -import com.google.gwt.user.client.rpc.AsyncCallback; -import com.google.gwt.user.client.ui.Image; -import com.google.inject.ImplementedBy; -import com.google.inject.Inject; -import com.google.inject.Singleton; -import com.extjs.gxt.ui.client.event.ButtonEvent; -import com.extjs.gxt.ui.client.event.Events; -import com.extjs.gxt.ui.client.event.FormEvent; -import com.extjs.gxt.ui.client.event.Listener; -import com.extjs.gxt.ui.client.event.SelectionListener; -import com.extjs.gxt.ui.client.store.ListStore; -import com.extjs.gxt.ui.client.store.StoreEvent; -import com.extjs.gxt.ui.client.store.StoreListener; -import com.extjs.gxt.ui.client.widget.form.ComboBox; -import com.extjs.gxt.ui.client.widget.form.FileUploadField; -import com.extjs.gxt.ui.client.widget.form.FormPanel.Encoding; -import com.extjs.gxt.ui.client.widget.form.FormPanel.Method; -import com.extjs.gxt.ui.client.widget.form.TextField; - import java.util.Set; import org.sigmah.client.dispatch.CommandResultHandler; @@ -87,6 +40,51 @@ import org.sigmah.shared.util.ExportUtils.ExportFormat; import com.allen_sauer.gwt.log.client.Log; +import com.extjs.gxt.ui.client.event.ButtonEvent; +import com.extjs.gxt.ui.client.event.Events; +import com.extjs.gxt.ui.client.event.FormEvent; +import com.extjs.gxt.ui.client.event.Listener; +import com.extjs.gxt.ui.client.event.SelectionListener; +import com.extjs.gxt.ui.client.store.ListStore; +import com.extjs.gxt.ui.client.store.StoreEvent; +import com.extjs.gxt.ui.client.store.StoreListener; +import com.extjs.gxt.ui.client.widget.form.ComboBox; +import com.extjs.gxt.ui.client.widget.form.FileUploadField; +import com.extjs.gxt.ui.client.widget.form.FormPanel.Encoding; +import com.extjs.gxt.ui.client.widget.form.FormPanel.Method; +import com.extjs.gxt.ui.client.widget.form.TextField; +import com.google.gwt.core.client.GWT; + +/* + * #%L + * Sigmah + * %% + * Copyright (C) 2010 - 2016 URD + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program. If not, see + * . + * #L% + */ + +import com.google.gwt.event.dom.client.ClickEvent; +import com.google.gwt.event.dom.client.ClickHandler; +import com.google.gwt.user.client.Timer; +import com.google.gwt.user.client.rpc.AsyncCallback; +import com.google.gwt.user.client.ui.Image; +import com.google.inject.ImplementedBy; +import com.google.inject.Inject; +import com.google.inject.Singleton; /** * Admin Parameters Presenter which manages {@link ParametersAdminView}. @@ -730,7 +728,7 @@ public void onFailure(Throwable caught) { public void onSuccess(Boolean result) { Boolean dih_success = result; - if (dih_success == true) { + if (dih_success) { N10N.validNotif("Successfully updated Solr Core!", "You can now carry out search."); // Window.alert("Successfully updated Solr Core!"); diff --git a/src/main/java/org/sigmah/client/ui/presenter/zone/MenuBannerPresenter.java b/src/main/java/org/sigmah/client/ui/presenter/zone/MenuBannerPresenter.java index d02802d51..3ee469592 100644 --- a/src/main/java/org/sigmah/client/ui/presenter/zone/MenuBannerPresenter.java +++ b/src/main/java/org/sigmah/client/ui/presenter/zone/MenuBannerPresenter.java @@ -1,29 +1,5 @@ package org.sigmah.client.ui.presenter.zone; -/* - * #%L - * Sigmah - * %% - * Copyright (C) 2010 - 2016 URD - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program. If not, see - * . - * #L% - */ - - -import com.allen_sauer.gwt.log.client.Log; import java.util.HashMap; import java.util.Map; @@ -49,13 +25,10 @@ import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.event.dom.client.ClickHandler; import com.google.gwt.event.dom.client.HasClickHandlers; -import com.google.gwt.user.client.Window; import com.google.gwt.user.client.ui.Panel; import com.google.inject.ImplementedBy; import com.google.inject.Inject; import com.google.inject.Singleton; - -import org.apache.commons.lang3.StringEscapeUtils; /** * Menu banner presenter displaying main tabs. * @@ -73,10 +46,6 @@ public class MenuBannerPresenter extends AbstractZonePresenter private final SearchServiceAsync searchService = GWT.create(SearchService.class); private ArrayList searchResults = new ArrayList(); - Set projectIdsForFiltering; - Set orgUnitIdsForFiltering; - Set contactIdsForFiltering; - private Boolean dih_success; - String textToServer = "default search text"; - String filter = "All"; - boolean firstsearch = true; + private Set projectIdsForFiltering; + private Set orgUnitIdsForFiltering; + private Set contactIdsForFiltering; + private String textToServer = "default search text"; + private String filter = "All"; + private boolean firstsearch = true; @Inject public SearchPresenter(View view, Injector injector) { super(view, injector); - // TODO Auto-generated constructor stub } /** @@ -221,14 +185,10 @@ public void onSuccess(ArrayList result) { } }); } - // Send the input to the server. - // Window.alert("Filter is: " + filter); searchService.search(textToServer, filter, new AsyncCallback>() { public void onFailure(Throwable caught) { - // Window.alert("Failure on the server side!"); N10N.error("Error connecting to Solr", "Solr Server connection is not available. Try later!"); - // firstsearch = true; //will try to set up a connnection again caught.printStackTrace(); } @@ -399,13 +359,9 @@ public boolean filter(SearchResultsDTO dto) { return false; } } else if (retMap.get("doc_type").toString().equals("FILE")) { - // if(projectIdsForFiltering.size() == 0 || - // orgUnitIdsForFiltering.size() == 0 ) //cannot view projects or - // orgunits - // return false; dto.setDTOid(retMap.get("file_version_id").toString()); - dto.setFile_name(retMap.get("file_name")); - dto.setFile_ext(retMap.get("file_ext")); + dto.setFileName(retMap.get("file_name")); + dto.setFileExt(retMap.get("file_ext")); //Window.alert(retMap.toString() + "\n" + retMap.get("file_author_id") + " " + auth().getUserId().toString()); if (retMap.get("file_author_id").equals(auth().getUserId().toString())) { // temporary filter, since I am unable to implement a better diff --git a/src/main/java/org/sigmah/client/ui/view/SearchResultsView.java b/src/main/java/org/sigmah/client/ui/view/SearchResultsView.java index 698892c6f..3f37550a4 100644 --- a/src/main/java/org/sigmah/client/ui/view/SearchResultsView.java +++ b/src/main/java/org/sigmah/client/ui/view/SearchResultsView.java @@ -26,61 +26,31 @@ */ import java.util.Arrays; -import java.util.Date; -import java.util.HashMap; -import java.util.HashSet; import java.util.List; import java.util.Map; -import java.util.Set; - -import org.sigmah.client.i18n.I18N; -import org.sigmah.client.page.Page; -import org.sigmah.client.page.PageRequest; -import org.sigmah.client.page.RequestParameter; -import org.sigmah.client.search.SearchService; -import org.sigmah.client.search.SearchServiceAsync; -import org.sigmah.client.ui.notif.N10N; + import org.sigmah.client.ui.presenter.SearchResultsPresenter; import org.sigmah.client.ui.presenter.SearchResultsPresenter.ContactResultsClickHandler; import org.sigmah.client.ui.presenter.SearchResultsPresenter.FilesResultsClickHandler; import org.sigmah.client.ui.presenter.SearchResultsPresenter.OrgUnitResultsClickHandler; import org.sigmah.client.ui.presenter.SearchResultsPresenter.ProjectResultsClickHandler; import org.sigmah.client.ui.presenter.SearchResultsPresenter.SearchResultsClickHandler; -import org.sigmah.client.ui.presenter.contact.dashboardlist.ContactsListWidget; -import org.sigmah.client.ui.presenter.project.treegrid.ProjectsListWidget; import org.sigmah.client.ui.presenter.zone.SearchPresenter; import org.sigmah.client.ui.res.icon.IconImageBundle; import org.sigmah.client.ui.res.icon.dashboard.funding.FundingIconProvider; import org.sigmah.client.ui.res.icon.dashboard.funding.FundingIconProvider.IconSize; import org.sigmah.client.ui.res.icon.orgunit.OrgUnitImageBundle; import org.sigmah.client.ui.view.base.AbstractView; -import org.sigmah.client.ui.widget.button.Button; -import org.sigmah.client.ui.widget.form.Forms; import org.sigmah.client.ui.widget.layout.Layouts; import org.sigmah.client.ui.widget.layout.Layouts.Margin; -import org.sigmah.client.ui.widget.orgunit.OrgUnitTreeGrid; -import org.sigmah.client.ui.widget.panel.Panels; import org.sigmah.client.util.ClientUtils; -import org.sigmah.client.util.DateUtils; -import org.sigmah.shared.dto.ProjectDTO; -import org.sigmah.shared.dto.referential.ContactModelType; -import org.sigmah.shared.dto.referential.GlobalPermissionEnum; import org.sigmah.shared.dto.referential.ProjectModelType; -import org.sigmah.shared.dto.reminder.MonitoredPointDTO; -import org.sigmah.shared.dto.reminder.ReminderDTO; import org.sigmah.shared.dto.search.SearchResultsDTO; import org.sigmah.shared.dto.value.FileVersionDTO; -import org.sigmah.shared.util.ProfileUtils; -import com.extjs.gxt.ui.client.Style.LayoutRegion; import com.extjs.gxt.ui.client.Style.Scroll; -import com.extjs.gxt.ui.client.event.ButtonEvent; -import com.extjs.gxt.ui.client.event.Events; -import com.extjs.gxt.ui.client.event.Listener; import com.extjs.gxt.ui.client.store.ListStore; -import com.extjs.gxt.ui.client.widget.Component; import com.extjs.gxt.ui.client.widget.ContentPanel; -import com.extjs.gxt.ui.client.widget.Label; import com.extjs.gxt.ui.client.widget.Layout; import com.extjs.gxt.ui.client.widget.LayoutContainer; import com.extjs.gxt.ui.client.widget.grid.ColumnConfig; @@ -88,33 +58,12 @@ import com.extjs.gxt.ui.client.widget.grid.ColumnModel; import com.extjs.gxt.ui.client.widget.grid.Grid; import com.extjs.gxt.ui.client.widget.grid.GridCellRenderer; -import com.extjs.gxt.ui.client.widget.grid.filters.DateFilter; -import com.extjs.gxt.ui.client.widget.grid.filters.GridFilters; -import com.extjs.gxt.ui.client.widget.grid.filters.StringFilter; import com.extjs.gxt.ui.client.widget.layout.FitLayout; -import com.google.gson.Gson; -import com.google.gson.reflect.TypeToken; -import com.google.gwt.core.client.GWT; -import com.google.gwt.dom.client.Element; -import com.google.gwt.dom.client.SpanElement; import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.event.dom.client.ClickHandler; -import com.google.gwt.i18n.client.DateTimeFormat; -import com.google.gwt.json.client.JSONObject; -import com.google.gwt.json.client.JSONParser; -import com.google.gwt.json.client.JSONValue; -import com.google.gwt.user.client.DOM; import com.google.gwt.user.client.Window; import com.google.gwt.user.client.ui.AbstractImagePrototype; import com.google.gwt.user.client.ui.HTML; -import com.google.gwt.user.client.ui.HorizontalPanel; -import com.google.gwt.user.client.ui.InlineHTML; -import com.google.gwt.user.client.ui.Panel; -import com.google.gwt.user.client.ui.VerticalPanel; -import com.google.gwt.user.client.ui.Widget; -import com.google.inject.Inject; -import com.google.inject.Provider; -import com.google.inject.Singleton; /** * Dashboard view. @@ -129,13 +78,13 @@ public class SearchResultsView extends AbstractView implements SearchResultsPres private ContentPanel searchResultsPanel; - ListStore searchResultsStore; + private ListStore searchResultsStore; private LayoutContainer centerContainer; private static SearchResultsClickHandler handler; - final SearchResultsClickHandler getSearchResultsClickHandler() { + public final SearchResultsClickHandler getSearchResultsClickHandler() { return handler; } @@ -200,7 +149,7 @@ public boolean addSearchData(Object searchData) { // Window.alert("Received search results!: \n" + // searchData.toString()); searchResultsStore = new ListStore(); - for (Object object : (ArrayList) searchData) { + for (Object object : (ArrayList) searchData) { SearchResultsDTO temp = object != null ? (SearchResultsDTO) object : null; searchResultsStore.add(temp); @@ -309,7 +258,6 @@ public void onClick(ClickEvent event) { @Override public void onClick(ClickEvent event) { - // handler.onLabelClickEvent(project_id); ((ContactResultsClickHandler) handler) .onLabelClickEvent(Integer.parseInt(model.getDTOid())); } @@ -338,9 +286,9 @@ public void onClick(ClickEvent event) { FileVersionDTO fv = new FileVersionDTO(); fv.setAvailable(true); - fv.setExtension(model.getFile_ext()); + fv.setExtension(model.getFileExt()); fv.setId(Integer.parseInt(model.getDTOid())); - fv.setName(model.getFile_name()); + fv.setName(model.getFileName()); ((FilesResultsClickHandler) handler).onLabelClickEvent(fv); } }); @@ -351,182 +299,159 @@ public void onClick(ClickEvent event) { }); - // Window.alert("Completed createSearchResultsGridColumns!"); return Arrays.asList(new ColumnConfig[] { labelColumn }); } + private String getNiceTextForProject(Map resultsMap, String htmlBuilder) { + ProjectModelType pmt = null; + if (resultsMap.get("type_pmodel").equals("FUNDING")) + pmt = ProjectModelType.FUNDING; + if (resultsMap.get("type_pmodel").equals("NGO")) + pmt = ProjectModelType.NGO; + if (resultsMap.get("type_pmodel").equals("LOCAL_PARTNER")) + pmt = ProjectModelType.LOCAL_PARTNER; + + htmlBuilder += "
"; + htmlBuilder += "
" + + getProjectLogo(pmt).getHTML() + "
" + + "
" + resultsMap.get("project_name") + + " - " + resultsMap.get("project_fullname") + "
"; + htmlBuilder += "
"; + htmlBuilder += "

"; + htmlBuilder += "
Active Phase: " + resultsMap.get("phase_model_name"); + htmlBuilder += "
Organisational Unit: " + resultsMap.get("project_org_unit_name") + " - " + + resultsMap.get("project_org_unit_fullname"); + htmlBuilder += "
Amendment Status: " + resultsMap.get("amendment_status"); + htmlBuilder += "
Project Model: " + resultsMap.get("pmodel_name"); + htmlBuilder += "
Project Model Type: " + resultsMap.get("type_pmodel"); + htmlBuilder += "
Start Date: " + resultsMap.get("project_startdate"); + htmlBuilder += "
Planned Budget: " + resultsMap.get("planned_budget"); + htmlBuilder += "


"; + + return htmlBuilder; + } + + private String getNiceTextForOrgUnit(Map resultsMap, String htmlBuilder) { + htmlBuilder += "
"; + htmlBuilder += "
" + getOrgUnitLogo().getHTML() + + "
" + "
" + resultsMap.get("org_unit_name") + + " - " + resultsMap.get("org_unit_fullname") + "
"; + htmlBuilder += "
"; + htmlBuilder += "

"; + htmlBuilder += "
Model: " + resultsMap.get("org_unit_model_name"); + htmlBuilder += "
Model Status: " + resultsMap.get("org_unit_model_status"); + htmlBuilder += "
" + "Country: " + resultsMap.get("org_unit_country_iso2") + " - " + + resultsMap.get("org_unit_country_name"); + htmlBuilder += "
Planned Budget: " + resultsMap.get("org_unit_planned_budget"); + htmlBuilder += "
Organization: " + resultsMap.get("org_unit_model_organization_name"); + htmlBuilder += "


"; + + return htmlBuilder; + } + + private String getNiceTextForContact(Map resultsMap, String htmlBuilder) { + htmlBuilder += "
"; + htmlBuilder += "
" + "
" + + IconImageBundle.ICONS.user().createImage() + "
" + + "
"; + if (resultsMap.get("user_firstname") != null) { + htmlBuilder += resultsMap.get("user_firstname") + " - " + resultsMap.get("user_name"); + htmlBuilder += "
"; + } else { + // for organization contacts + htmlBuilder += resultsMap.get("organization_name"); + htmlBuilder += ""; + htmlBuilder += "
"; + htmlBuilder += "
Contact type: " + resultsMap.get("contact_model_type"); + htmlBuilder += "
Contact Model Name: " + resultsMap.get("contact_model_name"); + htmlBuilder += "

"; + return htmlBuilder; + } + htmlBuilder += "
"; + htmlBuilder += "

"; + htmlBuilder += "
Email ID: " + resultsMap.get("user_email"); + htmlBuilder += "
Locale: " + resultsMap.get("user_locale"); + htmlBuilder += "
Contact type: " + resultsMap.get("contact_model_type"); + htmlBuilder += "
Contact Model Name: " + resultsMap.get("contact_model_name"); + htmlBuilder += "


"; + + return htmlBuilder; + } + + private String getNiceTextForFile(Map resultsMap, String htmlBuilder) { + htmlBuilder += "
"; + htmlBuilder += "
" + + IconImageBundle.ICONS.attach().createImage() + "
" + + "
"; + if (resultsMap.get("title") != null) { + htmlBuilder += resultsMap.get("title") + " - " + resultsMap.get("file_name") + "." + + resultsMap.get("file_ext"); + } else { + htmlBuilder += resultsMap.get("file_name") + "." + resultsMap.get("file_ext"); + } + htmlBuilder += "
"; + htmlBuilder += "
"; + htmlBuilder += "

"; + htmlBuilder += "
Author: " + resultsMap.get("file_author") + " - " + resultsMap.get("file_author_email"); + htmlBuilder += "

"; + htmlBuilder += "

"; + String contentString; + if (resultsMap.get("title") != null) { + contentString = resultsMap.get("content") + .substring(resultsMap.get("title").length() + 1, min(900, resultsMap.get("content").length())) + .replaceAll("\\\\n", ""); + } else { + contentString = resultsMap.get("content").substring(0, min(900, resultsMap.get("content").length())) + .replaceAll("\\\\n", ""); + } + int i; + for (i = 180; i <= min(800, contentString.length()); i += 180) { + htmlBuilder += "
" + contentString.substring(i - 180, i); + } + htmlBuilder += "
" + contentString.substring(i - 180, contentString.length()) + "...
"; + htmlBuilder += "


"; + + return htmlBuilder; + } + public String getNiceText(Map resultsMap) { String htmlBuilder = ""; if (resultsMap.get("doc_type").toString().equals("PROJECT")) { - - ProjectModelType pmt = null; - if (resultsMap.get("type_pmodel").equals("FUNDING")) - pmt = ProjectModelType.FUNDING; - if (resultsMap.get("type_pmodel").equals("NGO")) - pmt = ProjectModelType.NGO; - if (resultsMap.get("type_pmodel").equals("LOCAL_PARTNER")) - pmt = ProjectModelType.LOCAL_PARTNER; - - htmlBuilder += "
"; - htmlBuilder += "
" - + getProjectLogo(pmt).getHTML() + "
" - + "
" - + resultsMap.get("project_name") + " - " + resultsMap.get("project_fullname") + "
"; - htmlBuilder += "
"; - htmlBuilder += "

"; - htmlBuilder += "
Active Phase: " + resultsMap.get("phase_model_name"); - htmlBuilder += "
Organisational Unit: " + resultsMap.get("project_org_unit_name") + " - " - + resultsMap.get("project_org_unit_fullname"); - htmlBuilder += "
Amendment Status: " + resultsMap.get("amendment_status"); - htmlBuilder += "
Project Model: " + resultsMap.get("pmodel_name"); - htmlBuilder += "
Project Model Type: " + resultsMap.get("type_pmodel"); - htmlBuilder += "
Start Date: " + resultsMap.get("project_startdate"); - htmlBuilder += "
Planned Budget: " + resultsMap.get("planned_budget"); - htmlBuilder += "


"; + return getNiceTextForProject(resultsMap, htmlBuilder); } if (resultsMap.get("doc_type").toString().equals("ORG_UNIT")) { - htmlBuilder += "
"; - htmlBuilder += "
" - + getOrgUnitLogo().getHTML() + "
" - + "
" - + resultsMap.get("org_unit_name") + " - " + resultsMap.get("org_unit_fullname") + "
"; - htmlBuilder += "
"; - htmlBuilder += "

"; - htmlBuilder += "
Model: " + resultsMap.get("org_unit_model_name"); - htmlBuilder += "
Model Status: " + resultsMap.get("org_unit_model_status"); - htmlBuilder += "
" + "Country: " + resultsMap.get("org_unit_country_iso2") + " - " - + resultsMap.get("org_unit_country_name"); - htmlBuilder += "
Planned Budget: " + resultsMap.get("org_unit_planned_budget"); - htmlBuilder += "
Organization: " + resultsMap.get("org_unit_model_organization_name"); - htmlBuilder += "


"; + return getNiceTextForOrgUnit(resultsMap, htmlBuilder); } if (resultsMap.get("doc_type").toString().equals("CONTACT")) { - - // ContactModelType cmt = null; - // if (resultsMap.get("contact_model_type").equals("INDIVIDUAL")) - // cmt = ContactModelType.INDIVIDUAL; - // if (resultsMap.get("contact_model_type").equals("ORGANIZATION")) - // cmt = ContactModelType.ORGANIZATION; - - htmlBuilder += "
"; - htmlBuilder += "
" + "
" - + IconImageBundle.ICONS.user().createImage() + "
" - + "
"; - if (resultsMap.get("user_firstname") != null) { - htmlBuilder += resultsMap.get("user_firstname") + " - " + resultsMap.get("user_name"); - htmlBuilder += "
"; - } else { - // for organization contacts - htmlBuilder += resultsMap.get("organization_name"); - htmlBuilder += ""; - htmlBuilder += "
"; - htmlBuilder += "
Contact type: " + resultsMap.get("contact_model_type"); - htmlBuilder += "
Contact Model Name: " + resultsMap.get("contact_model_name"); - htmlBuilder += "

"; - return htmlBuilder; - } - htmlBuilder += "
"; - htmlBuilder += "

"; - htmlBuilder += "
Email ID: " + resultsMap.get("user_email"); - htmlBuilder += "
Locale: " + resultsMap.get("user_locale"); - htmlBuilder += "
Contact type: " + resultsMap.get("contact_model_type"); - htmlBuilder += "
Contact Model Name: " + resultsMap.get("contact_model_name"); - htmlBuilder += "


"; - + return getNiceTextForContact(resultsMap, htmlBuilder); } if (resultsMap.get("doc_type").toString().equals("FILE")) { - htmlBuilder += "
"; - htmlBuilder += "
" - + IconImageBundle.ICONS.attach().createImage() + "
" - + "
"; - if (resultsMap.get("title") != null) { - htmlBuilder += resultsMap.get("title") + " - " + resultsMap.get("file_name") + "." - + resultsMap.get("file_ext"); - } else { - htmlBuilder += resultsMap.get("file_name") + "." + resultsMap.get("file_ext"); - } - htmlBuilder += "
"; - htmlBuilder += "
"; - htmlBuilder += "

"; - htmlBuilder += "
Author: " + resultsMap.get("file_author") + " - " + resultsMap.get("file_author_email"); - htmlBuilder += "

"; - htmlBuilder += "

"; - String contentString; - if (resultsMap.get("title") != null) { - contentString = resultsMap.get("content") - .substring(resultsMap.get("title").length() + 1, min(900, resultsMap.get("content").length())) - .replaceAll("\\\\n", ""); - } else { - contentString = resultsMap.get("content").substring(0, min(900, resultsMap.get("content").length())) - .replaceAll("\\\\n", ""); - } - int i; - for (i = 180; i <= min(800, contentString.length()); i += 180) { - htmlBuilder += "
" + contentString.substring(i - 180, i); - } - htmlBuilder += "
" + contentString.substring(i - 180, contentString.length()) + "...
"; - htmlBuilder += "


"; + return getNiceTextForFile(resultsMap, htmlBuilder); } return htmlBuilder; } private int min(int i, int length) { - // TODO Auto-generated method stub - if (i < length) - return i; - else - return length; + if (i < length) return i; + else return length; } - public AbstractImagePrototype getProjectLogo(final ProjectModelType projectType) { + private AbstractImagePrototype getProjectLogo(final ProjectModelType projectType) { final AbstractImagePrototype projectIcon = FundingIconProvider.getProjectTypeIcon(projectType, IconSize.MEDIUM); return projectIcon; } - public HTML getContactLogo(ContactModelType type) { - // Element spanElement = DOM.createSpan(); - HTML avatar = new HTML(); - // avatar.setStyleName(); - avatar.setStyleName("contact-card-avatar"); - avatar.getElement().getStyle().clearBackgroundImage(); - avatar.getElement().getStyle().clearPadding(); - avatar.getElement().getStyle().clearHeight(); - avatar.getElement().getStyle().clearWidth(); - avatar.setWidth(36 + "px"); - avatar.setHeight(36 + "px"); - avatar.getElement().setAttribute("display", "inline"); - avatar.getElement().setAttribute("padding-left", "10px"); - - switch (type) { - case INDIVIDUAL: - // avatar.getElement().setAttribute("background-image", - // "url(\"../images/icon/individual-128.png\");"); - avatar.addStyleName("contact-card-avatar-individual"); - break; - case ORGANIZATION: - // avatar.getElement().setAttribute("background-image", - // "url(\"../images/icon/organization-128.png\");"); - // avatar.addStyleName("background-image: - // url(\"../images/icon/organization-128.png\");"); - avatar.addStyleName("contact-card-avatar-organization"); - break; - default: - throw new IllegalStateException("Unknown ContactModelType : " + type); - } - return avatar; - } - - public AbstractImagePrototype getOrgUnitLogo() { + private AbstractImagePrototype getOrgUnitLogo() { return OrgUnitImageBundle.ICONS.orgUnitSmall(); } diff --git a/src/main/java/org/sigmah/client/ui/view/admin/ParametersAdminView.java b/src/main/java/org/sigmah/client/ui/view/admin/ParametersAdminView.java index be6047168..3e18e66c4 100644 --- a/src/main/java/org/sigmah/client/ui/view/admin/ParametersAdminView.java +++ b/src/main/java/org/sigmah/client/ui/view/admin/ParametersAdminView.java @@ -1,5 +1,8 @@ package org.sigmah.client.ui.view.admin; +import java.util.Arrays; +import java.util.Date; + /* * #%L * Sigmah @@ -35,6 +38,7 @@ import org.sigmah.client.ui.widget.panel.Panels; import org.sigmah.client.util.ClientUtils; import org.sigmah.shared.dto.orgunit.OrgUnitDTO; +import org.sigmah.shared.dto.password.ExpirationPolicy; import org.sigmah.shared.dto.value.FileDTO.LoadingScope; import org.sigmah.shared.util.ExportUtils.ExportFormat; import org.sigmah.shared.util.Pair; @@ -42,7 +46,6 @@ import com.extjs.gxt.ui.client.Style.LayoutRegion; import com.extjs.gxt.ui.client.Style.Orientation; import com.extjs.gxt.ui.client.store.ListStore; -import com.extjs.gxt.ui.client.util.Margins; import com.extjs.gxt.ui.client.widget.ContentPanel; import com.extjs.gxt.ui.client.widget.Html; import com.extjs.gxt.ui.client.widget.Label; @@ -57,10 +60,6 @@ import com.extjs.gxt.ui.client.widget.form.SimpleComboBox; import com.extjs.gxt.ui.client.widget.form.SpinnerField; import com.extjs.gxt.ui.client.widget.form.TextField; -import com.extjs.gxt.ui.client.widget.layout.BorderLayoutData; -import com.extjs.gxt.ui.client.widget.layout.FlowData; -import com.extjs.gxt.ui.client.widget.layout.HBoxLayout; -import com.extjs.gxt.ui.client.widget.layout.LayoutData; import com.google.gwt.event.dom.client.LoadEvent; import com.google.gwt.event.dom.client.LoadHandler; import com.google.gwt.i18n.client.NumberFormat; @@ -69,9 +68,6 @@ import com.google.gwt.user.client.ui.Image; import com.google.gwt.user.client.ui.SimplePanel; import com.google.inject.Singleton; -import java.util.Arrays; -import java.util.Date; -import org.sigmah.shared.dto.password.ExpirationPolicy; /** * {@link ParametersAdminPresenter}'s view implementation. diff --git a/src/main/java/org/sigmah/client/ui/view/zone/SearchView.java b/src/main/java/org/sigmah/client/ui/view/zone/SearchView.java index 8a8f01cbe..45ac6e0ba 100644 --- a/src/main/java/org/sigmah/client/ui/view/zone/SearchView.java +++ b/src/main/java/org/sigmah/client/ui/view/zone/SearchView.java @@ -1,10 +1,5 @@ package org.sigmah.client.ui.view.zone; -import java.util.Arrays; -import java.util.List; - -import org.sigmah.client.i18n.I18N; - /* * #%L * Sigmah @@ -27,29 +22,20 @@ * #L% */ + +import java.util.Arrays; +import java.util.List; + import org.sigmah.client.ui.presenter.zone.SearchPresenter; -import org.sigmah.client.ui.res.icon.IconImageBundle; import org.sigmah.client.ui.view.base.AbstractView; +import org.sigmah.client.ui.widget.button.Button; import org.sigmah.client.ui.widget.form.Forms; -import org.sigmah.shared.dto.orgunit.OrgUnitDTO; -import org.sigmah.shared.dto.password.ExpirationPolicy; import com.extjs.gxt.ui.client.widget.form.ComboBox; import com.extjs.gxt.ui.client.widget.form.SimpleComboBox; -import com.extjs.gxt.ui.client.widget.form.SimpleComboValue; import com.extjs.gxt.ui.client.widget.form.TextField; -//import com.google.gwt.user.client.ui.Button; -import org.sigmah.client.ui.widget.button.Button; -import com.google.gwt.user.client.ui.FlexTable; -import com.google.gwt.user.client.ui.FlowPanel; -import com.google.gwt.user.client.ui.HTML; -import com.google.gwt.user.client.ui.HasHTML; import com.google.gwt.user.client.ui.HorizontalPanel; -import com.google.gwt.user.client.ui.ListBox; import com.google.gwt.user.client.ui.Panel; -import com.google.gwt.user.client.ui.SimplePanel; -import com.google.gwt.user.client.ui.TextBox; -import com.google.gwt.user.client.ui.Widget; /** @@ -63,7 +49,7 @@ public class SearchView extends AbstractView implements SearchPresenter.View { private TextField searchTextField; private SimpleComboBox searchOptionsComboBox; private Button newSearchButton; - List newSearchOptions; + private List newSearchOptions; /** * {@inheritDoc} diff --git a/src/main/java/org/sigmah/server/dao/impl/FileHibernateDAO.java b/src/main/java/org/sigmah/server/dao/impl/FileHibernateDAO.java index 44e38a727..fe0a73d48 100644 --- a/src/main/java/org/sigmah/server/dao/impl/FileHibernateDAO.java +++ b/src/main/java/org/sigmah/server/dao/impl/FileHibernateDAO.java @@ -1,5 +1,7 @@ package org.sigmah.server.dao.impl; +import static org.sigmah.shared.util.ValueResultUtils.normalizeFileName; + /* * #%L * Sigmah @@ -31,7 +33,6 @@ import javax.persistence.EntityManager; import javax.persistence.NoResultException; import javax.persistence.Query; -import javax.persistence.QueryTimeoutException; import javax.persistence.TypedQuery; import org.apache.commons.collections4.CollectionUtils; @@ -41,6 +42,7 @@ import org.sigmah.server.dispatch.impl.UserDispatch; import org.sigmah.server.domain.User; import org.sigmah.server.domain.element.FlexibleElement; +import org.sigmah.server.domain.util.DomainFilters; import org.sigmah.server.domain.value.File; import org.sigmah.server.domain.value.FileVersion; import org.sigmah.server.domain.value.Value; @@ -51,8 +53,6 @@ import org.slf4j.LoggerFactory; import com.google.inject.persist.Transactional; -import org.sigmah.server.domain.util.DomainFilters; -import static org.sigmah.shared.util.ValueResultUtils.normalizeFileName; /** * {@link FileDAO} implementation. diff --git a/src/main/java/org/sigmah/server/domain/Organization.java b/src/main/java/org/sigmah/server/domain/Organization.java index 02512f601..3fd708e4f 100644 --- a/src/main/java/org/sigmah/server/domain/Organization.java +++ b/src/main/java/org/sigmah/server/domain/Organization.java @@ -155,11 +155,11 @@ public void setOrgUnit(List orgUnit) { this.orgUnit = orgUnit; } - public String getSolrcore_url() { + public String getSolrCoreUrl() { return solrcore_url; } - public void setSolrcore_url(String solrcore_url) { + public void setSolrCoreUrl(String solrcore_url) { this.solrcore_url = solrcore_url; } diff --git a/src/main/java/org/sigmah/server/handler/UpdateOrganizationHandler.java b/src/main/java/org/sigmah/server/handler/UpdateOrganizationHandler.java index b4e684d16..75b29f079 100644 --- a/src/main/java/org/sigmah/server/handler/UpdateOrganizationHandler.java +++ b/src/main/java/org/sigmah/server/handler/UpdateOrganizationHandler.java @@ -82,7 +82,7 @@ public OrganizationDTO execute(final UpdateOrganization cmd, final UserExecution organization.setName(form.getName()); organization.setLogo(form.getLogo()); - organization.setSolrcore_url(form.getSolrCoreUrl()); + organization.setSolrCoreUrl(form.getSolrCoreUrl()); organizationDAO.persist(organization, context.getUser()); diff --git a/src/main/java/org/sigmah/server/handler/util/Handlers.java b/src/main/java/org/sigmah/server/handler/util/Handlers.java index 7cc4b063f..f52f95ffe 100644 --- a/src/main/java/org/sigmah/server/handler/util/Handlers.java +++ b/src/main/java/org/sigmah/server/handler/util/Handlers.java @@ -103,7 +103,7 @@ public static Authentication createAuthentication(final User user, final Languag final String organizationName = organization != null ? organization.getName() : null; final String organizationLogo = organization != null ? organization.getLogo() : null; final Integer orgUnitId = orgUnitWithProfiles != null && orgUnitWithProfiles.getOrgUnit() != null ? orgUnitWithProfiles.getOrgUnit().getId() : null; - final String organization_solrcore_url = organization != null ? organization.getSolrcore_url() : null; + final String organization_solrcore_url = organization != null ? organization.getSolrCoreUrl() : null; return new Authentication(user.getId(), user.getEmail(), user.getName(), user.getFirstName(), Languages.notNull(language), organizationId, organizationName, organizationLogo, orgUnitId, secondaryOrgUnitIds, Handlers.aggregateProfiles(user, mapper), memberOfProjectIds, organization_solrcore_url); diff --git a/src/main/java/org/sigmah/server/inject/ConfigurationModule.java b/src/main/java/org/sigmah/server/inject/ConfigurationModule.java index 3bfaa2b60..114d8f9e4 100644 --- a/src/main/java/org/sigmah/server/inject/ConfigurationModule.java +++ b/src/main/java/org/sigmah/server/inject/ConfigurationModule.java @@ -34,7 +34,6 @@ import org.sigmah.server.file.impl.LogoManagerImpl; import org.sigmah.server.search.FilesSolrManager; import org.sigmah.server.search.FilesSolrManagerImpl; -import org.sigmah.server.search.SolrSearcher; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/src/main/java/org/sigmah/server/search/FilesSolrManager.java b/src/main/java/org/sigmah/server/search/FilesSolrManager.java index a03b42900..407ccf64c 100644 --- a/src/main/java/org/sigmah/server/search/FilesSolrManager.java +++ b/src/main/java/org/sigmah/server/search/FilesSolrManager.java @@ -6,7 +6,7 @@ public interface FilesSolrManager { - public Boolean FilesImport(SolrSearcher instance) throws IOException; + public Boolean filesImport(SolrSearcher instance) throws IOException; Boolean indexFile(FileVersion fv); diff --git a/src/main/java/org/sigmah/server/search/FilesSolrManagerHandler.java b/src/main/java/org/sigmah/server/search/FilesSolrManagerHandler.java index 15b905dd6..41a17e47a 100644 --- a/src/main/java/org/sigmah/server/search/FilesSolrManagerHandler.java +++ b/src/main/java/org/sigmah/server/search/FilesSolrManagerHandler.java @@ -5,10 +5,8 @@ import org.sigmah.server.dispatch.impl.UserDispatch.UserExecutionContext; import org.sigmah.server.file.BackupArchiveManager; import org.sigmah.server.handler.base.AbstractCommandHandler; -import org.sigmah.shared.command.BackupArchiveManagementCommand; import org.sigmah.shared.command.FilesSolrIndexCommand; import org.sigmah.shared.dispatch.CommandException; -import org.sigmah.shared.dto.BackupDTO; import org.sigmah.shared.dto.search.FilesSolrIndexDTO; import com.google.inject.Inject; @@ -31,7 +29,7 @@ protected FilesSolrIndexDTO execute(FilesSolrIndexCommand command, UserExecution throws CommandException { FilesSolrIndexDTO res = new FilesSolrIndexDTO(); try { - filesSolrManager.FilesImport(SolrSearcher.getInstance()); + filesSolrManager.filesImport(SolrSearcher.getInstance()); res.setResult(true); } catch (IOException e) { diff --git a/src/main/java/org/sigmah/server/search/FilesSolrManagerImpl.java b/src/main/java/org/sigmah/server/search/FilesSolrManagerImpl.java index 35d1dcc54..a501a1d7d 100644 --- a/src/main/java/org/sigmah/server/search/FilesSolrManagerImpl.java +++ b/src/main/java/org/sigmah/server/search/FilesSolrManagerImpl.java @@ -2,31 +2,19 @@ import java.io.File; import java.io.IOException; -import java.io.InputStream; import java.nio.file.Path; import java.nio.file.Paths; -import java.util.ArrayList; -import java.util.Collection; import java.util.List; -import org.apache.commons.io.FileUtils; import org.apache.solr.client.solrj.SolrServerException; import org.apache.solr.client.solrj.request.ContentStreamUpdateRequest; -import org.apache.solr.common.util.NamedList; -import org.hibernate.metamodel.source.binder.Binder; import org.sigmah.server.conf.Properties; import org.sigmah.server.dao.FileDAO; -import org.sigmah.server.dao.OrgUnitDAO; -import org.sigmah.server.dao.impl.FileHibernateDAO; import org.sigmah.server.domain.value.FileVersion; import org.sigmah.server.file.FileStorageProvider; -import org.sigmah.server.inject.PersistenceModule; import org.sigmah.shared.conf.PropertyKey; -import com.google.inject.Guice; import com.google.inject.Inject; -import com.google.inject.Injector; -import com.google.inject.Singleton; public class FilesSolrManagerImpl implements FilesSolrManager { @@ -53,7 +41,7 @@ public FilesSolrManagerImpl(FileDAO fileDAO, FileStorageProvider fileStorageProv } @Override - public Boolean FilesImport(SolrSearcher instance) throws IOException { + public Boolean filesImport(SolrSearcher instance) throws IOException { System.out.println("Starting files indexing!"); List listFileVersions = fileDAO.findAllVersions(); @@ -78,7 +66,6 @@ public Boolean indexFile(FileVersion fv) { e1.printStackTrace(); } req.setParam("commit", "true"); - // req.setParam(ExtractingParams.EXTRACT_ONLY, "true"); req.setParam("literal.doc_id", "FILE_" + fv.getId().toString()); req.setParam("literal.doc_type", "FILE"); req.setParam("literal.file_id", fv.getPath()); @@ -93,11 +80,9 @@ public Boolean indexFile(FileVersion fv) { req.setParam("literal.file_author_email", fv.getAuthor().getEmail()); req.setParam("literal.file_version_id", fv.getId().toString()); req.setParam("literal.file_author_id", fv.getAuthor().getId().toString()); - // req.setParam("literal.file_author_email", fv.getAuthor().); - - NamedList result = null; + try { - result = SolrSearcher.solrServer.request(req); + SolrSearcher.solrServer.request(req); return true; } catch (SolrServerException | IOException e) { e.printStackTrace(); diff --git a/src/main/java/org/sigmah/server/search/SearchServiceImpl.java b/src/main/java/org/sigmah/server/search/SearchServiceImpl.java index 2b01c7a75..2380aa3d9 100644 --- a/src/main/java/org/sigmah/server/search/SearchServiceImpl.java +++ b/src/main/java/org/sigmah/server/search/SearchServiceImpl.java @@ -2,8 +2,6 @@ import com.google.gwt.user.server.rpc.RemoteServiceServlet; import java.util.ArrayList; -import java.util.List; - import org.sigmah.client.search.SearchService; import org.sigmah.server.search.SolrSearcher; import org.sigmah.shared.dto.search.SearchResultsDTO; @@ -22,7 +20,7 @@ public ArrayList search(String searchStr, String filter){ @Override public Boolean index() { - return SolrSearcher.getInstance().FullDataImport(); + return SolrSearcher.getInstance().fullDataImport(); } @Override diff --git a/src/main/java/org/sigmah/server/search/SolrIndexJob.java b/src/main/java/org/sigmah/server/search/SolrIndexJob.java index 12e583553..f907f3deb 100644 --- a/src/main/java/org/sigmah/server/search/SolrIndexJob.java +++ b/src/main/java/org/sigmah/server/search/SolrIndexJob.java @@ -1,20 +1,15 @@ package org.sigmah.server.search; import java.io.IOException; -import java.util.Calendar; import javax.persistence.EntityManager; import javax.persistence.EntityTransaction; import org.quartz.Job; import org.quartz.JobDataMap; -import org.quartz.JobDetail; import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; -import org.quartz.Scheduler; -import org.quartz.SchedulerException; -import org.quartz.Trigger; -import org.quartz.impl.StdSchedulerFactory; + import com.google.inject.Injector; public class SolrIndexJob implements Job{ @@ -26,7 +21,7 @@ public void execute(JobExecutionContext executionContext) throws JobExecutionExc final EntityManager em = (EntityManager) dataMap.get("em"); final Injector injector = (Injector) dataMap.get("injector"); System.out.println("Starting Solr Full Data Import!"); - if( !SolrSearcher.getInstance().FullDataImport()){ + if( !SolrSearcher.getInstance().fullDataImport()){ System.out.println("Could not finish Full Data Import!"); return; } @@ -38,7 +33,7 @@ public void execute(JobExecutionContext executionContext) throws JobExecutionExc tx.begin(); FilesSolrManager filesSolrManager = injector.getInstance(FilesSolrManager.class); System.out.println("Starting Files Solr Indexing!"); - filesSolrManager.FilesImport(SolrSearcher.getInstance()); + filesSolrManager.filesImport(SolrSearcher.getInstance()); System.out.println("Finished Files Solr Indexing!"); tx.commit(); System.out.println("Scheduled indexing of solr server over"); diff --git a/src/main/java/org/sigmah/server/search/SolrIndexJobActivator.java b/src/main/java/org/sigmah/server/search/SolrIndexJobActivator.java index 2f2d27329..a8f02387f 100644 --- a/src/main/java/org/sigmah/server/search/SolrIndexJobActivator.java +++ b/src/main/java/org/sigmah/server/search/SolrIndexJobActivator.java @@ -3,11 +3,9 @@ import javax.persistence.EntityManager; import org.quartz.JobDetail; -import org.quartz.Scheduler; import org.quartz.SchedulerException; import org.quartz.Trigger; import org.quartz.TriggerUtils; -import org.quartz.impl.StdSchedulerFactory; import org.sigmah.server.autoExport.QuartzScheduler; import com.google.inject.Inject; diff --git a/src/main/java/org/sigmah/server/search/SolrSearcher.java b/src/main/java/org/sigmah/server/search/SolrSearcher.java index 557426901..40caf0e6e 100644 --- a/src/main/java/org/sigmah/server/search/SolrSearcher.java +++ b/src/main/java/org/sigmah/server/search/SolrSearcher.java @@ -1,49 +1,23 @@ package org.sigmah.server.search; -import java.io.File; import java.io.IOException; import java.net.MalformedURLException; import java.util.ArrayList; -import java.util.Collection; import java.util.Iterator; -import java.util.List; -import java.util.Map; - -import org.apache.solr.client.solrj.*; -import org.apache.solr.client.solrj.SolrQuery.ORDER; -import org.apache.solr.client.solrj.impl.*; -import org.apache.solr.client.solrj.request.ContentStreamUpdateRequest; -import org.apache.solr.client.solrj.request.QueryRequest; + +import org.apache.solr.client.solrj.SolrClient; +import org.apache.solr.client.solrj.SolrQuery; +import org.apache.solr.client.solrj.SolrServerException; +import org.apache.solr.client.solrj.impl.HttpSolrClient; import org.apache.solr.client.solrj.response.QueryResponse; import org.apache.solr.common.SolrDocument; -import org.apache.solr.common.SolrDocumentList; -import org.apache.solr.common.SolrInputDocument; import org.apache.solr.common.params.ModifiableSolrParams; -import org.apache.solr.common.util.NamedList; -import org.sigmah.server.conf.BasicProperties; -import org.sigmah.server.conf.Properties; -import org.sigmah.server.dao.FileDAO; -import org.sigmah.server.domain.value.FileVersion; -import org.sigmah.server.file.FileStorageProvider; -import org.sigmah.shared.conf.PropertyKey; import org.sigmah.shared.dto.search.SearchResultsDTO; -import org.sigmah.shared.servlet.ServletUrlBuilder; -import org.sigmah.shared.servlet.ServletConstants; -import com.allen_sauer.gwt.log.client.Log; import com.google.gson.Gson; -import com.google.gson.JsonObject; -import com.google.gwt.json.client.JSONArray; -import com.google.gwt.json.client.JSONObject; -import com.google.gwt.user.client.Window; -import com.google.inject.Inject; - -import java.net.*; public class SolrSearcher { - private Properties properties = new BasicProperties(); - private String urlString; public static SolrClient solrServer; private static SolrSearcher instance; @@ -154,7 +128,7 @@ else if (filter.equals("OrgUnits")){ if (rsp != null) { Gson gson = new Gson(); - Iterator iter = rsp.getResults().iterator(); + Iterator iter = rsp.getResults().iterator(); //rsp.get //rsp.getHighlighting().get("ORG_UNIT_1637").get("org_unit_model_name").get(0); //returns highlighted string //how do i send it from back-end to front end, very hard @@ -171,7 +145,7 @@ else if (filter.equals("OrgUnits")){ return searchList; } - public static Boolean FullDataImport() { + public static Boolean fullDataImport() { ModifiableSolrParams params = new ModifiableSolrParams(); params.set("qt", "/dataimport"); params.set("command", "full-import"); diff --git a/src/main/java/org/sigmah/shared/command/FilesSolrIndexCommand.java b/src/main/java/org/sigmah/shared/command/FilesSolrIndexCommand.java index 381108ac7..3ac998123 100644 --- a/src/main/java/org/sigmah/shared/command/FilesSolrIndexCommand.java +++ b/src/main/java/org/sigmah/shared/command/FilesSolrIndexCommand.java @@ -1,7 +1,6 @@ package org.sigmah.shared.command; import org.sigmah.shared.command.base.AbstractCommand; -import org.sigmah.shared.dto.BackupDTO; import org.sigmah.shared.dto.search.FilesSolrIndexDTO; public class FilesSolrIndexCommand extends AbstractCommand{ diff --git a/src/main/java/org/sigmah/shared/dto/search/SearchResultsDTO.java b/src/main/java/org/sigmah/shared/dto/search/SearchResultsDTO.java index aba819b8d..e76a529d9 100644 --- a/src/main/java/org/sigmah/shared/dto/search/SearchResultsDTO.java +++ b/src/main/java/org/sigmah/shared/dto/search/SearchResultsDTO.java @@ -1,8 +1,6 @@ package org.sigmah.shared.dto.search; import java.io.Serializable; -import java.util.ArrayList; - import org.sigmah.shared.dto.base.AbstractModelDataEntityDTO; public class SearchResultsDTO extends AbstractModelDataEntityDTO implements Serializable @@ -52,19 +50,19 @@ public void setDTOtype(String dTOtype) { DTOtype = dTOtype; } - public String getFile_name() { + public String getFileName() { return file_name; } - public void setFile_name(String file_name) { + public void setFileName(String file_name) { this.file_name = file_name; } - public String getFile_ext() { + public String getFileExt() { return file_ext; } - public void setFile_ext(String file_ext) { + public void setFileExt(String file_ext) { this.file_ext = file_ext; } From 4999b3aaea06b405b0350e2b390be75b82f832dc Mon Sep 17 00:00:00 2001 From: indianauthority97 Date: Sat, 12 Aug 2017 19:23:56 +0530 Subject: [PATCH 33/36] [Issue #535]:Code cleanup #2, added comments --- .../sigmah/client/inject/ClientModule.java | 3 - .../java/org/sigmah/client/page/Page.java | 1 - .../sigmah/client/search/SearchService.java | 31 ++++- .../client/search/SearchServiceAsync.java | 30 ++++- .../ui/presenter/DashboardPresenter.java | 5 +- .../ui/presenter/SearchResultsPresenter.java | 38 +++++- .../admin/ParametersAdminPresenter.java | 17 +-- .../presenter/zone/MenuBannerPresenter.java | 22 ++++ .../ui/presenter/zone/SearchPresenter.java | 122 ++++++++---------- .../client/ui/view/SearchResultsView.java | 64 ++++----- .../ui/view/admin/ParametersAdminView.java | 14 +- .../ui/view/zone/OrganizationBannerView.java | 4 - .../client/ui/view/zone/SearchView.java | 2 +- .../server/dao/impl/FileHibernateDAO.java | 5 +- .../server/search/FilesSolrManager.java | 27 ++++ .../search/FilesSolrManagerHandler.java | 28 ++++ .../server/search/FilesSolrManagerImpl.java | 28 ++++ .../server/search/SearchServiceImpl.java | 40 +++++- .../sigmah/server/search/SolrIndexJob.java | 28 ++++ .../server/search/SolrIndexJobActivator.java | 29 +++++ .../sigmah/server/search/SolrSearcher.java | 57 +++++--- .../shared/command/FilesSolrIndexCommand.java | 29 +++++ .../shared/dto/search/FilesSolrIndexDTO.java | 27 ++++ .../shared/dto/search/SearchResultsDTO.java | 30 ++++- 24 files changed, 506 insertions(+), 175 deletions(-) diff --git a/src/main/java/org/sigmah/client/inject/ClientModule.java b/src/main/java/org/sigmah/client/inject/ClientModule.java index 4267c8fab..fd444c03d 100644 --- a/src/main/java/org/sigmah/client/inject/ClientModule.java +++ b/src/main/java/org/sigmah/client/inject/ClientModule.java @@ -66,9 +66,6 @@ protected void configure() { // StateManager (for indicators). bind(IStateManager.class).to(GXTStateManager.class); - //possibly later, also other search related classes, like results view - //bind(SearchPresenter.class).in(Singleton.class); - } } diff --git a/src/main/java/org/sigmah/client/page/Page.java b/src/main/java/org/sigmah/client/page/Page.java index fac8efe63..1e89ec553 100644 --- a/src/main/java/org/sigmah/client/page/Page.java +++ b/src/main/java/org/sigmah/client/page/Page.java @@ -115,7 +115,6 @@ public enum Page implements IsSerializable { HELP("help", true), CREATE_PROJECT("create-project", true), IMPORT_VALUES("import-values"), - //aditya SEARCH_RESULTS("search-results") ; private final String parentKey; diff --git a/src/main/java/org/sigmah/client/search/SearchService.java b/src/main/java/org/sigmah/client/search/SearchService.java index 5eff32ad3..279e8ec9b 100644 --- a/src/main/java/org/sigmah/client/search/SearchService.java +++ b/src/main/java/org/sigmah/client/search/SearchService.java @@ -1,14 +1,43 @@ package org.sigmah.client.search; +/* + * #%L + * Sigmah + * %% + * Copyright (C) 2010 - 2016 URD + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program. If not, see + * . + * #L% + */ + import java.util.ArrayList; import org.sigmah.shared.dto.search.SearchResultsDTO; + import com.google.gwt.user.client.rpc.RemoteService; import com.google.gwt.user.client.rpc.RemoteServiceRelativePath; +/** + * Interface used by the client side for calling search related methods using GWT's + * async callbacks. {@link SearchServiceAsync} is the associated Async interface + * + * @author + * + */ @RemoteServiceRelativePath("search") public interface SearchService extends RemoteService { - //TODO Add method stubs here ArrayList search(String searchStr, String filter); Boolean index(); Boolean updateCore(String solrCoreUrl); diff --git a/src/main/java/org/sigmah/client/search/SearchServiceAsync.java b/src/main/java/org/sigmah/client/search/SearchServiceAsync.java index e322183cf..794f9211d 100644 --- a/src/main/java/org/sigmah/client/search/SearchServiceAsync.java +++ b/src/main/java/org/sigmah/client/search/SearchServiceAsync.java @@ -1,11 +1,39 @@ package org.sigmah.client.search; +/* + * #%L + * Sigmah + * %% + * Copyright (C) 2010 - 2016 URD + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program. If not, see + * . + * #L% + */ + import java.util.ArrayList; +import org.sigmah.server.search.SearchServiceImpl; import org.sigmah.shared.dto.search.SearchResultsDTO; -import com.google.gwt.user.client.rpc.AsyncCallback; +import com.google.gwt.user.client.rpc.AsyncCallback; +/** + * Async interface on the client side which is implemented by + * {@link SearchServiceImpl} on the server side. + * + */ public interface SearchServiceAsync { public void search(String searchStr, String filter, AsyncCallback> callback); diff --git a/src/main/java/org/sigmah/client/ui/presenter/DashboardPresenter.java b/src/main/java/org/sigmah/client/ui/presenter/DashboardPresenter.java index 87b1fcf4e..0e6167555 100644 --- a/src/main/java/org/sigmah/client/ui/presenter/DashboardPresenter.java +++ b/src/main/java/org/sigmah/client/ui/presenter/DashboardPresenter.java @@ -275,15 +275,12 @@ public void handleEvent(OfflineEvent event) { searchService.updateCore(auth().getOrganizationSolrCoreUrl(), new AsyncCallback() { public void onFailure(Throwable caught) { N10N.error("Error connecting to Solr", "Solr Server connection is not available."); - //Window.alert("Could not update Solr Core. Check that the url is valid!"); caught.printStackTrace(); } public void onSuccess(Boolean result) { Boolean dih_success = result; - if (dih_success) { - //Window.alert("Successfully updated Solr Core!"); - } else { + if (!dih_success) { N10N.error("Error connecting to Solr", "Solr Server connection is not available."); } } diff --git a/src/main/java/org/sigmah/client/ui/presenter/SearchResultsPresenter.java b/src/main/java/org/sigmah/client/ui/presenter/SearchResultsPresenter.java index 16bfa468d..392c04899 100644 --- a/src/main/java/org/sigmah/client/ui/presenter/SearchResultsPresenter.java +++ b/src/main/java/org/sigmah/client/ui/presenter/SearchResultsPresenter.java @@ -1,5 +1,28 @@ package org.sigmah.client.ui.presenter; +/* + * #%L + * Sigmah + * %% + * Copyright (C) 2010 - 2016 URD + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program. If not, see + * . + * #L% + */ + +import org.sigmah.client.i18n.I18N; import org.sigmah.client.inject.Injector; import org.sigmah.client.page.Page; import org.sigmah.client.page.PageRequest; @@ -19,17 +42,14 @@ import com.google.inject.Inject; /** - * Search Results page presenter. + * Search Results page presenter for rendering the results of different types + * of search results such as projects, org units, contacts and files * + * @author * */ public class SearchResultsPresenter extends AbstractPagePresenter { - - /** - * View interface. - * - */ @Inject private TransfertManager transfertManager; @@ -54,6 +74,10 @@ public static interface FilesResultsClickHandler extends SearchResultsClickHandl public void onLabelClickEvent(FileVersionDTO fv); } + /** + * View interface. + * + */ @ImplementedBy(SearchResultsView.class) public interface View extends ViewInterface { @@ -163,7 +187,7 @@ public void onLoad(String result) { if( view.addSearchData(request.getData(RequestParameter.CONTENT)) ){ view.addResultsPanel(); }else{ - + N10N.error(I18N.CONSTANTS.error(), I18N.CONSTANTS.errorOnServer()); } } diff --git a/src/main/java/org/sigmah/client/ui/presenter/admin/ParametersAdminPresenter.java b/src/main/java/org/sigmah/client/ui/presenter/admin/ParametersAdminPresenter.java index e45b880c4..4d0cc484a 100644 --- a/src/main/java/org/sigmah/client/ui/presenter/admin/ParametersAdminPresenter.java +++ b/src/main/java/org/sigmah/client/ui/presenter/admin/ParametersAdminPresenter.java @@ -416,15 +416,12 @@ public void onCommandSuccess(final GlobalExportSettingsDTO result) { view.getSolrCoreUrlTextField().setValue(auth().getOrganizationSolrCoreUrl()); - // view.getManualIndexButton(). view.getManualIndexButton().addListener(Events.OnClick, new Listener() { @Override public void handleEvent(ButtonEvent be) { - // TODO Auto-generated method stub searchService.index(new AsyncCallback() { public void onFailure(Throwable caught) { -// Window.alert("Failure on the server side!"); N10N.errorNotif("Failed to complete Solr Data Import!", "Check your connection with Solr Server!"); caught.printStackTrace(); @@ -433,9 +430,8 @@ public void onFailure(Throwable caught) { public void onSuccess(Boolean result) { Boolean fih_success = result; if (fih_success) { - FilesImport(); + filesImport(); } else { -// Window.alert("Failed to complete data Import!"); N10N.errorNotif("Failed to complete Solr Data Import!", "Check your connection with Solr Server!"); } @@ -447,7 +443,7 @@ public void onSuccess(Boolean result) { } - public void FilesImport() { + public void filesImport() { dispatch.execute(new FilesSolrIndexCommand(), new CommandResultHandler() { @Override @@ -458,9 +454,7 @@ public void onCommandSuccess(final FilesSolrIndexDTO result) { "Check your connection with Solr Server!"); } else { - // N10N.warn(I18N.CONSTANTS.backupManagement_process_alreadyRunning()); if (result.isResult()) { -// Window.alert("Successfully completed data and files import!"); N10N.validNotif("Successfully completed data and files import!", "You can now carry out search."); } else { @@ -720,8 +714,7 @@ public void onCommandSuccess(final OrganizationDTO result) { view.getSolrSettingsForm().resetValueHasChanged(); searchService.updateCore(solrCoreUrl, new AsyncCallback() { public void onFailure(Throwable caught) { -// Window.alert("Could not update Solr Core. Check that the url is valid!"); - N10N.errorNotif("Failed to update Solr Core!", + N10N.error("Failed to update Solr Core!", "Check that the url entered is valid!"); caught.printStackTrace(); } @@ -731,11 +724,9 @@ public void onSuccess(Boolean result) { if (dih_success) { N10N.validNotif("Successfully updated Solr Core!", "You can now carry out search."); -// Window.alert("Successfully updated Solr Core!"); } else { - N10N.errorNotif("Failed to update Solr Core!", + N10N.error("Failed to update Solr Core!", "Check that the url entered is valid!"); -// Window.alert("Check that the url is valid!"); } } }); diff --git a/src/main/java/org/sigmah/client/ui/presenter/zone/MenuBannerPresenter.java b/src/main/java/org/sigmah/client/ui/presenter/zone/MenuBannerPresenter.java index 3ee469592..9c6e7170a 100644 --- a/src/main/java/org/sigmah/client/ui/presenter/zone/MenuBannerPresenter.java +++ b/src/main/java/org/sigmah/client/ui/presenter/zone/MenuBannerPresenter.java @@ -1,5 +1,27 @@ package org.sigmah.client.ui.presenter.zone; +/* + * #%L + * Sigmah + * %% + * Copyright (C) 2010 - 2016 URD + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program. If not, see + * . + * #L% + */ + import java.util.HashMap; import java.util.Map; diff --git a/src/main/java/org/sigmah/client/ui/presenter/zone/SearchPresenter.java b/src/main/java/org/sigmah/client/ui/presenter/zone/SearchPresenter.java index 05038d20d..25d67a4d2 100644 --- a/src/main/java/org/sigmah/client/ui/presenter/zone/SearchPresenter.java +++ b/src/main/java/org/sigmah/client/ui/presenter/zone/SearchPresenter.java @@ -1,5 +1,27 @@ package org.sigmah.client.ui.presenter.zone; +/* + * #%L + * Sigmah + * %% + * Copyright (C) 2010 - 2016 URD + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program. If not, see + * . + * #L% + */ + import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; @@ -9,6 +31,7 @@ import java.util.Set; import org.sigmah.client.dispatch.CommandResultHandler; +import org.sigmah.client.i18n.I18N; import org.sigmah.client.inject.Injector; import org.sigmah.client.page.Page; import org.sigmah.client.page.PageRequest; @@ -52,30 +75,8 @@ import com.google.inject.Inject; import com.google.inject.Singleton; -/* - * #%L - * Sigmah - * %% - * Copyright (C) 2010 - 2016 URD - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program. If not, see - * . - * #L% - */ - /** - * Organization banner presenter displaying organization's name and logo. + * Search presenter displaying the search bar and associated widgets. * * @author */ @@ -120,7 +121,6 @@ public static interface View extends ViewInterface { */ @Override public Zone getZone() { - // TODO Auto-generated method stub return Zone.SEARCH_BANNER; } @@ -134,15 +134,12 @@ public void onBind() { @Override public void handleEvent(ButtonEvent be) { - // TODO Auto-generated method stub textToServer = view.getSearchTextField().getValue(); view.getSearchTextField().clear(); int sel_ind = view.getSearchOptionsComboBox().getSelectedIndex(); filter = view.getNewSearchOptions().get(sel_ind); - if (textToServer != null) { - if (textToServer.length() > 0) { - search(); - } + if (textToServer != null && textToServer.length() > 0) { + search(); } } @@ -153,14 +150,15 @@ public void handleEvent(ButtonEvent be) { @Override public void componentKeyUp(ComponentEvent event) { if (event.getKeyCode() == KeyCodes.KEY_ENTER) { - if (view.getSearchTextField().getValue() != null) { - if (view.getSearchTextField().getValue().length() > 0) { - textToServer = view.getSearchTextField().getValue(); - view.getSearchTextField().clear(); - int sel_ind = view.getSearchOptionsComboBox().getSelectedIndex(); - filter = view.getNewSearchOptions().get(sel_ind); - search(); - } + if (view.getSearchTextField().getValue() != null + && view.getSearchTextField().getValue().length() > 0) { + + textToServer = view.getSearchTextField().getValue(); + view.getSearchTextField().clear(); + int sel_ind = view.getSearchOptionsComboBox().getSelectedIndex(); + filter = view.getNewSearchOptions().get(sel_ind); + search(); + } } } @@ -174,13 +172,11 @@ private void search() { // dummy call just to make connection searchService.search(textToServer, filter, new AsyncCallback>() { public void onFailure(Throwable caught) { - // Window.alert("Could not make connection!"); firstsearch = false; caught.printStackTrace(); } public void onSuccess(ArrayList result) { - // Window.alert("Excellent, solr connection up!"); firstsearch = false; } }); @@ -198,10 +194,9 @@ public void onSuccess(ArrayList result) { } else { searchResults = result; if (result.size() == 0) { - N10N.info("No search results found", "There are no search results or " - + "they may not be accessible!"); - } - else { + N10N.info("No search results found", + "There are no search results or they may not be accessible!"); + } else { loadProjectIdsForFiltering(); } } @@ -212,9 +207,9 @@ public void onSuccess(ArrayList result) { } private void loadProjectIdsForFiltering() { + Integer[] orgUnitsIds = auth().getOrgUnitIds().toArray(new Integer[auth().getOrgUnitIds().size()]); List orgUnitsIdsAsList = orgUnitsIds != null ? Arrays.asList(orgUnitsIds) : null; - // Window.alert("OrgUnitIds: " +orgUnitsIdsAsList.toString()); GetProjects cmd = new GetProjects(orgUnitsIdsAsList, null); cmd.setMappingMode(ProjectDTO.Mode._USE_PROJECT_MAPPER); @@ -222,7 +217,7 @@ private void loadProjectIdsForFiltering() { @Override public void onCommandFailure(final Throwable e) { - // Window.alert("Error while getting contacts."); + N10N.error(I18N.CONSTANTS.error(), I18N.CONSTANTS.errorOnServer()); } @Override @@ -231,11 +226,7 @@ public void onCommandSuccess(final ListResult result) { if (ProfileUtils.isGranted(auth(), GlobalPermissionEnum.VIEW_ALL_PROJECTS)) { List projectsForFiltering = result.getList(); - // applyProjectFilters(); for (ProjectDTO projDTO : projectsForFiltering) { - // Window.alert("Project ID?: " + projDTO.getId() + " - // Proj - // Name: " + projDTO.getName()); projectIdsForFiltering.add(projDTO.getId()); } } @@ -245,8 +236,6 @@ else if (ProfileUtils.isGranted(auth(), GlobalPermissionEnum.VIEW_MY_PROJECTS)) } loadOrgUnitIdsForFiltering(); - // Window.alert("Completed getting the project for filtering: " - // + projectIdsForFiltering.toString()); } }); @@ -261,7 +250,7 @@ private void loadOrgUnitIdsForFiltering() { @Override public void onCommandFailure(final Throwable e) { - // Window.alert("Error while getting contacts."); + N10N.error(I18N.CONSTANTS.error(), I18N.CONSTANTS.errorOnServer()); } @Override @@ -285,7 +274,7 @@ private void loadContactIdsForFiltering() { @Override public void onCommandFailure(final Throwable e) { - // Window.alert("Error while getting contacts."); + N10N.error(I18N.CONSTANTS.error(), I18N.CONSTANTS.errorOnServer()); } @Override @@ -298,8 +287,6 @@ public void onCommandSuccess(final ListResult result) { for (ContactDTO dto : contactsForFiltering) { contactIdsForFiltering.add(dto.getId()); } - // Window.alert("Contacts for filtering: " + - // contactIdsForFiltering.toString()); } doPageRequest(); } @@ -310,26 +297,25 @@ public void doPageRequest() { if (searchResults != null && searchResults.size() > 0) { PageRequest request = new PageRequest(Page.SEARCH_RESULTS); request.addData(RequestParameter.TITLE, textToServer); - + ArrayList filteredSearchResults = new ArrayList(); - for( SearchResultsDTO dto : searchResults){ - if (filter(dto)){ + for (SearchResultsDTO dto : searchResults) { + if (filter(dto)) { filteredSearchResults.add(dto); } } if (filteredSearchResults.size() == 0) { - N10N.info("No search results found", "There are no search results or" - + " they may not be accessible!"); - }else{ + N10N.info("No search results found", "There are no search results or they may not be accessible!"); + } else { request.addData(RequestParameter.CONTENT, filteredSearchResults); request.addParameter(RequestParameter.ID, textToServer.replaceAll("[^a-zA-Z0-9\\s]", "").replaceAll(" ", "-")); eventBus.navigateRequest(request); } - + } } - + public boolean filter(SearchResultsDTO dto) { if (dto == null) @@ -341,31 +327,27 @@ public boolean filter(SearchResultsDTO dto) { if (retMap.get("doc_type").toString().equals("PROJECT")) { dto.setDTOid(retMap.get("databaseid").toString()); if (!projectIdsForFiltering.contains(Integer.parseInt(dto.getDTOid()))) { - // Window.alert("Found project not to be included!"); return false; } } else if (retMap.get("doc_type").toString().equals("CONTACT")) { dto.setDTOid(retMap.get("id_contact").toString()); if (!contactIdsForFiltering.contains(Integer.parseInt(dto.getDTOid()))) { - // Window.alert("Found Contact not to be included: " + - // dto.getDTOid()); return false; } } else if (retMap.get("doc_type").toString().equals("ORG_UNIT")) { dto.setDTOid(retMap.get("org_unit_id").toString()); if (!orgUnitIdsForFiltering.contains(Integer.parseInt(dto.getDTOid()))) { - // Window.alert("Found OrgUnit not to be included!"); return false; } } else if (retMap.get("doc_type").toString().equals("FILE")) { dto.setDTOid(retMap.get("file_version_id").toString()); dto.setFileName(retMap.get("file_name")); dto.setFileExt(retMap.get("file_ext")); - //Window.alert(retMap.toString() + "\n" + retMap.get("file_author_id") + " " + auth().getUserId().toString()); if (retMap.get("file_author_id").equals(auth().getUserId().toString())) { // temporary filter, since I am unable to implement a better - // filter, users can only view those files of which they are the authors.. + // filter, users can only view those files of which they are the + // authors.. return true; } return false; @@ -386,12 +368,12 @@ public static Map toMap(String jsonStr) { return map; } + /** * {@inheritDoc} */ @Override public void onZoneRequest(ZoneRequest zoneRequest) { - // TODO Auto-generated method stub } diff --git a/src/main/java/org/sigmah/client/ui/view/SearchResultsView.java b/src/main/java/org/sigmah/client/ui/view/SearchResultsView.java index 3f37550a4..ff61b9b2b 100644 --- a/src/main/java/org/sigmah/client/ui/view/SearchResultsView.java +++ b/src/main/java/org/sigmah/client/ui/view/SearchResultsView.java @@ -1,8 +1,5 @@ - package org.sigmah.client.ui.view; -import java.util.ArrayList; - /* * #%L * Sigmah @@ -25,6 +22,7 @@ * #L% */ +import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Map; @@ -66,10 +64,10 @@ import com.google.gwt.user.client.ui.HTML; /** - * Dashboard view. + * Search Results view. A new view opens up for every search query. * - * @author Tom Miette (tmiette@ideia.fr) - * @author Denis Colliot (dcolliot@ideia.fr) + * @author + * */ public class SearchResultsView extends AbstractView implements SearchResultsPresenter.View { @@ -108,7 +106,6 @@ public void setOrgUnitClickHandler(final OrgUnitResultsClickHandler handler) { @Override public void setFileClickHandler(final FilesResultsClickHandler handler) { - // TODO Auto-generated method stub this.handler = handler; } @@ -117,8 +114,6 @@ public void setFileClickHandler(final FilesResultsClickHandler handler) { */ @Override public void initialize() { - // default - // Window.alert("Initializing Search View!"); } public ContentPanel getSearchResultsPanel() { @@ -135,7 +130,6 @@ public LayoutContainer getCenterContainer() { public void setSearchString(String searchText) { this.searchText = searchText; - // Window.alert("Searchtext set to " + searchText); } // ------------------------------------------------------------------------------------------- @@ -146,8 +140,6 @@ public void setSearchString(String searchText) { public boolean addSearchData(Object searchData) { if (searchData != null) { - // Window.alert("Received search results!: \n" + - // searchData.toString()); searchResultsStore = new ListStore(); for (Object object : (ArrayList) searchData) { @@ -156,14 +148,12 @@ public boolean addSearchData(Object searchData) { } return true; } else { - Window.alert("Failed to receive search results!"); return false; } } public void addResultsPanel() { - - // Window.alert("Started addResultsPanel!"); + if (centerContainer == null) { centerContainer = Layouts.vBox(); centerContainer.layout(); @@ -190,14 +180,11 @@ public void addResultsPanel() { private void setContentPanel(String title, boolean collapsible, Layout layout, Scroll scroll, String... stylenames) { - - // Window.alert("Started setContentPanel!"); + searchResultsPanel = new ContentPanel(layout != null ? layout : new FitLayout()); searchResultsPanel.layout(); - // Window.alert("Hello!"); searchResultsPanel.setHeadingHtml(title); - // Window.alert("Hello!"); searchResultsPanel.layout(); searchResultsPanel.setHeaderVisible(true); searchResultsPanel.setCollapsible(collapsible); @@ -215,22 +202,16 @@ private void setContentPanel(String title, boolean collapsible, Layout layout, S searchResultsPanel.setScrollMode(scroll); } - // Window.alert("Ended setContentPanel!"); - } private List createSearchResultsGridColumns() { - // Window.alert("Started createSearchResultsGridColumns!"); - // Label column. ColumnConfig labelColumn = new ColumnConfig(); labelColumn.setId("label"); labelColumn.setHeaderHtml("Sort"); labelColumn.setWidth(100); - // labelColumn.setResizable(true); - // Add link labelColumn.setRenderer(new GridCellRenderer() { @Override @@ -302,7 +283,10 @@ public void onClick(ClickEvent event) { return Arrays.asList(new ColumnConfig[] { labelColumn }); } - private String getNiceTextForProject(Map resultsMap, String htmlBuilder) { + private String getNiceTextForProject(Map resultsMap) { + + String htmlBuilder = ""; + ProjectModelType pmt = null; if (resultsMap.get("type_pmodel").equals("FUNDING")) pmt = ProjectModelType.FUNDING; @@ -333,7 +317,10 @@ private String getNiceTextForProject(Map resultsMap, String html return htmlBuilder; } - private String getNiceTextForOrgUnit(Map resultsMap, String htmlBuilder) { + private String getNiceTextForOrgUnit(Map resultsMap) { + + String htmlBuilder = ""; + htmlBuilder += "
"; htmlBuilder += "
" + getOrgUnitLogo().getHTML() + "
" + "
resultsMap, String html return htmlBuilder; } - private String getNiceTextForContact(Map resultsMap, String htmlBuilder) { + private String getNiceTextForContact(Map resultsMap) { + + String htmlBuilder = ""; + htmlBuilder += "
"; htmlBuilder += "
" + "
" + IconImageBundle.ICONS.user().createImage() + "
" @@ -384,7 +374,10 @@ private String getNiceTextForContact(Map resultsMap, String html return htmlBuilder; } - private String getNiceTextForFile(Map resultsMap, String htmlBuilder) { + private String getNiceTextForFile(Map resultsMap) { + + String htmlBuilder = ""; + htmlBuilder += "
"; htmlBuilder += "
" + IconImageBundle.ICONS.attach().createImage() + "
" @@ -423,21 +416,20 @@ private String getNiceTextForFile(Map resultsMap, String htmlBui return htmlBuilder; } - public String getNiceText(Map resultsMap) { - String htmlBuilder = ""; + private String getNiceText(Map resultsMap) { if (resultsMap.get("doc_type").toString().equals("PROJECT")) { - return getNiceTextForProject(resultsMap, htmlBuilder); + return getNiceTextForProject(resultsMap); } if (resultsMap.get("doc_type").toString().equals("ORG_UNIT")) { - return getNiceTextForOrgUnit(resultsMap, htmlBuilder); + return getNiceTextForOrgUnit(resultsMap); } if (resultsMap.get("doc_type").toString().equals("CONTACT")) { - return getNiceTextForContact(resultsMap, htmlBuilder); + return getNiceTextForContact(resultsMap); } if (resultsMap.get("doc_type").toString().equals("FILE")) { - return getNiceTextForFile(resultsMap, htmlBuilder); + return getNiceTextForFile(resultsMap); } - return htmlBuilder; + return ""; } private int min(int i, int length) { diff --git a/src/main/java/org/sigmah/client/ui/view/admin/ParametersAdminView.java b/src/main/java/org/sigmah/client/ui/view/admin/ParametersAdminView.java index 3e18e66c4..4696f4992 100644 --- a/src/main/java/org/sigmah/client/ui/view/admin/ParametersAdminView.java +++ b/src/main/java/org/sigmah/client/ui/view/admin/ParametersAdminView.java @@ -114,6 +114,7 @@ public class ParametersAdminView extends AbstractView implements ParametersAdmin private DateField scheduledDateField; private Button passwordExpirationSaveButton; + //Solr settings private FormPanel solrSettingsForm; private TextField solrCoreUrlTextField; private Button solrSaveConfigButton; @@ -137,16 +138,11 @@ public void initialize() { add(topContainer, Layouts.borderLayoutData(LayoutRegion.NORTH, 0.5f, Margin.HALF_BOTTOM)); - // add() - final LayoutContainer bottomWestContainer = Layouts.hBox(); bottomWestContainer.add(createExportManagementPanel(), Layouts.hBoxData(Margin.HALF_RIGHT)); final LayoutContainer bottomEastContainer = Layouts.hBox(); bottomEastContainer.add(createSolrSettingsPanel(), Layouts.hBoxData(Margin.HALF_LEFT)); - // add(createExportManagementPanel(), - // Layouts.borderLayoutData(LayoutRegion.WEST, 0.5f)); - add(bottomWestContainer, Layouts.borderLayoutData(LayoutRegion.WEST, 0.5f, Margin.HALF_TOP)); add(bottomEastContainer, Layouts.borderLayoutData(LayoutRegion.EAST, 0.5f, Margin.HALF_TOP)); @@ -262,6 +258,11 @@ private ContentPanel createExportManagementPanel() { return panel; } + /** + * Creates the solr settings management panel. + * + * @return The solr settings management panel. + */ private ContentPanel createSolrSettingsPanel() { final ContentPanel panel = Panels.content("Solr Search Settings", CSS_ADMIN_PARAMETERS); @@ -505,6 +506,7 @@ public Button getExportManagementSaveButton() { return exportManagementSaveButton; } + @Override public TextField getSolrCoreUrlTextField() { return solrCoreUrlTextField; } @@ -513,6 +515,7 @@ public void setSolrCoreUrlTextField(TextField solrCoreUrlTextField) { this.solrCoreUrlTextField = solrCoreUrlTextField; } + @Override public Button getSolrSaveConfigButton() { return solrSaveConfigButton; } @@ -521,6 +524,7 @@ public void setSolrSaveConfigButton(Button solrSaveConfigButton) { this.solrSaveConfigButton = solrSaveConfigButton; } + @Override public Button getManualIndexButton() { return manualIndexButton; } diff --git a/src/main/java/org/sigmah/client/ui/view/zone/OrganizationBannerView.java b/src/main/java/org/sigmah/client/ui/view/zone/OrganizationBannerView.java index a69abb2e4..e25135814 100644 --- a/src/main/java/org/sigmah/client/ui/view/zone/OrganizationBannerView.java +++ b/src/main/java/org/sigmah/client/ui/view/zone/OrganizationBannerView.java @@ -41,7 +41,6 @@ public class OrganizationBannerView extends AbstractView implements Organization private Panel logoPanel; private Panel namePanel; private HTML nameLabel; - //private HTML searchText; /** * {@inheritDoc} @@ -57,9 +56,6 @@ public void initialize() { nameLabel = new HTML(); namePanel.add(nameLabel); - -// searchText = new HTML("Search1"); -// namePanel.add(searchText); // initWidget(); Useless. diff --git a/src/main/java/org/sigmah/client/ui/view/zone/SearchView.java b/src/main/java/org/sigmah/client/ui/view/zone/SearchView.java index 45ac6e0ba..c66240ccc 100644 --- a/src/main/java/org/sigmah/client/ui/view/zone/SearchView.java +++ b/src/main/java/org/sigmah/client/ui/view/zone/SearchView.java @@ -39,7 +39,7 @@ /** - * Search view (just a widgets set). + * Search view - A set of widgets for the search bar. * * @author */ diff --git a/src/main/java/org/sigmah/server/dao/impl/FileHibernateDAO.java b/src/main/java/org/sigmah/server/dao/impl/FileHibernateDAO.java index fe0a73d48..8fea63ede 100644 --- a/src/main/java/org/sigmah/server/dao/impl/FileHibernateDAO.java +++ b/src/main/java/org/sigmah/server/dao/impl/FileHibernateDAO.java @@ -1,7 +1,5 @@ package org.sigmah.server.dao.impl; -import static org.sigmah.shared.util.ValueResultUtils.normalizeFileName; - /* * #%L * Sigmah @@ -54,6 +52,9 @@ import com.google.inject.persist.Transactional; +import static org.sigmah.shared.util.ValueResultUtils.normalizeFileName; + + /** * {@link FileDAO} implementation. * diff --git a/src/main/java/org/sigmah/server/search/FilesSolrManager.java b/src/main/java/org/sigmah/server/search/FilesSolrManager.java index 407ccf64c..7101b0ef1 100644 --- a/src/main/java/org/sigmah/server/search/FilesSolrManager.java +++ b/src/main/java/org/sigmah/server/search/FilesSolrManager.java @@ -1,9 +1,36 @@ package org.sigmah.server.search; +/* + * #%L + * Sigmah + * %% + * Copyright (C) 2010 - 2016 URD + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program. If not, see + * . + * #L% + */ + import java.io.IOException; import org.sigmah.server.domain.value.FileVersion; +/** + * Implemented by {@link FilesSolrManagerImpl}. + * + * @author + */ public interface FilesSolrManager { public Boolean filesImport(SolrSearcher instance) throws IOException; diff --git a/src/main/java/org/sigmah/server/search/FilesSolrManagerHandler.java b/src/main/java/org/sigmah/server/search/FilesSolrManagerHandler.java index 41a17e47a..04ee74fa0 100644 --- a/src/main/java/org/sigmah/server/search/FilesSolrManagerHandler.java +++ b/src/main/java/org/sigmah/server/search/FilesSolrManagerHandler.java @@ -1,5 +1,27 @@ package org.sigmah.server.search; +/* + * #%L + * Sigmah + * %% + * Copyright (C) 2010 - 2016 URD + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program. If not, see + * . + * #L% + */ + import java.io.IOException; import org.sigmah.server.dispatch.impl.UserDispatch.UserExecutionContext; @@ -11,6 +33,12 @@ import com.google.inject.Inject; +/** + * Handler for command {@link FilesSolrIndexCommand} to execute a manual + * indexing of files command from the client side + * + * @author + */ public class FilesSolrManagerHandler extends AbstractCommandHandler{ /** diff --git a/src/main/java/org/sigmah/server/search/FilesSolrManagerImpl.java b/src/main/java/org/sigmah/server/search/FilesSolrManagerImpl.java index a501a1d7d..30b5302e2 100644 --- a/src/main/java/org/sigmah/server/search/FilesSolrManagerImpl.java +++ b/src/main/java/org/sigmah/server/search/FilesSolrManagerImpl.java @@ -1,5 +1,27 @@ package org.sigmah.server.search; +/* + * #%L + * Sigmah + * %% + * Copyright (C) 2010 - 2016 URD + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program. If not, see + * . + * #L% + */ + import java.io.File; import java.io.IOException; import java.nio.file.Path; @@ -16,6 +38,12 @@ import com.google.inject.Inject; +/** + * Implementation of {@link FilesSolrManager} job to execute Solr Full Data Import and + * import of files.Necessary for updating search index. + * + * @author + */ public class FilesSolrManagerImpl implements FilesSolrManager { /** diff --git a/src/main/java/org/sigmah/server/search/SearchServiceImpl.java b/src/main/java/org/sigmah/server/search/SearchServiceImpl.java index 2380aa3d9..dca77423a 100644 --- a/src/main/java/org/sigmah/server/search/SearchServiceImpl.java +++ b/src/main/java/org/sigmah/server/search/SearchServiceImpl.java @@ -1,15 +1,42 @@ package org.sigmah.server.search; +/* + * #%L + * Sigmah + * %% + * Copyright (C) 2010 - 2016 URD + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program. If not, see + * . + * #L% + */ + import com.google.gwt.user.server.rpc.RemoteServiceServlet; import java.util.ArrayList; import org.sigmah.client.search.SearchService; import org.sigmah.server.search.SolrSearcher; import org.sigmah.shared.dto.search.SearchResultsDTO; +/** + * Implementation of {@link SearchService} Contains implementations of async methods + * required for search + * + * @author + */ @SuppressWarnings("serial") public class SearchServiceImpl extends RemoteServiceServlet implements SearchService{ - - //implementation of the Search Methods + @Override public ArrayList search(String searchStr, String filter){ if( SolrSearcher.getInstance() != null ){ @@ -25,9 +52,12 @@ public Boolean index() { @Override public Boolean updateCore(String solrCoreUrl) { - if( SolrSearcher.getNewInstance(solrCoreUrl) != null ) - return true; - return false; + if( SolrSearcher.getNewInstance(solrCoreUrl) == null ) + return false; + if(SolrSearcher.getInstance().search("test search", "All") == null){ + return false; + } + return true; } } diff --git a/src/main/java/org/sigmah/server/search/SolrIndexJob.java b/src/main/java/org/sigmah/server/search/SolrIndexJob.java index f907f3deb..d06812a9c 100644 --- a/src/main/java/org/sigmah/server/search/SolrIndexJob.java +++ b/src/main/java/org/sigmah/server/search/SolrIndexJob.java @@ -1,5 +1,27 @@ package org.sigmah.server.search; +/* + * #%L + * Sigmah + * %% + * Copyright (C) 2010 - 2016 URD + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program. If not, see + * . + * #L% + */ + import java.io.IOException; import javax.persistence.EntityManager; @@ -12,6 +34,12 @@ import com.google.inject.Injector; +/** + * Scheduled (in {@link SolrIndexJobActivator}) job to execute Solr Full Data Import and + * import of files.Necessary for updating search index. + * + * @author + */ public class SolrIndexJob implements Job{ @Override diff --git a/src/main/java/org/sigmah/server/search/SolrIndexJobActivator.java b/src/main/java/org/sigmah/server/search/SolrIndexJobActivator.java index a8f02387f..16d105706 100644 --- a/src/main/java/org/sigmah/server/search/SolrIndexJobActivator.java +++ b/src/main/java/org/sigmah/server/search/SolrIndexJobActivator.java @@ -1,5 +1,27 @@ package org.sigmah.server.search; +/* + * #%L + * Sigmah + * %% + * Copyright (C) 2010 - 2016 URD + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program. If not, see + * . + * #L% + */ + import javax.persistence.EntityManager; import org.quartz.JobDetail; @@ -13,6 +35,13 @@ import com.google.inject.Provider; import com.google.inject.Singleton; +/** + * Schedules jobs link{SolrIndexJob} + * Executes every 10 minutes + * @author + * + */ + @Singleton public class SolrIndexJobActivator { diff --git a/src/main/java/org/sigmah/server/search/SolrSearcher.java b/src/main/java/org/sigmah/server/search/SolrSearcher.java index 40caf0e6e..39613b341 100644 --- a/src/main/java/org/sigmah/server/search/SolrSearcher.java +++ b/src/main/java/org/sigmah/server/search/SolrSearcher.java @@ -1,5 +1,27 @@ package org.sigmah.server.search; +/* + * #%L + * Sigmah + * %% + * Copyright (C) 2010 - 2016 URD + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program. If not, see + * . + * #L% + */ + import java.io.IOException; import java.net.MalformedURLException; import java.util.ArrayList; @@ -16,6 +38,13 @@ import com.google.gson.Gson; +/** + * Main class where a single instance of the Solr client is initialized. + * Contains essential methods like search and dataimport which are called by + * {@link SearchServiceImpl} + * + * @author + */ public class SolrSearcher { private String urlString; @@ -29,19 +58,17 @@ public String getUrlString() { private SolrSearcher() { } - public static SolrSearcher getInstance() { // Singleton + public static SolrSearcher getInstance() { if (instance == null) { instance = new SolrSearcher(); try { instance.loadServer(); } catch (SolrServerException e) { - // TODO Auto-generated catch block System.out.println("SOLR CONNECTION FAILED"); instance = null; e.printStackTrace(); } catch (MalformedURLException e) { - // TODO Auto-generated catch block System.out.println("SOLR CONNECTION FAILED"); instance = null; e.printStackTrace(); @@ -54,19 +81,19 @@ public static SolrSearcher getInstance() { // Singleton return instance; } - public static SolrSearcher getNewInstance(String solrCoreUrl) { //only for use when solr core url has been updated + public static SolrSearcher getNewInstance(String solrCoreUrl) { + //only for use when solr core url has been updated + instance = new SolrSearcher(); instance.urlString = solrCoreUrl; try { instance.loadServer(); } catch (SolrServerException e) { - // TODO Auto-generated catch block System.out.println("SOLR CONNECTION FAILED"); instance = null; e.printStackTrace(); } catch (MalformedURLException e) { - // TODO Auto-generated catch block System.out.println("SOLR CONNECTION FAILED"); instance = null; e.printStackTrace(); @@ -92,23 +119,21 @@ public ArrayList search(String searchStr, String filter) { query.setQuery(searchStr); //query.addSort("doc_id", ORDER.desc); - if (filter.equals("Projects")){ + if ("Projects".equals(filter)){ query.set("fq", "doc_type:PROJECT"); //query.set("qt", "/searchproject"); } - else if (filter.equals("Contacts")){ + else if ("Contacts".equals(filter)){ query.set("fq", "doc_type:CONTACT"); } - else if (filter.equals("OrgUnits")){ + else if ("OrgUnits".equals(filter)){ query.set("fq", "doc_type:ORG_UNIT"); // query.addSortField("weight", ORDER.desc); - }else if (filter.equals("Your Files")){ + }else if ("Your Files".equals(filter)){ query.set("fq", "doc_type:FILE"); // query.addSortField("weight", ORDER.desc); } - else{ - //query.set("qt", "/search"); - } + //query.set("qt", "/search"); QueryResponse rsp = null; @@ -117,11 +142,9 @@ else if (filter.equals("OrgUnits")){ rsp = solrServer.query(query); } } catch (SolrServerException e) { - // TODO Auto-generated catch block e.printStackTrace(); return null; } catch (IOException e) { - // TODO Auto-generated catch block e.printStackTrace(); return null; } @@ -137,11 +160,8 @@ else if (filter.equals("OrgUnits")){ SolrDocument resultDoc = (SolrDocument) iter.next(); descriptor.setResult(gson.toJson(resultDoc).toString()); searchList.add(descriptor); - } - } - return searchList; } @@ -159,7 +179,6 @@ public static Boolean fullDataImport() { return false; } } catch (SolrServerException | IOException e) { - // TODO Auto-generated catch block e.printStackTrace(); return false; } diff --git a/src/main/java/org/sigmah/shared/command/FilesSolrIndexCommand.java b/src/main/java/org/sigmah/shared/command/FilesSolrIndexCommand.java index 3ac998123..dd23af5a9 100644 --- a/src/main/java/org/sigmah/shared/command/FilesSolrIndexCommand.java +++ b/src/main/java/org/sigmah/shared/command/FilesSolrIndexCommand.java @@ -1,8 +1,37 @@ package org.sigmah.shared.command; +import org.sigmah.server.search.FilesSolrManager; + +/* + * #%L + * Sigmah + * %% + * Copyright (C) 2010 - 2016 URD + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program. If not, see + * . + * #L% + */ + import org.sigmah.shared.command.base.AbstractCommand; import org.sigmah.shared.dto.search.FilesSolrIndexDTO; +/** + * Command used by client side to execute indexing of files + * + * @author + */ public class FilesSolrIndexCommand extends AbstractCommand{ private FilesSolrIndexDTO filesSolrIndexDTO; diff --git a/src/main/java/org/sigmah/shared/dto/search/FilesSolrIndexDTO.java b/src/main/java/org/sigmah/shared/dto/search/FilesSolrIndexDTO.java index e6c7edb79..5cbe982ea 100644 --- a/src/main/java/org/sigmah/shared/dto/search/FilesSolrIndexDTO.java +++ b/src/main/java/org/sigmah/shared/dto/search/FilesSolrIndexDTO.java @@ -1,7 +1,34 @@ package org.sigmah.shared.dto.search; +/* + * #%L + * Sigmah + * %% + * Copyright (C) 2010 - 2016 URD + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program. If not, see + * . + * #L% + */ + import org.sigmah.shared.dto.base.DTO; +/** + * Dto with a boolean specifying success or failure of files indexing + * + * @author + */ public class FilesSolrIndexDTO implements DTO{ public boolean result; diff --git a/src/main/java/org/sigmah/shared/dto/search/SearchResultsDTO.java b/src/main/java/org/sigmah/shared/dto/search/SearchResultsDTO.java index e76a529d9..349f74485 100644 --- a/src/main/java/org/sigmah/shared/dto/search/SearchResultsDTO.java +++ b/src/main/java/org/sigmah/shared/dto/search/SearchResultsDTO.java @@ -1,12 +1,37 @@ package org.sigmah.shared.dto.search; +/* + * #%L + * Sigmah + * %% + * Copyright (C) 2010 - 2016 URD + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program. If not, see + * . + * #L% + */ + import java.io.Serializable; import org.sigmah.shared.dto.base.AbstractModelDataEntityDTO; +/** + * DTO used to transfer the results of a search query as a simple JSON string. + * + * @author + */ public class SearchResultsDTO extends AbstractModelDataEntityDTO implements Serializable { - - //public static final String ENTITY_NAME = "search.SearchResults"; /** * Serial version UID. */ @@ -30,7 +55,6 @@ public void setResult(String result) { @Override public String getEntityName() { - // TODO Auto-generated method stub return null; } From 8f9281a89c811213721a9e7ededc53808eb3c0d4 Mon Sep 17 00:00:00 2001 From: indianauthority97 Date: Sun, 13 Aug 2017 12:39:48 +0530 Subject: [PATCH 34/36] [Issue #535]:Added Global Permission SEARCH for viewing search bar --- .../sigmah/client/search/SearchServiceAsync.java | 1 + .../ui/presenter/zone/SearchPresenter.java | 16 ++++++++++++++++ .../sigmah/client/ui/view/zone/SearchView.java | 15 +++++++++++++-- .../server/domain/util/EntityConstants.java | 1 + .../dto/referential/GlobalPermissionEnum.java | 11 ++++++++++- 5 files changed, 41 insertions(+), 3 deletions(-) diff --git a/src/main/java/org/sigmah/client/search/SearchServiceAsync.java b/src/main/java/org/sigmah/client/search/SearchServiceAsync.java index 794f9211d..dc2e5170f 100644 --- a/src/main/java/org/sigmah/client/search/SearchServiceAsync.java +++ b/src/main/java/org/sigmah/client/search/SearchServiceAsync.java @@ -33,6 +33,7 @@ * Async interface on the client side which is implemented by * {@link SearchServiceImpl} on the server side. * + * @author */ public interface SearchServiceAsync { diff --git a/src/main/java/org/sigmah/client/ui/presenter/zone/SearchPresenter.java b/src/main/java/org/sigmah/client/ui/presenter/zone/SearchPresenter.java index 25d67a4d2..9a11a2a0a 100644 --- a/src/main/java/org/sigmah/client/ui/presenter/zone/SearchPresenter.java +++ b/src/main/java/org/sigmah/client/ui/presenter/zone/SearchPresenter.java @@ -69,6 +69,7 @@ import com.google.gwt.json.client.JSONObject; import com.google.gwt.json.client.JSONParser; import com.google.gwt.json.client.JSONValue; +import com.google.gwt.user.client.Timer; import com.google.gwt.user.client.rpc.AsyncCallback; import com.google.gwt.user.client.ui.Panel; import com.google.inject.ImplementedBy; @@ -114,6 +115,8 @@ public static interface View extends ViewInterface { List getNewSearchOptions(); + void setAllVisible(); + } /** @@ -164,6 +167,19 @@ public void componentKeyUp(ComponentEvent event) { } }); + //have put a timer because it takes quite some time for auth() to load, if I did this + //without a timer it would give a null pointer exception for auth() + Timer t = new Timer() { + @Override + public void run() { + if (ProfileUtils.isGranted(auth(), GlobalPermissionEnum.SEARCH)) { + view.setAllVisible(); + } + } + }; + + t.schedule(8000); //8s delay + } private void search() { diff --git a/src/main/java/org/sigmah/client/ui/view/zone/SearchView.java b/src/main/java/org/sigmah/client/ui/view/zone/SearchView.java index c66240ccc..ba3b3433e 100644 --- a/src/main/java/org/sigmah/client/ui/view/zone/SearchView.java +++ b/src/main/java/org/sigmah/client/ui/view/zone/SearchView.java @@ -30,6 +30,8 @@ import org.sigmah.client.ui.view.base.AbstractView; import org.sigmah.client.ui.widget.button.Button; import org.sigmah.client.ui.widget.form.Forms; +import org.sigmah.shared.dto.referential.GlobalPermissionEnum; +import org.sigmah.shared.util.ProfileUtils; import com.extjs.gxt.ui.client.widget.form.ComboBox; import com.extjs.gxt.ui.client.widget.form.SimpleComboBox; @@ -60,6 +62,7 @@ public void initialize() { searchTextField = Forms.text("Search", false); searchTextField.setEmptyText("Search"); searchTextField.setWidth(190); + searchTextField.setVisible(false); searchOptionsComboBox = new SimpleComboBox(); newSearchOptions = Arrays.asList("All", "Projects", "OrgUnits", "Contacts", "Your Files"); @@ -68,16 +71,24 @@ public void initialize() { searchOptionsComboBox.setEditable(false); searchOptionsComboBox.setWidth(78); searchOptionsComboBox.setSimpleValue("All"); - + searchOptionsComboBox.setVisible(false); newSearchButton = Forms.button("Go"); + newSearchButton.setVisible(false); searchBarPanel = new HorizontalPanel(); searchBarPanel.getElement().setId("search-bar"); + searchBarPanel.add(searchTextField); searchBarPanel.add(searchOptionsComboBox); searchBarPanel.add(newSearchButton); - + + } + + public void setAllVisible(){ + searchTextField.setVisible(true); + searchOptionsComboBox.setVisible(true); + newSearchButton.setVisible(true); } public TextField getSearchTextField() { diff --git a/src/main/java/org/sigmah/server/domain/util/EntityConstants.java b/src/main/java/org/sigmah/server/domain/util/EntityConstants.java index cb21e3adc..b6a77bfa3 100644 --- a/src/main/java/org/sigmah/server/domain/util/EntityConstants.java +++ b/src/main/java/org/sigmah/server/domain/util/EntityConstants.java @@ -1507,6 +1507,7 @@ private EntityConstants() { public static final String USER_COLUMN_PASSWORD = "Password"; public static final String USER_COLUMN_ACTIVE = "Active"; public static final String USER_COLUMN_DATE_CHANGE_PASSWORD_KEY_ISSUED = "dateChangePasswordKeyIssued"; + public static final String USER_CAN_SEARCH = "Search"; public static final int CHANGE_PASSWORD_KEY_MAX_LENGTH = 34; public static final int PASSWORD_MAX_LENGTH = 150; diff --git a/src/main/java/org/sigmah/shared/dto/referential/GlobalPermissionEnum.java b/src/main/java/org/sigmah/shared/dto/referential/GlobalPermissionEnum.java index 32bd104bb..31c10c173 100644 --- a/src/main/java/org/sigmah/shared/dto/referential/GlobalPermissionEnum.java +++ b/src/main/java/org/sigmah/shared/dto/referential/GlobalPermissionEnum.java @@ -315,7 +315,12 @@ public enum GlobalPermissionEnum implements Result { /** * For management measure performances. */ - PROBES_MANAGEMENT(GlobalPermissionCategory.OTHER); + PROBES_MANAGEMENT(GlobalPermissionCategory.OTHER), + + /** + * For viewing search bar. + */ + SEARCH(GlobalPermissionCategory.OTHER); /** * The global permission category (never {@code null}). @@ -654,6 +659,10 @@ public static String getName(final GlobalPermissionEnum globalPermission) { case PROBES_MANAGEMENT: return I18N.CONSTANTS.PROBES_MANAGEMENT(); + + case SEARCH: + return "Search"; + default: return globalPermission.name(); } From 9df59b2c412c9c47c6fad435c1057a9b70447c59 Mon Sep 17 00:00:00 2001 From: indianauthority97 Date: Sun, 13 Aug 2017 16:14:59 +0530 Subject: [PATCH 35/36] [Issue #535]:Added a search button image --- .../client/ui/res/icon/IconImageBundle.java | 3 +++ .../sigmah/client/ui/view/zone/SearchView.java | 5 ++--- .../shared/command/FilesSolrIndexCommand.java | 2 -- .../sigmah/client/ui/res/icon/search-button.png | Bin 0 -> 1026 bytes 4 files changed, 5 insertions(+), 5 deletions(-) create mode 100644 src/main/resources/org/sigmah/client/ui/res/icon/search-button.png diff --git a/src/main/java/org/sigmah/client/ui/res/icon/IconImageBundle.java b/src/main/java/org/sigmah/client/ui/res/icon/IconImageBundle.java index d7fb88df2..4cebeb081 100644 --- a/src/main/java/org/sigmah/client/ui/res/icon/IconImageBundle.java +++ b/src/main/java/org/sigmah/client/ui/res/icon/IconImageBundle.java @@ -63,6 +63,9 @@ public interface IconImageBundle extends ImageBundle { AbstractImagePrototype addActivity(); AbstractImagePrototype deleteActivity(); + + @Resource(value = "search-button.png") + AbstractImagePrototype search(); @Resource(value = "editPage.png") AbstractImagePrototype editActivity(); diff --git a/src/main/java/org/sigmah/client/ui/view/zone/SearchView.java b/src/main/java/org/sigmah/client/ui/view/zone/SearchView.java index ba3b3433e..d98f1fe26 100644 --- a/src/main/java/org/sigmah/client/ui/view/zone/SearchView.java +++ b/src/main/java/org/sigmah/client/ui/view/zone/SearchView.java @@ -27,11 +27,10 @@ import java.util.List; import org.sigmah.client.ui.presenter.zone.SearchPresenter; +import org.sigmah.client.ui.res.icon.IconImageBundle; import org.sigmah.client.ui.view.base.AbstractView; import org.sigmah.client.ui.widget.button.Button; import org.sigmah.client.ui.widget.form.Forms; -import org.sigmah.shared.dto.referential.GlobalPermissionEnum; -import org.sigmah.shared.util.ProfileUtils; import com.extjs.gxt.ui.client.widget.form.ComboBox; import com.extjs.gxt.ui.client.widget.form.SimpleComboBox; @@ -73,7 +72,7 @@ public void initialize() { searchOptionsComboBox.setSimpleValue("All"); searchOptionsComboBox.setVisible(false); - newSearchButton = Forms.button("Go"); + newSearchButton = Forms.button(IconImageBundle.ICONS.search().getHTML()); newSearchButton.setVisible(false); searchBarPanel = new HorizontalPanel(); diff --git a/src/main/java/org/sigmah/shared/command/FilesSolrIndexCommand.java b/src/main/java/org/sigmah/shared/command/FilesSolrIndexCommand.java index dd23af5a9..497ac8d88 100644 --- a/src/main/java/org/sigmah/shared/command/FilesSolrIndexCommand.java +++ b/src/main/java/org/sigmah/shared/command/FilesSolrIndexCommand.java @@ -1,7 +1,5 @@ package org.sigmah.shared.command; -import org.sigmah.server.search.FilesSolrManager; - /* * #%L * Sigmah diff --git a/src/main/resources/org/sigmah/client/ui/res/icon/search-button.png b/src/main/resources/org/sigmah/client/ui/res/icon/search-button.png new file mode 100644 index 0000000000000000000000000000000000000000..0d4b8939693764fe292a429d7bd21cc269e484f7 GIT binary patch literal 1026 zcmZ`%eOOav6o2uH51VfvhN9+2g&;AzFi~1qZEeER5e^cukgowL8i>;*wM!?N06-WgLeSdnPzhFM(tBcZPQiP7KMX34& zLO!6XDTEFY2)XhR;-5iiNyWLV+fxvl!^zl|CH8u~6h+;*WiFQsVlb!E>HgQ?gd|BI z?G8sU7@WCfw*$aHAfVIfTy8h(pP^|Q((&=}pIcimH#H6D^>7y$v)K%iQ`6H!CR281 zCO0M~i68(kDwTe}A1)XS1{+B-48yYi+?=Wzg)Wptyz}MmSyfODe-tbpfF^%bZRu~W7oB*)!xY|XkD1QdtYhk_{0QEF*rDA zwpea@C*3zjWzzIrJF-FF=kv8Rx5Pz9!?dGgV?Ng3uOBd5tfYhT&ji}r+czgC!>C&X z!o>J^2+GUKCa0!ongQ(V>o*OVDVKZLW}l`Ri^Wn`TX(9aMt!~Qd_%*E$Vho!-q_#c zG~?6t_8N>sHakT+oYoPWYji9y`{RNPJHz@}Wn&{JJiPKiC6GE@@1VhG9U-m5Hjo80 znXN;XVY79Za=K{Rr&4{_+}tv8)7#gthc#@ctRwajlDaKUQZ9$nZFjgRr>Gk^S>bB0VZcRt0rc>LY?dqIe-P*2h2sE0G-~Z^ja^=UWs;aD2I0RlyNa5C0 z5ng%~4L}lJk(P51UR~Sl4*9KIDF-rCA(4thtzn!6Yk0QBj1ef4L?p-x>ks)0af2W+ zXYRcD3qr%fBNpDlL5ncH^Dd0B3} zaS!2m#9jX|k&wvSkhBqR!pZ0n%zrcmZ+`6YC$Inu(UVvt-hxxpBv0Y3+oUM{>5T2N z%&cd2WaFJVyU?@G+qeIP@`?kM2Nj17qZeN~aZ(11FdiLCBpErDg&VTvUg|8dGQC|GE z>C$D@g~KU7cu381_|RyDc&9>MpeW`SRThIoiA2ICE|JVl;AIgT`8*y!DS=CD;1h(& gQxW)2!Txgjo{}T~UvNpK5kdiyh|@(XVgB)d0Cb`yMF0Q* literal 0 HcmV?d00001 From 4e9ea32e90fae682dbc71f2a271531c44a404f15 Mon Sep 17 00:00:00 2001 From: indianauthority97 Date: Tue, 22 Aug 2017 00:58:41 +0530 Subject: [PATCH 36/36] [Issue #535]:Final few changes and code cleanup --- pom.xml | 6 ---- .../sigmah/client/search/SearchService.java | 2 +- .../client/search/SearchServiceAsync.java | 2 +- .../ui/presenter/DashboardPresenter.java | 33 +++++++++++------- .../ui/presenter/SearchResultsPresenter.java | 4 ++- .../admin/ParametersAdminPresenter.java | 6 ++-- .../presenter/zone/MenuBannerPresenter.java | 8 ----- .../ui/presenter/zone/SearchPresenter.java | 28 +++++++-------- .../client/ui/view/SearchResultsView.java | 4 +-- .../client/ui/view/zone/SearchView.java | 2 +- .../server/dao/impl/FileHibernateDAO.java | 2 +- .../server/search/FilesSolrManager.java | 2 +- .../search/FilesSolrManagerHandler.java | 2 +- .../server/search/FilesSolrManagerImpl.java | 2 +- .../server/search/SearchServiceImpl.java | 2 +- .../sigmah/server/search/SolrIndexJob.java | 2 +- .../server/search/SolrIndexJobActivator.java | 2 +- .../sigmah/server/search/SolrSearcher.java | 5 +-- .../shared/command/FilesSolrIndexCommand.java | 2 +- .../shared/dto/search/FilesSolrIndexDTO.java | 2 +- .../shared/dto/search/SearchResultsDTO.java | 2 +- src/main/resources/sigmah.properties | 6 +--- .../Test_Sigmah/conf/dataimport.properties | 10 +++--- .../Test_Sigmah/data/index/_21d.dii | Bin 87 -> 0 bytes .../Test_Sigmah/data/index/_21d.dim | Bin 795 -> 0 bytes .../Test_Sigmah/data/index/_21d.fdx | Bin 104 -> 0 bytes .../Test_Sigmah/data/index/_21d.nvd | Bin 1883 -> 0 bytes .../Test_Sigmah/data/index/_21d.nvm | Bin 448 -> 0 bytes .../Test_Sigmah/data/index/_21d.si | Bin 579 -> 0 bytes .../data/index/_21d_Lucene50_0.doc | Bin 13282 -> 0 bytes .../data/index/_21d_Lucene50_0.pos | Bin 62830 -> 0 bytes .../data/index/_21d_Lucene50_0.tim | Bin 72161 -> 0 bytes .../data/index/_21d_Lucene50_0.tip | Bin 3670 -> 0 bytes .../data/index/_21d_Lucene54_0.dvd | Bin 1914 -> 0 bytes .../data/index/_21d_Lucene54_0.dvm | Bin 4106 -> 0 bytes .../Test_Sigmah/data/index/_21e.fdx | Bin 85 -> 0 bytes .../Test_Sigmah/data/index/_21e.nvd | Bin 59 -> 0 bytes .../Test_Sigmah/data/index/_21e.si | Bin 523 -> 0 bytes .../data/index/_21e_Lucene50_0.doc | Bin 110 -> 0 bytes .../data/index/_21e_Lucene54_0.dvd | Bin 94 -> 0 bytes .../Test_Sigmah/data/index/_21f.fdx | Bin 84 -> 0 bytes .../Test_Sigmah/data/index/_21f.nvd | Bin 59 -> 0 bytes .../Test_Sigmah/data/index/_21f.si | Bin 523 -> 0 bytes .../data/index/_21f_Lucene50_0.doc | Bin 110 -> 0 bytes .../data/index/_21f_Lucene54_0.dvd | Bin 94 -> 0 bytes .../Test_Sigmah/data/index/_21g.fdx | Bin 84 -> 0 bytes .../Test_Sigmah/data/index/_21g.nvd | Bin 59 -> 0 bytes .../Test_Sigmah/data/index/_21g.si | Bin 523 -> 0 bytes .../data/index/_21g_Lucene50_0.doc | Bin 110 -> 0 bytes .../data/index/_21g_Lucene54_0.dvd | Bin 94 -> 0 bytes .../Test_Sigmah/data/index/_21h.fdx | Bin 84 -> 0 bytes .../Test_Sigmah/data/index/_21h.nvd | Bin 59 -> 0 bytes .../Test_Sigmah/data/index/_21h.si | Bin 523 -> 0 bytes .../data/index/_21h_Lucene50_0.doc | Bin 110 -> 0 bytes .../data/index/_21h_Lucene54_0.dvd | Bin 94 -> 0 bytes .../Test_Sigmah/data/index/_21i.fdx | Bin 84 -> 0 bytes .../Test_Sigmah/data/index/_21i.nvd | Bin 59 -> 0 bytes .../Test_Sigmah/data/index/_21i.si | Bin 523 -> 0 bytes .../data/index/_21i_Lucene50_0.doc | Bin 110 -> 0 bytes .../data/index/_21i_Lucene54_0.dvd | Bin 94 -> 0 bytes .../data/index/_21i_Lucene54_0.dvm | Bin 240 -> 0 bytes .../Test_Sigmah/data/index/_21j.fdx | Bin 84 -> 0 bytes .../Test_Sigmah/data/index/_21j.nvd | Bin 59 -> 0 bytes .../Test_Sigmah/data/index/_21j.si | Bin 523 -> 0 bytes .../data/index/_21j_Lucene50_0.doc | Bin 110 -> 0 bytes .../data/index/_21j_Lucene54_0.dvd | Bin 94 -> 0 bytes .../data/index/_21j_Lucene54_0.dvm | Bin 240 -> 0 bytes .../Test_Sigmah/data/index/_21k.fdx | Bin 85 -> 0 bytes .../Test_Sigmah/data/index/_21k.nvd | Bin 59 -> 0 bytes .../Test_Sigmah/data/index/_21k.si | Bin 523 -> 0 bytes .../data/index/_21k_Lucene50_0.doc | Bin 110 -> 0 bytes .../data/index/_21k_Lucene54_0.dvd | Bin 94 -> 0 bytes .../data/index/_21k_Lucene54_0.dvm | Bin 240 -> 0 bytes .../Test_Sigmah/data/index/_21l.fdx | Bin 84 -> 0 bytes .../Test_Sigmah/data/index/_21l.nvd | Bin 59 -> 0 bytes .../Test_Sigmah/data/index/_21l.si | Bin 523 -> 0 bytes .../data/index/_21l_Lucene50_0.doc | Bin 110 -> 0 bytes .../data/index/_21l_Lucene54_0.dvd | Bin 94 -> 0 bytes .../data/index/_21l_Lucene54_0.dvm | Bin 240 -> 0 bytes .../Test_Sigmah/data/index/_5p9.dii | Bin 0 -> 87 bytes .../Test_Sigmah/data/index/_5p9.dim | Bin 0 -> 795 bytes .../data/index/{_21d.fdt => _5p9.fdt} | Bin 95449 -> 73054 bytes .../Test_Sigmah/data/index/_5p9.fdx | Bin 0 -> 101 bytes .../data/index/{_21d.fnm => _5p9.fnm} | Bin 14158 -> 14158 bytes .../Test_Sigmah/data/index/_5p9.nvd | Bin 0 -> 1845 bytes .../Test_Sigmah/data/index/_5p9.nvm | Bin 0 -> 448 bytes .../Test_Sigmah/data/index/_5p9.si | Bin 0 -> 579 bytes .../data/index/_5p9_Lucene50_0.doc | Bin 0 -> 10571 bytes .../data/index/_5p9_Lucene50_0.pos | Bin 0 -> 48279 bytes .../data/index/_5p9_Lucene50_0.tim | Bin 0 -> 64910 bytes .../data/index/_5p9_Lucene50_0.tip | Bin 0 -> 3452 bytes .../data/index/_5p9_Lucene54_0.dvd | Bin 0 -> 1896 bytes .../data/index/_5p9_Lucene54_0.dvm | Bin 0 -> 4098 bytes .../Test_Sigmah/data/index/_5pa.fdt | Bin 0 -> 23065 bytes .../Test_Sigmah/data/index/_5pa.fdx | Bin 0 -> 85 bytes .../data/index/{_21e.fnm => _5pa.fnm} | Bin 1857 -> 1857 bytes .../Test_Sigmah/data/index/_5pa.nvd | Bin 0 -> 59 bytes .../data/index/{_21k.nvm => _5pa.nvm} | Bin 208 -> 208 bytes .../Test_Sigmah/data/index/_5pa.si | Bin 0 -> 523 bytes .../data/index/_5pa_Lucene50_0.doc | Bin 0 -> 110 bytes .../data/index/_5pa_Lucene50_0.pos | Bin 0 -> 14427 bytes .../data/index/_5pa_Lucene50_0.tim | Bin 0 -> 23444 bytes .../data/index/_5pa_Lucene50_0.tip | Bin 0 -> 1054 bytes .../data/index/_5pa_Lucene54_0.dvd | Bin 0 -> 94 bytes ...21e_Lucene54_0.dvm => _5pa_Lucene54_0.dvm} | Bin 240 -> 240 bytes .../data/index/{_21e.fdt => _5pb.fdt} | Bin 17488 -> 17488 bytes .../Test_Sigmah/data/index/_5pb.fdx | Bin 0 -> 85 bytes .../data/index/{_21j.fnm => _5pb.fnm} | Bin 1857 -> 1857 bytes .../Test_Sigmah/data/index/_5pb.nvd | Bin 0 -> 59 bytes .../data/index/{_21e.nvm => _5pb.nvm} | Bin 208 -> 208 bytes .../Test_Sigmah/data/index/_5pb.si | Bin 0 -> 523 bytes .../data/index/_5pb_Lucene50_0.doc | Bin 0 -> 110 bytes ...21e_Lucene50_0.pos => _5pb_Lucene50_0.pos} | Bin 12378 -> 12378 bytes ...21e_Lucene50_0.tim => _5pb_Lucene50_0.tim} | Bin 20942 -> 20942 bytes ...21e_Lucene50_0.tip => _5pb_Lucene50_0.tip} | Bin 915 -> 915 bytes .../data/index/_5pb_Lucene54_0.dvd | Bin 0 -> 94 bytes ...21f_Lucene54_0.dvm => _5pb_Lucene54_0.dvm} | Bin 240 -> 240 bytes .../data/index/{_21f.fdt => _5pc.fdt} | Bin 5345 -> 5345 bytes .../Test_Sigmah/data/index/_5pc.fdx | Bin 0 -> 84 bytes .../data/index/{_21f.fnm => _5pc.fnm} | Bin 1858 -> 1858 bytes .../Test_Sigmah/data/index/_5pc.nvd | Bin 0 -> 59 bytes .../data/index/{_21f.nvm => _5pc.nvm} | Bin 208 -> 208 bytes .../Test_Sigmah/data/index/_5pc.si | Bin 0 -> 523 bytes .../data/index/_5pc_Lucene50_0.doc | Bin 0 -> 110 bytes ...21f_Lucene50_0.pos => _5pc_Lucene50_0.pos} | Bin 3306 -> 3306 bytes ...21f_Lucene50_0.tim => _5pc_Lucene50_0.tim} | Bin 12836 -> 12836 bytes ...21f_Lucene50_0.tip => _5pc_Lucene50_0.tip} | Bin 650 -> 650 bytes .../data/index/_5pc_Lucene54_0.dvd | Bin 0 -> 94 bytes ...21g_Lucene54_0.dvm => _5pc_Lucene54_0.dvm} | Bin 240 -> 240 bytes .../data/index/{_21g.fdt => _5pd.fdt} | Bin 3565 -> 3565 bytes .../Test_Sigmah/data/index/_5pd.fdx | Bin 0 -> 84 bytes .../data/index/{_21g.fnm => _5pd.fnm} | Bin 1858 -> 1858 bytes .../Test_Sigmah/data/index/_5pd.nvd | Bin 0 -> 59 bytes .../data/index/{_21g.nvm => _5pd.nvm} | Bin 208 -> 208 bytes .../Test_Sigmah/data/index/_5pd.si | Bin 0 -> 523 bytes .../data/index/_5pd_Lucene50_0.doc | Bin 0 -> 110 bytes ...21g_Lucene50_0.pos => _5pd_Lucene50_0.pos} | Bin 2373 -> 2373 bytes ...21g_Lucene50_0.tim => _5pd_Lucene50_0.tim} | Bin 9688 -> 9688 bytes ...21g_Lucene50_0.tip => _5pd_Lucene50_0.tip} | Bin 564 -> 564 bytes .../data/index/_5pd_Lucene54_0.dvd | Bin 0 -> 94 bytes ...21h_Lucene54_0.dvm => _5pd_Lucene54_0.dvm} | Bin 240 -> 240 bytes .../data/index/{_21h.fdt => _5pe.fdt} | Bin 4576 -> 4576 bytes .../Test_Sigmah/data/index/_5pe.fdx | Bin 0 -> 84 bytes .../data/index/{_21h.fnm => _5pe.fnm} | Bin 1858 -> 1858 bytes .../Test_Sigmah/data/index/_5pe.nvd | Bin 0 -> 59 bytes .../data/index/{_21h.nvm => _5pe.nvm} | Bin 208 -> 208 bytes .../Test_Sigmah/data/index/_5pe.si | Bin 0 -> 523 bytes .../data/index/_5pe_Lucene50_0.doc | Bin 0 -> 110 bytes ...21h_Lucene50_0.pos => _5pe_Lucene50_0.pos} | Bin 2886 -> 2886 bytes ...21h_Lucene50_0.tim => _5pe_Lucene50_0.tim} | Bin 11039 -> 11039 bytes ...21h_Lucene50_0.tip => _5pe_Lucene50_0.tip} | Bin 578 -> 578 bytes .../data/index/_5pe_Lucene54_0.dvd | Bin 0 -> 94 bytes .../data/index/_5pe_Lucene54_0.dvm | Bin 0 -> 240 bytes .../data/index/{_21i.fdt => _5pf.fdt} | Bin 2938 -> 2938 bytes .../Test_Sigmah/data/index/_5pf.fdx | Bin 0 -> 84 bytes .../data/index/{_21i.fnm => _5pf.fnm} | Bin 1949 -> 1949 bytes .../Test_Sigmah/data/index/_5pf.nvd | Bin 0 -> 59 bytes .../data/index/{_21i.nvm => _5pf.nvm} | Bin 218 -> 218 bytes .../Test_Sigmah/data/index/_5pf.si | Bin 0 -> 523 bytes .../data/index/_5pf_Lucene50_0.doc | Bin 0 -> 110 bytes ...21i_Lucene50_0.pos => _5pf_Lucene50_0.pos} | Bin 1960 -> 1960 bytes ...21i_Lucene50_0.tim => _5pf_Lucene50_0.tim} | Bin 8707 -> 8707 bytes ...21i_Lucene50_0.tip => _5pf_Lucene50_0.tip} | Bin 569 -> 569 bytes .../data/index/_5pf_Lucene54_0.dvd | Bin 0 -> 94 bytes .../data/index/_5pf_Lucene54_0.dvm | Bin 0 -> 240 bytes .../data/index/{_21j.fdt => _5pg.fdt} | Bin 13622 -> 13622 bytes .../Test_Sigmah/data/index/_5pg.fdx | Bin 0 -> 84 bytes .../data/index/{_21k.fnm => _5pg.fnm} | Bin 1857 -> 1857 bytes .../Test_Sigmah/data/index/_5pg.nvd | Bin 0 -> 59 bytes .../data/index/{_21j.nvm => _5pg.nvm} | Bin 208 -> 208 bytes .../Test_Sigmah/data/index/_5pg.si | Bin 0 -> 523 bytes .../data/index/_5pg_Lucene50_0.doc | Bin 0 -> 110 bytes ...21j_Lucene50_0.pos => _5pg_Lucene50_0.pos} | Bin 8749 -> 8749 bytes ...21j_Lucene50_0.tim => _5pg_Lucene50_0.tim} | Bin 19117 -> 19117 bytes ...21j_Lucene50_0.tip => _5pg_Lucene50_0.tip} | Bin 893 -> 893 bytes .../data/index/_5pg_Lucene54_0.dvd | Bin 0 -> 94 bytes .../data/index/_5pg_Lucene54_0.dvm | Bin 0 -> 240 bytes .../data/index/{_21k.fdt => _5ph.fdt} | Bin 27218 -> 27218 bytes .../Test_Sigmah/data/index/_5ph.fdx | Bin 0 -> 85 bytes .../Test_Sigmah/data/index/_5ph.fnm | Bin 0 -> 1857 bytes .../Test_Sigmah/data/index/_5ph.nvd | Bin 0 -> 59 bytes .../Test_Sigmah/data/index/_5ph.nvm | Bin 0 -> 208 bytes .../Test_Sigmah/data/index/_5ph.si | Bin 0 -> 523 bytes .../data/index/_5ph_Lucene50_0.doc | Bin 0 -> 110 bytes ...21k_Lucene50_0.pos => _5ph_Lucene50_0.pos} | Bin 17512 -> 17512 bytes ...21k_Lucene50_0.tim => _5ph_Lucene50_0.tim} | Bin 28034 -> 28034 bytes ...21k_Lucene50_0.tip => _5ph_Lucene50_0.tip} | Bin 1120 -> 1120 bytes .../data/index/_5ph_Lucene54_0.dvd | Bin 0 -> 94 bytes .../data/index/_5ph_Lucene54_0.dvm | Bin 0 -> 240 bytes .../data/index/{_21l.fdt => _5pi.fdt} | Bin 1057 -> 1057 bytes .../Test_Sigmah/data/index/_5pi.fdx | Bin 0 -> 84 bytes .../data/index/{_21l.fnm => _5pi.fnm} | Bin 1766 -> 1766 bytes .../Test_Sigmah/data/index/_5pi.nvd | Bin 0 -> 59 bytes .../data/index/{_21l.nvm => _5pi.nvm} | Bin 198 -> 198 bytes .../Test_Sigmah/data/index/_5pi.si | Bin 0 -> 523 bytes .../data/index/_5pi_Lucene50_0.doc | Bin 0 -> 110 bytes ...21l_Lucene50_0.pos => _5pi_Lucene50_0.pos} | Bin 678 -> 678 bytes ...21l_Lucene50_0.tim => _5pi_Lucene50_0.tim} | Bin 2865 -> 2865 bytes ...21l_Lucene50_0.tip => _5pi_Lucene50_0.tip} | Bin 450 -> 450 bytes .../data/index/_5pi_Lucene54_0.dvd | Bin 0 -> 94 bytes .../data/index/_5pi_Lucene54_0.dvm | Bin 0 -> 240 bytes .../Test_Sigmah/data/index/segments_1yb | Bin 681 -> 0 bytes .../Test_Sigmah/data/index/segments_5cu | Bin 0 -> 745 bytes ...0000000002538 => tlog.0000000000000006949} | Bin 28899 -> 28899 bytes ...0000000002539 => tlog.0000000000000006950} | Bin 38477 -> 38477 bytes ...0000000002540 => tlog.0000000000000006951} | Bin 32648 -> 32648 bytes ...0000000002541 => tlog.0000000000000006952} | Bin 10293 -> 10293 bytes ...0000000002542 => tlog.0000000000000006953} | Bin 7747 -> 7747 bytes ...0000000002543 => tlog.0000000000000006954} | Bin 8605 -> 8605 bytes ...0000000002544 => tlog.0000000000000006955} | Bin 6491 -> 6491 bytes ...0000000002545 => tlog.0000000000000006956} | Bin 24200 -> 24200 bytes ...0000000002546 => tlog.0000000000000006957} | Bin 44563 -> 44563 bytes ...0000000002547 => tlog.0000000000000006958} | Bin 2718 -> 2718 bytes 213 files changed, 62 insertions(+), 74 deletions(-) delete mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_21d.dii delete mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_21d.dim delete mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_21d.fdx delete mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_21d.nvd delete mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_21d.nvm delete mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_21d.si delete mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_21d_Lucene50_0.doc delete mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_21d_Lucene50_0.pos delete mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_21d_Lucene50_0.tim delete mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_21d_Lucene50_0.tip delete mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_21d_Lucene54_0.dvd delete mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_21d_Lucene54_0.dvm delete mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_21e.fdx delete mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_21e.nvd delete mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_21e.si delete mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_21e_Lucene50_0.doc delete mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_21e_Lucene54_0.dvd delete mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_21f.fdx delete mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_21f.nvd delete mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_21f.si delete mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_21f_Lucene50_0.doc delete mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_21f_Lucene54_0.dvd delete mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_21g.fdx delete mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_21g.nvd delete mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_21g.si delete mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_21g_Lucene50_0.doc delete mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_21g_Lucene54_0.dvd delete mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_21h.fdx delete mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_21h.nvd delete mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_21h.si delete mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_21h_Lucene50_0.doc delete mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_21h_Lucene54_0.dvd delete mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_21i.fdx delete mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_21i.nvd delete mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_21i.si delete mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_21i_Lucene50_0.doc delete mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_21i_Lucene54_0.dvd delete mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_21i_Lucene54_0.dvm delete mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_21j.fdx delete mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_21j.nvd delete mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_21j.si delete mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_21j_Lucene50_0.doc delete mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_21j_Lucene54_0.dvd delete mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_21j_Lucene54_0.dvm delete mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_21k.fdx delete mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_21k.nvd delete mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_21k.si delete mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_21k_Lucene50_0.doc delete mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_21k_Lucene54_0.dvd delete mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_21k_Lucene54_0.dvm delete mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_21l.fdx delete mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_21l.nvd delete mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_21l.si delete mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_21l_Lucene50_0.doc delete mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_21l_Lucene54_0.dvd delete mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_21l_Lucene54_0.dvm create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_5p9.dii create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_5p9.dim rename src/main/resources/solr_config/Test_Sigmah/data/index/{_21d.fdt => _5p9.fdt} (57%) create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_5p9.fdx rename src/main/resources/solr_config/Test_Sigmah/data/index/{_21d.fnm => _5p9.fnm} (99%) create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_5p9.nvd create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_5p9.nvm create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_5p9.si create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_5p9_Lucene50_0.doc create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_5p9_Lucene50_0.pos create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_5p9_Lucene50_0.tim create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_5p9_Lucene50_0.tip create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_5p9_Lucene54_0.dvd create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_5p9_Lucene54_0.dvm create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_5pa.fdt create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_5pa.fdx rename src/main/resources/solr_config/Test_Sigmah/data/index/{_21e.fnm => _5pa.fnm} (93%) create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_5pa.nvd rename src/main/resources/solr_config/Test_Sigmah/data/index/{_21k.nvm => _5pa.nvm} (61%) create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_5pa.si create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_5pa_Lucene50_0.doc create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_5pa_Lucene50_0.pos create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_5pa_Lucene50_0.tim create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_5pa_Lucene50_0.tip create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_5pa_Lucene54_0.dvd rename src/main/resources/solr_config/Test_Sigmah/data/index/{_21e_Lucene54_0.dvm => _5pa_Lucene54_0.dvm} (53%) rename src/main/resources/solr_config/Test_Sigmah/data/index/{_21e.fdt => _5pb.fdt} (99%) create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_5pb.fdx rename src/main/resources/solr_config/Test_Sigmah/data/index/{_21j.fnm => _5pb.fnm} (93%) create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_5pb.nvd rename src/main/resources/solr_config/Test_Sigmah/data/index/{_21e.nvm => _5pb.nvm} (61%) create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_5pb.si create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_5pb_Lucene50_0.doc rename src/main/resources/solr_config/Test_Sigmah/data/index/{_21e_Lucene50_0.pos => _5pb_Lucene50_0.pos} (99%) rename src/main/resources/solr_config/Test_Sigmah/data/index/{_21e_Lucene50_0.tim => _5pb_Lucene50_0.tim} (99%) rename src/main/resources/solr_config/Test_Sigmah/data/index/{_21e_Lucene50_0.tip => _5pb_Lucene50_0.tip} (88%) create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_5pb_Lucene54_0.dvd rename src/main/resources/solr_config/Test_Sigmah/data/index/{_21f_Lucene54_0.dvm => _5pb_Lucene54_0.dvm} (53%) rename src/main/resources/solr_config/Test_Sigmah/data/index/{_21f.fdt => _5pc.fdt} (98%) create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_5pc.fdx rename src/main/resources/solr_config/Test_Sigmah/data/index/{_21f.fnm => _5pc.fnm} (93%) create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_5pc.nvd rename src/main/resources/solr_config/Test_Sigmah/data/index/{_21f.nvm => _5pc.nvm} (61%) create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_5pc.si create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_5pc_Lucene50_0.doc rename src/main/resources/solr_config/Test_Sigmah/data/index/{_21f_Lucene50_0.pos => _5pc_Lucene50_0.pos} (97%) rename src/main/resources/solr_config/Test_Sigmah/data/index/{_21f_Lucene50_0.tim => _5pc_Lucene50_0.tim} (98%) rename src/main/resources/solr_config/Test_Sigmah/data/index/{_21f_Lucene50_0.tip => _5pc_Lucene50_0.tip} (87%) create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_5pc_Lucene54_0.dvd rename src/main/resources/solr_config/Test_Sigmah/data/index/{_21g_Lucene54_0.dvm => _5pc_Lucene54_0.dvm} (53%) rename src/main/resources/solr_config/Test_Sigmah/data/index/{_21g.fdt => _5pd.fdt} (97%) create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_5pd.fdx rename src/main/resources/solr_config/Test_Sigmah/data/index/{_21g.fnm => _5pd.fnm} (93%) create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_5pd.nvd rename src/main/resources/solr_config/Test_Sigmah/data/index/{_21g.nvm => _5pd.nvm} (61%) create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_5pd.si create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_5pd_Lucene50_0.doc rename src/main/resources/solr_config/Test_Sigmah/data/index/{_21g_Lucene50_0.pos => _5pd_Lucene50_0.pos} (95%) rename src/main/resources/solr_config/Test_Sigmah/data/index/{_21g_Lucene50_0.tim => _5pd_Lucene50_0.tim} (97%) rename src/main/resources/solr_config/Test_Sigmah/data/index/{_21g_Lucene50_0.tip => _5pd_Lucene50_0.tip} (81%) create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_5pd_Lucene54_0.dvd rename src/main/resources/solr_config/Test_Sigmah/data/index/{_21h_Lucene54_0.dvm => _5pd_Lucene54_0.dvm} (53%) rename src/main/resources/solr_config/Test_Sigmah/data/index/{_21h.fdt => _5pe.fdt} (98%) create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_5pe.fdx rename src/main/resources/solr_config/Test_Sigmah/data/index/{_21h.fnm => _5pe.fnm} (93%) create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_5pe.nvd rename src/main/resources/solr_config/Test_Sigmah/data/index/{_21h.nvm => _5pe.nvm} (61%) create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_5pe.si create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_5pe_Lucene50_0.doc rename src/main/resources/solr_config/Test_Sigmah/data/index/{_21h_Lucene50_0.pos => _5pe_Lucene50_0.pos} (96%) rename src/main/resources/solr_config/Test_Sigmah/data/index/{_21h_Lucene50_0.tim => _5pe_Lucene50_0.tim} (98%) rename src/main/resources/solr_config/Test_Sigmah/data/index/{_21h_Lucene50_0.tip => _5pe_Lucene50_0.tip} (88%) create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_5pe_Lucene54_0.dvd create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_5pe_Lucene54_0.dvm rename src/main/resources/solr_config/Test_Sigmah/data/index/{_21i.fdt => _5pf.fdt} (97%) create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_5pf.fdx rename src/main/resources/solr_config/Test_Sigmah/data/index/{_21i.fnm => _5pf.fnm} (95%) create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_5pf.nvd rename src/main/resources/solr_config/Test_Sigmah/data/index/{_21i.nvm => _5pf.nvm} (58%) create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_5pf.si create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_5pf_Lucene50_0.doc rename src/main/resources/solr_config/Test_Sigmah/data/index/{_21i_Lucene50_0.pos => _5pf_Lucene50_0.pos} (96%) rename src/main/resources/solr_config/Test_Sigmah/data/index/{_21i_Lucene50_0.tim => _5pf_Lucene50_0.tim} (97%) rename src/main/resources/solr_config/Test_Sigmah/data/index/{_21i_Lucene50_0.tip => _5pf_Lucene50_0.tip} (89%) create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_5pf_Lucene54_0.dvd create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_5pf_Lucene54_0.dvm rename src/main/resources/solr_config/Test_Sigmah/data/index/{_21j.fdt => _5pg.fdt} (99%) create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_5pg.fdx rename src/main/resources/solr_config/Test_Sigmah/data/index/{_21k.fnm => _5pg.fnm} (93%) create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_5pg.nvd rename src/main/resources/solr_config/Test_Sigmah/data/index/{_21j.nvm => _5pg.nvm} (61%) create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_5pg.si create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_5pg_Lucene50_0.doc rename src/main/resources/solr_config/Test_Sigmah/data/index/{_21j_Lucene50_0.pos => _5pg_Lucene50_0.pos} (98%) rename src/main/resources/solr_config/Test_Sigmah/data/index/{_21j_Lucene50_0.tim => _5pg_Lucene50_0.tim} (98%) rename src/main/resources/solr_config/Test_Sigmah/data/index/{_21j_Lucene50_0.tip => _5pg_Lucene50_0.tip} (88%) create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_5pg_Lucene54_0.dvd create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_5pg_Lucene54_0.dvm rename src/main/resources/solr_config/Test_Sigmah/data/index/{_21k.fdt => _5ph.fdt} (99%) create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_5ph.fdx create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_5ph.fnm create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_5ph.nvd create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_5ph.nvm create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_5ph.si create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_5ph_Lucene50_0.doc rename src/main/resources/solr_config/Test_Sigmah/data/index/{_21k_Lucene50_0.pos => _5ph_Lucene50_0.pos} (99%) rename src/main/resources/solr_config/Test_Sigmah/data/index/{_21k_Lucene50_0.tim => _5ph_Lucene50_0.tim} (99%) rename src/main/resources/solr_config/Test_Sigmah/data/index/{_21k_Lucene50_0.tip => _5ph_Lucene50_0.tip} (94%) create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_5ph_Lucene54_0.dvd create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_5ph_Lucene54_0.dvm rename src/main/resources/solr_config/Test_Sigmah/data/index/{_21l.fdt => _5pi.fdt} (92%) create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_5pi.fdx rename src/main/resources/solr_config/Test_Sigmah/data/index/{_21l.fnm => _5pi.fnm} (94%) create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_5pi.nvd rename src/main/resources/solr_config/Test_Sigmah/data/index/{_21l.nvm => _5pi.nvm} (64%) create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_5pi.si create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_5pi_Lucene50_0.doc rename src/main/resources/solr_config/Test_Sigmah/data/index/{_21l_Lucene50_0.pos => _5pi_Lucene50_0.pos} (84%) rename src/main/resources/solr_config/Test_Sigmah/data/index/{_21l_Lucene50_0.tim => _5pi_Lucene50_0.tim} (93%) rename src/main/resources/solr_config/Test_Sigmah/data/index/{_21l_Lucene50_0.tip => _5pi_Lucene50_0.tip} (85%) create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_5pi_Lucene54_0.dvd create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/_5pi_Lucene54_0.dvm delete mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/segments_1yb create mode 100644 src/main/resources/solr_config/Test_Sigmah/data/index/segments_5cu rename src/main/resources/solr_config/Test_Sigmah/data/tlog/{tlog.0000000000000002538 => tlog.0000000000000006949} (99%) rename src/main/resources/solr_config/Test_Sigmah/data/tlog/{tlog.0000000000000002539 => tlog.0000000000000006950} (99%) rename src/main/resources/solr_config/Test_Sigmah/data/tlog/{tlog.0000000000000002540 => tlog.0000000000000006951} (99%) rename src/main/resources/solr_config/Test_Sigmah/data/tlog/{tlog.0000000000000002541 => tlog.0000000000000006952} (99%) rename src/main/resources/solr_config/Test_Sigmah/data/tlog/{tlog.0000000000000002542 => tlog.0000000000000006953} (98%) rename src/main/resources/solr_config/Test_Sigmah/data/tlog/{tlog.0000000000000002543 => tlog.0000000000000006954} (98%) rename src/main/resources/solr_config/Test_Sigmah/data/tlog/{tlog.0000000000000002544 => tlog.0000000000000006955} (98%) rename src/main/resources/solr_config/Test_Sigmah/data/tlog/{tlog.0000000000000002545 => tlog.0000000000000006956} (99%) rename src/main/resources/solr_config/Test_Sigmah/data/tlog/{tlog.0000000000000002546 => tlog.0000000000000006957} (99%) rename src/main/resources/solr_config/Test_Sigmah/data/tlog/{tlog.0000000000000002547 => tlog.0000000000000006958} (93%) diff --git a/pom.xml b/pom.xml index 1bad1d68e..5ef3da5cb 100644 --- a/pom.xml +++ b/pom.xml @@ -253,12 +253,6 @@ ABQIAAAAaKyZGjYsJ9quclBfsnGc-xRxtna0S6DNUYSvLTUdQl9eB6x9_xQH4P0V3CSFEY_MypecLWSdS3Q8IQ - - - - - Test_Sigmah - http://localhost:8983/solr/${solr.core.name} diff --git a/src/main/java/org/sigmah/client/search/SearchService.java b/src/main/java/org/sigmah/client/search/SearchService.java index 279e8ec9b..e55c1a6ef 100644 --- a/src/main/java/org/sigmah/client/search/SearchService.java +++ b/src/main/java/org/sigmah/client/search/SearchService.java @@ -33,7 +33,7 @@ * Interface used by the client side for calling search related methods using GWT's * async callbacks. {@link SearchServiceAsync} is the associated Async interface * - * @author + * @author Aditya Adhikary (aditya15007@iiitd.ac.in) * */ @RemoteServiceRelativePath("search") diff --git a/src/main/java/org/sigmah/client/search/SearchServiceAsync.java b/src/main/java/org/sigmah/client/search/SearchServiceAsync.java index dc2e5170f..20a210e52 100644 --- a/src/main/java/org/sigmah/client/search/SearchServiceAsync.java +++ b/src/main/java/org/sigmah/client/search/SearchServiceAsync.java @@ -33,7 +33,7 @@ * Async interface on the client side which is implemented by * {@link SearchServiceImpl} on the server side. * - * @author + * @author Aditya Adhikary (aditya15007@iiitd.ac.in) */ public interface SearchServiceAsync { diff --git a/src/main/java/org/sigmah/client/ui/presenter/DashboardPresenter.java b/src/main/java/org/sigmah/client/ui/presenter/DashboardPresenter.java index 0e6167555..14cea0653 100644 --- a/src/main/java/org/sigmah/client/ui/presenter/DashboardPresenter.java +++ b/src/main/java/org/sigmah/client/ui/presenter/DashboardPresenter.java @@ -76,6 +76,7 @@ import com.extjs.gxt.ui.client.store.ListStore; import com.extjs.gxt.ui.client.widget.Component; import com.google.gwt.core.client.GWT; +import com.google.gwt.user.client.Timer; import com.google.gwt.user.client.rpc.AsyncCallback; import com.google.gwt.user.client.ui.AbstractImagePrototype; import com.google.inject.ImplementedBy; @@ -270,21 +271,29 @@ public void handleEvent(OfflineEvent event) { initializeMenuButtons(event.getState()); } }); - - - searchService.updateCore(auth().getOrganizationSolrCoreUrl(), new AsyncCallback() { - public void onFailure(Throwable caught) { - N10N.error("Error connecting to Solr", "Solr Server connection is not available."); - caught.printStackTrace(); - } - public void onSuccess(Boolean result) { - Boolean dih_success = result; - if (!dih_success) { - N10N.error("Error connecting to Solr", "Solr Server connection is not available."); + Timer t = new Timer() { + @Override + public void run() { + if (ProfileUtils.isGranted(auth(), GlobalPermissionEnum.SEARCH)) { + searchService.updateCore(auth().getOrganizationSolrCoreUrl(), new AsyncCallback() { + public void onFailure(Throwable caught) { + N10N.error("Error connecting to Solr", "Solr Server connection is not available."); + caught.printStackTrace(); + } + + public void onSuccess(Boolean result) { + Boolean dih_success = result; + if (!dih_success) { + N10N.error("Error connecting to Solr", "Solr Server connection is not available."); + } + } + }); } } - }); + }; + + t.schedule(8000); } diff --git a/src/main/java/org/sigmah/client/ui/presenter/SearchResultsPresenter.java b/src/main/java/org/sigmah/client/ui/presenter/SearchResultsPresenter.java index 392c04899..d6a9b8b45 100644 --- a/src/main/java/org/sigmah/client/ui/presenter/SearchResultsPresenter.java +++ b/src/main/java/org/sigmah/client/ui/presenter/SearchResultsPresenter.java @@ -45,7 +45,7 @@ * Search Results page presenter for rendering the results of different types * of search results such as projects, org units, contacts and files * - * @author + * @author Aditya Adhikary (aditya15007@iiitd.ac.in) * */ @@ -165,6 +165,7 @@ public void onSuccess(Boolean result) { @Override public void onProgress(double progress, double speed) { + //do nothing } @Override @@ -174,6 +175,7 @@ public void onFailure(Cause cause) { @Override public void onLoad(String result) { + //do nothing } }); } else { diff --git a/src/main/java/org/sigmah/client/ui/presenter/admin/ParametersAdminPresenter.java b/src/main/java/org/sigmah/client/ui/presenter/admin/ParametersAdminPresenter.java index 4d0cc484a..85551187f 100644 --- a/src/main/java/org/sigmah/client/ui/presenter/admin/ParametersAdminPresenter.java +++ b/src/main/java/org/sigmah/client/ui/presenter/admin/ParametersAdminPresenter.java @@ -715,7 +715,7 @@ public void onCommandSuccess(final OrganizationDTO result) { searchService.updateCore(solrCoreUrl, new AsyncCallback() { public void onFailure(Throwable caught) { N10N.error("Failed to update Solr Core!", - "Check that the url entered is valid!"); + "Check that the url entered is valid. Also check that the Solr Server is running!"); caught.printStackTrace(); } @@ -726,11 +726,11 @@ public void onSuccess(Boolean result) { "You can now carry out search."); } else { N10N.error("Failed to update Solr Core!", - "Check that the url entered is valid!"); + "Check that the url entered is valid! Also check that the Solr Server is running!"); } } }); - + } }, view.getSolrSaveConfigButton()); } diff --git a/src/main/java/org/sigmah/client/ui/presenter/zone/MenuBannerPresenter.java b/src/main/java/org/sigmah/client/ui/presenter/zone/MenuBannerPresenter.java index 9c6e7170a..c7a70da27 100644 --- a/src/main/java/org/sigmah/client/ui/presenter/zone/MenuBannerPresenter.java +++ b/src/main/java/org/sigmah/client/ui/presenter/zone/MenuBannerPresenter.java @@ -218,12 +218,10 @@ public void onZoneRequest(final ZoneRequest zoneRequest) { // Simple page request: add a new tab. if (tabTitle == null) { - //Window.alert("Gubi tabtitle/header is null"); addTab(request); } // Page request + title: tab title update. else { - //Window.alert("Gubi tabtitle/header is not null, it is " + tabTitle ); view.getTabBar().updateTitle(new MenuTabId(request), tabTitle); } @@ -279,25 +277,20 @@ private void addTab(final PageRequest request) { searchTabTitle = request.getData(RequestParameter.TITLE); request.getPage().setTitle(searchTabTitle); tab.setTitle(searchTabTitle); - //Window.alert("Search Results title is " + tab.getTitle()); } // Adds the tab. view.getTabBar().addTab(tab); - //Window.alert("Added tab!"); requests.put(tab.getId(), new PageRequest(request)); // Important: create a new instance. if(request.getPage()==Page.SEARCH_RESULTS){ view.getTabBar().updateTitle(tab.getId(), "\""+ searchTabTitle + "\""); - //Window.alert("Updated search tab title!"); }else{ // Sets the first title. final String pageTitle = Page.getTitle(request.getPage()); - //Window.alert("pageTitle is " + pageTitle ); final String tabTitle = ClientUtils.isNotBlank(pageTitle) && !PropertyName.isErrorKey(pageTitle) ? pageTitle : I18N.CONSTANTS.loading(); view.getTabBar().updateTitle(tab.getId(), tabTitle); } - //Window.alert("tabTitle is " + tabTitle ); } @@ -338,7 +331,6 @@ public boolean equals(Object obj) { // Compares parameters maps sizes. if (equals) { - //Window.alert("Found some existing tab!"); equals &= params.size() == other.params.size(); } diff --git a/src/main/java/org/sigmah/client/ui/presenter/zone/SearchPresenter.java b/src/main/java/org/sigmah/client/ui/presenter/zone/SearchPresenter.java index 9a11a2a0a..b3225f91a 100644 --- a/src/main/java/org/sigmah/client/ui/presenter/zone/SearchPresenter.java +++ b/src/main/java/org/sigmah/client/ui/presenter/zone/SearchPresenter.java @@ -79,7 +79,7 @@ /** * Search presenter displaying the search bar and associated widgets. * - * @author + * @author Aditya Adhikary (aditya15007@iiitd.ac.in) */ @Singleton @@ -152,23 +152,21 @@ public void handleEvent(ButtonEvent be) { @Override public void componentKeyUp(ComponentEvent event) { - if (event.getKeyCode() == KeyCodes.KEY_ENTER) { - if (view.getSearchTextField().getValue() != null - && view.getSearchTextField().getValue().length() > 0) { + if (event.getKeyCode() == KeyCodes.KEY_ENTER && view.getSearchTextField().getValue() != null + && view.getSearchTextField().getValue().length() > 0) { - textToServer = view.getSearchTextField().getValue(); - view.getSearchTextField().clear(); - int sel_ind = view.getSearchOptionsComboBox().getSelectedIndex(); - filter = view.getNewSearchOptions().get(sel_ind); - search(); + textToServer = view.getSearchTextField().getValue(); + view.getSearchTextField().clear(); + int sel_ind = view.getSearchOptionsComboBox().getSelectedIndex(); + filter = view.getNewSearchOptions().get(sel_ind); + search(); - } } } }); - //have put a timer because it takes quite some time for auth() to load, if I did this - //without a timer it would give a null pointer exception for auth() + // have put a timer because it takes quite some time for auth() to load, + // if I did this without a timer it would give a null pointer exception for auth() Timer t = new Timer() { @Override public void run() { @@ -178,7 +176,7 @@ public void run() { } }; - t.schedule(8000); //8s delay + t.schedule(8000); // 8s delay } @@ -309,7 +307,7 @@ public void onCommandSuccess(final ListResult result) { }); } - public void doPageRequest() { + private void doPageRequest() { if (searchResults != null && searchResults.size() > 0) { PageRequest request = new PageRequest(Page.SEARCH_RESULTS); request.addData(RequestParameter.TITLE, textToServer); @@ -390,7 +388,7 @@ public static Map toMap(String jsonStr) { */ @Override public void onZoneRequest(ZoneRequest zoneRequest) { - + //do nothing } } diff --git a/src/main/java/org/sigmah/client/ui/view/SearchResultsView.java b/src/main/java/org/sigmah/client/ui/view/SearchResultsView.java index ff61b9b2b..bdc28e78a 100644 --- a/src/main/java/org/sigmah/client/ui/view/SearchResultsView.java +++ b/src/main/java/org/sigmah/client/ui/view/SearchResultsView.java @@ -59,14 +59,13 @@ import com.extjs.gxt.ui.client.widget.layout.FitLayout; import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.event.dom.client.ClickHandler; -import com.google.gwt.user.client.Window; import com.google.gwt.user.client.ui.AbstractImagePrototype; import com.google.gwt.user.client.ui.HTML; /** * Search Results view. A new view opens up for every search query. * - * @author + * @author Aditya Adhikary (aditya15007@iiitd.ac.in) * */ @@ -114,6 +113,7 @@ public void setFileClickHandler(final FilesResultsClickHandler handler) { */ @Override public void initialize() { + //for initializing the view } public ContentPanel getSearchResultsPanel() { diff --git a/src/main/java/org/sigmah/client/ui/view/zone/SearchView.java b/src/main/java/org/sigmah/client/ui/view/zone/SearchView.java index d98f1fe26..d92fde26b 100644 --- a/src/main/java/org/sigmah/client/ui/view/zone/SearchView.java +++ b/src/main/java/org/sigmah/client/ui/view/zone/SearchView.java @@ -42,7 +42,7 @@ /** * Search view - A set of widgets for the search bar. * - * @author + * @author Aditya Adhikary (aditya15007@iiitd.ac.in) */ public class SearchView extends AbstractView implements SearchPresenter.View { diff --git a/src/main/java/org/sigmah/server/dao/impl/FileHibernateDAO.java b/src/main/java/org/sigmah/server/dao/impl/FileHibernateDAO.java index 8fea63ede..bdf2a7d45 100644 --- a/src/main/java/org/sigmah/server/dao/impl/FileHibernateDAO.java +++ b/src/main/java/org/sigmah/server/dao/impl/FileHibernateDAO.java @@ -138,7 +138,7 @@ public List findAllVersions() { final TypedQuery query = em().createQuery(request, FileVersion.class); res = query.getResultList(); } catch (RuntimeException e) { - System.out.println("Here's an error!" + em()); + System.out.println("Runtime error while executing Hibernate query!"); e.printStackTrace(); } return res; diff --git a/src/main/java/org/sigmah/server/search/FilesSolrManager.java b/src/main/java/org/sigmah/server/search/FilesSolrManager.java index 7101b0ef1..b4f7c2f3d 100644 --- a/src/main/java/org/sigmah/server/search/FilesSolrManager.java +++ b/src/main/java/org/sigmah/server/search/FilesSolrManager.java @@ -29,7 +29,7 @@ /** * Implemented by {@link FilesSolrManagerImpl}. * - * @author + * @author Aditya Adhikary (aditya15007@iiitd.ac.in) */ public interface FilesSolrManager { diff --git a/src/main/java/org/sigmah/server/search/FilesSolrManagerHandler.java b/src/main/java/org/sigmah/server/search/FilesSolrManagerHandler.java index 04ee74fa0..947181c86 100644 --- a/src/main/java/org/sigmah/server/search/FilesSolrManagerHandler.java +++ b/src/main/java/org/sigmah/server/search/FilesSolrManagerHandler.java @@ -37,7 +37,7 @@ * Handler for command {@link FilesSolrIndexCommand} to execute a manual * indexing of files command from the client side * - * @author + * @author Aditya Adhikary (aditya15007@iiitd.ac.in) */ public class FilesSolrManagerHandler extends AbstractCommandHandler{ diff --git a/src/main/java/org/sigmah/server/search/FilesSolrManagerImpl.java b/src/main/java/org/sigmah/server/search/FilesSolrManagerImpl.java index 30b5302e2..88977d78d 100644 --- a/src/main/java/org/sigmah/server/search/FilesSolrManagerImpl.java +++ b/src/main/java/org/sigmah/server/search/FilesSolrManagerImpl.java @@ -42,7 +42,7 @@ * Implementation of {@link FilesSolrManager} job to execute Solr Full Data Import and * import of files.Necessary for updating search index. * - * @author + * @author Aditya Adhikary (aditya15007@iiitd.ac.in) */ public class FilesSolrManagerImpl implements FilesSolrManager { diff --git a/src/main/java/org/sigmah/server/search/SearchServiceImpl.java b/src/main/java/org/sigmah/server/search/SearchServiceImpl.java index dca77423a..e2a60e7be 100644 --- a/src/main/java/org/sigmah/server/search/SearchServiceImpl.java +++ b/src/main/java/org/sigmah/server/search/SearchServiceImpl.java @@ -32,7 +32,7 @@ * Implementation of {@link SearchService} Contains implementations of async methods * required for search * - * @author + * @author Aditya Adhikary (aditya15007@iiitd.ac.in) */ @SuppressWarnings("serial") public class SearchServiceImpl extends RemoteServiceServlet implements SearchService{ diff --git a/src/main/java/org/sigmah/server/search/SolrIndexJob.java b/src/main/java/org/sigmah/server/search/SolrIndexJob.java index d06812a9c..2a2ff5616 100644 --- a/src/main/java/org/sigmah/server/search/SolrIndexJob.java +++ b/src/main/java/org/sigmah/server/search/SolrIndexJob.java @@ -38,7 +38,7 @@ * Scheduled (in {@link SolrIndexJobActivator}) job to execute Solr Full Data Import and * import of files.Necessary for updating search index. * - * @author + * @author Aditya Adhikary (aditya15007@iiitd.ac.in) */ public class SolrIndexJob implements Job{ diff --git a/src/main/java/org/sigmah/server/search/SolrIndexJobActivator.java b/src/main/java/org/sigmah/server/search/SolrIndexJobActivator.java index 16d105706..39f4da49a 100644 --- a/src/main/java/org/sigmah/server/search/SolrIndexJobActivator.java +++ b/src/main/java/org/sigmah/server/search/SolrIndexJobActivator.java @@ -38,7 +38,7 @@ /** * Schedules jobs link{SolrIndexJob} * Executes every 10 minutes - * @author + * @author Aditya Adhikary (aditya15007@iiitd.ac.in) * */ diff --git a/src/main/java/org/sigmah/server/search/SolrSearcher.java b/src/main/java/org/sigmah/server/search/SolrSearcher.java index 39613b341..eeb967996 100644 --- a/src/main/java/org/sigmah/server/search/SolrSearcher.java +++ b/src/main/java/org/sigmah/server/search/SolrSearcher.java @@ -43,7 +43,7 @@ * Contains essential methods like search and dataimport which are called by * {@link SearchServiceImpl} * - * @author + * @author Aditya Adhikary (aditya15007@iiitd.ac.in) */ public class SolrSearcher { @@ -152,9 +152,6 @@ else if ("OrgUnits".equals(filter)){ if (rsp != null) { Gson gson = new Gson(); Iterator iter = rsp.getResults().iterator(); - //rsp.get - //rsp.getHighlighting().get("ORG_UNIT_1637").get("org_unit_model_name").get(0); //returns highlighted string - //how do i send it from back-end to front end, very hard while (iter.hasNext()) { SearchResultsDTO descriptor = new SearchResultsDTO(); SolrDocument resultDoc = (SolrDocument) iter.next(); diff --git a/src/main/java/org/sigmah/shared/command/FilesSolrIndexCommand.java b/src/main/java/org/sigmah/shared/command/FilesSolrIndexCommand.java index 497ac8d88..983f28af0 100644 --- a/src/main/java/org/sigmah/shared/command/FilesSolrIndexCommand.java +++ b/src/main/java/org/sigmah/shared/command/FilesSolrIndexCommand.java @@ -28,7 +28,7 @@ /** * Command used by client side to execute indexing of files * - * @author + * @author Aditya Adhikary (aditya15007@iiitd.ac.in) */ public class FilesSolrIndexCommand extends AbstractCommand{ diff --git a/src/main/java/org/sigmah/shared/dto/search/FilesSolrIndexDTO.java b/src/main/java/org/sigmah/shared/dto/search/FilesSolrIndexDTO.java index 5cbe982ea..f7d23ccc9 100644 --- a/src/main/java/org/sigmah/shared/dto/search/FilesSolrIndexDTO.java +++ b/src/main/java/org/sigmah/shared/dto/search/FilesSolrIndexDTO.java @@ -27,7 +27,7 @@ /** * Dto with a boolean specifying success or failure of files indexing * - * @author + * @author Aditya Adhikary (aditya15007@iiitd.ac.in) */ public class FilesSolrIndexDTO implements DTO{ diff --git a/src/main/java/org/sigmah/shared/dto/search/SearchResultsDTO.java b/src/main/java/org/sigmah/shared/dto/search/SearchResultsDTO.java index 349f74485..d699447b3 100644 --- a/src/main/java/org/sigmah/shared/dto/search/SearchResultsDTO.java +++ b/src/main/java/org/sigmah/shared/dto/search/SearchResultsDTO.java @@ -28,7 +28,7 @@ /** * DTO used to transfer the results of a search query as a simple JSON string. * - * @author + * @author Aditya Adhikary (aditya15007@iiitd.ac.in) */ public class SearchResultsDTO extends AbstractModelDataEntityDTO implements Serializable { diff --git a/src/main/resources/sigmah.properties b/src/main/resources/sigmah.properties index 2bea503c6..697c83fae 100644 --- a/src/main/resources/sigmah.properties +++ b/src/main/resources/sigmah.properties @@ -62,8 +62,4 @@ mail.optimisation.jsonfile.name=sigmah_performance_brut_report.json # -- # MAPS API # -- -maps.key=${maps.key} -# -- -# SOLR -# -- -solr.core.url=${solr.core.url} \ No newline at end of file +maps.key=${maps.key} \ No newline at end of file diff --git a/src/main/resources/solr_config/Test_Sigmah/conf/dataimport.properties b/src/main/resources/solr_config/Test_Sigmah/conf/dataimport.properties index 9ded00a69..3adedc90e 100644 --- a/src/main/resources/solr_config/Test_Sigmah/conf/dataimport.properties +++ b/src/main/resources/solr_config/Test_Sigmah/conf/dataimport.properties @@ -1,7 +1,7 @@ -#Sat Aug 05 10:07:47 UTC 2017 -project.last_index_time=2017-08-05 10\:07\:46 +#Mon Aug 21 19:21:16 UTC 2017 +project.last_index_time=2017-08-21 19\:21\:12 userlogin.last_index_time=2017-05-14 19\:28\:44 -last_index_time=2017-08-05 10\:07\:46 -contact.last_index_time=2017-08-05 10\:07\:46 -org_unit.last_index_time=2017-08-05 10\:07\:46 +last_index_time=2017-08-21 19\:21\:12 +contact.last_index_time=2017-08-21 19\:21\:13 +org_unit.last_index_time=2017-08-21 19\:21\:13 country.last_index_time=2017-05-14 19\:50\:19 diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_21d.dii b/src/main/resources/solr_config/Test_Sigmah/data/index/_21d.dii deleted file mode 100644 index 7f3586c01d91862d9dea82180c4e2023f406215c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 87 zcmcD&o+B>dQ<|KbmuhAZke``XQtXyrl$%)Mn_7~{00gFYa_V@VazBpzTU&Bz+oW0s mcEJMSSxlm5nGBz?DmJr7bu+7MVLhNR`2|Qd2z+VRn+yP6?H!x| diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_21d.dim b/src/main/resources/solr_config/Test_Sigmah/data/index/_21d.dim deleted file mode 100644 index 92753f6e17e662b91f84cf405d3a02635a3a74df..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 795 zcmZ8fT}TvB7(Mrn>x{EbHWj!O!KOV}AxM!0D-E;Wq|Ap6f;M8IDFh|c$cZ9Uwn*|J z+NkiQAAB$fdPt~EtO567ANIk(LduPxC;}fPAA0HUyE830eef|b-*@gg_nd3J>#L7- zoj=vx-`(1h8tCnJ2RjDNopD^@xDKdxf9M;j{Tlsp?B}ri=J~B*s4-w2U;uT%dSDH( z7BH187?ONbGKGV8ucMvsUulBuPUZgO5meeDJ|%fb(8*Oy)fl0Y5<}lkxudFVr%4P7 z&4CC|?K2Re=@Sx_3TQrm4WI*2pq7OA{E2Aeuh|LF6~8GC=UPO@Iw1y+j|umET3i@i z7DMCnVkBP@qva)W?MJDN&CGQyTfDgWb)nc$pS2b5>GzVCpBwXDU0Dn%HGQQCc{(Yz z<=iy+9mY|^H2Px|UI_dSLAVd`2bBfR`7AfEfvqZuPCs6FFcC%@KH48t77T-b<9gr? zxf0kzPLLn}oCs{F-pW7k6`9K=;XH$IUe1f$jRPV#9;3@{FHaSBob0i=m%o(trXyNN zwH{nl;)&Omb6w|Cip+%a4#K81DEQS81({Gp^ep}p)6DjLoJ1=>z3VDu?_m#*o<%}q z85i;Pd$6_@AyV;Buk@tR#-=v{7MIS-w)sr&5M+l02gx)`4k=j9DVaxA3=PuSMC03q dPho4>-z;fRSzwHpBZa2hOY+6b+Hx`SnQ<|KbmuhMdT#{dun&Ot3nv+uOmRMZknU|7U!N9=4XnH57j^`=&0Zu{98EB9Y9YW#~NWAf1 zu#-5GCuQTA`TSy!qwMi}d3bPopJvzD^5|@{y}CPDRjUQG{45{#zxTe*e|Oc}%j0g5 zrt2G}4Swl@ww`WHlwIU`ehH5@6d6Y(Lq%9Bg}9vHg}@BD)D6)DuSq)t5sPo}j0!s! zqM6`(<+hiJC%pc~QB^e?(l-Y0A+&!r)63!%5F6v5G8_t|(Ie6@z|3k3DY#8Dyrk!I zB&;|v7~`+{!I@&$!|j4QY-jEq>?`Uj!-I~uYaQmsv;Q5&sji}U)0r+iKC&&RdqDLw z0pLPyf_Aw~d_aqAC7;&^fk|;&S5-}rbzQqmd;k)f>p!frRF+C%#9os+Nxb l7cV&;WO-2(C4W8Sq&{8amR?1l7vEp=ugTMowRujGk3Y?xmQ<|KbmuhP4mtT}y?3-GWn37nM$N&VUcXH}@o^n5q{99XcY1^b)21Z7Z zFc4@n!C28OFjhA=jI~<=#(J#;Wid)C!&u&`Fjlo1jI~-F#=5NuWifH#@g)&W4(5QvRI^@VJvS~7^~V1##-$TW8L$T%Jq=GiR9vyHh%#r9z$8ie&TXa|bsJvhP z+?toC`&(Oc=InM8U>E$Y7NvHNnTW@g8$7~bLL=Ru}82BsIV)ymm1s z&Bj`4s$yXnr@4Odzh`1Tr)8`{>ZW#;^z7o$NL56zY|SQdRvMrIV7=9<5A1vt3l|bg zZ7?4$A|Il**J`%BHuRU~0}l~E7|Vbd@eK3@uO(EFjo60)1Vn~2HS3!z$rRa01fy9K z!-kU%WSj#trA%54rOrsgcqxsj+0>)Vo)k9od_6k^O1g|jM0cg)*Z?jGE$?@F7eVj5 T(>ZjWw;w*U58yao-;W!AEMT?% diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_21d_Lucene50_0.doc b/src/main/resources/solr_config/Test_Sigmah/data/index/_21d_Lucene50_0.doc deleted file mode 100644 index b4ac3cadd3e38928334d145ad49c0d87cf376ae7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13282 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
=eh8e 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�Xed5-zEmjESj40z=@rJQ=|v^_zJ(>i~` zkc!H8SIY3VAj!+|F>X-B!5GiH;bXPm`O_SCfIOMO*4ZUY5_94~0)EIM=HXfEDE7VZ z6!RgCo*OQ;-s7Iy0gi@(rAvidJw=cJCSO}@G6!2#bXmXo@A0|tEDx--eN`&i#~&oP zb$OhVsuLHKDlUlm4p#V5l~G4)(=(`KBxt@LCPxy%WHF(|tW@krI*&`ZCrs&2_<$A7 zxti~TVhh%?Kf)11>=+N~zSi+34I3j+MxnfpSxVjRVuimDN(HyravhO}hFWNfwd;j9 zfV}g(PmB7j{!9P3{&jzoD>S%Jghp~3b9YhsUVsni_$-{j&B95qM8>sU`_}@8GoYbe zM%sBTen4-xAKjA-kFk;IA`g9?b{Th^k3Sb3rRW!H6hg zC*{JBNkI`CY4!L6mkB`#)iKjf(<6>qX^6aEHB~h=HFY%&HBB`wHElH=7MEuI-zE8) zWi{A|SwF~zoiar$s_kLrfD3F_de~c?ezp7LiBxA`0*^(=@Gfj)U?;(bGifMDD0P~9 zoHO10p6g(>XJs_rdr4P>yQ@E_|LI>-Fp7dBD6%Y@1+!2MfPtDjU*T-N*duNx?NEz| z@y(~cRg=PMR%g!KV{gCn2)*H-J~J?Xy0Zi^==z*5!MiJUh#1>v{UB&ib!t3xUL~Kt z^ho&~R`ga_E~FODR%DKfS5oKHV?6#=H zjg=E=QhX6)d8SXh-MSC@Q!j#Vt9mdK5+zivn_m!H+e6;>|pP@XS5bp5?3Q1^0-h*xB-lx)DwQte8U=fbsTInm#XJ zfq+d=W&QlK;{C80>(tFZ202<{lFHAQZhrRf@Qv|a+{?{Td_7ufXMrmSNy~~OJ7cQx zc973I2gvAslk`}(rq=g~1(WEfvL}U+$rPoYZ^U{vDRHG_4D(^#1wP3asREB}$EP9k zf(bQt(T#jId&rs$xZ#tSlbB4n*~tG;fhh{8OWYz{!Tu&F8)y#Qu#hwlZ?=Ni)yyo$|wl~8SXn1TwWl+ok*``_Do)7!X% ziTE4CjdXx%GZ&SB0l#`K0)FA^qL;mRb*rJRkS}=e4;{(3|?Gls6em=5_eb*7w?g6 zcSs_m1_+-?L?t;7wOS}09^Wq<1ym)f!8(WFJP%938sO1iGULoO{3_6rh?cb6&G2qb=7LtnytN~^CN@Q7hiKfu{6602W|Lw-DevCZ0 z+MoZ4FclX$ajTbc31Qe;ygL6#9$zn7n4BCHvIRJybZa zfVWe)X#LR?phH2IJ3nX~9^=Y$$y>WTuY9-0qsntYnMlySE`1G%(v>> zJR-i{B4&i8v1B6}<^*^FB4{;<}H2d33^cy6*DJ?yph z5ZN}*4koj#9d~)EY>$Ts_a`^ClVPJiZ1&qp?_~MPPQAtYm2P{#*CCNq-UD$BwZbFu zafU7CZb1NGuq8M{LJ({~J)Y|DOW_ya!&=6ivvLw_`4l<^p)>&?oznWzBI=5OWFi4T0~W$_CLb^cyDwYM4@9l7I4MBwSWa3 zU!D|cZufs3P(nyGe!#eUAA5)6rf++T<39D*U+C`t=)ZQyKYi#<-b4uM{cxx6yXwyW z^Gm&_E8f%9Ev@xPhL-lI@L9g+F=$%;aY2hhpmv#U+g6qlomFz5ZS%zZlX@CH4EIH^ zWpCGxyvDuhwQC&Dva*__dKVmIZDPV1U>xCwb02e$`lET4qF?#=10Va($Q-7Mu&6`> z1H29TXKm4qi>B}pLslLP5i73Y#*9Dcxr?uUuDkrIhurM@Z*^B+e%?L!`_t~>?`@eQ z@2D0Wby}q(eC0>MQJR*IkOI@A@)15cp2LZ@ar@C^ezFEN4}coq$?;@z<)lIZy^#~y zd~{_>VP6s*p$e6bR?}-~aCFcLRKam{Y>v-SBSbMRF~k`QRz}Ap3k1gm$B$VOdr&^M z|1CO39t6ic8ifrFprqZxwg=nvS<0QlE; zuJPS7qON<3C+7C*1Pz4KG=FlRhY>u&l3EtAb+$o@BW-|^Mv*_Xe&TYN5A3w!thv;r26mE$;^ zP^Undsz2vA7H6JYL-F%zjl8)tcX;+M6X)0}d9+(C za;vx4DwTGtsctpLtxj{R^KF%0Z>y#uTV)4q)i%kkPO??|n{72AW2;H$wJX8K{LTDo zMHZ9zNX1%k{B4i5#@d)INdaU@W9HF>Rm?<2u~&O(|ErbeGni0-L6I6@60Q$h4G2{N;^(@(d_14a<-5E>qClh6Ri5ZpRK@xFmRBsKPPOdm#XDHLrX*@uwC|%8 z@?zM^R8sVe&|7--30Ho=Z$YVd&1;Z8l{`#R)7V-kfPpKGUDe-#qKer&VV-5O!jfg) zS)cK}k{Ie?SFu|SW`zb9ogwTh=V)~=>J>?y=PmQRWuCXp^U`$kp`Gj~d)>mScR`@< zf=J&5r@joG9)^9TEZjQBx}nrVbgy)?U*Wq-o)70S@kNMFK73cHFq|bXbaRBjtRMAJ z7Wrq!@xzQv1eAv;&lL39ivy;iNjPI)YFBvCAdfvB+x+<3)r2zge+x<`+U$* z>L}c=7+q&hpd(7yL@ND@zvQZyY8`93QCy#lV+aD9}L8L zChKIifp#uGu5Z0+1At5wzTJ7fAoVB{`;@| z<^}Faog$ZbjS~h_2sV*H;3Wh=BbGQS)HEB8*-UeqoN$Ddz-oK^4{n4^*x*F%{yy@y z7yb3g|MT%$ubG%HVKR({iFwxJWS>k!qWr~<Ynd%2qoy@lzX>0$5n^%B%4Te7AvcUb&R`}Gc)`b$ zwp0W-_ONwNIQTdQ5c0yZ$n01|><;E_4DW*G5F0_{t_hdwLTwab$ayXxTdr6pS{L4V z;tMxp`N*RiXuJjTq?IT?vQjYLv*S^6=;aDCZUs>R3gvu-Xn3FYm*9T(ogThBa=6^q z4m`8_G$d$Bz-W$ivWk{871|2-fz)07`HA1VMFJAKTxvT#@;O{1V~(~haVExLZJ+j~ldipuA$axbDYb|v#FkrrKsM4#_G5#uG96Tp zP8J+%I+h_}jmY>K{h&PK5#*ot*+66OJvg3j9LgA49Md0|;dD#Dgfr@kIW)G6jv~$x ztP^@#+-l1~(VE^KhYT$~r4cP|2Qdz?HE3}Rs8j5Mow)%rH<+p+2jYI^AlysIlUBxS zYK#pwO6cf;mS3Z3ZCYA#6nz=xVYeJZ-0uJFNiTd1q0xIG3rdJiYvC?7q!`LHdK5rD zmqCV`DG_u|J+e%GhmW9mt5lAGs7TG-lB zoaxDPvD6m>%%urAgEEL`CNXuXJJq&m*yZ;fWhcv0T8Ej}U;5fx{?<<}BOfS-QH;W!@!qnZWV&E7s&4a1bB4Z7Ce&au!qPuM zfHerUR6*)A*KREN9&_CcvDq9ct|o(gez)1(D0}{XAawVAV*cm;-sCdPx&>r0ZcN4H zS^}5TY?(^W3feN77IB>hPOvj2M7z}F%M=Z61~krA#U16-rLhD2q$f-VSbMF}yX&srW0= z!dhHUmWtLE;TH+H72@TLEsHLc5r!69PLqNmKNM3Y)HtdGp;1)V=U2VRwi~a-oR|ZTye@|d)9+gbS5_yirQcL2D zFoLB%=kW!P-ot>d&Voz5NMew26sf=<(#FRbN~&S0B{A9aaH?XBIVg2PJQ=ckJVj^& zgsPm}mS6gxsE<7_q$3jbi{(%sX!i7CV^1SF}*CPLo-1x}!Re)>|*+ z-9Vl0du09-clxXDQNxS8c$=%B@+pmj+FspLW1>2P2K#UhDKwchI!5Bz;DB;BR33Hi z*tB7tu=K0Xn!YI>F{b5fvL&m<&^B8^9yfqSZb9N`Yh@T*?6%1V%4X(~?fxn$t#)GtG}$gLVHOAM1n`g(!}N;FNxE69lMHhDYg zMp8zw)Z~$M!>Bm5rT!b@RWO7zA6fYQNFPN=JS~S+gR3;SXKw^V^Q|-fkxeIO;_$-8 zY+1Z>73YWP(=XdsK=l5^Lceq-^teE1Mv9`WYIVbCUes39P$Ebf@H-rIblkz9r&tEZ z4NK<^{B+?D{z>Yo2}+qMaG{?hUQXZ}-ef*Ig=(HP-%#UlEQJeRW{UX<@LxGwbybj( z`Eq=wbUJDwVkmI_f`@QAc-a)_R|o$*-;@m=o@c@8kRsQJf3BB%zTFM{`E{Q-^?UbI zLHigx$ld`-iT*6LqNya`S7aTZQ|mjp^2;GkOB^HgGnxiD9D#AraxOAQq^JFoiFhHO z!Nt8i)N@e%Rx%j+M?dpM@ss@#;wfgR9~hH2ezNdtEm2s&aHN`b>|_j>hlX1sc5+JQ zR>Z5u9US|p5n*ny6&E|XC1NMDHg>YsvSnT@F0>VESJ;gSZ8A31ZY=tE_u%8TpIvzS z*ZlZN#Ov4{@FZX^+9T{+K1qQh=H{LLTe9deJYxiBeCd z83itDkal)Vj6IqM?!ga?Xv;i;=H<`*U$(GH={~cCRZEds=sjp;ZPR^=zw{l1N*Dkv z>1dlX@1TN1+NpMzAsAOw>y5DE-GU2Kqa_lIsH+9%AYUtGX^ttb9O7Nmc)5v2+f-eu znw1$QHx^u&3k)tCFz)#BNx+R1;6?!Oo~XMK99TZZs^K&MsV#mXb2wCZf&#lg*UD&H z-+L=>SoGYt{O}-g9m1v)En6}&uF+Q>4k4(PN?}b!Q*A_G>-;mDqn;|;$cH7nNK9p| z@R$CpN&r?Yl=TWX-Vd@yd?^e`aoxp>mwswtUy;BX$To@ii@&+(nFmO9v%;kE);O9{ zTn~yK=5hp&o@{pyj93I*v`j-sm0YB}F}v#lzjb&lF`e-COrQ?S(`cCBHruLkRwJ8} zvLDC6oLTZXCZ?PELPem6TNsL@Eis*q)|(UZ(dG$wxW?+$ z$xSKD9?6qy!b90ZlTMNrOI_b7YDy1&Xy$dlcU~_pYWoQ34e^t%(Rp7Cn-@o&NE{KH zm;KmITwWwYmQa`xjEq<6gfsts>BCRz`SH=<>Fh209+eLXMep0a%+-9um5#_O0Z2wN zyya_YR64okPbHhhJB-DPi*AyS94%iR+-^d?j0EPSC%YAHqvPG;G{6ycN#o4X6Sxw? z%}}1uW1?~=9Pf6q9$PtvnI2q$BptO*998{mg{=|RtF!4|+8LZxXU_J#cgeGlN^F*g zI7{r+l#ITWcjyUFUt`)KwG(~E)lm$}P;qk&AQOeULBPzJ1{S@KCeX@cDsed1GdIw2 z!E*ti=JmvS9b_J39h5MJ3$f)VhLC}<6&VA2e$^~YYZ%H1pHLi56qXF%6mhVFAsl3f zFuPYs1$?dWv?6wu!rpL-%p|x?E^i=1xicFOKd6bC| zXt&>VcVU*Eb;YXFxMsdM7#!r**6>>Y z%ug_66vieoOMKtHP=9yA{c8M99zRUAAq(W;$EG~E^zo}TDyN0ZSiMx% z?@J*2j?32FJ?_^PGzC?VXN0*EJB01B=azopX#~u;0i^}ruPS0EVex*onK=?QkToqk zldimzhh~l;ozM_1F=ofGI16Vlx-{5lwl7ZPzl&JkQ}MteksVcm5q3$&VAc3>?(LSxIm^<(F~ciBJu&`%$(NK)w;S>bt}ssT9x1&( zbKQFF3!``N;bm7mi$JprDE1Z&2RVw+>!)Y!MCgTRT{V>-@oafPP^yFezJ*rg|ed3AVI5MQCT40OF>d~#4!>J z4@Znw`GzAd`9it0^CcxHE~6#gmX<0*qYKlZjj-gL@RIKO_e4N0vYO zGwXEo%qCdP<{>XeQ&f2)A)q&Mwl*ozlF}Wsx(2m~wX8GwGSy1E+$=n5wgYx0BiJcy$fD{ab*xGT^^&S4)^0EdA<;f?P^F1DGpbOiugD1*XCV_N zlWmTn3$cV~IYh90wHdk(E`QfADATSoP^v1QT9pVx7xtkJWr`uLs~pCX5I$ByBU#?O z&!hXGT@d!cMKHsQ|J7#bDmaV)y5rGvPpGvtHmXS>RJ%m3*HXp$2)DK+$M^zvZv1Gz z_g4L4`3HYVHL0|8m7)d!*$mTx+#tviuKILc!BA%Gyt#?BLx@n>LKP?U+{|*S(YXtr z;DiH<&3$pm-1#)7k*Fep?G=?f7LXz<6O&TQo2 zF8uh4>whB|@EkM|Xp5oZwV9sLbOr#L*dg&_t;Ns~Dd#a_2oB0`y4cB$?(ek!CE=1O zW#p;POD5socgB^!R#u`}3&46H-h_+%=%uH~J6pv!E+aFWqpk6qE!iw%Dpe@^se|H- z(fXQ8Pb$0vN6DGIYb0C(awJ+H;mTpfJN^qeJ>Rtp3D*#~`-OTtM;Xtkw+bV?7vk+n z&#bupZ5SKMI9$YAes+@aWeA+KT@mfJ>}aE>0OLzC~t6kCf%Af-;C7n{M7Z&Z`z&=`*XiucNKZ3$>CqU}-k&{jh+C}nHSPiSDO zwx@O14_0nRjaRne%@3q5PHLc@?hs1@+G+%jgm-nd0>$}W@3R*eAM;#Nn) zYGHgFx{82{EEUtN3ME+38%oa>ATILS(2gP#4sRtc5`dRYgRpW4Th&5@bpd>}76{YU zL|e%aY-gmuhEg?&MLgg5-gv$>rQqzVR$l#f;=d!O>eZ?*oy-!=@hR*Gc(oJE_Z`Yn zq>(n}p-_wnO7^@9k<%c#2P&IkX& z5MmXQv{tQ})KPJ@cFTPv#J>NmNB@E_GR#V8K37sTogykmjB}~hRmduR5l>~+mY_AV zMDw6=aaWi#6A803A+|`6_aUbIh03<_(;OdNvmiP;|GT z*PVE)C6q~$h@z%Mt+%(v@?eHQ^Fw^AqKKBj+^^iEV@uw@>WA+Mr0OeCdB+cy(T$mP zx&uajWw1y={82EdJE=7JDxpbC<}4jC^^|`FBy(VRuZCOQEr@hn_~H{-?Qq9_XRC)MaLec#HyMik2K|xPpDK#v?et-6=p{%u^OTY6Yc4l*3`Q>6vzJb z{9}LN?TL%Z^zJK&L_MYva=ItPY4PT>e|1fe*lG`uImd#FW(epUf+%(LxS1FdQfwHT z2;D(X5CZU|ZUAB+_W$jRfY13voP_ zLAqkc*$-XsDhWzJT+#S>BobHo!ZyquUMdFN6_*jraIHxu6r2Zo6x#?ksFo7m=~oF^ zeqaHd1Vq8ZXdDov;h*-E+<2NMmL=8k*qG|k*4UV?DmLQ>#$LEWe|9D3;8q(?_1$&O zLpKG4A5aCu7)7!rO}s>er$(I02jOM^FUc359x8xkfDM=5yjCKWT-ixc6Eps8yVg!A z!R!vY)^L#X9)1xx$O8+3{FP4^15bGyAk|Z#T3Icw3I4`OD?MZ+N!BuHIOE!L9{&*e zOcl8lq$uMd#)Lx6qyCNufYgwfOyFF*Mk1)^2>`N$q1Y$@@{38ouO)&!{_X)C3lf)Q ztf;0o!O(t5M=}xa0&!fn6WZ<3qd>~q5YJ^dntQNA3Co}^wz1IU( z%8nSeIb-ogiRHb%ZN%(~Fr*yWm;fi59Wiio3LFsIhHlo1K5Ph^Q4D!4F3A#}h90a| z*pMaYvQFRw2aK+fwj9GbOTa$*zbO$af=zcP_Xvx8d3?y#B*!?IXjkNwqiuX?3?$m} zysHwZGIfqVnugFfn!n!q{Ob4LsJ_@PBx%*PR$Z7GzY;-%j1flKp*$=}W$SUN_W{)< zR%1lgYaA7C(r!ZfCYt!3oAAyY_J;zT{I}QLeJi|iq#C3haFUT&o|pqk0*n}NQX{*P z1@%G=I4LuB4%G$X#Ik4LqBSbl``n-0Ce4QAHYeN$+N2(> zMw@iaFDEGvm{20xWW4n_X72Wgn>>JoNux`iFv^yEaa>6+cKY9+`-P8_3rKK{E14>s zSV%5#G)Z|}scXebuswp4hQYy(CdnY44)b<2$t6U9 z<}W2I&G?dyz(xX&j9ugXL?b^cU{5qG%&kn@8XXjprpK#me1>Amae)sZ|)LiJ;3JpcO3@8FS9 z>wxry@}+M*7qx`Gh9<0}I5KrYM_*V2T(B}z>f}dawsTU1ejGA!(pv-lXxzsGiF*Wr z?yMH|L_EUys7I&lMOre?YpBOFeth2d?~?wjIVJ>zloImzNR`=2PPA?b3Y##G&R{)# zVo2^$C63fkI5>?0noJBzdh@O$bzW`EGTAD?Q=nZ zA;tj$I_?8d@s+_QUieZ-lB(-SHBgJS3Q%i}#wltlTXoFhTW?-->AiuNlTH&O_nG)3 z=Hx`v$SlQ33i%LNO(^E1OC2@RfP_-22Dq;!Z$@+dkp{wfv``#&n8u^n=N)f{d?ifd zYyZplen&8kFNw~0GSW0f*M&ACx01gl1lI^j)<$QvbEr#qVl$rg(>0HN+4W&G4lco%w&AYD8@4}vvq&g zU!->43B-t$Lkt2`vD83}LU7Y_W>g;Qb)}F}MyVlRrHelD`VW5^^Jpq0C65N%Nf{^M z1_mR;rU;(5(leG0WHZZ|VJ6;2KN9IvF)ii3J`l!i*lJ$eN+Uub*%f5`v{(3mA5?$S zdVmOw-*0vV#yWkm!(@OQ_JO|0S*Jd5-aU6JuW^A@;(n;8BNk3l`H^ELfL+;(zJDSH zcarSO1TQ|+{JRQX^v_Yo+6VCB$IgHBZn6Y^vNA)a?X&UR#8f%l#{Ff_;|6P!hhB1G zdKTbC#j8NzZfRLbPLM7M5IQA27zHn033%~y2O7Lsym`&f{~_@Iis`~p3Kjqv2uu|FSzq-7@dG7i^U>Dq2(x#5j2GoK&BRH0CCC##7uaTEh2(Si%3q0Lb618 z&{BYyXNiJK9}HNhV?9AaE&ie(toyU%{^T?62mWCr{P5Jsx0pwXchH631?Pwa$-Sc% zUv-S30&Z|vt^S2O-f-VH=zuj+9KFm6O;{X(Tt#uD>Saq5M}bo9O%X-9^%f32ASp}u zB;Jk5Rw{Apxyh>Rh!1(AjK(h{#{o3HXgVVuYrT}d9>Lal8FP_z<$*$f_H7qlY6Woi zl#i+)(K*MAbE;F^IU%hOJgMnY35z$5(i49-n2C|qgogg97$SQ%H+n-Ih#sxU-slw( z6PIki@R}2zh<)C?ACsnzmpCpc5ir(1gA#WG zN!$s37*P+qYmh^!hOV;R331r3&XY9@ULvQNH)q$s{D&9b_W)TnHk})9T27Xwh7hVSw&-2-&0hsF;VXhAtWyY2^|Q)5 z{Db2Q?wu$&1|itU3S3pME?u=rhKydSB+XA_log2mJN;U+C>fZZ@y@J3u9Vfph8ucz zJSh#2WZ)jIVIixV6N_|L-qts!IdakNV-6E|h>VS#iWfF72ne7=6mAB{cfkZwDcR^J zfWX+9clv%V1(_(9F+5QMJQ1G)pAsMVF&$leU9Pav%?21a7I`fSA)uce%Tk!@40By! zt{mpN!(1iE-|+yX!S8>=^NWdMM=n+D$d}kChQ(Z_m>2l5SV$BLrLb5|70ZzJiruMV z1p-~MCoJ}c#s08ZO%*{*E)Q#+W+{1bKB}H&`hXD};bgo1S!`I8E>2H{o^n59*t*9cAkr^ zic7rBXGrfu#@rA^iIaIVcEsJh`5*L!+v&*hDe%#DS6Iq*ceAK;`K8Wu3C)+VIyjjD z8+2rz032i7kc^>_jDBY>0HGLwP}~dFa5qT929)9a

WGJ;-N@uO~V2sgW7o9>bK9 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 diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_21d_Lucene50_0.tip b/src/main/resources/solr_config/Test_Sigmah/data/index/_21d_Lucene50_0.tip deleted file mode 100644 index 00ed948b22b1780428a3626edb24e6640d3f8fc1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3670 zcmZ{nSxi({7{~9q=PomMwma;1EWt^d(gz=0z@;xXeP~kChbEdP?Mq`}fYD*V0jzzn zsiTZS6%=p-g}Py(6%12nEL2WCwd@hGo!Cco^=V?|jSup6?gf z{L~ce|Ai?bYUehK!LZF>iBI~<9BtS`Q524BH~pe~sc?NayEnPfk+oO&Iwi_rHbk!e zVfAKm41c+G8wq16q}9||6s|bgKO3=YJtMo2DN=d-8J>#Jtmf8nk=#b|9l>qjBnKTC zq`E_|mQa2GOGi>L#hw`H)#E!h>6T-OkVr&U#2TtGwiR~;S^OzeWXb)=4d#*q?nkaW9UCQyd~hu#*dPh)O8$N$>59KujN?Li=Nzfb zch6z7Cz(5;=Zoz#BAIQR|7pd7viQkQ72@5};-mKmI)@+Z$0>Rrna*Iy9DIE>pX`;< zjF`Pk=reH*2FxFOq)PIQb{|C5T8xhlfnK${$-Vqq$(oWwb^KxYm-r*}F zD_dknOi2ZAT%LrhFd{rY&c{h^7rmwtm+-V1VV9GSmFBHMGZw`W3v<>$;|IM$j6O*} zZ$pf{G@d;jP2*D)f{-R6#Ua#J!~dxNMAw%R*k)0WnuUWVb~J`Xg$4fG_0sYVV&v#R7v3a!3;Pt?^79lO zAuZJK=4F1{h>Qi?I>{$5KM;YZ*U($-^0m??$#Y1j>D{Dwxt^I_hgaE^YxJJqEfaAE z*}mY9RxV#)M%GY=$<3hNl^boaTnWleR#+|v<>nKh-1-ETr$G66E+A{gH%Y3?MxkH> zTM@x%E*=yq7u(HJvdJm3lk%H&gg5db2iZn>cRr2}l}{BD(#YHE$mR?73^!?tVv&&V zBBT*&`w3};*)nocQJ?Fk%Y_)Ecs5SxqCDI|VwKn3bYUhFk@AlL!WC7fl{~9*dk9lh zwn`6865TXWRkabCsIx~1Nz|$NI9XE7I0!*hqXb=&YQRd!!LcjV|7DR{>bo6;9O|L5 z_n1*_M4I#ph#Bg)05i~a^?0!lGf3zT1jOQsnv1f$3EL3ttrlqWwRSAo$} zaD&r#plI>v5GbDlhZplY!03Fiq*wrAN-TH?Cb`fL$`|42OI9%Y3S6?Z1dP540#kIr zNt_Tc8PN&8dGUG~Sh50q^WrVo*n4wek}9~t`#oTEE&ML);ZEvdPa0tdo8Y(e*a3FZ z3~qz?6qZ}yzFR*a!xy=&9PFgs2FlOjDPO?Gy5I}Z1IxX4z>=?Ezx(UJ=mGe$O~NJT zKu@&$V0l02iS_{Ki8d9yv07U()VDSrylmR^F);dYIw&8@0_7~wDs6U#CwjvKpD8Pp z-H<(&4altW)AFnGYI(h;S2L$MF8(Fn6(JI}yS3BWEWaYZTYgXdhWt|f z&-mN@ANqItPxxmB6b9S~cpNYgU=2JScr~y(up{tI;NhSPLFGXWL9c?|2Av4L5_~VX zEqEk2E#&tQXGmSh%aECnY^hkfEj^Q7OE%qE-QT(zU6*cBcXa;07S-ijpJu=E{^d?l Jac7_8{10K1Tp<7e diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_21d_Lucene54_0.dvd b/src/main/resources/solr_config/Test_Sigmah/data/index/_21d_Lucene54_0.dvd deleted file mode 100644 index 5a204aa07cf54acdbbb1a767e7e6de19388f9fb2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1914 zcmc(f%TE(g6o+TpPI;Bb^dTb8p*%`?&7C{XmDaWtOle6eB`&lfP)Q6yqY#M+%9f?N zFmdI^P1(6HF)@)p!MJhbf@n5`bxdS^O!?j=PRxbQAI-#zDd&bghr=Uo1@(HTl_ zua-7Tik!H!T3FfGF5OS8Y^^Y8DW5kU`M$M$y?(O0_3_Qq-Da#TipSM)SaY7CPlLH@3jCdkTEGPQX;G5|-VY@+~I4ZwndV%xm0l}GnX#{5l{>%Rw&jeHVCVbI3$wCAXdXz$Yrl3(Q5^w1PDW!up$yx zDLoYnfZ}K*mE=(X$)iFiRuVNQrvw0DiR6?Z$th`?j`Qn^lhS}Hwi>F6IvDjM>S5Hx z!BC*1&DYexxfmAps+;3H9u9RnYIW4>sM*o-p*s}_1t+Jb`-ev&W6|-^f$-3vFu~AM zp|{T(2R+?At%9rV-wd))eihX-$kh)nw&uDER(`^Oo?e8EG6WjucwQm#R?1PISA z}v-9(d i`Pm)fb%;7fY4g@S%N{M4uhayGk!Rnr^yd2~H+};@j5N^z diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_21d_Lucene54_0.dvm b/src/main/resources/solr_config/Test_Sigmah/data/index/_21d_Lucene54_0.dvm deleted file mode 100644 index c9db62314402ce3551a78425a8f5b31a0f7ac4ac..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4106 zcmZ{nd2Cfh6o=>Dckg`*Z7FCe(AJg$q0)t0p$opsd#^kjTZ+^KC|i|^m0d_ELH4r6 znwZj{Xy7HCE>Pp62&cy|5qOSF7pZZ{R_31CS ztoBLkmu$v#VZqyI0t?t~^dz=WM;iw=5sei@b12ch!JrPC=2Bj#K{eC%peJ#LI@%&| zCsChDG zdfvXaqp73*4yK+9d3Du8M*dyzKyCov1>Xk|w}nMLC8Uq8mQh^xF#RDKjj_wN9d{w= zTpAYzhc^+^`EG=q&SMbFz<9<-_i2=>0a0`|Cl>^JBaK^9q7AUa%N! zAx?zd$C%d)-ivj{Ta#^KDcQ9yBY&+QapGZUeZ2CHXmq)l7H{`uk2IHas~B_bA+@U+ zd`L8+z(jBaI3BD3{~(&b5v{pIPk%57J|KE=SA7>{v?V?jE$*3C)+5?-n(f*Reg}3E zjb2~^m<5)CGr(I!vx8{OA$sD$0C=D1MHYM)WV9QiRJ0q&MtieIw3BGW^(pub2(N~h zWMcrB0b>8gG|0%Qd4pu@RiY;jdbIOeiel16pD6 z2X6_EefCb8V9AF&CMx%1`$oF(QY=>@nd!xksg;UhGofqlH2>hvueNi~{%~nZy~7ta zb0=J`2+VZ2WO}W`>ht_vbN#YSw;ir(XmPmaP_x5LZPy*XabL&#zT#VPSra6VSTHIIZa>xxZ2TrsA_pIU7KDTr)>Cq(eyfQqXn9dhDqj% zetJJmlV1^UG<@iFWMF(Ai?P2#Ig{|BRE;yP_G3)W#e}OW3WRFL#q05rC0x-ivNZ92 z%#2tB!-9WDmcVs1vw2Z?bO|%tmJ0mXF@po-*_lCjFY0=BLg$)HBd%TGw;*bwfp=>R zB)yRdjsvHIxbNmolC9Z956^{Yo-yD(q8C-scU~rB`9OIt=5n$z*NStQviHok?NX7T zCq$BFcw{=(V*EXME}g*^Qi;DZAKQ2ZmN~+NZR%X4(LOvn{)G3z=%6w}T{0V!lvC6$ z^Ms9;Op_RkIZeHopFsQ;jQJVzS@0a#3bujg!3*F;@Dg}g?*7sfDsvb!+f~S9Y_=z> zh*1O08#eA7ned2Thv%I#8Fy2Z=euy!3D0tSX6GQ~88yu^Y@Du`qxpyESMvqK73-QE zR(|2=!rybHs-JoPm?W+YUHPe|Zikf9We~93D31iCf7-M(ScNfbsEse8 zkhIJ(zw8jqoj-D;VBXI1#e#mVqS|4~*sTr&Po8ubE=zHEXU-JCg2T>@mt{c<9htjI zCc_G*MY`OWH>(JFVYnk!QM!t-2sWi%YqX;qOe5;oa04vmx67KHp}gQlSqpo3LCs+E zX*OF3FIBi97B7N0QmYnYbv?Yuk8UAZXq&;)(#!5_wd>vRvY+poe*(^)xgr%$sg?Fa zbtv+G3u$DEG`Ug<>D7wIAgh&IMk=o@@OsupSn#QyIm?1(oZRxYQ7Z0hnB5^y3$|8A zj#{AuHh=b5LFTynQ<|KbmuhMdT#{dun&Ot3nv+uOmRMZknU|7U!N9=4XnH57j^`=&kQ<|KbmuhP4mtT}y?2=fL$N&VUcXH}@o^n5q{99XcY1^bah65UtUw|Y) JVD9~xQUHTT6=47X diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_21e.si b/src/main/resources/solr_config/Test_Sigmah/data/index/_21e.si deleted file mode 100644 index 2b3f21daadd5fbcd4b0c552d8ff9771dfe05a3be..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 523 zcmZXRO-sWt9L77Lo9i|eCwSDOmxZ?WMNfjdfiO_07f+=&=~iiyk)&e??nCHz@Ehpa z&)~(2coD%bA)3AkV}U^Od;b3?Pm-gzWV<^|Lqw2cdT4|Z5oaW#ilWr)_hjDwYJFb) z+=9X$(yq{Y-S!@1bEUhY~46CUB}(m9k<=}O#}JG z3)z;h131O283UwRM5H7U6bt3LET2%m#6&zPEFw5t5DR~}z%mm^!zCsIH}V`juJXXz tP8n491Z4;gVw6BWpbQ5BU<#3T-1jbh@1oy7RbKWUzKf4kl-rM|$3NGGquKxf diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_21e_Lucene50_0.doc b/src/main/resources/solr_config/Test_Sigmah/data/index/_21e_Lucene50_0.doc deleted file mode 100644 index 12fb510cd44a4d0e9c8ed72da9ada750fbcf86d6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 110 zcmcD&o+B>lQ<|KbmuhMdkY8MqnU`K1UX)pqTI7wh=DQOv5Ir#$`lV5<$00AreH$MQc CLmqmQ<|KbmuhO_lAj!wm{Xcs?2=fL$N&VUcXH}@o^n5q{99XcY1^baE||)A f12<0}*LY(~BU6w%5C=pb(3t!JM1#QLnQ<|KbmuhMdT#{dun&Ot3nv+uOmRMZknU|7U!N9=4XnH57j^`=&x>fUjS8sfm{BaHUQ!T8#4d^ diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_21f.nvd b/src/main/resources/solr_config/Test_Sigmah/data/index/_21f.nvd deleted file mode 100644 index a57d9948332cddcb576ac9d2502e545571f436be..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 59 zcmcD&o+B>kQ<|KbmuhP4mtT}y?2=fL$N&VUcXH}@o^n5q{99XcY1^a*h65UtUw|Y) JU~<%hcmRT?6+!?2 diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_21f.si b/src/main/resources/solr_config/Test_Sigmah/data/index/_21f.si deleted file mode 100644 index 873114ef1c89bd2c59230f84d97fc6c08490c58a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 523 zcmZWmO-sWt8195_uG>_c;8BlW7TVgb^CYMn3 z7cbsK@K1=Q9}~s`fj7_le7s4H-{alxBn=QjebYr#jEESMkSdB&vp?ed_E+ok`sYr( zy*xcgOsUJQ=7n6fUu}(YbrO+u-n#WOA7qF?%C^s$AH-(CY?d&V!lI*@Hjr@d#xOSGVyHz&?E@R=4a$Mff|=@L*td2HHA{(zFj^2h|K_<% zozs*BNDbqZ&ors7g0?JR0lnuqy{Wu8i-KnE!G({Lj$!M@k?Hgu>u_MTyPj!;Uim_{ z<>>%scnQ;Uj0P*1G+eV}b~1FYJojQaJX2l|p1;eFR1|xB`S=G3%A%M6 diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_21f_Lucene50_0.doc b/src/main/resources/solr_config/Test_Sigmah/data/index/_21f_Lucene50_0.doc deleted file mode 100644 index 05fdf7d5510a0dd42ba947254be39827b9265331..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 110 zcmcD&o+B>lQ<|KbmuhMdkY8MqnU`K1UX)pqTI7wh=DQOv5Ir#$`lV5<$00Ga}>9qi` Ccpg9i diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_21f_Lucene54_0.dvd b/src/main/resources/solr_config/Test_Sigmah/data/index/_21f_Lucene54_0.dvd deleted file mode 100644 index 7e91c9cf8bce1471da64b1f091ee85dc0361a0d3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 94 zcmcD&o+B>mQ<|KbmuhO_lAj!wm{Xcs?2=fL$N&VUcXH}@o^n5q{99XcY1^a*E||)A f12<0}*LY(~BMXo^5C=pb(3t!JM1#P-DdmCy2yq=h diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_21g.fdx b/src/main/resources/solr_config/Test_Sigmah/data/index/_21g.fdx deleted file mode 100644 index f976af6c85df4f053f2408b10de10e8cddb1fca8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 84 zcmcD&o+B>nQ<|KbmuhMdT#{dun&Ot3nv+uOmRMZknU|7U!N9=4XnH57j^`=&r;*UjS8sL2LD~l>p;I8;bw{ diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_21g.nvd b/src/main/resources/solr_config/Test_Sigmah/data/index/_21g.nvd deleted file mode 100644 index e9619badbb7eeccf2cfb05ca92d62069e6518987..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 59 zcmcD&o+B>kQ<|KbmuhP4mtT}y?2=fL$N&VUcXH}@o^n5q{99XcY1^bGh65UtUw|Y) JVETH4BmjbZ6z~85 diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_21g.si b/src/main/resources/solr_config/Test_Sigmah/data/index/_21g.si deleted file mode 100644 index d3e61b769f6f5cefd46d87a8394a0d4b9581a3f3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 523 zcmZuuPfNov9PNZ|uG>_c;8BlW7TVfB?j)!i2t$Q>@l;}yZIw1DNm_Q%gLg0b8T<;K z{S02bcoV@dA)2!Hq{n2{A z__`J^PxrSHQ|fZ7c_CNrTU(-B9fc&FwXR?WL52yUZ2gqMAi~>+lqHlw5mM5g(~QeQ z(*S!w_l;d+wS;3SEEvtSfrNXPhOrVAp(;jofDQBplQ<|KbmuhMdkY8MqnU`K1UX)pqTI7wh=DQOv5Ir#$`lV5<$0D&!0?Ee9< CtsXuA diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_21g_Lucene54_0.dvd b/src/main/resources/solr_config/Test_Sigmah/data/index/_21g_Lucene54_0.dvd deleted file mode 100644 index cbb85e082919269b6654c5cf694dc1d7aca99d40..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 94 zcmcD&o+B>mQ<|KbmuhO_lAj!wm{Xcs?2=fL$N&VUcXH}@o^n5q{99XcY1^bGE||)A f12<0}*LY(~V*`*n5C=pb(3t!JM1w%Pfb9|h1;8BG diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_21h.fdx b/src/main/resources/solr_config/Test_Sigmah/data/index/_21h.fdx deleted file mode 100644 index c700bf7790129051739dbbe5dc79186fc4602ebf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 84 zcmcD&o+B>nQ<|KbmuhMdT#{dun&Ot3nv+uOmRMZknU|7U!N9=4XnH57j^`=& diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_21h.nvd b/src/main/resources/solr_config/Test_Sigmah/data/index/_21h.nvd deleted file mode 100644 index 13d68b5cfeeea96e9920668dfd084e5b83a3efde..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 59 zcmcD&o+B>kQ<|KbmuhP4mtT}y?2=fL$N&VUcXH}@o^n5q{99XcY1^b0h65UtUw|Y) JVAe(lRRDsO6v_Yq diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_21h.si b/src/main/resources/solr_config/Test_Sigmah/data/index/_21h.si deleted file mode 100644 index 527394c4f835032eb8edbb2fb1362215984f9e6c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 523 zcmZWm!Aiq08195_uIp5s;8BlW7TVgb^CYMn2m^(B@lTz^Cx+ zGkEdhO$1*;G;LR*7zq6T_kI7DFUj#+yxW_kAtGpCd1!_a5$9w|6-8+{@A19<+4;Es zz7wy{%Lj=mO}W*)kgM^dtx>K{B9bmTw?P(w3=v4#_5};V810`@mQWUmh!TB8GcKF9 z35LM%%|mmugs~hf7|n8kg!?z9xe*tkDn=au2N*5NLBPVf8ellEcZzA25)olk3A=yh zxl5DNl!Zv0#wnj`a(Z>pmJMuR^j)_t;2yoIh9m71b+=1&j&QS09mO1y! z7jg{W03u4(a|}%3qDI=1gc&SJlHrw#R0R|@dG3`^UdiDlQ<|KbmuhMdkY8MqnU`K1UX)pqTI7wh=DQOv5Ir#$`lV5<$0D;UO3oHP# CKptfP diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_21h_Lucene54_0.dvd b/src/main/resources/solr_config/Test_Sigmah/data/index/_21h_Lucene54_0.dvd deleted file mode 100644 index befafdbf94059f7374110acbda7da9ea50bb32ec..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 94 zcmcD&o+B>mQ<|KbmuhO_lAj!wm{Xcs?2=fL$N&VUcXH}@o^n5q{99XcY1^b0E||)A f12<0}*LY(~V`Gpy5C=pb(3t!JM1#P?H`km13q>AE diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_21i.fdx b/src/main/resources/solr_config/Test_Sigmah/data/index/_21i.fdx deleted file mode 100644 index 29b75b9914f80688210decd8ee650555ef3c2078..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 84 zcmcD&o+B>nQ<|KbmuhMdT#{dun&Ot3nv+uOmRMZknU|7U!N9=4XnH57j^`=&%^DUjS8s!S^*g!vN+&8`=N> diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_21i.nvd b/src/main/resources/solr_config/Test_Sigmah/data/index/_21i.nvd deleted file mode 100644 index b234a41f4f1eb41fa7a0e37c52bff7f045a6cae0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 59 zcmcD&o+B>kQ<|KbmuhP4mtT}y?2=fL$N&VUcXH}@o^n5q{99XcY1^bWh65UtUw|Y) JV4lka2>^l>6s7d`;8BlWx+F0l^(3e*2nB_B@f2cqTO--svbzcOP>=oqJ@`*N zd-dwYi#HMc6QY|hLF&T7%zN|R%^)gop^Es<88G zp1IUHO<0K3ah&i=O{&XAYZkD8-gDjFL~hQau$g&q5#VXZuyte4bRE~x-F|!7H;o98 z6c@pmQ~?y-jPi@evn^i-Fok6moc%-MKbS5BQ_3rU*vK34XrV|%(*+FDZ~>DW)V9iL rbWc!*;4nfl=l-+!NJV*gzMlU8&EBKB diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_21i_Lucene50_0.doc b/src/main/resources/solr_config/Test_Sigmah/data/index/_21i_Lucene50_0.doc deleted file mode 100644 index 9fbe44df8ab12c6ba76da9361461c760848931c8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 110 zcmcD&o+B>lQ<|KbmuhMdkY8MqnU`K1UX)pqTI7wh=DQOv5Ir#$`lV5<$0D&o<2X+Af DvKtmQ<|KbmuhO_lAj!wm{Xcs?2=fL$N&VUcXH}@o^n5q{99XcY1^bWE||)A f12<0}*LY(~V>6IC5C=pb(3t!JM1w&3#Ih6s2xlEU diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_21i_Lucene54_0.dvm b/src/main/resources/solr_config/Test_Sigmah/data/index/_21i_Lucene54_0.dvm deleted file mode 100644 index e5af8d65716deb70a4b85349af3351208ac3c35b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 240 zcmcD&o+B>lQ<|KbmuhO_lAj!wm{Xcs?3-GWn37nM$N&VUcXH}@o^n5q{99XcY1^bW zE|}_g12HBsMuz`Tz{$x7QVs-`VhnImhzNrdOpXD@aFb?|MrdYXL5O2$_JYa5HT!We ku)yqv+Th11dRz8pR|1sFz~Bc`z<)qv@(Y+y)uwAp0hjen`~Uy| diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_21j.fdx b/src/main/resources/solr_config/Test_Sigmah/data/index/_21j.fdx deleted file mode 100644 index d62bf9fee3f3c2bd48e13a3d1aa7f56cb27f2148..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 84 zcmcD&o+B>nQ<|KbmuhMdT#{dun&Ot3nv+uOmRMZknU|7U!N9=4XnH57j^`=&R@1E1d1|P0WrgptOFX8UjS8sLC3lHrvT;A8`J;* diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_21j.nvd b/src/main/resources/solr_config/Test_Sigmah/data/index/_21j.nvd deleted file mode 100644 index ea414daebb518abb452c7d30540148780017aa5c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 59 zcmcD&o+B>kQ<|KbmuhP4mtT}y?2=fL$N&VUcXH}@o^n5q{99XcY1^a@h65UtUw|Y) JprLocY5;>z6?Oms diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_21j.si b/src/main/resources/solr_config/Test_Sigmah/data/index/_21j.si deleted file mode 100644 index 79ecba05d3488d2c83aaf9383df0b6bbbe7a387d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 523 zcmZXRPfNov7{)uHo9i|eCwSDOmxZRbo1O%917V<0FP=(mvaQl2B}vOJdiJc}#j~Hm zgI>Ie;Kh$HG;LR*m=JjLKF|Am^XKR-+U|~%08`wzTs$S1$}>7)nx@s9_vo(u+4{Iz z+{%}yhkKRN>T2m(phoS-SYbjRhcubDZv4~-DW-_=&2#Pt5#BvvJZ9XNA*1c3%!S%C zAvgf02lwH6ktV7zR}9MmD&4z=a4pIYRVsQPIKXT$0el|Jbf2KUy_Hw65qv9TOf}gMK#6_Nr&W8$eUi z%>u7@D#!Fp5HnGT6H1l=k`uVuj2n3)5mvN<@V_@=LB&@vNNuM) qpDP*1XcXcIi4o((mw+&YjpLzv>A4rf;i>k#_xM$Oq^5b_uZv&hTcnQw diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_21j_Lucene50_0.doc b/src/main/resources/solr_config/Test_Sigmah/data/index/_21j_Lucene50_0.doc deleted file mode 100644 index 4c94b012a653ab69f7d00509fecd0bf5efa06f64..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 110 zcmcD&o+B>lQ<|KbmuhMdkY8MqnU`K1UX)pqTI7wh=DQOv5Ir#$`lV5<$00GW3FTVo- DvVk7u diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_21j_Lucene54_0.dvd b/src/main/resources/solr_config/Test_Sigmah/data/index/_21j_Lucene54_0.dvd deleted file mode 100644 index 1069627dec109e615ce147b0a685a6af7a4a19ff..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 94 zcmcD&o+B>mQ<|KbmuhO_lAj!wm{Xcs?2=fL$N&VUcXH}@o^n5q{99XcY1^a@E||)A f12<0}*LY(~V@r@a5C=pb(3t!JM1z2|9FH>q1)>}G diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_21j_Lucene54_0.dvm b/src/main/resources/solr_config/Test_Sigmah/data/index/_21j_Lucene54_0.dvm deleted file mode 100644 index f0b8fb8ca0b20760eb55849be4fdd528c14fc1ca..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 240 zcmcD&o+B>lQ<|KbmuhO_lAj!wm{Xcs?3-GWn37nM$N&VUcXH}@o^n5q{99XcY1^a@ zE|}_g12HBsMuz`Tz{$x7QVs-`VhnImhzNrdOpXD@aFb?|MrdYXL5O2$_JYa5HT!We lu)yqv+Th11dRzA9mIY8Q1A`w(0sjGw$uD3+^XDpu005_VN diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_21k.fdx b/src/main/resources/solr_config/Test_Sigmah/data/index/_21k.fdx deleted file mode 100644 index d274fcf9d01c79ce3882f0b326bcbe70dada0f3d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 85 zcmcD&o+B>nQ<|KbmuhMdT#{dun&Ot3nv+uOmRMZknU|7U!N9=4XnH57j^`=&SADG1d1|P0WrgYD~ty;CcgkG0|WlZXUzZu`5Tk~ diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_21k.nvd b/src/main/resources/solr_config/Test_Sigmah/data/index/_21k.nvd deleted file mode 100644 index d75593ba482f8e3a641d76ea233367732cc14e9d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 59 zcmcD&o+B>kQ<|KbmuhP4mtT}y?2=fL$N&VUcXH}@o^n5q{99XcY1^bOh65UtUw|Y) JprxW<8UTXN6(Rrt diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_21k.si b/src/main/resources/solr_config/Test_Sigmah/data/index/_21k.si deleted file mode 100644 index 070acf897d5a347654cb593cef9d153d349b7b8f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 523 zcmZWm%}T>C9Pfl~uG>_c;!%%Y7TUVDdJ@zPgrP#ccq*~UwrZ1HU4^kg$UncY{F5BM#arz`8e)oF+s7kqVW z{P>_St*WM;6>3y|jU^`ZK}6GO;|5M3m|%(+Uq9zCjPcGf;|b$XMvOLRG#6@9x4=Fy z18dJ(EnuRIIb+xkP;lqkvR2}}sgluM-~hA61b{po>yRL~yOFzjN@YZFDQx|RXDL;| zQXXP`7^h-vDEI83wJzuav*UT4k-9mL!g`h=BqT}8a!l*M_FT_%9JARDZ0j~CUdS;6 z6C_O3G7N}lIbZ1n6~z!u=hR)LM*k!wrAn4QGAGZ%Wt1#nh=mK7>UIt*jv|%qvQb|$ nj!{3tF%o^o36y{^gpH$~e;N1}z21rTvitN^e59srp1D7N-Jhcq diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_21k_Lucene50_0.doc b/src/main/resources/solr_config/Test_Sigmah/data/index/_21k_Lucene50_0.doc deleted file mode 100644 index 30dc9f85c6496a5be9fb9e3d348e9271c9221bbf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 110 zcmcD&o+B>lQ<|KbmuhMdkY8MqnU`K1UX)pqTI7wh=DQOv5Ir#$`lV5<$0D&*HouvS@ Ccpjku diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_21k_Lucene54_0.dvd b/src/main/resources/solr_config/Test_Sigmah/data/index/_21k_Lucene54_0.dvd deleted file mode 100644 index d34c29d7d96c78bd4c6383b4eeb302b5f2b17af1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 94 zcmcD&o+B>mQ<|KbmuhO_lAj!wm{Xcs?2=fL$N&VUcXH}@o^n5q{99XcY1^bOE||)A f12<0}*LY(~QxlLn5C=pb(3t!JM1#Pog#VKP3uhiG diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_21k_Lucene54_0.dvm b/src/main/resources/solr_config/Test_Sigmah/data/index/_21k_Lucene54_0.dvm deleted file mode 100644 index fe27b51c193f5c3b34ae40fc2633e9a65013856a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 240 zcmcD&o+B>lQ<|KbmuhO_lAj!wm{Xcs?3-GWn37nM$N&VUcXH}@o^n5q{99XcY1^bO zE|}_g12HBsMuz`Tz{$x7QVs-`VhnImhzNrdOpXD@aFb?|MrdYXL5O2$_JYa5HT!We ku)yqv+Th11dRzA9lLRQ2fx!=?fd7ETnQ<|KbmuhMdT#{dun&Ot3nv+uOmRMZknU|7U!N9=4XnH57j^`=&S17F1d1|P0Wm{A#{rGWFMz7Rz<1aBVgTJ&8t?!B diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_21l.nvd b/src/main/resources/solr_config/Test_Sigmah/data/index/_21l.nvd deleted file mode 100644 index e3cc1156c1b10d6c7f30596610888ed582f8aeaa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 59 zcmcD&o+B>kQ<|KbmuhP4mtT}y?2=fL$N&VUcXH}@o^n5q{99XcY1^b8h65UtUw|Y) Jpfio(A^?Ic6yg8? diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_21l.si b/src/main/resources/solr_config/Test_Sigmah/data/index/_21l.si deleted file mode 100644 index c7c7d1ce68c19396546638e30f6966fbb634c80a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 523 zcmZvZPfNov7{)uHo9i|eCwSDOmxZQl*Lf1u4TOn8y?83M$+k+9l%y@Y=qK=`A4Tx& zXYk_1n+Sdh(e$4%G!XLU_vU$@H_5?kxZRy3KBjnJICw@djZf&5DT-3F-oo4VN9+Ca z>n47Ay1$c5smrNmfgH7OZG{PS63}GPy7p2Jq?jVcH_y1|hj{mh@rZFR4j65hX)ffZ z3BeHPF6_hg0uw3BGn!!miF;QNu7!D1RYn~E3+N3dfXDs0>Jcw(Kx^%5@W`R7X!i&)(%I`h3lM;M#swY-ot0{k&1E(A1{9Z6=0(m diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_21l_Lucene50_0.doc b/src/main/resources/solr_config/Test_Sigmah/data/index/_21l_Lucene50_0.doc deleted file mode 100644 index 9b0ffd57dbef04f503234896d9bb208b17a5e9b2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 110 zcmcD&o+B>lQ<|KbmuhMdkY8MqnU`K1UX)pqTI7wh=DQOv5Ir#$`lV5<$00GVWdYb^U Ca~>Q3 diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_21l_Lucene54_0.dvd b/src/main/resources/solr_config/Test_Sigmah/data/index/_21l_Lucene54_0.dvd deleted file mode 100644 index fa1b5802d6c3b3d3e15c30e45106d3b7e8765ca8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 94 zcmcD&o+B>mQ<|KbmuhO_lAj!wm{Xcs?2=fL$N&VUcXH}@o^n5q{99XcY1^b8E||)A f12<0}*LY(~Q*)3y5C=pb(3t!JM1#PZIU=P13TPcf diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_21l_Lucene54_0.dvm b/src/main/resources/solr_config/Test_Sigmah/data/index/_21l_Lucene54_0.dvm deleted file mode 100644 index b0108993a805a7e5e15b549257192794af350913..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 240 zcmcD&o+B>lQ<|KbmuhO_lAj!wm{Xcs?3-GWn37nM$N&VUcXH}@o^n5q{99XcY1^b8 zE|}_g12HBsMuz`Tz{$x7QVs-`VhnImhzNrdOpXD@aFb?|MrdYXL5O2$_JYa5HT!We ku)yqv+Th11dRz7ucL0>jz~Bc`z<)qv@(Y-d^=zXr0EhTY$p8QV diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_5p9.dii b/src/main/resources/solr_config/Test_Sigmah/data/index/_5p9.dii new file mode 100644 index 0000000000000000000000000000000000000000..2792333fd65ce1314f05233f1f1c937bfefe4e39 GIT binary patch literal 87 zcmcD&o+B>dQ<|KbmuhAZke``XQtXyrl$%)Mn_7~{00hpD@2sD+KsDfkYTB*Rq8E`2 m?1BZtvzSEBG8sN&RcvOF>Sk8i!g@es@(Yk^5SZtFcrpNFDIJ&q literal 0 HcmV?d00001 diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_5p9.dim b/src/main/resources/solr_config/Test_Sigmah/data/index/_5p9.dim new file mode 100644 index 0000000000000000000000000000000000000000..b93b80d088146ac6ee2703f37625c9299e7b9ab1 GIT binary patch literal 795 zcmY*XT}TvB7(Mrn>r7iyO$9DSuxNr6iWFF|(lEO>Df3~2pp95)3PY(hbR-aoEfRf* zHY$AShkY;zdPt~6tO5679`?at1F2SmqF(k<@}ZZgzB|*B^TEf!eBZg}+;gt^@k&#y zfBfRW@IZH0dSqzW8S5Pxy=ptcc5G0kzJGpsztEPhv|U;qAFZ8*8UuC!I)baQ=ZJ7M!ikqQ<5hIo!r1wjS(s-G4$<|JF3bK8pOZ> zg;s!w&p?ERPe@dafa>#Wz$Ty**g`^l{>0|i-%AD2AHOF~<-0`IJTJ!1%?M{TBd$-a ziOJcDxKS*NscKD3|0?&e#pT{LlY4vKm%NsyoTa$0ewN+h@{IfL)~AqC!&jP+r;}1k z&JBYjP=#N=?Bk(5#;XcG4)E7ACOI*h;wxJ|C^J3*`A&l02v_GgX=sN$wqk%W% zN?;E;L4N#qBCw%xFaLH#WN(&*{Tjl4TM_xY$3=cNMwi`Ro%ar07__)soXEKg5iO)T z8eCN3iPw_zXq3+@G84)>2%FNN;5SATWI_?qvk1gcCY`>R4tDg*9J=}CL$@LOFnf09 z8WI}II*6wp!`$aVq~oDpAIzYKEi?lrm(I$z_~OtcWQPO?$#h5#DOk=andc1*Ez;UV g>xY%EVQbmHENM_*V2oEIrS=Ck`Ql}H%@fmq0Xj9n+5i9m literal 0 HcmV?d00001 diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_21d.fdt b/src/main/resources/solr_config/Test_Sigmah/data/index/_5p9.fdt similarity index 57% rename from src/main/resources/solr_config/Test_Sigmah/data/index/_21d.fdt rename to src/main/resources/solr_config/Test_Sigmah/data/index/_5p9.fdt index 23bc3031ef472c07f3f98df8dd7bc9f19b038b59..c6e308ab27c4588da5c450016c81e66aa8933b37 100644 GIT binary patch delta 12289 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 Z&KLfdF;*KpUcaA4J^%UZft~Le{})WaH`M?D delta 34731 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 z ?>&bu5)RxeWRv%3TxLf+2R2W`E@RJ-ooDW)^(}9 zB?Me?2hpou{VYfhx-U@dc~aDMnMjk)MVu={=b#8DC+qZ{u(n= z!ESWR^uCOP)|mI{a<-()h?W01;5XOVrtvFs9R>&N?9Ynn&sI+c<24>{xqXAwYOH7* z7)QpLs$GvFhk?_?xEtSGX=QE>oC#ZQYa(UGHfa1y9bI*DdBu)C<4FVmOwI^(HJs)K`DgW5`ojC_ANTmmcB z8whPbyC$4TR-qm`$=8ay(e}+#@_I*Zc=!q5z;~hK;xO;i^r(mXi@Pxpn0a59e=qT* zkS0w&k48IYA2PM~G@faQSB>B(rp2n+8t)9zjR64PvvfLEUw7D|o~WUkQp@~fsrY?R z{5wE3)jfsTztc77ZOL?v@AU7Nww z2U}ciG({N)Gh50FIPqtY`}`(rUNr*0o!i*>9%3sRf8wim)CAKvL7GL{25UuOeq(je zW5A)z68U8WxV>~z+8JvGLrA+pt96r+FO5mR*o!1!c0n1`=})|c5mDDk+m9IHDK7^Z z^D?%nonsd4u9!jV$m)7lh&di@6A9fvflTa}oryU|)zq8z5N8ih-PnmeljO%dHI=zU z_5sBuorfevsm49eOEbK6sll$v5#)BCtK$3(MIrn8VlqqQQV{`nD4T+*3g}`bT#+6R zK?r{Zen#Or&eXy~Z&Zn$W;f*U(NhTEX3iwq!aISb3)3%Mzr*ZjsnzlYg;SXAds$zP}g(Wh(I~ z%N7z5fr|Y}>Au2*b=*!sKEFWl7rv1FRhSzzTc`^u2-;bwc<|*!)9)g{{SveJFRS*iR zA6pF(Sta*04h{Xz{q zIGV8If0(RB5v#JylgN9H)DcDgOAVDsP<6h_Z^e3a?fmLab=)zHnvH#skGbZbVSeMj zMBv=;^eLU^hCQE!diqx`UA9mi1(SV)TDIn>m1~wQTi>sG)-O}|(dyMm1~-_?{vzeH zhN5?YaFscQ*PGp-&e>|en4y6N(6c(N4t6`p|Fi<8-d=--1BI@$h}-?zy5jnTv$OO% zq;^4W?7}Msx)Hx&1l&$s-v2*7b{N&Ixb~0%L9RcJp%m!9$AO?Y_JJ9a;qk9U+EybuVB$!XtO@D&R6v|pZnHau7ns)AP&xMm z&a}7Zox(_}xz|4dZl1-cO7fpZ+8)F=X5$}A*MF&D)_z)2d0 z3^Jsa!&hlF2ch6M7tCdMA&~#o{peLw5u1ate{w0`G`V2r)TW_R;X5)u#kUnlvTDnI zL(BW}-AEW_uWq!mPfns*pJx@xE0Na(rYuH{rJJTwkB`0#QWsuF@L^?l!Q%K~(UP%| z@s>wRF_agx$6KyNR+a}KRi~ZQZP+74eBU&>sX~pWPi5X?;CL16^>vd=)qnipFg@tg ziPc_uvW#l93Fxm|)lsR`@DHa)deUj6K~tGpMqA@+%lfvOBX*{yC>ZnBh<){f!nCk9 zg7*p>!QHT{c02?x1>s{;Z*bMPN7?arn)y#UqT9dsb9F%61Erv>8)Ly;CsOe3KUi2? zJCjuBODp~ZKc+H&iMhdWo;tveClgiD<%RL0EGD~`4}f%3sCw7l8>Hb9TI}(ZN&Z$? z!^f3`25XA=PGS60mpiRc`W0x9ZhI*sho3^xx>cujEE){Nl`etO;{c9!9G3-3*T{e?@y@(Rt?!u(#g~2o?Md6>h=L`A_+jRVFkMHqP zAf&R`LXY?{8I2}gN5*f2ehSe)Drpb#R=pZQAyMw3k3xLQBuGk|8ucy;;4J{@=y(+K zPv#57qJjBk;#E{AC>Mt)ZPKccm4~;m4V4owJ{XVd8+voG*m%Q?2zFe(74Ch#)>vM` zcohiv�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 C+$CZF literal 0 HcmV?d00001 diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_21d.fnm b/src/main/resources/solr_config/Test_Sigmah/data/index/_5p9.fnm similarity index 99% rename from src/main/resources/solr_config/Test_Sigmah/data/index/_21d.fnm rename to src/main/resources/solr_config/Test_Sigmah/data/index/_5p9.fnm index 333ba9ccff392d582bbac8ae401d8e1b0ebdc6db..fe7ddebd482da2d33e034e9fc090119be1e2a56d 100644 GIT binary patch delta 32 ocmX??cP?*&w1D&DJL@McPz|`Cns%$S=tbm4ZFzH+YLEP<00^EBHUIzs delta 32 ocmX??cP?*&w1DZIoI0MT+>ayw)|On_HmP=_w!AsZ*R0iV00im~7ytkO diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_5p9.nvd b/src/main/resources/solr_config/Test_Sigmah/data/index/_5p9.nvd new file mode 100644 index 0000000000000000000000000000000000000000..27c6c3daf9db905a8240aa023e1786328ea7d175 GIT binary patch literal 1845 zcmb7EK~BUl49pie@q(4OBhDP)h!9tft8S}SEVPu}wh?^-C-?wA;0ru~6G(^~mwg6~ z8`p73H?5_W$M$%VIO(2#tq%__wo!Z+pB!K2bBsodKHNwXLLa6J2K01SBeN#5vZCM*V2Q^O9U4+RQ|Hf5ldV+F@Pul)+qaiJ{a{?0XN>Wj{uw zV7#Y1Om%B?O~aZercoO&%N#S342rO~>EA+Vn{5jpDAO5{p7iDdV2qSxL>cLEOjSim zMwF4h0-LMO^I#-ZDZ273I^Ikl$xnwstn-C%IXC a?Ua~wO-y1$0@CBHz8}5pDE;}EJpBP;%iYZY literal 0 HcmV?d00001 diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_5p9.nvm b/src/main/resources/solr_config/Test_Sigmah/data/index/_5p9.nvm new file mode 100644 index 0000000000000000000000000000000000000000..c5f9f405cfee406848422782b401203289cb1501 GIT binary patch literal 448 zcmcD&o+B>mQ<|KbmuhP4mtT}y?3-GWn37nM$N&V+kMFFXv_LiBf@<2W(xMlU42+B* zVIa_Eg0Z4lV60AV7;A?FjP+az%3>5#hOt~#VXP807;CXQjCDy9%3@;FgRu*8aLUx(j-f=TME8~zJPDw zEBFZB1o7sjui#0u9~FuQl1%6G~Wc%3Q8#TBi5;@%->q z8@<-t_fRaZl&0m>)+0l$gYR;dOMU3Ea9+AYGX!RYVJ@~V1ahWiug8VY1qwXQ%BfpO z^(a8l0fr5ma3hhaN{l_lh6R*dzkzUl8aK7{=q+FYqe_XGkTWzt4{6%0%+_I^OMrxP zt0RhA=5`DfAqzZ8mid+6nh`uFc_%47p~`R%kKi|RioQZ=4qL>0q_j3Xhx)Q=Z~hqYcYe(Qp08R zpC~_x!rp4B2y9JGd4{{cs_N!pI2^LO**iOX&`6dnX`y(dL|Si*@Gu-|k=#J;Ai0EGLjDB^l3)4b%gFOqbB;Ts%*v|(Ztjxo?&_-V@P3DSIg|hR z`+EOJzx(-@zxwi%$3Ok`Z+`pBU;W}Yo3DQP+b_R5{`Jojj`{!m*T4MZKfn9ae}DJy z{_}TV{r;qLI{I%O+gpeBjt^PhYInLjz1{xaU|5vZsJ^p*_u$_B2M-fxJ6+crhF!bq z2u_Fb%HlWP?!{AGI(>DVcjhhd@?6U-%k-X~y|RzZyM#5?Rt~45)a8tHJ~PWT>z}*A zcKRRh<)gBnxR=9v$~@)H5$}n)!u8$vtZ*(F*50h_YAyf6Bv^Hg)E{uoUA*oNwu0-r zLqr|E^hZANBb$2f5$tZcHxAwo-81Lf-5=X`zk6R#J>r(H##yh|f1>|VAn`8jFcXe&A#ep@ zT!K#!@Kda6tUUQtUk*Sj{7d=X$|?#B|-@c=0TdVSxKft&s*-q(%Bg zicL}AREWMNM3oy3bn-*9!7Rwc$krVB)80O?7`Qg7HIH@-oi0e=C&&oy?a<@{b#PdKeDmEG@K`JayuzQ?=ySY#w4z+qk~zpKS+i) zEEakGlf2glYBnTRX6^kn!nkbzkjH}{P-Y#wXZ`q<)3xpJ_<20-&%0R0s#)UrpShuT zV`IL63HZj*O3fE$GyGvIm+V;Y1mDh_AaKifH*~X*uB1Y0A*~W$b{A>2NKwh-E|A1E zbE|S^+H-m{3&IXUSZN>f9uNF7lYYL!&63c@!c5rU5%(PDcda$-T9|3HG!{g|C|lH% zfMGypVXd(zwkyEtxrPQy?gTd^NG59#p0sfe5j?MiZePz4&2hyo(t71M$*j%FeymVs zKw8>Vt97hc*7N(}Q$yuco!tR!08@{hyJxjIT z*t>K!GK^%UKb9)him9dK;}wo*MZw(4vZbq!W!TbYNy|DoYwQGh0hxI;E7r=;z@+Wa z+$5@GHb;I}8Xm!&Sf})}#74-EVVD3=7eWD6!9w;dJy``b07R^B)-H}ad?;Fs%dHLI zxLXM{+@4`Z1UL%GJJuft>yIr@OO`3Qk8M#JGh+f*+_mqcSIKu4E*K_NP$Iey^MR1U z34RP%rR0NhC%K13H3Tbj3m6H!%f?d^MZ<#0<*e*EiP>HV)A=T`Rj$?03;BwXviA9L zAQ>XqCtOVGk)KFT%wNemp*sL#53q8anj33bDwU^~abS|mxZrn($8wamaZ7oTQ3Tfq z_OlHm3b2FF%3~~3+8hk(WN4>_AWEc|#@|WDRraxRZEAPQ-Z+yX04xsW{}}yLF{+i2 z+yrC=dkh;-*(OfO9hrT%U`_G>xeWO2%#-LNJg)lz!C3y`)5H^k z7y&6!62KrB@>7Pz8B2_K zvLYV^j7VVT<()YoFYJ)qqhhAe6--csIwf=pXk+J=qz+8pvu*@i#B?@y#oS>!mKg1H zKVj&}X>FrUo<~7JNo@{Fotg8-ZHNo9F=YhV-HHs70gfU{M6@pD zi!z@?CCJ*!WpZND9@&JivD7#+i`o_N@v=!g$L(siwU@HiNQo>U^;$Cms&wsFj^!yx zgo5tkH*Vl%Ql!d(BigE@MTwb&B|_sN@ElUS0Gcn z3`baZ<}LkPLH=A7l0}srRlE~_QqPk+wnt_2d4%F*FeS~%24%}lcjccIM#{@J0be@1 zhjGYj7$aL}#H+KskiAHl(a(+!Aj(l@bNQA;xo{^Jy9p3TxtNeV6mJP8_&h^46lNWe ziYm%r>LkowIAR`=E0PR$M(TnZj0PLJAa^)S8mMx_hF+v_kO^QL3E6xoLM}L7q zL5Y%$Dsl0dB-t?3${b|V{c@WN#0F)bZefdODoR&QC~P0gfi~g;vG5kBococVmu`k= zB$)h;wfB=;{lYG>!^NCrAbl|h?-EdABy>c}knlJOyRgm?vbPBz3WhS|EN4Jh8E#Df zA}`}uK;i-1C>tRjQgd}})iiqZ*d@C$Q8E%d53C{pyjAnGCQ++pP-NknYSz5YPGd2f zVtRZ;WGsNeUoo=|Z%zNGYV%;^E_I6o%q4Az)}}1-b%P2u=dIYs#eSfgAa@px+bS%Z zr`9V;igpj*y~t4BsuVdK)C36G?#R#rA5UaU!gVmDip72g{3tk(6(b84YDTDIAb72QXCH_r zp2WaTY2%hSH}DlbW#rhGHb#}-S%Yg$A80l|mAsm-X~AC@Tb5)G>D#o@I30PiVG9h( zY!2gquhK}0$jJ0S$<_FUW^qn&A%k~_cxgu@c-k^w4PxYA4J@#|h4U#nfRmjB!cZ$o zA=J|es)aI4d8e;ZlYn*fepL%vvuKY!^UD~b9+-!;sVa2p^eI??N!IEBi4-g|iX!nK zAzBb$EJ^L7ZHlI$L7A~6vCHEu+0+Aeh4^+uuBgaUWa`i5AdkHCd8FwUZ8UTLEw-R@ zh~DmK3u0wQO_^Kw=_GbbPqm@kbx&b+RGMHK=sg%a@7g8&V+Uu zW~7Z!x+Cfo4TD$trEfSv9ffO!hl+Xvc*$DA8wG;ASsQBmuL%s z8*Ld`P3QQS!g|Q3P{9TnSsCkz&^djL5cg^US8!M|wYmgkJo=|R0_29db{hy1Y=_(? zOj9&fV6c5kW(S)r`4k0M!8%B^qLW)Y-&Y{f0MWJ3YPTuLfN&Z;u(o=JX(p2CS?q4u zW72tfnqT+Phn7MvuzU;$vu6vSQLsoKDC{UjahIH8BagKPv>gSfTQBRQvK9u?Wm=81 zL*H@MQeqKuN)y;kjf36OHVMP--@mzW*P+3T`Caehhzb8@MFo=9ki#Lx#aBzmz(6o z?hNA&m2O+P4A(Jn4^72*(H`UfjafY*sPU?yI;&D)AbMh_<~BlB4UuFcxT1o`M`4Ub z-=iG0>^(LXEhdS{%TYrqK>CW9r}n=)wS__NiP%+P#A}F?ox+rX>sO;tZC@#T)O%`@{$-rX*5=c7fk8AJ&Mb zBvlzmG$^@ZvG1Q2^HozM&v($#?Xbqr#52f13JdP-KR#q6e0WuPqd7j}25#~s~4u>(%#vEE+82qFaeo3hz(fE3cNXaAadcZK;A>sL*_8RN&+=Z}i;i-n7Z0tAWd z6Zq8ry-}Kv$eb}H1S(aMB=-uPcgEx)M@mh(#Nh$q%luvPzJ0-7w2B3ubOiFQr{;*b z73z>N6*t#$Z7L)xIhSZQqNX9(MsJ8ZK%XfUtgwQj*^{c&(v>akQM zs9Nb8V6kEq_|}*!Djf2j(pIW!2!Bdgsd=U=yggY3#8lDV07F&oPrja?`nHKF>`>y! zS6C?m=qf9v&E*;4v?ZAEn);;IBayU)hXw1aHdE6?1}GiA9$yq$qB@3e!w?bkm+2qW zV(W5|{!!mSg(lY{@f%}%{%{f}rSqaCgT71cdOSt@YT**b2grxq>ITC{Ybr}+c^;LdE9=Sq>s6Jn% zLXx6x_z!Iozd8S*(shCTpuXIi`dE8*bvH8_amT_haW}9TJV-`+4JzZCkr)`~mZZgN z5f-mUS6m<~*c~=pg`$m?>ksEAL{2x!ABKul1K{hx zZA6kG;_lW2!-LBNgXjd9`BUaVd;hQ5;6tF7yYuUI_GHojYghk<_V4_rj(aX`-XWT9 zyKz@(`&3(3zT9$mUY_o;^_isY^dX;zI??gUw)_$Y&~S77+7W3d{%l~P8mjd#vv#k0 zE)ov{ODw~7ro%K1-;q3(q}m>rM7N%$p_TfbEXxm|#(BV{hhaBMa}7UC(^sCqIF}yR zzWem~cX+}-b92|8JDzQhxpVO^i1^eI=JA8K8^37C_K`RvQ@w{Ep3mlZ^-Fs{{=5+1 z&Y1i&KfJxy{Q3}YxA)uoVo>6*NHF>5KPa6uT#?xt@W*)Z&$P}Mw9 O^#_tV{=xqBzyBAq*hdop literal 0 HcmV?d00001 diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_5p9_Lucene50_0.pos b/src/main/resources/solr_config/Test_Sigmah/data/index/_5p9_Lucene50_0.pos new file mode 100644 index 0000000000000000000000000000000000000000..f28c1d530c9b41983c2086dca3882cde0c7664ec GIT binary patch literal 48279 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_5p9_Lucene54_0.dvm b/src/main/resources/solr_config/Test_Sigmah/data/index/_5p9_Lucene54_0.dvm new file mode 100644 index 0000000000000000000000000000000000000000..035fccb5323e0e064efb5ab95587a5c1df339b62 GIT binary patch literal 4098 zcmai%Yiv|S6vywqd+*(ceJo&Gpj1}@gS@s%L9p1}EenRH&7RL?Z~!-1DE=+Qv8^_BZFunKNh3 z%$(c$&MiymH)VB6>C>g7Q-Ui>W*0A8UAk&&X<6}8#bw0`YZHFB_`$ZC!8r|s7c{Sa zraj*!tmh{yipDKi8%I!lUORdM+o+>vfnlP)j%W-f+Mm;@qZHVr*8-@DybkmP&QM2P z0q!Mg`9ysW(I_X{-xc218`ArF8dEk#V)p;J#8L*dX(8STxURNYjH(VxAY=S_}hP>LUAtV2`mmqHkUj|bFHADOEIi(PjOSxKAL9iWFTi*~HQ5(55DQ^n2zegt=Oxqlydtm$ zY$MKhgMMPiHH)nqRuYfWyfzQ%+tz|#S6k!Xx!F8C2-WQrcSCh6R#W4>y{RXDZPsm4 z6k9E6Y{$VnL_G=|0D8fxU?KP`(dZzWi;0fDpdb93=)@g$T@=w~xMZ{$WTR&Hh&Go- zZ0~?yg13qKU0@~!lpYIXvEE=)B z1%3{~tL`LO?*|SC@xF9^$yn2oQ{!in%>_h99QYXc7t!e=x|&3^hoVKnP!G|VT8D#F zRH2BGJF0`K-fK`#{&ueN}#sJN-wSO@>7qz@W;iP?LF`-qNpZ1?uMQOeKMF0 z^2fxQ&h9>M#xF#33DJRkIs%Y!JDf2jyDlLwT7p~TMZ?K!N!{|ICG`?J(h!d}uxnn_ z^u+WW=2%UiymKq(go)ROaAxk_GgG=x>mBJ*6k1TMM6#j<`^c4ou*vM2J2iFS?N4f$ z=hWa7PqoGARV+75F7y>yTs5cCVp%hL*G&KHW|kwy^6d>4Hyk)_adT6<#VxnEJpS;> zN!-p?pL8m0@&1GmW8mnAfAI0Z(E}$dEq+sR-l14cE5BRrs2r+_?mMc8lQtEwsbn^) zFZ?lfsA!e(TD+=?uZJ@lJ~XxyD^ctsI&X-sdFQ6N-9PtXz~ zOW2}qWNF~S8HsM;)_-Fb9xYoLRvvaW{=J0Z@d^e0$T7VA#Mv2G-Wc8W?6@!6Z1QM( z8~g%9P1Nyj_5P&SM}S%291!>2xI(hIkmz8!;LVW+-XuCv6POuvMOmFxojlOfz=E=yhp? zx@6QQ$;{TmXulUPSxk>p zPRWpk;$9i?DX7kQapy=@l$f>Di`grZaoHn1U&gEscoy3;I_{I6#W&$MFHV=wQBwzL z-;d=C7H&LlvG^lPA1ppX6`<;c3`<|Ny)UD$erVHvi^HB=#K>Oyx{$?#hB$FEdXQMv zjOME-irL2-MLqtjj!0|W!#QT@s7;)Y?9E-tnW`3+S@cZUWzqLwy~SXT$Kv%xd7R@9 zS~p&l1vPMZak)r_IdVv(%ZynwQ$)sbN6eIAGQt$tJleHJTe|=IcA2w=OD`w_=A0g0 z@Xb}0(mD#BgIS6jVy;P+Ue+L%@*ZBqM>m};)GDx1c-irg-1QE4+0Ay%J^^RXvE>_AUy3 z>{ziMdo0=7Sxy#4dAwN1hKIb^F4mqjt?1K#0KFzissI20 literal 0 HcmV?d00001 diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_5pa.fdt b/src/main/resources/solr_config/Test_Sigmah/data/index/_5pa.fdt new file mode 100644 index 0000000000000000000000000000000000000000..6961e7d5b3ccb84b6ec2409d8b6930396f5bf889 GIT binary patch literal 23065 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 diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_5pa.nvd b/src/main/resources/solr_config/Test_Sigmah/data/index/_5pa.nvd new file mode 100644 index 0000000000000000000000000000000000000000..1fb0c65e92e5a5a359ac5c763313d64dc849f65c GIT binary patch literal 59 zcmcD&o+B>kQ<|KbmuhP4mtT}y?2=fL$N&V+kMFFXv_LiBf@<2W(xMkp3c!6<(oPhJ=JL@McPz|`Cns%$S=ta~-y?HD}6O}>$c!6<(oPg<_oI0MT+>ayw)|On_HmPf(-aM8HF5^!C-9!#9 diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_5pa.si b/src/main/resources/solr_config/Test_Sigmah/data/index/_5pa.si new file mode 100644 index 0000000000000000000000000000000000000000..81efc69a5fbbcab569f446e8ebcd382a2bd799b5 GIT binary patch literal 523 zcmZXR&q~8E9LGDc)74GI2_E$_@UqZuZMU1?+&~yOs3$KaHtAMrl9IG#Cm%vzz&G#} zd<4ORAl|&}Ej0Znj0FO}d_TY6@B2$~@fn`9r-_FtwtEhq6HMc4>N7=AYNMa;*Qb}x z?7icEC46-!HKi`Mngw#zezh$o)M-GI<=z8KAxJSrj33=_=!N)f#CXIwi~~lSCFVjN z8U`2w-8K5gK_L@am=mpM0V#Ly4P!sdhpLEb0}JRoOaREeg$fC>&Eve9Co~QSt`b}S z&9g3b!4mFa)ejS~&}4OKbZ7z-=-t7fJC`@-f!D}-h!~QnWmtN@Z}xjbTaMCfyH*6< z;)N{J)d5P;Zl(d6qBW>X7za@SeYD(wh^;+@=F1Z&xucf>^P tv>a4-V#YC=1UN)u!Z?93APiyca_ro?&TKrsQr^y=SH(vv%J!rA@dtitrH23j literal 0 HcmV?d00001 diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_5pa_Lucene50_0.doc b/src/main/resources/solr_config/Test_Sigmah/data/index/_5pa_Lucene50_0.doc new file mode 100644 index 0000000000000000000000000000000000000000..6266fd5139863fc32d4724be05620ab55916df83 GIT binary patch literal 110 zcmcD&o+B>lQ<|KbmuhMdkY8MqnU`K1UX)pqTI7Ccglg0Rr7mz6ApS Dx6K~g literal 0 HcmV?d00001 diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_5pa_Lucene50_0.pos b/src/main/resources/solr_config/Test_Sigmah/data/index/_5pa_Lucene50_0.pos new file mode 100644 index 0000000000000000000000000000000000000000..93d757d863aff3dd3e788b4f249f60a6d8213004 GIT binary patch literal 14427 zcmciI2V7KF+AwgQb8eYlsKX3>Ko|zFtWl%Jm}H~bP1$5O*_1E&UXx*HiYS&81rdfi zGc*AeOHc!L1QCn{L@ZbkK|m1|1(aehC{}pS48%fWHv7KcewW{G2KddrGjr~_&v~Bb ze_uZ}&CdS4IU4PB?JL7R44XAOczWQhPs4*}Ys1N37G!&??d+EH9FGrcJOY~Lgm-?y z`{mXDHSC`MRa!2NM~lG-r|8i_+h*7WrI2DnwSXb`B6E~3z!%U?rh;i?R_LJ!Iwb{f z?3)<4qE02Cw}EaQ38tl zir;AR%!>v`ii#6l=Uq&N);LK0cDm(OsF~M6K5hB}-wdeaE3V$g09^e126b{W%y6uLYWH8!9{0mm}d1(+GEy;c-xjcAxise=9{9 zt>oN*SAK9R0wMFAwWv#MY4diM0k#_Yh~f7S_HvZVj-W zd2xVeWZ*p$vqI(jC+?jH2~#h}!{w=I!AspQqM#RdJq}w2?HZDe@6v5Fw~lI(TKRhZ zOul;VcinI9`&Kd6Tc!uO`1D(s=7{6aB{Fzt!nRGjqFgseo(P5TWR^0Jdup;V1rlag z!`-lEX|JdccTZZA22t);MhCz6#=o8tH)rNLmn6W31ZXFRZkSv?=eA;70$iK>_F~i{ zLaXV%pc4u3s^Ce;GStXV8M<~vS!kjW9%_r-NA}>x$z5cxlQRovQzs{{jDu?d_2255 zV)`@_4{wP6{#`qATmcsXi*Y3+!F?Q0k8k7NfIQrc-|V6bhjb5Z_Ibi)s5{(OS`{(n za})WynUgbGjnFi^ZEArwMfiX*OmF5F%oH>^CQYSc5S2nEOd@R4RB?OZFr!omwwtFz zDmsXHHC)RN_NK!6H!^W$5?ooZF%{CnW3l!eYNzroAI><&Yr>~tnI86078S(;HSX5N-gqYdL&jy#lR-*D0>Z zB?@@5t!R|zOhFA=18ab|jRB1YIHygswT^|4lVGgmn=juU7X{R?*GAt$6K|msBa}w0 z@P8ujo0%H}xzv_HSHmW4qIF9w>`dCWR0O_&`AEz|p?ifzo5g|OTdzfMm+se?nPncfo6!j_|z z+}QcYBCbJW5+p?!@MGRW$`BAuW#Hpt@z*Kz#H-9t^x+wI*=}@)dz^ik0FC}zux*~` zCZp#i`s*BIJDGdY;P(?%fgc7RrPsqQ<~n@<#fA6c``l5i`gAmGPJwNaC)h{xn_^(8 z9x6cG6d}TX4&otyT7*Qd?@!+*s0q7h%kQACM?(g6lRljUw*$JwxvUP}&*V7tak>MO zZ8PRI#KTb(7ud+%Y>(P!xU3fnm0>lgg?6@c@({At6rVSg*J6OH$*^Asd9WV3>AW~N zMU~()I@lc1OP!xrVt{Q%*c}h@JdoSCk%=W0RN;b(ftdb?Qv_DuU4j(219u5nO({e( z&O$766Q{&feHgI-Ie zkMc5Yc$>dF6jrU-peZxJ+R(N3d$>jz6R+8fPQfaa@3s~Dl+6t7w6%Evhy0suYvwM} zmV@iW*Q9yae%N2c+$adMwG#5Uwwxo7fOyK!qTn-*-7sr0#jp~;ci24Ovph$hqr2G0 z`!A8Z!R=$7!16c}Pg)O;HG8N%k!K{k6Cpih#8R99lU!r@DwibsXVgXsYr%dw>s&f} zoNLZBT}W1NCSDP-D5OEM)AF5tq34aDx*McS##M1})c^+rPDMjEo1g>9UITPQG-+1M z+Hc(*15JT_Nw6O2f|6rkvH#}4W%x8BvfoK9RYZMq&cBJe342JOjs?9DsvwFiCH0~C zkwZ@eEJxLmXR*S-*}C8g+ZwnXJnzG4sR5!z#j#KpI3zkGOPM)!IX{DENHf4fH3gR8BeWX0qvn>=SC;>`EO(kY#1>nA>hf>{nSF?F@ZtT`28{eM#omRhn_IuW4-@PHbujDI_S{~G6)*iE%Zaa z5j_xAB}0ei6mO^fsF=Ve_5`JJzQ%SygQx}@K^Jf#pqhIStrVvUx=>m&w9i_>sg8wi zZK1YcP_%hM*0M9nkUcYlznRI=Lo8aX&F3EE-Vh|xm+9rOA*5C#%8Px^gxHv!@n!kM6M9sH<=RCLMzwad(!1y}UY zsfWb|D4H5GvqakKpMgh4lj}AScEDL+zgmpnxQ-7)DnozfY(J_I3h}32@#yt9bj`m< zdv8b*+876=3o@pij?991DD%I->tRn==Z0@gfrhXO|E2gJ7iP4HW5^uJjRW=RIC#SJ zCc`Zw*eFl=|FxH{lh~i(SyfU^)0f*Vov>(DyMmh^(JR^v<;kF%-@}VqNG_m}O9e;g z;72o3=RflAh77J%4Jb}wXD_Y88{;A-EB`ui{$I_a|h7M81K($o>tp zT@l!iwGlgD*4o(%<{hI6i9hp8qq`gPzn^l`&4qKO=G6bawL!D1p<&{0+vE~ti$detI_djX=P zFcC>ml#m>(hMMSOu?ZL8auwN2LQnj}LWeG}7Ty*zi*lIwkwt>V6t|Ch_cT{7#~iNaDrv_*QD3Z0LBdc(W0d*QYCYzztYQufppE z?U48OH683jMolAcy)X@&&!IlrcQwvkaL)jXH4TB=U4ERF9e9B{Yxj-TBb9d|OQo<69D9>iy(0)DnR0DC!o%n`IO9#ZDVaMqzr zI2i{|(bYQGKQ&u;pTp#_7un&W2cc)k4P($(c2Tu5zP_ztwo`m$O!Dx){>PY8p;F<=iiTpU0S*j zB+IchirdZCEQ2U~m>!i&mQ}HHI&1=O_c8Bh1?k}3OV-IVdcn282x3n3#kr${x`?~q>x0&#gdTTCKI@9QX6ZCkA+!*j)4fk@O;*!g?WXRG%QDjpzwEFK2(UfUw9rjY~ z0m(StZ9m=+zD08qZ4>%*7$9AfZv<+eDH~eB7LmwRY=llymyrtXmL?H@_#@g0BRZh~ zZ$ln2^jf@`-UuK0y|WrsFui0cXpDzG`Yfr^NP%SDZfh!;-PS*WS2R9=WoM1hHRFNk zprkJNpSYMBf!Q=5BEL z{F@8t^BQzFI62fbStY4Ryo1t4;}qWK3$D?-1G@Ckttr6{*O0aA4RElPh4Y6`k!Fx0 zhRc=m+=jB)#^K{8^uZ?JiKJtYuiSYT8u3XCC|pIBd^bOt@2ellB(g~}6A;J#GN~Fj z(0nULnV372KUS=df+PNm1Sxofcm+P60u@2AvTNd-I#?KNB%kJs(UM{aX+q~g8v}h% z&9p%xKXJhmeoydH#g2HmKmX#icC=QulrqfN1Tx-a;WnHBZ<_1+lm1&+>0-J*c@k&Ug*JxtMVnG+70xAl>`A_a9)MB4W^0;*=pwq~>d`pf(DY9EaGA5Dy zF;w%|2b@^E7q8=&YIkT);kCFF_dylDN2x{HC$c<<=K;HZZ!Dq2fv|;McE{imr4B+e_@nO>F zH^tVolac*j3Xt$PD7jByjJMxfREoSEr58bT4C&}k#pAi3+t8yEk+hP0pxOKLjpgjqiNO;NO z7mH#;?#IC)&6`gk8$H5RP){#sW0~8)zA>Q^#w>&F*qy9<^Y6yM1?@UYw2%3j?-GN{ zS@9WaV^FhoThIw3WKD0f8Q#Xbo&;-SVIQ5Qhx72yQwF#a@Fbj9;gAi-Bb$<7Ys7{$ zU=qW6gL)QJ1SSfkJ<`j`P&TjD2o7Bj7+=joK6F54i!ffK^65g4F573d_2d@ zVaFq+(xJOl`n>e1;`^`|5=ojM9=nBEPy71j24wJMA2m>2!dUKo6cYuNcnMIFF}xEX zvp!0@rH5aLfux|WA3BT>Z-6rk;Wl1I8{?o?lf!(ygo>p%BFopl>Oh~n*TOdy=nnia zY}_i81KWa%=ya=`1=%6DLay?huTwklHAunBAOmkrg1peZ?0GPvJiLb~#?g2&-1vU= zLb$`J}Gc^vj)2GFCplM-}Nvk3ehAxB4xRlL9Hv^*Joehw}rjd)_I7&ccYXk-8aVqrA zze*kE?x$uenzUW^J?z<_^KNe(OM%z;N$_Jp*>LTkZHdRIpXei27dW+%u}RQl0Gpy2 z1x{6PJ_)u3EN6SfH|UWcT}BmXC;ln2%>Yqo3F!kgDX&XbvDo*yQsPE+jXE=$cA#%#q7eb|G&f9*ZbYX@SCBe^{<@T2aSCU|z zUs4<#4zlHu@=V}-!1h2y!kol8X#pGfM*}u;?VY~nqpvKfCR_~rW;giHJz-lA3+cSC z^Fp$jGAlh)MJS_iGOlDYnTw{ei6$v^PQVQ#NhT5@VeS^&-thChdrSql-hXZ)eOUT1 z8J0xkhY|~Ka~*WSmtvtI5e~#cPdx00O;NBI9g55ktfh+Wv)L7}Ct%)> z@LvMem}ZE9AtZ1p+`k?YDwY(|e_9BtfwxYfFA71$9j&S2yzYIPX(el8 z*iGy62FQzAUIk?u+dW!+vKQ2px_5{+dy^{=wN%b6ZFPwLq7xdm= zC%L%3Hb-%QToe;h&_Q}>NbNL5N;2>`ozalaY0wGZAs-Bf;X74TQYfTS7{QF=1)tMyP9ejoy{zj=(7f}A z%BIp$Eq!gCe)=BivY;xs>e3!|*1rNy;1U>Kjr&M;vPar3J3QtJ)h<{Rc3C5G8|gY^ zR0q>HB zX1ESX*f9->o#cKWc$cAM*i5B_N8^1YPbt&E=N=7aOCUZ6)jguKD*;3^}L2{1R*g zSK((v=&!$A1GD~NEejT?#_xi0!mGFN0Ha#9>rJQARPJ}!n@{kX_d?tpyj*cWk zlM$jJep)>>_9jX74n-W(=Guv;Ex`_<#SvZ9C5IK$8fKnB)bc=y%|HXCctM?iy5jo$ z&IEWE4X5;QG#X;`ut#&Bbi21w4l6agnK*tG%XYG#PVs3bIj~Qd@J~ZMk_Igp*#XBj ziJC=tSQcB2`kc3gU$w`uqJ3__+V$ z&Y^Gv&ZJl130rtk{;T;Lgk{Wbbe3LWfSmcOzsrn<#nT^&7BUrhF&1r4gm(Yeu1Fry zt?{r~4>yvaa9Rr5j4SBTZr&W1VD-T2aR3Ak}QdTSb7B7s3WBP*rm{xGgmm;BBZT?%!t*bP|#-JN^}}j8_*v1AZmbm zelb`Ds_bt=h90sN%ig^WJ-D8n!op-Ioz=nFtAhuD59Z(1Lu)iN@%e=jM(sXP7TX*J zhrYW)F3vl6>->vh9YGEDd+8^E2Ga3aijQzrSAk!~UZeeQO9?#gX34QC!W6%Sf zkS~(Z7hXmbgSye=67=^H^dr5PWP3^U+yeA2_nRp*EqOari4Y_hA;-TOLT{ix>Jaju zO*QbBz+ukoS7$6F26K@RNo*YCg&SCxc)Zkq3sf*CNrzrs@J5B~Mb5h#G_8%3gY?u| zn>0->q)L^Z{lJkqHwxvxy=mg&09OfW<(>gVwHe_-zru9RUM{MIeUKO=NYIS1r|RJy z+oSLp??mL^OJEUl_^a)NR=gjql7M+_6-+6h69s(%8-a;}F*3eH+GTr257%ZfabZ{J zN_>fb2;D`+@XecTB(ty5aylt028xm9n_NVK@;T7q9N}?v1nmP$N6h)a+EK(|PilB_ zTbC@-M0VJO#&zOVz`u)P;A7ry>WdbXh1b)ckMMF_j+OxZ);7kH8yV~0D?B9nQ4=M; zYr8t&G)lxy2dF8%mT|C`!nv>L2V^EI4^VFW`30sHYJe`W)!-ojV7TW=m{?t zV%cldEh>w{WK6##=&`{~B#_-i?}d#0N_ZQ5>!V>gXB|i-*OQ?x4x;FeSw#yjL}JBK zEUOc8(}UCS=b{Fx9gd+@{BulA#PwJ(4!V-Jkc?^x?h`-qTtBCTZqo?eZ&00RD_nwA zP!27?2x$3Qq+JPTk>oQag>)b|MyrnER1_h0`3c06`35|kEA-YVT&@uT#dC}?u$hw) zaYGLcX;2;ueX+164(`G4h%fWv6j|X_1P9c`XaHz?;9tV5<;!8#w^f;HZDv_nx`R>p zJjptrb6bhb6uaBQ#IUwM6xtQo;`=s)VJ)9ySRnq2O#aH4{ngUsua;(iwKn;yZAi7< zxK8i8>c?~mBJv6^lULPt?|kkvt1yMEy=t7rlP7R4yI7+c*WtjF^0am?9Hma-JdP z$d?+XZ>8rIhmF2z;%9g%9KcI2VwaADE~&wEDIjzS|DWiR`VG4Dh*w^so`*|B;8IrT zNZitmu%)^S`qk2Ti(LLIv!qRCsb0!yaoQ+5rF=y4VKY?XM%6j=a;Nkzm9GH8l%iZ0 zqLhQ?4k_cTTio_CCZv?Lt2T*~NL4+UC^=7wQg9yC`6QwNp;Wf;`+?GFIl0;u+{N(}CdI$Nr1NHWMew1`Jo22J$`~pc*gd}AR?nET1evuTuL?l&L)%#rsI8tfWNY~ABf|0Tk z)i&?l?k`Ft`6s5HLBYu=3Y!E}* z91@VMTD6upV36$d1SuLINFW4hwFv#cBFOnfAQeO)horMF1xP6YNUn~}VhBLW7qR^S z$vf|@x=Wk#K8ZtrTb$r*Q|Jzm?~n^eqgWs}D; z>K9UIe+M7M5KhzbUUf-~xDky#JD2p*yr@R0pTl;^mM zL+EhOJ~8TiRf5-H`3^9A0s_)Kn-0x+}hmAtez)BK?%Q~3?(}F zg$$j}(A};-dJ!)KlNUN%@#^$itSaKfhzJ&vzSJMYLSijuEL4^{WN=R_%vJ~kRw&-+ z(;%oIne9I=2;0QDO7&?aK|=K{Z$gCdJQ4C2NlZK_H}jxcXHRs{sUHU|@grfX{Ui8o z9K7XfAa^hI!yxB3V9;{PURj-Y4Ezxnl>aLi3^uW#k4Xg)Q9-9OY`t=c?1I+`7o+`E z^t=fAou&4{?|~r0K@<4n1h$StILOjf%u@dt$qL`%@|<&MyLB86PmCB#{`fgmxQMjH zIRdGVgG6F$#qo7|)oUdq{m_*sTzP#cvqWGT>TupN$&TN8{^DntVc66&qgee z5s=`DUEI9qjeli4<1^ZcC$t$&N%?%)s9~>h|1j5iE3flk(7J1``;c&u)H&Q!*)>qa z>A2a{^G*lt%G(}hqN4{BotIhY@N+`vo?<@$bjouc*S$K?Q<=j=<`hKc7_-dz9Q9dk z`OM|K^6@V$=enQsyvp&;D4%$@Q@>|&YC>|Hmy?{}cSue&j8^|qkz=Ekb&6c+b0FuY zR|_i~R{6!sh{mZis4i5i>To6$XMdky$-kC3x?kdiCW-SV5T~Te!~+iJdXxV=!^yLp zQba`Itck+GfWqM>-#+Iw8)9(6Grl_or#xDOt=KGZFd%T!Uj)vzPJY)`Pp|I>INno$ z6PW;xcgu<@6&Yaw;IIkcC=bm(@%#;~VL3n(<9MwBO!TmigY)KC_U=^A{C#h0bSKoN+V0U0ZQ(CCn|GJc%xugr%trMyn>s_)?Cnqv1IFe}h|QM> zn`fraDsG)%z}Ez3UsJ^46XK_~MiE={+2ufJO=*%fhc2gD55sfWatW_=$Ss$*2&xHR zKs9pfo(a{US?2x{Q)7~Ozh!E;%WL+3O4J;Wz*A83si4iC=DLtEk`MCRoaR6{jUk-o ze&7BgcR$2`&T}XxdeOx2Z7P@@)4YTBSZrimiL%-?l2Yma9ln6RL7f=X~-~sN!!0 z0#%F&s$BY=O3knKsuLe@=~my6_8XOz*{E1zR33ZLGope4qOu`GWvx@*bX>5NeHl*4 z^n8L-v>B%aXUUDsFW{8LB0DD>r;~Qq{Aoy&H_<1qNuRuJ4#|(9r}!ja!EF$k;E8$$PY!iJ;K{zzPA?IsK@m6`|Bd_1o5aMMl+E%+VFqjFCgo!FddC{yHS|g`p(gdT zyVS3w37(TCRgV2?n@s1${AbQIq#gR1$$hie4bMXE%Zy3ZZ%j;wZ7uw}zJ#9lC7#)r z@PIEV2`}*ncuCy}PUVVPs$Z8p2`<^!@UtWpL(H~hPi!euzFL)zUam)8#n?~(Tpv&m?C*NDI-A%?ZbW7_ay(=+)r>~=7X=-(8I33dDfkDWk+lhpgn$0G%*dCJ zk#`RKmKX_Rm3iWRC;~GSsr7@-^;P<*5lLSlBC9A=>$Vs_10wGS{cY?{>3|Q>0?r@i zA^ZXld0mq*ae_fQL^9PX^oMllpZ_infeDA4%{GL8WkY;oLvAJ-l4Z&W4S8?!G{X>z zR@c)nx)8tLg_O^;kn?~Fsq2))gd{}{7ZguTh#6!;^6PHKLBqe^vV{I$IgrxCKrTdq t+}0>5a#t||3)7DUc}5l(DAO-wEB9K|X?iwoxmAveb>I7a@64`NtGC3)LJ~+T2{fAb&TI?_306o*MhFp0*mWm8ef!?qJAJz^ z{g}sADvrx0g4ih@u5#IByJV7b3OlY4n^?g>FjX-Yib*i#s>HD|DHULhalkQ^xGG>f zzw@2xo~vCgNJ0h#nYn%Xd-a|B{mYg^JwdVB90%3i*fm?B&saS za_{)er{4RnU%dXl-@AVBhjsC%Z<@WQj^Zp{nctXy1y3Dos`uq(m1M*62aBYN3-cB{ zZhf7{|B3zTw>y?Iw_?vb^YiY!xptlTHG9Eb7%bR}!Q#^L%IXPw$>+YdW-r?-7q6UH zU0PjVU0YvSSzBCLT3KDQSH0DxwPkO0d417aU74TvR!_{YxvN{7_6hgI+yd7k*Amw< z*9zAv*9m*wU0+>s*Vk8^qedmmbcdH_ds*Nbmsu!KNcaRqwq3J#M9R^97ZY0?TW5(z9 znh(9V5oTFlb)qOA(=a3VNt%=+CmQ?Fo9m?TqY4!4zSHk}{eDup{eBT}fl`NCnHQDU zA19gL-wv~=BeV*KtIACKkbQW+WSDEpA`JQ~;@}_(7g9IuzrXht*rjZQUSe5SnkwaU zUn&tWQ@g0bTOL1bSubb=!L@GtqT>$+aa4H&RLUEMNoJ?rbeN-Jqp_2wZkpyER}=^d zD=F{z=@?aX(=zu{9?LpuHOlMZ$V+#^#2trcx?E^#n)u_q&Z-~_)4ek3WCBGpcCy3+ z)=?mYznbk;BYWacCUIDJlSvv=Op_=uH0oLW892+{Bk@CcdT;*+tN$PLMML6`f^Q7~u0=#(4BnHQsoUOY@Fjl%7YkR&hs zc$8#)H%_a7C1H?Meq0RW!i`Hx6~gDodwJHk6DJw^$&juf8IDmuKgj?dyX(oC9EpeHQy5U&1A*~eln&d;xUHR|luN!k}uxqDUorhPyg)9ur?uO z_RwrxY?wxM8iZ*|DaF!;SvSm%SF>T(Px?>{@X@e{2X&ez0SX#~ zRXiJteevR=ixwR}GLk2=VRsZ}!^5L+g35JAakLeT^2zKdFXOB`s5kte%BQSZ*yMUvOSUW6?_40y_hV*($SjczFmgn9t$ znVy%MK83zvlC{};n3-Q;Pyi7?2c26Q;J^!L)G*VlFB(w;oMt3v;%e^t;hX@gTw~h)z~Xl^%{jXk4C*Wbzm6SJVY^<1p=T z$wG?VOZraS_kbqC{!M%?v1{pefbJE^X2;wnn7J|;X3$Ae(N+~T3KyddyqC~&fx9?l zjH&V(`xoLejs1jmz34&{WS|O?GOEkcO}1k%;bYr*2Zv46)XA}lafw)XImFGg*e${x zPkfkwM=;jzb~5qyvT*#MVS+5Z&1!PMqyy~`)+rljDG6(JVHRgcjHWz)FxnW%x7fWW z+VuzKAnj`3T8>Q@7%;6qti<%v0)?4cRTD}JHj~E7j5wes+Ka7Ixq#|Bo4k&F`d-F5*AWuKqy2m7XU2)j${GV$;aoy0o~;U8r|rb}+nAl!%utf; zgZ?^zs!&V4DTzUnGVFS=_etiCOal~41G8rC3IcQ2vZBElKx@@N@d3|v40=N&U_xiC zg@>I0G2z2HRpjE~VpruVJg%e*+1n8}Z$m{}QR*;m>xw4K-Wp1{jxj!c2MK$WZ7qEn`< zY-i%U@E}wu;JkXsH1h2AvKL)?pW~+C(8a2FT&2%4obPyf5pVl>F%(a$7zcT=6Bd16 zEvqirznjHlk=85a5Efhw@HAU5HXH0f0_jFZd9~Px?DRsUW~_Xse)`HN(DZ35wmwoT;vEpm`Mv|RZqrcoDO_6 zC}(L9ns_;XsFROlb_`n>{k(A5&N;%Zop{@wRE1kr6R#eJ*=vA9jI~^it+@y^FSaj( zUcC?2zS~3X0A(#*j?Niv8}}a7Z6}rmJk+?W#8Kr1iU3AH!DA&_MFRh)$PZj$CY|RrsmkH&wk;C}td5Xsnv@ zM#Q+W{0E#+%O^aNUk_fYd61PsO@;QT>5%8md$1(`F}zR%&~gg!d9@~RnlH))sM^Ts z^_%gm=q;xhLyO^*aF$p5Eale3VrE?H^?&79vYYI%R=}a-0e)zWoe7H}-k9w7gc6Ow zwt6^aIJs54E4qVj6d8qWHy&Vi2bBaZoESGL8&)HBkoa9?>0qnl>bMtg$LXw)aXdyx zY&2)nY~7PV>?T`yP1!KV3U9e6k;ir1OR6e$@(6Q>ps~rsb;ADTTTb36Q*occTJTjp zXm*2*@7m~;m>=cbQO0Ui=x)QUX8k%M%(bn(-g{nXplfjhNf3i6y5FOnvf61KWA=6X zIO{N7xxrlHNBBmH|3iisa7wuVrTr@NhMslm=iDw{5$li`s6O8BFp2PqS>>=?TQQqP z9NVs;bCU!U7s4S(JY%TXW40Wkfmr!5W-xKWNhh2TWMhxOoxsjE%!9RCU9Oz{;2F3X zjc~R{zF7^Ru-FavHapQ)lBF@mFNC8J+Y=`q`-XS$*yWGG=L*IUF9>jyamdAAK3Rs_ z_{pQZf66dLw;o;l2(?SOB-o}K`3Cq#Ipi*;>{jktGCikzU%b}f1RwCP6k4|7y4}9o zbX{W*#qt5CzTl6dt5q#4Rc5}j8K6}&?ABj!f`pmIsh9No5aTisP(v(h!fq2kXPL;L z#9O<0Ha4(e;E{IL;TbL!ZWiP?-xj0qbK%zJ+w1|(5D*RBng|>Fg(MI%NiQ(BA{VDD zFJ`4yjj)GoqRVOyAZ)WUQ>R01&cz0x8Ie|gMXL9`vQxdcz1U0(DMZMi`T{cwOc4Np zN(&l`)3PxHVlNDACw@#ULb8pVAbiLRdd@mYtW9W|bYuCj>SAF8;xy^RK(#5sqzdmr zysmhMSrbEc6P(X{GfrKg6Zkez-Hf0Rt?X8PfEjPHGWz)r@hEXG{2H&mSl!pwgB4G; zSL~~8gh@)Gl+zSZtKJid-tO1DOV6gT6Eh88+5Nk z7wlnGgz{nl(y3xfBmN)0BaKLTU@d-7JUx2d+~!35n+h>L$?3yvaD9B7$m{)ni2v}k1cGQd%37SIGr(d_9qY1fUreNXSP8yh)RL1ePv zps-L@#}`aMKw;EgT6Cm>W6F0u=K7oj%FZW_e6F~3QZ^Bs3sihRX9a z$R`3*fIk2dLC#SWhg3MPMPRlQkyFT40avZ!CR8X-6P16oQa(x zCnk?D2Sv_F)_7KL5{;xqYzaXtwSSDmFQXO8TjvsJA>b&tF@vfNv5YfP*pV|zh7)RW zDv@aMq(wMopMGHzC^YyA#`+87rX+$b{#xTDG`^cHB0TPWT%BVi6qrGj1)fD(mw6RN zg&cIJUu_qS#*hkg+A@z&o?fFEf7Ckhx3;)n1Vbd4FWyyuj2x#P>pW|Gn(h(QN0Op6 zOvWAtr*y%l%N6h7k-5a6ydg}2l$FhK68;jgk<4e$hW~45nR#-SrXgAm0ZMF$hdgB7 zb`tNXsa5mZ03yOEP zH|=T!6qg&U*L;z)C9Fgt`$mQSBy9pl#xK%0g}LA2^EL zoE}eY-21&-jO?fy>l&rVDscGx6ckoa(_s{7Bs{AlwU^BxRYZ)czK;%r@`6v;&EIgm z5i;j|8)}4*b~eCRhe9VRzRNf{^)gmyNKTLYPL} zBXQ@`86ojpe_PIpTugz_l@B^lIk_dCv5CO$Ah2l~2w^!gx3XFUEj@s25Iw+6%%{lf zUErs|Iys_r?&4@WBHB)Vrr~BzT5`hL^imDBr0!$Hg|wa zj4zd>>JoNKszIGy-W29!?U_iBc#f6Yr-V;vLI+{uA;4&GShA$!pb4qH3ir~j@`+Cf zf+I_4>=U}f$ADHHA)Nlv6o=!B3^j-Qe4LGHZ!)7TWpaj*?6Zg=nn*Y`Ofdn|s_rKb z81G9Na*03=6Xf>|l*ICCt=V%)UDcpj?^I11Yby#u`A2$Ro1cSswe$p^z#=cJI1g?{7du`GDTR zAE40cG>5g3US9Z!8miJ^bg9Auox%u3$EkYO!sl!^853E^2-&eb=KU~n@?5+db{+sL z8;**T>1Ydr5ribT94szHN&J(IE%U~Ec8i+Z9%q`dvy%rq`3|dyyElmgE*x^Xm2u_m zO_FHdXn~k@nXCxGfr*#hifn#$3#{$L$bWyuxVcOjTcoyH=b|E^Lap;}!F_q2&NZl`RS3Xi9+USFj&V?wsy@e$DV5 zG(hHN6RS}e@!*i0J8=iSA|^+YsSTn+n@6Ug{AXKmhHqpJv>r3Rt zIO{9kdK|ADULUN^$I;s2{N@7Lh$2a9f7AmLKm;hYRSJ*TD3LpDH46O3-v3}SyqL2J z11L~so=`0Vm6o;2%(dE1UI!~iM$%S)-MMsQL-yQq=5TalgV;845jXtW>)g#x-RVXj zzRm6b`ODn+EhpWjN^Q@3;mNk1b@`iaZ z%;WAb&-=5GVHyl4X_p;TB4j*^V@u|Mp>aViuP1cmJF`PJ4CT%HvZ692N+_8(O_WLC z5`%9P^Oe0XDJGxPW4?B?&LnZ6plYmDCtHlbg)%Q3(Dyj*=zU9W@;mdhr)8JZJsl4Q zM^6(kkx=KAO+g|WM^ERYjMJ4YIL-OfX@XM=3PNjQcW=^Nrkj~xBL+4nG4dn( zMb((*6j(5DZtML#`x++0Y}*-9AieW#AW&u`WfhjL)%$mzoBjC>ZvN>P zyOR%HJ8Sl9M-64wI>NRs+9Kk{y>g0KS)(E-uI6DpyME55Skgvt?c_kJi2wE&Ss*Oo zhuLCtOv09#vrbvMX&@ymyS%`QlR&X-fQmYE%dcGJR{!h5Zq4x7I>X0+B9})DO_NK_ zy{!0SG!fsZ>ZAMj?BY60B;sL48CMqngQG#bS;#Kkh#J|P6>o`iN+aoLNLx+5kcUTE zOZr26n2XU}ZhV3gdk_$t>ehAAzu)Mi2%xe+m~yb7iZC{=rf9BSjh`X)8Pobg!#)Z5 z^Yf2;|NJF}F)#zc#D6g6Neq^<@XKoOltpUBD8Ek^gtpGpl%e!#LA$h_6-G5*=@ES zV|V9YUFhsyy*r+05)4eitGR~yczjaQgoVLL|4JIF$?#-0Au{Ie;jiTNVJ=*QF1O;S z5IN;KLP5eQhtHTJfbN;N$b&P3^3pSPgaRQML)ndKpjEs&H4cKk+Df^Zc-t(Ls^QruD$t-`iY2;H$ z|esZ!j2{wd6p1b_y+YB6%dVR1X5Y25;tqoX6k!bQ$ zCKrdjkH4Zpi=~Bwo)$%gkg8f&4a{kyQiMu9Vg{Ifyfrep6xypxlw-a2*W7PO7WKCw zKlyGjZEWC^Q?u3oQP)t$e8UXpN$)3bZ}bzXRR{r9l~b!qfm{n3tEQ}44ORb}7MO-< z)nRZ|-6O5);~ndvUvsVR(%fcA?9+o1WzTb#*-RF}<98Um0a$@l>?y-5g&D1YfxJ){ zRx(9hhf#)~>aVGqsez`Q0X%~GwOrBx?Sr(lW8ys>>kYsAd`)Y9X6elLqd3ndow;#N zRPoe}kvJIjf7E-|YYfKcOJ-&%m{vL9r$u?9&We_&*`jP$cG0U{JVgPPLUlQEtyg^L z+ndS!e$8Z_&R~9W^78jTnaH>zp^3{cZSYe(kl+?eHBe{>GL8Ny zY@!K<@Tm3OonZX-*P7`A1x8w@45g~k zskQ}(Ky2D*&;^+709AiX0WCAutv~v0PcW8D7ZJ4smr-ix%`QIG`Xwf9?&9iZi_{q9N;))UKvrKX7?K7$nDpZEt) zwnktDP;dc+l^4)yU{!q-WWZX{wyN&EU?$VXC*h z^J!%Qe=Bl;UkX&yIl!{Go;L&dj^4-KWG2$eqLG{Z1(#Wq+pcqG$4{4*6+@~|2xSDeY595IH-RnIzu&fP(HA{GdxQKtd8>M`%71p4Oa!&O_*{OroK+{Y0tQSIn z0$uSvln8rGulE-tg9CF1rD<5E0au{t1y8)L=^Z6q3TeAW(1L+NXN&J8i^?$*PS|RadbwQ#cS3#Vzc}j1ari(ejJBGenBCkE)_epURa&&hrc~V-|mvM9`nT)lGi&rB6Q*)FgpE=P961 z+~|(~;CeUv$~A8OxvOt5=qQ46ByyfK(38ENexs2dCfZ6Bn`I`alh)OeUR+E?iFQVI zt^2>`x|5&0`Wq&Go;T(5=dU_9<@3DRp6|HAt-f%;dxmSbRw-)>hErQ^Y2NrU z>z04^oFsJq)!}b4K~wU!H9@ljl8sFiwLd2@^Oe01re=l+qD~BR2v(}F%$73$-%cRI zhB9LXQ6VwZy=>;xUH81&`~xMdN6&H(dD39YhhE~$FFJf1g6}z;2=x06&f?-MA5eeo zqrHDSG44JLF)#m^&$nLrUJ3t*jV~RVz)Gk0s2SwHNc(2BPrfv=-~WEo?{=J}739L} zePCjBZsI$i{QtY|VE=y_@r{#uxF1iL?R~KMv+j&bO1XLJ!xQUJY`%`re!swcfxrv- z_qdE|qRzx-uysPA`@s*` z@LJn_^go-o+6RCCcE9cZUu`!$Fysdq`(Mmhd%<3Kz3u*q)}~l7RkX~{LtpyHjX(9L NTDGhYEj<2z{vT3Ncpd-% literal 0 HcmV?d00001 diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_5pa_Lucene50_0.tip b/src/main/resources/solr_config/Test_Sigmah/data/index/_5pa_Lucene50_0.tip new file mode 100644 index 0000000000000000000000000000000000000000..e6906504910f4315c9b92d693325489e33099018 GIT binary patch literal 1054 zcmZvbUr19?9LLW&zjN+w#%N2S4nC9*LQkQP^b|rt5cLo=UwSdO-LcXBvE}SFAr=V= zjxq^cF6?1~BO#&ILs_jEDJ~yGu>}jt9BvS64}+w$-8(nq-lzNhp6~gd-}%7lU3VXA zJ@59}ZdwA0Vo?H~;3cnJxs4El3*WaA<4-!Tu68;$2Ls#JTdoY+6tB|L)!)@Cw!y_~ z77=3zw;lf*GDp3}Nv9#)Pm5<5Nk&^yoXiq*Zi@I$C`Uw2`$%FBhT2uZ9=I@>nvidC z^X_2Fq>p`b0xpjkgS?(bGTzNXz@%#W)`jtUUiLTE5&o0|U$b6}gICkiU6G#)%bw=- z=^VK0S`33D3*h37G4Q=%aB^)7I^xEmqU7M(xilZd%7mow>KR&lUxnCtwNq_km*lpZ9K@J33~(#oSCA#$+;sHhL8RukXvjG2H_SSr*h5()YC?Z- z86$XFfhM3VtkJBZq~)YQd3eUpmYsxVqAhifhiJN>LS&f$rY{l=f;66O;G?l;Dm%6& z+QuRR+)#V1nGP4k4Yg({Eed36Cxc(3f|n?)Ho?XhaBweYRZx(AEGxXW5lWCuft^>Q zupzRmFTVp%yj`T=MNGa*7 cRFX#InEX;+mDT43Ki`~+Y}cRO(v6(&AHommQ<|KbmuhO_lAj!wm{Xcs?2=fL$N&V+kMFFXv_LiBf@<2W(xMkpTridK f25z1{uJOi}Mn)iYAP$H=pfULchz0?Zxpyo93{o9H literal 0 HcmV?d00001 diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_21e_Lucene54_0.dvm b/src/main/resources/solr_config/Test_Sigmah/data/index/_5pa_Lucene54_0.dvm similarity index 53% rename from src/main/resources/solr_config/Test_Sigmah/data/index/_21e_Lucene54_0.dvm rename to src/main/resources/solr_config/Test_Sigmah/data/index/_5pa_Lucene54_0.dvm index dcc159427bae72fd7ea4d8e23912596bced068a6..6ab0f8c32b4bf7914e852ad34ab339afe11d6ff5 100644 GIT binary patch delta 40 ycmV+@0N4NU0q_BkA`nC4+^>?LB~Z{MX4-Xf=vt97ng!rv;dIcE(HjJHK%>Qv#uLK; delta 40 ycmV+@0N4NU0q_BkA`ms)Y<>*o3*%Y+eRR^cl75jgng!b(*v+7k(HjJ;l}2lb0uyim diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_21e.fdt b/src/main/resources/solr_config/Test_Sigmah/data/index/_5pb.fdt similarity index 99% rename from src/main/resources/solr_config/Test_Sigmah/data/index/_21e.fdt rename to src/main/resources/solr_config/Test_Sigmah/data/index/_5pb.fdt index 6fa70d07d00fca766d3d3d13e2e624c756171a3d..1af78d6df8d64e2f6d51eb7403b88943da9c0fbb 100644 GIT binary patch delta 34 qcmcc6!FZvAae}IV^W!_~CoND7xS*PLtF-7v%tljj7nYKWh2{ViH4ixe delta 34 qcmcc6!FZvAae}IV>7AT9o~PW8BmdTxT-r9NZlkHV3(MVIe`Np>rw}Fp diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_5pb.fdx b/src/main/resources/solr_config/Test_Sigmah/data/index/_5pb.fdx new file mode 100644 index 0000000000000000000000000000000000000000..af14ddd5f40b75cf64ae98a24b25a07af1d63668 GIT binary patch literal 85 zcmcD&o+B>nQ<|KbmuhMdT#{dun&Ot3nv+uOmRMZknU|7U!N9=4==}K3`bi5^11_kh i-6}155yQa52oz- literal 0 HcmV?d00001 diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_21j.fnm b/src/main/resources/solr_config/Test_Sigmah/data/index/_5pb.fnm similarity index 93% rename from src/main/resources/solr_config/Test_Sigmah/data/index/_21j.fnm rename to src/main/resources/solr_config/Test_Sigmah/data/index/_5pb.fnm index 51590880847b0cc1c404b2bf73f53b5999131f36..55c986b6a39e3febc39907083165c392f0ad0764 100644 GIT binary patch delta 32 ocmX@ecaU#_w1D&DJL@McPz|`Cns%$S=tay%Z6S7+Mg0ql0q*Y(Pyhe` delta 32 ocmX@ecaU#_w1DZIoI0MT+>ayw)|On_HmPHywh%kZ=Q5pV0O>#ukpKVy diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_5pb.nvd b/src/main/resources/solr_config/Test_Sigmah/data/index/_5pb.nvd new file mode 100644 index 0000000000000000000000000000000000000000..3f787262749f3bfa7622b1295561361fe161bcc2 GIT binary patch literal 59 zcmcD&o+B>kQ<|KbmuhP4mtT}y?2=fL$N&V+kMFFXv_LiBf@<2W(xMkJ3c!6<(oPhJ=JL@McPz|`Cns%$S=tay#y?HEd(y3Vh;c!6<(oPg<_oI0MT+>ayw)|On_HmPo+-aMB3GcCmc-%$=i diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_5pb.si b/src/main/resources/solr_config/Test_Sigmah/data/index/_5pb.si new file mode 100644 index 0000000000000000000000000000000000000000..9d48fece1d70f7719410bd8019533d12ed87bddc GIT binary patch literal 523 zcmZWm&q~8E81IB`u5Kz$@#roCFAMG3uJa@~HxLF6>QN|NlWvtZDM?!P9Qp#jfv?~T z2;Kzo=4B7yUDI|I#sYyazklDC6t*l-I=EChxt$?Blm#`)EZ&HrQSkzBiJ{Nb2m*e4dPw%ege?@|UN<^4fC1F5Wp(G`<}~o?Sq9^76gM?f)pbMf4Xg{(YV0~@JOe&l z76ndWD?^;(%}mu%K}=Yw;lQ<|KbmuhMdkY8MqnU`K1UX)pqTI7Ccglg0Rmxefl~mq CkR7G~ literal 0 HcmV?d00001 diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_21e_Lucene50_0.pos b/src/main/resources/solr_config/Test_Sigmah/data/index/_5pb_Lucene50_0.pos similarity index 99% rename from src/main/resources/solr_config/Test_Sigmah/data/index/_21e_Lucene50_0.pos rename to src/main/resources/solr_config/Test_Sigmah/data/index/_5pb_Lucene50_0.pos index df12b5d67baf1bf5d3c2e6a2ad43ce3953d3184f..a53bffc20df6a834beb155ef1cd5271596070efd 100644 GIT binary patch delta 32 ocmcbWa4TVgl7RE$JL@McPz|`Cns%$S=tay%BNYRdD3g-&00@2#`v3p{ delta 32 ocmcbWa4TVgl7Q)*oI0MT+>ayw)|On_HmPo-k%|G!s+?;g00Y_&D*ylh diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_21e_Lucene50_0.tim b/src/main/resources/solr_config/Test_Sigmah/data/index/_5pb_Lucene50_0.tim similarity index 99% rename from src/main/resources/solr_config/Test_Sigmah/data/index/_21e_Lucene50_0.tim rename to src/main/resources/solr_config/Test_Sigmah/data/index/_5pb_Lucene50_0.tim index 73828c1eda2bd50cee65401272c9b0fa1e8515a1..2eaa5abaeef2ff133cab6348cf2c31c399e1df1b 100644 GIT binary patch delta 79 zcmX@NnDN|V#tG5_&X4b`pR_ayw)|On_HmPo-PBJq~{nFHA0Nnx&-2eap diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_5pb_Lucene54_0.dvd b/src/main/resources/solr_config/Test_Sigmah/data/index/_5pb_Lucene54_0.dvd new file mode 100644 index 0000000000000000000000000000000000000000..d2740034258a3fd359f4a0e33d7e1921c91d9b3a GIT binary patch literal 94 zcmcD&o+B>mQ<|KbmuhO_lAj!wm{Xcs?2=fL$N&V+kMFFXv_LiBf@<2W(xMkJTridK f25z1{uJOi}My4QjAP$H=pfULchz0?N8OA993?LB~Z{MX4-Xf=v=R1> delta 40 ycmV+@0N4NU0q_BkA`ms)Y<>*o3*%Y+eRR^cl7Nving!b(*&tAn(HjIzM|xI#h!N)i diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_21f.fdt b/src/main/resources/solr_config/Test_Sigmah/data/index/_5pc.fdt similarity index 98% rename from src/main/resources/solr_config/Test_Sigmah/data/index/_21f.fdt rename to src/main/resources/solr_config/Test_Sigmah/data/index/_5pc.fdt index 9fdb5b689588a1d694506d915e149b10c804681f..7e09b976cd37ac135737d396bceeb1c0d5b337f1 100644 GIT binary patch delta 32 qcmV+*0N?-NDd8!QB@jd7+^>?LB~Z{MX4-Xf=w7iks1yX3lRJayw)|On_HmPBw=?W2+;C<^10sCnQ<|KbmuhMdT#{dun&Ot3nv+uOmRMZknU|7U!N9=4==}K3`bi5^11_kh i-6}155y!y92oztpET3 delta 32 ocmX@acZhF-w1DZIoI0MT+>ayw)|On_HmPBwwlF)3$Leh|0OxWI)&Kwi diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_5pc.nvd b/src/main/resources/solr_config/Test_Sigmah/data/index/_5pc.nvd new file mode 100644 index 0000000000000000000000000000000000000000..379eb6addd375e24df8e2cc07ea3cc8f401d0cd8 GIT binary patch literal 59 zcmcD&o+B>kQ<|KbmuhP4mtT}y?2=fL$N&V+kMFFXv_LiBf@<2W(xMk}3?LB~Z{MX4-Xf=w6X7o&@1H{%Pj84*LKA delta 31 pcmV+)0O0@70nh=E9uPI$Y<>*o3*%Y+eRR^cl7Nveo&>|rJm}zR4>AA% diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_5pc.si b/src/main/resources/solr_config/Test_Sigmah/data/index/_5pc.si new file mode 100644 index 0000000000000000000000000000000000000000..01b7f5ec7de5b17d749aea3649f414c090887293 GIT binary patch literal 523 zcmZWmK}*9h80~~^u5Kz$5WMJR;ANp*+pRajxq&cnP|udwq+6v)O45$~4*dh3y?FBO zPw*y)H!u4Uf~M^{7zP60_g>!nUXt^V=%_VLeN1t$>*6WFG`XSyQxv5#`2Ko%cxq4H z+rekbm$wpAs&cDYAy?&B+hRf;hcsR6+`~Bpb4(HA2iF|>5k4I-9y1P;kkQ79=0Y}g z12{nU4Aa;vU?PP%qjhZ{;m)05>_&O0l2LoW26~MN0J%R?AwfOsFjw=GCLzJ)!RFdL zbEyiJav!Tfl!}=q)vH1K7O;Tc>GwNRd2=56^~^&gki<>H)=kqgyN=`NW~1fVvF{Zx zWb2*|VkWjT4A40#ihz~{N@_VJ!hbTv{8EPgk#hJ3X305dZI2ckWELU`;|;73pvp-Z q)J+)2XcXcIi4o%jCV()6wTq#9lQ<|KbmuhMdkY8MqnU`K1UX)pqTI7Ccglg0RpSP8;St{ Dx3eA) literal 0 HcmV?d00001 diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_21f_Lucene50_0.pos b/src/main/resources/solr_config/Test_Sigmah/data/index/_5pc_Lucene50_0.pos similarity index 97% rename from src/main/resources/solr_config/Test_Sigmah/data/index/_21f_Lucene50_0.pos rename to src/main/resources/solr_config/Test_Sigmah/data/index/_5pc_Lucene50_0.pos index d14dc838116bbbf00b32a141930164f75e52003e..853f53dde48d0e3584f8f1362e1028b5d9cb4179 100644 GIT binary patch delta 32 ocmaDQ`ATwvl7RE$JL@McPz|`Cns%$S=tbN{qb)ovS_|Af0seUog8%>k delta 32 qcmV+*0N?-W8R{93A`ms)Y<>*o3*%Y+eRR^cl7O)?vayw)|On_HmPBvwmyc~#;jL70wxv~rpAWG1{TJ~CPo$} Q7MoLe_o%Q;J{~Ux0OM{RfdBvi diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_21f_Lucene50_0.tip b/src/main/resources/solr_config/Test_Sigmah/data/index/_5pc_Lucene50_0.tip similarity index 87% rename from src/main/resources/solr_config/Test_Sigmah/data/index/_21f_Lucene50_0.tip rename to src/main/resources/solr_config/Test_Sigmah/data/index/_5pc_Lucene50_0.tip index 80de34c8a1f34bca4d1fc9ec5bde428124541dea..3a56b5e3b0d00a23b1c2a28c88ce908742c71360 100644 GIT binary patch delta 32 ocmeBT?P8rEBjEh_&iY9UR0A%krrjzndJ(r#CyI%sGpd*a0N=mQ<|KbmuhO_lAj!wm{Xcs?2=fL$N&V+kMFFXv_LiBf@<2W(xMk}TridK f25z1{uJOi}MiwA-AP$H=pfULchz5bj;?LB~Z{MX4-Xf=w6XBng!rv;vHa-(HjKPQK?dj0}}!O delta 40 ycmV+@0N4NU0q_BkA`ms)Y<>*o3*%Y+eRR^cl7f*kng!b(*+cM=(HjKJCa~XzJQK?LB~Z{MX4-Xf=wPumv<(DFukJGfAP-gm delta 32 ocmaDW{Z@K{s(|U8oI0MT+>ayw)|On_HmPZ&=@woVW#*%10Qiv(UjP6A diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_5pd.fdx b/src/main/resources/solr_config/Test_Sigmah/data/index/_5pd.fdx new file mode 100644 index 0000000000000000000000000000000000000000..ee5030f4250e42cbfbf2b22d661fad907fd15910 GIT binary patch literal 84 zcmcD&o+B>nQ<|KbmuhMdT#{dun&Ot3nv+uOmRMZknU|7U!N9=4==}K3`bi5^11_kh i-6}15k-)&j2oz?LB~Z{MX4-Xf=wPuc69)v)WSW)lrw(-h delta 32 ocmX@acZhF-w1DZIoI0MT+>ayw)|On_HmPZ&wlF)(4YnpV0OxrPnE(I) diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_5pd.nvd b/src/main/resources/solr_config/Test_Sigmah/data/index/_5pd.nvd new file mode 100644 index 0000000000000000000000000000000000000000..aecd6242a8ce5d8b60bed337be74cba3b0d64244 GIT binary patch literal 59 zcmcD&o+B>kQ<|KbmuhP4mtT}y?2=fL$N&V+kMFFXv_LiBf@<2W(xMj$3?LB~Z{MX4-Xf=wOj9o&@#b@QUdj56%Dp delta 31 ncmcb>c!6<(oPg<_oI0MT+>ayw)|On_HmPZ%-aM9U&QGBL-KGvY diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_5pd.si b/src/main/resources/solr_config/Test_Sigmah/data/index/_5pd.si new file mode 100644 index 0000000000000000000000000000000000000000..e8d44a9cad953d91b7eca605a31e9a07006608f4 GIT binary patch literal 523 zcmZXRO-jQ+6vtB`t&OdU6w;y;{Yd%tvh$_f;qyF(7h|_dLcR*5E>Ke@_^t*k)})> z>Kf<+)zJ)XC&!T}%rc5@0f9TWnzkKgLzNl13oM}42m>zlX0jW>uDPF8(**M%LZz_z zXP&xL8A+&zWIs&UOcB*Zqg@l2K<)H;ovFAv4ZM2l!MGd6P0dmb!!-2%X;0M~n~oJj zfag&w4V?U`EYnc|{KwRk5pPA8GU1$?__z!puVuC@SX0M@6>7LBd&4yq58@S;&jTxm t#eAyG2}N)epb)YVp^?i$L?BYmhxWB&Plm$_>E-xwnSZ1t-Jg7a{sNuPrm_G4 literal 0 HcmV?d00001 diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_5pd_Lucene50_0.doc b/src/main/resources/solr_config/Test_Sigmah/data/index/_5pd_Lucene50_0.doc new file mode 100644 index 0000000000000000000000000000000000000000..88074fc22ac744369ebe73f058ffc5dd37d0a681 GIT binary patch literal 110 zcmcD&o+B>lQ<|KbmuhMdkY8MqnU`K1UX)pqTI7Ccglg0Rp*~EY$$E C<{ifX literal 0 HcmV?d00001 diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_21g_Lucene50_0.pos b/src/main/resources/solr_config/Test_Sigmah/data/index/_5pd_Lucene50_0.pos similarity index 95% rename from src/main/resources/solr_config/Test_Sigmah/data/index/_21g_Lucene50_0.pos rename to src/main/resources/solr_config/Test_Sigmah/data/index/_5pd_Lucene50_0.pos index e7d3b4a5c8f91169eba64bbc540d72a79cccc291..7d95f62dca69c724326f4b877f3d634623ddb14f 100644 GIT binary patch delta 47 zcmV+~0MP%%62%gbA{;~G+^>?LB~Z{MX4-Xf=wJ#=bz^02Wi>EgFlmv%AhBNK2m~#@ F9hvp^6bt|W delta 47 zcmV+~0MP%%62%gbA{;f`Y<>*o3*%Y+eRR^cl7b3Mbz^02Wi>EgFlmv%AhBNK2n5Kz FRMhf<6&U~k diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_21g_Lucene50_0.tim b/src/main/resources/solr_config/Test_Sigmah/data/index/_5pd_Lucene50_0.tim similarity index 97% rename from src/main/resources/solr_config/Test_Sigmah/data/index/_21g_Lucene50_0.tim rename to src/main/resources/solr_config/Test_Sigmah/data/index/_5pd_Lucene50_0.tim index d2fe011286ac9d453c9a6d6dd56ef8b73b5aabc5..75268701623ddf421e733a63409b97fa957d9b8d 100644 GIT binary patch delta 74 zcmccNeZzZ#w1D&DJL@McPz|`Cns%$S=taUrZG8-}jae_*1ayw)|On_HmPZ%wmyc~#;lj@0wxv~rpAWGW)_A9#)gJw Q7Mqhf3T0VN#plQa0Pr9lH~;_u diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_21g_Lucene50_0.tip b/src/main/resources/solr_config/Test_Sigmah/data/index/_5pd_Lucene50_0.tip similarity index 81% rename from src/main/resources/solr_config/Test_Sigmah/data/index/_21g_Lucene50_0.tip rename to src/main/resources/solr_config/Test_Sigmah/data/index/_5pd_Lucene50_0.tip index 0f9971d6c696139bd4078d20f70ddad08d8f3bf6..29eec316a95785ecf5d9c5c7bc8cb6a41a4c8753 100644 GIT binary patch delta 32 ocmdnOvV~=WjDYjwJL@McPz|`Cns%$S=taUt9Tp~*l314v0Ou(UO#lD@ delta 32 ocmdnOvV~=WjDYE#oI0MT+>ayw)|On_HmPZ&4hs_t*QLOf0N|z#rvLx| diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_5pd_Lucene54_0.dvd b/src/main/resources/solr_config/Test_Sigmah/data/index/_5pd_Lucene54_0.dvd new file mode 100644 index 0000000000000000000000000000000000000000..d2342d3370992c21f1c9342e031ad95a8ee24291 GIT binary patch literal 94 zcmcD&o+B>mQ<|KbmuhO_lAj!wm{Xcs?2=fL$N&V+kMFFXv_LiBf@<2W(xMj$TridK f25z1{uJOi}#s(mDAP$H=pfULchz0>Z7q7(t3jZ9Q literal 0 HcmV?d00001 diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_21h_Lucene54_0.dvm b/src/main/resources/solr_config/Test_Sigmah/data/index/_5pd_Lucene54_0.dvm similarity index 53% rename from src/main/resources/solr_config/Test_Sigmah/data/index/_21h_Lucene54_0.dvm rename to src/main/resources/solr_config/Test_Sigmah/data/index/_5pd_Lucene54_0.dvm index b16d4d3f87a7c7b8e4745b534b9147a03ea4d6fb..7658be84a4b89b50b13cf6e0a1cb15921b464fe3 100644 GIT binary patch delta 40 ycmV+@0N4NU0q_BkA`nC4+^>?LB~Z{MX4-Xf=wOjDng!rv;#IJb(HjK8)r9+y&J=?H delta 40 ycmV+@0N4NU0q_BkA`ms)Y<>*o3*%Y+eRR^cl7x{mng!b(*=Z1w(HjIq_g#H|LlUI` diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_21h.fdt b/src/main/resources/solr_config/Test_Sigmah/data/index/_5pe.fdt similarity index 98% rename from src/main/resources/solr_config/Test_Sigmah/data/index/_21h.fdt rename to src/main/resources/solr_config/Test_Sigmah/data/index/_5pe.fdt index 08beda6e6d0249f15cf284eb04447c6a5a3ed9b1..8107d2798d360973d1d1815f5222b834ec524b4f 100644 GIT binary patch delta 32 ocmaE${6Kkvs(|z3JL@McPz|`Cns%$S=ta^-)8&FJ&*}p_00C$ZDF6Tf delta 32 ocmaE${6Kkvs(|U8oI0MT+>ayw)|On_HmPN!>2g69_foE}0QgG|=l}o! diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_5pe.fdx b/src/main/resources/solr_config/Test_Sigmah/data/index/_5pe.fdx new file mode 100644 index 0000000000000000000000000000000000000000..6d1047ae6620e74176e97d56db14757b93cc474b GIT binary patch literal 84 zcmcD&o+B>nQ<|KbmuhMdT#{dun&Ot3nv+uOmRMZknU|7U!N9=4==}K3`bi5^11_kh h-6}15k;K5n2oz?LB~Z{MX4-Xf=wh)e69)u9$*!;N><)SW delta 32 ocmX@acZhF-w1DZIoI0MT+>ayw)|On_HmPN!wlF)(riL4u0O=AANB{r; diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_5pe.nvd b/src/main/resources/solr_config/Test_Sigmah/data/index/_5pe.nvd new file mode 100644 index 0000000000000000000000000000000000000000..2e8daec7b2467d664a78df7f3c3466d39cc5d433 GIT binary patch literal 59 zcmcD&o+B>kQ<|KbmuhP4mtT}y?2=fL$N&V+kMFFXv_LiBf@<2W(xMkh3|Up literal 0 HcmV?d00001 diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_21h.nvm b/src/main/resources/solr_config/Test_Sigmah/data/index/_5pe.nvm similarity index 61% rename from src/main/resources/solr_config/Test_Sigmah/data/index/_21h.nvm rename to src/main/resources/solr_config/Test_Sigmah/data/index/_5pe.nvm index a9ad89fa4ae78e9ed189ee1d209e1fb735fb6ab2..2175c63509e8eb113ebc640bd6b972899e05f640 100644 GIT binary patch delta 31 pcmV+)0O0@70nh=E9uPz0+^>?LB~Z{MX4-Xf=wgvBo&@uHxRmFN4>c!6<(oPg<_oI0MT+>ayw)|On_HmPNz-aM894zo@G+=UIe diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_5pe.si b/src/main/resources/solr_config/Test_Sigmah/data/index/_5pe.si new file mode 100644 index 0000000000000000000000000000000000000000..5c30c8e30412dc6b507063ab777b815ed8aab90e GIT binary patch literal 523 zcmZvZ-%7(U6vjKDo2#3O6TH-$fj0|H|7?0CI5!v!9Mt>LHR)Dqlai!m&!I2i3y81a zBX}o>ci!wRG;LQwW+3F`ck+GbB)NKzPCC=n#{~Bc2QOkw#DoM?QIy*7>+|K|sXKe? z1|KO~&m~jpa;kYCN9|kNpp}(c^ literal 0 HcmV?d00001 diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_5pe_Lucene50_0.doc b/src/main/resources/solr_config/Test_Sigmah/data/index/_5pe_Lucene50_0.doc new file mode 100644 index 0000000000000000000000000000000000000000..274a50e2a092c049efda6126827bba1ef02ad5aa GIT binary patch literal 110 zcmcD&o+B>lQ<|KbmuhMdkY8MqnU`K1UX)pqTI7Ccglg0Rj_}BbNXG Dw_P3^ literal 0 HcmV?d00001 diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_21h_Lucene50_0.pos b/src/main/resources/solr_config/Test_Sigmah/data/index/_5pe_Lucene50_0.pos similarity index 96% rename from src/main/resources/solr_config/Test_Sigmah/data/index/_21h_Lucene50_0.pos rename to src/main/resources/solr_config/Test_Sigmah/data/index/_5pe_Lucene50_0.pos index b9675e6df0657c8613e572b9691b388d39fe06be..e5269a400bf93921132fa25008b66059ec65d26f 100644 GIT binary patch delta 32 ocmX>mc1&!7l7RE$JL@McPz|`Cns%$S=ta^-BLQxf{G~w^0P-CU82|tP delta 32 ocmX>mc1&!7l7Q)*oI0MT+>ayw)|On_HmPN!kpMRf!`AQD0PCaayw)|On_HmPNzwmyc~#wayw)|On_HmPN!jt~>eV!Jo-0Ok}9DF6Tf diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_5pe_Lucene54_0.dvd b/src/main/resources/solr_config/Test_Sigmah/data/index/_5pe_Lucene54_0.dvd new file mode 100644 index 0000000000000000000000000000000000000000..3c84891e88454eb7921f760138c16a2fca44e4d0 GIT binary patch literal 94 zcmcD&o+B>mQ<|KbmuhO_lAj!wm{Xcs?2=fL$N&V+kMFFXv_LiBf@<2W(xMkhTridK f25z1{uJOi}#>OCZAP$H=pfULchz5Z=miNv84WblQ<|KbmuhO_lAj!wm{Xcs?3-GWn37nM$N&V+kMFFXv_LiBf@<2W(xMkh zTrkz~24YNNj12#wfRmFEq#Ot=#TekC5D^9^m>dI);U>)_jnK@(f)K~h>;;p9Yxd({ kV1d~SwZV^3^g;5YwFXcw1A`w(0sjGw$uD3+!8@A`0i>}_SpWb4 literal 0 HcmV?d00001 diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_21i.fdt b/src/main/resources/solr_config/Test_Sigmah/data/index/_5pf.fdt similarity index 97% rename from src/main/resources/solr_config/Test_Sigmah/data/index/_21i.fdt rename to src/main/resources/solr_config/Test_Sigmah/data/index/_5pf.fdt index 554ac54e6df8e0732345f11a4a48f7d0d646953a..915f6afae958847df56ad6d7c53b4effbe218aad 100644 GIT binary patch delta 32 qcmV+*0N?-m7Wx*DB@jd7+^>?LB~Z{MX4-Xf=wz`qK??+u*v8re2M^`| delta 32 ocmew*_DgJns(|U8oI0MT+>ayw)|On_HmPl+sUtT_`qdYj0Q*4?DgXcg diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_5pf.fdx b/src/main/resources/solr_config/Test_Sigmah/data/index/_5pf.fdx new file mode 100644 index 0000000000000000000000000000000000000000..91f0e1fbfbfb38d5437c86b63e43c397239191b5 GIT binary patch literal 84 zcmcD&o+B>nQ<|KbmuhMdT#{dun&Ot3nv+uOmRMZknU|7U!N9=4==}K3`bi5^11_kh h-6}15k;1^l2ozwE^kw8v6hM literal 0 HcmV?d00001 diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_21i.fnm b/src/main/resources/solr_config/Test_Sigmah/data/index/_5pf.fnm similarity index 95% rename from src/main/resources/solr_config/Test_Sigmah/data/index/_21i.fnm rename to src/main/resources/solr_config/Test_Sigmah/data/index/_5pf.fnm index d90ad387861899136d29a93fe0717920c94bf3f3..a0c8e98bc8c898a874e2d9fa9468fb12be0bc6bd 100644 GIT binary patch delta 32 ocmbQsKbL=kw1D&DJL@McPz|`Cns%$S=tas#?L2mtp61>j0O-69Q2+n{ delta 32 ocmbQsKbL=kw1DZIoI0MT+>ayw)|On_HmPl+b{;!R@J=@;0O1V{z5oCK diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_5pf.nvd b/src/main/resources/solr_config/Test_Sigmah/data/index/_5pf.nvd new file mode 100644 index 0000000000000000000000000000000000000000..9e8dac35094081120349399bf68f71516681ecad GIT binary patch literal 59 zcmcD&o+B>kQ<|KbmuhP4mtT}y?2=fL$N&V+kMFFXv_LiBf@<2W(xMkB3?LB~Z{MX4-Xf=wy*Ds01mayw)|On_HmPl*-U=4CXZ5oI;lU2) diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_5pf.si b/src/main/resources/solr_config/Test_Sigmah/data/index/_5pf.si new file mode 100644 index 0000000000000000000000000000000000000000..c19bcaf8ed63dede4eca7cedb1d05a521cc89873 GIT binary patch literal 523 zcmZuu%}T>C9Pfl~u5Kz$@Tix8mxZ=#J3R@`4upY&dM~v}w@Q=kvo;fA-c7 zK2o-V0+X6z%K1i&#<#LTxjYR?y4t qRVSeg!AXcB$S0IxF9DcBq@3H%wd>4m`$Bp>eq5CwDM>H({oN0$?xs=z literal 0 HcmV?d00001 diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_5pf_Lucene50_0.doc b/src/main/resources/solr_config/Test_Sigmah/data/index/_5pf_Lucene50_0.doc new file mode 100644 index 0000000000000000000000000000000000000000..905e908a98f8dcb75b3973a82a9c87defae02832 GIT binary patch literal 110 zcmcD&o+B>lQ<|KbmuhMdkY8MqnU`K1UX)pqTI7Ccglg0Rp}U|0M$e Dxb7aD literal 0 HcmV?d00001 diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_21i_Lucene50_0.pos b/src/main/resources/solr_config/Test_Sigmah/data/index/_5pf_Lucene50_0.pos similarity index 96% rename from src/main/resources/solr_config/Test_Sigmah/data/index/_21i_Lucene50_0.pos rename to src/main/resources/solr_config/Test_Sigmah/data/index/_5pf_Lucene50_0.pos index 9d9c9411eb590c9ac3baa71202404ee92595c85e..2a5c9594d1158545284d22e9795807d41cd7c4f9 100644 GIT binary patch delta 32 ocmZ3%zk+{)l7RE$JL@McPz|`Cns%$S=tas#qat<|J(ip60O~vr3IG5A delta 32 ocmZ3%zk+{)l7Q)*oI0MT+>ayw)|On_HmPl+Q4u?f*h&pH0OKqTKL7v# diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_21i_Lucene50_0.tim b/src/main/resources/solr_config/Test_Sigmah/data/index/_5pf_Lucene50_0.tim similarity index 97% rename from src/main/resources/solr_config/Test_Sigmah/data/index/_21i_Lucene50_0.tim rename to src/main/resources/solr_config/Test_Sigmah/data/index/_5pf_Lucene50_0.tim index ec2d1f4f4f13953eadccb10c902179aaa6d46e98..4645ab366ebaf8ced33cb4acf3ac9fc5a9320a13 100644 GIT binary patch delta 73 zcmZp6X?B?)E#Un4&iY9UR0A%krrjzndXX|wTOUJgW7ael0W)JWOCU5cGBPqYGB7jQ NEWr9fhIzhg0RW>B9QyzO delta 73 zcmZp6X?B?)Ens>lr;g_-_v6UFwI!FfO=_E{t&btLF>4x&fQf~Lsj;Dng_)7LxtXz% O!Da#04>HW}lF|W}Z5?C) diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_21i_Lucene50_0.tip b/src/main/resources/solr_config/Test_Sigmah/data/index/_5pf_Lucene50_0.tip similarity index 89% rename from src/main/resources/solr_config/Test_Sigmah/data/index/_21i_Lucene50_0.tip rename to src/main/resources/solr_config/Test_Sigmah/data/index/_5pf_Lucene50_0.tip index f62d78a036516d9d952f11a69840d9416ca00fda..7d99950f007fef16e184f6e5a08e452f2ca189fd 100644 GIT binary patch delta 32 ocmdnVvXfz>% delta 32 ocmdnVvXfayw)|On_HmPl+4kr`KA-$Sg0OO(#DgXcg diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_5pf_Lucene54_0.dvd b/src/main/resources/solr_config/Test_Sigmah/data/index/_5pf_Lucene54_0.dvd new file mode 100644 index 0000000000000000000000000000000000000000..894f91ff086c1bb380d10088b4b176617b3ef8fa GIT binary patch literal 94 zcmcD&o+B>mQ<|KbmuhO_lAj!wm{Xcs?2=fL$N&V+kMFFXv_LiBf@<2W(xMkBTridK f25z1{uJOi}#%3UOAP$H=pfULchz5aoM;Vg=5TYG` literal 0 HcmV?d00001 diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_5pf_Lucene54_0.dvm b/src/main/resources/solr_config/Test_Sigmah/data/index/_5pf_Lucene54_0.dvm new file mode 100644 index 0000000000000000000000000000000000000000..a737bb9a1c0ecc3cc344a246bef8bb84e9d106cc GIT binary patch literal 240 zcmcD&o+B>lQ<|KbmuhO_lAj!wm{Xcs?3-GWn37nM$N&V+kMFFXv_LiBf@<2W(xMkB zTrkz~24YNNj12#wfRmFEq#Ot=#TekC5D^9^m>dI);U>)_jnK@(f)K~h>;;p9Yxd({ lV1d~SwZV^3^g;4t-VabN1A`w(0sjGw$uD3+SDtKA2LP;!PE7y+ literal 0 HcmV?d00001 diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_21j.fdt b/src/main/resources/solr_config/Test_Sigmah/data/index/_5pg.fdt similarity index 99% rename from src/main/resources/solr_config/Test_Sigmah/data/index/_21j.fdt rename to src/main/resources/solr_config/Test_Sigmah/data/index/_5pg.fdt index 0737c543cce9a46c633ba833c43d24d8c5e67d3b..6be0ddf5dc685cb61dc1fdc31560c1209e6f9137 100644 GIT binary patch delta 32 qcmV+*0N?+%YPM>SB@jd7+^>?LB~Z{MX4-Xf=w`7s{WJv7w?9e?WDoNI delta 32 qcmV+*0N?+%YPM>SB@i{-Y<>*o3*%Y+eRR^cl8CW2{WJvUnQ<|KbmuhMdT#{dun&Ot3nv+uOmRMZknU|7U!N9=4==}K3`bi5^11_kh i-6}15k;cHp2ozjD7nZ5z!1 literal 0 HcmV?d00001 diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_21k.fnm b/src/main/resources/solr_config/Test_Sigmah/data/index/_5pg.fnm similarity index 93% rename from src/main/resources/solr_config/Test_Sigmah/data/index/_21k.fnm rename to src/main/resources/solr_config/Test_Sigmah/data/index/_5pg.fnm index cba49809bba35f50ff243dd721005160d2791eb6..176f7f7afbecd1a827411fffd464a266469460cb 100644 GIT binary patch delta 32 ocmX@ecaU#_w1D&DJL@McPz|`Cns%$S=tbH_Z6S7+3Clb>0q(R88~^|S delta 32 ocmX@ecaU#_w1DZIoI0MT+>ayw)|On_HmPf)wh%kZ!}#`>0O^1Z$N&HU diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_5pg.nvd b/src/main/resources/solr_config/Test_Sigmah/data/index/_5pg.nvd new file mode 100644 index 0000000000000000000000000000000000000000..b89ee2ae259e6ae0c4dc5a809352f1175adb23b2 GIT binary patch literal 59 zcmcD&o+B>kQ<|KbmuhP4mtT}y?2=fL$N&V+kMFFXv_LiBf@<2W(xMk>3?LB~Z{MX4-Xf=w^{Fo&>{nSM}zA4+sDN delta 31 ncmcb>c!6<(oPg<_oI0MT+>ayw)|On_HmPHx-aM9SqXRhr-bxN$ diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_5pg.si b/src/main/resources/solr_config/Test_Sigmah/data/index/_5pg.si new file mode 100644 index 0000000000000000000000000000000000000000..be67df26882da82358a31afd5293cd75552418c8 GIT binary patch literal 523 zcmZXRO-chX6vwB+w03M&tl&~N1vd@z+3HHLwjdNNjQb%@GIeB<49U#UbLa)UfeSC- z5!?yl&P@*?Xy!{O4Fq0(FaP&{$-DT7j(W4y#}p4u7cU5=$u$j_q9~2=_t(qgbASHc z4?a`A3M5mSa;teDSL0XPVnUsTG+pjIzzl*6Q^fee4TpY&PsWVLjKd^kv{R+IkcYMb z&VcS2ma$i2B85dpGaVrD;Lb31qoS!gqYi-s^cE8Ua{pe11P$%OLd{c}gap?YyZ^=W zDow#s?qfBGQgN?Ib!D_~0~_dr(P*%cFXy4(&TEJSlDKO)x@Fmxd2X8{yR+>%@dD5c zl|g`(y_|UEpEd6TJAGP}gOsEEd7b_N!Q`e- literal 0 HcmV?d00001 diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_5pg_Lucene50_0.doc b/src/main/resources/solr_config/Test_Sigmah/data/index/_5pg_Lucene50_0.doc new file mode 100644 index 0000000000000000000000000000000000000000..5769ec0d7166682a5b1a8bb0fe29a471c806fc7e GIT binary patch literal 110 zcmcD&o+B>lQ<|KbmuhMdkY8MqnU`K1UX)pqTI7 zTrkz~222WyOv)^*Z0sDIT--doeEb4}Lc$`VV&W2#QqnTAa`Fc>Ccglg0RkHe<~;-e DxxXIH literal 0 HcmV?d00001 diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_21j_Lucene50_0.pos b/src/main/resources/solr_config/Test_Sigmah/data/index/_5pg_Lucene50_0.pos similarity index 98% rename from src/main/resources/solr_config/Test_Sigmah/data/index/_21j_Lucene50_0.pos rename to src/main/resources/solr_config/Test_Sigmah/data/index/_5pg_Lucene50_0.pos index 5f25753bfe896c05a62194faf2a9c34d6139cd00..887fdee34b111a17f2329c6a8e243c461d133a4a 100644 GIT binary patch delta 32 ocmZ4MvespSl7RE$JL@McPz|`Cns%$S=tbH_qwk6=_sYH60sjRLi~s-t delta 32 qcmV+*0N?+uM6E=SA`ms)Y<>*o3*%Y+eRR^cl8CV~_aOxFq5YHktPqI+ diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_21j_Lucene50_0.tim b/src/main/resources/solr_config/Test_Sigmah/data/index/_5pg_Lucene50_0.tim similarity index 98% rename from src/main/resources/solr_config/Test_Sigmah/data/index/_21j_Lucene50_0.tim rename to src/main/resources/solr_config/Test_Sigmah/data/index/_5pg_Lucene50_0.tim index 9e5b32eac72d940d550c2ec36a525fad55b304d8..597ab0cd14c51d9983911f0c357976b0d7b14e6e 100644 GIT binary patch delta 74 zcmZ2Gm2vG<#tG5_&X4b`pR_ayw)|On_HmPHyjxRII*MgTH0r?9L_5c6? diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_5pg_Lucene54_0.dvd b/src/main/resources/solr_config/Test_Sigmah/data/index/_5pg_Lucene54_0.dvd new file mode 100644 index 0000000000000000000000000000000000000000..7b91bd1da164bc360c0a0ec1627761c93d3ddc68 GIT binary patch literal 94 zcmcD&o+B>mQ<|KbmuhO_lAj!wm{Xcs?2=fL$N&V+kMFFXv_LiBf@<2W(xMk>TridK f25z1{uJOi}#+D#;AP$H=pfULchz5a`eJlL{5ZxV| literal 0 HcmV?d00001 diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_5pg_Lucene54_0.dvm b/src/main/resources/solr_config/Test_Sigmah/data/index/_5pg_Lucene54_0.dvm new file mode 100644 index 0000000000000000000000000000000000000000..f156d55353c1818cb5b82229dd33d71932664a04 GIT binary patch literal 240 zcmcD&o+B>lQ<|KbmuhO_lAj!wm{Xcs?3-GWn37nM$N&V+kMFFXv_LiBf@<2W(xMk> zTrkz~24YNNj12#wfRmFEq#Ot=#TekC5D^9^m>dI);U>)_jnK@(f)K~h>;;p9Yxd({ kV1d~SwZV^3^g;6DVg)Fdfx!=?fd7ETsS^a%<(zcR{u{9ZL1iQAMUL`pYv;Y7A diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_5ph.fdx b/src/main/resources/solr_config/Test_Sigmah/data/index/_5ph.fdx new file mode 100644 index 0000000000000000000000000000000000000000..768185a76e5a54ebddcd3fbc1a46d79e41121cf4 GIT binary patch literal 85 zcmcD&o+B>nQ<|KbmuhMdT#{dun&Ot3nv+uOmRMZknU|7U!N9=4==}K3`bi5^11_kh i-6}15k-@;k2oz(R~QdyOnw1W1_p||gFFBVgBv&i literal 0 HcmV?d00001 diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_5ph.fnm b/src/main/resources/solr_config/Test_Sigmah/data/index/_5ph.fnm new file mode 100644 index 0000000000000000000000000000000000000000..daa8e502fc81e324fda5a76a3a98597edcd11222 GIT binary patch literal 1857 zcmd6ozfQw25Qm)>+EhqD8TcavTO}rxp|CO(6$%9fkXS7%zO^v7JH1|af;gF#P`L(a!8F{ zLlg@osZEGA!EfgHedS%UAc4R6&BDHkpu&|$1z#>%<(xiKl9aZ?0hdU&pNbA^^$~-B%HXkcps;G80B4SqKLh_|@rMsHn%JNSV$?@DRgh8(a4M zbTH@(kQ<|KbmuhP4mtT}y?2=fL$N&V+kMFFXv_LiBf@<2W(xMj`3mQ<|KbmuhP4mtT}y?3-GWn37nM$N&V+kMFFXv_LiBf@<2W(xMj`42&RA z5J+}|&zW7T-USY_TYR*esgRp|?3mHWY1H32YIav+RV69i`k!&(1< Qfd7ET^(l{PBR}7Wa|!^V?@$R5>QE!8l$hz$GeCA?4=)k zWNaA;Dciqdo*$#55oHNwUK&x-UeSz;LrViE zKy@`k+pSlUGE~jTHn4!&q#St64`mNS+w7HUmXS2VsBY~1ninpc zoMy~Nau8=cRD^mpXwL*DPzS@|U@mUXBEMC5@YKUeN3&GJFb)0G)(ySgb*&_Hs~56V zR|N^>TLlIJxTp$}!#`bVl&oQJClQJvpHPOq6krOGaz1vhU1v5PUr0~K_si-dCF%9K_x1zblQ<|KbmuhMdkY8MqnU`K1UX)pqTI7Ccglg0Rp;Tx32*J Dxw#&; literal 0 HcmV?d00001 diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_21k_Lucene50_0.pos b/src/main/resources/solr_config/Test_Sigmah/data/index/_5ph_Lucene50_0.pos similarity index 99% rename from src/main/resources/solr_config/Test_Sigmah/data/index/_21k_Lucene50_0.pos rename to src/main/resources/solr_config/Test_Sigmah/data/index/_5ph_Lucene50_0.pos index 054f652bbe41cd9b404376ad66205d26877e4bb8..da4a92b5910e5dfe0a45ab6cfd370556b0c2180f 100644 GIT binary patch delta 51 zcmV-30L=gBhymz`0gxgcL*v}9lAt9}&?RQtb#mxv3QTolWo~6PFkdj4X_H_i7_nCk JL_x delta 51 zcmaFS!T6$sae|Vp>7AT9o~PW8BmdTxT-r9Ni_51pIW;fU)F9qqX6EDs6^V`Eye=&I HHBqJjO#~E~ diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_21k_Lucene50_0.tim b/src/main/resources/solr_config/Test_Sigmah/data/index/_5ph_Lucene50_0.tim similarity index 99% rename from src/main/resources/solr_config/Test_Sigmah/data/index/_21k_Lucene50_0.tim rename to src/main/resources/solr_config/Test_Sigmah/data/index/_5ph_Lucene50_0.tim index 12b1f877f20bbb245a40e62a5811b41d1b5aeb15..adc190ca16f8a638ab1df1a1ddfbd9e29b8b1a39 100644 GIT binary patch delta 79 zcmZp=&DeCCae}mf^W!_~CoND7xS*PLtF-7v#zbv>OtCCG0W)JWOLGGQLo;JjQ$r(T Uqsi;c{Wr5Smglf^dRwEzGB delta 79 zcmZp=&DeCCae}mf>7AT9o~PW8BmdTxT-r9NYofM3rdXDpfQf~Lsj;D%vAL1Ck*T?v U!Q^%3{+rnu%X3)HJ@~c(0BfcpO#lD@ diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_21k_Lucene50_0.tip b/src/main/resources/solr_config/Test_Sigmah/data/index/_5ph_Lucene50_0.tip similarity index 94% rename from src/main/resources/solr_config/Test_Sigmah/data/index/_21k_Lucene50_0.tip rename to src/main/resources/solr_config/Test_Sigmah/data/index/_5ph_Lucene50_0.tip index 71a4263afbd8ae19f6bf99d28e9d8fb150e6f873..35d16b1f0a2d9127cfd7c64e3dd53057f0df69f8 100644 GIT binary patch delta 32 ocmaFB@qlB3jDYjwJL@McPz|`Cns%$S=tagx9Rn7Y(5dpu0Q2q*k^lez delta 32 ocmaFB@qlB3jDYE#oI0MT+>ayw)|On_HmPf)jsXkHzu@YB0PxBWF#rGn diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_5ph_Lucene54_0.dvd b/src/main/resources/solr_config/Test_Sigmah/data/index/_5ph_Lucene54_0.dvd new file mode 100644 index 0000000000000000000000000000000000000000..844ebf60168139e55e5b4a535d0ca8d2085491d5 GIT binary patch literal 94 zcmcD&o+B>mQ<|KbmuhO_lAj!wm{Xcs?2=fL$N&V+kMFFXv_LiBf@<2W(xMj`TridK f25z1{uJOi}rY0bDAP$H=pfULchz0>?la46>4oDpU literal 0 HcmV?d00001 diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_5ph_Lucene54_0.dvm b/src/main/resources/solr_config/Test_Sigmah/data/index/_5ph_Lucene54_0.dvm new file mode 100644 index 0000000000000000000000000000000000000000..64e85bd4dce58abfbaac4c2f18d8e7a1696a75d7 GIT binary patch literal 240 zcmcD&o+B>lQ<|KbmuhO_lAj!wm{Xcs?3-GWn37nM$N&V+kMFFXv_LiBf@<2W(xMj` zTrkz~24YNNj12#wfRmFEq#Ot=#TekC5D^9^m>dI);U>)_jnK@(f)K~h>;;p9Yxd({ lV1d~SwZV^3^g;6DHy@x}1_nQn0{#OUlV8AuezS7i1pvvWPJ{pe literal 0 HcmV?d00001 diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_21l.fdt b/src/main/resources/solr_config/Test_Sigmah/data/index/_5pi.fdt similarity index 92% rename from src/main/resources/solr_config/Test_Sigmah/data/index/_21l.fdt rename to src/main/resources/solr_config/Test_Sigmah/data/index/_5pi.fdt index d2de5eb324e478bfc4f7bbb0fffb74417dfdc994..2c4c6ca515a9b4a413e47b4a6d0dc41fc65cc651 100644 GIT binary patch delta 32 ocmZ3;v5;ees(|z3JL@McPz|`Cns%$S=tb5>(-+JvQObWT0PBhlWB>pF delta 32 ocmZ3;v5;ees(|U8oI0MT+>ayw)|On_HmPT$=?i9-_828g0OX+!@&Et; diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_5pi.fdx b/src/main/resources/solr_config/Test_Sigmah/data/index/_5pi.fdx new file mode 100644 index 0000000000000000000000000000000000000000..4649e22bef9f1951024f001fbab1bf8e299c1bc2 GIT binary patch literal 84 zcmcD&o+B>nQ<|KbmuhMdT#{dun&Ot3nv+uOmRMZknU|7U!N9=4==}K3`bi5^11_kh h-6}15k;TBo2oz?d@zV?iH3P0Qw>hVE_OC delta 32 qcmV+*0N?-S4dxAy8xS?zY<>*o3*%Y+eRR^cl8mt{w*~~t9=7!M6%UvI diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_5pi.nvd b/src/main/resources/solr_config/Test_Sigmah/data/index/_5pi.nvd new file mode 100644 index 0000000000000000000000000000000000000000..b378f0cbef26b58274d7fc6749138ab8fc33b25c GIT binary patch literal 59 zcmcD&o+B>kQ<|KbmuhP4mtT}y?2=fL$N&V+kMFFXv_LiBf@<2W(xMkx3ayw)|On_HmPT#-V~Om!y=~v+^`Oh diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_5pi.si b/src/main/resources/solr_config/Test_Sigmah/data/index/_5pi.si new file mode 100644 index 0000000000000000000000000000000000000000..c13bdfd5e2b1dfd040e4ecbd75f2ef144b82f03c GIT binary patch literal 523 zcmZvZ-%7(U6vjKDo2#3O8+fTV18)}6t?lNO;M_nMIGFdPHtE*UBqeFfolQ<|KbmuhMdkY8MqnU`K1UX)pqTI7Ccglg0Rk6XuIm8+ Dx^5m! literal 0 HcmV?d00001 diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_21l_Lucene50_0.pos b/src/main/resources/solr_config/Test_Sigmah/data/index/_5pi_Lucene50_0.pos similarity index 84% rename from src/main/resources/solr_config/Test_Sigmah/data/index/_21l_Lucene50_0.pos rename to src/main/resources/solr_config/Test_Sigmah/data/index/_5pi_Lucene50_0.pos index b4416ff74485579900d7dec2d3d9010e164f43f7..9035e44182e74107f4da021b122be50b6fc0e0af 100644 GIT binary patch delta 32 ocmZ3+x{P&#l7RE$JL@McPz|`Cns%$S=tb5>qXH(DDk+@{0Ozs|$N&HU delta 32 ocmZ3+x{P&#l7Q)*oI0MT+>ayw)|On_HmPT$Q2`T6U*+>D0OQ0Cy8r+H diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_21l_Lucene50_0.tim b/src/main/resources/solr_config/Test_Sigmah/data/index/_5pi_Lucene50_0.tim similarity index 93% rename from src/main/resources/solr_config/Test_Sigmah/data/index/_21l_Lucene50_0.tim rename to src/main/resources/solr_config/Test_Sigmah/data/index/_5pi_Lucene50_0.tim index ff46c0fdce57a04988ca18be56d26faf48a18b47..9a8088dec90b34f1b4edcd0e948d29e0875a3a11 100644 GIT binary patch delta 72 zcmdlewoz3&010w?yBU4LD6C;z2 NGpBH|9L>$)1ptDr9NGW? delta 72 zcmdlewozayw)|On_HmPT#wmzm?LB~Z{MX4-Xf=xVVnk^uy_*rZMIvkw6P delta 32 ocmX@ae2961jDYE#oI0MT+>ayw)|On_HmPT$&Ll<_F`jMg0Ok}8VE_OC diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_5pi_Lucene54_0.dvd b/src/main/resources/solr_config/Test_Sigmah/data/index/_5pi_Lucene54_0.dvd new file mode 100644 index 0000000000000000000000000000000000000000..e92b64c96e8a1ae8f95ead042c7ac87966cc51fa GIT binary patch literal 94 zcmcD&o+B>mQ<|KbmuhO_lAj!wm{Xcs?2=fL$N&V+kMFFXv_LiBf@<2W(xMkxTridK f25z1{uJOi}rsg1ZAP$H=pfULchz0@U65SF24yzox literal 0 HcmV?d00001 diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/_5pi_Lucene54_0.dvm b/src/main/resources/solr_config/Test_Sigmah/data/index/_5pi_Lucene54_0.dvm new file mode 100644 index 0000000000000000000000000000000000000000..7a29d793c7e4abb12e78d3df4fc5c6b03ebaba01 GIT binary patch literal 240 zcmcD&o+B>lQ<|KbmuhO_lAj!wm{Xcs?3-GWn37nM$N&V+kMFFXv_LiBf@<2W(xMkx zTrkz~24YNNj12#wfRmFEq#Ot=#TekC5D^9^m>dI);U>)_jnK@(f)K~h>;;p9Yxd({ kV1d~SwZV^3^g;5Im=91c1A`w(0sjGw$uD3+*`}SM0JlI*Pyhe` literal 0 HcmV?d00001 diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/segments_1yb b/src/main/resources/solr_config/Test_Sigmah/data/index/segments_1yb deleted file mode 100644 index f5edafe563e145e0163f5a427c474ed9a44f4e3d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 681 zcmcD&o+HjtoSL4SnpaZHz`(#}dMBrj=PCE&$iKBEm$psnWj3r#Vq*o$fPh{u0|QqS zkiiKQVu?30OkqS*U(4ZBnw*-KYG(8w3PAc`Y#0p^1M5#k*I!4P{xo#`4W#K$N7vs( zn*I!Q{Vk;F&qUYXMwCZ;j-$k1K9CZCX#Or6|OU}>D%`6GY%uV$TPEF=D dG&L}^G%`0cw=gs|JD@T71vr@iiMlnlzW~rqXAJ-V diff --git a/src/main/resources/solr_config/Test_Sigmah/data/index/segments_5cu b/src/main/resources/solr_config/Test_Sigmah/data/index/segments_5cu new file mode 100644 index 0000000000000000000000000000000000000000..7b625f52630f9a79aeff2c13910f42aff518dbeb GIT binary patch literal 745 zcmcD&o+HjtoSL4SnpaZHz`(%f{P@oLNefg1E~uv6DlK}E&1{-n%Ek(m0fF*=3=A^Q zfebF75KFvifh8lF`bZ9+(&W^rWs}e=55EB+~S!q3cf}O@BJN{xs6`XQ1oPAWeTJy8bNU^)vD%=jY~TmV{*H kruqh_Ci5Da8Wx1NnFBCQ_v$$46n3Hqsr2*8J4S4_n delta 30 icmeD9&)D&waf2KS>uuQ^XBTW%W^t{CFem5MO9KGY)(x8g diff --git a/src/main/resources/solr_config/Test_Sigmah/data/tlog/tlog.0000000000000002541 b/src/main/resources/solr_config/Test_Sigmah/data/tlog/tlog.0000000000000006952 similarity index 99% rename from src/main/resources/solr_config/Test_Sigmah/data/tlog/tlog.0000000000000002541 rename to src/main/resources/solr_config/Test_Sigmah/data/tlog/tlog.0000000000000006952 index 1302c93735666ca1d08b4a89885b667a32f80c26..1c003140ab815de3f86d1a6b7cfeea87aa04b518 100644 GIT binary patch delta 28 fcmdlQur*+V1uN@=kP<)7wzk9r^p9@e_5CALD B5!L_z delta 51 zcmX?XbJ%9XBNo=%vNxSSY<|vSBdGvpG5~?3PqRycZm_>kP<)7wzk9r^p9@e_5C9*` B5sCl+ diff --git a/src/main/resources/solr_config/Test_Sigmah/data/tlog/tlog.0000000000000002543 b/src/main/resources/solr_config/Test_Sigmah/data/tlog/tlog.0000000000000006954 similarity index 98% rename from src/main/resources/solr_config/Test_Sigmah/data/tlog/tlog.0000000000000002543 rename to src/main/resources/solr_config/Test_Sigmah/data/tlog/tlog.0000000000000006954 index de92aa1dbc867d2e36432109a3669bf3c207a8c4..7cc6d6c638360c59e2fb07f0d2ffc716b64007f7 100644 GIT binary patch delta 51 zcmbR1JlA;x2MgTJ1OVHb B5Ci}K delta 51 zcmbR1JlA;x2Mg46ib9x^9VDdztyBw2 delta 28 fcmca@blYfyEDP&x*_&Mno0V83MIp?|4wBLUqtXg` diff --git a/src/main/resources/solr_config/Test_Sigmah/data/tlog/tlog.0000000000000002545 b/src/main/resources/solr_config/Test_Sigmah/data/tlog/tlog.0000000000000006956 similarity index 99% rename from src/main/resources/solr_config/Test_Sigmah/data/tlog/tlog.0000000000000002545 rename to src/main/resources/solr_config/Test_Sigmah/data/tlog/tlog.0000000000000006956 index 47926d6e0963dbebea98f11827a6e67d74bf992c..e03a208b10fbca78aa706daf0e92a140ea5408cb 100644 GIT binary patch delta 30 hcmeC!%h<7(af2KS>x1OS#R{91SzMza%*nZN(g3<^3(Wuk delta 30 icmeC!%h<7(af2KS>uuSaTNZ3qW^s*zFem56Ndo}E)eNNo diff --git a/src/main/resources/solr_config/Test_Sigmah/data/tlog/tlog.0000000000000002546 b/src/main/resources/solr_config/Test_Sigmah/data/tlog/tlog.0000000000000006957 similarity index 99% rename from src/main/resources/solr_config/Test_Sigmah/data/tlog/tlog.0000000000000002546 rename to src/main/resources/solr_config/Test_Sigmah/data/tlog/tlog.0000000000000006957 index 448e708178702a223438afee9ad7b9448adb459a..1a512eb871ee1d0f98cda5b3d9a5e6d311a766b5 100644 GIT binary patch delta 53 zcmbPyhiUR1rVVl|tPheOzxl9PndQPt1u&BV2v$C5c1h3;_V)>j5ApGLk9YNR0g4I& E0G5~)DgXcg delta 53 zcmbPyhiUR1rVVl|thZ%vK1tZD%yMC+0+`7F1S=mjyCmoa`}+jNhxqur$GiHu07V4> DR*e%- diff --git a/src/main/resources/solr_config/Test_Sigmah/data/tlog/tlog.0000000000000002547 b/src/main/resources/solr_config/Test_Sigmah/data/tlog/tlog.0000000000000006958 similarity index 93% rename from src/main/resources/solr_config/Test_Sigmah/data/tlog/tlog.0000000000000002547 rename to src/main/resources/solr_config/Test_Sigmah/data/tlog/tlog.0000000000000006958 index 2af556a7ffefa6e91090dd85c5721c40f19a69df..8b016bbd392221daf156d0fd516e8e7ecdde75a1 100644 GIT binary patch delta 51 zcmbOyI!|v7HoGudaVmhB3_!r?)$Ed>8|?2B6d&T_?;h{!=K>TJ1OVs5 B5MTfR delta 51 zcmbOyI!|KI2FK51|Z<{YIaG`4fgj5iVyMecaL}Va{-D90sxQO B4b%Vt