package org.springframework.samples.imagedb.standalone;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.Iterator;
import java.util.List;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;
import org.springframework.samples.imagedb.ImageDatabase;
import org.springframework.samples.imagedb.ImageDescriptor;
import org.springframework.util.StopWatch;
/**
* Standalone sample that simply lists the image descriptors in the database.
*
* <p>Accesses the very same "WEB-INF/applicationContext.xml" file as the web
* application. Needs to be executed in the web app root directory (that is,
* with the web app root directory as JVM working directory).
*
* <p>Takes an optional command line argument that specifies the number of
* calls to initiate for each image, a la "StandaloneImageTool 5". Can be
* used to get a rough performance impression.
*
* @author Juergen Hoeller
* @since 08.01.2004
*/
public class StandaloneImageTool {
public static final String CONTEXT_CONFIG_LOCATION = "WEB-INF/applicationContext.xml";
private final ImageDatabase imageDatabase;
public StandaloneImageTool(ImageDatabase imageDatabase) {
this.imageDatabase = imageDatabase;
}
public void listImages(int nrOfCalls) throws IOException {
List images = this.imageDatabase.getImages();
StopWatch stopWatch = new StopWatch();
for (Iterator it = images.iterator(); it.hasNext();) {
ImageDescriptor image = (ImageDescriptor) it.next();
stopWatch.start(image.getName());
ByteArrayOutputStream os = null;
for (int i = 0; i < nrOfCalls; i++) {
os = new ByteArrayOutputStream();
this.imageDatabase.streamImage(image.getName(), os);
}
stopWatch.stop();
System.out.println("Found image '" + image.getName() + "' with content size " + os.size() +
" and description length " + image.getDescriptionLength());
}
System.out.println(stopWatch.prettyPrint());
}
public static void main(String[] args) throws IOException {
int nrOfCalls = 1;
if (args.length > 1 && !"".equals(args[1])) {
nrOfCalls = Integer.parseInt(args[1]);
}
ApplicationContext context = new FileSystemXmlApplicationContext(CONTEXT_CONFIG_LOCATION);
ImageDatabase idb = (ImageDatabase) context.getBean("imageDatabase");
StandaloneImageTool tool = new StandaloneImageTool(idb);
tool.listImages(nrOfCalls);
}
}