/* ==================================================================== | |
Licensed to the Apache Software Foundation (ASF) under one or more | |
contributor license agreements. See the NOTICE file distributed with | |
this work for additional information regarding copyright ownership. | |
The ASF licenses this file to You under the Apache License, Version 2.0 | |
(the "License"); you may not use this file except in compliance with | |
the License. You may obtain a copy of the License at | |
http://www.apache.org/licenses/LICENSE-2.0 | |
Unless required by applicable law or agreed to in writing, software | |
distributed under the License is distributed on an "AS IS" BASIS, | |
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
See the License for the specific language governing permissions and | |
limitations under the License. | |
==================================================================== */ | |
package org.apache.poi.hssf.usermodel; | |
import org.apache.poi.POITestCase; | |
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 junit.framework.TestCase; | |
/** | |
* @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) { | |
return POITestCase.getFieldValue(HSSFShapeGroup.class, group, EscherSpgrRecord.class, "_spgrRecord"); | |
} | |
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); | |
} | |
} |