summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEvgeniy Berlog <berlog@apache.org>2012-09-09 13:21:38 +0000
committerEvgeniy Berlog <berlog@apache.org>2012-09-09 13:21:38 +0000
commita0ad9be37d61f5c11fe0bb49e824dfdd8127e4ed (patch)
tree2ee602699b92ae8af2f2a5fd06ab6df0ceb9d9d2
parent8a8bf7d3933c9431a255addf9ab46d8bab018338 (diff)
downloadpoi-a0ad9be37d61f5c11fe0bb49e824dfdd8127e4ed.tar.gz
poi-a0ad9be37d61f5c11fe0bb49e824dfdd8127e4ed.zip
fixed bug 46250
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1382494 13f79535-47bb-0310-9956-ffa450edef68
-rw-r--r--src/java/org/apache/poi/hssf/usermodel/HSSFSimpleShape.java18
-rw-r--r--src/java/org/apache/poi/hssf/usermodel/HSSFTextbox.java6
-rw-r--r--src/testcases/org/apache/poi/hssf/usermodel/TestBugs.java14
-rw-r--r--test-data/spreadsheet/46250.xlsbin0 -> 97792 bytes
4 files changed, 35 insertions, 3 deletions
diff --git a/src/java/org/apache/poi/hssf/usermodel/HSSFSimpleShape.java b/src/java/org/apache/poi/hssf/usermodel/HSSFSimpleShape.java
index ffbcec50e6..584f426fd3 100644
--- a/src/java/org/apache/poi/hssf/usermodel/HSSFSimpleShape.java
+++ b/src/java/org/apache/poi/hssf/usermodel/HSSFSimpleShape.java
@@ -170,7 +170,8 @@ public class HSSFSimpleShape extends HSSFShape
HSSFRichTextString rtr = (HSSFRichTextString) string;
// If font is not set we must set the default one
if (rtr.numFormattingRuns() == 0) rtr.applyFont((short) 0);
- _textObjectRecord.setStr(rtr);
+ TextObjectRecord txo = getOrCreateTextObjRecord();
+ txo.setStr(rtr);
if (string.getString() != null){
setPropertyValue(new EscherSimpleProperty(EscherProperties.TEXT__TEXTID, string.getString().hashCode()));
}
@@ -234,4 +235,19 @@ public class HSSFSimpleShape extends HSSFShape
EscherSpRecord spRecord = getEscherContainer().getChildById(EscherSpRecord.RECORD_ID);
spRecord.setShapeType((short) value);
}
+
+ private TextObjectRecord getOrCreateTextObjRecord(){
+ if (getTextObjectRecord() == null){
+ _textObjectRecord = createTextObjRecord();
+ }
+ EscherTextboxRecord escherTextbox = getEscherContainer().getChildById(EscherTextboxRecord.RECORD_ID);
+ if (null == escherTextbox){
+ escherTextbox = new EscherTextboxRecord();
+ escherTextbox.setRecordId(EscherTextboxRecord.RECORD_ID);
+ escherTextbox.setOptions((short) 0x0000);
+ getEscherContainer().addChildRecord(escherTextbox);
+ getPatriarch()._getBoundAggregate().associateShapeToObjRecord(escherTextbox, _textObjectRecord);
+ }
+ return _textObjectRecord;
+ }
}
diff --git a/src/java/org/apache/poi/hssf/usermodel/HSSFTextbox.java b/src/java/org/apache/poi/hssf/usermodel/HSSFTextbox.java
index 4260ead638..dacdadd4f5 100644
--- a/src/java/org/apache/poi/hssf/usermodel/HSSFTextbox.java
+++ b/src/java/org/apache/poi/hssf/usermodel/HSSFTextbox.java
@@ -133,7 +133,9 @@ public class HSSFTextbox extends HSSFSimpleShape {
void afterInsert(HSSFPatriarch patriarch) {
EscherAggregate agg = patriarch._getBoundAggregate();
agg.associateShapeToObjRecord(getEscherContainer().getChildById(EscherClientDataRecord.RECORD_ID), getObjRecord());
- agg.associateShapeToObjRecord(getEscherContainer().getChildById(EscherTextboxRecord.RECORD_ID), getTextObjectRecord());
+ if (getTextObjectRecord() != null){
+ agg.associateShapeToObjRecord(getEscherContainer().getChildById(EscherTextboxRecord.RECORD_ID), getTextObjectRecord());
+ }
}
/**
@@ -231,7 +233,7 @@ public class HSSFTextbox extends HSSFSimpleShape {
@Override
protected HSSFShape cloneShape() {
- TextObjectRecord txo = (TextObjectRecord) getTextObjectRecord().cloneViaReserialise();
+ TextObjectRecord txo = getTextObjectRecord() == null ? null : (TextObjectRecord) getTextObjectRecord().cloneViaReserialise();
EscherContainerRecord spContainer = new EscherContainerRecord();
byte[] inSp = getEscherContainer().serialize();
spContainer.fillFields(inSp, 0, new DefaultEscherRecordFactory());
diff --git a/src/testcases/org/apache/poi/hssf/usermodel/TestBugs.java b/src/testcases/org/apache/poi/hssf/usermodel/TestBugs.java
index 9c566b05b1..8f4a4ec652 100644
--- a/src/testcases/org/apache/poi/hssf/usermodel/TestBugs.java
+++ b/src/testcases/org/apache/poi/hssf/usermodel/TestBugs.java
@@ -2283,4 +2283,18 @@ if(1==2) {
wb = writeOutAndReadBack((HSSFWorkbook) wb);
assertEquals(wb.getAllPictures().size(), 1);
}
+
+ public void test46250(){
+ Workbook wb = openSample("46250.xls");
+ Sheet sh = wb.getSheet("Template");
+ Sheet cSh = wb.cloneSheet(wb.getSheetIndex(sh));
+
+ HSSFPatriarch patriarch = (HSSFPatriarch) cSh.createDrawingPatriarch();
+ HSSFTextbox tb = (HSSFTextbox) patriarch.getChildren().get(2);
+
+ tb.setString(new HSSFRichTextString("POI test"));
+ tb.setAnchor(new HSSFClientAnchor(0,0,0,0,(short)0,0,(short)10,10));
+
+ wb = writeOutAndReadBack((HSSFWorkbook) wb);
+ }
}
diff --git a/test-data/spreadsheet/46250.xls b/test-data/spreadsheet/46250.xls
new file mode 100644
index 0000000000..7260bf3c60
--- /dev/null
+++ b/test-data/spreadsheet/46250.xls
Binary files differ