--- /dev/null
+/*
+ * $Id: TableElementCellModifier.java,v 1.3 2006-10-21 23:18:43 pombredanne Exp $
+ * Copyright Narushima Hironori. All rights reserved.
+ */
+package net.sourceforge.phpeclipse.wizards.html;
+
+import javax.xml.parsers.DocumentBuilderFactory;
+
+import org.eclipse.jface.util.IPropertyChangeListener;
+import org.eclipse.jface.util.PropertyChangeEvent;
+import org.eclipse.jface.viewers.ICellModifier;
+import org.eclipse.swt.widgets.Item;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+import org.w3c.dom.Text;
+
+/**
+ *
+ */
+public class TableElementCellModifier implements ICellModifier {
+
+ DocumentBuilderFactory builderFactory;
+
+ IPropertyChangeListener listener;
+
+ public TableElementCellModifier(IPropertyChangeListener listener) {
+ builderFactory = DocumentBuilderFactory.newInstance();
+ this.listener = listener;
+ }
+
+ public boolean canModify(Object element, String property) {
+ return getValue(element, property) != null;
+ }
+
+ public Object getValue(Object trElem, String property) {
+ if (trElem instanceof Element) {
+ Element e = (Element) trElem;
+ if (e.getNodeName().equals("tr")) {
+ int v = TableElementModel.toNumeric(property);
+ Element[] cells = TableElementModel.chooseCellElements(e);
+ if (v >= 0 && v < cells.length) {
+ NodeList nodes = cells[v].getChildNodes();
+ if (nodes.getLength() == 1) {
+ Node n = nodes.item(0);
+ if (n instanceof Text) {
+ return n.getNodeValue();
+ }
+ }
+ }
+ }
+ }
+ return null;
+ }
+
+ public void modify(Object element, String property, Object value) {
+ if (element instanceof Item) {
+ element = ((Item) element).getData();
+ }
+ Element trElem = (Element) element;
+ int index = TableElementModel.toNumeric(property);
+ Element cellElem = TableElementModel.chooseCellElements(trElem)[index];
+
+ NodeList nodes = cellElem.getChildNodes();
+ for (int i = 0; i < nodes.getLength(); i++) {
+ cellElem.removeChild(nodes.item(i));
+ }
+ Document doc = cellElem.getOwnerDocument();
+
+ if (value instanceof String) {
+ cellElem.appendChild(doc.createTextNode((String) value));
+ }
+ // notify listener
+ if (listener != null) {
+ String oldValue = nodes.item(0).getNodeValue();
+ listener.propertyChange(new PropertyChangeEvent(this, property,
+ (String) value, oldValue));
+ }
+ }
+
+}