strutsconfigfile.java

来自「Java Pattern Oriented Framework (Jt) 是为了」· Java 代码 · 共 867 行 · 第 1/2 页

JAVA
867
字号
package Jt.wizard.struts;

import java.io.InputStream;
import java.net.URLEncoder;
import java.util.Collection;
import java.util.LinkedList;
import java.util.List;

import Jt.JtContext;
import Jt.JtFactory;
import Jt.JtMessage;
import Jt.JtObject;
import Jt.DAO.DAODefinition;
import Jt.wizard.WizardConfig;
import Jt.xml.JDOMAdapter;

import org.apache.struts.action.ActionForm;
import org.apache.struts.upload.FormFile;
import org.jdom.Element;

/**
 * Struts Configuration File (Internal JtWizard Class).
 */

public class StrutsConfigFile extends JtObject {
    private static final long serialVersionUID = 1L;
    public static final String READ = "READ";
    public static final String DELETE = "DELETE";
    public static final String UPDATE = "UPDATE";
    public static final String CREATE = "CREATE";
    public static final String STRUTS_CONFIG_TEMPLATE = "struts-config-template.xml";
    public static final String JtCLASS_NAME = StrutsConfigFile.class.getName(); 
    private JtFactory factory = new JtFactory ();
    private WizardConfig config;
    JDOMAdapter adapter, templateAdapter;
    private DAODefinitionForm defForm;
    private boolean init = false;
    private String prefix;    
    private String path;
    private InputStream resourceStream;
    private String classname;
    //private String key;
    private String keys[];


    public String getPath() {
        return path;
    }

    public void setPath(String path) {
        this.path = path;
    }

    public String getClassname() {
        return classname;
    }

    public void setClassname(String classname) {
        this.classname = classname;
    }

    public InputStream getResourceStream() {
        return resourceStream;
    }

    public String getPrefix() {
        return prefix;
    }

    public void setPrefix(String prefix) {
        this.prefix = prefix;
    }

    public void setResourceStream(InputStream resourceStream) {
        this.resourceStream = resourceStream;
    }

    private void handleUIError (String error) {
        Collection col;

        if (error == null)
            return;
        col = (Collection) this.getObjErrors();

        if (col == null) {
            col = new LinkedList ();
            setObjErrors (col);
        }
        col.add(error);


    }
    
    // Initialize 

    private boolean initialized () {
        adapter = new JDOMAdapter ();
        templateAdapter = new JDOMAdapter ();
        
        config = (WizardConfig) factory.createObject(WizardConfig.JtCLASS_NAME);
        
        if (config == null) {
            handleError ("Unable to create instance of configuration class (WizardConfig).");
            return (false);
        }
        
        factory.sendMessage(config, new JtMessage (JtObject.JtINITIALIZE));
        
        adapter.setPath(config.getConfigPath());   
        factory.sendMessage (adapter, new JtMessage (JDOMAdapter.READ_FILE));
        
        if (adapter.getObjException() != null) {
            this.setObjException(adapter.getObjException());
            return (false);
        }
        
        resourceStream = this.getClass().getClassLoader().getResourceAsStream (StrutsConfigFile.STRUTS_CONFIG_TEMPLATE);
        
        templateAdapter.setInputStream(resourceStream);
        factory.sendMessage (templateAdapter, new JtMessage (JDOMAdapter.READ_STREAM));
        
        if (templateAdapter.getObjException() != null) {
            this.setObjException(templateAdapter.getObjException());
            return (false);
        }
        
        return (true);
        
    }
    
    private String capFirstLetter (String str) {
        if (str == null)
            return (null);

        if (str.equals(""))
            return (str);

        if (str.length() == 1)
            return str.toUpperCase();
        
        return (str.substring(0, 1).toUpperCase() + str.substring(1));
    }
    
    private void transformForward (Element elem, String prefix) {
        String path;
        String pos;
        String tmp;
        
        if (elem == null || prefix == null)
            return;
        
        path = elem.getAttributeValue("path");
        
        if (path == null)
            return;
        
        pos = capFirstLetter (prefix.toLowerCase());
        
        tmp = path.replaceAll("#name", pos);
        
        elem.setAttribute("path", tmp);
        
        return;
        
    }
    
   
    private void transformForwards (Element elem, String prefix) {
        List children;
        int i;
        Element tmp;
        
        if (elem == null || prefix == null)
            return;
        
        children = elem.getChildren();
        
        for (i = 0; i < children.size(); i++) {
            tmp = (Element) children.get(i);

            if (tmp == null)
                continue;
            
            if ("forward".equals (tmp.getName())) {
                transformForward (tmp, prefix);                
            }                                
        }        
        
    }
 
    private Element transformForm (Element elem, String prefix) {
        String name;
        String tmp;
        
        if (elem == null || prefix == null)
            return (null);
        
        name = elem.getAttributeValue("name");
        
        if (name == null)
            return (null);
                        
        
        tmp = name.replaceFirst("#name", prefix);
        
        elem.setAttribute("name", tmp);        
        
        return (elem);               
    }
    
    private String updateQuery (String str) {
        String query;
        String tmp;

        if (str == null)
            return (null);
        if (defForm == null || defForm.getTable() == null)
            return (str);

        query = "select * from " + defForm.getTable();
        try {
            query = URLEncoder.encode(query, "UTF-8");
        } catch (Exception ex) {
            handleException (ex);
            return (str);
        }

        tmp = str.replaceFirst("query=#query", "query=" + query);
        if (tmp == null)
            return (str);   
        
        return (tmp);

    }

    private String replaceString (String str, String substr, String newsubstr) {

        int index;
        int length;
        String segment1;
        String result;

        if (str == null)
            return (null);

        if (substr == null || substr.equals ("") || 
                newsubstr == null)
            return (str);

        result = null;
        for (;;) {

            index = str.indexOf(substr, 0);


            if (index < 0) {
                if (result == null)
                    result = str;
                else
                    result = result + str;
                break;            
            }
            length = substr.length();

            segment1 = str.substring(0, index);

            str = str.substring(index+length);

            if (result == null)
                result = segment1 + newsubstr;
            else
                result = result + segment1 + newsubstr;
        }

        return (result);


    }
    
    private void transformAttribute (Element elem, String attr, String str) {
        String value, tmp;
        
        if (elem == null || attr == null || str == null)
            return;
        
        value = elem.getAttributeValue(attr);

        if (value == null)
            return;
        
        tmp = value.replaceAll("#name", str);
        
        if (tmp == null)
            return;
        
        elem.setAttribute(attr, tmp);            
        
    }
    
    
    private Element transformAction (Element elem, String prefix, FileForm form) {
        String path;
        //String name;
        String pos;
        String tmp;
        String parameter;
        
        if (elem == null || prefix == null)
            return (null);
        
        path = elem.getAttributeValue("path");
        
        if (path == null)
            return (null);
        
        
        pos = capFirstLetter (prefix.toLowerCase());      
        
        tmp = path.replaceFirst("#name", pos);        
        
        elem.setAttribute("path", tmp);       

        transformAttribute (elem, "input", pos);
        /*
        name = elem.getAttributeValue("name");
        
        if (name == null)
            return (null);
              
        tmp = name.replaceFirst("#name", prefix);

        
        elem.setAttribute("name", tmp);
        */
        elem.setAttribute("name", form.getFormName());       
        
        transformForwards (elem, prefix);
        
        parameter = elem.getAttributeValue("parameter");
        
        if (parameter != null) {
            tmp = parameter.replaceFirst("classname=#classname", "classname=" + classname); 
            
            if (keys != null && (keys.length > 0))
                tmp = tmp.replaceFirst("key=#key", "key=" + keys[0]);  
            
            if (keys != null && (keys.length > 1))
                tmp = tmp.replaceFirst("key1=#key1", "key1=" + keys[1]); 
            else
                tmp = replaceString(tmp, "key1=#key1", "");
            
            if (keys != null && (keys.length > 2))
                tmp = tmp.replaceFirst("key2=#key2", "key2=" + keys[2]); 
            else
                tmp = replaceString(tmp, "key2=#key2", "");           
            
            if (tmp != null && (tmp.indexOf ("query=#query") > 0))
                tmp = updateQuery (tmp);
            //System.out.println(tmp);
            elem.setAttribute("parameter", tmp);
        }
        
        return (elem);
               
    }
    
     
    
    private String updateAction  (String actionPath, FileForm form) {

        Element elem, newElem, tmp;

        
        elem = findActionMapping (templateAdapter, actionPath);
        
        if (elem == null) {
            handleWarning ("Action mapping not found in template struts config file:" + actionPath);
            return null;
        }    
              
        newElem = transformAction (elem, prefix, form);             
        
        if (newElem == null)
            return null;
        
        
        tmp = findActionMapping (adapter, newElem.getAttributeValue("path"));
        //System.out.println (tmp);
        if (tmp == null)
            createActionMapping (newElem);
        else
            updateActionMapping (newElem.getAttributeValue("path"), newElem);
        
        return (null);
    }
    
    private String updateActionForm  (String name) {

        Element elem, newElem, tmp;

        
        elem = findForm (templateAdapter, name);
        
        if (elem == null) {
            handleWarning ("Form not found in template struts config file:" + name);
            return null;
        }    
        
      
        newElem = transformForm (elem, prefix);        
                
        if (newElem == null)
            return null;
        
        
        tmp = findForm (adapter, newElem.getAttributeValue("name"));
        System.out.println (tmp);
        if (tmp == null)
            createForm (newElem);
        else
            updateForm (newElem.getAttributeValue("name"), newElem);
        
        return (null);
    }   
    
    
    private String retrieveClassname (String qclassname) {
        int index;
        
        if (qclassname == null)
            return (null);
        
        index = qclassname.lastIndexOf('.');
        

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?