/*
- * $Id: TableElementModel.java,v 1.1 2004-10-05 20:51:57 jsurfer Exp $
+ * $Id: TableElementModel.java,v 1.2 2006-10-21 23:18:43 pombredanne Exp $
* Copyright Narushima Hironori. All rights reserved.
*/
package net.sourceforge.phpeclipse.wizards.html;
final static char[] CHAR_TABLE = "ABCDEFGHIJKLMNOPQRSTUVWXYZ".toCharArray();
StringDivider stringDivider = new StringDivider();
-
+
ElementWriter writer;
DocumentBuilder docBuilder;
+
Document document;
+
Element tableElement;
+
String[] columnProperties;
- public TableElementModel(String content, boolean parse) throws FactoryConfigurationError, ParserConfigurationException, SAXException, IOException{
+ public TableElementModel(String content, boolean parse)
+ throws FactoryConfigurationError, ParserConfigurationException,
+ SAXException, IOException {
docBuilder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
- if(parse){
+ if (parse) {
initAsParse(content);
- }else{
+ } else {
initModel(content);
}
columnProperties = createColumnProperties();
-
+
// create elementWriter
writer = new ElementWriter(0, null);
- writer.setExpandOption("caption", ElementWriter.END_CHANGELINE );
- writer.setExpandOption("table", ElementWriter.BEGIN_CHANGELINE | ElementWriter.END_CHANGELINE);
- writer.setExpandOption("thead", ElementWriter.BEGIN_CHANGELINE | ElementWriter.END_CHANGELINE);
- writer.setExpandOption("tfoot", ElementWriter.BEGIN_CHANGELINE | ElementWriter.END_CHANGELINE);
- writer.setExpandOption("tbody", ElementWriter.BEGIN_CHANGELINE | ElementWriter.END_CHANGELINE);
+ writer.setExpandOption("caption", ElementWriter.END_CHANGELINE);
+ writer.setExpandOption("table", ElementWriter.BEGIN_CHANGELINE
+ | ElementWriter.END_CHANGELINE);
+ writer.setExpandOption("thead", ElementWriter.BEGIN_CHANGELINE
+ | ElementWriter.END_CHANGELINE);
+ writer.setExpandOption("tfoot", ElementWriter.BEGIN_CHANGELINE
+ | ElementWriter.END_CHANGELINE);
+ writer.setExpandOption("tbody", ElementWriter.BEGIN_CHANGELINE
+ | ElementWriter.END_CHANGELINE);
writer.setExpandOption("tr", ElementWriter.END_CHANGELINE);
}
-
- void initModel(String content) throws ParserConfigurationException, SAXException, IOException {
+
+ void initModel(String content) throws ParserConfigurationException,
+ SAXException, IOException {
StringReader strReader = new StringReader(content);
InputSource inputSrc = new InputSource(strReader);
-
+
document = docBuilder.parse(inputSrc);
tableElement = document.getDocumentElement();
-
+
Element[] rows = getRows();
for (int i = 0; i < rows.length; i++) {
Element[] cells = chooseCellElements(rows[i]);
for (int j = 0; j < cells.length; j++) {
Element cell = cells[j];
- if( !cell.hasChildNodes() ){
+ if (!cell.hasChildNodes()) {
cell.appendChild(document.createTextNode(""));
}
}
}
}
- public void initAsParse(String content) throws ParserConfigurationException, FactoryConfigurationError {
+ public void initAsParse(String content)
+ throws ParserConfigurationException, FactoryConfigurationError {
// create new table model.
document = docBuilder.newDocument();
tableElement = document.createElement("table");
-
+
String[][] cells = stringDivider.divide(content);
- if(cells.length > 0){
+ if (cells.length > 0) {
for (int i = 0; i < cells.length; i++) {
String[] rows = cells[i];
Element tr = document.createElement("tr");
}
tableElement.appendChild(tr);
}
-
+
setColumnCount(cells[0].length);
- }else{
+ } else {
Element tr = document.createElement("tr");
Element td = document.createElement("td");
td.appendChild(document.createTextNode(""));
tr.appendChild(td);
tableElement.appendChild(tr);
-
+
setColumnCount(1);
}
}
- String[] createColumnProperties(){
+ String[] createColumnProperties() {
int len = getColumnCount();
String[] props = new String[len];
- for(int i=0; i<len; i++){
+ for (int i = 0; i < len; i++) {
props[i] = toColumnName(i);
}
return props;
}
- public void setRowCount(int rowCount){
+ public void setRowCount(int rowCount) {
Element[] rows = getRows();
- if(rowCount > rows.length){
- for(int i=rows.length; i<rowCount; i++){
- tableElement.appendChild( createRowElement());
+ if (rowCount > rows.length) {
+ for (int i = rows.length; i < rowCount; i++) {
+ tableElement.appendChild(createRowElement());
}
- }else if(rowCount < rows.length){
- for(int i=rowCount; i<rows.length; i++){
+ } else if (rowCount < rows.length) {
+ for (int i = rowCount; i < rows.length; i++) {
tableElement.removeChild(rows[i]);
}
}
}
-
- public Element[] getRows(){
+
+ public Element[] getRows() {
ArrayList rows = new ArrayList();
NodeList nodes = tableElement.getElementsByTagName("tr");
- for(int i=0; i<nodes.getLength(); i++){
- rows.add( nodes.item(i) );
+ for (int i = 0; i < nodes.getLength(); i++) {
+ rows.add(nodes.item(i));
}
- return (Element[])rows.toArray(new Element[rows.size()]);
+ return (Element[]) rows.toArray(new Element[rows.size()]);
}
-
- public int getRowCount(){
+
+ public int getRowCount() {
return getRows().length;
}
-
- Element createRowElement(){
+
+ Element createRowElement() {
Element tr = document.createElement("tr");
- for(int i=0, columnCount = getColumnCount(); i<columnCount; i++){
+ for (int i = 0, columnCount = getColumnCount(); i < columnCount; i++) {
Element td = document.createElement("td");
td.appendChild(document.createTextNode(""));
tr.appendChild(td);
}
return tr;
}
-
- public void setColumnCount(int newLength){
+
+ public void setColumnCount(int newLength) {
NodeList trs = tableElement.getElementsByTagName("tr");
- for(int i=0; i<trs.getLength(); i++){
- Element tr = (Element)trs.item(i);
+ for (int i = 0; i < trs.getLength(); i++) {
+ Element tr = (Element) trs.item(i);
Element[] cells = chooseCellElements(tr);
int colLen = cells.length;
-
- if( newLength > colLen ){
- for(int j=0, len = newLength - colLen; j<len; j++){
+
+ if (newLength > colLen) {
+ for (int j = 0, len = newLength - colLen; j < len; j++) {
Element cell = document.createElement("td");
cell.appendChild(document.createTextNode(""));
tr.appendChild(cell);
}
- }else if( newLength < colLen ){
- for(int j=newLength; j<colLen; j++){
- tr.removeChild( cells[j]);
+ } else if (newLength < colLen) {
+ for (int j = newLength; j < colLen; j++) {
+ tr.removeChild(cells[j]);
}
}
}
columnProperties = createColumnProperties();
}
-
- public int getColumnCount(){
+
+ public int getColumnCount() {
NodeList trs = tableElement.getElementsByTagName("tr");
- if( trs.getLength() > 0){
- Element tr = (Element)trs.item(0);
+ if (trs.getLength() > 0) {
+ Element tr = (Element) trs.item(0);
return chooseCellElements(tr).length;
- }else{
+ } else {
return 0;
}
}
-
- public static Element[] chooseCellElements(Element tr){
+
+ public static Element[] chooseCellElements(Element tr) {
NodeList nodeList = tr.getChildNodes();
-
+
ArrayList result = new ArrayList();
- for(int i=0; i<nodeList.getLength(); i++){
+ for (int i = 0; i < nodeList.getLength(); i++) {
Node node = nodeList.item(i);
- if(node instanceof Element){
+ if (node instanceof Element) {
String nodeName = node.getNodeName();
- if(nodeName.equals("td") || nodeName.equals("th") ){
+ if (nodeName.equals("td") || nodeName.equals("th")) {
result.add(node);
}
}
}
-
- return (Element[])result.toArray(new Element[result.size()]);
+
+ return (Element[]) result.toArray(new Element[result.size()]);
}
- public String expandCodes(){
+ public String expandCodes() {
return writer.expandTag(tableElement);
}
-
- public static String toColumnName(int i){
+ public static String toColumnName(int i) {
StringBuffer buff = new StringBuffer();
int u = i / CHAR_TABLE.length;
- if( u > 0){
- buff.append(CHAR_TABLE[u-1]);
+ if (u > 0) {
+ buff.append(CHAR_TABLE[u - 1]);
}
- buff.append( CHAR_TABLE[i % CHAR_TABLE.length] );
+ buff.append(CHAR_TABLE[i % CHAR_TABLE.length]);
return buff.toString();
}
-
+
/**
* Return index of char map. If can not parse values return -1.
- */
- public static int toNumeric(String code){
+ */
+ public static int toNumeric(String code) {
int result = -1;
- for(int i=0; i<code.length(); i++){
+ for (int i = 0; i < code.length(); i++) {
char c = code.charAt(i);
int match = Arrays.binarySearch(CHAR_TABLE, c);
- if( match >= 0){
- if(result == -1){
+ if (match >= 0) {
+ if (result == -1) {
result = 0;
}
int v = match;
- int u = code.length()-1-i;
- if(u>0){
- v = CHAR_TABLE.length * u * (v+1);
+ int u = code.length() - 1 - i;
+ if (u > 0) {
+ v = CHAR_TABLE.length * u * (v + 1);
}
result += v;
}
return result;
}
- public void move(Element tr, int moveCount){
+ public void move(Element tr, int moveCount) {
Element[] rows = getRows();
int index = -1;
- for(int i=0;i<rows.length; i++){
- if(tr.equals(rows[i])){
+ for (int i = 0; i < rows.length; i++) {
+ if (tr.equals(rows[i])) {
index = i;
}
}
- if(index == -1){
- throw new IllegalArgumentException("Invalid row node (not countained in this table):" + tr);
+ if (index == -1) {
+ throw new IllegalArgumentException(
+ "Invalid row node (not countained in this table):" + tr);
}
- if(moveCount > 0){
+ if (moveCount > 0) {
// move down;
- for(int i=index; i<moveCount+index && i<rows.length-1; i++){
- tableElement.insertBefore(rows[i+1], rows[i]);
+ for (int i = index; i < moveCount + index && i < rows.length - 1; i++) {
+ tableElement.insertBefore(rows[i + 1], rows[i]);
}
- }else if(moveCount < 0){
+ } else if (moveCount < 0) {
// move up
- for(int i=index; i>=moveCount+index+1 && i >= 1; i--){
- tableElement.insertBefore(rows[index], rows[i-1]);
+ for (int i = index; i >= moveCount + index + 1 && i >= 1; i--) {
+ tableElement.insertBefore(rows[index], rows[i - 1]);
}
- }else{
+ } else {
return;
}
}
-
- public void insertNewRowBefore(Element tr){
+
+ public void insertNewRowBefore(Element tr) {
Element newRow = createRowElement();
- if( tr == null){
+ if (tr == null) {
tableElement.appendChild(newRow);
- }else{
+ } else {
tableElement.insertBefore(newRow, tr);
}
}
-
- public void removeRow(Element tr){
+
+ public void removeRow(Element tr) {
tableElement.removeChild(tr);
}
public String[] getColumnProperties() {
- return (String[])columnProperties.clone();
+ return (String[]) columnProperties.clone();
}
}