⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 templateset.java

📁 JAVA平台下优秀的CHART开源代码,可以实现类似EXCEL中的二维或三维的饼图/椎图功能.
💻 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 + -