X-Git-Url: http://www2.svjatoslav.eu/gitweb/?a=blobdiff_plain;f=src%2Fmain%2Fjava%2Feu%2Fsvjatoslav%2Fmeviz%2Fhtmlindexer%2FWebIndexer.java;h=7cf1d2097f97930271ea5654d7145ce42e892e2c;hb=6cda75011fa4346a3cc2c7c7790eb1f1b12cd3fe;hp=f659a35fcbfb4e2109e2dff3b7d76c07fdd882b6;hpb=9a4e163a8758563c04d36a72ee60669496530100;p=meviz.git diff --git a/src/main/java/eu/svjatoslav/meviz/htmlindexer/WebIndexer.java b/src/main/java/eu/svjatoslav/meviz/htmlindexer/WebIndexer.java index f659a35..7cf1d20 100644 --- a/src/main/java/eu/svjatoslav/meviz/htmlindexer/WebIndexer.java +++ b/src/main/java/eu/svjatoslav/meviz/htmlindexer/WebIndexer.java @@ -3,11 +3,12 @@ package eu.svjatoslav.meviz.htmlindexer; 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.commons.network.UrlParamEncoder; import eu.svjatoslav.meviz.htmlindexer.layouts.MixedLayout; import eu.svjatoslav.meviz.htmlindexer.metadata.Dimension; import eu.svjatoslav.meviz.htmlindexer.metadata.DirectoryMetadata; @@ -16,6 +17,7 @@ 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; @@ -24,16 +26,31 @@ public class WebIndexer extends AbstractIndexer { 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) { - return jspPath + context.getLocalUrl() + "/" - + UrlParamEncoder.encode(directory.fileName); + + 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 { + if (requestPath == null) + requestPath = ""; + if (requestPath.equals("/")) requestPath = ""; @@ -42,33 +59,43 @@ public class WebIndexer extends AbstractIndexer { requestPath); layout.init("Photos", context.getLocalPathComponents(), this, context); - final DirectoryMetadata metadata = getMetadataForPath(requestPath); + final DirectoryMetadata directory = getMetadataForPath(requestPath); - compileHtml(layout, metadata); + compileHtml(layout, directory); - return layout.getHtml(false, false); + return layout.getHtml(false, false, directory); } public DirectoryMetadata getMetadataForPath(final String requestPath) - throws IOException, MalformedURLException, ClassNotFoundException { + throws ClassNotFoundException, IOException { final StringBuffer urlStringBuffer = new StringBuffer(); urlStringBuffer.append(globalPrefix); - urlStringBuffer.append(UrlParamEncoder.encode(requestPath)); + urlStringBuffer.append(Utils.urlEncode(requestPath)); urlStringBuffer.append("/.thumbnails/metadata_6.dat"); final String urlString = urlStringBuffer.toString(); - final BufferedInputStream in = new BufferedInputStream(new URL( - urlString).openStream()); + IOException exception = null; + + for (int i = 0; i < METADATA_LOAD_TRY_COUNT; i++) + try { + + final BufferedInputStream in = new BufferedInputStream(new URL( + urlString).openStream()); + + final ObjectInputStream oin = new ObjectInputStream(in); + final DirectoryMetadata directory = (DirectoryMetadata) oin + .readObject(); + in.close(); - final ObjectInputStream oin = new ObjectInputStream(in); - final DirectoryMetadata directory = (DirectoryMetadata) oin - .readObject(); - in.close(); + return directory; + } catch (final IOException e) { + exception = e; + } - return directory; + throw exception; } @Override @@ -103,7 +130,7 @@ public class WebIndexer extends AbstractIndexer { return context.getGlobalUrl() + context.getLocalUrl() + "/" + Constants.THUMBNAILS_DIRECTORY_NAME + "/" - + UrlParamEncoder.encode(thumbnailFileName); + + Utils.urlEncode(thumbnailFileName); } }