Author: onealj
Date: Mon Jun 13 00:43:34 2016
New Revision: 1748072

URL: http://svn.apache.org/viewvc?rev=1748072&view=rev
Log:
add copy constructor

Modified:
    
poi/branches/ss_border_property_template/src/java/org/apache/poi/ss/util/BorderPropertyTemplate.java
    
poi/branches/ss_border_property_template/src/testcases/org/apache/poi/ss/util/TestBorderPropertyTemplate.java

Modified: 
poi/branches/ss_border_property_template/src/java/org/apache/poi/ss/util/BorderPropertyTemplate.java
URL: 
http://svn.apache.org/viewvc/poi/branches/ss_border_property_template/src/java/org/apache/poi/ss/util/BorderPropertyTemplate.java?rev=1748072&r1=1748071&r2=1748072&view=diff
==============================================================================
--- 
poi/branches/ss_border_property_template/src/java/org/apache/poi/ss/util/BorderPropertyTemplate.java
 (original)
+++ 
poi/branches/ss_border_property_template/src/java/org/apache/poi/ss/util/BorderPropertyTemplate.java
 Mon Jun 13 00:43:34 2016
@@ -198,6 +198,30 @@ public final class BorderPropertyTemplat
     }
 
     /**
+     * Copy constructor
+     *
+     * Create a template from an existing template.
+     * Changes made to either template do not affect the other template.
+     * @since 3.15 beta 2
+     */
+    public BorderPropertyTemplate(BorderPropertyTemplate prototype) {
+        this();
+        // deep copy the _propertyTemplate map from prototype
+        for (Entry<CellAddress, Map<String, Object>> other : 
prototype._propertyTemplate.entrySet()) {
+            CellAddress cell = other.getKey();
+            Map<String, Object> otherMap = other.getValue();
+
+            // The keys in otherMap are immutable Strings
+            // The values in otherMap are immutable Shorts or BorderStyles
+            // Therefore, this map's data cannot be modified through protoype
+            Map<String, Object> map = new HashMap<String, Object>(otherMap);
+
+            // CellAddress is an immutable class, therefore it is ok to 
reference the same instance
+            _propertyTemplate.put(cell, map);
+        }
+    }
+
+    /**
      * Add a group of cell borders for a cell range to the border property 
template.
      * The borders are not applied to the cells at this time, just the 
template is drawn
      * (<code>drawBorders</code> stages changes using the border property 
template).

Modified: 
poi/branches/ss_border_property_template/src/testcases/org/apache/poi/ss/util/TestBorderPropertyTemplate.java
URL: 
http://svn.apache.org/viewvc/poi/branches/ss_border_property_template/src/testcases/org/apache/poi/ss/util/TestBorderPropertyTemplate.java?rev=1748072&r1=1748071&r2=1748072&view=diff
==============================================================================
--- 
poi/branches/ss_border_property_template/src/testcases/org/apache/poi/ss/util/TestBorderPropertyTemplate.java
 (original)
+++ 
poi/branches/ss_border_property_template/src/testcases/org/apache/poi/ss/util/TestBorderPropertyTemplate.java
 Mon Jun 13 00:43:34 2016
@@ -18,6 +18,7 @@
 package org.apache.poi.ss.util;
 
 import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNull;
 
 import java.io.IOException;
 
@@ -44,6 +45,37 @@ public final class TestBorderPropertyTem
     private static final short AUTOMATIC = IndexedColors.AUTOMATIC.getIndex();
 
     @Test
+    public void createTemplateFromExisting() throws IOException {
+        CellRangeAddress a1a1 = new CellRangeAddress(0, 0, 0, 0); //A1:A1
+        CellRangeAddress b2b2 = new CellRangeAddress(1, 1, 1, 1); //B2:B2
+        CellRangeAddress c3c3 = new CellRangeAddress(2, 2, 2, 2); //C3:C3
+        CellAddress a1 = new CellAddress(0, 0); //A1
+        CellAddress b2 = new CellAddress(1, 1); //B2
+        CellAddress c3 = new CellAddress(2, 2); //C3
+
+        BorderPropertyTemplate pt1 = new BorderPropertyTemplate();
+        pt1.drawBorders(a1a1, BorderStyle.THIN, RED, BorderExtent.TOP);
+
+        // check to make sure borders were copied
+        BorderPropertyTemplate pt2 = new BorderPropertyTemplate(pt1);
+        assertEquals(1, pt2.getNumBorders(a1));
+        assertThin(pt2.getTemplateProperty(a1, CellUtil.BORDER_TOP));
+        assertRed(pt2.getTemplateProperty(a1, CellUtil.TOP_BORDER_COLOR));
+
+        // Changes to original template should not affect copied template.
+        pt1.drawBorders(b2b2, BorderStyle.THIN, RED, BorderExtent.TOP);
+        assertEquals(0, pt2.getNumBorders(b2));
+        assertNull(pt2.getTemplateProperty(b2, CellUtil.BORDER_TOP));
+        assertNull(pt2.getTemplateProperty(b2, CellUtil.TOP_BORDER_COLOR));
+
+        // Changes to copied template should not affect original template
+        pt2.drawBorders(c3c3, BorderStyle.THIN, RED, BorderExtent.TOP);
+        assertEquals(0, pt1.getNumBorders(c3));
+        assertNull(pt1.getTemplateProperty(c3, CellUtil.BORDER_TOP));
+        assertNull(pt1.getTemplateProperty(c3, CellUtil.TOP_BORDER_COLOR));
+    }
+
+    @Test
     public void getNumBorders() throws IOException {
         CellRangeAddress a1a1 = new CellRangeAddress(0, 0, 0, 0); //A1:A1
         CellAddress a1 = new CellAddress(0, 0); //A1



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

Reply via email to