You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@poi.apache.org by be...@apache.org on 2012/07/19 22:29:42 UTC
svn commit: r1363524 - in /poi/branches/gsoc2012/src:
java/org/apache/poi/hssf/usermodel/ testcases/org/apache/poi/hssf/model/
Author: berlog
Date: Thu Jul 19 20:29:42 2012
New Revision: 1363524
URL: http://svn.apache.org/viewvc?rev=1363524&view=rev
Log:
implemented removing of all shape types
Modified:
poi/branches/gsoc2012/src/java/org/apache/poi/hssf/usermodel/HSSFComment.java
poi/branches/gsoc2012/src/java/org/apache/poi/hssf/usermodel/HSSFPatriarch.java
poi/branches/gsoc2012/src/java/org/apache/poi/hssf/usermodel/HSSFPolygon.java
poi/branches/gsoc2012/src/java/org/apache/poi/hssf/usermodel/HSSFShapeGroup.java
poi/branches/gsoc2012/src/java/org/apache/poi/hssf/usermodel/HSSFSimpleShape.java
poi/branches/gsoc2012/src/java/org/apache/poi/hssf/usermodel/HSSFTextbox.java
poi/branches/gsoc2012/src/testcases/org/apache/poi/hssf/model/TestDrawingShapes.java
Modified: poi/branches/gsoc2012/src/java/org/apache/poi/hssf/usermodel/HSSFComment.java
URL: http://svn.apache.org/viewvc/poi/branches/gsoc2012/src/java/org/apache/poi/hssf/usermodel/HSSFComment.java?rev=1363524&r1=1363523&r2=1363524&view=diff
==============================================================================
--- poi/branches/gsoc2012/src/java/org/apache/poi/hssf/usermodel/HSSFComment.java (original)
+++ poi/branches/gsoc2012/src/java/org/apache/poi/hssf/usermodel/HSSFComment.java Thu Jul 19 20:29:42 2012
@@ -210,8 +210,7 @@ public class HSSFComment extends HSSFTex
}
public void afterRemove(HSSFPatriarch patriarch){
- patriarch._getBoundAggregate().removeShapeToObjRecord(getEscherContainer().getChildById(EscherClientDataRecord.RECORD_ID));
- patriarch._getBoundAggregate().removeShapeToObjRecord(getEscherContainer().getChildById(EscherTextboxRecord.RECORD_ID));
+ super.afterRemove(patriarch);
patriarch._getBoundAggregate().removeTailRecord(getNoteRecord());
}
Modified: poi/branches/gsoc2012/src/java/org/apache/poi/hssf/usermodel/HSSFPatriarch.java
URL: http://svn.apache.org/viewvc/poi/branches/gsoc2012/src/java/org/apache/poi/hssf/usermodel/HSSFPatriarch.java?rev=1363524&r1=1363523&r2=1363524&view=diff
==============================================================================
--- poi/branches/gsoc2012/src/java/org/apache/poi/hssf/usermodel/HSSFPatriarch.java (original)
+++ poi/branches/gsoc2012/src/java/org/apache/poi/hssf/usermodel/HSSFPatriarch.java Thu Jul 19 20:29:42 2012
@@ -88,10 +88,13 @@ public final class HSSFPatriarch impleme
*
* @param shape to be removed
*/
- public void removeShape(HSSFShape shape) {
- _mainSpgrContainer.removeChildRecord(shape.getEscherContainer());
- shape.afterRemove(this);
- _shapes.remove(shape);
+ public boolean removeShape(HSSFShape shape) {
+ boolean isRemoved = _mainSpgrContainer.removeChildRecord(shape.getEscherContainer());
+ if (isRemoved){
+ shape.afterRemove(this);
+ _shapes.remove(shape);
+ }
+ return isRemoved;
}
void afterCreate() {
Modified: poi/branches/gsoc2012/src/java/org/apache/poi/hssf/usermodel/HSSFPolygon.java
URL: http://svn.apache.org/viewvc/poi/branches/gsoc2012/src/java/org/apache/poi/hssf/usermodel/HSSFPolygon.java?rev=1363524&r1=1363523&r2=1363524&view=diff
==============================================================================
--- poi/branches/gsoc2012/src/java/org/apache/poi/hssf/usermodel/HSSFPolygon.java (original)
+++ poi/branches/gsoc2012/src/java/org/apache/poi/hssf/usermodel/HSSFPolygon.java Thu Jul 19 20:29:42 2012
@@ -114,6 +114,7 @@ public class HSSFPolygon extends HSSFSi
@Override
protected void afterRemove(HSSFPatriarch patriarch) {
+ patriarch._getBoundAggregate().removeShapeToObjRecord(getEscherContainer().getChildById(EscherClientDataRecord.RECORD_ID));
}
public int[] getXPoints() {
Modified: poi/branches/gsoc2012/src/java/org/apache/poi/hssf/usermodel/HSSFShapeGroup.java
URL: http://svn.apache.org/viewvc/poi/branches/gsoc2012/src/java/org/apache/poi/hssf/usermodel/HSSFShapeGroup.java?rev=1363524&r1=1363523&r2=1363524&view=diff
==============================================================================
--- poi/branches/gsoc2012/src/java/org/apache/poi/hssf/usermodel/HSSFShapeGroup.java (original)
+++ poi/branches/gsoc2012/src/java/org/apache/poi/hssf/usermodel/HSSFShapeGroup.java Thu Jul 19 20:29:42 2012
@@ -124,6 +124,14 @@ public class HSSFShapeGroup extends HSSF
@Override
protected void afterRemove(HSSFPatriarch patriarch) {
+ patriarch._getBoundAggregate().removeShapeToObjRecord(getEscherContainer().getChildContainers().get(0)
+ .getChildById(EscherClientDataRecord.RECORD_ID));
+ for ( int i=0; i<shapes.size(); i++ ) {
+ HSSFShape shape = shapes.get(i);
+ removeShape(shape);
+ shape.afterRemove(_patriarch);
+ }
+ shapes.clear();
}
private void onCreate(HSSFShape shape){
@@ -360,4 +368,13 @@ public class HSSFShapeGroup extends HSSF
}
return group;
}
+
+ public boolean removeShape(HSSFShape shape) {
+ boolean isRemoved = getEscherContainer().removeChildRecord(shape.getEscherContainer());
+ if (isRemoved){
+ shape.afterRemove(this._patriarch);
+ shapes.remove(shape);
+ }
+ return isRemoved;
+ }
}
Modified: poi/branches/gsoc2012/src/java/org/apache/poi/hssf/usermodel/HSSFSimpleShape.java
URL: http://svn.apache.org/viewvc/poi/branches/gsoc2012/src/java/org/apache/poi/hssf/usermodel/HSSFSimpleShape.java?rev=1363524&r1=1363523&r2=1363524&view=diff
==============================================================================
--- poi/branches/gsoc2012/src/java/org/apache/poi/hssf/usermodel/HSSFSimpleShape.java (original)
+++ poi/branches/gsoc2012/src/java/org/apache/poi/hssf/usermodel/HSSFSimpleShape.java Thu Jul 19 20:29:42 2012
@@ -152,6 +152,10 @@ public class HSSFSimpleShape extends HSS
@Override
protected void afterRemove(HSSFPatriarch patriarch) {
+ patriarch._getBoundAggregate().removeShapeToObjRecord(getEscherContainer().getChildById(EscherClientDataRecord.RECORD_ID));
+ if (null != getEscherContainer().getChildById(EscherTextboxRecord.RECORD_ID)){
+ patriarch._getBoundAggregate().removeShapeToObjRecord(getEscherContainer().getChildById(EscherTextboxRecord.RECORD_ID));
+ }
}
/**
Modified: poi/branches/gsoc2012/src/java/org/apache/poi/hssf/usermodel/HSSFTextbox.java
URL: http://svn.apache.org/viewvc/poi/branches/gsoc2012/src/java/org/apache/poi/hssf/usermodel/HSSFTextbox.java?rev=1363524&r1=1363523&r2=1363524&view=diff
==============================================================================
--- poi/branches/gsoc2012/src/java/org/apache/poi/hssf/usermodel/HSSFTextbox.java (original)
+++ poi/branches/gsoc2012/src/java/org/apache/poi/hssf/usermodel/HSSFTextbox.java Thu Jul 19 20:29:42 2012
@@ -71,14 +71,15 @@ public class HSSFTextbox extends HSSFSim
ObjRecord obj = new ObjRecord();
CommonObjectDataSubRecord c = new CommonObjectDataSubRecord();
c.setObjectType(HSSFTextbox.OBJECT_TYPE_TEXT);
- c.setLocked( true );
- c.setPrintable( true );
- c.setAutofill( true );
- c.setAutoline( true );
+ c.setLocked(true);
+ c.setPrintable(true);
+ c.setAutofill(true);
+ c.setAutoline(true);
EndSubRecord e = new EndSubRecord();
- obj.addSubRecord( c );
- obj.addSubRecord( e );
- return obj; }
+ obj.addSubRecord(c);
+ obj.addSubRecord(e);
+ return obj;
+ }
@Override
protected EscherContainerRecord createSpContainer() {
@@ -106,12 +107,12 @@ public class HSSFTextbox extends HSSFSim
opt.addEscherProperty(new EscherSimpleProperty(EscherProperties.TEXT__TEXTBOTTOM, 0));
opt.setEscherProperty(new EscherSimpleProperty(EscherProperties.LINESTYLE__LINEDASHING, LINESTYLE_SOLID));
- opt.setEscherProperty( new EscherBoolProperty( EscherProperties.LINESTYLE__NOLINEDRAWDASH, 0x00080008));
+ opt.setEscherProperty(new EscherBoolProperty(EscherProperties.LINESTYLE__NOLINEDRAWDASH, 0x00080008));
opt.setEscherProperty(new EscherSimpleProperty(EscherProperties.LINESTYLE__LINEWIDTH, LINEWIDTH_DEFAULT));
opt.setEscherProperty(new EscherRGBProperty(EscherProperties.FILL__FILLCOLOR, FILL__FILLCOLOR_DEFAULT));
opt.setEscherProperty(new EscherRGBProperty(EscherProperties.LINESTYLE__COLOR, LINESTYLE__COLOR_DEFAULT));
opt.setEscherProperty(new EscherBoolProperty(EscherProperties.FILL__NOFILLHITTEST, NO_FILLHITTEST_FALSE));
- opt.setEscherProperty(new EscherBoolProperty( EscherProperties.GROUPSHAPE__PRINT, 0x080000));
+ opt.setEscherProperty(new EscherBoolProperty(EscherProperties.GROUPSHAPE__PRINT, 0x080000));
EscherRecord anchor = getAnchor().getEscherAnchor();
clientData.setRecordId(EscherClientDataRecord.RECORD_ID);
@@ -137,7 +138,7 @@ public class HSSFTextbox extends HSSFSim
}
@Override
- void afterInsert(HSSFPatriarch patriarch){
+ void afterInsert(HSSFPatriarch patriarch) {
EscherAggregate agg = patriarch._getBoundAggregate();
agg.associateShapeToObjRecord(getEscherContainer().getChildById(EscherClientDataRecord.RECORD_ID), getObjRecord());
agg.associateShapeToObjRecord(getEscherContainer().getChildById(EscherTextboxRecord.RECORD_ID), getTextObjectRecord());
@@ -148,7 +149,7 @@ public class HSSFTextbox extends HSSFSim
*/
public int getMarginLeft() {
EscherSimpleProperty property = getOptRecord().lookup(EscherProperties.TEXT__TEXTLEFT);
- return property == null ? 0: property.getPropertyValue();
+ return property == null ? 0 : property.getPropertyValue();
}
/**
@@ -163,7 +164,7 @@ public class HSSFTextbox extends HSSFSim
*/
public int getMarginRight() {
EscherSimpleProperty property = getOptRecord().lookup(EscherProperties.TEXT__TEXTRIGHT);
- return property == null ? 0: property.getPropertyValue();
+ return property == null ? 0 : property.getPropertyValue();
}
/**
@@ -178,7 +179,7 @@ public class HSSFTextbox extends HSSFSim
*/
public int getMarginTop() {
EscherSimpleProperty property = getOptRecord().lookup(EscherProperties.TEXT__TEXTTOP);
- return property == null ? 0: property.getPropertyValue();
+ return property == null ? 0 : property.getPropertyValue();
}
/**
@@ -193,7 +194,7 @@ public class HSSFTextbox extends HSSFSim
*/
public int getMarginBottom() {
EscherSimpleProperty property = getOptRecord().lookup(EscherProperties.TEXT__TEXTBOTTOM);
- return property == null ? 0: property.getPropertyValue();
+ return property == null ? 0 : property.getPropertyValue();
}
/**
@@ -233,16 +234,22 @@ public class HSSFTextbox extends HSSFSim
@Override
public void setShapeType(int shapeType) {
- throw new IllegalStateException("Shape type can not be changed in "+this.getClass().getSimpleName());
+ throw new IllegalStateException("Shape type can not be changed in " + this.getClass().getSimpleName());
}
@Override
public HSSFShape cloneShape() {
TextObjectRecord txo = (TextObjectRecord) getTextObjectRecord().cloneViaReserialise();
EscherContainerRecord spContainer = new EscherContainerRecord();
- byte [] inSp = getEscherContainer().serialize();
+ byte[] inSp = getEscherContainer().serialize();
spContainer.fillFields(inSp, 0, new DefaultEscherRecordFactory());
ObjRecord obj = (ObjRecord) getObjRecord().cloneViaReserialise();
return new HSSFTextbox(spContainer, obj, txo);
}
+
+ @Override
+ protected void afterRemove(HSSFPatriarch patriarch) {
+ patriarch._getBoundAggregate().removeShapeToObjRecord(getEscherContainer().getChildById(EscherClientDataRecord.RECORD_ID));
+ patriarch._getBoundAggregate().removeShapeToObjRecord(getEscherContainer().getChildById(EscherTextboxRecord.RECORD_ID));
+ }
}
Modified: poi/branches/gsoc2012/src/testcases/org/apache/poi/hssf/model/TestDrawingShapes.java
URL: http://svn.apache.org/viewvc/poi/branches/gsoc2012/src/testcases/org/apache/poi/hssf/model/TestDrawingShapes.java?rev=1363524&r1=1363523&r2=1363524&view=diff
==============================================================================
--- poi/branches/gsoc2012/src/testcases/org/apache/poi/hssf/model/TestDrawingShapes.java (original)
+++ poi/branches/gsoc2012/src/testcases/org/apache/poi/hssf/model/TestDrawingShapes.java Thu Jul 19 20:29:42 2012
@@ -7,6 +7,7 @@ import org.apache.poi.hssf.record.Common
import org.apache.poi.hssf.record.EscherAggregate;
import org.apache.poi.hssf.record.ObjRecord;
import org.apache.poi.hssf.usermodel.*;
+import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.util.HexDump;
import java.io.IOException;
@@ -395,4 +396,144 @@ public class TestDrawingShapes extends T
assertTrue(Arrays.equals(comboboxShape.getSpContainer().serialize(), combobox.getEscherContainer().serialize()));
assertTrue(Arrays.equals(comboboxShape.getObjRecord().serialize(), combobox.getObjRecord().serialize()));
}
+
+ public void testRemoveShapes(){
+ HSSFWorkbook wb = new HSSFWorkbook();
+ HSSFSheet sheet = wb.createSheet();
+ HSSFPatriarch patriarch = sheet.createDrawingPatriarch();
+
+ HSSFSimpleShape rectangle = patriarch.createSimpleShape(new HSSFClientAnchor());
+ rectangle.setShapeType(HSSFSimpleShape.OBJECT_TYPE_RECTANGLE);
+
+ int idx = wb.addPicture(new byte[]{1,2,3}, Workbook.PICTURE_TYPE_JPEG);
+ patriarch.createPicture(new HSSFClientAnchor(), idx);
+
+ patriarch.createCellComment(new HSSFClientAnchor());
+
+ HSSFPolygon polygon = patriarch.createPolygon(new HSSFClientAnchor());
+ polygon.setPoints(new int[]{1,2}, new int[]{2,3});
+
+ patriarch.createTextbox(new HSSFClientAnchor());
+
+ HSSFShapeGroup group = patriarch.createGroup(new HSSFClientAnchor());
+ group.createTextbox(new HSSFChildAnchor());
+ group.createPicture(new HSSFChildAnchor(), idx);
+
+ assertEquals(patriarch.getChildren().size(), 6);
+ assertEquals(group.getChildren().size(), 2);
+
+ assertEquals(HSSFTestHelper.getEscherAggregate(patriarch).getShapeToObjMapping().size(), 12);
+ assertEquals(HSSFTestHelper.getEscherAggregate(patriarch).getTailRecords().size(), 1);
+
+ wb = HSSFTestDataSamples.writeOutAndReadBack(wb);
+ sheet = wb.getSheetAt(0);
+ patriarch = sheet.getDrawingPatriarch();
+
+ assertEquals(HSSFTestHelper.getEscherAggregate(patriarch).getShapeToObjMapping().size(), 12);
+ assertEquals(HSSFTestHelper.getEscherAggregate(patriarch).getTailRecords().size(), 1);
+
+ assertEquals(patriarch.getChildren().size(), 6);
+
+ group = (HSSFShapeGroup) patriarch.getChildren().get(5);
+ group.removeShape(group.getChildren().get(0));
+
+ assertEquals(HSSFTestHelper.getEscherAggregate(patriarch).getShapeToObjMapping().size(), 10);
+ assertEquals(HSSFTestHelper.getEscherAggregate(patriarch).getTailRecords().size(), 1);
+
+ wb = HSSFTestDataSamples.writeOutAndReadBack(wb);
+ sheet = wb.getSheetAt(0);
+ patriarch = sheet.getDrawingPatriarch();
+
+ assertEquals(HSSFTestHelper.getEscherAggregate(patriarch).getShapeToObjMapping().size(), 10);
+ assertEquals(HSSFTestHelper.getEscherAggregate(patriarch).getTailRecords().size(), 1);
+
+ group = (HSSFShapeGroup) patriarch.getChildren().get(5);
+ patriarch.removeShape(group);
+
+ assertEquals(HSSFTestHelper.getEscherAggregate(patriarch).getShapeToObjMapping().size(), 8);
+ assertEquals(HSSFTestHelper.getEscherAggregate(patriarch).getTailRecords().size(), 1);
+
+ wb = HSSFTestDataSamples.writeOutAndReadBack(wb);
+ sheet = wb.getSheetAt(0);
+ patriarch = sheet.getDrawingPatriarch();
+
+ assertEquals(HSSFTestHelper.getEscherAggregate(patriarch).getShapeToObjMapping().size(), 8);
+ assertEquals(HSSFTestHelper.getEscherAggregate(patriarch).getTailRecords().size(), 1);
+ assertEquals(patriarch.getChildren().size(), 5);
+
+ HSSFShape shape = patriarch.getChildren().get(0);
+ patriarch.removeShape(shape);
+
+ assertEquals(HSSFTestHelper.getEscherAggregate(patriarch).getShapeToObjMapping().size(), 6);
+ assertEquals(HSSFTestHelper.getEscherAggregate(patriarch).getTailRecords().size(), 1);
+ assertEquals(patriarch.getChildren().size(), 4);
+
+ wb = HSSFTestDataSamples.writeOutAndReadBack(wb);
+ sheet = wb.getSheetAt(0);
+ patriarch = sheet.getDrawingPatriarch();
+
+ assertEquals(HSSFTestHelper.getEscherAggregate(patriarch).getShapeToObjMapping().size(), 6);
+ assertEquals(HSSFTestHelper.getEscherAggregate(patriarch).getTailRecords().size(), 1);
+ assertEquals(patriarch.getChildren().size(), 4);
+
+ HSSFPicture picture = (HSSFPicture) patriarch.getChildren().get(0);
+ patriarch.removeShape(picture);
+
+ assertEquals(HSSFTestHelper.getEscherAggregate(patriarch).getShapeToObjMapping().size(), 5);
+ assertEquals(HSSFTestHelper.getEscherAggregate(patriarch).getTailRecords().size(), 1);
+ assertEquals(patriarch.getChildren().size(), 3);
+
+ wb = HSSFTestDataSamples.writeOutAndReadBack(wb);
+ sheet = wb.getSheetAt(0);
+ patriarch = sheet.getDrawingPatriarch();
+
+ assertEquals(HSSFTestHelper.getEscherAggregate(patriarch).getShapeToObjMapping().size(), 5);
+ assertEquals(HSSFTestHelper.getEscherAggregate(patriarch).getTailRecords().size(), 1);
+ assertEquals(patriarch.getChildren().size(), 3);
+
+ HSSFComment comment = (HSSFComment) patriarch.getChildren().get(0);
+ patriarch.removeShape(comment);
+
+ assertEquals(HSSFTestHelper.getEscherAggregate(patriarch).getShapeToObjMapping().size(), 3);
+ assertEquals(HSSFTestHelper.getEscherAggregate(patriarch).getTailRecords().size(), 0);
+ assertEquals(patriarch.getChildren().size(), 2);
+
+ wb = HSSFTestDataSamples.writeOutAndReadBack(wb);
+ sheet = wb.getSheetAt(0);
+ patriarch = sheet.getDrawingPatriarch();
+
+ assertEquals(HSSFTestHelper.getEscherAggregate(patriarch).getShapeToObjMapping().size(), 3);
+ assertEquals(HSSFTestHelper.getEscherAggregate(patriarch).getTailRecords().size(), 0);
+ assertEquals(patriarch.getChildren().size(), 2);
+
+ polygon = (HSSFPolygon) patriarch.getChildren().get(0);
+ patriarch.removeShape(polygon);
+
+ assertEquals(HSSFTestHelper.getEscherAggregate(patriarch).getShapeToObjMapping().size(), 2);
+ assertEquals(HSSFTestHelper.getEscherAggregate(patriarch).getTailRecords().size(), 0);
+ assertEquals(patriarch.getChildren().size(), 1);
+
+ wb = HSSFTestDataSamples.writeOutAndReadBack(wb);
+ sheet = wb.getSheetAt(0);
+ patriarch = sheet.getDrawingPatriarch();
+
+ assertEquals(HSSFTestHelper.getEscherAggregate(patriarch).getShapeToObjMapping().size(), 2);
+ assertEquals(HSSFTestHelper.getEscherAggregate(patriarch).getTailRecords().size(), 0);
+ assertEquals(patriarch.getChildren().size(), 1);
+
+ HSSFTextbox textbox = (HSSFTextbox) patriarch.getChildren().get(0);
+ patriarch.removeShape(textbox);
+
+ assertEquals(HSSFTestHelper.getEscherAggregate(patriarch).getShapeToObjMapping().size(), 0);
+ assertEquals(HSSFTestHelper.getEscherAggregate(patriarch).getTailRecords().size(), 0);
+ assertEquals(patriarch.getChildren().size(), 0);
+
+ wb = HSSFTestDataSamples.writeOutAndReadBack(wb);
+ sheet = wb.getSheetAt(0);
+ patriarch = sheet.getDrawingPatriarch();
+
+ assertEquals(HSSFTestHelper.getEscherAggregate(patriarch).getShapeToObjMapping().size(), 0);
+ assertEquals(HSSFTestHelper.getEscherAggregate(patriarch).getTailRecords().size(), 0);
+ assertEquals(patriarch.getChildren().size(), 0);
+ }
}
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@poi.apache.org
For additional commands, e-mail: commits-help@poi.apache.org