/** * OpenKM, Open Document Management System (http://www.openkm.com) * Copyright (c) 2006-2011 Paco Avila & Josep Llort * * No bytes were intentionally harmed during the development of this application. * * 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 2 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, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ package com.openkm.frontend.client.widget.searchin; import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; import java.util.List; import java.util.Map; import com.google.gwt.i18n.client.DateTimeFormat; import com.google.gwt.user.client.ui.Composite; import com.google.gwt.user.client.ui.HasAlignment; import com.google.gwt.user.client.ui.HorizontalPanel; import com.google.gwt.user.client.ui.Image; import com.google.gwt.user.client.ui.TabPanel; import com.openkm.frontend.client.Main; import com.openkm.frontend.client.bean.GWTPropertyParams; import com.openkm.frontend.client.bean.GWTQueryParams; import com.openkm.frontend.client.bean.form.GWTFormElement; import com.openkm.frontend.client.contants.ui.UIDesktopConstants; import com.openkm.frontend.client.widget.eastereggs.FuturamaWalking; import com.openkm.frontend.client.widget.searchsaved.Status; /** * SearchIn * * @author jllort * */ public class SearchIn extends Composite implements HasSearch { private static final int CONTROLER_WIDTH = 380; private static final int MINIMUM_TAB_WIDTH = 400; private HorizontalPanel hPanel; private TabPanel tabPanel; public SearchNormal searchNormal; public SearchAdvanced searchAdvanced; public SearchMetadata searchMetadata; public SearchControl searchControl; public FuturamaWalking futuramaWalking; public Status status; public int posTaxonomy = 0; private int posTemplates = 0; private int posPersonal = 0; private int posMail = 0; private int posTrash = 0; /** * SearchIn */ public SearchIn() { futuramaWalking = new FuturamaWalking(); hPanel = new HorizontalPanel(); tabPanel = new TabPanel(); searchNormal = new SearchNormal(); searchAdvanced = new SearchAdvanced(); searchMetadata = new SearchMetadata(this); searchControl = new SearchControl(); status = new Status(); status.setStyleName("okm-StatusPopup"); // Adding keyword listeners searchNormal.content.addKeyUpHandler(searchControl.keyUpHandler); searchNormal.name.addKeyUpHandler(searchControl.keyUpHandler); searchNormal.keywords.addKeyUpHandler(searchControl.keyUpHandler); searchAdvanced.from.addKeyUpHandler(searchControl.keyUpHandler); searchAdvanced.to.addKeyUpHandler(searchControl.keyUpHandler); searchAdvanced.subject.addKeyUpHandler(searchControl.keyUpHandler); tabPanel.add(searchNormal, Main.i18n("search.normal")); tabPanel.add(searchAdvanced, Main.i18n("search.advanced")); tabPanel.add(searchMetadata, Main.i18n("search.metadata")); tabPanel.selectTab(0); Image verticalLine = new Image("img/transparent_pixel.gif"); verticalLine.setStyleName("okm-Vertical-Line-Border"); verticalLine.setSize("2","100%"); hPanel.add(tabPanel); hPanel.add(verticalLine); hPanel.add(searchControl); hPanel.setCellWidth(verticalLine, "2"); hPanel.setCellHeight(verticalLine, "100%"); hPanel.setCellWidth(searchControl, ""+CONTROLER_WIDTH); hPanel.setCellVerticalAlignment(tabPanel, HasAlignment.ALIGN_TOP); hPanel.setCellVerticalAlignment(searchControl, HasAlignment.ALIGN_TOP); // Gets all users searchNormal.getAllUsers(); initWidget(hPanel); } /** * setSize * * @param width */ public void setSize(int width, int height) { setPixelSize(width, height); int tabWidth = MINIMUM_TAB_WIDTH; int controlWidth = CONTROLER_WIDTH; // Case width is too small the decision is distribute at 50% if (MINIMUM_TAB_WIDTH+CONTROLER_WIDTH>width) { if (width>10) { tabWidth = width / 2; controlWidth = width -tabWidth; } else { // Minim values tabWidth = 10; controlWidth = 10; } } else if ((width-CONTROLER_WIDTH)>tabWidth) { tabWidth = width-CONTROLER_WIDTH; // Always trying expand tab panel } tabPanel.setWidth(""+(tabWidth-2)); searchNormal.setPixelSize(tabWidth-2, height-22); // Substract tab height searchAdvanced.setPixelSize(tabWidth-2, height-22); // Substract tab height searchMetadata.setPixelSize(tabWidth-2, height-22); // Substract tab height searchControl.setPixelSize(controlWidth-4, height-2); // Substract tab height -2 pixels for vertical line too } /** * Refreshing lang */ public void langRefresh() { searchNormal.langRefresh(); searchAdvanced.langRefresh(); searchMetadata.langRefresh(); searchControl.langRefresh(); int selectedTab = tabPanel.getTabBar().getSelectedTab(); while (tabPanel.getWidgetCount() > 0) { tabPanel.remove(0); } tabPanel.add(searchNormal, Main.i18n("search.normal")); tabPanel.add(searchAdvanced, Main.i18n("search.advanced")); tabPanel.add(searchMetadata, Main.i18n("search.metadata")); tabPanel.selectTab(selectedTab); } /** * Gets the properties * * @return The properties */ public Map<String, GWTPropertyParams> getProperties() { return searchMetadata.getUpdatedPropertyParamsWithValues(); } /** * Gets the actual form elements * * @return The actual form elements values */ public Collection<String> getFormElementsKeys(){ List<String> keyList = new ArrayList<String>(); for (GWTFormElement formElement : searchMetadata.getFormElements()) { keyList.add(formElement.getName()); } return keyList; } @Override public void propertyRemoved() { searchControl.evaluateSearchButtonVisible(); searchMetadata.groupPopup.enableAddGroupButton(); // Enables or disables button ( depends exist some item on list to be added ) } @Override public void metadataValueChanged() { searchControl.evaluateSearchButtonVisible(); } /** * Sets the saved search * * @param gWTParams The params */ public void setSavedSearch(GWTQueryParams gWTParams) { if (gWTParams.getPath().startsWith(Main.get().repositoryContext.getContextTaxonomy())) { searchNormal.context.setSelectedIndex(posTaxonomy); } else if (gWTParams.getPath().startsWith(Main.get().repositoryContext.getContextPersonal())) { searchNormal.context.setSelectedIndex(posTemplates); } else if (gWTParams.getPath().startsWith(Main.get().repositoryContext.getContextTemplates())) { searchNormal.context.setSelectedIndex(posPersonal); } else if (gWTParams.getPath().startsWith(Main.get().repositoryContext.getContextMail())) { searchNormal.context.setSelectedIndex(posMail); } else if (gWTParams.getPath().startsWith(Main.get().repositoryContext.getContextTrash())) { searchNormal.context.setSelectedIndex(posTrash); } else { searchNormal.context.setSelectedIndex(posTaxonomy); } if (!gWTParams.getCategoryUuid().equals("")) { searchAdvanced.categoryUuid = gWTParams.getCategoryUuid(); searchAdvanced.categoryPath.setText(gWTParams.getCategoryPath()); } // Detecting if user has setting some folder path filter or there's only a context one if (!gWTParams.getPath().equals(Main.get().repositoryContext.getContextTaxonomy()) && !gWTParams.getPath().equals(Main.get().repositoryContext.getContextPersonal()) && !gWTParams.getPath().equals(Main.get().repositoryContext.getContextTemplates()) && !gWTParams.getPath().equals(Main.get().repositoryContext.getContextMail()) && !gWTParams.getPath().equals(Main.get().repositoryContext.getContextTrash())) { searchAdvanced.path.setText(gWTParams.getPath()); } else { searchAdvanced.path.setText(""); } searchNormal.content.setText(gWTParams.getContent()); searchNormal.name.setText(gWTParams.getName()); searchNormal.keywords.setText(gWTParams.getKeywords()); searchControl.dashboard.setValue(gWTParams.isDashboard()); searchAdvanced.from.setText(gWTParams.getMailFrom()); searchAdvanced.to.setText(gWTParams.getMailTo()); searchAdvanced.subject.setText(gWTParams.getMailSubject()); if (gWTParams.getOperator().equals(GWTQueryParams.OPERATOR_AND)) { searchControl.searchTypeAnd.setValue(true); searchControl.searchTypeOr.setValue(false); } else { searchControl.searchTypeAnd.setValue(false); searchControl.searchTypeOr.setValue(true); } // Document type if ((gWTParams.getDomain() & GWTQueryParams.DOCUMENT) != 0) { searchAdvanced.typeDocument.setValue(true); } else { searchAdvanced.typeDocument.setValue(false); } if ((gWTParams.getDomain() & GWTQueryParams.FOLDER) != 0) { searchAdvanced.typeFolder.setValue(true); } else { searchAdvanced.typeFolder.setValue(false); } if ((gWTParams.getDomain() & GWTQueryParams.MAIL) != 0) { searchAdvanced.typeMail.setValue(true); searchAdvanced.tableMail.setVisible(true); } else { searchAdvanced.typeMail.setValue(false); searchAdvanced.tableMail.setVisible(false); } searchAdvanced.mimeTypes.setSelectedIndex(0); // TODO: on api mime must not return null, this must be revised if (gWTParams.getMimeType()!= null && !gWTParams.getMimeType().equals("")) { for (int i=0; i<searchAdvanced.mimeTypes.getItemCount(); i++) { if (searchAdvanced.mimeTypes.getValue(i).equals(gWTParams.getMimeType())) { searchAdvanced.mimeTypes.setSelectedIndex(i); } } } searchNormal.userListBox.setSelectedIndex(0); if (gWTParams.getAuthor()!=null && !gWTParams.getAuthor().equals("")) { for (int i=0; i<searchNormal.userListBox.getItemCount(); i++) { if (searchNormal.userListBox.getValue(i).equals(gWTParams.getAuthor())) { searchNormal.userListBox.setSelectedIndex(i); } } } if (gWTParams.getLastModifiedFrom()!=null) { searchNormal.modifyDateFrom = gWTParams.getLastModifiedFrom(); DateTimeFormat dtf = DateTimeFormat.getFormat(Main.i18n("general.day.pattern")); searchNormal.startDate.setText(dtf.format(searchNormal.modifyDateFrom)); } else { searchNormal.modifyDateFrom = null; searchNormal.startDate.setText(""); } if (gWTParams.getLastModifiedTo()!=null) { searchNormal.modifyDateTo = gWTParams.getLastModifiedTo(); DateTimeFormat dtf = DateTimeFormat.getFormat(Main.i18n("general.day.pattern")); searchNormal.endDate.setText(dtf.format(searchNormal.modifyDateTo)); } else { searchNormal.modifyDateTo = null; searchNormal.endDate.setText(""); } resetMetadata(); addPropertyParams(gWTParams.getProperties()); searchControl.evaluateSearchButtonVisible(); searchControl.searchButton.setEnabled(true); searchControl.executeSearch(); } /** * Remove all metadata */ public void resetMetadata(){ searchMetadata.reset(); } /** * Add property params * * @param hproperties The table properties map */ private void addPropertyParams(Map<String, GWTPropertyParams> hproperties) { for (Iterator<String> it = hproperties.keySet().iterator(); it.hasNext(); ) { searchMetadata.addProperty((GWTPropertyParams) hproperties.get(it.next())); } } /** * Sets the context values * * @param contextValue The context value * @param stackView The stack view */ public void setContextValue(String contextValue, int stackView) { searchNormal.setContextValue(contextValue, stackView); } /** * showTemplates */ public void showTemplates() { searchNormal.showTemplates(); } /** * showPersonal */ public void showPersonal() { searchNormal.showPersonal(); } /** * showMail */ public void showMail() { searchNormal.showMail(); } /** * showTrash */ public void showTrash() { searchNormal.showTrash(); } /** * getSelectedView * * @return */ public int getSelectedView() { int index = searchNormal.context.getSelectedIndex(); if (index==posTaxonomy) { return UIDesktopConstants.NAVIGATOR_TAXONOMY; } else if (index==posTemplates) { return UIDesktopConstants.NAVIGATOR_TEMPLATES; } else if (index==posPersonal) { return UIDesktopConstants.NAVIGATOR_PERSONAL; } else if (index==posMail) { return UIDesktopConstants.NAVIGATOR_MAIL; } else { return UIDesktopConstants.NAVIGATOR_TRASH; } } }