All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.opencms.ui.apps.search.CmsSourceSearchApp Maven / Gradle / Ivy

Go to download

OpenCms is an enterprise-ready, easy to use website content management system based on Java and XML technology. Offering a complete set of features, OpenCms helps content managers worldwide to create and maintain beautiful websites fast and efficiently.

There is a newer version: 18.0
Show newest version
/*
 * This library is part of OpenCms -
 * the Open Source Content Management System
 *
 * Copyright (c) Alkacon Software GmbH & Co. KG (http://www.alkacon.com)
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 *
 * This library 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
 * Lesser General Public License for more details.
 *
 * For further information about Alkacon Software, please see the
 * company website: http://www.alkacon.com
 *
 * For further information about OpenCms, please see the
 * project website: http://www.opencms.org
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 */

package org.opencms.ui.apps.search;

import org.opencms.file.CmsResource;
import org.opencms.ui.A_CmsUI;
import org.opencms.ui.CmsVaadinUtils;
import org.opencms.ui.FontOpenCms;
import org.opencms.ui.I_CmsDialogContext;
import org.opencms.ui.I_CmsDialogContext.ContextType;
import org.opencms.ui.apps.A_CmsWorkplaceApp;
import org.opencms.ui.apps.CmsAppWorkplaceUi;
import org.opencms.ui.apps.CmsFileExplorer;
import org.opencms.ui.apps.I_CmsCachableApp;
import org.opencms.ui.apps.I_CmsContextProvider;
import org.opencms.ui.apps.Messages;
import org.opencms.ui.apps.projects.CmsProjectManagerConfiguration;
import org.opencms.ui.apps.search.CmsSourceSearchForm.SearchType;
import org.opencms.ui.components.CmsFileTable;
import org.opencms.ui.components.CmsFileTableDialogContext;
import org.opencms.ui.report.CmsReportOverlay;
import org.opencms.util.CmsStringUtil;
import org.opencms.util.CmsUUID;

import java.util.Collections;
import java.util.LinkedHashMap;
import java.util.List;

import com.vaadin.event.FieldEvents.TextChangeEvent;
import com.vaadin.event.FieldEvents.TextChangeListener;
import com.vaadin.server.Sizeable.Unit;
import com.vaadin.ui.Component;
import com.vaadin.ui.HorizontalSplitPanel;
import com.vaadin.ui.TextField;
import com.vaadin.ui.UI;
import com.vaadin.ui.themes.ValoTheme;

/**
 * The source search app.

*/ public class CmsSourceSearchApp extends A_CmsWorkplaceApp implements I_CmsCachableApp { /** The folder key. */ public static final String FOLDER = "folder"; /** The index key. */ public static final String INDEX = "index"; /** The locale key. */ public static final String LOCALE = "locale"; /** The project ley. */ public static final String PROJECT = "project"; /** The query key. */ public static final String QUERY = "query"; /** The replace pattern key. */ public static final String REPLACE_PATTERN = "rpattern"; /** The resource type key. */ public static final String RESOURCE_TYPE = "rtype"; /** The search pattern key. */ public static final String SEARCH_PATTERN = "spattern"; /** The type key. */ public static final String SEARCH_TYPE = "type"; /** The XPath key. */ public static final String XPATH = "xpath"; /** The serial version id. */ private static final long serialVersionUID = 4675966043824229258L; /** The results file table. */ CmsFileTable m_resultTable; /** The currently selected result list resources. */ private List m_currentResources; /** The current state string. */ private String m_currentState; /** The current search report. */ private CmsReportOverlay m_report; /** The result table filter input. */ private TextField m_resultTableFilter; /** The search form. */ private CmsSourceSearchForm m_searchForm; /** The search and replace thread. */ private CmsSearchReplaceThread m_thread; /** * Generates the state string for the given search settings.

* * @param settings the search settings * * @return the state string */ static String generateState(CmsSearchReplaceSettings settings) { String state = ""; state = A_CmsWorkplaceApp.addParamToState(state, SEARCH_TYPE, settings.getType().name()); state = A_CmsWorkplaceApp.addParamToState(state, SEARCH_PATTERN, settings.getSearchpattern()); if (!settings.getPaths().isEmpty()) { state = A_CmsWorkplaceApp.addParamToState(state, FOLDER, settings.getPaths().get(0)); } state = A_CmsWorkplaceApp.addParamToState(state, RESOURCE_TYPE, settings.getTypes()); state = A_CmsWorkplaceApp.addParamToState(state, LOCALE, settings.getLocale()); state = A_CmsWorkplaceApp.addParamToState(state, QUERY, settings.getQuery()); state = A_CmsWorkplaceApp.addParamToState(state, INDEX, settings.getSource()); state = A_CmsWorkplaceApp.addParamToState(state, XPATH, settings.getXpath()); return state; } /** * Returns the settings for the given state.

* * @param state the state * * @return the search settings */ static CmsSearchReplaceSettings getSettingsFromState(String state) { CmsSearchReplaceSettings settings = null; String typeString = A_CmsWorkplaceApp.getParamFromState(state, SEARCH_TYPE); if (CmsStringUtil.isNotEmptyOrWhitespaceOnly(typeString)) { SearchType type = SearchType.valueOf(typeString); settings = new CmsSearchReplaceSettings(); settings.setType(type); settings.setPaths(Collections.singletonList(A_CmsWorkplaceApp.getParamFromState(state, FOLDER))); String resType = A_CmsWorkplaceApp.getParamFromState(state, RESOURCE_TYPE); if (resType != null) { settings.setTypes(typeString); } String project = A_CmsWorkplaceApp.getParamFromState(state, PROJECT); if (project != null) { settings.setProject(project); } settings.setSearchpattern(A_CmsWorkplaceApp.getParamFromState(state, SEARCH_PATTERN)); if (type.isContentValuesOnly()) { settings.setOnlyContentValues(true); String locale = A_CmsWorkplaceApp.getParamFromState(state, LOCALE); if (CmsStringUtil.isNotEmptyOrWhitespaceOnly(locale)) { settings.setLocale(locale); } settings.setXpath(A_CmsWorkplaceApp.getParamFromState(state, XPATH)); } if (type.isSolrSearch()) { settings.setQuery(A_CmsWorkplaceApp.getParamFromState(state, QUERY)); settings.setSource(A_CmsWorkplaceApp.getParamFromState(state, INDEX)); } } return settings; } /** * @see org.opencms.ui.apps.I_CmsCachableApp#isCachable() */ public boolean isCachable() { return true; } /** * @see org.opencms.ui.apps.I_CmsCachableApp#onRestoreFromCache() */ public void onRestoreFromCache() { if (m_resultTable.getItemCount() < CmsFileExplorer.UPDATE_FOLDER_THRESHOLD) { for (CmsUUID id : m_resultTable.getAllIds()) { m_resultTable.update(id, false); } } else { if (m_currentResources != null) { for (CmsResource res : m_currentResources) { m_resultTable.update(res.getStructureId(), false); } } } } /** * @see org.opencms.ui.apps.A_CmsWorkplaceApp#onStateChange(java.lang.String) */ @Override public void onStateChange(String state) { if ((m_currentState == null) || !m_currentState.equals(state)) { super.onStateChange(state); } } /** * Displays the search result.

*/ protected void displayResult() { m_resultTable.fillTable(A_CmsUI.getCmsObject(), m_thread.getMatchedResources()); m_searchForm.removeComponent(m_report); m_report = null; } /** * @see org.opencms.ui.apps.A_CmsWorkplaceApp#getBreadCrumbForState(java.lang.String) */ @Override protected LinkedHashMap getBreadCrumbForState(String state) { return null; } /** * @see org.opencms.ui.apps.A_CmsWorkplaceApp#getComponentForState(java.lang.String) */ @Override protected Component getComponentForState(String state) { m_rootLayout.setMainHeightFull(true); HorizontalSplitPanel sp = new HorizontalSplitPanel(); sp.setSizeFull(); m_searchForm = new CmsSourceSearchForm(this); sp.setFirstComponent(m_searchForm); m_resultTable = new CmsFileTable(null); m_resultTable.applyWorkplaceAppSettings(); m_resultTable.setContextProvider(new I_CmsContextProvider() { /** * @see org.opencms.ui.apps.I_CmsContextProvider#getDialogContext() */ public I_CmsDialogContext getDialogContext() { CmsFileTableDialogContext context = new CmsFileTableDialogContext( CmsProjectManagerConfiguration.APP_ID, ContextType.fileTable, m_resultTable, m_resultTable.getSelectedResources()); storeCurrentFileSelection(m_resultTable.getSelectedResources()); context.setEditableProperties(CmsFileExplorer.INLINE_EDIT_PROPERTIES); return context; } }); m_resultTable.setSizeFull(); m_resultTableFilter = new TextField(); m_resultTableFilter.setIcon(FontOpenCms.FILTER); m_resultTableFilter.setInputPrompt( Messages.get().getBundle(UI.getCurrent().getLocale()).key(Messages.GUI_EXPLORER_FILTER_0)); m_resultTableFilter.addStyleName(ValoTheme.TEXTFIELD_INLINE_ICON); m_resultTableFilter.setWidth("200px"); m_resultTableFilter.addTextChangeListener(new TextChangeListener() { private static final long serialVersionUID = 1L; public void textChange(TextChangeEvent event) { m_resultTable.filterTable(event.getText()); } }); m_infoLayout.addComponent(m_resultTableFilter); sp.setSecondComponent(m_resultTable); sp.setSplitPosition(CmsFileExplorer.LAYOUT_SPLIT_POSITION, Unit.PIXELS); if (CmsStringUtil.isNotEmptyOrWhitespaceOnly(state)) { CmsSearchReplaceSettings settings = getSettingsFromState(state); if (settings != null) { m_currentState = state; m_searchForm.initFormValues(settings); search(settings, false); } } return sp; } /** * @see org.opencms.ui.apps.A_CmsWorkplaceApp#getSubNavEntries(java.lang.String) */ @Override protected List getSubNavEntries(String state) { return null; } /** * Executes the search.

* * @param settings the search settings * @param updateState true to create a new history entry */ protected void search(CmsSearchReplaceSettings settings, boolean updateState) { if (updateState) { String state = generateState(settings); CmsAppWorkplaceUi.get().changeCurrentAppState(state); m_currentState = state; } m_thread = new CmsSearchReplaceThread(A_CmsUI.get().getHttpSession(), A_CmsUI.getCmsObject(), settings); if (m_report != null) { m_searchForm.removeComponent(m_report); } m_report = new CmsReportOverlay(m_thread); m_report.addReportFinishedHandler(new Runnable() { public void run() { displayResult(); } }); m_searchForm.addComponent(m_report); m_report.setTitle(CmsVaadinUtils.getMessageText(Messages.GUI_SOURCESEARCH_REPORT_TITLE_0)); m_thread.start(); m_resultTableFilter.clear(); } /** * Stores the currently selected resources list.

* * @param resources the currently selected resources */ void storeCurrentFileSelection(List resources) { m_currentResources = resources; } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy