Browse Source

Added a controll to the commandline. Tweaked a few other portions of the code. Need to fix that part where everything is printed to the console when running AppCLI

master
Drew Short 11 years ago
parent
commit
df31c800d5
  1. 41
      src/main/java/com/sothr/imagetools/AppCLI.java
  2. 1
      src/main/java/com/sothr/imagetools/AppConfig.java
  3. 13
      src/main/scala/com/sothr/imagetools/Engine.scala
  4. 17
      src/main/scala/com/sothr/imagetools/image/ImageCache.scala
  5. 1
      src/main/scala/com/sothr/imagetools/util/PropertiesService.scala

41
src/main/java/com/sothr/imagetools/AppCLI.java

@ -1,7 +1,17 @@
package com.sothr.imagetools; package com.sothr.imagetools;
import com.sothr.imagetools.image.ImageCache;
import com.sothr.imagetools.image.SimilarImages;
import org.apache.commons.cli.BasicParser;
import org.apache.commons.cli.CommandLine;
import org.apache.commons.cli.CommandLineParser;
import org.apache.commons.cli.Options;
import org.apache.commons.cli.Option;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import scala.collection.immutable.List;
import java.text.ParseException;
/** /**
* CLI interface for Image Tools * CLI interface for Image Tools
@ -14,7 +24,36 @@ class AppCLI {
AppConfig.configureApp(); AppConfig.configureApp();
logger = LoggerFactory.getLogger(AppCLI.class); logger = LoggerFactory.getLogger(AppCLI.class);
logger.info("Started Image Tools CLI"); logger.info("Started Image Tools CLI");
System.out.println("Hello World");
try {
Options options = getOptions();
CommandLineParser parser = new BasicParser();
CommandLine cmd = parser.parse(options, args);
process(cmd);
} catch (Exception ex) {
logger.error("Unhandled exception in AppCLI", ex);
}
}
private static Options getOptions() {
Options options = new Options();
options.addOption(new Option("s", true, "scan directories for a list of similar images"));
return options;
}
private static void process(CommandLine cmd) {
//scan a comma separated list of paths to search for image similarities
Engine engine = new Engine(new ImageCache());
if (cmd.hasOption('s')) {
String scanList = cmd.getOptionValue('s');
String[] paths = scanList.split(",");
for (String path : paths) {
List<SimilarImages> similarImages = engine.getSimilarImagesForDirectory(path);
for (int index = 0; index < similarImages.length(); index++) {
SimilarImages similar = similarImages.apply(index);
System.out.println(similar.toString());
}
}
}
} }
} }

1
src/main/java/com/sothr/imagetools/AppConfig.java

@ -33,6 +33,7 @@ class AppConfig {
loadProperties(); loadProperties();
} }
configLogging(); configLogging();
logger.info("Detected Version: %s of Image Tools".format(PropertiesService.getVersion().toString()));
} }
public static void configSimpleLogging() { public static void configSimpleLogging() {

13
src/main/scala/com/sothr/imagetools/Engine.scala

@ -1,6 +1,6 @@
package com.sothr.imagetools package com.sothr.imagetools
import com.sothr.imagetools.image.{SimilarImages, ImageFilter, Image}
import com.sothr.imagetools.image.{ImageCache, SimilarImages, ImageFilter, Image}
import scala.collection.immutable import scala.collection.immutable
import scala.collection.mutable import scala.collection.mutable
import java.io.File import java.io.File
@ -9,7 +9,7 @@ import grizzled.slf4j.Logging
/** /**
* Created by drew on 1/26/14. * Created by drew on 1/26/14.
*/ */
class Engine extends Logging{
class Engine(var imageCache:ImageCache = new ImageCache()) extends Logging{
val imageFilter:ImageFilter = new ImageFilter() val imageFilter:ImageFilter = new ImageFilter()
@ -21,8 +21,12 @@ class Engine extends Logging{
val files = directory.listFiles(imageFilter) val files = directory.listFiles(imageFilter)
debug(s"Found ${files.length} files that are images in directory: $directoryPath") debug(s"Found ${files.length} files that are images in directory: $directoryPath")
for (file <- files) { for (file <- files) {
if (imageCache.contains(file.getAbsolutePath)) {
images += imageCache.get(file.getAbsolutePath)
} else {
images += ImageService.getImage(file) images += ImageService.getImage(file)
} }
}
} else { } else {
error(s"Provided path: $directoryPath is not a directory") error(s"Provided path: $directoryPath is not a directory")
} }
@ -32,10 +36,13 @@ class Engine extends Logging{
def getSimilarImagesForDirectory(directoryPath:String):List[SimilarImages] = { def getSimilarImagesForDirectory(directoryPath:String):List[SimilarImages] = {
debug(s"Looking for similar images in directory: $directoryPath") debug(s"Looking for similar images in directory: $directoryPath")
val images = getImagesForDirectory(directoryPath) val images = getImagesForDirectory(directoryPath)
info(s"Searching ${images.length} images for similarities")
val ignoreSet = new mutable.HashSet[Image]() val ignoreSet = new mutable.HashSet[Image]()
val allSimilarImages = new mutable.MutableList[SimilarImages]() val allSimilarImages = new mutable.MutableList[SimilarImages]()
var processedCount = 0
for (rootImage <- images) { for (rootImage <- images) {
if (!ignoreSet.contains(rootImage)) { if (!ignoreSet.contains(rootImage)) {
info(s"Processed ${processedCount}/${images.length - ignoreSet.size} About ${images.length - processedCount} images to go")
debug(s"Looking for images similar to: ${rootImage.imagePath}") debug(s"Looking for images similar to: ${rootImage.imagePath}")
ignoreSet += rootImage ignoreSet += rootImage
val similarImages = new mutable.MutableList[Image]() val similarImages = new mutable.MutableList[Image]()
@ -53,9 +60,9 @@ class Engine extends Logging{
debug(s"Found similar images: ${similar.toString}") debug(s"Found similar images: ${similar.toString}")
allSimilarImages += similar allSimilarImages += similar
} }
processedCount += 1
} }
} }
allSimilarImages.toList allSimilarImages.toList
} }
} }

17
src/main/scala/com/sothr/imagetools/image/ImageCache.scala

@ -0,0 +1,17 @@
package com.sothr.imagetools.image
import scala.collection.mutable
/**
* Created by drew on 1/26/14.
*/
class ImageCache {
private val cache = new mutable.HashMap[String, Image]()
def contains(imagePath:String) = cache.contains(imagePath)
def get(imagePath:String) = cache(imagePath)
def add(imagePath:String, image:Image) = cache.put(imagePath,image)
def size:Int = cache.size
}

1
src/main/scala/com/sothr/imagetools/util/PropertiesService.scala

@ -12,6 +12,7 @@ object PropertiesService extends Logging {
private val properties:Properties = new Properties() private val properties:Properties = new Properties()
private var version:Version = null private var version:Version = null
def getVersion:Version = this.version
private val propertiesToClean:Array[String] = Array("version") private val propertiesToClean:Array[String] = Array("version")
/* /*

Loading…
Cancel
Save