resourcefile.java

来自「Java Pattern Oriented Framework (Jt) 是为了」· Java 代码 · 共 600 行

JAVA
600
字号
package Jt.wizard;


//import java.io.Serializable;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.util.Hashtable;
import java.util.Iterator;
import java.util.LinkedList;

import Jt.JtComposite;
import Jt.JtFactory;
import Jt.JtFile;
import Jt.JtMessage;
import Jt.JtObject;
//import Jt.DAO.JtDAOAdapter;
//import Jt.wizard.WizardConfig;


/**
 * DAO adapter implementation that uses an XML file.
 */


public class ResourceFile extends JtObject {


    private static final long serialVersionUID = 1L;
    public static final String JtCLASS_NAME = ResourceFile.class.getName();
    public static final String DELETE_GROUP = "DELETE_GROUP";
    private JtFactory factory = new JtFactory ();
    private String path;
    private Hashtable resTable = new Hashtable ();
    private Hashtable groups = new Hashtable ();   
    private boolean initted = false;
    private boolean dirty = false; // anything to save ?
    private LinkedList lines = new LinkedList ();


    public String getPath() {
        return path;
    }

    public void setPath(String path) {
        this.path = path;
    }
    
    
    private void saveResourceFile () {
        JtFile jfile = new JtFile ();
        JtMessage msg = new JtMessage (JtFile.JtSAVE_STRING);
        StringBuffer buffer = new StringBuffer ();
        Iterator iterator;
        String line;
        
        if (!dirty)  // anything to save ?
            return;
        
        if (lines == null)
            return;
        
        iterator = lines.iterator();
        
        
        if (iterator == null)
            return;
        
        while (iterator.hasNext()) {
            
            line = (String) iterator.next();
            if (line == null) // the line has been removed ?
                continue;
            buffer.append(line);
            buffer.append ("\n");
        }
        
        if (buffer.length() == 0) {
            handleWarning ("ResourceFile.saveResourceFile: empty buffer.");
            return;                        
        }
        
        jfile.setName(path);
        msg.setMsgContent(buffer.toString()); // check
        
        factory.sendMessage(jfile, msg);        
        
    }
    
    
    private void save () {
        saveResourceFile ();
        dirty = false;
    }
    
    
    private JtComposite retrieveGroup (String groupName) {
        if (groupName == null)
            return null;
        
        return ((JtComposite) groups.get(groupName));

    }
    
    
    private void createGroup (String groupName) {
        JtComposite group;
        if (groupName == null) {
            return;
        }
        
        if (groups.get(groupName) != null)
            return;
        
        
        group = new JtComposite ();
        
        groups.put (groupName, group);
    }
    
    private void addChild (String groupName, Object child) {
        JtComposite group;
        JtMessage msg = new JtMessage (JtComposite.JtADD_CHILD);
        
        if (groupName == null || child == null) {
            return;
        }
        
        
        group = (JtComposite) groups.get(groupName);
        
        if (group == null) {
            handleWarning ("ResourceFile.addChild: group not found: " +
                    groupName);
            return;
        }
        
        msg.setMsgContent(child);

        factory.sendMessage(group, msg);
        
    }
    
    private void deleteGroup (String groupName) {
        JtComposite group;
        Iterator iterator;
        Resource res;
        
        if (groupName == null)
            return;
        
        
        group = retrieveGroup (groupName);
        
        if (group == null)
            return;
        
        iterator = group.getIterator();
        
        if (iterator == null)
            return;
        
        while (iterator.hasNext ()) {
            res = (Resource) iterator.next ();
            
            delete (res);
            groups.remove(groupName);
        }
        
    }
    

    /**
     * Create
     */
    
    private void create (Object obj) {
        Resource res;
        String line;
        String groupName;
        
        
        res = (Resource) obj;
        
        if (read (res.getName()) != null) {
            handleWarning ("Entry already exists.");
            return;
        }

        if (res.getValue() == null || res.getValue() == null)
            return;
     
        resTable.put (res.getName(), res); // check

        line = res.getName() + "=" + res.getValue();
        
        res.setLineNumber(lines.size());
        
        lines.add(line);
        
        groupName = determineGroupName(res.getName());
        
        if (groupName != null) {// fix
            res.setGroup(groupName);
            if (retrieveGroup (res.getGroup()) != null)
                createGroup (res.getGroup());
            addChild (res.getGroup(), res);
        }
        
        dirty = true;
        //saveResourceFile ();
        
    }



    /**
     * Update
     */

    private void update (Object obj) {
        Resource res, res1;
        String line;
        int index;
        
        if (obj == null)
            return;
        
        res = (Resource) obj;
        
        res1 = (Resource) resTable.get(res.getName());
        
        if (res1 == null) {
            handleWarning ("ResourceFile.update: object not found: " + res.getName());
            return;
        }
        
        index = res1.getLineNumber();

        if (index < 0 || index >= lines.size()) {
            handleError ("ResourceFile.update: invalid line number for " + res.getName() +
                    ": " + index);
            return;
        }
        
        res1.setValue(res.getValue());
        
        line = res.getName() + "=" + res.getValue();
                
        
        lines.set(index, line);
        
        dirty = true;
                
        
    }  
    
    
    String determineGroupName (String resName) {
        int index;
        String groupName;
        
        if (resName == null)
            return null;
        
        if (!resName.startsWith("Jt."))
            return null;
        
        index = resName.indexOf('.', 3);
        
        if (index == -1) {
            return (null);
        }
        
        groupName = resName.substring(3, index);
        
        if (groupName.length() == 0)
            return null;
        
        return (groupName);
    }
    
    
    Resource parseResource (String line) {

        //String resource_class 
        String tmp;
        int index;
        int length;
        Resource res;

        if (line == null)
            return (null);

        length = line.length ();

        if (length == 0)
            return (null);

        index = line.indexOf ("=");

        if (index < 0)
            return (null);

        if (index == length - 1)
            return (null);

        res = new Resource ();

        res.setValue (line.substring (index+1, length));

        tmp = line.substring (0, index);

        /*
        index = tmp.lastIndexOf (".");

        if (index == -1)
            return (null);

        if (index == tmp.length () - 1)
            return (null);  // ends with a dot ?
        */
        
        //res.rclass = tmp.substring (0, index);
        res.setName (tmp);  

        handleTrace ("Resource: " + "(" +
                res.getName () + "," + res.getValue ()
                + ")", 0);

        return (res);

    }
    
    private void updateResourceTable (Resource res) {
        //Hashtable ht;

        if (res == null)
            return;

        if (res.getName() == null)
            return;

        //if (resTable == null)
        //    resTable = new Hashtable ();

        resTable.put (res.getName(), res); //check
        
    }
    
    // Load resources from a file

    private boolean loadResourceFile ( ) {
        String line;
        Resource res;
        File file;
        //LinkedList list;
        int index = 0;
        String groupName;

        if (path == null) {
            handleError ("resource path needs to be set.");
            return false;
        }    

        file = new File (path);

        if (!file.exists ()) {
            handleTrace ("Resource file not found:" + path);
            return false;
        }

        handleTrace ("ResourceFile: reading resource file " +
                path + " ...");
        lines = new LinkedList ();
        
        try {
            BufferedReader d = new BufferedReader 
            (new FileReader (path));

            while ((line  = d.readLine ()) != null) {
                //System.out.println ("JtFile.read_lines:" + line);
                
                lines.add(line);
                index++;
                
                if (line.startsWith ("#"))
                    continue; //check
                
                res = parseResource (line);

                if (res != null) {
                    groupName = determineGroupName(res.getName());
                    
                    res.setLineNumber( index - 1);
                    updateResourceTable (res);
                    
                    if (groupName != null) {
                        res.setGroup(groupName);
                        if (retrieveGroup (groupName) == null)
                            createGroup (groupName);
                        
                        addChild (groupName, res);
                    }
                }    
            }
            
            d.close(); // check

        } catch (Exception ex) {
            handleException (ex);
            return false;
        }
        return true;
    }

    /**
     * Read DAO
     */
    
    private Object read (Object key) {
    
 

        if (key == null)
            return (null);
        
        
        if (resTable == null) {
            return (null);
        }
        
        return (resTable.get (key));
        
    }


    /**
     * Delete
     */

    private void delete (Object obj) {
        Resource res;
        int index;
        String resourceName;
        
        res = (Resource) obj;
        if (res == null ||res.getName() == null) {
            return;
        }
        
        resourceName = res.getName();
        
        handleTrace ("ResourceFile.delete: " + resourceName);
        
        if (resTable.get(resourceName) == null) {
            handleTrace ("ResourceFile.delete: resource not found:  " +
                    resourceName);
            return;
        }
        
        index = res.getLineNumber();
        
        //lines.remove(index);
        
        if (index < 0 || index >= lines.size()) {
            handleError ("ResourceFile.delete: invalid line number: " + index);
            return;
        }
            
        
        lines.set(index, null);
        
        resTable.remove(resourceName);                
        
        // fix delete from group
        
        dirty = true;
        return;
    }

    
    // Initialize object
    
    
    private boolean initialized () {
       return loadResourceFile ();
        
    }

    /**
     * Process object messages.
     * <ul>
     * <li> JtCREATE - Inserts an object. msgContent specifies the object
     * to be inserted.
     * <li> JtREAD - Finds an object. Returns the object or null. msgData 
     * specifies the identifier (key). msgContent specifies an instance of the 
     * persistent class. This instance is only used to determine the persistent class.
     * msgContent can be any instance of the class.
     * <li> JtUPDATE - Updates an object. msgContent specifies the object
     * to be updated.
     * <li> JtDELETE - Deletes an object. msgContent specifies the object
     * to be deleted.
     * </ul>
     */

    public Object processMessage (Object event) {

        String msgid = null;
        JtMessage e = (JtMessage) event;
        Object obj;
        Object key;
        //String query;
        Object reply;

        if (e == null)
            return null;

        msgid = (String) e.getMsgId ();

        if (msgid == null)
            return null;

        obj = e.getMsgContent();
        
        if (!initted) {
            
            initted = initialized ();
            
            if (!initted)
                return null; // unable to initialize object
        }


        if (msgid.equals (JtObject.JtCREATE)) {

            create (obj);
            return (null);
        }

        if (msgid.equals (JtObject.JtREAD)) {

            key = e.getMsgContent ();

            reply = read (key);

            return (reply);
        }

        if (msgid.equals (JtObject.JtUPDATE)) {
            update (obj);
            return (null);
        }

        if (msgid.equals (JtObject.JtDELETE)) {

            return (null);
        }

        if (msgid.equals (JtObject.JtSAVE)) {
            save ();
            return (null);
        }
        
        if (msgid.equals (ResourceFile.DELETE_GROUP)) {
            deleteGroup ((String) e.getMsgContent());
            return (null);
        }       

        return (super.processMessage(event));


    }
    
    public static void main(String[] args) {
        /*
        JtObject factory = new JtFactory ();
        ResourceFile dao;
        JtMessage msg = new JtMessage (JtObject.JtCREATE);
        WizardConfig config;
        Object obj;
        


        msg = new JtMessage (JtDAOAdapter.JtCREATE);

        
        
        dao = (ResourceFile) factory.createObject(ResourceFile.JtCLASS_NAME);
        
        
        
        //msg.setMsgContent(config);
        factory.sendMessage(dao, msg);
        */        
       
     }

}

⌨️ 快捷键说明

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