/*
* Copyright (C) 2003-2007 eXo Platform SAS.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU Affero General Public License
* as published by the Free Software Foundation; either version 3
* 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, see<http://www.gnu.org/licenses/>.
*/
package org.exoplatform.ecm.webui.component.explorer.search;
import javax.jcr.AccessDeniedException;
import org.exoplatform.ecm.webui.form.validator.ECMNameValidator;
import org.exoplatform.portal.webui.util.Util;
import org.exoplatform.services.cms.queries.QueryService;
import org.exoplatform.web.application.ApplicationMessage;
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.UIPopupComponent;
import org.exoplatform.webui.core.UIPopupContainer;
import org.exoplatform.webui.core.lifecycle.UIFormLifecycle;
import org.exoplatform.webui.event.Event;
import org.exoplatform.webui.event.Event.Phase;
import org.exoplatform.webui.event.EventListener;
import org.exoplatform.webui.form.UIForm;
import org.exoplatform.webui.form.UIFormStringInput;
import org.exoplatform.webui.form.validator.MandatoryValidator;
/**
* Created by The eXo Platform SARL
* Author : Dang Van Minh
* minh.dang@exoplatform.com
* Jun 28, 2007 9:43:21 AM
*/
@ComponentConfig(
lifecycle = UIFormLifecycle.class,
template = "system:/groovy/webui/form/UIForm.gtmpl",
events = {
@EventConfig(listeners = UISaveQueryForm.SaveActionListener.class),
@EventConfig(listeners = UISaveQueryForm.CancelActionListener.class, phase=Phase.DECODE)
}
)
public class UISaveQueryForm extends UIForm implements UIPopupComponent {
final static public String QUERY_NAME = "queryName" ;
private String statement_ ;
private boolean isSimpleSearch_ = false ;
private String queryType_ ;
public UISaveQueryForm() throws Exception {
addUIFormInput(new UIFormStringInput(QUERY_NAME, QUERY_NAME, null).
addValidator(ECMNameValidator.class).
addValidator(MandatoryValidator.class)) ;
}
public void activate() {}
public void deActivate() {}
public void setSimpleSearch(boolean isSimpleSearch) { isSimpleSearch_ = isSimpleSearch ; }
public void setStatement(String statement) { statement_ = statement ; }
public void setQueryType(String queryType) { queryType_ = queryType ; }
static public class SaveActionListener extends EventListener<UISaveQueryForm> {
public void execute(Event<UISaveQueryForm> event) throws Exception {
UISaveQueryForm uiSaveQueryForm = event.getSource() ;
UIECMSearch uiECMSearch = uiSaveQueryForm.getAncestorOfType(UIECMSearch.class) ;
UIApplication uiApp = uiSaveQueryForm.getAncestorOfType(UIApplication.class) ;
String userName = Util.getPortalRequestContext().getRemoteUser() ;
QueryService queryService = uiSaveQueryForm.getApplicationComponent(QueryService.class) ;
String queryName = uiSaveQueryForm.getUIStringInput(QUERY_NAME).getValue() ;
if(queryName == null || queryName.trim().length() == 0) {
uiApp.addMessage(new ApplicationMessage("UISaveQueryForm.msg.query-name-null", null)) ;
event.getRequestContext().addUIComponentToUpdateByAjax(uiECMSearch);
return ;
}
try {
queryService.addQuery(queryName, uiSaveQueryForm.statement_, uiSaveQueryForm.queryType_, userName) ;
} catch(AccessDeniedException ace) {
uiApp.addMessage(new ApplicationMessage("UISaveQueryForm.msg.access-denied", null,
ApplicationMessage.WARNING));
event.getRequestContext().addUIComponentToUpdateByAjax(uiECMSearch);
return ;
} catch (Exception e){
uiApp.addMessage(new ApplicationMessage("UISaveQueryForm.msg.save-failed", null,
ApplicationMessage.WARNING)) ;
event.getRequestContext().addUIComponentToUpdateByAjax(uiECMSearch);
return ;
}
uiECMSearch.getChild(UISavedQuery.class).updateGrid(1);
if(uiSaveQueryForm.isSimpleSearch_) {
UISearchContainer uiSearchContainer = uiSaveQueryForm.getAncestorOfType(UISearchContainer.class) ;
UIPopupContainer uiPopup = uiSearchContainer.getChild(UIPopupContainer.class) ;
uiPopup.deActivate() ;
}
uiECMSearch.setSelectedTab(uiECMSearch.getChild(UISavedQuery.class).getId()) ;
event.getRequestContext().addUIComponentToUpdateByAjax(uiECMSearch) ;
}
}
static public class CancelActionListener extends EventListener<UISaveQueryForm> {
public void execute(Event<UISaveQueryForm> event) throws Exception {
UISearchContainer uiSearchContainer = event.getSource().getAncestorOfType(UISearchContainer.class) ;
UIPopupContainer uiPopup = uiSearchContainer.getChild(UIPopupContainer.class) ;
uiPopup.deActivate() ;
event.getRequestContext().addUIComponentToUpdateByAjax(uiPopup) ;
}
}
}