poi-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From ye...@apache.org
Subject svn commit: r786442 - in /poi/trunk/src: documentation/content/xdocs/ java/org/apache/poi/hssf/record/ java/org/apache/poi/hssf/usermodel/ ooxml/testcases/org/apache/poi/xssf/usermodel/ testcases/org/apache/poi/hssf/record/ testcases/org/apache/poi/hss...
Date Fri, 19 Jun 2009 10:37:24 GMT
Author: yegor
Date: Fri Jun 19 10:37:24 2009
New Revision: 786442

URL: http://svn.apache.org/viewvc?rev=786442&view=rev
Log:
fixed a regression issue where HSSFHyperlink failed to set inter-sheet and file links, see
Bugzilla #47375

Added:
    poi/trunk/src/testcases/org/apache/poi/ss/usermodel/BaseTestHyperlink.java   (with props)
Modified:
    poi/trunk/src/documentation/content/xdocs/status.xml
    poi/trunk/src/java/org/apache/poi/hssf/record/HyperlinkRecord.java
    poi/trunk/src/java/org/apache/poi/hssf/usermodel/HSSFHyperlink.java
    poi/trunk/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFHyperlink.java
    poi/trunk/src/testcases/org/apache/poi/hssf/record/TestHyperlinkRecord.java
    poi/trunk/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFHyperlink.java

Modified: poi/trunk/src/documentation/content/xdocs/status.xml
URL: http://svn.apache.org/viewvc/poi/trunk/src/documentation/content/xdocs/status.xml?rev=786442&r1=786441&r2=786442&view=diff
==============================================================================
--- poi/trunk/src/documentation/content/xdocs/status.xml (original)
+++ poi/trunk/src/documentation/content/xdocs/status.xml Fri Jun 19 10:37:24 2009
@@ -33,6 +33,7 @@
 
     <changes>
         <release version="3.5-beta7" date="2009-??-??">
+           <action dev="POI-DEVELOPERS" type="fix">47375 - Fixed HSSFHyperlink to correctly
set inter-sheet and file links</action>
            <action dev="POI-DEVELOPERS" type="fix">47384 - Fixed ExternalNameRecord
to handle unicode names</action>
            <action dev="POI-DEVELOPERS" type="fix">47372 - Fixed locale-sensitive unit
tests to pass when running on non-US locale</action>
         </release>

Modified: poi/trunk/src/java/org/apache/poi/hssf/record/HyperlinkRecord.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/hssf/record/HyperlinkRecord.java?rev=786442&r1=786441&r2=786442&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/hssf/record/HyperlinkRecord.java (original)
+++ poi/trunk/src/java/org/apache/poi/hssf/record/HyperlinkRecord.java Fri Jun 19 10:37:24
2009
@@ -81,7 +81,9 @@
 		@Override
 		public boolean equals(Object obj) {
 			GUID other = (GUID) obj;
-			return _d1 == other._d1 && _d2 == other._d2 
+            if (obj == null || !(obj instanceof GUID))
+                return false;
+			return _d1 == other._d1 && _d2 == other._d2
 			    && _d3 == other._d3 && _d4 == other._d4;
 		}
 
@@ -360,21 +362,31 @@
     }
 
     /**
-     * Hyperlink address. Depending on the hyperlink type it can be URL, e-mail, patrh to
a file, etc.
+     * Hyperlink address. Depending on the hyperlink type it can be URL, e-mail, path to
a file, etc.
      *
      * @return  the address of this hyperlink
      */
     public String getAddress() {
-        return cleanString(_address);
+        if ((_linkOpts & HLINK_URL) != 0 && FILE_MONIKER.equals(_moniker))
+            return cleanString(_address != null ? _address : _shortFilename);
+        else if((_linkOpts & HLINK_PLACE) != 0)
+            return cleanString(_textMark);
+        else
+            return cleanString(_address);
     }
 
     /**
-     * Hyperlink address. Depending on the hyperlink type it can be URL, e-mail, patrh to
a file, etc.
+     * Hyperlink address. Depending on the hyperlink type it can be URL, e-mail, path to
a file, etc.
      *
      * @param address  the address of this hyperlink
      */
     public void setAddress(String address) {
-        _address = appendNullTerm(address);
+        if ((_linkOpts & HLINK_URL) != 0 && FILE_MONIKER.equals(_moniker))
+            _shortFilename = appendNullTerm(address);
+        else if((_linkOpts & HLINK_PLACE) != 0)
+            _textMark = appendNullTerm(address);
+        else
+            _address = appendNullTerm(address);
     }
 
     public String getShortFilename() {

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=786442&r1=786441&r2=786442&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 Fri Jun 19 10:37:24
2009
@@ -162,7 +162,7 @@
     }
 
     /**
-     * Hypelink address. Depending on the hyperlink type it can be URL, e-mail, patrh to
a file, etc.
+     * Hypelink address. Depending on the hyperlink type it can be URL, e-mail, path to a
file, etc.
      *
      * @return  the address of this hyperlink
      */
@@ -172,12 +172,23 @@
     public String getTextMark(){
         return record.getTextMark();
     }
+
+    /**
+     * Convenience method equivalent to {@link #setAddress(String)}
+     *
+     * @param textMark the place in worksheet this hypelrink referes to, e.g. 'Target Sheet'!A1'
+     */
     public void setTextMark(String textMark) {
         record.setTextMark(textMark);
     }
     public String getShortFilename(){
         return record.getShortFilename();
     }
+    /**
+     * Convenience method equivalent to {@link #setAddress(String)}
+     *
+     * @param shortFilename the path to a file this hypelrink points to, e.g. 'readme.txt'
+     */
     public void setShortFilename(String shortFilename) {
         record.setShortFilename(shortFilename);
     }

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=786442&r1=786441&r2=786442&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 Fri
Jun 19 10:37:24 2009
@@ -19,15 +19,16 @@
 
 import java.io.File;
 
-import junit.framework.TestCase;
-
-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.usermodel.*;
 import org.apache.poi.xssf.XSSFTestDataSamples;
+import org.apache.poi.xssf.XSSFITestDataProvider;
+
+public final class TestXSSFHyperlink extends BaseTestHyperlink {
+    @Override
+    protected XSSFITestDataProvider getTestDataProvider() {
+        return XSSFITestDataProvider.getInstance();
+    }
 
-public final class TestXSSFHyperlink extends TestCase {
 	@Override
 	protected void setUp() {
 		// Use system out logger

Modified: poi/trunk/src/testcases/org/apache/poi/hssf/record/TestHyperlinkRecord.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/testcases/org/apache/poi/hssf/record/TestHyperlinkRecord.java?rev=786442&r1=786441&r2=786442&view=diff
==============================================================================
--- poi/trunk/src/testcases/org/apache/poi/hssf/record/TestHyperlinkRecord.java (original)
+++ poi/trunk/src/testcases/org/apache/poi/hssf/record/TestHyperlinkRecord.java Fri Jun 19
10:37:24 2009
@@ -281,7 +281,7 @@
 
         assertEquals("file", link.getLabel());
         assertEquals("link1.xls", link.getShortFilename());
-        assertEquals(null, link.getAddress());
+        assertEquals("link1.xls", link.getAddress());
     }
 
     public void testReadEmailLink(){
@@ -317,7 +317,7 @@
 
         assertEquals("place", link.getLabel());
         assertEquals("Sheet1!A1", link.getTextMark());
-        assertEquals(null, link.getAddress());
+        assertEquals("Sheet1!A1", link.getAddress());
     }
 
     private void serialize(byte[] data){

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=786442&r1=786441&r2=786442&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 Fri Jun 19
10:37:24 2009
@@ -17,25 +17,27 @@
 
 package org.apache.poi.hssf.usermodel;
 
-import junit.framework.TestCase;
-
-import java.io.*;
-
 import org.apache.poi.hssf.HSSFTestDataSamples;
+import org.apache.poi.hssf.HSSFITestDataProvider;
+import org.apache.poi.ss.usermodel.BaseTestHyperlink;
 
 /**
  * Tests HSSFHyperlink.
  *
  * @author  Yegor Kozlov
  */
-public final class TestHSSFHyperlink extends TestCase {
+public final class TestHSSFHyperlink extends BaseTestHyperlink {
 
+    @Override
+    protected HSSFITestDataProvider getTestDataProvider(){
+        return HSSFITestDataProvider.getInstance();
+    }
     /**
      * Test that we can read hyperlinks.
      */
     public void testRead() {
 
-        HSSFWorkbook wb = HSSFTestDataSamples.openSampleWorkbook("HyperlinksOnManySheets.xls");
+        HSSFWorkbook wb = getTestDataProvider().openSampleWorkbook("HyperlinksOnManySheets.xls");
 
         HSSFSheet sheet;
         HSSFCell cell;
@@ -71,10 +73,11 @@
         assertEquals("Link To First Sheet", link.getLabel());
         assertEquals("Link To First Sheet", cell.getRichStringCellValue().getString());
         assertEquals("WebLinks!A1", link.getTextMark());
+        assertEquals("WebLinks!A1", link.getAddress());
     }
 
     public void testModify() throws Exception {
-        HSSFWorkbook wb = HSSFTestDataSamples.openSampleWorkbook("HyperlinksOnManySheets.xls");
+        HSSFWorkbook wb = getTestDataProvider().openSampleWorkbook("HyperlinksOnManySheets.xls");
 
         HSSFSheet sheet;
         HSSFCell cell;
@@ -86,11 +89,7 @@
         //modify the link
         link.setAddress("www.apache.org");
 
-        //serialize and read again
-        ByteArrayOutputStream out = new ByteArrayOutputStream();
-        wb.write(out);
-
-        wb = new HSSFWorkbook(new ByteArrayInputStream(out.toByteArray()));
+        wb = getTestDataProvider().writeOutAndReadBack(wb);
         sheet = wb.getSheet("WebLinks");
         cell = sheet.getRow(4).getCell(0);
         link = cell.getHyperlink();
@@ -99,71 +98,53 @@
 
     }
 
-    public void testCreate() throws Exception {
-        HSSFWorkbook wb = new HSSFWorkbook();
+    /**
+     * HSSF-specific ways of creating links to a place in workbook.
+     * You can set the target  in two ways:
+     *  link.setTextMark("'Target Sheet-1'!A1"); //HSSF-specific
+     *  or
+     *  link.setAddress("'Target Sheet-1'!A1"); //common between XSSF and HSSF
+     */
+    public void testCreateDocumentLink() throws Exception {
+        HSSFWorkbook wb = getTestDataProvider().createWorkbook();
 
+        //link to a place in this workbook
+        HSSFHyperlink link;
         HSSFCell cell;
         HSSFSheet sheet = wb.createSheet("Hyperlinks");
 
-        //URL
-        cell = sheet.createRow(0).createCell(0);
-        cell.setCellValue("URL Link");
-        HSSFHyperlink link = new HSSFHyperlink(HSSFHyperlink.LINK_URL);
-        link.setAddress("http://poi.apache.org/");
-        cell.setHyperlink(link);
-
-        //link to a file in the current directory
-        cell = sheet.createRow(1).createCell(0);
-        cell.setCellValue("File Link");
-        link = new HSSFHyperlink(HSSFHyperlink.LINK_FILE);
-        link.setAddress("link1.xls");
-        cell.setHyperlink(link);
-
-        //e-mail link
-        cell = sheet.createRow(2).createCell(0);
-        cell.setCellValue("Email Link");
-        link = new HSSFHyperlink(HSSFHyperlink.LINK_EMAIL);
-        //note, if subject contains white spaces, make sure they are url-encoded
-        link.setAddress("mailto:poi@apache.org?subject=Hyperlinks");
-        cell.setHyperlink(link);
-
-        //link to a place in this workbook
-
         //create a target sheet and cell
         HSSFSheet sheet2 = wb.createSheet("Target Sheet");
         sheet2.createRow(0).createCell(0).setCellValue("Target Cell");
 
-        cell = sheet.createRow(3).createCell(0);
+        //cell A1 has a link to 'Target Sheet-1'!A1
+        cell = sheet.createRow(0).createCell(0);
         cell.setCellValue("Worksheet Link");
         link = new HSSFHyperlink(HSSFHyperlink.LINK_DOCUMENT);
         link.setTextMark("'Target Sheet'!A1");
         cell.setHyperlink(link);
 
-        //serialize and read again
-        ByteArrayOutputStream out = new ByteArrayOutputStream();
-        wb.write(out);
+        //cell B1 has a link to cell A1 on the same sheet
+        cell = sheet.createRow(1).createCell(0);
+        cell.setCellValue("Worksheet Link");
+        link = new HSSFHyperlink(HSSFHyperlink.LINK_DOCUMENT);
+        link.setAddress("'Hyperlinks'!A1");
+        cell.setHyperlink(link);
 
-        wb = new HSSFWorkbook(new ByteArrayInputStream(out.toByteArray()));
+        wb = getTestDataProvider().writeOutAndReadBack(wb);
         sheet = wb.getSheet("Hyperlinks");
+
         cell = sheet.getRow(0).getCell(0);
         link = cell.getHyperlink();
         assertNotNull(link);
-        assertEquals("http://poi.apache.org/", link.getAddress());
+        assertEquals("'Target Sheet'!A1", link.getTextMark());
+        assertEquals("'Target Sheet'!A1", link.getAddress());
 
         cell = sheet.getRow(1).getCell(0);
         link = cell.getHyperlink();
         assertNotNull(link);
-        assertEquals("link1.xls", link.getAddress());
-
-        cell = sheet.getRow(2).getCell(0);
-        link = cell.getHyperlink();
-        assertNotNull(link);
-        assertEquals("mailto:poi@apache.org?subject=Hyperlinks", link.getAddress());
-
-        cell = sheet.getRow(3).getCell(0);
-        link = cell.getHyperlink();
-        assertNotNull(link);
-        assertEquals("'Target Sheet'!A1", link.getTextMark());
+        assertEquals("'Hyperlinks'!A1", link.getTextMark());
+        assertEquals("'Hyperlinks'!A1", link.getAddress());
     }
 
     public void testCloneSheet() {
@@ -190,7 +171,7 @@
      * see bugs #46445 and #29957
      */
     public void testShiftRows(){
-        HSSFWorkbook wb = HSSFTestDataSamples.openSampleWorkbook("46445.xls");
+        HSSFWorkbook wb = getTestDataProvider().openSampleWorkbook("46445.xls");
 
 
         HSSFSheet sheet = wb.getSheetAt(0);

Added: 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=786442&view=auto
==============================================================================
--- poi/trunk/src/testcases/org/apache/poi/ss/usermodel/BaseTestHyperlink.java (added)
+++ poi/trunk/src/testcases/org/apache/poi/ss/usermodel/BaseTestHyperlink.java Fri Jun 19
10:37:24 2009
@@ -0,0 +1,88 @@
+/* ====================================================================
+   Licensed to the Apache Software Foundation (ASF) under one or more
+   contributor license agreements.  See the NOTICE file distributed with
+   this work for additional information regarding copyright ownership.
+   The ASF licenses this file to You under the Apache License, Version 2.0
+   (the "License"); you may not use this file except in compliance with
+   the License.  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+==================================================================== */
+
+package org.apache.poi.ss.usermodel;
+
+import junit.framework.TestCase;
+
+import org.apache.poi.ss.ITestDataProvider;
+
+/**
+ * Test diffrent types of Excel hyperlinks
+ *
+ * @author Yegor Kozlov
+ */
+public abstract class BaseTestHyperlink extends TestCase {
+
+    protected abstract ITestDataProvider getTestDataProvider();
+
+    public void testBasicTypes(){
+        Workbook wb = getTestDataProvider().createWorkbook();
+        CreationHelper createHelper = wb.getCreationHelper();
+
+        Cell cell;
+        Hyperlink link;
+        Sheet sheet = wb.createSheet("Hyperlinks");
+
+        //URL
+        cell = sheet.createRow(0).createCell((short) 0);
+        cell.setCellValue("URL Link");
+        link = createHelper.createHyperlink(Hyperlink.LINK_URL);
+        link.setAddress("http://poi.apache.org/");
+        cell.setHyperlink(link);
+
+        //link to a file in the current directory
+        cell = sheet.createRow(1).createCell((short) 0);
+        cell.setCellValue("File Link");
+        link = createHelper.createHyperlink(Hyperlink.LINK_FILE);
+        link.setAddress("hyperinks-beta4-dump.txt");
+        cell.setHyperlink(link);
+
+        //e-mail link
+        cell = sheet.createRow(2).createCell((short) 0);
+        cell.setCellValue("Email Link");
+        link = createHelper.createHyperlink(Hyperlink.LINK_EMAIL);
+        //note, if subject contains white spaces, make sure they are url-encoded
+        link.setAddress("mailto:poi@apache.org?subject=Hyperlinks");
+        cell.setHyperlink(link);
+
+        //link to a place in this workbook
+
+        //create a target sheet and cell
+        Sheet sheet2 = wb.createSheet("Target Sheet");
+        sheet2.createRow(0).createCell((short) 0).setCellValue("Target Cell");
+
+        cell = sheet.createRow(3).createCell((short) 0);
+        cell.setCellValue("Worksheet Link");
+        link = createHelper.createHyperlink(Hyperlink.LINK_DOCUMENT);
+        link.setAddress("'Target Sheet'!A1");
+        cell.setHyperlink(link);
+
+        wb = getTestDataProvider().writeOutAndReadBack(wb);
+
+        sheet = wb.getSheetAt(0);
+        link = sheet.getRow(0).getCell(0).getHyperlink();
+
+        assertEquals("http://poi.apache.org/", link.getAddress());
+        link = sheet.getRow(1).getCell(0).getHyperlink();
+        assertEquals("hyperinks-beta4-dump.txt", link.getAddress());
+        link = sheet.getRow(2).getCell(0).getHyperlink();
+        assertEquals("mailto:poi@apache.org?subject=Hyperlinks", link.getAddress());
+        link = sheet.getRow(3).getCell(0).getHyperlink();
+        assertEquals("'Target Sheet'!A1", link.getAddress());
+	}
+}
\ No newline at end of file

Propchange: poi/trunk/src/testcases/org/apache/poi/ss/usermodel/BaseTestHyperlink.java
------------------------------------------------------------------------------
    svn:executable = *



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


Mime
View raw message