use more template, use replace input stream
[nikiroo-utils.git] / src / be / nikiroo / fanfix / data / MetaData.java
index cbaf84e3c75def8646332cb7975a650dfe703013..2e34ef98ad27bda10ff34a009fa3d3d314aaf6b2 100644 (file)
@@ -1,16 +1,26 @@
 package be.nikiroo.fanfix.data;
 
+import java.io.Serializable;
 import java.util.ArrayList;
 import java.util.List;
 
 import be.nikiroo.utils.Image;
+import be.nikiroo.utils.StringUtils;
 
 /**
  * The meta data associated to a {@link Story} object.
+ * <p>
+ * Note that some earlier version of the program did not save the resume as an
+ * external file; for those stories, the resume is not fetched until the story
+ * is.
+ * <p>
+ * The cover is never fetched until the story is.
  * 
  * @author niki
  */
-public class MetaData implements Cloneable, Comparable<MetaData> {
+public class MetaData implements Cloneable, Comparable<MetaData>, Serializable {
+       private static final long serialVersionUID = 1L;
+
        private String title;
        private String author;
        private String date;
@@ -30,6 +40,12 @@ public class MetaData implements Cloneable, Comparable<MetaData> {
        private String creationDate;
        private boolean fakeCover;
 
+       /**
+        * Create an empty {@link MetaData}.
+        */
+       public MetaData() {
+       }
+       
        /**
         * The title of the story.
         * 
@@ -108,6 +124,12 @@ public class MetaData implements Cloneable, Comparable<MetaData> {
 
        /**
         * The story resume (a.k.a. description).
+        * <p>
+        * This can be NULL if we don't have a resume for this {@link Story}.
+        * <p>
+        * Note that some earlier version of the program did not save the resume as
+        * an external file; for those stories, the resume is not fetched until the
+        * story is.
         * 
         * @return the resume
         */
@@ -117,6 +139,10 @@ public class MetaData implements Cloneable, Comparable<MetaData> {
 
        /**
         * The story resume (a.k.a. description).
+        * <p>
+        * Note that some earlier version of the program did not save the resume as
+        * an external file; for those stories, the resume is not fetched until the
+        * story is.
         * 
         * @param resume
         *            the resume to set
@@ -127,6 +153,8 @@ public class MetaData implements Cloneable, Comparable<MetaData> {
 
        /**
         * The cover image of the story if any (can be NULL).
+        * <p>
+        * The cover is not fetched until the story is.
         * 
         * @return the cover
         */
@@ -136,6 +164,8 @@ public class MetaData implements Cloneable, Comparable<MetaData> {
 
        /**
         * The cover image of the story if any (can be NULL).
+        * <p>
+        * The cover is not fetched until the story is.
         * 
         * @param cover
         *            the cover to set
@@ -384,12 +414,14 @@ public class MetaData implements Cloneable, Comparable<MetaData> {
                        return 1;
                }
 
-               String id = (getUuid() == null ? "" : getUuid())
+               String id = (getTitle() == null ? "" : getTitle())
+                               + (getUuid() == null ? "" : getUuid())
                                + (getLuid() == null ? "" : getLuid());
-               String oId = (getUuid() == null ? "" : o.getUuid())
+               String oId = (getTitle() == null ? "" : o.getTitle())
+                               + (getUuid() == null ? "" : o.getUuid())
                                + (o.getLuid() == null ? "" : o.getLuid());
 
-               return id.compareTo(oId);
+               return id.compareToIgnoreCase(oId);
        }
 
        @Override
@@ -466,24 +498,14 @@ public class MetaData implements Cloneable, Comparable<MetaData> {
 
                String cover = "none";
                if (getCover() != null) {
-                       cover = " bytes";
-
-                       int size = getCover().getData().length;
-                       if (size > 1000) {
-                               size /= 1000;
-                               cover = " kb";
-                               if (size > 1000) {
-                                       size /= 1000;
-                                       cover = " mb";
-                               }
-                       }
-
-                       cover = size + cover;
+                       cover = StringUtils.formatNumber(getCover().getSize())
+                                       + "bytes";
                }
 
                return String.format(
-                               "Meta %s:\n\tTitle: [%s]\n\tAuthor: [%s]\n\tDate: [%s]\n\tTags: [%s]"
-                                               + "\n\tResume: [%s]\n\tCover: [%s]", luid, title,
-                               getAuthor(), getDate(), tags.toString(), resume, cover);
+                               "Meta %s:\n\tTitle: [%s]\n\tAuthor: [%s]\n\tDate: [%s]\n\tTags: [%s]\n\tWord count: [%s]"
+                                               + "\n\tResume: [%s]\n\tCover: [%s]",
+                               luid, title, getAuthor(), getDate(), tags.toString(),
+                               "" + words, resume, cover);
        }
 }