jp.terasoluna.fw.web.struts.plugins.BLogicIOPlugIn.java Source code

Java tutorial

Introduction

Here is the source code for jp.terasoluna.fw.web.struts.plugins.BLogicIOPlugIn.java

Source

/*
 * Copyright (c) 2007 NTT DATA Corporation
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package jp.terasoluna.fw.web.struts.plugins;

import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
import java.util.StringTokenizer;

import javax.servlet.ServletException;

import jp.terasoluna.fw.service.thin.AbstractBLogicMapper;
import jp.terasoluna.fw.service.thin.BLogicMapper;
import jp.terasoluna.fw.service.thin.BLogicResources;
import jp.terasoluna.fw.util.ClassLoadException;
import jp.terasoluna.fw.util.ClassUtil;

import org.apache.commons.digester.Digester;
import org.apache.commons.digester.xmlrules.DigesterLoader;
import org.apache.commons.digester.xmlrules.XmlLoadException;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.struts.action.ActionServlet;
import org.apache.struts.action.PlugIn;
import org.apache.struts.config.ModuleConfig;
import org.xml.sax.SAXException;

/**
 * rWlX?WbN?o????[hvOC?B
 *
 * <p>StrutsPlugIn@\gp?AT?[ubg?
 * rWlX?WbN?o???AT?[ubgReLXg
 * ?B<br>
 * @\gpstruts-config.xml??B
 * ?i digesterRules?AmapperClass??B?j
 * ?AresourcesJ}t@CA?B
 * </p>
 * <code><pre>
 * &lt;plug-in
 *   className="jp.terasoluna.fw.web.struts.plugins.BLogicIOPlugIn"&gt;
 *    &lt;set-property
 *        property="resources"
 *        value="/WEB-INF/blogic-io.xml"/&gt;
 *    &lt;set-property
 *        property="digesterRules"
 *        value="/WEB-INF/blogic-io-rules.xml"/&gt;
 *    &lt;set-property
 *        property="mapperClass"
 *        value="jp.terasoluna.fw.service.thin.BLogicMapper"/&gt;
 * &lt;/plug-in&gt;
 * </pre></code>
 * <p>rWlX?WbN?o?fNXgNX?X???A
 * mapperClassvalue?AbstractBLogicMapperTuNX?A
 * BLogicMapperp?BLogicMappergNX??B</p>
 *
 * blogic-io.xmlANVrWlX?WbN
 * ?o???B<br>
 * Lblogic-io.xml??B
 * <code><pre>
 * &lt;blogic-io&gt;
 *   &lt;action path="/logon/logonAction"&gt;
 *     &lt;blogic-param bean-name="jp.terasoluna.sample.blogic.LogonBean"&gt;
 *       &lt;set-property property="userName"
 *                        blogic-property="userName"
 *                        source="form" /&gt;
 *       &lt;set-property property="sessionId"
 *                        blogic-property="id"
 *                        source="session" /&gt;
 *     &lt;/blogic-param&gt;
 *     &lt;blogic-result&gt;
 *       &lt;set-property property="resultStr"
 *                        blogic-property="result"
 *                        dest="form" /&gt;
 *       &lt;set-property property="USER_VALUE_OBJECT"
 *                        blogic-property="uvo"
 *                        dest="session" /&gt;
 *     &lt;/blogic-result&gt;
 *   &lt;/action&gt;
 *   ?E?E?E
 * &lt;/blogic-io&gt;
 * </pre></code>
 * <p>
 * rWlX?WbNl?&lt;blogic-param&gt;
 * vf??Bbean-name?li[
 * JavaBeanNXw?BJavaBean?A?q
 * blogic-property?wv?peB???B<br>
 * A?Al?rWlX?WbN???Abean-name??
 * ?A?nullrWlX?WbN?s\?B<br>
 * l?f?[^ANVtH?[ZbVWebw
 * ???Af?[^
 * &lt;set-property&gt;vfsource?w?B
 * ftHg?Aform,sessionsource?L?q
 * ?ANVtH?[ZbV?B<br>
 * f?[^v?peBproperty?w?B
 * ?A<br>
 * property="field1" source="form"????A
 * actionForm.get("field1")?s?A
 * property="field2" source="session"????A
 * session.getAttribute("field2")?s?B<br>
 * ?Ll?AO?qbean-name?w
 * JavaBeanCX^Xv?peBlrWlX?WbN?B
 * JavaBeanl???Ablogic-propertywl
 * v?peB?Bblogic-property?w???A
 * property?lJavaBeanv?peB?B
 * </p>
 * <p>
 * <code><pre>
 *  &lt;set-property property="field1" blogic-property="blogicField1"
 *                   source="form" /&gt;
 * </pre></code>
 * ??ArWlX?WbNANVtH?[field1
 * l???A
 * bean.getBlogicField1()
 * ?sANVtH?[l?B<br>
 * f?[^ZbVll?A
 * <code><pre>
 *  &lt;set-property property="field2" blogic-property="blogicField2"
 *                   source="session" /&gt;
 * </pre></code>
 * ??ArWlX?WbNfield2L?[ZbVi[
 * l???A
 * bean.getBlogicField2()
 * ?s?B
 * ?ArWlX?WbNf?[^ANVtH?[
 * ?AZbVKv?B<br>
 * ??BLogicResourcesCX^X
 * ??AT?[ubgReLXg?B</p>
 * <br>
 * <p>
 * Jq?ADTDURL?X???A<br>
 * getPublicIdentifier()getDtdUrl()I?[o?[Ch?B
 * </p>
 *
 * @see jp.terasoluna.fw.web.struts.actions.BLogicAction
 * @see jp.terasoluna.fw.service.thin.BLogic
 * @see jp.terasoluna.fw.service.thin.BLogicResources
 * @see jp.terasoluna.fw.service.thin.BLogicResult
 * @see jp.terasoluna.fw.service.thin.AbstractBLogicMapper
 * @see jp.terasoluna.fw.service.thin.BLogicMapper
 *
 */
public class BLogicIOPlugIn implements PlugIn {

    /**
     * ?ONX?B
     */
    private static Log log = LogFactory.getLog(BLogicIOPlugIn.class);

    /**
     * T?[ubgReLXgo^BLogicMapper
     * vtBbNXL?[?B
     */
    public static final String BLOGIC_MAPPER_KEY = "BLOGIC_MAPPER";

    /**
     * ftHgblogic-io-rules.xml pX?B
     */
    private static final String DIGESTER_RULES_PATH = "/WEB-INF/blogic-io-rules.xml";

    /**
     * DTDJq?B
     */
    private String publicIdentifier = "-//NTTDATA//DTD TERASOLUNA for Spring blogic-io 1.0//JA";

    /**
     * DTDpX?B
     */
    private String dtdUrl = "/jp/terasoluna/fw/web/struts/plugins/dtd/blogic-io.dtd";

    /**
     * vOC??T?[ubg?B
     */
    private ActionServlet servlet = null;

    /**
     * rWlX?WbN?o??[`t@C
     * ?iblogic-io-rules.xml?j?B
     */
    private String digesterRules = null;

    /**
     * rWlX?WbN?o?`t@C?iblogic-io.xml?j?B
     */
    private String resources = null;

    /**
     * BLogicMapperwNXt@C?B
     * w???AftHgNXgp?B
     */
    private String mapperStr = null;

    /**
     * rWlX?WbN?o??CX^X?B
     */
    private BLogicResources blogicResources = null;

    /**
     * rWlX?WbN?o?}bp?[?B
     */
    private AbstractBLogicMapper blogicMapper = null;

    /**
     * DigesterCX^X?B
     */
    private static Digester digester = null;

    /**
     * ?I???B
     */
    public void destroy() {
        // 

    }

    /**
     * PlugIn????B
     *
     * <p>BLogicResources?Ay BLogicMapper
     * T?[ubgReLXgo^?B</p>
     *
     * <p>
     *  vOCNT?[ubg?AW?[RtBO
     *  null?A NullPointerException
     *  ?
     * </p>
     *
     * @param servlet vOCNT?[ubg
     * @param config W?[RtBO
     * @exception ServletException ?O
     */
    public void init(ActionServlet servlet, ModuleConfig config) throws ServletException {

        this.servlet = servlet;
        String moduleName = config.getPrefix();

        // BLogicResourcesT?[ubgReLXgo^
        initResources();
        servlet.getServletContext().setAttribute(BLogicResources.BLOGIC_RESOURCES_KEY + moduleName,
                blogicResources);

        // BLogicMapperT?[ubgReLXgo^
        initMapper();
        servlet.getServletContext().setAttribute(BLOGIC_MAPPER_KEY + moduleName, this.blogicMapper);
    }

    /**
     * rWlX?WbN?o?????B
     *
     * <p>blogic-io.xml?Ablogic-io-rules.xml
     * p?A??Bean??B</p>
     *
     * <p>XML?t@C`s??AIOO??A
     * ServletExceptionbvX??[?B</p>
     *
     * @exception ServletException rWlX?WbN?o????
     * ?O
     */
    private void initResources() throws ServletException {
        if (resources == null || "".equals(resources)) {
            if (log.isDebugEnabled()) {
                log.debug("resources file location is not specified");
            }
            return;
        }
        StringTokenizer st = new StringTokenizer(resources, ",");
        List<String> pathList = new ArrayList<String>();
        while (st.hasMoreTokens()) {
            String path = st.nextToken();
            path = path.trim();
            if (log.isDebugEnabled()) {
                log.debug("blogic io file=" + path);
            }
            pathList.add(path);
        }
        try {
            if (digester == null) {
                if (digesterRules == null) {
                    // ?[t@C??AftHg?[t@C
                    // gp?B
                    digesterRules = DIGESTER_RULES_PATH;
                }
                digester = DigesterLoader.createDigester(servlet.getServletContext().getResource(digesterRules));
                digester.setValidating(true);
            }
            blogicResources = new BLogicResources();
            for (int i = 0; i < pathList.size(); i++) {
                digester.push(blogicResources);
                URL url = this.getClass().getResource(getDtdUrl());
                if (url != null) {
                    digester.register(getPublicIdentifier(), url.toString());
                }
                digester.parse(servlet.getServletContext().getResourceAsStream(pathList.get(i)));
            }
        } catch (MalformedURLException e) {
            log.error("", e);
            throw new ServletException(e);
        } catch (IOException e) {
            log.error("", e);
            throw new ServletException(e);
        } catch (SAXException e) {
            log.error("", e);
            throw new ServletException(e);
        } catch (XmlLoadException e) {
            log.error("", e);
            throw new ServletException(e);
        }

    }

    /**
     * Jqp?B
     * Jq?X???A?\bhI?[o?[Ch?B
     * @return Jq
     */
    public String getPublicIdentifier() {
        return publicIdentifier;
    }

    /**
     * DTDURLp?B
     * DTDURL?X???A?\bhI?[o?[Ch?B
     * @return DTDURL
     */
    public String getDtdUrl() {
        return dtdUrl;
    }

    /**
     * }bp?[o^???B
     *
     * <p>BLogicMapper??[h?A??
     * CX^XtB?[ho^?B</p>
     *
     * <p>CX^X? BLogicMapper
     * NX??[hs?A ServletException
     * X??[?B</p>
     *
     * @throws ServletException T?[ubgO
     */
    private void initMapper() throws ServletException {
        Object[] args = { resources };
        if (this.mapperStr != null) {
            try {
                this.blogicMapper = (AbstractBLogicMapper) ClassUtil.create(this.mapperStr, args);
            } catch (ClassLoadException e) {
                log.error("", e);
                throw new ServletException(e);
            } catch (ClassCastException e) {
                log.error("", e);
                throw new ServletException(e);
            }
        } else {
            this.blogicMapper = new BLogicMapper(resources);
        }
    }

    /**
     * blogic-io-rules.xml??B
     *
     * @param digesterRules blogic-io-rules.xml
     */
    public void setDigesterRules(String digesterRules) {
        this.digesterRules = digesterRules;
    }

    /**
     * blogic-io.xml??B
     *
     * @param resources blogic-io.xml
     */
    public void setResources(String resources) {
        this.resources = resources;
    }

    /**
     * rWlX?WbN?o?fNX??B
     *
     * @param mapperStr rWlX?WbN?o?fNX
     */
    public void setMapperClass(String mapperStr) {
        this.mapperStr = mapperStr;
    }

    /**
     * Jq??B
     * @param publicIdentifier Jq
     */
    public void setPublicIdentifier(String publicIdentifier) {
        this.publicIdentifier = publicIdentifier;
    }

    /**
     * DTDURL??B
     * @param dtdUrl DTDURL
     */
    public void setDtdUrl(String dtdUrl) {
        this.dtdUrl = dtdUrl;
    }

}