edu.harvard.med.screensaver.io.libraries.LibraryCreator.java Source code

Java tutorial

Introduction

Here is the source code for edu.harvard.med.screensaver.io.libraries.LibraryCreator.java

Source

// $HeadURL$
// $Id$
//
// Copyright  2006, 2010, 2011, 2012 by the President and Fellows of Harvard College.
//
// Screensaver is an open-source project developed by the ICCB-L and NSRB labs
// at Harvard Medical School. This software is distributed under the terms of
// the GNU General Public License.

package edu.harvard.med.screensaver.io.libraries;

import java.util.Arrays;

import org.apache.commons.cli.OptionBuilder;
import org.apache.log4j.Logger;
import org.joda.time.LocalDate;
import org.joda.time.format.DateTimeFormat;
import org.joda.time.format.DateTimeFormatter;
import com.google.common.base.Function;
import com.google.common.collect.Lists;

import edu.harvard.med.screensaver.ScreensaverConstants;
import edu.harvard.med.screensaver.io.CommandLineApplication;
import edu.harvard.med.screensaver.model.libraries.Library;
import edu.harvard.med.screensaver.model.libraries.LibraryType;
import edu.harvard.med.screensaver.model.libraries.PlateSize;
import edu.harvard.med.screensaver.model.screens.ScreenType;
import edu.harvard.med.screensaver.util.StringUtils;

/**
 * Command-line application that creates a new library and its wells and imports
 * its well contents into the database.
 *  
 * @author <a mailto="andrew_tolopko@hms.harvard.edu">Andrew Tolopko</a>
 * @author <a mailto="john_sullivan@hms.harvard.edu">John Sullivan</a>
 */
public class LibraryCreator {
    private static Logger log = Logger.getLogger(LibraryCreator.class);

    @SuppressWarnings("static-access")
    public static void main(String[] args) {
        CommandLineApplication app = new CommandLineApplication(args);
        try {
            DateTimeFormatter dateFormat = DateTimeFormat.forPattern(CommandLineApplication.DEFAULT_DATE_PATTERN);

            app.addCommandLineOption(OptionBuilder.hasArg().isRequired().withArgName("library name")
                    .withLongOpt("name").withDescription("full, official name for the library").create("n"));
            app.addCommandLineOption(
                    OptionBuilder.hasArg().isRequired().withArgName("short name").withLongOpt("short-name")
                            .withDescription("a short name for identifying the library").create("s"));
            app.addCommandLineOption(OptionBuilder.hasArg().isRequired().withArgName("library type")
                    .withLongOpt("library-type").withDescription(StringUtils.makeListString(Lists.transform(
                            Lists.newArrayList(LibraryType.values()), new Function<LibraryType, String>() {
                                @Override
                                public String apply(LibraryType arg0) {
                                    return arg0.name();
                                }
                            }), ", "))
                    .create("lt"));
            app.addCommandLineOption(OptionBuilder.hasArg().isRequired().withArgName("screen type")
                    .withLongOpt("screen-type").withDescription(StringUtils.makeListString(Lists
                            .transform(Lists.newArrayList(ScreenType.values()), new Function<ScreenType, String>() {
                                @Override
                                public String apply(ScreenType arg0) {
                                    return arg0.name();
                                }
                            }), ", "))
                    .create("st"));
            app.addCommandLineOption(OptionBuilder.hasArg(false).withLongOpt("is-pool")
                    .withDescription("well contents are pools of reagents (only valid when library-type=RNAI)")
                    .create("ip"));
            app.addCommandLineOption(
                    OptionBuilder.hasArg().isRequired().withArgName("#").withLongOpt("start-plate").create("sp"));
            app.addCommandLineOption(
                    OptionBuilder.hasArg().isRequired().withArgName("#").withLongOpt("end-plate").create("ep"));

            app.addCommandLineOption(
                    OptionBuilder.hasArg().withArgName("name").withLongOpt("provider").create("lp"));
            app.addCommandLineOption(
                    OptionBuilder.hasArg().withArgName("text").withLongOpt("description").create("d"));
            app.addCommandLineOption(OptionBuilder.hasArg().withArgName(CommandLineApplication.DEFAULT_DATE_PATTERN)
                    .withLongOpt("date-received").create("dr"));
            app.addCommandLineOption(OptionBuilder.hasArg().withArgName(CommandLineApplication.DEFAULT_DATE_PATTERN)
                    .withLongOpt("date-screenable").create("ds"));
            app.addCommandLineOption(OptionBuilder.hasArg().withArgName("plate size")
                    .withDescription(StringUtils.makeListString(Lists
                            .transform(Lists.newArrayList(PlateSize.values()), new Function<PlateSize, String>() {
                                @Override
                                public String apply(PlateSize arg0) {
                                    return arg0.name();
                                }
                            }), ", "))
                    .withLongOpt("plate-size").create("ps"));

            app.processOptions(true, true);

            String libraryName = app.getCommandLineOptionValue("n");
            String shortName = app.getCommandLineOptionValue("s");
            LibraryType libraryType = app.getCommandLineOptionEnumValue("lt", LibraryType.class);
            boolean isPool = app.isCommandLineFlagSet("ip");
            ScreenType screenType = app.getCommandLineOptionEnumValue("st", ScreenType.class);
            int startPlate = app.getCommandLineOptionValue("sp", Integer.class);
            int endPlate = app.getCommandLineOptionValue("ep", Integer.class);
            String vendor = app.isCommandLineFlagSet("lp") ? app.getCommandLineOptionValue("lp") : null;
            String description = app.isCommandLineFlagSet("d") ? app.getCommandLineOptionValue("d") : null;
            LocalDate dateReceived = app.isCommandLineFlagSet("dr")
                    ? app.getCommandLineOptionValue("dr", dateFormat).toLocalDate()
                    : null;
            LocalDate dateScreenable = app.isCommandLineFlagSet("ds")
                    ? app.getCommandLineOptionValue("ds", dateFormat).toLocalDate()
                    : null;
            PlateSize plateSize = app.isCommandLineFlagSet("ps")
                    ? app.getCommandLineOptionEnumValue("ps", PlateSize.class)
                    : ScreensaverConstants.DEFAULT_PLATE_SIZE;

            Library library = new Library(app.findAdministratorUser(), libraryName, shortName, screenType,
                    libraryType, startPlate, endPlate, plateSize);
            library.setPool(isPool);
            library.setDescription(description);
            library.setProvider(vendor);
            library.setDateReceived(dateReceived);
            library.setDateScreenable(dateScreenable);

            edu.harvard.med.screensaver.service.libraries.LibraryCreator libraryCreator = (edu.harvard.med.screensaver.service.libraries.LibraryCreator) app
                    .getSpringBean("libraryCreator");
            libraryCreator.createLibrary(library);
            log.info("library succesfully added to database");
        } catch (Exception e) {
            e.printStackTrace();
            log.error(e.toString());
            System.err.println("error: " + e.getMessage());
            System.exit(1);
        }
    }
}