minor fixes related to path construction
[meviz.git] / src / main / java / eu / svjatoslav / meviz / htmlindexer / WebIndexer.java
1 package eu.svjatoslav.meviz.htmlindexer;
2
3 import java.io.BufferedInputStream;
4 import java.io.IOException;
5 import java.io.ObjectInputStream;
6 import java.net.MalformedURLException;
7 import java.net.URL;
8 import java.util.List;
9
10 import eu.svjatoslav.commons.network.UrlParamEncoder;
11 import eu.svjatoslav.meviz.htmlindexer.layouts.MixedLayout;
12 import eu.svjatoslav.meviz.htmlindexer.metadata.Dimension;
13 import eu.svjatoslav.meviz.htmlindexer.metadata.DirectoryMetadata;
14 import eu.svjatoslav.meviz.htmlindexer.metadata.fileTypes.AbstractFile;
15 import eu.svjatoslav.meviz.htmlindexer.metadata.fileTypes.Picture;
16
17 public class WebIndexer extends AbstractIndexer {
18
19         private final String globalPrefix;
20         private final String jspPath;
21
22         public WebIndexer(final String globalPrefix, final String jspPath) {
23                 this.globalPrefix = globalPrefix;
24                 this.jspPath = jspPath;
25         }
26
27         @Override
28         public String getDirectoryUrl(final AbstractFile directory,
29                         final IndexingContext context) {
30                 return jspPath + context.getLocalUrl() + "/"
31                                 + UrlParamEncoder.encode(directory.fileName);
32         }
33
34         public String getHtml(String requestPath) throws MalformedURLException,
35                         IOException, ClassNotFoundException {
36
37                 if (requestPath.equals("/"))
38                         requestPath = "";
39
40                 final MixedLayout layout = new MixedLayout();
41                 final IndexingContext context = new IndexingContext(globalPrefix,
42                                 requestPath);
43                 layout.init("Photos", context.getLocalPathComponents(), this, context);
44
45                 final DirectoryMetadata metadata = getMetadataForPath(requestPath);
46
47                 compileHtml(layout, metadata);
48
49                 return layout.getHtml(false, false);
50         }
51
52         public DirectoryMetadata getMetadataForPath(final String requestPath)
53                         throws IOException, MalformedURLException, ClassNotFoundException {
54
55                 final StringBuffer urlStringBuffer = new StringBuffer();
56
57                 urlStringBuffer.append(globalPrefix);
58                 urlStringBuffer.append(UrlParamEncoder.encode(requestPath));
59                 urlStringBuffer.append("/.thumbnails/metadata_6.dat");
60
61                 final String urlString = urlStringBuffer.toString();
62
63                 final BufferedInputStream in = new BufferedInputStream(new URL(
64                                 urlString).openStream());
65
66                 final ObjectInputStream oin = new ObjectInputStream(in);
67                 final DirectoryMetadata directory = (DirectoryMetadata) oin
68                                 .readObject();
69                 in.close();
70
71                 return directory;
72         }
73
74         @Override
75         public String getParentDirectoryUrl(final IndexingContext context) {
76                 final StringBuffer result = new StringBuffer();
77
78                 result.append(jspPath);
79
80                 final List<String> components = context.getLocalPathComponents();
81
82                 for (final String pathComponent : components.subList(0,
83                                 components.size() - 1)) {
84                         result.append("/");
85                         result.append(pathComponent);
86                 }
87
88                 return result.toString();
89         }
90
91         @Override
92         public String getThumbnailUrl(final Picture picture,
93                         final Dimension desiredDimension, final IndexingContext context) {
94
95                 // in case thumbnail size was equal to original, then return original
96                 // file path
97                 if (picture.getDimensions().equals(desiredDimension))
98                         return context.getGlobalUrl() + context.getLocalUrl() + "/"
99                                         + picture.fileName;
100
101                 final String thumbnailFileName = picture
102                                 .getRelativeThumbnailFileName(desiredDimension);
103
104                 return context.getGlobalUrl() + context.getLocalUrl() + "/"
105                                 + Constants.THUMBNAILS_DIRECTORY_NAME + "/"
106                                 + UrlParamEncoder.encode(thumbnailFileName);
107         }
108
109 }