📄 template.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.commands.CommandSet;
import freecs.content.MessageState;
import freecs.core.*;
import freecs.util.FileMonitor;
import freecs.interfaces.IReloadable;
import java.io.*;
import java.util.*;
public class Template implements IReloadable {
private Vector parts;
private String tsName;
private String name;
private boolean isRedirect;
private String destination;
private TemplateSet ts;
private File template;
private long lastModified;
private boolean tplPresent;
public String getDestination () {
return destination;
}
public boolean isRedirect () {
return isRedirect;
}
public String getTsName () {
return tsName;
}
public String render () {
StringBuffer tsb = new StringBuffer ("rendering Template ").append (name).append (" of templateset ").append (tsName);
Server.log (tsb.toString (), Server.MSG_STATE, Server.LVL_VERY_VERBOSE);
StringBuffer retVal = new StringBuffer ();
for (Enumeration e = parts.elements (); e.hasMoreElements ();) {
String part = (String) e.nextElement ();
if (!part.startsWith ("#")) {
retVal.append (part);
continue;
}
if (part.equals ("#version")) {
retVal.append (Server.getVersion());
} else if (part.equals ("#active_users")) {
retVal.append (UserManager.mgr.getActiveUserCount ());
} else if (part.equals ("#active_user_list")) {
CommandSet cs = CommandSet.getCommandSet();
MessageState msgState = new MessageState(null);
UserManager umgr = UserManager.mgr;
StringBuffer sb = new StringBuffer();
for (Iterator i = GroupManager.mgr.groups(); i.hasNext (); ) {
Group cg = (Group) i.next();
msgState.room=cg;
retVal.append (generateUserList(msgState, true));
}
} else if (part.equals ("#open_groups")) {
retVal.append (GroupManager.mgr.openGroupsCount());
} else if (part.equals ("#selve")) {
retVal.append ("http://");
retVal.append (Server.srv.getUrl ());
}
}
return retVal.toString ();
}
public String getName () {
return name;
}
public Template(File tpl, TemplateSet ts) throws IOException {
this.tsName = ts.getName();
this.ts = ts;
template = tpl;
name = tpl.getName ();
int pos = name.indexOf (".");
if (pos != -1)
name = name.substring (0, pos);
lastModified = tpl.lastModified ();
parts = parseFile(tpl);
tplPresent=true;
FileMonitor.getFileMonitor ().addReloadable (this);
}
public boolean isValide () {
return ((parts != null && parts.size() > 0) ||
(destination != null && destination.length() > 1 && isRedirect == true));
}
private Vector parseFile(File tpl) throws IOException {
if (!tpl.canRead()) {
StringBuffer tsb = new StringBuffer ("Unable to read template '").append (tpl.getName()).append ("'");
throw new IOException(tsb.toString ());
}
Vector t = new Vector ();
FileReader fr = new FileReader(tpl);
char fcnt[] = new char[(int) tpl.length()];
int read = fr.read(fcnt);
if (read<1) return null;
String raw = String.copyValueOf(fcnt);
if (raw.toLowerCase ().startsWith ("#redirect#")) {
this.isRedirect = true;
destination = raw.substring (raw.lastIndexOf("#") + 1).trim ();
if (destination.toLowerCase ().startsWith ("$selve$")) {
StringBuffer tsb = new StringBuffer ("http://").append (Server.srv.getUrl ());
destination = tsb.toString ();
} else if (!destination.toLowerCase ().startsWith ("http://")) {
StringBuffer tsb = new StringBuffer ("http://").append (destination);
destination = tsb.toString ();
}
}
String parts[] = raw.split("<%");
for (int i = 0; i < parts.length; i++) {
String sub[] = parts[i].split ("%>");
if (sub.length == 1) {
t.addElement(sub[0]);
continue;
} if (sub.length > 2) {
StringBuffer tsb = new StringBuffer ("error parsing template ");
tsb.append (tsName).append ("/").append (tpl.getName ());
Server.log(tsb.toString (), Server.MSG_ERROR, Server.LVL_MAJOR);
return(null);
}
StringBuffer tsb = new StringBuffer ("#").append (sub[0].trim ().toLowerCase ());
t.addElement(tsb.toString ());
t.addElement(sub[1]);
}
return(t);
}
/* INTERFACE RELOADABLE */
public long lastModified () {
return lastModified;
}
public void changed () {
try {
parts = parseFile(template);
Server.log ("Templateset.reload: reloaded template", Server.MSG_STATE, Server.LVL_MAJOR);
lastModified = template.lastModified ();
} catch (Exception e) {
Server.debug ("Template.reload: ", e, Server.MSG_ERROR, Server.LVL_MAJOR);
}
}
public void removed () {
ts.removeTemplate(this);
tplPresent=false;
}
public boolean filePresent () {
return tplPresent;
}
public void created() {
changed();
ts.addTemplate(this);
tplPresent=true;
}
public File getFile () {
return template;
}
public String generateUserList (MessageState msgState, boolean shorten) {
Group g = msgState.room;
StringBuffer sb = new StringBuffer ();
String tplcnt = ts.getMessageTemplate (shorten ? "message.user.short" : "message.user.overview");
String seperator = ts.getMessageTemplate ("message.user.short.seperator");
if (seperator != null)
seperator = MessageRenderer.renderTemplate (msgState, seperator, false);
for (Iterator i = g.users (); i != null && i.hasNext (); ) {
msgState.usercontext = (User) i.next ();
String snippet = MessageRenderer.renderTemplate (msgState, tplcnt, false);
sb.append (snippet == null ? msgState.sender.getName () : snippet);
if (i.hasNext () && (shorten || snippet == null)) {
if (seperator != null)
sb.append (seperator);
else
sb.append (", ");
}
}
if (sb.length () == 0)
return "";
msgState.msgTemplate = "list.users";
msgState.target = g.getName ();
msgState.source = g.getTheme ();
msgState.message = sb.toString ();
return MessageRenderer.renderTemplate (msgState, ts.getMessageTemplate (msgState.msgTemplate));
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -