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