/*******************************************************************************
 * Copyright (c) 2007 Exadel, Inc. and Red Hat, Inc.
 * Distributed under license by Red Hat, Inc. All rights reserved.
 * This program is made available under the terms of the
 * Eclipse Public License v1.0 which accompanies this distribution,
 * and is available at http://www.eclipse.org/legal/epl-v10.html
 *
 * Contributors:
 *     Exadel, Inc. and Red Hat, Inc. - initial API and implementation
 ******************************************************************************/ 
package org.jboss.tools.jsf.vpe.richfaces.template;

import org.jboss.tools.jsf.vpe.richfaces.ComponentUtil;
import org.jboss.tools.vpe.editor.context.VpePageContext;
import org.jboss.tools.vpe.editor.template.VpeAbstractTemplate;
import org.jboss.tools.vpe.editor.template.VpeCreationData;
import org.jboss.tools.vpe.editor.util.HTML;
import org.mozilla.interfaces.nsIDOMDocument;
import org.mozilla.interfaces.nsIDOMElement;
import org.w3c.dom.Element;
import org.w3c.dom.Node;

/**
 * Displays template for gmap
 * 
 * @author Max Areshkau
 * 
 */
public class RichFacesGMapTemplate extends VpeAbstractTemplate {

	private static final String ALL_CONTROLS_IMG = "gmap/allControls.png"; //$NON-NLS-1$
	private static final String NO_CONTROLS_IMG = "gmap/noControls.png"; //$NON-NLS-1$
	private static final String LARGE_IMG = "gmap/large.png"; //$NON-NLS-1$
	private static final String SCALE_IMG = "gmap/scale.png"; //$NON-NLS-1$
	private static final String TYPE_IMG = "gmap/type.png"; //$NON-NLS-1$
	private static final String LARGE_SCALE_IMG = "gmap/large-scale.png"; //$NON-NLS-1$
	private static final String LARGE_TYPE_IMG = "gmap/large-type.png"; //$NON-NLS-1$
	private static final String TYPE_SCALE_IMG = "gmap/type-scale.png"; //$NON-NLS-1$
	
	private static final String SHOW_LARGE_MAP = "showGLargeMapControl"; //$NON-NLS-1$
	private static final String SHOW_MAP_TYPE = "showGMapTypeControl"; //$NON-NLS-1$
	private static final String SHOW_SCALE = "showGScaleControl"; //$NON-NLS-1$
	private static final String TRUE = "true"; //$NON-NLS-1$
	
	/**
	 * Create html instead of rich:faces component.
	 * 
	 * @param pageContext
	 *            Contains the information on edited page.
	 * @param sourceNode
	 *            The current node of the source tree.
	 * @param visualDocument
	 *            The document of the visual tree.
	 * @return The information on the created node of the visual tree.
	 */
	public VpeCreationData create(VpePageContext pageContext, Node sourceNode, nsIDOMDocument visualDocument) {
		
		Element sourceElement = (Element) sourceNode; 
		
		/*
		 * Value indicating enabled controls combinations:
		 * 
		 * 0 - no controls are available.
		 * 1 - map type control is enabled.
		 * 2 - large map control is enabled.
		 * 4 - scale control is enabled.
		 * 3 - map type and large map controls are enabled.
		 * 5 - map type and scale controls are enabled.
		 * 6 - large map and scale controls are enabled.
		 * 7 - all controls are enabled.
		 */
		int controls = 0;
		
		String showGLargeMapControl = sourceElement.getAttribute(SHOW_LARGE_MAP);
		String showGMapTypeControl = sourceElement.getAttribute(SHOW_MAP_TYPE);
		String showGScaleControl = sourceElement.getAttribute(SHOW_SCALE);
		String style = sourceElement.getAttribute(HTML.ATTR_STYLE);
		String styleClass = sourceElement.getAttribute(RichFaces.ATTR_STYLE_CLASS);
		
		nsIDOMElement mapImg = visualDocument.createElement(HTML.TAG_IMG);
		
		if (TRUE.equalsIgnoreCase(showGMapTypeControl)) {
			controls += 1;
		}
		if (TRUE.equalsIgnoreCase(showGLargeMapControl)) {
			controls += 2;
		}
		if (TRUE.equalsIgnoreCase(showGScaleControl)) {
			controls += 4;
		}
		
		switch (controls) {
		case 0:
			ComponentUtil.setImg(mapImg, NO_CONTROLS_IMG);
			break;
		case 1:
			ComponentUtil.setImg(mapImg, TYPE_IMG);
			break;
		case 2:
			ComponentUtil.setImg(mapImg, LARGE_IMG);
			break;
		case 4:
			ComponentUtil.setImg(mapImg, SCALE_IMG);
			break;
		case 3:
			ComponentUtil.setImg(mapImg, LARGE_TYPE_IMG);
			break;
		case 5:
			ComponentUtil.setImg(mapImg, TYPE_SCALE_IMG);
			break;
		case 6:
			ComponentUtil.setImg(mapImg, LARGE_SCALE_IMG);
			break;
		case 7:
			ComponentUtil.setImg(mapImg, ALL_CONTROLS_IMG);
			break;
		default:
			ComponentUtil.setImg(mapImg, NO_CONTROLS_IMG);
		}
		
		mapImg.setAttribute(HTML.ATTR_CLASS, styleClass);
		mapImg.setAttribute(HTML.ATTR_STYLE, style);
		
		VpeCreationData creationData = new VpeCreationData(mapImg);
		return creationData;
	}
}