X-Git-Url: http://git.nikiroo.be/?a=blobdiff_plain;ds=sidebyside;f=src%2Fbe%2Fnikiroo%2Ffanfix%2Flibrary%2FBasicLibrary.java;h=c558384d380526819f36a8dac9553b89d33517ca;hb=d66deb8d8b30cff6b54db352eef34a3508939f84;hp=f96506d9f43bc42feef62460947543487430861f;hpb=99206a39d3c58140402d2b4903f7436168d1d349;p=nikiroo-utils.git
diff --git a/src/be/nikiroo/fanfix/library/BasicLibrary.java b/src/be/nikiroo/fanfix/library/BasicLibrary.java
index f96506d..c558384 100644
--- a/src/be/nikiroo/fanfix/library/BasicLibrary.java
+++ b/src/be/nikiroo/fanfix/library/BasicLibrary.java
@@ -39,14 +39,36 @@ abstract public class BasicLibrary {
* @author niki
*/
public enum Status {
- /** The library is ready. */
- READY,
+ /** The library is ready and r/w. */
+ 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. */
- UNAVAILABLE,
+ UNAVAILABLE;
+
+ /**
+ * The library is available (you can query it).
+ *
+ * It does not specify if it is read-only or not.
+ *
+ * @return TRUE if it is
+ */
+ public boolean isReady() {
+ return (this == READ_WRITE || this == READ_ONLY);
+ }
+
+ /**
+ * This library can be modified (= you are allowed to modify it).
+ *
+ * @return TRUE if it is
+ */
+ public boolean isWritable() {
+ return (this == READ_WRITE);
+ }
}
/**
@@ -66,7 +88,7 @@ abstract public class BasicLibrary {
* @return the current status
*/
public Status getStatus() {
- return Status.READY;
+ return Status.READ_WRITE;
}
/**
@@ -81,8 +103,11 @@ abstract public class BasicLibrary {
* the optional {@link Progress}
*
* @return the corresponding {@link Story}
+ *
+ * @throws IOException
+ * in case of IOException
*/
- public abstract File getFile(String luid, Progress pg);
+ public abstract File getFile(String luid, Progress pg) throws IOException;
/**
* Return the cover image associated to this story.
@@ -91,8 +116,11 @@ abstract public class BasicLibrary {
* the Library UID of the story
*
* @return the cover image
+ *
+ * @throws IOException
+ * in case of IOException
*/
- public abstract Image getCover(String luid);
+ public abstract Image getCover(String luid) throws IOException;
/**
* Return the cover image associated to this source.
@@ -104,8 +132,11 @@ abstract public class BasicLibrary {
* the source
*
* @return the cover image or NULL
+ *
+ * @throws IOException
+ * in case of IOException
*/
- public Image getSourceCover(String source) {
+ public Image getSourceCover(String source) throws IOException {
Image custom = getCustomSourceCover(source);
if (custom != null) {
return custom;
@@ -129,8 +160,11 @@ abstract public class BasicLibrary {
* the author
*
* @return the cover image or NULL
+ *
+ * @throws IOException
+ * in case of IOException
*/
- public Image getAuthorCover(String author) {
+ public Image getAuthorCover(String author) throws IOException {
Image custom = getCustomAuthorCover(author);
if (custom != null) {
return custom;
@@ -153,8 +187,12 @@ abstract public class BasicLibrary {
* the source to look for
*
* @return the custom cover or NULL if none
+ *
+ * @throws IOException
+ * in case of IOException
*/
- public Image getCustomSourceCover(@SuppressWarnings("unused") String source) {
+ @SuppressWarnings("unused")
+ public Image getCustomSourceCover(String source) throws IOException {
return null;
}
@@ -167,8 +205,12 @@ abstract public class BasicLibrary {
* the author to look for
*
* @return the custom cover or NULL if none
+ *
+ * @throws IOException
+ * in case of IOException
*/
- public Image getCustomAuthorCover(@SuppressWarnings("unused") String author) {
+ @SuppressWarnings("unused")
+ public Image getCustomAuthorCover(String author) throws IOException {
return null;
}
@@ -179,8 +221,12 @@ abstract public class BasicLibrary {
* the source to change
* @param luid
* the story LUID
+ *
+ * @throws IOException
+ * in case of IOException
*/
- public abstract void setSourceCover(String source, String luid);
+ public abstract void setSourceCover(String source, String luid)
+ throws IOException;
/**
* Set the author cover to the given story cover.
@@ -189,8 +235,12 @@ abstract public class BasicLibrary {
* the author to change
* @param luid
* the story LUID
+ *
+ * @throws IOException
+ * in case of IOException
*/
- public abstract void setAuthorCover(String author, String luid);
+ public abstract void setAuthorCover(String author, String luid)
+ throws IOException;
/**
* Return the list of stories (represented by their {@link MetaData}, which
@@ -200,8 +250,11 @@ abstract public class BasicLibrary {
* the optional {@link Progress}
*
* @return the list (can be empty but not NULL)
+ *
+ * @throws IOException
+ * in case of IOException
*/
- protected abstract List getMetas(Progress pg);
+ protected abstract List getMetas(Progress pg) throws IOException;
/**
* Invalidate the {@link Story} cache (when the content should be re-read
@@ -228,8 +281,11 @@ abstract public class BasicLibrary {
*
* @param meta
* the {@link Story} to clear from the cache
+ *
+ * @throws IOException
+ * in case of IOException
*/
- protected abstract void updateInfo(MetaData meta);
+ protected abstract void updateInfo(MetaData meta) throws IOException;
/**
* Return the next LUID that can be used.
@@ -274,15 +330,22 @@ abstract public class BasicLibrary {
* the optional progress reporter
*/
public void refresh(Progress pg) {
- getMetas(pg);
+ try {
+ getMetas(pg);
+ } catch (IOException e) {
+ // We will let it fail later
+ }
}
/**
* List all the known types (sources) of stories.
*
* @return the sources
+ *
+ * @throws IOException
+ * in case of IOException
*/
- public synchronized List getSources() {
+ public synchronized List getSources() throws IOException {
List list = new ArrayList();
for (MetaData meta : getMetas(null)) {
String storySource = meta.getSource();
@@ -308,8 +371,12 @@ abstract public class BasicLibrary {
*
*
* @return the grouped list
+ *
+ * @throws IOException
+ * in case of IOException
*/
- public synchronized Map> getSourcesGrouped() {
+ public synchronized Map> getSourcesGrouped()
+ throws IOException {
Map> map = new TreeMap>();
for (String source : getSources()) {
String name;
@@ -340,8 +407,11 @@ abstract public class BasicLibrary {
* List all the known authors of stories.
*
* @return the authors
+ *
+ * @throws IOException
+ * in case of IOException
*/
- public synchronized List getAuthors() {
+ public synchronized List getAuthors() throws IOException {
List list = new ArrayList();
for (MetaData meta : getMetas(null)) {
String storyAuthor = meta.getAuthor();
@@ -372,8 +442,11 @@ abstract public class BasicLibrary {
* 0-9, which may only be present or not).
*
* @return the authors' names, grouped by letter(s)
+ *
+ * @throws IOException
+ * in case of IOException
*/
- public Map> getAuthorsGrouped() {
+ public Map> getAuthorsGrouped() throws IOException {
int MAX = 20;
Map> groups = new TreeMap>();
@@ -448,7 +521,8 @@ abstract public class BasicLibrary {
* @param car
* the starting character, *, 0 or a capital
* letter
- * @return the authors that fulfill the starting letter
+ *
+ * @return the authors that fulfil the starting letter
*/
private List getAuthorsGroup(List authors, char car) {
List accepted = new ArrayList();
@@ -480,8 +554,11 @@ abstract public class BasicLibrary {
* Cover images MAYBE not included.
*
* @return the stories
+ *
+ * @throws IOException
+ * in case of IOException
*/
- public synchronized List getList() {
+ public synchronized List getList() throws IOException {
return getMetas(null);
}
@@ -495,8 +572,12 @@ abstract public class BasicLibrary {
* the type of story to retrieve, or NULL for all
*
* @return the stories
+ *
+ * @throws IOException
+ * in case of IOException
*/
- public synchronized List getListBySource(String type) {
+ public synchronized List getListBySource(String type)
+ throws IOException {
List list = new ArrayList();
for (MetaData meta : getMetas(null)) {
String storyType = meta.getSource();
@@ -519,8 +600,12 @@ abstract public class BasicLibrary {
* the author of the stories to retrieve, or NULL for all
*
* @return the stories
+ *
+ * @throws IOException
+ * in case of IOException
*/
- public synchronized List getListByAuthor(String author) {
+ public synchronized List getListByAuthor(String author)
+ throws IOException {
List list = new ArrayList();
for (MetaData meta : getMetas(null)) {
String storyAuthor = meta.getAuthor();
@@ -541,8 +626,11 @@ abstract public class BasicLibrary {
* the Library UID of the story
*
* @return the corresponding {@link Story}
+ *
+ * @throws IOException
+ * in case of IOException
*/
- public synchronized MetaData getInfo(String luid) {
+ public synchronized MetaData getInfo(String luid) throws IOException {
if (luid != null) {
for (MetaData meta : getMetas(null)) {
if (luid.equals(meta.getLuid())) {
@@ -563,8 +651,12 @@ abstract public class BasicLibrary {
* the optional progress reporter
*
* @return the corresponding {@link Story} or NULL if not found
+ *
+ * @throws IOException
+ * in case of IOException
*/
- public synchronized Story getStory(String luid, Progress pg) {
+ public synchronized Story getStory(String luid, Progress pg)
+ throws IOException {
Progress pgMetas = new Progress();
Progress pgStory = new Progress();
if (pg != null) {
@@ -598,9 +690,13 @@ abstract public class BasicLibrary {
* the optional progress reporter
*
* @return the corresponding {@link Story} or NULL if not found
+ *
+ * @throws IOException
+ * in case of IOException
*/
public synchronized Story getStory(String luid,
- @SuppressWarnings("javadoc") MetaData meta, Progress pg) {
+ @SuppressWarnings("javadoc") MetaData meta, Progress pg)
+ throws IOException {
if (pg == null) {
pg = new Progress();
@@ -634,10 +730,8 @@ abstract public class BasicLibrary {
} catch (IOException e) {
// We should not have not-supported files in the
// library
- Instance.getTraceHandler().error(
- new IOException(String.format(
- "Cannot load file of type '%s' from library: %s",
- meta.getType(), file), e));
+ Instance.getInstance().getTraceHandler().error(new IOException(
+ String.format("Cannot load file of type '%s' from library: %s", meta.getType(), file), e));
} finally {
pgProcess.done();
pg.done();
@@ -655,14 +749,14 @@ abstract public class BasicLibrary {
* @param pg
* the optional progress reporter
*
- * @return the imported {@link Story}
+ * @return the imported Story {@link MetaData}
*
* @throws UnknownHostException
* if the host is not supported
* @throws IOException
* in case of I/O error
*/
- public Story imprt(URL url, Progress pg) throws IOException {
+ public MetaData imprt(URL url, Progress pg) throws IOException {
if (pg == null)
pg = new Progress();
@@ -680,7 +774,7 @@ abstract public class BasicLibrary {
Story story = save(support.process(pgProcess), pgSave);
pg.done();
- return story;
+ return story.getMeta();
}
/**
@@ -796,8 +890,7 @@ abstract public class BasicLibrary {
public synchronized Story save(Story story, String luid, Progress pg)
throws IOException {
- Instance.getTraceHandler().trace(
- this.getClass().getSimpleName() + ": saving story " + luid);
+ Instance.getInstance().getTraceHandler().trace(this.getClass().getSimpleName() + ": saving story " + luid);
// Do not change the original metadata, but change the original story
MetaData meta = story.getMeta().clone();
@@ -817,9 +910,8 @@ abstract public class BasicLibrary {
updateInfo(story.getMeta());
- Instance.getTraceHandler().trace(
- this.getClass().getSimpleName() + ": story saved (" + luid
- + ")");
+ Instance.getInstance().getTraceHandler()
+ .trace(this.getClass().getSimpleName() + ": story saved (" + luid + ")");
return story;
}
@@ -834,14 +926,13 @@ abstract public class BasicLibrary {
* in case of I/O error
*/
public synchronized void delete(String luid) throws IOException {
- Instance.getTraceHandler().trace(
- this.getClass().getSimpleName() + ": deleting story " + luid);
+ Instance.getInstance().getTraceHandler().trace(this.getClass().getSimpleName() + ": deleting story " + luid);
doDelete(luid);
invalidateInfo(luid);
- Instance.getTraceHandler().trace(
- this.getClass().getSimpleName() + ": story deleted (" + luid
+ Instance.getInstance().getTraceHandler()
+ .trace(this.getClass().getSimpleName() + ": story deleted (" + luid
+ ")");
}