You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@poi.apache.org by fa...@apache.org on 2021/11/28 09:43:29 UTC

svn commit: r1895388 - in /poi/trunk: poi-ooxml/src/main/java/org/apache/poi/xssf/model/CommentsTable.java poi-ooxml/src/main/java/org/apache/poi/xssf/usermodel/XSSFSheet.java poi/src/main/java9/module-info.class

Author: fanningpj
Date: Sun Nov 28 09:43:28 2021
New Revision: 1895388

URL: http://svn.apache.org/viewvc?rev=1895388&view=rev
Log:
cache vml drawing

Modified:
    poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xssf/model/CommentsTable.java
    poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xssf/usermodel/XSSFSheet.java
    poi/trunk/poi/src/main/java9/module-info.class

Modified: poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xssf/model/CommentsTable.java
URL: http://svn.apache.org/viewvc/poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xssf/model/CommentsTable.java?rev=1895388&r1=1895387&r2=1895388&view=diff
==============================================================================
--- poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xssf/model/CommentsTable.java (original)
+++ poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xssf/model/CommentsTable.java Sun Nov 28 09:43:28 2021
@@ -52,6 +52,7 @@ public class CommentsTable extends POIXM
     public static final int DEFAULT_AUTHOR_ID = 0;
 
     private Sheet sheet;
+    private XSSFVMLDrawing vmlDrawing;
 
     /**
      * Underlying XML Beans CTComment list.
@@ -337,11 +338,13 @@ public class CommentsTable extends POIXM
     }
 
     private XSSFVMLDrawing getVMLDrawing(Sheet sheet, boolean autocreate) {
-        if (sheet instanceof XSSFSheet) {
-            return ((XSSFSheet)sheet).getVMLDrawing(autocreate);
-        } else if (sheet instanceof SXSSFSheet) {
-            return ((SXSSFSheet)sheet).getVMLDrawing(autocreate);
+        if (vmlDrawing == null) {
+            if (sheet instanceof XSSFSheet) {
+                vmlDrawing = ((XSSFSheet)sheet).getVMLDrawing(autocreate);
+            } else if (sheet instanceof SXSSFSheet) {
+                vmlDrawing = ((SXSSFSheet)sheet).getVMLDrawing(autocreate);
+            }
         }
-        return null;
+        return vmlDrawing;
     }
 }

Modified: poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xssf/usermodel/XSSFSheet.java
URL: http://svn.apache.org/viewvc/poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xssf/usermodel/XSSFSheet.java?rev=1895388&r1=1895387&r2=1895388&view=diff
==============================================================================
--- poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xssf/usermodel/XSSFSheet.java (original)
+++ poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xssf/usermodel/XSSFSheet.java Sun Nov 28 09:43:28 2021
@@ -104,6 +104,7 @@ public class XSSFSheet extends POIXMLDoc
     private SortedMap<String,XSSFTable> tables;
     private List<CellRangeAddress> arrayFormulas;
     private final XSSFDataValidationHelper dataValidationHelper;
+    private XSSFVMLDrawing xssfvmlDrawing;
 
     /**
      * Creates new XSSFSheet   - called by XSSFWorkbook to create a sheet from scratch.
@@ -568,41 +569,44 @@ public class XSSFSheet extends POIXMLDoc
      */
     @Internal
     public XSSFVMLDrawing getVMLDrawing(boolean autoCreate) {
-        XSSFVMLDrawing drawing = null;
-        CTLegacyDrawing ctDrawing = getCTLegacyDrawing();
-        if(ctDrawing == null) {
-            if(autoCreate) {
-                int drawingNumber = getNextPartNumber(XSSFRelation.VML_DRAWINGS,
-                        getPackagePart().getPackage().getPartsByContentType(XSSFRelation.VML_DRAWINGS.getContentType()).size());
-                RelationPart rp = createRelationship(XSSFRelation.VML_DRAWINGS, getWorkbook().getXssfFactory(), drawingNumber, false);
-                drawing = rp.getDocumentPart();
-                String relId = rp.getRelationship().getId();
-
-                //add CTLegacyDrawing element which indicates that this sheet contains drawing components built on the drawingML platform.
-                //The relationship Id references the part containing the drawing definitions.
-                ctDrawing = worksheet.addNewLegacyDrawing();
-                ctDrawing.setId(relId);
-            }
-        } else {
-            //search the referenced drawing in the list of the sheet's relations
-            final String id = ctDrawing.getId();
-            for (RelationPart rp : getRelationParts()){
-                POIXMLDocumentPart p = rp.getDocumentPart();
-                if(p instanceof XSSFVMLDrawing) {
-                    XSSFVMLDrawing dr = (XSSFVMLDrawing)p;
-                    String drId = rp.getRelationship().getId();
-                    if (drId.equals(id)) {
-                        drawing = dr;
-                        break;
+        if (xssfvmlDrawing == null) {
+            XSSFVMLDrawing drawing = null;
+            CTLegacyDrawing ctDrawing = getCTLegacyDrawing();
+            if(ctDrawing == null) {
+                if(autoCreate) {
+                    int drawingNumber = getNextPartNumber(XSSFRelation.VML_DRAWINGS,
+                            getPackagePart().getPackage().getPartsByContentType(XSSFRelation.VML_DRAWINGS.getContentType()).size());
+                    RelationPart rp = createRelationship(XSSFRelation.VML_DRAWINGS, getWorkbook().getXssfFactory(), drawingNumber, false);
+                    drawing = rp.getDocumentPart();
+                    String relId = rp.getRelationship().getId();
+
+                    //add CTLegacyDrawing element which indicates that this sheet contains drawing components built on the drawingML platform.
+                    //The relationship Id references the part containing the drawing definitions.
+                    ctDrawing = worksheet.addNewLegacyDrawing();
+                    ctDrawing.setId(relId);
+                }
+            } else {
+                //search the referenced drawing in the list of the sheet's relations
+                final String id = ctDrawing.getId();
+                for (RelationPart rp : getRelationParts()){
+                    POIXMLDocumentPart p = rp.getDocumentPart();
+                    if(p instanceof XSSFVMLDrawing) {
+                        XSSFVMLDrawing dr = (XSSFVMLDrawing)p;
+                        String drId = rp.getRelationship().getId();
+                        if (drId.equals(id)) {
+                            drawing = dr;
+                            break;
+                        }
+                        // do not break here since drawing has not been found yet (see bug 52425)
                     }
-                    // do not break here since drawing has not been found yet (see bug 52425)
+                }
+                if(drawing == null){
+                    LOG.atError().log("Can't find VML drawing with id={} in the list of the sheet's relationships", id);
                 }
             }
-            if(drawing == null){
-                LOG.atError().log("Can't find VML drawing with id={} in the list of the sheet's relationships", id);
-            }
+            xssfvmlDrawing = drawing;
         }
-        return drawing;
+        return xssfvmlDrawing;
     }
 
     protected CTDrawing getCTDrawing() {

Modified: poi/trunk/poi/src/main/java9/module-info.class
URL: http://svn.apache.org/viewvc/poi/trunk/poi/src/main/java9/module-info.class?rev=1895388&r1=1895387&r2=1895388&view=diff
==============================================================================
Binary files - no diff available.



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@poi.apache.org
For additional commands, e-mail: commits-help@poi.apache.org