"destination collection(s) databse ID");
"destination collection(s) Handle or database ID");
    public static void main(String[] argv) throws Exception    {        // create an options object and populate it        CommandLineParser parser = new PosixParser();        Options options = new Options();        options.addOption("a", "add", false, "add items to DSpace");        options.addOption("r", "replace", false, "replace items in mapfile");        options.addOption("d", "delete", false,                "delete items listed in mapfile");        options.addOption("s", "source", true, "source of items (directory)");        options.addOption("c", "collection", true,                "destination collection(s) databse ID");        options.addOption("m", "mapfile", true, "mapfile items in mapfile");        options.addOption("e", "eperson", true,                "email of eperson doing importing");        options.addOption("w", "workflow", false,                "send submission through collection's workflow");        options.addOption("t", "test", false,                "test run - do not actually import items");        options.addOption("R", "resume", false,                "resume a failed import (add only)");        options.addOption("h", "help", false, "help");        CommandLine line = parser.parse(options, argv);        String command = null; // add replace remove, etc        String sourcedir = null;        String mapfile = null;        String eperson = null; // db ID or email        String[] collections = null; // db ID or handles        if (line.hasOption('h'))        {            HelpFormatter myhelp = new HelpFormatter();            myhelp.printHelp("ItemImport\n", options);            System.out                    .println("\nadding items:    ItemImport -a -e eperson -c collection -s sourcedir -m mapfile");            System.out                    .println("replacing items: ItemImport -r -e eperson -c collection -s sourcedir -m mapfile");            System.out                    .println("deleting items:  ItemImport -d -e eperson -m mapfile");            System.out                    .println("If multiple collections are specified, the first collection will be the one that owns the item.");            System.exit(0);        }        if (line.hasOption('a'))        {            command = "add";        }        if (line.hasOption('r'))        {            command = "replace";        }        if (line.hasOption('d'))        {            command = "delete";        }        if (line.hasOption('w'))        {            useWorkflow = true;        }        if (line.hasOption('t'))        {            isTest = true;            System.out.println("**Test Run** - not actually importing items.");        }        if (line.hasOption('s')) // source        {            sourcedir = line.getOptionValue('s');        }        if (line.hasOption('m')) // mapfile        {            mapfile = line.getOptionValue('m');        }        if (line.hasOption('e')) // eperson        {            eperson = line.getOptionValue('e');        }        if (line.hasOption('c')) // collections        {            collections = line.getOptionValues('c');        }        if (line.hasOption('R'))        {            isResume = true;            System.out                    .println("**Resume import** - attempting to import items not already imported");        }        // now validate        // must have a command set        if (command == null)        {            System.out                    .println("Error - must run with either add, replace, or remove (run with -h flag for details)");            System.exit(1);        }        else if (command.equals("add") || command.equals("replace"))        {            if (sourcedir == null)            {                System.out                        .println("Error - a source directory containing items must be set");                System.out.println(" (run with -h flag for details)");                System.exit(1);            }            if (mapfile == null)            {                System.out                        .println("Error - a map file to hold importing results must be specified");                System.out.println(" (run with -h flag for details)");                System.exit(1);            }            if (eperson == null)            {                System.out                        .println("Error - an eperson to do the importing must be specified");                System.out.println(" (run with -h flag for details)");                System.exit(1);            }            if (collections == null)            {                System.out                        .println("Error - at least one destination collection must be specified");                System.out.println(" (run with -h flag for details)");                System.exit(1);            }        }        else if (command.equals("delete"))        {            if (eperson == null)            {                System.out                        .println("Error - an eperson to do the importing must be specified");                System.exit(1);            }            if (mapfile == null)            {                System.out.println("Error - a map file must be specified");                System.exit(1);            }        }        // can only resume for adds        if (isResume && !command.equals("add"))        {            System.out                    .println("Error - resume option only works with --add command");            System.exit(1);        }        // do checks around mapfile - if mapfile exists and 'add' is selected,        // resume must be chosen        File myFile = new File(mapfile);        if (myFile.exists() && command.equals("add") && !isResume)        {            System.out.println("Error - the mapfile " + mapfile                    + " already exists.");            System.out                    .println("Either delete it or use --resume if attempting to resume an aborted import.");            System.exit(1);        }        ItemImport myloader = new ItemImport();        // create a context        Context c = new Context();        // find the EPerson, assign to context        EPerson myEPerson = null;        if (eperson.indexOf('@') != -1)        {            // @ sign, must be an email            myEPerson = EPerson.findByEmail(c, eperson);        }        else        {            myEPerson = EPerson.find(c, Integer.parseInt(eperson));        }        if (myEPerson == null)        {            System.out.println("Error, eperson cannot be found: " + eperson);            System.exit(1);        }        c.setCurrentUser(myEPerson);        // find collections        Collection[] mycollections = null;        // don't need to validate collections set if command is "delete"        if (!command.equals("delete"))        {            System.out.println("Destination collections:");            mycollections = new Collection[collections.length];            // validate each collection arg to see if it's a real collection            for (int i = 0; i < collections.length; i++)            {                // is the ID a handle?                if (collections[i].indexOf('/') != -1)                {                    // string has a / so it must be a handle - try and resolve                    // it                    mycollections[i] = (Collection) HandleManager                            .resolveToObject(c, collections[i]);                    // resolved, now make sure it's a collection                    if ((mycollections[i] == null)                            || (mycollections[i].getType() != Constants.COLLECTION))                    {                        mycollections[i] = null;                    }                }                // not a handle, try and treat it as an integer collection                // database ID                else if (collections[i] != null)                {                    mycollections[i] = Collection.find(c, Integer                            .parseInt(collections[i]));                }                // was the collection valid?                if (mycollections[i] == null)                {                    throw new IllegalArgumentException("Cannot resolve "                            + collections[i] + " to collection");                }                // print progress info                String owningPrefix = "";                if (i == 0)                {                    owningPrefix = "Owning ";                }                System.out.println(owningPrefix + " Collection: "                        + mycollections[i].getMetadata("name"));            }        } // end of validating collections        try        {            c.setIgnoreAuthorization(true);            if (command.equals("add"))            {                myloader.addItems(c, mycollections, sourcedir, mapfile);            }            else if (command.equals("replace"))            {                myloader.replaceItems(c, mycollections, sourcedir, mapfile);            }            else if (command.equals("delete"))            {                myloader.deleteItems(c, mapfile);            }            // complete all transactions            c.complete();        }        catch (Exception e)        {            // abort all operations            if (mapOut != null)            {                mapOut.close();            }            mapOut = null;            c.abort();            e.printStackTrace();            System.out.println(e);        }        if (mapOut != null)        {            mapOut.close();        }        if (isTest)        {            System.out.println("***End of Test Run***");        }    }