📄 templateset.java
字号:
/**
* Copyright (C) 2003 Manfred Andres
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
package freecs.layout;
import freecs.Server;
import freecs.util.FileMonitor;
import freecs.interfaces.IReloadable;
import java.io.*;
import java.util.*;
public class TemplateSet implements IReloadable {
private Hashtable tpl;
private Properties props;
private String name;
private boolean isValide;
private File msgSet;
private long lastModified;
private boolean msgSetPresent=false;
private TemplateManager tm;
private String templatesNeeded = "start,welcome,login_missing,login_failed,not_found";
public TemplateSet(File dir, TemplateManager tm) throws IOException {
this.tm = tm;
this.isValide = false;
this.name = dir.getName ();
tpl = new Hashtable();
File tFiles[] = dir.listFiles ();
for (int i = 0; i < tFiles.length; i++) {
if (!tFiles[i].isFile ())
continue;
if (tFiles[i].getName ().equalsIgnoreCase ("message.set")) try {
readMessageSet (tFiles[i]);
continue;
} catch (FileNotFoundException fnfe) {
// doesn't happen
}
Template t = new Template(tFiles[i], this);
if (t.isValide ())
tpl.put (t.getName(), t);
}
if (!msgSetPresent) {
if (name.equals("default")) {
Server.log ("Default-templateset doesn't have a message.set-file", Server.MSG_ERROR, Server.LVL_HALT);
} else {
TemplateSet foreignTS = tm.getTemplateSet("default");
if (foreignTS == null) {
Server.log ("No default-templateset present", Server.MSG_ERROR, Server.LVL_MAJOR);
} else {
props = foreignTS.getMessageTemplateSet();
}
}
}
String nt[] = templatesNeeded.split(",");
for (int i=0; i < nt.length; i++) {
if (tpl.containsKey (nt[i]))
continue;
this.isValide = false;
return;
}
if (this.msgSet == null) {
Server.log ("TemplateSet.construct: Templateset has no message.set! Ignoring.", Server.MSG_STATE, Server.LVL_MAJOR);
this.isValide= false;
return;
}
this.isValide=true;
FileMonitor.getFileMonitor ().addReloadable (this);
}
public String getName () {
return name;
}
public Template getTemplate (String tName) {
return ((Template) tpl.get (tName));
}
public void removeTemplate (Template t) {
tpl.remove(t.getName());
}
public void addTemplate (Template t) {
tpl.put(t.getName(), t);
}
public String getMessageTemplate (String msgTplName) {
return props.getProperty (msgTplName);
}
public Properties getMessageTemplateSet () {
return props;
}
public boolean isValide () {
return isValide;
}
public void readMessageSet (File f) throws FileNotFoundException, IOException {
// we have found the messageset
msgSetPresent=true;
msgSet = f;
lastModified = msgSet.lastModified ();
FileInputStream fis = new FileInputStream (f);
if (props == null)
props = new Properties ();
props.load (fis);
fis.close ();
Properties tProps = (Properties) props.clone();
for (int i = 0; i < neededMessageTemplates.length; i++) {
if (props.get(neededMessageTemplates[i]) == null) {
Server.log ("TemplateSet.readMessageSet [" + name + "]: Message-template '" + neededMessageTemplates[i] + "' is not present", Server.MSG_STATE, Server.LVL_VERBOSE);
}
tProps.remove(neededMessageTemplates[i]);
}
for (Enumeration e = tProps.keys(); e.hasMoreElements(); ) {
Server.log ("TemplateSet.readMessageSet [" + name + "]: Unknown message-template found: " + e.nextElement().toString (), Server.MSG_STATE, Server.LVL_VERBOSE);
}
}
/* INTERFACE RELOADABLE */
public long lastModified () {
return lastModified;
}
public void changed () {
try {
FileInputStream fis = new FileInputStream (msgSet);
Properties tprop = new Properties ();
tprop.load (fis);
fis.close ();
props = tprop;
lastModified = msgSet.lastModified ();
Server.log ("TemplateSet.reload: reloaded messagetemplates", Server.MSG_STATE, Server.LVL_MAJOR);
} catch (Exception e) {
Server.debug ("TemplateSet relod: ", e, Server.MSG_ERROR, Server.LVL_MAJOR);
}
}
public void removed () {
if (name.equals("default")) {
Server.log ("WARNING: message.set was removed for DEFAULT-layout! Default-Layout must have one!", Server.MSG_ERROR, Server.LVL_MAJOR);
} else {
Server.log ("WARNING: message.set was removed for layout " + name, Server.MSG_ERROR, Server.LVL_MINOR);
}
TemplateSet foreignTS = tm.getTemplateSet("default");
if (foreignTS == null) {
Server.log ("No default-templateset present making it impossible to fall back to the default-layout's message.set. Keeping the old messag.set", Server.MSG_ERROR, Server.LVL_MAJOR);
} else {
props = foreignTS.getMessageTemplateSet();
}
msgSetPresent = false;
}
public boolean filePresent() {
return msgSetPresent;
}
public void created () {
changed();
msgSetPresent = true;
}
public File getFile () {
return msgSet;
}
public static final String neededMessageTemplates[] = {
"error.group.notExisting", "error.user.notOnServer",
"error.user.punished", "error.me.noArg", "error.ban.noArg",
"error.ban.noRight", "error.col.wrongCode", "error.col.lockedColor",
"error.col.tooOften", "error.td.noArg", "error.td.noRight",
"error.td.wrong", "error.td.toomany", "error.ig.noArg",
"error.i.noRight", "error.i.inviteToStart", "error.i.noArg",
"error.i.alreadyHere", "error.ia.inviteToStart", "error.ia.all.noRight",
"error.ia.noRight", "error.j.noArg", "error.j.alreadyHere", "error.j.baned",
"error.j.noRight", "error.ju.noArg", "error.k.mass.noRight", "error.k.noRight",
"error.k.noGroupRight", "error.kh.mass.noRight", "error.kh.noRight",
"error.fl.nofriends", "error.f.noFriendOnline", "error.vip.noVipOnline",
"error.l.noRight", "error.m.noArg", "error.m.nomessage", "error.gag.noRight",
"error.gag.noArg", "error.gag.mass.noRight", "error.gag.protected",
"error.aq.noArg", "error.m.nomessage", "error.rig.noArg", "error.rsu.noArg",
"error.rsu.noRight", "error.sepa.noArg", "error.sepa.noRight",
"error.sepa.alreadyHere", "error.sepa.exists", "error.t.noRight",
"error.s.noArg", "error.ip.noRight", "error.ip.noArg", "error.su.noArg",
"error.su.noRight", "error.th.noArg", "error.uban.noArg",
"error.uban.noRight", "error.ul.noRight", "error.rgag.noRight",
"error.rgag.noArg", "error.rgag.mass.noRight", "error.i.alreadyInvited",
"error.j.noRightToOpen", "error.ack.groupNotModerated", "error.ack.noRight",
"error.ack.noArg", "error.ack.noMessage", "error.ack.userNotInGroup",
"error.col.noRight", "error.w.nobodyHere", "error.m.vip.noRight",
"error.col.startingGroup", "error.su.tooManyForStartgroup",
"error.wban.noRight", "error.ban.mass.noRight", "error.i.mass.noRight",
"error.rsu.mass.noRight", "error.uban.mass.noRight", "error.su.mass.noRight",
"error.wban.nobodyBanned",
"status.showtime", "status.showtime.timeformat",
"list.users", "message.send", "message.ack", "message.away.off",
"message.q", "message.a", "message.me", "message.away.on", "message.ban",
"message.ban.personal", "message.col", "message.c", "message.td",
"message.ig.plural", "message.ig.singular", "message.i.plural",
"message.i.singular", "message.i", "message.ia.all", "message.ia.group",
"message.j", "message.k", "message.k.confirm", "message.k.personal",
"message.k.destination", "message.kh.singular", "message.kh.plural",
"message.fl", "message.fl.count", "message.f", "message.f.joined",
"message.f.count", "message.m.vip", "message.m.vip.confirm", "message.vip",
"message.l", "message.mycol", "message.aq", "message.rig.plural",
"message.rig.singular", "message.rsu", "message.rsu.plural",
"message.rsu.singular", "message.rsu", "message.sepa",
"message.sepa.confirm", "message.t", "message.s", "message.ip",
"message.time", "message.su.plural", "message.su.singular", "message.su",
"message.th", "message.uban", "message.uban.personal", "message.ul",
"message.m", "message.m.away", "message.m.confirm", "message.gag",
"message.rgag", "message.su.personal", "message.rsu.personal",
"message.server.shutdown", "message.user.leaving.group",
"message.user.join.group", "message.user.detail", "message.user.short",
"message.user.overview", "message.user.short.seperator",
"message.user.leaving.server.kicked", "message.user.leaving.server",
"message.user.flooded", "message.user.join.server", "message.user.vip",
"message.f.isOnline", "message.fl.entry", "message.wban",
"constant.defaultColor", "constant.emptyAwayMessage"
};
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -