diff --git a/uk/ac/sanger/artemis/io/ReadAndWriteEntry.java b/uk/ac/sanger/artemis/io/ReadAndWriteEntry.java index f08396894a39133c7cf5a4ef6de42eaba7fb91ba..4c2b2e578b26541068f0f343f252388384ea50f4 100644 --- a/uk/ac/sanger/artemis/io/ReadAndWriteEntry.java +++ b/uk/ac/sanger/artemis/io/ReadAndWriteEntry.java @@ -43,7 +43,9 @@ public class ReadAndWriteEntry private static org.apache.log4j.Logger logger4j = org.apache.log4j.Logger.getLogger(ReadAndWriteEntry.class); - + + private static DatabaseEntrySource ENTRY_SOURCE; + /** * Read from the database, given a srcFeature uniquename * @param uniqueName @@ -52,16 +54,21 @@ public class ReadAndWriteEntry * @throws NoSequenceException * @throws IOException */ - public static Entry readEntryFromDatabase(final String uniqueName) + public static Entry readEntryFromDatabase(final String uniqueName, + DatabaseEntrySource entry_source) throws OutOfRangeException, NoSequenceException, IOException { - final DatabaseEntrySource entry_source = new DatabaseEntrySource(); - boolean promptUser = true; - if(System.getProperty("read_only") != null) - promptUser = false; + if(entry_source == null) + { + ReadAndWriteEntry.ENTRY_SOURCE = new DatabaseEntrySource(); + entry_source = ENTRY_SOURCE; + boolean promptUser = true; + if(System.getProperty("read_only") != null) + promptUser = false; - if(!entry_source.setLocation(promptUser)) - return null; + if(!entry_source.setLocation(promptUser)) + return null; + } String url = (String)entry_source.getLocation(); int index = url.indexOf("?"); @@ -90,6 +97,20 @@ public class ReadAndWriteEntry stream_progress_listener); } + /** + * Read from the database, given a srcFeature uniquename + * @param uniqueName + * @return + * @throws OutOfRangeException + * @throws NoSequenceException + * @throws IOException + */ + public static Entry readEntryFromDatabase(final String uniqueName) + throws OutOfRangeException, NoSequenceException, IOException + { + return readEntryFromDatabase(uniqueName, null); + } + /** * Write entry to a file * @param entry @@ -200,47 +221,70 @@ public class ReadAndWriteEntry { try { - /*Entry entry = ReadAndWriteEntry.readEntryFromDatabase("Pf3D7_03"); - ReadAndWriteEntry.writeDatabaseEntryToFile( - entry, new File("Pf3D7_03.flatten"), true, true, false, - DocumentEntryFactory.EMBL_FORMAT, null); + String names[]; + boolean flatten = true; + boolean ignoreObsolete = true; - ReadAndWriteEntry.writeDatabaseEntryToFile( - entry, new File("Pf3D7_03.not-flatten"), false, true, false, - DocumentEntryFactory.EMBL_FORMAT, null);*/ - - // - // - - final String names[]; + if(args != null && args.length == 1 && args[0].startsWith("-h")) + { + System.out.println("-h\tshow help"); + System.out.println("-f\t[y|n] flatten the gene model, default is y"); + System.out.println("-i\t[y|n] ignore obsolete features, default is y"); + System.out.println("-s\tspace separated list of sequences to read and write out"); + System.exit(0); + } if(args == null || args.length < 1) names = new String[]{ "bin.fas", "chab01.fas", "chab02.fas", - "chab03.fas", - "chab04.fas", - "chab05.fas", - "chab06.fas", - "chab07.fas", - "chab08.fas", - "chab09.fas", - "chab10.fas", - "chab11.fas", - "chab12.fas", - "chab13.fas", - "chab14.fas", "chab99.fas" }; else + { names = args; + + for(int i=0; i<args.length; i++) + if(args[i].toLowerCase().equals("-f")) + { + if(i+1<args.length && args[i+1].toLowerCase().equals("n")) + flatten = false; + } + + for(int i=0; i<args.length; i++) + if(args[i].toLowerCase().equals("-i")) + { + if(i+1<args.length && args[i+1].toLowerCase().equals("n")) + ignoreObsolete = false; + } + + java.util.Vector files = null; + for(int i=0; i<args.length; i++) + { + if(args[i].toLowerCase().equals("-s")) + { + files = new java.util.Vector(); + for(int j=i+1; j<args.length; j++) + { + if(args[j].startsWith("-")) + break; + files.add(args[j]); + } + } + } + if(files != null && files.size() > 0) + { + names = new String[files.size()]; + files.toArray(names); + } + } for(int i=0;i < names.length; i++) { - System.out.println(i+" "+names[i]); - Entry entry = ReadAndWriteEntry.readEntryFromDatabase(names[i]); + System.out.println(i+" read and write :: "+names[i]); + Entry entry = ReadAndWriteEntry.readEntryFromDatabase(names[i], ENTRY_SOURCE); ReadAndWriteEntry.writeDatabaseEntryToFile( - entry, new File(names[i]+".embl"), true, true, false, + entry, new File(names[i]+".embl"), flatten, ignoreObsolete, false, DocumentEntryFactory.EMBL_FORMAT, null); } }