Update changelog
[nikiroo-utils.git] / src / be / nikiroo / fanfix / data / MetaData.java
index 55c18de7d0596d0ba43b925ae00c0773100806a8..b2217ae3f4b721d235d7ee830c611514b68c9b90 100644 (file)
@@ -1,21 +1,22 @@
 package be.nikiroo.fanfix.data;
 
-import java.awt.image.BufferedImage;
 import java.util.ArrayList;
 import java.util.List;
 
+import be.nikiroo.utils.Image;
+
 /**
  * The meta data associated to a {@link Story} object.
  * 
  * @author niki
  */
-public class MetaData implements Cloneable {
+public class MetaData implements Cloneable, Comparable<MetaData> {
        private String title;
        private String author;
        private String date;
        private Chapter resume;
        private List<String> tags;
-       private BufferedImage cover;
+       private Image cover;
        private String subject;
        private String source;
        private String url;
@@ -25,6 +26,9 @@ public class MetaData implements Cloneable {
        private String publisher;
        private String type;
        private boolean imageDocument;
+       private long words;
+       private String creationDate;
+       private boolean fakeCover;
 
        /**
         * The title of the story.
@@ -126,7 +130,7 @@ public class MetaData implements Cloneable {
         * 
         * @return the cover
         */
-       public BufferedImage getCover() {
+       public Image getCover() {
                return cover;
        }
 
@@ -136,7 +140,7 @@ public class MetaData implements Cloneable {
         * @param cover
         *            the cover to set
         */
-       public void setCover(BufferedImage cover) {
+       public void setCover(Image cover) {
                this.cover = cover;
        }
 
@@ -232,7 +236,7 @@ public class MetaData implements Cloneable {
        /**
         * A unique value representing the story in the local library.
         * 
-        * @param uuid
+        * @param luid
         *            the luid to set
         */
        public void setLuid(String luid) {
@@ -315,6 +319,98 @@ public class MetaData implements Cloneable {
                this.imageDocument = imageDocument;
        }
 
+       /**
+        * The number of words in the related {@link Story}.
+        * 
+        * @return the number of words
+        */
+       public long getWords() {
+               return words;
+       }
+
+       /**
+        * The number of words in the related {@link Story}.
+        * 
+        * @param words
+        *            the number of words to set
+        */
+       public void setWords(long words) {
+               this.words = words;
+       }
+
+       /**
+        * The (Fanfix) {@link Story} creation date.
+        * 
+        * @return the creationDate
+        */
+       public String getCreationDate() {
+               return creationDate;
+       }
+
+       /**
+        * The (Fanfix) {@link Story} creation date.
+        * 
+        * @param creationDate
+        *            the creationDate to set
+        */
+       public void setCreationDate(String creationDate) {
+               this.creationDate = creationDate;
+       }
+
+       /**
+        * The cover in this {@link MetaData} object is "fake", in the sens that it
+        * comes from the actual content images.
+        * 
+        * @return TRUE for a fake cover
+        */
+       public boolean isFakeCover() {
+               return fakeCover;
+       }
+
+       /**
+        * The cover in this {@link MetaData} object is "fake", in the sens that it
+        * comes from the actual content images
+        * 
+        * @param fakeCover
+        *            TRUE for a fake cover
+        */
+       public void setFakeCover(boolean fakeCover) {
+               this.fakeCover = fakeCover;
+       }
+
+       @Override
+       public int compareTo(MetaData o) {
+               if (o == null) {
+                       return 1;
+               }
+
+               String id = (getUuid() == null ? "" : getUuid())
+                               + (getLuid() == null ? "" : getLuid());
+               String oId = (getUuid() == null ? "" : o.getUuid())
+                               + (o.getLuid() == null ? "" : o.getLuid());
+
+               return id.compareTo(oId);
+       }
+
+       @Override
+       public boolean equals(Object obj) {
+               if (!(obj instanceof MetaData)) {
+                       return false;
+               }
+
+               return compareTo((MetaData) obj) == 0;
+       }
+
+       @Override
+       public int hashCode() {
+               String uuid = getUuid();
+               if (uuid == null) {
+                       uuid = "" + title + author + source;
+               }
+
+               return uuid.hashCode();
+       }
+
        @Override
        public MetaData clone() {
                MetaData meta = null;
@@ -326,14 +422,11 @@ public class MetaData implements Cloneable {
                }
 
                if (tags != null) {
-                       meta.tags = new ArrayList<String>();
-                       meta.tags.addAll(tags);
+                       meta.tags = new ArrayList<String>(tags);
                }
+
                if (resume != null) {
-                       meta.resume = new Chapter(resume.getNumber(), resume.getName());
-                       for (Paragraph para : resume) {
-                               meta.resume.getParagraphs().add(para);
-                       }
+                       meta.resume = resume.clone();
                }
 
                return meta;