3,7 → 3,6 |
import java.util.List; |
import java.util.ArrayList; |
import java.util.Arrays; |
import java.util.StringTokenizer; |
import java.util.Map; |
import java.util.Hashtable; |
import java.util.Iterator; |
20,8 → 19,6 |
import org.apache.commons.digester.Digester; |
import org.apache.log4j.Logger; |
|
import ak.photoalbum.images.Thumbnailer; |
import ak.photoalbum.images.ThumbnailPosition; |
import ak.photoalbum.util.FileUtils; |
import ak.photoalbum.util.ResourceFactory; |
import ak.photoalbum.config.ConfigRoot; |
46,47 → 43,33 |
|
protected Digester createConfigDigester() |
{ |
/* |
4 <uri>children</uri> |
5 <images-root>/home/data/photos</images-root> |
6 <cache-dir>/home/data/photos/.cache</cache-dir> |
7 <thumbnail-format>jpg</thumbnail-format> |
8 <columns>6</columns> |
9 <rows>5</rows> |
10 <images-mask>*.jpeg</images-mask> |
11 <images-mask>*.jpg</images-mask> |
12 <dir-thumbnail> |
13 <template>images/dir_template.gif</template> |
14 <thumbnail> |
15 <left>5</left> |
16 <top>9</top> |
17 <width>40</width> |
18 <height>40</height> |
19 <align>center</align> |
20 <valign>center</valign> |
*/ |
Digester digester = new Digester(); |
digester.setValidating(false); |
|
digester.addObjectCreate("photos", ConfigRoot.class); |
digester.addBeanPropertySetter("photos/default-branch", "defaultBranch"); |
|
digester.addObjectCreate("photos/branch", ConfigBranch.class); |
digester.addBeanPropertySetter("photos/branch/uri", "uri"); |
digester.addBeanPropertySetter("photos/branch/uri"); |
digester.addBeanPropertySetter("photos/branch/images-root", "imagesRoot"); |
digester.addBeanPropertySetter("photos/branch/cache-dir", "cacheDir"); |
digester.addBeanPropertySetter("photos/branch/thumbnail-format", "thumbnailFormat"); |
digester.addBeanPropertySetter("photos/branch/columns", "columns"); |
digester.addBeanPropertySetter("photos/branch/rows", "rows"); |
digester.addBeanPropertySetter("photos/branch/columns"); |
digester.addBeanPropertySetter("photos/branch/rows"); |
digester.addCallMethod( "photos/branch/images-mask", "addImagesMask", |
0, new Class[] { String.class }); |
digester.addBeanPropertySetter("photos/branch/dir-thumbnail/template", "dirTemplate"); |
|
// FIXME images-mask |
digester.addObjectCreate( "photos/branch/dir-thumbnail/thumbnail", ConfigDirThumbnail.class); |
digester.addBeanPropertySetter("photos/branch/dir-thumbnail/thumbnail/left"); |
digester.addBeanPropertySetter("photos/branch/dir-thumbnail/thumbnail/top"); |
digester.addBeanPropertySetter("photos/branch/dir-thumbnail/thumbnail/width"); |
digester.addBeanPropertySetter("photos/branch/dir-thumbnail/thumbnail/height"); |
digester.addBeanPropertySetter("photos/branch/dir-thumbnail/thumbnail/align"); |
digester.addBeanPropertySetter("photos/branch/dir-thumbnail/thumbnail/valign"); |
|
digester.addSetNext("photos/branch", "addBranch"); |
/* digester.addBeanPropertySetter("meta/item/subtitle", "subtitle"); |
digester.addSetProperties("meta/item/subtitle", "mime", "subtitleMime"); |
digester.addBeanPropertySetter("meta/item/comment", "comment"); |
digester.addSetProperties("meta/item/comment", "mime", "commentMime"); |
digester.addSetNext("photos/branch", "addItem"); |
*/ |
|
return digester; |
} |
|
124,12 → 107,24 |
} |
|
public Branch getBranch(String uri) |
throws LogicException |
{ |
return (Branch)branches.get(uri); |
if(uri == null || uri.equals("")) { |
uri = config.getDefaultBranch(); |
if(uri == null) |
throw new LogicException("No default branch configured"); |
} |
|
Branch branch = (Branch)branches.get(uri); |
|
if(branch == null) |
throw new LogicException("Branch not found"); |
|
return branch; |
} |
|
public void buildCache(String uri) |
throws IOException |
throws IOException, LogicException |
{ |
getBranch(uri).getThumbnailer().buildCache(); |
} |
209,6 → 204,7 |
} |
|
public String getThumbnailMime(String uri) |
throws LogicException |
{ |
return getBranch(uri).getThumbnailer().getMime(); |
} |
403,54 → 399,6 |
return path.substring(rootPath.length()); |
} |
|
protected ThumbnailPosition[] parseThumbnailPositions(String str) |
{ |
List list = new ArrayList(); |
StringTokenizer tokenizer = new StringTokenizer(str, ";"); |
|
while(tokenizer.hasMoreTokens()) { |
StringTokenizer tokenParser |
= new StringTokenizer(tokenizer.nextToken(), ","); |
int x = Integer.parseInt(tokenParser.nextToken().trim()); |
int y = Integer.parseInt(tokenParser.nextToken().trim()); |
int width = Integer.parseInt(tokenParser.nextToken().trim()); |
int height = Integer.parseInt(tokenParser.nextToken().trim()); |
String horAlignStr = tokenParser.nextToken().trim().toLowerCase(); |
String vertAlignStr = tokenParser.nextToken().trim().toLowerCase(); |
int horAlign; |
int vertAlign; |
|
if("l".equals(horAlignStr)) |
horAlign = ThumbnailPosition.ALIGN_HOR_LEFT; |
else if("r".equals(horAlignStr)) |
horAlign = ThumbnailPosition.ALIGN_HOR_RIGHT; |
else if("c".equals(horAlignStr)) |
horAlign = ThumbnailPosition.ALIGN_HOR_CENTER; |
else |
throw new RuntimeException( |
"Cannot parse " + horAlignStr + " as horizontal alignment"); |
|
if("t".equals(vertAlignStr)) |
vertAlign = ThumbnailPosition.ALIGN_VERT_TOP; |
else if("b".equals(vertAlignStr)) |
vertAlign = ThumbnailPosition.ALIGN_VERT_BOTTOM; |
else if("c".equals(vertAlignStr)) |
vertAlign = ThumbnailPosition.ALIGN_VERT_CENTER; |
else |
throw new RuntimeException( |
"Cannot parse " + vertAlignStr + " as vertical alignment"); |
|
list.add(new ThumbnailPosition(x, y, width, height, horAlign, vertAlign)); |
} |
|
ThumbnailPosition[] res = new ThumbnailPosition[list.size()]; |
|
for(int i = 0; i < res.length; i++) |
res[i] = (ThumbnailPosition)list.get(i); |
|
return res; |
} |
|
protected static final Logic instance = new Logic(); |
|
public static Logic getLogic() |