import java.io.IOException;
import java.net.URL;
import java.net.UnknownHostException;
-import java.util.ArrayList;
-import java.util.Collections;
+import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
-import java.util.TreeMap;
import be.nikiroo.fanfix.Instance;
import be.nikiroo.fanfix.data.MetaData;
READ_WRITE,
/** The library is ready, but read-only. */
READ_ONLY,
- /** The library is invalid (not correctly set up). */
- INVALID,
/** You are not allowed to access this library. */
UNAUTHORIZED,
- /** The library is currently out of commission. */
+ /** The library is invalid, and will never work as is. */
+ INVALID,
+ /** The library is currently out of commission, but may work later. */
UNAVAILABLE;
/**
*/
public abstract Image getCover(String luid) throws IOException;
- // TODO: ensure it is the main used interface
+ /**
+ * Retrieve the list of {@link MetaData} known by this {@link BasicLibrary}
+ * in a easy-to-filter version.
+ *
+ * @param pg
+ * the optional {@link Progress}
+ * @return the list of {@link MetaData} as a {@link MetaResultList} you can
+ * query
+ * @throws IOException
+ * in case of I/O eror
+ */
public MetaResultList getList(Progress pg) throws IOException {
+ // TODO: ensure it is the main used interface
+
return new MetaResultList(getMetas(pg));
}
- // TODO: make something for (normal and custom) not-story covers
+ // TODO: make something for (normal and custom) non-story covers
/**
* Return the cover image associated to this source.
*
* @return the next luid
*/
- protected abstract int getNextId();
+ protected abstract String getNextId();
/**
* Delete the target {@link Story}.
}
/**
+ * @return the same as getList()
+ * @throws IOException
+ * in case of I/O error
* @deprecated please use {@link BasicLibrary#getList()} and
* {@link MetaResultList#getSources()} instead.
*/
}
/**
+ * @return the same as getList()
+ * @throws IOException
+ * in case of I/O error
* @deprecated please use {@link BasicLibrary#getList()} and
* {@link MetaResultList#getSourcesGrouped()} instead.
*/
}
/**
+ * @return the same as getList()
+ * @throws IOException
+ * in case of I/O error
* @deprecated please use {@link BasicLibrary#getList()} and
* {@link MetaResultList#getAuthors()} instead.
*/
}
/**
+ * @return the same as getList()
+ * @throws IOException
+ * in case of I/O error
* @deprecated please use {@link BasicLibrary#getList()} and
* {@link MetaResultList#getAuthorsGrouped()} instead.
*/
+ @Deprecated
public Map<String, List<String>> getAuthorsGrouped() throws IOException {
return getList().getAuthorsGrouped();
}
pg.setName("Saving story");
if (luid == null || luid.isEmpty()) {
- meta.setLuid(String.format("%03d", getNextId()));
+ meta.setLuid(getNextId());
} else {
meta.setLuid(luid);
}
pg.done();
}
+
+ /**
+ * Describe a {@link Story} from its {@link MetaData} and return a list of
+ * title/value that represent this {@link Story}.
+ *
+ * @param meta
+ * the {@link MetaData} to represent
+ *
+ * @return the information, translated and sorted
+ */
+ static public Map<String, String> getMetaDesc(MetaData meta) {
+ Map<String, String> metaDesc = new LinkedHashMap<String, String>();
+
+ // TODO: i18n
+
+ StringBuilder tags = new StringBuilder();
+ for (String tag : meta.getTags()) {
+ if (tags.length() > 0) {
+ tags.append(", ");
+ }
+ tags.append(tag);
+ }
+
+ // TODO: i18n
+ metaDesc.put("Author", meta.getAuthor());
+ metaDesc.put("Published on", meta.getPublisher());
+ metaDesc.put("Publication date", meta.getDate());
+ metaDesc.put("Creation date", meta.getCreationDate());
+ String count = "";
+ if (meta.getWords() > 0) {
+ count = StringUtils.formatNumber(meta.getWords());
+ }
+ if (meta.isImageDocument()) {
+ metaDesc.put("Number of images", count);
+ } else {
+ metaDesc.put("Number of words", count);
+ }
+ metaDesc.put("Source", meta.getSource());
+ metaDesc.put("Subject", meta.getSubject());
+ metaDesc.put("Language", meta.getLang());
+ metaDesc.put("Tags", tags.toString());
+ metaDesc.put("URL", meta.getUrl());
+
+ return metaDesc;
+ }
}