1 /************************************************************** 2 * 3 * Licensed to the Apache Software Foundation (ASF) under one 4 * or more contributor license agreements. See the NOTICE file 5 * distributed with this work for additional information 6 * regarding copyright ownership. The ASF licenses this file 7 * to you under the Apache License, Version 2.0 (the 8 * "License"); you may not use this file except in compliance 9 * with the License. You may obtain a copy of the License at 10 * 11 * http://www.apache.org/licenses/LICENSE-2.0 12 * 13 * Unless required by applicable law or agreed to in writing, 14 * software distributed under the License is distributed on an 15 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16 * KIND, either express or implied. See the License for the 17 * specific language governing permissions and limitations 18 * under the License. 19 * 20 *************************************************************/ 21 22 23 24 package org.openoffice.xmerge.converter.xml.sxc; 25 26 import org.w3c.dom.NamedNodeMap; 27 import org.w3c.dom.NodeList; 28 import org.w3c.dom.Node; 29 import org.w3c.dom.Element; 30 import java.awt.Point; 31 32 import org.openoffice.xmerge.converter.xml.OfficeConstants; 33 34 /** 35 * This is a class representing the different attributes for a worksheet 36 * contained in settings.xml. 37 * 38 * @author Martin Maher 39 */ 40 public class SheetSettings implements OfficeConstants { 41 42 /** A w3c <code>Document</code>. */ 43 private org.w3c.dom.Document settings = null; 44 45 private String sheetName; 46 private int cursorX = 0; 47 private int cursorY = 0; 48 private int splitTypeX; 49 private int splitTypeY; 50 private int splitPointX = 0; 51 private int splitPointY = 0; 52 private int posLeft = 0; 53 private int posRight = 0; 54 private int posBottom = 0; 55 private int posTop = 0; 56 private int paneNumber = 2; 57 58 final public static int NONE = 0x00; 59 final public static int SPLIT = 0x01; 60 final public static int FREEZE = 0x02; 61 62 63 /** 64 * Default Constructor for a <code>ColumnRowInfo</code> 65 * 66 */ SheetSettings()67 public SheetSettings() { 68 } 69 70 /** 71 * Constructor that takes a <code>Node</code> to build a <code>SheetSettings</code> 72 * 73 * @param root XML Node to read from 74 */ SheetSettings(Node root)75 public SheetSettings(Node root) { 76 readNode(root); 77 } 78 79 /** 80 * Constructor for a <code>ColumnRowInfo</code> 81 * 82 * @param name 83 */ SheetSettings(String name)84 public SheetSettings(String name) { 85 sheetName = name; 86 } 87 88 /** 89 * sets the position of the acitve cell 90 * 91 * @param activeCell the current curor position 92 */ setCursor(Point activeCell)93 public void setCursor(Point activeCell) { 94 95 cursorX = (int) activeCell.getX(); 96 cursorY = (int) activeCell.getY(); 97 } 98 99 /** 100 * Gets the position of the acitve cell 101 * 102 * @return The position as a <code>Point</code> 103 */ getCursor()104 public Point getCursor() { 105 106 return (new Point(cursorX, cursorY)); 107 } 108 109 /** 110 * Sets the position of the freeze 111 * 112 * @param splitPoint the point at where the split occurs 113 */ setFreeze(Point splitPoint)114 public void setFreeze(Point splitPoint) { 115 116 splitTypeX = FREEZE; 117 splitTypeY = FREEZE; 118 splitPointX = (int) splitPoint.getX(); 119 splitPointY = (int) splitPoint.getY(); 120 } 121 122 /** 123 * Sets the position of the split 124 * 125 * @param splitPoint the point at where the split occurs 126 */ setSplit(Point splitPoint)127 public void setSplit(Point splitPoint) { 128 129 splitTypeX = SPLIT; 130 splitTypeY = SPLIT; 131 splitPointX = (int) splitPoint.getX(); 132 splitPointY = (int) splitPoint.getY(); 133 } 134 135 /** 136 * sets the position and type of the split 137 * 138 * @return The position as a <code>Point</code> where the split occurs 139 */ getSplit()140 public Point getSplit() { 141 142 return (new Point(splitPointX, splitPointY)); 143 } 144 145 /** 146 * sets the position and type of the split 147 * 148 * @return The position as a <code>Point</code> where the split occurs 149 */ getSplitType()150 public Point getSplitType() { 151 152 return (new Point(splitTypeX, splitTypeY)); 153 } 154 155 /** 156 * Sets the top row visible in the lower pane and the leftmost column 157 * visibile in the right pane. 158 * 159 * @param top The top row visible in the lower pane 160 * @param left The leftmost column visibile in the right pane 161 */ setTopLeft(int top, int left)162 public void setTopLeft(int top, int left) { 163 164 posLeft = left; 165 posTop = top; 166 } 167 168 /** 169 * Gets the the leftmost column visibile in the right pane. 170 * 171 * @return the 0-based index to the column 172 */ getLeft()173 public int getLeft() { 174 175 return posLeft; 176 } 177 178 /** 179 * Gets the top row visible in the lower pane. 180 * 181 */ getTop()182 public int getTop() { 183 184 return posTop; 185 } 186 187 /** 188 * Gets the active Panel 189 * 0 - Bottom Right, 1 - Top Right 190 * 2 - Bottom Left, 3 - Top Left 191 * 192 * @return int representing the active panel 193 */ getPaneNumber()194 public int getPaneNumber() { 195 196 return paneNumber; 197 } 198 199 /** 200 * Sets the sheetname this settings object applies to 201 * 202 * @param sheetName the name of the worksheet 203 */ setSheetName(String sheetName)204 public void setSheetName(String sheetName) { 205 206 this.sheetName = sheetName; 207 208 } 209 210 /** 211 * Sets the active pane number 212 * 0 - Bottom Right, 1 - Top Right 213 * 2 - Bottom Left, 3 - Top Left 214 * 215 * @param paneNumber the pane number 216 */ setPaneNumber(int paneNumber)217 public void setPaneNumber(int paneNumber) { 218 219 this.paneNumber = paneNumber; 220 } 221 222 /** 223 * Gets the name of the worksheet these <code>Settings</code> apply to 224 * 225 * @return the name of the worksheet 226 */ getSheetName()227 public String getSheetName() { 228 229 return sheetName; 230 } 231 232 /** 233 * Adds an XML entry for a particular setting 234 * 235 * @param root the root node at which to add the xml entry 236 * @param attribute the name of the attribute to add 237 * @param type the attribute type (int, short etc) 238 * @param value the value of the attribute 239 */ addConfigItem(Node root, String attribute, String type, String value)240 private void addConfigItem(Node root, String attribute, String type, String value) { 241 242 Element configItem = settings.createElement(TAG_CONFIG_ITEM); 243 configItem.setAttribute(ATTRIBUTE_CONFIG_NAME, attribute); 244 configItem.setAttribute(ATTRIBUTE_CONFIG_TYPE, type); 245 246 configItem.appendChild(settings.createTextNode(value)); 247 248 root.appendChild(configItem); 249 } 250 251 /** 252 * Writes out a settings.xml entry for this SheetSettings object 253 * 254 * @param settings a <code>Document</code> object representing the settings.xml 255 * @param root the root xml node to add to 256 */ writeNode(org.w3c.dom.Document settings, Node root)257 public void writeNode(org.w3c.dom.Document settings, Node root) { 258 259 this.settings = settings; 260 Element configItemMapEntry = (Element) settings.createElement(TAG_CONFIG_ITEM_MAP_ENTRY); 261 configItemMapEntry.setAttribute(ATTRIBUTE_CONFIG_NAME, getSheetName()); 262 addConfigItem(configItemMapEntry, "CursorPositionX", "int", Integer.toString(cursorX)); 263 addConfigItem(configItemMapEntry, "CursorPositionY", "int", Integer.toString(cursorY)); 264 265 String splitMode = Integer.toString(splitTypeX); 266 if(splitPointX==0) { 267 splitMode = "0"; 268 } 269 addConfigItem(configItemMapEntry, "HorizontalSplitMode", "short", splitMode); 270 271 splitMode = Integer.toString(splitTypeY); 272 if(splitPointY==0) { 273 splitMode = "0"; 274 } 275 addConfigItem(configItemMapEntry, "VerticalSplitMode", "short", splitMode); 276 277 addConfigItem(configItemMapEntry, "HorizontalSplitPosition", "int", Integer.toString(splitPointX)); 278 addConfigItem(configItemMapEntry, "VerticalSplitPosition", "int", Integer.toString(splitPointY)); 279 addConfigItem(configItemMapEntry, "ActiveSplitRange", "short", Integer.toString(paneNumber)); 280 281 addConfigItem(configItemMapEntry, "PositionLeft", "int", "0"); 282 addConfigItem(configItemMapEntry, "PositionRight", "int", Integer.toString(posLeft)); 283 addConfigItem(configItemMapEntry, "PositionTop", "int", "0"); 284 addConfigItem(configItemMapEntry, "PositionBottom", "int", Integer.toString(posTop)); 285 root.appendChild(configItemMapEntry); 286 } 287 288 /** 289 * Sets a variable based on a String value read from XML 290 * 291 * @param name xml name of the attribute to set 292 * @param value String value fo the attribute 293 */ addAttribute(String name, String value)294 public void addAttribute(String name, String value) { 295 296 if(name.equals("CursorPositionX")) { 297 cursorX = Integer.parseInt(value); 298 } else if(name.equals("CursorPositionY")) { 299 cursorY = Integer.parseInt(value); 300 301 } else if(name.equals("HorizontalSplitPosition")) { 302 splitPointX = Integer.parseInt(value); 303 } else if(name.equals("VerticalSplitPosition")) { 304 splitPointY = Integer.parseInt(value); 305 } else if(name.equals("ActiveSplitRange")) { 306 paneNumber = Integer.parseInt(value); 307 308 } else if(name.equals("PositionRight")) { 309 posLeft = Integer.parseInt(value); 310 } else if(name.equals("PositionBottom")) { 311 posTop = Integer.parseInt(value); 312 313 } else if(name.equals("HorizontalSplitMode")) { 314 splitTypeX = Integer.parseInt(value); 315 } else if(name.equals("VerticalSplitMode")) { 316 splitTypeY = Integer.parseInt(value); 317 } 318 } 319 320 /** 321 * Reads document settings from xml and inits SheetSettings variables 322 * 323 * @param root XML Node to read from 324 */ readNode(Node root)325 public void readNode(Node root) { 326 327 NamedNodeMap sheetAtt = root.getAttributes(); 328 329 Node sheetNameNode = sheetAtt.getNamedItem(ATTRIBUTE_CONFIG_NAME); 330 331 sheetName = sheetNameNode.getNodeValue(); 332 333 if (root.hasChildNodes()) { 334 335 NodeList nodeList = root.getChildNodes(); 336 int len = nodeList.getLength(); 337 for (int i = 0; i < len; i++) { 338 Node child = nodeList.item(i); 339 340 if (child.getNodeType() == Node.ELEMENT_NODE) { 341 String nodeName = child.getNodeName(); 342 343 if (nodeName.equals(TAG_CONFIG_ITEM)) { 344 345 NamedNodeMap cellAtt = child.getAttributes(); 346 347 Node configNameNode = 348 cellAtt.getNamedItem(ATTRIBUTE_CONFIG_NAME); 349 350 String name = configNameNode.getNodeValue(); 351 NodeList nodeList2 = child.getChildNodes(); 352 int len2 = nodeList2.getLength(); 353 String s = ""; 354 for (int j = 0; j < len2; j++) { 355 Node child2 = nodeList2.item(j); 356 if (child2.getNodeType() == Node.TEXT_NODE) { 357 s = child2.getNodeValue(); 358 } 359 } 360 addAttribute(name, s); 361 } 362 } 363 } 364 } 365 } 366 } 367