/*
* 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 java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import javax.jcr.Node;
import javax.jcr.NodeIterator;
import javax.jcr.Property;
import javax.jcr.Value;
import javax.jcr.query.QueryResult;
import org.exoplatform.webui.core.UIPopupComponent;
import org.exoplatform.webui.core.UIPopupContainer;
import org.exoplatform.webui.config.annotation.ComponentConfig;
import org.exoplatform.webui.config.annotation.EventConfig;
import org.exoplatform.webui.core.lifecycle.UIFormLifecycle;
import org.exoplatform.webui.core.model.SelectItemOption;
import org.exoplatform.webui.event.Event;
import org.exoplatform.webui.event.EventListener;
import org.exoplatform.webui.event.Event.Phase;
import org.exoplatform.webui.form.UIForm;
import org.exoplatform.webui.form.UIFormSelectBox;
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
* May 6, 2007
* 10:18:56 AM
*/
@ComponentConfig(
lifecycle = UIFormLifecycle.class,
template = "app:/groovy/webui/component/explorer/search/UICompareExactlyForm.gtmpl",
events = {
@EventConfig(listeners = UICompareExactlyForm.SelectActionListener.class),
@EventConfig(phase=Phase.DECODE, listeners = UICompareExactlyForm.CancelActionListener.class)
}
)
public class UICompareExactlyForm extends UIForm implements UIPopupComponent {
private static final String FILTER = "filter" ;
private static final String RESULT = "result";
private static final String TEMP_RESULT = "tempSel";
private List<String> listValue_ ;
public UICompareExactlyForm() throws Exception {}
public void activate() {}
public void deActivate() {}
public void init(String properties, QueryResult result) throws Exception {
listValue_ = new ArrayList<String>() ;
List<SelectItemOption<String>> opts = new ArrayList<SelectItemOption<String>>();
addUIFormInput(new UIFormStringInput(FILTER, FILTER, null)) ;
addUIFormInput(new UIFormSelectBox(RESULT, RESULT, opts).setSize(15).addValidator(MandatoryValidator.class)) ;
addUIFormInput(new UIFormSelectBox(TEMP_RESULT, TEMP_RESULT, opts)) ;
NodeIterator iter = result.getNodes() ;
String[] props = {} ;
if(properties.indexOf(",") > -1) props = properties.split(",") ;
while(iter.hasNext()) {
Node node = iter.nextNode() ;
if(props.length > 0) {
for(String pro : props) {
if(node.hasProperty(pro)) {
Property property = node.getProperty(pro) ;
setPropertyResult(property) ;
}
}
} else {
if(node.hasProperty(properties)) {
Property property = node.getProperty(properties) ;
setPropertyResult(property) ;
}
}
}
Collections.sort(listValue_) ;
for(String value : listValue_) {
opts.add(new SelectItemOption<String>(value, value)) ;
}
}
public void setPropertyResult(Property property) throws Exception {
if(property.getDefinition().isMultiple()) {
Value[] values = property.getValues() ;
for(Value value : values) {
if(!listValue_.contains(value.getString())) listValue_.add(value.getString()) ;
}
} else {
Value value = property.getValue() ;
if(!listValue_.contains(value.getString())) listValue_.add(value.getString()) ;
}
}
static public class CancelActionListener extends EventListener<UICompareExactlyForm> {
public void execute(Event<UICompareExactlyForm> event) throws Exception {
UISearchContainer uiSearchContainer = event.getSource().getAncestorOfType(UISearchContainer.class) ;
UIPopupContainer uiPopup = uiSearchContainer.getChild(UIPopupContainer.class) ;
uiPopup.deActivate() ;
event.getRequestContext().addUIComponentToUpdateByAjax(uiPopup) ;
}
}
static public class SelectActionListener extends EventListener<UICompareExactlyForm> {
public void execute(Event<UICompareExactlyForm> event) throws Exception {
UICompareExactlyForm uiForm = event.getSource() ;
String value = uiForm.getUIFormSelectBox(RESULT).getValue();
UIPopupContainer uiPopupAction = uiForm.getAncestorOfType(UIPopupContainer.class);
UISearchContainer uiSearchContainer = uiPopupAction.getParent() ;
UIConstraintsForm uiConstraintsForm =
uiSearchContainer.findFirstComponentOfType(UIConstraintsForm.class) ;
uiConstraintsForm.getUIStringInput(UIConstraintsForm.CONTAIN_EXACTLY).setValue(value) ;
uiPopupAction.deActivate() ;
event.getRequestContext().addUIComponentToUpdateByAjax(uiPopupAction) ;
event.getRequestContext().addUIComponentToUpdateByAjax(uiConstraintsForm) ;
}
}
}