package org.gcube.portlets.user.workspace.client.view.panels; import java.util.List; import org.gcube.portlets.user.workspace.client.AppController; import org.gcube.portlets.user.workspace.client.ConstantsPortlet; import org.gcube.portlets.user.workspace.client.event.SaveSmartFolderEvent; import org.gcube.portlets.user.workspace.client.event.ScopeChangeEvent; import org.gcube.portlets.user.workspace.client.event.SearchTextEvent; import org.gcube.portlets.user.workspace.client.model.ScopeModel; import org.gcube.portlets.user.workspace.client.view.GxtComboBox; import org.gcube.portlets.user.workspace.client.view.toolbars.GxtBreadcrumbPathPanel; import com.extjs.gxt.ui.client.Style.VerticalAlignment; import com.extjs.gxt.ui.client.event.ComponentEvent; import com.extjs.gxt.ui.client.event.KeyListener; import com.extjs.gxt.ui.client.event.SelectionChangedEvent; import com.extjs.gxt.ui.client.event.SelectionChangedListener; import com.extjs.gxt.ui.client.widget.HorizontalPanel; import com.extjs.gxt.ui.client.widget.LayoutContainer; import com.extjs.gxt.ui.client.widget.VerticalPanel; 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.SimpleComboBox; import com.extjs.gxt.ui.client.widget.form.TextField; import com.extjs.gxt.ui.client.widget.layout.FitLayout; import com.google.gwt.dom.client.Style.Unit; import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.event.dom.client.ClickHandler; import com.google.gwt.event.logical.shared.ResizeEvent; import com.google.gwt.event.logical.shared.ResizeHandler; import com.google.gwt.user.client.Window; import com.google.gwt.user.client.ui.Button; import com.google.gwt.user.client.ui.RootPanel; /** * @author Francesco Mangiacrapa francesco.mangiacrapa@isti.cnr.it * @author Massimiliano Assante ISTI-CNR * * @version 1.0 May 14th 2012 */ public class GxtSeachAndFilterPanel extends LayoutContainer { private GxtComboBox comboBoxGxt = null; private ComboBox cbViewScope = null; private final TextField textSearch = new TextField(); private Button bSearch = new Button(ConstantsPortlet.SEARCH); // private Image bSearchIn = Resources.getIconSearchWs().createImage(); // private HorizontalPanel hpSearchIn = new HorizontalPanel(); // private String searchInFolderId = ""; //is the root private Button bCancel = new Button(ConstantsPortlet.CANCEL); private Button bSave = new Button(ConstantsPortlet.SAVE); // private Label labelSearchIn = new Label(); private TextField textFull = new TextField(); private DateField fromDate = new DateField(); private DateField toDate = new DateField(); private SimpleComboBox cbNameFilter = null; // private HorizontalPanel hpToolbarPathPanel = null; private boolean isSearchActive = false; private VerticalPanel verticalPanel = new VerticalPanel(); private HorizontalPanel hp = new HorizontalPanel(); // private HorizontalPanel hp2 = new HorizontalPanel(); private HorizontalPanel hpMain = new HorizontalPanel(); private GxtBreadcrumbPathPanel toolbarPahtPanel; public GxtSeachAndFilterPanel(GxtBreadcrumbPathPanel toolBarPathPanel) { setLayout(new FitLayout()); setBorders(true); this.setId("SearchAndFilter"); this.setBorders(false); // this.setStyleAttribute("background-color", "#d0def0"); this.comboBoxGxt = new GxtComboBox(); this.cbViewScope = this.comboBoxGxt.getComboViewScope(); this.cbNameFilter = this.comboBoxGxt.getComboStringFilter(); this.textSearch.setId("TextSearch"); // this.textSearch.setStyleAttribute("margin-bottom", "0px"); this.cbViewScope.setWidth(360); // this.cbViewScope.setAutoWidth(true); this.toolbarPahtPanel = toolBarPathPanel; hp.setStyleAttribute("margin-left", "2px"); seVisibleButtonsCancelSave(false); textSearch.setAllowBlank(true); textSearch.setEmptyText(ConstantsPortlet.SEARCHBYNAME); textSearch.setWidth(325); /* COMMENTED TO FIX https://support.social.isti.cnr.it/ticket/87 textSearch.setRegex("^[a-zA-Z0-9]+[ a-zA-Z0-9_().-]*"); //alphanumeric textSearch.getMessages().setRegexText(ConstantsExplorer.MESSAGE_SEARCH_FORCE_APHANUMERIC); textSearch.setAutoValidate(true); */ hp.add(textSearch); bSearch.setStyleName("wizardButton"); bSearch.getElement().getStyle().setMarginLeft(3, Unit.PX); bCancel.setStyleName("wizardButton"); bCancel.getElement().getStyle().setMarginLeft(3, Unit.PX); bSave.setStyleName("wizardButton"); bSave.getElement().getStyle().setMarginLeft(3, Unit.PX); /*bSearchIn.addStyleName("bSearchIn"); // hpSearchIn.setVerticalAlign(VerticalAlignment.BOTTOM); bSearchIn.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { final WorkspaceExplorerSelectDialog navigator = new WorkspaceExplorerSelectDialog("Select a Folder", true); WorskpaceExplorerSelectNotificationListener listener = new WorskpaceExplorerSelectNotificationListener() { @Override public void onSelectedItem(Item item) { GWT.log("onSelectedItem: "+item); selectedFolderToSearch(item); navigator.hide(); } @Override public void onFailed(Throwable throwable) { GWT.log("onFailed.."); } @Override public void onAborted() { GWT.log("onAborted.."); } @Override public void onNotValidSelection() { GWT.log("onNotValidSelection.."); } }; navigator.addWorkspaceExplorerSelectNotificationListener(listener); navigator.show(); } });*/ /* initSearchIn(); hpSearchIn.setVerticalAlign(VerticalAlignment.MIDDLE); labelSearchIn.setStyleAttribute("margin-right", "2px"); hp.add(hpSearchIn); */ hp.add(bSearch); hp.add(bSave); hp.setVerticalAlign(VerticalAlignment.MIDDLE); hp.setHeight(20); hpMain.setHeight(20); bSearch.setWidth("70px"); bSave.setWidth("70px"); cbViewScope.setStyleAttribute("margin-left", "132px"); cbViewScope.setStyleAttribute("margin-top", "2px"); hpMain.setId("hpMain"); hpMain.setStyleAttribute("background", "#D0DEF0"); verticalPanel.setId("VerticalPanelSearchAndFilter"); verticalPanel.setStyleAttribute("background", "#D0DEF0"); hpMain.add(hp); hpMain.setVerticalAlign(VerticalAlignment.MIDDLE); //SOLUTION FOR SCOPE INVISIBLE cbViewScope.setVisible(false); verticalPanel.add(this.toolbarPahtPanel.getToolBarPathPanel()); verticalPanel.add(hpMain); verticalPanel.setVerticalAlign(VerticalAlignment.MIDDLE); this.addListeners(); add(verticalPanel); updateSize(); Window.addResizeHandler(new ResizeHandler() { @Override public void onResize(ResizeEvent event) { updateSize(); } }); layout(); } /* private void initSearchIn(){ hpSearchIn.removeAll(); searchInFolderId = ""; labelSearchIn.setText(""); // labelSearchIn.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_CENTER); hpSearchIn.add(labelSearchIn); hpSearchIn.setStyleAttribute("margin-left", "3px"); hpSearchIn.add(bSearchIn); hpSearchIn.layout(true); } private void selectedFolderToSearch(Item item){ searchInFolderId = item.getId(); labelSearchIn.setText("in "+item.getName()); labelSearchIn.setTitle("search in "+item.getName()); }*/ /** * Update window size */ public void updateSize() { RootPanel workspace = RootPanel.get(ConstantsPortlet.WORKSPACEDIV); int leftBorder = workspace.getAbsoluteLeft(); int rootWidth = Window.getClientWidth() - 2* leftBorder; //- rightScrollBar; //SOLUTION FOR SCOPE INVISIBLE hp.setWidth(rootWidth); // ORIGINAL CODE // hp.setWidth(rootWidth - 500); } public void searchText(String value){ textSearch.setValue(value); seVisibleButtonsCancelSave(true); String parentId = toolbarPahtPanel.getLastParent()!=null?toolbarPahtPanel.getLastParent().getIdentifier():null; AppController.getEventBus().fireEvent(new SearchTextEvent(value, parentId)); } private void addListeners(){ bSearch.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { if(isValidSearch()){ // seVisibleButtonsCancelSave(true); // AppController.getEventBus().fireEvent(new SearchTextEvent(textSearch.getValue())); searchText(textSearch.getValue()); }else if(textSearch.getValue()==null || textSearch.getValue().isEmpty()){ searchCancel(); } } }); KeyListener keyListener = new KeyListener() { public void componentKeyUp(ComponentEvent event) { if (event.getKeyCode() == 13) { // KEY_ENTER if(isValidSearch()){ searchText(textSearch.getValue()); }else if(textSearch.getValue()==null || textSearch.getValue().isEmpty()){ searchCancel(); } } } }; textSearch.addKeyListener(keyListener); // // bCancel.addClickHandler(new ClickHandler() { // @Override // public void onClick(ClickEvent event) { // if(textSearch.getValue()!=null && !textSearch.getValue().isEmpty() && textSearch.isValid()){ // searchCancel(); // AppController.getEventBus().fireEvent(new SearchTextEvent(null)); // } // } // }); bSave.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { if(textSearch.getValue()!=null && !textSearch.getValue().isEmpty() && textSearch.isValid()){ if (textSearch.getValue() != null && textSearch.getValue().length()>0) { String parentId = toolbarPahtPanel.getLastParent()!=null?toolbarPahtPanel.getLastParent().getIdentifier():null; AppController.getEventBus().fireEvent(new SaveSmartFolderEvent(null, textSearch.getValue(), parentId)); } } } }); this.cbViewScope.addSelectionChangedListener(new SelectionChangedListener() { @Override public void selectionChanged(SelectionChangedEvent se) { ScopeModel scope = se.getSelectedItem(); AppController.getEventBus().fireEvent(new ScopeChangeEvent(scope.getId())); } }); } public void resetFields(){ this.textSearch.reset(); this.textFull.reset(); this.fromDate.reset(); this.toDate.reset(); this.cbNameFilter.reset(); } private boolean isValidSearch(){ return textSearch.getValue()!=null && !textSearch.getValue().isEmpty() && textSearch.isValid(); } public void seVisibleButtonsCancelSave(boolean flag){ this.bCancel.setVisible(flag); this.bSave.setVisible(flag); } public void searchCancel(){ resetFields(); // initSearchIn(); seVisibleButtonsCancelSave(false); } public boolean isSearchActive(){ return this.isSearchActive; } public void setListScope(List listScope){ this.comboBoxGxt.setListScope(listScope); } public void selectScopeByIndex(int index){ this.cbViewScope.setValue(cbViewScope.getStore().getAt(index)); } public void setSearchActive(boolean isSearchActive) { this.isSearchActive = isSearchActive; } public void setVisibleButtonSave(boolean bool){ this.bSave.setVisible(bool); } public void setEmptyText(String emptyText){ textSearch.setEmptyText(emptyText); } public GxtBreadcrumbPathPanel getToolbarPathPanel() { return toolbarPahtPanel; } }