Browse Source

add LocalDateTime variants for various public Date based methods

git-svn-id: https://svn.code.sf.net/p/jackcess/code/jackcess/branches/jdk8@1241 f203690c-595d-4dc9-a70b-905162fa7fd2
tags/jackcess-3.0.0
James Ahlborn 5 years ago
parent
commit
c1aa151cd4

+ 3
- 1
src/main/java/com/healthmarketscience/jackcess/DateTimeType.java View File

@@ -17,7 +17,9 @@ limitations under the License.
package com.healthmarketscience.jackcess;

/**
* Enum for selecting how a Database returns date/time types.
* Enum for selecting how a Database returns date/time types. Prefer using
* {@link DateTimeType#LOCAL_DATE_TIME} as using Date is being phased out and
* will eventually be removed.
*
* @author James Ahlborn
*/

+ 9
- 1
src/main/java/com/healthmarketscience/jackcess/Row.java View File

@@ -91,12 +91,20 @@ public interface Row extends Map<String,Object>
/**
* Convenience method which gets the value for the row with the given name,
* casting it to a Date (DataType SHORT_DATE_TIME).
* @deprecated this is only valid for Database instances configured for the
* legacy {@link DateTimeType#DATE}. Prefer using
* {@link DateTimeType#LOCAL_DATE_TIME} and the corresponding
* {@link #getLocalDateTime} method. Using Date is being phased
* out and will eventually be removed.
*/
@Deprecated
public Date getDate(String name);

/**
* Convenience method which gets the value for the row with the given name,
* casting it to a LocalDateTime (DataType SHORT_DATE_TIME).
* casting it to a LocalDateTime (DataType SHORT_DATE_TIME). This method
* will only work for Database instances configured for
* {@link DateTimeType#LOCAL_DATE_TIME}.
*/
public LocalDateTime getLocalDateTime(String name);


+ 22
- 6
src/main/java/com/healthmarketscience/jackcess/complex/Attachment.java View File

@@ -17,14 +17,16 @@ limitations under the License.
package com.healthmarketscience.jackcess.complex;

import java.io.IOException;
import java.time.LocalDateTime;
import java.util.Date;
import com.healthmarketscience.jackcess.DateTimeType;

/**
* Complex value corresponding to an attachment.
*
* @author James Ahlborn
*/
public interface Attachment extends ComplexValue
public interface Attachment extends ComplexValue
{
public byte[] getFileData() throws IOException;

@@ -37,20 +39,34 @@ public interface Attachment extends ComplexValue
public String getFileName();

public void setFileName(String fileName);
public String getFileUrl();

public void setFileUrl(String fileUrl);
public String getFileType();

public void setFileType(String fileType);

/**
* @deprecated see {@link DateTimeType} for details
*/
@Deprecated
public Date getFileTimeStamp();

/**
* @deprecated see {@link DateTimeType} for details
*/
@Deprecated
public void setFileTimeStamp(Date fileTimeStamp);

public LocalDateTime getFileLocalTimeStamp();

public void setFileLocalTimeStamp(LocalDateTime fileTimeStamp);

public Object getFileTimeStampObject();

public Integer getFileFlags();

public void setFileFlags(Integer fileFlags);
public void setFileFlags(Integer fileFlags);
}

+ 37
- 9
src/main/java/com/healthmarketscience/jackcess/complex/ComplexValueForeignKey.java View File

@@ -18,10 +18,13 @@ package com.healthmarketscience.jackcess.complex;

import java.io.IOException;
import java.io.ObjectStreamException;
import java.time.LocalDateTime;
import java.util.Date;
import java.util.List;
import java.util.Map;

import com.healthmarketscience.jackcess.Column;
import com.healthmarketscience.jackcess.DateTimeType;


/**
@@ -40,33 +43,33 @@ import com.healthmarketscience.jackcess.Column;
*/
public abstract class ComplexValueForeignKey extends Number
{
private static final long serialVersionUID = 20130319L;
private static final long serialVersionUID = 20130319L;

@Override
public byte byteValue() {
return (byte)get();
}
@Override
public short shortValue() {
return (short)get();
}
@Override
public int intValue() {
return get();
}
@Override
public long longValue() {
return get();
}
@Override
public float floatValue() {
return get();
}
@Override
public double doubleValue() {
return get();
@@ -78,12 +81,12 @@ public abstract class ComplexValueForeignKey extends Number
// of jackcess)
return Integer.valueOf(get());
}
@Override
public int hashCode() {
return get();
}
@Override
public boolean equals(Object o) {
return ((this == o) ||
@@ -94,7 +97,7 @@ public abstract class ComplexValueForeignKey extends Number
@Override
public String toString() {
return String.valueOf(get());
}
}

public abstract int get();

@@ -122,25 +125,50 @@ public abstract class ComplexValueForeignKey extends Number
public abstract Version addVersion(String value)
throws IOException;

/**
* @deprecated see {@link DateTimeType} for details
*/
@Deprecated
public abstract Version addVersion(String value, Date modifiedDate)
throws IOException;

public abstract Version addVersion(String value, LocalDateTime modifiedDate)
throws IOException;

public abstract Attachment addAttachment(byte[] data)
throws IOException;

/**
* @deprecated see {@link DateTimeType} for details
*/
@Deprecated
public abstract Attachment addAttachment(
String url, String name, String type, byte[] data,
Date timeStamp, Integer flags)
throws IOException;

public abstract Attachment addAttachment(
String url, String name, String type, byte[] data,
LocalDateTime timeStamp, Integer flags)
throws IOException;

public abstract Attachment addEncodedAttachment(byte[] encodedData)
throws IOException;

/**
* @deprecated see {@link DateTimeType} for details
*/
@Deprecated
public abstract Attachment addEncodedAttachment(
String url, String name, String type, byte[] encodedData,
Date timeStamp, Integer flags)
throws IOException;

public abstract Attachment addEncodedAttachment(
String url, String name, String type, byte[] encodedData,
LocalDateTime timeStamp, Integer flags)
throws IOException;

public abstract Attachment updateAttachment(Attachment attachment)
throws IOException;


+ 10
- 0
src/main/java/com/healthmarketscience/jackcess/complex/Version.java View File

@@ -16,7 +16,9 @@ limitations under the License.

package com.healthmarketscience.jackcess.complex;

import java.time.LocalDateTime;
import java.util.Date;
import com.healthmarketscience.jackcess.DateTimeType;

/**
* Complex value corresponding to a version of a memo column.
@@ -27,5 +29,13 @@ public interface Version extends ComplexValue, Comparable<Version>
{
public String getValue();

/**
* @deprecated see {@link DateTimeType} for details
*/
@Deprecated
public Date getModifiedDate();

public LocalDateTime getModifiedLocalDate();

public Object getModifiedDateObject();
}

+ 1
- 0
src/main/java/com/healthmarketscience/jackcess/impl/RowImpl.java View File

@@ -91,6 +91,7 @@ public class RowImpl extends LinkedHashMap<String,Object> implements Row
return (Double)get(name);
}

@SuppressWarnings("deprecation")
public Date getDate(String name) {
return (Date)get(name);
}

+ 24
- 10
src/main/java/com/healthmarketscience/jackcess/impl/complex/AttachmentColumnInfoImpl.java View File

@@ -22,6 +22,7 @@ import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.nio.ByteBuffer;
import java.time.LocalDateTime;
import java.util.Arrays;
import java.util.Date;
import java.util.HashSet;
@@ -166,7 +167,7 @@ public class AttachmentColumnInfoImpl extends ComplexColumnInfoImpl<Attachment>
String name = (String)getFileNameColumn().getRowValue(rawValue);
String type = (String)getFileTypeColumn().getRowValue(rawValue);
Integer flags = (Integer)getFileFlagsColumn().getRowValue(rawValue);
Date ts = (Date)getFileTimeStampColumn().getRowValue(rawValue);
Object ts = getFileTimeStampColumn().getRowValue(rawValue);
byte[] data = (byte[])getFileDataColumn().getRowValue(rawValue);

return new AttachmentImpl(id, complexValueFk, url, name, type, null,
@@ -182,7 +183,7 @@ public class AttachmentColumnInfoImpl extends ComplexColumnInfoImpl<Attachment>
getFileNameColumn().setRowValue(row, attachment.getFileName());
getFileTypeColumn().setRowValue(row, attachment.getFileType());
getFileFlagsColumn().setRowValue(row, attachment.getFileFlags());
getFileTimeStampColumn().setRowValue(row, attachment.getFileTimeStamp());
getFileTimeStampColumn().setRowValue(row, attachment.getFileTimeStampObject());
getFileDataColumn().setRowValue(row, attachment.getEncodedFileData());
return row;
}
@@ -198,7 +199,7 @@ public class AttachmentColumnInfoImpl extends ComplexColumnInfoImpl<Attachment>

public static Attachment newAttachment(
String url, String name, String type, byte[] data,
Date timeStamp, Integer flags)
Object timeStamp, Integer flags)
{
return newAttachment(INVALID_FK, url, name, type, data,
timeStamp, flags);
@@ -206,7 +207,7 @@ public class AttachmentColumnInfoImpl extends ComplexColumnInfoImpl<Attachment>

public static Attachment newAttachment(
ComplexValueForeignKey complexValueFk, String url, String name,
String type, byte[] data, Date timeStamp, Integer flags)
String type, byte[] data, Object timeStamp, Integer flags)
{
return new AttachmentImpl(INVALID_ID, complexValueFk, url, name, type,
data, timeStamp, flags, null);
@@ -224,7 +225,7 @@ public class AttachmentColumnInfoImpl extends ComplexColumnInfoImpl<Attachment>

public static Attachment newEncodedAttachment(
String url, String name, String type, byte[] encodedData,
Date timeStamp, Integer flags)
Object timeStamp, Integer flags)
{
return newEncodedAttachment(INVALID_FK, url, name, type,
encodedData, timeStamp, flags);
@@ -232,13 +233,14 @@ public class AttachmentColumnInfoImpl extends ComplexColumnInfoImpl<Attachment>

public static Attachment newEncodedAttachment(
ComplexValueForeignKey complexValueFk, String url, String name,
String type, byte[] encodedData, Date timeStamp, Integer flags)
String type, byte[] encodedData, Object timeStamp, Integer flags)
{
return new AttachmentImpl(INVALID_ID, complexValueFk, url, name, type,
null, timeStamp, flags, encodedData);
}


@SuppressWarnings("deprecation")
private static class AttachmentImpl extends ComplexValueImpl
implements Attachment
{
@@ -246,13 +248,13 @@ public class AttachmentColumnInfoImpl extends ComplexColumnInfoImpl<Attachment>
private String _name;
private String _type;
private byte[] _data;
private Date _timeStamp;
private Object _timeStamp;
private Integer _flags;
private byte[] _encodedData;

private AttachmentImpl(Id id, ComplexValueForeignKey complexValueFk,
String url, String name, String type, byte[] data,
Date timeStamp, Integer flags, byte[] encodedData)
Object timeStamp, Integer flags, byte[] encodedData)
{
super(id, complexValueFk);
_url = url;
@@ -313,13 +315,25 @@ public class AttachmentColumnInfoImpl extends ComplexColumnInfoImpl<Attachment>
}

public Date getFileTimeStamp() {
return _timeStamp;
return (Date)_timeStamp;
}

public void setFileTimeStamp(Date fileTimeStamp) {
_timeStamp = fileTimeStamp;
}

public LocalDateTime getFileLocalTimeStamp() {
return (LocalDateTime)_timeStamp;
}

public void setFileLocalTimeStamp(LocalDateTime fileTimeStamp) {
_timeStamp = fileTimeStamp;
}

public Object getFileTimeStampObject() {
return _timeStamp;
}

public Integer getFileFlags() {
return _flags;
}
@@ -348,7 +362,7 @@ public class AttachmentColumnInfoImpl extends ComplexColumnInfoImpl<Attachment>

return "Attachment(" + getComplexValueForeignKey() + "," + getId() +
") " + getFileUrl() + ", " + getFileName() + ", " + getFileType()
+ ", " + getFileTimeStamp() + ", " + getFileFlags() + ", " +
+ ", " + getFileTimeStampObject() + ", " + getFileFlags() + ", " +
dataStr;
}


+ 90
- 33
src/main/java/com/healthmarketscience/jackcess/impl/complex/ComplexValueForeignKeyImpl.java View File

@@ -17,11 +17,14 @@ limitations under the License.
package com.healthmarketscience.jackcess.impl.complex;

import java.io.IOException;
import java.time.LocalDateTime;
import java.util.Date;
import java.util.List;
import java.util.Map;

import com.healthmarketscience.jackcess.Column;
import com.healthmarketscience.jackcess.Database;
import com.healthmarketscience.jackcess.DateTimeType;
import com.healthmarketscience.jackcess.Row;
import com.healthmarketscience.jackcess.complex.Attachment;
import com.healthmarketscience.jackcess.complex.AttachmentColumnInfo;
@@ -50,14 +53,15 @@ import com.healthmarketscience.jackcess.complex.VersionHistoryColumnInfo;
*
* @author James Ahlborn
*/
@SuppressWarnings("deprecation")
public class ComplexValueForeignKeyImpl extends ComplexValueForeignKey
{
private static final long serialVersionUID = 20110805L;
private static final long serialVersionUID = 20110805L;
private transient final Column _column;
private final int _value;
private transient List<? extends ComplexValue> _values;
public ComplexValueForeignKeyImpl(Column column, int value) {
_column = column;
_value = value;
@@ -72,12 +76,12 @@ public class ComplexValueForeignKeyImpl extends ComplexValueForeignKey
public Column getColumn() {
return _column;
}
@Override
public ComplexDataType getComplexType() {
return getComplexInfo().getType();
}
protected ComplexColumnInfo<? extends ComplexValue> getComplexInfo() {
return _column.getComplexInfo();
}
@@ -85,7 +89,7 @@ public class ComplexValueForeignKeyImpl extends ComplexValueForeignKey
protected VersionHistoryColumnInfo getVersionInfo() {
return (VersionHistoryColumnInfo)getComplexInfo();
}
protected AttachmentColumnInfo getAttachmentInfo() {
return (AttachmentColumnInfo)getComplexInfo();
}
@@ -93,27 +97,27 @@ public class ComplexValueForeignKeyImpl extends ComplexValueForeignKey
protected MultiValueColumnInfo getMultiValueInfo() {
return (MultiValueColumnInfo)getComplexInfo();
}
protected UnsupportedColumnInfo getUnsupportedInfo() {
return (UnsupportedColumnInfo)getComplexInfo();
}
@Override
public int countValues() throws IOException {
return getComplexInfo().countValues(get());
}
public List<Row> getRawValues() throws IOException {
return getComplexInfo().getRawValues(get());
}
}
@Override
public List<? extends ComplexValue> getValues() throws IOException {
if(_values == null) {
_values = getComplexInfo().getValues(this);
}
return _values;
}
}

@Override
@SuppressWarnings("unchecked")
@@ -123,7 +127,7 @@ public class ComplexValueForeignKeyImpl extends ComplexValueForeignKey
}
return (List<Version>)getValues();
}
@Override
@SuppressWarnings("unchecked")
public List<Attachment> getAttachments() throws IOException {
@@ -132,7 +136,7 @@ public class ComplexValueForeignKeyImpl extends ComplexValueForeignKey
}
return (List<Attachment>)getValues();
}
@Override
@SuppressWarnings("unchecked")
public List<SingleValue> getMultiValues() throws IOException {
@@ -141,7 +145,7 @@ public class ComplexValueForeignKeyImpl extends ComplexValueForeignKey
}
return (List<SingleValue>)getValues();
}
@Override
@SuppressWarnings("unchecked")
public List<UnsupportedValue> getUnsupportedValues() throws IOException {
@@ -150,20 +154,29 @@ public class ComplexValueForeignKeyImpl extends ComplexValueForeignKey
}
return (List<UnsupportedValue>)getValues();
}
@Override
public void reset() {
// discard any cached values
_values = null;
}
@Override
public Version addVersion(String value) throws IOException {
return addVersion(value, new Date());
return addVersionImpl(value, now());
}
@Override
public Version addVersion(String value, Date modifiedDate) throws IOException {
return addVersionImpl(value, modifiedDate);
}

@Override
public Version addVersion(String value, LocalDateTime modifiedDate) throws IOException {
return addVersionImpl(value, modifiedDate);
}

private Version addVersionImpl(String value, Object modifiedDate) throws IOException {
reset();
Version v = VersionHistoryColumnInfoImpl.newVersion(this, value, modifiedDate);
getVersionInfo().addValue(v);
@@ -172,14 +185,31 @@ public class ComplexValueForeignKeyImpl extends ComplexValueForeignKey

@Override
public Attachment addAttachment(byte[] data) throws IOException {
return addAttachment(null, null, null, data, null, null);
return addAttachmentImpl(null, null, null, data, null, null);
}
@Override
public Attachment addAttachment(
String url, String name, String type, byte[] data,
Date timeStamp, Integer flags)
throws IOException
{
return addAttachmentImpl(url, name, type, data, timeStamp, flags);
}

@Override
public Attachment addAttachment(
String url, String name, String type, byte[] data,
LocalDateTime timeStamp, Integer flags)
throws IOException
{
return addAttachmentImpl(url, name, type, data, timeStamp, flags);
}

private Attachment addAttachmentImpl(
String url, String name, String type, byte[] data,
Object timeStamp, Integer flags)
throws IOException
{
reset();
Attachment a = AttachmentColumnInfoImpl.newAttachment(
@@ -192,14 +222,33 @@ public class ComplexValueForeignKeyImpl extends ComplexValueForeignKey
public Attachment addEncodedAttachment(byte[] encodedData)
throws IOException
{
return addEncodedAttachment(null, null, null, encodedData, null, null);
return addEncodedAttachmentImpl(null, null, null, encodedData, null, null);
}
@Override
public Attachment addEncodedAttachment(
String url, String name, String type, byte[] encodedData,
Date timeStamp, Integer flags)
throws IOException
{
return addEncodedAttachmentImpl(url, name, type, encodedData, timeStamp,
flags);
}

@Override
public Attachment addEncodedAttachment(
String url, String name, String type, byte[] encodedData,
LocalDateTime timeStamp, Integer flags)
throws IOException
{
return addEncodedAttachmentImpl(url, name, type, encodedData, timeStamp,
flags);
}

private Attachment addEncodedAttachmentImpl(
String url, String name, String type, byte[] encodedData,
Object timeStamp, Integer flags)
throws IOException
{
reset();
Attachment a = AttachmentColumnInfoImpl.newEncodedAttachment(
@@ -207,21 +256,21 @@ public class ComplexValueForeignKeyImpl extends ComplexValueForeignKey
getAttachmentInfo().addValue(a);
return a;
}
@Override
public Attachment updateAttachment(Attachment attachment) throws IOException {
reset();
getAttachmentInfo().updateValue(attachment);
return attachment;
}
@Override
public Attachment deleteAttachment(Attachment attachment) throws IOException {
reset();
getAttachmentInfo().deleteValue(attachment);
return attachment;
}
@Override
public SingleValue addMultiValue(Object value) throws IOException {
reset();
@@ -229,21 +278,21 @@ public class ComplexValueForeignKeyImpl extends ComplexValueForeignKey
getMultiValueInfo().addValue(v);
return v;
}
@Override
public SingleValue updateMultiValue(SingleValue value) throws IOException {
reset();
getMultiValueInfo().updateValue(value);
return value;
}
@Override
public SingleValue deleteMultiValue(SingleValue value) throws IOException {
reset();
getMultiValueInfo().deleteValue(value);
return value;
}
@Override
public UnsupportedValue addUnsupportedValue(Map<String,?> values)
throws IOException
@@ -253,7 +302,7 @@ public class ComplexValueForeignKeyImpl extends ComplexValueForeignKey
getUnsupportedInfo().addValue(v);
return v;
}
@Override
public UnsupportedValue updateUnsupportedValue(UnsupportedValue value)
throws IOException
@@ -262,7 +311,7 @@ public class ComplexValueForeignKeyImpl extends ComplexValueForeignKey
getUnsupportedInfo().updateValue(value);
return value;
}
@Override
public UnsupportedValue deleteUnsupportedValue(UnsupportedValue value)
throws IOException
@@ -271,16 +320,24 @@ public class ComplexValueForeignKeyImpl extends ComplexValueForeignKey
getUnsupportedInfo().deleteValue(value);
return value;
}
@Override
public void deleteAllValues() throws IOException {
reset();
getComplexInfo().deleteAllValues(this);
}
@Override
public boolean equals(Object o) {
return(super.equals(o) &&
(_column == ((ComplexValueForeignKeyImpl)o)._column));
}

private Object now() {
Database db = getColumn().getDatabase();
if(db.getDateTimeType() == DateTimeType.DATE) {
return new Date();
}
return LocalDateTime.now(db.getZoneId());
}
}

+ 43
- 25
src/main/java/com/healthmarketscience/jackcess/impl/complex/VersionHistoryColumnInfoImpl.java View File

@@ -17,6 +17,7 @@ limitations under the License.
package com.healthmarketscience.jackcess.impl.complex;

import java.io.IOException;
import java.time.LocalDateTime;
import java.util.Collections;
import java.util.Date;
import java.util.List;
@@ -42,14 +43,14 @@ import com.healthmarketscience.jackcess.impl.ColumnImpl;
*
* @author James Ahlborn
*/
public class VersionHistoryColumnInfoImpl extends ComplexColumnInfoImpl<Version>
public class VersionHistoryColumnInfoImpl extends ComplexColumnInfoImpl<Version>
implements VersionHistoryColumnInfo
{
private final Column _valueCol;
private final Column _modifiedCol;
public VersionHistoryColumnInfoImpl(Column column, int complexId,
Table typeObjTable, Table flatTable)
Table typeObjTable, Table flatTable)
throws IOException
{
super(column, complexId, typeObjTable, flatTable);
@@ -83,7 +84,7 @@ public class VersionHistoryColumnInfoImpl extends ComplexColumnInfoImpl<Version>
getValueColumn().getName());
((ColumnImpl)versionedCol).setVersionHistoryColumn((ColumnImpl)getColumn());
}
public Column getValueColumn() {
return _valueCol;
}
@@ -91,7 +92,7 @@ public class VersionHistoryColumnInfoImpl extends ComplexColumnInfoImpl<Version>
public Column getModifiedDateColumn() {
return _modifiedCol;
}
@Override
public ComplexDataType getType() {
return ComplexDataType.VERSION_HISTORY;
@@ -124,7 +125,7 @@ public class VersionHistoryColumnInfoImpl extends ComplexColumnInfoImpl<Version>

// order versions newest to oldest
Collections.sort(versions);
return versions;
}

@@ -133,7 +134,7 @@ public class VersionHistoryColumnInfoImpl extends ComplexColumnInfoImpl<Version>
Row rawValue) {
ComplexValue.Id id = getValueId(rawValue);
String value = (String)getValueColumn().getRowValue(rawValue);
Date modifiedDate = (Date)getModifiedDateColumn().getRowValue(rawValue);
Object modifiedDate = getModifiedDateColumn().getRowValue(rawValue);

return new VersionImpl(id, complexValueFk, value, modifiedDate);
}
@@ -142,47 +143,55 @@ public class VersionHistoryColumnInfoImpl extends ComplexColumnInfoImpl<Version>
protected Object[] asRow(Object[] row, Version version) throws IOException {
super.asRow(row, version);
getValueColumn().setRowValue(row, version.getValue());
getModifiedDateColumn().setRowValue(row, version.getModifiedDate());
getModifiedDateColumn().setRowValue(row, version.getModifiedDateObject());
return row;
}
public static Version newVersion(String value, Date modifiedDate) {
public static Version newVersion(String value, Object modifiedDate) {
return newVersion(INVALID_FK, value, modifiedDate);
}
public static Version newVersion(ComplexValueForeignKey complexValueFk,
String value, Date modifiedDate) {
String value, Object modifiedDate) {
return new VersionImpl(INVALID_ID, complexValueFk, value, modifiedDate);
}

@SuppressWarnings("deprecation")
private static class VersionImpl extends ComplexValueImpl implements Version
{
private final String _value;
private final Date _modifiedDate;
private final Object _modifiedDate;

private VersionImpl(Id id, ComplexValueForeignKey complexValueFk,
String value, Date modifiedDate)
String value, Object modifiedDate)
{
super(id, complexValueFk);
_value = value;
_modifiedDate = modifiedDate;
}
public String getValue() {
return _value;
}

public Date getModifiedDate() {
return (Date)_modifiedDate;
}

public LocalDateTime getModifiedLocalDate() {
return (LocalDateTime)_modifiedDate;
}

public Object getModifiedDateObject() {
return _modifiedDate;
}
}
public int compareTo(Version o) {
Date d1 = getModifiedDate();
Date d2 = o.getModifiedDate();
Object d1 = getModifiedDateObject();
Object d2 = o.getModifiedDateObject();

// sort by descending date (newest/greatest first)
int cmp = d2.compareTo(d1);
int cmp = compare(d2, d1);
if(cmp != 0) {
return cmp;
}
@@ -200,11 +209,20 @@ public class VersionHistoryColumnInfoImpl extends ComplexColumnInfoImpl<Version>
((id1 < id2) ? 1 : 0));
}

@SuppressWarnings("unchecked")
private static <C extends Comparable<C>> int compare(Object o1, Object o2) {
// each date/time type (Date, LocalDateTime) is mutually Comparable, so
// just silence the compiler
C c1 = (C)o1;
C c2 = (C)o2;
return c1.compareTo(c2);
}

public void update() throws IOException {
throw new UnsupportedOperationException(
"This column does not support value updates");
}
public void delete() throws IOException {
throw new UnsupportedOperationException(
"This column does not support value deletes");
@@ -214,8 +232,8 @@ public class VersionHistoryColumnInfoImpl extends ComplexColumnInfoImpl<Version>
public String toString()
{
return "Version(" + getComplexValueForeignKey() + "," + getId() + ") " +
getModifiedDate() + ", " + getValue();
}
getModifiedDateObject() + ", " + getValue();
}
}
}

+ 37
- 36
src/test/java/com/healthmarketscience/jackcess/ComplexColumnTest.java View File

@@ -39,7 +39,8 @@ import static com.healthmarketscience.jackcess.impl.JetFormatTest.*;
*
* @author James Ahlborn
*/
public class ComplexColumnTest extends TestCase
@SuppressWarnings("deprecation")
public class ComplexColumnTest extends TestCase
{

public ComplexColumnTest(String name) {
@@ -66,7 +67,7 @@ public class ComplexColumnTest extends TestCase
(ComplexValueForeignKey)verCol.getRowValue(row);

String curValue = (String)col.getRowValue(row);
if(rowId.equals("row1")) {
checkVersions(1, complexValueFk, curValue);
} else if(rowId.equals("row2")) {
@@ -94,7 +95,7 @@ public class ComplexColumnTest extends TestCase
Date upTime = new Date();
row8ValFk.addVersion("row8-memo", upTime);
checkVersions(row8ValFk.get(), row8ValFk, "row8-memo",
"row8-memo", upTime);
"row8-memo", upTime);

Cursor cursor = CursorBuilder.createCursor(t1);
assertTrue(cursor.findFirstRow(t1.getColumn("id"), "row3"));
@@ -120,7 +121,7 @@ public class ComplexColumnTest extends TestCase
"row3-memo-again", new Date(1315876965382L),
"row3-memo-revised", new Date(1315876953077L),
"row3-memo", new Date(1315876879126L));
try {
v.delete();
fail("UnsupportedOperationException should have been thrown");
@@ -133,7 +134,7 @@ public class ComplexColumnTest extends TestCase
"row3-memo-again", new Date(1315876965382L),
"row3-memo-revised", new Date(1315876953077L),
"row3-memo", new Date(1315876879126L));
try {
v.getComplexValueForeignKey().deleteAllValues();
fail("UnsupportedOperationException should have been thrown");
@@ -146,7 +147,7 @@ public class ComplexColumnTest extends TestCase
"row3-memo-again", new Date(1315876965382L),
"row3-memo-revised", new Date(1315876953077L),
"row3-memo", new Date(1315876879126L));
db.close();
}
}
@@ -154,7 +155,7 @@ public class ComplexColumnTest extends TestCase
public void testAttachments() throws Exception
{
for(final TestDB testDB : TestDB.getSupportedForBasename(Basename.COMPLEX)) {
Database db = openCopy(testDB);

Table t1 = db.getTable("Table1");
@@ -187,12 +188,12 @@ public class ComplexColumnTest extends TestCase
ComplexValueForeignKey row8ValFk = (ComplexValueForeignKey)
col.getRowValue(row8);
row8ValFk.addAttachment(null, "test_data.txt", "txt",
getFileBytes("test_data.txt"), null, null);
getFileBytes("test_data.txt"), (Date)null, null);
checkAttachments(row8ValFk.get(), row8ValFk, "test_data.txt");
row8ValFk.addEncodedAttachment(null, "test_data2.txt", "txt",
getEncodedFileBytes("test_data2.txt"), null,
null);
checkAttachments(row8ValFk.get(), row8ValFk, "test_data.txt",
getEncodedFileBytes("test_data2.txt"),
(Date)null, null);
checkAttachments(row8ValFk.get(), row8ValFk, "test_data.txt",
"test_data2.txt");

Cursor cursor = CursorBuilder.createCursor(t1);
@@ -200,8 +201,8 @@ public class ComplexColumnTest extends TestCase
ComplexValueForeignKey row4ValFk = (ComplexValueForeignKey)
cursor.getCurrentRowValue(col);
Attachment a = row4ValFk.addAttachment(null, "test_data.txt", "txt",
getFileBytes("test_data.txt"), null,
null);
getFileBytes("test_data.txt"),
(Date)null, null);
checkAttachments(4, row4ValFk, "test_data2.txt", "test_data.txt");

a.setFileType("zip");
@@ -230,8 +231,8 @@ public class ComplexColumnTest extends TestCase
ComplexValueForeignKey row2ValFk = (ComplexValueForeignKey)
cursor.getCurrentRowValue(col);
row2ValFk.deleteAllValues();
checkAttachments(2, row2ValFk);
checkAttachments(2, row2ValFk);
db.close();
}
}
@@ -239,7 +240,7 @@ public class ComplexColumnTest extends TestCase
public void testMultiValues() throws Exception
{
for(final TestDB testDB : TestDB.getSupportedForBasename(Basename.COMPLEX)) {
Database db = openCopy(testDB);

Table t1 = db.getTable("Table1");
@@ -264,7 +265,7 @@ public class ComplexColumnTest extends TestCase
} else {
assertTrue(false);
}
}
}

Object[] row8 = {"row8", Column.AUTO_NUMBER, "some-data", "row8-memo",
Column.AUTO_NUMBER, Column.AUTO_NUMBER};
@@ -307,17 +308,17 @@ public class ComplexColumnTest extends TestCase
PropertyMap props = col.getProperties();
assertEquals(Boolean.TRUE, props.getValue(PropertyMap.ALLOW_MULTI_VALUE_PROP));
assertEquals("Value List", props.getValue(PropertyMap.ROW_SOURCE_TYPE_PROP));
assertEquals("\"value1\";\"value2\";\"value3\";\"value4\"",
assertEquals("\"value1\";\"value2\";\"value3\";\"value4\"",
props.getValue(PropertyMap.ROW_SOURCE_PROP));
db.close();
}
}
public void testUnsupported() throws Exception
{
for(final TestDB testDB : TestDB.getSupportedForBasename(Basename.UNSUPPORTED)) {
Database db = openCopy(testDB);

Table t1 = db.getTable("Test");
@@ -331,7 +332,7 @@ public class ComplexColumnTest extends TestCase
(ComplexValueForeignKey)col.getRowValue(row);

if(rowId.equals(1)) {
checkUnsupportedValues(1, complexValueFk,
checkUnsupportedValues(1, complexValueFk,
"RawData[(5) FF FE 62 61 7A]");
} else if(rowId.equals(2)) {
checkUnsupportedValues(2, complexValueFk, "RawData[(5) FF FE 66 6F 6F]", "RawData[(5) FF FE 62 61 7A]");
@@ -340,12 +341,12 @@ public class ComplexColumnTest extends TestCase
} else {
assertTrue(false);
}
}
}
db.close();
}
}
private static void checkVersions(
int cValId, ComplexValueForeignKey complexValueFk,
String curValue, Object... versionInfos)
@@ -376,7 +377,7 @@ public class ComplexColumnTest extends TestCase
throws Exception
{
assertEquals(cValId, complexValueFk.get());
List<Attachment> attachments = complexValueFk.getAttachments();
if(fileNames.length == 0) {
assertTrue(attachments.isEmpty());
@@ -388,12 +389,12 @@ public class ComplexColumnTest extends TestCase
assertEquals(fname, a.getFileName());
assertEquals("txt", a.getFileType());
assertTrue(Arrays.equals(getFileBytes(fname), a.getFileData()));
assertTrue(Arrays.equals(getEncodedFileBytes(fname),
assertTrue(Arrays.equals(getEncodedFileBytes(fname),
a.getEncodedFileData()));
}
}
}
private static void checkMultiValues(
int cValId, ComplexValueForeignKey complexValueFk,
Object... expectedValues)
@@ -411,7 +412,7 @@ public class ComplexColumnTest extends TestCase
SingleValue v = values.get(i);
assertEquals(value, v.get());
}
}
}
}

private static void checkUnsupportedValues(
@@ -434,7 +435,7 @@ public class ComplexColumnTest extends TestCase
assertTrue(ColumnImpl.isRawData(rv));
assertEquals(value, rv.toString());
}
}
}
}

private static byte[] getFileBytes(String fname) throws Exception
@@ -447,7 +448,7 @@ public class ComplexColumnTest extends TestCase
}
throw new RuntimeException("unexpected bytes");
}
private static byte[] getEncodedFileBytes(String fname) throws Exception
{
if("test_data.txt".equals(fname)) {
@@ -458,9 +459,9 @@ public class ComplexColumnTest extends TestCase
}
throw new RuntimeException("unexpected bytes");
}
private static byte b(int i) { return (byte)i; }
private static byte[] getAsciiBytes(String str) {
try {
return str.getBytes("US-ASCII");
@@ -468,7 +469,7 @@ public class ComplexColumnTest extends TestCase
throw new RuntimeException(e);
}
}
private static final byte[] TEST_ENC_BYTES = new byte[] {
b(0x01),b(0x00),b(0x00),b(0x00),b(0x3A),b(0x00),b(0x00),b(0x00),b(0x78),b(0x5E),b(0x13),b(0x61),b(0x60),b(0x60),b(0x60),b(0x04),b(0x62),b(0x16),b(0x20),b(0x2E),b(0x61),b(0xA8),b(0x00),b(0x62),
b(0x20),b(0x9D),b(0x91),b(0x59),b(0xAC),b(0x00),b(0x44),b(0xC5),b(0xF9),b(0xB9),b(0xA9),b(0x0A),b(0x25),b(0xA9),b(0xC5),b(0x25),b(0x0A),b(0x29),b(0x89),b(0x25),b(0x89),b(0x0A),b(0x69),b(0xF9),
@@ -476,7 +477,7 @@ public class ComplexColumnTest extends TestCase
};

private static final byte[] TEST_BYTES = getAsciiBytes("this is some test data for attachment.");
private static final byte[] TEST2_ENC_BYTES = new byte[] {
b(0x01),b(0x00),b(0x00),b(0x00),b(0x3F),b(0x00),b(0x00),b(0x00),b(0x78),b(0x5E),b(0x13),b(0x61),b(0x60),b(0x60),b(0x60),b(0x04),b(0x62),b(0x16),b(0x20),b(0x2E),b(0x61),b(0xA8),b(0x00),b(0x62),
b(0x20),b(0x9D),b(0x91),b(0x59),b(0xAC),b(0x00),b(0x44),b(0xC5),b(0xF9),b(0xB9),b(0xA9),b(0x0A),b(0xB9),b(0xF9),b(0x45),b(0xA9),b(0x0A),b(0x25),b(0xA9),b(0xC5),b(0x25),b(0x0A),b(0x29),b(0x89),
@@ -484,5 +485,5 @@ public class ComplexColumnTest extends TestCase
};

private static final byte[] TEST2_BYTES = getAsciiBytes("this is some more test data for attachment.");
}

+ 1
- 0
src/test/java/com/healthmarketscience/jackcess/DatabaseTest.java View File

@@ -52,6 +52,7 @@ import static com.healthmarketscience.jackcess.TestUtil.*;
/**
* @author Tim McCune
*/
@SuppressWarnings("deprecation")
public class DatabaseTest extends TestCase
{
public DatabaseTest(String name) throws Exception {

+ 1
- 0
src/test/java/com/healthmarketscience/jackcess/TestUtil.java View File

@@ -53,6 +53,7 @@ import org.junit.Assert;
*
* @author James Ahlborn
*/
@SuppressWarnings("deprecation")
public class TestUtil
{
public static final TimeZone TEST_TZ =

Loading…
Cancel
Save