| /************************************************************** |
| * |
| * 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.NamedNodeMap; |
| import org.w3c.dom.NodeList; |
| import org.w3c.dom.Node; |
| import org.w3c.dom.Element; |
| import java.awt.Point; |
| |
| import org.openoffice.xmerge.converter.xml.OfficeConstants; |
| |
| /** |
| * This is a class representing the different attributes for a worksheet |
| * contained in settings.xml. |
| * |
| * @author Martin Maher |
| */ |
| public class SheetSettings implements OfficeConstants { |
| |
| /** A w3c <code>Document</code>. */ |
| private org.w3c.dom.Document settings = null; |
| |
| private String sheetName; |
| private int cursorX = 0; |
| private int cursorY = 0; |
| private int splitTypeX; |
| private int splitTypeY; |
| private int splitPointX = 0; |
| private int splitPointY = 0; |
| private int posLeft = 0; |
| private int posRight = 0; |
| private int posBottom = 0; |
| private int posTop = 0; |
| private int paneNumber = 2; |
| |
| final public static int NONE = 0x00; |
| final public static int SPLIT = 0x01; |
| final public static int FREEZE = 0x02; |
| |
| |
| /** |
| * Default Constructor for a <code>ColumnRowInfo</code> |
| * |
| */ |
| public SheetSettings() { |
| } |
| |
| /** |
| * Constructor that takes a <code>Node</code> to build a <code>SheetSettings</code> |
| * |
| * @param root XML Node to read from |
| */ |
| public SheetSettings(Node root) { |
| readNode(root); |
| } |
| |
| /** |
| * Constructor for a <code>ColumnRowInfo</code> |
| * |
| * @param dimension if it's a row the height, a column the width |
| * @param repeated |
| */ |
| public SheetSettings(String name) { |
| sheetName = name; |
| } |
| |
| /** |
| * sets the position of the acitve cell |
| * |
| * @param activeCell the current curor position |
| */ |
| public void setCursor(Point activeCell) { |
| |
| cursorX = (int) activeCell.getX(); |
| cursorY = (int) activeCell.getY(); |
| } |
| |
| /** |
| * Gets the position of the acitve cell |
| * |
| * @return The position as a <code>Point</code> |
| */ |
| public Point getCursor() { |
| |
| return (new Point(cursorX, cursorY)); |
| } |
| |
| /** |
| * Sets the position of the freeze |
| * |
| * @param splitPoint the point at where the split occurs |
| */ |
| public void setFreeze(Point splitPoint) { |
| |
| splitTypeX = FREEZE; |
| splitTypeY = FREEZE; |
| splitPointX = (int) splitPoint.getX(); |
| splitPointY = (int) splitPoint.getY(); |
| } |
| |
| /** |
| * Sets the position of the split |
| * |
| * @param splitPoint the point at where the split occurs |
| */ |
| public void setSplit(Point splitPoint) { |
| |
| splitTypeX = SPLIT; |
| splitTypeY = SPLIT; |
| splitPointX = (int) splitPoint.getX(); |
| splitPointY = (int) splitPoint.getY(); |
| } |
| |
| /** |
| * sets the position and type of the split |
| * |
| * @return The position as a <code>Point</code> where the split occurs |
| */ |
| public Point getSplit() { |
| |
| return (new Point(splitPointX, splitPointY)); |
| } |
| |
| /** |
| * sets the position and type of the split |
| * |
| * @return The position as a <code>Point</code> where the split occurs |
| */ |
| public Point getSplitType() { |
| |
| return (new Point(splitTypeX, splitTypeY)); |
| } |
| |
| /** |
| * Sets the top row visible in the lower pane and the leftmost column |
| * visibile in the right pane. |
| * |
| * @param top The top row visible in the lower pane |
| * @param left The leftmost column visibile in the right pane |
| */ |
| public void setTopLeft(int top, int left) { |
| |
| posLeft = left; |
| posTop = top; |
| } |
| |
| /** |
| * Gets the the leftmost column visibile in the right pane. |
| * |
| * @return the 0-based index to the column |
| */ |
| public int getLeft() { |
| |
| return posLeft; |
| } |
| /** |
| * Sets the top row visible in the lower pane and the leftmost column |
| * visibile in the right pane. |
| * |
| * @param top The top row visible in the lower pane |
| * @param left The leftmost column visibile in the right pane |
| */ |
| public int getTop() { |
| |
| return posTop; |
| } |
| |
| /** |
| * Gets the active Panel |
| * 0 - Bottom Right, 1 - Top Right |
| * 2 - Bottom Left, 3 - Top Left |
| * |
| * @return int representing the active panel |
| */ |
| public int getPaneNumber() { |
| |
| return paneNumber; |
| } |
| |
| /** |
| * Sets the sheetname this settings object applies to |
| * |
| * @param sheetName the name of the worksheet |
| */ |
| public void setSheetName(String sheetName) { |
| |
| this.sheetName = sheetName; |
| |
| } |
| |
| /** |
| * Sets the active pane number |
| * 0 - Bottom Right, 1 - Top Right |
| * 2 - Bottom Left, 3 - Top Left |
| * |
| * @param paneNumber the pane number |
| */ |
| public void setPaneNumber(int paneNumber) { |
| |
| this.paneNumber = paneNumber; |
| } |
| |
| /** |
| * Gets the name of the worksheet these <code>Settings</code> apply to |
| * |
| * @return the name of the worksheet |
| */ |
| public String getSheetName() { |
| |
| return sheetName; |
| } |
| |
| /** |
| * Adds an XML entry for a particular setting |
| * |
| * @param root the root node at which to add the xml entry |
| * @param attribute the name of the attribute to add |
| * @param type the attribute type (int, short etc) |
| * @param value the value of the attribute |
| */ |
| private void addConfigItem(Node root, String attribute, String type, String value) { |
| |
| Element configItem = settings.createElement(TAG_CONFIG_ITEM); |
| configItem.setAttribute(ATTRIBUTE_CONFIG_NAME, attribute); |
| configItem.setAttribute(ATTRIBUTE_CONFIG_TYPE, type); |
| |
| configItem.appendChild(settings.createTextNode(value)); |
| |
| root.appendChild(configItem); |
| } |
| |
| /** |
| * Writes out a settings.xml entry for this SheetSettings 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 settings, Node root) { |
| |
| this.settings = settings; |
| Element configItemMapEntry = (Element) settings.createElement(TAG_CONFIG_ITEM_MAP_ENTRY); |
| configItemMapEntry.setAttribute(ATTRIBUTE_CONFIG_NAME, getSheetName()); |
| addConfigItem(configItemMapEntry, "CursorPositionX", "int", Integer.toString(cursorX)); |
| addConfigItem(configItemMapEntry, "CursorPositionY", "int", Integer.toString(cursorY)); |
| |
| String splitMode = Integer.toString(splitTypeX); |
| if(splitPointX==0) { |
| splitMode = "0"; |
| } |
| addConfigItem(configItemMapEntry, "HorizontalSplitMode", "short", splitMode); |
| |
| splitMode = Integer.toString(splitTypeY); |
| if(splitPointY==0) { |
| splitMode = "0"; |
| } |
| addConfigItem(configItemMapEntry, "VerticalSplitMode", "short", splitMode); |
| |
| addConfigItem(configItemMapEntry, "HorizontalSplitPosition", "int", Integer.toString(splitPointX)); |
| addConfigItem(configItemMapEntry, "VerticalSplitPosition", "int", Integer.toString(splitPointY)); |
| addConfigItem(configItemMapEntry, "ActiveSplitRange", "short", Integer.toString(paneNumber)); |
| |
| addConfigItem(configItemMapEntry, "PositionLeft", "int", "0"); |
| addConfigItem(configItemMapEntry, "PositionRight", "int", Integer.toString(posLeft)); |
| addConfigItem(configItemMapEntry, "PositionTop", "int", "0"); |
| addConfigItem(configItemMapEntry, "PositionBottom", "int", Integer.toString(posTop)); |
| root.appendChild(configItemMapEntry); |
| } |
| |
| /** |
| * Sets a variable based on a String value read from XML |
| * |
| * @param name xml name of the attribute to set |
| * @param value String value fo the attribute |
| */ |
| public void addAttribute(String name, String value) { |
| |
| if(name.equals("CursorPositionX")) { |
| cursorX = Integer.parseInt(value); |
| } else if(name.equals("CursorPositionY")) { |
| cursorY = Integer.parseInt(value); |
| |
| } else if(name.equals("HorizontalSplitPosition")) { |
| splitPointX = Integer.parseInt(value); |
| } else if(name.equals("VerticalSplitPosition")) { |
| splitPointY = Integer.parseInt(value); |
| } else if(name.equals("ActiveSplitRange")) { |
| paneNumber = Integer.parseInt(value); |
| |
| } else if(name.equals("PositionRight")) { |
| posLeft = Integer.parseInt(value); |
| } else if(name.equals("PositionBottom")) { |
| posTop = Integer.parseInt(value); |
| |
| } else if(name.equals("HorizontalSplitMode")) { |
| splitTypeX = Integer.parseInt(value); |
| } else if(name.equals("VerticalSplitMode")) { |
| splitTypeY = Integer.parseInt(value); |
| } |
| } |
| |
| /** |
| * Reads document settings from xml and inits SheetSettings variables |
| * |
| * @param root XML Node to read from |
| */ |
| public void readNode(Node root) { |
| |
| NamedNodeMap sheetAtt = root.getAttributes(); |
| |
| Node sheetNameNode = sheetAtt.getNamedItem(ATTRIBUTE_CONFIG_NAME); |
| |
| sheetName = sheetNameNode.getNodeValue(); |
| |
| if (root.hasChildNodes()) { |
| |
| NodeList nodeList = root.getChildNodes(); |
| int len = nodeList.getLength(); |
| for (int i = 0; i < len; i++) { |
| Node child = nodeList.item(i); |
| |
| if (child.getNodeType() == Node.ELEMENT_NODE) { |
| String nodeName = child.getNodeName(); |
| |
| if (nodeName.equals(TAG_CONFIG_ITEM)) { |
| |
| NamedNodeMap cellAtt = child.getAttributes(); |
| |
| Node configNameNode = |
| cellAtt.getNamedItem(ATTRIBUTE_CONFIG_NAME); |
| |
| String name = configNameNode.getNodeValue(); |
| NodeList nodeList2 = child.getChildNodes(); |
| int len2 = nodeList2.getLength(); |
| String s = ""; |
| for (int j = 0; j < len2; j++) { |
| Node child2 = nodeList2.item(j); |
| if (child2.getNodeType() == Node.TEXT_NODE) { |
| s = child2.getNodeValue(); |
| } |
| } |
| addAttribute(name, s); |
| } |
| } |
| } |
| } |
| } |
| } |