+++ /dev/null
-/*
- *=============================================================================
-* EMBL - European Bioinformatics institute
-* MSD Group
-* VAMSAS Project
-*
-* Copyright (c) 2005 The European Bioinformatics Institute. All rights reserved.
-*
-* Redistribution and use in source and binary forms, with or without
-* modification.
-*
-*The European Bioinformatics Institute may publish revised and/or new
-*versions of this license with new releases of VAMSAS software.
-*==============================================================================
- *
- *
- * Created on Feb 22, 2006
- *
- * @author <a href="mailto:pierre@ebi.ac.uk">Pierre MARGUERITE</a>
- * @version 2
- * @since 22 Feb. 2006
- */
-package uk.ac.ebi.msd.vamsas.vamav;
-
-import java.io.File;
-
-import org.vamsas.client.ClientHandle;
-import org.vamsas.client.Events;
-import org.vamsas.client.IClientDocument;
-import org.vamsas.client.InvalidSessionUrnException;
-import org.vamsas.client.UserHandle;
-import org.vamsas.client.simpleclient.SimpleClient;
-import org.vamsas.client.simpleclient.VamsasSession;
-
-import uk.ac.ebi.msd.vamsas.vamav.communication.astexviewer.AVClientIntf;
-import uk.ac.ebi.msd.vamsas.vamav.session.VAMAVSession;
-import uk.ac.ebi.msd.vamsas.vamav.util.logger.VAMAVLogger;
-import uk.ac.ebi.msd.vamsas.vamav.util.logger.VAMAVLoggerImpl;
-
-
-/**
- * This class represents a VAMSAS client in the VAMSAS workflow (VAMSAS Client API),
- *
- * @author <a href="mailto:pierre@ebi.ac.uk">Pierre MARGUERITE</a>
- * @since 22 Feb. 2006
- * @version 2
- *
- */
-public class VAMAVClient extends SimpleClient {
-
-
- private String lastStatus = Events.DOCUMENT_CREATE;
- private final VAMAVLogger logger = new VAMAVLoggerImpl(this.getClass());
- private VAMAVSession vamavSession = null;
- private AVClientIntf avclient = null;
- private VamsasSession sess = null;
- private IClientDocument document = null;
-
-
- /**
- * Should not be used
- * @param applicationHandle application handle for the current application
- * @throws InvalidSessionUrnException if a error occurs during the creation of the client and the session.
- */
- @Deprecated
- public VAMAVClient (ClientHandle applicationHandle)throws InvalidSessionUrnException
- {
- super(null, applicationHandle, null);
- this.client = applicationHandle;
-
- }
- /**
- * Inits a client with a given user and a given Client handle in a given session
- * @param user information, of the user opening the session
- * @param client the clientHandle
- * @param sess Session in which is opened the client.
- * @throws InvalidSessionUrnException if a error occurs during the creation of the client and the session.
-
- */
- public VAMAVClient (
- UserHandle user,
- ClientHandle client,
- VamsasSession _sess) throws InvalidSessionUrnException{
- super(user, client, _sess);
- this.sess = _sess;
- }
-
- /**
- * Inits a client with a given user and a given Client handle in a given session
- * and an archive file from a previous session/treatment
- * @param user information, of the user opening the session
- * @param client the clientHandle
- * @param _sess Session in which is opened the client.
- * @param importingArchive
- *
- * @throws Exception raises if an error occurs during the creation of the client (archive reading, incorrect session, ...)
- */
- public VAMAVClient(
- UserHandle user,
- ClientHandle client,
- VamsasSession _sess,
- File importingArchive)
- throws Exception {
- super(user, client, _sess, importingArchive);
- this.sess = _sess;
- }
-
- /**
- * @see org.vamsas.client.IClient#getAbout()
- */
- public String getAbout() {
- return new String("VAMAV Client version $version$ build $build$");
- }
-
- /**
- * a clone the current VAMSASClient object
- * @return a clone object of the current object
- */
- public Object clone()
- {
- VAMAVClient client = null;
- try
- {
- client = new VAMAVClient(this.user, this.client, this.sess);//this.SessionUrn);
- //client.setVAMAVDocument(this.getClientDocument());
- }
- catch (InvalidSessionUrnException isuE)
- {
- this.logger.appliError("Unable to clone client.");
- this.logger.sessionError("Unable to clone client.");
- client = null;
- }
- return client;
- }
-
- /**
- * Retrieves the vAMAVSession attribut
- *
- * @return Returns the vAMAVSession.
- */
- public VAMAVSession getVAMAVSession()
- {
- return this.vamavSession;
- }
-
- /**
- *Sets session attribut
- *
- * @param session The vAMAVSession to set.
- */
- public void setVAMAVSession(VAMAVSession session)
- {
- this.vamavSession = session;
- this.logger.setSession(session);
- }
-
- /**
- * Retrieves the avclient attribut
- *
- * @return Returns the avclient.
- */
- public AVClientIntf getAvclient()
- {
- return this.avclient;
- }
-
- /**
- *Sets avclient attribut
- *
- * @param avclient The avclient to set.
- */
- public void setAvclient(AVClientIntf avclient)
- {
- this.avclient = avclient;
- }
-/**
- * Set current document associated to the current client
- * @param document the document object to associate to the client
- */
- public void setVAMAVDocument(IClientDocument document)
- {
- if (document != null)
- {
- this.document = document;
- }
- }
-
- public void setUser(UserHandle _user)
- {
- if (_user !=null)
- {
- this.user = _user;
- }
- }
-}
+++ /dev/null
-/* \r
- * EMBL - European Bioinformatics institute\r
- * MSD Group\r
- * VAMSAS Project\r
- * \r
- *Created on 28 oct. 2005\r
- * @author <a href="mailto:pierre@ebi.ac.uk">Pierre MARGUERITE</a>\r
- * @version 1 \r
- * @since 28 oct. 2005\r
- */\r
-package uk.ac.ebi.msd.vamsas.vamav.documentmanagement;\r
-\r
-\r
-import uk.ac.ebi.msd.vamsas.vamav.session.VAMAVSession;\r
-import uk.ac.ebi.msd.vamsas.vamav.util.data.DataBuffer;\r
-import uk.ac.ebi.msd.vamsas.vamav.util.data.PDBEntry;\r
-import uk.ac.ebi.msd.vamsas.vamav.util.file.PlainTextFileReader;\r
-import uk.ac.ebi.msd.vamsas.vamav.util.logger.VAMAVLogger;\r
-import uk.ac.ebi.msd.vamsas.vamav.util.logger.VAMAVLoggerImpl;\r
-import uk.ac.ebi.msd.vamsas.vamav.util.pool.DataBufferPool;\r
-import uk.ac.ebi.msd.vamsas.vamav.util.pool.StringBufferPool;\r
-\r
-import java.io.File;\r
-import java.io.IOException;\r
-import java.util.ArrayList;\r
-import java.util.Enumeration;\r
-import java.util.Hashtable;\r
-\r
-/**\r
- * Convenient methods for PDB entry manipulation\r
- * \r
- * @author <a href="mailto:pierre@ebi.ac.uk">Pierre MARGUERITE</a>\r
- * @version 1\r
- * @since 28 oct. 2005 \r
- * \r
- */\r
-public class PDBUtil\r
- {\r
- private VAMAVLogger logger = new VAMAVLoggerImpl(this.getClass());\r
- \r
- private static Hashtable<String, String> AminoAcids = null; \r
- \r
- /**\r
- * Constructor \r
- *\r
- */\r
- public PDBUtil(String session)\r
- {\r
- super();\r
- logger.setSession(session);\r
- \r
- }\r
-\r
- /**\r
- * Constructor \r
- *\r
- */\r
- public PDBUtil(VAMAVSession session)\r
- {\r
- super();\r
- logger.setSession(session);\r
- \r
- }\r
- /**\r
- * PDB Format \r
- * http://www.rcsb.org/pdb/docs/format/pdbguide2.2/part_35.html\r
- * \r
- * @param entry\r
- * @return\r
- */\r
- public ArrayList<Chain> GetChain(PDBEntry entry)\r
- {\r
- if( entry == null) return null;\r
- File pdbFile = entry.getPdbFile();\r
- if (pdbFile == null || !pdbFile.exists() )\r
- {\r
- return null;\r
- }\r
- logger.sessionInfo("Retrieving PDB sequence from PDB file.");\r
- ArrayList<Chain> chains = null;\r
- PlainTextFileReader reader = new PlainTextFileReader(pdbFile);\r
- try\r
- {\r
- reader.openFile();\r
- DataBuffer line = null;\r
- Hashtable<String, StringBuffer> retrievingChains = new Hashtable<String, StringBuffer>();\r
- while (( line = reader.getLine()) !=null)\r
- {\r
- /*System.out.println("line "+line);*/\r
- if( line.toString().startsWith("SEQRES"))//.matches("^SEQRES*"))\r
- {//chain line found\r
- /*System.out.println("SEQRES found ");\r
- System.out.println("line "+line);*/\r
- //12 Character chainID\r
- char chainID = line.charAt(12 -1);\r
- String chainName = String.valueOf(chainID);\r
- /*System.out.println("chainName "+chainName);*/\r
- StringBuffer seq = retrievingChains.get(chainName.intern());\r
- if (seq == null)\r
- {\r
- seq = StringBufferPool.getString();\r
- }\r
- \r
- /* System.out.println("chain retrieves.");*/\r
-// 20 23 Residue name resName Residue name.\r
- if(line.length()>=23 )\r
- {\r
- String aa = line.substring(20-1, 23-1);\r
- if( aa != null)\r
- {\r
- aa = aa.trim();\r
- if(aa.length()>0)\r
- seq.append(get1LetterCodeFrom3LettersCode(aa));\r
- \r
- } \r
- }\r
- //24 - 27 Residue name resName Residue name.\r
- if(line.length()>=27 )\r
- {\r
- String aa = line.substring(24-1, 27-1);\r
- if( aa != null)\r
- {\r
- aa = aa.trim();\r
- if( aa.length()>0)\r
- seq.append(get1LetterCodeFrom3LettersCode(aa));\r
- }\r
- }\r
- //28 - 30 Residue name resName Residue name.\r
- if(line.length()>=31 )\r
- {\r
- String aa = line.substring(28-1, 31-1);\r
- if( aa != null)\r
- {\r
- aa = aa.trim();\r
- if( aa.length()>0)\r
- seq.append(get1LetterCodeFrom3LettersCode(aa));\r
- }\r
- }\r
- //32 - 34 Residue name resName Residue name.\r
- if(line.length()>=35 )\r
- {\r
- String aa = line.substring(32-1, 35-1);\r
- if( aa != null)\r
- {\r
- aa = aa.trim();\r
- if( aa.length()>0)\r
- seq.append(get1LetterCodeFrom3LettersCode(aa));\r
- }\r
- }\r
- //36 - 38 Residue name resName Residue name.\r
- if(line.length()>=39 )\r
- {\r
- String aa = line.substring(36-1, 39-1);\r
- if( aa != null)\r
- {\r
- aa = aa.trim();\r
- if( aa.length()>0)\r
- seq.append(get1LetterCodeFrom3LettersCode(aa));\r
- }\r
- }\r
- //40 - 42 Residue name resName Residue name.\r
- if(line.length()>=42 )\r
- {\r
- String aa = line.substring(40-1, 43-1);\r
- if( aa != null)\r
- {\r
- aa = aa.trim();\r
- if( aa.length()>0)\r
- seq.append(get1LetterCodeFrom3LettersCode(aa));\r
- }\r
- }\r
- //44 - 46 Residue name resName Residue name.\r
- if(line.length()>=47 )\r
- {\r
- String aa = line.substring(44-1, 47-1);\r
- if( aa != null)\r
- {\r
- aa = aa.trim();\r
- if( aa.length()>0)\r
- seq.append(get1LetterCodeFrom3LettersCode(aa));\r
- }\r
- }\r
- //48 - 50 Residue name resName Residue name.\r
- if(line.length()>=51 )\r
- {\r
- String aa = line.substring(48-1, 51-1);\r
- if( aa != null)\r
- {\r
- aa = aa.trim();\r
- if( aa.length()>0)\r
- seq.append(get1LetterCodeFrom3LettersCode(aa));\r
- }\r
- }\r
- //52 - 54 Residue name resName Residue name.\r
- if(line.length()>=55 )\r
- {\r
- String aa = line.substring(52-1, 55-1);\r
- if( aa != null)\r
- {\r
- aa = aa.trim();\r
- if( aa.length()>0)\r
- seq.append(get1LetterCodeFrom3LettersCode(aa));\r
- }\r
- }\r
- //56 - 58 Residue name resName Residue name.\r
- if(line.length()>=59 )\r
- {\r
- String aa = line.substring(56-1, 59-1);\r
- if( aa != null)\r
- {\r
- aa = aa.trim();\r
- if( aa.length()>0)\r
- seq.append(get1LetterCodeFrom3LettersCode(aa));\r
- }\r
- }\r
- //60 - 62 Residue name resName Residue name.\r
- if(line.length()>=63 )\r
- {\r
- String aa = line.substring(60-1, 63-1);\r
- if( aa != null)\r
- {\r
- aa = aa.trim();\r
- if( aa.length()>0)\r
- seq.append(get1LetterCodeFrom3LettersCode(aa));\r
- }\r
- }\r
- //64 - 66 Residue name resName Residue name.\r
- if(line.length()>=67 )\r
- {\r
- String aa = line.substring(64-1, 67-1);\r
- if( aa != null)\r
- {\r
- aa = aa.trim();\r
- if( aa.length()>0)\r
- seq.append(get1LetterCodeFrom3LettersCode(aa));\r
- }\r
- }\r
- //68 - 70 Residue name resName Residue name.\r
- if(line.length()>=71 )\r
- {\r
- String aa = line.substring(68-1, 71-1);\r
- if( aa != null)\r
- {\r
- aa = aa.trim();\r
- if( aa.length()>0)\r
- seq.append(get1LetterCodeFrom3LettersCode(aa));\r
- }\r
- }\r
- retrievingChains.put(chainName.intern(), seq);\r
- \r
- //System.out.println("seq "+seq.toString());\r
- \r
- //StringBufferPool.returnString(seq);\r
- }\r
- \r
- //cleaning\r
- DataBufferPool.returnString(line);\r
- \r
- \r
- }\r
- reader.closeFile();\r
- //cleaning\r
- if( retrievingChains !=null)\r
- {\r
- if( chains == null)\r
- \r
- chains = new ArrayList<Chain>();\r
- for (Enumeration elements = retrievingChains.keys() ; elements.hasMoreElements(); )\r
- {\r
- String chainID = (String)elements.nextElement();\r
- if( chainID == null|| chainID.length()<1) continue;\r
- StringBuffer seq = retrievingChains.get(chainID);\r
- if(seq == null || seq.length()<1) continue;\r
- chains.add(new PDBUtil.Chain(entry.getPdbID()+"_"+chainID, seq.toString()));\r
- \r
- StringBufferPool.returnString(seq);\r
- }\r
- retrievingChains.clear();\r
- retrievingChains = null;\r
- }\r
- \r
- }\r
- catch (IOException ioe)\r
- {\r
- logger.sessionError("error access to PDB file "+pdbFile.getName()+".",ioe);\r
- }\r
- if (!this.logger.isProduction()) logger.sessionDebug("retrieved chain for PDBID: "+entry.getPdbID()+" "+chains.get(0).getSequence());\r
- return chains;\r
- }\r
- \r
-/**\r
- * Converts a three letter code of AminoAcid to the one letter code of AminoAcid.\r
- * @param threeLettersCode the three letter code to convert\r
- * @return the one letter code associated to the three letter code, if found. null otherwise\r
- */\r
- private static String get1LetterCodeFrom3LettersCode(String threeLettersCode)\r
- {\r
- /*System.out.println("threeLettersCode to convert |"+threeLettersCode+"|");*/\r
- if (threeLettersCode == null || threeLettersCode.length()!=3)\r
- {\r
- /*System.out.println("incorrect threeLettersCode "+threeLettersCode);*/\r
- if( threeLettersCode.length() ==1 ) return threeLettersCode;\r
- return null;\r
- }\r
- String oneLetterCode = getAminoAcids().get(threeLettersCode.toLowerCase());\r
- if(oneLetterCode == null || oneLetterCode.length()!=1 ) oneLetterCode ="X";\r
- return oneLetterCode;\r
- }\r
- \r
- /**\r
- * Represents a chain contains in a PDB entry/file\r
- * \r
- * @author <a href="mailto:pierre@ebi.ac.uk">Pierre MARGUERITE</a>\r
- * @version 1\r
- * @since 28 oct. 2005 \r
- *\r
- */\r
- public static class Chain\r
- {\r
- /**\r
- * name of the chain\r
- */\r
- private String name = null;\r
- private String sequence = null;\r
- \r
- /**\r
- * \r
- * Constructor for chain \r
- *\r
- * @param _name name of the chain\r
- * @param _sequence sequence of the chain\r
- */\r
- public Chain (String _name, String _sequence)\r
- {\r
- this.name = _name;\r
- this.sequence = _sequence;\r
- }\r
-\r
- /**\r
- * Retrieves the name attribut\r
- *\r
- * @return Returns the name.\r
- */\r
- public String getName()\r
- {\r
- return this.name;\r
- }\r
-\r
- /**\r
- * Retrieves the sequence attribut\r
- *\r
- * @return Returns the sequence.\r
- */\r
- public String getSequence()\r
- {\r
- return this.sequence;\r
- }\r
- \r
- \r
- }\r
-\r
- /**\r
- * Retrieves the aminoAcids attribut\r
- *\r
- *AAs = Hashtable<String, String>();\r
- AAsAla A hydrophobic\r
- Arginine Arg R free amino group makes it basic and hydrophilic\r
- Asparagine Asn N carbohydrate can be covalently linked ("N-linked) to its -NH\r
- Aspartic acid Asp D free carboxyl group makes it acidic and hydrophilic\r
- Cysteine Cys C oxidation of their sulfhydryl (-SH) groups link 2 Cys (S-S)\r
- Glutamic acid Glu E free carboxyl group makes it acidic and hydrophilic\r
- Glutamine Gln Q moderately hydrophilic\r
- Glycine Gly G so small it is amphiphilic (can exist in any surroundings)\r
- Histidine His H basic and hydrophilic\r
- Isoleucine Ile I hydrophobic\r
- Leucine Leu L hydrophobic\r
- Lysine Lys K strongly basic and hydrophilic\r
- Methionine Met M hydrophobic\r
- Phenylalanine Phe F very hydrophobic\r
- Proline Pro P causes kinks in the chain\r
- Serine Ser S carbohydrate can be covalently linked ("O-linked") to its -OH\r
- Threonine Thr T carbohydrate can be covalently linked ("O-linked") to its -OH\r
- Tryptophan Trp W scarce in most plant proteins\r
- Tyrosine Tyr Y a phosphate or sulfate group can be covalently attached to its -OH\r
- Valine Val V\r
- \r
- A R D N B C E Z Q G H I L K M F P S T W Y V X\r
- *\r
- * @return Returns the aminoAcids.\r
- */\r
- private static Hashtable<String, String> getAminoAcids()\r
- {\r
- if( AminoAcids == null)\r
- {//lazy initialisation\r
- AminoAcids = new Hashtable<String, String>();\r
- AminoAcids.put("Ala".toLowerCase(), "A");\r
- AminoAcids.put("Arg".toLowerCase(), "R");\r
- AminoAcids.put("Asp".toLowerCase(), "D"); \r
- AminoAcids.put("Asn".toLowerCase(), "N");\r
- AminoAcids.put("Asx".toLowerCase(), "B");// Aspartic acid or Asparagine\r
- AminoAcids.put("Cys".toLowerCase(), "C");\r
- AminoAcids.put("Glu".toLowerCase(), "E");\r
- AminoAcids.put("Glx".toLowerCase(), "Z");// Glutamine or Glutamic acid.\r
- AminoAcids.put("Gln".toLowerCase(), "Q");\r
- AminoAcids.put("Gly".toLowerCase(), "G");\r
- AminoAcids.put("His".toLowerCase(), "H");\r
- AminoAcids.put("Ile".toLowerCase(), "I");\r
- AminoAcids.put("Leu".toLowerCase(), "L");\r
- AminoAcids.put("Lys".toLowerCase(), "K");\r
- AminoAcids.put("Met".toLowerCase(), "M");\r
- AminoAcids.put("Phe".toLowerCase(), "F");\r
- AminoAcids.put("Pro".toLowerCase(), "P");\r
- AminoAcids.put("Ser".toLowerCase(), "S");\r
- AminoAcids.put("Thr".toLowerCase(), "T");\r
- AminoAcids.put("Trp".toLowerCase(), "W");\r
- AminoAcids.put("Tyr".toLowerCase(), "Y");\r
- AminoAcids.put("Val".toLowerCase(), "V");\r
- AminoAcids.put("Xaa".toLowerCase(), "X");// Any amino acid.\r
- \r
- \r
- }\r
- return AminoAcids;\r
- }\r
- \r
- }\r
+++ /dev/null
-
-package uk.ac.ebi.msd.vamsas.vamav.documentmanagement;
-
-import uk.ac.ebi.msd.vamsas.vamav.VAMAVClient;
-import uk.ac.ebi.msd.vamsas.vamav.documentmanagement.exceptions.IncorrectDocumentException;
-import uk.ac.ebi.msd.vamsas.vamav.documentmanagement.exceptions.UnableToProcessException;
-import uk.ac.ebi.msd.vamsas.vamav.documentmanagement.grouping.SequenceGrouping;
-import uk.ac.ebi.msd.vamsas.vamav.documentmanagement.grouping.SequenceGrouping_domain;
-import uk.ac.ebi.msd.vamsas.vamav.documentmanagement.grouping.SequenceGrouping_structure;
-import uk.ac.ebi.msd.vamsas.vamav.documentmanagement.grouping.exceptions.UnableToGroupSequencesException;
-import uk.ac.ebi.msd.vamsas.vamav.exceptions.IncorrectVamavModuleInitialisation;
-import uk.ac.ebi.msd.vamsas.vamav.util.logger.VAMAVLogger;
-import uk.ac.ebi.msd.vamsas.vamav.util.logger.VAMAVLoggerImpl;
-import uk.ac.ebi.msd.vamsas.vamav.util.mapping.MappingManager;
-import uk.ac.ebi.msd.vamsas.vamav.util.properties.PropertyManager;
-import org.vamsas.objects.core.Alignment;
-import org.vamsas.objects.core.AlignmentAnnotations;
-import org.vamsas.objects.core.AlignmentSequence;
-import org.vamsas.objects.core.AnnotationElement;
-import org.vamsas.objects.core.ApplicationData;
-import org.vamsas.objects.core.DataSet;
-import org.vamsas.objects.core.DbRef;
-import org.vamsas.objects.core.Entry;
-import org.vamsas.objects.core.Provenance;
-import org.vamsas.objects.core.Sequence;
-import org.vamsas.objects.core.SequenceType;
-import org.vamsas.objects.core.Tree;
-import org.vamsas.objects.core.User;
-import org.vamsas.objects.core.VAMSAS;
-import org.vamsas.objects.core.VamsasDocument;
-
-import org.vamsas.client.IClient;
-import org.vamsas.client.IClientDocument;
-import org.vamsas.client.simpleclient.IdFactory;
-import org.vamsas.client.simpleclient.SimpleDocument;
-import org.vamsas.client.simpleclient.VamsasArchive;
-import org.vamsas.client.simpleclient.ClientDocument;
-
-import java.io.File;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Calendar;
-import java.util.Collection;
-import java.util.Enumeration;
-import java.util.Hashtable;
-import java.util.Iterator;
-import java.util.Properties;
-import java.util.TimeZone;
-
-import MSD.vamav.common.AVActiveSite;
-import MSD.vamav.common.AVSequence;
-import MSD.vamav.common.Highlight;
-import MSD.vamav.common.ResidueAnnotation;
-
-/**
- * <p>Processor for Vamsas Document, to extract data for calling an AstexViewer@MSD-EBI, for displaying the provided data</p>
- *
- * <p>Grouping mode :</p>
- * <ul>
- * <li>1. per structure</li>
- * <li>2. per PFAM domain</li>
- * </ul>
- *
- */
-public class VamsasDocumentProcessor implements uk.ac.ebi.msd.vamsas.vamav.VamaVModule {
-
-
- //private IClientDocument doc = null;
- private IClient client = null;
- private VAMAVLogger logger = new VAMAVLoggerImpl(this.getClass());
-
- private final String modulePrefix = "documentprocessor";
- private SequenceGrouping groupingManager = null;
- private int moleculeNumber = 1;
- private int highlightNumber = 0;
- private boolean hasAlignmentSequences = false;
- private MappingManager mappingManager = null;
- private String activeSiteDescription = "Active Site";
-
- /**
- * Retrieves the modulePrefix attribut
- *
- * @return Returns the modulePrefix.
- */
- public String getModulePrefix()
- {
- return this.modulePrefix;
- }
-
- public void init(Properties moduleProperties) throws IncorrectVamavModuleInitialisation
- {
- PropertyManager propManager = new PropertyManager();
- Properties props = propManager.getModuleProperties(moduleProperties, this.groupingManager.getModulePrefix());
- this.groupingManager.init(props);
- propManager = null;
- }
-
- /**
- *
- * Constructor for a given document
- * @param document Vamsas Document to process.
- * @param _mappingManager mapping manager
- * @throws IncorrectDocumentException if the given document is incorrect
- */
- public VamsasDocumentProcessor (IClient _client, MappingManager _mappingManager ) throws IncorrectDocumentException
- {
- if(_client == null ) throw new IncorrectDocumentException();
-
- this.client = _client;
- this.logger.setSession(this.client.getSessionUrn());
- this.mappingManager = _mappingManager;
- this.mappingManager.setSession(((VAMAVClient)this.client).getVAMAVSession());
- this.groupingManager = new SequenceGrouping_structure(this.mappingManager, ((VAMAVClient)this.client).getVAMAVSession());
- //this.logger = new VAMAVLoggerImpl(this.getClass(),this.client.getSessionUrn() );
-
- //this.groupingManager.load();
- }
-
- /**
- *
- * Constructor for a given document
- * @param document Vamsas Document to process.
- * @param _mappingManager mapping manager
- * @param groupingMode grouping Mode number, for sequence grouping (structure, domain)
- * @throws IncorrectDocumentException if the given document is incorrect
- */
- public VamsasDocumentProcessor (IClient _client, MappingManager _mappingManager, int groupingMode) throws IncorrectDocumentException
- {
- if(_client == null ) throw new IncorrectDocumentException();
-
- this.client = _client;
- this.logger.setSession(this.client.getSessionUrn());
-
-
- ((VAMAVClient)this.client).getVAMAVSession().setGroupingMode(groupingMode);
- this.mappingManager = _mappingManager;
- this.mappingManager.setSession(((VAMAVClient)this.client).getVAMAVSession());
- this.mappingManager.setSession(((VAMAVClient)this.client).getVAMAVSession());
- if( groupingMode == 0)
- {
- this.groupingManager = new SequenceGrouping_structure(this.mappingManager, ((VAMAVClient)this.client).getVAMAVSession());
- }
- else
- if( groupingMode == 1)
- {
- this.groupingManager = new SequenceGrouping_domain(this.mappingManager, ((VAMAVClient)this.client).getVAMAVSession());
- }
- else
- // default
- this.groupingManager = new SequenceGrouping_structure(this.mappingManager, ((VAMAVClient)this.client).getVAMAVSession());
-
-
- //this.logger = new VAMAVLoggerImpl(this.getClass(),this.client.getSessionUrn() );
-
- //this.groupingManager.load();
- }
-/**
- * <p>Process a document to extract element for AstexViewer@MSD-EBI</p>
- *
- */
- public Hashtable<String, Object> process( ) throws IncorrectDocumentException, UnableToProcessException
- {
- Hashtable<String, Object> parameters = new Hashtable<String, Object>();
- //int moleculeNumber = 1;
- IClientDocument doc = null;
- try
- {
- doc = this.client.getClientDocument();
- }
- catch (IOException ioe)
- {
- this.logger.sessionError("Unable to access to the VAMSAS document. Can not process.",ioe);
- throw new IncorrectDocumentException(ioe);
- }
- if( doc == null)
- {
- this.logger.sessionError("The document is null. Can not process it.");
- throw new IncorrectDocumentException();
- }
- this.logger.sessionInfo("The processing vamsas document.");
- try
- {
- VAMSAS[] roots = doc.getVamsasRoots();
- if( roots != null && roots.length>0)
- for (int rootNumber = roots.length-1; rootNumber>=0; rootNumber--)
- {
- VAMSAS root = roots[rootNumber];
- if (root == null) continue;
- Tree [] trees = root.getTree();
- //treating Trees
- if (trees !=null)
- {
- for (int treeNumber=0; treeNumber< trees.length; treeNumber++)
- {
- Tree aTree = trees[treeNumber];
- if( aTree == null) continue;
- parameters = this.addParameters(this.processTree(aTree), parameters);
- }
- }
- else
- {
- this.logger.sessionDebug("No Tree found.");
- }
- int setCount = root.getDataSetCount();
- this.logger.sessionDebug("DataSet "+setCount);
- if (setCount>0)
- {
- this.hasAlignmentSequences = false;
- for (int setNumber=0; setNumber< setCount; setNumber++)
- {
- // treating DataSet
- this.logger.sessionDebug("DataSet " +setNumber );
- DataSet set = root.getDataSet(setNumber);
- if (set == null)
- {
- this.logger.sessionDebug("data set is null?? "+setNumber);
- continue;
- }
- parameters = this.addParameters(this.processDataSet(set), parameters);
- }
- }
- }
- }
- catch (Exception e)
- {
- this.logger.sessionError("VamsasDocumentProcessor process- Error during Document processing.",e);
- parameters = null;
- }
- if (parameters!=null) this.logger.sessionDebug("parameter count "+parameters.size());
- //store PDB
- //this.logger.sessionInfo("Save computed data");
- try
- {
- File atrFile = this.groupingManager.storeGroups();
- // this.groupingManager.getSequenceFiles()
- // add atribute file parameter
- if(atrFile != null)
- {
- this.logger.sessionDebug("Atribute file "+atrFile.getName());
- parameters.put("attribute", atrFile);
- }
- else
- this.logger.sessionError("No atribute file created.");
-
- //addsequenceFile
- ArrayList<File>seqFiles = this.groupingManager.getSequenceFiles();
- if(seqFiles != null && seqFiles.size()>0)
- {
- for (int fileNumber = seqFiles.size() - 1;fileNumber >=0; fileNumber -- )
- {
- File file = seqFiles.get(fileNumber);
- if( file == null) continue;
- this.logger.sessionDebug("VAMSASSequence"+(fileNumber+1)+": add sequence file to parameter "+file.getName());
- parameters.put("VAMSASSequence"+(fileNumber+1), file);
- }
- }
- }
- catch (UnableToGroupSequencesException ue)
- {
- this.logger.sessionError("VamsasDocumentProcessor StoreGroups - Unable to group sequences.", ue);
- throw new UnableToProcessException(ue);
- }
-
- this.groupingManager = null;
- this.logger.sessionDebug("process "+(parameters==null?0:parameters.size()));
- return parameters;
- }
-
- /**
- * Process Vamsas Tree object
- * Currently do nothing
- * @param atree the tree to process
- * @return a list of parameters to call an AstexViewer@MSD-EBI client
- */
- private Hashtable <String, Object> processTree(Tree atree)
- {
- return null;
- }
-
-
- private Hashtable <String, Object> processDataSet(DataSet aDataSet) throws UnableToGroupSequencesException
- {
- if (aDataSet == null)
- {
- this.logger.sessionDebug("data set is null??");
- return null;
- }
- Hashtable <String, Object> parameters = new Hashtable <String, Object>();
- int alignCount = aDataSet.getAlignmentCount();
- if (alignCount>0)
- {
- for (int algNumber=0; algNumber< alignCount; algNumber++)
- {
- this.logger.sessionDebug("Alignment " +algNumber );
- Alignment align = aDataSet.getAlignment(algNumber);
- if (align == null) continue; //should not happen
- Hashtable <String, Object> newparameters =this.ProcessAlignment(align);
- this.logger.sessionDebug("end ab aligment "+(newparameters==null?0:newparameters.size()));
- parameters = this.addParameters(newparameters, parameters);
- this.logger.sessionDebug("end ab aligment "+(parameters==null?0:parameters.size()));
- }
- this.logger.sessionDebug("end aligments "+(parameters==null?0:parameters.size()));
- }
- int sequenceCount = aDataSet.getSequenceCount();
- if (!this.hasAlignmentSequences && sequenceCount > 0 )
- {
- this.logger.sessionInfo("No alignment has been found. Process DataSet sequences."+sequenceCount);
- for (int seqNumber=0; seqNumber< sequenceCount; seqNumber++)
- {
- Sequence seq = aDataSet.getSequence(seqNumber);
- if (seq == null)
- {
- this.logger.sessionDebug("sequence is null??");
- continue;
- }
-
- this.logger.sessionDebug(seq.getId());
- DbRef[] dbRefs = seq.getDbRef();
- boolean idFound = false;
- if( dbRefs != null && dbRefs.length >0)
- {
- for (int dbRefNumber = dbRefs.length - 1; dbRefNumber >=0; dbRefNumber-- )
- {
- DbRef ref = dbRefs[dbRefNumber];
- if( ref == null) continue;
-
- String acID = ref.getAccessionId();
- if( acID == null)
- {
- continue;
- }
- String source = ref.getSource() ;
- if( source== null || source.length()<1 )
- {
- continue;
- }
-
- Hashtable <String, Object> tempParameters = this.groupingManager.addSequence(seq.getSequence(), seq.getName(), acID, source);
- if (tempParameters != null && tempParameters.size()>0)
- {
- this.logger.sessionDebug("parameter count "+parameters.size());
- String pdbids = (String) tempParameters.remove(this.groupingManager.getPdbidsproperty());
-
- if(pdbids!=null && pdbids.length()>0)
- {
- //TODO check if the ref does not have already the new DB reference
- this.logger.sessionDebug("Adding pdb IDs to doc "+pdbids );
- DbRef dbref = new DbRef();
- dbref.setSource("PDB");
- dbref.setAccessionId(pdbids);
- seq.addDbRef(dbref);
- //seq.setRefid(ref)
- }
- parameters = addParameters(tempParameters, parameters);
- this.logger.sessionDebug("end add sequence "+(parameters==null?0:parameters.size()));
- idFound = true;
- this.hasAlignmentSequences = true;
- }
-
- /*String pdbids = (String) tempParameters.remove(this.groupingManager.getPdbidsproperty());
- String id = ref.getAccessionId();
- if(id == null || id.length()<1 ) continue;
- //suppose it is a PDB ID (should be like PDBID:CHAIN)
- //We don t handle chain name , remove id
- int pos = id.indexOf(":");
- if (pos>=0)
- {//there is a match
- id = id.substring(0,pos);
- }
- PDBEntry entry = SequenceToPDB_MSDLite.getPDBFileFromPDBID(id);
- if( entry != null)
- {
- idFound = true;
- if( !parameters.containsValue(entry))
- /*parameters.add(entry);*/
- /* {
- parameters.put("molecule"+moleculeNumber,entry);
- parameters.put("name"+moleculeNumber, entry.getPdbID());
- moleculeNumber++;
- }
- Grouping.addSequenceToGroup(entry.getPdbID(), seq);*/
-
- }
- }
- if (!idFound)
- {
- Hashtable<String, Object>tempParameters = this.processSequence(seq);
- if (tempParameters != null)
- {
- //parameters = this.addParameters(this.processSequence(seq), parameters);
- String pdbids = (String) tempParameters.remove(this.groupingManager.getPdbidsproperty());
- if(pdbids!=null && pdbids.length()>0)
- {
- //TODO check if the ref does not have already the new DB reference
- this.logger.sessionDebug("Adding pdb IDs to doc "+pdbids );
- DbRef ref = new DbRef();
- ref.setSource("PDB");
- ref.setAccessionId(pdbids);
- seq.addDbRef(ref);
- //seq.setRefid(ref)
- }
- parameters = this.addParameters(tempParameters, parameters);
- }
- }
- }
- }
- this.logger.sessionDebug("ProcessDataSet "+(parameters==null?0:parameters.size()));
- return parameters;
- }
-
-
- /**
- * Process an alignment to extract sequences for grouping
- *
- * @param align alignment Object to process
- */
- private Hashtable <String, Object> ProcessAlignment(Alignment align) throws UnableToGroupSequencesException
- {
- if (align == null) return null; //should not happen
- int seqCount = align.getAlignmentSequenceCount();
- Hashtable <String, Object> parameters = null;
- if( seqCount>0 )
- {
- parameters = new Hashtable <String, Object>();
- String sequenceName = null;
- for (int seqNumber=0; seqNumber< seqCount; seqNumber++)
- {
- this.logger.sessionDebug("alig seq " +seqNumber );
- AlignmentSequence seq = align.getAlignmentSequence(seqNumber);
- if (seq == null) continue; //should not happen
- Sequence refSeq = (Sequence) seq.getRefid();
- boolean notFound = true;
- if (refSeq != null)
- {
- if (refSeq.getDbRefCount()>0)
- {
- int dbRefNumber = 0;
- int refCount = refSeq.getDbRefCount();
- while (notFound && dbRefNumber<refCount)
- {
- DbRef dbRef= refSeq.getDbRef(dbRefNumber++);
- this.logger.sessionDebug("dbref " +(dbRefNumber -1) );
- if(dbRef == null) continue;
- String acID = dbRef.getAccessionId();
- if( acID == null)
- {
- continue;
- }
- String source = dbRef.getSource() ;
- if( source== null || source.length()<1 )
- {
- continue;
- }
-
- Hashtable <String, Object> tempParameters = this.groupingManager.addSequence(seq.getSequence(), seq.getName(), acID, source);
-
- if (tempParameters != null && tempParameters.size()>0)
- {
- this.logger.sessionDebug("parameter count "+parameters.size());
- String pdbids = (String) tempParameters.remove(this.groupingManager.getPdbidsproperty());
- if(pdbids!=null && pdbids.length()>0)
- {
- //TODO check if the ref does not have already the new DB reference
- this.logger.sessionDebug("Adding pdb IDs to doc "+pdbids );
- DbRef ref = new DbRef();
- ref.setSource("PDB");
- ref.setAccessionId(pdbids);
- refSeq.addDbRef(ref);
- //seq.setRefid(ref)
- }
- parameters = addParameters(tempParameters, parameters);
- notFound = false;
- hasAlignmentSequences = true;
- this.logger.sessionDebug("parameter count "+parameters.size());
- }
- //if (sequenceName ==null) sequenceName = entry.getPdbID()+"_";
- }
- }
- else
- { /*System.out.println("No DbRef");*/
- }
- }
- if (notFound)
- {
- Hashtable<String, Object> tempParameters = processSequence(seq);
- if (tempParameters != null)
- {
- /* String pdbids = (String) tempParameters.remove(this.groupingManager.getPdbidsproperty());
- if(pdbids!=null && pdbids.length()>0)
- {
- //TODO check if the ref does not have already the new DB reference
- this.logger.sessionDebug("Adding pdb IDs to doc "+pdbids );
- DbRef ref = new DbRef();
- ref.setSource("PDB");
- ref.setAccessionId(pdbids);
- seq.addDbRef(ref);
- //seq.setRefid(ref)
- }*/
- parameters = this.addParameters(tempParameters, parameters);
- }
- }
- }
- //treat AnnotationElement for highlight
- int annotationCount = align.getAlignmentAnnotationsCount();
- this.logger.sessionDebug("annotationCount "+ annotationCount);
- for (int annotationNumber = annotationCount-1; annotationNumber>=0; annotationNumber--)
- {
- this.logger.sessionDebug("annotationNumber "+annotationNumber);
- AlignmentAnnotations annotation = align.getAlignmentAnnotations(annotationNumber);
- if (annotation == null) continue;
- int elementCount = annotation.getAnnotationElementCount();
- for (int elementNumber = elementCount-1; elementNumber>=0; elementNumber--)
- {
- this.logger.sessionDebug("annotationElement "+elementNumber);
- AnnotationElement elt = annotation.getAnnotationElement(elementNumber);
- if (elt == null) continue;
- parameters = this.addParameters(this.processAnnotationElement(elt), parameters);
- }
- }
- }
- this.logger.sessionDebug("ProcessAlignment "+(parameters==null?0:parameters.size()));
- return parameters;
- }
-
- private Hashtable <String, Object> processAnnotationElement( AnnotationElement annotation)
- {
- if (annotation == null) return null;
- int secStructure = -1;//unknown
- Hashtable <String, Object> parameters = null;
- try
- {
- secStructure = new Integer(annotation.getSecondaryStructure()).intValue();
- }
- catch (NumberFormatException nfExcep)
- {
- this.logger.sessionWarn("Unknown secondary sequence: "+ annotation.getSecondaryStructure());
- secStructure = -1;
- }
- if (annotation.getDescription().contains("breakpoint") || annotation.getDescription().contains("Breakpoint"))
- {
- Highlight hgl = new Highlight (annotation.getDisplayCharacter().charAt(0), annotation.getDescription(), secStructure, null, annotation.getPosition());
- //Hashtable<String, Object> temp
- parameters = new Hashtable<String, Object>();
- //temp
- parameters.put("highlightT0",hgl);
- this.groupingManager.addBreakpoint(annotation);
- }
- //this.groupingManager.addBreakpoint(annotation);
- return parameters;
- }
-
- private Hashtable <String, Object> processSequence(SequenceType sequence) throws UnableToGroupSequencesException
- {
- if (sequence == null) return null;
- Hashtable <String, Object> tempParameters = this.groupingManager.addSequence(sequence.getSequence(), sequence.getName());
-
- //return null;
-
- return tempParameters;
- }
-/**
- * <p>Does ...</p>
- *
- */
- public void updateDocument(Hashtable<String, Object> parameters)
- {
- this.logger.sessionDebug("Updating Document");
- if( parameters == null || parameters.size()<1)
- {
- this.logger.sessionWarn("UpdateDocument: no object provided: No update.");
- return ;
- }
- VAMSAS[] roots = null;
- try
- {
- roots = this.client.getClientDocument().getVamsasRoots();
- }
- catch (IOException ioe)
- {
- this.logger.sessionWarn("Add active site: The document does not exist. Can not add Active site.");
- return;
-
- }
- if (roots == null || roots.length<1)
- {
- this.logger.sessionWarn("Add active site: The document is empty. Can not add Active site.");
- return;
- }
- for (int rootNumber = roots.length-1; rootNumber >=0 && parameters != null&& parameters.size()>0; rootNumber-- )
- {
- VAMSAS root = roots[rootNumber];
- if (root == null)
- {
- continue;
- }
- updateVAMSAS(root,parameters);
- }
- }
-
- /**
- * Updates a VAMSAS entity with the given parameters
- * @param parameters list of objects to update into the VAMSAS tree
- */
- private void updateVAMSAS(VAMSAS root, Hashtable<String, Object> parameters)
- {
- this.logger.sessionDebug("Updating Vamsas");
- if( parameters == null || parameters.size()<1)
- {
- this.logger.sessionWarn("UpdateVAMSAS: no object provided: No update.");
- return ;
- }
- if(root == null )
- {
- this.logger.sessionWarn("UpdateVAMSAS: no VAMSAS XML Entity.");
- return ;
- }
- for (int dataSetNumber = root.getDataSetCount() -1; dataSetNumber>=0&& parameters != null&& parameters.size()>0; dataSetNumber--)
- {
- DataSet set = root.getDataSet(dataSetNumber);
- if( set == null) continue;
- updateDataSet(set, parameters);
-
- }
- }
-
- /**
- * Updates a DataSet entity with the given parameters
- * @param parameters list of objects to update into the DataSet tree
- */
- private void updateDataSet(DataSet root, Hashtable<String, Object> parameters)
- {
- this.logger.sessionDebug("Updating DataSet");
- if( parameters == null || parameters.size()<1)
- {
- this.logger.sessionWarn("updateDataSet: no object provided: No update.");
- return ;
- }
- if(root == null )
- {
- this.logger.sessionWarn("updateDataSet: no DataSet XML Entity.");
- return ;
- }
- for (int alignmentNumber= root.getAlignmentCount()-1; alignmentNumber>=0&& parameters != null&& parameters.size()>0; alignmentNumber-- )
- {
- Alignment align = root.getAlignment(alignmentNumber);
- if( align != null)
- {
- updateAlignment(align, parameters);
- }
- }
- }
-
- /**
- * Updates a Alignment entity with the given parameters
- * @param parameters list of objects to update into the Alignment tree
- */
- private void updateAlignment(Alignment root, Hashtable<String, Object> parameters)
- {
- this.logger.sessionDebug("Updating ALignment");
- if( parameters == null || parameters.size()<1)
- {
- this.logger.sessionWarn("updateAlignment: no object provided: No update.");
- return ;
- }
- if(root == null )
- {
- this.logger.sessionWarn("updateAlignment: no DataSet XML Entity.");
- return ;
- }
- this.logger.sessionDebug("list of parameters: "+parameters);
- Hashtable<String, ArrayList<AVActiveSite>> sites = (Hashtable<String, ArrayList<AVActiveSite>>) parameters.get("MSD.vamav.common.AVActiveSite");
- Hashtable<String, ArrayList<ResidueAnnotation>> residueAnnotations = (Hashtable<String, ArrayList<ResidueAnnotation>>) parameters.get("MSD.vamav.common.ResidueAnnotation");
- try
- {
- if ((sites != null && sites.size()>0) || (residueAnnotations!= null && residueAnnotations.size()>0))
- {
- boolean hasSitesToUpdate = false;
- if (sites!= null && sites.size()>0)
- {
- hasSitesToUpdate = true;
- }
- boolean hasAnnotationToUpdate = false;
- if (residueAnnotations!= null && residueAnnotations.size()>0)
- {
- hasAnnotationToUpdate = true;
- }
- for (int seqNumber = root.getAlignmentSequenceCount() -1; seqNumber>=0; seqNumber --)
- {
- AlignmentSequence seq = root.getAlignmentSequence(seqNumber);
- if( seq == null) continue;
- String name = seq.getName();
- if( name == null ) continue;
- this.logger.sessionDebug("sequence name "+name);
- name = name.trim().toLowerCase().intern();
- if (hasSitesToUpdate)
- {
- if( sites.containsKey(name) )
- {//found the alignment associated to an Active Site
- //add the active site as annotation element
- /// AlignmentAnnotations[] annotations = root.getAlignmentAnnotations();
- //if (annotations == null)
- // {
- this.addActiveSite(root, sites.get(name));
- sites.remove(name);
- // }
- }
- else
- {
- //look for PDB ID
- //usely active sites are associated with PDB chain.
- //check any seq has a PDB ID with an active site.
- Sequence seqRef = (Sequence)seq.getRefid();
- if( !this.logger.isProduction())this.logger.sessionDebug(" sites "+sites);
- // this.logger.sessionDebug(" sites "+sites.keys());
- if (seqRef != null)
- {
- boolean found = false;
- int refNumber = seqRef.getDbRefCount() ;
- while (!found && refNumber>0)
- {
- refNumber --;
- DbRef ref = seqRef.getDbRef(refNumber);
- if( ref == null ) continue;
- String source = ref.getSource();
- this.logger.sessionDebug("DBRef "+ refNumber+ " "+source);
- if (source != null && "PDB".equalsIgnoreCase(source))
- {
- String accID = ref.getAccessionId();
- if( accID == null || accID.length()<1) continue;
- accID = accID.trim().toLowerCase().intern();
- this.logger.sessionDebug("ACCID "+accID);
- if( accID != null)
- {
- for ( Enumeration<String> keys = sites.keys(); keys.hasMoreElements();)
- {
- String sitePDBID = keys.nextElement();
- if( sitePDBID == null) continue;
-
- int underPos = sitePDBID.indexOf("_");
-
- this.logger.sessionDebug("position underscore "+underPos +" "+sitePDBID.substring(underPos+1, name.length()));
- if( underPos>0 && (sitePDBID.substring(underPos+1, sitePDBID.length()).length()==1 || sitePDBID.substring(underPos+1, sitePDBID.length()).length()==0))
- {//remove chain name and leave the PDB ID
- sitePDBID = sitePDBID.substring(0, underPos);
- }
- sitePDBID = sitePDBID.trim().toLowerCase().intern();
- if( sitePDBID.equalsIgnoreCase(accID))
- {
- root = this.addActiveSite(root, sites.get(accID));
- }
- }
- //sites.remove(accID);
- }
- }
- }
- }
- }
- }
- if( hasAnnotationToUpdate)
- {
- this.logger.sessionDebug("Testing "+name+ " for residue annotation.");
- if(residueAnnotations.containsKey(name))
- {//found the alignment associated to an Active Site
- //add the active site as annotation element
- this.logger.sessionDebug("The sequence "+name+" has a residue annotation.");
- //AlignmentAnnotations[] annotations = root.getAlignmentAnnotations();
- //if (annotations == null)
- // {
- this.addResidueAnnotation(root, residueAnnotations.remove(name));
- // }
- }
- else
- {
- //look for PDB ID
- //usely active sites are associated with PDB chain.
- //check any seq has a PDB ID with an active site.
- Sequence seqRef = (Sequence)seq.getRefid();
- if (!this.logger.isProduction()) this.logger.sessionDebug(" residueAnnotations "+residueAnnotations);
-
- if (seqRef != null)
- {
- boolean found = false;
- int refNumber = seqRef.getDbRefCount() ;
- while (!found && refNumber>0)
- {
- refNumber --;
- DbRef ref = seqRef.getDbRef(refNumber);
- if( ref == null ) continue;
- String source = ref.getSource();
- this.logger.sessionDebug("DBRef "+ refNumber+ " "+source);
- if (source != null && "PDB".equalsIgnoreCase(source))
- {
- String accID = ref.getAccessionId();
- if( accID == null || accID.length()<1) continue;
- accID = accID.trim().toLowerCase().intern();
- this.logger.sessionDebug("ACCID "+accID);
- if( accID != null && residueAnnotations.containsKey(accID))
- {
- root = this.addResidueAnnotation(root, residueAnnotations.get(accID));
- }
- }
- }
-
- }
- }
-
- }
- }
-
- }
- else
- {
- this.logger.sessionInfo("Update Alignment: no Residue alignment provided.");
- }
- }catch (Exception e)
- {
- this.logger.sessionError("Error during Alignment update ",e);
- }
-
- }
-
- /**
- * add an active site to the document
- * @param sites
- */
- private Alignment addActiveSite(Alignment align, ArrayList<AVActiveSite> sites )
- {
- this.logger.sessionDebug("adding active site");
- if(align == null )
- {
- this.logger.sessionWarn("AddActiveSite: no Aligmnemt XML Entity.");
- return align;
- }
- if( sites == null || sites.size()<1)
- {
- this.logger.sessionDebug("addActiveSite: No site to add.");
- return align;
- }
- Hashtable <String, ArrayList<AVActiveSite>> orderedSites = new Hashtable <String, ArrayList<AVActiveSite>>();
- //order site per position
- this.logger.sessionDebug(" Ordering sites: "+sites.size());
- for (int siteNumber = sites.size() -1; siteNumber>=0; siteNumber--)
- {
- AVActiveSite site = sites.get(siteNumber);
- if (site == null) continue;
-
- //we suppose we can have several sites at the same position
- //orderedSites.put(Integer.valueOf(siteNumber), site);
- Integer position = Integer.valueOf(site.getPosition());
- this.logger.sessionDebug("position: "+position.toString());
- ArrayList<AVActiveSite> s = orderedSites.get(position.toString().intern());
- if(s == null )
- {
- s = new ArrayList<AVActiveSite>();
- }
- if (!s.contains(site)) s.add(site);
- orderedSites.put(position.toString().intern(), s);
- //orderedSites.
- //site.getPosition();
- }//check if active site are already contained in the Annotation
- for (int alignNumber = align.getAlignmentAnnotationsCount() - 1 ; alignNumber>=0; alignNumber--)
- {
- AlignmentAnnotations annotation= align.getAlignmentAnnotations(alignNumber);
- if( annotation == null) continue;
- this.logger.sessionDebug("annotation number : "+alignNumber);
- this.logger.sessionDebug("Element count "+annotation.getAnnotationElementCount());
- for ( int elementNumber = annotation.getAnnotationElementCount() - 1;elementNumber>=0; elementNumber-- )
- {
- AnnotationElement element = annotation.getAnnotationElement(elementNumber);
- this.logger.sessionDebug("element "+elementNumber);
- if( element == null) continue;
- // if(this.activeSiteDescription.equalsIgnoreCase(element.getDescription())&&
- //
- Integer pos = Integer.valueOf(element.getPosition());
- String desc = element.getDescription();
- this.logger.sessionDebug("element position "+ pos+",");
- this.logger.sessionDebug("positions "+orderedSites.keys());
- if(desc != null && desc.startsWith(this.activeSiteDescription) && orderedSites.containsKey(pos.toString().intern()))
- {
- this.logger.sessionInfo("AddActiveSite: The active site already exists at position: "+element.getPosition());
- ArrayList<AVActiveSite> s = orderedSites.remove(pos.toString().intern());
-
- //continue;
- }
- pos = null;
- }
- }
- //the remaining sites must be added.
- if(orderedSites !=null && orderedSites.size()>0 )
- {
- AlignmentAnnotations annotation = new AlignmentAnnotations();
-
- Collection<ArrayList<AVActiveSite>> s = orderedSites.values();
- if( s != null && s.size()>0)
- {
- for ( Iterator <ArrayList<AVActiveSite>> iter = s.iterator(); iter.hasNext();)
- {
- ArrayList<AVActiveSite> list = iter.next();
- if (list == null || list.size()<1) continue;
- for (int arrayNumber = list.size()-1; arrayNumber>=0; arrayNumber--)
- {
- AVActiveSite site = list.get(arrayNumber);
- AnnotationElement element = new AnnotationElement();
- if (site == null ) continue;
- this.logger.sessionDebug("site : "+site.getSequenceName() + " "+site.getPosition() );
- element.setDescription(this.activeSiteDescription +" "+site.getLigandName());
- element.setPosition(site.getPosition());
- //element.setValue();
- annotation.addAnnotationElement(element);
- }
- }
- }
- /*for (Enumeration siteEnum = ; siteEnum.hasMoreElements();)
- {
- AVActiveSite site = (AVActiveSite)siteEnum.nextElement();
- if (site == null) continue;
- logger.Applidebug("site : "+site.getSequenceName());
- element.setDescription(this.activeSiteDescription +" "+site.getLigandName());
- element.setPosition(site.getPosition());
- //element.setValue();
- annotation.addAnnotationElement(element);
- }*/
- //adding provenance entry to the annotation
- Provenance provenance = annotation.getProvenance();
- Entry provenanceEntry = this.createProvenanceEntry(this.client, "Update - added ActiveSite");
- if(provenanceEntry != null )//otherwise something is wrong
- {
- if( provenance == null) provenance = new Provenance();
- provenance.addEntry(provenanceEntry);
- }
- align.addAlignmentAnnotations(annotation);
- }
- return align;
- }
-
- /**
- * add an active site to the document
- * @param sites
- */
- private Alignment addResidueAnnotation(Alignment align, ArrayList<ResidueAnnotation> annotations )
- {
- this.logger.sessionDebug("adding active site");
- if(align == null )
- {
- this.logger.sessionWarn("AddResidueAnnotation: no Aligmnemt XML Entity.");
- return align;
- }
- if( annotations == null || annotations.size()<1)
- {
- this.logger.sessionDebug("addResidueAnnotation: No annotation to add.");
- return align;
- }
- Hashtable <String, ArrayList<ResidueAnnotation>> orderedAnnotation = new Hashtable <String, ArrayList<ResidueAnnotation>>();
- //order site per position
- this.logger.sessionDebug(" Ordering sites: "+annotations.size());
- for (int siteNumber = annotations.size() -1; siteNumber>=0; siteNumber--)
- {
- ResidueAnnotation annotation = annotations.get(siteNumber);
- if (annotation == null) continue;
-
- //we suppose we can have several sites at the same position
- //orderedSites.put(Integer.valueOf(siteNumber), site);
- Integer position = Integer.valueOf(annotation.getResidueNumber());
- this.logger.sessionDebug("position: "+position.toString());
- ArrayList<ResidueAnnotation> s = orderedAnnotation.get(position.toString().intern());
- if(s == null )
- {
- s = new ArrayList<ResidueAnnotation>();
- }
- if (!s.contains(annotation)) s.add(annotation);
- orderedAnnotation.put(position.toString().intern(), s);
- //orderedSites.
- //site.getPosition();
- }//check if active site are already contained in the Annotation
- for (int alignNumber = align.getAlignmentAnnotationsCount() - 1 ; alignNumber>=0; alignNumber--)
- {
- AlignmentAnnotations annotation= align.getAlignmentAnnotations(alignNumber);
- if( annotation == null) continue;
- this.logger.sessionDebug("annotation number : "+alignNumber);
- this.logger.sessionDebug("Element count "+annotation.getAnnotationElementCount());
- for ( int elementNumber = annotation.getAnnotationElementCount() - 1;elementNumber>=0; elementNumber-- )
- {
- AnnotationElement element = annotation.getAnnotationElement(elementNumber);
- this.logger.sessionDebug("element "+elementNumber);
- if( element == null) continue;
- // if(this.activeSiteDescription.equalsIgnoreCase(element.getDescription())&&
- //
- Integer pos = Integer.valueOf(element.getPosition());
- String desc = element.getDescription();
- this.logger.sessionDebug("element position "+ pos+",");
- if( !this.logger.isProduction()) this.logger.sessionDebug("positions "+orderedAnnotation.keys());
- if(desc != null && desc.startsWith(this.activeSiteDescription) && orderedAnnotation.containsKey(pos.toString().intern()))
- {
- this.logger.sessionInfo("AddActiveSite: The active site already exists at position: "+element.getPosition());
- ArrayList<ResidueAnnotation> s = orderedAnnotation.remove(pos.toString().intern());
-
- //continue;
- }
- pos = null;
- }
- }
- //the remaining sites must be added.
- if(orderedAnnotation !=null && orderedAnnotation.size()>0 )
- {
- AlignmentAnnotations annots = new AlignmentAnnotations();
-
- Collection<ArrayList<ResidueAnnotation>> s = orderedAnnotation.values();
- if( s != null && s.size()>0)
- {
- for ( Iterator <ArrayList<ResidueAnnotation>> iter = s.iterator(); iter.hasNext();)
- {
- ArrayList<ResidueAnnotation> list = iter.next();
- if (list == null || list.size()<1) continue;
- for (int arrayNumber = list.size()-1; arrayNumber>=0; arrayNumber--)
- {
- ResidueAnnotation annotation = list.get(arrayNumber);
- AnnotationElement element = new AnnotationElement();
- if (annotation == null ) continue;
- this.logger.sessionDebug("annotation : "+annotation.getSequenceName() + " "+annotation.getResidueNumber() );
- element.setDescription(annotation.getDescription());
- element.setPosition(annotation.getResidueNumber());
- if (annotation.getDisplayCharacter()!= null && annotation.getDisplayCharacter().length()>0)
- element.setDisplayCharacter(annotation.getDisplayCharacter());
- else
- element.setDisplayCharacter("?");
- if( annotation.getSecondaryStructure() != null && annotation.getSecondaryStructure().length()>0 )
- {
- element.setSecondaryStructure(annotation.getSecondaryStructure());
- }
- else
- element.setSecondaryStructure("?");
- element.setValue(Float.parseFloat(annotation.getValue()));
- //element.setValue();
- annots.addAnnotationElement(element);
- }
- }
- }
- /*for (Enumeration siteEnum = ; siteEnum.hasMoreElements();)
- {
- AVActiveSite site = (AVActiveSite)siteEnum.nextElement();
- if (site == null) continue;
- logger.Applidebug("site : "+site.getSequenceName());
- element.setDescription(this.activeSiteDescription +" "+site.getLigandName());
- element.setPosition(site.getPosition());
- //element.setValue();
- annotation.addAnnotationElement(element);
- }*/
- //adding provenance entry to the annotation
- Provenance provenance = annots.getProvenance();
- Entry provenanceEntry = this.createProvenanceEntry(this.client, "Update - added Residue Annotation");
- if(provenanceEntry != null )//otherwise something is wrong
- {
- if( provenance == null) provenance = new Provenance();
- provenance.addEntry(provenanceEntry);
- }
- align.addAlignmentAnnotations(annots);
- }
- return align;
- }
-
- private Hashtable<String, Object> addParameters(Hashtable<String, Object> newParameters, Hashtable<String, Object> parameters)
- {
- if (parameters == null) parameters = new Hashtable<String, Object>();
- if (newParameters != null && newParameters.size()>0)
- {
- boolean found = false;
- /*for (Enumeration keys = newParameters.keys(); keys.hasMoreElements();)
- {
- String key = (String) keys.nextElement();
- if( key == null) continue;
- Object value = newParameters.get(key);
- if (value == null) continue;
-
- String newKey = null;
- if("molecule".equals(key) )
- {
- if( parameters.containsValue(value)) continue;
- newKey = "molecule"+this.moleculeNumber;
- }
- else
- if("name".equals(key) )
- {
- if( parameters.containsValue(value)) continue;
- newKey = "name"+this.moleculeNumber;
- }
- else newKey = key;
- parameters.put(newKey, value);
- logger.Applidebug("Adding new parameter "+newKey);
- newParameters.remove(key);
- key = null;
- found = true;
- }
- found = false;
- this.moleculeNumber++;*/
- boolean moreMolecules = true;
- int molNumber = -1;
- int highlightN= -1;
- boolean moreHighlight = true;
- if (!this.logger.isProduction() )
- {
- for (Enumeration<String> keys = newParameters.keys(); keys.hasMoreElements();)
- {
- this.logger.sessionDebug("new parameter "+keys.nextElement());
- }
- for (Enumeration<String> keys = parameters.keys(); keys.hasMoreElements();)
- {
- this.logger.sessionDebug("current stored parameter "+keys.nextElement());
- }
- }
- while (newParameters != null && !newParameters.isEmpty() && (moreMolecules || moreHighlight))
- {
- highlightN++;
- String currentParameterName = "highlightT"+highlightN;
- Object hig = newParameters.remove(currentParameterName);
- currentParameterName = null;
- if(hig != null)
- {
- if (!parameters.containsValue(hig))
- {
- this.logger.sessionDebug("Highlight found in the document");
- //newParameters.remove("highlight"+highlightNumber);
- int currentNumber = this.highlightNumber++;
- String newKey = "highlight"+currentNumber;
- this.logger.sessionDebug("Adding new parameter "+newKey);
- parameters.put(newKey, hig);
- }
- else
- {
- this.logger.sessionDebug("the highlight is already contained in the parameter list.");
- }
- }
- else
- {
- moreHighlight = false;
- //continue;
- this.logger.sessionDebug("no more highlight");
- }
-
- molNumber++;
- Object mol = newParameters.get("moleculeG"+molNumber);
- if (mol == null)
- {
- moreMolecules = false;
- continue;
- }
- newParameters.remove("moleculeG"+molNumber);
- Object name = newParameters.get("nameG"+molNumber);
- if (name == null)
- {
- //moreMolecules = false;
- continue;
- }
- newParameters.remove("nameG"+molNumber);
- if( parameters.containsValue(mol)) continue;
- int currentNumber = this.moleculeNumber++;
- String newKey = "molecule"+currentNumber;
- this.logger.sessionDebug("Adding new parameter "+newKey);
- parameters.put(newKey, mol);
- if( parameters.containsValue(name)) continue;
- newKey = "name"+currentNumber;
- this.logger.sessionDebug("Adding new parameter "+newKey);
- parameters.put(newKey, name);
- }
- if (newParameters!= null && !newParameters.isEmpty())parameters.putAll(newParameters);
- }
- if (newParameters != null)
- {
- newParameters.clear();
- newParameters = null;
- }
- return parameters;
- }
-
- /** @poseidon-generated */
- public SequenceGrouping getSequenceGrouping() {
- return this.groupingManager;
- }
- /** @poseidon-generated */
- public void setSequenceGrouping(SequenceGrouping sequenceGrouping) {
- this.groupingManager = sequenceGrouping;
- }
-
-
- private Entry createProvenanceEntry(IClient client, String action)
- {
- if (client == null)
- {
- this.logger.sessionError("No vamsas client provided to create provenance entry. The entry object will not be added.");
- return null;
- }
- return this.createProvenanceEntry(client.getUserHandle().getFullName(), action);
- }
-
- private Entry createProvenanceEntry(String user, String action)
- {
- if( user == null || user.length()<1)
- {
- this.logger.sessionError("No User name provided to create provenance entry. The entry object will not be added.");
- return null;
- }
- if( action == null || action.length()<1)
- {
- this.logger.sessionError("No action provided to create provenance entry. The entry object will not be added.");
- return null;
- }
- Entry provenanceEntry = new Entry();
- provenanceEntry.setUser(user);
- provenanceEntry.setAction(action);
-
- /*
- ** on some JDK, the default TimeZone is wrong
- ** we must set the TimeZone manually!!!
- ** Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("EST"));
- */
- Calendar cal = Calendar.getInstance(TimeZone.getDefault());
- org.exolab.castor.types.Date date = new org.exolab.castor.types.Date (cal.getTime());
- provenanceEntry.setDate(date);
- cal = null;
- return provenanceEntry;
- }
-
- public ArrayList<String> getGroupingModes()
- {
- ArrayList<String> modes = new ArrayList<String>();
- modes.add("structure");
- modes.add("Protein domain");
- return modes;
- }
-
- /**
- * Create a document following provided parameters
- *
- * @param parameters list of parameters, containing objects to map to the document objects/tree
- * @return the IClient with the associated newly created document
- * @throws IOException if an error occurs during VAMsas document file access
- */
- public IClient createDocument(Hashtable<String, Object> parameters) throws IOException
- {
- if(parameters == null || parameters.size()<1)
- {
- this.logger.sessionError("No parameter provided to create the VAMSAS document. Abort.");
- }
- IClientDocument _doc = null;
-
- VamsasDocument doc = new VamsasDocument();
- VAMSAS root = new VAMSAS();
- doc.addVAMSAS(root);
-
-
- Tree aTree = this.createTree(parameters);
- if( aTree != null) root.addTree(aTree);
-
- DataSet set = this.createDataSet(parameters);
- if (set != null)
- root.addDataSet(set);
-
- IdFactory vorba = null;
- // TODO: reduce size of vorba ids generated from these parameters to IdFactory (mainly sessionHandle rationalization ?)
- try {
- vorba= new IdFactory(this.client.getSessionHandle(),
- this.client.getClientHandle(), ((VAMAVClient)this.client).getUserHandle());//makeVorbaIdFactory();
- // if session currently holds data - read it in - or get a dummy
- this.logger.sessionDebug("Accessing document");
- }
- catch (Exception e) {
- File sessionDir = ((VAMAVClient)this.client).getVAMAVSession().getSessionDirectory();
- this.logger.sessionError("Failed to get session document for session directory '"+sessionDir.getAbsolutePath()+"'", e);
- throw new IOException("Failed to get session document for session directory '"+sessionDir.getAbsolutePath()+"'");
- }
- // Construct the IClientDocument instance
- ApplicationData appliData = new ApplicationData();
- User user = new User();
- user.setFullname(this.client.getUserHandle().getFullName());
- user.setOrganization(this.client.getUserHandle().getOrganization());
-
- appliData.addUser(user);
- doc.addApplicationData(appliData);
- _doc = new ClientDocument(doc, (VamsasArchive)null, vorba, this.client);
-
- //_doc = new ClientDocument(doc, new VAMSAS[]{root}, null,this.client);
- this.client.updateDocument(_doc);
- return this.client;
- }
-
- /** Create Vamsas Tree object
- * Currently do nothing
- * @return the created tree
- * @param parameters a list of parameters from an AstexViewer@MSD-EBI client
- */
- private Tree createTree(Hashtable<String, Object> parameters)
- {
- return null;
- }
-
-
- private DataSet createDataSet(Hashtable<String, Object> parameters)
- {
- if (parameters == null || parameters.size()<1)
- {
- this.logger.sessionDebug("No parameter provided to create DataSet");
- return null;
- }
- this.logger.sessionDebug("Create DataSet ");
- DataSet set = new DataSet();
- Alignment align = this.createAlignment(parameters);
- if (align != null) set.addAlignment(align);
-
- set = this.createSequences(parameters,set);
-
- this.logger.sessionDebug("end CreateDataSet ");
- return set;
- }
-
- /**
- * creates a Alignment entity following the given parameters
- * @param parameters list of objects used to create the Alignment tree
- */
- private Alignment createAlignment(Hashtable<String, Object> parameters)
- {
- this.logger.sessionDebug("Create Alignment");
- if( parameters == null || parameters.size()<1)
- {
- this.logger.sessionWarn("createAlignment: no object provided: Can not create.");
- return null;
- }
- Alignment align = null;
- //new Alignment();
- if (!this.logger.isProduction()) this.logger.sessionDebug("list of parameters: "+parameters);
- return align;
- }
-
- /**
- * creates a Alignment entity following the given parameters
- * @param parameters list of objects used to create the Alignment tree
- */
- private DataSet createSequences(Hashtable<String, Object> parameters, DataSet set)
- {
- this.logger.sessionDebug("Create Sequences");
- if( parameters == null || parameters.size()<1)
- {
- this.logger.sessionWarn("createSequence: no object provided: Can not create.");
- return null;
- }
- ArrayList<AVSequence> sequences = (ArrayList<AVSequence>) parameters.get("MSD.vamav.common.AVSequence");
- if( sequences != null && sequences.size()>0)
- {
- Alignment align = new Alignment();
-
- for (int sequenceNumber = sequences.size() -1; sequenceNumber >=0; sequenceNumber-- )
- {
- AVSequence sequence = sequences.get(sequenceNumber);
-
- //create sequence object
- Sequence seq = new Sequence();
- seq.setName(sequence.getName());
- String sequenceWithoutGap = sequence.getSequence();
- if( sequenceWithoutGap != null && sequenceWithoutGap.length()>0)
- {
- sequenceWithoutGap = sequenceWithoutGap.replaceAll("-", "");
- }
- seq.setSequence(sequenceWithoutGap);
- set.addSequence(seq);
-
- //create Alignment object relative to thie Sequence object
-
- AlignmentSequence alignmSeq = new AlignmentSequence();
- alignmSeq.setName(sequence.getName());
- alignmSeq.setSequence(sequence.getSequence());
- alignmSeq.setRefid(seq);
- align.addAlignmentSequence(alignmSeq);
- }
- set.addAlignment(align);
- }
-
- if (!this.logger.isProduction()) this.logger.sessionDebug("list of parameters: "+parameters);
- return set;
- }
-
-
- }
+++ /dev/null
-/* Created on 14 nov. 2005\r
- * * EMBL-EBI\r
- * MSD Group\r
- * VAMSAS Project\r
- * VAMAV\r
- * @author <a href="mailto:pierre@ebi.ac.uk">Pierre MARGUERITE</a>\r
- * @version 1 \r
- * @since 14 nov. 2005\r
- */\r
-package uk.ac.ebi.msd.vamsas.vamav.documentmanagement.exceptions;\r
-\r
-/**\r
- * Exception raises if the a Vamsas document is considered as incorrect\r
- * @author <a href="mailto:pierre@ebi.ac.uk">Pierre MARGUERITE</a>\r
- * @version 1\r
- * @since 14 nov. 2005 \r
- * \r
- */\r
-public class IncorrectDocumentException extends Exception\r
- {\r
-\r
- /**\r
- * Constructor \r
- *\r
- */\r
- public IncorrectDocumentException()\r
- {\r
- super();\r
- }\r
-\r
- /**\r
- * Constructor \r
- *\r
- * @param arg0\r
- */\r
- public IncorrectDocumentException(String arg0)\r
- {\r
- super(arg0);\r
- }\r
-\r
- /**\r
- * Constructor \r
- *\r
- * @param arg0\r
- * @param arg1\r
- */\r
- public IncorrectDocumentException(String arg0, Throwable arg1)\r
- {\r
- }\r
-\r
- /**\r
- * Constructor \r
- *\r
- * @param arg0\r
- */\r
- public IncorrectDocumentException(Throwable arg0)\r
- {\r
- super(arg0);\r
- }\r
-\r
- }\r
+++ /dev/null
-/* Created on 12 janv. 2006\r
- * * EMBL-EBI\r
- * MSD Group\r
- * VAMSAS Project\r
- * VAMAV\r
- * @author <a href="mailto:pierre@ebi.ac.uk">Pierre MARGUERITE</a>\r
- * @version 1 \r
- * @since 12 janv. 2006\r
- */\r
-package uk.ac.ebi.msd.vamsas.vamav.documentmanagement.exceptions;\r
-\r
-/**\r
- * Exception raised when the application is unable to process a document\r
- * or a session\r
- * @author <a href="mailto:pierre@ebi.ac.uk">Pierre MARGUERITE</a>\r
- * @version 1\r
- * @since 12 janv. 2006 \r
- * \r
- */\r
-public class UnableToProcessException extends Exception\r
- {\r
-\r
- /**\r
- * Constructor \r
- *\r
- */\r
- public UnableToProcessException()\r
- {\r
- super();\r
- }\r
-\r
- /**\r
- * Constructor \r
- *\r
- * @param arg0\r
- */\r
- public UnableToProcessException(String arg0)\r
- {\r
- super(arg0);\r
- }\r
-\r
- /**\r
- * Constructor \r
- *\r
- * @param arg0\r
- * @param arg1\r
- */\r
- public UnableToProcessException(String arg0, Throwable arg1)\r
- {\r
- super(arg0, arg1);\r
- }\r
-\r
- /**\r
- * Constructor \r
- *\r
- * @param arg0\r
- */\r
- public UnableToProcessException(Throwable arg0)\r
- {\r
- super(arg0);\r
- }\r
-\r
- }\r
+++ /dev/null
-/* * EMBL-EBI
-* MSD Group
-* VAMSAS Project
-* VAMAV
-* * @author <a href="mailto:pierre@ebi.ac.uk">Pierre MARGUERITE</a>
- * @version 1
-*/
-package uk.ac.ebi.msd.vamsas.vamav.documentmanagement.grouping;
-
-import uk.ac.ebi.msd.vamsas.vamav.documentmanagement.grouping.exceptions.UnableToGroupSequencesException;
-import uk.ac.ebi.msd.vamsas.vamav.exceptions.IncorrectVamavModuleInitialisation;
-import uk.ac.ebi.msd.vamsas.vamav.util.data.DataBuffer;
-import uk.ac.ebi.msd.vamsas.vamav.util.logger.VAMAVLogger;
-import uk.ac.ebi.msd.vamsas.vamav.util.logger.VAMAVLoggerImpl;
-import uk.ac.ebi.msd.vamsas.vamav.util.mapping.MappingManager;
-import uk.ac.ebi.msd.vamsas.vamav.util.mapping.exceptions.MappingException;
-import uk.ac.ebi.msd.vamsas.vamav.util.mapping.matrixrotation.RotationTranslationMatrix;
-import uk.ac.ebi.msd.vamsas.vamav.util.multiplealignment.AlignmentManager;
-import uk.ac.ebi.msd.vamsas.vamav.util.multiplealignment.ClustalW_EBIWSClient;
-import uk.ac.ebi.msd.vamsas.vamav.util.multiplealignment.MultipleAlignmentIntf;
-import uk.ac.ebi.msd.vamsas.vamav.util.multiplealignment.exceptions.AlignmentException;
-import uk.ac.ebi.msd.vamsas.vamav.util.pool.DataBufferPool;
-import uk.ac.ebi.msd.vamsas.vamav.util.pool.StringBufferPool;
-import uk.ac.ebi.msd.vamsas.vamav.util.properties.PropertyManager;
-import org.vamsas.objects.core.AnnotationElement;
-import org.vamsas.objects.core.SequenceType;
-
-import java.io.BufferedWriter;
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.FileWriter;
-import java.io.IOException;
-import java.io.OutputStreamWriter;
-import java.io.PrintWriter;
-import java.io.Writer;
-import java.math.BigDecimal;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Enumeration;
-import java.util.Hashtable;
-import java.util.Properties;
-
-/**
-* Abstract class for defining Structure grouping methods.
-*
-* Grouping mode should implement these methods
-*
-* Providing method definitions and code for atribute file generation
- * @author <a href="mailto:pierre@ebi.ac.uk">Pierre MARGUERITE</a>
- * @version 1
-*/
-
-public abstract class SequenceGrouping implements uk.ac.ebi.msd.vamsas.vamav.VamaVModule{
-
- protected final String pdbidsproperty = "pdbids";
-
- protected String modulePrefix = "sequence";
- protected final VAMAVLogger logger = new VAMAVLoggerImpl(this.getClass());
-
- protected Hashtable <String, ArrayList<SequenceType>> groups = null;
-
- /**
- * List of PDB structures per group
- * to allow rotation translation matrix mapping
- */
- protected Hashtable <String, ArrayList<String>> structuresPerGroup = null;
-
- protected char gapChar = 'X';
- protected Hashtable <String,Integer> maxSeqLengthsPerGroup = null;
- protected Hashtable <Integer,String> fakeSequencePerLength = null;
-
- protected ArrayList<File> sequenceFile = null;
- protected final String atrFilePrefix = "atr";
- protected final String alignmentFilePrefix = ".aln";
- protected String workingDirectory = "atributeFile";
- //protected String atributeFile = this.workingDirectory+File.separator+"vamsas"+"."+this.atrFilePrefix;
- protected static String enc = null;
- protected static final boolean erase = true;
- protected static final boolean append = false;
- protected Hashtable<String, Hashtable<Integer, StringBuffer>> sequenceBreakPoints = null;
- protected final boolean deleteOnExit = false;
- /**
- * Mapping manager to retrieve a mapping between ID for example
- *
- */
- protected MappingManager mapping = null;
-
- protected AlignmentManager alignManager = null;
-
-
- /**
- * <p></p>
- *
- */
- // private MultipleAlignmentIntf multipleAlignment;
-
-
- /**
- * List of breakpoints for the current alignmentSet
- */
- protected ArrayList<AnnotationElement> breakpoints = null;
- /**
- * Saves adding order of sequences
- */
- protected ArrayList <String> groupOrder = null;
-
- /**
- *
- * Constructor of the SequenceGrouping class, given a mapping manager
- *
- * @param _mappingManager the mapping manager to use for mapping
- */
- public SequenceGrouping( MappingManager _mappingManager)
- {
- this.mapping = _mappingManager;
-
- }
-
- /**
- * Inits the Sequence Grouping sub module, with a list of configuration properties.
- */
- public void init (Properties moduleProperties) throws IncorrectVamavModuleInitialisation
- {
- PropertyManager propManager = new PropertyManager();
- this.alignManager = new AlignmentManager();
- try
- {
- Properties props = propManager.getModuleProperties(moduleProperties, this.alignManager.getModulePrefix());
- this.alignManager.init(props);
- props = null;
- }
- catch (IncorrectVamavModuleInitialisation ivmie)
- {
- logger.appliError("Unable to init Alignment Manager.");
- throw new IncorrectVamavModuleInitialisation(ivmie);
- }
- propManager = null;
- if (moduleProperties == null || moduleProperties.size()<1)
- {
- this.logger.appliInfo("SequenceGrouping - No properties provided. Uses default.");
- return;
- }
- String gap = moduleProperties.getProperty("gapcharacter", String.valueOf(this.gapChar));
- if( gap !=null && gap.length()<1)
- this.gapChar = gap.charAt(0);
-
- }
-
-
-
-
-
-
- /**
- * Retrieves the mapping attribut
- *
- * @return Returns the mapping.
- */
- protected MappingManager getMapping()
- {
- return this.mapping;
- }
-
- /**
- * retrieves the MultipleAlignmentIntf associated to the current object,
- * to execute multiple alignment
- * @return the MultipleAlignmentIntf object associated to the current object.
- */
- /* private MultipleAlignmentIntf getMultipleAlignment() {
- return this.multipleAlignment;
- }*/
-
- /**
- * Set the MultipleAlignmentIntf for the current object
- * @param multipleAlignmentIntf the MultipleAlignmentIntf object ot associated to the object.
- */
- /* private void setMultipleAlignment(MultipleAlignmentIntf _multipleAlignment)
- {
- this.multipleAlignment = _multipleAlignment;
- }*/
-
- /**
- * Add a sequence for grouping.
- *
- * @param sequence chain sequence to add
- * @param name name of the sequence to add
- * @return a list of parameters to call the AstexViewer
- * @throws UnableToGroupSequencesException if an error occurs during the adding.
- */
- public abstract Hashtable<String, Object> addSequence(String sequence, String name) throws UnableToGroupSequencesException;
-
- /**
- * Add a sequence for grouping, with an associated accessionID and its source.
- *
- * @param sequence chain sequence to add for grouping
- * @param name name of the sequence to add
- * @param accessionID accessionId associated to the sequence
- * @param source source of the accessionID
- * @return list of parameters to call the AstexViewer, if needed. Null, otherwise.
- * @throws UnableToGroupSequencesException if an error occurs during the adding.
- */
- public abstract Hashtable<String, Object> addSequence(String sequence, String name, String accessionID, String source) throws UnableToGroupSequencesException;
-
- /**
- * Registers a PDB ID as belonging to a group
- * @param groupName name of the group to add the structure in it.
- * @param pdbID Id of the PDB structure to add
- */
- protected void addStructureToGroup(String groupName, String pdbID)
- {
- if (this.structuresPerGroup == null)
- {
- this.structuresPerGroup = new Hashtable<String,ArrayList<String>>();
- }
- ArrayList<String> structs= this.structuresPerGroup.get(groupName);
- if (structs == null)
- {//create new list of the group
- structs = new ArrayList<String> ();
- }
- //add structure
- if (!structs.contains(pdbID))
- {
- structs.add(pdbID);
- logger.sessionDebug("Adding structure"+pdbID+" to group "+groupName);
- // readd list to be sure to have the right list in the global list
- this.structuresPerGroup.put(groupName, structs);
- }
- }
- /**
- * Add a sequence to a group
- * @param groupName name of the group to add the sequence into
- * @param sequence sequence to add
- * @param sequenceName name of the sequence to add
- */
- protected void addSequenceToGroup(String groupName, String sequence, String sequenceName)
- {
- if (groupName == null || groupName.length()<1)
- {
- this.logger.sessionError("There is no group name. Can not add the sequence to the group.");
- return;
- }
- if (sequence == null || sequence.length()<1)
- {
- this.logger.sessionError("There is no sequence. Can not add the sequence to the group.");
- return;
- }
-
- this.logger.sessionInfo("Adding "+sequenceName+" sequence to "+groupName+" group.");
- ArrayList<SequenceType> elements = getGroups().get(groupName);
- if (elements == null)
- {
- elements = new ArrayList<SequenceType>();
- this.logger.sessionInfo("No previous list, create one");
- }
- if (sequence ==null)
- this.logger.sessionError("No sequence provided for "+sequenceName+".");
- else
- {
- if (sequence.length()>0)
- {
- Integer maxLength = getMaxSeqLengthsPerGroup().get(groupName);
- if(maxLength!=null&& maxLength.intValue()>0 )
- {
- int maxSeqLength = maxLength.intValue();
- int seqLen = sequence.length();
- if (maxSeqLength < seqLen)
- {
- maxSeqLength = seqLen;
- maxLength = Integer.valueOf(maxSeqLength);
- getMaxSeqLengthsPerGroup().put(groupName, maxLength);
- }
- }
- else
- {
- int seqLen = sequence.length();
- maxLength = Integer.valueOf(seqLen);
- getMaxSeqLengthsPerGroup().put(groupName, maxLength);
- }
- }
- SequenceType seq = new SequenceType() ;
- seq.setName(sequenceName);
- seq.setSequence(sequence);
- if( !elements.contains(seq))
- {
- if (!this.logger.isProduction())
- {
- this.logger.sessionDebug("sequences size before ");
- this.logger.sessionDebug(""+elements.size());
- }
- elements.add(seq);
- }
- //else
- //seq = null;
- if( !this.logger.isProduction())
- {
- this.logger.sessionDebug("sequences size after ");
- this.logger.sessionDebug("" +elements.size());
- this.logger.sessionDebug("groups size before ");
- this.logger.sessionDebug(""+getGroups().size());
- }
- getGroups().put(groupName, elements);
- if( !this.logger.isProduction())
- {
- this.logger.sessionDebug("groups size after ");
- this.logger.sessionDebug(""+getGroups().size());
- }
- addGroupToOrder(groupName);
- }
- }
-
- /**
- * Retrieves the groups attribut
- *
- * @return Returns the groups.
- */
- protected Hashtable<String, ArrayList<SequenceType>> getGroups()
- {
- if (this.groups == null)
- this.groups = new Hashtable<String, ArrayList<SequenceType>> ();
- return this.groups;
- }
-
- /**
- * Retrieves the fakeSequencePerLength attribut
- *
- * @return Returns the fakeSequencePerLength.
- */
- public Hashtable<Integer, String> getFakeSequencePerLength()
- {
- if (this.fakeSequencePerLength == null)
- {
- this.fakeSequencePerLength = new Hashtable<Integer, String>();
- }
- return this.fakeSequencePerLength;
- }
-
- /**
- * Retrieves the maxSeqLengthsPerGroup attribut
- *
- * @return Returns the maxSeqLengthsPerGroup.
- */
- public Hashtable<String, Integer> getMaxSeqLengthsPerGroup()
- {
- if( this.maxSeqLengthsPerGroup == null)
- this.maxSeqLengthsPerGroup = new Hashtable<String, Integer>();
- return this.maxSeqLengthsPerGroup;
- }
-
- /**
- * Retrieves the sequenceOrder attribut
- *
- * @return Returns the sequenceOrder.
- */
- protected ArrayList<String> getGroupOrder() {
- if( this.groupOrder == null)
- this.groupOrder = new ArrayList <String>();
- return this.groupOrder;
- }
-
- protected void addGroupToOrder(String groupName)
- {
- if (!(getGroupOrder().contains(groupName)))
- getGroupOrder().add(groupName);
- }
-
- /**
- * Clear the sequence order List
- */
- public void groupOrderClear() {
- if( this.groupOrder != null)
- this.groupOrder = null;
- }
-
- /**
- * Retrieves the modulePrefix attribut
- *
- * @return Returns the modulePrefix.
- */
- public String getModulePrefix()
- {
- return this.modulePrefix;
- }
-
- /**
- * Add a breakpoint to the grouping
- * @param element annotation element associated to a breakpoint.
- */
- public void addBreakpoint(AnnotationElement element)
- {
- if (element == null)
- {
- this.logger.sessionError("Sequence Grouping addBreakPoint - There is no annotation element. Can not add the breakpoint to groups");
- return;
- }
- this.logger.sessionDebug("Adding breakpoint");
- getBreakpoints().add(element);
- }
-
- /**
- * Retrieves the breakpoints attribut
- *
- * @return Returns the breakpoints.
- */
- protected ArrayList<AnnotationElement> getBreakpoints()
- {
- if (this.breakpoints == null)
- this.breakpoints= new ArrayList<AnnotationElement>();
- return this.breakpoints;
- }
-
- /**
- * Create a fake sequence containing provided breakpoints.
- * @param breaks list of breakpoints
- * @param groupName name of the group the fake sequence will be associated.
- * @return the created fake sequence corresponding to the list of breakpoint
- */
- protected String createFakeSequence(String groupName, ArrayList<AnnotationElement> breaks)
- {
-
- if(breaks == null || breaks.size()<1) return null;
- this.logger.sessionInfo("Creating BreakPoint sequence for "+groupName );
- this.logger.sessionDebug("break points: "+breaks.size());
- String fakeSequence = null;
- Integer len = getMaxSeqLengthsPerGroup().get(groupName);
- if (len != null)
- {
- //retrieves store fake sequence:
- fakeSequence = getFakeSequencePerLength().get(len);
- if( fakeSequence == null || fakeSequence.length()<1)
- {
- Hashtable<Integer, AnnotationElement> positions = new Hashtable<Integer, AnnotationElement> (breaks.size());
- StringBuffer sequence = StringBufferPool.getString();
- for (int breakNumber = breaks.size()-1; breakNumber >=0; breakNumber --)
- {
- AnnotationElement bp = breaks.get(breakNumber);
- if (bp == null) continue;
- int pos = bp.getPosition()-1;//position in the sequence start at 1
- if (pos >=0)
- {
- positions.put(new Integer(pos), bp);
- //System.out.println("adding position "+pos);
- }
- }
-
- int maxSeqLength = len.intValue();
- int size = maxSeqLength -1;
- for (int i = 0; i< maxSeqLength; i++ )
- {
- int reversePos = i;
- //System.out.println("reverse pos "+reversePos);
- Integer p = new Integer(reversePos);
- if (positions.containsKey(p))
- {
- AnnotationElement bp = positions.get(p);
- sequence.append(bp.getDisplayCharacter());
- }
- else
- {
- sequence.append(this.gapChar);
- //System.out.println("no breakpoint found at pos "+reversePos);
- }
- }
- positions = null;
- fakeSequence = sequence.toString();
- StringBufferPool.returnString(sequence);
- getFakeSequencePerLength().put(len, fakeSequence);
- }
- }
- else
- {
- this.logger.sessionDebug("no len");
- }
- this.logger.sessionDebug("fake sequence "+fakeSequence);
- return fakeSequence;
- }
-
-
- /**
- * Writes created groups into an atribute file for tha AstexViewer
- *
- * @throws UnableToGroupSequencesException, if unable to group added sequences
- * @return the atribute file corresponding to the grouping of added sequences
- *
- */
- public File storeGroups() throws UnableToGroupSequencesException
- {
- int size = this.getGroups().size();
- if (size<1)
- {
- this.logger.sessionWarn("Sequence Grouping - There is no computed group. Can not store groups.");
- // return null;
- throw new UnableToGroupSequencesException();
- }
-
- //test if there is at least a sequence in each group.
- boolean correct = true;
- for (Enumeration<String> _groups = this.getGroups().keys(); _groups.hasMoreElements() && correct; )
- {
- String groupName = _groups.nextElement();
- ArrayList<SequenceType> sequences = this.getGroups().get(groupName);
- this.logger.sessionDebug("Group "+groupName);
- if (sequences == null || sequences.size()<1)
- {
- correct = false;
- }
- else
- {
- this.logger.sessionDebug("group size "+sequences.size());
- }
- }
- if (!correct)
- {
- this.logger.sessionWarn("Sequence Grouping - There is no computed group. Can not store groups.");
- //return null;
- throw new UnableToGroupSequencesException();
- }
- if (this.sequenceFile == null)
- this.sequenceFile = new ArrayList<File>();
- else
- this.sequenceFile.clear();
- File atrFile = null;
- try
- {
- this.workingDirectory = this.getOutputDirectory();
- String atributeFile = this.workingDirectory+File.separator+"vamav-"+this.getSessionID()+"."+this.atrFilePrefix;
- logger.sessionInfo("Creating atribute file: "+atributeFile);
- //writing Atribute file
- if( atributeFile == null)
- {
- throw new UnableToGroupSequencesException("No atribute file path provided.");
- }
- if (!atributeFile.endsWith(this.atrFilePrefix))
- {
- atributeFile = atributeFile.concat("."+this.atrFilePrefix);
- }
- atrFile = new File (atributeFile);
- //atrFile.mkdirs();
- this.logger.sessionInfo("SequenceGrouping - Writing Atribute File.");
- PrintWriter out = openFile(atrFile);
- if( out == null)
- throw new UnableToGroupSequencesException("Unable to open file to write. "+atrFile.getAbsolutePath());;
- //return null;
- DataBuffer line = DataBufferPool.getString();
-
- //write header
- line.setString("Atribute file Version 1.0");
- writeLine(line, out);
- line.setString("");
- writeLine(line, out);
- /*int groupNumber = 0;
- for (Enumeration keys = getGroups().keys(); keys.hasMoreElements();)
- {*/
-
- this.alignManager.setSession(this.getSessionID());
- for (int groupNumber = 0; groupNumber < getGroupOrder().size() ;groupNumber++ )
- {
-
-
- String groupName = getGroupOrder().get(groupNumber);
- getGroups();
- //exporting fasta file
- ArrayList<SequenceType> sequences = getGroups().get(groupName);
-
- //generate alignment file name
- // MultipleAlignmentIntf
- // AlignmentManager clustal = new AlignmentManager();//ClustalW_EBIWSClient(this.getSessionID());
- //clustal.setSession(this.getSessionID());
- String extension = "";
- String alignmentfileExtension = alignManager.getMultipleAligmnentFileExtension();
- if (alignmentfileExtension != null && alignmentfileExtension.length()>0)
- if (alignmentfileExtension.startsWith("."))
- extension = alignmentfileExtension;
- else
- extension = ".".concat(alignmentfileExtension);
-
- String alignmentFileName = groupName + extension;
- if( sequences != null && sequences.size()>0)
- {
- //(groupName, "atributeFile");
- this.logger.sessionDebug("Preparing multiple alignment "+groupName);
- if(getBreakpoints()!=null && getBreakpoints().size()>0)
- {
- alignManager.HasBreakPoint();
- String sequence = createFakeSequence(groupName,getBreakpoints() );
- if (sequence !=null)
- {
- String sequenceName = groupName+"Breakpoints_";
- alignManager.addSequence(sequenceName, this.prepareAddSequence(sequence,sequenceName));
- }
- }
- else
- {
- alignManager.HasNoBreakPoint();
- }
- for (int seqNumber = sequences.size() -1; seqNumber>=0; seqNumber--)
- {
- SequenceType seq = sequences.get(seqNumber);
- if (seq == null)
- {
- this.logger.sessionWarn("No sequence to add");
- continue;
- }
- this.logger.sessionDebug("Add sequence for multiple alignment "+seq.getName() + " "+seq.getSequence());
- alignManager.addSequence(seq.getName(), this.prepareAddSequence(seq.getSequence(), seq.getName()));
- }
- String alignment = alignManager.execMultipleAlignment();
- if (alignment!= null)
- {
- File alignmentFile = this.unModifieSequences(alignment, groupName,this.workingDirectory + File.separator+alignmentFileName);
- if (alignmentFile != null)
- this.getSequenceFiles().add(alignmentFile);
- }
- else
- {
- logger.sessionDebug("No alignment retrieved.");
- }
-
- // add group
- ArrayList<String> structs = null;
- DataBuffer ids = DataBufferPool.getString();
-
- if( this.structuresPerGroup != null && this.structuresPerGroup.size()>0)
- {
- structs = this.structuresPerGroup.get(groupName);
-
- if (structs == null || structs.size()<1)
- {
- ids.append("groupName");
-
- logger.sessionInfo("no pdb structure for the group "+groupName+". No matrix added");
- line.setString(" Molecule "+groupName+" "+groupName+" {\n");
- // writeLine(line, out);
- line.append(" }\n");
- //writeLine(line, out);
- }
- else
- {
- String primaryID = structs.remove(structs.size()-1);
- line.setString(" Molecule "+primaryID+" {\n");
- // writeLine(line, out);
- line.append(" }\n");
- //writeLine(line, out);
- ids.append(primaryID);
- for (int structNumber = structs.size()-1; structNumber>=0; structNumber--)
- {
- String id = structs.get(structNumber);
- line.append(" Molecule "+id+" {\n");
- //writeLine(line, out);
- ids.append(" ".concat(id));
- try
- {
- Collection<RotationTranslationMatrix> matrixes = this.mapping.getRotationTranslationMatrix(primaryID, id);
- if (matrixes != null)
- {
- for (RotationTranslationMatrix matrix : matrixes)
- {
- if( matrix != null)
- {
- boolean isChain = false;
- String chainID = matrix.getPrimaryPDBIDChain();
- if(chainID!= null &&chainID.length()>0 )
- {
- isChain = true;
- line.append(" Chain "+chainID+ " {\n");
- }
- if( matrix != null)
- {
- line.append(" Matrix ");
- line.append(BigDecimal.valueOf(matrix.get(0, 0).doubleValue())+ " "+BigDecimal.valueOf(matrix.get(0,1).doubleValue())+ " "+BigDecimal.valueOf(matrix.get(0,2).doubleValue())+ " "+
- BigDecimal.valueOf(matrix.get(1,0).doubleValue())+ " "+BigDecimal.valueOf(matrix.get(1, 1).doubleValue())+ " "+BigDecimal.valueOf(matrix.get(1, 2).doubleValue())+ " "+
- BigDecimal.valueOf(matrix.get(2,0).doubleValue())+ " "+BigDecimal.valueOf(matrix.get(2, 1).doubleValue())+ " "+BigDecimal.valueOf(matrix.get(2,2).doubleValue())+ " "
- + BigDecimal.valueOf(matrix.get(0,3).doubleValue()) + " " + BigDecimal.valueOf(matrix.get(1, 3).doubleValue()) + " " + BigDecimal.valueOf(matrix.get(2, 3).doubleValue()) );
- //writeLine(line, out);
- line.append("\n");
- }
- if( isChain)
- {
- line.append("}\n");
- }
- }
- }
- }
- }
- catch (MappingException mexcep)
- {
- logger.sessionError("Error during RTM mapping.",mexcep);
- }
- line.append(" }\n");
- //writeLine(line, out);
- }
-
- }
-
- }
- DataBuffer groupLine = DataBufferPool.getString();
- groupLine.setString("Group \""+groupName+"\" "+ids+" {");
- // groupLine.setString("Group \""+groupName+"\" {");
- writeLine(groupLine, out);
- DataBufferPool.returnString(groupLine);
- DataBufferPool.returnString(ids);
- line.append(" Sequence \""+alignmentFileName+"\" \n");//\""+groupName+".aln"+"\" ");
- //writeLine(line, out);
- line.append(" Text \"This is a group "+groupName+"\"\n");
- //writeLine(line, out);
- writeLine(line, out);
- //Group "dfr" 7dfr 8dfr {
-
- line.setString("}\n");
- writeLine(line, out);
-
-
-
- }
- else
- this.logger.sessionWarn("No sequence to add to group "+ groupName);
- }
- line.setString("}\n");
- writeLine(line, out);
- closeFile(out);
- alignManager = null;
- }
- catch (AlignmentException ae )
- {
- atrFile = null;
- throw new UnableToGroupSequencesException();
- }
- catch (IOException ioe)
- {
- this.logger.sessionError("Error during Atribute file writing "+atrFile+". ",ioe);
- //ioe.printStackTrace(System.out);
- atrFile = null;
- }
- return atrFile;
- }
-
- /**
- * Readds breakpoints after the multiple alignment ( as display character for breakpoint, are not supported by multiple alignment tools
- *
- * @param alignment alignment String
- * @param alignmentName name of the alignment
- * @return the file containing the alignment with breakpoints
- */
- protected File unModifieSequences (String alignment, String alignmentName, String masterFileName)
- {
- if (alignment == null)
- {
- this.logger.sessionError("UnModifiedSequences - No aligment found. Can not unmodified sequences.");
- return null;
- }
- // logger.Applidebug("Readded breakpoint to sequences "+alignment);
-
-
- // String masterFileName = this.workingDirectory + File.separator+alignmentName+ alignmentfileExtension;
- // WORK_ROOT + "/" +sessionId+ "/master_" + i + ".seq";
- //check workingDirectory exists, can be read and is a directory
- File workingDir = new File (this.workingDirectory);
- if(!(workingDir !=null && workingDir.exists()))
- {
- if (!workingDir.mkdir())
- {
- this.logger.sessionError( "%%% WARNING: couldn't open master "
- + "sequence file for writing. Working directory does not exist. Can not be created. "+this.workingDirectory );
- return null;
- }
- }
- if(! (workingDir.isDirectory()&& workingDir.canRead()))
- {
- logger.sessionError( "%%% WARNING: couldn't open master "
- + "sequence file for writing. Working directory does not exist. " );
- return null;
- }
- File masterFile = new File(masterFileName );
- try
- {
- Writer masterWriter = new FileWriter( masterFile );
- PrintWriter master = new PrintWriter( masterWriter );
- if(this.deleteOnExit) masterFile.deleteOnExit();
-
- //write alignment
- boolean endAlignment = false;
- int len = 0;
- DataBuffer brkSequence = DataBufferPool.getString();
- logger.sessionDebug("Retrieving alignment");
- String[] lines = alignment.split("\n");
- if (lines == null || lines.length<1)
- {
- logger.sessionError("No line retrieving - something wrong.");
- return null;
- }
- logger.sessionDebug(lines.length+" lines found.");
- for ( int lineNumber = 0; lineNumber<lines.length; lineNumber++ )
- {
- String line = lines[lineNumber];
- if (line == null)continue;
- //modified breakpoint sequence as incorrect characters are erased (they have been replaced by X)
- if(line.trim().length()<=0 ||line.trim().equals(" ") ) {master.println(line); continue;}
- if (line.startsWith("Clustal") || line.startsWith("CLUSTAL"))
- {
- master.println(line);
- continue;
- }
- //System.out.println(line);
- int pos = line.indexOf(" ");
- String name = line.substring(0,pos);
- name = name.trim().toLowerCase();
- Hashtable<Integer, StringBuffer> bkpts = this.getSequenceBreakPoints().get(name);
- if (bkpts == null)//no breakpoint associated - write line
- {
- logger.sessionDebug("No breakpoint export line "+line);
- master.println(line);
- /*System.out.println("no break point");*/
- }
- else
- {//modified at positions
- //get sequence
- /*System.out.println(line);*/
- logger.sessionDebug("No breakpoint found ");
- String sequence = line.substring(pos+1,line.length()).trim();
- /*System.out.println("sequence: "+sequence);*/
- int seqPos = line.indexOf(sequence);
- /*System.out.println("break point "+bkpts.size());*/
-
- char[] chars = sequence.toCharArray();
- int currentResidentNumber = 0;
- for (int charNumber = 0; charNumber< chars.length;charNumber++ )
- {
- char currentChar = chars[charNumber];
- if (currentChar == '-')
- {
- //System.out.print(" gap ");
- continue;
- }
- //check if breakpoint
- /*System.out.print(" "+currentResidentNumber+" ");*/
- Integer resN = Integer.valueOf(currentResidentNumber++);
- StringBuffer displayCharacter = bkpts.get(resN);
- len++;
- //System.out.print("|"+(currentResidentNumber-1)+"-"+len+"|");
- if (displayCharacter == null ||displayCharacter.length()<1 )
- {
- continue;
- }
- //breakpoint found
- chars[charNumber] = displayCharacter.charAt(0);
- /*System.out.print(displayCharacter.charAt(0));*/
- bkpts.remove(resN);resN=null;
- }
- int resCount = currentResidentNumber;
- sequence = String.valueOf(chars);
- /*System.out.println("new seq: "+sequence);*/
- if (brkSequence.length()<=0) brkSequence.setString(sequence);
- else brkSequence.append(sequence);
- line = line.substring(0,seqPos).concat(sequence);
- master.println(line);
- Hashtable<Integer, StringBuffer> newBkpts = new Hashtable<Integer, StringBuffer> (bkpts.size());
-
- for (Enumeration positions = bkpts.keys(); positions.hasMoreElements();)
- {
- Integer position = (Integer) positions.nextElement();
- if (position == null|| position.intValue()<0) continue;
- StringBuffer character = bkpts.get(position);
- if( character == null || character.length()!=1)
- continue;
- /*System.out.println("previous breakpoint position "+position.intValue());*/
- bkpts.remove(position);
- //position = null;
- position = Integer.valueOf(position.intValue() - (resCount));
- /*System.out.println("new breakpoint position "+position.intValue());*/
- //use temporary table to avoid deadlock
- newBkpts.put(position, character);
- }
- /*for (Enumeration positions = bkpts.keys(); positions.hasMoreElements();)
- {
- Integer position = (Integer) positions.nextElement();
- if (position == null|| position.intValue()<0) continue;
- StringBuffer character = bkpts.get(position);
- if( character == null || character.length()!=1)
- continue;
- if( position.intValue()<sequence.length()-1 && position.intValue()<=0)
- {
- StringBuffer newLine = new StringBuffer(line);
- newLine.setCharAt(position.intValue(), character.charAt(0));
- line = newLine.toString();
- newLine = null;
- bkpts.remove(position);
- }
- else
- {
- position = Integer.valueOf(position.intValue() - (sequence.length()));
- //use temporary table to avoid deadlock
- tempTable.put(position, character);
- }
- }
- for (Enumeration positions = tempTable.keys(); positions.hasMoreElements();)
- {
- Integer position = (Integer) positions.nextElement();
- if (position == null|| position.intValue()<0) continue;
- StringBuffer character = bkpts.get(position);
- if( character == null || character.length()!=1)
- continue;
- bkpts.put(position, character);
- }*/
- /*System.out.println("New breakpoints "+bkpts.size());
- System.out.println("New breakpoints "+newBkpts.size());*/
- //remove previous breakpoint list
- this.getSequenceBreakPoints().remove(name);
- bkpts = null;
- if (newBkpts != null && newBkpts.size()>0)
- this.getSequenceBreakPoints().put(name, newBkpts);
- }
- }
-
- //release unused object
- this.clearSequenceBreakPoints();
- //StringBufferPool.returnString(this.sequences);
- alignment = null;
- master.close();
- master = null;
- alignmentName = null;
- // System.out.println("new bk seq "+brkSequence);
- DataBufferPool.returnString(brkSequence);
- }
- catch( IOException ioe )
- {
- logger.sessionError( "%%% WARNING: couldn't open master "+ "sequence file for writing: " + ioe );
- // ioe.printStackTrace(System.out);
- masterFile = null;
- }
- return masterFile;
- }
-
- /**
- * As multiple alignment tools do not support breakpoint display characters, they are removed from the sequence, replaced by 'X' character
- * and stored for readding after the multiple alignment (see unModifieSequences method)
- * @param sequence sequence to prepare for alignment
- * @param name name of the sequence to prepare
- * @return the sequence without breakpoint display character
- */
-
- protected String prepareAddSequence(String sequence, String name)
- {
-// save position for breakpoint sequences
- //modified non expected character ( A R D N B C E Z Q G H I L K M F P S T W Y V X)
- //t o the same/unique one ->"|"
- //
- /*sequences.setLength(0);
- sequences.trimToSize();
- sequences.append(sequence);*/
- //System.out.println("current seq "+sequences);
- String temp = sequence.replaceAll("[^ARDNBCEZQGHILKMFPSTWYVX-]", "|");
- StringBuffer s = StringBufferPool.getString();
- s.setLength(0);
- s.trimToSize();
- s.append(temp);
- int pos = s.indexOf("|");
- //System.out.println("tem p seq "+temp);
- Hashtable<Integer, StringBuffer> breakpointPositions = null;
- while (pos>0)
- {
- logger.sessionInfo("new breakpoint "+pos);
- if (breakpointPositions == null) breakpointPositions = new Hashtable<Integer, StringBuffer>();
- breakpointPositions.put(Integer.valueOf(pos), new StringBuffer(sequence.subSequence(pos, pos+1)));
- s.setCharAt(pos, 'X');
- pos = s.indexOf("|");
- }
- if(breakpointPositions!=null )
- {//a breakpoint has been found at least
- this.getSequenceBreakPoints().put(name.trim().toLowerCase(), breakpointPositions);
- }
- String seq = s.toString();
- StringBufferPool.returnString(s);
- return seq;
- }
-
- /**
- * Retrieves the sequenceFile attribut
- *
- * @return Returns the sequenceFile.
- */
- public ArrayList<File> getSequenceFiles() {
- if( this.sequenceFile == null)
- this.sequenceFile = new ArrayList<File> ();
- return this.sequenceFile;
- }
-
-
- /**
- * Opens a file for writing
- *
- *@param file file to open.
- *@return a printwriter to writer into it
- * @exception IOException if an error occurs
- */
- protected PrintWriter openFile(File file) throws IOException
- {
- PrintWriter out = null;
- if (file == null)
- {
- //Application log(no such file)
- throw new IOException("Unknown file");
- }
-
- // check if the current file exists
- file = new File(file.getAbsolutePath());
- logger.sessionDebug("atribute file "+file.getAbsolutePath());
- if (!file.exists() )
- {
- File directory = new File(file.getParent());
- logger.sessionDebug("parent directory "+ directory.getParent());
- // but first, see if it exists already. If so, we don't need
- // to run the groups calculation again, so just return and
- // we're done
- if( directory.exists() ) {
- //
- } else {
- if( ! directory.mkdirs() ) {
- logger.sessionError( "%%% ERROR: Grouping; couldn't create "
- + "directory for grouping /atribute file " );
- }
- }
- if (!file.createNewFile())
- {
- throw new IOException("Can't create file: "
- + file.getAbsolutePath());
- }
- }
- // the file will be overwritten, if the file already exists (but it should be indicated in the log)
-
- if (file.exists() && !erase)
- {
- throw new IOException("The file already exists: "+ file.getAbsolutePath()+ " Shall we overwrite?");
- }
-
-
- if (!file.canWrite() )
- {
- throw new IOException("Can not write in file: "
- + file.getAbsolutePath());
- }
-
- // check possible problem with the reader
- // The file is already opened. So, we close the file, before reopening it.
- if (out != null)
- {
- closeFile(out);
- logger.sessionWarn("The file "+ file.getName()+" has already been opened.");
- }
-
- if (enc != null)
- {
- logger.sessionDebug("Opening File: "+file.getName());
- logger.sessionDebug("set output with encoding : "+enc+" "+file.getAbsolutePath());
- FileOutputStream fos = new FileOutputStream(file.getAbsolutePath(), append);
- try
- {
- OutputStreamWriter ow = new OutputStreamWriter(fos, enc);
- out = new PrintWriter(ow,true);
- logger.sessionDebug("Encoding "+ow.getEncoding()+" support "+java.nio.charset.Charset.isSupported(enc));
- }
- catch (java.io.UnsupportedEncodingException ue)
- {
- logger.sessionError("unsupported encoding ",ue);
- }
- }
- else
- {
-
- logger.sessionDebug("Opening File: "+file.getName());
- FileWriter fw = new FileWriter(file.getAbsolutePath(), append);
- out = new PrintWriter(new BufferedWriter(fw),true);
- }
- return out;
- }
-
-
- /**
- * Closes a data text file.
- * @param out writer of the file to close.
- *
- */
- protected void closeFile(PrintWriter out)
- {
- if (out != null)
- {
- out.flush();
- out.close();
- out = null;
- }
- }
-
-
- /**
- * <p>
- * Retrieves a line from a data file
- * Only when termination requirements have been met, the method should return a
- * <code>String</code> object.
- * </p>
- * @param line containing data items in one String
- * @param out PrintWriter of the file to write line into.
- */
- protected void writeLine(DataBuffer line, PrintWriter out )
- {
- /*System.out.println("Writeline ");*/
- if (line != null)
- {
- if (line.length() == 0)
- {
- /*System.out.println("line empty");*/
- out.println("");
- }
- else
- {
- out.println(line);
- /* System.out.println("Writeline :" + line);*/
- }
- }
- }
-
-
- /**
- * Retrieves the sequenceBreakPoints attribut
- *
- * @return Returns the sequenceBreakPoints.
- */
- protected Hashtable<String, Hashtable<Integer, StringBuffer>> getSequenceBreakPoints()
- {
- if(this.sequenceBreakPoints == null)
- {
- this.sequenceBreakPoints = new Hashtable<String, Hashtable<Integer, StringBuffer>>();
- }
-
- return this.sequenceBreakPoints;
- }
-
- /**
- * Clears breakpoint lisr
- *
- */
- protected void clearSequenceBreakPoints()
- {
- if(this.sequenceBreakPoints != null)
- {
- this.sequenceBreakPoints.clear();
- this.sequenceBreakPoints = null;
- }
- }
-
- /**
- * Retrieves the pdbidsproperty attribut
- *
- * @return Returns the pdbidsproperty.
- */
- public String getPdbidsproperty()
- {
- return this.pdbidsproperty;
- }
-
- /**
- * Retrieves the working directory for output file.
- * @return the path to the output/working directory
- */
- public abstract String getOutputDirectory();
-
- /**
- * retrieves current sessionID
- * @return the ID of the current session for the document grouping.
- */
- public abstract String getSessionID();
- }
+++ /dev/null
-/* Created on 3 janv. 2006\r
- * * EMBL-EBI\r
- * MSD Group\r
- * VAMSAS Project\r
- * VAMAV\r
- * @author <a href="mailto:pierre@ebi.ac.uk">Pierre MARGUERITE</a>\r
- * @version 1 \r
- * @since 3 janv. 2006\r
- */\r
-package uk.ac.ebi.msd.vamsas.vamav.documentmanagement.grouping;\r
-\r
-import uk.ac.ebi.msd.vamsas.vamav.documentmanagement.PDBUtil;\r
-import uk.ac.ebi.msd.vamsas.vamav.documentmanagement.grouping.exceptions.UnableToGroupSequencesException;\r
-import uk.ac.ebi.msd.vamsas.vamav.exceptions.IncorrectVamavModuleInitialisation;\r
-import uk.ac.ebi.msd.vamsas.vamav.session.VAMAVSession;\r
-import uk.ac.ebi.msd.vamsas.vamav.util.data.PDBEntry;\r
-import uk.ac.ebi.msd.vamsas.vamav.util.mapping.MappingManager;\r
-import uk.ac.ebi.msd.vamsas.vamav.util.pool.StringBufferPool;\r
-\r
-import java.io.File;\r
-import java.util.ArrayList;\r
-import java.util.Hashtable;\r
-import java.util.Properties;\r
-\r
-/**\r
- * Groups sequence per PFAM domain.\r
- * \r
- * For each sequence provided, the UniProtID is retrieved (if not provided, as source) by MSD lite.\r
- * Then, the UniProt ID is mapped to PFAM domains, using the sanger web server.\r
- * \r
- * @author <a href="mailto:pierre@ebi.ac.uk">Pierre MARGUERITE</a>\r
- * @version 1\r
- * @since 3 janv. 2006 \r
- * \r
- */\r
-public class SequenceGrouping_domain extends SequenceGrouping\r
- {\r
-\r
- protected VAMAVSession vamavSession = null;\r
- \r
- \r
- /**\r
- * \r
- * Constructor of the SequenceGrouping class, given a mapping manager \r
- *\r
- * @param _mappingManager the mapping manager to use for mapping \r
- */\r
- public SequenceGrouping_domain( MappingManager _mappingManager)\r
- {\r
- super(_mappingManager);\r
- }\r
- \r
- /**\r
- * \r
- * Constructor of the SequenceGrouping class, given a mapping manager \r
- *\r
- * @param _mappingManager the mapping manager to use for mapping \r
- * @param sessionID current session for which will be used the current sequence grouping.\r
- */\r
- public SequenceGrouping_domain(MappingManager _mappingManager, VAMAVSession session )\r
- {\r
- super(_mappingManager);\r
- this.logger.setSession(session.getSessionID());\r
- this.vamavSession = session;\r
- }\r
- \r
- /**\r
- * Inits the Sequence Grouping sub module, with a list of configuration properties.\r
- */\r
- public void init (Properties moduleProperties) throws IncorrectVamavModuleInitialisation\r
- {\r
- super.init(moduleProperties);\r
- }\r
- \r
-\r
- /** \r
- * Adds a sequence to group\r
- * @see uk.ac.ebi.msd.vamsas.vamav.documentmanagement.grouping.SequenceGrouping#addSequence(java.lang.String, java.lang.String)\r
- */\r
- @Override\r
- public Hashtable<String, Object> addSequence(String sequence,\r
- String name) throws UnableToGroupSequencesException\r
- {\r
- // TODO Auto-generated method stub\r
- return null;\r
- }\r
- /**\r
- * Add a sequence for grouping, with an associated accessionID and its source.\r
- * \r
- * @param sequence chain sequence to add for grouping\r
- * @param name name of the sequence to add\r
- * @param accessionID accessionId associated to the sequence\r
- * @param source source of the accessionID\r
- * @return list of parameters to call the AstexViewer, if needed. Null, otherwise.\r
- * @throws UnableToGroupSequencesException if an error occurs during the adding.\r
- * \r
- * @see uk.ac.ebi.msd.vamsas.vamav.documentmanagement.grouping.SequenceGrouping#addSequence(java.lang.String, java.lang.String, java.lang.String, java.lang.String)\r
- \r
- */\r
- @Override\r
- public Hashtable<String, Object> addSequence(String sequence,\r
- String name, String accessionID, String source)\r
- throws UnableToGroupSequencesException\r
- {\r
- \r
- if( sequence == null || sequence.length()<1)\r
- {\r
- this.logger.sessionError("SequenceGrouping - addSequence: Can not add sequence / The sequence is unknown.");\r
- return null;\r
- }\r
- if( name == null || name.length()<1)\r
- {\r
- this.logger.sessionError("SequenceGrouping - addSequence: Can not add sequence / The name is unknown.");\r
- return null;\r
- }\r
- if( source == null || source.length()<1)\r
- {\r
- this.logger.sessionWarn("SequenceGrouping - addSequence: the accession ID source is not provided / try to determine PDBID from the sequence.");\r
- return this.addSequence(sequence, name);\r
- }\r
- if( accessionID == null || accessionID.length()<1)\r
- {\r
- this.logger.sessionWarn("SequenceGrouping - addSequence: the accession ID is not provided / try to determine PDBID from the sequence.");\r
- return this.addSequence(sequence, name);\r
- }\r
- Hashtable<String, Object> parameters = null;\r
- try\r
- {\r
- ArrayList <PDBEntry> entries = null;\r
- \r
- if("PDB".equals(source))\r
- {\r
- PDBEntry entry = this.getMapping().getPDBEntryFromPDBID(accessionID);\r
- if( entry != null)\r
- {\r
- entries = new ArrayList<PDBEntry>(1);\r
- entries.add(entry);\r
- }\r
- }\r
- if ("UNIPROT".equalsIgnoreCase(source))\r
- {\r
- entries = this.getMapping().retrievePDBIDFromUniprotAC(accessionID);\r
- }\r
- if( entries == null || entries.size()<1) \r
- {\r
- this.logger.sessionError("No associated PDB ID to the accessionAC "+ accessionID + " from "+source);\r
- return this.addSequence(sequence, name);\r
- }\r
- \r
-// retrieved associated domains\r
- \r
- \r
- ArrayList<String> domains = this.mapping.retrievePFAMDomain(accessionID);\r
- if (domains == null || domains.isEmpty())\r
- {\r
- logger.sessionWarn("No domain associated to "+accessionID);\r
- logger.sessionWarn("The sequence can not be grouped.");\r
- return null;\r
- }\r
- \r
- //boolean notFound = false;\r
- //hasAlignmentSequences = true;\r
- parameters = new Hashtable<String, Object>();\r
- \r
- int molNumber = 0;\r
- StringBuffer pdbIDs = null;\r
- if (entries != null || entries.size()<1)\r
- {\r
-// Retrieves PDB chains, before adding them to group\r
- //add molecule to AV parameters\r
- ArrayList<PDBUtil.Chain> associatedChains = new ArrayList<PDBUtil.Chain>();\r
- PDBUtil util = new PDBUtil(this.vamavSession);\r
- for (int entryNumber = entries.size() -1; entryNumber >=0; entryNumber --)\r
- {\r
- PDBEntry entry = entries.get(entryNumber);\r
- \r
- parameters.put("moleculeG"+molNumber,entry);\r
- parameters.put("nameG"+molNumber, entry.getPdbID());\r
- if( !logger.isProduction()) logger.sessionDebug("Adding PDB parameters "+parameters);\r
- ArrayList<PDBUtil.Chain> chains = util.GetChain(entry);\r
- \r
- if( chains != null)\r
- {\r
- this.logger.sessionDebug(" chains found ");\r
- associatedChains.addAll(chains);\r
- }\r
- else \r
- this.logger.sessionDebug("no chains found ");\r
- \r
- \r
- if( pdbIDs == null) pdbIDs = StringBufferPool.getString();\r
- if(pdbIDs.length()>0)pdbIDs.append(", "+entry.getPdbID());\r
- else pdbIDs.append(entry.getPdbID());\r
- //entries.remove(entry);\r
- }\r
- \r
- //treating retrieved domains\r
- for (int domainNumber = domains.size() - 1; domainNumber >=0; domainNumber --)\r
- {//add sequence to the current domain\r
- String domainID = domains.get(domainNumber);\r
- if (domainID == null || domainID.length()<0)\r
- {\r
- logger.sessionDebug("No domain. something wrong, while adding sequence to domain group.");\r
- continue;\r
- }\r
- this.addSequenceToGroup(domainID, sequence, name);\r
- //adding PDB chains to the group\r
- if( associatedChains!=null && !associatedChains.isEmpty())\r
- {\r
- for (int chainNumber = associatedChains.size()-1; chainNumber>=0; chainNumber--)\r
- {\r
- PDBUtil.Chain chain = associatedChains.get(chainNumber);\r
- if (chain == null) continue;\r
- \r
- this.addSequenceToGroup(domainID, chain.getSequence(), chain.getName());\r
- }\r
- }\r
- if( entries != null && !entries.isEmpty())\r
- {\r
- for (int entryNumber = entries.size() -1; entryNumber >=0; entryNumber --)\r
- {\r
- PDBEntry entry = entries.get(entryNumber);\r
- if( entry == null) continue;\r
- \r
- this.addStructureToGroup(domainID, entry.getPdbID());\r
- //entries.remove(entry);\r
- }\r
- }\r
- }\r
- //this.addSequenceToGroup(entry.getPdbID(), sequence, name);\r
- util = null;\r
- if(!"PDB".equals(source))parameters.put(this.pdbidsproperty,pdbIDs.toString());\r
- StringBufferPool.returnString(pdbIDs);\r
- entries.clear();\r
- entries = null;\r
- }\r
- \r
- //}\r
- /*catch (IncorrectVamavModuleInitialisation inE)\r
- {\r
- logger.AppliError("Sequence Grouping addSequence - error during mapping execution. Can not proceed.", inE);\r
- throw new UnableToGroupSequencesException();\r
- }*/\r
- }\r
- catch (Exception inE)\r
- {\r
- this.logger.sessionError("Sequence Grouping addSequence - error during mapping execution. Can not proceed.", inE);\r
- throw new UnableToGroupSequencesException();\r
- }\r
- return parameters;\r
- }\r
-\r
- /** Retrieves the directory to store files in.\r
- * @return the output directory for created file by the sequence grouping processing.\r
- */\r
- public String getOutputDirectory()\r
- {\r
- File sessionDir = this.vamavSession.getSessionDirectory(); \r
- if( sessionDir != null)\r
- return sessionDir.getAbsolutePath();\r
- return null; //should not happen, has directory file is attached during object creation. \r
- }\r
- /**\r
- * @see uk.ac.ebi.msd.vamsas.vamav.documentmanagement.grouping.SequenceGrouping#getSessionID()\r
- */\r
- @Override\r
- public String getSessionID()\r
- {\r
- return this.vamavSession.getSessionID();\r
- }\r
-\r
- }\r
+++ /dev/null
-/* * EMBL-EBI
-* MSD Group
-* VAMSAS Project
-* VAMAV
-*/
-package uk.ac.ebi.msd.vamsas.vamav.documentmanagement.grouping;
-
-import uk.ac.ebi.msd.vamsas.vamav.documentmanagement.PDBUtil;
-import uk.ac.ebi.msd.vamsas.vamav.documentmanagement.grouping.exceptions.UnableToGroupSequencesException;
-import uk.ac.ebi.msd.vamsas.vamav.exceptions.IncorrectVamavModuleInitialisation;
-import uk.ac.ebi.msd.vamsas.vamav.session.VAMAVSession;
-import uk.ac.ebi.msd.vamsas.vamav.util.data.PDBEntry;
-import uk.ac.ebi.msd.vamsas.vamav.util.mapping.MappingManager;
-import uk.ac.ebi.msd.vamsas.vamav.util.pool.StringBufferPool;
-
-
-import java.io.File;
-import java.util.ArrayList;
-import java.util.Hashtable;
-import java.util.Properties;
-
-/**
- *Group sequences per structure
- *
- * First, add sequences, with DB ref is provided ( addSequence methods)
- * then,
- *storeGroup Method (To create atribute file and alignment files)
- *
- *Each time a sequence is added, it is added to the determined grou.
- * @version 1
- *@author <a href="mailto:pierre@ebi.ac.uk">Pierre MARGUERITE</a>
- */
-public class SequenceGrouping_structure extends SequenceGrouping //implements uk.ac.ebi.msd.vamsas.vamav.VamaVModule{
-{
-
-
- //private final VAMAVLogger logger = new VAMAVLoggerImpl(this.getClass());
- protected VAMAVSession vamavSession = null;
-
-
- /**
- *
- * Constructor of the SequenceGrouping class, given a mapping manager
- *
- * @param _mappingManager the mapping manager to use for mapping
- */
- public SequenceGrouping_structure( MappingManager _mappingManager)
- {
- super(_mappingManager);
- }
-
- /**
- *
- * Constructor of the SequenceGrouping class, given a mapping manager
- *
- * @param _mappingManager the mapping manager to use for mapping
- * @param sessionID current session for which will be used the current sequence grouping.
- */
- public SequenceGrouping_structure(MappingManager _mappingManager, VAMAVSession session )
- {
- super(_mappingManager);
- this.logger.setSession(session.getSessionID());
- this.vamavSession = session;
- }
-
- /**
- * Inits the Sequence Grouping sub module, with a list of configuration properties.
- */
- public void init (Properties moduleProperties) throws IncorrectVamavModuleInitialisation
- {
- super.init(moduleProperties);
- }
-
- /**
- * Add a sequence for grouping.
- *
- * @param sequence chain sequence to add
- * @param name name of the sequence to add
- * @return a list of parameters to call the AstexViewer
- * @throws UnableToGroupSequencesException if an error occurs during the adding.
- */
- public Hashtable<String, Object> addSequence(String sequence, String name) throws UnableToGroupSequencesException
- {
- if( sequence == null || sequence.length()<1)
- {
- this.logger.sessionWarn("SequenceGrouping addSequence - no Sequence Provided. Can not add.");
- return null;
- }
- if( name == null || name.length()<1)
- {
- this.logger.sessionWarn("SequenceGrouping addSequence - no name Provided. Can not add.");
- return null;
- }
- ArrayList<PDBEntry> entries = null;
- try
- {
- entries = this.getMapping().retrievePDBIDFromSequence(sequence);
- }
- catch (IncorrectVamavModuleInitialisation inE)
- {
- this.logger.sessionError("Sequence Grouping addSequence - error during mapping execution. Can not proceed.", inE);
- throw new UnableToGroupSequencesException();
- }
- Hashtable<String, Object> parameters = null;
- if (entries == null ) return null;
- StringBuffer pdbIDs = StringBufferPool.getString();
- for (int entryNumber = entries.size() -1; entryNumber>=0; entryNumber--)
- {
- PDBEntry entry = entries.get(entryNumber);
- if (entry == null) continue;
-
- parameters = new Hashtable<String, Object>();
- int molNumber = 0;
- if( !parameters.containsValue(entry))
- {
- parameters.put("moleculeG"+molNumber,entry);
- parameters.put("nameG"+molNumber, entry.getPdbID());
- this.logger.sessionDebug("New molecule added "+entry);
-
- molNumber++;
- }
- PDBUtil util = new PDBUtil(this.vamavSession);
-
- ArrayList<PDBUtil.Chain> chains = util.GetChain(entry);
- util = null;
- if( chains != null)
- {
- /*System.out.println(" chains found ");*/
- for (int chainN = chains.size()-1; chainN>=0; chainN --)
- {
- PDBUtil.Chain chain =chains.get(chainN);
- if (chain == null)continue;
- /*System.out.println("chain "+chain.getName()+ " "+chain.getSequence());*/
- String groupName = chain.getName();
- int pos = groupName.indexOf("_");
- if( pos>0) groupName = groupName.substring(0,pos);
- this.addSequenceToGroup(groupName,chain.getSequence(),chain.getName());
- this.addStructureToGroup(groupName, entry.getPdbID());
- }
- }
- else
- this.logger.sessionWarn("no chains found ");
- String id = entry.getPdbID();
- this.addSequenceToGroup(id, sequence, name);
- if(pdbIDs.length()<1) pdbIDs.append(id);
- else pdbIDs.append(", "+id);
- }
- parameters.put(this.pdbidsproperty,pdbIDs.toString());
- StringBufferPool.returnString(pdbIDs);
- return parameters;
- }
-
- /**
- * Add a sequence for grouping, with an associated accessionID and its source.
- *
- * @param sequence chain sequence to add for grouping
- * @param name name of the sequence to add
- * @param accessionID accessionId associated to the sequence
- * @param source source of the accessionID
- * @return list of parameters to call the AstexViewer, if needed. Null, otherwise.
- * @throws UnableToGroupSequencesException if an error occurs during the adding.
- */
- public Hashtable<String, Object> addSequence(String sequence, String name, String accessionID, String source) throws UnableToGroupSequencesException
- {
-
- if( sequence == null || sequence.length()<1)
- {
- this.logger.sessionError("SequenceGrouping - addSequence: Can not add sequence / The sequence is unknown.");
- return null;
- }
- if( name == null || name.length()<1)
- {
- this.logger.sessionError("SequenceGrouping - addSequence: Can not add sequence / The name is unknown.");
- return null;
- }
- if( source == null || source.length()<1)
- {
- this.logger.sessionWarn("SequenceGrouping - addSequence: the accession ID source is not provided / try to determine PDBID from the sequence.");
- return this.addSequence(sequence, name);
- }
- if( accessionID == null || accessionID.length()<1)
- {
- this.logger.sessionWarn("SequenceGrouping - addSequence: the accession ID is not provided / try to determine PDBID from the sequence.");
- return this.addSequence(sequence, name);
- }
- Hashtable<String, Object> parameters = null;
- try
- {
- ArrayList <PDBEntry> entries = null;
-
- if("PDB".equals(source))
- {
- PDBEntry entry = this.getMapping().getPDBEntryFromPDBID(accessionID);
- if( entry != null)
- {
- entries = new ArrayList<PDBEntry>(1);
- entries.add(entry);
- }
- }
- if ("UNIPROT".equalsIgnoreCase(source))
- {
- entries = this.getMapping().retrievePDBIDFromUniprotAC(accessionID);
- }
- if( entries == null || entries.size()<1)
- {
- this.logger.sessionError("No associated PDB ID to the accessionAC "+ accessionID + " from "+source);
- return this.addSequence(sequence, name);
- }
- //boolean notFound = false;
- //hasAlignmentSequences = true;
- parameters = new Hashtable<String, Object>();
-
- //currenty only use the first entry
- //for ( int entryNumber = entries.size()-1; entryNumber>=0; entryNumber --)
- //{
- int molNumber = 0;
- StringBuffer pdbIDs = null;
- if (entries != null || entries.size()<1)
- {
- PDBUtil util = new PDBUtil(this.vamavSession);
- for (int entryNumber = entries.size() -1; entryNumber >=0; entryNumber --)
- {
- PDBEntry entry = entries.get(entryNumber);
- parameters.put("moleculeG"+molNumber,entry);
- parameters.put("nameG"+molNumber, entry.getPdbID());
-
- ArrayList<PDBUtil.Chain> chains = util.GetChain(entry);
-
- if( chains != null)
- {
- this.logger.sessionDebug(" chains found ");
- // StringBuffer buff = StringBufferPool.getString();
- for (int chainN = chains.size()-1; chainN>=0; chainN --)
- {
- PDBUtil.Chain chain = chains.get(chainN);
- if (chain == null)continue;
- String groupName = chain.getName();
- int pos = groupName.indexOf("_");
- if( pos>0) groupName = groupName.substring(0,pos);
- this.addSequenceToGroup(groupName, chain.getSequence(),chain.getName());
- this.addStructureToGroup(groupName, entry.getPdbID());
- chain = null;
- }
- }
- else
- this.logger.sessionDebug("no chains found ");
-
- this.addSequenceToGroup(entry.getPdbID(), sequence, name);
- if( pdbIDs == null) pdbIDs = StringBufferPool.getString();
- if(pdbIDs.length()>0)pdbIDs.append(", "+entry.getPdbID());
- else pdbIDs.append(entry.getPdbID());
- entries.remove(entry);
- }
- util = null;
- if(!"PDB".equals(source))parameters.put(this.pdbidsproperty,pdbIDs.toString());
- StringBufferPool.returnString(pdbIDs);
- }
-
- //}
- /*catch (IncorrectVamavModuleInitialisation inE)
- {
- logger.AppliError("Sequence Grouping addSequence - error during mapping execution. Can not proceed.", inE);
- throw new UnableToGroupSequencesException();
- }*/
- }
- catch (Exception inE)
- {
- this.logger.sessionError("Sequence Grouping addSequence - error during mapping execution. Can not proceed.", inE);
- throw new UnableToGroupSequencesException();
- }
- return parameters;
- }
-
- /**
- * Retrieves the directory to store files in.
- * @return the output directory for created file by the sequence grouping processing.
- */
- public String getOutputDirectory()
- {
- File sessionDir = this.vamavSession.getSessionDirectory();
- if( sessionDir != null)
- return sessionDir.getAbsolutePath();
- return null; //should not happen, has directory file is attached during object creation.
- }
-
- /**
- * Retrieves current sessionID
- * @see uk.ac.ebi.msd.vamsas.vamav.documentmanagement.grouping.SequenceGrouping#getSessionID()
- */
- @Override
- public String getSessionID()
- {
-
- return this.vamavSession.getSessionID();
- }
-
-
- }
+++ /dev/null
-/* Created on 22 nov. 2005\r
- * * EMBL-EBI\r
- * MSD Group\r
- * VAMSAS Project\r
- * VAMAV\r
- * @author <a href="mailto:pierre@ebi.ac.uk">Pierre MARGUERITE</a>\r
- * @version 1 \r
- * @since 22 nov. 2005\r
- */\r
-package uk.ac.ebi.msd.vamsas.vamav.documentmanagement.grouping.exceptions;\r
-\r
-/**\r
- * \r
- * @author <a href="mailto:pierre@ebi.ac.uk">Pierre MARGUERITE</a>\r
- * @version 1\r
- * @since 22 nov. 2005 \r
- * \r
- */\r
-public class UnableToGroupSequencesException extends Exception\r
- {\r
-\r
- /**\r
- * Constructor \r
- *\r
- */\r
- public UnableToGroupSequencesException()\r
- {\r
- super();\r
- }\r
-\r
- /**\r
- * Constructor \r
- *\r
- * @param arg0\r
- */\r
- public UnableToGroupSequencesException(String arg0)\r
- {\r
- }\r
-\r
- /**\r
- * Constructor \r
- *\r
- * @param arg0\r
- * @param arg1\r
- */\r
- public UnableToGroupSequencesException(String arg0, Throwable arg1)\r
- {\r
- super(arg0, arg1);\r
- }\r
-\r
- /**\r
- * Constructor \r
- *\r
- * @param arg0\r
- */\r
- public UnableToGroupSequencesException(Throwable arg0)\r
- {\r
- super(arg0);\r
- }\r
-\r
- }\r
+++ /dev/null
-/* \r
- * /* \r
- * EMBL - European Bioinformatics institute\r
- * MSD Group\r
- * VAMSAS Project\r
- *\r
- *Created on 14 d�c. 2005\r
- * @author <a href="mailto:pierre@ebi.ac.uk">Pierre MARGUERITE</a>\r
- * @version 1 \r
- * @since 14 d�c. 2005\r
- */\r
-package uk.ac.ebi.msd.vamsas.vamav.session;\r
-\r
-import uk.ac.ebi.msd.vamsas.vamav.VAMAVClient;\r
-import uk.ac.ebi.msd.vamsas.vamav.VamaVModule;\r
-import uk.ac.ebi.msd.vamsas.vamav.exceptions.IncorrectVamavModuleInitialisation;\r
-import uk.ac.ebi.msd.vamsas.vamav.session.exceptions.UnableToOpenSession;\r
-import uk.ac.ebi.msd.vamsas.vamav.util.file.FileCopy;\r
-import uk.ac.ebi.msd.vamsas.vamav.util.file.description.FileFormatDescription;\r
-import uk.ac.ebi.msd.vamsas.vamav.util.file.description.SimpleFileFormatDescription;\r
-import uk.ac.ebi.msd.vamsas.vamav.util.logger.VAMAVLogger;\r
-import uk.ac.ebi.msd.vamsas.vamav.util.logger.VAMAVLoggerImpl;\r
-import uk.ac.ebi.msd.vamsas.vamav.util.properties.PropertyManager;\r
-import uk.ac.ebi.msd.vamsas.vamav.util.properties.exceptions.UnableToStorePropertiesException;\r
-\r
-import org.vamsas.client.ClientHandle;\r
-import org.vamsas.client.IClient;\r
-import org.vamsas.client.IClientFactory;\r
-import org.vamsas.client.InvalidSessionUrnException;\r
-import org.vamsas.client.NoDefaultSessionException;\r
-import org.vamsas.client.UserHandle;\r
-import org.vamsas.client.simpleclient.ArchiveUrn;\r
-import org.vamsas.client.simpleclient.SessionUrn;\r
-import org.vamsas.client.simpleclient.VamsasArchiveReader;\r
-import org.vamsas.client.simpleclient.VamsasSession;\r
-\r
-import java.io.File;\r
-import java.io.IOException;\r
-import java.lang.reflect.Array;\r
-import java.net.MalformedURLException;\r
-import java.util.ArrayList;\r
-import java.util.Arrays;\r
-import java.util.Enumeration;\r
-import java.util.Hashtable;\r
-import java.util.Properties;\r
-\r
-/**\r
- * Manager for VAMSAS session.\r
- * Creates Session to which is attached clients\r
- * \r
- * Avoid to reinit a session previously treated.\r
- * \r
- * @author <a href="mailto:pierre@ebi.ac.uk">Pierre MARGUERITE</a>\r
- * @version 1\r
- * @since 14 d�c. 2005 \r
- * \r
- */\r
-public class SessionManager implements VamaVModule, IClientFactory\r
- {\r
-\r
-/**\r
- * Definition string for the VAMAV client\r
- */\r
- private final String clientName = "VAMSAS - AstexViewer@MSD-EBI";\r
- private final String clientVersion = "0.6";\r
- \r
- /**\r
- * List of session ID and the associated session\r
- *\r
- */\r
- private Hashtable<String, VAMAVSession> sessions = null;\r
- \r
- /**\r
- * Property names\r
- */\r
- private final String modulePrefix = "sessionmanager";\r
- \r
- private final String sessionarenaProperty = "sessionarena";\r
- \r
- private final String sessiondirectoryProperty = "sessiondirectory";\r
- private final String sessionLogFileProperty = "sessionlogfile";\r
- private final String appletFileProperty = "appletfile";\r
- private final String sessionDocumentFileNameProperty = "sessiondocumentfilename";\r
- \r
- /*private VAMAVClientFactory clientfactory = null;*/\r
- \r
- /**\r
- * Logger to report messages\r
- */\r
- private final VAMAVLogger logger = new VAMAVLoggerImpl(this.getClass());\r
- \r
- /**\r
- * Tags to replace at run-time from rules\r
- */\r
- private final String temporaryTag = "@temp@";\r
- private final String sessionIDTag = "@sessionid@";\r
- private final String sessionDirTag = "@sessiondir@";\r
- private final String logExtensionTag = "@logfileextension@";\r
- private final String documentExtensionTag = "@documentextension@";\r
- \r
- /**\r
- * Rules for runtime variables (directories, files, ..)\r
- */\r
- \r
- private String sessionArenaRule = this.temporaryTag;\r
- private String sessionDirectoryRule = this.sessionIDTag;\r
- \r
- private String sessionLogFileRule = this.sessionDirTag+File.separator+this.sessionIDTag+"."+this.logExtensionTag;\r
- private String sessionDocumentFileNameRule = this.sessionDirTag+File.separator+"vamsas"+"."+this.documentExtensionTag;\r
- private String appletFile = "index.html";\r
- \r
- /**\r
- * Keep a track of opened session.\r
- * Stores session\r
- */\r
- private Properties sessionTrack = null;\r
- private final String trackFileName = "sessions.properties";\r
- private final String trackDefaultDirectory = "sessions";\r
- \r
- /**\r
- * root directory of the application\r
- * Can be different of the current directory, in servlet server for example.\r
- */\r
- private static String baseDirectory = null;\r
-\r
-\r
- private File sessionArena = null;\r
- \r
- /**\r
- * default constructor - called by CreateClientFactory only.\r
- *\r
- */\r
- public SessionManager() {\r
- sessionArena = null;\r
- }\r
- /**\r
- * Create a SessionManager that works parent directory for all session directories\r
- * @param path\r
- */\r
- public SessionManager(String path) throws IOException\r
- {\r
- // Check path is valid and read/writeable.\r
- File newarena = new File(path);\r
- if (newarena.exists() && newarena.isDirectory() && newarena.canRead() && newarena.canWrite()) \r
- {\r
- sessionArena = newarena;\r
- } \r
- else\r
- {\r
- sessionArena = null;\r
- throw(new IOException("Cannot read and write to a directory called "+path));\r
- }\r
- }\r
-\r
- /**\r
- * Retrieves the modulePrefix attribut to init the current VAMAVModule\r
- *\r
- * @return Returns the modulePrefix.\r
- */\r
- public String getModulePrefix()\r
- {\r
- return this.modulePrefix;\r
- }\r
-\r
-\r
-\r
- /**\r
- * Inits the Session Manager module following given properties\r
- * \r
- * @see uk.ac.ebi.msd.vamsas.vamav.VamaVModule#init(java.util.Properties)\r
- */\r
- public void init(Properties properties) throws IncorrectVamavModuleInitialisation\r
- {\r
- logger.appliInfo("Init Session Manager: ");\r
- /*/ try \r
- {\r
- this.clientfactory = new VAMAVClientFactory("factory");\r
- }\r
- catch (IOException e) \r
- {\r
- throw new IncorrectVamavModuleInitialisation("Unable to create client factory");\r
- }*/\r
- if (properties != null && properties.size()>0)\r
- {\r
- this.sessionDirectoryRule = properties.getProperty(this.sessiondirectoryProperty, this.sessionDirectoryRule);\r
- \r
- this.sessionLogFileRule = properties.getProperty(this.sessionLogFileProperty, this.sessionLogFileRule);\r
- this.appletFile = properties.getProperty(this.appletFileProperty, this.appletFile);\r
- this.sessionDocumentFileNameRule = properties.getProperty(this.sessionDocumentFileNameProperty, this.sessionDocumentFileNameRule);\r
- this.sessionArenaRule = properties.getProperty(this.sessionarenaProperty, this.sessionArenaRule);\r
- }\r
- if( this.sessionArenaRule.contains(this.temporaryTag))\r
- {\r
- logger.applidebug("temporary tag found");\r
- try\r
- {\r
- File tempDir = createTempDir("VAMAV");\r
- if( !logger.isProduction()) logger.applidebug("temporary directory "+tempDir.getAbsolutePath());\r
- String preparePath = tempDir.getAbsolutePath().replaceAll("\\\\", "\\\\\\\\");\r
- this.sessionArenaRule = this.sessionArenaRule.replaceAll(this.temporaryTag,preparePath);\r
- logger.applidebug("session arena rule "+this.sessionArenaRule);\r
- }\r
- catch (IOException exception)\r
- {\r
- this.logger.appliError("Session Manager/init: Unable to create temp directory.", exception);\r
- throw new IncorrectVamavModuleInitialisation(exception);\r
- }\r
- }\r
- else\r
- { logger.applidebug("No temporary tag");\r
- if (baseDirectory!= null)\r
- this.sessionArenaRule = baseDirectory.concat(File.separator).concat(this.sessionArenaRule);\r
- }\r
- if(this.sessionLogFileRule!=null && this.sessionLogFileRule.length()>0 )\r
- {\r
- this.sessionLogFileRule = this.sessionLogFileRule.replaceAll(this.logExtensionTag,logger.getLogExtension());\r
- }\r
- \r
- Hashtable<String, String> variables = new Hashtable<String, String>();\r
- variables.put(this.logExtensionTag, logger.getLogExtension());\r
- variables.put(this.sessionDirTag, this.sessionDirectoryRule);\r
- variables.put(this.sessionDocumentFileNameRule, this.sessionDirectoryRule);\r
- this.replaceVariable(this.sessionDocumentFileNameRule, variables);\r
- \r
- this.sessionTrack = new Properties();\r
- PropertyManager propManager = new PropertyManager();\r
- this.sessionTrack = propManager.loadProperties(this.trackFileName, this.trackDefaultDirectory);\r
- }\r
- \r
- /**\r
- * Variables which can be found in property values, by correct value \r
- * (except sessionId, which is no global to the application.) \r
- * @param rule\r
- * @return\r
- */\r
- private String replaceVariable(String rule, Hashtable<String, String> variables)\r
- {\r
- if(rule == null )\r
- {\r
- logger.appliError("No rule provided to replace variables");\r
- return null;\r
- }\r
- if( rule.length()<1)\r
- {\r
- return rule;\r
- }\r
- if( variables == null || variables.size()<1)\r
- {\r
- return rule;\r
- }\r
- /**\r
- * Prepare rule, otherwise '\' character is removed by replaceAll\r
- */\r
- String preparePath = rule.replaceAll("\\\\", "\\\\\\\\");\r
- for (Enumeration keys = variables.keys(); keys.hasMoreElements();)\r
- {\r
- String var = (String)keys.nextElement();\r
- rule = rule.replaceAll(var,variables.get(var).replaceAll("\\\\", "\\\\\\\\"));\r
- }\r
- return rule;\r
- \r
- }\r
- \r
- \r
- /**\r
- * Reopens a session following the session ID for the new user\r
- * \r
- * @param firstName firstname of the user to open the session\r
- * @param lastName lastname of the user\r
- * @param sessionID ID of the session to open\r
- * @return the created IClient according to the parameters provided\r
- * @throws UnableToOpenSession if an error occurs while trying to open a session.\r
- */\r
- public VAMAVClient openSession(String firstName, String lastName, String sessionID) throws UnableToOpenSession\r
- {\r
- if(sessionID == null || sessionID.length()<1 )\r
- {\r
- this.logger.sessionFatal("Open Session - No sessionID provided: can not open session.");\r
- return null;\r
- }\r
- VAMAVSession session = this.getSessions().get(sessionID);\r
- VAMAVClient vorbaclient = null;\r
- if (session == null)\r
- {\r
- //this.logger.sessionFatal("Open Session - No previous session exists. Can not open session.");\r
- //return null;\r
- this.logger.appliInfo("Opening closed session");\r
- String sessionDir = this.sessionTrack.getProperty(sessionID);\r
- if( sessionDir == null || sessionDir.length()<1 )\r
- {\r
- this.logger.appliFatal("Open Session - No previous session exists. Can not open session.");\r
- return null;\r
- }\r
- File dir = new File (sessionDir);\r
- String appletFileName = this.appletFile.replaceAll(this.sessionIDTag, sessionID);\r
- if (dir.exists() && dir.canRead() && dir.isDirectory() && Arrays.asList(dir.list()).contains(appletFileName))\r
- {//the directory contains some files\r
-// creating VAMSAS CLient\r
- try\r
- {\r
- session = new VAMAVSession(dir);\r
- //session.setSessionDirectory(new File (sessionDir));\r
- String preparePath = sessionDir.replaceAll("\\\\", "\\\\\\\\");\r
- session.setSessionLogFile(new File (this.sessionLogFileRule.replaceAll(this.sessionIDTag, sessionID).replaceAll(this.sessionDirTag, preparePath)));\r
- session.setAppletFileName(appletFileName);\r
- session.setClosedSession(true);//.setSessionID( true);\r
- this.getSessions().put(sessionID, session);\r
- }\r
- catch (IOException ioe)\r
- {\r
- this.logger.appliError("unable to access to the session directory.", ioe);\r
- throw new UnableToOpenSession (ioe);\r
- }\r
- }\r
- }\r
- ClientHandle app = new ClientHandle(this.clientName,this.clientVersion);\r
- \r
- if( firstName != null)\r
- {\r
- UserHandle user = new UserHandle(firstName,lastName);\r
- vorbaclient = (VAMAVClient)this.getIClient(app, user, sessionID);\r
- }\r
- else\r
- {\r
- /*try\r
- {*/\r
- vorbaclient = (VAMAVClient)this.getIClient(app);\r
- /* }\r
- catch (NoDefaultSessionException ndse)\r
- {\r
- this.logger.sessionError("Can not create client: ",ndse);\r
- this.logger.appliError("Can not create client: ",ndse);\r
- throw new UnableToOpenSession(ndse);\r
- }*/\r
- }\r
- session.addAttachedClient(vorbaclient);\r
- return vorbaclient;\r
- }\r
- \r
- /**\r
- * Opens a new VAMSAS session for the provided VAMSAS document\r
- * \r
- * \r
- * @param firstName firstname of the user to open the session\r
- * @param lastName lastname of the user\r
- * @param sessionID ID of the session to open\r
- * @return the created IClient according to the parameters provided\r
- * @throws UnableToOpenSession if an error occurs while trying to open a session.\r
- */\r
- public VAMAVClient openSession(String firstName, String lastName, File documentPath) throws UnableToOpenSession\r
- {\r
- /**\r
- * check document path\r
- */\r
- if(documentPath == null || !documentPath.exists()) \r
- {\r
- this.logger.sessionFatal("No Document path provided or path incorrect. Can not open session.");\r
- return null;\r
- }\r
- \r
- if (!documentPath.canRead() || !documentPath.isFile()) \r
- {\r
- this.logger.sessionFatal("No Document path provided or path incorrect. Can not open session. "+documentPath);\r
- return null;\r
- }\r
- \r
- if ( (firstName == null ||firstName.length()<1 )\r
- && lastName == null||lastName.length()<1)\r
- {\r
- logger.appliError("No user information provided. Can not open session");\r
- throw new UnableToOpenSession("No user information provided. Can not open session");\r
- }\r
- logger.applidebug("Starting new session with data from "+documentPath+".");\r
- //ArchiveUrn vamdoc = new ArchiveUrn(documentPath);\r
- VamsasArchiveReader archive = new VamsasArchiveReader(documentPath);\r
- // TODO: a real validity test. The below just checks it can be read.\r
- if (!archive.isValid())\r
- throw new UnableToOpenSession(documentPath+" is not a valid vamsasDocument archive.");\r
- ArchiveUrn vamsasdocument = null;\r
- try\r
- {\r
- vamsasdocument = new ArchiveUrn(documentPath);\r
- }\r
- catch (MalformedURLException mue)\r
- {\r
- throw new UnableToOpenSession();\r
- }\r
-\r
- \r
- ClientHandle app = new ClientHandle(this.clientName,this.clientVersion);\r
- UserHandle user = new UserHandle(firstName,lastName);\r
-\r
- try\r
- {\r
- this.logger.applidebug("Opening session for "+documentPath + " "+vamsasdocument.asFile() +" "+vamsasdocument.getSessionUrn());\r
- return (VAMAVClient) this.openSession(app, user, vamsasdocument);\r
- }\r
- catch (IOException ioe)\r
- {\r
- throw new UnableToOpenSession(ioe);\r
- }\r
- }\r
- \r
- \r
- \r
- public IClient openSession(ClientHandle applicationHandle, UserHandle userId, ArchiveUrn vamsasdocument) throws IOException\r
- {\r
- this.logger.applidebug("openSession "+vamsasdocument.asFile());\r
- if (vamsasdocument == null) \r
- {\r
- return null;\r
- }\r
- \r
- // create new session directory\r
- if (sessionArena==null)\r
- throw new Error("Improperly initialised SimpleClientFactory object - null sessionArena.");\r
- File sessdir = File.createTempFile("sess", ".simpleclient", sessionArena);\r
- if (!(sessdir.delete() && sessdir.mkdir()))\r
- throw new IOException("Could not make session directory "+sessdir);\r
- \r
-// create session\r
- //generate document copy in the session directory\r
- VAMAVSession session = null;\r
- try\r
- {this.logger.applidebug("Creating VAMAVSession for "+sessdir);\r
- session = new VAMAVSession(sessdir);\r
- this.sessionTrack.setProperty(session.getSessionID(), sessdir.getAbsolutePath());\r
- String preparePath = sessdir.getAbsolutePath().replaceAll("\\\\", "\\\\\\\\");\r
- \r
- session.setSessionLogFile(new File (this.sessionLogFileRule.replaceAll(this.sessionIDTag, session.getSessionID()).replaceAll(this.sessionDirTag, preparePath)));\r
- session.setAppletFileName(this.appletFile);\r
- this.getSessions().put(session.getSessionID(), session);\r
- // copy document into session directory\r
- File doc = vamsasdocument.asFile();\r
- this.logger.applidebug("setting document "+doc.getPath());\r
- this.logger.applidebug("setting document "+doc.getAbsolutePath());\r
- session.setVamsasDocument(doc);\r
- }\r
- catch (IOException ioe)\r
- {\r
- throw ioe;//new UnableToOpenSession(ioe); \r
- }\r
- IClient vorbaclient = this.getIClient(applicationHandle, userId, session);\r
- session.addAttachedClient((VAMAVClient)vorbaclient);\r
- //process the Vamsas Document to launch AstexViewer with suitable parameters\r
- return vorbaclient;\r
- }\r
- \r
- /**\r
- * make a new vamsas session from the data in the archive vamsasdocument \r
- * @param applicationHandle\r
- * @param userId\r
- * @param vamsasdocument\r
- * @return\r
- */\r
- /* public IClient openSession(ClientHandle applicationHandle, UserHandle userId, ArchiveUrn vamsasdocument) throws IOException {\r
- // verify applicationHandle and userId\r
- // TODO: verify applicationHandle and userId\r
- // verify vamsasdocument is a valid document.\r
- File vamdoc = vamsasdocument.asFile();\r
- this.logger.applidebug("Starting new session with data from "+vamsasdocument.getSessionUrn()+"(File is : "+vamdoc+")");\r
- VamsasArchiveReader archive = new VamsasArchiveReader(vamdoc);\r
- // TODO: a real validity test. The below just checks it can be read.\r
- if (!archive.isValid())\r
- throw new IOException(vamsasdocument.getSessionUrn()+" is not a valid vamsasDocument archive.");\r
- // create new session directory\r
- if (sessionArena==null)\r
- throw new Error("Improperly initialised SimpleClientFactory object - null sessionArena.");\r
- File sessdir = File.createTempFile("sess", ".simpleclient", sessionArena);\r
- if (!(sessdir.delete() && sessdir.mkdir()))\r
- throw new IOException("Could not make session directory "+sessdir);\r
- VAMAVSession sess = new VAMAVSession(sessdir);\r
- // copy document into session directory\r
- sess.setVamsasDocument(vamsasdocument.asFile());\r
- // create client instance and return.\r
- VAMAVClient client = new VAMAVClient(userId, applicationHandle, sess);\r
- \r
- return client;\r
- }*/\r
- \r
- /**\r
- * opens session according to a provided sessionID or reads a provided VAMSAS document \r
- * \r
- * if no sessionID provided, creates a new session and opens the provided document.\r
- * if the session Id is unknown, creates a new session and opens the provided document.\r
- * if the session exists, and the provided document is newer, the provide document will replaced \r
- * the current document in use.\r
- * if the session has ben closed, the document is opened in a new session.\r
- * @param firstName user firstname\r
- * @param lastName user lastname\r
- * @param documentPath path to a VAMSAS document\r
- * @param sessionID ID of the session to open\r
- * @return a VAMAVClient correspoding to the given parameters\r
- * @throws UnableToOpenSession raises if an error during access to the document file\r
- */\r
- public VAMAVClient openSession(String firstName, String lastName, File documentPath, String sessionID) throws UnableToOpenSession\r
- {\r
- if(sessionID == null || sessionID.length()<1 )\r
- {\r
- logger.sessionWarn("Open Session - No sessionID provided: can not open session.");\r
- return this.openSession(firstName, lastName, documentPath);\r
- }\r
- VAMAVSession session = this.getSessions().get(sessionID);\r
- if (session == null)\r
- {\r
- return this.openSession(firstName, lastName, documentPath);\r
- }\r
- \r
- /*\r
- VAMAVSession session = null;\r
- try\r
- {\r
- session = new VAMAVSession(new File(sessionDir));\r
- }\r
- catch (IOException ioe)\r
- {\r
- throw new UnableToOpenSession(ioe); \r
- }*/\r
- \r
- \r
- VAMAVClient newClient = null;\r
- if (session.isOpen() && !session.isClosed())\r
- {\r
- FileFormatDescription description = new SimpleFileFormatDescription(documentPath);\r
- Hashtable<String, String> variables = new Hashtable<String, String>();\r
- variables.put(this.documentExtensionTag, description.getFileExtension());\r
- // String sessionDocumentPath = this.replaceVariable(this.sessionDocumentFileNameRule, variables);\r
- File sessionDoc = session.getVamsasDocumentFile();\r
- //File sessionDoc = new File (sessionDocumentPath);\r
- if (documentPath != null && documentPath.canRead() && documentPath.isFile() && documentPath.lastModified()< sessionDoc.lastModified())\r
- {//the provided document is newer than the document in the session directory.\r
- logger.sessionInfo("The provided document is newer than the previously treated document. Proceed new document.");\r
- return this.openSession(firstName, lastName, documentPath);\r
- }\r
- newClient = (VAMAVClient)session.getAttachedClient(0).clone();\r
- if( firstName != null && firstName.length()<1 && lastName!=null && lastName.length()<1)\r
- {\r
- UserHandle user = new UserHandle(firstName,lastName);\r
- newClient.setUser(user);\r
- }\r
- try\r
- {\r
- FileCopy copyManager = new FileCopy(session.getSessionID());\r
- File newDoc = sessionDoc;\r
- copyManager.copy(documentPath, newDoc);\r
- documentPath = newDoc;\r
- copyManager = null;\r
- session.setVamsasDocumentFile(newDoc);\r
- }\r
- catch (IOException ioe)\r
- {\r
- logger.appliError("Unable to copy VAMSAS Document.", ioe);\r
- } \r
- }\r
- else\r
- newClient = this.openSession(firstName, lastName, documentPath);\r
- /*String sessionID = vorbaclient.getSessionUrn();\r
- // String sessionDir = this.sessionDirectoryRule.replaceAll(this.sessionIDTag, sessionID);\r
- // String preparePath = sessionDir.replaceAll("\\\\", "\\\\\\\\");\r
- // logger.applidebug("session directory "+sessionDir);\r
- String appletFileName = this.appletFile.replaceAll(this.sessionIDTag, sessionID);\r
- \r
- // this.sessionTrack.setProperty(sessionID, sessionDir);\r
- // session.setSessionDirectory(new File (sessionDir));\r
- // session.setSessionLogFile(new File (this.sessionLogFileRule.replaceAll(this.sessionIDTag, sessionID).replaceAll(this.sessionDirTag, preparePath)));\r
- // session.setSessionID(sessionID,false);\r
- session.addAttachedClient(vorbaclient);\r
- session.setAppletFileName(appletFileName);\r
- this.getSessions().put(sessionID, session);\r
- \r
- //Copying vamsas document file to session directory\r
- FileFormatDescription description = new SimpleFileFormatDescription(documentPath);\r
- Hashtable<String, String> variables = new Hashtable<String, String>();\r
- variables.put(this.documentExtensionTag, description.getFileExtension());\r
- variables.put(this.sessionDirTag, session.getSessionDirectory().getAbsolutePath());\r
- String sessionDocumentPath = this.replaceVariable(this.sessionDocumentFileNameRule, variables);\r
- logger.sessionDebug("Session document "+ sessionDocumentPath);\r
- //String sessionDocumentPath = this.sessionDocumentFileNameRule.replaceAll(preparePath, appletFileName);//sessionDir+File.separator+"vamsas"+"."+description.getFileExtension();\r
- try\r
- {\r
- FileCopy copyManager = new FileCopy(sessionID);\r
- File newDoc = new File(sessionDocumentPath);\r
- copyManager.copy(documentPath, newDoc);\r
- documentPath = newDoc;\r
- copyManager = null;\r
- session.setVamsasDocumentFile(newDoc);\r
- }\r
- catch (IOException ioe)\r
- {\r
- logger.appliError("Unable to copy VAMSAS Document.", ioe);\r
- } \r
- */\r
- session.addAttachedClient(newClient);\r
- return newClient;\r
- }\r
- \r
- \r
- /**\r
- * Creates a new session of a given user.\r
- * \r
- * @param firstName first name of the user to open the session for\r
- * @param lastName lastname of the user \r
- * @return the created IClient according to the parameters provided\r
- * @throws UnableToOpenSession raises if an error occurs during the accessing to the VAMSAS document.\r
- *///DONE 14/03/2006\r
- public VAMAVClient createSession(String firstName, String lastName) throws UnableToOpenSession\r
- {\r
- // create new session directory\r
- if (sessionArena==null)\r
- throw new Error("Improperly initialised SimpleClientFactory object - null sessionArena.");\r
- File sessdir = null;\r
- try\r
- {\r
- sessdir = File.createTempFile("sess", ".simpleclient", sessionArena);\r
- if (!(sessdir.delete() && sessdir.mkdir()))\r
- throw new UnableToOpenSession("Could not make session directory "+sessdir);\r
- }\r
- catch (IOException ioe)\r
- {\r
- throw new UnableToOpenSession("Could not make session directory.");\r
- \r
- }\r
- \r
-// create session\r
- //generate document copy in the session directory\r
- VAMAVSession session = null;\r
- //VAMAVClient vorbaclient = null;\r
- try\r
- {\r
- session = new VAMAVSession(sessdir);\r
- this.sessionTrack.setProperty(session.getSessionID(), sessdir.getAbsolutePath());\r
- String preparePath = sessdir.getAbsolutePath().replaceAll("\\\\", "\\\\\\\\");\r
- \r
- session.setSessionLogFile(new File (this.sessionLogFileRule.replaceAll(this.sessionIDTag, session.getSessionID()).replaceAll(this.sessionDirTag, preparePath)));\r
- session.setAppletFileName(this.appletFile);\r
- this.getSessions().put(session.getSessionID(), session);\r
- }\r
- catch (IOException ioe)\r
- {\r
- throw new UnableToOpenSession(ioe); \r
- }\r
- ClientHandle app = new ClientHandle(this.clientName,this.clientVersion);\r
- UserHandle user = new UserHandle(firstName,lastName);\r
- IClient vorbaclient = this.getIClient(app, user, session);\r
- session.addAttachedClient((VAMAVClient)vorbaclient);\r
- //process the Vamsas Document to launch AstexViewer with suitable parameters\r
- return (VAMAVClient) vorbaclient;\r
-\r
- }\r
- \r
- \r
- \r
- /**\r
- * Create a new VAMAVCLient for a given clientHandle\r
- * \r
- * @see org.vamsas.client.IClientFactory#getIClient(org.vamsas.client.ClientHandle)\r
- */\r
- public IClient getIClient(ClientHandle applicationHandle) //throws NoDefaultSessionException\r
- { \r
- try\r
- {\r
- return new VAMAVClient(applicationHandle);\r
- }\r
- catch (InvalidSessionUrnException isue)\r
- {\r
- this.logger.appliError("Unable to get client ",isue);\r
- this.logger.sessionError("Unable to get client ",isue);\r
- // throw new NoDefaultSessionException(isue);\r
- }\r
- return null;\r
- }\r
-\r
- /**\r
- * \r
- * Retrieves a client of a given session URN.\r
- * If does not exist, create a new one.\r
- * \r
- * @param applicationHandle client handle object\r
- * @param sessionUrn URN of the session to attach the client\r
- * @see org.vamsas.client.IClientFactory#getIClient(org.vamsas.client.ClientHandle, java.lang.String)\r
- */\r
- //done 14 03 06\r
- public IClient getIClient(ClientHandle applicationHandle, String sessionUrn)\r
- {\r
- // applicationHandle also contains sessionURN\r
- // applicationHandle.getClientUrn()\r
- \r
- /*VAMAVClient client = null; /* this.getClient(sessionUrn);\r
- if (client == null)\r
- {\r
- client = new VAMAVClient(applicationHandle);\r
- }*/\r
- VAMAVClient client = null;\r
- try\r
- {\r
- VAMAVSession session = this.getSessions().get(sessionUrn);\r
- client = new VAMAVClient(applicationHandle);\r
- session.addAttachedClient(client);\r
- client.setVAMAVSession(session);\r
- }\r
- catch (InvalidSessionUrnException isUExc)\r
- {\r
- this.logger.sessionError("The provided Session URN is incorrect.", isUExc);\r
- this.logger.appliError("The provided Session URN is incorrect.", isUExc);\r
- client = null;\r
- }\r
- return client;\r
- }\r
-\r
- /**\r
- * DONE 14/03/2006\r
- * @see org.vamsas.client.IClientFactory#getIClient(org.vamsas.client.ClientHandle, org.vamsas.client.UserHandle, java.lang.String)\r
- */\r
- public IClient getIClient(ClientHandle applicationHandle, UserHandle userId,\r
- String sessionUrn) \r
- {\r
- /* VAMAVClient client = this.getClient(sessionUrn);\r
- if (client == null)\r
- {\r
- client = new VAMAVClient(applicationHandle);\r
- client.setUser(userId);\r
- }\r
- if (userId == null)\r
- {\r
- logger.appliError("There is non userID provided.");\r
- }\r
- else\r
- {\r
- /*this.addUser(sessionUrn,userId);*/\r
- /*}*/\r
- VAMAVClient client = null;\r
- try\r
- {\r
- VAMAVSession session = this.getSessions().get(sessionUrn);\r
- client = new VAMAVClient(userId, applicationHandle, session);\r
- session.addAttachedClient(client);\r
- client.setVAMAVSession(session);\r
- }\r
- catch (InvalidSessionUrnException isUExc)\r
- {\r
- this.logger.sessionError("The provided Session URN is incorrect.", isUExc);\r
- this.logger.appliError("The provided Session URN is incorrect.", isUExc);\r
- client = null;\r
- }\r
- return client;\r
- }\r
- \r
- /**\r
- * DONE\r
- * @see org.vamsas.client.IClientFactory#getIClient(org.vamsas.client.ClientHandle, org.vamsas.client.UserHandle)\r
- */\r
- public VAMAVClient getIClient(ClientHandle applicationHandle, UserHandle userId, VAMAVSession session) \r
- {\r
- if (userId == null)\r
- {\r
- logger.appliInfo("There is non userID provided.");\r
- }\r
- else\r
- {\r
- /* String clientUrn = applicationHandle.getClientUrn();\r
- if (clientUrn != null && clientUrn.length()>0)\r
- this.addUser(clientUrn, userId);*/\r
- }\r
- if (session == null)\r
- {\r
- this.logger.appliError("No session provided. Can not create client if not associated to a session.");\r
- return null;\r
- }\r
- \r
- VAMAVClient client = null;\r
- try\r
- {\r
- // String sessionID = new SessionHandle().generateSessionID();\r
- client = new VAMAVClient(userId, applicationHandle, session);\r
- client.setUser(userId);\r
- }\r
- catch (InvalidSessionUrnException isUExc)\r
- {\r
- this.logger.sessionError("Unable to create session due to incorrect session.", isUExc);\r
- this.logger.appliError("Unable to create session due to incorrect session.", isUExc);\r
- \r
- client = null;\r
- }\r
- // this.addClient(client.getSessionUrn(), client );\r
- // applicationHandle.setClientUrn(sessionID);\r
- logger.appliInfo("generated sessionID "+client.getSessionUrn());\r
- return client;\r
- }\r
- \r
- /**\r
- * Remove a client\r
- * \r
- * Do nothing WHY?\r
- * at a later stage?\r
- * @param client the client to remove\r
- */\r
- public void RemoveClient(VAMAVClient client)\r
- {\r
- if (client == null)\r
- {\r
- this.logger.appliError("SessionManager - Can not remove client. Client is null");\r
- return;\r
- }\r
- \r
- }\r
- \r
- /**\r
- * \r
- * Finalize the current manager\r
- */\r
- @Override\r
- protected void finalize()throws Throwable \r
- {\r
- try \r
- {\r
- this.kill();\r
- } finally {\r
- super.finalize();\r
- }\r
- }\r
- \r
- /**\r
- * Kill the current manager\r
- *\r
- */\r
- private void kill()\r
- {\r
- this.close();\r
- }\r
-\r
-\r
-/**\r
- * Closes the current manager.\r
- * registers required data\r
- *\r
- */\r
-public void close()\r
- {\r
- if( this.sessionTrack != null && !this.sessionTrack.isEmpty())\r
- {\r
- PropertyManager propManager = new PropertyManager();\r
- try\r
- {\r
- propManager.storeProperties(trackFileName, sessionTrack, "", trackDefaultDirectory);\r
- }\r
- catch (UnableToStorePropertiesException utspe)\r
- {\r
- logger.appliWarn("Unable to store session track");\r
- }\r
- this.sessionTrack.clear();\r
- }\r
- this.sessionTrack = null;\r
- if (this.sessions!= null)\r
- {\r
- this.sessions.clear();\r
- this.sessions = null;\r
- }\r
- }\r
- \r
- /**\r
- * Retrieves the sessions attribut\r
- *\r
- * @return Returns the sessions.\r
- */\r
- private Hashtable<String, VAMAVSession> getSessions()\r
- {\r
- if( this.sessions == null)\r
- this.sessions = new Hashtable<String, VAMAVSession>();\r
- return this.sessions;\r
- }\r
- \r
- /**\r
- * Creates a temp directory in a given directory.\r
- * \r
- * @param prefix prefix of the directory to create\r
- * @param directory\r
- * @throws IOException if an error occurs during file creation\r
- * @return the temporary directory\r
- */ \r
- public File createTempDir(String prefix, File directory) throws IOException\r
- {\r
- if( prefix == null)\r
- {\r
- logger.sessionError("Error: no prefix provided to create temp file.");\r
- throw new IOException();\r
- }\r
- File tempFile = null;\r
- if( directory == null )\r
- tempFile = File.createTempFile(prefix, "");\r
- else\r
- tempFile = File.createTempFile(prefix, "", directory);\r
- if (!tempFile.delete())\r
- throw new IOException();\r
- if (!tempFile.mkdir())\r
- throw new IOException();\r
- return tempFile; \r
- }\r
- \r
- /**\r
- * Creates a temp directory in the System temp directory.\r
- * @param prefix prefix of the temp directory name\r
- * @return the create file\r
- * @throws IOException if an error during file creation\r
- * \r
- */ \r
- public File createTempDir(String prefix) throws IOException\r
- {\r
- return this.createTempDir(prefix, null);\r
- }\r
- \r
- /**\r
- * Close the current session manager\r
- *\r
- */\r
- public void closeManager()\r
- {\r
- if (this.sessions != null)\r
- {\r
- for ( Enumeration ids = this.sessions.keys() ; ids.hasMoreElements();)\r
- {\r
- String sessionID = (String)ids.nextElement();\r
- if( sessionID == null || sessionID.length()<1)continue;\r
- VAMAVSession session = this.sessions.remove(sessionID);\r
- if (session != null)\r
- {\r
- session.close();\r
- session = null;\r
- }\r
- }\r
- this.sessions.clear();\r
- this.sessions = null;\r
- }\r
- \r
- }\r
- /**Sets baseDirectory attribut\r
- *\r
- * @param _baseDirectory The baseDirectory to set.\r
- */\r
- public static void setBaseDirectory(String _baseDirectory)\r
- {\r
- baseDirectory = _baseDirectory;\r
- if( baseDirectory != null && baseDirectory.length()>0 && !baseDirectory.endsWith(File.separator))\r
- {\r
- baseDirectory = baseDirectory.concat(File.separator);\r
- }\r
- }\r
- \r
- /**\r
- * Retrieves the list of available sessions for the current session manager\r
- */\r
- public ArrayList<String> getAvailableSessions()\r
- {\r
- ArrayList<String> sessionList = null;\r
- for (Enumeration<String> sessionIDs = sessions.keys();sessionIDs.hasMoreElements();)\r
- {\r
- String sessionID = sessionIDs.nextElement();\r
- if (sessionID == null || sessionID.length()<1)\r
- {\r
- continue;\r
- }\r
- if (sessionList == null) sessionList = new ArrayList<String>();\r
- sessionList.add(sessionID);\r
- }\r
- return sessionList;\r
- }\r
- /* (non-Javadoc)\r
- * @see org.vamsas.client.IClientFactory#getIClient(org.vamsas.client.ClientHandle, org.vamsas.client.UserHandle)\r
- */\r
- public IClient getIClient(\r
- ClientHandle applicationHandle,\r
- UserHandle userId) {\r
- // TODO Auto-generated method stub\r
- return null;\r
- }\r
-\r
- /* (non-Javadoc)\r
- * @see org.vamsas.client.IClientFactory#getCurrentSessions()\r
- */\r
- public String[] getCurrentSessions() {\r
- // TODO look in the arena and enumerate session handles for return.\r
- return new String[] {};\r
- }\r
- }\r
+++ /dev/null
-/*
- *
- * * EMBL - European Bioinformatics institute
- * MSD Group
- * VAMSAS Project
- *
- * Created on Feb 22, 2006
- *
- * @author <a href="mailto:pierre@ebi.ac.uk">Pierre MARGUERITE</a>
- * @version 2
- * @since 22 Feb. 2006
- */
-package uk.ac.ebi.msd.vamsas.vamav.session;
-
-import java.io.File;
-import java.io.IOException;
-import java.util.ArrayList;
-
-import org.vamsas.client.simpleclient.SessionUrn;
-import org.vamsas.client.simpleclient.VamsasSession;
-
-import uk.ac.ebi.msd.vamsas.vamav.VAMAVClient;
-import uk.ac.ebi.msd.vamsas.vamav.util.logger.VAMAVLogger;
-import uk.ac.ebi.msd.vamsas.vamav.util.logger.VAMAVLoggerImpl;
-
-/**
- * This class represents a VAMSAS session,
- * with a session ID, which can be opened and closed.
- * @author <a href="mailto:pierre@ebi.ac.uk">Pierre MARGUERITE</a>
- * @since 22 Feb. 2006
- * @version 2
- *
- */
-public class VAMAVSession extends VamsasSession {
-
- /**
- * ID of the current session
- */
- //private String sessionID = null;
-
- /**
- * if the session is opened
- */
- private boolean open = false;
-
- /**
- * if the current session has been initialised.
- */
- private boolean init = false;
-
- /**
- * log file containing session messages
- * TODO merge with VAMSAS session log ?
- */
- private File sessionLogFile = null;
-
- /**
- * Path to the HTML page used to call the AstexViewer@MSD-
- * EBI as applet
- */
- private String appletFileName = null;
-
- /**
- * Path to the Vamsas document file
- */
- private File vamsasDocumentFile = null;
-
- /**
- * Logger to report messages
- */
- private VAMAVLogger logger = new VAMAVLoggerImpl(this.getClass());
-
- /**
- * Structure grouping mode in use
- */
- private int groupingMode = -1;
-
- /**
- * List of attached VAMAV Client
- *
- */
- private ArrayList<VAMAVClient> attachedClients = null;
-
- private SessionUrn sessionURN = null;
-
- /**
- * Constructor specifying the session Directory
- *
- * @param sessionDir session directory containing all information relatives to the session
- * @throws IOException if an error occurs during accessing to the session directory
- */
- public VAMAVSession(File sessionDir) throws IOException
- {
- super(sessionDir);
- sessionURN = new SessionUrn(this);
- this.logger.applidebug("setting logger seession");
- this.logger.setSession(this);
- }
-
-
- /**
- * Retrieves the sessionID attribut
- *
- * ID of the current session
- *
- * @return Returns the sessionID.
- */
- public String getSessionID()
- {
- String id = null;
- if (this.sessionURN != null)
- {
- String urn = this.sessionURN.asFile().getAbsolutePath();
- //this.logger.applidebug("session urn "+urn);
-
- if ("\\".equals(File.separator))
- {
- //remove last separator at last position if found
- if (urn.charAt(urn.length() - 1) == '/')urn = urn.substring(0, urn.length() - 1);
- urn = urn.replaceAll("/", "\\\\");
- //this.logger.applidebug("session urn "+urn);
- }
- int index = urn.lastIndexOf(File.separator);
-
- if (index >-1)
- {//separator found, keep last part of the urn - filename
- id = urn.substring(index+1, urn.length());
- }
- else
- id = urn;
- //this.logger.applidebug("session ID "+urn);
- }
- return id;
- }
-
-
- /**
- * Sets sessionID attribut, ID of the current sesssion
- *
- * @param sessionID The sessionID to set.
- */
- /* public void setSessionID(String sessionID)
- {
- //this.sessionID = sessionID;
- this.logger.applidebug("setting logger seession");
- this.logger.setSession(this);
- }
-*/
-
- /**
- *specifies if the session
- *has been closed.
- *
- * @param sessionID The sessionID to set.
- */
- public void setClosedSession( boolean closedSession)
- {
- //this.sessionID = sessionID;
- this.logger.applidebug("setting logger session");
- this.logger.setSession(this, closedSession);
- }
-
-
- /**
- * Retrieves the open attribut
- *Indicates if the session has been opened.
- *
- * @return Returns the open.
- */
- public boolean isOpen()
- {
- return this.open;
- }
-
-
- /**
- *Sets open attribut
- *
- * @param open The open to set.
- */
- public void sessionOpen()
- {
- this.open = true;
- this.init = true;
- }
-
- /**
- *Sets open attribut
- *
- * @return true if the session has been opened then closed. false, otherwise.
- */
- public boolean isClosed()
- {
- return !this.open;
- }
-
- /**
- * finalize the object
- */
- protected void finalize() throws Throwable
- {
- try
- {
- this.kill();
- } finally {
- super.finalize();
- }
- }
-
- /**
- * kills the current session
- * Stores required information
- *
- */
- private void kill()
- {
- if (this.attachedClients!= null)
- {
- for (int clientNumber = this.attachedClients.size() -1;clientNumber>=0; clientNumber-- )
- {
- VAMAVClient client = this.attachedClients.get(clientNumber) ;
- client = null;
- }
- this.attachedClients.clear();
- this.attachedClients = null;
- }
- /*if( this.sessionID != null)
- {
- this.sessionID = this.sessionID.replaceAll(this.sessionID, "");
- this.sessionID = null;
- }*/
- }
-
- /**
- * Retrieves the attachedClients attribut, list of client
- * associated to the current session
- *
- * @return Returns the attachedClients.
- */
- private ArrayList<VAMAVClient> getAttachedClients()
- {
- return this.attachedClients;
- }
-
- /**
- * Retrieves an attachedClient at a given index
- *
- *
- * @param index index of the client to retrieved
- * @return the attached client at the given index, if found. null otherwise.
- */
- public VAMAVClient getAttachedClient(int index )
- {
- if (this.getAttachedClients() == null || index<0 || index>this.getAttachedClients().size())
- return null;
- return this.getAttachedClients().get(index);
- }
-
- /**
- * Attached the client to a VAMAV Session
- *
- * @param client client to add the current session.
- */
- public void addAttachedClient(VAMAVClient client)
- {
- if( this.getAttachedClients() == null)
- {
- this.attachedClients = new ArrayList<VAMAVClient>();
- }
- this.getAttachedClients().add(client);
- client.setVAMAVSession(this);
- }
-
- /**
- * removes a client from the current session
- *
- * @param client client to remove
- */
- public void removeClient(VAMAVClient client)
- {
- if( this.getAttachedClients() == null )
- {
- logger.appliError("Unable to remove client. There is no client attached.");
- }
- this.getAttachedClients().remove(client);
- if ( this.getAttachedClients().size()<1)
- {
- this.close();
- }
- }
-
- /**
- * Retrieves the sessionDirectory attribut
- *
- * retrieves the session directory containing files relatives to the session
- *
- * @return Returns the sessionDirectory.
- */
- public File getSessionDirectory()
- {
- return this.sessionDir;
- }
-
-
- /**
- *Sets sessionDirectory attribut
- *
- *Sets the path to the session directory
- *
- * @param sessionDirectory The sessionDirectory to set.
- */
- public void setSessionDirectory(File sessionDirectory)
- {
- if( sessionDirectory!= null)
- {
- if(!sessionDirectory.exists())
- if( !sessionDirectory.mkdirs())
- {
- logger.sessionError("Unable to create session directory.");
- }
- this.sessionDir = sessionDirectory;
- if (!this.logger.isProduction()) this.logger.applidebug("session directory "+sessionDirectory.getAbsolutePath());
-
- }
- }
-
- /**
- * Retrieves the sessionLogFile attribut
- *
- *Path the session log file containing reported messages relatives
- *to the session
- *
- * @return Returns the sessionLogFile.
- */
- public File getSessionLogFile()
- {
- return this.sessionLogFile;
- }
-
-
- /**
- *Sets sessionLogFile attribut
- *
- *Sets the file containing all reported session messages
- *
- * @param sessionLogFile The sessionLogFile to set.
- */
- public void setSessionLogFile(File sessionLogFile)
- {
- this.sessionLogFile = sessionLogFile;
- if (sessionLogFile != null && !this.logger.isProduction())
- {
- this.logger.applidebug(sessionLogFile.getAbsolutePath());
- }
-
- }
-
- /**
- * Closes the current session
- *Clears client list //TODO close attached clients
- *
- */
- public void close ()
- {
- logger.sessionInfo("Closing session "+this.getSessionID() );
- this.open = false;
- if (this.getAttachedClients() != null)
- {
- this.getAttachedClients().clear();
- this.attachedClients = null;
- }
- }
-
-
- /**
- * Retrieves the appletFileName attribut
- *name of the file containing html page to call the AstexViewer@MSD-EBI
- *
- * @return Returns the appletFileName.
- */
- public String getAppletFileName()
- {
- return this.appletFileName;
- }
-
- /**
- * Retrieves the appletFile object
- *
- * @return Returns the appletFile object
- */
- public File getAppletFile()
- {
- return new File (this.getSessionDirectory().getAbsolutePath()+File.separator+this.appletFileName);
- }
-
-
- /**
- *Sets appletFileName attribut
- *
- * @param appletFileName The appletFileName to set.
- */
- public void setAppletFileName(String appletFileName)
- {
- this.appletFileName = appletFileName;
- }
-
-
- /**
- * Retrieves the vamsasDocument File
- *
- * @return Returns the vamsasDocumentFile.
- */
- public File getVamsasDocumentFile()
- {
- return this.vamsasDocumentFile;
- }
-
-
- /**
- *Sets vamsasDocumentFile associated to /treated in the session
- *
- * @param vamsasDocumentFile The vamsasDocumentFile to set.
- */
- public void setVamsasDocumentFile(File vamsasDocumentFile)
- {
- this.vamsasDocumentFile = vamsasDocumentFile;
- }
-
-
- /**
- * Retrieves the groupingMode currently used in the
- * session for process data
- *
- * @return Returns the groupingMode.
- */
- public int getGroupingMode()
- {
- return this.groupingMode;
- }
-
-
- /**
- *Sets groupingMode attribut
- *
- * @param groupingMode The groupingMode to set.
- */
- public void setGroupingMode(int groupingMode)
- {
- this.groupingMode = groupingMode;
- }
-
-
- /**
- * Retrieves the init attribut
- * Indicates if the current session has been initialised
- * @return Returns the init.
- */
- public boolean isInit()
- {
- return this.init;
- }
-}
+++ /dev/null
-/*
- * Created on Mar 9, 2006
- *
- * To change the template for this generated file go to
- * Window>Preferences>Java>Code Generation>Code and Comments
- */
-package uk.ac.ebi.msd.vamsas.vamav.session.exceptions;
-
-/**
- * @author pierre
- *
- * To change the template for this generated type comment go to
- * Window>Preferences>Java>Code Generation>Code and Comments
- */
-public class UnableToOpenSession extends Exception {
-
- /**
- *
- */
- public UnableToOpenSession() {
- super();
- // TODO Auto-generated constructor stub
- }
-
- /**
- * @param message
- */
- public UnableToOpenSession(String message) {
- super(message);
- // TODO Auto-generated constructor stub
- }
-
- /**
- * @param message
- * @param cause
- */
- public UnableToOpenSession(String message, Throwable cause) {
- super(message, cause);
- // TODO Auto-generated constructor stub
- }
-
- /**
- * @param cause
- */
- public UnableToOpenSession(Throwable cause) {
- super(cause);
- // TODO Auto-generated constructor stub
- }
-
-}