/*******************************************************************************
* 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.ajax4jsf.template;
import java.io.File;
import java.util.Arrays;
import java.util.List;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.Path;
import org.jboss.tools.jsf.vpe.ajax4jsf.Activator;
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.jboss.tools.vpe.editor.util.VisualDomUtil;
import org.mozilla.interfaces.nsIDOMDocument;
import org.mozilla.interfaces.nsIDOMElement;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
/**
* The template for {@code <a4j:mediaOutput>} tag.
*
* @author dmaliarevich
* @author dsakovich
* @author yradtsevich
*/
public class Ajax4JSFMediaOutput extends VpeAbstractTemplate {
private static final String IMG_PATH = "mediaOutput/mediaOutput.jpg"; //$NON-NLS-1$
private static final List<String> SAME_ATTRIBUTES_LIST;
static {
String []sameAttributes = {HTML.ATTR_ALIGN, HTML.ATTR_BORDER, HTML.ATTR_DIR,
HTML.ATTR_HSPACE, HTML.ATTR_ID, HTML.ATTR_STYLE, HTML.ATTR_VSPACE};
for (int i = 0; i < sameAttributes.length; i++) {
sameAttributes[i] = sameAttributes[i].toLowerCase();
}
SAME_ATTRIBUTES_LIST = Arrays.asList(sameAttributes);
}
public VpeCreationData create(VpePageContext pageContext, Node sourceNode,
nsIDOMDocument visualDocument) {
Element sourceElement = (Element) sourceNode;
nsIDOMElement mainTag = createMainTag(visualDocument, sourceElement);
String uriAttribute = sourceElement.hasAttribute(Ajax4JSF.ATTR_URI_ATTRIBUTE) ?
sourceElement.getAttribute(Ajax4JSF.ATTR_URI_ATTRIBUTE) : HTML.ATTR_SRC;
mainTag.setAttribute(uriAttribute, "file:///" + getAbsoluteResourcePath(IMG_PATH).replace('\\', '/')); //$NON-NLS-1$
VisualDomUtil.copyAttributes(sourceElement, mainTag, SAME_ATTRIBUTES_LIST);
if (sourceElement.hasAttribute(Ajax4JSF.ATTR_STYLE_CLASS)) {
String styleClass = sourceElement.getAttribute(Ajax4JSF.ATTR_STYLE_CLASS);
mainTag.setAttribute(HTML.ATTR_CLASS, styleClass);
}
return new VpeCreationData(mainTag);
}
public static String getAbsoluteResourcePath(String resourcePathInPlugin) {
String pluginPath = Activator.getPluginResourcePath();
IPath pluginFile = new Path(pluginPath);
File file = pluginFile.append(resourcePathInPlugin).toFile();
if (file.exists()) {
return file.getAbsolutePath();
} else {
throw new RuntimeException("Can't get path for " + resourcePathInPlugin); //$NON-NLS-1$
}
}
/**
* Creates HTML element with tag-name specified in {@code element} attribute of
* {@code sourceElement}, or if the attribute is not present {@code 'img'} is used.
*/
private static nsIDOMElement createMainTag(nsIDOMDocument visualDocument,
Element sourceElement) {
String element = sourceElement.hasAttribute(Ajax4JSF.ATTR_ELEMENT) ?
sourceElement.getAttribute(Ajax4JSF.ATTR_ELEMENT) : HTML.TAG_IMG;
nsIDOMElement mainTag = visualDocument.createElement(element);
return mainTag;
}
}