123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309 |
- /* ====================================================================
- 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.hssf.usermodel;
-
- import org.apache.poi.common.usermodel.HyperlinkType;
- import org.apache.poi.hssf.record.HyperlinkRecord;
- import org.apache.poi.ss.usermodel.Hyperlink;
- import org.apache.poi.util.Internal;
-
- /**
- * Represents an Excel hyperlink.
- */
- public class HSSFHyperlink implements Hyperlink {
-
- /**
- * Low-level record object that stores the actual hyperlink data
- */
- final protected HyperlinkRecord record;
-
- /**
- * If we create a new hyperlink remember its type
- */
- final protected HyperlinkType link_type;
-
- /**
- * Construct a new hyperlink
- *
- * This method is internal to be used only by
- * {@link HSSFCreationHelper#createHyperlink(int)}.
- *
- * @param type the type of hyperlink to create
- * @deprecated POI 3.15 beta 3
- */
- @Internal(since="3.15 beta 3")
- protected HSSFHyperlink( int type )
- {
- this(HyperlinkType.forInt(type));
- }
-
- /**
- * Construct a new hyperlink
- *
- * This method is internal to be used only by
- * {@link HSSFCreationHelper#createHyperlink(HyperlinkType)}.
- *
- * @param type the type of hyperlink to create
- */
- @Internal(since="3.15 beta 3")
- protected HSSFHyperlink( HyperlinkType type )
- {
- this.link_type = type;
- record = new HyperlinkRecord();
- switch(type){
- case URL:
- case EMAIL:
- record.newUrlLink();
- break;
- case FILE:
- record.newFileLink();
- break;
- case DOCUMENT:
- record.newDocumentLink();
- break;
- default:
- throw new IllegalArgumentException("Invalid type: " + type);
- }
- }
-
- /**
- * Initialize the hyperlink by a <code>HyperlinkRecord</code> record
- *
- * @param record
- */
- protected HSSFHyperlink( HyperlinkRecord record )
- {
- this.record = record;
- link_type = getType(record);
- }
-
- private static HyperlinkType getType(HyperlinkRecord record) {
- HyperlinkType link_type;
- // Figure out the type
- if (record.isFileLink()) {
- link_type = HyperlinkType.FILE;
- } else if(record.isDocumentLink()) {
- link_type = HyperlinkType.DOCUMENT;
- } else {
- if(record.getAddress() != null &&
- record.getAddress().startsWith("mailto:")) {
- link_type = HyperlinkType.EMAIL;
- } else {
- link_type = HyperlinkType.URL;
- }
- }
- return link_type;
- }
-
- protected HSSFHyperlink(Hyperlink other) {
- if (other instanceof HSSFHyperlink) {
- HSSFHyperlink hlink = (HSSFHyperlink) other;
- record = hlink.record.clone();
- link_type = getType(record);
- }
- else {
- link_type = other.getTypeEnum();
- record = new HyperlinkRecord();
- setFirstRow(other.getFirstRow());
- setFirstColumn(other.getFirstColumn());
- setLastRow(other.getLastRow());
- setLastColumn(other.getLastColumn());
- }
- }
-
- /**
- * Return the row of the first cell that contains the hyperlink
- *
- * @return the 0-based row of the cell that contains the hyperlink
- */
- @Override
- public int getFirstRow(){
- return record.getFirstRow();
- }
-
- /**
- * Set the row of the first cell that contains the hyperlink
- *
- * @param row the 0-based row of the first cell that contains the hyperlink
- */
- @Override
- public void setFirstRow(int row){
- record.setFirstRow(row);
- }
-
- /**
- * Return the row of the last cell that contains the hyperlink
- *
- * @return the 0-based row of the last cell that contains the hyperlink
- */
- @Override
- public int getLastRow(){
- return record.getLastRow();
- }
-
- /**
- * Set the row of the last cell that contains the hyperlink
- *
- * @param row the 0-based row of the last cell that contains the hyperlink
- */
- @Override
- public void setLastRow(int row){
- record.setLastRow(row);
- }
-
- /**
- * Return the column of the first cell that contains the hyperlink
- *
- * @return the 0-based column of the first cell that contains the hyperlink
- */
- @Override
- public int getFirstColumn(){
- return record.getFirstColumn();
- }
-
- /**
- * Set the column of the first cell that contains the hyperlink
- *
- * @param col the 0-based column of the first cell that contains the hyperlink
- */
- @Override
- public void setFirstColumn(int col){
- record.setFirstColumn((short)col);
- }
-
- /**
- * Return the column of the last cell that contains the hyperlink
- *
- * @return the 0-based column of the last cell that contains the hyperlink
- */
- @Override
- public int getLastColumn(){
- return record.getLastColumn();
- }
-
- /**
- * Set the column of the last cell that contains the hyperlink
- *
- * @param col the 0-based column of the last cell that contains the hyperlink
- */
- @Override
- public void setLastColumn(int col){
- record.setLastColumn((short)col);
- }
-
- /**
- * Hyperlink address. Depending on the hyperlink type it can be URL, e-mail, path to a file, etc.
- *
- * @return the address of this hyperlink
- */
- @Override
- public String getAddress(){
- return record.getAddress();
- }
- public String getTextMark(){
- return record.getTextMark();
- }
-
- /**
- * Convenience method equivalent to {@link #setAddress(String)}
- *
- * @param textMark the place in worksheet this hyperlink refers 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 hyperlink points to, e.g. 'readme.txt'
- */
- public void setShortFilename(String shortFilename) {
- record.setShortFilename(shortFilename);
- }
-
- /**
- * 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
- */
- @Override
- public void setAddress(String address){
- record.setAddress(address);
- }
-
- /**
- * Return text label for this hyperlink
- *
- * @return text to display
- */
- @Override
- public String getLabel(){
- return record.getLabel();
- }
-
- /**
- * Sets text label for this hyperlink
- *
- * @param label text label for this hyperlink
- */
- @Override
- public void setLabel(String label){
- record.setLabel(label);
- }
-
- /**
- * Return the type of this hyperlink
- *
- * @return the type of this hyperlink
- * @see HyperlinkType#forInt
- * @deprecated POI 3.15. Use {@link #getTypeEnum()} instead.
- * getType will return a HyperlinkType enum in the future.
- */
- @Override
- public int getType() {
- return link_type.getCode();
- }
-
- /**
- * Return the type of this hyperlink
- *
- * @return the type of this hyperlink
- */
- @Override
- public HyperlinkType getTypeEnum() {
- return link_type;
- }
-
- /**
- * @return whether the objects have the same HyperlinkRecord
- */
- @Override
- public boolean equals(Object other) {
- if (this == other) return true;
- if (!(other instanceof HSSFHyperlink)) return false;
- HSSFHyperlink otherLink = (HSSFHyperlink) other;
- return record == otherLink.record;
- }
-
- @Override
- public int hashCode() {
- return record.hashCode();
- }
- }
|