package org.openntf.domino.helpers; import java.io.Serializable; import java.util.Comparator; import java.util.Date; import java.util.logging.Logger; import lotus.domino.NotesException; import org.openntf.domino.utils.DominoUtils; /** * This class is mainly used in the DbDirectory to hold database metadata, without to reference the Database-object itself. * * @author Roland Praml, FOCONIS AG * */ public class DatabaseMetaData implements Serializable { @SuppressWarnings("unused") private static final Logger log_ = Logger.getLogger(DatabaseMetaData.class.getName()); private static final long serialVersionUID = 1L; // These attributes will never change for a certain database object private final String fileName_; private final String filePath_; private final String server_; private final String replicaID_; // These attributes may change during the life time of a database. So we will update these, if we have an open database private String title_; private Date lastModifiedDate_; private String templateName_; private String designTemplateName_; private double size_; private String categories_; //private int fileFormat_; //private double limitRevisions; //private double limitUpdatedBy; // The comparators must be serializable, so put them in separate classes static class ApiPathComparator implements Comparator<DatabaseMetaData>, Serializable { private static final long serialVersionUID = 1L; @Override public int compare(final DatabaseMetaData o1, final DatabaseMetaData o2) { return o1.getApiPath().compareToIgnoreCase(o2.getApiPath()); } } static class FilePathComparator implements Comparator<DatabaseMetaData>, Serializable { private static final long serialVersionUID = 1L; @Override public int compare(final DatabaseMetaData o1, final DatabaseMetaData o2) { return o1.getFilePath().compareToIgnoreCase(o2.getFilePath()); } } static class TitleComparator implements Comparator<DatabaseMetaData>, Serializable { private static final long serialVersionUID = 1L; @Override public int compare(final DatabaseMetaData o1, final DatabaseMetaData o2) { return o1.getTitle().compareToIgnoreCase(o2.getTitle()); } } static class LastModComparator implements Comparator<DatabaseMetaData>, Serializable { private static final long serialVersionUID = 1L; @Override public int compare(final DatabaseMetaData o1, final DatabaseMetaData o2) { if (o1.getLastModifiedDate() == null) return -1; if (o2.getLastModifiedDate() == null) return 1; return o1.getLastModifiedDate().compareTo(o2.getLastModifiedDate()); } } /** * Comparator to allow easy checking whether two databases have the same API path (server!!filepath) * * @since org.openntf.domino 5.0.0 */ public final static Comparator<DatabaseMetaData> APIPATH_COMPARATOR = new ApiPathComparator(); /** * Comparator to allow easy checking whether two databases have the same filepath (e.g. on different servers) * * @since org.openntf.domino 5.0.0 */ public final static Comparator<DatabaseMetaData> FILEPATH_COMPARATOR = new FilePathComparator(); /** * Comparator to allow easy checking whether two databases have the same title * * @since org.openntf.domino 5.0.0 */ public final static Comparator<DatabaseMetaData> TITLE_COMPARATOR = new TitleComparator(); /** * Comparator to allow easy checking whether two databases have the same title * * @Deprecated as this takes a lot of performance and requires to open the database, it should not be used * @since org.openntf.domino 5.0.0 */ @Deprecated public final static Comparator<DatabaseMetaData> LASTMOD_COMPARATOR = new LastModComparator(); public DatabaseMetaData(final lotus.domino.Database db) throws NotesException { templateName_ = db.getTemplateName(); designTemplateName_ = db.getDesignTemplateName(); fileName_ = db.getFileName(); filePath_ = db.getFilePath(); server_ = db.getServer(); size_ = db.getSize(); title_ = db.getTitle(); replicaID_ = db.getReplicaID(); categories_ = db.getCategories(); if (db.isOpen()) { // These things are only available, if the DB is open lastModifiedDate_ = DominoUtils.toJavaDateSafe(db.getLastModified()); // sizeQuota_ = db.getSizeQuota(); // sizeWarning_ = db.getSizeWarning(); // created_ = db.getCreated(); // fileFormat_ = db.getFileFormat(); // limitRevisions = db.getLimitRevisions(); // limitUpdatedBy = db.getLimitUpdatedBy(); // lastModifiedDate_ = db.getLastModifiedDate(); } else { lastModifiedDate_ = null; } } public String getTitle() { return title_; } public String getApiPath() { if (server_.length() > 0) return server_ + "!!" + filePath_; return filePath_; } public String getMetaReplicaID() { if (server_.length() > 0) return server_ + "!!" + replicaID_; return replicaID_; } public String getFilePath() { return filePath_; } public Date getLastModifiedDate() { return lastModifiedDate_; } public String getServer() { return server_; } public String getTemplateName() { return templateName_; } public String getDesignTemplateName() { return designTemplateName_; } public String getFileName() { return fileName_; } public double getSize() { return size_; } public String getReplicaID() { return replicaID_; } public String getCategories() { return categories_; } /* * (non-Javadoc) * @see java.lang.Object#hashCode() */ @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + ((filePath_ == null) ? 0 : filePath_.hashCode()); result = prime * result + ((server_ == null) ? 0 : server_.hashCode()); return result; } /* * (non-Javadoc) * @see java.lang.Object#equals(java.lang.Object) */ @Override public boolean equals(final Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; DatabaseMetaData other = (DatabaseMetaData) obj; if (filePath_ == null) { if (other.filePath_ != null) return false; } else if (!filePath_.equals(other.filePath_)) return false; if (server_ == null) { if (other.server_ != null) return false; } else if (!server_.equals(other.server_)) return false; return true; } }