/**
* Un SearchWidget qui ne se base pas sur la feuille de style
+ *
* @author cmarchand
*/
public abstract class AbstractSearchWidget extends Composite implements SearchCtxInfoProvider, RequestSaver, ResultOperationListener {
- private String documentId;
- private String etatId;
- private String elementId;
- private DisplayParameters displayParameters;
- private InitParametersDTO initParameters;
- private SearchInitParametersDTO searchInitParameters;
-
- // colAnBudgChooser
- private ListBox collectivitesListBox;
- private ListBox budgetListBox;
- private ArrayList<ChangeHandler> changeHandlers;
- private HorizontalPanel divMain;
- private TextBox dfCollectivite;
- private Button pbHelpCollectivite;
- private VerticalPanel mainPanel;
- private LabelValueDTO currentCollectivite, currentBudget;
-
- // statusBar
- private StatusBar statusBar;
-
- // criteriaTable
- private CriteriaTable criteriaTable;
-
- // result table
- private VerticalPanel resultTableContainer;
- private ResultTable resultTable;
-
- // divers
- private WorkingPanel working;
- private boolean exportPossible;
-
- public AbstractSearchWidget(String documentId, String etatId, String elementId, InitParametersDTO initParameters, DisplayParameters displayParameters) {
- super();
- this.documentId=documentId;
- this.etatId=etatId;
- this.elementId=elementId;
- this.initParameters = initParameters;
- setSearchInitParameters(initParameters.getSearchInitParameters());
- this.displayParameters=displayParameters;
- initComponents();
- working = new WorkingPanel();
- initWidget(mainPanel);
-
- }
- private void initComponents() {
- mainPanel = new VerticalPanel();
-// mainPanel.setSize("500px", "300px");
- HorizontalPanel toolbarPanel = new HorizontalPanel();
- toolbarPanel.addStyleName("TopnavBk");
- toolbarPanel.add(constructColBugChooser());
- toolbarPanel.add(new InlineHTML(" "));
- ComplexPanel buttonBar = constructButtonBar();
- toolbarPanel.add(buttonBar);
- mainPanel.add(toolbarPanel);
- statusBar = new StatusBar();
- statusBar.getPaginationWidget().addChangePageRequestListener(new PaginationWidget.ChangePageRequestListener() {
- @Override
- public void onChangePageRequest(PaginationWidget sender, int requestedPageNumber) {
- loadPage(requestedPageNumber);
- }
- });
- criteriaTable = new CriteriaTable(this);
- if(displayParameters.isSplitterVisible()) {
- SplitLayoutPanel slp = new SplitLayoutPanel();
- slp.addNorth(criteriaTable,80);
- slp.add(resultTableContainer = new VerticalPanel());
- slp.setHeight("100%");
- slp.setWidth("100%");
- mainPanel.add(slp);
- } else {
- criteriaTable.setWidth("100%");
- criteriaTable.setHeight(("100px"));
- ScrollPanel scroller = new ScrollPanel(criteriaTable);
- mainPanel.add(scroller);
- mainPanel.add(resultTableContainer = new VerticalPanel());
- }
- this.mainPanel.add(statusBar);
- criteriaTable.init(initParameters.getSearchInitParameters(), false);
- criteriaTable.addNewCriteria();
- resultTableContainer.setWidth("100%");
- }
-
- /**
- * Appele quand la collectivité est modifiée
- */
- protected void collectiviteChanged() {
- if(dfCollectivite==null) {
- currentCollectivite = new LabelValueDTO(collectivitesListBox.getValue(collectivitesListBox.getSelectedIndex()), collectivitesListBox.getItemText(collectivitesListBox.getSelectedIndex()));
- }
- ServiceLocator.getXemeliosService().getBudgets(initParameters.getSearchSessionId(), currentCollectivite.getId(), new AsyncCallback<ArrayList<LabelValueDTO>>() {
- @Override
- public void onFailure(Throwable throwable) {
- GWTUtils.handleRPCError(throwable);
- }
- @Override
- public void onSuccess(ArrayList<LabelValueDTO> budgets) {
- budgetListBox.clear();
- for (LabelValueDTO budget : budgets) {
- budgetListBox.addItem(budget.getLabel(), budget.getValue());
- }
- NodeList<Element> options = budgetListBox.getElement().getElementsByTagName("option");
- for(int i=0;i<options.getLength();i++) {
- Element option = options.getItem(i);
- option.setAttribute("style", "width: auto;");
- }
- fireOnCollBudgChange();
- }
- });
- }
- private void fireOnCollBudgChange() {
- for(ChangeHandler ch:changeHandlers) {
- ch.onChange(null);
- }
- }
-
- /**
- * Appelée quand le budget est modifié
- */
- protected void budgetChanged() {
- currentBudget = new LabelValueDTO(budgetListBox.getValue(budgetListBox.getSelectedIndex()), budgetListBox.getItemText(budgetListBox.getSelectedIndex()));
- //criteriaTable.removeAllCriteres();
- //criteriaTable.addEmptyCriterion();
- }
-
- protected void loadPage(int pageNumber) {
- startSearch();
- ServiceLocator.getXemeliosService().loadPage(getSearchSessionId(), pageNumber, new AsyncCallback<SearchResultDTO>() {
- public void onFailure(Throwable throwable) {
- GWTUtils.handleRPCError(throwable);
- }
- public void onSuccess(SearchResultDTO result) {
- handleSearchResult(result, false);
- }
- });
- }
-
- /**
- * Construit la barre permettant le choix de collectivité et du budget
- * @return
- */
- protected Widget constructColBugChooser() {
- this.collectivitesListBox = new ListBox();
- this.budgetListBox = new ListBox();
- this.changeHandlers = new ArrayList<ChangeHandler>();
- collectivitesListBox.addChangeHandler(new ChangeHandler() {
- public void onChange(ChangeEvent ce) {
- collectiviteChanged();
- }
- });
- budgetListBox.addChangeHandler(new ChangeHandler() {
- public void onChange(ChangeEvent e) {
- budgetChanged();
- }
- });
- collectivitesListBox.addStyleName("limitedWidth");
- collectivitesListBox.addChangeHandler(new ChangeHandler() {
- @Override
- public void onChange(ChangeEvent event) {
- int selected = collectivitesListBox.getSelectedIndex();
- currentCollectivite = new LabelValueDTO(collectivitesListBox.getValue(selected), collectivitesListBox.getItemText(selected));
- collectiviteChanged();
- }
- });
- budgetListBox.addStyleName("limitedWidth");
- HorizontalPanel hPane = new HorizontalPanel();
- hPane.setVerticalAlignment(HasVerticalAlignment.ALIGN_TOP);
- hPane.add(new Image(SearchResources.INSTANCE.getToolbarLeft()));
- HorizontalPanel inner=new HorizontalPanel();
- inner.addStyleName("MainCollBudgChooser");
- inner.add(new InlineHTML("Collectivité : "));
- inner.add(collectivitesListBox);
- InlineHTML budgetLabel = new InlineHTML("Budget : ");
- budgetLabel.getElement().getStyle().setMarginLeft(8.0, Unit.PX);
- inner.add(budgetLabel);
- inner.add(budgetListBox);
- hPane.add(inner);
- hPane.add(new Image(SearchResources.INSTANCE.getToolbarRight()));
- collectivitesListBox.setEnabled(displayParameters.isCollectiviteEditable());
- budgetListBox.setEnabled(displayParameters.isBudgetEditable());
- return hPane;
- }
- public void initCollectivitesBudgets(ArrayList<LabelValueDTO> collectivites, ArrayList<LabelValueDTO> budgets) {
- this.collectivitesListBox.clear();
- for (LabelValueDTO lblCollectivite : collectivites) {
- collectivitesListBox.addItem(lblCollectivite.getLabel(), lblCollectivite.getValue());
- }
- for (LabelValueDTO budget : budgets) {
- budgetListBox.addItem(budget.getLabel(), budget.getValue());
- }
- if(collectivitesListBox.getItemCount()>0) {
- collectivitesListBox.setSelectedIndex(0);
- currentCollectivite = collectivites.get(0);
- currentBudget = budgets.get(0);
- }
- NodeList<Element> options = collectivitesListBox.getElement().getElementsByTagName("option");
- for(int i=0;i<options.getLength();i++) {
- Element option = options.getItem(i);
- option.setAttribute("style", "width: auto;");
- }
- }
- // when there is too much collectivities
- public void initCollectivites(String documentId) {
- divMain.clear();
- collectivitesListBox = null;
- dfCollectivite = new TextBox();
- dfCollectivite.addStyleName("limitedWidth");
- dfCollectivite.setReadOnly(true);
- divMain.add(new InlineHTML("Collectivité : "));
- divMain.add(dfCollectivite);
- final String docId = documentId;
- pbHelpCollectivite = new Button("...",new ClickHandler() {
- public void onClick(ClickEvent ce) {
- pbHelpCollectivitesClicked(docId);
- }
- });
- pbHelpCollectivite.addStyleName("helpCollectivite");
- divMain.add(pbHelpCollectivite);
- divMain.add(new InlineHTML("Budget : "));
- divMain.add(budgetListBox);
- }
- protected void pbHelpCollectivitesClicked(String documentId) {
- new DlgSelectCollectivite(documentId, new LocalColAndBudListener(this));
- }
-
- protected ComplexPanel constructButtonBar() {
- int buttonCount = 0;
- HorizontalPanel hPane = new HorizontalPanel();
- hPane.setVerticalAlignment(HasVerticalAlignment.ALIGN_TOP);
- hPane.addStyleName("ToolGroups");
- hPane.add(new Image(SearchResources.INSTANCE.getToolbarLeftStrong()));
- HorizontalPanel searchPanel = new HorizontalPanel();
- searchPanel.setVerticalAlignment(HasVerticalAlignment.ALIGN_MIDDLE);
- searchPanel.addStyleName("ToolGroup");
- searchPanel.addStyleName("Strong");
- ImageButton pbSearch = new ImageButton(SearchResources.INSTANCE.getSearchDisabledIcon(), new InlineHTML("Chercher").getHTML());
- pbSearch.addClickHandler(new ClickHandler() {
- @Override
- public void onClick(ClickEvent event) {
- search();
- }
- });
- searchPanel.add(pbSearch);
- hPane.add(searchPanel);
- buttonCount++;
- HorizontalPanel inner = new HorizontalPanel();
- inner.setVerticalAlignment(HasVerticalAlignment.ALIGN_MIDDLE);
- inner.addStyleName("ToolGroup");
- inner.addStyleName("Norm");
- if(displayParameters.isAddCriteriaVisible()) {
- ImageButton pbAddCriteria = new ImageButton(SearchResources.INSTANCE.getAddCriteriaIcon(), SearchResources.INSTANCE.getAddCriteriaDisabledIcon(), new InlineHTML("Ajouter un ctritère").getHTML());
- pbAddCriteria.addClickHandler(new ClickHandler() {
- @Override
- public void onClick(ClickEvent event) {
- addCriteria();
- }
- });
- inner.add(pbAddCriteria);
- buttonCount++;
- }
- if(displayParameters.isClearAllVisible()) {
- ImageButton pbClearAll = new ImageButton(SearchResources.INSTANCE.getCleanCriteriasIcon(), SearchResources.INSTANCE.getCleanCriteriasDisabledIcon(), new InlineHTML("Supprimer tous les critères").getHTML());
- pbClearAll.addClickHandler(new ClickHandler() {
- @Override
- public void onClick(ClickEvent event) {
- clearAllCriterias();
- }
- });
- inner.add(pbClearAll);
- buttonCount++;
- }
- if(displayParameters.isOpenRequestVisible()) {
- ImageButton pbOpenRequest = new ImageButton(SearchResources.INSTANCE.getOpenSearchIcon(), SearchResources.INSTANCE.getSaveSearchDisabledIcon(), new InlineHTML("Ouvrir une recherche pré-enregistrée").getHTML());
- pbOpenRequest.addClickHandler(new ClickHandler() {
- @Override
- public void onClick(ClickEvent event) {
- openRequest();
- }
- });
- inner.add(pbOpenRequest);
- buttonCount++;
- }
- if(displayParameters.isSaveRequestVisible()) {
- ImageButton pbSaveRequest = new ImageButton(SearchResources.INSTANCE.getSaveSearchIcon(), SearchResources.INSTANCE.getSaveSearchDisabledIcon(), new InlineHTML("Enregistrer les critères de recherche").getHTML());
- pbSaveRequest.addClickHandler(new ClickHandler() {
- @Override
- public void onClick(ClickEvent event) {
- saveRequest();
- }
- });
- inner.add(pbSaveRequest);
- buttonCount++;
- }
- if(displayParameters.isShowRepositoryVisible()) {
- ImageButton pbShowRepository = new ImageButton(SearchResources.INSTANCE.getRepositoryIcon(), SearchResources.INSTANCE.getRepositoryDisabledIcon(), new InlineHTML("Nomenclature").getHTML());
- pbShowRepository.addClickHandler(new ClickHandler() {
- @Override
- public void onClick(ClickEvent event) {
- showRepository();
- }
- });
- }
- if(displayParameters.isSortFieldsVisible()) {
- ImageButton pbCfgSort = new ImageButton(SearchResources.INSTANCE.getParamsIcon(), SearchResources.INSTANCE.getParamsDisabledIcon(), new InlineHTML("Champs et tris").getHTML());
- pbCfgSort.addClickHandler(new ClickHandler() {
- @Override
- public void onClick(ClickEvent event) {
- configSearchParams();
- }
- });
- }
- hPane.add(inner);
- hPane.add(new Image(SearchResources.INSTANCE.getToolbarRight()));
- return hPane;
- }
- /**
- * Lance la recherche
- */
- public void search() {
- if (criteriaTable.checkValidity()) {
- startSearch();
- if (getSearchInitParameters().getPluginId() == null) {
- ServiceLocator.getXemeliosService().search(getSearchSessionId(), getCollectiviteId(), getBudgetId(), criteriaTable.getSearchParameters(), getSearchInitParameters().getPluginId(), new AsyncCallback<SearchResultDTO>() {
- @Override
- public void onFailure(Throwable throwable) {
- GWTUtils.handleRPCError(throwable);
- endLongWait();
- }
- @Override
- public void onSuccess(SearchResultDTO result) {
- handleSearchResult(result, true);
- }
- });
- } else {
- if (getSearchInitParameters().getPluginType() == StoredSearchDTO.TYPE_SEARCH) {
- ServiceLocator.getXemeliosService().search(getSearchSessionId(), getCollectiviteId(), getBudgetId(), criteriaTable.getSearchParameters(), getSearchInitParameters().getPluginId(), new AsyncCallback<SearchResultDTO>() {
- @Override
- public void onFailure(Throwable throwable) {
- GWTUtils.handleRPCError(throwable);
- endLongWait();
- }
- @Override
- public void onSuccess(SearchResultDTO result) {
- handleSearchResult(result, true);
- }
- });
- } else {
- ServiceLocator.getXemeliosService().processPluginExport(getSearchSessionId(), getCollectiviteId(), getBudgetId(), getSearchInitParameters().getPluginId(), criteriaTable.getSearchParameters(), new AsyncCallback<String>() {
- @Override
- public void onFailure(Throwable throwable) {
- GWTUtils.handleRPCError(throwable);
- endLongWait();
- }
- @Override
- public void onSuccess(String result) {
- endLongWait();
- downloadUrl(GWTUtils.getContextPath() + result);
- }
- });
- }
- }
- }
- }
- /**
- * Ajoute un critere de recherche
- */
- public void addCriteria() {
- criteriaTable.addNewCriteria();
- }
- /**
- * Supprime tous les critères
- */
- public void clearAllCriterias() {
- criteriaTable.removeAllCriteres();
- }
- /**
- * Ouvre une recherche enregistrée, un plugin, etc...
- */
- public void openRequest() {
- final DlgChooseStoredSearch dlg = new DlgChooseStoredSearch("Ouverture d'une recherche");
- dlg.show();
- dlg.center();
- ServiceLocator.getXemeliosService().getStoredSearchs(getSearchSessionId(), new AsyncCallback<List<StoredSearchDTO>>() {
- @Override
- public void onFailure(Throwable throwable) {
- GWTUtils.handleRPCError(throwable);
- }
- @Override
- public void onSuccess(List<StoredSearchDTO> result) {
- dlg.setSearchItems(result);
- dlg.addSelectListener(new DlgChooseOnePair.SelectListener() {
- @Override
- public void onSelect(Object selectedItem) {
- loadSearch((StoredSearchDTO) selectedItem);
- }
- });
- }
- });
- }
- private void loadSearch(StoredSearchDTO storedSearch) {
- switch (storedSearch.getType()) {
- case StoredSearchDTO.TYPE_EXPORT:
- case StoredSearchDTO.TYPE_SEARCH: {
- ServiceLocator.getXemeliosService().getSearchInitParameters(getSearchSessionId(), storedSearch != null ? storedSearch.getId() : null, new AsyncCallback<SearchInitParametersDTO>() {
-
- public void onFailure(Throwable throwable) {
- GWTUtils.handleRPCError(throwable);
- }
-
- public void onSuccess(SearchInitParametersDTO result) {
- setSearchInitParameters(result);
- }
- });
- break;
- }
- case StoredSearchDTO.TYPE_SAVED: {
- ServiceLocator.getXemeliosService().getSearchInitParametersForSavedSearch(getSearchSessionId(), storedSearch.getId(), new AsyncCallback<SearchInitParametersDTO>() {
- @Override
- public void onFailure(Throwable throwable) {
- GWTUtils.handleRPCError(throwable);
- }
- @Override
- public void onSuccess(SearchInitParametersDTO result) {
- displaySavedRequest(result);
- }
- });
- }
- }
- }
- private void displaySavedRequest(SearchInitParametersDTO params) {
- criteriaTable.removeAllCriteres();
-
- int row = 0;
- for(CritereTypeDTO critereType: params.getMandatoryCritereTypes()) {
- criteriaTable.buildCriteriaSelectUI(row, critereType, false);
- criteriaTable.buildCriteriaInputUI(row, critereType);
-
- row++;
- }
- }
- /**
- * Enregistre la requête courante
- */
- public void saveRequest() {
- final SaveRequestDialog dlg = new SaveRequestDialog(this, criteriaTable.getSearchParameters());
- ServiceLocator.getXemeliosService().getSavedPrivateSearchs(getSearchSessionId(), new AsyncCallback<List<StoredSearchDTO>>() {
-
- public void onFailure(Throwable throwable) {
- GWTUtils.handleRPCError(throwable);
- }
-
- public void onSuccess(List<StoredSearchDTO> result) {
- dlg.setItems(result);
- }
- });
- }
-
- public String getSearchSessionId() {
- return initParameters.getSearchSessionId();
- }
-
- public String getCollectiviteId() {
- return currentCollectivite!=null ? currentCollectivite.getId() : null;
- }
-
- public String getBudgetId() {
- return currentBudget!=null ? currentBudget.getId() : null;
- }
- private void startSearch() {
- startLongWait();
- }
- private void startLongWait() {
- working.setPopupPositionAndShow(new PositionCallback() {
- @Override
- public void setPosition(int offsetWidth, int offsetHeight) {
- int left = resultTableContainer.getAbsoluteLeft();
- int top = resultTableContainer.getAbsoluteTop();
- int startLeft = left + (resultTableContainer.getOffsetWidth()-working.getImageWidth())/2;
- int startTop = top + (resultTableContainer.getOffsetHeight()-working.getImageHeight())/2;
- working.setPopupPosition(startLeft, startTop);
- }
- });
- }
- private void endLongWait() {
- working.hide();
- }
-
- public SearchInitParametersDTO getSearchInitParameters() {
- return searchInitParameters;
- }
-
- public void setSearchInitParameters(SearchInitParametersDTO searchInitParameters) {
- this.searchInitParameters = searchInitParameters;
- }
- /**
- * Affiche le résultat de recherche
- * @param result
- * @param firstSearch true si c'est une première recherche, et pas un changement de page
- */
- protected void handleSearchResult(SearchResultDTO result, boolean firstSearch) {
- if(firstSearch) {
- while (resultTableContainer.getWidgetCount() > 0) {
- resultTableContainer.remove(0);
- }
- resultTable = new ResultTable(result);
- resultTable.addResultOperationListener(this);
- ScrollPanel scroller = new ScrollPanel(resultTable);
- if(!displayParameters.isSplitterVisible())
- scroller.setHeight("270px");
- resultTableContainer.add(scroller);
- } else {
- resultTable.getListDataProvider().getList().clear();
- resultTable.getListDataProvider().getList().addAll(result.getData());
- }
- statusBar.getPaginationWidget().setPaginationInfo(result.getPaginationInfo());
- if (result.getCountAll() <= 0) {
- statusBar.setText(new HTML(" Aucun "+getSearchInitParameters().getImportableElementLibelle()+" trouvé").getText());
- exportPossible = false;
- } else if (result.getCountAll() == 1) {
- statusBar.setText(new HTML(" 1 "+getSearchInitParameters().getImportableElementLibelle()+" trouvé").getText());
- exportPossible = true;
- } else {
- statusBar.setText(new HTML(" " + result.getCountAll() + " "+getSearchInitParameters().getImportableElementLibelle()+"s trouvés").getText());
- exportPossible = true;
- }
- endLongWait();
- }
-
- /**
- * Appelée lorsque on a un résultat de recherche sur un plugin d'export
- * @param url
- */
- public abstract void downloadUrl(String url);
- /**
- * Affiche le référentiel pour la collectivité courante
- */
- public abstract void showRepository();
- @Override
- public void executeSaveRequest(List<SearchParameterDTO> parameters, String requestName, String requestId) {
- if (requestId == null || requestId.length() == 0) {
- ServiceLocator.getXemeliosService().saveRequest(getSearchSessionId(), parameters, requestName, new AsyncCallback<String>() {
- @Override
- public void onFailure(Throwable caught) {
- Window.alert(caught.getMessage());
- }
- @Override
- public void onSuccess(String result) {
- if (!"OK".equals(result)) {
- Window.alert("Erreur lors de l'enregistrement de la requete.");
- }
- }
- });
- } else {
- ServiceLocator.getXemeliosService().saveRequest(getSearchSessionId(), parameters, requestName, requestId, new AsyncCallback<String>() {
-
- public void onFailure(Throwable caught) {
- Window.alert(caught.getMessage());
- }
-
- public void onSuccess(String result) {
- if (!"OK".equals(result)) {
- Window.alert("Erreur lors de l'enregistrement de la requete.");
- }
- }
- });
- }
- }
- public void configSearchParams() {
- ServiceLocator.getXemeliosService().getListResultatDTO(getSearchSessionId(), new AsyncCallback<ListResultatDTO>() {
- public void onFailure(Throwable caught) {
- Window.alert(caught.getMessage());
- GWTUtils.handleRPCError(caught);
- }
- public void onSuccess(ListResultatDTO result) {
- DlgSearchParams dsp = new DlgSearchParams(AbstractSearchWidget.this, result);
- dsp.show();
- }
- });
- }
-
- public static class DisplayParameters {
- /**
- * Permet de déterminer si il faut afficher le bouton d'ajout de critères
- */
- private boolean addCriteriaVisible = true;
- /**
- * Permet de déterminer si il faut afficher le bouton de recherche en arrière-plan
- */
- private boolean searchBackgroundVisible = true;
- /**
- * Permet de déterminer si il faut afficher le bouton de suppression de tous les critères
- */
- private boolean clearAllVisible = true;
- /**
- * Permet de déterminer si il faut afficher le bouton d'accès au repository
- */
- private boolean showRepositoryVisible = true;
- /**
- * Permet de déterminer si il faut afficher le bouton d'enregistrement de requêtes
- */
- private boolean saveRequestVisible = true;
- /**
- * Permet de déterminer si il faut afficher le bouton d'ouverture de requêtes
- */
- private boolean openRequestVisible = true;
- /**
- * Permet de déterminer si il faut afficherle bouton de modification de l'environnement
- */
- private boolean environmentVisible = true;
- /**
- * Permet de déterminer si il faut afficher le bouton permettant de choisir les champs et les tris
- */
- private boolean sortFieldsVisible = true;
- /**
- * Permet de détermnier si on affiche les widgets
- */
- private boolean widgetsVisible = true;
- /**
- * Permet de déterminer si les recherches enregistrées sont incluses
- */
- private boolean savedRequestsIncluded = true;
- /**
- * Permet de déterminer si les plugins de recherche sont inclus
- */
- private boolean searchPluginsIncluded = true;
- /**
- * Permet de déterminer si les plugins d'export sont inclus
- */
- private boolean exportPluginsIncluded = true;
- /**
- * Permet de déterminer si l'utilisateur peut modifier la collectivité
- */
- private boolean collectiviteEditable = true;
- /**
- * Permet de déterminer si l'utilisateur peut modifier le budget
- */
- private boolean budgetEditable = true;
- /**
- * Permet de déterminer si on affiche les sommations
- */
- private boolean summableVisible = true;
- /**
- * Permet de savoir si on affiche ou pas le bouton d'export
- */
- private boolean exportVisible = true;
- /**
- * Permet de savoir si il faut ou non afficher le slider entre la liste des critères
- * et le tableau de résultat. Si c'est non, on les mettra dans un VerticalPanel
- */
- private boolean splitterVisible = true;
-
- /**
- * Renvoie les paramètres d'affichage correspondant à une fenêtre de recherche normale
- * @return
- */
- public static DisplayParameters newSearchWindowDisplayParameters() {
- return new DisplayParameters();
- }
- /**
- * Renvoie les paramètres d'affichage correspondant à un dialogue de searchHelper
- * @return
- */
- public static DisplayParameters newSearchHelperWindowDisplayParameters() {
- DisplayParameters ret = new DisplayParameters();
- ret.setSearchBackgroundVisible(false);
- ret.setExportPluginsIncluded(false);
- ret.setEnvironmentVisible(false);
- ret.setExportVisible(false);
- ret.setSortFieldsVisible(false);
- ret.setSummableVisible(false);
- ret.setSplitterVisible(false);
- return ret;
- }
- protected DisplayParameters() {
- super();
- }
-
- public boolean isAddCriteriaVisible() {
- return addCriteriaVisible;
- }
-
- public void setAddCriteriaVisible(boolean addCriteriaVisible) {
- this.addCriteriaVisible = addCriteriaVisible;
- }
-
- public boolean isClearAllVisible() {
- return clearAllVisible;
- }
-
- public void setClearAllVisible(boolean clearAllVisible) {
- this.clearAllVisible = clearAllVisible;
- }
-
- public boolean isEnvironmentVisible() {
- return environmentVisible;
- }
-
- public void setEnvironmentVisible(boolean environmentVisible) {
- this.environmentVisible = environmentVisible;
- }
-
- public boolean isExportPluginsIncluded() {
- return exportPluginsIncluded;
- }
-
- public void setExportPluginsIncluded(boolean exportPluginsIncluded) {
- this.exportPluginsIncluded = exportPluginsIncluded;
- }
-
- public boolean isOpenRequestVisible() {
- return openRequestVisible;
- }
-
- public void setOpenRequestVisible(boolean openRequestVisible) {
- this.openRequestVisible = openRequestVisible;
- }
-
- public boolean isSaveRequestVisible() {
- return saveRequestVisible;
- }
-
- public void setSaveRequestVisible(boolean saveRequestVisible) {
- this.saveRequestVisible = saveRequestVisible;
- }
-
- public boolean isSavedRequestsIncluded() {
- return savedRequestsIncluded;
- }
-
- public void setSavedRequestsIncluded(boolean savedRequestsIncluded) {
- this.savedRequestsIncluded = savedRequestsIncluded;
- }
-
- public boolean isSearchBackgroundVisible() {
- return searchBackgroundVisible;
- }
-
- public void setSearchBackgroundVisible(boolean searchBackgroundVisible) {
- this.searchBackgroundVisible = searchBackgroundVisible;
- }
-
- public boolean isSearchPluginsIncluded() {
- return searchPluginsIncluded;
- }
-
- public void setSearchPluginsIncluded(boolean searchPluginsIncluded) {
- this.searchPluginsIncluded = searchPluginsIncluded;
- }
-
- public boolean isShowRepositoryVisible() {
- return showRepositoryVisible;
- }
-
- public void setShowRepositoryVisible(boolean showRepositoryVisible) {
- this.showRepositoryVisible = showRepositoryVisible;
- }
-
- public boolean isSortFieldsVisible() {
- return sortFieldsVisible;
- }
-
- public void setSortFieldsVisible(boolean sortFieldsVisible) {
- this.sortFieldsVisible = sortFieldsVisible;
- }
-
- public boolean isWidgetsVisible() {
- return widgetsVisible;
- }
-
- public void setWidgetsVisible(boolean widgetsVisible) {
- this.widgetsVisible = widgetsVisible;
- }
-
- public boolean isBudgetEditable() {
- return budgetEditable;
- }
-
- public void setBudgetEditable(boolean budgetEditable) {
- this.budgetEditable = budgetEditable;
- }
-
- public boolean isCollectiviteEditable() {
- return collectiviteEditable;
- }
-
- public void setCollectiviteEditable(boolean collectiviteEditable) {
- this.collectiviteEditable = collectiviteEditable;
- }
-
- public boolean isSummableVisible() {
- return summableVisible;
- }
-
- public void setSummableVisible(boolean summableVisible) {
- this.summableVisible = summableVisible;
- }
-
- public boolean isExportVisible() {
- return exportVisible;
- }
-
- public void setExportVisible(boolean exportVisible) {
- this.exportVisible = exportVisible;
- }
-
- public boolean isSplitterVisible() {
- return splitterVisible;
- }
-
- public void setSplitterVisible(boolean splitterVisible) {
- this.splitterVisible = splitterVisible;
- }
- }
-
- private static class LocalColAndBudListener implements ColAndBudListener {
- private AbstractSearchWidget asw;
- public LocalColAndBudListener(AbstractSearchWidget asw) {
- super();
- this.asw=asw;
- }
-
- @Override
- public void setCollectivite(LabelValueDTO collectivite) {
- asw.currentCollectivite = collectivite;
- asw.dfCollectivite.setText(asw.currentCollectivite.getLibelle());
- asw.collectiviteChanged();
- }
- }
+ private DisplayParameters displayParameters;
+ private InitParametersDTO initParameters;
+ private SearchInitParametersDTO searchInitParameters;
+
+ // colAnBudgChooser
+ private ListBox collectivitesListBox;
+ private ListBox budgetListBox;
+ private ArrayList<ChangeHandler> changeHandlers;
+ private HorizontalPanel divMain;
+ private TextBox dfCollectivite;
+ private Button pbHelpCollectivite;
+ private VerticalPanel mainPanel;
+ private LabelValueDTO currentCollectivite, currentBudget;
+
+ // statusBar
+ private StatusBar statusBar;
+
+ // criteriaTable
+ private CriteriaTable criteriaTable;
+
+ // result table
+ private VerticalPanel resultTableContainer;
+ private ResultTable resultTable;
+
+ // divers
+ private WorkingPanel working;
+ public AbstractSearchWidget(String documentId, String etatId, String elementId, InitParametersDTO initParameters, DisplayParameters displayParameters) {
+ super();
+ this.initParameters = initParameters;
+ setSearchInitParameters(initParameters.getSearchInitParameters());
+ this.displayParameters = displayParameters;
+ initComponents();
+ working = new WorkingPanel();
+ initWidget(mainPanel);
+
+ }
+
+ private void initComponents() {
+ mainPanel = new VerticalPanel();
+ // mainPanel.setSize("500px", "300px");
+ HorizontalPanel toolbarPanel = new HorizontalPanel();
+ toolbarPanel.addStyleName("TopnavBk");
+ toolbarPanel.add(constructColBugChooser());
+ toolbarPanel.add(new InlineHTML(" "));
+ ComplexPanel buttonBar = constructButtonBar();
+ toolbarPanel.add(buttonBar);
+ mainPanel.add(toolbarPanel);
+ statusBar = new StatusBar();
+ statusBar.getPaginationWidget().addChangePageRequestListener(new PaginationWidget.ChangePageRequestListener() {
+ @Override
+ public void onChangePageRequest(PaginationWidget sender, int requestedPageNumber) {
+ loadPage(requestedPageNumber);
+ }
+ });
+ criteriaTable = new CriteriaTable(this);
+ if (displayParameters.isSplitterVisible()) {
+ SplitLayoutPanel slp = new SplitLayoutPanel();
+ slp.addNorth(criteriaTable, 80);
+ slp.add(resultTableContainer = new VerticalPanel());
+ slp.setHeight("100%");
+ slp.setWidth("100%");
+ mainPanel.add(slp);
+ } else {
+ criteriaTable.setWidth("100%");
+ //criteriaTable.setHeight(("100px"));
+ ScrollPanel scroller = new ScrollPanel(criteriaTable);
+ mainPanel.add(scroller);
+ mainPanel.add(resultTableContainer = new VerticalPanel());
+ }
+ this.mainPanel.add(statusBar);
+ criteriaTable.init(initParameters.getSearchInitParameters(), false);
+ criteriaTable.addNewCriteria();
+ resultTableContainer.setWidth("100%");
+ }
+
+ /**
+ * Appele quand la collectivité est modifiée
+ */
+ protected void collectiviteChanged() {
+ if (dfCollectivite == null) {
+ currentCollectivite = new LabelValueDTO(collectivitesListBox.getValue(collectivitesListBox.getSelectedIndex()), collectivitesListBox.getItemText(collectivitesListBox.getSelectedIndex()));
+ }
+ ServiceLocator.getXemeliosService().getBudgets(initParameters.getSearchSessionId(), currentCollectivite.getId(), new AsyncCallback<ArrayList<LabelValueDTO>>() {
+ @Override
+ public void onFailure(Throwable throwable) {
+ GWTUtils.handleRPCError(throwable);
+ }
+
+ @Override
+ public void onSuccess(ArrayList<LabelValueDTO> budgets) {
+ budgetListBox.clear();
+ for (LabelValueDTO budget : budgets) {
+ budgetListBox.addItem(budget.getLabel(), budget.getValue());
+ }
+ NodeList<Element> options = budgetListBox.getElement().getElementsByTagName("option");
+ for (int i = 0; i < options.getLength(); i++) {
+ Element option = options.getItem(i);
+ option.setAttribute("style", "width: auto;");
+ }
+ fireOnCollBudgChange();
+ }
+ });
+ }
+
+ private void fireOnCollBudgChange() {
+ for (ChangeHandler ch : changeHandlers) {
+ ch.onChange(null);
+ }
+ }
+
+ /**
+ * Appelée quand le budget est modifié
+ */
+ protected void budgetChanged() {
+ currentBudget = new LabelValueDTO(budgetListBox.getValue(budgetListBox.getSelectedIndex()), budgetListBox.getItemText(budgetListBox.getSelectedIndex()));
+ // criteriaTable.removeAllCriteres();
+ // criteriaTable.addEmptyCriterion();
+ }
+
+ protected void loadPage(int pageNumber) {
+ startSearch();
+ ServiceLocator.getXemeliosService().loadPage(getSearchSessionId(), pageNumber, new AsyncCallback<SearchResultDTO>() {
+ public void onFailure(Throwable throwable) {
+ GWTUtils.handleRPCError(throwable);
+ }
+
+ public void onSuccess(SearchResultDTO result) {
+ handleSearchResult(result, false);
+ }
+ });
+ }
+
+ /**
+ * Construit la barre permettant le choix de collectivité et du budget
+ *
+ * @return
+ */
+ protected Widget constructColBugChooser() {
+ this.collectivitesListBox = new ListBox();
+ this.budgetListBox = new ListBox();
+ this.changeHandlers = new ArrayList<ChangeHandler>();
+ collectivitesListBox.addChangeHandler(new ChangeHandler() {
+ public void onChange(ChangeEvent ce) {
+ collectiviteChanged();
+ }
+ });
+ budgetListBox.addChangeHandler(new ChangeHandler() {
+ public void onChange(ChangeEvent e) {
+ budgetChanged();
+ }
+ });
+ collectivitesListBox.addStyleName("limitedWidth");
+ collectivitesListBox.addChangeHandler(new ChangeHandler() {
+ @Override
+ public void onChange(ChangeEvent event) {
+ int selected = collectivitesListBox.getSelectedIndex();
+ currentCollectivite = new LabelValueDTO(collectivitesListBox.getValue(selected), collectivitesListBox.getItemText(selected));
+ collectiviteChanged();
+ }
+ });
+ budgetListBox.addStyleName("limitedWidth");
+ HorizontalPanel hPane = new HorizontalPanel();
+ hPane.setVerticalAlignment(HasVerticalAlignment.ALIGN_TOP);
+ hPane.add(new Image(SearchResources.INSTANCE.getToolbarLeft()));
+ HorizontalPanel inner = new HorizontalPanel();
+ inner.addStyleName("MainCollBudgChooser");
+ inner.add(new InlineHTML("Collectivité : "));
+ inner.add(collectivitesListBox);
+ InlineHTML budgetLabel = new InlineHTML("Budget : ");
+ budgetLabel.getElement().getStyle().setMarginLeft(8.0, Unit.PX);
+ inner.add(budgetLabel);
+ inner.add(budgetListBox);
+ hPane.add(inner);
+ hPane.add(new Image(SearchResources.INSTANCE.getToolbarRight()));
+ collectivitesListBox.setEnabled(displayParameters.isCollectiviteEditable());
+ budgetListBox.setEnabled(displayParameters.isBudgetEditable());
+ return hPane;
+ }
+
+ public void initCollectivitesBudgets(ArrayList<LabelValueDTO> collectivites, ArrayList<LabelValueDTO> budgets) {
+ this.collectivitesListBox.clear();
+ for (LabelValueDTO lblCollectivite : collectivites) {
+ collectivitesListBox.addItem(lblCollectivite.getLabel(), lblCollectivite.getValue());
+ }
+ for (LabelValueDTO budget : budgets) {
+ budgetListBox.addItem(budget.getLabel(), budget.getValue());
+ }
+ if (collectivitesListBox.getItemCount() > 0) {
+ collectivitesListBox.setSelectedIndex(0);
+ currentCollectivite = collectivites.get(0);
+ currentBudget = budgets.get(0);
+ }
+ NodeList<Element> options = collectivitesListBox.getElement().getElementsByTagName("option");
+ for (int i = 0; i < options.getLength(); i++) {
+ Element option = options.getItem(i);
+ option.setAttribute("style", "width: auto;");
+ }
+ }
+
+ // when there is too much collectivities
+ public void initCollectivites(String documentId) {
+ divMain.clear();
+ collectivitesListBox = null;
+ dfCollectivite = new TextBox();
+ dfCollectivite.addStyleName("limitedWidth");
+ dfCollectivite.setReadOnly(true);
+ divMain.add(new InlineHTML("Collectivité : "));
+ divMain.add(dfCollectivite);
+ final String docId = documentId;
+ pbHelpCollectivite = new Button("...", new ClickHandler() {
+ public void onClick(ClickEvent ce) {
+ pbHelpCollectivitesClicked(docId);
+ }
+ });
+ pbHelpCollectivite.addStyleName("helpCollectivite");
+ divMain.add(pbHelpCollectivite);
+ divMain.add(new InlineHTML("Budget : "));
+ divMain.add(budgetListBox);
+ }
+
+ protected void pbHelpCollectivitesClicked(String documentId) {
+ new DlgSelectCollectivite(documentId, new LocalColAndBudListener(this));
+ }
+
+ protected ComplexPanel constructButtonBar() {
+ HorizontalPanel hPane = new HorizontalPanel();
+ hPane.setVerticalAlignment(HasVerticalAlignment.ALIGN_TOP);
+ hPane.addStyleName("ToolGroups");
+ hPane.add(new Image(SearchResources.INSTANCE.getToolbarLeftStrong()));
+ HorizontalPanel searchPanel = new HorizontalPanel();
+ searchPanel.setVerticalAlignment(HasVerticalAlignment.ALIGN_MIDDLE);
+ searchPanel.addStyleName("ToolGroup");
+ searchPanel.addStyleName("Strong");
+ ImageButton pbSearch = new ImageButton(SearchResources.INSTANCE.getSearchDisabledIcon(), new InlineHTML("Chercher").getHTML());
+ pbSearch.addClickHandler(new ClickHandler() {
+ @Override
+ public void onClick(ClickEvent event) {
+ search();
+ }
+ });
+ searchPanel.add(pbSearch);
+ hPane.add(searchPanel);
+ HorizontalPanel inner = new HorizontalPanel();
+ inner.setVerticalAlignment(HasVerticalAlignment.ALIGN_MIDDLE);
+ inner.addStyleName("ToolGroup");
+ inner.addStyleName("Norm");
+ if (displayParameters.isAddCriteriaVisible()) {
+ ImageButton pbAddCriteria = new ImageButton(SearchResources.INSTANCE.getAddCriteriaIcon(), SearchResources.INSTANCE.getAddCriteriaDisabledIcon(), new InlineHTML("Ajouter un ctritère").getHTML());
+ pbAddCriteria.addClickHandler(new ClickHandler() {
+ @Override
+ public void onClick(ClickEvent event) {
+ addCriteria();
+ }
+ });
+ inner.add(pbAddCriteria);
+ }
+ if (displayParameters.isClearAllVisible()) {
+ ImageButton pbClearAll = new ImageButton(SearchResources.INSTANCE.getCleanCriteriasIcon(), SearchResources.INSTANCE.getCleanCriteriasDisabledIcon(), new InlineHTML("Supprimer tous les critères").getHTML());
+ pbClearAll.addClickHandler(new ClickHandler() {
+ @Override
+ public void onClick(ClickEvent event) {
+ clearAllCriterias();
+ }
+ });
+ inner.add(pbClearAll);
+ }
+ if (displayParameters.isOpenRequestVisible()) {
+ ImageButton pbOpenRequest = new ImageButton(SearchResources.INSTANCE.getOpenSearchIcon(), SearchResources.INSTANCE.getSaveSearchDisabledIcon(), new InlineHTML("Ouvrir une recherche pré-enregistrée").getHTML());
+ pbOpenRequest.addClickHandler(new ClickHandler() {
+ @Override
+ public void onClick(ClickEvent event) {
+ openRequest();
+ }
+ });
+ inner.add(pbOpenRequest);
+ }
+ if (displayParameters.isSaveRequestVisible()) {
+ ImageButton pbSaveRequest = new ImageButton(SearchResources.INSTANCE.getSaveSearchIcon(), SearchResources.INSTANCE.getSaveSearchDisabledIcon(), new InlineHTML("Enregistrer les critères de recherche").getHTML());
+ pbSaveRequest.addClickHandler(new ClickHandler() {
+ @Override
+ public void onClick(ClickEvent event) {
+ saveRequest();
+ }
+ });
+ inner.add(pbSaveRequest);
+ }
+ if (displayParameters.isShowRepositoryVisible()) {
+ ImageButton pbShowRepository = new ImageButton(SearchResources.INSTANCE.getRepositoryIcon(), SearchResources.INSTANCE.getRepositoryDisabledIcon(), new InlineHTML("Nomenclature").getHTML());
+ pbShowRepository.addClickHandler(new ClickHandler() {
+ @Override
+ public void onClick(ClickEvent event) {
+ showRepository();
+ }
+ });
+ }
+ if (displayParameters.isSortFieldsVisible()) {
+ ImageButton pbCfgSort = new ImageButton(SearchResources.INSTANCE.getParamsIcon(), SearchResources.INSTANCE.getParamsDisabledIcon(), new InlineHTML("Champs et tris").getHTML());
+ pbCfgSort.addClickHandler(new ClickHandler() {
+ @Override
+ public void onClick(ClickEvent event) {
+ configSearchParams();
+ }
+ });
+ }
+ hPane.add(inner);
+ hPane.add(new Image(SearchResources.INSTANCE.getToolbarRight()));
+ return hPane;
+ }
+
+ /**
+ * Lance la recherche
+ */
+ public void search() {
+ if (criteriaTable.checkValidity()) {
+ startSearch();
+ if (getSearchInitParameters().getPluginId() == null) {
+ ServiceLocator.getXemeliosService().search(getSearchSessionId(), getCollectiviteId(), getBudgetId(), criteriaTable.getSearchParameters(), getSearchInitParameters().getPluginId(), new AsyncCallback<SearchResultDTO>() {
+ @Override
+ public void onFailure(Throwable throwable) {
+ GWTUtils.handleRPCError(throwable);
+ endLongWait();
+ }
+
+ @Override
+ public void onSuccess(SearchResultDTO result) {
+ handleSearchResult(result, true);
+ }
+ });
+ } else {
+ if (getSearchInitParameters().getPluginType() == StoredSearchDTO.TYPE_SEARCH) {
+ ServiceLocator.getXemeliosService().search(getSearchSessionId(), getCollectiviteId(), getBudgetId(), criteriaTable.getSearchParameters(), getSearchInitParameters().getPluginId(), new AsyncCallback<SearchResultDTO>() {
+ @Override
+ public void onFailure(Throwable throwable) {
+ GWTUtils.handleRPCError(throwable);
+ endLongWait();
+ }
+
+ @Override
+ public void onSuccess(SearchResultDTO result) {
+ handleSearchResult(result, true);
+ }
+ });
+ } else {
+ ServiceLocator.getXemeliosService().processPluginExport(getSearchSessionId(), getCollectiviteId(), getBudgetId(), getSearchInitParameters().getPluginId(), criteriaTable.getSearchParameters(), new AsyncCallback<String>() {
+ @Override
+ public void onFailure(Throwable throwable) {
+ GWTUtils.handleRPCError(throwable);
+ endLongWait();
+ }
+
+ @Override
+ public void onSuccess(String result) {
+ endLongWait();
+ downloadUrl(GWTUtils.getContextPath() + result);
+ }
+ });
+ }
+ }
+ }
+ }
+
+ /**
+ * Ajoute un critere de recherche
+ */
+ public void addCriteria() {
+ criteriaTable.addNewCriteria();
+ }
+
+ /**
+ * Supprime tous les critères
+ */
+ public void clearAllCriterias() {
+ criteriaTable.removeAllCriteres();
+ }
+
+ /**
+ * Ouvre une recherche enregistrée, un plugin, etc...
+ */
+ public void openRequest() {
+ final DlgChooseStoredSearch dlg = new DlgChooseStoredSearch("Ouverture d'une recherche");
+ dlg.show();
+ dlg.center();
+ ServiceLocator.getXemeliosService().getStoredSearchs(getSearchSessionId(), new AsyncCallback<List<StoredSearchDTO>>() {
+ @Override
+ public void onFailure(Throwable throwable) {
+ GWTUtils.handleRPCError(throwable);
+ }
+
+ @Override
+ public void onSuccess(List<StoredSearchDTO> result) {
+ dlg.setSearchItems(result);
+ dlg.addSelectListener(new DlgChooseOnePair.SelectListener() {
+ @Override
+ public void onSelect(Object selectedItem) {
+ loadSearch((StoredSearchDTO) selectedItem);
+ }
+ });
+ }
+ });
+ }
+
+ private void loadSearch(StoredSearchDTO storedSearch) {
+ switch (storedSearch.getType()) {
+ case StoredSearchDTO.TYPE_EXPORT:
+ case StoredSearchDTO.TYPE_SEARCH: {
+ ServiceLocator.getXemeliosService().getSearchInitParameters(getSearchSessionId(), storedSearch != null ? storedSearch.getId() : null, new AsyncCallback<SearchInitParametersDTO>() {
+
+ public void onFailure(Throwable throwable) {
+ GWTUtils.handleRPCError(throwable);
+ }
+
+ public void onSuccess(SearchInitParametersDTO result) {
+ setSearchInitParameters(result);
+ }
+ });
+ break;
+ }
+ case StoredSearchDTO.TYPE_SAVED: {
+ ServiceLocator.getXemeliosService().getSearchInitParametersForSavedSearch(getSearchSessionId(), storedSearch.getId(), new AsyncCallback<SearchInitParametersDTO>() {
+ @Override
+ public void onFailure(Throwable throwable) {
+ GWTUtils.handleRPCError(throwable);
+ }
+
+ @Override
+ public void onSuccess(SearchInitParametersDTO result) {
+ displaySavedRequest(result);
+ }
+ });
+ }
+ }
+ }
+
+ private void displaySavedRequest(SearchInitParametersDTO params) {
+ criteriaTable.removeAllCriteres();
+
+ int row = 0;
+ for (CritereTypeDTO critereType : params.getMandatoryCritereTypes()) {
+ criteriaTable.buildCriteriaSelectUI(row, critereType, false);
+ criteriaTable.buildCriteriaInputUI(row, critereType);
+
+ row++;
+ }
+ }
+
+ /**
+ * Enregistre la requête courante
+ */
+ public void saveRequest() {
+ final SaveRequestDialog dlg = new SaveRequestDialog(this, criteriaTable.getSearchParameters());
+ ServiceLocator.getXemeliosService().getSavedPrivateSearchs(getSearchSessionId(), new AsyncCallback<List<StoredSearchDTO>>() {
+
+ public void onFailure(Throwable throwable) {
+ GWTUtils.handleRPCError(throwable);
+ }
+
+ public void onSuccess(List<StoredSearchDTO> result) {
+ dlg.setItems(result);
+ }
+ });
+ }
+
+ public String getSearchSessionId() {
+ return initParameters.getSearchSessionId();
+ }
+
+ public String getCollectiviteId() {
+ return currentCollectivite != null ? currentCollectivite.getId() : null;
+ }
+
+ public String getBudgetId() {
+ return currentBudget != null ? currentBudget.getId() : null;
+ }
+
+ private void startSearch() {
+ startLongWait();
+ }
+
+ private void startLongWait() {
+ working.setPopupPositionAndShow(new PositionCallback() {
+ @Override
+ public void setPosition(int offsetWidth, int offsetHeight) {
+ int left = resultTableContainer.getAbsoluteLeft();
+ int top = resultTableContainer.getAbsoluteTop();
+ int startLeft = left + (resultTableContainer.getOffsetWidth() - working.getImageWidth()) / 2;
+ int startTop = top + (resultTableContainer.getOffsetHeight() - working.getImageHeight()) / 2;
+ working.setPopupPosition(startLeft, startTop);
+ }
+ });
+ }
+
+ private void endLongWait() {
+ working.hide();
+ }
+
+ public SearchInitParametersDTO getSearchInitParameters() {
+ return searchInitParameters;
+ }
+
+ public void setSearchInitParameters(SearchInitParametersDTO searchInitParameters) {
+ this.searchInitParameters = searchInitParameters;
+ }
+
+ /**
+ * Affiche le résultat de recherche
+ *
+ * @param result
+ * @param firstSearch
+ * true si c'est une première recherche, et pas un changement de page
+ */
+ protected void handleSearchResult(SearchResultDTO result, boolean firstSearch) {
+ if (firstSearch) {
+ while (resultTableContainer.getWidgetCount() > 0) {
+ resultTableContainer.remove(0);
+ }
+ resultTable = new ResultTable(result);
+ resultTable.addResultOperationListener(this);
+ ScrollPanel scroller = new ScrollPanel(resultTable);
+ if (!displayParameters.isSplitterVisible())
+ scroller.setHeight("270px");
+ resultTableContainer.add(scroller);
+ } else {
+ resultTable.getListDataProvider().getList().clear();
+ resultTable.getListDataProvider().getList().addAll(result.getData());
+ }
+ statusBar.getPaginationWidget().setPaginationInfo(result.getPaginationInfo());
+ if (result.getCountAll() <= 0) {
+ statusBar.setText(new HTML(" Aucun " + getSearchInitParameters().getImportableElementLibelle() + " trouvé").getText());
+ } else if (result.getCountAll() == 1) {
+ statusBar.setText(new HTML(" 1 " + getSearchInitParameters().getImportableElementLibelle() + " trouvé").getText());
+ } else {
+ statusBar.setText(new HTML(" " + result.getCountAll() + " " + getSearchInitParameters().getImportableElementLibelle() + "s trouvés").getText());
+ }
+ endLongWait();
+ }
+
+ /**
+ * Appelée lorsque on a un résultat de recherche sur un plugin d'export
+ *
+ * @param url
+ */
+ public abstract void downloadUrl(String url);
+
+ /**
+ * Affiche le référentiel pour la collectivité courante
+ */
+ public abstract void showRepository();
+
+ @Override
+ public void executeSaveRequest(List<SearchParameterDTO> parameters, String requestName, String requestId) {
+ if (requestId == null || requestId.length() == 0) {
+ ServiceLocator.getXemeliosService().saveRequest(getSearchSessionId(), parameters, requestName, new AsyncCallback<String>() {
+ @Override
+ public void onFailure(Throwable caught) {
+ Window.alert(caught.getMessage());
+ }
+
+ @Override
+ public void onSuccess(String result) {
+ if (!"OK".equals(result)) {
+ Window.alert("Erreur lors de l'enregistrement de la requete.");
+ }
+ }
+ });
+ } else {
+ ServiceLocator.getXemeliosService().saveRequest(getSearchSessionId(), parameters, requestName, requestId, new AsyncCallback<String>() {
+
+ public void onFailure(Throwable caught) {
+ Window.alert(caught.getMessage());
+ }
+
+ public void onSuccess(String result) {
+ if (!"OK".equals(result)) {
+ Window.alert("Erreur lors de l'enregistrement de la requete.");
+ }
+ }
+ });
+ }
+ }
+
+ public void configSearchParams() {
+ ServiceLocator.getXemeliosService().getListResultatDTO(getSearchSessionId(), new AsyncCallback<ListResultatDTO>() {
+ public void onFailure(Throwable caught) {
+ Window.alert(caught.getMessage());
+ GWTUtils.handleRPCError(caught);
+ }
+
+ public void onSuccess(ListResultatDTO result) {
+ DlgSearchParams dsp = new DlgSearchParams(AbstractSearchWidget.this, result);
+ dsp.show();
+ }
+ });
+ }
+
+ public static class DisplayParameters {
+ /**
+ * Permet de déterminer si il faut afficher le bouton d'ajout de critères
+ */
+ private boolean addCriteriaVisible = true;
+ /**
+ * Permet de déterminer si il faut afficher le bouton de recherche en arrière-plan
+ */
+ private boolean searchBackgroundVisible = true;
+ /**
+ * Permet de déterminer si il faut afficher le bouton de suppression de tous les critères
+ */
+ private boolean clearAllVisible = true;
+ /**
+ * Permet de déterminer si il faut afficher le bouton d'accès au repository
+ */
+ private boolean showRepositoryVisible = true;
+ /**
+ * Permet de déterminer si il faut afficher le bouton d'enregistrement de requêtes
+ */
+ private boolean saveRequestVisible = true;
+ /**
+ * Permet de déterminer si il faut afficher le bouton d'ouverture de requêtes
+ */
+ private boolean openRequestVisible = true;
+ /**
+ * Permet de déterminer si il faut afficherle bouton de modification de l'environnement
+ */
+ private boolean environmentVisible = true;
+ /**
+ * Permet de déterminer si il faut afficher le bouton permettant de choisir les champs et les tris
+ */
+ private boolean sortFieldsVisible = true;
+ /**
+ * Permet de détermnier si on affiche les widgets
+ */
+ private boolean widgetsVisible = true;
+ /**
+ * Permet de déterminer si les recherches enregistrées sont incluses
+ */
+ private boolean savedRequestsIncluded = true;
+ /**
+ * Permet de déterminer si les plugins de recherche sont inclus
+ */
+ private boolean searchPluginsIncluded = true;
+ /**
+ * Permet de déterminer si les plugins d'export sont inclus
+ */
+ private boolean exportPluginsIncluded = true;
+ /**
+ * Permet de déterminer si l'utilisateur peut modifier la collectivité
+ */
+ private boolean collectiviteEditable = true;
+ /**
+ * Permet de déterminer si l'utilisateur peut modifier le budget
+ */
+ private boolean budgetEditable = true;
+ /**
+ * Permet de déterminer si on affiche les sommations
+ */
+ private boolean summableVisible = true;
+ /**
+ * Permet de savoir si on affiche ou pas le bouton d'export
+ */
+ private boolean exportVisible = true;
+ /**
+ * Permet de savoir si il faut ou non afficher le slider entre la liste des critères et le tableau de résultat. Si c'est non, on les mettra dans un
+ * VerticalPanel
+ */
+ private boolean splitterVisible = true;
+
+ /**
+ * Renvoie les paramètres d'affichage correspondant à une fenêtre de recherche normale
+ *
+ * @return
+ */
+ public static DisplayParameters newSearchWindowDisplayParameters() {
+ return new DisplayParameters();
+ }
+
+ /**
+ * Renvoie les paramètres d'affichage correspondant à un dialogue de searchHelper
+ *
+ * @return
+ */
+ public static DisplayParameters newSearchHelperWindowDisplayParameters() {
+ DisplayParameters ret = new DisplayParameters();
+ ret.setSearchBackgroundVisible(false);
+ ret.setExportPluginsIncluded(false);
+ ret.setEnvironmentVisible(false);
+ ret.setExportVisible(false);
+ ret.setSortFieldsVisible(false);
+ ret.setSummableVisible(false);
+ ret.setSplitterVisible(false);
+ return ret;
+ }
+
+ protected DisplayParameters() {
+ super();
+ }
+
+ public boolean isAddCriteriaVisible() {
+ return addCriteriaVisible;
+ }
+
+ public void setAddCriteriaVisible(boolean addCriteriaVisible) {
+ this.addCriteriaVisible = addCriteriaVisible;
+ }
+
+ public boolean isClearAllVisible() {
+ return clearAllVisible;
+ }
+
+ public void setClearAllVisible(boolean clearAllVisible) {
+ this.clearAllVisible = clearAllVisible;
+ }
+
+ public boolean isEnvironmentVisible() {
+ return environmentVisible;
+ }
+
+ public void setEnvironmentVisible(boolean environmentVisible) {
+ this.environmentVisible = environmentVisible;
+ }
+
+ public boolean isExportPluginsIncluded() {
+ return exportPluginsIncluded;
+ }
+
+ public void setExportPluginsIncluded(boolean exportPluginsIncluded) {
+ this.exportPluginsIncluded = exportPluginsIncluded;
+ }
+
+ public boolean isOpenRequestVisible() {
+ return openRequestVisible;
+ }
+
+ public void setOpenRequestVisible(boolean openRequestVisible) {
+ this.openRequestVisible = openRequestVisible;
+ }
+
+ public boolean isSaveRequestVisible() {
+ return saveRequestVisible;
+ }
+
+ public void setSaveRequestVisible(boolean saveRequestVisible) {
+ this.saveRequestVisible = saveRequestVisible;
+ }
+
+ public boolean isSavedRequestsIncluded() {
+ return savedRequestsIncluded;
+ }
+
+ public void setSavedRequestsIncluded(boolean savedRequestsIncluded) {
+ this.savedRequestsIncluded = savedRequestsIncluded;
+ }
+
+ public boolean isSearchBackgroundVisible() {
+ return searchBackgroundVisible;
+ }
+
+ public void setSearchBackgroundVisible(boolean searchBackgroundVisible) {
+ this.searchBackgroundVisible = searchBackgroundVisible;
+ }
+
+ public boolean isSearchPluginsIncluded() {
+ return searchPluginsIncluded;
+ }
+
+ public void setSearchPluginsIncluded(boolean searchPluginsIncluded) {
+ this.searchPluginsIncluded = searchPluginsIncluded;
+ }
+
+ public boolean isShowRepositoryVisible() {
+ return showRepositoryVisible;
+ }
+
+ public void setShowRepositoryVisible(boolean showRepositoryVisible) {
+ this.showRepositoryVisible = showRepositoryVisible;
+ }
+
+ public boolean isSortFieldsVisible() {
+ return sortFieldsVisible;
+ }
+
+ public void setSortFieldsVisible(boolean sortFieldsVisible) {
+ this.sortFieldsVisible = sortFieldsVisible;
+ }
+
+ public boolean isWidgetsVisible() {
+ return widgetsVisible;
+ }
+
+ public void setWidgetsVisible(boolean widgetsVisible) {
+ this.widgetsVisible = widgetsVisible;
+ }
+
+ public boolean isBudgetEditable() {
+ return budgetEditable;
+ }
+
+ public void setBudgetEditable(boolean budgetEditable) {
+ this.budgetEditable = budgetEditable;
+ }
+
+ public boolean isCollectiviteEditable() {
+ return collectiviteEditable;
+ }
+
+ public void setCollectiviteEditable(boolean collectiviteEditable) {
+ this.collectiviteEditable = collectiviteEditable;
+ }
+
+ public boolean isSummableVisible() {
+ return summableVisible;
+ }
+
+ public void setSummableVisible(boolean summableVisible) {
+ this.summableVisible = summableVisible;
+ }
+
+ public boolean isExportVisible() {
+ return exportVisible;
+ }
+
+ public void setExportVisible(boolean exportVisible) {
+ this.exportVisible = exportVisible;
+ }
+
+ public boolean isSplitterVisible() {
+ return splitterVisible;
+ }
+
+ public void setSplitterVisible(boolean splitterVisible) {
+ this.splitterVisible = splitterVisible;
+ }
+ }
+
+ private static class LocalColAndBudListener implements ColAndBudListener {
+ private AbstractSearchWidget asw;
+
+ public LocalColAndBudListener(AbstractSearchWidget asw) {
+ super();
+ this.asw = asw;
+ }
+
+ @Override
+ public void setCollectivite(LabelValueDTO collectivite) {
+ asw.currentCollectivite = collectivite;
+ asw.dfCollectivite.setText(asw.currentCollectivite.getLibelle());
+ asw.collectiviteChanged();
+ }
+ }
}