/******************************************************************************* * Copyright 2014 Virginia Polytechnic Institute and State University * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. ******************************************************************************/ package edu.vt.vbi.patric.common; import java.net.URL; import java.net.URLConnection; import java.util.ArrayList; import java.util.HashMap; import javax.xml.parsers.SAXParserFactory; import org.xml.sax.InputSource; import org.xml.sax.XMLReader; import edu.vt.vbi.patric.common.xmlHandler.PDBAnnotationsHandler; import edu.vt.vbi.patric.common.xmlHandler.PDBAnnotationsResolver; import edu.vt.vbi.patric.common.xmlHandler.PDBDescriptionHandler; import edu.vt.vbi.patric.common.xmlHandler.PDBGOTermsHandler; import edu.vt.vbi.patric.common.xmlHandler.PDBLigandHandler; import edu.vt.vbi.patric.common.xmlHandler.PDBPolymersHandler; import edu.vt.vbi.patric.common.xmlHandler.PDBSequenceClusterHandler; public class PDBInterface { private String baseUrlDescription = "http://www.pdb.org/pdb/rest/describePDB"; private String baseUrlLigand = "http://www.pdb.org/pdb/rest/ligandInfo"; private String baseUrlGOTerm = "http://www.pdb.org/pdb/rest/goTerms"; private String baseUrlCluster = "http://www.pdb.org/pdb/rest/sequenceCluster"; private String baseUrlAnnotations = "http://www.pdb.org/pdb/rest/das/pdbchainfeatures/features"; private String baseUrlPolymers = "http://www.pdb.org/pdb/rest/describeMol"; private XMLReader xmlReader = null; public PDBInterface() { try { SAXParserFactory spf = SAXParserFactory.newInstance(); xmlReader = spf.newSAXParser().getXMLReader(); } catch (Exception ex) { System.out.print(ex); } } public HashMap<String, String> getDescription(String pdbIDs) throws java.rmi.RemoteException { PDBDescriptionHandler handler = new PDBDescriptionHandler(); try { String url = baseUrlDescription + "?structureId=" + pdbIDs; // System.out.println(url); URL u = new URL(url); URLConnection c = u.openConnection(); c.setConnectTimeout(EutilInterface.TIMEOUT_CONN); c.setReadTimeout(EutilInterface.TIMEOUT_READ); xmlReader.setContentHandler(handler); xmlReader.parse(new InputSource(c.getInputStream())); } catch (Exception ex) { // ex.printStackTrace(); System.out.println("no data available"); return null; } return handler.getParsedData(); } public ArrayList<HashMap<String, String>> getLigands(String pdbID) throws java.rmi.RemoteException { PDBLigandHandler handler = new PDBLigandHandler(); try { String url = baseUrlLigand + "?structureId=" + pdbID; // System.out.println(url); URL u = new URL(url); URLConnection c = u.openConnection(); c.setConnectTimeout(EutilInterface.TIMEOUT_CONN); c.setReadTimeout(EutilInterface.TIMEOUT_READ); xmlReader.setContentHandler(handler); xmlReader.parse(new InputSource(c.getInputStream())); } catch (Exception ex) { ex.printStackTrace(); } return handler.getParsedData(); } public ArrayList<HashMap<String, String>> getGOTerms(String pdbID) throws java.rmi.RemoteException { PDBGOTermsHandler handler = new PDBGOTermsHandler(); try { String url = baseUrlGOTerm + "?structureId=" + pdbID; // System.out.println(url); URL u = new URL(url); URLConnection c = u.openConnection(); c.setConnectTimeout(EutilInterface.TIMEOUT_CONN); c.setReadTimeout(EutilInterface.TIMEOUT_READ); xmlReader.setContentHandler(handler); xmlReader.parse(new InputSource(c.getInputStream())); } catch (Exception ex) { ex.printStackTrace(); } return handler.getParsedData(); } public ArrayList<HashMap<String, String>> getSequenceCluster(String pdbID, int cluster) throws java.rmi.RemoteException { PDBSequenceClusterHandler handler = new PDBSequenceClusterHandler(); try { String url = baseUrlCluster + "?structureId=" + pdbID + "&cluster=" + cluster; // System.out.println(url); URL u = new URL(url); URLConnection c = u.openConnection(); c.setConnectTimeout(EutilInterface.TIMEOUT_CONN); c.setReadTimeout(EutilInterface.TIMEOUT_READ); xmlReader.setContentHandler(handler); xmlReader.parse(new InputSource(c.getInputStream())); } catch (Exception ex) { ex.printStackTrace(); } return handler.getParsedData(); } public ArrayList<HashMap<String, String>> getAnnotations(String pdbID) throws java.rmi.RemoteException { PDBAnnotationsHandler handler = new PDBAnnotationsHandler(); PDBAnnotationsResolver resolver = new PDBAnnotationsResolver(); try { String url = baseUrlAnnotations + "?segment=" + pdbID; // System.out.println(url); URL u = new URL(url); URLConnection c = u.openConnection(); c.setConnectTimeout(EutilInterface.TIMEOUT_CONN); c.setReadTimeout(EutilInterface.TIMEOUT_READ); xmlReader.setContentHandler(handler); xmlReader.setEntityResolver(resolver); xmlReader.parse(new InputSource(c.getInputStream())); } catch (Exception ex) { ex.printStackTrace(); } return handler.getParsedData(); } public ArrayList<String> getPolymers(String pdbID) throws java.rmi.RemoteException { PDBPolymersHandler handler = new PDBPolymersHandler(); try { String url = baseUrlPolymers + "?structureId=" + pdbID; // System.out.println(url); URL u = new URL(url); URLConnection c = u.openConnection(); c.setConnectTimeout(EutilInterface.TIMEOUT_CONN); c.setReadTimeout(EutilInterface.TIMEOUT_READ); xmlReader.setContentHandler(handler); xmlReader.parse(new InputSource(c.getInputStream())); } catch (Exception ex) { ex.printStackTrace(); } return handler.getParsedData(); } }