/* * Copyright (C) 2010-2014 Andreas Maier * CONRAD is developed as an Open Source project under the GNU General Public License (GPL). */ package edu.stanford.rsl.conrad.utils; import java.util.ArrayList; import javax.swing.JOptionPane; import edu.stanford.rsl.conrad.numerics.SimpleVector; import edu.stanford.rsl.conrad.phantom.AnalyticPhantom; import edu.stanford.rsl.conrad.physics.EnergyDependentCoefficients.Material; /** * Class for obtaining information from the user easily. * * @author akmaier * */ public abstract class UserUtil { /** * Queries the User for an Integer value using Swing. * @param message * @param initialValue * @return the chosen int * @throws Exception */ public static int queryInt(String message, int initialValue) throws Exception{ String input = JOptionPane.showInputDialog(message, "" + initialValue); if (input == null) throw new Exception("Selection aborted"); return Integer.parseInt(input); } /** * Queries the User for a Double values using Swing. * @param message * @param initialValue * @return the chosen double * @throws Exception */ public static double queryDouble(String message, double initialValue) throws Exception{ String input = JOptionPane.showInputDialog(message, "" + initialValue); if (input == null) throw new Exception("Selection aborted"); return Double.parseDouble(input); } /** * Queries the User for a Double array using Swing. * @param message * @param initialValue * @return the chosen double array * @throws Exception */ public static double[] queryArray(String message, double[] initialValue) throws Exception{ String input = JOptionPane.showInputDialog(message, "" + new SimpleVector(initialValue).toString()); if (input == null) throw new Exception("Selection aborted"); return (new SimpleVector(input)).copyAsDoubleArray(); } /** * Queries the User for a String value. * @param message * @param initialValue * @return the user input * @throws Exception */ public static String queryString(String message, String initialValue) throws Exception{ String input = JOptionPane.showInputDialog(message, "" + initialValue); if (input == null) throw new Exception("Selection aborted"); return input; } /** * Queries the user for a Material. * @param message * @param messageTitle * @return the chosen Material * @throws Exception */ public static Material queryMaterial(String message, String messageTitle) throws Exception{ Material [] materials = Material.values(); return (Material) chooseObject(message, messageTitle, materials, materials[0]); } /** * Queries the user for a Phantom. * @param message * @param messageTitle * @return the chosen Phantom * @throws Exception */ public static AnalyticPhantom queryPhantom(String message, String messageTitle) throws Exception{ AnalyticPhantom [] materials = AnalyticPhantom.getAnalyticPhantoms(); return (AnalyticPhantom) chooseObject(message, messageTitle, materials, materials[0]); } /** * Queries the user for an Object that can be casted onto the Class cl. * Here we parse the source tree and identify all objects that are sub classes of cl. * Next, the subclasses are created using the default constructor. * Only objects that can be created this way are listed. Very convenient way to ask to user for * an instance of a certain class. * @param message the message * @param title the title of the message box * @param cl the super class * @return one instance of the a sub class of class * @throws Exception may happen. */ public static Object queryObject (String message, String title, Class<? extends Object> cl) throws Exception{ ArrayList<Object> list = CONRAD.getInstancesFromConrad(cl); Object[] obj = new Object[list.size()]; list.toArray(obj); return chooseObject(message, title, obj, obj[0]); } /** * Queries the User for a Boolean value. * @param message * @return the chosen boolean * @throws Exception */ public static boolean queryBoolean(String message) throws Exception{ int revan = JOptionPane.showConfirmDialog(null, message); return (revan == JOptionPane.YES_OPTION); } /** * Asks the User to select an Object from a given array of Objects. * @param message * @param messageTitle * @param objects * @param initialObject * @return the chosen object * @throws Exception */ public static Object chooseObject(String message, String messageTitle, Object [] objects, Object initialObject) throws Exception{ Object input = JOptionPane.showInputDialog(null, message, messageTitle, JOptionPane.INFORMATION_MESSAGE, null, objects, initialObject); if (input == null) throw new Exception("Selection aborted"); return input; } /** * Asks the User to select an Object from a given array of Objects. * The index of the selected object is returned. * @param message * @param messageTitle * @param objects * @param initialObject * @return the index of the chosen object * @throws Exception */ public static int chooseIndex(String message, String messageTitle, Object [] objects, Object initialObject) throws Exception{ Object input = JOptionPane.showInputDialog(null, message, messageTitle, JOptionPane.INFORMATION_MESSAGE, null, objects, initialObject); if (input == null) throw new Exception("Selection aborted"); int index = -1; for (int i = 0; i < objects.length; i++){ if (objects[i].equals(input)) index = i; } return index; } }