/*
* Copyright (C) 2000 - 2015 TagServlet Ltd
*
* This file is part of Open BlueDragon (OpenBD) CFML Server Engine.
*
* OpenBD is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* Free Software Foundation,version 3.
*
* OpenBD 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 OpenBD. If not, see http://www.gnu.org/licenses/
*
* Additional permission under GNU GPL version 3 section 7
*
* If you modify this Program, or any covered work, by linking or combining
* it with any of the JARS listed in the README.txt (or a modified version of
* (that library), containing parts covered by the terms of that JAR, the
* licensors of this Program grant you additional permission to convey the
* resulting work.
* README.txt @ http://www.openbluedragon.org/license/README.txt
*
* http://openbd.org/
* $Id: JavaPlatform.java 2507 2015-02-09 01:20:34Z alan $
*/
package com.bluedragon.platform.java;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import org.alanwilliamson.amazon.s3.BackgroundUploader;
import org.alanwilliamson.lang.java.JavaClassFactory;
import org.alanwilliamson.lang.java.cfSCRIPTJava;
import org.aw20.util.SystemClock;
import org.aw20.util.SystemClockEvent;
import com.bluedragon.net.socket.SocketServerDataFactory;
import com.bluedragon.platform.FileIO;
import com.bluedragon.platform.Platform;
import com.bluedragon.platform.SmtpInterface;
import com.bluedragon.platform.java.smtp.OutgoingMailServer;
import com.bluedragon.search.collection.CollectionFactory;
import com.naryx.tagfusion.cfm.engine.cfEngine;
import com.naryx.tagfusion.cfm.engine.cfWebServices;
import com.naryx.tagfusion.cfm.sql.cfQueryImplInterface;
import com.naryx.tagfusion.cfm.tag.cfSCRIPT;
import com.naryx.tagfusion.cfm.xml.ws.dynws.DynamicWebServiceTypeGenerator;
import com.naryx.tagfusion.util.TagElement;
import com.naryx.tagfusion.xmlConfig.xmlCFML;
public class JavaPlatform implements Platform {
private FileIO javaFileIO;
private OutgoingMailServer spoolingMailServer;
@Override
public void init(ServletConfig config) throws ServletException {
com.nary.Debug.SystemOff();
javaFileIO = new JavaFileIO(config);
spoolingMailServer = new OutgoingMailServer( cfEngine.thisInstance.getSystemParameters() );
CollectionFactory.init( cfEngine.getConfig() );
BackgroundUploader.onStart();
// Install Sun JCE provider
try {
Class<?> jceClass = Class.forName("com.sun.crypto.provider.SunJCE");
Object jceInstance = jceClass.newInstance();
java.security.Security.addProvider((java.security.Provider) jceInstance);
} catch (Exception e) {
cfEngine.log("Failed to add Sun JCE provider");
}
}
/**
* The Servlet engine is going done
*/
@Override
public void destroy(){
SystemClock.shutdown();
spoolingMailServer.engineShutdown();
CollectionFactory.close();
SocketServerDataFactory.thisInst.close();
BackgroundUploader.onShutdown();
}
@Override
public SmtpInterface getSmtp(){
return spoolingMailServer;
}
@Override
public void engineAdminUpdate(){
javaFileIO.engineAdminUpdate();
}
@Override
public void log(String l){
com.nary.Debug.println( l );
}
@Override
public boolean hasNetworkAccess(){return true;}
@Override
public void registerScriptExtensions(){
cfSCRIPT.registerLanguage("java", "org.alanwilliamson.lang.java.cfSCRIPTJava" );
cfSCRIPT.registerLanguage("javascript", "org.alanwilliamson.lang.javascript.cfSCRIPTJavascript" );
try {
cfSCRIPTJava.javaClassFactory = new JavaClassFactory();
} catch (Exception e) {
cfEngine.log( "Failed to initialize CFSCRIPT lang=java: " + e.getMessage() );
}
}
@Override
public Object loadClass(String classpath){
try{
return Class.forName(classpath).newInstance();
}catch(Exception e){
return null;
}
}
@Override
public void initialiseQuerySystem(xmlCFML configFile, Map<String, cfQueryImplInterface> queryImplementations){
cfQueryImplInterface dq = new com.naryx.tagfusion.cfm.sql.platform.java.cfQueryImplSQL();
dq.init(configFile);
queryImplementations.put("dynamic", dq );
queryImplementations.put("amazon", new org.alanwilliamson.amazon.simpledb.cfQueryImplSimpleDB() );
}
@Override
public cfQueryImplInterface getDefaultQuerySystem(Map<String, cfQueryImplInterface> queryImplementations){
return queryImplementations.get("dynamic");
}
@Override
public void initialiseTagSystem(xmlCFML configFile){
try {
com.naryx.tagfusion.cfm.mail.cfIMAP.init(configFile);
} catch (java.lang.NoClassDefFoundError e) {
// javamail is not installed
cfEngine.thisInstance.TagChecker.replaceTag("CFMAIL", "com.naryx.tagfusion.cfm.tag.cfDisabledMailTag" );
cfEngine.thisInstance.TagChecker.replaceTag("CFIMAP", "com.naryx.tagfusion.cfm.tag.cfDisabledMailTag" );
cfEngine.thisInstance.TagChecker.replaceTag("CFPOP", "com.naryx.tagfusion.cfm.tag.cfDisabledMailTag" );
cfEngine.log("CFMAIL, CFIMAP, and CFPOP disabled: JavaMail not found on classpath");
}
if (cfEngine.WINDOWS)
com.naryx.tagfusion.cfm.registry.cfREGISTRY.init(configFile);
com.naryx.tagfusion.cfm.tag.awt.cfCHART.init(configFile);
com.naryx.tagfusion.cfm.schedule.cfSCHEDULE.init(configFile);
com.naryx.tagfusion.cfm.tag.net.cfMULTICAST.init(configFile);
try {
com.naryx.tagfusion.cfm.document.cfDOCUMENT.init( configFile );
} catch ( NoClassDefFoundError e ) {
cfEngine.log( "CFDOCUMENT tag disabled: " + e.toString() );
cfEngine.thisInstance.TagChecker.replaceTag( "CFDOCUMENT", "com.naryx.tagfusion.cfm.document.cfDisabledDocumentTag" );
}
}
@Override
public FileIO getFileIO() {
return javaFileIO;
}
@Override
public boolean compileOutput(String outDir, ByteArrayOutputStream javacOut) throws IOException{
String ps = System.getProperty("path.separator");
String fs = System.getProperty("file.separator");
// Create a java compiler object
// NOTE: Using the newer com.sun.tools.javac.Main class causes an
// IncompatibleClassChangeError to
// be thrown by the compiler when BD is compiled with JDK 1.3 and run with
// JDK 1.4. So for
// now we'll use the older sun.tools.javac.Main class.
@SuppressWarnings("deprecation")
sun.tools.javac.Main javac = new sun.tools.javac.Main(javacOut, "BD Web Services Client Compiler");
// Determine the classpath needed by the java compiler
String javacClasspath = "";
String dir = null;
String libDir = null;
String cp = System.getProperty("java.class.path");
String bcp = System.getProperty("sun.boot.class.path");
// This is BD J2EE (or BD J2EE WLS) so the JARs are in the WEB-INF lib folder.
dir = cfWebServices.getDocRootDir();
if (dir != null && !dir.endsWith(fs))
dir += fs;
dir = dir + "WEB-INF" + fs;
libDir = dir + "lib" + fs;
String altLibDir = cfEngine.getAltLibPath();
if (!bcp.contains("webservices.jar") && !cp.contains("webservices.jar")) {
javacClasspath += ps + DynamicWebServiceTypeGenerator.getJarPath(libDir, altLibDir, "webservices.jar");
}
if (!bcp.contains("wsdl4j.jar") && !cp.contains("wsdl4j.jar")) {
javacClasspath += ps + DynamicWebServiceTypeGenerator.getJarPath(libDir, altLibDir, "wsdl4j.jar");
}
if (!bcp.contains("saaj.jar") && !cp.contains("saaj.jar")) {
javacClasspath += ps + DynamicWebServiceTypeGenerator.getJarPath(libDir, altLibDir, "saaj.jar");
}
if (!bcp.contains("jaxrpc.jar") && !cp.contains("jaxrpc.jar")) {
javacClasspath += ps + DynamicWebServiceTypeGenerator.getJarPath(libDir, altLibDir, "jaxrpc.jar");
}
javacClasspath += ps + dir + "classes";
// Add the J2EE specific jars (not required as classes, may be in the classes dir)
javacClasspath += ps + DynamicWebServiceTypeGenerator.getJarPath(libDir, altLibDir, "OpenBlueDragon.jar");
// Now add the boot classpath to the java compiler classpath
if (bcp != null) {
javacClasspath += ps + bcp;
}
// Now add the classpath to the java compiler classpath
if (cp != null) {
javacClasspath += ps + cp;
}
List<String> list = new ArrayList<String>();
if (javacClasspath != null) {
list.add("-classpath");
list.add(javacClasspath);
}
compileFileList(new java.io.File(outDir), list);
String[] args = list.toArray(new String[list.size()]);
@SuppressWarnings("deprecation")
boolean rtn = javac.compile(args);
if (!rtn)
System.err.println("Could not compile client web service stub classes with classpath: " + javacClasspath);
return rtn;
}
private void compileFileList(File dir, List<String> l) {
File[] files = dir.listFiles();
if (files != null) {
for (int i = 0; i < files.length; i++) {
if (files[i].isDirectory())
compileFileList(files[i], l);
else
l.add(files[i].getAbsolutePath());
}
}
}
@Override
public void registerFunctions( Map<String, String> functions ){
// Image functions
functions.put("imagenew", "com.naryx.tagfusion.expression.function.image.ImageNew");
functions.put("imageread", "com.naryx.tagfusion.expression.function.image.ImageRead");
functions.put("imagewrite", "com.naryx.tagfusion.expression.function.image.ImageWrite");
functions.put("imagewritebase64", "com.naryx.tagfusion.expression.function.image.ImageWriteBase64");
functions.put("imagereadbase64", "com.naryx.tagfusion.expression.function.image.ImageReadBase64");
functions.put("isimage", "com.naryx.tagfusion.expression.function.image.IsImage");
functions.put("imagegetexifmetadata", "com.naryx.tagfusion.expression.function.image.ImageGetExifMetaData");
functions.put("imagegetexiftag", "com.naryx.tagfusion.expression.function.image.ImageGetExifTag");
functions.put("imageinfo", "com.naryx.tagfusion.expression.function.image.ImageInfo");
functions.put("imagegetwidth", "com.naryx.tagfusion.expression.function.image.ImageGetWidth");
functions.put("imagegetheight", "com.naryx.tagfusion.expression.function.image.ImageGetHeight");
functions.put("imagegetbufferedimage", "com.naryx.tagfusion.expression.function.image.ImageGetBufferedImage");
functions.put("imagegetblob", "com.naryx.tagfusion.expression.function.image.ImageGetBlob");
functions.put("imagecrop", "com.naryx.tagfusion.expression.function.image.ImageCrop");
functions.put("imagecopy", "com.naryx.tagfusion.expression.function.image.ImageCopy");
functions.put("imageblur", "com.naryx.tagfusion.expression.function.image.ImageBlur");
functions.put("imagesharpen", "com.naryx.tagfusion.expression.function.image.ImageSharpen");
functions.put("imagenegative", "com.naryx.tagfusion.expression.function.image.ImageNegative");
functions.put("imagegrayscale", "com.naryx.tagfusion.expression.function.image.ImageGrayScale");
functions.put("imageflip", "com.naryx.tagfusion.expression.function.image.ImageFlip");
functions.put("imagepaste", "com.naryx.tagfusion.expression.function.image.ImagePaste");
functions.put("imageresize", "com.naryx.tagfusion.expression.function.image.ImageResize");
functions.put("imagerotate", "com.naryx.tagfusion.expression.function.image.ImageRotate");
functions.put("imageaddborder", "com.naryx.tagfusion.expression.function.image.ImageAddBorder");
functions.put("imageclearrect", "com.naryx.tagfusion.expression.function.image.ImageClearRect");
functions.put("imagedrawrect", "com.naryx.tagfusion.expression.function.image.ImageDrawRect");
functions.put("imagedrawroundrect", "com.naryx.tagfusion.expression.function.image.ImageDrawRoundRect");
functions.put("imagedrawarc", "com.naryx.tagfusion.expression.function.image.ImageDrawArc");
functions.put("imagedrawbeveledrect", "com.naryx.tagfusion.expression.function.image.ImageDrawBeveledRect");
functions.put("imagedrawline", "com.naryx.tagfusion.expression.function.image.ImageDrawLine");
functions.put("imagedrawlines", "com.naryx.tagfusion.expression.function.image.ImageDrawLines");
functions.put("imagedrawpoint", "com.naryx.tagfusion.expression.function.image.ImageDrawPoint");
functions.put("imagedrawoval", "com.naryx.tagfusion.expression.function.image.ImageDrawOval");
functions.put("imagedrawtext", "com.naryx.tagfusion.expression.function.image.ImageDrawText");
functions.put("imagesetdrawingcolor", "com.naryx.tagfusion.expression.function.image.ImageSetActiveColor");
functions.put("imagesetbackgroundcolor", "com.naryx.tagfusion.expression.function.image.ImageSetBackgroundColor");
functions.put("imagesetantialiasing", "com.naryx.tagfusion.expression.function.image.ImageSetAntialiasing");
functions.put("imagexordrawingmode", "com.naryx.tagfusion.expression.function.image.ImageXORDrawingMode");
functions.put("imagereflection", "com.naryx.tagfusion.expression.function.image.ImageReflection");
functions.put("imagecontrastbrightness", "com.naryx.tagfusion.expression.function.image.ImageContrastBrightness");
functions.put("todatauri", "com.naryx.tagfusion.expression.function.image.ToDataURI");
/* BlueDragon only: Amazon SimpleDB functions */
functions.put("amazonregisterdatasource", "org.alanwilliamson.amazon.AmazonRegisterDatasource");
functions.put("amazonremovedatasource", "org.alanwilliamson.amazon.AmazonRemoveDatasource");
functions.put("amazonsimpledbcreatedomain", "org.alanwilliamson.amazon.simpledb.CreateSDBDomain");
functions.put("amazonsimpledbdeletedomain", "org.alanwilliamson.amazon.simpledb.DeleteSDBDomain");
functions.put("amazonsimpledblistdomains", "org.alanwilliamson.amazon.simpledb.ListSDBDomains");
functions.put("amazonsimpledbgetattributes", "org.alanwilliamson.amazon.simpledb.GetSDBAttributes");
functions.put("amazonsimpledbsetattribute", "org.alanwilliamson.amazon.simpledb.SetSDBAttribute");
functions.put("amazonsimpledbdeleteattribute", "org.alanwilliamson.amazon.simpledb.DeleteSDBAttribute");
functions.put("amazonsimpledbsetstruct", "org.alanwilliamson.amazon.simpledb.SetSDBStruct");
functions.put("amazonsqslistqueues", "org.alanwilliamson.amazon.sqs.ListQueues" );
functions.put("amazonsqscreatequeue", "org.alanwilliamson.amazon.sqs.CreateQueue" );
functions.put("amazonsqsdeletequeue", "org.alanwilliamson.amazon.sqs.DeleteQueue" );
functions.put("amazonsqsgetattributes", "org.alanwilliamson.amazon.sqs.GetAttributes" );
functions.put("amazonsqsdeletemessage", "org.alanwilliamson.amazon.sqs.DeleteMessage" );
functions.put("amazonsqschangemessagevisibility", "org.alanwilliamson.amazon.sqs.ChangeMessageVisibility" );
functions.put("amazonsqsreceivemessage", "org.alanwilliamson.amazon.sqs.ReceiveMessage" );
functions.put("amazonsqssendmessage", "org.alanwilliamson.amazon.sqs.SendMessage" );
functions.put("amazonsqsremovepermission", "org.alanwilliamson.amazon.sqs.RemovePermission" );
functions.put("amazonsqsaddpermission", "org.alanwilliamson.amazon.sqs.AddPermission");
functions.put("amazons3listbuckets", "org.alanwilliamson.amazon.s3.ListBuckets");
functions.put("amazons3createbucket", "org.alanwilliamson.amazon.s3.CreateBucket");
functions.put("amazons3bucketexists", "org.alanwilliamson.amazon.s3.ExistsBucket");
functions.put("amazons3deletebucket", "org.alanwilliamson.amazon.s3.DeleteBucket");
functions.put("amazons3bucketsetacl", "org.alanwilliamson.amazon.s3.SetBucketAcl");
functions.put("amazons3bucketrequesterpays", "org.alanwilliamson.amazon.s3.RequesterPays");
functions.put("amazons3changestorageclass", "org.alanwilliamson.amazon.s3.ChangeObjectStorageClass");
functions.put("amazons3list", "org.alanwilliamson.amazon.s3.List");
functions.put("amazons3copy", "org.alanwilliamson.amazon.s3.Copy");
functions.put("amazons3geturl", "org.alanwilliamson.amazon.s3.GetUrl");
functions.put("amazons3write", "org.alanwilliamson.amazon.s3.Write");
functions.put("amazons3read", "org.alanwilliamson.amazon.s3.Read");
functions.put("amazons3rename", "org.alanwilliamson.amazon.s3.Rename");
functions.put("amazons3delete", "org.alanwilliamson.amazon.s3.Delete");
functions.put("amazons3setacl", "org.alanwilliamson.amazon.s3.SetAcl");
functions.put("amazons3getinfo", "org.alanwilliamson.amazon.s3.GetInfo");
functions.put("amazonetpipelinedelete", "org.alanwilliamson.amazon.transcoder.pipeline.Delete");
functions.put("amazonetpipelinecreate", "org.alanwilliamson.amazon.transcoder.pipeline.Create");
functions.put("amazonetpipelinelist", "org.alanwilliamson.amazon.transcoder.pipeline.List");
functions.put("amazonetpipelineread", "org.alanwilliamson.amazon.transcoder.pipeline.Read");
functions.put("amazonetpipelineupdatestatus", "org.alanwilliamson.amazon.transcoder.pipeline.UpdateStatus");
functions.put("amazonetpresetslist", "org.alanwilliamson.amazon.transcoder.presets.List");
functions.put("amazonetjobcreate", "org.alanwilliamson.amazon.transcoder.job.Create");
functions.put("amazonetjobcancel", "org.alanwilliamson.amazon.transcoder.job.Cancel");
functions.put("amazonetjobread", "org.alanwilliamson.amazon.transcoder.job.Read");
functions.put("amazonetjoblist", "org.alanwilliamson.amazon.transcoder.job.List");
// IP related functions
functions.put("ipcount", "com.naryx.tagfusion.expression.function.ext.ip.ipGetCount" );
functions.put("ipbroadcastmask", "com.naryx.tagfusion.expression.function.ext.ip.ipBroadcastMask" );
functions.put("iptocidr", "com.naryx.tagfusion.expression.function.ext.ip.ipToCidr" );
functions.put("ipgethighaddress", "com.naryx.tagfusion.expression.function.ext.ip.ipGetHighAddress" );
functions.put("ipgetlowaddress", "com.naryx.tagfusion.expression.function.ext.ip.ipGetLowAddress" );
functions.put("ipnetworkaddress", "com.naryx.tagfusion.expression.function.ext.ip.ipNetworkAddress" );
functions.put("ipinrange", "com.naryx.tagfusion.expression.function.ext.ip.ipInRange" );
functions.put("ipasinteger", "com.naryx.tagfusion.expression.function.ext.ip.ipAsInteger" );
functions.put("ipresolvedomain", "com.naryx.tagfusion.expression.function.ext.ip.ipResolveDomain" );
functions.put("ipgetmxrecords", "com.naryx.tagfusion.expression.function.ext.ip.ipGetMXRecords" );
functions.put("ipreverselookup", "com.naryx.tagfusion.expression.function.ext.ip.ipReverseLookup" );
// Register the expressions for Nirvanix
functions.put( "jmxgetdomainlist", "com.naryx.tagfusion.cfm.engine.jmx.JmxGetDomainList" );
functions.put( "jmxgetmbeans", "com.naryx.tagfusion.cfm.engine.jmx.JmxGetMBeans" );
functions.put( "jmxgetmbeanattributes", "com.naryx.tagfusion.cfm.engine.jmx.JmxGetMBeanAttributes" );
functions.put( "xmlsearch", "com.naryx.tagfusion.expression.function.xml.XmlSearch" );
functions.put( "getmailspooldirectory", "com.naryx.tagfusion.expression.function.getMailSpoolDirectory" );
functions.put( "getmailundelivereddirectory", "com.naryx.tagfusion.expression.function.getMailUndeliveredDirectory" );
functions.put( "dbinfo", "com.naryx.tagfusion.cfm.sql.platform.java.dbInfo" );
// Search functions
functions.put( "collectionsearch", "com.bluedragon.search.search.SearchFunction" );
functions.put( "collectioncreate", "com.bluedragon.search.collection.CollectionCreateFunction" );
functions.put( "collectiondelete", "com.bluedragon.search.collection.CollectionDeleteFunction" );
functions.put( "collectionlist", "com.bluedragon.search.collection.CollectionListFunction" );
functions.put( "collectionstatus", "com.bluedragon.search.collection.CollectionStatus" );
functions.put( "collectionlistcategory", "com.bluedragon.search.collection.CollectionListCategoryFunction" );
functions.put( "collectionindexcustom", "com.bluedragon.search.index.custom.CustomFunction" );
functions.put( "collectionindexfile", "com.bluedragon.search.index.file.FileFunction" );
functions.put( "collectionindexpath", "com.bluedragon.search.index.path.PathFunction" );
functions.put( "collectionindexweb", "com.bluedragon.search.index.web.WebFunction" );
functions.put( "collectionindexdelete", "com.bluedragon.search.index.custom.CustomDeleteFunction" );
functions.put( "collectionindexpurge", "com.bluedragon.search.index.PurgeFunction" );
// Socket functions
functions.put( "socketconnect", "com.bluedragon.net.socket.SocketConnectionFunction" );
functions.put( "socketserverstart", "com.bluedragon.net.socket.SocketServerStartFunction" );
functions.put( "socketserverstop", "com.bluedragon.net.socket.SocketServerStopFunction" );
functions.put( "socketservergetclients", "com.bluedragon.net.socket.SocketServerAllClientsFunction" );
// Journal functions
functions.put( "journalread", "com.bluedragon.journal.function.JournalRead" );
functions.put( "journalreadtodatasource", "com.bluedragon.journal.function.JournalReadToDataSource" );
functions.put( "journalreadsession", "com.bluedragon.journal.function.JournalReadSession" );
}
@Override
public void registerTags(Map<String, TagElement> tagElements){
tagElements.put("CFIMAGE", new TagElement("CFIMAGE", true, "com.naryx.tagfusion.cfm.tag.awt.cfIMAGE"));
tagElements.put("CFCAPTCHA", new TagElement("CFCAPTCHA", true, "com.naryx.tagfusion.cfm.tag.awt.cfCAPTCHA"));
tagElements.put("CFSLIDER", new TagElement("CFSLIDER", true, "com.naryx.tagfusion.cfm.cfform.cfSLIDER"));
tagElements.put("CFTREEITEM", new TagElement("CFTREEITEM", true, "com.naryx.tagfusion.cfm.cfform.cfTREEITEM"));
tagElements.put("CFTREE", new TagElement("CFTREE", true, "com.naryx.tagfusion.cfm.cfform.cfTREE"));
tagElements.put("CFTEXTAREA", new TagElement("CFTEXTAREA", true, "com.naryx.tagfusion.cfm.cfform.cfTEXTAREA"));
tagElements.put("CFCHART", new TagElement("CFCHART", true, "com.naryx.tagfusion.cfm.tag.awt.cfCHART"));
tagElements.put("CFCHARTDATA", new TagElement("CFCHARTDATA", true, "com.naryx.tagfusion.cfm.tag.awt.cfCHARTDATA"));
tagElements.put("CFCHARTSERIES", new TagElement("CFCHARTSERIES", true, "com.naryx.tagfusion.cfm.tag.awt.cfCHARTSERIES"));
// -- BlueDragon Only CFCHART specific tags
tagElements.put("CFCHARTRANGEMARKER", new TagElement("CFCHARTRANGEMARKER", true, "com.naryx.tagfusion.cfm.tag.awt.cfCHARTRANGEMARKER"));
tagElements.put("CFCHARTDOMAINMARKER", new TagElement("CFCHARTDOMAINMARKER", true, "com.naryx.tagfusion.cfm.tag.awt.cfCHARTDOMAINMARKER"));
tagElements.put("CFCHARTLEGEND", new TagElement("CFCHARTLEGEND", true, "com.naryx.tagfusion.cfm.tag.awt.cfCHARTLEGEND"));
tagElements.put("CFCHARTTITLE", new TagElement("CFCHARTTITLE", true, "com.naryx.tagfusion.cfm.tag.awt.cfCHARTTITLE"));
tagElements.put("CFCHARTIMAGE", new TagElement("CFCHARTIMAGE", true, "com.naryx.tagfusion.cfm.tag.awt.cfCHARTIMAGE"));
tagElements.put("CFPOP", new TagElement("CFPOP", true, "com.naryx.tagfusion.cfm.mail.cfPOP3"));
tagElements.put("CFIMAP", new TagElement("CFIMAP", true, "com.naryx.tagfusion.cfm.mail.cfIMAP"));
tagElements.put("CFMAIL", new TagElement("CFMAIL", true, "com.naryx.tagfusion.cfm.mail.cfMAIL"));
tagElements.put("CFMAILPARAM", new TagElement("CFMAILPARAM", true, "com.naryx.tagfusion.cfm.mail.cfMAILPARAM"));
tagElements.put("CFMAILPART", new TagElement("CFMAILPART", true, "com.naryx.tagfusion.cfm.mail.cfMAILPART"));
tagElements.put("CFLDAP", new TagElement("CFLDAP", true, "com.naryx.tagfusion.cfm.tag.net.cfLDAP"));
tagElements.put("CFFTP", new TagElement("CFFTP", true, "com.naryx.tagfusion.cfm.tag.net.ftp.cfFTPTag"));
tagElements.put("CFSCHEDULE", new TagElement("CFSCHEDULE", true, "com.naryx.tagfusion.cfm.schedule.cfSCHEDULE"));
tagElements.put("CFXMLRPC", new TagElement("CFXMLRPC", true, "com.naryx.tagfusion.cfm.tag.net.cfXMLRPC"));
tagElements.put("CFMULTICAST", new TagElement("CFMULTICAST", true, "com.naryx.tagfusion.cfm.tag.net.cfMULTICAST"));
tagElements.put("CFREGISTRY", new TagElement("CFREGISTRY", cfEngine.WINDOWS, "com.naryx.tagfusion.cfm.registry.cfREGISTRY"));
tagElements.put("CFEXECUTE", new TagElement("CFEXECUTE", true, "com.naryx.tagfusion.cfm.tag.io.cfEXECUTE"));
tagElements.put("CFDOCUMENT", new TagElement("CFDOCUMENT", true, "com.naryx.tagfusion.cfm.document.cfDOCUMENT"));
tagElements.put("CFDOCUMENTITEM", new TagElement("CFDOCUMENTITEM", true, "com.naryx.tagfusion.cfm.document.CFDOCUMENTITEM"));
tagElements.put("CFDOCUMENTSECTION", new TagElement("CFDOCUMENTSECTION", true, "com.naryx.tagfusion.cfm.document.CFDOCUMENTSECTION"));
tagElements.put("CFDBINFO", new TagElement("CFDBINFO", true, "com.naryx.tagfusion.cfm.sql.platform.java.cfDBINFO"));
// the search elements
tagElements.put("CFSEARCH", new TagElement("CFSEARCH", true, "com.bluedragon.search.search.SearchTag"));
tagElements.put("CFCOLLECTION", new TagElement("CFCOLLECTION",true, "com.bluedragon.search.collection.CollectionTag"));
tagElements.put("CFINDEX", new TagElement("CFINDEX", true, "com.bluedragon.search.index.IndexTag"));
}
@Override
public void timerRunOnce(SystemClockEvent handler, int minuteleap) {
SystemClock.setListenerMinute(handler, minuteleap, true);
}
@Override
public void timerSetListenerMinute(SystemClockEvent handler, int minuteleap) {
SystemClock.setListenerMinute(handler, minuteleap);
}
@Override
public void timerSetListenerMinute(SystemClockEvent handler) {
SystemClock.setListenerMinute(handler);
}
@Override
public void timerSetListenerHourly(SystemClockEvent handler) {
SystemClock.setListenerHour(handler);
}
@Override
public void timerCancel(SystemClockEvent handler) {
SystemClock.removeListenerMinute(handler);
SystemClock.removeListenerMonth(handler);
SystemClock.removeListenerDay(handler);
SystemClock.removeListenerHour(handler);
}
}