Java tutorial
/** * Title: Force Field X. * * Description: Force Field X - Software for Molecular Biophysics. * * Copyright: Copyright (c) Michael J. Schnieders 2001-2017. * * This file is part of Force Field X. * * Force Field X is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 3 as published by * the Free Software Foundation. * * Force Field X is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more * details. * * You should have received a copy of the GNU General Public License along with * Force Field X; if not, write to the Free Software Foundation, Inc., 59 Temple * Place, Suite 330, Boston, MA 02111-1307 USA * * Linking this library statically or dynamically with other modules is making a * combined work based on this library. Thus, the terms and conditions of the * GNU General Public License cover the whole combination. * * As a special exception, the copyright holders of this library give you * permission to link this library with independent modules to produce an * executable, regardless of the license terms of these independent modules, and * to copy and distribute the resulting executable under terms of your choice, * provided that you also meet, for each linked independent module, the terms * and conditions of the license of that module. An independent module is a * module which is not derived from or based on this library. If you modify this * library, you may extend this exception to your version of the library, but * you are not obligated to do so. If you do not wish to do so, delete this * exception statement from your version. */ package ffx; import java.io.File; import java.net.URL; import java.util.List; import java.util.logging.Level; import java.util.logging.Logger; import static java.lang.String.format; import org.apache.commons.lang3.builder.ToStringBuilder; import org.apache.commons.lang3.time.StopWatch; import ffx.ui.LogHandler; import ffx.ui.MainPanel; /** * The HeadlessMain class is the entry point to the command line version of * Force Field X. * * @author Michael J. Schnieders * @since 1.0 * */ public class HeadlessMain { private static final Logger logger = Logger.getLogger(HeadlessMain.class.getName()); /** * Complete initializations. * * @param commandLineFile a {@link java.io.File} object. * @param argList a {@link java.util.List} object. * @param logHandler a {@link ffx.ui.LogHandler} object. */ public HeadlessMain(File commandLineFile, List<String> argList, LogHandler logHandler) { // Start a timer. stopWatch.start(); // Construct the MainPanel, set it's LogHandler, and initialize then it. mainPanel = new MainPanel(); logHandler.setMainPanel(mainPanel); mainPanel.initialize(); // Open the supplied script file. if (commandLineFile != null) { if (!commandLineFile.exists()) { /** * See if the commandLineFile is an embedded script. */ String name = commandLineFile.getName(); name = name.replace('.', '/'); String pathName = "ffx/scripts/" + name; ClassLoader loader = getClass().getClassLoader(); URL embeddedScript = loader.getResource(pathName + ".ffx"); if (embeddedScript == null) { embeddedScript = loader.getResource(pathName + ".groovy"); } if (embeddedScript != null) { try { commandLineFile = new File(FFXClassLoader.copyInputStreamToTmpFile( embeddedScript.openStream(), commandLineFile.getName(), ".ffx")); } catch (Exception e) { logger.warning("Exception extracting embedded script " + embeddedScript.toString() + "\n" + e.toString()); } } } if (commandLineFile.exists()) { mainPanel.getModelingShell().setArgList(argList); mainPanel.open(commandLineFile, null); } else { logger.warning(format("%s was not found.", commandLineFile.toString())); } } /** * Print start-up information. */ if (logger.isLoggable(Level.FINE)) { StringBuilder sb = new StringBuilder(); sb.append(format("\n Start-up Time (msec): %s.", stopWatch.getTime())); Runtime runtime = Runtime.getRuntime(); runtime.runFinalization(); runtime.gc(); long occupiedMemory = runtime.totalMemory() - runtime.freeMemory(); long KB = 1024; sb.append(format("\n In-Use Memory (Kb): %d", occupiedMemory / KB)); sb.append(format("\n Free Memory (Kb): %d", runtime.freeMemory() / KB)); sb.append(format("\n Total Memory (Kb): %d", runtime.totalMemory() / KB)); logger.fine(sb.toString()); } } /** * {@inheritDoc} * * Commons.Lang Style toString. */ @Override public String toString() { ToStringBuilder toStringBuilder = new ToStringBuilder(this).append("Up Time: " + stopWatch) .append("Logger: " + logger.getName()); return toStringBuilder.toString(); } /** * This is the main application container for both the GUI and CLI. */ public MainPanel mainPanel; /** * Constant <code>stopWatch</code> */ public static StopWatch stopWatch = new StopWatch(); }