UIContentSearchResult.java
package org.exoplatform.wcm.webui.selector.content;
import java.text.DateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Locale;
import javax.jcr.Node;
import javax.jcr.Session;
import javax.portlet.PortletPreferences;
import org.exoplatform.ecm.webui.selector.UISelectable;
import org.exoplatform.portal.webui.util.Util;
import org.exoplatform.services.cms.templates.TemplateService;
import org.exoplatform.services.ecm.publication.PublicationService;
import org.exoplatform.services.jcr.RepositoryService;
import org.exoplatform.services.jcr.core.ManageableRepository;
import org.exoplatform.services.wcm.core.NodeLocation;
import org.exoplatform.services.wcm.core.WCMConfigurationService;
import org.exoplatform.services.wcm.publication.WCMComposer;
import org.exoplatform.services.wcm.search.ResultNode;
import org.exoplatform.services.wcm.search.base.AbstractPageList;
import org.exoplatform.services.wcm.utils.WCMCoreUtils;
import org.exoplatform.wcm.webui.Utils;
import org.exoplatform.wcm.webui.viewer.UIContentViewer;
import org.exoplatform.web.application.ApplicationMessage;
import org.exoplatform.webui.application.WebuiRequestContext;
import org.exoplatform.webui.application.portlet.PortletRequestContext;
import org.exoplatform.webui.config.annotation.ComponentConfig;
import org.exoplatform.webui.config.annotation.EventConfig;
import org.exoplatform.webui.core.UIApplication;
import org.exoplatform.webui.core.UIGrid;
import org.exoplatform.webui.event.Event;
import org.exoplatform.webui.event.EventListener;
/**
* Author : TAN DUNG DANG
* dzungdev@gmail.com
* Feb 10, 2009
*/
@ComponentConfig(
events = {
@EventConfig(listeners = UIContentSearchResult.SelectActionListener.class),
@EventConfig(listeners = UIContentSearchResult.ViewActionListener.class)
}
)
public class UIContentSearchResult extends UIGrid {
/** The Constant TITLE. */
public static final String TITLE = "title";
/** The Constant NODE_EXPECT. */
public static final String NODE_EXPECT = "excerpt";
/** The Constant SCORE. */
public static final String SCORE = "score";
/** The Constant CREATE_DATE. */
public static final String CREATE_DATE = "CreateDate";
/** The Constant PUBLICATION_STATE. */
public static final String PUBLICATION_STATE = "publicationstate";
/** The Constant NODE_PATH. */
public static final String NODE_PATH = "path";
/** The Actions. */
public String[] Actions = {"Select", "View"};
/** The BEA n_ fields. */
public String[] BEAN_FIELDS = {TITLE, SCORE, PUBLICATION_STATE};
/**
* Instantiates a new uIWCM search result.
*
* @throws Exception the exception
*/
public UIContentSearchResult() throws Exception {
configure(NODE_PATH, BEAN_FIELDS, Actions);
getUIPageIterator().setId("UIWCMSearchResultPaginator");
}
/**
* Gets the date format.
*
* @return the date format
*/
public DateFormat getDateFormat() {
Locale locale = Util.getPortalRequestContext().getLocale();
DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT, locale);
return dateFormat;
}
/**
* Update grid.
*
* @param pageList the paginated result
*
* @throws Exception the exception
*/
public void updateGrid(AbstractPageList<ResultNode> pageList) throws Exception {
getUIPageIterator().setPageList(pageList);
}
/**
* Gets the title node.
*
* @param node the node
*
* @return the title node
*
* @throws Exception the exception
*/
public String getTitleNode(Node node) throws Exception {
return node.hasProperty("exo:title") ?
node.getProperty("exo:title").getValue().getString() : node.getName();
}
/**
* Gets the creates the date.
*
* @param node the node
*
* @return the creates the date
*
* @throws Exception the exception
*/
public Date getCreateDate(Node node) throws Exception {
if(node.hasProperty("exo:dateCreated")) {
Calendar cal = node.getProperty("exo:dateCreated").getValue().getDate();
return cal.getTime();
}
return null;
}
/**
* Gets the expect.
*
* @param expect the expect
*
* @return the expect
*/
public String getExpect(String expect) {
expect = expect.replaceAll("<[^>]*/?>", "");
return expect;
}
/**
* Gets the current state.
*
* @param node the node
*
* @return the current state
*
* @throws Exception the exception
*/
public String getCurrentState(Node node) throws Exception {
PublicationService pubService = getApplicationComponent(PublicationService.class);
return pubService.getCurrentState(node);
}
/**
* Gets the session.
*
* @return the session
*
* @throws Exception the exception
*/
public Session getSession() throws Exception {
RepositoryService repoService = getApplicationComponent(RepositoryService.class);
ManageableRepository maRepository = repoService.getCurrentRepository();
PortletRequestContext pContext = (PortletRequestContext) WebuiRequestContext.getCurrentInstance();
PortletPreferences prefs = pContext.getRequest().getPreferences();
String workspace = prefs.getValue("workspace", null);
if(workspace == null) {
WCMConfigurationService wcmConfService =
getApplicationComponent(WCMConfigurationService.class);
NodeLocation nodeLocation = wcmConfService.getLivePortalsLocation();
workspace = nodeLocation.getWorkspace();
}
Session session = WCMCoreUtils.getUserSessionProvider().getSession(workspace, maRepository);
return session;
}
/**
* Gets the workspace name.
* @param node the node
* @return name of workspace
* @throws Exception the exception
*/
public String getWorkspaceName(Node node) throws Exception {
return node.getSession().getWorkspace().getName();
}
public String getRepository() throws Exception {
RepositoryService repoService = getApplicationComponent(RepositoryService.class);
ManageableRepository maRepository = repoService.getCurrentRepository();
return maRepository.getConfiguration().getName();
}
/**
* The listener interface for receiving selectAction events.
* The class that is interested in processing a selectAction
* event implements this interface, and the object created
* with that class is registered with a component using the
* component's <code>addSelectActionListener</code> method. When
* the selectAction event occurs, that object's appropriate
* method is invoked.
*/
public static class SelectActionListener extends EventListener<UIContentSearchResult> {
/* (non-Javadoc)
* @see org.exoplatform.webui.event.EventListener#execute(org.exoplatform.webui.event.Event)
*/
public void execute(Event<UIContentSearchResult> event) throws Exception {
UIContentSearchResult contentSearchResult = event.getSource();
UIContentSelector contentSelector = contentSearchResult.getAncestorOfType(UIContentSelector.class);
UIContentBrowsePanel contentBrowsePanel = contentSelector.getChild(UIContentBrowsePanel.class);
((UISelectable) (contentBrowsePanel.getSourceComponent())).doSelect(contentBrowsePanel.getReturnFieldName(),
event.getRequestContext()
.getRequestParameter(OBJECTID));
}
}
/**
* The listener interface for receiving viewAction events.
* The class that is interested in processing a viewAction
* event implements this interface, and the object created
* with that class is registered with a component using the
* component's <code>addViewActionListener</code> method. When
* the viewAction event occurs, that object's appropriate
* method is invoked.
*/
public static class ViewActionListener extends EventListener<UIContentSearchResult> {
/* (non-Javadoc)
* @see org.exoplatform.webui.event.EventListener#execute(org.exoplatform.webui.event.Event)
*/
public void execute(Event<UIContentSearchResult> event) throws Exception {
UIContentSearchResult contentSearchResult = event.getSource();
UIApplication uiApp = contentSearchResult.getAncestorOfType(UIApplication.class);
String expression = event.getRequestContext().getRequestParameter(OBJECTID);
NodeLocation nodeLocation = NodeLocation.getNodeLocationByExpression(expression);
String repository = nodeLocation.getRepository();
String workspace = nodeLocation.getWorkspace();
String webcontentPath = nodeLocation.getPath();
Node originalNode = Utils.getViewableNodeByComposer(repository,
workspace,
webcontentPath,
WCMComposer.BASE_VERSION);
Node viewNode = Utils.getViewableNodeByComposer(repository, workspace, webcontentPath);
TemplateService templateService = WCMCoreUtils.getService(TemplateService.class);
String nodeType = originalNode.getPrimaryNodeType().getName();
if (templateService.isManagedNodeType(nodeType)) {
UIContentSelector contentSelector = contentSearchResult.getAncestorOfType(UIContentSelector.class);
UIContentViewer contentResultViewer = contentSelector.getChild(UIContentViewer.class);
if (contentResultViewer == null)
contentResultViewer = contentSelector.addChild(UIContentViewer.class, null, null);
contentResultViewer.setNode(viewNode);
contentResultViewer.setOriginalNode(originalNode);
event.getRequestContext().addUIComponentToUpdateByAjax(contentSelector);
contentSelector.setSelectedTab(contentResultViewer.getId());
} else {
uiApp.addMessage(new ApplicationMessage("UIContentSearchResult.msg.template-not-support",
null,
ApplicationMessage.WARNING));
}
}
}
}