/*
* MolImporter.java
*
* Created on September 21, 2005, 7:59 AM
*
* To change this template, choose Tools | Options and locate the template under
* the Source Creation and Management node. Right-click the template and choose
* Open. You can then make changes to the template in the Source Editor.
*/
package org.tgdb.io;
//import com.sun.rsasign.m;
import org.tgdb.util.SimpleMolecule;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
/**
* Class for importing molecules
* @author lami
*/
public class MolImporter {
private ArrayList mols;
private HashMap map;
/**
* Creates a new instance of MolImporter
*/
public MolImporter() {
mols = new ArrayList();
map = new HashMap();
}
/**
* Returns the imported molecules
* @return An arraylist of imported molecules in SimpleMolecule format
*/
public ArrayList getMols() { return mols; }
/**
* Returns the molecule with the specified name
* @param name The name of the molecule to return
* @return The choosen molecule in SimpleMolecule format
*/
public SimpleMolecule getMol(String name) {
Integer i = (Integer)map.get(name);
if(i == null)
return null;
return (SimpleMolecule)mols.get(i.intValue());
}
public boolean molExists(String name) {
Integer i = (Integer)map.get(name);
if(i == null)
return false;
else
return true;
}
/**
* Returns the selected molecule
* @param index The index of the molecule to return
* @return The selected SimpleMolecule
*/
public SimpleMolecule getMol(int index) {
if(index > mols.size()) {
System.out.println("Index is to large.");
return null;
}
return (SimpleMolecule)mols.get(index);
}
/**
* Imports a file with molecules. Only 'SD' is supported now.
* @param fileName
* @param format
*/
public void importFile(String fileName, String format) {
if(format.equals("SD"))
importSDFile(fileName);
else
System.out.println("Import format not supported.");
}
// Imports an file with molecules in SD format.
private void importSDFile(String fileName) {
try{
BufferedReader in = new BufferedReader(new FileReader(fileName));
String row = null;
StringBuffer buff = new StringBuffer();
int i = 1;
SimpleMolecule mol = null;
while(in.ready()){
String r1, r2, r3;
r1 = in.readLine().trim(); // Molecule Name
r2 = in.readLine().trim(); // Data line
r3 = in.readLine().trim(); // Comment line
//while(row.length() == 0)
// row = in.readLine().trim();
mol = new SimpleMolecule(r1, r2, r3);
// Read counts line
row = in.readLine().trim();
buff.append(row+"@");
while((!row.startsWith("M END") && in.ready()) &&
(!row.startsWith("M END") && in.ready()) &&
(!row.startsWith("$$$$"))){
row = in.readLine();
if (!row.equals("$$$$"))
buff.append(row+"@");
else
buff.append("M END");
}
mol.addRawData(buff.toString());
while(!row.startsWith("$$$$") && in.ready()){
row = in.readLine().trim();
if(row.length() > 0 && row.startsWith(">")) {
mol.addTag(row, in.readLine().trim());
}
}
//mol.getMolInfo();
mols.add(mol);
map.put(mol.getName(), new Integer(i-1));
buff = new StringBuffer();
++i;
}
in.close();
} catch (IOException ioe) {
System.out.println("Error importing: "+ioe.getMessage());
}
}
// Imports an file with molecules in SD format.
public void importSDFileSpec(String fileName, String[][] ids) {
try{
BufferedReader in = new BufferedReader(new FileReader(fileName));
String row = null;
StringBuffer buff = new StringBuffer();
int i = 1;
SimpleMolecule mol = null;
ArrayList ext = new ArrayList();
while(in.ready()){
row = in.readLine().trim();
while(row.length() == 0)
row = in.readLine().trim();
mol = new SimpleMolecule(row);
buff.append(row+"@");
while((!row.startsWith("M END") && in.ready()) && (!row.startsWith("M END") && in.ready())){
row = in.readLine();
buff.append(row+"@");
}
mol.addRawData(buff.toString());
while(!row.startsWith("$$$$") && in.ready()){
row = in.readLine().trim();
if(row.length() > 0 && row.startsWith(">")) {
mol.addTag(row, in.readLine().trim());
}
}
for(int k=1;k<ids.length;k++) {
if(ids[k][2].equals(mol.getName())) {
mols.add(mol);
ext.add(ids[k]);
break;
}
}
map.put(mol.getName(), new Integer(i-1));
buff = new StringBuffer();
++i;
}
MolExporter exp = new MolExporter();
exp.export("cd_ext.sdf", "SD", mols);
BufferedWriter out = new BufferedWriter(new FileWriter("detected.txt"));
Iterator ctr = ext.iterator();
while(ctr.hasNext()) {
String[] arow = (String[])ctr.next();
out.write(arow[0]+";"+arow[1]+";"+arow[2]);
out.newLine();
}
out.close();
in.close();
} catch (IOException ioe) {
System.out.println("Error importing: "+ioe.getMessage());
}
}
}