|
From: backer <eb...@us...> - 2004-10-14 12:39:57
|
Update of /cvsroot/dynxform/dynxform/src/java/net/sf/dynxform/db/action In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv6850/db/action Added Files: DatabaseAction.java DatabaseActionExecutor.java DatabaseActionPool.java Log Message: moved all database depencies to db package --- NEW FILE: DatabaseAction.java --- package net.sf.dynxform.db.action; import net.sf.dynxform.exception.business.BusinessException; import net.sf.dynxform.exception.system.SystemException; import net.sf.dynxform.form.FormContext; import net.sf.dynxform.form.data.ModuleType; import net.sf.dynxform.form.data.manage.ModuleBinderManager; import net.sf.dynxform.form.data.module.SourceModule; import net.sf.dynxform.form.model.FormDefinition; import net.sf.dynxform.action.AbstractAction; import java.util.Map; /** * net.sf.dynxform.form.model.action Feb 24, 2004 6:09:31 PM andreyp * Copyright (c) dynxform.sf.net. All Rights Reserved */ public final class DatabaseAction implements AbstractAction { private static final String ACTION_PARAMETER = "action"; public final void execute(final Map parameters, final FormContext formContext, final FormDefinition definition) throws SystemException, BusinessException { final DatabaseActionExecutor actionExecutor = new DatabaseActionExecutor(); final String actionName = (String) parameters.get(ACTION_PARAMETER); if (actionName == null) throw new BusinessException("Parameter \"" + ACTION_PARAMETER + "\" should be defined!"); final Map outParameters = actionExecutor.executeAction(definition.getForm().getGuid(), actionName, parameters); final SourceModule module = formContext.getDataModule(ModuleType.OUTPUT); module.setup(outParameters); final ModuleBinderManager manager = formContext.getSourceManagerByType(ModuleType.OUTPUT); manager.update(module, formContext); } } --- NEW FILE: DatabaseActionPool.java --- /* * Created by IntelliJ IDEA. * User: yurib * Date: Feb 19, 2004 * Time: 4:38:05 PM */ package net.sf.dynxform.db.action; import net.sf.dynxform.action.schema.Action; import net.sf.dynxform.action.schema.ActionList; import net.sf.dynxform.container.DefinitionProvider; import net.sf.dynxform.exception.business.BusinessException; import net.sf.dynxform.util.BasePool; import org.apache.commons.lang.StringUtils; import java.net.URL; import java.util.Enumeration; public final class DatabaseActionPool extends BasePool { private final DefinitionProvider definitionProvider = DefinitionProvider.getInstance(); private static DatabaseActionPool actionPool = null; private DatabaseActionPool() { this.setFactory(new ActionPoolFactory()); this.configure("action"); } public static synchronized DatabaseActionPool getInstance() { if (actionPool == null) actionPool = new DatabaseActionPool(); return actionPool; } public DefinitionProvider getDefinitionProvider() { return definitionProvider; } final class ActionPoolFactory extends BasePool.BasePoolFactory { ActionPoolFactory() { super(ActionList.class); } protected final URL getFileUrl(final Object o) throws BusinessException { return getDefinitionProvider().getActionUrl((String) o); } protected final String getActionName(final Object o) throws BusinessException { final String key = (String) o; final String[] keyParts = StringUtils.split(key, ':'); if (keyParts.length != 2) throw new BusinessException("Key is not falid and contains more than one semicolon:" + key); return keyParts[1]; } protected final Object getPoolableFromUnmarshallled(final Object key, final Object unmarshalled) throws BusinessException { Action action = null; final ActionList actionList = (ActionList) unmarshalled; final String actionName = getActionName(key); final Enumeration enu = actionList.enumerateAction(); while (enu.hasMoreElements()) { action = (Action) enu.nextElement(); if (action != null && action.getName().equalsIgnoreCase(actionName)) break; } return action; } } } --- NEW FILE: DatabaseActionExecutor.java --- /* * Created by IntelliJ IDEA. * User: yurib * Date: Feb 19, 2004 * Time: 4:17:17 PM */ package net.sf.dynxform.db.action; import net.sf.dynxform.action.schema.Action; import net.sf.dynxform.db.DatabaseConnection; import net.sf.dynxform.db.StoredProcedure; import net.sf.dynxform.exception.business.BusinessException; import net.sf.dynxform.exception.system.SystemException; import net.sf.dynxform.report.schema.Procedure; import org.apache.commons.logging.LogFactory; import org.apache.commons.logging.Log; import java.util.HashMap; import java.util.Map; public final class DatabaseActionExecutor { static final Log log = LogFactory.getLog(DatabaseActionExecutor.class); private static final DatabaseConnection databaseConnection = DatabaseConnection.create(); public final Map executeAction(final String formID, final String actionName, final Map parameters) throws SystemException, BusinessException { Action action = null; StoredProcedure storedProcedure; Map out; final String actionID = formID + ':' + actionName; final DatabaseActionPool actionPool = DatabaseActionPool.getInstance(); try { try { action = (Action) actionPool.borrowObject(actionID); } catch (Exception ex) { throw new BusinessException("Cannot found action:" + actionName + " for form: " + formID, ex); } try { if (log.isDebugEnabled()) log.debug("Action: " + actionName + " mapping found. Try to find mapped procedures..."); for (int j = 0; j < action.getProcedureCount(); j++) { final Procedure procedure = action.getProcedure(j); if (log.isDebugEnabled()) log.debug("Mapped procedure for action: " + actionName + " gotten successfully, trying to execute it..."); storedProcedure = new StoredProcedure(procedure, parameters); if (log.isDebugEnabled()) log.debug("Procedure execution information stored into result row set..."); storedProcedure.setConnection(databaseConnection.get()); storedProcedure.execute(); out = storedProcedure.getOutParams(); if (out != null) { final Object obj = parameters.get("output"); if (obj != null && obj instanceof HashMap) { ((HashMap) obj).putAll(out); } else { parameters.put("output", out); } } } } catch (Exception e) { throw new BusinessException("Fail to build resultset for action " + actionName + "form:(" + formID + ')', e); } } finally { try { if (action != null) { actionPool.returnObject(actionID, action); } } catch (Exception e) { log.error("Failed to return action" + actionID + " to pool", e); } } return (Map) parameters.get("output"); } } |