From: Ian F. <ia...@co...> - 2005-01-19 20:26:43
|
I agree with Kjell that the better route to go is the specific set methods for each attribute. Unless I'm missing something about how to use org.xml.sax.Attributes the code using the specific setters seems simpler. Using the set methods also avoids some potential pitfalls. See the following // Using the specific methods Person p = new Person(); p.setFirstName("Fred"); p.setLastName("Bloggs"); p.setEmail("fb...@so..."); p.setIdentifier("person1"); // Using org.xml.sax.Attributes AttributesImpl a = new AttributesImpl(); a.addAttribute("", "firstName", "", "", "Joe"); a.addAttribute("", "lastName", "", "", "Blow"); a.addAttribute("", "email", "", "", "jb...@so..."); a.addAttribute("", "identifier", "", "", "person2"); a.addAttribute("", "bogus", "", "", "thing"); Person p2 = new Person(a); // This would get you into trouble // firstname though close to the correct attribute would not appear in the output // bogus/thing would also be missed out - probably a good thing - but disturbing nonetheless AttributesImpl a2 = new AttributesImpl(); a2.addAttribute("", "firstname", "", "", "Person"); a2.addAttribute("", "lastName", "", "", "With-Issues"); a2.addAttribute("", "email", "", "", "con...@un..."); a2.addAttribute("", "identifier", "", "", "person3"); a2.addAttribute("", "bogus", "", "", "thing"); Person p3 = new Person(a2); AuditAndSecurity_package ans = new AuditAndSecurity_package(); ans.addToContact_list(p); ans.addToContact_list(p2); ans.addToContact_list(p3); MAGEJava mj = new MAGEJava(); mj.setIdentifier("MAG-ML:123"); mj.setAuditAndSecurity_package(ans); * Note that my use of identifiers in the above quick and dirty example does not conform to the guidelines Kjell mentions. On another note I developed the following code for a MAGEWriter from ImportExportTest.java that Angel mentioned. This was in order to accomplish a couple of things. 1. To make sure the MAGE-ML files contain a DOCTYPE line with the approved PUBLIC and SYSTEM ids for MAGE-ML. 2. To avoid writing a temporary file to disk by the use of a PipedReader/PipedWriter pair. It also would allow other formatting to be allowed as provided for by the org.apache.xml.serialize.OutputFormat class. package org.biomage.tools.xmlutils; import java.io.*; import org.biomage.Common.MAGEJava; import org.biomage.tools.helpers.*; import org.xml.sax.*; import org.xml.sax.helpers.*; import org.apache.xml.serialize.*; /** * <b>Description:</b> * Class to write a nicely formatted MAGE-ML document with appropriate headers. * */ public class MAGEWriter { private MAGEJava mj; private OutputFormat xmlFormat; public MAGEWriter() { // Use an XML OutputFormat to write the XML produced by MAGEJava // to the final file in a pretty format, // and including appropriate headers xmlFormat = new OutputFormat("xml","utf-8",true); xmlFormat.setLineWidth(60); xmlFormat.setLineSeparator("\n"); xmlFormat.setDoctype("-//OMG//DTD MAGE-ML 1.1//EN", "http://schema.omg.org/lsr/gene_expression/1.1/MAGE-ML.dtd"); } public void write( Writer wr , MAGEJava mageJava ) { // Set debug level StringOutputHelpers.setVerbose(0); mj = mageJava; try { if ( mageJava != null ) { // First write it out to a PipedReader as // raw unformatted XML. PipedReader pr = new PipedReader(); final PipedWriter tmpFile = new PipedWriter(pr); // PipedReaders and PipedWriters should be run in separate threads // So we start a separate thread in which we write the XML new Thread() { public void run() { try { mj.writeMAGEML(tmpFile); tmpFile.flush(); tmpFile.close(); } catch (IOException e) { System.err.println("I/O Error\n" + e.getMessage()); } } }.start(); XMLSerializer xmlWriterDocHndler = new XMLSerializer(wr,xmlFormat); XMLReader xmlWriterParser = XMLReaderFactory.createXMLReader( "org.apache.xerces.parsers.SAXParser"); xmlWriterParser.setContentHandler(xmlWriterDocHndler); // Parse from our PrintReader xmlWriterParser.parse(new InputSource(pr)); } } catch (IOException exception) { exception.printStackTrace(); } catch (SAXException exception) { exception.printStackTrace(); } } public void setLineWidth(int width) { xmlFormat.setLineWidth(width); } } Cheers Ian On 1/19/05 4:10 AM, "Kjell Petersen" <Kje...@bc...> wrote: > Hi Joe, Angel, > > On the general how-to-use Java MAGEstk, the second option Angel > describes is probably the best way to go: construct an empty ArrayDesign > object and start populating it. Many of the methods for setting > associations have selfevident names, so by just starting writing some > code you'll probably get some distance even without any examples before you. > > I'm not working from the Array production end, so I haven't put together > any ArrayDesign MAGE myself yet. For any specifics not explained by > method names, the best practise douments Angel refers to at EBI is your > first place to check, then mailing a specific question to the mage list > is your next option. > > Hope this helps, > Kjell > > > Angel Pizarro wrote: > >> OK, So this is a question about how to generally use the MAGE-Java >> package. Sorry for the confusion. I am CC'ing the MAGE-Java list since >> they are the best people to answer this, but I will try and give you >> the basics. >> >> The MAGE-Java API relies on the Xerces-J API, specifically, it relies >> on the xerces-j Attributes model for instantiating classes. You won't >> get anywhere with MAGE-Java unless you use Xerces-J in your code. >> >> I believe all you have to do is is create a Xerces-J Attributes object >> with key/value pairs of the MAGE object of interest, then use the MAGE >> constructor passing the Attributes. >> >> Here is a link to the org.xml.sax API so you can look up some docs on >> the Attributes interface: >> http://java.sun.com/j2se/1.4.2/docs/api/org/xml/sax/package-summary.html >> >> Otherwise one would have to use the empty bean constructor and >> populate the object's attributes and associations via the object >> methods for the respective att/assoc. >> >> To write out your result, you can then copy the code from the >> ImportExportTest.java included in the MAGE-Java source. Sorry I can't >> give you a small program that does all this, but I was up till now a >> Perl guy and have only recently switched to Java. >> >> Angel >> >> McDaniel, Joe R. wrote: >> >>> What I want is to generate a Java program using the >>> MAGE-OM API to build an ArrayDesign basically (we are creating slides >>> and trying to annotate them using the MAGE standard). In looking at the >>> www.ebi.ac.uk stuff I could not find any programming examples (nor are >>> there any in the stk except for the trivial one mentioned). >>> What I need is an example of how to generate an ArrayDesign_Package (I >>> think) programmatically (not using an XML editor). This is what the API >>> is designed to do but is never (apparently?) used for this purpose >>> albeit inside something like MADAM (which hides this operation pretty >>> much). >>> Joe >>> >>> -----Original Message----- >>> From: Angel Pizarro [mailto:an...@ma...] Sent: Tuesday, >>> January 18, 2005 2:38 PM >>> To: McDaniel, Joe R. >>> Subject: Re: MAGE Java Examples? >>> >>> >>> So, if I understand your need correctly, between you and Jerry, you >>> can use the the Java layer, but you need help as to where to put what >>> annotations. >>> >>> The best contact for this type of information would be the >>> ArrayExpress annotators. They see gobs of files come through and can >>> give you great advise, provided you give them specific examples. THey >>> also have a nice webpage for submitters: >>> http://www.ebi.ac.uk/~ele/ext/submitter.html >>> >>> See the MAGE Good Practice bit for exampkle XML files. >>> http://www.ebi.ac.uk/~ele/ext/submitter.html#mgp >>> >>> Angel >>> >>> McDaniel, Joe R. wrote: >>> >>> >>> >>>> Hi Angel, >>>> >>>> I have been working with Jerry Li on this here at TIGR but it is still >>>> >>> >>> a >>> >>> >>>> pain. There are, essentially, no examples of how to use the API that I >>>> can find outside of TIGR. The next attempt was to use the .xml samples >>>> (but the ArrayDesign_package.xml is either compressed or trashed BTW). >>>> The test program to read and dump an xml file is not a very good >>>> starting place for this. >>>> >>>> Best, >>>> >>>> Joe >>>> >>>> >>>> >>> >>> >>> >>> >> >> > > > > ------------------------------------------------------- > The SF.Net email is sponsored by: Beat the post-holiday blues > Get a FREE limited edition SourceForge.net t-shirt from ThinkGeek. > It's fun and FREE -- well, almost....http://www.thinkgeek.com/sfshirt > _______________________________________________ > Mged-mage-java mailing list > Mge...@li... > https://lists.sourceforge.net/lists/listinfo/mged-mage-java |