Subversion Repositories general

Compare Revisions

Ignore whitespace Rev 1250 → Rev 1251

/PhotoAlbum/trunk/src/ak/photoalbum/config/ConfigRoot.java
8,21 → 8,32
{
private static final Logger logger = Logger.getLogger(ConfigRoot.class);
 
private List branches = new ArrayList();
private String defaultBranch;
private List branches = new ArrayList();
 
public ConfigRoot()
{
}
 
public void addBranch(ConfigBranch branch)
public String getDefaultBranch()
{
logger.info("add branch " + branch.getUri());
branches.add(branch);
return defaultBranch;
}
public void setDefaultBranch(String defaultBranch)
{
this.defaultBranch = defaultBranch;
}
 
public List getBranches()
{
return branches;
}
public void addBranch(ConfigBranch branch)
{
logger.info("add branch " + branch.getUri());
branches.add(branch);
}
}
 
/PhotoAlbum/trunk/src/ak/photoalbum/images/Thumbnailer.java
305,8 → 305,8
String mediumEnd = MEDIUM_SUFFIX + "." + format;
*/
 
File origin;
Map cache;
File origin = null;
Map cache = null;
 
if(file.getName().endsWith(SMALL_SUFFIX + "." + format)) {
origin = getOriginFile(file, SMALL_SUFFIX);
332,15 → 332,18
logger.debug("load cached dir " + file.getCanonicalPath()
+ " for " + origin.getCanonicalPath());
}
else if(file.getName().endsWith(DIR_PART_SUFFIX + "." + format)) {
if(logger.isDebugEnabled())
logger.debug("skip cached dir part " + file.getCanonicalPath());
}
else {
if(logger.isInfoEnabled())
logger.warn(
"unknown type of cached " + file.getCanonicalPath());
 
return;
}
 
loadCacheInfo(file, origin, cache);
if(origin != null && cache != null)
loadCacheInfo(file, origin, cache);
}
 
protected void loadCacheInfo(File file, File origin, Map cache)
/PhotoAlbum/trunk/src/ak/photoalbum/logic/Branch.java
2,6 → 2,8
 
import java.util.Comparator;
import java.util.Map;
import java.util.List;
import java.util.Iterator;
import java.util.Hashtable;
import java.io.File;
import java.io.IOException;
30,6 → 32,7
private Comparator fileNameComparator = new FileNameComparator(true);
private Map metaInfos = new Hashtable(); // <File, MetaInfo>
 
// FIXME use branch template
public Branch(ResourceFactory resourceFactory, ConfigBranch config)
throws IOException, LogicException
{
45,7 → 48,7
 
if(config.getThumbnailFormat() != null)
this.thumbnailer.setFormat(config.getThumbnailFormat());
/*
/* FIXME
if(smallWidth != null)
this.thumbnailer.setSmallWidth(smallWidth.intValue());
if(smallHeight != null)
57,13 → 60,53
*/
thumbnailer.setResizer(new ak.photoalbum.images.jiu.JiuResizer());
thumbnailer.setImagesFilter(this.imagesFilter);
/* thumbnailer.setDirTemplate(new File(dirTemplate));
thumbnailer.setDirTemplate(new File(config.getDirTemplate()));
thumbnailer.setDirThumbnailPositions(
parseThumbnailPositions(dirThumbnailPositions));*/
parseThumbnailPositions(config.getDirThumbnails()));
 
thumbnailer.startup();
}
 
private ThumbnailPosition[] parseThumbnailPositions(List configs)
{
ThumbnailPosition[] res = new ThumbnailPosition[configs.size()];
int count = 0;
 
for(Iterator i = configs.iterator(); i.hasNext(); ) {
ConfigDirThumbnail c = (ConfigDirThumbnail)i.next();
 
String horAlignStr = c.getAlign();
String vertAlignStr = c.getValign();
int horAlign;
int vertAlign;
 
if("lelf".equals(horAlignStr))
horAlign = ThumbnailPosition.ALIGN_HOR_LEFT;
else if("right".equals(horAlignStr))
horAlign = ThumbnailPosition.ALIGN_HOR_RIGHT;
else if("center".equals(horAlignStr))
horAlign = ThumbnailPosition.ALIGN_HOR_CENTER;
else
throw new RuntimeException(
"Cannot parse " + horAlignStr + " as horizontal alignment");
 
if("top".equals(vertAlignStr))
vertAlign = ThumbnailPosition.ALIGN_VERT_TOP;
else if("bottom".equals(vertAlignStr))
vertAlign = ThumbnailPosition.ALIGN_VERT_BOTTOM;
else if("center".equals(vertAlignStr))
vertAlign = ThumbnailPosition.ALIGN_VERT_CENTER;
else
throw new RuntimeException(
"Cannot parse " + vertAlignStr + " as vertical alignment");
 
res[count++] = new ThumbnailPosition(c.getLeft(), c.getTop(),
c.getWidth(), c.getHeight(), horAlign, vertAlign);
}
 
return res;
}
 
public String getUri()
{
return config.getUri();
/PhotoAlbum/trunk/src/ak/photoalbum/logic/Logic.java
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.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/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.addObjectCreate( "photos/branch", ConfigBranch.class);
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");
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");
*/
digester.addSetNext( "photos/branch", "addBranch");
 
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()