From 61cb6a93c53224c57cbeb5a0dbd46e5fca62b5c1 Mon Sep 17 00:00:00 2001 From: Evgeniy Berlog Date: Sat, 28 Jul 2012 10:21:40 +0000 Subject: [PATCH] added features: -background image for comment -wrapText for HSSFSimpleShape -few other improvements git-svn-id: https://svn.apache.org/repos/asf/poi/branches/gsoc2012@1366636 13f79535-47bb-0310-9956-ffa450edef68 --- .../poi/ddf/AbstractEscherOptRecord.java | 9 +++++ .../apache/poi/ddf/EscherBoolProperty.java | 2 +- .../poi/hssf/usermodel/HSSFComment.java | 37 ++++++++++++++++--- .../poi/hssf/usermodel/HSSFObjectData.java | 2 +- .../poi/hssf/usermodel/HSSFPicture.java | 6 +-- .../apache/poi/hssf/usermodel/HSSFShape.java | 17 ++------- .../poi/hssf/usermodel/HSSFShapeGroup.java | 2 +- .../poi/hssf/usermodel/HSSFSimpleShape.java | 19 +++++++++- .../poi/hssf/usermodel/HSSFTextbox.java | 2 +- .../poi/hssf/usermodel/HSSFUnknownShape.java | 2 +- .../poi/hssf/model/TestDrawingShapes.java | 30 +++++++++------ .../apache/poi/hssf/model/TestHSSFAnchor.java | 20 +++++----- .../poi/hssf/usermodel/HSSFTestHelper.java | 14 +++++++ .../poi/hssf/usermodel/TestComment.java | 14 ++++++- 14 files changed, 123 insertions(+), 53 deletions(-) diff --git a/src/java/org/apache/poi/ddf/AbstractEscherOptRecord.java b/src/java/org/apache/poi/ddf/AbstractEscherOptRecord.java index dbf4a6dad2..b97eeafda2 100644 --- a/src/java/org/apache/poi/ddf/AbstractEscherOptRecord.java +++ b/src/java/org/apache/poi/ddf/AbstractEscherOptRecord.java @@ -154,6 +154,15 @@ public abstract class AbstractEscherOptRecord extends EscherRecord sortProperties(); } + public void removeEscherProperty(int num){ + for ( Iterator iterator = getEscherProperties().iterator(); iterator.hasNext(); ) { + EscherProperty prop = iterator.next(); + if (prop.getPropertyNumber() == num){ + iterator.remove(); + } + } + } + /** * Retrieve the string representation of this record. */ diff --git a/src/java/org/apache/poi/ddf/EscherBoolProperty.java b/src/java/org/apache/poi/ddf/EscherBoolProperty.java index da9499af38..3044395485 100644 --- a/src/java/org/apache/poi/ddf/EscherBoolProperty.java +++ b/src/java/org/apache/poi/ddf/EscherBoolProperty.java @@ -70,7 +70,7 @@ public class EscherBoolProperty public String toXml(String tab){ StringBuilder builder = new StringBuilder(); builder.append(tab).append("<").append(getClass().getSimpleName()).append(" id=\"0x").append(HexDump.toHex(getId())) - .append("\" name=\"").append(getName()).append("\" blipId=\"") + .append("\" name=\"").append(getName()).append("\" simpleValue=\"").append(getPropertyValue()).append("\" blipId=\"") .append(isBlipId()).append("\" value=\"").append(isTrue()).append("\"").append("/>\n"); return builder.toString(); } diff --git a/src/java/org/apache/poi/hssf/usermodel/HSSFComment.java b/src/java/org/apache/poi/hssf/usermodel/HSSFComment.java index 4922529e6d..6c1fecbc3b 100644 --- a/src/java/org/apache/poi/hssf/usermodel/HSSFComment.java +++ b/src/java/org/apache/poi/hssf/usermodel/HSSFComment.java @@ -19,7 +19,6 @@ package org.apache.poi.hssf.usermodel; import org.apache.poi.ddf.*; import org.apache.poi.hssf.record.*; import org.apache.poi.ss.usermodel.Comment; -import org.apache.poi.ss.usermodel.RichTextString; /** * Represents a cell comment - a sticky note associated with a cell. @@ -28,6 +27,9 @@ import org.apache.poi.ss.usermodel.RichTextString; */ public class HSSFComment extends HSSFTextbox implements Comment { + private final static int FILL_TYPE_SOLID = 0; + private final static int FILL_TYPE_PICTURE = 3; + /* * TODO - make HSSFComment more consistent when created vs read from file. * Currently HSSFComment has two main forms (corresponding to the two constructors). There @@ -77,10 +79,11 @@ public class HSSFComment extends HSSFTextbox implements Comment { protected EscherContainerRecord createSpContainer() { EscherContainerRecord spContainer = super.createSpContainer(); EscherOptRecord opt = spContainer.getChildById(EscherOptRecord.RECORD_ID); - removeEscherProperty(opt, EscherProperties.TEXT__TEXTLEFT); - removeEscherProperty(opt, EscherProperties.TEXT__TEXTRIGHT); - removeEscherProperty(opt, EscherProperties.TEXT__TEXTTOP); - removeEscherProperty(opt, EscherProperties.TEXT__TEXTBOTTOM); + opt.removeEscherProperty(EscherProperties.TEXT__TEXTLEFT); + opt.removeEscherProperty(EscherProperties.TEXT__TEXTRIGHT); + opt.removeEscherProperty(EscherProperties.TEXT__TEXTTOP); + opt.removeEscherProperty(EscherProperties.TEXT__TEXTBOTTOM); + opt.setEscherProperty(new EscherSimpleProperty(EscherProperties.GROUPSHAPE__PRINT, false, false, 655362)); return spContainer; } @@ -215,7 +218,7 @@ public class HSSFComment extends HSSFTextbox implements Comment { } @Override - public HSSFShape cloneShape() { + protected HSSFShape cloneShape() { TextObjectRecord txo = (TextObjectRecord) getTextObjectRecord().cloneViaReserialise(); EscherContainerRecord spContainer = new EscherContainerRecord(); byte [] inSp = getEscherContainer().serialize(); @@ -224,4 +227,26 @@ public class HSSFComment extends HSSFTextbox implements Comment { NoteRecord note = (NoteRecord) getNoteRecord().cloneViaReserialise(); return new HSSFComment(spContainer, obj, txo, note); } + + public void setBackgroundImage(int pictureIndex){ + setPropertyValue(new EscherSimpleProperty( EscherProperties.FILL__PATTERNTEXTURE, false, true, pictureIndex)); + setPropertyValue(new EscherSimpleProperty( EscherProperties.FILL__FILLTYPE, false, false, FILL_TYPE_PICTURE)); + EscherBSERecord bse = _patriarch.getSheet().getWorkbook().getWorkbook().getBSERecord(pictureIndex); + bse.setRef(bse.getRef() + 1); + } + + public void resetBackgroundImage(){ + EscherSimpleProperty property = getOptRecord().lookup(EscherProperties.FILL__PATTERNTEXTURE); + if (null != property){ + EscherBSERecord bse = _patriarch.getSheet().getWorkbook().getWorkbook().getBSERecord(property.getPropertyValue()); + bse.setRef(bse.getRef() - 1); + getOptRecord().removeEscherProperty(EscherProperties.FILL__PATTERNTEXTURE); + } + setPropertyValue(new EscherSimpleProperty( EscherProperties.FILL__FILLTYPE, false, false, FILL_TYPE_SOLID)); + } + + public int getBackgroundImageId(){ + EscherSimpleProperty property = getOptRecord().lookup(EscherProperties.FILL__PATTERNTEXTURE); + return property == null ? 0 : property.getPropertyValue(); + } } diff --git a/src/java/org/apache/poi/hssf/usermodel/HSSFObjectData.java b/src/java/org/apache/poi/hssf/usermodel/HSSFObjectData.java index dfe2b76a7e..57451dd817 100644 --- a/src/java/org/apache/poi/hssf/usermodel/HSSFObjectData.java +++ b/src/java/org/apache/poi/hssf/usermodel/HSSFObjectData.java @@ -136,7 +136,7 @@ public final class HSSFObjectData extends HSSFPicture { } @Override - public HSSFShape cloneShape() { + protected HSSFShape cloneShape() { EscherContainerRecord spContainer = new EscherContainerRecord(); byte[] inSp = getEscherContainer().serialize(); spContainer.fillFields(inSp, 0, new DefaultEscherRecordFactory()); diff --git a/src/java/org/apache/poi/hssf/usermodel/HSSFPicture.java b/src/java/org/apache/poi/hssf/usermodel/HSSFPicture.java index 7d8618ba7b..2fa906f467 100644 --- a/src/java/org/apache/poi/hssf/usermodel/HSSFPicture.java +++ b/src/java/org/apache/poi/hssf/usermodel/HSSFPicture.java @@ -87,8 +87,8 @@ public class HSSFPicture extends HSSFSimpleShape implements Picture { protected EscherContainerRecord createSpContainer() { EscherContainerRecord spContainer = super.createSpContainer(); EscherOptRecord opt = spContainer.getChildById(EscherOptRecord.RECORD_ID); - removeEscherProperty(opt, EscherProperties.LINESTYLE__LINEDASHING); - removeEscherProperty(opt, EscherProperties.LINESTYLE__NOLINEDRAWDASH); + opt.removeEscherProperty(EscherProperties.LINESTYLE__LINEDASHING); + opt.removeEscherProperty(EscherProperties.LINESTYLE__NOLINEDRAWDASH); spContainer.removeChildRecord(spContainer.getChildById(EscherTextboxRecord.RECORD_ID)); return spContainer; } @@ -290,7 +290,7 @@ public class HSSFPicture extends HSSFSimpleShape implements Picture { } @Override - public HSSFShape cloneShape() { + protected HSSFShape cloneShape() { EscherContainerRecord spContainer = new EscherContainerRecord(); byte [] inSp = getEscherContainer().serialize(); spContainer.fillFields(inSp, 0, new DefaultEscherRecordFactory()); diff --git a/src/java/org/apache/poi/hssf/usermodel/HSSFShape.java b/src/java/org/apache/poi/hssf/usermodel/HSSFShape.java index ba7a866706..dd8a586f73 100644 --- a/src/java/org/apache/poi/hssf/usermodel/HSSFShape.java +++ b/src/java/org/apache/poi/hssf/usermodel/HSSFShape.java @@ -90,15 +90,6 @@ public abstract class HSSFShape { protected abstract void afterRemove(HSSFPatriarch patriarch); - protected void removeEscherProperty(EscherOptRecord opt, int num){ - for ( Iterator iterator = opt.getEscherProperties().iterator(); iterator.hasNext(); ) { - EscherProperty prop = iterator.next(); - if (prop.getPropertyNumber() == num){ - iterator.remove(); - } - } - } - void setShapeId(int shapeId){ EscherSpRecord spRecord = _escherContainer.getChildById(EscherSpRecord.RECORD_ID); spRecord.setShapeId(shapeId); @@ -112,15 +103,15 @@ public abstract class HSSFShape { abstract void afterInsert(HSSFPatriarch patriarch); - public EscherContainerRecord getEscherContainer() { + protected EscherContainerRecord getEscherContainer() { return _escherContainer; } - public ObjRecord getObjRecord() { + protected ObjRecord getObjRecord() { return _objRecord; } - public EscherOptRecord getOptRecord() { + protected EscherOptRecord getOptRecord() { return _optRecord; } @@ -353,5 +344,5 @@ public abstract class HSSFShape { return 1; } - public abstract HSSFShape cloneShape(); + protected abstract HSSFShape cloneShape(); } diff --git a/src/java/org/apache/poi/hssf/usermodel/HSSFShapeGroup.java b/src/java/org/apache/poi/hssf/usermodel/HSSFShapeGroup.java index 1c8ac95dfa..f08625a010 100644 --- a/src/java/org/apache/poi/hssf/usermodel/HSSFShapeGroup.java +++ b/src/java/org/apache/poi/hssf/usermodel/HSSFShapeGroup.java @@ -337,7 +337,7 @@ public class HSSFShapeGroup extends HSSFShape implements HSSFShapeContainer { } @Override - public HSSFShape cloneShape() { + protected HSSFShape cloneShape() { throw new IllegalStateException("Use method cloneShape(HSSFPatriarch patriarch)"); } diff --git a/src/java/org/apache/poi/hssf/usermodel/HSSFSimpleShape.java b/src/java/org/apache/poi/hssf/usermodel/HSSFSimpleShape.java index 77d23f3f1d..661c1d998c 100644 --- a/src/java/org/apache/poi/hssf/usermodel/HSSFSimpleShape.java +++ b/src/java/org/apache/poi/hssf/usermodel/HSSFSimpleShape.java @@ -57,6 +57,10 @@ public class HSSFSimpleShape extends HSSFShape public final static short OBJECT_TYPE_COMMENT = 25; // public final static short OBJECT_TYPE_MICROSOFT_OFFICE_DRAWING = 30; + public final static int WRAP_SQUARE = 0; + public final static int WRAP_BY_POINTS = 1; + public final static int WRAP_NONE = 2; + private static final Map objTypeToShapeType = new HashMap(); private TextObjectRecord _textObjectRecord; @@ -83,12 +87,14 @@ public class HSSFSimpleShape extends HSSFShape _textObjectRecord = createTextObjRecord(); } - public TextObjectRecord getTextObjectRecord() { + protected TextObjectRecord getTextObjectRecord() { return _textObjectRecord; } protected TextObjectRecord createTextObjRecord(){ TextObjectRecord obj = new TextObjectRecord(); + obj.setHorizontalTextAlignment(2); + obj.setVerticalTextAlignment(2); obj.setTextLocked(true); obj.setTextOrientation(TextObjectRecord.TEXT_ORIENTATION_NONE); obj.setStr(new HSSFRichTextString("")); @@ -194,7 +200,7 @@ public class HSSFSimpleShape extends HSSFShape } @Override - public HSSFShape cloneShape() { + protected HSSFShape cloneShape() { TextObjectRecord txo = null; EscherContainerRecord spContainer = new EscherContainerRecord(); byte [] inSp = getEscherContainer().serialize(); @@ -243,4 +249,13 @@ public class HSSFSimpleShape extends HSSFShape } spRecord.setShapeType(objTypeToShapeType.get((short) shapeType)); } + + public int getWrapText(){ + EscherSimpleProperty property = getOptRecord().lookup(EscherProperties.TEXT__WRAPTEXT); + return null == property ? WRAP_SQUARE : property.getPropertyValue(); + } + + public void setWrapText(int value){ + setPropertyValue(new EscherSimpleProperty(EscherProperties.TEXT__WRAPTEXT, false, false, value)); + } } diff --git a/src/java/org/apache/poi/hssf/usermodel/HSSFTextbox.java b/src/java/org/apache/poi/hssf/usermodel/HSSFTextbox.java index 9f859ee3ac..4260ead638 100644 --- a/src/java/org/apache/poi/hssf/usermodel/HSSFTextbox.java +++ b/src/java/org/apache/poi/hssf/usermodel/HSSFTextbox.java @@ -230,7 +230,7 @@ public class HSSFTextbox extends HSSFSimpleShape { } @Override - public HSSFShape cloneShape() { + protected HSSFShape cloneShape() { TextObjectRecord txo = (TextObjectRecord) getTextObjectRecord().cloneViaReserialise(); EscherContainerRecord spContainer = new EscherContainerRecord(); byte[] inSp = getEscherContainer().serialize(); diff --git a/src/java/org/apache/poi/hssf/usermodel/HSSFUnknownShape.java b/src/java/org/apache/poi/hssf/usermodel/HSSFUnknownShape.java index 75d33c6c65..e28d3f8cc1 100644 --- a/src/java/org/apache/poi/hssf/usermodel/HSSFUnknownShape.java +++ b/src/java/org/apache/poi/hssf/usermodel/HSSFUnknownShape.java @@ -50,7 +50,7 @@ public class HSSFUnknownShape extends HSSFShape { } @Override - public HSSFShape cloneShape() { + protected HSSFShape cloneShape() { return null; } } diff --git a/src/testcases/org/apache/poi/hssf/model/TestDrawingShapes.java b/src/testcases/org/apache/poi/hssf/model/TestDrawingShapes.java index 23dc0526cd..512ad2371e 100644 --- a/src/testcases/org/apache/poi/hssf/model/TestDrawingShapes.java +++ b/src/testcases/org/apache/poi/hssf/model/TestDrawingShapes.java @@ -120,7 +120,7 @@ public class TestDrawingShapes extends TestCase { HSSFSheet sheet = wb.createSheet(); HSSFPatriarch drawing = sheet.createDrawingPatriarch(); - HSSFClientAnchor anchor = new HSSFClientAnchor(10, 10, 200, 200, (short) 2, 2, (short) 15, 15); + HSSFClientAnchor anchor = new HSSFClientAnchor(10, 10, 50, 50, (short) 2, 2, (short) 4, 4); anchor.setAnchorType(2); assertEquals(anchor.getAnchorType(), 2); @@ -132,13 +132,16 @@ public class TestDrawingShapes extends TestCase { assertEquals(10000, rectangle.getLineWidth()); rectangle.setLineStyle(10); assertEquals(10, rectangle.getLineStyle()); + assertEquals(rectangle.getWrapText(), HSSFSimpleShape.WRAP_SQUARE); rectangle.setLineStyleColor(1111); rectangle.setNoFill(true); + rectangle.setWrapText(HSSFSimpleShape.WRAP_NONE); rectangle.setString(new HSSFRichTextString("teeeest")); assertEquals(rectangle.getLineStyleColor(), 1111); - assertEquals(((EscherSimpleProperty)((EscherOptRecord)rectangle.getEscherContainer().getChildById(EscherOptRecord.RECORD_ID)) + assertEquals(((EscherSimpleProperty)((EscherOptRecord)HSSFTestHelper.getEscherContainer(rectangle).getChildById(EscherOptRecord.RECORD_ID)) .lookup(EscherProperties.TEXT__TEXTID)).getPropertyValue(), "teeeest".hashCode()); assertEquals(rectangle.isNoFill(), true); + assertEquals(rectangle.getWrapText(), HSSFSimpleShape.WRAP_NONE); assertEquals(rectangle.getString().getString(), "teeeest"); wb = HSSFTestDataSamples.writeOutAndReadBack(wb); @@ -157,6 +160,7 @@ public class TestDrawingShapes extends TestCase { assertEquals(rectangle2.getFillColor(), 777); assertEquals(rectangle2.isNoFill(), true); assertEquals(rectangle2.getString().getString(), "teeeest"); + assertEquals(rectangle.getWrapText(), HSSFSimpleShape.WRAP_NONE); rectangle2.setFillColor(3333); rectangle2.setLineStyle(9); @@ -167,6 +171,7 @@ public class TestDrawingShapes extends TestCase { rectangle2.getAnchor().setDx2(3); rectangle2.getAnchor().setDy1(4); rectangle2.getAnchor().setDy2(5); + rectangle.setWrapText(HSSFSimpleShape.WRAP_BY_POINTS); rectangle2.setString(new HSSFRichTextString("test22")); wb = HSSFTestDataSamples.writeOutAndReadBack(wb); @@ -175,6 +180,7 @@ public class TestDrawingShapes extends TestCase { assertEquals(1, drawing.getChildren().size()); rectangle2 = (HSSFSimpleShape) drawing.getChildren().get(0); assertEquals(HSSFSimpleShape.OBJECT_TYPE_RECTANGLE, rectangle2.getShapeType()); + assertEquals(rectangle.getWrapText(), HSSFSimpleShape.WRAP_BY_POINTS); assertEquals(77, rectangle2.getLineWidth()); assertEquals(9, rectangle2.getLineStyle()); assertEquals(rectangle2.getLineStyleColor(), 4444); @@ -313,7 +319,7 @@ public class TestDrawingShapes extends TestCase { HSSFTextbox textbox = patriarch.createTextbox(new HSSFClientAnchor()); EscherOptRecord opt1 = HSSFTestHelper.getOptRecord(textbox); - EscherOptRecord opt2 = textbox.getEscherContainer().getChildById(EscherOptRecord.RECORD_ID); + EscherOptRecord opt2 = HSSFTestHelper.getEscherContainer(textbox).getChildById(EscherOptRecord.RECORD_ID); assertSame(opt1, opt2); } @@ -328,13 +334,13 @@ public class TestDrawingShapes extends TestCase { String opt1Str = opt.toXml(); textbox.setFillColor(textbox.getFillColor()); - assertEquals(opt1Str, textbox.getEscherContainer().getChildById(EscherOptRecord.RECORD_ID).toXml()); + assertEquals(opt1Str, HSSFTestHelper.getEscherContainer(textbox).getChildById(EscherOptRecord.RECORD_ID).toXml()); textbox.setLineStyle(textbox.getLineStyle()); - assertEquals(opt1Str, textbox.getEscherContainer().getChildById(EscherOptRecord.RECORD_ID).toXml()); + assertEquals(opt1Str, HSSFTestHelper.getEscherContainer(textbox).getChildById(EscherOptRecord.RECORD_ID).toXml()); textbox.setLineWidth(textbox.getLineWidth()); - assertEquals(opt1Str, textbox.getEscherContainer().getChildById(EscherOptRecord.RECORD_ID).toXml()); + assertEquals(opt1Str, HSSFTestHelper.getEscherContainer(textbox).getChildById(EscherOptRecord.RECORD_ID).toXml()); textbox.setLineStyleColor(textbox.getLineStyleColor()); - assertEquals(opt1Str, textbox.getEscherContainer().getChildById(EscherOptRecord.RECORD_ID).toXml()); + assertEquals(opt1Str, HSSFTestHelper.getEscherContainer(textbox).getChildById(EscherOptRecord.RECORD_ID).toXml()); } public void testDgRecordNumShapes(){ @@ -370,7 +376,7 @@ public class TestDrawingShapes extends TestCase { shape.setString(new HSSFRichTextString("string1")); assertEquals(shape.getString().getString(), "string1"); - assertNotNull(shape.getEscherContainer().getChildById(EscherTextboxRecord.RECORD_ID)); + assertNotNull(HSSFTestHelper.getEscherContainer(shape).getChildById(EscherTextboxRecord.RECORD_ID)); assertEquals(agg.getShapeToObjMapping().size(), 2); wb = HSSFTestDataSamples.writeOutAndReadBack(wb); @@ -381,9 +387,9 @@ public class TestDrawingShapes extends TestCase { shape = (HSSFSimpleShape) patriarch.getChildren().get(0); - assertNotNull(shape.getTextObjectRecord()); + assertNotNull(HSSFTestHelper.getTextObjRecord(shape)); assertEquals(shape.getString().getString(), "string1"); - assertNotNull(shape.getEscherContainer().getChildById(EscherTextboxRecord.RECORD_ID)); + assertNotNull(HSSFTestHelper.getEscherContainer(shape).getChildById(EscherTextboxRecord.RECORD_ID)); assertEquals(agg.getShapeToObjMapping().size(), 2); } @@ -396,8 +402,8 @@ public class TestDrawingShapes extends TestCase { HSSFTestHelper.setShapeId(combobox, 1024); ComboboxShape comboboxShape = new ComboboxShape(combobox, 1024); - assertTrue(Arrays.equals(comboboxShape.getSpContainer().serialize(), combobox.getEscherContainer().serialize())); - assertTrue(Arrays.equals(comboboxShape.getObjRecord().serialize(), combobox.getObjRecord().serialize())); + assertTrue(Arrays.equals(comboboxShape.getSpContainer().serialize(), HSSFTestHelper.getEscherContainer(combobox).serialize())); + assertTrue(Arrays.equals(comboboxShape.getObjRecord().serialize(), HSSFTestHelper.getObjRecord(combobox).serialize())); } public void testRemoveShapes(){ diff --git a/src/testcases/org/apache/poi/hssf/model/TestHSSFAnchor.java b/src/testcases/org/apache/poi/hssf/model/TestHSSFAnchor.java index 7d42b46375..08da761936 100644 --- a/src/testcases/org/apache/poi/hssf/model/TestHSSFAnchor.java +++ b/src/testcases/org/apache/poi/hssf/model/TestHSSFAnchor.java @@ -55,17 +55,17 @@ public class TestHSSFAnchor extends TestCase { HSSFSimpleShape rectangle = (HSSFSimpleShape) drawing.getChildren().get(0); - assertEquals(rectangle.getEscherContainer().getChild(0).getRecordId(), EscherSpRecord.RECORD_ID); - assertEquals(rectangle.getEscherContainer().getChild(1).getRecordId(), EscherOptRecord.RECORD_ID); - assertEquals(rectangle.getEscherContainer().getChild(2).getRecordId(), EscherClientAnchorRecord.RECORD_ID); - assertEquals(rectangle.getEscherContainer().getChild(3).getRecordId(), EscherClientDataRecord.RECORD_ID); + assertEquals(HSSFTestHelper.getEscherContainer(rectangle).getChild(0).getRecordId(), EscherSpRecord.RECORD_ID); + assertEquals(HSSFTestHelper.getEscherContainer(rectangle).getChild(1).getRecordId(), EscherOptRecord.RECORD_ID); + assertEquals(HSSFTestHelper.getEscherContainer(rectangle).getChild(2).getRecordId(), EscherClientAnchorRecord.RECORD_ID); + assertEquals(HSSFTestHelper.getEscherContainer(rectangle).getChild(3).getRecordId(), EscherClientDataRecord.RECORD_ID); rectangle.setAnchor(new HSSFClientAnchor()); - assertEquals(rectangle.getEscherContainer().getChild(0).getRecordId(), EscherSpRecord.RECORD_ID); - assertEquals(rectangle.getEscherContainer().getChild(1).getRecordId(), EscherOptRecord.RECORD_ID); - assertEquals(" " + HexDump.toHex(rectangle.getEscherContainer().getChild(2).getRecordId()) + " ", rectangle.getEscherContainer().getChild(2).getRecordId(), EscherClientAnchorRecord.RECORD_ID); - assertEquals(rectangle.getEscherContainer().getChild(3).getRecordId(), EscherClientDataRecord.RECORD_ID); + assertEquals(HSSFTestHelper.getEscherContainer(rectangle).getChild(0).getRecordId(), EscherSpRecord.RECORD_ID); + assertEquals(HSSFTestHelper.getEscherContainer(rectangle).getChild(1).getRecordId(), EscherOptRecord.RECORD_ID); + assertEquals(HSSFTestHelper.getEscherContainer(rectangle).getChild(2).getRecordId(), EscherClientAnchorRecord.RECORD_ID); + assertEquals(HSSFTestHelper.getEscherContainer(rectangle).getChild(3).getRecordId(), EscherClientDataRecord.RECORD_ID); } public void testCreateClientAnchorFromContainer(){ @@ -135,8 +135,8 @@ public class TestHSSFAnchor extends TestCase { rectangle.setAnchor(anchor); assertNotNull(anchor.getEscherAnchor()); - assertNotNull(rectangle.getEscherContainer()); - assertTrue(anchor.getEscherAnchor().equals(rectangle.getEscherContainer().getChildById(EscherClientAnchorRecord.RECORD_ID))); + assertNotNull(HSSFTestHelper.getEscherContainer(rectangle)); + assertTrue(anchor.getEscherAnchor().equals(HSSFTestHelper.getEscherContainer(rectangle).getChildById(EscherClientAnchorRecord.RECORD_ID))); } public void testClientAnchorFromEscher(){ diff --git a/src/testcases/org/apache/poi/hssf/usermodel/HSSFTestHelper.java b/src/testcases/org/apache/poi/hssf/usermodel/HSSFTestHelper.java index 465f7746b0..3954688912 100644 --- a/src/testcases/org/apache/poi/hssf/usermodel/HSSFTestHelper.java +++ b/src/testcases/org/apache/poi/hssf/usermodel/HSSFTestHelper.java @@ -21,6 +21,8 @@ import org.apache.poi.hssf.model.DrawingManager2; import org.apache.poi.hssf.model.InternalSheet; import org.apache.poi.hssf.model.InternalWorkbook; import org.apache.poi.hssf.record.EscherAggregate; +import org.apache.poi.hssf.record.ObjRecord; +import org.apache.poi.hssf.record.TextObjectRecord; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; @@ -104,4 +106,16 @@ public class HSSFTestHelper { public static void setShapeId(HSSFShape shape, int id){ shape.setShapeId(id); } + + public static EscherContainerRecord getEscherContainer(HSSFShape shape){ + return shape.getEscherContainer(); + } + + public static TextObjectRecord getTextObjRecord(HSSFSimpleShape shape){ + return shape.getTextObjectRecord(); + } + + public static ObjRecord getObjRecord(HSSFShape shape){ + return shape.getObjRecord(); + } } diff --git a/src/testcases/org/apache/poi/hssf/usermodel/TestComment.java b/src/testcases/org/apache/poi/hssf/usermodel/TestComment.java index cbf49bb5e3..1f8c069351 100644 --- a/src/testcases/org/apache/poi/hssf/usermodel/TestComment.java +++ b/src/testcases/org/apache/poi/hssf/usermodel/TestComment.java @@ -7,7 +7,7 @@ import org.apache.poi.hssf.model.CommentShape; import org.apache.poi.hssf.model.HSSFTestModelHelper; import org.apache.poi.hssf.record.*; -import java.io.IOException; +import java.io.*; import java.util.Arrays; /** @@ -91,11 +91,14 @@ public class TestComment extends TestCase { HSSFWorkbook wb = new HSSFWorkbook(); HSSFSheet sh = wb.createSheet(); HSSFPatriarch patriarch = sh.createDrawingPatriarch(); + int idx = wb.addPicture(new byte[]{1,2,3}, HSSFWorkbook.PICTURE_TYPE_PNG); HSSFComment comment = patriarch.createCellComment(new HSSFClientAnchor()); comment.setString(new HSSFRichTextString("comment1")); - comment = patriarch.createCellComment(new HSSFClientAnchor()); + comment = patriarch.createCellComment(new HSSFClientAnchor(0,0,100,100,(short)0,0,(short)10,10)); comment.setString(new HSSFRichTextString("comment2")); + comment.setBackgroundImage(idx); + assertEquals(comment.getBackgroundImageId(), idx); assertEquals(patriarch.getChildren().size(), 2); @@ -103,6 +106,11 @@ public class TestComment extends TestCase { sh = wb.getSheetAt(0); patriarch = sh.getDrawingPatriarch(); + comment = (HSSFComment) patriarch.getChildren().get(1); + assertEquals(comment.getBackgroundImageId(), idx); + comment.resetBackgroundImage(); + assertEquals(comment.getBackgroundImageId(), 0); + assertEquals(patriarch.getChildren().size(), 2); comment = patriarch.createCellComment(new HSSFClientAnchor()); comment.setString(new HSSFRichTextString("comment3")); @@ -111,6 +119,8 @@ public class TestComment extends TestCase { wb = HSSFTestDataSamples.writeOutAndReadBack(wb); sh = wb.getSheetAt(0); patriarch = sh.getDrawingPatriarch(); + comment = (HSSFComment) patriarch.getChildren().get(1); + assertEquals(comment.getBackgroundImageId(), 0); assertEquals(patriarch.getChildren().size(), 3); assertEquals(((HSSFComment) patriarch.getChildren().get(0)).getString().getString(), "comment1"); assertEquals(((HSSFComment) patriarch.getChildren().get(1)).getString().getString(), "comment2"); -- 2.39.5