/* * JBoss, Home of Professional Open Source. * Copyright 2008, Red Hat Middleware LLC, and individual contributors * as indicated by the @author tags. See the copyright.txt file in the * distribution for a full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.cmp2.cmr.ejb; import java.util.Iterator; import java.util.Map; import java.util.SortedMap; import javax.ejb.CreateException; import javax.ejb.EJBException; import javax.ejb.SessionBean; import javax.ejb.SessionContext; import javax.naming.InitialContext; import javax.naming.NamingException; import org.jboss.logging.Logger; import org.jboss.test.cmp2.cmr.interfaces.CMRBugEJBLocalHome; import org.jboss.test.cmp2.cmr.interfaces.CMRBugEJBLocal; /** * Describe class <code>CMRBugManagerBean</code> here. * * @author <a href="mailto:MNewcomb@tacintel.com">Michael Newcomb</a> * @author <a href="mailto:d_jencks@users.sourceforge.net">David Jencks</a> * @version 1.0 * @ejb:bean type="Stateless" name="CMRBugManagerEJB" jndi-name="CMRBugManager" * @ejb:ejb-ref ejb-name="CMRBugEJB" * view-type="local" * ref-name="ejb/CMRBug" * @ejb:transaction type="Required" * @ejb:transaction-type type="Container" */ public class CMRBugManagerBean implements SessionBean { private CMRBugEJBLocalHome cmrBugHome; private Logger log = Logger.getLogger(getClass()); public CMRBugManagerBean() { } /** * Describe <code>createCMRBugs</code> method here. * * @param cmrBugs a <code>SortedMap</code> value * @ejb:interface-method view-type="remote" */ public void createCMRBugs(SortedMap cmrBugs) { try { if(!cmrBugs.isEmpty()) { Iterator i = cmrBugs.entrySet().iterator(); Map.Entry entry = (Map.Entry)i.next(); // the root id (of which all others are based) is the first key in // the SortedMap // String root = (String)entry.getKey(); String id = root; String description = (String)entry.getValue(); CMRBugEJBLocal parent = cmrBugHome.create(id, description, null); entry.setValue(parent); while(i.hasNext()) { entry = (Map.Entry)i.next(); id = (String)entry.getKey(); description = (String)entry.getValue(); int index = id.lastIndexOf("."); if(index != -1) { // determine the parent id and then try to find the parent's // CMRBugEJBLocal in the map // String parentId = id.substring(0, index); parent = (CMRBugEJBLocal)cmrBugs.get(parentId); } entry.setValue(cmrBugHome.create(id, description, parent)); } } } catch(Exception e) { e.printStackTrace(); throw new EJBException(e.getMessage()); } } /** * Describe <code>getParentFor</code> method here. * * @param id a <code>String</code> value * @return a <code>String[]</code> value * @ejb:interface-method view-type="remote" */ public String[] getParentFor(String id) { try { CMRBugEJBLocal cmrBug = cmrBugHome.findByPrimaryKey(id); CMRBugEJBLocal parent = cmrBug.getParent(); String[] parentIdAndDescription = null; if(parent != null) { parentIdAndDescription = new String[2]; parentIdAndDescription[0] = parent.getId(); parentIdAndDescription[1] = parent.getDescription(); } return parentIdAndDescription; } catch(Exception e) { e.printStackTrace(); throw new EJBException(e.getMessage()); } } /** * @ejb.interface-method * @ejb.transaction type="RequiresNew" */ public void setupLoadFKState() throws Exception { CMRBugEJBLocal bug1 = cmrBugHome.create("first", null, null); CMRBugEJBLocal bug2 = cmrBugHome.create("second", null, null); CMRBugEJBLocal bug3 = cmrBugHome.create("third", null, null); CMRBugEJBLocal bug4 = cmrBugHome.create("forth", null, null); bug1.setNextNode(bug2); bug2.setNextNode(bug3); bug3.setNextNode(bug4); bug4.setPrevNode(bug3); bug3.setPrevNode(bug2); bug2.setPrevNode(bug1); } /** * @ejb.interface-method * @ejb.transaction type="RequiresNew" */ public void moveLastNodeBack() throws Exception { CMRBugEJBLocal bug = cmrBugHome.findByPrimaryKey("forth"); CMRBugEJBLocal prev = bug.getPrevNode(); CMRBugEJBLocal next = bug.getNextNode(); CMRBugEJBLocal prevPrev = prev.getPrevNode(); prevPrev.setNextNode(bug); bug.setPrevNode(prevPrev); bug.setNextNode(prev); prev.setPrevNode(bug); prev.setNextNode(next); } /** * @ejb.interface-method * @ejb.transaction type="RequiresNew" */ public boolean lastHasNextNode() throws Exception { CMRBugEJBLocal bug = cmrBugHome.findByPrimaryKey("third"); return bug.getNextNode() != null; } /** * @ejb.interface-method * @ejb.transaction type="RequiresNew" */ public void tearDownLoadFKState() throws Exception { cmrBugHome.remove("first"); cmrBugHome.remove("second"); cmrBugHome.remove("third"); cmrBugHome.remove("forth"); } // -------------------------------------------------------------------------- // SessionBean methods // /** * Describe <code>ejbCreate</code> method here. * * @exception CreateException if an error occurs */ public void ejbCreate() throws CreateException { try { cmrBugHome = lookupCMRBugHome(); } catch(Exception e) { throw new CreateException(e.getMessage()); } } public void ejbActivate() { try { cmrBugHome = lookupCMRBugHome(); } catch(Exception e) { throw new EJBException(e.getMessage()); } } public void ejbPassivate() { cmrBugHome = null; } public void ejbRemove() { } public void setSessionContext(SessionContext sessionContext) { } private CMRBugEJBLocalHome lookupCMRBugHome() throws NamingException { InitialContext initialContext = new InitialContext(); return (CMRBugEJBLocalHome)initialContext.lookup("java:comp/env/ejb/CMRBug"); } }