git-svn-id: https://svn.apache.org/repos/asf/poi/branches/gsoc2012@1364547 13f79535-47bb-0310-9956-ffa450edef68tags/3.10-beta1
@@ -26,6 +26,7 @@ import org.apache.poi.hssf.usermodel.*; | |||
* | |||
* @author Glen Stampoultzis (glens at apache.org) | |||
*/ | |||
@Deprecated | |||
public abstract class AbstractShape | |||
{ | |||
/** |
@@ -27,6 +27,7 @@ import org.apache.poi.hssf.usermodel.*; | |||
* | |||
* @author Yegor Kozlov | |||
*/ | |||
@Deprecated | |||
public class ComboboxShape | |||
extends AbstractShape { | |||
private EscherContainerRecord spContainer; |
@@ -39,6 +39,7 @@ import org.apache.poi.hssf.usermodel.HSSFShape; | |||
* | |||
* @author Yegor Kozlov | |||
*/ | |||
@Deprecated | |||
public final class CommentShape extends TextboxShape { | |||
private NoteRecord _note; |
@@ -27,6 +27,7 @@ import org.apache.poi.hssf.usermodel.*; | |||
* | |||
* @author Glen Stampoultzis (glens at apache.org) | |||
*/ | |||
@Deprecated | |||
public class LineShape | |||
extends AbstractShape | |||
{ |
@@ -27,6 +27,7 @@ import org.apache.poi.hssf.usermodel.HSSFShape; | |||
import org.apache.poi.hssf.usermodel.HSSFPolygon; | |||
import org.apache.poi.util.LittleEndian; | |||
@Deprecated | |||
public class PolygonShape | |||
extends AbstractShape | |||
{ |
@@ -25,6 +25,7 @@ import org.apache.poi.hssf.record.EndSubRecord; | |||
import org.apache.poi.hssf.usermodel.HSSFSimpleShape; | |||
import org.apache.poi.hssf.usermodel.HSSFShape; | |||
@Deprecated | |||
public class SimpleFilledShape | |||
extends AbstractShape | |||
{ |
@@ -28,6 +28,7 @@ import org.apache.poi.hssf.usermodel.*; | |||
* | |||
* @author Glen Stampoultzis (glens at apache.org) | |||
*/ | |||
@Deprecated | |||
public class TextboxShape | |||
extends AbstractShape | |||
{ |
@@ -1041,63 +1041,6 @@ public class HSSFCell implements Cell { | |||
_sheet.getDrawingPatriarch().removeShape(comment); | |||
} | |||
/** | |||
* Cell comment finder. | |||
* Returns cell comment for the specified sheet, row and column. | |||
* | |||
* @return cell comment or <code>null</code> if not found | |||
*/ | |||
protected static HSSFComment findCellComment(InternalSheet sheet, int row, int column) { | |||
// TODO - optimise this code by searching backwards, find NoteRecord first, quit if not found. Find one TXO by id | |||
HSSFComment comment = null; | |||
Map<Integer, TextObjectRecord> noteTxo = | |||
new HashMap<Integer, TextObjectRecord>(); | |||
int i = 0; | |||
for (Iterator<RecordBase> it = sheet.getRecords().iterator(); it.hasNext();) { | |||
RecordBase rec = it.next(); | |||
if (rec instanceof NoteRecord) { | |||
NoteRecord note = (NoteRecord) rec; | |||
if (note.getRow() == row && note.getColumn() == column) { | |||
if(i < noteTxo.size()) { | |||
TextObjectRecord txo = noteTxo.get(note.getShapeId()); | |||
if(txo != null){ | |||
comment = new HSSFComment(note, txo); | |||
comment.setRow(note.getRow()); | |||
comment.setColumn(note.getColumn()); | |||
comment.setAuthor(note.getAuthor()); | |||
comment.setVisible(note.getFlags() == NoteRecord.NOTE_VISIBLE); | |||
comment.setString(txo.getStr()); | |||
} else{ | |||
log.log(POILogger.WARN, "Failed to match NoteRecord and TextObjectRecord, row: " + row + ", column: " + column); | |||
} | |||
} else { | |||
log.log(POILogger.WARN, "Failed to match NoteRecord and TextObjectRecord, row: " + row + ", column: " + column); | |||
} | |||
break; | |||
} | |||
i++; | |||
} else if (rec instanceof ObjRecord) { | |||
ObjRecord obj = (ObjRecord) rec; | |||
SubRecord sub = obj.getSubRecords().get(0); | |||
if (sub instanceof CommonObjectDataSubRecord) { | |||
CommonObjectDataSubRecord cmo = (CommonObjectDataSubRecord) sub; | |||
if (cmo.getObjectType() == CommonObjectDataSubRecord.OBJECT_TYPE_COMMENT) { | |||
//map ObjectId and corresponding TextObjectRecord, | |||
//it will be used to match NoteRecord and TextObjectRecord | |||
while (it.hasNext()) { | |||
rec = it.next(); | |||
if (rec instanceof TextObjectRecord) { | |||
noteTxo.put(cmo.getObjectId(), (TextObjectRecord) rec); | |||
break; | |||
} | |||
} | |||
} | |||
} | |||
} | |||
} | |||
return comment; | |||
} | |||
/** | |||
* @return hyperlink associated with this cell or <code>null</code> if not found | |||
*/ |
@@ -34,7 +34,7 @@ import org.apache.poi.util.HexDump; | |||
* | |||
* @author Daniel Noll | |||
*/ | |||
public final class HSSFObjectData extends HSSFShape { | |||
public final class HSSFObjectData extends HSSFPicture { | |||
/** | |||
* Reference to the filesystem root, required for retrieving the object data. | |||
*/ | |||
@@ -131,7 +131,7 @@ public final class HSSFObjectData extends HSSFShape { | |||
EscherAggregate agg = patriarch._getBoundAggregate(); | |||
agg.associateShapeToObjRecord(getEscherContainer().getChildById(EscherClientDataRecord.RECORD_ID), getObjRecord()); | |||
EscherBSERecord bse = | |||
patriarch._sheet.getWorkbook().getWorkbook().getBSERecord(getPictureIndex()); | |||
patriarch.getSheet().getWorkbook().getWorkbook().getBSERecord(getPictureIndex()); | |||
bse.setRef(bse.getRef() + 1); | |||
} | |||
@@ -143,24 +143,4 @@ public final class HSSFObjectData extends HSSFShape { | |||
ObjRecord obj = (ObjRecord) getObjRecord().cloneViaReserialise(); | |||
return new HSSFObjectData(spContainer, obj, _root); | |||
} | |||
public int getPictureIndex() { | |||
EscherSimpleProperty property = getOptRecord().lookup(EscherProperties.BLIP__BLIPTODISPLAY); | |||
if (null == property) { | |||
return -1; | |||
} | |||
return property.getPropertyValue(); | |||
} | |||
public void setPictureIndex(int pictureIndex) { | |||
setPropertyValue(new EscherSimpleProperty(EscherProperties.BLIP__BLIPTODISPLAY, false, true, pictureIndex)); | |||
} | |||
@Override | |||
void setShapeId(int shapeId) { | |||
EscherSpRecord spRecord = getEscherContainer().getChildById(EscherSpRecord.RECORD_ID); | |||
spRecord.setShapeId(shapeId); | |||
CommonObjectDataSubRecord cod = (CommonObjectDataSubRecord) getObjRecord().getSubRecords().get(0); | |||
cod.setObjectId((short) (shapeId % 1024)); | |||
} | |||
} |
@@ -18,6 +18,7 @@ | |||
package org.apache.poi.hssf.usermodel; | |||
import java.util.ArrayList; | |||
import java.util.Collections; | |||
import java.util.Iterator; | |||
import java.util.List; | |||
@@ -48,7 +49,7 @@ public final class HSSFPatriarch implements HSSFShapeContainer, Drawing { | |||
* and building up our shapes from the records) | |||
*/ | |||
private EscherAggregate _boundAggregate; | |||
final HSSFSheet _sheet; // TODO make private | |||
private final HSSFSheet _sheet; | |||
/** | |||
* Creates the patriarch. | |||
@@ -132,13 +133,6 @@ public final class HSSFPatriarch implements HSSFShapeContainer, Drawing { | |||
addShape(shape); | |||
//open existing file | |||
onCreate(shape); | |||
EscherSpRecord sp = shape.getEscherContainer().getChildById(EscherSpRecord.RECORD_ID); | |||
if (shape.anchor.isHorizontallyFlipped()) { | |||
sp.setFlags(sp.getFlags() | EscherSpRecord.FLAG_FLIPHORIZ); | |||
} | |||
if (shape.anchor.isVerticallyFlipped()) { | |||
sp.setFlags(sp.getFlags() | EscherSpRecord.FLAG_FLIPVERT); | |||
} | |||
return shape; | |||
} | |||
@@ -155,14 +149,6 @@ public final class HSSFPatriarch implements HSSFShapeContainer, Drawing { | |||
addShape(shape); | |||
//open existing file | |||
onCreate(shape); | |||
EscherSpRecord sp = shape.getEscherContainer().getChildById(EscherSpRecord.RECORD_ID); | |||
if (shape.anchor.isHorizontallyFlipped()) { | |||
sp.setFlags(sp.getFlags() | EscherSpRecord.FLAG_FLIPHORIZ); | |||
} | |||
if (shape.anchor.isVerticallyFlipped()) { | |||
sp.setFlags(sp.getFlags() | EscherSpRecord.FLAG_FLIPVERT); | |||
} | |||
return shape; | |||
} | |||
@@ -232,7 +218,7 @@ public final class HSSFPatriarch implements HSSFShapeContainer, Drawing { | |||
* Returns a list of all shapes contained by the patriarch. | |||
*/ | |||
public List<HSSFShape> getChildren() { | |||
return _shapes; | |||
return Collections.unmodifiableList(_shapes); | |||
} | |||
/** | |||
@@ -254,6 +240,7 @@ public final class HSSFPatriarch implements HSSFShapeContainer, Drawing { | |||
spgrContainer.addChildRecord(spContainer); | |||
shape.afterInsert(this); | |||
setFlipFlags(shape); | |||
} | |||
/** | |||
@@ -279,6 +266,13 @@ public final class HSSFPatriarch implements HSSFShapeContainer, Drawing { | |||
_spgrRecord.setRectX2(x2); | |||
} | |||
public void clear() { | |||
ArrayList <HSSFShape> copy = new ArrayList<HSSFShape>(_shapes); | |||
for (HSSFShape shape: copy){ | |||
removeShape(shape); | |||
} | |||
} | |||
int newShapeId() { | |||
DrawingManager2 dm = _sheet.getWorkbook().getWorkbook().getDrawingManager(); | |||
EscherDgRecord dg = | |||
@@ -395,4 +389,22 @@ public final class HSSFPatriarch implements HSSFShapeContainer, Drawing { | |||
} | |||
} | |||
} | |||
private void setFlipFlags(HSSFShape shape){ | |||
EscherSpRecord sp = shape.getEscherContainer().getChildById(EscherSpRecord.RECORD_ID); | |||
if (shape.anchor.isHorizontallyFlipped()) { | |||
sp.setFlags(sp.getFlags() | EscherSpRecord.FLAG_FLIPHORIZ); | |||
} | |||
if (shape.anchor.isVerticallyFlipped()) { | |||
sp.setFlags(sp.getFlags() | EscherSpRecord.FLAG_FLIPVERT); | |||
} | |||
} | |||
public Iterator<HSSFShape> iterator() { | |||
return _shapes.iterator(); | |||
} | |||
protected HSSFSheet getSheet() { | |||
return _sheet; | |||
} | |||
} |
@@ -34,7 +34,7 @@ import org.apache.poi.hssf.model.InternalWorkbook; | |||
* @author Glen Stampoultzis | |||
* @author Yegor Kozlov (yegor at apache.org) | |||
*/ | |||
public final class HSSFPicture extends HSSFSimpleShape implements Picture { | |||
public class HSSFPicture extends HSSFSimpleShape implements Picture { | |||
public static final int PICTURE_TYPE_EMF = HSSFWorkbook.PICTURE_TYPE_EMF; // Windows Enhanced Metafile | |||
public static final int PICTURE_TYPE_WMF = HSSFWorkbook.PICTURE_TYPE_WMF; // Windows Metafile | |||
public static final int PICTURE_TYPE_PICT = HSSFWorkbook.PICTURE_TYPE_PICT; // Macintosh PICT | |||
@@ -203,7 +203,7 @@ public final class HSSFPicture extends HSSFSimpleShape implements Picture { | |||
private float getColumnWidthInPixels(int column){ | |||
int cw = _patriarch._sheet.getColumnWidth(column); | |||
int cw = _patriarch.getSheet().getColumnWidth(column); | |||
float px = getPixelWidth(column); | |||
return cw/px; | |||
@@ -211,18 +211,18 @@ public final class HSSFPicture extends HSSFSimpleShape implements Picture { | |||
private float getRowHeightInPixels(int i){ | |||
HSSFRow row = _patriarch._sheet.getRow(i); | |||
HSSFRow row = _patriarch.getSheet().getRow(i); | |||
float height; | |||
if(row != null) height = row.getHeight(); | |||
else height = _patriarch._sheet.getDefaultRowHeight(); | |||
else height = _patriarch.getSheet().getDefaultRowHeight(); | |||
return height/PX_ROW; | |||
} | |||
private float getPixelWidth(int column){ | |||
int def = _patriarch._sheet.getDefaultColumnWidth()*256; | |||
int cw = _patriarch._sheet.getColumnWidth(column); | |||
int def = _patriarch.getSheet().getDefaultColumnWidth()*256; | |||
int cw = _patriarch.getSheet().getColumnWidth(column); | |||
return cw == def ? PX_DEFAULT : PX_MODIFIED; | |||
} | |||
@@ -233,7 +233,7 @@ public final class HSSFPicture extends HSSFSimpleShape implements Picture { | |||
* @return image dimension | |||
*/ | |||
public Dimension getImageDimension(){ | |||
EscherBSERecord bse = _patriarch._sheet._book.getBSERecord(getPictureIndex()); | |||
EscherBSERecord bse = _patriarch.getSheet()._book.getBSERecord(getPictureIndex()); | |||
byte[] data = bse.getBlipRecord().getPicturedata(); | |||
int type = bse.getBlipTypeWin32(); | |||
return ImageUtils.getImageDimension(new ByteArrayInputStream(data), type); | |||
@@ -245,7 +245,7 @@ public final class HSSFPicture extends HSSFSimpleShape implements Picture { | |||
* @return picture data for this shape | |||
*/ | |||
public HSSFPictureData getPictureData(){ | |||
InternalWorkbook iwb = _patriarch._sheet.getWorkbook().getWorkbook(); | |||
InternalWorkbook iwb = _patriarch.getSheet().getWorkbook().getWorkbook(); | |||
EscherBlipRecord blipRecord = iwb.getBSERecord(getPictureIndex()).getBlipRecord(); | |||
return new HSSFPictureData(blipRecord); | |||
} | |||
@@ -255,14 +255,14 @@ public final class HSSFPicture extends HSSFSimpleShape implements Picture { | |||
EscherAggregate agg = patriarch._getBoundAggregate(); | |||
agg.associateShapeToObjRecord(getEscherContainer().getChildById(EscherClientDataRecord.RECORD_ID), getObjRecord()); | |||
EscherBSERecord bse = | |||
patriarch._sheet.getWorkbook().getWorkbook().getBSERecord(getPictureIndex()); | |||
patriarch.getSheet().getWorkbook().getWorkbook().getBSERecord(getPictureIndex()); | |||
bse.setRef(bse.getRef() + 1); | |||
} | |||
/** | |||
* The color applied to the lines of this shape. | |||
*/ | |||
public String getAdditionalData() { | |||
public String getFileName() { | |||
EscherComplexProperty propFile = (EscherComplexProperty) getOptRecord().lookup( | |||
EscherProperties.BLIP__BLIPFILENAME); | |||
try { | |||
@@ -275,7 +275,7 @@ public final class HSSFPicture extends HSSFSimpleShape implements Picture { | |||
} | |||
} | |||
public void setAdditionalData(String data){ | |||
public void setFileName(String data){ | |||
try { | |||
EscherComplexProperty prop = new EscherComplexProperty(EscherProperties.BLIP__BLIPFILENAME, true, data.getBytes("UTF-16LE")); | |||
setPropertyValue(prop); |
@@ -20,7 +20,10 @@ package org.apache.poi.hssf.usermodel; | |||
import org.apache.poi.ddf.*; | |||
import org.apache.poi.hssf.record.CommonObjectDataSubRecord; | |||
import org.apache.poi.hssf.record.ObjRecord; | |||
import org.apache.poi.util.LittleEndian; | |||
import java.io.ByteArrayOutputStream; | |||
import java.io.IOException; | |||
import java.util.Iterator; | |||
/** | |||
@@ -100,7 +103,7 @@ public abstract class HSSFShape { | |||
EscherSpRecord spRecord = _escherContainer.getChildById(EscherSpRecord.RECORD_ID); | |||
spRecord.setShapeId(shapeId); | |||
CommonObjectDataSubRecord cod = (CommonObjectDataSubRecord) _objRecord.getSubRecords().get(0); | |||
cod.setObjectId((short) (shapeId-1024)); | |||
cod.setObjectId((short) (shapeId%1024)); | |||
} | |||
int getShapeId(){ | |||
@@ -295,6 +298,53 @@ public abstract class HSSFShape { | |||
protected void setPropertyValue(EscherProperty property){ | |||
_optRecord.setEscherProperty(property); | |||
} | |||
public void setFlipVertical(boolean value){ | |||
EscherSpRecord sp = getEscherContainer().getChildById(EscherSpRecord.RECORD_ID); | |||
if (value){ | |||
sp.setFlags(sp.getFlags() | EscherSpRecord.FLAG_FLIPVERT); | |||
} else { | |||
sp.setFlags(sp.getFlags() & (Integer.MAX_VALUE - EscherSpRecord.FLAG_FLIPVERT)); | |||
} | |||
} | |||
public void setFlipHorizontal(boolean value){ | |||
EscherSpRecord sp = getEscherContainer().getChildById(EscherSpRecord.RECORD_ID); | |||
if (value){ | |||
sp.setFlags(sp.getFlags() | EscherSpRecord.FLAG_FLIPHORIZ); | |||
} else { | |||
sp.setFlags(sp.getFlags() & (Integer.MAX_VALUE - EscherSpRecord.FLAG_FLIPHORIZ)); | |||
} | |||
} | |||
public boolean isFlipVertical(){ | |||
EscherSpRecord sp = getEscherContainer().getChildById(EscherSpRecord.RECORD_ID); | |||
return (sp.getFlags() & EscherSpRecord.FLAG_FLIPVERT) != 0; | |||
} | |||
public boolean isFlipHorizontal(){ | |||
EscherSpRecord sp = getEscherContainer().getChildById(EscherSpRecord.RECORD_ID); | |||
return (sp.getFlags() & EscherSpRecord.FLAG_FLIPHORIZ) != 0; | |||
} | |||
public int getRotationDegree(){ | |||
ByteArrayOutputStream bos = new ByteArrayOutputStream(); | |||
EscherSimpleProperty property = getOptRecord().lookup(EscherProperties.TRANSFORM__ROTATION); | |||
if (null == property){ | |||
return 0; | |||
} | |||
try { | |||
LittleEndian.putInt(property.getPropertyValue(), bos); | |||
return LittleEndian.getShort(bos.toByteArray(), 2); | |||
} catch (IOException e) { | |||
e.printStackTrace(); | |||
return 0; | |||
} | |||
} | |||
public void setRotationDegree(short value){ | |||
setPropertyValue(new EscherSimpleProperty(EscherProperties.TRANSFORM__ROTATION , (value << 16))); | |||
} | |||
/** | |||
* Count of all children and their children's children. |
@@ -24,12 +24,12 @@ import java.util.List; | |||
* | |||
* @author Glen Stampoultzis (glens at apache.org) | |||
*/ | |||
public interface HSSFShapeContainer | |||
public interface HSSFShapeContainer extends Iterable<HSSFShape> | |||
{ | |||
/** | |||
* @return Any children contained by this shape. | |||
*/ | |||
List getChildren(); | |||
List<HSSFShape> getChildren(); | |||
/** | |||
* add shape to the list of child records | |||
@@ -42,4 +42,13 @@ public interface HSSFShapeContainer | |||
*/ | |||
void setCoordinates( int x1, int y1, int x2, int y2 ); | |||
void clear(); | |||
public int getX1(); | |||
public int getY1(); | |||
public int getX2(); | |||
public int getY2(); | |||
} |
@@ -18,10 +18,10 @@ | |||
package org.apache.poi.hssf.usermodel; | |||
import org.apache.poi.ddf.*; | |||
import org.apache.poi.hssf.model.TextboxShape; | |||
import org.apache.poi.hssf.record.*; | |||
import java.util.ArrayList; | |||
import java.util.Collections; | |||
import java.util.List; | |||
import java.util.Iterator; | |||
@@ -32,7 +32,7 @@ import java.util.Iterator; | |||
* @author Glen Stampoultzis (glens at apache.org) | |||
*/ | |||
public class HSSFShapeGroup extends HSSFShape implements HSSFShapeContainer { | |||
List<HSSFShape> shapes = new ArrayList<HSSFShape>(); | |||
private final List<HSSFShape> shapes = new ArrayList<HSSFShape>(); | |||
private EscherSpgrRecord _spgrRecord; | |||
public HSSFShapeGroup(EscherContainerRecord spgrContainer, ObjRecord objRecord) { | |||
@@ -172,11 +172,6 @@ public class HSSFShapeGroup extends HSSFShape implements HSSFShapeContainer { | |||
shapes.add(shape); | |||
} | |||
public void addTextBox(TextboxShape textboxShape) { | |||
// HSSFTextbox shape = new HSSFTextbox(this, textboxShape.geanchor); | |||
// shapes.add(textboxShape); | |||
} | |||
/** | |||
* Create a new simple shape under this group. | |||
* | |||
@@ -258,7 +253,7 @@ public class HSSFShapeGroup extends HSSFShape implements HSSFShapeContainer { | |||
* Return all children contained by this shape. | |||
*/ | |||
public List<HSSFShape> getChildren() { | |||
return shapes; | |||
return Collections.unmodifiableList(shapes); | |||
} | |||
/** | |||
@@ -272,6 +267,13 @@ public class HSSFShapeGroup extends HSSFShape implements HSSFShapeContainer { | |||
_spgrRecord.setRectY2(y2); | |||
} | |||
public void clear() { | |||
ArrayList <HSSFShape> copy = new ArrayList<HSSFShape>(shapes); | |||
for (HSSFShape shape: copy){ | |||
removeShape(shape); | |||
} | |||
} | |||
/** | |||
* The top left x coordinate of this group. | |||
*/ | |||
@@ -377,4 +379,8 @@ public class HSSFShapeGroup extends HSSFShape implements HSSFShapeContainer { | |||
} | |||
return isRemoved; | |||
} | |||
public Iterator<HSSFShape> iterator() { | |||
return shapes.iterator(); | |||
} | |||
} |
@@ -177,6 +177,9 @@ public class HSSFSimpleShape extends HSSFShape | |||
// If font is not set we must set the default one | |||
if (rtr.numFormattingRuns() == 0) rtr.applyFont((short) 0); | |||
_textObjectRecord.setStr(rtr); | |||
if (string.getString() != null){ | |||
setPropertyValue(new EscherSimpleProperty(EscherProperties.TEXT__TEXTID, string.getString().hashCode())); | |||
} | |||
} | |||
@Override |
@@ -129,14 +129,6 @@ public class HSSFTextbox extends HSSFSimpleShape { | |||
return spContainer; | |||
} | |||
@Override | |||
public void setString(RichTextString string) { | |||
HSSFRichTextString rtr = (HSSFRichTextString) string; | |||
// If font is not set we must set the default one | |||
if (rtr.numFormattingRuns() == 0) rtr.applyFont((short) 0); | |||
getTextObjectRecord().setStr(rtr); | |||
} | |||
@Override | |||
void afterInsert(HSSFPatriarch patriarch) { | |||
EscherAggregate agg = patriarch._getBoundAggregate(); |
@@ -136,6 +136,8 @@ public class TestDrawingShapes extends TestCase { | |||
rectangle.setNoFill(true); | |||
rectangle.setString(new HSSFRichTextString("teeeest")); | |||
assertEquals(rectangle.getLineStyleColor(), 1111); | |||
assertEquals(((EscherSimpleProperty)((EscherOptRecord)rectangle.getEscherContainer().getChildById(EscherOptRecord.RECORD_ID)) | |||
.lookup(EscherProperties.TEXT__TEXTID)).getPropertyValue(), "teeeest".hashCode()); | |||
assertEquals(rectangle.isNoFill(), true); | |||
assertEquals(rectangle.getString().getString(), "teeeest"); | |||
@@ -225,6 +227,7 @@ public class TestDrawingShapes extends TestCase { | |||
assertEquals(HexDump.toHex(shape.getFillColor()), shape.getFillColor(), 0x2CE03D); | |||
assertEquals(shape.getLineWidth(), HSSFShape.LINEWIDTH_ONE_PT * 2); | |||
assertEquals(shape.getString().getString(), "POItest"); | |||
assertEquals(shape.getRotationDegree(), 27); | |||
} | |||
public void testShapeIds() { | |||
@@ -536,4 +539,115 @@ public class TestDrawingShapes extends TestCase { | |||
assertEquals(HSSFTestHelper.getEscherAggregate(patriarch).getTailRecords().size(), 0); | |||
assertEquals(patriarch.getChildren().size(), 0); | |||
} | |||
public void testShapeFlip(){ | |||
HSSFWorkbook wb = new HSSFWorkbook(); | |||
HSSFSheet sheet = wb.createSheet(); | |||
HSSFPatriarch patriarch = sheet.createDrawingPatriarch(); | |||
HSSFSimpleShape rectangle = patriarch.createSimpleShape(new HSSFClientAnchor()); | |||
rectangle.setShapeType(HSSFSimpleShape.OBJECT_TYPE_RECTANGLE); | |||
assertEquals(rectangle.isFlipVertical(), false); | |||
assertEquals(rectangle.isFlipHorizontal(), false); | |||
rectangle.setFlipVertical(true); | |||
assertEquals(rectangle.isFlipVertical(), true); | |||
rectangle.setFlipHorizontal(true); | |||
assertEquals(rectangle.isFlipHorizontal(), true); | |||
wb = HSSFTestDataSamples.writeOutAndReadBack(wb); | |||
sheet = wb.getSheetAt(0); | |||
patriarch = sheet.getDrawingPatriarch(); | |||
rectangle = (HSSFSimpleShape) patriarch.getChildren().get(0); | |||
assertEquals(rectangle.isFlipHorizontal(), true); | |||
rectangle.setFlipHorizontal(false); | |||
assertEquals(rectangle.isFlipHorizontal(), false); | |||
assertEquals(rectangle.isFlipVertical(), true); | |||
rectangle.setFlipVertical(false); | |||
assertEquals(rectangle.isFlipVertical(), false); | |||
wb = HSSFTestDataSamples.writeOutAndReadBack(wb); | |||
sheet = wb.getSheetAt(0); | |||
patriarch = sheet.getDrawingPatriarch(); | |||
rectangle = (HSSFSimpleShape) patriarch.getChildren().get(0); | |||
assertEquals(rectangle.isFlipVertical(), false); | |||
assertEquals(rectangle.isFlipHorizontal(), false); | |||
} | |||
public void testRotation() { | |||
HSSFWorkbook wb = new HSSFWorkbook(); | |||
HSSFSheet sheet = wb.createSheet(); | |||
HSSFPatriarch patriarch = sheet.createDrawingPatriarch(); | |||
HSSFSimpleShape rectangle = patriarch.createSimpleShape(new HSSFClientAnchor(0,0,100,100, (short) 0,0,(short)5,5)); | |||
rectangle.setShapeType(HSSFSimpleShape.OBJECT_TYPE_RECTANGLE); | |||
assertEquals(rectangle.getRotationDegree(), 0); | |||
rectangle.setRotationDegree((short) 45); | |||
assertEquals(rectangle.getRotationDegree(), 45); | |||
rectangle.setFlipHorizontal(true); | |||
wb = HSSFTestDataSamples.writeOutAndReadBack(wb); | |||
sheet = wb.getSheetAt(0); | |||
patriarch = sheet.getDrawingPatriarch(); | |||
rectangle = (HSSFSimpleShape) patriarch.getChildren().get(0); | |||
assertEquals(rectangle.getRotationDegree(), 45); | |||
rectangle.setRotationDegree((short) 30); | |||
assertEquals(rectangle.getRotationDegree(), 30); | |||
patriarch.setCoordinates(0, 0, 10, 10); | |||
rectangle.setString(new HSSFRichTextString("1234")); | |||
} | |||
public void testShapeContainerImplementsIterable(){ | |||
HSSFWorkbook wb = new HSSFWorkbook(); | |||
HSSFSheet sheet = wb.createSheet(); | |||
HSSFPatriarch patriarch = sheet.createDrawingPatriarch(); | |||
patriarch.createSimpleShape(new HSSFClientAnchor()); | |||
patriarch.createSimpleShape(new HSSFClientAnchor()); | |||
int i=2; | |||
for (HSSFShape shape: patriarch){ | |||
i--; | |||
} | |||
assertEquals(i, 0); | |||
} | |||
public void testClearShapesForPatriarch(){ | |||
HSSFWorkbook wb = new HSSFWorkbook(); | |||
HSSFSheet sheet = wb.createSheet(); | |||
HSSFPatriarch patriarch = sheet.createDrawingPatriarch(); | |||
patriarch.createSimpleShape(new HSSFClientAnchor()); | |||
patriarch.createSimpleShape(new HSSFClientAnchor()); | |||
patriarch.createCellComment(new HSSFClientAnchor()); | |||
EscherAggregate agg = HSSFTestHelper.getEscherAggregate(patriarch); | |||
assertEquals(agg.getShapeToObjMapping().size(), 6); | |||
assertEquals(agg.getTailRecords().size(), 1); | |||
assertEquals(patriarch.getChildren().size(), 3); | |||
patriarch.clear(); | |||
assertEquals(agg.getShapeToObjMapping().size(), 0); | |||
assertEquals(agg.getTailRecords().size(), 0); | |||
assertEquals(patriarch.getChildren().size(), 0); | |||
wb = HSSFTestDataSamples.writeOutAndReadBack(wb); | |||
sheet = wb.getSheetAt(0); | |||
patriarch = sheet.getDrawingPatriarch(); | |||
assertEquals(agg.getShapeToObjMapping().size(), 0); | |||
assertEquals(agg.getTailRecords().size(), 0); | |||
assertEquals(patriarch.getChildren().size(), 0); | |||
} | |||
} |
@@ -184,7 +184,7 @@ public final class TestHSSFPicture extends BaseTestPicture { | |||
assertEquals(1, drawing.getChildren().size()); | |||
HSSFPicture picture = (HSSFPicture) drawing.getChildren().get(0); | |||
assertEquals(picture.getAdditionalData(), "test"); | |||
assertEquals(picture.getFileName(), "test"); | |||
} | |||
public void testSetGetProperties(){ | |||
@@ -199,15 +199,15 @@ public final class TestHSSFPicture extends BaseTestPicture { | |||
int idx1 = wb.addPicture(data1, Workbook.PICTURE_TYPE_JPEG); | |||
HSSFPicture p1 = dr.createPicture(anchor, idx1); | |||
assertEquals(p1.getAdditionalData(), ""); | |||
p1.setAdditionalData("aaa"); | |||
assertEquals(p1.getAdditionalData(), "aaa"); | |||
assertEquals(p1.getFileName(), ""); | |||
p1.setFileName("aaa"); | |||
assertEquals(p1.getFileName(), "aaa"); | |||
wb = HSSFTestDataSamples.writeOutAndReadBack(wb); | |||
sh = wb.getSheet("Pictures"); | |||
dr = sh.getDrawingPatriarch(); | |||
p1 = (HSSFPicture) dr.getChildren().get(0); | |||
assertEquals(p1.getAdditionalData(), "aaa"); | |||
assertEquals(p1.getFileName(), "aaa"); | |||
} | |||
} |
@@ -4,6 +4,7 @@ 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; | |||
@@ -226,4 +227,36 @@ public class TestShapeGroup extends TestCase{ | |||
} | |||
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); | |||
} | |||
} |