edu.harvard.med.lincs.screensaver.io.screens.ScreenAttachmentImporter.java Source code

Java tutorial

Introduction

Here is the source code for edu.harvard.med.lincs.screensaver.io.screens.ScreenAttachmentImporter.java

Source

// $HeadURL$
// $Id$
//
// Copyright  2010 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.lincs.screensaver.io.screens;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.Set;

import org.apache.commons.cli.OptionBuilder;
import org.apache.log4j.Logger;
import com.google.common.collect.Sets;

import edu.harvard.med.screensaver.db.DAOTransaction;
import edu.harvard.med.screensaver.db.DAOTransactionRollbackException;
import edu.harvard.med.screensaver.db.GenericEntityDAO;
import edu.harvard.med.screensaver.db.LibrariesDAO;
import edu.harvard.med.screensaver.io.CommandLineApplication;
import edu.harvard.med.screensaver.model.AttachedFile;
import edu.harvard.med.screensaver.model.libraries.SmallMoleculeReagent;
import edu.harvard.med.screensaver.model.screens.Screen;
import edu.harvard.med.screensaver.model.screens.ScreenAttachedFileType;

/**
 * LINCS-only import attachments for reagents
 * 
 * @author sde4
 */
public class ScreenAttachmentImporter extends CommandLineApplication {
    private static Logger log = Logger.getLogger(ScreenAttachmentImporter.class);

    public static final int SHORT_OPTION_INDEX = 0;
    public static final int ARG_INDEX = 1;
    public static final int LONG_OPTION_INDEX = 2;
    public static final int DESCRIPTION_INDEX = 3;
    public static final String[] OPTION_INPUT_FILE = { "f", "file", "input-file",
            "Input file, to be converted to an sdf file (molfile not supported at this time)" };
    public static final String[] OPTION_INPUT_FACILITY_ID = { "i", "facilityId", "facility-id",
            "facility id of the reagent to import the attachement for" };

    public static final Set attachmentTypes = Sets.newHashSet(new String[] { "Study-File" });

    public static String STUDY_FILE_ATTACHMENT_TYPE = "Study-File";

    //  public static final String[] OPTION_ATTACHMENT_TYPE = { "type", "file-type", "file-type",
    //    "Attachment type, one of: " + attachmentTypes };

    @SuppressWarnings("static-access")
    public ScreenAttachmentImporter(String[] cmdLineArgs) {
        super(cmdLineArgs);

        String[] option = OPTION_INPUT_FILE;
        addCommandLineOption(OptionBuilder.hasArg().isRequired().withArgName(option[ARG_INDEX])
                .withDescription(option[DESCRIPTION_INDEX]).withLongOpt(option[LONG_OPTION_INDEX])
                .create(option[SHORT_OPTION_INDEX]));
        option = OPTION_INPUT_FACILITY_ID;
        addCommandLineOption(OptionBuilder.hasArg().isRequired().withArgName(option[ARG_INDEX])
                .withDescription(option[DESCRIPTION_INDEX]).withLongOpt(option[LONG_OPTION_INDEX])
                .create(option[SHORT_OPTION_INDEX]));
        //    option = OPTION_ATTACHMENT_TYPE;
        //    addCommandLineOption(OptionBuilder.hasArg()
        //                             .isRequired()
        //                                          .withArgName(option[ARG_INDEX])
        //                                          .withDescription(option[DESCRIPTION_INDEX])
        //                                          .withLongOpt(option[LONG_OPTION_INDEX])
        //                                          .create(option[SHORT_OPTION_INDEX]));
    }

    @SuppressWarnings("static-access")
    public static void main(String[] args) {
        final ScreenAttachmentImporter app = new ScreenAttachmentImporter(args);

        app.processOptions(/* acceptDatabaseOptions= */false, /* acceptAdminUserOptions= */false);

        try {
            execute(app);
        } catch (Exception e) {
            log.error("application exception", e);
            System.exit(1);
        }
    }

    private static void execute(final ScreenAttachmentImporter app) {
        final GenericEntityDAO dao = (GenericEntityDAO) app.getSpringBean("genericEntityDao");
        final LibrariesDAO librariesDao = (LibrariesDAO) app.getSpringBean("librariesDao");

        dao.doInTransaction(new DAOTransaction() {

            @Override
            public void runTransaction() {
                String fileName = app.getCommandLineOptionValue(OPTION_INPUT_FILE[SHORT_OPTION_INDEX]);
                String facilityId = app.getCommandLineOptionValue(OPTION_INPUT_FACILITY_ID[SHORT_OPTION_INDEX]);
                //        String attachmentType = app.getCommandLineOptionValue(OPTION_ATTACHMENT_TYPE[SHORT_OPTION_INDEX], String.class);

                File file = new File(fileName);
                if (!file.exists()) {
                    log.error("file does not exist: " + fileName);
                    System.exit(1);
                }

                Screen screen = dao.findEntityByProperty(Screen.class, "facilityId", facilityId);
                if (screen == null) {
                    log.error("no such screen found for facility id: \"" + facilityId + "\"");
                    System.exit(1);
                }

                ScreenAttachedFileType attachedFileType = dao.findEntityByProperty(ScreenAttachedFileType.class,
                        "value", STUDY_FILE_ATTACHMENT_TYPE);

                if (attachedFileType == null) {
                    log.error("Could not find the attached file type: " + STUDY_FILE_ATTACHMENT_TYPE
                            + ", make sure that this value has been created in the database table.");
                    System.exit(1);
                }
                try {
                    screen.createAttachedFile(file.getName(), attachedFileType, null,
                            new FileInputStream(fileName));
                } catch (IOException e) {
                    throw new DAOTransactionRollbackException("File not found: " + fileName, e);
                }

                log.info("saved attachment screen: " + facilityId);
            }
        });
    }
}