/*******************************************************************************
* Copyright (c) 2007-2010 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
*
* Contributor:
* Red Hat, Inc. - initial API and implementation
******************************************************************************/
package org.jboss.tools.jsf.vpe.jbpm.template;
import java.util.ArrayList;
import java.util.List;
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.mozilla.interfaces.nsIDOMNode;
import org.mozilla.interfaces.nsIDOMNodeList;
import org.w3c.dom.Node;
/**
*
* @author yzhishko
*
*/
public class JBPMDataCell extends VpeAbstractTemplate {
private static final String JBPM_CELL_HEADER_TYPE = "vpe-jbpm-cell-header"; //$NON-NLS-1$
public VpeCreationData create(VpePageContext pageContext, Node sourceNode,
nsIDOMDocument visualDocument) {
return new VpeCreationData(visualDocument.createElement(HTML.TAG_TR));
}
@Override
public void validate(VpePageContext pageContext, Node sourceNode,
nsIDOMDocument visualDocument, VpeCreationData data) {
nsIDOMElement trElement = (nsIDOMElement) data.getNode()
.queryInterface(nsIDOMElement.NS_IDOMELEMENT_IID);
nsIDOMElement cellHeader = getCellHeader(trElement);
if (cellHeader != null) {
trElement.removeChild(cellHeader);
}
nsIDOMNodeList children = trElement.getChildNodes();
List<nsIDOMNode> childNodeList = new ArrayList<nsIDOMNode>(0);
for (int i = 0; i < children.getLength(); i++) {
childNodeList.add(children.item(i));
}
while (trElement.hasChildNodes()) {
trElement.removeChild(trElement.getFirstChild());
}
nsIDOMElement secondColumn = visualDocument.createElement(HTML.TAG_TD);
secondColumn.setAttribute(HTML.ATTR_STYLE, computeColumnStyleValue());
if (cellHeader != null) {
trElement.appendChild(cellHeader);
}
trElement.appendChild(secondColumn);
for (nsIDOMNode nsIDOMNode : childNodeList) {
secondColumn.appendChild(nsIDOMNode);
}
}
private nsIDOMElement getCellHeader(nsIDOMElement trElement) {
nsIDOMNodeList headsList = trElement.getElementsByTagName(HTML.TAG_TH);
if (headsList == null) {
return null;
}
for (int i = 0; i < headsList.getLength(); i++) {
nsIDOMElement element = (nsIDOMElement) headsList.item(i)
.queryInterface(nsIDOMElement.NS_IDOMELEMENT_IID);
if (JBPM_CELL_HEADER_TYPE.equals(element
.getAttribute("vpe-pseudo-type"))) { //$NON-NLS-1$
return element;
}
}
return null;
}
private String computeColumnStyleValue() {
StringBuilder builder = new StringBuilder(""); //$NON-NLS-1$
builder.append("background:none repeat scroll 0 0 #DDDDDD;"); //$NON-NLS-1$
builder.append("border-bottom:1px solid #000000;"); //$NON-NLS-1$
builder.append("border-collapse:collapse;"); //$NON-NLS-1$
builder.append("color:#000000;"); //$NON-NLS-1$
builder.append("font-size:11px;"); //$NON-NLS-1$
builder.append("text-align:left;"); //$NON-NLS-1$
builder.append("text-decoration:none;"); //$NON-NLS-1$
builder.append("white-space:nowrap;"); //$NON-NLS-1$
builder.append("width:260px;"); //$NON-NLS-1$
builder.append("padding:3px 5px;"); //$NON-NLS-1$
builder.append("margin:0"); //$NON-NLS-1$
return builder.toString();
}
}