package org.tgdb.expression.expressionmodel; import org.tgdb.exceptions.ApplicationException; import org.tgdb.model.expmodel.ExpModelRemoteHome; import org.tgdb.project.AbstractTgDbBean; import org.tgdb.project.project.ProjectRemoteHome; import org.tgdb.resource.file.FileRemoteHome; import org.tgdb.servicelocator.ServiceLocator; import org.tgdb.species.chromosome.ChromosomeRemoteHome; import java.rmi.RemoteException; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; import java.util.Collection; import javax.ejb.CreateException; import javax.ejb.EJBException; import javax.ejb.FinderException; import javax.ejb.ObjectNotFoundException; import org.tgdb.dto.OlsDTO; import org.tgdb.model.reference.ReferenceRemoteHome; public class ExpressionModelBean extends AbstractTgDbBean implements javax.ejb.EntityBean, org.tgdb.expression.expressionmodel.ExpressionModelRemoteBusiness { private javax.ejb.EntityContext context; private int exid; private String exanatomy, excomm; private boolean dirty; // private UserRemoteHome userHome; private ExpModelRemoteHome modelHome; private ProjectRemoteHome projectHome; private ChromosomeRemoteHome chromosomeHome; private FileRemoteHome fileHome; private ReferenceRemoteHome referenceHome; //ejb-methods // <editor-fold> public void setEntityContext(javax.ejb.EntityContext aContext) { context = aContext; // userHome = (UserRemoteHome)locator.getHome(ServiceLocator.Services.USER); modelHome = (ExpModelRemoteHome)locator.getHome(ServiceLocator.Services.EXPMODEL); projectHome = (ProjectRemoteHome)locator.getHome(ServiceLocator.Services.PROJECT); chromosomeHome = (ChromosomeRemoteHome)locator.getHome(ServiceLocator.Services.CHROMOSOME); fileHome = (FileRemoteHome)locator.getHome(ServiceLocator.Services.FILE); referenceHome = (ReferenceRemoteHome)locator.getHome(ServiceLocator.Services.REFERENCE); } public void ejbActivate() {} public void ejbPassivate() {} public void ejbRemove() { makeConnection(); PreparedStatement ps = null; try { ps = conn.prepareStatement("delete from expression where exid=?"); ps.setInt(1, exid); ps.execute(); } catch (Exception e) { throw new EJBException("ExpressionModel#ejbRemove: Unable to delete Expression Model.\n"+e.getMessage()); } finally { releaseConnection(); } } public void unsetEntityContext() { context = null; } public void ejbLoad() { makeConnection(); Integer pk = (Integer)context.getPrimaryKey(); PreparedStatement ps = null; try { ps = conn.prepareStatement("select exid, exanatomy, excomm from expression where exid=?"); ps.setInt(1, pk.intValue()); ResultSet rs = ps.executeQuery(); if (rs.next()) { exid = rs.getInt("exid"); exanatomy = rs.getString("exanatomy"); excomm = rs.getString("excomm"); dirty = false; } else throw new EJBException("ExpressionModelBean#ejbLoad: Error loading Expression Model"); } catch (Exception e) { throw new EJBException("ExpressionModelBean#ejbLoad: error loading Expression Model. \n"+e.getMessage()); } finally { releaseConnection(); } } public void ejbStore() { if (dirty) { makeConnection(); PreparedStatement ps = null; try { ps = conn.prepareStatement("update expression set exanatomy=?,excomm=? where exid=?"); ps.setString(1, exanatomy); ps.setString(2, excomm); ps.setInt(3, exid); ps.execute(); } catch (Exception e) { throw new EJBException("ExpressionModelBean#ejbStore: error storing Expressino Model. \n"+e.getMessage()); } finally { releaseConnection(); dirty = false; } } } // </editor-fold> //finder methods //<editor-fold> public Integer ejbFindByPrimaryKey(Integer key) throws FinderException { makeConnection(); PreparedStatement ps = null; ResultSet result = null; try { ps = conn.prepareStatement("select exid from expression where exid = ?"); ps.setInt(1,key.intValue()); result = ps.executeQuery(); if (!result.next()) { throw new ObjectNotFoundException("ExpressionModelBean#ejbFindByPrimaryKey: Cannot find Expression Model. No next in resultset"); } } catch (SQLException se) { throw new FinderException("ExpressionModelBean#ejbFindByPrimaryKey: Cannot find Expression Model. \n"+se.getMessage()); } finally { releaseConnection(); } return key; } public java.util.Collection ejbFindByModel(int eid) throws javax.ejb.FinderException { makeConnection(); Collection arr = new ArrayList(); PreparedStatement ps = null; ResultSet result = null; try { ps = conn.prepareStatement("select g.exid from expression g, expression_model_r r where g.exid=r.exid and r.eid = ? order by g.exanatomy"); ps.setInt(1,eid); result = ps.executeQuery(); while (result.next()) { arr.add(new Integer(result.getInt("exid"))); } } catch (SQLException se) { throw new FinderException("ExpressionModelBean#ejbFindByModel: Cannot find expresion model by model "+eid+" \n"+se.getMessage()); } finally { releaseConnection(); } return arr; } //</editor-fold> //setter+getter methods //<editor-fold> public int getExid() { return exid; } public String getExanatomy(){ return exanatomy; } public void setExanatomy(String exanatomy) { this.exanatomy = exanatomy; dirty = true; } public String getExcomm(){ return excomm; } public void setExcomm(String excomm){ this.excomm = excomm; dirty = true; } public Collection getFiles(){ Collection arr = null; try { arr = fileHome.findByExpressionModel(exid); } catch (FinderException fe) { throw new EJBException(fe); } catch (RemoteException re) { throw new EJBException(re); } return arr; } public Collection getReferences(){ Collection arr = new ArrayList(); try { arr = referenceHome.findByExpression(exid); } catch (FinderException fe) { throw new EJBException(fe); } catch (RemoteException re) { throw new EJBException(re); } return arr; } //</editor-fold> //create+postcreate methods //<editor-fold> public java.lang.Integer ejbCreate(int exid, java.lang.String exanatomy, java.lang.String excomm) throws javax.ejb.CreateException { makeConnection(); Integer pk = null; try { this.exid = exid; this.exanatomy = exanatomy; this.excomm = excomm; pk = new Integer(exid); PreparedStatement ps = conn.prepareStatement("insert into expression (exid,exanatomy,excomm) values (?,?,?)"); ps.setInt(1, exid); ps.setString(2, exanatomy); ps.setString(3, excomm); ps.execute(); dirty = false; } catch (Exception e) { e.printStackTrace(); throw new CreateException("ExpressionModelBean#ejbCreate: Unable to create Expression Model. \n"+e.getMessage()); } finally { releaseConnection(); } return pk; } public void ejbPostCreate(int exid, java.lang.String exanatomy, java.lang.String excomm) throws javax.ejb.CreateException {} //</editor-fold> //relational methods //<editor-fold> public void addFile(int fileid) throws ApplicationException { makeConnection(); try { PreparedStatement ps = conn.prepareStatement("insert into expression_file_r (exid,fileid) values (?,?)"); ps.setInt(1, exid); ps.setInt(2, fileid); ps.execute(); } catch (Exception e) { e.printStackTrace(); throw new ApplicationException("ExpressionModelBean#addFileToExpressionModel: Unable to add file to expression model. \n"+e.getMessage()); } finally { releaseConnection(); } } public void addReference(int refid) throws ApplicationException { makeConnection(); try { PreparedStatement ps = conn.prepareStatement("insert into r_ref_exp (exid,refid) values (?,?)"); ps.setInt(1, exid); ps.setInt(2, refid); ps.execute(); } catch (Exception e) { // e.printStackTrace(); // throw new ApplicationException("Unable to add reference to expression model. \n"+e.getMessage()); logger.error(getStackTrace(e)); } finally { releaseConnection(); } } public void deleteReference(int refid) throws ApplicationException { makeConnection(); try { PreparedStatement ps = conn.prepareStatement("delete from r_ref_exp where exid=? and refid=?"); ps.setInt(1, exid); ps.setInt(2, refid); ps.execute(); } catch (Exception e) { e.printStackTrace(); throw new ApplicationException("Unable to delete reference from expression model. \n"+e.getMessage()); } finally { releaseConnection(); } } public void addOntology(String oid, String namespace) throws ApplicationException { makeConnection(); try { PreparedStatement ps = conn.prepareStatement("insert into r_expression_ontology (exid, oid, namespace) values (?,?,?)"); ps.setInt(1, exid); ps.setString(2, oid); ps.setString(3, namespace); ps.execute(); } catch (Exception e) { logger.error(getStackTrace(e)); } finally { releaseConnection(); } } public void deleteOntology(String oid, String namespace) throws ApplicationException { makeConnection(); try { PreparedStatement ps = conn.prepareStatement("delete from r_expression_ontology where exid = ? and oid = ? and namespace = ?"); ps.setInt(1, exid); ps.setString(2, oid); ps.setString(3, namespace); ps.execute(); } catch (Exception e) { logger.error(getStackTrace(e)); } finally { releaseConnection(); } } public Collection getOntologyTerms(String namespace) throws ApplicationException { Collection terms = new ArrayList(); makeConnection(); try { PreparedStatement ps = conn.prepareStatement("select * from r_expression_ontology where exid= ? and namespace = ?"); ps.setInt(1, exid); ps.setString(2, namespace); ResultSet result = ps.executeQuery(); while (result.next()) { OlsDTO tmp = new OlsDTO(); tmp.setOid(result.getString("oid")); tmp.setNamespace(namespace); terms.add(tmp); } } catch (Exception e) { logger.error(getStackTrace(e)); } finally { releaseConnection(); } return terms; } //</editor-fold> }