* @author niki
*/
public class Library {
- private File baseDir;
+ protected File baseDir;
+ protected boolean localSpeed;
+
private Map<MetaData, File> stories;
private int lastId;
private OutputType text;
* the {@link OutputType} to save the images-focused stories into
*/
public Library(File dir, OutputType text, OutputType image) {
+ this();
+
this.baseDir = dir;
- this.stories = new HashMap<MetaData, File>();
+
this.lastId = 0;
this.text = text;
this.image = image;
dir.mkdirs();
}
+ /**
+ * Create a new {@link Library} with no link to the local machine.
+ * <p>
+ * Reserved for extensions.
+ */
+ protected Library() {
+ this.stories = new HashMap<MetaData, File>();
+ }
+
/**
* Refresh the {@link Library}, that is, make sure all stories are loaded.
*
public synchronized List<MetaData> getListByType(String type) {
if (type != null) {
// convert the type to dir name
- type = getDir(type).getName();
+ type = getExpectedDir(type).getName();
}
List<MetaData> list = new ArrayList<MetaData>();
}
/**
- * Retrieve a {@link File} corresponding to the given {@link Story}, cover
- * image not included.
+ * Retrieve a {@link MetaData} corresponding to the given {@link Story},
+ * cover image <b>MAY</b> not be included.
*
* @param luid
* the Library UID of the story
public synchronized BufferedImage getCover(String luid) {
MetaData meta = getInfo(luid);
if (meta != null) {
+ getFile(luid); // to help remote implementation
try {
- File infoFile = new File(getFile(meta).getPath() + ".info");
+ File infoFile = new File(getExpectedFile(meta).getPath()
+ + ".info");
meta = readMeta(infoFile, true).getKey();
return meta.getCover();
} catch (IOException e) {
if (luid != null) {
for (Entry<MetaData, File> entry : getStories(null).entrySet()) {
if (luid.equals(entry.getKey().getLuid())) {
+ MetaData meta = entry.getKey();
+ File file = getFile(luid); // to help remote implementation
try {
- SupportType type = SupportType.valueOfAllOkUC(entry
- .getKey().getType());
- URL url = entry.getValue().toURI().toURL();
+ SupportType type = SupportType.valueOfAllOkUC(meta
+ .getType());
+ URL url = file.toURI().toURL();
if (type != null) {
return BasicSupport.getSupport(type).process(url,
pg);
} else {
throw new IOException("Unknown type: "
- + entry.getKey().getType());
+ + meta.getType());
}
} catch (IOException e) {
// We should not have not-supported files in the
// library
Instance.syserr(new IOException(
- "Cannot load file from library: "
- + entry.getValue().getPath(), e));
+ "Cannot load file from library: " + file, e));
}
}
}
key.setLuid(luid);
}
- getDir(key.getSource()).mkdirs();
- if (!getDir(key.getSource()).exists()) {
+ getExpectedDir(key.getSource()).mkdirs();
+ if (!getExpectedDir(key.getSource()).exists()) {
throw new IOException("Cannot create library dir");
}
}
BasicOutput it = BasicOutput.getOutput(out, true);
- it.process(story, getFile(key).getPath(), pg);
+ it.process(story, getExpectedFile(key).getPath(), pg);
// empty cache
stories.clear();
MetaData meta = getInfo(luid);
if (meta != null) {
meta.setSource(newType);
- File newDir = getDir(meta.getSource());
+ File newDir = getExpectedDir(meta.getSource());
if (!newDir.exists()) {
newDir.mkdir();
}
return false;
}
+ /**
+ * The library is accessed locally or at local speed (for operations like
+ * {@link Library#getFile(String)}).
+ * <p>
+ * It could be cached, too, it is only about the access speed.
+ *
+ * @return TRUE if it is accessed locally
+ */
+ public boolean isLocalSpeed() {
+ return localSpeed;
+ }
+
/**
* Return the list of files/dirs on disk for this {@link Story}.
* <p>
List<File> files = new ArrayList<File>();
MetaData meta = getInfo(luid);
- File file = getStories(null).get(meta);
+ File file = getFile(luid); // to help remote implementation
if (file != null) {
files.add(file);
*
* @return the target directory
*/
- private File getDir(String type) {
+ private File getExpectedDir(String type) {
String source = type.replaceAll("[^a-zA-Z0-9._+-]", "_");
return new File(baseDir, source);
}
*
* @return the target
*/
- private File getFile(MetaData key) {
+ private File getExpectedFile(MetaData key) {
String title = key.getTitle();
if (title == null) {
title = "";
}
title = title.replaceAll("[^a-zA-Z0-9._+-]", "_");
- return new File(getDir(key.getSource()), key.getLuid() + "_" + title);
+ return new File(getExpectedDir(key.getSource()), key.getLuid() + "_"
+ + title);
}
/**
*
* @return the stories
*/
- private synchronized Map<MetaData, File> getStories(Progress pg) {
+ protected synchronized Map<MetaData, File> getStories(Progress pg) {
if (pg == null) {
pg = new Progress();
} else {