/*
* #%L
* Bio-Formats command line tools for reading and converting files
* %%
* Copyright (C) 2005 - 2015 Open Microscopy Environment:
* - Board of Regents of the University of Wisconsin-Madison
* - Glencoe Software, Inc.
* - University of Dundee
* %%
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
* #L%
*/
package loci.formats.tools;
import loci.common.DebugTools;
import loci.common.Location;
import loci.formats.FormatHandler;
import loci.formats.ResourceNamer;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* ImageFaker is a wrapper class for invoking methods in {@link FakeImage}.
*
* @author Blazej Pindelski, bpindelski at dundee.ac.uk
* @since 5.0
*/
public class ImageFaker {
private static final Logger LOGGER = LoggerFactory
.getLogger(ImageFaker.class);
private String targetDirectoryPath;
private int plates = 1;
private int plateAcquisitions = 1;
private int rows = 1;
private int columns = 1;
private int fields = 1;
public boolean parseArgs(String[] args) {
if (args == null || args.length == 0) {
return false;
}
for (int i = 0; i < args.length; i++) {
if (args[i].charAt(0) == '-') {
if (args[i].equals("-plates")) {
plates = Integer.parseInt(args[++i]);
} else if (args[i].equals("-runs")) {
plateAcquisitions = Integer.parseInt(args[++i]);
} else if (args[i].equals("-rows")) {
rows = Integer.parseInt(args[++i]);
} else if (args[i].equals("-columns")) {
columns = Integer.parseInt(args[++i]);
} else if (args[i].equals("-fields")) {
fields = Integer.parseInt(args[++i]);
} else if (args[i].equals("-debug")) {
DebugTools.enableLogging("DEBUG");
}
} else {
if (targetDirectoryPath == null) {
targetDirectoryPath = args[i];
} else {
LOGGER.error("Found unknown argument: {}; exiting.", args[i]);
return false;
}
}
}
return true;
}
public void printUsage() {
String[] s = { "To generate a fake file / dir structure, run:",
" mkfake path [-plates] [-runs] [-rows] [-columns] ",
" [-fields] [-debug]", "",
" path: the top-level directory for the SPW structure",
" -plates: number of plates (default: 1)",
" -runs: number of plate runs (acquisitions) (default: 1)",
" -rows: number of rows in a plate (default: 1)",
" -columns: number of columns in a plate (default: 1)",
" -fields: number of fields in a plate (default: 1)",
" -debug: turn on debugging output", "" };
for (int i = 0; i < s.length; i++) {
LOGGER.info(s[i]);
}
}
public boolean fakeScreen(String[] args) {
DebugTools.enableLogging("INFO");
boolean validArgs = parseArgs(args);
if (!validArgs || targetDirectoryPath == null) {
printUsage();
return false;
}
// make sure that we don't end up with just a ".fake" directory
if (new Location(targetDirectoryPath).exists()) {
Location p = new Location(targetDirectoryPath, "screen.fake");
int index = 1;
while (p.exists()) {
p = new Location(targetDirectoryPath, "screen" + index + ".fake");
index++;
}
targetDirectoryPath = p.getAbsolutePath();
}
Location directoryRoot;
if (!FormatHandler.checkSuffix(targetDirectoryPath,
ResourceNamer.FAKE_EXT)) {
directoryRoot = new Location(targetDirectoryPath + ResourceNamer.DOT
+ ResourceNamer.FAKE_EXT);
} else {
directoryRoot = new Location(targetDirectoryPath);
}
FakeImage fake = new FakeImage(directoryRoot);
fake.generateScreen(plates, plateAcquisitions, rows, columns, fields);
return true;
}
public static void main(String[] args) throws Exception {
if (!new ImageFaker().fakeScreen(args)) {
System.exit(1);
}
}
}