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

📄 template.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.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 + -