From ead92fbe9a577eeb8c0d508a0280bd88143c4f23 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alain=20B=C3=A9arez?= Date: Wed, 10 Oct 2018 17:49:53 +0000 Subject: [PATCH] fix most alerts reported by LGTM on OOXML git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1843481 13f79535-47bb-0310-9956-ffa450edef68 --- .../poi/poifs/crypt/dsig/SignatureConfig.java | 100 +++++----- .../apache/poi/xdgf/usermodel/XDGFShape.java | 181 ++++++++++++------ .../apache/poi/xdgf/usermodel/XDGFText.java | 22 ++- .../poi/xdgf/util/HierarchyPrinter.java | 24 +-- .../org/apache/poi/xdgf/util/VsdxToPng.java | 19 +- .../poi/xslf/usermodel/XMLSlideShow.java | 6 +- .../apache/poi/xslf/usermodel/XSLFColor.java | 32 ++-- .../apache/poi/xslf/usermodel/XSLFNotes.java | 6 +- .../apache/poi/xslf/usermodel/XSLFShape.java | 93 +++++---- .../org/apache/poi/xslf/util/PPTX2PNG.java | 16 +- .../apache/poi/xssf/binary/XSSFBUtils.java | 2 +- .../apache/poi/xssf/streaming/SXSSFRow.java | 44 +++-- .../poi/xssf/usermodel/XSSFDrawing.java | 2 +- .../apache/poi/xssf/usermodel/XSSFRow.java | 77 +++++--- .../poi/xwpf/usermodel/XWPFSDTContent.java | 20 +- .../apache/poi/xwpf/usermodel/XWPFTable.java | 107 ++++++----- 16 files changed, 429 insertions(+), 322 deletions(-) diff --git a/src/ooxml/java/org/apache/poi/poifs/crypt/dsig/SignatureConfig.java b/src/ooxml/java/org/apache/poi/poifs/crypt/dsig/SignatureConfig.java index 9fa93f7a0..8e276f896 100644 --- a/src/ooxml/java/org/apache/poi/poifs/crypt/dsig/SignatureConfig.java +++ b/src/ooxml/java/org/apache/poi/poifs/crypt/dsig/SignatureConfig.java @@ -63,7 +63,7 @@ import org.w3c.dom.events.EventListener; * This class bundles the configuration options used for the existing * signature facets. * Apart of the thread local members (e.g. opc-package) most values will probably be constant, so - * it might be configured centrally (e.g. by spring) + * it might be configured centrally (e.g. by spring) */ @SuppressWarnings({"unused","WeakerAccess"}) public class SignatureConfig { @@ -76,14 +76,14 @@ public class SignatureConfig { public interface SignatureConfigurable { - void setSignatureConfig(SignatureConfig signatureConfig); + void setSignatureConfig(SignatureConfig signatureConfig); } private ThreadLocal opcPackage = new ThreadLocal<>(); private ThreadLocal signatureFactory = new ThreadLocal<>(); private ThreadLocal keyInfoFactory = new ThreadLocal<>(); private ThreadLocal provider = new ThreadLocal<>(); - + private List signatureFacets = new ArrayList<>(); private HashAlgorithm digestAlgo = HashAlgorithm.sha256; private Date executionTime = new Date(); @@ -96,11 +96,11 @@ public class SignatureConfig { private SignaturePolicyService signaturePolicyService; private URIDereferencer uriDereferencer; private String canonicalizationMethod = CanonicalizationMethod.INCLUSIVE; - + private boolean includeEntireCertificateChain = true; private boolean includeIssuerSerial; private boolean includeKeyValue; - + /** * the time-stamp service used for XAdES-T and XAdES-X. */ @@ -123,7 +123,7 @@ public class SignatureConfig { private String tspRequestPolicy = "1.3.6.1.4.1.13762.3"; private String userAgent = "POI XmlSign Service TSP Client"; private String proxyUrl; - + /** * the optional revocation data service used for XAdES-C and XAdES-X-L. * When null the signature will be limited to XAdES-T only. @@ -148,16 +148,16 @@ public class SignatureConfig { * null value will trigger an automatically generated signature Id. */ private String packageSignatureId = "idPackageSignature"; - + /** * Gives back the human-readable description of what the citizen will be * signing. The default value is "Office OpenXML Document". */ private String signatureDescription = "Office OpenXML Document"; - + /** * The process of signing includes the marshalling of xml structures. - * This also includes the canonicalization. Currently this leads to problems + * This also includes the canonicalization. Currently this leads to problems * with certain namespaces, so this EventListener is used to interfere * with the marshalling process. */ @@ -177,7 +177,7 @@ public class SignatureConfig { /** * Inits and checks the config object. - * If not set previously, complex configuration properties also get + * If not set previously, complex configuration properties also get * created/initialized via this initialization call. * * @param onlyValidation if true, only a subset of the properties @@ -202,7 +202,7 @@ public class SignatureConfig { namespacePrefixes.put(OO_DIGSIG_NS, "mdssi"); namespacePrefixes.put(XADES_132_NS, "xd"); } - + if (onlyValidation) { return; } @@ -210,15 +210,15 @@ public class SignatureConfig { if (signatureMarshalListener == null) { signatureMarshalListener = new SignatureMarshalListener(); } - + if (signatureMarshalListener instanceof SignatureConfigurable) { ((SignatureConfigurable)signatureMarshalListener).setSignatureConfig(this); } - + if (tspService != null) { tspService.setSignatureConfig(this); } - + if (signatureFacets.isEmpty()) { addSignatureFacet(new OOXMLSignatureFacet()); addSignatureFacet(new KeyInfoSignatureFacet()); @@ -230,14 +230,14 @@ public class SignatureConfig { sf.setSignatureConfig(this); } } - + /** - * @param signatureFacet the signature facet is appended to facet list + * @param signatureFacet the signature facet is appended to facet list */ public void addSignatureFacet(SignatureFacet signatureFacet) { signatureFacets.add(signatureFacet); } - + /** * @return the list of facets, may be empty when the config object is not initialized */ @@ -265,14 +265,14 @@ public class SignatureConfig { public void setDigestAlgo(HashAlgorithm digestAlgo) { this.digestAlgo = digestAlgo; } - + /** * @return the opc package to be used by this thread, stored as thread-local */ public OPCPackage getOpcPackage() { return opcPackage.get(); } - + /** * @param opcPackage the opc package to be handled by this thread, stored as thread-local */ @@ -398,14 +398,14 @@ public class SignatureConfig { public void setSignatureDescription(String signatureDescription) { this.signatureDescription = signatureDescription; } - + /** * @return the default canonicalization method, defaults to INCLUSIVE */ public String getCanonicalizationMethod() { return canonicalizationMethod; } - + /** * @param canonicalizationMethod the default canonicalization method */ @@ -459,15 +459,15 @@ public class SignatureConfig { public void setTspUrl(String tspUrl) { this.tspUrl = tspUrl; } - + /** * @return if true, uses timestamp-request/response mimetype, - * if false, timestamp-query/reply mimetype + * if false, timestamp-query/reply mimetype */ public boolean isTspOldProtocol() { return tspOldProtocol; } - + /** * @param tspOldProtocol defines the timestamp-protocol mimetype * @see #isTspOldProtocol @@ -475,7 +475,7 @@ public class SignatureConfig { public void setTspOldProtocol(boolean tspOldProtocol) { this.tspOldProtocol = tspOldProtocol; } - + /** * @return the hash algorithm to be used for the timestamp entry. * Defaults to the hash algorithm of the main entry @@ -483,7 +483,7 @@ public class SignatureConfig { public HashAlgorithm getTspDigestAlgo() { return nvl(tspDigestAlgo,digestAlgo); } - + /** * @param tspDigestAlgo the algorithm to be used for the timestamp entry. * if null, the hash algorithm of the main entry @@ -499,7 +499,7 @@ public class SignatureConfig { public String getProxyUrl() { return proxyUrl; } - + /** * @param proxyUrl the proxy url to be used for all communications. * Currently this affects the timestamp service @@ -507,56 +507,56 @@ public class SignatureConfig { public void setProxyUrl(String proxyUrl) { this.proxyUrl = proxyUrl; } - + /** * @return the timestamp service. Defaults to {@link TSPTimeStampService} */ public TimeStampService getTspService() { return tspService; } - + /** * @param tspService the timestamp service */ public void setTspService(TimeStampService tspService) { this.tspService = tspService; } - + /** * @return the user id for the timestamp service - currently only basic authorization is supported */ public String getTspUser() { return tspUser; } - + /** * @param tspUser the user id for the timestamp service - currently only basic authorization is supported */ public void setTspUser(String tspUser) { this.tspUser = tspUser; } - + /** * @return the password for the timestamp service */ public String getTspPass() { return tspPass; } - + /** * @param tspPass the password for the timestamp service */ public void setTspPass(String tspPass) { this.tspPass = tspPass; } - + /** * @return the validator for the timestamp service (certificate) */ public TimeStampServiceValidator getTspValidator() { return tspValidator; } - + /** * @param tspValidator the validator for the timestamp service (certificate) */ @@ -586,7 +586,7 @@ public class SignatureConfig { public HashAlgorithm getXadesDigestAlgo() { return nvl(xadesDigestAlgo,digestAlgo); } - + /** * @param xadesDigestAlgo hash algorithm used for XAdES. * When null, defaults to {@link #getDigestAlgo()} @@ -611,7 +611,7 @@ public class SignatureConfig { public String getUserAgent() { return userAgent; } - + /** * @param userAgent the user agent used for http communication (e.g. to the TSP) */ @@ -626,7 +626,7 @@ public class SignatureConfig { public String getTspRequestPolicy() { return tspRequestPolicy; } - + /** * @param tspRequestPolicy the asn.1 object id for the tsp request policy. */ @@ -636,7 +636,7 @@ public class SignatureConfig { /** * @return true, if the whole certificate chain is included in the signature. - * When false, only the signer cert will be included + * When false, only the signer cert will be included */ public boolean isIncludeEntireCertificateChain() { return includeEntireCertificateChain; @@ -728,7 +728,7 @@ public class SignatureConfig { * Make sure the DN is encoded using the same order as present * within the certificate. This is an Office2010 work-around. * Should be reverted back. - * + * * XXX: not correct according to RFC 4514. * * @return when true, the issuer DN is used instead of the issuer X500 principal @@ -744,7 +744,7 @@ public class SignatureConfig { this.xadesIssuerNameNoReverseOrder = xadesIssuerNameNoReverseOrder; } - + /** * @return the event listener which is active while xml structure for * the signature is created. @@ -813,8 +813,8 @@ public class SignatureConfig { /** * Converts the digest algorithm - currently only sha* and ripemd160 is supported. - * MS Office only supports sha1, sha256, sha384, sha512. - * + * MS Office only supports sha1, sha256, sha384, sha512. + * * @param digestAlgo the digest algorithm * @return the uri for the given digest */ @@ -835,7 +835,7 @@ public class SignatureConfig { * Converts the digest algorithm ur - currently only sha* and ripemd160 is supported. * MS Office only supports sha1, sha256, sha384, sha512. * - * @param digestAlgo the digest algorithm uri + * @param digestMethodUri the digest algorithm uri * @return the hash algorithm for the given digest */ private static HashAlgorithm getDigestMethodAlgo(String digestMethodUri) { @@ -895,7 +895,7 @@ public class SignatureConfig { public void setSignatureFactory(XMLSignatureFactory signatureFactory) { this.signatureFactory.set(signatureFactory); } - + /** * @return the xml signature factory (thread-local) */ @@ -914,7 +914,7 @@ public class SignatureConfig { public void setKeyInfoFactory(KeyInfoFactory keyInfoFactory) { this.keyInfoFactory.set(keyInfoFactory); } - + /** * @return the key factory (thread-local) */ @@ -934,10 +934,10 @@ public class SignatureConfig { *
  • the Santuario xmlsec provider
  • *
  • the JDK xmlsec provider
  • * - * + * * For signing the classes are linked against the Santuario xmlsec, so this might * only work for validation (not tested). - * + * * @return the xml dsig provider */ public Provider getProvider() { @@ -948,7 +948,7 @@ public class SignatureConfig { // Santuario xmlsec "org.apache.jcp.xml.dsig.internal.dom.XMLDSigRI", // JDK xmlsec - "org.jcp.xml.dsig.internal.dom.XMLDSigRI" + "org.jcp.xml.dsig.internal.dom.XMLDSigRI" }; for (String pn : dsigProviderNames) { if (pn == null) { @@ -966,7 +966,7 @@ public class SignatureConfig { if (prov == null) { throw new RuntimeException("JRE doesn't support default xml signature provider - set jsr105Provider system property!"); } - + return prov; } diff --git a/src/ooxml/java/org/apache/poi/xdgf/usermodel/XDGFShape.java b/src/ooxml/java/org/apache/poi/xdgf/usermodel/XDGFShape.java index c2b22de4f..0427817fd 100644 --- a/src/ooxml/java/org/apache/poi/xdgf/usermodel/XDGFShape.java +++ b/src/ooxml/java/org/apache/poi/xdgf/usermodel/XDGFShape.java @@ -116,13 +116,15 @@ public class XDGFShape extends XDGFSheet { _parentPage = parentPage; TextType text = shapeSheet.getText(); - if (text != null) + if (text != null) { _text = new XDGFText(text, this); + } if (shapeSheet.isSetShapes()) { _shapes = new ArrayList<>(); - for (ShapeSheetType shape : shapeSheet.getShapes().getShapeArray()) + for (ShapeSheetType shape : shapeSheet.getShapes().getShapeArray()) { _shapes.add(new XDGFShape(this, shape, parentPage, document)); + } } readProperties(); @@ -130,10 +132,11 @@ public class XDGFShape extends XDGFSheet { @Override public String toString() { - if (_parentPage instanceof XDGFMasterContents) + if (_parentPage instanceof XDGFMasterContents) { return _parentPage + ": "; - else + } else { return ""; + } } protected void readProperties() { @@ -181,9 +184,10 @@ public class XDGFShape extends XDGFSheet { if (obj.isSetMaster()) { _master = pageContents.getMasterById(obj.getMaster()); - if (_master == null) + if (_master == null) { throw XDGFException.error("refers to non-existant master " + obj.getMaster(), this); + } /* * If a master has one top-level shape, a shape that inherits from @@ -209,11 +213,12 @@ public class XDGFShape extends XDGFSheet { } } else if (obj.isSetMasterShape()) { - _masterShape = master.getShapeById(obj.getMasterShape()); - if (_masterShape == null) + _masterShape = (master == null) ? null : master.getShapeById(obj.getMasterShape()); + if (_masterShape == null) { throw XDGFException.error( "refers to non-existant master shape " + obj.getMasterShape(), this); + } } @@ -229,21 +234,24 @@ public class XDGFShape extends XDGFSheet { protected void setupSectionMasters() { - if (_masterShape == null) + if (_masterShape == null) { return; + } try { for (Entry section : _sections.entrySet()) { XDGFSection master = _masterShape.getSection(section.getKey()); - if (master != null) + if (master != null) { section.getValue().setupMaster(master); + } } for (Entry section : _geometry.entrySet()) { GeometrySection master = _masterShape.getGeometryByIdx(section .getKey()); - if (master != null) + if (master != null) { section.getValue().setupMaster(master); + } } } catch (POIXMLException e) { throw XDGFException.wrap(this.toString(), e); @@ -266,8 +274,9 @@ public class XDGFShape extends XDGFSheet { public String getTextAsString() { XDGFText text = getText(); - if (text == null) + if (text == null) { return ""; + } return text.getTextContent(); } @@ -294,7 +303,7 @@ public class XDGFShape extends XDGFSheet { } /** - * Only available if this shape is a shape group, may be null + * Only available if this shape is a shape group, may be null */ // -> May be null public List getShapes() { @@ -304,28 +313,32 @@ public class XDGFShape extends XDGFSheet { // unique to this shape on the page? public String getName() { String name = getXmlObject().getName(); - if (name == null) + if (name == null) { return ""; + } return name; } // unique to this shape on the page? public String getShapeType() { String type = getXmlObject().getType(); - if (type == null) + if (type == null) { return ""; + } return type; } // name of the symbol that this was derived from public String getSymbolName() { - if (_master == null) + if (_master == null) { return ""; + } String name = _master.getName(); - if (name == null) + if (name == null) { return ""; + } return name; } @@ -345,8 +358,9 @@ public class XDGFShape extends XDGFSheet { XDGFShape top = null; if (_parent != null) { top = _parent.getTopmostParentShape(); - if (top == null) + if (top == null) { top = _parent; + } } return top; @@ -381,190 +395,223 @@ public class XDGFShape extends XDGFSheet { } public XDGFText getText() { - if (_text == null && _masterShape != null) + if (_text == null && _masterShape != null) { return _masterShape.getText(); + } return _text; } public Double getPinX() { - if (_pinX == null && _masterShape != null) + if (_pinX == null && _masterShape != null) { return _masterShape.getPinX(); + } - if (_pinX == null) + if (_pinX == null) { throw XDGFException.error("PinX not set!", this); + } return _pinX; } public Double getPinY() { - if (_pinY == null && _masterShape != null) + if (_pinY == null && _masterShape != null) { return _masterShape.getPinY(); + } - if (_pinY == null) + if (_pinY == null) { throw XDGFException.error("PinY not specified!", this); + } return _pinY; } public Double getWidth() { - if (_width == null && _masterShape != null) + if (_width == null && _masterShape != null) { return _masterShape.getWidth(); + } - if (_width == null) + if (_width == null) { throw XDGFException.error("Width not specified!", this); + } return _width; } public Double getHeight() { - if (_height == null && _masterShape != null) + if (_height == null && _masterShape != null) { return _masterShape.getHeight(); + } - if (_height == null) + if (_height == null) { throw XDGFException.error("Height not specified!", this); + } return _height; } public Double getLocPinX() { - if (_locPinX == null && _masterShape != null) + if (_locPinX == null && _masterShape != null) { return _masterShape.getLocPinX(); + } - if (_locPinX == null) + if (_locPinX == null) { throw XDGFException.error("LocPinX not specified!", this); + } return _locPinX; } public Double getLocPinY() { - if (_locPinY == null && _masterShape != null) + if (_locPinY == null && _masterShape != null) { return _masterShape.getLocPinY(); + } - if (_locPinY == null) + if (_locPinY == null) { throw XDGFException.error("LocPinY not specified!", this); + } return _locPinY; } public Double getBeginX() { - if (_beginX == null && _masterShape != null) + if (_beginX == null && _masterShape != null) { return _masterShape.getBeginX(); + } return _beginX; } public Double getBeginY() { - if (_beginY == null && _masterShape != null) + if (_beginY == null && _masterShape != null) { return _masterShape.getBeginY(); + } return _beginY; } public Double getEndX() { - if (_endX == null && _masterShape != null) + if (_endX == null && _masterShape != null) { return _masterShape.getEndX(); + } return _endX; } public Double getEndY() { - if (_endY == null && _masterShape != null) + if (_endY == null && _masterShape != null) { return _masterShape.getEndY(); + } return _endY; } public Double getAngle() { - if (_angle == null && _masterShape != null) + if (_angle == null && _masterShape != null) { return _masterShape.getAngle(); + } return _angle; } public Boolean getFlipX() { - if (_flipX == null && _masterShape != null) + if (_flipX == null && _masterShape != null) { return _masterShape.getFlipX(); + } return _flipX; } public Boolean getFlipY() { - if (_flipY == null && _masterShape != null) + if (_flipY == null && _masterShape != null) { return _masterShape.getFlipY(); + } return _flipY; } public Double getTxtPinX() { if (_txtPinX == null && _masterShape != null - && _masterShape._txtPinX != null) + && _masterShape._txtPinX != null) { return _masterShape._txtPinX; + } - if (_txtPinX == null) + if (_txtPinX == null) { return getWidth() * 0.5; + } return _txtPinX; } public Double getTxtPinY() { if (_txtLocPinY == null && _masterShape != null - && _masterShape._txtLocPinY != null) + && _masterShape._txtLocPinY != null) { return _masterShape._txtLocPinY; + } - if (_txtPinY == null) + if (_txtPinY == null) { return getHeight() * 0.5; + } return _txtPinY; } public Double getTxtLocPinX() { if (_txtLocPinX == null && _masterShape != null - && _masterShape._txtLocPinX != null) + && _masterShape._txtLocPinX != null) { return _masterShape._txtLocPinX; + } - if (_txtLocPinX == null) + if (_txtLocPinX == null) { return getTxtWidth() * 0.5; + } return _txtLocPinX; } public Double getTxtLocPinY() { if (_txtLocPinY == null && _masterShape != null - && _masterShape._txtLocPinY != null) + && _masterShape._txtLocPinY != null) { return _masterShape._txtLocPinY; + } - if (_txtLocPinY == null) + if (_txtLocPinY == null) { return getTxtHeight() * 0.5; + } return _txtLocPinY; } public Double getTxtAngle() { - if (_txtAngle == null && _masterShape != null) + if (_txtAngle == null && _masterShape != null) { return _masterShape.getTxtAngle(); + } return _txtAngle; } public Double getTxtWidth() { if (_txtWidth == null && _masterShape != null - && _masterShape._txtWidth != null) + && _masterShape._txtWidth != null) { return _masterShape._txtWidth; + } - if (_txtWidth == null) + if (_txtWidth == null) { return getWidth(); + } return _txtWidth; } public Double getTxtHeight() { if (_txtHeight == null && _masterShape != null - && _masterShape._txtHeight != null) + && _masterShape._txtHeight != null) { return _masterShape._txtHeight; + } - if (_txtHeight == null) + if (_txtHeight == null) { return getHeight(); + } return _txtHeight; } @@ -573,8 +620,9 @@ public class XDGFShape extends XDGFSheet { public Integer getLineCap() { Integer lineCap = super.getLineCap(); - if (lineCap != null) + if (lineCap != null) { return lineCap; + } // get from master if (_masterShape != null) { @@ -589,8 +637,9 @@ public class XDGFShape extends XDGFSheet { public Color getLineColor() { Color lineColor = super.getLineColor(); - if (lineColor != null) + if (lineColor != null) { return lineColor; + } // get from master if (_masterShape != null) { @@ -605,8 +654,9 @@ public class XDGFShape extends XDGFSheet { public Integer getLinePattern() { Integer linePattern = super.getLinePattern(); - if (linePattern != null) + if (linePattern != null) { return linePattern; + } // get from master if (_masterShape != null) { @@ -621,8 +671,9 @@ public class XDGFShape extends XDGFSheet { public Double getLineWeight() { Double lineWeight = super.getLineWeight(); - if (lineWeight != null) + if (lineWeight != null) { return lineWeight; + } // get from master if (_masterShape != null) { @@ -637,8 +688,9 @@ public class XDGFShape extends XDGFSheet { public Color getFontColor() { Color fontColor = super.getFontColor(); - if (fontColor != null) + if (fontColor != null) { return fontColor; + } // get from master if (_masterShape != null) { @@ -653,8 +705,9 @@ public class XDGFShape extends XDGFSheet { public Double getFontSize() { Double fontSize = super.getFontSize(); - if (fontSize != null) + if (fontSize != null) { return fontSize; + } // get from master if (_masterShape != null) { @@ -791,11 +844,11 @@ public class XDGFShape extends XDGFSheet { public Rectangle2D.Double getBounds() { return new Rectangle2D.Double(0, 0, getWidth(), getHeight()); } - + /** * @return returns bounds as a path in local coordinates, which is * userful if you need to transform to global coordinates - * + * * Warning: Don't use this for 1d objects, and will fail for * infinite line objects */ @@ -819,8 +872,9 @@ public class XDGFShape extends XDGFSheet { */ public Path2D.Double getPath() { for (GeometrySection geoSection : getGeometrySections()) { - if (geoSection.getNoShow()) + if (geoSection.getNoShow()) { continue; + } return geoSection.getPath(this); } @@ -833,8 +887,9 @@ public class XDGFShape extends XDGFSheet { */ public boolean hasGeometry() { for (GeometrySection geoSection : getGeometrySections()) { - if (!geoSection.getNoShow()) + if (!geoSection.getNoShow()) { return true; + } } return false; } @@ -889,8 +944,9 @@ public class XDGFShape extends XDGFSheet { tr.concatenate(getParentTransform()); try { - if (visitor.accept(this)) + if (visitor.accept(this)) { visitor.visit(this, tr, level); + } if (_shapes != null) { for (XDGFShape shape : _shapes) { @@ -914,8 +970,9 @@ public class XDGFShape extends XDGFSheet { public void visitShapes(ShapeVisitor visitor, int level) { try { - if (visitor.accept(this)) + if (visitor.accept(this)) { visitor.visit(this, null, level); + } if (_shapes != null) { for (XDGFShape shape : _shapes) { diff --git a/src/ooxml/java/org/apache/poi/xdgf/usermodel/XDGFText.java b/src/ooxml/java/org/apache/poi/xdgf/usermodel/XDGFText.java index f3b24f905..c823bb343 100644 --- a/src/ooxml/java/org/apache/poi/xdgf/usermodel/XDGFText.java +++ b/src/ooxml/java/org/apache/poi/xdgf/usermodel/XDGFText.java @@ -52,7 +52,7 @@ public class XDGFText { // is a mixed type) return ((TextTypeImpl) _text).getStringValue(); } - + /** * These are in the shape coordinate system * @@ -82,8 +82,8 @@ public class XDGFText { public Path2D.Double getBoundsAsPath() { Rectangle2D.Double rect = getTextBounds(); - Double w = rect.getWidth(); - Double h = rect.getHeight(); + double w = rect.getWidth(); + double h = rect.getHeight(); Path2D.Double bounds = new Path2D.Double(); bounds.moveTo(0, 0); @@ -94,7 +94,7 @@ public class XDGFText { return bounds; } - + /** * @return Center of text in local coordinates */ @@ -110,8 +110,9 @@ public class XDGFText { public void draw(Graphics2D graphics) { String textContent = getTextContent(); - if (textContent.length() == 0) + if (textContent.length() == 0) { return; + } Rectangle2D.Double bounds = getTextBounds(); @@ -140,22 +141,25 @@ public class XDGFText { } Double txtAngle = _parent.getTxtAngle(); - if (txtAngle != null && Math.abs(txtAngle) > 0.01) + if (txtAngle != null && Math.abs(txtAngle) > 0.01) { graphics.rotate(txtAngle); + } float nextY = 0; for (String line : lines) { - if (line.length() == 0) + if (line.length() == 0) { continue; + } TextLayout layout = new TextLayout(line, font, frc); - if (layout.isLeftToRight()) + if (layout.isLeftToRight()) { layout.draw(graphics, 0, nextY); - else + } else { layout.draw(graphics, (float) (bounds.width - layout.getAdvance()), nextY); + } nextY += layout.getAscent() + layout.getDescent() + layout.getLeading(); diff --git a/src/ooxml/java/org/apache/poi/xdgf/util/HierarchyPrinter.java b/src/ooxml/java/org/apache/poi/xdgf/util/HierarchyPrinter.java index 92fbcb0d2..eb37159ba 100644 --- a/src/ooxml/java/org/apache/poi/xdgf/util/HierarchyPrinter.java +++ b/src/ooxml/java/org/apache/poi/xdgf/util/HierarchyPrinter.java @@ -22,6 +22,7 @@ import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; +import java.io.IOException; import java.io.OutputStream; import java.io.PrintStream; import java.io.UnsupportedEncodingException; @@ -38,17 +39,17 @@ import org.apache.poi.xdgf.usermodel.shape.ShapeVisitor; public class HierarchyPrinter { public static void printHierarchy(XDGFPage page, File outDir) - throws FileNotFoundException, UnsupportedEncodingException { + throws FileNotFoundException, UnsupportedEncodingException, IOException { File pageFile = new File(outDir, "page" + page.getPageNumber() + "-" + Util.sanitizeFilename(page.getName()) + ".txt"); - OutputStream os = new FileOutputStream(pageFile); - PrintStream pos = new PrintStream(os, false, "utf-8"); - - printHierarchy(page, pos); - - pos.close(); + try ( + OutputStream os = new FileOutputStream(pageFile); + PrintStream pos = new PrintStream(os, false, "utf-8") + ) { + printHierarchy(page, pos); + } } public static void printHierarchy(XDGFPage page, final PrintStream os) { @@ -71,7 +72,7 @@ public class HierarchyPrinter { } public static void printHierarchy(XmlVisioDocument document, - String outDirname) throws FileNotFoundException, UnsupportedEncodingException { + String outDirname) throws FileNotFoundException, UnsupportedEncodingException, IOException { File outDir = new File(outDirname); @@ -89,8 +90,9 @@ public class HierarchyPrinter { String inFilename = args[0]; String outDir = args[1]; - XmlVisioDocument doc = new XmlVisioDocument(new FileInputStream( - inFilename)); - printHierarchy(doc, outDir); + try (FileInputStream is = new FileInputStream(inFilename)) { + XmlVisioDocument doc = new XmlVisioDocument(is); + printHierarchy(doc, outDir); + } } } diff --git a/src/ooxml/java/org/apache/poi/xdgf/util/VsdxToPng.java b/src/ooxml/java/org/apache/poi/xdgf/util/VsdxToPng.java index 7706ca19e..815eaee82 100644 --- a/src/ooxml/java/org/apache/poi/xdgf/util/VsdxToPng.java +++ b/src/ooxml/java/org/apache/poi/xdgf/util/VsdxToPng.java @@ -21,7 +21,10 @@ import java.awt.Color; import java.awt.Graphics2D; import java.awt.RenderingHints; import java.awt.image.BufferedImage; -import java.io.*; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; import javax.imageio.ImageIO; @@ -33,7 +36,7 @@ import org.apache.poi.xdgf.usermodel.shape.ShapeRenderer; /** * Converts a Visio diagram to a PNG file. - * + * * As more elements and styles are added/supported the output will get * better, but it's very rough right now. */ @@ -91,11 +94,8 @@ public class VsdxToPng { graphics.dispose(); - OutputStream out = new FileOutputStream(outFile); - try { + try (FileOutputStream out = new FileOutputStream(outFile)) { ImageIO.write(img, "png", out); - } finally { - out.close(); } } @@ -127,8 +127,9 @@ public class VsdxToPng { renderer = new ShapeDebuggerRenderer(); } - XmlVisioDocument doc = new XmlVisioDocument(new FileInputStream( - inFilename)); - renderToPng(doc, pngDir, 2000 / 11.0, renderer); + try (FileInputStream is = new FileInputStream(inFilename)) { + XmlVisioDocument doc = new XmlVisioDocument(is); + renderToPng(doc, pngDir, 2000 / 11.0, renderer); + } } } diff --git a/src/ooxml/java/org/apache/poi/xslf/usermodel/XMLSlideShow.java b/src/ooxml/java/org/apache/poi/xslf/usermodel/XMLSlideShow.java index 401903076..687ddc5f5 100644 --- a/src/ooxml/java/org/apache/poi/xslf/usermodel/XMLSlideShow.java +++ b/src/ooxml/java/org/apache/poi/xslf/usermodel/XMLSlideShow.java @@ -36,6 +36,7 @@ import org.apache.poi.ooxml.POIXMLDocument; import org.apache.poi.ooxml.POIXMLDocumentPart; import org.apache.poi.ooxml.POIXMLException; import org.apache.poi.ooxml.extractor.POIXMLPropertiesTextExtractor; +import org.apache.poi.ooxml.util.PackageHelper; import org.apache.poi.openxml4j.exceptions.OpenXML4JException; import org.apache.poi.openxml4j.opc.OPCPackage; import org.apache.poi.openxml4j.opc.PackagePart; @@ -50,7 +51,6 @@ import org.apache.poi.util.LittleEndian; import org.apache.poi.util.LittleEndianConsts; import org.apache.poi.util.POILogFactory; import org.apache.poi.util.POILogger; -import org.apache.poi.ooxml.util.PackageHelper; import org.apache.poi.util.Units; import org.apache.xmlbeans.XmlException; import org.apache.xmlbeans.XmlObject; @@ -362,7 +362,7 @@ public class XMLSlideShow extends POIXMLDocument CTNotesMasterIdListEntry notesMasterId = notesMasterIdList.addNewNotesMasterId(); notesMasterId.setId(rp.getRelationship().getId()); - Integer themeIndex = 1; + int themeIndex = 1; // TODO: check if that list can be replaced by idx = Math.max(idx,themeIdx) List themeIndexList = new ArrayList<>(); for (POIXMLDocumentPart p : getRelations()) { @@ -626,7 +626,7 @@ public class XMLSlideShow extends POIXMLDocument // TODO: implement! throw new UnsupportedOperationException(); } - + @Override public POIXMLPropertiesTextExtractor getMetadataTextExtractor() { return new POIXMLPropertiesTextExtractor(this); diff --git a/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFColor.java b/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFColor.java index d7aed091b..50b82df3b 100644 --- a/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFColor.java +++ b/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFColor.java @@ -48,7 +48,7 @@ import org.w3c.dom.Node; @Internal public class XSLFColor { private final static POILogger LOGGER = POILogFactory.getLogger(XSLFColor.class); - + private XmlObject _xmlObject; private Color _color; private CTSchemeColor _phClr; @@ -128,7 +128,7 @@ public class XSLFColor { } }; } - + private Color toColor(XmlObject obj, XSLFTheme theme) { Color color = null; for (XmlObject ch : obj.selectPath("*")) { @@ -207,19 +207,19 @@ public class XSLFColor { if (fill.isSetScrgbClr()) { fill.unsetScrgbClr(); } - + if (fill.isSetHslClr()) { fill.unsetHslClr(); } - + if (fill.isSetPrstClr()) { fill.unsetPrstClr(); } - + if (fill.isSetSchemeClr()) { fill.unsetSchemeClr(); } - + if (fill.isSetSysClr()) { fill.unsetSysClr(); } @@ -227,12 +227,12 @@ public class XSLFColor { float[] rgbaf = color.getRGBComponents(null); boolean addAlpha = (rgbaf.length == 4 && rgbaf[3] < 1f); CTPositiveFixedPercentage alphaPct; - + // see office open xml part 4 - 5.1.2.2.30 and 5.1.2.2.32 if (isInt(rgbaf[0]) && isInt(rgbaf[1]) && isInt(rgbaf[2])) { // sRGB has a gamma of 2.2 CTSRgbColor rgb = fill.addNewSrgbClr(); - + byte rgbBytes[] = { (byte)color.getRed(), (byte)color.getGreen(), (byte)color.getBlue() }; rgb.setVal(rgbBytes); alphaPct = (addAlpha) ? rgb.addNewAlpha() : null; @@ -249,14 +249,14 @@ public class XSLFColor { alphaPct.setVal((int)(100000 * rgbaf[3])); } } - + /** * @return true, if this is an integer color value */ private static boolean isInt(float f) { - return Math.abs((f*255f) - Math.rint(f*255f)) < 0.00001f; + return Math.abs((f*255d) - Math.rint(f*255d)) < 0.00001; } - + private int getRawValue(String elem) { String query = "declare namespace a='http://schemas.openxmlformats.org/drawingml/2006/main' $this//a:" + elem; @@ -281,9 +281,9 @@ public class XSLFColor { } } - return -1; + return -1; } - + /** * Read a perecentage value from the supplied xml bean. * Example: @@ -305,7 +305,7 @@ public class XSLFColor { * or -1 if the value is not set */ int getAlpha(){ - return getPercentageValue("alpha"); + return getPercentageValue("alpha"); } /** @@ -413,7 +413,7 @@ public class XSLFColor { /** * specifies the input color with the specific red component, but with the blue and green color * components unchanged - * + * * @return the value of the red component specified as a * percentage with 0% indicating minimal blue and 100% indicating maximum * or -1 if the value is not set @@ -479,7 +479,7 @@ public class XSLFColor { /** * specifies a darker version of its input color. * A 10% shade is 10% of the input color combined with 90% black. - * + * * @return the value of the shade specified as a * percentage with 0% indicating minimal shade and 100% indicating maximum * or -1 if the value is not set diff --git a/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFNotes.java b/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFNotes.java index 64b92a9bb..72d19e7ae 100644 --- a/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFNotes.java +++ b/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFNotes.java @@ -49,9 +49,7 @@ implements Notes { * * @param part the package part holding the notes data, * the content type must be application/vnd.openxmlformats-officedocument.notes+xml - * @param rel the package relationship holding this notes, - * the relationship type must be http://schemas.openxmlformats.org/officeDocument/2006/relationships/notes - * + * * @since POI 3.14-Beta1 */ XSLFNotes(PackagePart part) throws IOException, XmlException { @@ -77,7 +75,7 @@ implements Notes { @Override protected String getRootElementName(){ - return "notes"; + return "notes"; } @Override diff --git a/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFShape.java b/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFShape.java index 4d162027e..aded851db 100644 --- a/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFShape.java +++ b/src/ooxml/java/org/apache/poi/xslf/usermodel/XSLFShape.java @@ -70,7 +70,7 @@ import org.openxmlformats.schemas.presentationml.x2006.main.STPlaceholderType; @Beta public abstract class XSLFShape implements Shape { static final String PML_NS = "http://schemas.openxmlformats.org/presentationml/2006/main"; - + private final XmlObject _shape; private final XSLFSheet _sheet; private XSLFShapeContainer _parent; @@ -82,7 +82,7 @@ public abstract class XSLFShape implements Shape { _shape = shape; _sheet = sheet; } - + /** * @return the xml bean holding this shape's data */ @@ -91,11 +91,12 @@ public abstract class XSLFShape implements Shape { // the (not existing) xmlbeans hierarchy and subclasses shouldn't narrow it's return value return _shape; } - + + @Override public XSLFSheet getSheet() { return _sheet; } - + @Override public String getShapeName(){ return getCNvPr().getName(); @@ -124,22 +125,24 @@ public abstract class XSLFShape implements Shape { PlaceableShape ps = (PlaceableShape)this; ps.setAnchor(sh.getAnchor()); } - - + + } - + public void setParent(XSLFShapeContainer parent) { this._parent = parent; } - + + @Override public XSLFShapeContainer getParent() { return this._parent; } - + protected PaintStyle getFillPaint() { final XSLFTheme theme = getSheet().getTheme(); final boolean hasPlaceholder = getPlaceholder() != null; PropertyFetcher fetcher = new PropertyFetcher() { + @Override public boolean fetch(XSLFShape shape) { XSLFFillProperties fp = XSLFPropertiesDelegate.getFillDelegate(shape.getShapeProperties()); if (fp == null) { @@ -150,7 +153,7 @@ public abstract class XSLFShape implements Shape { setValue(null); return true; } - + PackagePart pp = shape.getSheet().getPackagePart(); PaintStyle paint = selectPaint(fp, null, pp, theme, hasPlaceholder); if (paint != null) { @@ -167,8 +170,8 @@ public abstract class XSLFShape implements Shape { setValue(paint); return true; } - - + + return false; } }; @@ -181,16 +184,16 @@ public abstract class XSLFShape implements Shape { protected CTBackgroundProperties getBgPr() { return getChild(CTBackgroundProperties.class, PML_NS, "bgPr"); } - + @SuppressWarnings("unused") protected CTStyleMatrixReference getBgRef() { return getChild(CTStyleMatrixReference.class, PML_NS, "bgRef"); } - + protected CTGroupShapeProperties getGrpSpPr() { return getChild(CTGroupShapeProperties.class, PML_NS, "grpSpPr"); } - + protected CTNonVisualDrawingProps getCNvPr() { if (_nvPr == null) { String xquery = "declare namespace p='http://schemas.openxmlformats.org/presentationml/2006/main' .//*/p:cNvPr"; @@ -239,7 +242,7 @@ public abstract class XSLFShape implements Shape { public Placeholder getPlaceholder() { return getPlaceholderDetails().getPlaceholder(); } - + /** * @see PlaceholderDetails#setPlaceholder(Placeholder) */ @@ -268,7 +271,9 @@ public abstract class XSLFShape implements Shape { @SuppressWarnings({"unchecked", "WeakerAccess"}) protected T selectProperty(Class resultClass, String xquery) { XmlObject[] rs = getXmlObject().selectPath(xquery); - if (rs.length == 0) return null; + if (rs.length == 0) { + return null; + } return (resultClass.isInstance(rs[0])) ? (T)rs[0] : null; } @@ -281,7 +286,7 @@ public abstract class XSLFShape implements Shape { *
  • slideLayout *
  • slideMaster * - * + * * Currently themes and their defaults aren't correctly handled * * @param visitor the object that collects the desired property @@ -299,7 +304,7 @@ public abstract class XSLFShape implements Shape { return false; } MasterSheet sm = getSheet().getMasterSheet(); - + // try slide layout if (sm instanceof XSLFSlideLayout) { XSLFSlideLayout slideLayout = (XSLFSlideLayout)sm; @@ -309,7 +314,7 @@ public abstract class XSLFShape implements Shape { } sm = slideLayout.getMasterSheet(); } - + // try slide master if (sm instanceof XSLFSlideMaster) { XSLFSlideMaster master = (XSLFSlideMaster)sm; @@ -317,15 +322,15 @@ public abstract class XSLFShape implements Shape { XSLFSimpleShape masterShape = master.getPlaceholderByType(textType); return masterShape != null && visitor.fetch(masterShape); } - + return false; } - + private static int getPlaceholderType(CTPlaceholder ph) { if ( !ph.isSetType()) { return STPlaceholderType.INT_BODY; } - + switch (ph.getType().intValue()) { case STPlaceholderType.INT_TITLE: case STPlaceholderType.INT_CTR_TITLE: @@ -397,7 +402,8 @@ public abstract class XSLFShape implements Shape { throw new RuntimeException(e); } } - + + @Override public InputStream getImageData() { try { return getPart().getInputStream(); @@ -406,17 +412,19 @@ public abstract class XSLFShape implements Shape { } } + @Override public String getContentType() { /* TOOD: map content-type */ return getPart().getContentType(); } + @Override public int getAlpha() { return (blip.sizeOfAlphaModFixArray() > 0) ? blip.getAlphaModFixArray(0).getAmt() : 100000; } - }; + }; } @SuppressWarnings("WeakerAccess") @@ -426,14 +434,14 @@ public abstract class XSLFShape implements Shape { final CTGradientStop[] gs = gradFill.getGsLst().getGsArray(); Arrays.sort(gs, (o1, o2) -> { - Integer pos1 = o1.getPos(); - Integer pos2 = o2.getPos(); - return pos1.compareTo(pos2); + int pos1 = o1.getPos(); + int pos2 = o2.getPos(); + return Integer.compare(pos1, pos2); }); final ColorStyle cs[] = new ColorStyle[gs.length]; final float fractions[] = new float[gs.length]; - + int i=0; for (CTGradientStop cgs : gs) { CTSchemeColor phClrCgs = phClr; @@ -444,32 +452,37 @@ public abstract class XSLFShape implements Shape { fractions[i] = cgs.getPos() / 100000.f; i++; } - + return new GradientPaint() { + @Override public double getGradientAngle() { return (gradFill.isSetLin()) ? gradFill.getLin().getAng() / 60000.d : 0; } + @Override public ColorStyle[] getGradientColors() { return cs; } + @Override public float[] getGradientFractions() { return fractions; } + @Override public boolean isRotatedWithShape() { return gradFill.getRotWithShape(); } + @Override public GradientType getGradientType() { if (gradFill.isSetLin()) { return GradientType.linear; } - + if (gradFill.isSetPath()) { /* TODO: handle rect path */ STPathShadeType.Enum ps = gradFill.getPath().getPath(); @@ -479,16 +492,18 @@ public abstract class XSLFShape implements Shape { return GradientType.shape; } } - + return GradientType.linear; } - }; + }; } - + @SuppressWarnings("WeakerAccess") protected static PaintStyle selectPaint(CTStyleMatrixReference fillRef, final XSLFTheme theme, boolean isLineStyle, boolean hasPlaceholder) { - if (fillRef == null) return null; - + if (fillRef == null) { + return null; + } + // The idx attribute refers to the index of a fill style or // background fill style within the presentation's style matrix, defined by the fmtScheme element. // value of 0 or 1000 indicates no background, @@ -513,7 +528,7 @@ public abstract class XSLFShape implements Shape { fp = XSLFPropertiesDelegate.getFillDelegate(cur.getObject()); } cur.dispose(); - + CTSchemeColor phClr = fillRef.getSchemeClr(); PaintStyle res = selectPaint(fp, phClr, theme.getPackagePart(), theme, hasPlaceholder); // check for empty placeholder value @@ -524,12 +539,12 @@ public abstract class XSLFShape implements Shape { XSLFColor col = new XSLFColor(fillRef, theme, phClr); return DrawPaint.createSolidPaint(col.getColorStyle()); } - + @Override public void draw(Graphics2D graphics, Rectangle2D bounds) { DrawFactory.getInstance(graphics).drawShape(graphics, this, bounds); } - + /** * Return the shape specific (visual) properties * diff --git a/src/ooxml/java/org/apache/poi/xslf/util/PPTX2PNG.java b/src/ooxml/java/org/apache/poi/xslf/util/PPTX2PNG.java index 79327bce4..b3288d46f 100644 --- a/src/ooxml/java/org/apache/poi/xslf/util/PPTX2PNG.java +++ b/src/ooxml/java/org/apache/poi/xslf/util/PPTX2PNG.java @@ -74,13 +74,13 @@ public class PPTX2PNG { for (int i = 0; i < args.length; i++) { if (args[i].startsWith("-")) { if ("-scale".equals(args[i])) { - scale = Float.parseFloat(args[++i]); + scale = Float.parseFloat(args[++i]); // lgtm[java/index-out-of-bounds] } else if ("-slide".equals(args[i])) { - slidenumStr = args[++i]; + slidenumStr = args[++i]; // lgtm[java/index-out-of-bounds] } else if ("-format".equals(args[i])) { - format = args[++i]; + format = args[++i]; // lgtm[java/index-out-of-bounds] } else if ("-outdir".equals(args[i])) { - outdir = new File(args[++i]); + outdir = new File(args[++i]); // lgtm[java/index-out-of-bounds] } else if ("-quiet".equals(args[i])) { quiet = true; } @@ -98,11 +98,11 @@ public class PPTX2PNG { usage("Invalid format given"); return; } - + if (outdir == null) { outdir = file.getParentFile(); } - + if (!"null".equals(format) && (outdir == null || !outdir.exists() || !outdir.isDirectory())) { usage("Output directory doesn't exist"); return; @@ -112,7 +112,7 @@ public class PPTX2PNG { usage("Invalid scale given"); return; } - + if (!quiet) { System.out.println("Processing " + file); } @@ -169,7 +169,7 @@ public class PPTX2PNG { System.out.println("Done"); } } - + private static Set slideIndexes(final int slideCount, String range) { Set slideIdx = new TreeSet<>(); if ("-1".equals(range)) { diff --git a/src/ooxml/java/org/apache/poi/xssf/binary/XSSFBUtils.java b/src/ooxml/java/org/apache/poi/xssf/binary/XSSFBUtils.java index b2176d2d5..6f1dd70bd 100644 --- a/src/ooxml/java/org/apache/poi/xssf/binary/XSSFBUtils.java +++ b/src/ooxml/java/org/apache/poi/xssf/binary/XSSFBUtils.java @@ -51,7 +51,7 @@ public class XSSFBUtils { int numBytes = 2*(int)numChars; offset += 4; if (offset+numBytes > data.length) { - throw new XSSFBParseException("trying to read beyond data length:" + + throw new XSSFBParseException("trying to read beyond data length: " + "offset="+offset+", numBytes="+numBytes+", data.length="+data.length); } sb.append(new String(data, offset, numBytes, StandardCharsets.UTF_16LE)); diff --git a/src/ooxml/java/org/apache/poi/xssf/streaming/SXSSFRow.java b/src/ooxml/java/org/apache/poi/xssf/streaming/SXSSFRow.java index 9884ce093..9f0379493 100644 --- a/src/ooxml/java/org/apache/poi/xssf/streaming/SXSSFRow.java +++ b/src/ooxml/java/org/apache/poi/xssf/streaming/SXSSFRow.java @@ -39,22 +39,22 @@ import org.apache.poi.util.NotImplemented; public class SXSSFRow implements Row, Comparable { private static final Boolean UNDEFINED = null; - + private final SXSSFSheet _sheet; // parent sheet private final SortedMap _cells = new TreeMap<>(); private short _style = -1; // index of cell style in style table private short _height = -1; // row height in twips (1/20 point) private boolean _zHeight; // row zero-height (this is somehow different than being hidden) private int _outlineLevel; // Outlining level of the row, when outlining is on - // use Boolean to have a tri-state for on/off/undefined + // use Boolean to have a tri-state for on/off/undefined private Boolean _hidden = UNDEFINED; private Boolean _collapsed = UNDEFINED; - + public SXSSFRow(SXSSFSheet sheet) { _sheet=sheet; } - + public Iterator allCellsIterator() { return new CellIterator(); @@ -71,7 +71,7 @@ public class SXSSFRow implements Row, Comparable void setOutlineLevel(int level){ _outlineLevel = level; } - + /** * get row hidden state: Hidden (true), Unhidden (false), Undefined (null) * @@ -235,7 +235,7 @@ public class SXSSFRow implements Row, Comparable public SXSSFCell getCell(int cellnum, MissingCellPolicy policy) { checkBounds(cellnum); - + final SXSSFCell cell = _cells.get(cellnum); switch (policy) { case RETURN_NULL_AND_BLANK: @@ -345,10 +345,11 @@ public class SXSSFRow implements Row, Comparable @Override public void setHeightInPoints(float height) { - if(height==-1) + if(height==-1) { _height=-1; - else + } else { _height=(short)(height*20); + } } /** @@ -375,7 +376,7 @@ public class SXSSFRow implements Row, Comparable { return (float)(_height==-1?getSheet().getDefaultRowHeightInPoints():_height/20.0); } - + /** * Is this row formatted? Most aren't, but some rows * do have whole-row styles. For those that do, you @@ -392,16 +393,18 @@ public class SXSSFRow implements Row, Comparable */ @Override public CellStyle getRowStyle() { - if(!isFormatted()) return null; - + if(!isFormatted()) { + return null; + } + return getSheet().getWorkbook().getCellStyleAt(_style); } - + @Internal /*package*/ int getRowStyleIndex() { return _style; } - + /** * Applies a whole-row cell styling to the row. * The row style can be cleared by passing in null. @@ -440,7 +443,7 @@ public class SXSSFRow implements Row, Comparable /** * Create an iterator over the cells from [0, getLastCellNum()). * Includes blank cells, excludes empty cells - * + * * Returns an iterator over all filled cells (created via Row.createCell()) * Throws ConcurrentModificationException if cells are added, moved, or * removed after the iterator is created. @@ -485,10 +488,11 @@ public class SXSSFRow implements Row, Comparable @Override public Cell next() throws NoSuchElementException { - if (hasNext()) + if (hasNext()) { return _cells.get(pos++); - else + } else { throw new NoSuchElementException(); + } } @Override public void remove() @@ -496,7 +500,7 @@ public class SXSSFRow implements Row, Comparable throw new UnsupportedOperationException(); } } - + /** * Compares two SXSSFRow objects. Two rows are equal if they belong to the same worksheet and * their row indexes are equal. @@ -524,9 +528,9 @@ public class SXSSFRow implements Row, Comparable throw new IllegalArgumentException("The compared rows must belong to the same sheet"); } - Integer thisRow = this.getRowNum(); - Integer otherRow = other.getRowNum(); - return thisRow.compareTo(otherRow); + int thisRow = this.getRowNum(); + int otherRow = other.getRowNum(); + return Integer.compare(thisRow, otherRow); } @Override 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 3f42faab5..1ae1e9921 100644 --- a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFDrawing.java +++ b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFDrawing.java @@ -446,7 +446,7 @@ public final class XSSFDrawing extends POIXMLDocumentPart implements Drawing { _cells.put(colI, cell); sheet.onReadCell(cell); } - + if (! row.isSetR()) { // Certain file format writers skip the row number // Assume no gaps, and give this the next row number @@ -158,9 +158,9 @@ public class XSSFRow implements Row, Comparable { throw new IllegalArgumentException("The compared rows must belong to the same sheet"); } - Integer thisRow = this.getRowNum(); - Integer otherRow = other.getRowNum(); - return thisRow.compareTo(otherRow); + int thisRow = this.getRowNum(); + int otherRow = other.getRowNum(); + return Integer.compare(thisRow, otherRow); } @Override @@ -245,7 +245,9 @@ public class XSSFRow implements Row, Comparable { */ @Override public XSSFCell getCell(int cellnum, MissingCellPolicy policy) { - if(cellnum < 0) throw new IllegalArgumentException("Cell index must be >= 0"); + if(cellnum < 0) { + throw new IllegalArgumentException("Cell index must be >= 0"); + } // Performance optimization for bug 57840: explicit boxing is slightly faster than auto-unboxing, though may use more memory final Integer colI = Integer.valueOf(cellnum); // NOSONAR @@ -332,8 +334,12 @@ public class XSSFRow implements Row, Comparable { @Override public void setHeight(short height) { if (height == -1) { - if (_row.isSetHt()) _row.unsetHt(); - if (_row.isSetCustomHeight()) _row.unsetCustomHeight(); + if (_row.isSetHt()) { + _row.unsetHt(); + } + if (_row.isSetCustomHeight()) { + _row.unsetCustomHeight(); + } } else { _row.setHt((double) height / 20); _row.setCustomHeight(true); @@ -425,8 +431,10 @@ public class XSSFRow implements Row, Comparable { */ @Override public XSSFCellStyle getRowStyle() { - if(!isFormatted()) return null; - + if(!isFormatted()) { + return null; + } + StylesTable stylesSource = getSheet().getWorkbook().getStylesSource(); if(stylesSource.getNumCellStyles() > 0) { return stylesSource.getStyleAt((int)_row.getS()); @@ -434,7 +442,7 @@ public class XSSFRow implements Row, Comparable { return null; } } - + /** * Applies a whole-row cell styling to the row. * If the value is null then the style information is removed, @@ -449,7 +457,7 @@ public class XSSFRow implements Row, Comparable { } } else { StylesTable styleSource = getSheet().getWorkbook().getStylesSource(); - + XSSFCellStyle xStyle = (XSSFCellStyle)style; xStyle.verifyBelongsToStylesSource(styleSource); @@ -458,7 +466,7 @@ public class XSSFRow implements Row, Comparable { _row.setCustomFormat(true); } } - + /** * Remove the Cell from this row. * @@ -502,8 +510,8 @@ public class XSSFRow implements Row, Comparable { int i = 0; for (XSSFCell xssfCell : _cells.values()) { cArray[i] = (CTCell) xssfCell.getCTCell().copy(); - - // we have to copy and re-create the XSSFCell here because the + + // we have to copy and re-create the XSSFCell here because the // elements as otherwise setCArray below invalidates all the columns! // see Bug 56170, XMLBeans seems to always release previous objects // in the CArray, so we need to provide completely new ones here! @@ -537,7 +545,7 @@ public class XSSFRow implements Row, Comparable { } setRowNum(rownum); } - + /** * Copy the cells from srcRow to this row * If this row is not a blank row, this will merge the two rows, overwriting @@ -589,7 +597,7 @@ public class XSSFRow implements Row, Comparable { final int srcRowNum = srcRow.getRowNum(); final int destRowNum = getRowNum(); final int rowDifference = destRowNum - srcRowNum; - + final FormulaShifter formulaShifter = FormulaShifter.createForRowCopy(sheetIndex, sheetName, srcRowNum, srcRowNum, rowDifference, SpreadsheetVersion.EXCEL2007); final XSSFRowShifter rowShifter = new XSSFRowShifter(_sheet); rowShifter.updateRowFormulas(this, formulaShifter); @@ -617,7 +625,7 @@ public class XSSFRow implements Row, Comparable { public int getOutlineLevel() { return _row.getOutlineLevel(); } - + /** * Shifts column range [firstShiftColumnIndex-lastShiftColumnIndex] step places to the right. * @param firstShiftColumnIndex the column to start shifting @@ -626,20 +634,23 @@ public class XSSFRow implements Row, Comparable { */ @Override public void shiftCellsRight(int firstShiftColumnIndex, int lastShiftColumnIndex, int step) { - if(step < 0) + if(step < 0) { throw new IllegalArgumentException("Shifting step may not be negative "); - if(firstShiftColumnIndex > lastShiftColumnIndex) + } + if(firstShiftColumnIndex > lastShiftColumnIndex) { throw new IllegalArgumentException(String.format(LocaleUtil.getUserLocale(), "Incorrect shifting range : %d-%d", firstShiftColumnIndex, lastShiftColumnIndex)); - for (int columnIndex = lastShiftColumnIndex; columnIndex >= firstShiftColumnIndex; columnIndex--){ // process cells backwards, because of shifting + } + for (int columnIndex = lastShiftColumnIndex; columnIndex >= firstShiftColumnIndex; columnIndex--){ // process cells backwards, because of shifting shiftCell(columnIndex, step); } for (int columnIndex = firstShiftColumnIndex; columnIndex <= firstShiftColumnIndex+step-1; columnIndex++) { _cells.remove(columnIndex); XSSFCell targetCell = getCell(columnIndex); - if(targetCell != null) + if(targetCell != null) { targetCell.getCTCell().set(CTCell.Factory.newInstance()); + } } } /** @@ -650,27 +661,32 @@ public class XSSFRow implements Row, Comparable { */ @Override public void shiftCellsLeft(int firstShiftColumnIndex, int lastShiftColumnIndex, int step) { - if(step < 0) + if(step < 0) { throw new IllegalArgumentException("Shifting step may not be negative "); - if(firstShiftColumnIndex > lastShiftColumnIndex) + } + if(firstShiftColumnIndex > lastShiftColumnIndex) { throw new IllegalArgumentException(String.format(LocaleUtil.getUserLocale(), "Incorrect shifting range : %d-%d", firstShiftColumnIndex, lastShiftColumnIndex)); - if(firstShiftColumnIndex - step < 0) + } + if(firstShiftColumnIndex - step < 0) { throw new IllegalStateException("Column index less than zero : " + (Integer.valueOf(firstShiftColumnIndex + step)).toString()); - for (int columnIndex = firstShiftColumnIndex; columnIndex <= lastShiftColumnIndex; columnIndex++){ + } + for (int columnIndex = firstShiftColumnIndex; columnIndex <= lastShiftColumnIndex; columnIndex++){ shiftCell(columnIndex, -step); } for (int columnIndex = lastShiftColumnIndex-step+1; columnIndex <= lastShiftColumnIndex; columnIndex++){ _cells.remove(columnIndex); XSSFCell targetCell = getCell(columnIndex); - if(targetCell != null) + if(targetCell != null) { targetCell.getCTCell().set(CTCell.Factory.newInstance()); + } } } private void shiftCell(int columnIndex, int step/*pass negative value for left shift*/){ - if(columnIndex + step < 0) // only for shifting left + if(columnIndex + step < 0) { throw new IllegalStateException("Column index less than zero : " + (Integer.valueOf(columnIndex + step)).toString()); - + } + XSSFCell currentCell = getCell(columnIndex); if(currentCell != null){ currentCell.setCellNum(columnIndex+step); @@ -679,8 +695,9 @@ public class XSSFRow implements Row, Comparable { else { _cells.remove(columnIndex+step); XSSFCell targetCell = getCell(columnIndex+step); - if(targetCell != null) + if(targetCell != null) { targetCell.getCTCell().set(CTCell.Factory.newInstance()); + } } } } diff --git a/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFSDTContent.java b/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFSDTContent.java index 587674edc..99ab66a7e 100644 --- a/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFSDTContent.java +++ b/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFSDTContent.java @@ -40,16 +40,16 @@ public class XWPFSDTContent implements ISDTContent { // private final IBody part; // private final XWPFDocument document; - private List paragraphs = new ArrayList<>(); - private List tables = new ArrayList<>(); - private List runs = new ArrayList<>(); - private List contentControls = new ArrayList<>(); + // private List paragraphs = new ArrayList<>(); + // private List tables = new ArrayList<>(); + // private List runs = new ArrayList<>(); + // private List contentControls = new ArrayList<>(); private List bodyElements = new ArrayList<>(); public XWPFSDTContent(CTSdtContentRun sdtRun, IBody part, IRunBody parent) { for (CTR ctr : sdtRun.getRArray()) { XWPFRun run = new XWPFRun(ctr, parent); - runs.add(run); + // runs.add(run); bodyElements.add(run); } } @@ -62,24 +62,25 @@ public class XWPFSDTContent implements ISDTContent { if (o instanceof CTP) { XWPFParagraph p = new XWPFParagraph((CTP) o, part); bodyElements.add(p); - paragraphs.add(p); + // paragraphs.add(p); } else if (o instanceof CTTbl) { XWPFTable t = new XWPFTable((CTTbl) o, part); bodyElements.add(t); - tables.add(t); + // tables.add(t); } else if (o instanceof CTSdtBlock) { XWPFSDT c = new XWPFSDT(((CTSdtBlock) o), part); bodyElements.add(c); - contentControls.add(c); + // contentControls.add(c); } else if (o instanceof CTR) { XWPFRun run = new XWPFRun((CTR) o, parent); - runs.add(run); + // runs.add(run); bodyElements.add(run); } } cursor.dispose(); } + @Override public String getText() { StringBuilder text = new StringBuilder(); boolean addNewLine = false; @@ -130,6 +131,7 @@ public class XWPFSDTContent implements ISDTContent { } } + @Override public String toString() { return getText(); } diff --git a/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFTable.java b/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFTable.java index 0caca8c6d..9352fe8a1 100644 --- a/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFTable.java +++ b/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFTable.java @@ -161,8 +161,9 @@ public class XWPFTable implements IBodyElement, ISDTContents { this.ctTbl = table; // is an empty table: I add one row and one column as default - if (table.sizeOfTrArray() == 0) + if (table.sizeOfTrArray() == 0) { createEmptyTable(table); + } for (CTRow row : table.getTrList()) { StringBuilder rowText = new StringBuilder(); @@ -233,7 +234,7 @@ public class XWPFTable implements IBodyElement, ISDTContents { return text.toString(); } - + /** * This method has existed since 2008 without an implementation. * It will be removed unless an implementation is provided. @@ -288,7 +289,7 @@ public class XWPFTable implements IBodyElement, ISDTContents { /** * Get the width value as an integer. *

    If the width type is AUTO, DXA, or NIL, the value is 20ths of a point. If - * the width type is PCT, the value is the percentage times 50 (e.g., 2500 for 50%).

    + * the width type is PCT, the value is the percentage times 50 (e.g., 2500 for 50%).

    * @return width value as an integer */ public int getWidth() { @@ -322,7 +323,7 @@ public class XWPFTable implements IBodyElement, ISDTContents { } /** - * Returns CTTblPr object for table. If force parameter is true, will + * Returns CTTblPr object for table. If force parameter is true, will * create the element if necessary. If force parameter is false, returns * null when CTTblPr element is missing. * @@ -343,7 +344,7 @@ public class XWPFTable implements IBodyElement, ISDTContents { private CTTblBorders getTblBorders(boolean force) { CTTblPr tblPr = getTblPr(force); return tblPr == null ? null - : tblPr.isSetTblBorders() ? tblPr.getTblBorders() + : tblPr.isSetTblBorders() ? tblPr.getTblBorders() : force ? tblPr.addNewTblBorders() : null; } @@ -413,18 +414,18 @@ public class XWPFTable implements IBodyElement, ISDTContents { : tPr.isSetJc() ? TableRowAlign.valueOf(tPr.getJc().getVal().intValue()) : null; } - + /** * Set table alignment to specified {@link TableRowAlign} * - * @param ha {@link TableRowAlign} to set + * @param tra {@link TableRowAlign} to set */ public void setTableAlignment(TableRowAlign tra) { CTTblPr tPr = getTblPr(true); CTJc jc = tPr.isSetJc() ? tPr.getJc() : tPr.addNewJc(); jc.setVal(STJc.Enum.forInt(tra.getValue())); } - + /** * Removes the table alignment attribute from a table */ @@ -434,7 +435,7 @@ public class XWPFTable implements IBodyElement, ISDTContents { tPr.unsetJc(); } } - + private void addColumn(XWPFTableRow tabRow, int sizeCol) { if (sizeCol > 0) { for (int i = 0; i < sizeCol; i++) { @@ -486,7 +487,7 @@ public class XWPFTable implements IBodyElement, ISDTContents { /** * Get inside horizontal border size - * + * * @return The width of the Inside Horizontal borders in 1/8th points, * -1 if missing. */ @@ -496,7 +497,7 @@ public class XWPFTable implements IBodyElement, ISDTContents { /** * Get inside horizontal border spacing - * + * * @return The offset to the Inside Horizontal borders in points, * -1 if missing. */ @@ -506,7 +507,7 @@ public class XWPFTable implements IBodyElement, ISDTContents { /** * Get inside horizontal border color - * + * * @return The color of the Inside Horizontal borders, null if missing. */ public String getInsideHBorderColor() { @@ -524,7 +525,7 @@ public class XWPFTable implements IBodyElement, ISDTContents { /** * Get inside vertical border size - * + * * @return The width of the Inside vertical borders in 1/8th points, * -1 if missing. */ @@ -534,7 +535,7 @@ public class XWPFTable implements IBodyElement, ISDTContents { /** * Get inside vertical border spacing - * + * * @return The offset to the Inside vertical borders in points, * -1 if missing. */ @@ -544,7 +545,7 @@ public class XWPFTable implements IBodyElement, ISDTContents { /** * Get inside vertical border color - * + * * @return The color of the Inside vertical borders, null if missing. */ public String getInsideVBorderColor() { @@ -562,7 +563,7 @@ public class XWPFTable implements IBodyElement, ISDTContents { /** * Get top border size - * + * * @return The width of the top borders in 1/8th points, * -1 if missing. */ @@ -572,7 +573,7 @@ public class XWPFTable implements IBodyElement, ISDTContents { /** * Get top border spacing - * + * * @return The offset to the top borders in points, * -1 if missing. */ @@ -582,7 +583,7 @@ public class XWPFTable implements IBodyElement, ISDTContents { /** * Get top border color - * + * * @return The color of the top borders, null if missing. */ public String getTopBorderColor() { @@ -600,7 +601,7 @@ public class XWPFTable implements IBodyElement, ISDTContents { /** * Get bottom border size - * + * * @return The width of the bottom borders in 1/8th points, * -1 if missing. */ @@ -610,7 +611,7 @@ public class XWPFTable implements IBodyElement, ISDTContents { /** * Get bottom border spacing - * + * * @return The offset to the bottom borders in points, * -1 if missing. */ @@ -620,7 +621,7 @@ public class XWPFTable implements IBodyElement, ISDTContents { /** * Get bottom border color - * + * * @return The color of the bottom borders, null if missing. */ public String getBottomBorderColor() { @@ -638,7 +639,7 @@ public class XWPFTable implements IBodyElement, ISDTContents { /** * Get Left border size - * + * * @return The width of the Left borders in 1/8th points, * -1 if missing. */ @@ -648,7 +649,7 @@ public class XWPFTable implements IBodyElement, ISDTContents { /** * Get Left border spacing - * + * * @return The offset to the Left borders in points, * -1 if missing. */ @@ -658,7 +659,7 @@ public class XWPFTable implements IBodyElement, ISDTContents { /** * Get Left border color - * + * * @return The color of the Left borders, null if missing. */ public String getLeftBorderColor() { @@ -676,7 +677,7 @@ public class XWPFTable implements IBodyElement, ISDTContents { /** * Get Right border size - * + * * @return The width of the Right borders in 1/8th points, * -1 if missing. */ @@ -686,7 +687,7 @@ public class XWPFTable implements IBodyElement, ISDTContents { /** * Get Right border spacing - * + * * @return The offset to the Right borders in points, * -1 if missing. */ @@ -696,7 +697,7 @@ public class XWPFTable implements IBodyElement, ISDTContents { /** * Get Right border color - * + * * @return The color of the Right borders, null if missing. */ public String getRightBorderColor() { @@ -770,7 +771,7 @@ public class XWPFTable implements IBodyElement, ISDTContents { * of a point) and a maximum value of 96 (twelve points). Any values outside this * range may be reassigned to a more appropriate value. * @param space - Specifies the spacing offset that shall be used to place this border on the table - * @param rgbColor - This color may either be presented as a hex value (in RRGGBB format), + * @param rgbColor - This color may either be presented as a hex value (in RRGGBB format), * or auto to allow a consumer to automatically determine the border color as appropriate. */ public void setInsideHBorder(XWPFBorderType type, int size, int space, String rgbColor) { @@ -786,7 +787,7 @@ public class XWPFTable implements IBodyElement, ISDTContents { * of a point) and a maximum value of 96 (twelve points). Any values outside this * range may be reassigned to a more appropriate value. * @param space - Specifies the spacing offset that shall be used to place this border on the table - * @param rgbColor - This color may either be presented as a hex value (in RRGGBB format), + * @param rgbColor - This color may either be presented as a hex value (in RRGGBB format), * or auto to allow a consumer to automatically determine the border color as appropriate. */ public void setInsideVBorder(XWPFBorderType type, int size, int space, String rgbColor) { @@ -802,7 +803,7 @@ public class XWPFTable implements IBodyElement, ISDTContents { * of a point) and a maximum value of 96 (twelve points). Any values outside this * range may be reassigned to a more appropriate value. * @param space - Specifies the spacing offset that shall be used to place this border on the table - * @param rgbColor - This color may either be presented as a hex value (in RRGGBB format), + * @param rgbColor - This color may either be presented as a hex value (in RRGGBB format), * or auto to allow a consumer to automatically determine the border color as appropriate. */ public void setTopBorder(XWPFBorderType type, int size, int space, String rgbColor) { @@ -818,7 +819,7 @@ public class XWPFTable implements IBodyElement, ISDTContents { * of a point) and a maximum value of 96 (twelve points). Any values outside this * range may be reassigned to a more appropriate value. * @param space - Specifies the spacing offset that shall be used to place this border on the table - * @param rgbColor - This color may either be presented as a hex value (in RRGGBB format), + * @param rgbColor - This color may either be presented as a hex value (in RRGGBB format), * or auto to allow a consumer to automatically determine the border color as appropriate. */ public void setBottomBorder(XWPFBorderType type, int size, int space, String rgbColor) { @@ -834,7 +835,7 @@ public class XWPFTable implements IBodyElement, ISDTContents { * of a point) and a maximum value of 96 (twelve points). Any values outside this * range may be reassigned to a more appropriate value. * @param space - Specifies the spacing offset that shall be used to place this border on the table - * @param rgbColor - This color may either be presented as a hex value (in RRGGBB format), + * @param rgbColor - This color may either be presented as a hex value (in RRGGBB format), * or auto to allow a consumer to automatically determine the border color as appropriate. */ public void setLeftBorder(XWPFBorderType type, int size, int space, String rgbColor) { @@ -850,7 +851,7 @@ public class XWPFTable implements IBodyElement, ISDTContents { * of a point) and a maximum value of 96 (twelve points). Any values outside this * range may be reassigned to a more appropriate value. * @param space - Specifies the spacing offset that shall be used to place this border on the table - * @param rgbColor - This color may either be presented as a hex value (in RRGGBB format), + * @param rgbColor - This color may either be presented as a hex value (in RRGGBB format), * or auto to allow a consumer to automatically determine the border color as appropriate. */ public void setRightBorder(XWPFBorderType type, int size, int space, String rgbColor) { @@ -872,14 +873,14 @@ public class XWPFTable implements IBodyElement, ISDTContents { public void removeInsideHBorder() { removeBorder(Border.INSIDE_H); } - + /** * Remove inside vertical borders for table */ public void removeInsideVBorder() { removeBorder(Border.INSIDE_V); } - + /** * Remove top borders for table */ @@ -893,21 +894,21 @@ public class XWPFTable implements IBodyElement, ISDTContents { public void removeBottomBorder() { removeBorder(Border.BOTTOM); } - + /** * Remove left borders for table */ public void removeLeftBorder() { removeBorder(Border.LEFT); } - + /** * Remove right borders for table */ public void removeRightBorder() { removeBorder(Border.RIGHT); } - + /** * Remove all borders from table */ @@ -959,7 +960,7 @@ public class XWPFTable implements IBodyElement, ISDTContents { } /** - * removes the Borders node from Table properties if there are + * removes the Borders node from Table properties if there are * no border elements */ private void cleanupTblBorders() { @@ -976,7 +977,7 @@ public class XWPFTable implements IBodyElement, ISDTContents { } } } - + public int getCellMarginTop() { return getCellMargin(CTTblCellMar::getTop); } @@ -1095,10 +1096,12 @@ public class XWPFTable implements IBodyElement, ISDTContents { * * @see org.apache.poi.xwpf.usermodel.IBodyElement#getElementType() */ + @Override public BodyElementType getElementType() { return BodyElementType.TABLE; } + @Override public IBody getBody() { return part; } @@ -1108,6 +1111,7 @@ public class XWPFTable implements IBodyElement, ISDTContents { * * @see org.apache.poi.xwpf.usermodel.IBody#getPart() */ + @Override public POIXMLDocumentPart getPart() { if (part != null) { return part.getPart(); @@ -1120,6 +1124,7 @@ public class XWPFTable implements IBodyElement, ISDTContents { * * @see org.apache.poi.xwpf.usermodel.IBody#getPartType() */ + @Override public BodyType getPartType() { return part.getPartType(); } @@ -1130,11 +1135,13 @@ public class XWPFTable implements IBodyElement, ISDTContents { */ public XWPFTableRow getRow(CTRow row) { for (int i = 0; i < getRows().size(); i++) { - if (getRows().get(i).getCtRow() == row) return getRow(i); + if (getRows().get(i).getCtRow() == row) { + return getRow(i); + } } return null; } - + /** * Get the table width as a decimal value. *

    If the width type is DXA or AUTO, then the value will always have @@ -1159,14 +1166,14 @@ public class XWPFTable implements IBodyElement, ISDTContents { protected static double getWidthDecimal(CTTblWidth ctWidth) { double result = 0.0; STTblWidth.Enum typeValue = ctWidth.getType(); - if (typeValue == STTblWidth.DXA - || typeValue == STTblWidth.AUTO + if (typeValue == STTblWidth.DXA + || typeValue == STTblWidth.AUTO || typeValue == STTblWidth.NIL) { result = 0.0 + ctWidth.getW().intValue(); } else if (typeValue == STTblWidth.PCT) { // Percentage values are stored as integers that are 50 times // percentage. - result = ctWidth.getW().intValue() / 50.0; + result = ctWidth.getW().intValue() / 50.0; } else { // Should never get here } @@ -1230,7 +1237,7 @@ public class XWPFTable implements IBodyElement, ISDTContents { protected static void setWidthValue(String widthValue, CTTblWidth ctWidth) { if (!widthValue.matches(REGEX_WIDTH_VALUE)) { throw new RuntimeException("Table width value \"" + widthValue + "\" " - + "must match regular expression \"" + REGEX_WIDTH_VALUE + "\"."); + + "must match regular expression \"" + REGEX_WIDTH_VALUE + "\"."); } if (widthValue.matches("auto")) { ctWidth.setType(STTblWidth.AUTO); @@ -1240,13 +1247,13 @@ public class XWPFTable implements IBodyElement, ISDTContents { } else { // Must be an integer ctWidth.setW(new BigInteger(widthValue)); - ctWidth.setType(STTblWidth.DXA); + ctWidth.setType(STTblWidth.DXA); } } /** * Set the underlying table width value to a percentage value. - * @param ctWidth The CTTblWidth to set the value on + * @param ctWidth The CTTblWidth to set the value on * @param widthValue String width value in form "33.3%" or an integer that is 50 times desired percentage value (e.g, * 2500 for 50%) * @since 4.0.0 @@ -1257,7 +1264,7 @@ public class XWPFTable implements IBodyElement, ISDTContents { String numberPart = widthValue.substring(0, widthValue.length() - 1); double percentage = Double.parseDouble(numberPart) * 50; long intValue = Math.round(percentage); - ctWidth.setW(BigInteger.valueOf(intValue)); + ctWidth.setW(BigInteger.valueOf(intValue)); } else if (widthValue.matches("[0-9]+")) { ctWidth.setW(new BigInteger(widthValue)); } else { @@ -1275,7 +1282,7 @@ public class XWPFTable implements IBodyElement, ISDTContents { * @since 4.0.0 */ public void setWidthType(TableWidthType widthType) { - setWidthType(widthType, getTblPr().getTblW()); + setWidthType(widthType, getTblPr().getTblW()); } /**