blob: 884af1f35d6100eb42bc1da128b927523df4122d [file] [log] [blame]
/**************************************************************
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
*************************************************************/
package org.openoffice.xmerge.converter.xml.sxc;
import org.w3c.dom.Node;
import org.w3c.dom.Element;
import org.w3c.dom.NamedNodeMap;
import org.openoffice.xmerge.converter.xml.OfficeConstants;
import org.openoffice.xmerge.util.Debug;
import org.openoffice.xmerge.util.XmlUtil;
/**
* This is a class to define a Name Definition structure. This can then be
* used by plugins to write or read their own definition types.
*
* @author Martin Maher
*/
public class NameDefinition implements OfficeConstants {
private String name; // name which identifies the definition
private String definition; // the definition itself
private String baseCellAddress; // the basecelladdress
private boolean rangeType = false; // true if definition of type range
private boolean expressionType = false; // true if definition of type expression
/**
* Default Constructor for a <code>NameDefinition</code>
*
*/
public NameDefinition() {
}
/**
* Constructor that takes a <code>Node</code> to build a
* <code>NameDefinition</code>
*
* @param root XML Node to read from
*/
public NameDefinition(Node root) {
readNode(root);
}
/**
* Default Constructor for a <code>NameDefinition</code>
*
*/
public NameDefinition(String name, String definition, String
baseCellAddress, boolean rangeType, boolean expressionType ) {
this.name = name;
this.definition = definition;
this.baseCellAddress = baseCellAddress;
this.rangeType = rangeType;
this.expressionType = expressionType;
}
/**
* returns Name of the definition
*
* @return the name which identifies the definition
*/
public String getName() {
return name;
}
/**
* sets the definition
*
* @param newDefinition sets the definition
*/
public void setDefinition(String newDefinition) {
definition = newDefinition;
}
/**
* Returns the definition itself
*
* @return the definition
*/
public String getDefinition() {
return definition;
}
/**
* Returns the base Cell address
*
* @return the base cell address
*/
public String getBaseCellAddress() {
return baseCellAddress;
}
/**
* Tests if definition is of type expression
*
* @return whether or not this name definition is of type expression
*/
public boolean isExpressionType() {
return expressionType;
}
/**
* Tests if definition is of type range
*
* @return whether or not this name definition is of type range
*/
public boolean isRangeType() {
return rangeType;
}
/**
* Writes out a content.xml entry for this NameDefinition object
*
* @param settings a <code>Document</code> object representing the settings.xml
* @param root the root xml node to add to
*/
public void writeNode(org.w3c.dom.Document doc, Node root) {
if(isRangeType()) {
Debug.log(Debug.TRACE, "Found Range Name : " + getName());
Element namedRangeElement = (Element) doc.createElement(TAG_TABLE_NAMED_RANGE);
namedRangeElement.setAttribute(ATTRIBUTE_TABLE_NAME, getName());
namedRangeElement.setAttribute(ATTRIBUTE_TABLE_BASE_CELL_ADDRESS, getBaseCellAddress());
namedRangeElement.setAttribute(ATTRIBUTE_TABLE_CELL_RANGE_ADDRESS, getDefinition());
root.appendChild(namedRangeElement);
} else if (isExpressionType()) {
Debug.log(Debug.TRACE, "Found Expression Name : " + getName());
Element namedExpressionElement = (Element) doc.createElement(TAG_TABLE_NAMED_EXPRESSION);
namedExpressionElement.setAttribute(ATTRIBUTE_TABLE_NAME, getName());
namedExpressionElement.setAttribute(ATTRIBUTE_TABLE_BASE_CELL_ADDRESS,getBaseCellAddress());
namedExpressionElement.setAttribute(ATTRIBUTE_TABLE_EXPRESSION, getDefinition());
root.appendChild(namedExpressionElement);
} else {
Debug.log(Debug.TRACE, "Unknown Name Definition : " + getName());
}
}
/**
* Reads document settings from xml and inits Settings variables
*
* @param root XML Node to read from
*/
public void readNode(Node root) {
String nodeName = root.getNodeName();
NamedNodeMap cellAtt = root.getAttributes();
if (nodeName.equals(TAG_TABLE_NAMED_RANGE)) {
Node tableNameNode =
cellAtt.getNamedItem(ATTRIBUTE_TABLE_NAME);
Node tableBaseCellAddress =
cellAtt.getNamedItem(ATTRIBUTE_TABLE_BASE_CELL_ADDRESS);
Node tableCellRangeAddress =
cellAtt.getNamedItem(ATTRIBUTE_TABLE_CELL_RANGE_ADDRESS);
Debug.log(Debug.TRACE,"Named-range : " + tableNameNode.getNodeValue());
// Create a named-range name definition
name = tableNameNode.getNodeValue();
definition = tableCellRangeAddress.getNodeValue();
baseCellAddress = tableBaseCellAddress.getNodeValue();
expressionType = true;
rangeType = false;
} else if (nodeName.equals(TAG_TABLE_NAMED_EXPRESSION)) {
Node tableNameNode =
cellAtt.getNamedItem(ATTRIBUTE_TABLE_NAME);
Node tableBaseCellAddress =
cellAtt.getNamedItem(ATTRIBUTE_TABLE_BASE_CELL_ADDRESS);
Node tableExpression=
cellAtt.getNamedItem(ATTRIBUTE_TABLE_EXPRESSION);
Debug.log(Debug.TRACE,"Named-expression: " + tableNameNode.getNodeValue());
// Create a named-range name definition
name = tableNameNode.getNodeValue();
definition = tableExpression.getNodeValue();
baseCellAddress = tableBaseCellAddress.getNodeValue();
expressionType = false;
rangeType = true;
} else {
Debug.log(Debug.TRACE, "<OTHERS " + XmlUtil.getNodeInfo(root) + " />");
}
}
}