/*
* This library is part of OpenCms -
* the Open Source Content Management System
*
* Copyright (c) Alkacon Software GmbH (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 GmbH, 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.workplace.tools.searchindex.sourcesearch;
import org.opencms.file.CmsProject;
import org.opencms.file.CmsResource;
import org.opencms.jsp.CmsJspActionElement;
import org.opencms.main.CmsException;
import org.opencms.util.CmsUUID;
import org.opencms.workplace.explorer.CmsResourceUtil;
import org.opencms.workplace.list.A_CmsListExplorerDialog;
import org.opencms.workplace.list.CmsHtmlList;
import org.opencms.workplace.list.CmsListColumnDefinition;
import org.opencms.workplace.list.CmsListItem;
import org.opencms.workplace.list.CmsListMetadata;
import org.opencms.workplace.list.I_CmsListResourceCollector;
import java.util.ArrayList;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.jsp.PageContext;
/**
* Explorer dialog for the content search result list.<p>
*
* @since 7.5.3
*/
public class CmsSourceSearchFilesDialog extends A_CmsListExplorerDialog {
/** list column id constant. */
public static final String LIST_COLUMN_FILES = "cf";
/** list independent action constant. */
public static final String LIST_IACTION_FILTER = "iaf";
/** list id constant. */
public static final String LIST_ID = "lcs";
/** The internal collector instance. */
private I_CmsListResourceCollector m_collector;
/** The content sraech file list. */
private ArrayList<CmsResource> m_files;
/** Stores the value of the request parameter for the project id. */
private String m_paramProjectid;
/**
* Public constructor with JSP action element.<p>
*
* @param jsp an initialized JSP action element
*/
public CmsSourceSearchFilesDialog(CmsJspActionElement jsp) {
super(jsp, LIST_ID, Messages.get().container(Messages.GUI_SOURCESEARCH_FILES_LIST_NAME_0));
}
/**
* Public constructor with JSP variables.<p>
*
* @param context the JSP page context
* @param req the JSP request
* @param res the JSP response
*/
public CmsSourceSearchFilesDialog(PageContext context, HttpServletRequest req, HttpServletResponse res) {
this(new CmsJspActionElement(context, req, res));
}
/**
* @see org.opencms.workplace.list.A_CmsListDialog#executeListIndepActions()
*/
@Override
public void executeListIndepActions() {
if (getParamListAction().equals(LIST_IACTION_FILTER)) {
// forward to the editor
getList().setCurrentPage(1);
m_collector = null;
refreshList();
} else {
super.executeListIndepActions();
}
}
/**
* @see org.opencms.workplace.list.A_CmsListDialog#executeListMultiActions()
*/
@Override
public void executeListMultiActions() {
throwListUnsupportedActionException();
}
/**
* @see org.opencms.workplace.list.A_CmsListDialog#executeListSingleActions()
*/
@Override
public void executeListSingleActions() {
throwListUnsupportedActionException();
}
/**
* @see org.opencms.workplace.list.A_CmsListExplorerDialog#getCollector()
*/
@Override
public I_CmsListResourceCollector getCollector() {
m_collector = new CmsSourceSearchCollector(this);
return m_collector;
}
/**
* Gets the content search result list.<p>
*
* @return the content search result list
*/
public List<CmsResource> getFiles() {
return m_files;
}
/**
* @see org.opencms.workplace.list.A_CmsListDialog#getList()
*/
@Override
public CmsHtmlList getList() {
return super.getList();
}
/**
* Returns the project id parameter value.<p>
*
* @return the project id parameter value
*/
public String getParamProjectid() {
return m_paramProjectid;
}
/**
* Returns an appropiate initialized resource util object for the given item.<p>
*
* @param item the item representing the resource
*
* @return a resource util object
*/
@Override
public CmsResourceUtil getResourceUtil(CmsListItem item) {
CmsResourceUtil resUtil = getResourceUtil();
resUtil.setResource(getCollector().getResource(getCms(), item));
return resUtil;
}
/**
* @see org.opencms.workplace.list.A_CmsListDialog#refreshList()
*/
@Override
public synchronized void refreshList() {
if (LIST_IACTION_FILTER.equals(getParamListAction())) {
if (m_collector != null) {
// refresh only if really necessary
return;
}
}
super.refreshList();
}
/** Sets the content search result list.
*
* @param files the found files
*/
public void setList(ArrayList<CmsResource> files) {
m_files = files;
}
/**
* Sets the project id parameter value.<p>
*
* @param projectId the project id parameter value
*/
public void setParamProjectid(String projectId) {
m_paramProjectid = projectId;
}
/**
* Returns a list item created from the resource information, differs between valid resources and invalid resources.<p>
*
* @param resource the resource to create the list item from
* @param list the list
* @param showPermissions if to show permissions
* @param showDateLastMod if to show the last modification date
* @param showUserLastMod if to show the last modification user
* @param showDateCreate if to show the creation date
* @param showUserCreate if to show the creation date
* @param showDateRel if to show the date released
* @param showDateExp if to show the date expired
* @param showState if to show the state
* @param showLockedBy if to show the lock user
* @param showSite if to show the site
*
* @return a list item created from the resource information
*/
protected CmsListItem createResourceListItem(
CmsResource resource,
CmsHtmlList list,
boolean showPermissions,
boolean showDateLastMod,
boolean showUserLastMod,
boolean showDateCreate,
boolean showUserCreate,
boolean showDateRel,
boolean showDateExp,
boolean showState,
boolean showLockedBy,
boolean showSite) {
CmsListItem item = list.newItem(resource.getStructureId().toString());
// get an initialized resource utility
CmsResourceUtil resUtil = getResourceUtil();
resUtil.setResource(resource);
item.set(A_CmsListExplorerDialog.LIST_COLUMN_NAME, resUtil.getPath());
item.set(A_CmsListExplorerDialog.LIST_COLUMN_ROOT_PATH, resUtil.getFullPath());
item.set(A_CmsListExplorerDialog.LIST_COLUMN_TITLE, resUtil.getTitle());
item.set(A_CmsListExplorerDialog.LIST_COLUMN_TYPE, resUtil.getResourceTypeName());
item.set(A_CmsListExplorerDialog.LIST_COLUMN_SIZE, resUtil.getSizeString());
if (showPermissions) {
item.set(A_CmsListExplorerDialog.LIST_COLUMN_PERMISSIONS, resUtil.getPermissionString());
}
if (showDateLastMod) {
item.set(A_CmsListExplorerDialog.LIST_COLUMN_DATELASTMOD, new Date(resource.getDateLastModified()));
}
if (showUserLastMod) {
item.set(A_CmsListExplorerDialog.LIST_COLUMN_USERLASTMOD, resUtil.getUserLastModified());
}
if (showDateCreate) {
item.set(A_CmsListExplorerDialog.LIST_COLUMN_DATECREATE, new Date(resource.getDateCreated()));
}
if (showUserCreate) {
item.set(A_CmsListExplorerDialog.LIST_COLUMN_USERCREATE, resUtil.getUserCreated());
}
if (showDateRel) {
item.set(A_CmsListExplorerDialog.LIST_COLUMN_DATEREL, new Date(resource.getDateReleased()));
}
if (showDateExp) {
item.set(A_CmsListExplorerDialog.LIST_COLUMN_DATEEXP, new Date(resource.getDateExpired()));
}
if (showState) {
item.set(A_CmsListExplorerDialog.LIST_COLUMN_STATE, resUtil.getStateName());
}
if (showLockedBy) {
item.set(A_CmsListExplorerDialog.LIST_COLUMN_LOCKEDBY, resUtil.getLockedByName());
}
if (showSite) {
item.set(A_CmsListExplorerDialog.LIST_COLUMN_SITE, resUtil.getSiteTitle());
}
return item;
}
/**
* @see org.opencms.workplace.list.A_CmsListDialog#fillDetails(java.lang.String)
*/
@Override
protected void fillDetails(String detailId) {
// no-details
}
/**
* Returns a list of list items from a list of resources.<p>
*
* @return a list of {@link CmsListItem} objects
*/
@Override
protected List<CmsListItem> getListItems() {
List<CmsListItem> ret = new ArrayList<CmsListItem>();
applyColumnVisibilities();
CmsHtmlList list = getList();
CmsListColumnDefinition colPermissions = list.getMetadata().getColumnDefinition(
A_CmsListExplorerDialog.LIST_COLUMN_PERMISSIONS);
boolean showPermissions = (colPermissions.isVisible() || colPermissions.isPrintable());
CmsListColumnDefinition colDateLastMod = list.getMetadata().getColumnDefinition(
A_CmsListExplorerDialog.LIST_COLUMN_DATELASTMOD);
boolean showDateLastMod = (colDateLastMod.isVisible() || colDateLastMod.isPrintable());
CmsListColumnDefinition colUserLastMod = list.getMetadata().getColumnDefinition(
A_CmsListExplorerDialog.LIST_COLUMN_USERLASTMOD);
boolean showUserLastMod = (colUserLastMod.isVisible() || colUserLastMod.isPrintable());
CmsListColumnDefinition colDateCreate = list.getMetadata().getColumnDefinition(
A_CmsListExplorerDialog.LIST_COLUMN_DATECREATE);
boolean showDateCreate = (colDateCreate.isVisible() || colDateCreate.isPrintable());
CmsListColumnDefinition colUserCreate = list.getMetadata().getColumnDefinition(
A_CmsListExplorerDialog.LIST_COLUMN_USERCREATE);
boolean showUserCreate = (colUserCreate.isVisible() || colUserCreate.isPrintable());
CmsListColumnDefinition colDateRel = list.getMetadata().getColumnDefinition(
A_CmsListExplorerDialog.LIST_COLUMN_DATEREL);
boolean showDateRel = (colDateRel.isVisible() || colDateRel.isPrintable());
CmsListColumnDefinition colDateExp = list.getMetadata().getColumnDefinition(
A_CmsListExplorerDialog.LIST_COLUMN_DATEEXP);
boolean showDateExp = (colDateExp.isVisible() || colDateExp.isPrintable());
CmsListColumnDefinition colState = list.getMetadata().getColumnDefinition(
A_CmsListExplorerDialog.LIST_COLUMN_STATE);
boolean showState = (colState.isVisible() || colState.isPrintable());
CmsListColumnDefinition colLockedBy = list.getMetadata().getColumnDefinition(
A_CmsListExplorerDialog.LIST_COLUMN_LOCKEDBY);
boolean showLockedBy = (colLockedBy.isVisible() || colLockedBy.isPrintable());
CmsListColumnDefinition colSite = list.getMetadata().getColumnDefinition(
A_CmsListExplorerDialog.LIST_COLUMN_SITE);
boolean showSite = (colSite.isVisible() || colSite.isPrintable());
// get content
Iterator<CmsResource> itRes = m_files.iterator();
while (itRes.hasNext()) {
CmsResource resource = itRes.next();
CmsListItem item = createResourceListItem(
resource,
list,
showPermissions,
showDateLastMod,
showUserLastMod,
showDateCreate,
showUserCreate,
showDateRel,
showDateExp,
showState,
showLockedBy,
showSite);
ret.add(item);
}
return ret;
}
/**
* @see org.opencms.workplace.list.A_CmsListExplorerDialog#getProject()
*/
@Override
protected CmsProject getProject() {
CmsUUID projectId = new CmsUUID(getParamProjectid());
try {
return getCms().readProject(projectId);
} catch (CmsException e) {
return super.getProject();
}
}
/**
* @see org.opencms.workplace.CmsWorkplace#initMessages()
*/
@Override
protected void initMessages() {
// add specific dialog resource bundle
addMessages(Messages.get().getBundleName());
// add default resource bundles
super.initMessages();
}
/**
* @see org.opencms.workplace.list.A_CmsListDialog#setIndependentActions(org.opencms.workplace.list.CmsListMetadata)
*/
@Override
protected void setIndependentActions(CmsListMetadata metadata) {
super.setIndependentActions(metadata);
}
/**
* @see org.opencms.workplace.list.A_CmsListDialog#setMultiActions(org.opencms.workplace.list.CmsListMetadata)
*/
@Override
protected void setMultiActions(CmsListMetadata metadata) {
// no LMAs
}
/**
* @see org.opencms.workplace.list.A_CmsListDialog#validateParamaters()
*/
@Override
protected void validateParamaters() throws Exception {
try {
getCms().readProject(new CmsUUID(getParamProjectid()));
} catch (Exception e) {
m_paramProjectid = getCms().getRequestContext().getCurrentProject().getUuid().toString();
}
}
}