You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@poi.apache.org by on...@apache.org on 2015/11/02 13:57:57 UTC

svn commit: r1711951 - in /poi/trunk/src: java/org/apache/poi/hssf/usermodel/ java/org/apache/poi/ss/usermodel/ ooxml/java/org/apache/poi/xssf/usermodel/ ooxml/testcases/org/apache/poi/xssf/streaming/ ooxml/testcases/org/apache/poi/xssf/usermodel/ test...

Author: onealj
Date: Mon Nov  2 12:57:57 2015
New Revision: 1711951

URL: http://svn.apache.org/viewvc?rev=1711951&view=rev
Log:
bug 58572: replace Cloneable with copy constructors for spreadsheet Hyperlink class

Modified:
    poi/trunk/src/java/org/apache/poi/hssf/usermodel/HSSFHyperlink.java
    poi/trunk/src/java/org/apache/poi/ss/usermodel/Hyperlink.java
    poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFCell.java
    poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFHyperlink.java
    poi/trunk/src/ooxml/testcases/org/apache/poi/xssf/streaming/TestSXSSFHyperlink.java
    poi/trunk/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFHyperlink.java
    poi/trunk/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFHyperlink.java
    poi/trunk/src/testcases/org/apache/poi/ss/usermodel/BaseTestHyperlink.java

Modified: poi/trunk/src/java/org/apache/poi/hssf/usermodel/HSSFHyperlink.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/hssf/usermodel/HSSFHyperlink.java?rev=1711951&r1=1711950&r2=1711951&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/hssf/usermodel/HSSFHyperlink.java (original)
+++ poi/trunk/src/java/org/apache/poi/hssf/usermodel/HSSFHyperlink.java Mon Nov  2 12:57:57 2015
@@ -85,33 +85,41 @@ public class HSSFHyperlink implements Hy
     protected HSSFHyperlink( HyperlinkRecord record )
     {
         this.record = record;
-        
+        link_type = getType(record);
+    }
+    
+    private int getType(HyperlinkRecord record) {
+        int link_type;
         // Figure out the type
-        if(record.isFileLink()) {
-           link_type = LINK_FILE;
+        if (record.isFileLink()) {
+            link_type = LINK_FILE;
         } else if(record.isDocumentLink()) {
-           link_type = LINK_DOCUMENT;
+            link_type = LINK_DOCUMENT;
         } else {
-           if(record.getAddress() != null &&
-                 record.getAddress().startsWith("mailto:")) {
-              link_type = LINK_EMAIL;
-           } else {
-              link_type = LINK_URL;
-           }
+            if(record.getAddress() != null &&
+                    record.getAddress().startsWith("mailto:")) {
+                link_type = LINK_EMAIL;
+            } else {
+                link_type = LINK_URL;
+            }
         }
+        return link_type;
     }
     
-    @Override
-    public HSSFHyperlink clone() {
-        return new HSSFHyperlink(record.clone());
-        /*final HSSFHyperlink link = new HSSFHyperlink(link_type);
-        link.setLabel(getLabel());
-        link.setAddress(getAddress());
-        link.setFirstColumn(getFirstColumn());
-        link.setFirstRow(getFirstRow());
-        link.setLastColumn(getLastColumn());
-        link.setLastRow(getLastRow());
-        return link;*/
+    protected HSSFHyperlink(Hyperlink other) {
+        if (other instanceof HSSFHyperlink) {
+            HSSFHyperlink hlink = (HSSFHyperlink) other;
+            record = hlink.record.clone();
+            link_type = getType(record);
+        }
+        else {
+            link_type = other.getType();
+            record = new HyperlinkRecord();
+            setFirstRow(other.getFirstRow());
+            setFirstColumn(other.getFirstColumn());
+            setLastRow(other.getLastRow());
+            setLastColumn(other.getLastColumn());
+        }
     }
 
     /**

Modified: poi/trunk/src/java/org/apache/poi/ss/usermodel/Hyperlink.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/ss/usermodel/Hyperlink.java?rev=1711951&r1=1711950&r2=1711951&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/ss/usermodel/Hyperlink.java (original)
+++ poi/trunk/src/java/org/apache/poi/ss/usermodel/Hyperlink.java Mon Nov  2 12:57:57 2015
@@ -19,7 +19,7 @@ package org.apache.poi.ss.usermodel;
 /**
  * Represents an Excel hyperlink.
  */
-public interface Hyperlink extends org.apache.poi.common.usermodel.Hyperlink, Cloneable {
+public interface Hyperlink extends org.apache.poi.common.usermodel.Hyperlink {
     /**
      * Return the row of the first cell that contains the hyperlink
      *
@@ -75,11 +75,4 @@ public interface Hyperlink extends org.a
      * @param col the 0-based column of the last cell that contains the hyperlink
      */
     public void setLastColumn(int col);
-    
-    /**
-     * Create a clone of this hyperlink
-     *
-     * @return clone of this Hyperlink
-     */
-    public Hyperlink clone();
 }

Modified: poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFCell.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFCell.java?rev=1711951&r1=1711950&r2=1711951&view=diff
==============================================================================
--- poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFCell.java (original)
+++ poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFCell.java Mon Nov  2 12:57:57 2015
@@ -188,7 +188,7 @@ public final class XSSFCell implements C
             // if srcCell doesn't have a hyperlink and destCell has a hyperlink, don't clear destCell's hyperlink
             final Hyperlink srcHyperlink = srcCell.getHyperlink();
             if (srcHyperlink != null) {
-                setHyperlink(srcHyperlink.clone());
+                setHyperlink(new XSSFHyperlink(srcHyperlink));
             }
         }
         else if (policy.isCopyHyperlink()) {
@@ -199,7 +199,7 @@ public final class XSSFCell implements C
                 setHyperlink(null);
             }
             else {
-                setHyperlink(srcHyperlink.clone());
+                setHyperlink(new XSSFHyperlink(srcHyperlink));
             }
         }
     }

Modified: poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFHyperlink.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFHyperlink.java?rev=1711951&r1=1711950&r2=1711951&view=diff
==============================================================================
--- poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFHyperlink.java (original)
+++ poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFHyperlink.java Mon Nov  2 12:57:57 2015
@@ -93,13 +93,29 @@ public class XSSFHyperlink implements Hy
         }
     }
     
-    @Override
-    public Hyperlink clone() {
-        final XSSFHyperlink clone = new XSSFHyperlink((CTHyperlink) _ctHyperlink.copy(), _externalRel);
-        clone.setLocation(_location);
-        return clone;
+    /**
+     * Create a new XSSFHyperlink. This method is for Internal use only.
+     * XSSFHyperlinks can be created by XSSFCreationHelper.
+     *
+     * @param type - the type of hyperlink to create, see {@link Hyperlink}
+     */
+    @Internal //FIXME: change to protected if/when SXSSFHyperlink class is created
+    public XSSFHyperlink(Hyperlink other) {
+        if (other instanceof XSSFHyperlink) {
+            XSSFHyperlink xlink = (XSSFHyperlink) other;
+            _type = xlink.getType();
+            _location = xlink._location;
+            _externalRel = xlink._externalRel;
+            _ctHyperlink = (CTHyperlink) xlink._ctHyperlink.copy();
+        }
+        else {
+            _type = other.getType();
+            _location = other.getAddress();
+            _externalRel = null;
+            _ctHyperlink = CTHyperlink.Factory.newInstance();
+            setCellReference(new CellReference(other.getFirstRow(), other.getFirstColumn()));
+        }
     }
-
     /**
      * @return the underlying CTHyperlink object
      */

Modified: poi/trunk/src/ooxml/testcases/org/apache/poi/xssf/streaming/TestSXSSFHyperlink.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/ooxml/testcases/org/apache/poi/xssf/streaming/TestSXSSFHyperlink.java?rev=1711951&r1=1711950&r2=1711951&view=diff
==============================================================================
--- poi/trunk/src/ooxml/testcases/org/apache/poi/xssf/streaming/TestSXSSFHyperlink.java (original)
+++ poi/trunk/src/ooxml/testcases/org/apache/poi/xssf/streaming/TestSXSSFHyperlink.java Mon Nov  2 12:57:57 2015
@@ -22,7 +22,9 @@ package org.apache.poi.xssf.streaming;
 import org.junit.After;
 
 import org.apache.poi.ss.usermodel.BaseTestHyperlink;
+import org.apache.poi.ss.usermodel.Hyperlink;
 import org.apache.poi.xssf.SXSSFITestDataProvider;
+import org.apache.poi.xssf.usermodel.XSSFHyperlink;
 
 /**
  * Test setting hyperlinks in SXSSF
@@ -40,5 +42,11 @@ public class TestSXSSFHyperlink extends
     public void tearDown(){
         SXSSFITestDataProvider.instance.cleanup();
     }
+    
+    @Override
+    public XSSFHyperlink copyHyperlink(Hyperlink link) {
+        // FIXME: replace with SXSSFHyperlink if it ever gets created
+        return new XSSFHyperlink(link);
+    }
 
 }
\ No newline at end of file

Modified: poi/trunk/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFHyperlink.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFHyperlink.java?rev=1711951&r1=1711950&r2=1711951&view=diff
==============================================================================
--- poi/trunk/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFHyperlink.java (original)
+++ poi/trunk/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFHyperlink.java Mon Nov  2 12:57:57 2015
@@ -23,6 +23,7 @@ import static org.junit.Assert.assertEqu
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.fail;
 
+import org.apache.poi.hssf.usermodel.HSSFHyperlink;
 import org.apache.poi.openxml4j.opc.PackageRelationship;
 import org.apache.poi.openxml4j.opc.PackageRelationshipCollection;
 import org.apache.poi.ss.usermodel.BaseTestHyperlink;
@@ -30,6 +31,7 @@ import org.apache.poi.ss.usermodel.Cell;
 import org.apache.poi.ss.usermodel.CreationHelper;
 import org.apache.poi.ss.usermodel.Hyperlink;
 import org.apache.poi.ss.usermodel.Row;
+import org.apache.poi.ss.util.CellReference;
 import org.apache.poi.xssf.XSSFITestDataProvider;
 import org.apache.poi.xssf.XSSFTestDataSamples;
 import org.junit.Test;
@@ -268,4 +270,26 @@ public final class TestXSSFHyperlink ext
         link = wb.getSheetAt(0).getRow(0).getCell(14).getHyperlink();
         assertEquals("mailto:nobody@nowhere.uk%C2%A0", link.getAddress());
     }
+    
+    @Override
+    public XSSFHyperlink copyHyperlink(Hyperlink link) {
+        return new XSSFHyperlink(link);
+    }
+    
+    @Test
+    public void testCopyHSSFHyperlink() {
+        HSSFHyperlink hlink = new HSSFHyperlink(Hyperlink.LINK_URL);
+        hlink.setAddress("http://poi.apache.org/");
+        hlink.setFirstColumn(3);
+        hlink.setFirstRow(2);
+        hlink.setLastColumn(5);
+        hlink.setLastRow(6);
+        hlink.setLabel("label");
+        XSSFHyperlink xlink = new XSSFHyperlink(hlink);
+        
+        assertEquals("http://poi.apache.org/", xlink.getAddress());
+        assertEquals(new CellReference(2, 3), new CellReference(xlink.getCellRef()));
+        // Are HSSFHyperlink.label and XSSFHyperlink.tooltip the same? If so, perhaps one of these needs renamed for a consistent Hyperlink interface
+        // assertEquals("label", xlink.getTooltip());
+    }
 }

Modified: poi/trunk/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFHyperlink.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFHyperlink.java?rev=1711951&r1=1711950&r2=1711951&view=diff
==============================================================================
--- poi/trunk/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFHyperlink.java (original)
+++ poi/trunk/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFHyperlink.java Mon Nov  2 12:57:57 2015
@@ -27,7 +27,13 @@ import java.io.IOException;
 import org.apache.poi.hssf.HSSFITestDataProvider;
 import org.apache.poi.hssf.HSSFTestDataSamples;
 import org.apache.poi.ss.usermodel.BaseTestHyperlink;
-
+import org.apache.poi.ss.usermodel.Hyperlink;
+/*
+import org.apache.poi.ss.util.CellReference;
+import org.apache.poi.xssf.usermodel.XSSFCreationHelper;
+import org.apache.poi.xssf.usermodel.XSSFHyperlink;
+import org.apache.poi.xssf.usermodel.XSSFWorkbook;
+*/
 
 /**
  * Tests HSSFHyperlink.
@@ -259,4 +265,28 @@ public final class TestHSSFHyperlink ext
         assertEquals(5, link2_shifted.getFirstRow());
         assertEquals(5, link2_shifted.getLastRow());
     }
+    
+    @Override
+    public HSSFHyperlink copyHyperlink(Hyperlink link) {
+        return new HSSFHyperlink(link);
+    }
+    
+    /*
+    @Test
+    public void testCopyXSSFHyperlink() throws IOException {
+        XSSFWorkbook wb = new XSSFWorkbook();
+        XSSFCreationHelper helper = wb.getCreationHelper();
+        XSSFHyperlink xlink = helper.createHyperlink(Hyperlink.LINK_URL);
+        xlink.setAddress("http://poi.apache.org/");
+        xlink.setCellReference("C3");
+        xlink.setTooltip("tooltip");
+        HSSFHyperlink hlink = new HSSFHyperlink(xlink);
+        
+        assertEquals("http://poi.apache.org/", hlink.getAddress());
+        assertEquals("C3", new CellReference(hlink.getFirstRow(), hlink.getFirstColumn()).formatAsString());
+        // Are HSSFHyperlink.label and XSSFHyperlink.tooltip the same? If so, perhaps one of these needs renamed for a consistent Hyperlink interface
+        // assertEquals("tooltip", hlink.getLabel());
+        
+        wb.close();
+    }*/
 }

Modified: poi/trunk/src/testcases/org/apache/poi/ss/usermodel/BaseTestHyperlink.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/testcases/org/apache/poi/ss/usermodel/BaseTestHyperlink.java?rev=1711951&r1=1711950&r2=1711951&view=diff
==============================================================================
--- poi/trunk/src/testcases/org/apache/poi/ss/usermodel/BaseTestHyperlink.java (original)
+++ poi/trunk/src/testcases/org/apache/poi/ss/usermodel/BaseTestHyperlink.java Mon Nov  2 12:57:57 2015
@@ -97,9 +97,9 @@ public abstract class BaseTestHyperlink
         assertEquals("'Target Sheet'!A1", link.getAddress());
     }
     
+    // copy a hyperlink via the copy constructor
     @Test
-    public void testClone() {
-        System.out.println("testClone");
+    public void testCopyHyperlink() {
         final Workbook wb = _testDataProvider.createWorkbook();
         final CreationHelper createHelper = wb.getCreationHelper();
 
@@ -116,7 +116,7 @@ public abstract class BaseTestHyperlink
         link1.setAddress("http://poi.apache.org/");
         cell1.setHyperlink(link1);
         
-        link2 = link1.clone();
+        link2 = copyHyperlink(link1);
         
         // Change address (type is not changeable)
         link2.setAddress("http://apache.org/");
@@ -137,4 +137,6 @@ public abstract class BaseTestHyperlink
         assertEquals(link1, actualHyperlinks.get(0));
         assertEquals(link2, actualHyperlinks.get(1));
     }
+    
+    public abstract Hyperlink copyHyperlink(Hyperlink link);
 }



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