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 + -
显示快捷键?