Package org.richfaces.renderkit

Source Code of org.richfaces.renderkit.DraggableRendererContributor$DraggableOptions

/**
* License Agreement.
*
*  JBoss RichFaces - Ajax4jsf Component Library
*
* Copyright (C) 2007  Exadel, Inc.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License version 2.1 as published by the Free Software Foundation.
*
* 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.
*
* 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA
*/

package org.richfaces.renderkit;

import java.util.HashMap;
import java.util.Map;

import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;

import org.ajax4jsf.javascript.DnDScript;
import org.ajax4jsf.javascript.PrototypeScript;
import org.ajax4jsf.renderkit.AjaxRendererUtils;
import org.ajax4jsf.renderkit.RendererUtils;
import org.richfaces.component.Draggable;
import org.richfaces.component.Dropzone;
import org.richfaces.event.DnDEvent;
import org.richfaces.event.DragEvent;
import org.richfaces.renderkit.DnDEventsExchangeMailer.EventCallback;

/**
* @author shura
*
*/
public class DraggableRendererContributor implements RendererContributor {
 
  public final static String DRAG_SOURCE_ID = "dragSourceId";
 
  private static final EventCallback dragEventsCallback = new EventCallback() {

    void processEvent(DnDEvent dndEvent, UIComponent source,
        FacesContext facesContext, Object type, Object value) {

      DragEvent dragEvent = (DragEvent) dndEvent;
      dragEvent.setDropTarget((Dropzone) source);
      dragEvent.setDropValue(value);
      dragEvent.setAcceptedTypes(type);
    }
  };

  private static DraggableRendererContributor instance;

  private DraggableRendererContributor() {
    super();
  }

  public static synchronized RendererContributor getInstance() {
    if (instance == null) {
      instance = new DraggableRendererContributor();
    }
   
    return instance;
  }
  public class DraggableOptions extends ScriptOptions {

    public DraggableOptions(Draggable draggable) {
      //TODO by nick - change this cast
      super((UIComponent) draggable);
      addOption("dragType", draggable.getDragType());
     
      String grab = draggable.getGrabCursors();
      if (!grab.equals("")) {
        addOption("grab", grab);
     
     
      String grabbing = draggable.getGrabbingCursors();
      if (!grabbing.equals("")) {
        addOption("grabbing",grabbing);
      }
     
      addEventHandler("ondragstart", draggable.getOndragstart());
      addEventHandler("ondragend", draggable.getOndragend());
      addEventHandler("ondropover",draggable.getOndropover());
      addEventHandler("ondropout",draggable.getOndropout());
    }
   
  }
 
  public void decode(FacesContext context, UIComponent component, CompositeRenderer compositeRenderer) {
    DnDEventsExchangeMailer eventsExchanger = DnDEventsExchangeMailer.getInstance(context);
    String clientId = component.getClientId(context);
    Map paramMap = context.getExternalContext().getRequestParameterMap();

    if(clientId.equals(paramMap.get(DRAG_SOURCE_ID))){
      String dropTargetId = (String) paramMap.get(DropzoneRendererContributor.DROP_TARGET_ID);
     
      if (compositeRenderer != null) {
        compositeRenderer.contributorDecodeCallback(component, context, this, dropTargetId);
      }

      Draggable draggable = (Draggable) component;
     
      eventsExchanger.mailEvent(dropTargetId, component,
          context, new DragEvent(component), dragEventsCallback, draggable.getDragType(),
          draggable.getDragValue(), true);
    }
  } 
 
  public String[] getStyleDependencies() {
    return new String[] {
      "/org/richfaces/renderkit/html/css/dragIndicator.xcss"
    };
  }
 
  public String[] getScriptDependencies() {
    return new String[] {
        PrototypeScript.class.getName(),
        "/org/richfaces/renderkit/html/scripts/json/json-mini.js",
        DnDScript.class.getName(),
        "/org/richfaces/renderkit/html/scripts/utils.js",
        "/org/richfaces/renderkit/html/scripts/json/json-dom.js",
        "/org/richfaces/renderkit/html/scripts/dnd/dnd-common.js",
        "/org/richfaces/renderkit/html/scripts/dnd/dnd-draggable.js"
      };
  }
 
  public ScriptOptions buildOptions(FacesContext context, UIComponent component) {
    if (component instanceof Draggable) {
      Draggable draggable = (Draggable) component;
     
      DraggableOptions options =  new DraggableOptions(draggable);

      Map eventOptions = AjaxRendererUtils.buildEventOptions(context, component);
      Map parameters = (Map) eventOptions.get("parameters");

      if (parameters == null) {
        parameters = new HashMap();
      }
     
      String clientId = component.getClientId(context);
     
      parameters.put(DRAG_SOURCE_ID, clientId);
     
      options.addOption("parameters", parameters);
     
      String indicatorId = draggable.getResolvedDragIndicator(context);
      if (indicatorId == null) {
        String simpleId = draggable.getDragIndicator();
        if (simpleId != null) {
          UIComponent indicator = RendererUtils.getInstance().findComponentFor(component, simpleId);
          if (indicator != null) {
            indicatorId = indicator.getClientId(context);
          }
        }
      }
     
      if (indicatorId != null) {
        options.addOption("dragIndicator", indicatorId);
      }
     
      return options;
    }

    return null;
  }
 
  public String getScriptContribution(FacesContext context,
      UIComponent component) {
    // TODO Auto-generated method stub
    return null;
  }

  public Class getAcceptableClass() {
    return Draggable.class;
  }

}
TOP

Related Classes of org.richfaces.renderkit.DraggableRendererContributor$DraggableOptions

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.