From 90e3dc42df7bc2cebee640c7687f15c5fd6f9be4 Mon Sep 17 00:00:00 2001 From: hishidama Date: Mon, 3 Nov 2014 11:40:39 +0900 Subject: [PATCH] added Comment.getClientAnchor() --- .../org/apache/poi/hssf/usermodel/HSSFComment.java | 12 +++++++++ src/java/org/apache/poi/ss/usermodel/Comment.java | 6 +++++ .../org/apache/poi/xssf/usermodel/XSSFComment.java | 18 +++++++++++-- .../apache/poi/xssf/usermodel/TestXSSFComment.java | 31 ++++++++++++++++++++++ .../apache/poi/hssf/usermodel/TestHSSFComment.java | 31 ++++++++++++++++++++++ 5 files changed, 96 insertions(+), 2 deletions(-) diff --git a/src/java/org/apache/poi/hssf/usermodel/HSSFComment.java b/src/java/org/apache/poi/hssf/usermodel/HSSFComment.java index 8b4350893c..81de3a41d0 100644 --- a/src/java/org/apache/poi/hssf/usermodel/HSSFComment.java +++ b/src/java/org/apache/poi/hssf/usermodel/HSSFComment.java @@ -28,6 +28,7 @@ Licensed to the Apache Software Foundation (ASF) under one or more import org.apache.poi.hssf.record.NoteStructureSubRecord; import org.apache.poi.hssf.record.ObjRecord; import org.apache.poi.hssf.record.TextObjectRecord; +import org.apache.poi.ss.usermodel.ClientAnchor; import org.apache.poi.ss.usermodel.Comment; /** @@ -232,6 +233,17 @@ public boolean hasPosition() { } @Override + public ClientAnchor getClientAnchor() { + HSSFAnchor ha = super.getAnchor(); + if (ha instanceof ClientAnchor) { + return (ClientAnchor) ha; + } + + throw new IllegalStateException("Anchor can not be changed in " + + ClientAnchor.class.getSimpleName()); + } + + @Override public void setShapeType(int shapeType) { throw new IllegalStateException("Shape type can not be changed in "+this.getClass().getSimpleName()); } diff --git a/src/java/org/apache/poi/ss/usermodel/Comment.java b/src/java/org/apache/poi/ss/usermodel/Comment.java index 463f701348..356e55c7c9 100644 --- a/src/java/org/apache/poi/ss/usermodel/Comment.java +++ b/src/java/org/apache/poi/ss/usermodel/Comment.java @@ -87,4 +87,10 @@ Licensed to the Apache Software Foundation (ASF) under one or more */ void setString(RichTextString string); + /** + * Return defines position of this anchor in the sheet. + * + * @return defines position of this anchor in the sheet + */ + public ClientAnchor getClientAnchor(); } \ No newline at end of file diff --git a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFComment.java b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFComment.java index f75b250624..9d7dda22c4 100644 --- a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFComment.java +++ b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFComment.java @@ -16,15 +16,17 @@ Licensed to the Apache Software Foundation (ASF) under one or more ==================================================================== */ package org.apache.poi.xssf.usermodel; +import java.math.BigInteger; + +import org.apache.poi.ss.usermodel.ClientAnchor; import org.apache.poi.ss.usermodel.Comment; import org.apache.poi.ss.usermodel.RichTextString; import org.apache.poi.ss.util.CellReference; import org.apache.poi.xssf.model.CommentsTable; import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTComment; import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTRst; -import schemasMicrosoftComVml.CTShape; -import java.math.BigInteger; +import schemasMicrosoftComVml.CTShape; public class XSSFComment implements Comment { @@ -172,6 +174,18 @@ public void setString(String string) { setString(new XSSFRichTextString(string)); } + @Override + public ClientAnchor getClientAnchor() { + String position = _vmlShape.getClientDataArray(0).getAnchorArray(0); + int[] pos = new int[8]; + int i = 0; + for (String s : position.split(",")) { + pos[i++] = Integer.parseInt(s.trim()); + } + XSSFClientAnchor ca = new XSSFClientAnchor(0, 0, 0, 0, pos[0], pos[2], pos[4], pos[6]); + return ca; + } + /** * @return the xml bean holding this comment's properties */ diff --git a/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFComment.java b/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFComment.java index 2ca3dbaa91..23ee0ff20c 100644 --- a/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFComment.java +++ b/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFComment.java @@ -19,6 +19,7 @@ Licensed to the Apache Software Foundation (ASF) under one or more import org.apache.poi.hssf.usermodel.HSSFRichTextString; import org.apache.poi.ss.usermodel.BaseTestCellComment; +import org.apache.poi.ss.usermodel.ClientAnchor; import org.apache.poi.ss.usermodel.IndexedColors; import org.apache.poi.ss.util.CellReference; import org.apache.poi.xssf.XSSFITestDataProvider; @@ -167,4 +168,34 @@ public void testAuthor() { assertEquals("", comment.getAuthor()); assertEquals(2, sheetComments.getNumberOfAuthors()); } + + public void testGetClientAnchor() { + XSSFWorkbook wb = new XSSFWorkbook(); + XSSFSheet sheet = wb.createSheet(); + XSSFDrawing drawing = sheet.createDrawingPatriarch(); + XSSFComment comment; + ClientAnchor anchor; + + comment = drawing.createCellComment(new XSSFClientAnchor(101, 102, 103, 104, 1, 2, 3, 4)); + anchor = comment.getClientAnchor(); + assertEquals(0, anchor.getDx1()); + assertEquals(0, anchor.getDy1()); + assertEquals(0, anchor.getDx2()); + assertEquals(0, anchor.getDy2()); + assertEquals(1, anchor.getCol1()); + assertEquals(2, anchor.getRow1()); + assertEquals(3, anchor.getCol2()); + assertEquals(4, anchor.getRow2()); + + comment = drawing.createCellComment(new XSSFClientAnchor()); + anchor = comment.getClientAnchor(); + assertEquals(0, anchor.getDx1()); + assertEquals(0, anchor.getDy1()); + assertEquals(0, anchor.getDx2()); + assertEquals(0, anchor.getDy2()); + assertEquals(1, anchor.getCol1()); + assertEquals(0, anchor.getRow1()); + assertEquals(3, anchor.getCol2()); + assertEquals(3, anchor.getRow2()); + } } diff --git a/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFComment.java b/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFComment.java index b49f725baa..6a08fe7fa5 100644 --- a/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFComment.java +++ b/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFComment.java @@ -19,6 +19,7 @@ Licensed to the Apache Software Foundation (ASF) under one or more import org.apache.poi.hssf.HSSFITestDataProvider; import org.apache.poi.hssf.HSSFTestDataSamples; import org.apache.poi.ss.usermodel.BaseTestCellComment; +import org.apache.poi.ss.usermodel.ClientAnchor; /** * Tests TestHSSFCellComment. @@ -70,4 +71,34 @@ public void test47924() { comment = cell.getCellComment(); assertEquals("c6", comment.getString().getString()); } + + public void testGetClientAnchor() { + HSSFWorkbook wb = new HSSFWorkbook(); + HSSFSheet sheet = wb.createSheet(); + HSSFPatriarch drawing = sheet.createDrawingPatriarch(); + HSSFComment comment; + ClientAnchor anchor; + + comment = drawing.createCellComment(new HSSFClientAnchor(101, 102, 103, 104, (short) 1, 2, (short) 3, 4)); + anchor = comment.getClientAnchor(); + assertEquals(101, anchor.getDx1()); + assertEquals(102, anchor.getDy1()); + assertEquals(103, anchor.getDx2()); + assertEquals(104, anchor.getDy2()); + assertEquals(1, anchor.getCol1()); + assertEquals(2, anchor.getRow1()); + assertEquals(3, anchor.getCol2()); + assertEquals(4, anchor.getRow2()); + + comment = drawing.createCellComment(new HSSFClientAnchor()); + anchor = comment.getClientAnchor(); + assertEquals(0, anchor.getDx1()); + assertEquals(0, anchor.getDy1()); + assertEquals(0, anchor.getDx2()); + assertEquals(0, anchor.getDy2()); + assertEquals(0, anchor.getCol1()); + assertEquals(0, anchor.getRow1()); + assertEquals(0, anchor.getCol2()); + assertEquals(0, anchor.getRow2()); + } }