package org.rr.jeborker.metadata; import java.util.ArrayList; import java.util.Date; import org.rr.commons.utils.DateConversionUtils; class EpubLibMetadataProperty<T> extends MetadataProperty { private T epubLibMetadataEntry; private Object value; EpubLibMetadataProperty(String name, Object value) { this(name, value, null); } EpubLibMetadataProperty(String name, Object value, T epubLibMetadataEntry) { super(name, value); this.epubLibMetadataEntry = epubLibMetadataEntry; this.value = value; } T getType() { return this.epubLibMetadataEntry; } Date getValueAsDate() { Date date; if(!this.getValues().isEmpty() && this.getValues().get(0) instanceof Date) { date = (Date) this.getValues().get(0); } else { date = DateConversionUtils.toDate(this.getValueAsString()); } return date; } @Override public boolean isEditable() { return true; } @Override public boolean isDeletable() { if(getName().equals("cover")) { return false; } else if(getName().equals(AEpubMetadataHandler.EPUB_METADATA_TYPES.IDENTIFIER.getName()) || getName().equals(AEpubMetadataHandler.EPUB_METADATA_TYPES.UUID.getName())) { //epub identifier is mandatory return false; } return true; } @Override public boolean isSingle() { if(getName().equals("cover")) { return true; } else if(getName().equals(AEpubMetadataHandler.EPUB_METADATA_TYPES.IDENTIFIER.getName()) || getName().equals(AEpubMetadataHandler.EPUB_METADATA_TYPES.UUID.getName())) { return true; } return false; } /** * Creates a new {@link EpubLibMetadataProperty} instance with the data of this {@link EpubLibMetadataProperty}. */ @SuppressWarnings({ "unchecked", "rawtypes" }) @Override public MetadataProperty clone() { EpubLibMetadataProperty<?> newMetadataProperty = new EpubLibMetadataProperty(this.name, this.value, this.epubLibMetadataEntry); newMetadataProperty.hints = this.hints; newMetadataProperty.values = new ArrayList<>(this.values); return newMetadataProperty; } }