numass-framework/numass-main/src/main/java/inr/numass/Main.java

179 lines
6.3 KiB
Java
Raw Normal View History

2015-12-18 16:20:47 +03:00
/*
* Copyright 2015 Alexander Nozik.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package inr.numass;
2016-03-27 20:40:50 +03:00
import hep.dataforge.actions.ActionUtils;
2015-12-18 16:20:47 +03:00
import hep.dataforge.context.Context;
2016-03-21 15:29:31 +03:00
import hep.dataforge.data.FileDataFactory;
2015-12-18 16:20:47 +03:00
import hep.dataforge.io.IOManager;
2016-03-21 15:29:31 +03:00
import hep.dataforge.io.MetaFileReader;
import hep.dataforge.meta.Meta;
import org.apache.commons.cli.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.swing.*;
import javax.swing.filechooser.FileFilter;
import javax.swing.filechooser.FileNameExtensionFilter;
2015-12-18 16:20:47 +03:00
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Locale;
import static hep.dataforge.context.GlobalContext.out;
import static inr.numass.Numass.printDescription;
2016-05-31 20:05:15 +03:00
import static java.util.Locale.setDefault;
2015-12-18 16:20:47 +03:00
/**
*
*/
public class Main {
public static void main(String[] args) throws Exception {
setDefault(Locale.US);
2016-07-30 19:24:49 +03:00
Context context = Numass.buildContext();
2015-12-18 16:20:47 +03:00
run(context, args);
}
@SuppressWarnings("deprecation")
2016-07-30 19:24:49 +03:00
public static void run(Context context, String[] args) throws Exception {
2015-12-18 16:20:47 +03:00
Logger logger = LoggerFactory.getLogger("numass-main");
Options options = prepareOptions();
2015-12-21 16:40:21 +03:00
CommandLineParser parser = new DefaultParser();
2015-12-18 16:20:47 +03:00
CommandLine line;
try {
// parse the command line arguments
line = parser.parse(options, args);
} catch (ParseException exp) {
// oops, something went wrong
logger.error("Command line error. Reason: " + exp.getMessage());
2016-04-02 21:08:37 +03:00
return;
2015-12-18 16:20:47 +03:00
}
if (line.hasOption("lc")) {
printDescription(context, true);
2016-04-02 21:08:37 +03:00
return;
2015-12-18 16:20:47 +03:00
} else if (line.hasOption("l")) {
printDescription(context, false);
2016-04-02 21:08:37 +03:00
return;
2015-12-18 16:20:47 +03:00
}
String cfgPath;
if (args.length == 0) {
HelpFormatter formatter = new HelpFormatter();
formatter.printHelp("java -jar DataReader.jar [OPTIONS]", options);
out().println("Trying to use default config location...");
}
if (line.hasOption("c")) {
cfgPath = line.getOptionValue("c");
if (cfgPath == null) {
logger.info("Configutation path not provided.");
2016-04-02 21:08:37 +03:00
return;
2015-12-18 16:20:47 +03:00
}
2016-03-21 15:29:31 +03:00
File configFile = context.io().getFile(cfgPath);
2015-12-18 16:20:47 +03:00
2016-03-21 15:29:31 +03:00
if (!configFile.exists()) {
2015-12-18 16:20:47 +03:00
throw new FileNotFoundException("Configuration file not found");
}
2016-04-02 21:08:37 +03:00
2016-03-21 15:29:31 +03:00
Meta config = MetaFileReader.read(configFile).build();
2015-12-18 16:20:47 +03:00
2016-03-21 15:29:31 +03:00
context.putValue(IOManager.ROOT_DIRECTORY_CONTEXT_KEY, configFile.getParentFile().toString());
2015-12-18 16:20:47 +03:00
applyCLItoContext(line, context);
2016-04-02 21:08:37 +03:00
ActionUtils.runConfig(context, config);
2015-12-18 16:20:47 +03:00
}
}
public static void applyCLItoContext(CommandLine line, Context context) throws FileNotFoundException {
File workDir = new File(context.getString(IOManager.ROOT_DIRECTORY_CONTEXT_KEY));
if (line.hasOption("h")) {
workDir = new File(line.getOptionValue("h"));
context.putValue(IOManager.ROOT_DIRECTORY_CONTEXT_KEY, workDir.toString());
}
if (line.hasOption("d")) {
String dataPath = line.getOptionValue("d");
File dataDir = new File(dataPath);
if (!dataDir.isAbsolute()) {
dataDir = new File(workDir, dataPath);
}
if (dataDir.exists() && dataDir.isDirectory()) {
2016-03-21 15:29:31 +03:00
context.putValue(FileDataFactory.DATA_DIR_KEY, dataDir.getAbsolutePath());
2015-12-18 16:20:47 +03:00
} else {
throw new FileNotFoundException("Data directory not found");
}
}
if (line.hasOption("o")) {
String outPath = line.getOptionValue("o");
File outDir = new File(outPath);
if (!outDir.isAbsolute()) {
outDir = new File(workDir, outPath);
}
if (!outDir.exists()) {
outDir.mkdirs();
}
context.putValue(NumassIO.NUMASS_OUTPUT_CONTEXT_KEY, outDir.toString());
}
}
private static Options prepareOptions() {
Options options = new Options();
options.addOption("c", "config", true, "Configuration file path. "
+ "If this option is not present, than workbench is launched and all other parameters are ignored.");
options.addOption("h", "home", true,
"Working directory (by default the working directory is the directory where config file is placed)");
options.addOption("d", "data", true, "Data directory (absolute or relative to working directory)");
options.addOption("o", "onComplete", true, "Output directory (absolute or relative to working directory)");
2015-12-18 16:20:47 +03:00
options.addOption("l", "list", false, "List of available actions");
options.addOption("lc", "list-color", false, "List of available actions with ANSI coloring");
return options;
}
private static String getFilePathFromDialog(String homeDir) throws FileNotFoundException {
//TODO переместить в IOManager
JFrame frame = new JFrame("Chose a configuration file");
JFileChooser fc = new JFileChooser(homeDir);
FileFilter xmlFilter = new FileNameExtensionFilter("XML files", "XML", "xml");
// fc.addChoosableFileFilter(xmlFilter);
fc.setFileFilter(xmlFilter);
int returnVal = fc.showOpenDialog(frame);
File file;
if (returnVal == JFileChooser.APPROVE_OPTION) {
file = fc.getSelectedFile();
frame.dispose();
return file.getAbsolutePath();
} else {
frame.dispose();
return null;
}
}
}