package eu.svjatoslav.meviz.htmlindexer;
+import eu.svjatoslav.meviz.htmlindexer.layouts.MixedLayout;
+import eu.svjatoslav.meviz.htmlindexer.metadata.Dimension;
+import eu.svjatoslav.meviz.htmlindexer.metadata.DirectoryMetadata;
+import eu.svjatoslav.meviz.htmlindexer.metadata.fileTypes.AbstractFile;
+import eu.svjatoslav.meviz.htmlindexer.metadata.fileTypes.Picture;
+
import java.io.BufferedInputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.UnsupportedEncodingException;
-import java.net.MalformedURLException;
import java.net.URL;
-import java.net.URLEncoder;
import java.util.List;
-import eu.svjatoslav.meviz.htmlindexer.layouts.MixedLayout;
-import eu.svjatoslav.meviz.htmlindexer.metadata.Dimension;
-import eu.svjatoslav.meviz.htmlindexer.metadata.DirectoryMetadata;
-import eu.svjatoslav.meviz.htmlindexer.metadata.fileTypes.AbstractFile;
-import eu.svjatoslav.meviz.htmlindexer.metadata.fileTypes.Picture;
-
public class WebIndexer extends AbstractIndexer {
- private static final int METADATA_LOAD_TRY_COUNT = 10;
- private final String globalPrefix;
- private final String jspPath;
-
- public WebIndexer(final String globalPrefix, final String jspPath) {
- this.globalPrefix = globalPrefix;
- this.jspPath = jspPath;
- }
-
- @Override
- public void compileHtml(final Layout layout,
- final DirectoryMetadata directory)
- throws UnsupportedEncodingException {
- super.compileHtml(layout, directory);
- }
-
- @Override
- public String getDirectoryUrl(final AbstractFile directory,
- final IndexingContext context) {
-
- try {
- return jspPath + context.getLocalUrl() + "/"
- + URLEncoder.encode(directory.fileName, "UTF-8");
- } catch (final UnsupportedEncodingException e) {
- throw new RuntimeException(e);
- }
- }
-
- public String getHtml(String requestPath) throws MalformedURLException,
- IOException, ClassNotFoundException {
+ private static final int METADATA_LOAD_TRY_COUNT = 10;
+ private final String globalPrefix;
+ private final String jspPath;
- if (requestPath == null)
- requestPath = "";
+ public WebIndexer(final String globalPrefix, final String jspPath) {
+ this.globalPrefix = globalPrefix;
+ this.jspPath = jspPath;
+ }
- if (requestPath.equals("/"))
- requestPath = "";
+ @Override
+ public void compileHtml(final Layout layout,
+ final DirectoryMetadata directory)
+ throws UnsupportedEncodingException {
+ super.compileHtml(layout, directory);
+ }
- final MixedLayout layout = new MixedLayout();
- final IndexingContext context = new IndexingContext(globalPrefix,
- requestPath);
- layout.init("Photos", context.getLocalPathComponents(), this, context);
+ @Override
+ public String getDirectoryUrl(final AbstractFile directory,
+ final IndexingContext context) {
+ return jspPath + context.getLocalUrl() + "/" + directory.fileName;
+ }
- final DirectoryMetadata directory = getMetadataForPath(requestPath);
+ public String getHtml(String requestPath) throws
+ IOException, ClassNotFoundException {
- compileHtml(layout, directory);
+ if (requestPath == null)
+ requestPath = "";
- return layout.getHtml(false, false, directory);
- }
+ if (requestPath.equals("/"))
+ requestPath = "";
- public DirectoryMetadata getMetadataForPath(final String requestPath)
- throws ClassNotFoundException, IOException {
+ final MixedLayout layout = new MixedLayout();
+ final IndexingContext context = new IndexingContext(globalPrefix,
+ requestPath);
+ layout.init("Photos", context.getLocalPathComponents(), this, context);
- final StringBuffer urlStringBuffer = new StringBuffer();
+ final DirectoryMetadata directory = getMetadataForPath(requestPath);
- urlStringBuffer.append(globalPrefix);
- urlStringBuffer.append(Utils.urlEncode(requestPath));
- urlStringBuffer.append("/.thumbnails/metadata_6.dat");
+ compileHtml(layout, directory);
- final String urlString = urlStringBuffer.toString();
+ return layout.getHtml(false, false, directory);
+ }
- IOException exception = null;
+ private DirectoryMetadata getMetadataForPath(final String requestPath)
+ throws ClassNotFoundException, IOException {
- for (int i = 0; i < METADATA_LOAD_TRY_COUNT; i++)
- try {
+ final String urlString = globalPrefix + Utils.urlEncode(requestPath) + "/.thumbnails/metadata_6.dat";
- final BufferedInputStream in = new BufferedInputStream(new URL(
- urlString).openStream());
+ for (int i = 0; true; i++)
+ try {
+ return attemptDirectoryMetadataDownload(urlString);
+ } catch (final IOException e) {
+ if (i > METADATA_LOAD_TRY_COUNT) throw e;
+ }
+ }
- final ObjectInputStream oin = new ObjectInputStream(in);
- final DirectoryMetadata directory = (DirectoryMetadata) oin
- .readObject();
- in.close();
+ private DirectoryMetadata attemptDirectoryMetadataDownload(String urlString) throws IOException, ClassNotFoundException {
+ final BufferedInputStream inputStream = new BufferedInputStream(new URL(
+ urlString).openStream());
- return directory;
- } catch (final IOException e) {
- exception = e;
- }
+ final ObjectInputStream objectInputStream = new ObjectInputStream(inputStream);
+ final DirectoryMetadata directory = (DirectoryMetadata) objectInputStream
+ .readObject();
+ inputStream.close();
- throw exception;
- }
+ return directory;
+ }
- @Override
- public String getParentDirectoryUrl(final IndexingContext context) {
- final StringBuffer result = new StringBuffer();
+ @Override
+ public String getParentDirectoryUrl(final IndexingContext context) {
+ final StringBuilder result = new StringBuilder();
- result.append(jspPath);
+ result.append(jspPath);
- final List<String> components = context.getLocalPathComponents();
+ final List<String> components = context.getLocalPathComponents();
- for (final String pathComponent : components.subList(0,
- components.size() - 1)) {
- result.append("/");
- result.append(pathComponent);
- }
+ for (final String pathComponent : components.subList(0,
+ components.size() - 1)) {
+ result.append("/");
+ result.append(pathComponent);
+ }
- return result.toString();
- }
+ return result.toString();
+ }
- @Override
- public String getThumbnailUrl(final Picture picture,
- final Dimension desiredDimension, final IndexingContext context) {
+ @Override
+ public String getThumbnailUrl(final Picture picture,
+ final Dimension desiredDimension, final IndexingContext context) {
- // in case thumbnail size was equal to original, then return original
- // file path
- if (picture.getDimensions().equals(desiredDimension))
- return context.getGlobalUrl() + context.getLocalUrl() + "/"
- + picture.fileName;
+ // in case thumbnail size was equal to original, then return original
+ // file path
+ if (picture.getDimensions().equals(desiredDimension))
+ return context.getGlobalUrl() + context.getLocalUrl() + "/"
+ + picture.fileName;
- final String thumbnailFileName = picture
- .getRelativeThumbnailFileName(desiredDimension);
+ final String thumbnailFileName = picture
+ .getRelativeThumbnailFileName(desiredDimension);
- return context.getGlobalUrl() + context.getLocalUrl() + "/"
- + Constants.THUMBNAILS_DIRECTORY_NAME + "/"
- + Utils.urlEncode(thumbnailFileName);
- }
+ return context.getGlobalUrl() + context.getLocalUrl() + "/"
+ + Constants.THUMBNAILS_DIRECTORY_NAME + "/"
+ + Utils.urlEncode(thumbnailFileName);
+ }
}