From c0d41579f0184cfc049cb69f1e4f6f46c1fac58a Mon Sep 17 00:00:00 2001 From: James Ahlborn Date: Thu, 8 Nov 2012 04:25:21 +0000 Subject: [PATCH] add support for hyperlink columns git-svn-id: https://svn.code.sf.net/p/jackcess/code/jackcess/trunk@653 f203690c-595d-4dc9-a70b-905162fa7fd2 --- src/changes/changes.xml | 5 ++ .../healthmarketscience/jackcess/Column.java | 51 +++++++++++++++++-- 2 files changed, 52 insertions(+), 4 deletions(-) diff --git a/src/changes/changes.xml b/src/changes/changes.xml index 6573d46..6e241d2 100644 --- a/src/changes/changes.xml +++ b/src/changes/changes.xml @@ -4,6 +4,11 @@ Tim McCune + + + Add info to the Column to support MEMO columns which are HYPERLINKS. + + Add some more functionality to Joiner to facilitate integrity diff --git a/src/java/com/healthmarketscience/jackcess/Column.java b/src/java/com/healthmarketscience/jackcess/Column.java index e5503bd..8e3033d 100644 --- a/src/java/com/healthmarketscience/jackcess/Column.java +++ b/src/java/com/healthmarketscience/jackcess/Column.java @@ -138,6 +138,12 @@ public class Column implements Comparable { */ public static final byte AUTO_NUMBER_GUID_FLAG_MASK = (byte)0x40; + /** + * mask for the hyperlink bit (on memo types) + * @usage _advanced_field_ + */ + public static final byte HYPERLINK_FLAG_MASK = (byte)0x80; + /** * mask for the unknown bit (possible "can be null"?) * @usage _advanced_field_ @@ -288,6 +294,11 @@ public class Column implements Comparable { _textInfo._compressedUnicode = ((buffer.get(offset + getFormat().OFFSET_COLUMN_COMPRESSED_UNICODE) & 1) == 1); + + if(_type == DataType.MEMO) { + // only memo fields can be hyperlinks + _textInfo._hyperlink = ((flags & HYPERLINK_FLAG_MASK) != 0); + } } setAutoNumberGenerator(); @@ -623,6 +634,23 @@ public class Column implements Comparable { modifyTextInfo(); _textInfo._versionHistoryCol = versionHistoryCol; } + + /** + * Returns whether or not this is a hyperlink column (only possible for + * columns of type MEMO). + * @usage _general_method_ + */ + public boolean isHyperlink() { + return _textInfo._hyperlink; + } + + /** + * @usage _general_method_ + */ + public void setHyperlink(boolean hyperlink) { + modifyTextInfo(); + _textInfo._hyperlink = hyperlink; + } /** * Returns extended functionality for "complex" columns. @@ -771,6 +799,13 @@ public class Column implements Comparable { "Only textual columns allow unicode compression (text/memo)"); } } + + if(isHyperlink()) { + if(getType() != DataType.MEMO) { + throw new IllegalArgumentException( + "Only memo columns can be hyperlinks"); + } + } } public Object setRowValue(Object[] rowArray, Object value) { @@ -1733,13 +1768,16 @@ public class Column implements Comparable { * Constructs a byte containing the flags for this column. */ private byte getColumnBitFlags() { - byte flags = Column.UNKNOWN_FLAG_MASK; + byte flags = UNKNOWN_FLAG_MASK; if(!isVariableLength()) { - flags |= Column.FIXED_LEN_FLAG_MASK; + flags |= FIXED_LEN_FLAG_MASK; } if(isAutoNumber()) { flags |= getAutoNumberGenerator().getColumnFlags(); } + if(isHyperlink()) { + flags |= HYPERLINK_FLAG_MASK; + } return flags; } @@ -1765,6 +1803,9 @@ public class Column implements Comparable { if(isAppendOnly()) { rtn.append("\n\tAppend only: " + isAppendOnly()); } + if(isHyperlink()) { + rtn.append("\n\tHyperlink: " + isHyperlink()); + } } if(_autoNumber) { rtn.append("\n\tLast AutoNumber: " + _autoNumberGenerator.getLast()); @@ -2018,8 +2059,7 @@ public class Column implements Comparable { // we specifically put the "long variable" values after the normal // variable length values so that we have a better chance of fitting it // all (because "long variable" values can go in separate pages) - short longVariableOffset = - Column.countNonLongVariableLength(columns); + short longVariableOffset = countNonLongVariableLength(columns); for (Column col : columns) { // record this for later use when writing indexes col.setColumnNumber(columnNumber); @@ -2398,5 +2438,8 @@ public class Column implements Comparable { /** complex column which tracks the version history for this "append only" column */ private Column _versionHistoryCol; + /** whether or not this is a hyperlink column (only possible for columns + of type MEMO) */ + private boolean _hyperlink; } } -- 2.39.5