/*
 * 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.wiki.webui.tree ;

import org.exoplatform.webui.application.WebuiRequestContext;
import org.exoplatform.webui.commons.EventUIComponent;
import org.exoplatform.webui.config.annotation.ComponentConfig;
import org.exoplatform.webui.config.annotation.EventConfig;
import org.exoplatform.webui.core.UIComponent;
import org.exoplatform.webui.core.UIContainer;
import org.exoplatform.webui.core.UIPortletApplication;
import org.exoplatform.webui.core.lifecycle.Lifecycle;
import org.exoplatform.webui.event.Event;
import org.exoplatform.webui.event.EventListener;
import org.exoplatform.wiki.commons.Utils;

@ComponentConfig(
                 lifecycle = Lifecycle.class, 
                 template = "app:/templates/wiki/webui/tree/UITreeExplorer.gtmpl",
                 events = {
                     @EventConfig(listeners = UITreeExplorer.SelectNodeActionListener.class)
                     }
)
public class UITreeExplorer extends UIContainer {
  
  final static public String SELECT_NODE = "SelectNode";

  private String             initParam;

  private String             initURL;

  private String             childrenURL;

  private EventUIComponent   eventComponent;
  
  private boolean            isRenderLink;
    
  public UITreeExplorer() {
    super();
  }

  public void init(String initURL,
                   String childrenURL,
                   String initParam,
                   EventUIComponent eventComponent,
                   boolean isRenderLink) throws Exception {
    this.initURL = initURL;
    this.childrenURL = childrenURL;
    this.initParam = initParam;
    this.eventComponent = eventComponent;
    this.isRenderLink = isRenderLink;
  }

  public String getInitURL() {
    return initURL;
  }

  public void setInitURL(String initURL) {
    this.initURL = initURL;
  }
   
  public String getChildrenURL() {
    return childrenURL;
  }

  public void setChildrenURL(String childrenURL) {
    this.childrenURL = childrenURL;
  }

  public String getInitParam() {
    return initParam;
  }

  public void setInitParam(String initParam) {
    this.initParam = initParam;
  }

  public EventUIComponent getEventComponent() {
    return eventComponent;
  }

  public void setEventComponent(EventUIComponent eventComponent) {
    this.eventComponent = eventComponent;
  }
  
  public boolean isRenderLink() {
    return isRenderLink;
  }

  public String getBaseLink() throws Exception {
    return Utils.getPageLink();
  }

  static public class SelectNodeActionListener extends EventListener<UITreeExplorer> {
    public void execute(Event<UITreeExplorer> event) throws Exception {

      WebuiRequestContext context = event.getRequestContext();
      UITreeExplorer tree = event.getSource();
      UIPortletApplication root = tree.getAncestorOfType(UIPortletApplication.class);
      EventUIComponent eventComponent = tree.getEventComponent();
      UIComponent uiComponent = null;
      if (eventComponent.getId() != null) {
        uiComponent = (UIComponent) root.findComponentById(eventComponent.getId());
      } else {
        uiComponent = root;
      }
      String eventName = eventComponent.getEventName();
      Event<UIComponent> xEvent = uiComponent.createEvent(eventName, Event.Phase.PROCESS, context);
      if (xEvent != null) {
        xEvent.broadcast();
      }
    }
  }
  
}
