From c0fe92ac89ff83e2bd46724d0ead72df9a99bc18 Mon Sep 17 00:00:00 2001 From: amwaterhouse Date: Wed, 26 Jul 2006 16:04:10 +0000 Subject: [PATCH] Load and save PDB files --- src/jalview/gui/Jalview2XML.java | 125 +++++++++++++++++++++++++++++--------- 1 file changed, 97 insertions(+), 28 deletions(-) diff --git a/src/jalview/gui/Jalview2XML.java b/src/jalview/gui/Jalview2XML.java index 1060610..84e3564 100755 --- a/src/jalview/gui/Jalview2XML.java +++ b/src/jalview/gui/Jalview2XML.java @@ -184,6 +184,7 @@ public class Jalview2XML vamsasSet.setGapChar(jal.getGapCharacter() + ""); JSeq jseq; + Vector pdbfiles = null; //SAVE SEQUENCES int id = 0; @@ -269,6 +270,39 @@ public class Jalview2XML pdb.setId(entry.getId()); pdb.setType(entry.getType()); + if(entry.getFile()!=null) + { + if(pdbfiles==null) + pdbfiles = new Vector(); + + + if(!pdbfiles.contains(entry.getId())) + { + pdbfiles.addElement(entry.getId()); + try + { + File file = new File(entry.getFile()); + if(file.exists()) + { + byte[] data = new byte[ (int) file.length()]; + jout.putNextEntry(new JarEntry(entry.getId())); + DataInputStream dis = new DataInputStream(new + FileInputStream(file)); + dis.readFully(data); + + DataOutputStream dout = new DataOutputStream(jout); + dout.write(data, 0, data.length); + jout.closeEntry(); + } + } + catch (Exception ex) + { + ex.printStackTrace(); + } + } + } + + if(entry.getProperty()!=null) { PdbentryItem item = new PdbentryItem(); @@ -594,15 +628,6 @@ public class Jalview2XML } } - if(av.hasHiddenRows) - { - // av.alignment.getHiddenSequences().get - // HiddenSequences hs = new HiddenSequences(); - // hs.ad - // view.addHiddenSequences(); - // av.showAllHiddenSeqs();.alignment.getHiddenSequences(). - } - jms.addViewport(view); @@ -692,9 +717,7 @@ public class Jalview2XML */ public AlignFrame LoadJalviewAlign(String file) { - jalview.gui.AlignFrame af = null; - try { //UNMARSHALLER SEEMS TO CLOSE JARINPUTSTREAM, MOST ANNOYING @@ -723,21 +746,9 @@ public class Jalview2XML for (int i = 0; i < entryCount; i++) { jarentry = jin.getNextJarEntry(); + } - } - - - class NoDescIDResolver implements IDResolver - { - public Object resolve(String idref) - { - System.out.println(idref+" used"); - return null; - } - } - - - if (jarentry != null) + if (jarentry != null && jarentry.getName().endsWith(".xml")) { InputStreamReader in = new InputStreamReader(jin, "UTF-8"); JalviewModel object = new JalviewModel(); @@ -746,9 +757,14 @@ public class Jalview2XML unmar.setValidation(false); object = (JalviewModel) unmar.unmarshal( in ); - af = LoadFromObject(object); + af = LoadFromObject(object, file); entryCount++; } + else if (jarentry != null) + { + //Some other file here. + entryCount++; + } } while (jarentry != null); } @@ -786,7 +802,51 @@ public class Jalview2XML return af; } - AlignFrame LoadFromObject(JalviewModel object) + String loadPDBFile(String file, String pdbId) + { + try + { + JarInputStream jin = null; + + if (file.startsWith("http://")) + { + jin = new JarInputStream(new URL(file).openStream()); + } + else + { + jin = new JarInputStream(new FileInputStream(file)); + } + + JarEntry entry = null; + do + { + entry = jin.getNextJarEntry(); + } + while (!entry.getName().equals(pdbId)); + + DataInputStream in = new DataInputStream(jin); + File outFile = File.createTempFile("jalview_pdb", ".txt"); + outFile.deleteOnExit(); + DataOutputStream out = new DataOutputStream(new FileOutputStream(outFile)); + int data; + while ( (data = in.read()) != -1) + { + out.write(data); + } + out.close(); + return outFile.getAbsolutePath(); + + } + catch (Exception ex) + { + ex.printStackTrace(); + } + + return null; + } + + + AlignFrame LoadFromObject(JalviewModel object, String file) { Vector seqids = new Vector(); SequenceSet vamsasSet = object.getVamsasModel().getSequenceSet(0); @@ -825,6 +885,7 @@ public class Jalview2XML ///////////////////////////////// + Hashtable pdbloaded = new Hashtable(); for (int i = 0; i < vamsasSeq.length; i++) { if (JSEQ[i].getFeaturesCount() > 0) @@ -849,9 +910,17 @@ public class Jalview2XML jalview.datamodel.PDBEntry entry = new jalview.datamodel.PDBEntry(); entry.setId(ids[p].getId()); entry.setType(ids[p].getType()); + if(!pdbloaded.containsKey(ids[p].getId())) + { + String tmppdb = loadPDBFile(file, ids[p].getId()); + entry.setFile(tmppdb); + pdbloaded.put(ids[p].getId(), tmppdb); + } + else + entry.setFile(pdbloaded.get(ids[p].getId()).toString()); + al.getSequenceAt(i).getDatasetSequence().addPDBId(entry); } - } if(vamsasSeq[i].getDBRefCount()>0) { -- 1.7.10.2