diff --git a/src/java/org/apache/poi/hssf/record/FormulaRecord.java b/src/java/org/apache/poi/hssf/record/FormulaRecord.java index 4eae6ce5c2..0ef07d470f 100644 --- a/src/java/org/apache/poi/hssf/record/FormulaRecord.java +++ b/src/java/org/apache/poi/hssf/record/FormulaRecord.java @@ -21,11 +21,7 @@ import org.apache.poi.ss.formula.Formula; import org.apache.poi.ss.formula.eval.ErrorEval; import org.apache.poi.ss.formula.ptg.Ptg; import org.apache.poi.ss.usermodel.CellType; -import org.apache.poi.util.BitField; -import org.apache.poi.util.BitFieldFactory; -import org.apache.poi.util.HexDump; -import org.apache.poi.util.LittleEndianInput; -import org.apache.poi.util.LittleEndianOutput; +import org.apache.poi.util.*; /** * Formula Record (0x0006). @@ -65,6 +61,7 @@ public final class FormulaRecord extends CellRecord implements Cloneable { private SpecialCachedValue(byte[] data) { _variableData = data; } + public int getTypeCode() { return _variableData[0]; } @@ -91,42 +88,55 @@ public final class FormulaRecord extends CellRecord implements Cloneable { case EMPTY: break; default: - throw new RecordFormatException("Bad special value code (" + result[0] + ")"); + throw new org.apache.poi.util.RecordFormatException("Bad special value code (" + result[0] + ")"); } return new SpecialCachedValue(result); } + public void serialize(LittleEndianOutput out) { out.write(_variableData); out.writeShort(0xFFFF); } + public String formatDebugString() { return formatValue() + ' ' + HexDump.toHex(_variableData); } + private String formatValue() { int typeCode = getTypeCode(); switch (typeCode) { - case STRING: return ""; - case BOOLEAN: return getDataValue() == 0 ? "FALSE" : "TRUE"; - case ERROR_CODE: return ErrorEval.getText(getDataValue()); - case EMPTY: return ""; + case STRING: + return ""; + case BOOLEAN: + return getDataValue() == 0 ? "FALSE" : "TRUE"; + case ERROR_CODE: + return ErrorEval.getText(getDataValue()); + case EMPTY: + return ""; } return "#error(type=" + typeCode + ")#"; } + private int getDataValue() { return _variableData[DATA_INDEX]; } + public static SpecialCachedValue createCachedEmptyValue() { return create(EMPTY, 0); } + public static SpecialCachedValue createForString() { return create(STRING, 0); } + public static SpecialCachedValue createCachedBoolean(boolean b) { return create(BOOLEAN, b ? 1 : 0); } + public static SpecialCachedValue createCachedErrorCode(int errorCode) { return create(ERROR_CODE, errorCode); } + private static SpecialCachedValue create(int code, int data) { byte[] vd = { (byte) code, @@ -138,13 +148,12 @@ public final class FormulaRecord extends CellRecord implements Cloneable { }; return new SpecialCachedValue(vd); } + @Override public String toString() { - StringBuffer sb = new StringBuffer(64); - sb.append(getClass().getName()); - sb.append('[').append(formatValue()).append(']'); - return sb.toString(); + return getClass().getName() + '[' + formatValue() + ']'; } + public int getValueType() { int typeCode = getTypeCode(); switch (typeCode) { @@ -155,12 +164,14 @@ public final class FormulaRecord extends CellRecord implements Cloneable { } throw new IllegalStateException("Unexpected type id (" + typeCode + ")"); } + public boolean getBooleanValue() { if (getTypeCode() != BOOLEAN) { throw new IllegalStateException("Not a boolean cached value - " + formatValue()); } return getDataValue() != 0; } + public int getErrorValue() { if (getTypeCode() != ERROR_CODE) { throw new IllegalStateException("Not an error cached value - " + formatValue()); @@ -192,19 +203,18 @@ public final class FormulaRecord extends CellRecord implements Cloneable { public FormulaRecord(RecordInputStream ris) { super(ris); - LittleEndianInput in = ris; - long valueLongBits = in.readLong(); - field_5_options = in.readShort(); + long valueLongBits = ris.readLong(); + field_5_options = ris.readShort(); specialCachedValue = SpecialCachedValue.create(valueLongBits); if (specialCachedValue == null) { field_4_value = Double.longBitsToDouble(valueLongBits); } - field_6_zero = in.readInt(); + field_6_zero = ris.readInt(); - int field_7_expression_len = in.readShort(); // this length does not include any extra array data - int nBytesAvailable = in.available(); - field_8_parsed_expr = Formula.read(field_7_expression_len, in, nBytesAvailable); + int field_7_expression_len = ris.readShort(); // this length does not include any extra array data + int nBytesAvailable = ris.available(); + field_8_parsed_expr = Formula.read(field_7_expression_len, ris, nBytesAvailable); } /** @@ -235,10 +245,8 @@ public final class FormulaRecord extends CellRecord implements Cloneable { * evaluation. */ public boolean hasCachedResultString() { - if (specialCachedValue == null) { - return false; - } - return specialCachedValue.getTypeCode() == SpecialCachedValue.STRING; + return specialCachedValue != null && + specialCachedValue.getTypeCode() == SpecialCachedValue.STRING; } public int getCachedResultType() { diff --git a/src/java/org/apache/poi/sl/draw/DrawTextParagraph.java b/src/java/org/apache/poi/sl/draw/DrawTextParagraph.java index 65c22d7817..b1fbd9b067 100644 --- a/src/java/org/apache/poi/sl/draw/DrawTextParagraph.java +++ b/src/java/org/apache/poi/sl/draw/DrawTextParagraph.java @@ -62,7 +62,7 @@ public class DrawTextParagraph implements Drawable { protected List lines = new ArrayList(); protected String rawText; protected DrawTextFragment bullet; - protected int autoNbrIdx = 0; + protected int autoNbrIdx; /** * the highest line in this paragraph. Used for line spacing. @@ -226,7 +226,7 @@ public class DrawTextParagraph implements Drawable { /** * break text into lines, each representing a line of text that fits in the wrapping width * - * @param graphics + * @param graphics The drawing context for computing text-lengths. */ protected void breakText(Graphics2D graphics){ lines.clear(); @@ -479,7 +479,7 @@ public class DrawTextParagraph implements Drawable { */ @SuppressWarnings("rawtypes") private PlaceableShape getParagraphShape() { - PlaceableShape ps = new PlaceableShape(){ + return new PlaceableShape(){ public ShapeContainer getParent() { return null; } public Rectangle2D getAnchor() { return paragraph.getParentShape().getAnchor(); } public void setAnchor(Rectangle2D anchor) {} @@ -491,7 +491,6 @@ public class DrawTextParagraph implements Drawable { public boolean getFlipVertical() { return false; } public Sheet getSheet() { return paragraph.getParentShape().getSheet(); } }; - return ps; } protected AttributedString getAttributedString(Graphics2D graphics, StringBuilder text){ @@ -633,7 +632,7 @@ public class DrawTextParagraph implements Drawable { return string; } - + protected boolean isHSLF() { return paragraph.getClass().getName().contains("HSLF"); } diff --git a/src/ooxml/java/org/apache/poi/util/DocumentHelper.java b/src/ooxml/java/org/apache/poi/util/DocumentHelper.java index 1ec47953ab..f86e60fd90 100644 --- a/src/ooxml/java/org/apache/poi/util/DocumentHelper.java +++ b/src/ooxml/java/org/apache/poi/util/DocumentHelper.java @@ -78,6 +78,9 @@ public final class DocumentHelper { /** * Creates a new document builder, with sensible defaults + * + * @throws IllegalStateException If creating the DocumentBuilder fails, e.g. + * due to {@link ParserConfigurationException}. */ public static synchronized DocumentBuilder newDocumentBuilder() { try { diff --git a/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFPictureData.java b/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFPictureData.java index 5bc1ece94e..e3f51e774d 100644 --- a/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFPictureData.java +++ b/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFPictureData.java @@ -31,21 +31,19 @@ import org.apache.poi.util.IOUtils; /** * Raw picture data, normally attached to a WordprocessingML Drawing. * As a rule, pictures are stored in the /word/media/ part of a WordprocessingML package. - */ - -/** + * * @author Philipp Epp */ public class XWPFPictureData extends POIXMLDocumentPart { /** - * Relationships for each known picture type - */ - protected static final POIXMLRelation[] RELATIONS; - - static { - RELATIONS = new POIXMLRelation[13]; - RELATIONS[Document.PICTURE_TYPE_EMF] = XWPFRelation.IMAGE_EMF; + * Relationships for each known picture type + */ + protected static final POIXMLRelation[] RELATIONS; + + static { + RELATIONS = new POIXMLRelation[13]; + RELATIONS[Document.PICTURE_TYPE_EMF] = XWPFRelation.IMAGE_EMF; RELATIONS[Document.PICTURE_TYPE_WMF] = XWPFRelation.IMAGE_WMF; RELATIONS[Document.PICTURE_TYPE_PICT] = XWPFRelation.IMAGE_PICT; RELATIONS[Document.PICTURE_TYPE_JPEG] = XWPFRelation.IMAGE_JPEG; @@ -58,13 +56,13 @@ public class XWPFPictureData extends POIXMLDocumentPart { RELATIONS[Document.PICTURE_TYPE_WPG] = XWPFRelation.IMAGE_WPG; } - private Long checksum = null; - - /** - * Create a new XWPFGraphicData node - */ - protected XWPFPictureData() { - super(); + private Long checksum; + + /** + * Create a new XWPFGraphicData node + */ + protected XWPFPictureData() { + super(); } /** @@ -90,13 +88,13 @@ public class XWPFPictureData extends POIXMLDocumentPart { * You can grab the picture data directly from the underlying package part as follows: *
* - * InputStream is = getPackagePart().getInputStream(); - * - *

- * - * @return the Picture data. - */ - public byte[] getData() { + * InputStream is = getPackagePart().getInputStream(); + * + *

+ * + * @return the Picture data. + */ + public byte[] getData() { try { return IOUtils.toByteArray(getPackagePart().getInputStream()); } catch (IOException e) { @@ -113,22 +111,22 @@ public class XWPFPictureData extends POIXMLDocumentPart { String name = getPackagePart().getPartName().getName(); return name.substring(name.lastIndexOf('/') + 1); } - - /** - * Suggests a file extension for this image. - * - * @return the file extension. - */ - public String suggestFileExtension() { + + /** + * Suggests a file extension for this image. + * + * @return the file extension. + */ + public String suggestFileExtension() { return getPackagePart().getPartName().getExtension(); } - - /** - * Return an integer constant that specifies type of this picture - * - * @return an integer constant that specifies type of this picture - * @see org.apache.poi.xwpf.usermodel.Document#PICTURE_TYPE_EMF - * @see org.apache.poi.xwpf.usermodel.Document#PICTURE_TYPE_WMF + + /** + * Return an integer constant that specifies type of this picture + * + * @return an integer constant that specifies type of this picture + * @see org.apache.poi.xwpf.usermodel.Document#PICTURE_TYPE_EMF + * @see org.apache.poi.xwpf.usermodel.Document#PICTURE_TYPE_WMF * @see org.apache.poi.xwpf.usermodel.Document#PICTURE_TYPE_PICT * @see org.apache.poi.xwpf.usermodel.Document#PICTURE_TYPE_JPEG * @see org.apache.poi.xwpf.usermodel.Document#PICTURE_TYPE_PNG @@ -171,7 +169,7 @@ public class XWPFPictureData extends POIXMLDocumentPart { @Override public boolean equals(Object obj) { - /** + /* * In case two objects ARE equal, but its not the same instance, this * implementation will always run through the whole * byte-array-comparison before returning true. If this will turn into a @@ -216,13 +214,13 @@ public class XWPFPictureData extends POIXMLDocumentPart { if (!ownPackage.equals(foreignPackage)) { return false; - } - } - } - - Long foreignChecksum = picData.getChecksum(); - Long localChecksum = getChecksum(); - + } + } + } + + Long foreignChecksum = picData.getChecksum(); + Long localChecksum = getChecksum(); + if (!(localChecksum.equals(foreignChecksum))) { return false; } @@ -232,13 +230,13 @@ public class XWPFPictureData extends POIXMLDocumentPart { @Override public int hashCode() { return getChecksum().hashCode(); - } - - /** - * *PictureData objects store the actual content in the part directly without keeping a - * copy like all others therefore we need to handle them differently. - */ - @Override + } + + /** + * *PictureData objects store the actual content in the part directly without keeping a + * copy like all others therefore we need to handle them differently. + */ + @Override protected void prepareForCommit() { // do not clear the part here } diff --git a/src/resources/devtools/findbugs-filters.xml b/src/resources/devtools/findbugs-filters.xml index 98c2ffb1cd..0355a441a1 100644 --- a/src/resources/devtools/findbugs-filters.xml +++ b/src/resources/devtools/findbugs-filters.xml @@ -17,6 +17,7 @@ limitations under the License. ==================================================================== --> +