123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262 |
- package org.apache.poi.hssf.usermodel;
-
- import junit.framework.TestCase;
- import org.apache.poi.ddf.EscherContainerRecord;
- import org.apache.poi.ddf.EscherSpgrRecord;
- import org.apache.poi.hssf.HSSFTestDataSamples;
- import org.apache.poi.hssf.record.EscherAggregate;
- import org.apache.poi.hssf.record.ObjRecord;
-
- import java.lang.reflect.Field;
- import java.util.Arrays;
- import java.util.HashMap;
- import java.util.Map;
-
- /**
- * @author Evgeniy Berlog
- * @date 29.06.12
- */
- public class TestShapeGroup extends TestCase{
-
- public void testSetGetCoordinates(){
- HSSFWorkbook wb = new HSSFWorkbook();
- HSSFSheet sh = wb.createSheet();
- HSSFPatriarch patriarch = sh.createDrawingPatriarch();
- HSSFShapeGroup group = patriarch.createGroup(new HSSFClientAnchor());
- assertEquals(group.getX1(), 0);
- assertEquals(group.getY1(), 0);
- assertEquals(group.getX2(), 1023);
- assertEquals(group.getY2(), 255);
-
- group.setCoordinates(1,2,3,4);
-
- assertEquals(group.getX1(), 1);
- assertEquals(group.getY1(), 2);
- assertEquals(group.getX2(), 3);
- assertEquals(group.getY2(), 4);
-
- wb = HSSFTestDataSamples.writeOutAndReadBack(wb);
- sh = wb.getSheetAt(0);
- patriarch = sh.getDrawingPatriarch();
-
- group = (HSSFShapeGroup) patriarch.getChildren().get(0);
- assertEquals(group.getX1(), 1);
- assertEquals(group.getY1(), 2);
- assertEquals(group.getX2(), 3);
- assertEquals(group.getY2(), 4);
- }
-
- public void testAddToExistingFile(){
- HSSFWorkbook wb = new HSSFWorkbook();
- HSSFSheet sh = wb.createSheet();
- HSSFPatriarch patriarch = sh.createDrawingPatriarch();
- HSSFShapeGroup group1 = patriarch.createGroup(new HSSFClientAnchor());
- HSSFShapeGroup group2 = patriarch.createGroup(new HSSFClientAnchor());
-
- group1.setCoordinates(1,2,3,4);
- group2.setCoordinates(5,6,7,8);
-
- wb = HSSFTestDataSamples.writeOutAndReadBack(wb);
- sh = wb.getSheetAt(0);
- patriarch = sh.getDrawingPatriarch();
-
- assertEquals(patriarch.getChildren().size(), 2);
-
- HSSFShapeGroup group3 = patriarch.createGroup(new HSSFClientAnchor());
- group3.setCoordinates(9,10,11,12);
-
- wb = HSSFTestDataSamples.writeOutAndReadBack(wb);
- sh = wb.getSheetAt(0);
- patriarch = sh.getDrawingPatriarch();
-
- assertEquals(patriarch.getChildren().size(), 3);
- }
-
- public void testModify() throws Exception {
- HSSFWorkbook wb = new HSSFWorkbook();
-
- // create a sheet with a text box
- HSSFSheet sheet = wb.createSheet();
- HSSFPatriarch patriarch = sheet.createDrawingPatriarch();
-
- HSSFShapeGroup group1 = patriarch.createGroup(new
- HSSFClientAnchor(0,0,0,0,
- (short)0, 0, (short)15, 25));
- group1.setCoordinates(0, 0, 792, 612);
-
- HSSFTextbox textbox1 = group1.createTextbox(new
- HSSFChildAnchor(100, 100, 300, 300));
- HSSFRichTextString rt1 = new HSSFRichTextString("Hello, World!");
- textbox1.setString(rt1);
-
- // write, read back and check that our text box is there
- wb = HSSFTestDataSamples.writeOutAndReadBack(wb);
- sheet = wb.getSheetAt(0);
- patriarch = sheet.getDrawingPatriarch();
- assertEquals(1, patriarch.getChildren().size());
-
- group1 = (HSSFShapeGroup)patriarch.getChildren().get(0);
- assertEquals(1, group1.getChildren().size());
- textbox1 = (HSSFTextbox)group1.getChildren().get(0);
- assertEquals("Hello, World!", textbox1.getString().getString());
-
- // modify anchor
- assertEquals(new HSSFChildAnchor(100, 100, 300, 300),
- textbox1.getAnchor());
- HSSFChildAnchor newAnchor = new HSSFChildAnchor(200,200, 400, 400);
- textbox1.setAnchor(newAnchor);
- // modify text
- textbox1.setString(new HSSFRichTextString("Hello, World! (modified)"));
-
- // add a new text box
- HSSFTextbox textbox2 = group1.createTextbox(new
- HSSFChildAnchor(400, 400, 600, 600));
- HSSFRichTextString rt2 = new HSSFRichTextString("Hello, World-2");
- textbox2.setString(rt2);
- assertEquals(2, group1.getChildren().size());
-
- wb = HSSFTestDataSamples.writeOutAndReadBack(wb);
- sheet = wb.getSheetAt(0);
- patriarch = sheet.getDrawingPatriarch();
- assertEquals(1, patriarch.getChildren().size());
-
- group1 = (HSSFShapeGroup)patriarch.getChildren().get(0);
- assertEquals(2, group1.getChildren().size());
- textbox1 = (HSSFTextbox)group1.getChildren().get(0);
- assertEquals("Hello, World! (modified)",
- textbox1.getString().getString());
- assertEquals(new HSSFChildAnchor(200,200, 400, 400),
- textbox1.getAnchor());
-
- textbox2 = (HSSFTextbox)group1.getChildren().get(1);
- assertEquals("Hello, World-2", textbox2.getString().getString());
- assertEquals(new HSSFChildAnchor(400, 400, 600, 600),
- textbox2.getAnchor());
-
- wb = HSSFTestDataSamples.writeOutAndReadBack(wb);
- sheet = wb.getSheetAt(0);
- patriarch = sheet.getDrawingPatriarch();
- group1 = (HSSFShapeGroup)patriarch.getChildren().get(0);
- textbox1 = (HSSFTextbox)group1.getChildren().get(0);
- textbox2 = (HSSFTextbox)group1.getChildren().get(1);
- HSSFTextbox textbox3 = group1.createTextbox(new
- HSSFChildAnchor(400,200, 600, 400));
- HSSFRichTextString rt3 = new HSSFRichTextString("Hello, World-3");
- textbox3.setString(rt3);
- }
-
- public void testAddShapesToGroup(){
- HSSFWorkbook wb = new HSSFWorkbook();
-
- // create a sheet with a text box
- HSSFSheet sheet = wb.createSheet();
- HSSFPatriarch patriarch = sheet.createDrawingPatriarch();
-
- HSSFShapeGroup group = patriarch.createGroup(new HSSFClientAnchor());
- int index = wb.addPicture(new byte[]{1,2,3}, HSSFWorkbook.PICTURE_TYPE_JPEG);
- group.createPicture(new HSSFChildAnchor(), index);
- HSSFPolygon polygon = group.createPolygon(new HSSFChildAnchor());
- polygon.setPoints(new int[]{1,100, 1}, new int[]{1, 50, 100});
- group.createTextbox(new HSSFChildAnchor());
- group.createShape(new HSSFChildAnchor());
-
- wb = HSSFTestDataSamples.writeOutAndReadBack(wb);
- sheet = wb.getSheetAt(0);
- patriarch = sheet.getDrawingPatriarch();
- assertEquals(1, patriarch.getChildren().size());
-
- assertTrue(patriarch.getChildren().get(0) instanceof HSSFShapeGroup);
- group = (HSSFShapeGroup) patriarch.getChildren().get(0);
-
- assertEquals(group.getChildren().size(), 4);
-
- assertTrue(group.getChildren().get(0) instanceof HSSFPicture);
- assertTrue(group.getChildren().get(1) instanceof HSSFPolygon);
- assertTrue(group.getChildren().get(2) instanceof HSSFTextbox);
- assertTrue(group.getChildren().get(3) instanceof HSSFSimpleShape);
-
- HSSFShapeGroup group2 = patriarch.createGroup(new HSSFClientAnchor());
-
- index = wb.addPicture(new byte[]{2,2,2}, HSSFWorkbook.PICTURE_TYPE_JPEG);
- group2.createPicture(new HSSFChildAnchor(), index);
- polygon = group2.createPolygon(new HSSFChildAnchor());
- polygon.setPoints(new int[]{1,100, 1}, new int[]{1, 50, 100});
- group2.createTextbox(new HSSFChildAnchor());
- group2.createShape(new HSSFChildAnchor());
- group2.createShape(new HSSFChildAnchor());
-
- wb = HSSFTestDataSamples.writeOutAndReadBack(wb);
- sheet = wb.getSheetAt(0);
- patriarch = sheet.getDrawingPatriarch();
- assertEquals(2, patriarch.getChildren().size());
-
- group = (HSSFShapeGroup) patriarch.getChildren().get(1);
-
- assertEquals(group.getChildren().size(), 5);
-
- assertTrue(group.getChildren().get(0) instanceof HSSFPicture);
- assertTrue(group.getChildren().get(1) instanceof HSSFPolygon);
- assertTrue(group.getChildren().get(2) instanceof HSSFTextbox);
- assertTrue(group.getChildren().get(3) instanceof HSSFSimpleShape);
- assertTrue(group.getChildren().get(4) instanceof HSSFSimpleShape);
-
- group.getShapeId();
- }
-
- public void testSpgrRecord(){
- HSSFWorkbook wb = new HSSFWorkbook();
-
- // create a sheet with a text box
- HSSFSheet sheet = wb.createSheet();
- HSSFPatriarch patriarch = sheet.createDrawingPatriarch();
-
- HSSFShapeGroup group = patriarch.createGroup(new HSSFClientAnchor());
- assertSame(((EscherContainerRecord)group.getEscherContainer().getChild(0)).getChildById(EscherSpgrRecord.RECORD_ID), getSpgrRecord(group));
- }
-
- private static EscherSpgrRecord getSpgrRecord(HSSFShapeGroup group) {
- Field spgrField = null;
- try {
- spgrField = group.getClass().getDeclaredField("_spgrRecord");
- spgrField.setAccessible(true);
- return (EscherSpgrRecord) spgrField.get(group);
- } catch (NoSuchFieldException e) {
- e.printStackTrace();
- } catch (IllegalAccessException e) {
- e.printStackTrace();
- }
- return null;
- }
-
- public void testClearShapes(){
- HSSFWorkbook wb = new HSSFWorkbook();
- HSSFSheet sheet = wb.createSheet();
- HSSFPatriarch patriarch = sheet.createDrawingPatriarch();
- HSSFShapeGroup group = patriarch.createGroup(new HSSFClientAnchor());
-
- group.createShape(new HSSFChildAnchor());
- group.createShape(new HSSFChildAnchor());
-
- EscherAggregate agg = HSSFTestHelper.getEscherAggregate(patriarch);
-
- assertEquals(agg.getShapeToObjMapping().size(), 5);
- assertEquals(agg.getTailRecords().size(), 0);
- assertEquals(group.getChildren().size(), 2);
-
- group.clear();
-
- assertEquals(agg.getShapeToObjMapping().size(), 1);
- assertEquals(agg.getTailRecords().size(), 0);
- assertEquals(group.getChildren().size(), 0);
-
- wb = HSSFTestDataSamples.writeOutAndReadBack(wb);
- sheet = wb.getSheetAt(0);
- patriarch = sheet.getDrawingPatriarch();
-
- group = (HSSFShapeGroup) patriarch.getChildren().get(0);
-
- assertEquals(agg.getShapeToObjMapping().size(), 1);
- assertEquals(agg.getTailRecords().size(), 0);
- assertEquals(group.getChildren().size(), 0);
- }
- }
|