From: Yegor Kozlov Date: Sat, 25 Oct 2008 11:48:50 +0000 (+0000) Subject: more cleanup and refactoring of the ooxml code:1. removed deprecated methods from... X-Git-Tag: ooxml_20081107~19 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=db877653b7f74b2a7e2524d7101178e388adf201;p=poi.git more cleanup and refactoring of the ooxml code:1. removed deprecated methods from xssf and interfaces 2. minimized the accessibility of internal constructors 3. more javadocs git-svn-id: https://svn.apache.org/repos/asf/poi/branches/ooxml@707839 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/src/examples/src/org/apache/poi/xssf/usermodel/examples/MergingCells.java b/src/examples/src/org/apache/poi/xssf/usermodel/examples/MergingCells.java index e103152de4..3113497d0b 100755 --- a/src/examples/src/org/apache/poi/xssf/usermodel/examples/MergingCells.java +++ b/src/examples/src/org/apache/poi/xssf/usermodel/examples/MergingCells.java @@ -20,6 +20,7 @@ import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Cell; +import org.apache.poi.ss.util.CellRangeAddress; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.apache.poi.xssf.usermodel.XSSFRichTextString; import org.apache.poi.hssf.util.Region; @@ -38,7 +39,7 @@ public class MergingCells { Cell cell = row.createCell((short) 1); cell.setCellValue(new XSSFRichTextString("This is a test of merging")); - sheet.addMergedRegion(new Region(1,(short)1,1,(short)2)); + sheet.addMergedRegion(new CellRangeAddress(1, 1, 1, 2)); // Write the output to a file FileOutputStream fileOut = new FileOutputStream("merging_cells.xlsx"); diff --git a/src/java/org/apache/poi/ss/util/CellRangeAddress.java b/src/java/org/apache/poi/ss/util/CellRangeAddress.java index 41c2f63ea2..0d910c6824 100644 --- a/src/java/org/apache/poi/ss/util/CellRangeAddress.java +++ b/src/java/org/apache/poi/ss/util/CellRangeAddress.java @@ -50,4 +50,21 @@ public class CellRangeAddress extends CellRangeAddressBase { public static int getEncodedSize(int numberOfItems) { return numberOfItems * ENCODED_SIZE; } + + public String formatAsString() { + StringBuffer sb = new StringBuffer(); + CellReference cellRefFrom = new CellReference(getFirstRow(), getFirstColumn()); + CellReference cellRefTo = new CellReference(getLastRow(), getLastColumn()); + sb.append(cellRefFrom.formatAsString()); + sb.append(':'); + sb.append(cellRefTo.formatAsString()); + return sb.toString(); + } + + public static CellRangeAddress valueOf(String ref) { + int sep = ref.indexOf(":"); + CellReference cellFrom = new CellReference(ref.substring(0, sep)); + CellReference cellTo = new CellReference(ref.substring(sep + 1)); + return new CellRangeAddress(cellFrom.getRow(), cellTo.getRow(), cellFrom.getCol(), cellTo.getCol()); + } } diff --git a/src/ooxml/interfaces-jdk15/org/apache/poi/ss/usermodel/Sheet.java b/src/ooxml/interfaces-jdk15/org/apache/poi/ss/usermodel/Sheet.java index 6625c6ef64..d4b1c07c68 100644 --- a/src/ooxml/interfaces-jdk15/org/apache/poi/ss/usermodel/Sheet.java +++ b/src/ooxml/interfaces-jdk15/org/apache/poi/ss/usermodel/Sheet.java @@ -21,7 +21,6 @@ import java.util.Iterator; import org.apache.poi.hssf.util.PaneInformation; import org.apache.poi.ss.util.CellRangeAddress; -import org.apache.poi.ss.util.Region; public interface Sheet extends Iterable { @@ -197,11 +196,6 @@ public interface Sheet extends Iterable { */ int addMergedRegion(CellRangeAddress region); - /** - * @deprecated (Aug-2008) use {@link #addMergedRegion(CellRangeAddress)} - */ - int addMergedRegion(Region region); - /** * determines whether the output is vertically centered on the page. * @param value true to vertically center, false otherwise. @@ -236,14 +230,6 @@ public interface Sheet extends Iterable { int getNumMergedRegions(); - /** - * gets the region at a particular index - * @param index of the region to fetch - * @return the merged region (simple eh?) - */ - - Region getMergedRegionAt(int index); - /** * @return an iterator of the PHYSICAL rows. Meaning the 3rd element may not * be the third row if say for instance the second row is undefined. @@ -300,20 +286,6 @@ public interface Sheet extends Iterable { void setRowSumsRight(boolean b); - /** - * whether alternate expression evaluation is on - * @return alternative expression evaluation or not - */ - - boolean getAlternateExpression(); - - /** - * whether alternative formula entry is on - * @return alternative formulas or not - */ - - boolean getAlternateFormula(); - /** * show automatic page breaks or not * @return whether to show auto page breaks @@ -411,29 +383,12 @@ public interface Sheet extends Iterable { */ boolean getProtect(); - /** - * @return hashed password - */ - short getPassword(); - - /** - * Answer whether object protection is enabled or disabled - * @return true => protection enabled; false => protection disabled - */ - boolean getObjectProtect(); - /** * Answer whether scenario protection is enabled or disabled * @return true => protection enabled; false => protection disabled */ boolean getScenarioProtect(); - /** - * Sets the protection enabled as well as the password - * @param password to set for protection - */ - void protectSheet(String password); - /** * Sets the zoom magnication for the sheet. The zoom is expressed as a * fraction. For example to express a zoom of 75% use 3 for the numerator diff --git a/src/ooxml/interfaces-jdk15/org/apache/poi/ss/usermodel/Workbook.java b/src/ooxml/interfaces-jdk15/org/apache/poi/ss/usermodel/Workbook.java index b853c92583..bca3b5e0f2 100644 --- a/src/ooxml/interfaces-jdk15/org/apache/poi/ss/usermodel/Workbook.java +++ b/src/ooxml/interfaces-jdk15/org/apache/poi/ss/usermodel/Workbook.java @@ -375,13 +375,6 @@ public interface Workbook { */ List getAllPictures(); - /** - * Gets all embedded OLE2 objects from the Workbook. - * - * @return the list of embedded objects - */ - List getAllEmbeddedObjects(); - /** * Returns an object that handles instantiating concrete * classes of the various instances one needs for diff --git a/src/ooxml/java/org/apache/poi/POIXMLDocument.java b/src/ooxml/java/org/apache/poi/POIXMLDocument.java index 90a7959ad3..2287ef4f18 100644 --- a/src/ooxml/java/org/apache/poi/POIXMLDocument.java +++ b/src/ooxml/java/org/apache/poi/POIXMLDocument.java @@ -17,7 +17,6 @@ package org.apache.poi; import java.io.*; -import java.util.LinkedList; import java.util.List; import org.apache.poi.poifs.common.POIFSConstants; @@ -48,19 +47,9 @@ public abstract class POIXMLDocument extends POIXMLDocumentPart{ */ private POIXMLProperties properties; - protected POIXMLDocument() { - super(null, null); - try { - Package pkg = newPackage(); - initialize(pkg); - } catch (IOException e){ - throw new POIXMLException(e); - } - } - - protected POIXMLDocument(Package pkg) throws IOException { - super(null, null); - initialize(pkg); + protected POIXMLDocument(Package pkg) { + super(pkg); + this.pkg = pkg; } /** @@ -76,36 +65,12 @@ public abstract class POIXMLDocument extends POIXMLDocumentPart{ } } - private void initialize(Package pkg) throws IOException { - try { - this.pkg = pkg; - - PackageRelationship coreDocRelationship = this.pkg.getRelationshipsByType( - PackageRelationshipTypes.CORE_DOCUMENT).getRelationship(0); - - // Get core part - this.packagePart = this.pkg.getPart(coreDocRelationship); - this.packageRel = coreDocRelationship; - - // Verify it's there - if(this.packagePart == null) { - throw new IllegalArgumentException("No core part found for this document! Nothing with " + coreDocRelationship.getRelationshipType() + " present as a relation."); - } - } catch (OpenXML4JException e) { - throw new IOException(e.toString()); - } - } - - protected Package newPackage() throws IOException { - throw new POIXMLException("Must be overridden"); - } - public Package getPackage() { return this.pkg; } protected PackagePart getCorePart() { - return this.packagePart; + return getPackagePart(); } /** diff --git a/src/ooxml/java/org/apache/poi/POIXMLDocumentPart.java b/src/ooxml/java/org/apache/poi/POIXMLDocumentPart.java index 660d0fc9e2..d529bedf04 100755 --- a/src/ooxml/java/org/apache/poi/POIXMLDocumentPart.java +++ b/src/ooxml/java/org/apache/poi/POIXMLDocumentPart.java @@ -25,6 +25,7 @@ import org.apache.poi.util.POILogger; import org.apache.poi.util.POILogFactory; import org.openxml4j.exceptions.OpenXML4JException; import org.openxml4j.opc.*; +import org.openxml4j.opc.Package; /** * Represents an entry of a OOXML package. @@ -38,7 +39,7 @@ import org.openxml4j.opc.*; public class POIXMLDocumentPart { private static POILogger logger = POILogFactory.getLogger(POIXMLDocumentPart.class); - public static XmlOptions DEFAULT_XML_OPTIONS; + public static final XmlOptions DEFAULT_XML_OPTIONS; static { DEFAULT_XML_OPTIONS = new XmlOptions(); DEFAULT_XML_OPTIONS.setSaveOuter(); @@ -46,14 +47,46 @@ public class POIXMLDocumentPart { DEFAULT_XML_OPTIONS.setSaveAggressiveNamespaces(); } - protected PackagePart packagePart; - protected PackageRelationship packageRel; - protected POIXMLDocumentPart parent; + private PackagePart packagePart; + private PackageRelationship packageRel; + private POIXMLDocumentPart parent; + private List relations; - protected List relations; + /** + * Construct POIXMLDocumentPart representing a "core document" package part. + */ + public POIXMLDocumentPart(Package pkg) { + try { + PackageRelationship coreRel = pkg.getRelationshipsByType( + PackageRelationshipTypes.CORE_DOCUMENT).getRelationship(0); + this.relations = new LinkedList(); + this.packagePart = pkg.getPart(coreRel); + this.packageRel = coreRel; + } catch (OpenXML4JException e){ + throw new POIXMLException(e); + } + } + + /** + * Creates new POIXMLDocumentPart - called by client code to create new parts from scratch. + * + * @see #createRelationship(POIXMLRelation, POIXMLFactory, int, boolean) + */ + public POIXMLDocumentPart(){ + this.relations = new LinkedList(); + } + + /** + * Creates an POIXMLDocumentPart representing the given package part and relationship. + * Called by {@link #read(POIXMLFactory)} when reading in an exisiting file. + * + * @param part - The package part that holds xml data represenring this sheet. + * @param rel - the relationship of the given package part + * @see #read(POIXMLFactory) + */ public POIXMLDocumentPart(PackagePart part, PackageRelationship rel){ - relations = new LinkedList(); + this.relations = new LinkedList(); this.packagePart = part; this.packageRel = rel; } @@ -63,7 +96,7 @@ public class POIXMLDocumentPart { * * @return the underlying PackagePart */ - public PackagePart getPackagePart(){ + public final PackagePart getPackagePart(){ return packagePart; } @@ -72,7 +105,7 @@ public class POIXMLDocumentPart { * * @return the PackageRelationship that identifies this POIXMLDocumentPart */ - public PackageRelationship getPackageRelationship(){ + public final PackageRelationship getPackageRelationship(){ return packageRel; } @@ -81,7 +114,7 @@ public class POIXMLDocumentPart { * * @return child relations */ - public List getRelations(){ + public final List getRelations(){ return relations; } @@ -90,7 +123,7 @@ public class POIXMLDocumentPart { * * @param part the child to add */ - protected void addRelation(POIXMLDocumentPart part){ + protected final void addRelation(POIXMLDocumentPart part){ relations.add(part); } @@ -99,7 +132,7 @@ public class POIXMLDocumentPart { * * @return the parent POIXMLDocumentPart or null for the root element. */ - public POIXMLDocumentPart getParent(){ + public final POIXMLDocumentPart getParent(){ return parent; } @@ -132,11 +165,12 @@ public class POIXMLDocumentPart { /** * Save changes in the underlying OOXML package. + * Recursively fires {@link #commit()} for each package part */ - protected void save() throws IOException{ + protected final void onSave() throws IOException{ commit(); for(POIXMLDocumentPart p : relations){ - p.save(); + p.onSave(); } } @@ -147,11 +181,11 @@ public class POIXMLDocumentPart { * @param factory the factory that will create an instance of the requested relation * @return the created child POIXMLDocumentPart */ - protected POIXMLDocumentPart createRelationship(POIXMLRelation descriptor, POIXMLFactory factory){ + protected final POIXMLDocumentPart createRelationship(POIXMLRelation descriptor, POIXMLFactory factory){ return createRelationship(descriptor, factory, -1, false); } - protected POIXMLDocumentPart createRelationship(POIXMLRelation descriptor, POIXMLFactory factory, int idx){ + protected final POIXMLDocumentPart createRelationship(POIXMLRelation descriptor, POIXMLFactory factory, int idx){ return createRelationship(descriptor, factory, idx, false); } @@ -164,7 +198,7 @@ public class POIXMLDocumentPart { * @param noRelation if true, then no relationship is added. * @return the created child POIXMLDocumentPart */ - protected POIXMLDocumentPart createRelationship(POIXMLRelation descriptor, POIXMLFactory factory, int idx, boolean noRelation){ + protected final POIXMLDocumentPart createRelationship(POIXMLRelation descriptor, POIXMLFactory factory, int idx, boolean noRelation){ try { PackagePartName ppName = PackagingURIHelper.createPartName(descriptor.getFileName(idx)); @@ -176,7 +210,6 @@ public class POIXMLDocumentPart { doc.packageRel = rel; doc.packagePart = part; doc.parent = this; - doc.onDocumentCreate(); addRelation(doc); return doc; } catch (Exception e){ @@ -190,7 +223,7 @@ public class POIXMLDocumentPart { * * @param factory the factory object that creates POIXMLFactory instances */ - protected void read(POIXMLFactory factory) throws OpenXML4JException { + protected final void read(POIXMLFactory factory) throws OpenXML4JException { PackageRelationshipCollection rels = packagePart.getRelationships(); for (PackageRelationship rel : rels) { if(rel.getTargetMode() == TargetMode.INTERNAL){ @@ -202,7 +235,6 @@ public class POIXMLDocumentPart { } POIXMLDocumentPart childPart = factory.createDocumentPart(rel, p); childPart.parent = this; - childPart.onDocumentRead(); addRelation(childPart); if(p.hasRelationships()) childPart.read(factory); @@ -210,17 +242,19 @@ public class POIXMLDocumentPart { } } + /** * Fired when a new package part is created */ - protected void onDocumentCreate(){ + protected void onDocumentCreate() throws IOException { } /** * Fired when a package part is read */ - protected void onDocumentRead(){ + protected void onDocumentRead() throws IOException{ } + } diff --git a/src/ooxml/java/org/apache/poi/xssf/model/CommentsTable.java b/src/ooxml/java/org/apache/poi/xssf/model/CommentsTable.java index b0efd0bd46..ff32b8b7e4 100644 --- a/src/ooxml/java/org/apache/poi/xssf/model/CommentsTable.java +++ b/src/ooxml/java/org/apache/poi/xssf/model/CommentsTable.java @@ -34,11 +34,11 @@ import org.openxmlformats.schemas.spreadsheetml.x2006.main.CommentsDocument; import org.openxml4j.opc.PackagePart; import org.openxml4j.opc.PackageRelationship; -public class CommentsTable extends POIXMLDocumentPart implements CommentsSource { +public class CommentsTable extends POIXMLDocumentPart { protected CTComments comments; public CommentsTable() { - super(null, null); + super(); comments = CTComments.Factory.newInstance(); } @@ -56,16 +56,9 @@ public class CommentsTable extends POIXMLDocumentPart implements CommentsSource } } public void writeTo(OutputStream out) throws IOException { - XmlOptions options = new XmlOptions(); - options.setSaveOuter(); - options.setUseDefaultNamespace(); - - // Requests use of whitespace for easier reading - //options.setSavePrettyPrint(); - - CommentsDocument doc = CommentsDocument.Factory.newInstance(options); + CommentsDocument doc = CommentsDocument.Factory.newInstance(); doc.setComments(comments); - doc.save(out, options); + doc.save(out, DEFAULT_XML_OPTIONS); } @Override diff --git a/src/ooxml/java/org/apache/poi/xssf/model/SharedStringsTable.java b/src/ooxml/java/org/apache/poi/xssf/model/SharedStringsTable.java index 94d0174567..edc8186627 100644 --- a/src/ooxml/java/org/apache/poi/xssf/model/SharedStringsTable.java +++ b/src/ooxml/java/org/apache/poi/xssf/model/SharedStringsTable.java @@ -86,7 +86,7 @@ public class SharedStringsTable extends POIXMLDocumentPart { private int uniqueCount; public SharedStringsTable() { - super(null, null); + super(); } public SharedStringsTable(PackagePart part, PackageRelationship rel) throws IOException { diff --git a/src/ooxml/java/org/apache/poi/xssf/model/StylesTable.java b/src/ooxml/java/org/apache/poi/xssf/model/StylesTable.java index 2e1473b671..c68d29204e 100644 --- a/src/ooxml/java/org/apache/poi/xssf/model/StylesTable.java +++ b/src/ooxml/java/org/apache/poi/xssf/model/StylesTable.java @@ -64,8 +64,8 @@ import org.openxml4j.opc.PackageRelationship; * * @author ugo */ -public class StylesTable extends POIXMLDocumentPart implements StylesSource { - private final Hashtable numberFormats = new Hashtable(); +public class StylesTable extends POIXMLDocumentPart { + private final Hashtable numberFormats = new Hashtable(); private final List fonts = new ArrayList(); private final List fills = new ArrayList(); private final List borders = new ArrayList(); @@ -77,7 +77,7 @@ public class StylesTable extends POIXMLDocumentPart implements StylesSource { /** * The first style id available for use as a custom style */ - public static final long FIRST_CUSTOM_STYLE_ID = 165; + public static final int FIRST_CUSTOM_STYLE_ID = 165; private StyleSheetDocument doc; @@ -85,7 +85,7 @@ public class StylesTable extends POIXMLDocumentPart implements StylesSource { * Create a new, empty StylesTable */ public StylesTable() { - super(null, null); + super(); doc = StyleSheetDocument.Factory.newInstance(); doc.addNewStyleSheet(); // Initialization required in order to make the document readable by MSExcel @@ -109,7 +109,7 @@ public class StylesTable extends POIXMLDocumentPart implements StylesSource { // Grab all the different bits we care about if(doc.getStyleSheet().getNumFmts() != null) for (CTNumFmt nfmt : doc.getStyleSheet().getNumFmts().getNumFmtArray()) { - numberFormats.put(nfmt.getNumFmtId(), nfmt.getFormatCode()); + numberFormats.put((int)nfmt.getNumFmtId(), nfmt.getFormatCode()); } if(doc.getStyleSheet().getFonts() != null){ int idx = 0; @@ -150,14 +150,14 @@ public class StylesTable extends POIXMLDocumentPart implements StylesSource { // Start of style related getters and setters // =========================================================== - public String getNumberFormatAt(long idx) { + public String getNumberFormatAt(int idx) { return numberFormats.get(idx); } - public synchronized long putNumberFormat(String fmt) { + public synchronized int putNumberFormat(String fmt) { if (numberFormats.containsValue(fmt)) { // Find the key, and return that - for(Enumeration keys = numberFormats.keys(); keys.hasMoreElements();) { - Long key = keys.nextElement(); + for(Enumeration keys = numberFormats.keys(); keys.hasMoreElements();) { + int key = keys.nextElement(); if(numberFormats.get(key).equals(fmt)) { return key; } @@ -166,7 +166,7 @@ public class StylesTable extends POIXMLDocumentPart implements StylesSource { } // Find a spare key, and add that - long newKey = FIRST_CUSTOM_STYLE_ID; + int newKey = FIRST_CUSTOM_STYLE_ID; while(numberFormats.containsKey(newKey)) { newKey++; } @@ -174,11 +174,11 @@ public class StylesTable extends POIXMLDocumentPart implements StylesSource { return newKey; } - public XSSFFont getFontAt(long idx) { + public XSSFFont getFontAt(int idx) { return fonts.get((int)idx); } - public long putFont(Font font) { + public int putFont(Font font) { int idx = fonts.indexOf(font); if (idx != -1) { return idx; @@ -187,7 +187,7 @@ public class StylesTable extends POIXMLDocumentPart implements StylesSource { return fonts.size() - 1; } - public XSSFCellStyle getStyleAt(long idx) { + public XSSFCellStyle getStyleAt(int idx) { int styleXfId = 0; // 0 is the empty default @@ -197,7 +197,7 @@ public class StylesTable extends POIXMLDocumentPart implements StylesSource { return new XSSFCellStyle((int) idx, styleXfId, this); } - public synchronized long putStyle(CellStyle style) { + public synchronized int putStyle(CellStyle style) { XSSFCellStyle xStyle = (XSSFCellStyle)style; CTXf mainXF = xStyle.getCoreXf(); @@ -241,7 +241,7 @@ public class StylesTable extends POIXMLDocumentPart implements StylesSource { return fills.size() - 1; } - public CTXf getCellXfAt(long idx) { + public CTXf getCellXfAt(int idx) { return xfs.get((int) idx); } public int putCellXf(CTXf cellXf) { @@ -249,7 +249,7 @@ public class StylesTable extends POIXMLDocumentPart implements StylesSource { return xfs.size(); } - public CTXf getCellStyleXfAt(long idx) { + public CTXf getCellStyleXfAt(int idx) { return styleXfs.get((int) idx); } public int putCellStyleXf(CTXf cellStyleXf) { @@ -328,7 +328,7 @@ public class StylesTable extends POIXMLDocumentPart implements StylesSource { // Formats CTNumFmts formats = CTNumFmts.Factory.newInstance(); formats.setCount(numberFormats.size()); - for (Entry fmt : numberFormats.entrySet()) { + for (Entry fmt : numberFormats.entrySet()) { CTNumFmt ctFmt = formats.addNewNumFmt(); ctFmt.setNumFmtId(fmt.getKey()); ctFmt.setFormatCode(fmt.getValue()); @@ -460,14 +460,14 @@ public class StylesTable extends POIXMLDocumentPart implements StylesSource { return xssfFont; } - public CTDxf getDxf(long idx) { + public CTDxf getDxf(int idx) { if(dxfs.size()==0) return CTDxf.Factory.newInstance(); else return dxfs.get((int) idx); } - public long putDxf(CTDxf dxf) { + public int putDxf(CTDxf dxf) { this.dxfs.add(dxf); return this.dxfs.size(); } diff --git a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFCell.java b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFCell.java index 87ba105e6c..b7e77095ec 100644 --- a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFCell.java +++ b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFCell.java @@ -383,7 +383,7 @@ public final class XSSFCell implements Cell { */ public XSSFCellStyle getCellStyle() { long idx = cell.isSetS() ? cell.getS() : 0; - return stylesSource.getStyleAt(idx); + return stylesSource.getStyleAt((int)idx); } /** diff --git a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFCellStyle.java b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFCellStyle.java index c477caa1cd..eba46909d0 100644 --- a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFCellStyle.java +++ b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFCellStyle.java @@ -77,7 +77,7 @@ public class XSSFCellStyle implements CellStyle, Cloneable { /** * Creates an empty Cell Style */ - public XSSFCellStyle(StylesSource stylesSource) { + public XSSFCellStyle(StylesTable stylesSource) { this.stylesSource = (StylesTable)stylesSource; // We need a new CTXf for the main styles // TODO decide on a style ctxf @@ -94,7 +94,7 @@ public class XSSFCellStyle implements CellStyle, Cloneable { * workbook (if they're not, it won't work) * @throws IllegalArgumentException if there's a workbook mis-match */ - public void verifyBelongsToStylesSource(StylesSource src) { + public void verifyBelongsToStylesSource(StylesTable src) { if(this.stylesSource != src) { throw new IllegalArgumentException("This Style does not belong to the supplied Workbook Stlyes Source. Are you trying to assign a style from one workbook to the cell of a differnt workbook?"); } diff --git a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFComment.java b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFComment.java index 1a3d391d07..2f1519a859 100644 --- a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFComment.java +++ b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFComment.java @@ -20,6 +20,7 @@ import org.apache.poi.ss.usermodel.Comment; import org.apache.poi.ss.usermodel.CommentsSource; import org.apache.poi.ss.usermodel.RichTextString; import org.apache.poi.xssf.usermodel.helpers.RichTextStringHelper; +import org.apache.poi.xssf.model.CommentsTable; import org.apache.poi.ss.util.CellReference; import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTComment; import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTRst; @@ -27,7 +28,7 @@ import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTRst; public class XSSFComment implements Comment { private CTComment comment; - private CommentsSource comments; + private CommentsTable comments; /** * Creates a new XSSFComment, associated with a given @@ -35,13 +36,13 @@ public class XSSFComment implements Comment { * If, as an end user, you want a new XSSFComment * object, the please ask your sheet for one. */ - public XSSFComment(CommentsSource comments, CTComment comment) { + public XSSFComment(CommentsTable comments, CTComment comment) { this.comment = comment; this.comments = comments; } public String getAuthor() { - return comments.getAuthor(comment.getAuthorId()); + return comments.getAuthor((int)comment.getAuthorId()); } public int getColumn() { diff --git a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFDataFormat.java b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFDataFormat.java index 6b5191d845..863932f311 100644 --- a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFDataFormat.java +++ b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFDataFormat.java @@ -18,22 +18,24 @@ package org.apache.poi.xssf.usermodel; import org.apache.poi.ss.usermodel.DataFormat; import org.apache.poi.ss.usermodel.StylesSource; +import org.apache.poi.xssf.model.StylesTable; /** * Handles data formats for XSSF. * TODO Figure out if there are build in formats too */ public class XSSFDataFormat implements DataFormat { - private StylesSource stylesSource; - public XSSFDataFormat(StylesSource stylesSource) { - this.stylesSource = stylesSource; - } - - public short getFormat(String format) { - return (short)stylesSource.putNumberFormat(format); - } + private StylesTable stylesSource; - public String getFormat(short index) { - return stylesSource.getNumberFormatAt((long)index); - } + protected XSSFDataFormat(StylesTable stylesSource) { + this.stylesSource = stylesSource; + } + + public short getFormat(String format) { + return (short)stylesSource.putNumberFormat(format); + } + + public String getFormat(short index) { + return stylesSource.getNumberFormatAt(index); + } } diff --git a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFDialogsheet.java b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFDialogsheet.java index 06751387ff..08e2a943cb 100644 --- a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFDialogsheet.java +++ b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFDialogsheet.java @@ -19,6 +19,7 @@ package org.apache.poi.xssf.usermodel; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; +import org.apache.poi.POIXMLException; import org.apache.xmlbeans.XmlException; import org.openxmlformats.schemas.spreadsheetml.x2006.main.*; import org.openxml4j.opc.PackagePart; @@ -26,13 +27,14 @@ import org.openxml4j.opc.PackageRelationship; import java.io.IOException; +//YK: TODO: this is only a prototype public class XSSFDialogsheet extends XSSFSheet implements Sheet{ protected CTDialogsheet dialogsheet; - public XSSFDialogsheet(XSSFSheet sheet) { - this.packagePart = sheet.getPackagePart(); - this.packageRel = sheet.getPackageRelationship(); + protected XSSFDialogsheet(XSSFSheet sheet) { + super(sheet.getPackagePart(), sheet.getPackageRelationship()); this.dialogsheet = CTDialogsheet.Factory.newInstance(); + this.worksheet = CTWorksheet.Factory.newInstance(); } public XSSFRow createRow(int rowNum) { diff --git a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFDrawing.java b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFDrawing.java index 82f6ec0fcb..f64ddf3e3f 100755 --- a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFDrawing.java +++ b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFDrawing.java @@ -19,7 +19,6 @@ package org.apache.poi.xssf.usermodel; import org.apache.poi.POIXMLDocumentPart; import org.apache.xmlbeans.XmlException; import org.apache.xmlbeans.XmlOptions; -import org.apache.xmlbeans.XmlObject; import org.openxml4j.opc.*; import org.openxmlformats.schemas.drawingml.x2006.spreadsheetDrawing.*; import org.openxmlformats.schemas.officeDocument.x2006.relationships.STRelationshipId; @@ -29,8 +28,6 @@ import java.io.IOException; import java.io.OutputStream; import java.util.Map; import java.util.HashMap; -import java.util.List; -import java.util.LinkedList; /** * Represents a SpreadsheetML drawing @@ -48,8 +45,8 @@ public class XSSFDrawing extends POIXMLDocumentPart { * * @see org.apache.poi.xssf.usermodel.XSSFSheet#createDrawingPatriarch() */ - public XSSFDrawing() { - super(null, null); + protected XSSFDrawing() { + super(); drawing = newDrawing(); } @@ -61,7 +58,7 @@ public class XSSFDrawing extends POIXMLDocumentPart { * @param rel the package relationship holding this drawing, * the relationship type must be http://schemas.openxmlformats.org/officeDocument/2006/relationships/drawing */ - public XSSFDrawing(PackagePart part, PackageRelationship rel) throws IOException, XmlException { + protected XSSFDrawing(PackagePart part, PackageRelationship rel) throws IOException, XmlException { super(part, rel); drawing = CTDrawing.Factory.parse(part.getInputStream()); } @@ -157,7 +154,7 @@ public class XSSFDrawing extends POIXMLDocumentPart { XSSFWorkbook wb = (XSSFWorkbook)getParent().getParent(); XSSFPictureData data = wb.getAllPictures().get(pictureIndex); PackagePartName ppName = data.getPackagePart().getPartName(); - PackageRelationship rel = packagePart.addRelationship(ppName, TargetMode.INTERNAL, XSSFRelation.IMAGES.getRelation()); + PackageRelationship rel = getPackagePart().addRelationship(ppName, TargetMode.INTERNAL, XSSFRelation.IMAGES.getRelation()); addRelation(new XSSFPictureData(data.getPackagePart(), rel)); return rel; } diff --git a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFFactory.java b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFFactory.java index 0900183e85..40d55f2eab 100755 --- a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFFactory.java +++ b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFFactory.java @@ -39,8 +39,10 @@ public class XSSFFactory extends POIXMLFactory { } + private static final XSSFFactory inst = new XSSFFactory(); + public static XSSFFactory getInstance(){ - return new XSSFFactory(); + return inst; } public POIXMLDocumentPart createDocumentPart(PackageRelationship rel, PackagePart part){ @@ -52,7 +54,7 @@ public class XSSFFactory extends POIXMLFactory { try { Class cls = descriptor.getRelationClass(); - Constructor constructor = cls.getConstructor(PackagePart.class, PackageRelationship.class); + Constructor constructor = cls.getDeclaredConstructor(PackagePart.class, PackageRelationship.class); return constructor.newInstance(part, rel); } catch (Exception e){ throw new POIXMLException(e); @@ -62,7 +64,7 @@ public class XSSFFactory extends POIXMLFactory { public POIXMLDocumentPart newDocumentPart(POIXMLRelation descriptor){ try { Class cls = descriptor.getRelationClass(); - Constructor constructor = cls.getConstructor(); + Constructor constructor = cls.getDeclaredConstructor(); return constructor.newInstance(); } catch (Exception e){ throw new POIXMLException(e); diff --git a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFFirstFooter.java b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFFirstFooter.java index 7d2df77d75..bd5c0f1f93 100644 --- a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFFirstFooter.java +++ b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFFirstFooter.java @@ -23,7 +23,7 @@ import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTHeaderFooter; public class XSSFFirstFooter extends XSSFHeaderFooter implements Footer{ - public XSSFFirstFooter(CTHeaderFooter headerFooter) { + protected XSSFFirstFooter(CTHeaderFooter headerFooter) { super(headerFooter); } diff --git a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFFirstHeader.java b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFFirstHeader.java index 27a7520d42..9cd4044855 100644 --- a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFFirstHeader.java +++ b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFFirstHeader.java @@ -23,7 +23,7 @@ import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTHeaderFooter; public class XSSFFirstHeader extends XSSFHeaderFooter implements Header{ - public XSSFFirstHeader(CTHeaderFooter headerFooter) { + protected XSSFFirstHeader(CTHeaderFooter headerFooter) { super(headerFooter); } diff --git a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFOddHeader.java b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFOddHeader.java index 5ee37cc00a..5f1aa9c036 100644 --- a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFOddHeader.java +++ b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFOddHeader.java @@ -23,7 +23,7 @@ import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTHeaderFooter; public class XSSFOddHeader extends XSSFHeaderFooter implements Header{ - public XSSFOddHeader(CTHeaderFooter headerFooter) { + protected XSSFOddHeader(CTHeaderFooter headerFooter) { super(headerFooter); } diff --git a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFPictureData.java b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFPictureData.java index eebd5d6d4b..851c85af5d 100644 --- a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFPictureData.java +++ b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFPictureData.java @@ -52,8 +52,8 @@ public class XSSFPictureData extends POIXMLDocumentPart implements PictureData { * * @see org.apache.poi.xssf.usermodel.XSSFWorkbook#addPicture(byte[], int) */ - public XSSFPictureData() { - super(null, null); + protected XSSFPictureData() { + super(); } /** @@ -63,7 +63,7 @@ public class XSSFPictureData extends POIXMLDocumentPart implements PictureData { * @param rel the package relationship holding this drawing, * the relationship type must be http://schemas.openxmlformats.org/officeDocument/2006/relationships/image */ - public XSSFPictureData(PackagePart part, PackageRelationship rel) { + protected XSSFPictureData(PackagePart part, PackageRelationship rel) { super(part, rel); } diff --git a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFPrintSetup.java b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFPrintSetup.java index 22f48f9407..6231c47ba7 100755 --- a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFPrintSetup.java +++ b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFPrintSetup.java @@ -31,7 +31,7 @@ public class XSSFPrintSetup implements PrintSetup { private CTPageMargins pageMargins; - public XSSFPrintSetup(CTWorksheet worksheet) { + protected XSSFPrintSetup(CTWorksheet worksheet) { this.ctWorksheet = worksheet; this.pageSetup = ctWorksheet.getPageSetup() == null ? ctWorksheet.addNewPageSetup() : ctWorksheet.getPageSetup(); this.pageMargins = ctWorksheet.getPageMargins() == null ? ctWorksheet.addNewPageMargins() : ctWorksheet.getPageMargins(); diff --git a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFShape.java b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFShape.java index ad6c27271b..cd6c2208df 100755 --- a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFShape.java +++ b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFShape.java @@ -16,11 +16,6 @@ ==================================================================== */ package org.apache.poi.xssf.usermodel; -import org.apache.xmlbeans.XmlObject; -import org.openxmlformats.schemas.drawingml.x2006.spreadsheetDrawing.CTTwoCellAnchor; -import org.openxmlformats.schemas.drawingml.x2006.spreadsheetDrawing.CTAbsoluteAnchor; -import org.openxmlformats.schemas.drawingml.x2006.spreadsheetDrawing.CTOneCellAnchor; -import org.openxmlformats.schemas.drawingml.x2006.chartDrawing.CTGroupShape; import org.openxmlformats.schemas.drawingml.x2006.main.*; /** diff --git a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFShapeGroup.java b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFShapeGroup.java index f483393a70..686a8f0378 100755 --- a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFShapeGroup.java +++ b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFShapeGroup.java @@ -18,11 +18,7 @@ package org.apache.poi.xssf.usermodel; import org.openxmlformats.schemas.drawingml.x2006.spreadsheetDrawing.*; import org.openxmlformats.schemas.drawingml.x2006.main.*; -import org.openxml4j.opc.PackagePartName; import org.openxml4j.opc.PackageRelationship; -import org.openxml4j.opc.TargetMode; - -import java.util.List; /** * This object specifies a group shape that represents many shapes grouped together. This shape is to be treated @@ -43,7 +39,7 @@ public class XSSFShapeGroup extends XSSFShape { * @param drawing the XSSFDrawing that owns this shape * @param ctGroup the XML bean that stores this group content */ - public XSSFShapeGroup(XSSFDrawing drawing, CTGroupShape ctGroup) { + protected XSSFShapeGroup(XSSFDrawing drawing, CTGroupShape ctGroup) { this.drawing = drawing; this.ctGroup = ctGroup; } diff --git a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFSheet.java b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFSheet.java index 8ee5cd6f5c..8efef69b48 100644 --- a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFSheet.java +++ b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFSheet.java @@ -24,16 +24,13 @@ import javax.xml.namespace.QName; import org.apache.poi.hssf.util.PaneInformation; import org.apache.poi.ss.usermodel.CellStyle; -import org.apache.poi.ss.usermodel.CommentsSource; import org.apache.poi.ss.usermodel.Footer; import org.apache.poi.ss.usermodel.Header; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.util.CellRangeAddress; import org.apache.poi.ss.util.CellReference; -import org.apache.poi.ss.util.Region; import org.apache.poi.xssf.model.CommentsTable; -import org.apache.poi.xssf.model.Control; import org.apache.poi.xssf.usermodel.helpers.ColumnHelper; import org.apache.poi.POIXMLDocumentPart; import org.apache.poi.POIXMLException; @@ -44,6 +41,7 @@ import org.apache.xmlbeans.XmlException; import org.openxml4j.opc.PackagePart; import org.openxml4j.opc.PackageRelationship; import org.openxml4j.opc.PackageRelationshipCollection; +import org.openxml4j.exceptions.InvalidFormatException; import org.openxmlformats.schemas.spreadsheetml.x2006.main.*; import org.openxmlformats.schemas.officeDocument.x2006.relationships.STRelationshipId; @@ -71,20 +69,30 @@ public class XSSFSheet extends POIXMLDocumentPart implements Sheet { protected CTSheet sheet; protected CTWorksheet worksheet; - protected TreeMap rows; - protected List hyperlinks; - protected ColumnHelper columnHelper; - private CommentsSource sheetComments; + private TreeMap rows; + private List hyperlinks; + private ColumnHelper columnHelper; + private CommentsTable sheetComments; - public XSSFSheet() { - super(null, null); - this.worksheet = newSheet(); - initialize(); + /** + * Creates new XSSFSheet - called by XSSFWorkbook to create a sheet from scratch. + * + * @see org.apache.poi.xssf.usermodel.XSSFWorkbook#createSheet() + */ + protected XSSFSheet() { + super(); + onDocumentCreate(); } - public XSSFSheet(PackagePart part, PackageRelationship rel) throws IOException, XmlException { + /** + * Creates an XSSFSheet representing the given package part and relationship. + * Should only be called by XSSFWorkbook when reading in an exisiting file. + * + * @param part - The package part that holds xml data represenring this sheet. + * @param rel - the relationship of the given package part in the underlying OPC package + */ + protected XSSFSheet(PackagePart part, PackageRelationship rel) { super(part, rel); - worksheet = WorksheetDocument.Factory.parse(part.getInputStream()).getWorksheet(); } /** @@ -96,25 +104,81 @@ public class XSSFSheet extends POIXMLDocumentPart implements Sheet { return (XSSFWorkbook)getParent(); } - protected void initialize(){ - if (this.worksheet.getSheetData() == null) { - this.worksheet.addNewSheetData(); + /** + * Initialize worksheet data when reading in an exisiting file. + */ + @Override + protected void onDocumentRead() { + try { + worksheet = WorksheetDocument.Factory.parse(getPackagePart().getInputStream()).getWorksheet(); + } catch (XmlException e){ + throw new POIXMLException(e); + } catch (IOException e){ + throw new POIXMLException(e); } - initRows(this.worksheet); - initColumns(this.worksheet); + + initRows(worksheet); + columnHelper = new ColumnHelper(worksheet); for(POIXMLDocumentPart p : getRelations()){ if(p instanceof CommentsTable) sheetComments = (CommentsTable)p; } + // Process external hyperlinks for the sheet, if there are any + initHyperlinks(); + } + + /** + * Initialize worksheet data when creating a new sheet. + */ + @Override + protected void onDocumentCreate(){ + worksheet = newSheet(); + initRows(worksheet); + columnHelper = new ColumnHelper(worksheet); + hyperlinks = new ArrayList(); + } + + private void initRows(CTWorksheet worksheet) { + rows = new TreeMap(); + for (CTRow row : worksheet.getSheetData().getRowArray()) { + XSSFRow r = new XSSFRow(row, this); + rows.put(r.getRowNum(), r); + } + } + + /** + * Read hyperlink relations, link them with CTHyperlink beans in this worksheet + * and initialize the internal array of XSSFHyperlink objects + */ + private void initHyperlinks() { hyperlinks = new ArrayList(); + + if(!worksheet.isSetHyperlinks()) return; + + try { + PackageRelationshipCollection hyperRels = + getPackagePart().getRelationshipsByType(XSSFRelation.SHEET_HYPERLINKS.getRelation()); + + // Turn each one into a XSSFHyperlink + for(CTHyperlink hyperlink : worksheet.getHyperlinks().getHyperlinkArray()) { + PackageRelationship hyperRel = null; + if(hyperlink.getId() != null) { + hyperRel = hyperRels.getRelationshipByID(hyperlink.getId()); + } + + hyperlinks.add( new XSSFHyperlink(hyperlink, hyperRel) ); + } + } catch (InvalidFormatException e){ + throw new POIXMLException(e); + } } /** - * Create a new CTWorksheet instance and setup default values + * Create a new CTWorksheet instance with all values set to defaults * * @return a new instance */ - protected static CTWorksheet newSheet(){ + private static CTWorksheet newSheet(){ CTWorksheet worksheet = CTWorksheet.Factory.newInstance(); CTSheetFormatPr ctFormat = worksheet.addNewSheetFormatPr(); ctFormat.setDefaultRowHeight(15.0); @@ -137,17 +201,12 @@ public class XSSFSheet extends POIXMLDocumentPart implements Sheet { return worksheet; } - public List getControls() - { - return null; - } - /** - * Provide access to the underlying XML bean + * Provide access to the CTWorksheet bean holding this sheet's data * - * @return the underlying CTWorksheet bean + * @return the CTWorksheet bean holding this sheet's data */ - public CTWorksheet getWorksheet() { + public CTWorksheet getCTWorksheet() { return this.worksheet; } @@ -155,48 +214,16 @@ public class XSSFSheet extends POIXMLDocumentPart implements Sheet { return columnHelper; } - protected void initRows(CTWorksheet worksheet) { - this.rows = new TreeMap(); - for (CTRow row : worksheet.getSheetData().getRowArray()) { - XSSFRow r = new XSSFRow(row, this); - this.rows.put(r.getRowNum(), r); - } - } - - protected void initColumns(CTWorksheet worksheet) { - columnHelper = new ColumnHelper(worksheet); - } - - protected void initHyperlinks(PackageRelationshipCollection hyperRels) { - if(worksheet.getHyperlinks() == null) return; - - // Turn each one into a XSSFHyperlink - for(CTHyperlink hyperlink : worksheet.getHyperlinks().getHyperlinkArray()) { - PackageRelationship hyperRel = null; - if(hyperlink.getId() != null) { - hyperRel = hyperRels.getRelationshipByID(hyperlink.getId()); - } - - hyperlinks.add( - new XSSFHyperlink(hyperlink, hyperRel) - ); - } - } - - protected CTSheet getSheet() { - return this.sheet; - } + /** + * Sdds a merged region of cells (hence those cells form one) + * + * @param cra (rowfrom/colfrom-rowto/colto) to merge + * @return index of this region + */ public int addMergedRegion(CellRangeAddress cra) { - Region r = new Region(cra.getFirstRow(), (short)cra.getFirstColumn(), - cra.getLastRow(), (short)cra.getLastColumn()); - return addMergedRegion(r); - } - - - public int addMergedRegion(Region region) { CTMergeCells ctMergeCells = worksheet.isSetMergeCells() ? worksheet.getMergeCells() : worksheet.addNewMergeCells(); CTMergeCell ctMergeCell = ctMergeCells.addNewMergeCell(); - ctMergeCell.setRef(region.getRegionRef()); + ctMergeCell.setRef(cra.formatAsString()); return ctMergeCells.sizeOfMergeCellArray(); } @@ -215,11 +242,11 @@ public class XSSFSheet extends POIXMLDocumentPart implements Sheet { /** * Adjusts the column width to fit the contents. - * + *

* This process can be relatively slow on large sheets, so this should * normally only be called once per column, at the end of your * processing. - * + *

* You can specify whether the content of merged cells should be considered or ignored. * Default is to ignore merged cells. * @@ -305,7 +332,7 @@ public class XSSFSheet extends POIXMLDocumentPart implements Sheet { if (sheetComments == null) { sheetComments = (CommentsTable)createRelationship(XSSFRelation.SHEET_COMMENTS, XSSFFactory.getInstance(), (int)sheet.getSheetId()); } - return (XSSFComment)sheetComments.addComment(); + return sheetComments.addComment(); } /** @@ -341,19 +368,9 @@ public class XSSFSheet extends POIXMLDocumentPart implements Sheet { getPane().setActivePane(STPane.Enum.forInt(activePane)); } - public boolean getAlternateExpression() { - // TODO Auto-generated method stub - return false; - } - - public boolean getAlternateFormula() { - // TODO Auto-generated method stub - return false; - } - public XSSFComment getCellComment(int row, int column) { if (sheetComments == null) return null; - else return (XSSFComment)sheetComments.findCellComment(row, column); + else return sheetComments.findCellComment(row, column); } public XSSFHyperlink getHyperlink(int row, int column) { @@ -480,13 +497,7 @@ public class XSSFSheet extends POIXMLDocumentPart implements Sheet { * @return the number of the first logical row on the sheet, zero based */ public int getFirstRowNum() { - for (Iterator it = rowIterator() ; it.hasNext() ; ) { - Row row = it.next(); - if (row != null) { - return row.getRowNum(); - } - } - return -1; + return rows.size() == 0 ? -1 : rows.firstKey(); } /** @@ -602,14 +613,7 @@ public class XSSFSheet extends POIXMLDocumentPart implements Sheet { } public int getLastRowNum() { - int lastRowNum = -1; - for (Iterator it = rowIterator() ; it.hasNext() ; ) { - Row row = it.next(); - if (row != null) { - lastRowNum = row.getRowNum(); - } - } - return lastRowNum; + return rows.size() == 0 ? -1 : rows.lastKey(); } public short getLeftCol() { @@ -618,43 +622,74 @@ public class XSSFSheet extends POIXMLDocumentPart implements Sheet { return cellReference.getCol(); } + /** + * Gets the size of the margin in inches. + * + * @param margin which margin to get + * @return the size of the margin + * @see Sheet#LeftMargin + * @see Sheet#RightMargin + * @see Sheet#TopMargin + * @see Sheet#BottomMargin + * @see Sheet#HeaderMargin + * @see Sheet#FooterMargin + */ public double getMargin(short margin) { - CTPageMargins pageMargins = getSheetTypePageMargins(); + if (!worksheet.isSetPageMargins()) return 0; + + CTPageMargins pageMargins = worksheet.getPageMargins(); switch (margin) { - case LeftMargin: - return pageMargins.getLeft(); - case RightMargin: - return pageMargins.getRight(); - case TopMargin: - return pageMargins.getTop(); - case BottomMargin: - return pageMargins.getBottom(); - case HeaderMargin: - return pageMargins.getHeader(); - case FooterMargin: - return pageMargins.getFooter(); - default : - throw new POIXMLException( "Unknown margin constant: " + margin ); + case LeftMargin: + return pageMargins.getLeft(); + case RightMargin: + return pageMargins.getRight(); + case TopMargin: + return pageMargins.getTop(); + case BottomMargin: + return pageMargins.getBottom(); + case HeaderMargin: + return pageMargins.getHeader(); + case FooterMargin: + return pageMargins.getFooter(); + default : + throw new POIXMLException("Unknown margin constant: " + margin); } } - protected CTPageMargins getSheetTypePageMargins() { - if (worksheet.getPageMargins() == null) { - worksheet.setPageMargins(CTPageMargins.Factory.newInstance()); + /** + * Sets the size of the margin in inches. + * + * @param margin which margin to get + * @param size the size of the margin + * @see Sheet#LeftMargin + * @see Sheet#RightMargin + * @see Sheet#TopMargin + * @see Sheet#BottomMargin + * @see Sheet#HeaderMargin + * @see Sheet#FooterMargin + */ + public void setMargin(short margin, double size) { + CTPageMargins pageMargins = worksheet.isSetPageMargins() ? + worksheet.getPageMargins() : worksheet.addNewPageMargins(); + switch (margin) { + case LeftMargin: + pageMargins.setLeft(size); + case RightMargin: + pageMargins.setRight(size); + case TopMargin: + pageMargins.setTop(size); + case BottomMargin: + pageMargins.setBottom(size); + case HeaderMargin: + pageMargins.setHeader(size); + case FooterMargin: + pageMargins.setFooter(size); } - return worksheet.getPageMargins(); - } - - public Region getMergedRegionAt(int index) { - CTMergeCells ctMergeCells = worksheet.getMergeCells(); - if(ctMergeCells == null) throw new IllegalStateException("This worksheet does not contain merged regions"); - - CTMergeCell ctMergeCell = ctMergeCells.getMergeCellArray(index); - return new Region(ctMergeCell.getRef()); } /** * @return the merged region at the specified index + * @throws IllegalStateException if this worksheet does not contain merged regions */ public CellRangeAddress getMergedRegion(int index) { CTMergeCells ctMergeCells = worksheet.getMergeCells(); @@ -667,6 +702,11 @@ public class XSSFSheet extends POIXMLDocumentPart implements Sheet { return new CellRangeAddress(cell1.getRow(), cell2.getRow(), cell1.getCol(), cell2.getCol()); } + /** + * Returns the number of merged regions defined in this worksheet + * + * @return number of merged regions in this worksheet + */ public int getNumMergedRegions() { CTMergeCells ctMergeCells = worksheet.getMergeCells(); return ctMergeCells == null ? 0 : ctMergeCells.sizeOfMergeCellArray(); @@ -676,38 +716,36 @@ public class XSSFSheet extends POIXMLDocumentPart implements Sheet { return hyperlinks.size(); } - public boolean getObjectProtect() { - // TODO Auto-generated method stub - return false; - } - public PaneInformation getPaneInformation() { // TODO Auto-generated method stub return null; } - public short getPassword() { - // TODO Auto-generated method stub - return 0; - } - + /** + * Returns the number of phsyically defined rows (NOT the number of rows in the sheet) + * + * @return the number of phsyically defined rows + */ public int getPhysicalNumberOfRows() { - int counter = 0; - for (Iterator it = rowIterator() ; it.hasNext() ; ) { - if (it.next() != null) { - counter++; - } - } - return counter; + return rows.size(); } + /** + * Gets the print setup object. + * + * @return The user model for the print setup object. + */ public XSSFPrintSetup getPrintSetup() { - return new XSSFPrintSetup(getWorksheet()); + return new XSSFPrintSetup(worksheet); } + /** + * Answer whether protection is enabled or disabled + * + * @return true => protection enabled; false => protection disabled + */ public boolean getProtect() { - // TODO Auto-generated method stub - return false; + return worksheet.isSetSheetProtection() && worksheet.getSheetProtection().getSheet(); } /** @@ -757,8 +795,8 @@ public class XSSFSheet extends POIXMLDocumentPart implements Sheet { public boolean getRowSumsBelow() { CTSheetPr sheetPr = worksheet.getSheetPr(); CTOutlinePr outlinePr = (sheetPr != null && sheetPr.isSetOutlinePr()) - ? sheetPr.getOutlinePr() : CTOutlinePr.Factory.newInstance(); - return outlinePr.getSummaryBelow(); + ? sheetPr.getOutlinePr() : null; + return outlinePr == null || outlinePr.getSummaryBelow(); } /** @@ -821,8 +859,7 @@ public class XSSFSheet extends POIXMLDocumentPart implements Sheet { */ private CTOutlinePr ensureOutlinePr(){ CTSheetPr sheetPr = worksheet.isSetSheetPr() ? worksheet.getSheetPr() : worksheet.addNewSheetPr(); - CTOutlinePr outlinePr = sheetPr.isSetOutlinePr() ? sheetPr.getOutlinePr() : sheetPr.addNewOutlinePr(); - return outlinePr; + return sheetPr.isSetOutlinePr() ? sheetPr.getOutlinePr() : sheetPr.addNewOutlinePr(); } /** @@ -831,14 +868,7 @@ public class XSSFSheet extends POIXMLDocumentPart implements Sheet { * @return true => protection enabled; false => protection disabled */ public boolean getScenarioProtect() { - return getSheetTypeProtection().getScenarios(); - } - - protected CTSheetProtection getSheetTypeProtection() { - if (worksheet.getSheetProtection() == null) { - worksheet.setSheetProtection(CTSheetProtection.Factory.newInstance()); - } - return worksheet.getSheetProtection(); + return worksheet.isSetSheetProtection() && worksheet.getSheetProtection().getScenarios(); } /** @@ -1015,11 +1045,6 @@ public class XSSFSheet extends POIXMLDocumentPart implements Sheet { } } - public void protectSheet(String password) { - // TODO Auto-generated method stub - - } - /** * Removes a merged region of cells (hence letting them free) * @@ -1040,8 +1065,12 @@ public class XSSFSheet extends POIXMLDocumentPart implements Sheet { ctMergeCells.setMergeCellArray(mergeCellsArray); } + /** + * Remove a row from this sheet. All cells contained in the row are removed as well + * + * @param row the row to remove. + */ public void removeRow(Row row) { - rows.remove(row.getRowNum()); } @@ -1227,24 +1256,6 @@ public class XSSFSheet extends POIXMLDocumentPart implements Sheet { getSheetTypePrintOptions().setHorizontalCentered(value); } - public void setMargin(short margin, double size) { - CTPageMargins pageMargins = getSheetTypePageMargins(); - switch (margin) { - case LeftMargin: - pageMargins.setLeft(size); - case RightMargin: - pageMargins.setRight(size); - case TopMargin: - pageMargins.setTop(size); - case BottomMargin: - pageMargins.setBottom(size); - case HeaderMargin: - pageMargins.setHeader(size); - case FooterMargin: - pageMargins.setFooter(size); - } - } - public void setPrintGridlines(boolean newPrintGridlines) { getSheetTypePrintOptions().setGridLines(newPrintGridlines); } @@ -1474,7 +1485,7 @@ public class XSSFSheet extends POIXMLDocumentPart implements Sheet { getSheetTypeSheetFormatPr().setOutlineLevelCol(maxLevelCol); } - protected CTSheetViews getSheetTypeSheetViews() { + private CTSheetViews getSheetTypeSheetViews() { if (worksheet.getSheetViews() == null) { worksheet.setSheetViews(CTSheetViews.Factory.newInstance()); worksheet.getSheetViews().addNewSheetView(); @@ -1560,6 +1571,7 @@ public class XSSFSheet extends POIXMLDocumentPart implements Sheet { if(sheetComments == null) { return false; } return (sheetComments.getNumberOfComments() > 0); } + protected int getNumberOfComments() { if(sheetComments == null) { return 0; } return sheetComments.getNumberOfComments(); @@ -1593,7 +1605,7 @@ public class XSSFSheet extends POIXMLDocumentPart implements Sheet { * Returns the sheet's comments object if there is one, * or null if not */ - protected CommentsSource getCommentsSourceIfExists() { + protected CommentsTable getCommentsSourceIfExists() { return sheetComments; } diff --git a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFTextBox.java b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFTextBox.java index 85032ab171..a708a759fd 100755 --- a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFTextBox.java +++ b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFTextBox.java @@ -17,7 +17,6 @@ package org.apache.poi.xssf.usermodel; import org.openxmlformats.schemas.drawingml.x2006.spreadsheetDrawing.*; -import org.openxmlformats.schemas.drawingml.x2006.main.*; /** * Represents a text box in a SpreadsheetML drawing. diff --git a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFWorkbook.java b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFWorkbook.java index eeb8b37a7a..ffdbceec16 100644 --- a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFWorkbook.java +++ b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFWorkbook.java @@ -37,8 +37,8 @@ import org.apache.poi.xssf.model.*; import org.apache.poi.POIXMLException; import org.apache.xmlbeans.XmlObject; import org.apache.xmlbeans.XmlOptions; +import org.apache.xmlbeans.XmlException; import org.openxml4j.exceptions.OpenXML4JException; -import org.openxml4j.exceptions.InvalidFormatException; import org.openxml4j.opc.*; import org.openxml4j.opc.Package; import org.openxmlformats.schemas.spreadsheetml.x2006.main.*; @@ -104,26 +104,12 @@ public class XSSFWorkbook extends POIXMLDocument implements Workbook, Iterable embedds; - /** * Create a new SpreadsheetML workbook. */ public XSSFWorkbook() { - super(); - onDocumentCreate(); - } - - /** - * Constructs a XSSFWorkbook object given a file name. - * - * @param path the file name. - */ - public XSSFWorkbook(String path) throws IOException { - this(openPackage(path)); + super(newPackage()); + onWorkbookCreate(); } /** @@ -134,9 +120,25 @@ public class XSSFWorkbook extends POIXMLDocument implements Workbook, Iterable shIdMap = new HashMap(); + Map shIdMap = new HashMap(); for(POIXMLDocumentPart p : getRelations()){ if(p instanceof SharedStringsTable) sharedStringSource = (SharedStringsTable)p; else if(p instanceof StylesTable) stylesSource = (StylesTable)p; @@ -175,34 +171,16 @@ public class XSSFWorkbook extends POIXMLDocument implements Workbook, Iterable(); - embedds = new LinkedList(); + // Load individual sheets. The order of sheets is defined by the order of CTSheet beans in the workbook + sheets = new ArrayList(shIdMap.size()); for (CTSheet ctSheet : this.workbook.getSheets().getSheetArray()) { - String id = ctSheet.getId(); - XSSFSheet sh = shIdMap.get(id); - sh.sheet = ctSheet; + XSSFSheet sh = shIdMap.get(ctSheet.getId()); if(sh == null) { log.log(POILogger.WARN, "Sheet with name " + ctSheet.getName() + " and r:id " + ctSheet.getId()+ " was defined, but didn't exist in package, skipping"); continue; } - //initialize internal arrays of rows and columns - sh.initialize(); - - PackagePart sheetPart = sh.getPackagePart(); - // Process external hyperlinks for the sheet, - // if there are any - PackageRelationshipCollection hyperlinkRels = - sheetPart.getRelationshipsByType(XSSFRelation.SHEET_HYPERLINKS.getRelation()); - sh.initHyperlinks(hyperlinkRels); - - // Get the embeddings for the workbook - for(PackageRelationship rel : sheetPart.getRelationshipsByType(XSSFRelation.OLEEMBEDDINGS.getRelation())) - embedds.add(getTargetPart(rel)); // TODO: Add this reference to each sheet as well - - for(PackageRelationship rel : sheetPart.getRelationshipsByType(XSSFRelation.PACKEMBEDDINGS.getRelation())) - embedds.add(getTargetPart(rel)); - + sh.sheet = ctSheet; + sh.onDocumentRead(); sheets.add(sh); } @@ -212,20 +190,22 @@ public class XSSFWorkbook extends POIXMLDocument implements Workbook, Iterable(); + namedRanges = new ArrayList(); if(workbook.getDefinedNames() != null) { for(CTDefinedName ctName : workbook.getDefinedNames().getDefinedNameArray()) { namedRanges.add(new XSSFName(ctName, this)); } } - } catch (Exception e) { + } catch (XmlException e) { throw new POIXMLException(e); } } - @Override - protected void onDocumentCreate() { + /** + * Create a new CTWorkbook with all values set to default + */ + private void onWorkbookCreate() { workbook = CTWorkbook.Factory.newInstance(); CTBookViews bvs = workbook.addNewBookViews(); CTBookView bv = bvs.addNewWorkbookView(); @@ -235,15 +215,14 @@ public class XSSFWorkbook extends POIXMLDocument implements Workbook, Iterable(); - sheets = new LinkedList(); - embedds = new LinkedList(); + namedRanges = new ArrayList(); + sheets = new ArrayList(); } /** * Create a new SpreadsheetML package and setup the default minimal content */ - protected Package newPackage() throws IOException { + protected static Package newPackage() { try { Package pkg = Package.create(PackageHelper.createTempFile()); // Main part @@ -256,7 +235,7 @@ public class XSSFWorkbook extends POIXMLDocument implements Workbook, Iterable getAllPictures() { if(pictures == null) { @@ -642,10 +613,10 @@ public class XSSFWorkbook extends POIXMLDocument implements Workbook, Iterablenull if it does not exist */ public XSSFSheet getSheet(String name) { - CTSheet[] sheets = this.workbook.getSheets().getSheetArray(); - for (int i = 0 ; i < sheets.length ; ++i) { - if (name.equals(sheets[i].getName())) { - return this.sheets.get(i); + CTSheet[] ctSheets = this.workbook.getSheets().getSheetArray(); + for (int i = 0 ; i < ctSheets.length ; ++i) { + if (name.equalsIgnoreCase(ctSheets[i].getName())) { + return sheets.get(i); } } return null; @@ -656,22 +627,24 @@ public class XSSFWorkbook extends POIXMLDocument implements Workbook, Iterable-1 getAllEmbedds() throws OpenXML4JException { + List embedds = new LinkedList(); + + for(XSSFSheet sheet : sheets){ + // Get the embeddings for the workbook + for(PackageRelationship rel : sheet.getPackagePart().getRelationshipsByType(XSSFRelation.OLEEMBEDDINGS.getRelation())) + embedds.add(getTargetPart(rel)); + + for(PackageRelationship rel : sheet.getPackagePart().getRelationshipsByType(XSSFRelation.PACKEMBEDDINGS.getRelation())) + embedds.add(getTargetPart(rel)); + + } return embedds; } } diff --git a/src/ooxml/testcases/org/apache/poi/xssf/model/TestStylesTable.java b/src/ooxml/testcases/org/apache/poi/xssf/model/TestStylesTable.java index 26ce623d24..fc16beaf77 100644 --- a/src/ooxml/testcases/org/apache/poi/xssf/model/TestStylesTable.java +++ b/src/ooxml/testcases/org/apache/poi/xssf/model/TestStylesTable.java @@ -118,8 +118,8 @@ public class TestStylesTable extends TestCase { assertEquals(1, st._getStyleXfsSize()); assertEquals(0, st._getNumberFormatSize()); - long nf1 = st.putNumberFormat("yyyy-mm-dd"); - long nf2 = st.putNumberFormat("yyyy-mm-DD"); + int nf1 = st.putNumberFormat("yyyy-mm-dd"); + int nf2 = st.putNumberFormat("yyyy-mm-DD"); assertEquals(nf1, st.putNumberFormat("yyyy-mm-dd")); st.putStyle(new XSSFCellStyle(st)); @@ -146,8 +146,8 @@ public class TestStylesTable extends TestCase { assertEquals(1, st._getStyleXfsSize()); assertEquals(8, st._getNumberFormatSize()); - long nf1 = st.putNumberFormat("YYYY-mm-dd"); - long nf2 = st.putNumberFormat("YYYY-mm-DD"); + int nf1 = st.putNumberFormat("YYYY-mm-dd"); + int nf2 = st.putNumberFormat("YYYY-mm-DD"); assertEquals(nf1, st.putNumberFormat("YYYY-mm-dd")); st = XSSFTestDataSamples.writeOutAndReadBack(workbook).getStylesSource(); diff --git a/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFCell.java b/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFCell.java index 87454dba47..7850d6ddca 100644 --- a/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFCell.java +++ b/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFCell.java @@ -369,7 +369,7 @@ public final class TestXSSFCell extends TestCase { Cell cell = sheet.createRow(0).createCell((short)0); cell.setAsActiveCell(); - assertEquals("A1", sheet.getWorksheet().getSheetViews().getSheetViewArray(0).getSelectionArray(0).getActiveCell()); + assertEquals("A1", sheet.getCTWorksheet().getSheetViews().getSheetViewArray(0).getSelectionArray(0).getActiveCell()); } diff --git a/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFDialogSheet.java b/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFDialogSheet.java index e57d8825e5..012b2bd67e 100644 --- a/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFDialogSheet.java +++ b/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFDialogSheet.java @@ -22,7 +22,6 @@ import junit.framework.TestCase; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTDialogsheet; -import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTSheet; public class TestXSSFDialogSheet extends TestCase { @@ -51,7 +50,7 @@ public class TestXSSFDialogSheet extends TestCase { public void testGetSetAutoBreaks() { XSSFWorkbook workbook = new XSSFWorkbook(); - XSSFDialogsheet sheet = (XSSFDialogsheet) workbook.createDialogsheet("Dialogsheet 1", null); + XSSFDialogsheet sheet = workbook.createDialogsheet("Dialogsheet 1", null); assertTrue(sheet.getAutobreaks()); sheet.setAutobreaks(false); assertFalse(sheet.getAutobreaks()); @@ -59,7 +58,7 @@ public class TestXSSFDialogSheet extends TestCase { public void testIsSetFitToPage() { XSSFWorkbook workbook = new XSSFWorkbook(); - XSSFDialogsheet sheet = (XSSFDialogsheet) workbook.createDialogsheet("Dialogsheet 1", null); + XSSFDialogsheet sheet = workbook.createDialogsheet("Dialogsheet 1", null); assertFalse(sheet.getFitToPage()); sheet.setFitToPage(true); assertTrue(sheet.getFitToPage()); @@ -69,7 +68,7 @@ public class TestXSSFDialogSheet extends TestCase { public void testGetSetMargin() { XSSFWorkbook workbook = new XSSFWorkbook(); - XSSFDialogsheet sheet = (XSSFDialogsheet) workbook.createDialogsheet("Dialogsheet 1", null); + XSSFDialogsheet sheet = workbook.createDialogsheet("Dialogsheet 1", null); assertEquals((double) 0, sheet.getMargin((short) 0)); sheet.setMargin((short) 0, 10); assertEquals((double) 10, sheet.getMargin((short) 0)); @@ -111,7 +110,7 @@ public class TestXSSFDialogSheet extends TestCase { public void testGetFooter() { XSSFWorkbook workbook = new XSSFWorkbook(); - XSSFDialogsheet sheet = (XSSFDialogsheet) workbook.createDialogsheet("Dialogsheet 1", null); + XSSFDialogsheet sheet = workbook.createDialogsheet("Dialogsheet 1", null); assertNotNull(sheet.getFooter()); sheet.getFooter().setCenter("test center footer"); assertEquals("test center footer", sheet.getFooter().getCenter()); @@ -119,7 +118,7 @@ public class TestXSSFDialogSheet extends TestCase { public void testGetAllHeadersFooters() { XSSFWorkbook workbook = new XSSFWorkbook(); - XSSFDialogsheet sheet = (XSSFDialogsheet) workbook.createDialogsheet("Dialogsheet 1", null); + XSSFDialogsheet sheet = workbook.createDialogsheet("Dialogsheet 1", null); assertNotNull(sheet); assertNotNull(sheet.getOddFooter()); assertNotNull(sheet.getEvenFooter()); @@ -156,7 +155,7 @@ public class TestXSSFDialogSheet extends TestCase { public void testGetSetHorizontallyCentered() { XSSFWorkbook workbook = new XSSFWorkbook(); - XSSFDialogsheet sheet = (XSSFDialogsheet) workbook.createDialogsheet("Dialogsheet 1", null); + XSSFDialogsheet sheet = workbook.createDialogsheet("Dialogsheet 1", null); assertFalse(sheet.getHorizontallyCenter()); sheet.setHorizontallyCenter(true); assertTrue(sheet.getHorizontallyCenter()); @@ -166,7 +165,7 @@ public class TestXSSFDialogSheet extends TestCase { public void testGetSetVerticallyCentered() { XSSFWorkbook workbook = new XSSFWorkbook(); - XSSFDialogsheet sheet = (XSSFDialogsheet) workbook.createDialogsheet("Dialogsheet 1", null); + XSSFDialogsheet sheet = workbook.createDialogsheet("Dialogsheet 1", null); assertFalse(sheet.getVerticallyCenter()); sheet.setVerticallyCenter(true); assertTrue(sheet.getVerticallyCenter()); @@ -176,7 +175,7 @@ public class TestXSSFDialogSheet extends TestCase { public void testIsSetPrintGridlines() { XSSFWorkbook workbook = new XSSFWorkbook(); - XSSFDialogsheet sheet = (XSSFDialogsheet) workbook.createDialogsheet("Dialogsheet 1", null); + XSSFDialogsheet sheet = workbook.createDialogsheet("Dialogsheet 1", null); assertFalse(sheet.isPrintGridlines()); sheet.setPrintGridlines(true); assertTrue(sheet.isPrintGridlines()); @@ -184,7 +183,7 @@ public class TestXSSFDialogSheet extends TestCase { public void testIsSetDisplayFormulas() { XSSFWorkbook workbook = new XSSFWorkbook(); - XSSFDialogsheet sheet = (XSSFDialogsheet) workbook.createDialogsheet("Dialogsheet 1", null); + XSSFDialogsheet sheet = workbook.createDialogsheet("Dialogsheet 1", null); assertFalse(sheet.isDisplayFormulas()); sheet.setDisplayFormulas(true); assertTrue(sheet.isDisplayFormulas()); @@ -192,7 +191,7 @@ public class TestXSSFDialogSheet extends TestCase { public void testIsSetDisplayGridLines() { XSSFWorkbook workbook = new XSSFWorkbook(); - XSSFDialogsheet sheet = (XSSFDialogsheet) workbook.createDialogsheet("Dialogsheet 1", null); + XSSFDialogsheet sheet = workbook.createDialogsheet("Dialogsheet 1", null); assertTrue(sheet.isDisplayGridlines()); sheet.setDisplayGridlines(false); assertFalse(sheet.isDisplayGridlines()); @@ -200,7 +199,7 @@ public class TestXSSFDialogSheet extends TestCase { public void testIsSetDisplayRowColHeadings() { XSSFWorkbook workbook = new XSSFWorkbook(); - XSSFDialogsheet sheet = (XSSFDialogsheet) workbook.createDialogsheet("Dialogsheet 1", null); + XSSFDialogsheet sheet = workbook.createDialogsheet("Dialogsheet 1", null); assertTrue(sheet.isDisplayRowColHeadings()); sheet.setDisplayRowColHeadings(false); assertFalse(sheet.isDisplayRowColHeadings()); @@ -208,7 +207,7 @@ public class TestXSSFDialogSheet extends TestCase { public void testGetScenarioProtect() { XSSFWorkbook workbook = new XSSFWorkbook(); - XSSFDialogsheet sheet = (XSSFDialogsheet) workbook.createDialogsheet("Dialogsheet 1", null); + XSSFDialogsheet sheet = workbook.createDialogsheet("Dialogsheet 1", null); assertFalse(sheet.getScenarioProtect()); } diff --git a/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFDrawing.java b/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFDrawing.java index 430924c856..34d49cf924 100755 --- a/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFDrawing.java +++ b/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFDrawing.java @@ -42,8 +42,8 @@ public class TestXSSFDrawing extends TestCase { String drawingId = drawing.getPackageRelationship().getId(); //there should be a relation to this drawing in the worksheet - assertTrue(sheet.getWorksheet().isSetDrawing()); - assertEquals(drawingId, sheet.getWorksheet().getDrawing().getId()); + assertTrue(sheet.getCTWorksheet().isSetDrawing()); + assertEquals(drawingId, sheet.getCTWorksheet().getDrawing().getId()); } @@ -63,8 +63,8 @@ public class TestXSSFDrawing extends TestCase { String drawingId = drawing.getPackageRelationship().getId(); //there should be a relation to this drawing in the worksheet - assertTrue(sheet.getWorksheet().isSetDrawing()); - assertEquals(drawingId, sheet.getWorksheet().getDrawing().getId()); + assertTrue(sheet.getCTWorksheet().isSetDrawing()); + assertEquals(drawingId, sheet.getCTWorksheet().getDrawing().getId()); } public void testMultipleDrawings(){ diff --git a/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFSheet.java b/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFSheet.java index 1e1ce24a69..49088df2c2 100644 --- a/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFSheet.java +++ b/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFSheet.java @@ -25,6 +25,7 @@ import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.ss.util.Region; +import org.apache.poi.ss.util.CellRangeAddress; import org.apache.poi.xssf.model.CommentsTable; import org.apache.poi.xssf.model.StylesTable; import org.apache.poi.xssf.usermodel.helpers.ColumnHelper; @@ -404,7 +405,7 @@ public class TestXSSFSheet extends TestCase { // Now check the low level stuff, and check that's all // been set correctly XSSFSheet xs = sheet; - CTWorksheet cts = xs.getWorksheet(); + CTWorksheet cts = xs.getCTWorksheet(); CTCols[] cols_s = cts.getColsArray(); assertEquals(1, cols_s.length); @@ -621,7 +622,7 @@ public class TestXSSFSheet extends TestCase { sheet.setCellComment("A1", comment); assertEquals("A1", ctComments.getCommentList().getCommentArray(0).getRef()); comment.setAuthor("test A1 author"); - assertEquals("test A1 author", comments.getAuthor(ctComments.getCommentList().getCommentArray(0).getAuthorId())); + assertEquals("test A1 author", comments.getAuthor((int)ctComments.getCommentList().getCommentArray(0).getAuthorId())); } public void testGetActiveCell() { @@ -636,7 +637,7 @@ public class TestXSSFSheet extends TestCase { public void testCreateFreezePane() { XSSFWorkbook workbook = new XSSFWorkbook(); XSSFSheet sheet = workbook.createSheet(); - CTWorksheet ctWorksheet = sheet.getWorksheet(); + CTWorksheet ctWorksheet = sheet.getCTWorksheet(); sheet.createFreezePane(2, 4); assertEquals((double)2, ctWorksheet.getSheetViews().getSheetViewArray(0).getPane().getXSplit()); @@ -653,17 +654,16 @@ public class TestXSSFSheet extends TestCase { public void testNewMergedRegionAt() { XSSFWorkbook workbook = new XSSFWorkbook(); XSSFSheet sheet = workbook.createSheet(); - Region region = new Region("B2:D4"); + CellRangeAddress region = CellRangeAddress.valueOf("B2:D4"); sheet.addMergedRegion(region); - assertEquals("B2:D4", sheet.getMergedRegionAt(0).getRegionRef()); + assertEquals("B2:D4", sheet.getMergedRegion(0).formatAsString()); } public void testGetNumMergedRegions() { XSSFWorkbook workbook = new XSSFWorkbook(); XSSFSheet sheet = workbook.createSheet(); - CTWorksheet ctWorksheet = sheet.getWorksheet(); assertEquals(0, sheet.getNumMergedRegions()); - Region region = new Region("B2:D4"); + CellRangeAddress region = CellRangeAddress.valueOf("B2:D4"); sheet.addMergedRegion(region); assertEquals(1, sheet.getNumMergedRegions()); } @@ -671,10 +671,10 @@ public class TestXSSFSheet extends TestCase { public void testRemoveMergedRegion() { XSSFWorkbook workbook = new XSSFWorkbook(); XSSFSheet sheet = workbook.createSheet(); - CTWorksheet ctWorksheet = sheet.getWorksheet(); - Region region_1 = new Region("A1:B2"); - Region region_2 = new Region("C3:D4"); - Region region_3 = new Region("E5:F6"); + CTWorksheet ctWorksheet = sheet.getCTWorksheet(); + CellRangeAddress region_1 = CellRangeAddress.valueOf("A1:B2"); + CellRangeAddress region_2 = CellRangeAddress.valueOf("C3:D4"); + CellRangeAddress region_3 = CellRangeAddress.valueOf("E5:F6"); sheet.addMergedRegion(region_1); sheet.addMergedRegion(region_2); sheet.addMergedRegion(region_3); @@ -691,7 +691,7 @@ public class TestXSSFSheet extends TestCase { public void testSetDefaultColumnStyle() { XSSFWorkbook workbook = new XSSFWorkbook(); XSSFSheet sheet = workbook.createSheet(); - CTWorksheet ctWorksheet = sheet.getWorksheet(); + CTWorksheet ctWorksheet = sheet.getCTWorksheet(); StylesTable stylesTable = workbook.getStylesSource(); XSSFFont font = new XSSFFont(); font.setFontName("Cambria"); @@ -750,7 +750,7 @@ public class TestXSSFSheet extends TestCase { //one level sheet.groupColumn((short)2,(short)7); sheet.groupColumn((short)10,(short)11); - CTCols cols=sheet.getWorksheet().getColsArray(0); + CTCols cols=sheet.getCTWorksheet().getColsArray(0); assertEquals(2,cols.sizeOfColArray()); CTCol[]colArray=cols.getColArray(); assertNotNull(colArray); @@ -760,7 +760,7 @@ public class TestXSSFSheet extends TestCase { //two level sheet.groupColumn((short)1,(short)2); - cols=sheet.getWorksheet().getColsArray(0); + cols=sheet.getCTWorksheet().getColsArray(0); assertEquals(4,cols.sizeOfColArray()); colArray=cols.getColArray(); assertEquals(2, colArray[1].getOutlineLevel()); @@ -768,7 +768,7 @@ public class TestXSSFSheet extends TestCase { //three level sheet.groupColumn((short)6,(short)8); sheet.groupColumn((short)2,(short)3); - cols=sheet.getWorksheet().getColsArray(0); + cols=sheet.getCTWorksheet().getColsArray(0); assertEquals(7,cols.sizeOfColArray()); colArray=cols.getColArray(); assertEquals(3, colArray[1].getOutlineLevel()); @@ -792,7 +792,7 @@ public class TestXSSFSheet extends TestCase { //one level sheet.groupRow(9,10); - assertEquals(2,sheet.rows.size()); + assertEquals(2,sheet.getPhysicalNumberOfRows()); CTRow ctrow = sheet.getRow(8).getCTRow(); assertNotNull(ctrow); @@ -802,7 +802,7 @@ public class TestXSSFSheet extends TestCase { //two level sheet.groupRow(10,13); - assertEquals(5,sheet.rows.size()); + assertEquals(5,sheet.getPhysicalNumberOfRows()); ctrow = sheet.getRow(9).getCTRow(); assertNotNull(ctrow); assertEquals(10,ctrow.getR()); @@ -811,11 +811,11 @@ public class TestXSSFSheet extends TestCase { sheet.ungroupRow(8, 10); - assertEquals(4,sheet.rows.size()); + assertEquals(4,sheet.getPhysicalNumberOfRows()); assertEquals(1,sheet.getSheetTypeSheetFormatPr().getOutlineLevelRow()); sheet.ungroupRow(10,10); - assertEquals(3,sheet.rows.size()); + assertEquals(3,sheet.getPhysicalNumberOfRows()); assertEquals(1,sheet.getSheetTypeSheetFormatPr().getOutlineLevelRow()); } diff --git a/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFWorkbook.java b/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFWorkbook.java index beaafb3e85..5d3c6ab35b 100644 --- a/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFWorkbook.java +++ b/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFWorkbook.java @@ -54,6 +54,8 @@ public final class TestXSSFWorkbook extends TestCase { public void testGetSetActiveSheet(){ XSSFWorkbook workbook = new XSSFWorkbook(); + assertEquals(0, workbook.getActiveSheetIndex()); + workbook.createSheet("sheet1"); workbook.createSheet("sheet2"); workbook.createSheet("sheet3"); @@ -84,7 +86,7 @@ public final class TestXSSFWorkbook extends TestCase { assertSame(sheet2, workbook.getSheetAt(0)); assertSame(sheet1, workbook.getSheetAt(1)); // Test reordering of CTSheets - CTWorkbook ctwb = workbook.getWorkbook(); + CTWorkbook ctwb = workbook.getCTWorkbook(); CTSheet[] ctsheets = ctwb.getSheets().getSheetArray(); assertEquals("sheet2", ctsheets[0].getName()); assertEquals("sheet1", ctsheets[1].getName()); @@ -334,19 +336,19 @@ public final class TestXSSFWorkbook extends TestCase { assertNotNull(cellStyleAt); //get custom style - StylesSource styleSource = workbook.getStylesSource(); + StylesTable styleSource = workbook.getStylesSource(); CellStyle customStyle = new XSSFCellStyle(styleSource); Font font = new XSSFFont(); font.setFontName("Verdana"); customStyle.setFont(font); - Long x = styleSource.putStyle(customStyle); - cellStyleAt = workbook.getCellStyleAt(x.shortValue()); + int x = styleSource.putStyle(customStyle); + cellStyleAt = workbook.getCellStyleAt((short)x); assertNotNull(cellStyleAt); } public void testGetFontAt(){ XSSFWorkbook workbook = new XSSFWorkbook(); - StylesSource styleSource = workbook.getStylesSource(); + StylesTable styleSource = workbook.getStylesSource(); short i = 0; //get default font Font fontAt = workbook.getFontAt(i); @@ -355,8 +357,8 @@ public final class TestXSSFWorkbook extends TestCase { //get customized font Font customFont = new XSSFFont(); customFont.setItalic(true); - Long x = styleSource.putFont(customFont); - fontAt = workbook.getFontAt(x.shortValue()); + int x = styleSource.putFont(customFont); + fontAt = workbook.getFontAt((short)x); assertNotNull(fontAt); } @@ -432,7 +434,7 @@ public final class TestXSSFWorkbook extends TestCase { public void testStyles() { XSSFWorkbook workbook = XSSFTestDataSamples.openSampleWorkbook("Formatting.xlsx"); - StylesSource ss = workbook.getStylesSource(); + StylesTable ss = workbook.getStylesSource(); assertNotNull(ss); assertTrue(ss instanceof StylesTable); StylesTable st = (StylesTable)ss; diff --git a/src/ooxml/testcases/org/apache/poi/xssf/usermodel/helpers/TestColumnHelper.java b/src/ooxml/testcases/org/apache/poi/xssf/usermodel/helpers/TestColumnHelper.java index 9e4fb761d0..089f258219 100644 --- a/src/ooxml/testcases/org/apache/poi/xssf/usermodel/helpers/TestColumnHelper.java +++ b/src/ooxml/testcases/org/apache/poi/xssf/usermodel/helpers/TestColumnHelper.java @@ -25,7 +25,6 @@ import org.apache.poi.xssf.usermodel.XSSFSheet; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTCol; import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTCols; -import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTSheet; import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTWorksheet; import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTXf; @@ -64,7 +63,7 @@ public final class TestColumnHelper extends TestCase { // Remember - POI column 0 == OOXML column 1 assertEquals((double) 88, helper.getColumn(0, false).getWidth()); assertTrue(helper.getColumn(0, false).getHidden()); - assertEquals((double) 00, helper.getColumn(1, false).getWidth()); + assertEquals((double)0, helper.getColumn(1, false).getWidth()); assertFalse(helper.getColumn(1, false).getHidden()); } @@ -260,7 +259,7 @@ public final class TestColumnHelper extends TestCase { public void testGetSetColDefaultStyle() { XSSFWorkbook workbook = new XSSFWorkbook(); XSSFSheet sheet = workbook.createSheet(); - CTWorksheet ctWorksheet = sheet.getWorksheet(); + CTWorksheet ctWorksheet = sheet.getCTWorksheet(); ColumnHelper columnHelper = sheet.getColumnHelper(); // POI column 3, OOXML column 4 @@ -271,7 +270,7 @@ public final class TestColumnHelper extends TestCase { columnHelper.setColDefaultStyle(3, 2); assertEquals(2, columnHelper.getColDefaultStyle(3)); assertEquals(-1, columnHelper.getColDefaultStyle(4)); - StylesTable stylesTable = (StylesTable) workbook.getStylesSource(); + StylesTable stylesTable = workbook.getStylesSource(); CTXf cellXf = CTXf.Factory.newInstance(); cellXf.setFontId(0); cellXf.setFillId(0);