Fix some warnings
[nikiroo-utils.git] / src / be / nikiroo / fanfix / data / Story.java
1 package be.nikiroo.fanfix.data;
2
3 import java.util.ArrayList;
4 import java.util.Iterator;
5 import java.util.List;
6
7 /**
8 * The main data class, where the whole story resides.
9 *
10 * @author niki
11 */
12 public class Story implements Iterable<Chapter>, Cloneable {
13 private MetaData meta;
14 private List<Chapter> chapters = new ArrayList<Chapter>();
15 private List<Chapter> empty = new ArrayList<Chapter>();
16
17 /**
18 * The metadata about this {@link Story}.
19 *
20 * @return the meta
21 */
22 public MetaData getMeta() {
23 return meta;
24 }
25
26 /**
27 * The metadata about this {@link Story}.
28 *
29 * @param meta
30 * the meta to set
31 */
32 public void setMeta(MetaData meta) {
33 this.meta = meta;
34 }
35
36 /**
37 * The chapters of the story.
38 *
39 * @return the chapters
40 */
41 public List<Chapter> getChapters() {
42 return chapters;
43 }
44
45 /**
46 * The chapters of the story.
47 *
48 * @param chapters
49 * the chapters to set
50 */
51 public void setChapters(List<Chapter> chapters) {
52 this.chapters = chapters;
53 }
54
55 /**
56 * Get an iterator on the {@link Chapter}s.
57 */
58 @Override
59 public Iterator<Chapter> iterator() {
60 return chapters == null ? empty.iterator() : chapters.iterator();
61 }
62
63 /**
64 * Display a DEBUG {@link String} representation of this object.
65 * <p>
66 * This is not efficient, nor intended to be.
67 */
68 @Override
69 public String toString() {
70 String title = "";
71 if (meta != null && meta.getTitle() != null) {
72 title = meta.getTitle();
73 }
74
75 StringBuilder tags = new StringBuilder();
76 if (meta != null && meta.getTags() != null) {
77 for (String tag : meta.getTags()) {
78 if (tags.length() > 0) {
79 tags.append(", ");
80 }
81 tags.append(tag);
82 }
83 }
84
85 String resume = "";
86 if (meta != null && meta.getResume() != null) {
87 for (Paragraph para : meta.getResume()) {
88 resume += "\n\t";
89 resume += para.toString().substring(0,
90 Math.min(para.toString().length(), 120));
91 }
92 resume += "\n";
93 }
94
95 String cover = "none";
96 if (meta != null && meta.getCover() != null) {
97 cover = " bytes";
98
99 int size = meta.getCover().getData().length;
100 if (size > 1000) {
101 size /= 1000;
102 cover = " kb";
103 if (size > 1000) {
104 size /= 1000;
105 cover = " mb";
106 }
107 }
108
109 cover = size + cover;
110 }
111
112 return String.format(
113 "Title: [%s]\nAuthor: [%s]\nDate: [%s]\nTags: [%s]\n"
114 + "Resume: [%s]\nCover: [%s]", title, meta == null ? ""
115 : meta.getAuthor(), meta == null ? "" : meta.getDate(),
116 tags.toString(), resume, cover);
117 }
118
119 @Override
120 public Story clone() {
121 Story story = null;
122 try {
123 story = (Story) super.clone();
124 } catch (CloneNotSupportedException e) {
125 // Did the clones rebel?
126 System.err.println(e);
127 }
128
129 if (meta != null) {
130 story.meta = meta.clone();
131 }
132
133 if (chapters != null) {
134 story.chapters = new ArrayList<Chapter>();
135 for (Chapter chap : chapters) {
136 story.chapters.add(chap.clone());
137 }
138 }
139
140 return story;
141 }
142 }