1 package eu.svjatoslav.meviz.htmlindexer;
3 import java.io.BufferedInputStream;
4 import java.io.IOException;
5 import java.io.ObjectInputStream;
6 import java.io.UnsupportedEncodingException;
7 import java.net.MalformedURLException;
9 import java.net.URLEncoder;
10 import java.util.List;
12 import eu.svjatoslav.commons.network.UrlParamEncoder;
13 import eu.svjatoslav.meviz.htmlindexer.layouts.MixedLayout;
14 import eu.svjatoslav.meviz.htmlindexer.metadata.Dimension;
15 import eu.svjatoslav.meviz.htmlindexer.metadata.DirectoryMetadata;
16 import eu.svjatoslav.meviz.htmlindexer.metadata.fileTypes.AbstractFile;
17 import eu.svjatoslav.meviz.htmlindexer.metadata.fileTypes.Picture;
19 public class WebIndexer extends AbstractIndexer {
21 private static final int METADATA_LOAD_TRY_COUNT = 10;
22 private final String globalPrefix;
23 private final String jspPath;
25 public WebIndexer(final String globalPrefix, final String jspPath) {
26 this.globalPrefix = globalPrefix;
27 this.jspPath = jspPath;
31 public void compileHtml(final Layout layout,
32 final DirectoryMetadata directory)
33 throws UnsupportedEncodingException {
34 super.compileHtml(layout, directory);
38 public String getDirectoryUrl(final AbstractFile directory,
39 final IndexingContext context) {
42 return jspPath + context.getLocalUrl() + "/"
43 + URLEncoder.encode(directory.fileName, "UTF-8");
44 } catch (final UnsupportedEncodingException e) {
45 throw new RuntimeException(e);
49 public String getHtml(String requestPath) throws MalformedURLException,
50 IOException, ClassNotFoundException {
52 if (requestPath == null)
55 if (requestPath.equals("/"))
58 final MixedLayout layout = new MixedLayout();
59 final IndexingContext context = new IndexingContext(globalPrefix,
61 layout.init("Photos", context.getLocalPathComponents(), this, context);
63 final DirectoryMetadata directory = getMetadataForPath(requestPath);
65 compileHtml(layout, directory);
67 return layout.getHtml(false, false, directory);
70 public DirectoryMetadata getMetadataForPath(final String requestPath)
71 throws ClassNotFoundException, IOException {
73 final StringBuffer urlStringBuffer = new StringBuffer();
75 urlStringBuffer.append(globalPrefix);
76 urlStringBuffer.append(UrlParamEncoder.encode(requestPath));
77 urlStringBuffer.append("/.thumbnails/metadata_6.dat");
79 final String urlString = urlStringBuffer.toString();
81 IOException exception = null;
83 for (int i = 0; i < METADATA_LOAD_TRY_COUNT; i++)
86 final BufferedInputStream in = new BufferedInputStream(new URL(
87 urlString).openStream());
89 final ObjectInputStream oin = new ObjectInputStream(in);
90 final DirectoryMetadata directory = (DirectoryMetadata) oin
95 } catch (final IOException e) {
103 public String getParentDirectoryUrl(final IndexingContext context) {
104 final StringBuffer result = new StringBuffer();
106 result.append(jspPath);
108 final List<String> components = context.getLocalPathComponents();
110 for (final String pathComponent : components.subList(0,
111 components.size() - 1)) {
113 result.append(pathComponent);
116 return result.toString();
120 public String getThumbnailUrl(final Picture picture,
121 final Dimension desiredDimension, final IndexingContext context) {
123 // in case thumbnail size was equal to original, then return original
125 if (picture.getDimensions().equals(desiredDimension))
126 return context.getGlobalUrl() + context.getLocalUrl() + "/"
129 final String thumbnailFileName = picture
130 .getRelativeThumbnailFileName(desiredDimension);
132 return context.getGlobalUrl() + context.getLocalUrl() + "/"
133 + Constants.THUMBNAILS_DIRECTORY_NAME + "/"
134 + UrlParamEncoder.encode(thumbnailFileName);