From: Javen O'Neal Date: Tue, 24 Nov 2015 08:52:45 +0000 (+0000) Subject: bug 58348: use copy constructor design pattern rather than cloneable pattern for... X-Git-Tag: REL_3_14_BETA1~82 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=d84be50d5492dbf74c576993f875c8b5fd1be4f4;p=poi.git bug 58348: use copy constructor design pattern rather than cloneable pattern for CellCopyPolicy git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1716074 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/src/java/org/apache/poi/ss/usermodel/CellCopyPolicy.java b/src/java/org/apache/poi/ss/usermodel/CellCopyPolicy.java index 80043210a6..8a0377b9a8 100644 --- a/src/java/org/apache/poi/ss/usermodel/CellCopyPolicy.java +++ b/src/java/org/apache/poi/ss/usermodel/CellCopyPolicy.java @@ -20,7 +20,7 @@ package org.apache.poi.ss.usermodel; import org.apache.poi.util.Beta; @Beta -public class CellCopyPolicy implements Cloneable { +public class CellCopyPolicy { // cell-level policies public static final boolean DEFAULT_COPY_CELL_VALUE_POLICY = true; public static final boolean DEFAULT_COPY_CELL_STYLE_POLICY = true; @@ -55,6 +55,24 @@ public class CellCopyPolicy implements Cloneable { */ public CellCopyPolicy() { } + /** + * Copy constructor + * + * @param other policy to copy + */ + public CellCopyPolicy(CellCopyPolicy other) { + copyCellValue = other.isCopyCellValue(); + copyCellStyle = other.isCopyCellStyle(); + copyCellFormula = other.isCopyCellFormula(); + copyHyperlink = other.isCopyHyperlink(); + mergeHyperlink = other.isMergeHyperlink(); + + copyRowHeight = other.isCopyRowHeight(); + condenseRows = other.isCondenseRows(); + + copyMergedRegions = other.isCopyMergedRegions(); + } + // should builder be replaced with CellCopyPolicy setters that return the object // to allow setters to be chained together? // policy.setCopyCellValue(true).setCopyCellStyle(true) @@ -134,7 +152,7 @@ public class CellCopyPolicy implements Cloneable { } } - private Builder createBuilder() { + public Builder createBuilder() { final Builder builder = new Builder() .cellValue(copyCellValue) .cellStyle(copyCellStyle) @@ -146,11 +164,6 @@ public class CellCopyPolicy implements Cloneable { .mergedRegions(copyMergedRegions); return builder; } - - @Override - public CellCopyPolicy clone() { - return createBuilder().build(); - } /* * Cell-level policies diff --git a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFSheet.java b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFSheet.java index 379a675bba..fd3674b3e0 100644 --- a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFSheet.java +++ b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFSheet.java @@ -2705,7 +2705,7 @@ public class XSSFSheet extends POIXMLDocumentPart implements Sheet { // FIXME: is special behavior needed if srcRows and destRows belong to the same sheets and the regions overlap? - final CellCopyPolicy options = policy.clone(); + final CellCopyPolicy options = new CellCopyPolicy(policy); // avoid O(N^2) performance scanning through all regions for each row // merged regions will be copied after all the rows have been copied options.setCopyMergedRegions(false);