moved HTML Checker initialization and pooling to the GlobalSiteImpl - gradually
reducing the responsibilities of EnvEngine as well as the functions in EngineBackend
This commit is contained in:
parent
3ee3e4abeb
commit
0afe28588d
|
@ -12,7 +12,7 @@
|
||||||
|
|
||||||
The Initial Developer of the Original Code is Eric J. Bowersox <erbo@silcom.com>,
|
The Initial Developer of the Original Code is Eric J. Bowersox <erbo@silcom.com>,
|
||||||
for Silverwrist Design Studios. Portions created by Eric J. Bowersox are
|
for Silverwrist Design Studios. Portions created by Eric J. Bowersox are
|
||||||
Copyright (C) 2001 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved.
|
Copyright (C) 2001-02 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved.
|
||||||
|
|
||||||
Contributor(s):
|
Contributor(s):
|
||||||
-->
|
-->
|
||||||
|
@ -312,6 +312,68 @@
|
||||||
<file>WEB-INF/erbo.dict</file>
|
<file>WEB-INF/erbo.dict</file>
|
||||||
</dictionary>
|
</dictionary>
|
||||||
|
|
||||||
|
<!-- This section provides the HTML Checker configurations used by the application. -->
|
||||||
|
<html-checker>
|
||||||
|
<config name="post-body">
|
||||||
|
<options wordwrap="55" angles="true" parens="true" discardHTML="false"/>
|
||||||
|
<output-filter type="normal" class="com.silverwrist.venice.htmlcheck.filters.HTMLEncodingFilter"/>
|
||||||
|
<output-filter type="normal" class="com.silverwrist.venice.htmlcheck.filters.SQLEncodingFilter"/>
|
||||||
|
<output-filter type="raw" class="com.silverwrist.venice.htmlcheck.filters.SQLEncodingFilter"/>
|
||||||
|
<rewriter type="string" class="com.silverwrist.venice.htmlcheck.filters.EmailRewriter"/>
|
||||||
|
<rewriter type="string" class="com.silverwrist.venice.htmlcheck.filters.URLRewriter"/>
|
||||||
|
<rewriter type="tag" class="com.silverwrist.venice.db.PostLinkRewriter"/>
|
||||||
|
<rewriter type="tag" class="com.silverwrist.venice.db.UserNameRewriter"/>
|
||||||
|
<rewriter type="tag" class="com.silverwrist.venice.htmlcheck.filters.EmailRewriter"/>
|
||||||
|
<rewriter type="tag" class="com.silverwrist.venice.htmlcheck.filters.URLRewriter"/>
|
||||||
|
<rewriter type="paren" class="com.silverwrist.venice.db.UserNameRewriter"/>
|
||||||
|
<tag-set id="normal"/>
|
||||||
|
</config>
|
||||||
|
<config name="post-pseud">
|
||||||
|
<options wordwrap="0" angles="true" parens="false" discardHTML="false"/>
|
||||||
|
<output-filter type="normal" class="com.silverwrist.venice.htmlcheck.filters.HTMLEncodingFilter"/>
|
||||||
|
<output-filter type="normal" class="com.silverwrist.venice.htmlcheck.filters.SQLEncodingFilter"/>
|
||||||
|
<output-filter type="raw" class="com.silverwrist.venice.htmlcheck.filters.SQLEncodingFilter"/>
|
||||||
|
<tag-set id="restricted"/>
|
||||||
|
</config>
|
||||||
|
<config name="preview">
|
||||||
|
<options wordwrap="55" angles="true" parens="true" discardHTML="false"/>
|
||||||
|
<output-filter type="normal" class="com.silverwrist.venice.htmlcheck.filters.HTMLEncodingFilter"/>
|
||||||
|
<rewriter type="string" class="com.silverwrist.venice.htmlcheck.filters.EmailRewriter"/>
|
||||||
|
<rewriter type="string" class="com.silverwrist.venice.htmlcheck.filters.URLRewriter"/>
|
||||||
|
<rewriter type="word" class="com.silverwrist.venice.htmlcheck.filters.SpellingRewriter"/>
|
||||||
|
<rewriter type="tag" class="com.silverwrist.venice.db.PostLinkRewriter"/>
|
||||||
|
<rewriter type="tag" class="com.silverwrist.venice.db.UserNameRewriter"/>
|
||||||
|
<rewriter type="tag" class="com.silverwrist.venice.htmlcheck.filters.EmailRewriter"/>
|
||||||
|
<rewriter type="tag" class="com.silverwrist.venice.htmlcheck.filters.URLRewriter"/>
|
||||||
|
<rewriter type="paren" class="com.silverwrist.venice.db.UserNameRewriter"/>
|
||||||
|
<tag-set id="normal"/>
|
||||||
|
</config>
|
||||||
|
<config name="escaper">
|
||||||
|
<options wordwrap="0" angles="false" parens="false" discardHTML="false"/>
|
||||||
|
<output-filter type="normal" class="com.silverwrist.venice.htmlcheck.filters.HTMLEncodingFilter"/>
|
||||||
|
</config>
|
||||||
|
<config name="mail-post">
|
||||||
|
<options wordwrap="55" angles="true" parens="false" discardHTML="true" discardRejected="true"/>
|
||||||
|
<tag-set id="normal"/>
|
||||||
|
</config>
|
||||||
|
<config name="post-from-email">
|
||||||
|
<options wordwrap="55" rewrap="true" angles="true" parens="true" discardHTML="false"
|
||||||
|
discardRejected="true" discardComments="true" discardXML="true"/>
|
||||||
|
<output-filter type="normal" class="com.silverwrist.venice.htmlcheck.filters.HTMLEncodingFilter"/>
|
||||||
|
<output-filter type="normal" class="com.silverwrist.venice.htmlcheck.filters.SQLEncodingFilter"/>
|
||||||
|
<output-filter type="raw" class="com.silverwrist.venice.htmlcheck.filters.SQLEncodingFilter"/>
|
||||||
|
<rewriter type="string" class="com.silverwrist.venice.htmlcheck.filters.EmailRewriter"/>
|
||||||
|
<rewriter type="string" class="com.silverwrist.venice.htmlcheck.filters.URLRewriter"/>
|
||||||
|
<rewriter type="tag" class="com.silverwrist.venice.db.PostLinkRewriter"/>
|
||||||
|
<rewriter type="tag" class="com.silverwrist.venice.db.UserNameRewriter"/>
|
||||||
|
<rewriter type="tag" class="com.silverwrist.venice.htmlcheck.filters.EmailRewriter"/>
|
||||||
|
<rewriter type="tag" class="com.silverwrist.venice.htmlcheck.filters.URLRewriter"/>
|
||||||
|
<rewriter type="paren" class="com.silverwrist.venice.db.UserNameRewriter"/>
|
||||||
|
<tag-set id="normal"/>
|
||||||
|
<tag-set disallow="font"/>
|
||||||
|
</config>
|
||||||
|
</html-checker>
|
||||||
|
|
||||||
<!-- Settings for dealing with uploads -->
|
<!-- Settings for dealing with uploads -->
|
||||||
<upload>
|
<upload>
|
||||||
<!-- Don't try to compress any file whose type falls in this list -->
|
<!-- Don't try to compress any file whose type falls in this list -->
|
||||||
|
|
|
@ -11,7 +11,7 @@
|
||||||
*
|
*
|
||||||
* The Initial Developer of the Original Code is Eric J. Bowersox <erbo@silcom.com>,
|
* The Initial Developer of the Original Code is Eric J. Bowersox <erbo@silcom.com>,
|
||||||
* for Silverwrist Design Studios. Portions created by Eric J. Bowersox are
|
* for Silverwrist Design Studios. Portions created by Eric J. Bowersox are
|
||||||
* Copyright (C) 2001 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved.
|
* Copyright (C) 2001-02 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved.
|
||||||
*
|
*
|
||||||
* Contributor(s):
|
* Contributor(s):
|
||||||
*/
|
*/
|
||||||
|
@ -35,6 +35,8 @@ public class StringUtil
|
||||||
private static final String VAR_START = "${";
|
private static final String VAR_START = "${";
|
||||||
private static final String VAR_END = "}";
|
private static final String VAR_END = "}";
|
||||||
private static final char[] HTML_ENCODE_CHARS = { '"', '&', '<', '>' };
|
private static final char[] HTML_ENCODE_CHARS = { '"', '&', '<', '>' };
|
||||||
|
private static final Set TRUE_STRINGS;
|
||||||
|
private static final Set FALSE_STRINGS;
|
||||||
|
|
||||||
/*--------------------------------------------------------------------------------
|
/*--------------------------------------------------------------------------------
|
||||||
* External static operations
|
* External static operations
|
||||||
|
@ -322,4 +324,44 @@ public class StringUtil
|
||||||
|
|
||||||
} // end splitArray
|
} // end splitArray
|
||||||
|
|
||||||
|
public static final boolean isBooleanTrue(String test)
|
||||||
|
{
|
||||||
|
if (test==null)
|
||||||
|
return false;
|
||||||
|
return TRUE_STRINGS.contains(test.trim().toLowerCase());
|
||||||
|
|
||||||
|
} // end isBooleanTrue
|
||||||
|
|
||||||
|
public static final boolean isBooleanFalse(String test)
|
||||||
|
{
|
||||||
|
if (test==null)
|
||||||
|
return false;
|
||||||
|
return FALSE_STRINGS.contains(test.trim().toLowerCase());
|
||||||
|
|
||||||
|
} // end isBooleanTrue
|
||||||
|
|
||||||
|
/*--------------------------------------------------------------------------------
|
||||||
|
* Static initializer
|
||||||
|
*--------------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
static
|
||||||
|
{ // Initialize the TRUE set.
|
||||||
|
HashSet tmp = new HashSet();
|
||||||
|
tmp.add("1");
|
||||||
|
tmp.add("true");
|
||||||
|
tmp.add("yes");
|
||||||
|
tmp.add("on");
|
||||||
|
TRUE_STRINGS = Collections.unmodifiableSet(tmp);
|
||||||
|
|
||||||
|
// Initialize the FALSE set.
|
||||||
|
tmp = new HashSet();
|
||||||
|
tmp.add("0");
|
||||||
|
tmp.add("false");
|
||||||
|
tmp.add("no");
|
||||||
|
tmp.add("off");
|
||||||
|
FALSE_STRINGS = Collections.unmodifiableSet(tmp);
|
||||||
|
|
||||||
|
} // end static initializer
|
||||||
|
|
||||||
} // end class StringUtil
|
} // end class StringUtil
|
||||||
|
|
|
@ -601,7 +601,7 @@ class ConferenceCommunityContextImpl implements ConferenceCommunityContext
|
||||||
|
|
||||||
try
|
try
|
||||||
{ // preprocess the body argument through the HTML checker
|
{ // preprocess the body argument through the HTML checker
|
||||||
HTMLChecker text_ch = env.getEngine().createCheckerObject(EngineBackend.HTMLC_POST_BODY);
|
HTMLChecker text_ch = env.getHTMLChecker("post-body");
|
||||||
text_ch.setContextValue("PostLinkDecoderContext",
|
text_ch.setContextValue("PostLinkDecoderContext",
|
||||||
new PostLinkDecoderContext(outer.getCommunity().realCommunityAlias(),conf_alias,
|
new PostLinkDecoderContext(outer.getCommunity().realCommunityAlias(),conf_alias,
|
||||||
new_topic));
|
new_topic));
|
||||||
|
|
|
@ -910,8 +910,8 @@ class ConferenceUserContextImpl implements ConferenceContext, ConferenceBackend
|
||||||
} // end if
|
} // end if
|
||||||
|
|
||||||
// preprocess the pseud and title arguments through HTML checkers
|
// preprocess the pseud and title arguments through HTML checkers
|
||||||
HTMLChecker title_ch = env.getEngine().createCheckerObject(EngineBackend.HTMLC_POST_PSEUD);
|
HTMLChecker title_ch = env.getHTMLChecker("post-pseud");
|
||||||
HTMLChecker zp_pseud_ch = env.getEngine().createCheckerObject(EngineBackend.HTMLC_POST_PSEUD);
|
HTMLChecker zp_pseud_ch = env.getHTMLChecker("post-pseud");
|
||||||
|
|
||||||
try
|
try
|
||||||
{ // run arguments through the HTML checker
|
{ // run arguments through the HTML checker
|
||||||
|
@ -1005,7 +1005,7 @@ class ConferenceUserContextImpl implements ConferenceContext, ConferenceBackend
|
||||||
new_topic = 0;
|
new_topic = 0;
|
||||||
else
|
else
|
||||||
new_topic = (short)(c.getTopTopic() + 1);
|
new_topic = (short)(c.getTopTopic() + 1);
|
||||||
HTMLChecker rc = env.getEngine().createCheckerObject(EngineBackend.HTMLC_PREVIEW_BODY);
|
HTMLChecker rc = env.getHTMLChecker("preview");
|
||||||
rc.setContextValue("PostLinkDecoderContext",createDecoderContext(new_topic));
|
rc.setContextValue("PostLinkDecoderContext",createDecoderContext(new_topic));
|
||||||
return rc;
|
return rc;
|
||||||
|
|
||||||
|
|
|
@ -11,7 +11,7 @@
|
||||||
*
|
*
|
||||||
* The Initial Developer of the Original Code is Eric J. Bowersox <erbo@silcom.com>,
|
* The Initial Developer of the Original Code is Eric J. Bowersox <erbo@silcom.com>,
|
||||||
* for Silverwrist Design Studios. Portions created by Eric J. Bowersox are
|
* for Silverwrist Design Studios. Portions created by Eric J. Bowersox are
|
||||||
* Copyright (C) 2001 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved.
|
* Copyright (C) 2001-02 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved.
|
||||||
*
|
*
|
||||||
* Contributor(s):
|
* Contributor(s):
|
||||||
*/
|
*/
|
||||||
|
@ -91,7 +91,7 @@ class PostDeliveryAgent extends Thread
|
||||||
String real_pseud = null;
|
String real_pseud = null;
|
||||||
try
|
try
|
||||||
{ // run both arguments through the HTML checker
|
{ // run both arguments through the HTML checker
|
||||||
HTMLChecker mail_checker = env.getEngine().createCheckerObject(EngineBackend.HTMLC_MAIL_POST);
|
HTMLChecker mail_checker = env.getHTMLChecker("mail-post");
|
||||||
mail_checker.append(post_text);
|
mail_checker.append(post_text);
|
||||||
mail_checker.finish();
|
mail_checker.finish();
|
||||||
real_text = mail_checker.getValue();
|
real_text = mail_checker.getValue();
|
||||||
|
|
|
@ -670,24 +670,24 @@ class TopicUserContextImpl implements TopicContext
|
||||||
} // end if
|
} // end if
|
||||||
|
|
||||||
// figure out which HTML checkers to use
|
// figure out which HTML checkers to use
|
||||||
int pseud_ch_index = EngineBackend.HTMLC_POST_PSEUD;
|
String pseud_ch_name = "post-pseud";
|
||||||
int body_ch_index = EngineBackend.HTMLC_POST_BODY;
|
String body_ch_name = "post-body";
|
||||||
if (mode==POST_MODE_NORMAL)
|
if (mode==POST_MODE_NORMAL)
|
||||||
{ // configure for normal posting
|
{ // configure for normal posting
|
||||||
pseud_ch_index = EngineBackend.HTMLC_POST_PSEUD;
|
pseud_ch_name = "post-pseud";
|
||||||
body_ch_index = EngineBackend.HTMLC_POST_BODY;
|
body_ch_name = "post-body";
|
||||||
|
|
||||||
} // end if
|
} // end if
|
||||||
else if (mode==POST_MODE_EMAIL)
|
else if (mode==POST_MODE_EMAIL)
|
||||||
{ // configure for E-mail posting
|
{ // configure for E-mail posting
|
||||||
pseud_ch_index = EngineBackend.HTMLC_POST_PSEUD;
|
pseud_ch_name = "post-pseud";
|
||||||
body_ch_index = EngineBackend.HTMLC_POST_BODY_EMAIL;
|
body_ch_name = "post-from-email";
|
||||||
|
|
||||||
} // end else if
|
} // end else if
|
||||||
|
|
||||||
// preprocess the two arguments through HTML checkers
|
// preprocess the two arguments through HTML checkers
|
||||||
HTMLChecker pseud_ch = env.getEngine().createCheckerObject(pseud_ch_index);
|
HTMLChecker pseud_ch = env.getHTMLChecker(pseud_ch_name);
|
||||||
HTMLChecker text_ch = env.getEngine().createCheckerObject(body_ch_index);
|
HTMLChecker text_ch = env.getHTMLChecker(body_ch_name);
|
||||||
text_ch.setContextValue("PostLinkDecoderContext",env.getConference().createDecoderContext(topicnum));
|
text_ch.setContextValue("PostLinkDecoderContext",env.getConference().createDecoderContext(topicnum));
|
||||||
try
|
try
|
||||||
{ // run both arguments through the HTML checker
|
{ // run both arguments through the HTML checker
|
||||||
|
@ -918,7 +918,7 @@ class TopicUserContextImpl implements TopicContext
|
||||||
|
|
||||||
public HTMLChecker getPreviewChecker()
|
public HTMLChecker getPreviewChecker()
|
||||||
{
|
{
|
||||||
HTMLChecker rc = env.getEngine().createCheckerObject(EngineBackend.HTMLC_PREVIEW_BODY);
|
HTMLChecker rc = env.getHTMLChecker("preview");
|
||||||
rc.setContextValue("PostLinkDecoderContext",env.getConference().createDecoderContext(topicnum));
|
rc.setContextValue("PostLinkDecoderContext",env.getConference().createDecoderContext(topicnum));
|
||||||
return rc;
|
return rc;
|
||||||
|
|
||||||
|
|
|
@ -506,7 +506,7 @@ class UserContextImpl implements UserContext, UserBackend
|
||||||
{ // the confirmation number is wrong
|
{ // the confirmation number is wrong
|
||||||
logger.warn("...confirmation number incorrect");
|
logger.warn("...confirmation number incorrect");
|
||||||
ar = new AuditRecord(AuditRecord.VERIFY_FAIL,uid,remote_addr,"Invalid confirmation number");
|
ar = new AuditRecord(AuditRecord.VERIFY_FAIL,uid,remote_addr,"Invalid confirmation number");
|
||||||
env.saveAuditRecord(ar);
|
ar.store(env.getGlobalSite());
|
||||||
throw new AccessError("Confirmation number is incorrect. Please try again.");
|
throw new AccessError("Confirmation number is incorrect. Please try again.");
|
||||||
|
|
||||||
} // end if
|
} // end if
|
||||||
|
|
|
@ -255,7 +255,6 @@ public class VeniceEngineImpl implements VeniceEngine, EngineBackend
|
||||||
private EnvEngine env = null; // my environment
|
private EnvEngine env = null; // my environment
|
||||||
private ObjectCache comm_objcache = new ObjectCache(new CommunityCoreDataCreator());
|
private ObjectCache comm_objcache = new ObjectCache(new CommunityCoreDataCreator());
|
||||||
private ObjectCache conf_objcache = new ObjectCache(new ConferenceCoreDataCreator());
|
private ObjectCache conf_objcache = new ObjectCache(new ConferenceCoreDataCreator());
|
||||||
private HTMLCheckerConfig[] html_configs; // holder for HTML checker configurations
|
|
||||||
private int[] gp_ints; // global integer parameters
|
private int[] gp_ints; // global integer parameters
|
||||||
private MasterSideBox[] sideboxes; // master sidebox table
|
private MasterSideBox[] sideboxes; // master sidebox table
|
||||||
private Hashtable sidebox_ids = new Hashtable(); // maps sidebox IDs to MasterSideBox objects
|
private Hashtable sidebox_ids = new Hashtable(); // maps sidebox IDs to MasterSideBox objects
|
||||||
|
@ -283,31 +282,6 @@ public class VeniceEngineImpl implements VeniceEngine, EngineBackend
|
||||||
*--------------------------------------------------------------------------------
|
*--------------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
|
|
||||||
private static final Collection getDictionaryNames(Element sect, String app_root)
|
|
||||||
{
|
|
||||||
ArrayList rc = new ArrayList();
|
|
||||||
NodeList nl = sect.getChildNodes();
|
|
||||||
for (int i=0; i<nl.getLength(); i++)
|
|
||||||
{ // scan the element looking for <file/> elements
|
|
||||||
Node n = nl.item(i);
|
|
||||||
if ((n.getNodeType()==Node.ELEMENT_NODE) && (n.getNodeName().equals("file")))
|
|
||||||
{ // extract the name of the file, possibly prefixing the application root directory
|
|
||||||
DOMElementHelper h = new DOMElementHelper((Element)n);
|
|
||||||
String fname = h.getElementText();
|
|
||||||
if (fname==null)
|
|
||||||
continue; // no file name???
|
|
||||||
if (!(fname.startsWith("/")))
|
|
||||||
fname = app_root + fname;
|
|
||||||
rc.add(fname);
|
|
||||||
|
|
||||||
} // end if
|
|
||||||
|
|
||||||
} // end for
|
|
||||||
|
|
||||||
return rc;
|
|
||||||
|
|
||||||
} // end getDictionaryNames
|
|
||||||
|
|
||||||
private final void checkInitialized()
|
private final void checkInitialized()
|
||||||
{
|
{
|
||||||
if (globalsite==null)
|
if (globalsite==null)
|
||||||
|
@ -364,7 +338,7 @@ public class VeniceEngineImpl implements VeniceEngine, EngineBackend
|
||||||
|
|
||||||
try
|
try
|
||||||
{ // get a database connection
|
{ // get a database connection
|
||||||
conn = env.getConnection();
|
conn = globalsite.getConnection(null);
|
||||||
stmt = conn.createStatement();
|
stmt = conn.createStatement();
|
||||||
StringBuffer sql = new StringBuffer();
|
StringBuffer sql = new StringBuffer();
|
||||||
|
|
||||||
|
@ -537,7 +511,6 @@ public class VeniceEngineImpl implements VeniceEngine, EngineBackend
|
||||||
|
|
||||||
} // end if
|
} // end if
|
||||||
|
|
||||||
Collection dictionary_tmp;
|
|
||||||
try
|
try
|
||||||
{ // first, verify that this is a valid configuration
|
{ // first, verify that this is a valid configuration
|
||||||
XMLLoader loader = XMLLoader.get();
|
XMLLoader loader = XMLLoader.get();
|
||||||
|
@ -559,7 +532,7 @@ public class VeniceEngineImpl implements VeniceEngine, EngineBackend
|
||||||
services_config = app_root + services_config;
|
services_config = app_root + services_config;
|
||||||
|
|
||||||
// Create the global site.
|
// Create the global site.
|
||||||
globalsite = new GlobalSiteImpl(this,root);
|
globalsite = new GlobalSiteImpl(this,root,app_root);
|
||||||
|
|
||||||
// Get the <security/> section.
|
// Get the <security/> section.
|
||||||
sect = loader.configGetSubSection(root_h,"security");
|
sect = loader.configGetSubSection(root_h,"security");
|
||||||
|
@ -584,12 +557,6 @@ public class VeniceEngineImpl implements VeniceEngine, EngineBackend
|
||||||
|
|
||||||
} // end for
|
} // end for
|
||||||
|
|
||||||
// Get the <dictionary/> section.
|
|
||||||
sect = loader.configGetSubSection(root_h,"dictionary");
|
|
||||||
|
|
||||||
// Retrieve the list of dictionary files.
|
|
||||||
dictionary_tmp = getDictionaryNames(sect,app_root);
|
|
||||||
|
|
||||||
// Get the <upload/> section.
|
// Get the <upload/> section.
|
||||||
sect = loader.configGetSubSection(root_h,"upload");
|
sect = loader.configGetSubSection(root_h,"upload");
|
||||||
sect_h = new DOMElementHelper(sect);
|
sect_h = new DOMElementHelper(sect);
|
||||||
|
@ -665,7 +632,7 @@ public class VeniceEngineImpl implements VeniceEngine, EngineBackend
|
||||||
Statement stmt = null;
|
Statement stmt = null;
|
||||||
try
|
try
|
||||||
{ // get a connection from the data pool
|
{ // get a connection from the data pool
|
||||||
conn = env.getConnection();
|
conn = globalsite.getConnection(null);
|
||||||
stmt = conn.createStatement();
|
stmt = conn.createStatement();
|
||||||
|
|
||||||
// load the global defaults
|
// load the global defaults
|
||||||
|
@ -685,114 +652,6 @@ public class VeniceEngineImpl implements VeniceEngine, EngineBackend
|
||||||
|
|
||||||
} // end finally
|
} // end finally
|
||||||
|
|
||||||
// Here is where we create the HTML Checker and all the goodies it relies on.
|
|
||||||
// Start by creating some of the subsidiary objects that get added to HTML Checker configs.
|
|
||||||
EmailRewriter email_rewriter = new EmailRewriter();
|
|
||||||
HTMLEncodingFilter html_filter = new HTMLEncodingFilter();
|
|
||||||
SQLEncodingFilter sql_filter = new SQLEncodingFilter();
|
|
||||||
SpellingRewriter spell_rewriter = new SpellingRewriter();
|
|
||||||
URLRewriter url_rewriter = new URLRewriter();
|
|
||||||
PostLinkRewriter postlink_rewriter = new PostLinkRewriter(globalsite);
|
|
||||||
UserNameRewriter username_rewriter = new UserNameRewriter(globalsite);
|
|
||||||
|
|
||||||
// Create the LazyLexicon that holds our dictionary files, and add it to the SpellingRewriter.
|
|
||||||
LazyTreeLexicon lex = new LazyTreeLexicon((String[])(dictionary_tmp.toArray(new String[0])));
|
|
||||||
spell_rewriter.addDictionary(lex);
|
|
||||||
|
|
||||||
html_configs = new HTMLCheckerConfig[6]; // create the array
|
|
||||||
|
|
||||||
// Create the HTML checker config used to post body text to the database.
|
|
||||||
HTMLCheckerConfig cfg = HTMLCheckerCreator.create();
|
|
||||||
cfg.setWordWrapLength((short)55);
|
|
||||||
cfg.setProcessAngles(true);
|
|
||||||
cfg.setProcessParens(true);
|
|
||||||
cfg.setDiscardHTMLTags(false);
|
|
||||||
cfg.addOutputFilter(html_filter);
|
|
||||||
cfg.addOutputFilter(sql_filter);
|
|
||||||
cfg.addRawOutputFilter(sql_filter);
|
|
||||||
cfg.addStringRewriter(email_rewriter);
|
|
||||||
cfg.addStringRewriter(url_rewriter);
|
|
||||||
cfg.addTagRewriter(postlink_rewriter);
|
|
||||||
cfg.addTagRewriter(username_rewriter);
|
|
||||||
cfg.addTagRewriter(email_rewriter);
|
|
||||||
cfg.addTagRewriter(url_rewriter);
|
|
||||||
cfg.addParenRewriter(username_rewriter);
|
|
||||||
cfg.configureNormalTagSet();
|
|
||||||
html_configs[HTMLC_POST_BODY] = cfg;
|
|
||||||
|
|
||||||
// Create the HTML checker config used to post pseuds and topic names to the database.
|
|
||||||
cfg = HTMLCheckerCreator.create();
|
|
||||||
cfg.setWordWrapLength((short)0);
|
|
||||||
cfg.setProcessAngles(true);
|
|
||||||
cfg.setProcessParens(false);
|
|
||||||
cfg.setDiscardHTMLTags(false);
|
|
||||||
cfg.addOutputFilter(html_filter);
|
|
||||||
cfg.addOutputFilter(sql_filter);
|
|
||||||
cfg.addRawOutputFilter(sql_filter);
|
|
||||||
cfg.configureRestrictedTagSet();
|
|
||||||
html_configs[HTMLC_POST_PSEUD] = cfg;
|
|
||||||
|
|
||||||
// Create the HTML checker config used to preview body text.
|
|
||||||
cfg = HTMLCheckerCreator.create();
|
|
||||||
cfg.setWordWrapLength((short)55);
|
|
||||||
cfg.setProcessAngles(true);
|
|
||||||
cfg.setProcessParens(true);
|
|
||||||
cfg.setDiscardHTMLTags(false);
|
|
||||||
cfg.addOutputFilter(html_filter);
|
|
||||||
cfg.addStringRewriter(email_rewriter);
|
|
||||||
cfg.addStringRewriter(url_rewriter);
|
|
||||||
cfg.addWordRewriter(spell_rewriter);
|
|
||||||
cfg.addTagRewriter(postlink_rewriter);
|
|
||||||
cfg.addTagRewriter(username_rewriter);
|
|
||||||
cfg.addTagRewriter(email_rewriter);
|
|
||||||
cfg.addTagRewriter(url_rewriter);
|
|
||||||
cfg.addParenRewriter(username_rewriter);
|
|
||||||
cfg.configureNormalTagSet();
|
|
||||||
html_configs[HTMLC_PREVIEW_BODY] = cfg;
|
|
||||||
|
|
||||||
// Create the HTML checker config used to escape body text and pseuds for putting back in the post box.
|
|
||||||
cfg = HTMLCheckerCreator.create();
|
|
||||||
cfg.setWordWrapLength((short)0);
|
|
||||||
cfg.setProcessAngles(false);
|
|
||||||
cfg.setProcessParens(false);
|
|
||||||
cfg.setDiscardHTMLTags(false);
|
|
||||||
cfg.addOutputFilter(html_filter);
|
|
||||||
html_configs[HTMLC_ESCAPE_BODY_PSEUD] = cfg;
|
|
||||||
|
|
||||||
// Create the HTML Checker used to strip HTML from posts that are sent via E-mail.
|
|
||||||
cfg = HTMLCheckerCreator.create();
|
|
||||||
cfg.setWordWrapLength((short)55);
|
|
||||||
cfg.setProcessAngles(true);
|
|
||||||
cfg.setProcessParens(false);
|
|
||||||
cfg.setDiscardHTMLTags(true);
|
|
||||||
cfg.setDiscardRejectedHTML(true);
|
|
||||||
cfg.configureNormalTagSet();
|
|
||||||
html_configs[HTMLC_MAIL_POST] = cfg;
|
|
||||||
|
|
||||||
// Create the HTML checker config used to post body text to the database from an E-mail message.
|
|
||||||
cfg = HTMLCheckerCreator.create();
|
|
||||||
cfg.setWordWrapLength((short)55);
|
|
||||||
cfg.setRewrapLines(true);
|
|
||||||
cfg.setProcessAngles(true);
|
|
||||||
cfg.setProcessParens(true);
|
|
||||||
cfg.setDiscardHTMLTags(false);
|
|
||||||
cfg.setDiscardRejectedHTML(true);
|
|
||||||
cfg.setDiscardHTMLComments(true);
|
|
||||||
cfg.setDiscardXMLConstructs(true);
|
|
||||||
cfg.addOutputFilter(html_filter);
|
|
||||||
cfg.addOutputFilter(sql_filter);
|
|
||||||
cfg.addRawOutputFilter(sql_filter);
|
|
||||||
cfg.addStringRewriter(email_rewriter);
|
|
||||||
cfg.addStringRewriter(url_rewriter);
|
|
||||||
cfg.addTagRewriter(postlink_rewriter);
|
|
||||||
cfg.addTagRewriter(username_rewriter);
|
|
||||||
cfg.addTagRewriter(email_rewriter);
|
|
||||||
cfg.addTagRewriter(url_rewriter);
|
|
||||||
cfg.addParenRewriter(username_rewriter);
|
|
||||||
cfg.configureNormalTagSet();
|
|
||||||
cfg.disallowTagSet(HTMLTagSets.FONT_FORMAT);
|
|
||||||
html_configs[HTMLC_POST_BODY_EMAIL] = cfg;
|
|
||||||
|
|
||||||
if (logger.isDebugEnabled())
|
if (logger.isDebugEnabled())
|
||||||
logger.debug("initialize() complete :-)");
|
logger.debug("initialize() complete :-)");
|
||||||
|
|
||||||
|
@ -833,7 +692,7 @@ public class VeniceEngineImpl implements VeniceEngine, EngineBackend
|
||||||
|
|
||||||
try
|
try
|
||||||
{ // look for a user name matching this user record
|
{ // look for a user name matching this user record
|
||||||
conn = env.getConnection();
|
conn = globalsite.getConnection(null);
|
||||||
stmt = conn.createStatement();
|
stmt = conn.createStatement();
|
||||||
ResultSet rs = stmt.executeQuery("SELECT c.email FROM users u, contacts c WHERE u.contactid = "
|
ResultSet rs = stmt.executeQuery("SELECT c.email FROM users u, contacts c WHERE u.contactid = "
|
||||||
+ "c.contactid AND u.username = '" + SQLUtil.encodeString(username)
|
+ "c.contactid AND u.username = '" + SQLUtil.encodeString(username)
|
||||||
|
@ -875,7 +734,7 @@ public class VeniceEngineImpl implements VeniceEngine, EngineBackend
|
||||||
|
|
||||||
try
|
try
|
||||||
{ // look for a user name matching this user record
|
{ // look for a user name matching this user record
|
||||||
conn = env.getConnection();
|
conn = globalsite.getConnection(null);
|
||||||
stmt = conn.createStatement();
|
stmt = conn.createStatement();
|
||||||
StringBuffer sql = new StringBuffer("SELECT c.email, u.uid, u.passreminder FROM users u, contacts c "
|
StringBuffer sql = new StringBuffer("SELECT c.email, u.uid, u.passreminder FROM users u, contacts c "
|
||||||
+ "WHERE u.contactid = c.contactid AND u.username = '");
|
+ "WHERE u.contactid = c.contactid AND u.username = '");
|
||||||
|
@ -974,7 +833,7 @@ public class VeniceEngineImpl implements VeniceEngine, EngineBackend
|
||||||
Statement stmt = null;
|
Statement stmt = null;
|
||||||
try
|
try
|
||||||
{ // perform the database update
|
{ // perform the database update
|
||||||
conn = env.getConnection();
|
conn = globalsite.getConnection(null);
|
||||||
stmt = conn.createStatement();
|
stmt = conn.createStatement();
|
||||||
StringBuffer sql = new StringBuffer("UPDATE users SET passhash = '");
|
StringBuffer sql = new StringBuffer("UPDATE users SET passhash = '");
|
||||||
sql.append(hash_value).append("' WHERE uid = ").append(uid).append(';');
|
sql.append(hash_value).append("' WHERE uid = ").append(uid).append(';');
|
||||||
|
@ -1059,7 +918,7 @@ public class VeniceEngineImpl implements VeniceEngine, EngineBackend
|
||||||
|
|
||||||
try
|
try
|
||||||
{ // do a SELECT on the sigs table
|
{ // do a SELECT on the sigs table
|
||||||
conn = env.getConnection();
|
conn = globalsite.getConnection(null);
|
||||||
stmt = conn.createStatement();
|
stmt = conn.createStatement();
|
||||||
StringBuffer sql = new StringBuffer("SELECT sigid FROM sigs WHERE alias = '");
|
StringBuffer sql = new StringBuffer("SELECT sigid FROM sigs WHERE alias = '");
|
||||||
sql.append(alias).append("'");
|
sql.append(alias).append("'");
|
||||||
|
@ -1098,7 +957,7 @@ public class VeniceEngineImpl implements VeniceEngine, EngineBackend
|
||||||
|
|
||||||
try
|
try
|
||||||
{ // do a SELECT on the category table
|
{ // do a SELECT on the category table
|
||||||
conn = env.getConnection();
|
conn = globalsite.getConnection(null);
|
||||||
stmt = conn.createStatement();
|
stmt = conn.createStatement();
|
||||||
StringBuffer sql = new StringBuffer("SELECT catid FROM refcategory WHERE catid = ");
|
StringBuffer sql = new StringBuffer("SELECT catid FROM refcategory WHERE catid = ");
|
||||||
sql.append(catid).append(';');
|
sql.append(catid).append(';');
|
||||||
|
@ -1134,7 +993,7 @@ public class VeniceEngineImpl implements VeniceEngine, EngineBackend
|
||||||
|
|
||||||
try
|
try
|
||||||
{ // get a database connection
|
{ // get a database connection
|
||||||
conn = env.getConnection();
|
conn = globalsite.getConnection(null);
|
||||||
stmt = conn.createStatement();
|
stmt = conn.createStatement();
|
||||||
StringBuffer sql = new StringBuffer("SELECT u.uid, u.username, u.description, c.given_name, "
|
StringBuffer sql = new StringBuffer("SELECT u.uid, u.username, u.description, c.given_name, "
|
||||||
+ "c.family_name, c.locality, c.region, c.country FROM users u, "
|
+ "c.family_name, c.locality, c.region, c.country FROM users u, "
|
||||||
|
@ -1227,7 +1086,7 @@ public class VeniceEngineImpl implements VeniceEngine, EngineBackend
|
||||||
|
|
||||||
try
|
try
|
||||||
{ // get a database connection
|
{ // get a database connection
|
||||||
conn = env.getConnection();
|
conn = globalsite.getConnection(null);
|
||||||
stmt = conn.createStatement();
|
stmt = conn.createStatement();
|
||||||
StringBuffer sql = new StringBuffer("SELECT COUNT(*) FROM users u, contacts c WHERE u.contactid = "
|
StringBuffer sql = new StringBuffer("SELECT COUNT(*) FROM users u, contacts c WHERE u.contactid = "
|
||||||
+ "c.contactid AND ");
|
+ "c.contactid AND ");
|
||||||
|
@ -1317,7 +1176,7 @@ public class VeniceEngineImpl implements VeniceEngine, EngineBackend
|
||||||
|
|
||||||
try
|
try
|
||||||
{ // get a database connection
|
{ // get a database connection
|
||||||
conn = env.getConnection();
|
conn = globalsite.getConnection(null);
|
||||||
stmt = conn.createStatement();
|
stmt = conn.createStatement();
|
||||||
|
|
||||||
// create and execute the right SQL statement
|
// create and execute the right SQL statement
|
||||||
|
@ -1351,7 +1210,7 @@ public class VeniceEngineImpl implements VeniceEngine, EngineBackend
|
||||||
|
|
||||||
try
|
try
|
||||||
{ // do a SELECT on the confalias table
|
{ // do a SELECT on the confalias table
|
||||||
conn = env.getConnection();
|
conn = globalsite.getConnection(null);
|
||||||
stmt = conn.createStatement();
|
stmt = conn.createStatement();
|
||||||
StringBuffer sql = new StringBuffer("SELECT confid FROM confalias WHERE alias = '");
|
StringBuffer sql = new StringBuffer("SELECT confid FROM confalias WHERE alias = '");
|
||||||
sql.append(alias).append("';");
|
sql.append(alias).append("';");
|
||||||
|
@ -1377,7 +1236,7 @@ public class VeniceEngineImpl implements VeniceEngine, EngineBackend
|
||||||
|
|
||||||
public HTMLChecker getEscapingChecker()
|
public HTMLChecker getEscapingChecker()
|
||||||
{
|
{
|
||||||
return html_configs[HTMLC_ESCAPE_BODY_PSEUD].createHTMLChecker();
|
return (HTMLChecker)(globalsite.queryService(HTMLChecker.class,"escaper"));
|
||||||
|
|
||||||
} // end getEscapingChecker
|
} // end getEscapingChecker
|
||||||
|
|
||||||
|
@ -1600,14 +1459,6 @@ public class VeniceEngineImpl implements VeniceEngine, EngineBackend
|
||||||
|
|
||||||
} // end registerNewConference
|
} // end registerNewConference
|
||||||
|
|
||||||
public HTMLChecker createCheckerObject(int type)
|
|
||||||
{
|
|
||||||
if ((type<0) || (type>=html_configs.length))
|
|
||||||
throw new IllegalArgumentException("invalid HTML checker type index");
|
|
||||||
return html_configs[type].createHTMLChecker();
|
|
||||||
|
|
||||||
} // end createCheckerObject
|
|
||||||
|
|
||||||
public int getParamInt(int selector)
|
public int getParamInt(int selector)
|
||||||
{
|
{
|
||||||
return gp_ints[selector];
|
return gp_ints[selector];
|
||||||
|
@ -1635,7 +1486,7 @@ public class VeniceEngineImpl implements VeniceEngine, EngineBackend
|
||||||
|
|
||||||
try
|
try
|
||||||
{ // get a connection and use it to reload
|
{ // get a connection and use it to reload
|
||||||
conn = env.getConnection();
|
conn = globalsite.getConnection(null);
|
||||||
stmt = conn.createStatement();
|
stmt = conn.createStatement();
|
||||||
loadDefaults(stmt);
|
loadDefaults(stmt);
|
||||||
|
|
||||||
|
|
|
@ -19,7 +19,6 @@ package com.silverwrist.venice.core.internals;
|
||||||
|
|
||||||
import java.util.BitSet;
|
import java.util.BitSet;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import com.silverwrist.venice.security.AuditRecord;
|
|
||||||
import com.silverwrist.venice.security.Role;
|
import com.silverwrist.venice.security.Role;
|
||||||
import com.silverwrist.venice.security.SecurityMonitor;
|
import com.silverwrist.venice.security.SecurityMonitor;
|
||||||
import com.silverwrist.venice.htmlcheck.HTMLChecker;
|
import com.silverwrist.venice.htmlcheck.HTMLChecker;
|
||||||
|
@ -31,14 +30,6 @@ import com.silverwrist.venice.except.DataException;
|
||||||
|
|
||||||
public interface EngineBackend
|
public interface EngineBackend
|
||||||
{
|
{
|
||||||
// HTML checker types
|
|
||||||
public static final int HTMLC_POST_BODY = 0;
|
|
||||||
public static final int HTMLC_POST_PSEUD = 1;
|
|
||||||
public static final int HTMLC_PREVIEW_BODY = 2;
|
|
||||||
public static final int HTMLC_ESCAPE_BODY_PSEUD = 3;
|
|
||||||
public static final int HTMLC_MAIL_POST = 4;
|
|
||||||
public static final int HTMLC_POST_BODY_EMAIL = 5;
|
|
||||||
|
|
||||||
// Integer parameter indexes
|
// Integer parameter indexes
|
||||||
public static final int IP_POSTSPERPAGE = 0;
|
public static final int IP_POSTSPERPAGE = 0;
|
||||||
public static final int IP_POSTSATTOP = 1;
|
public static final int IP_POSTSATTOP = 1;
|
||||||
|
@ -76,8 +67,6 @@ public interface EngineBackend
|
||||||
|
|
||||||
public abstract void registerNewConference(ConferenceData conf);
|
public abstract void registerNewConference(ConferenceData conf);
|
||||||
|
|
||||||
public abstract HTMLChecker createCheckerObject(int type);
|
|
||||||
|
|
||||||
public abstract int getParamInt(int selector);
|
public abstract int getParamInt(int selector);
|
||||||
|
|
||||||
public abstract boolean getParamBoolean(int selector);
|
public abstract boolean getParamBoolean(int selector);
|
||||||
|
|
|
@ -24,6 +24,7 @@ import org.apache.log4j.*;
|
||||||
import com.silverwrist.venice.core.SecurityInfo;
|
import com.silverwrist.venice.core.SecurityInfo;
|
||||||
import com.silverwrist.venice.db.*;
|
import com.silverwrist.venice.db.*;
|
||||||
import com.silverwrist.venice.except.AccessError;
|
import com.silverwrist.venice.except.AccessError;
|
||||||
|
import com.silverwrist.venice.htmlcheck.HTMLChecker;
|
||||||
import com.silverwrist.venice.security.*;
|
import com.silverwrist.venice.security.*;
|
||||||
import com.silverwrist.venice.svc.ServiceControl;
|
import com.silverwrist.venice.svc.ServiceControl;
|
||||||
import com.silverwrist.venice.svc.internal.GlobalSite;
|
import com.silverwrist.venice.svc.internal.GlobalSite;
|
||||||
|
@ -144,32 +145,6 @@ public class EnvEngine
|
||||||
|
|
||||||
} // end getSecurityInfo
|
} // end getSecurityInfo
|
||||||
|
|
||||||
public final void saveAuditRecord(AuditRecord ar)
|
|
||||||
{
|
|
||||||
Connection conn = null;
|
|
||||||
|
|
||||||
if (ar==null)
|
|
||||||
return; // don't store a null record
|
|
||||||
|
|
||||||
try
|
|
||||||
{ // get a connection and use it to store the audit record
|
|
||||||
conn = globalsite.getConnection(null);
|
|
||||||
ar.store(conn);
|
|
||||||
|
|
||||||
} // end try
|
|
||||||
catch (SQLException e)
|
|
||||||
{ // just log an error if we screwed up
|
|
||||||
logger.error("DB error saving audit record: " + e.getMessage(),e);
|
|
||||||
|
|
||||||
} // end catch
|
|
||||||
finally
|
|
||||||
{ // make sure the connection is released before we go
|
|
||||||
SQLUtil.shutdown(conn);
|
|
||||||
|
|
||||||
} // end finally
|
|
||||||
|
|
||||||
} // end saveAuditRecord
|
|
||||||
|
|
||||||
public final String getStockMessage(String key)
|
public final String getStockMessage(String key)
|
||||||
{
|
{
|
||||||
return globalsite.getStockMessage(key);
|
return globalsite.getStockMessage(key);
|
||||||
|
@ -182,4 +157,10 @@ public class EnvEngine
|
||||||
|
|
||||||
} // end getMailSender
|
} // end getMailSender
|
||||||
|
|
||||||
|
public final HTMLChecker getHTMLChecker(String id)
|
||||||
|
{
|
||||||
|
return (HTMLChecker)(globalsite.queryService(HTMLChecker.class,id));
|
||||||
|
|
||||||
|
} // end getHTMLChecker
|
||||||
|
|
||||||
} // end class EnvEngine
|
} // end class EnvEngine
|
||||||
|
|
|
@ -24,6 +24,9 @@ import org.w3c.dom.*;
|
||||||
import com.silverwrist.util.*;
|
import com.silverwrist.util.*;
|
||||||
import com.silverwrist.venice.db.*;
|
import com.silverwrist.venice.db.*;
|
||||||
import com.silverwrist.venice.except.*;
|
import com.silverwrist.venice.except.*;
|
||||||
|
import com.silverwrist.venice.htmlcheck.*;
|
||||||
|
import com.silverwrist.venice.htmlcheck.dict.*;
|
||||||
|
import com.silverwrist.venice.htmlcheck.filters.*;
|
||||||
import com.silverwrist.venice.svc.internal.GlobalSite;
|
import com.silverwrist.venice.svc.internal.GlobalSite;
|
||||||
import com.silverwrist.venice.util.ServiceProvider;
|
import com.silverwrist.venice.util.ServiceProvider;
|
||||||
import com.silverwrist.venice.util.MailSend;
|
import com.silverwrist.venice.util.MailSend;
|
||||||
|
@ -48,13 +51,14 @@ public class GlobalSiteImpl implements GlobalSite
|
||||||
private Properties email_props = null; // email properties
|
private Properties email_props = null; // email properties
|
||||||
private javax.mail.Session mailsession = null; // email session object
|
private javax.mail.Session mailsession = null; // email session object
|
||||||
private StockMessages stock_messages = null; // stock messages holder
|
private StockMessages stock_messages = null; // stock messages holder
|
||||||
|
private HashMap html_checkers = new HashMap(); // HTML checkers
|
||||||
|
|
||||||
/*--------------------------------------------------------------------------------
|
/*--------------------------------------------------------------------------------
|
||||||
* Constructor
|
* Constructor
|
||||||
*--------------------------------------------------------------------------------
|
*--------------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
|
|
||||||
public GlobalSiteImpl(EngineBackend engine, Element config) throws ConfigException
|
public GlobalSiteImpl(EngineBackend engine, Element config, String application_root) throws ConfigException
|
||||||
{
|
{
|
||||||
this.engine = engine;
|
this.engine = engine;
|
||||||
XMLLoader loader = XMLLoader.get();
|
XMLLoader loader = XMLLoader.get();
|
||||||
|
@ -93,8 +97,262 @@ public class GlobalSiteImpl implements GlobalSite
|
||||||
// Initialize the stock messages list.
|
// Initialize the stock messages list.
|
||||||
stock_messages = new StockMessages(sect);
|
stock_messages = new StockMessages(sect);
|
||||||
|
|
||||||
|
// Get the <dictionary/> section.
|
||||||
|
sect = loader.configGetSubSection(config_h,"dictionary");
|
||||||
|
|
||||||
|
// Retrieve the list of dictionary files.
|
||||||
|
Collection dictionary_tmp = getDictionaryNames(sect,application_root);
|
||||||
|
|
||||||
|
// Create the intermediate object map for HTML checker creation, and "seed" it.
|
||||||
|
HashMap intermediate_map = new HashMap();
|
||||||
|
SpellingRewriter spell_rewriter = new SpellingRewriter();
|
||||||
|
LazyTreeLexicon lex = new LazyTreeLexicon((String[])(dictionary_tmp.toArray(new String[0])));
|
||||||
|
spell_rewriter.addDictionary(lex);
|
||||||
|
intermediate_map.put(spell_rewriter.getClass().getName(),spell_rewriter);
|
||||||
|
PostLinkRewriter postlink_rewriter = new PostLinkRewriter(this);
|
||||||
|
intermediate_map.put(postlink_rewriter.getClass().getName(),postlink_rewriter);
|
||||||
|
UserNameRewriter username_rewriter = new UserNameRewriter(this);
|
||||||
|
intermediate_map.put(username_rewriter.getClass().getName(),username_rewriter);
|
||||||
|
|
||||||
|
// Get the <html-checker/> section.
|
||||||
|
sect = loader.configGetSubSection(config_h,"html-checker");
|
||||||
|
NodeList nl = sect.getChildNodes();
|
||||||
|
for (int i=0; i<nl.getLength(); i++)
|
||||||
|
{ // get each node in turn and test to see if it's an element
|
||||||
|
Node n = nl.item(i);
|
||||||
|
if (n.getNodeType()==Node.ELEMENT_NODE)
|
||||||
|
{ // process based on node name
|
||||||
|
if (n.getNodeName().equals("config"))
|
||||||
|
createHTMLChecker((Element)n,intermediate_map);
|
||||||
|
else // this is an error
|
||||||
|
throw new ConfigException("unknown node type found in <html-checker/> section",(Element)n);
|
||||||
|
|
||||||
|
} // end if
|
||||||
|
// else ignore this node
|
||||||
|
|
||||||
|
} // end for
|
||||||
|
|
||||||
|
intermediate_map.clear(); // cut all extra references
|
||||||
|
|
||||||
} // end class GlobalSiteImpl
|
} // end class GlobalSiteImpl
|
||||||
|
|
||||||
|
/*--------------------------------------------------------------------------------
|
||||||
|
* Internal operations
|
||||||
|
*--------------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
private static final Collection getDictionaryNames(Element sect, String app_root)
|
||||||
|
{
|
||||||
|
ArrayList rc = new ArrayList();
|
||||||
|
NodeList nl = sect.getChildNodes();
|
||||||
|
for (int i=0; i<nl.getLength(); i++)
|
||||||
|
{ // scan the element looking for <file/> elements
|
||||||
|
Node n = nl.item(i);
|
||||||
|
if ((n.getNodeType()==Node.ELEMENT_NODE) && (n.getNodeName().equals("file")))
|
||||||
|
{ // extract the name of the file, possibly prefixing the application root directory
|
||||||
|
DOMElementHelper h = new DOMElementHelper((Element)n);
|
||||||
|
String fname = h.getElementText();
|
||||||
|
if (fname==null)
|
||||||
|
continue; // no file name???
|
||||||
|
if (!(fname.startsWith("/")))
|
||||||
|
fname = app_root + fname;
|
||||||
|
rc.add(fname);
|
||||||
|
|
||||||
|
} // end if
|
||||||
|
|
||||||
|
} // end for
|
||||||
|
|
||||||
|
return rc;
|
||||||
|
|
||||||
|
} // end getDictionaryNames
|
||||||
|
|
||||||
|
private static final OutputFilter createOutputFilter(Element elt, HashMap intermediate)
|
||||||
|
throws ConfigException
|
||||||
|
{
|
||||||
|
XMLLoader loader = XMLLoader.get();
|
||||||
|
String classname = loader.configGetAttribute(elt,"class");
|
||||||
|
try
|
||||||
|
{ // see if there's an existing OutputFilter
|
||||||
|
OutputFilter of = (OutputFilter)(intermediate.get(classname));
|
||||||
|
if (of!=null)
|
||||||
|
return of;
|
||||||
|
|
||||||
|
// create a new OutputFilter, save it, and return it
|
||||||
|
Class klass = Class.forName(classname);
|
||||||
|
of = (OutputFilter)(klass.newInstance());
|
||||||
|
intermediate.put(classname,of);
|
||||||
|
return of;
|
||||||
|
|
||||||
|
} // end try
|
||||||
|
catch (ClassCastException cce)
|
||||||
|
{ // class name specified in wrong context - bail out!
|
||||||
|
throw new ConfigException("improper classname: \"" + classname + "\" is not an OutputFilter",elt);
|
||||||
|
|
||||||
|
} // end catch
|
||||||
|
catch (ClassNotFoundException cnfe)
|
||||||
|
{ // unable to load the class
|
||||||
|
throw new ConfigException("improper classname: \"" + classname + "\" does not exist",elt);
|
||||||
|
|
||||||
|
} // end catch
|
||||||
|
catch (IllegalAccessException iae)
|
||||||
|
{ // class is abstract, or constructor not found, or something
|
||||||
|
throw new ConfigException("improper classname: \"" + classname + "\" cannot be created",elt);
|
||||||
|
|
||||||
|
} // end catch
|
||||||
|
catch (InstantiationException ie)
|
||||||
|
{ // class could not be instantiated
|
||||||
|
throw new ConfigException("improper classname: \"" + classname + "\" cannot be created",elt);
|
||||||
|
|
||||||
|
} // end catch
|
||||||
|
|
||||||
|
} // end createOutputFilter
|
||||||
|
|
||||||
|
private static final Rewriter createRewriter(Element elt, HashMap intermediate) throws ConfigException
|
||||||
|
{
|
||||||
|
XMLLoader loader = XMLLoader.get();
|
||||||
|
String classname = loader.configGetAttribute(elt,"class");
|
||||||
|
try
|
||||||
|
{ // see if there's an existing Rewriter
|
||||||
|
Rewriter r = (Rewriter)(intermediate.get(classname));
|
||||||
|
if (r!=null)
|
||||||
|
return r;
|
||||||
|
|
||||||
|
// create a new Rewriter, save it, and return it
|
||||||
|
Class klass = Class.forName(classname);
|
||||||
|
r = (Rewriter)(klass.newInstance());
|
||||||
|
intermediate.put(classname,r);
|
||||||
|
return r;
|
||||||
|
|
||||||
|
} // end try
|
||||||
|
catch (ClassCastException cce)
|
||||||
|
{ // class name specified in wrong context - bail out!
|
||||||
|
throw new ConfigException("improper classname: \"" + classname + "\" is not a Rewriter",elt);
|
||||||
|
|
||||||
|
} // end catch
|
||||||
|
catch (ClassNotFoundException cnfe)
|
||||||
|
{ // unable to load the class
|
||||||
|
throw new ConfigException("improper classname: \"" + classname + "\" does not exist",elt);
|
||||||
|
|
||||||
|
} // end catch
|
||||||
|
catch (IllegalAccessException iae)
|
||||||
|
{ // class is abstract, or constructor not found, or something
|
||||||
|
throw new ConfigException("improper classname: \"" + classname + "\" cannot be created",elt);
|
||||||
|
|
||||||
|
} // end catch
|
||||||
|
catch (InstantiationException ie)
|
||||||
|
{ // class could not be instantiated
|
||||||
|
throw new ConfigException("improper classname: \"" + classname + "\" cannot be created",elt);
|
||||||
|
|
||||||
|
} // end catch
|
||||||
|
|
||||||
|
} // end createRewriter
|
||||||
|
|
||||||
|
private final void createHTMLChecker(Element elt, HashMap intermediate) throws ConfigException
|
||||||
|
{
|
||||||
|
XMLLoader loader = XMLLoader.get();
|
||||||
|
String checker_name = loader.configGetAttribute(elt,"name");
|
||||||
|
if (html_checkers.containsKey(checker_name))
|
||||||
|
throw new ConfigException("config name \"" + checker_name + "\" defined twice",elt);
|
||||||
|
|
||||||
|
HTMLCheckerConfig cfg = HTMLCheckerCreator.create();
|
||||||
|
NodeList nl = elt.getChildNodes();
|
||||||
|
for (int i=0; i<nl.getLength(); i++)
|
||||||
|
{ // get each node in the list in turn and figure out what it means
|
||||||
|
Node n = nl.item(i);
|
||||||
|
if (n.getNodeType()==Node.ELEMENT_NODE)
|
||||||
|
{ // now select based on node name
|
||||||
|
if (n.getNodeName().equals("options"))
|
||||||
|
{ // process the various "options" for the HTML checker
|
||||||
|
Element opt_elt = (Element)n;
|
||||||
|
cfg.setWordWrapLength((short)(loader.configGetAttributeInt(opt_elt,"wordwrap",
|
||||||
|
cfg.getWordWrapLength())));
|
||||||
|
cfg.setRewrapLines(loader.configGetAttributeBoolean(opt_elt,"rewrap",cfg.getRewrapLines()));
|
||||||
|
cfg.setProcessAngles(loader.configGetAttributeBoolean(opt_elt,"angles",cfg.getProcessAngles()));
|
||||||
|
cfg.setProcessParens(loader.configGetAttributeBoolean(opt_elt,"parens",cfg.getProcessParens()));
|
||||||
|
cfg.setDiscardHTMLTags(loader.configGetAttributeBoolean(opt_elt,"discardHTML",
|
||||||
|
cfg.getDiscardHTMLTags()));
|
||||||
|
cfg.setDiscardRejectedHTML(loader.configGetAttributeBoolean(opt_elt,"discardRejected",
|
||||||
|
cfg.getDiscardRejectedHTML()));
|
||||||
|
cfg.setDiscardHTMLComments(loader.configGetAttributeBoolean(opt_elt,"discardComments",
|
||||||
|
cfg.getDiscardHTMLComments()));
|
||||||
|
cfg.setDiscardXMLConstructs(loader.configGetAttributeBoolean(opt_elt,"discardXML",
|
||||||
|
cfg.getDiscardXMLConstructs()));
|
||||||
|
cfg.setAnchorTail(loader.configGetAttribute(opt_elt,"anchorTail",cfg.getAnchorTail()));
|
||||||
|
|
||||||
|
} // end if ("options" element seen)
|
||||||
|
else if (n.getNodeName().equals("output-filter"))
|
||||||
|
{ // specify an output filter - we need to create it here
|
||||||
|
Element of_elt = (Element)n;
|
||||||
|
String of_type = loader.configGetAttribute(of_elt,"type");
|
||||||
|
if (of_type.equals("normal"))
|
||||||
|
cfg.addOutputFilter(createOutputFilter(of_elt,intermediate));
|
||||||
|
else if (of_type.equals("raw"))
|
||||||
|
cfg.addRawOutputFilter(createOutputFilter(of_elt,intermediate));
|
||||||
|
else
|
||||||
|
throw new ConfigException("invalid type= attribute for <output-filter/> element",of_elt);
|
||||||
|
|
||||||
|
} // end else if ("output-filter" element seen)
|
||||||
|
else if (n.getNodeName().equals("rewriter"))
|
||||||
|
{ // specify a rewriter - we need to create it here
|
||||||
|
Element rw_elt = (Element)n;
|
||||||
|
String rw_type = loader.configGetAttribute(rw_elt,"type");
|
||||||
|
if (rw_type.equals("string"))
|
||||||
|
cfg.addStringRewriter(createRewriter(rw_elt,intermediate));
|
||||||
|
else if (rw_type.equals("word"))
|
||||||
|
cfg.addWordRewriter(createRewriter(rw_elt,intermediate));
|
||||||
|
else if (rw_type.equals("tag"))
|
||||||
|
cfg.addTagRewriter(createRewriter(rw_elt,intermediate));
|
||||||
|
else if (rw_type.equals("paren"))
|
||||||
|
cfg.addParenRewriter(createRewriter(rw_elt,intermediate));
|
||||||
|
else
|
||||||
|
throw new ConfigException("invalid type= attribute for <rewriter/> element",rw_elt);
|
||||||
|
|
||||||
|
} // end else if ("rewriter" element seen)
|
||||||
|
else if (n.getNodeName().equals("tag-set"))
|
||||||
|
{ // specify a tag set to deal with
|
||||||
|
Element ts_elt = (Element)n;
|
||||||
|
DOMElementHelper ts_elt_h = new DOMElementHelper(ts_elt);
|
||||||
|
if (ts_elt_h.hasAttribute("id"))
|
||||||
|
{ // we're an "id" element - use that to configure "normal" or "restricted"
|
||||||
|
String id = ts_elt.getAttribute("id");
|
||||||
|
if (id.equals("normal"))
|
||||||
|
cfg.configureNormalTagSet();
|
||||||
|
else if (id.equals("restricted"))
|
||||||
|
cfg.configureRestrictedTagSet();
|
||||||
|
else
|
||||||
|
throw new ConfigException("invalid id= attribute on <tag-set/> element",ts_elt);
|
||||||
|
|
||||||
|
} // end if ("id" attribute found)
|
||||||
|
else if (ts_elt_h.hasAttribute("allow"))
|
||||||
|
{ // allow a specified tag set
|
||||||
|
int set = HTMLCheckerCreator.convertTagSetLabel(ts_elt.getAttribute("allow"));
|
||||||
|
if (set<0)
|
||||||
|
throw new ConfigException("invalid allow= set identifier on <tag-set/> element",ts_elt);
|
||||||
|
cfg.allowTagSet(set);
|
||||||
|
|
||||||
|
} // end else if ("allow" attribute found)
|
||||||
|
else if (ts_elt_h.hasAttribute("disallow"))
|
||||||
|
{ // disallow a specified tag set
|
||||||
|
int set = HTMLCheckerCreator.convertTagSetLabel(ts_elt.getAttribute("disallow"));
|
||||||
|
if (set<0)
|
||||||
|
throw new ConfigException("invalid disallow= set identifier on <tag-set/> element",ts_elt);
|
||||||
|
cfg.disallowTagSet(set);
|
||||||
|
|
||||||
|
} // end else if ("disallow" attribute found)
|
||||||
|
|
||||||
|
} // end else if ("tag-set" element seen)
|
||||||
|
else // this is an error
|
||||||
|
throw new ConfigException("unknown node type found in <config/> section",(Element)n);
|
||||||
|
|
||||||
|
} // end if
|
||||||
|
// else ignore this node
|
||||||
|
|
||||||
|
} // end for
|
||||||
|
|
||||||
|
html_checkers.put(checker_name,cfg);
|
||||||
|
|
||||||
|
} // end createHTMLChecker
|
||||||
|
|
||||||
/*--------------------------------------------------------------------------------
|
/*--------------------------------------------------------------------------------
|
||||||
* Implementations from interface ServiceProvider
|
* Implementations from interface ServiceProvider
|
||||||
*--------------------------------------------------------------------------------
|
*--------------------------------------------------------------------------------
|
||||||
|
@ -112,6 +370,38 @@ public class GlobalSiteImpl implements GlobalSite
|
||||||
|
|
||||||
public Object queryService(Class klass, String serviceid)
|
public Object queryService(Class klass, String serviceid)
|
||||||
{
|
{
|
||||||
|
if (klass==Connection.class)
|
||||||
|
{ // want to get a database connection
|
||||||
|
try
|
||||||
|
{ // call through
|
||||||
|
return this.getConnection(serviceid);
|
||||||
|
|
||||||
|
} // end try
|
||||||
|
catch (SQLException e)
|
||||||
|
{ // unable to get the connection
|
||||||
|
throw new NoSuchServiceException("GlobalSite",klass,serviceid);
|
||||||
|
|
||||||
|
} // end catch
|
||||||
|
|
||||||
|
} // end if
|
||||||
|
if (klass==HTMLCheckerConfig.class)
|
||||||
|
{ // get the HTML Checker config
|
||||||
|
Object rc = html_checkers.get(serviceid);
|
||||||
|
if (rc==null)
|
||||||
|
throw new NoSuchServiceException("GlobalSite",klass,serviceid);
|
||||||
|
return rc;
|
||||||
|
|
||||||
|
} // end if
|
||||||
|
|
||||||
|
if (klass==HTMLChecker.class)
|
||||||
|
{ // create an HTML Checker using the specified HTML Checker config
|
||||||
|
HTMLCheckerConfig fact = (HTMLCheckerConfig)(html_checkers.get(serviceid));
|
||||||
|
if (fact==null)
|
||||||
|
throw new NoSuchServiceException("GlobalSite",klass,serviceid);
|
||||||
|
return fact.createHTMLChecker();
|
||||||
|
|
||||||
|
} // end if
|
||||||
|
|
||||||
return this.queryService(klass);
|
return this.queryService(klass);
|
||||||
|
|
||||||
} // end queryService
|
} // end queryService
|
||||||
|
|
|
@ -7,24 +7,168 @@
|
||||||
* WARRANTY OF ANY KIND, either express or implied. See the License for the specific
|
* WARRANTY OF ANY KIND, either express or implied. See the License for the specific
|
||||||
* language governing rights and limitations under the License.
|
* language governing rights and limitations under the License.
|
||||||
*
|
*
|
||||||
* The Original Code is the Venice Web Community System.
|
* The Original Code is the Venice Web Communities System.
|
||||||
*
|
*
|
||||||
* The Initial Developer of the Original Code is Eric J. Bowersox <erbo@silcom.com>,
|
* The Initial Developer of the Original Code is Eric J. Bowersox <erbo@silcom.com>,
|
||||||
* for Silverwrist Design Studios. Portions created by Eric J. Bowersox are
|
* for Silverwrist Design Studios. Portions created by Eric J. Bowersox are
|
||||||
* Copyright (C) 2001 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved.
|
* Copyright (C) 2001-02 Eric J. Bowersox/Silverwrist Design Studios. All Rights Reserved.
|
||||||
*
|
*
|
||||||
* Contributor(s):
|
* Contributor(s):
|
||||||
*/
|
*/
|
||||||
package com.silverwrist.venice.htmlcheck;
|
package com.silverwrist.venice.htmlcheck;
|
||||||
|
|
||||||
|
import java.util.*;
|
||||||
import com.silverwrist.venice.htmlcheck.impl.HTMLCheckerConfigImpl;
|
import com.silverwrist.venice.htmlcheck.impl.HTMLCheckerConfigImpl;
|
||||||
|
|
||||||
public class HTMLCheckerCreator
|
public class HTMLCheckerCreator
|
||||||
{
|
{
|
||||||
|
/*--------------------------------------------------------------------------------
|
||||||
|
* Static data members
|
||||||
|
*--------------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
private static final Map LABELS;
|
||||||
|
|
||||||
|
/*--------------------------------------------------------------------------------
|
||||||
|
* External static operations
|
||||||
|
*--------------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
public static HTMLCheckerConfig create()
|
public static HTMLCheckerConfig create()
|
||||||
{
|
{
|
||||||
return HTMLCheckerConfigImpl.createHTMLCheckerConfig();
|
return HTMLCheckerConfigImpl.createHTMLCheckerConfig();
|
||||||
|
|
||||||
} // end create
|
} // end create
|
||||||
|
|
||||||
|
public static int convertTagSetLabel(String label)
|
||||||
|
{
|
||||||
|
if (label==null)
|
||||||
|
return -1;
|
||||||
|
Integer foo = (Integer)(LABELS.get(label.trim().toLowerCase()));
|
||||||
|
return ((foo==null) ? -1 : foo.intValue());
|
||||||
|
|
||||||
|
} // end convertTagSetLabel
|
||||||
|
|
||||||
|
/*--------------------------------------------------------------------------------
|
||||||
|
* Static initializer
|
||||||
|
*--------------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
static
|
||||||
|
{ // build up the Labels map
|
||||||
|
HashMap tmp = new HashMap();
|
||||||
|
|
||||||
|
Integer val = new Integer(HTMLTagSets.INLINE_FORMAT);
|
||||||
|
tmp.put("inline",val);
|
||||||
|
tmp.put("inline-format",val);
|
||||||
|
|
||||||
|
val = new Integer(HTMLTagSets.ANCHOR);
|
||||||
|
tmp.put("anchor",val);
|
||||||
|
tmp.put("a",val);
|
||||||
|
|
||||||
|
val = new Integer(HTMLTagSets.BLOCK_FORMAT);
|
||||||
|
tmp.put("block",val);
|
||||||
|
tmp.put("block-format",val);
|
||||||
|
|
||||||
|
val = new Integer(HTMLTagSets.ACTIVE_CONTENT);
|
||||||
|
tmp.put("active",val);
|
||||||
|
tmp.put("active-content",val);
|
||||||
|
tmp.put("object",val);
|
||||||
|
tmp.put("embed",val);
|
||||||
|
tmp.put("applet",val);
|
||||||
|
tmp.put("script",val);
|
||||||
|
|
||||||
|
val = new Integer(HTMLTagSets.IMAGE_MAPS);
|
||||||
|
tmp.put("imagemap",val);
|
||||||
|
tmp.put("map",val);
|
||||||
|
|
||||||
|
val = new Integer(HTMLTagSets.DOC_FORMAT);
|
||||||
|
tmp.put("doc",val);
|
||||||
|
tmp.put("doc-format",val);
|
||||||
|
tmp.put("document",val);
|
||||||
|
tmp.put("document-format",val);
|
||||||
|
|
||||||
|
val = new Integer(HTMLTagSets.FONT_FORMAT);
|
||||||
|
tmp.put("font",val);
|
||||||
|
tmp.put("font-format",val);
|
||||||
|
|
||||||
|
val = new Integer(HTMLTagSets.FORMS);
|
||||||
|
tmp.put("form",val);
|
||||||
|
tmp.put("forms",val);
|
||||||
|
|
||||||
|
val = new Integer(HTMLTagSets.TABLES);
|
||||||
|
tmp.put("table",val);
|
||||||
|
tmp.put("tables",val);
|
||||||
|
|
||||||
|
val = new Integer(HTMLTagSets.CHANGE_MARKUP);
|
||||||
|
tmp.put("change",val);
|
||||||
|
tmp.put("change-markup",val);
|
||||||
|
tmp.put("delta",val);
|
||||||
|
|
||||||
|
val = new Integer(HTMLTagSets.FRAMES);
|
||||||
|
tmp.put("frame",val);
|
||||||
|
tmp.put("frames",val);
|
||||||
|
|
||||||
|
val = new Integer(HTMLTagSets.IMAGES);
|
||||||
|
tmp.put("image",val);
|
||||||
|
tmp.put("images",val);
|
||||||
|
tmp.put("img",val);
|
||||||
|
|
||||||
|
val = new Integer(HTMLTagSets.PREFORMAT);
|
||||||
|
tmp.put("preformat",val);
|
||||||
|
tmp.put("pre",val);
|
||||||
|
|
||||||
|
val = new Integer(HTMLTagSets.NSCP_INLINE_FORMAT);
|
||||||
|
tmp.put("inline.nscp",val);
|
||||||
|
tmp.put("inline-format.nscp",val);
|
||||||
|
|
||||||
|
val = new Integer(HTMLTagSets.NSCP_LAYERS);
|
||||||
|
tmp.put("layer.nscp",val);
|
||||||
|
tmp.put("layers.nscp",val);
|
||||||
|
|
||||||
|
val = new Integer(HTMLTagSets.NSCP_FORMS);
|
||||||
|
tmp.put("form.nscp",val);
|
||||||
|
tmp.put("forms.nscp",val);
|
||||||
|
|
||||||
|
val = new Integer(HTMLTagSets.NSCP_BLOCK_FORMAT);
|
||||||
|
tmp.put("block.nscp",val);
|
||||||
|
tmp.put("block-format.nscp",val);
|
||||||
|
|
||||||
|
val = new Integer(HTMLTagSets.NSCP_SERVER);
|
||||||
|
tmp.put("server.nscp",val);
|
||||||
|
|
||||||
|
val = new Integer(HTMLTagSets.MSFT_DOC_FORMAT);
|
||||||
|
tmp.put("doc.msft",val);
|
||||||
|
tmp.put("doc-format.msft",val);
|
||||||
|
tmp.put("document.msft",val);
|
||||||
|
tmp.put("document-format.msft",val);
|
||||||
|
|
||||||
|
val = new Integer(HTMLTagSets.MSFT_INLINE_FORMAT);
|
||||||
|
tmp.put("inline.msft",val);
|
||||||
|
tmp.put("inline-format.msft",val);
|
||||||
|
|
||||||
|
val = new Integer(HTMLTagSets.MSFT_BLOCK_FORMAT);
|
||||||
|
tmp.put("block.msft",val);
|
||||||
|
tmp.put("block-format.msft",val);
|
||||||
|
|
||||||
|
val = new Integer(HTMLTagSets.MSFT_ACTIVE_CONTENT);
|
||||||
|
tmp.put("active.msft",val);
|
||||||
|
tmp.put("active-content.msft",val);
|
||||||
|
|
||||||
|
val = new Integer(HTMLTagSets.SERVER_PAGE);
|
||||||
|
tmp.put("server",val);
|
||||||
|
tmp.put("asp",val);
|
||||||
|
tmp.put("jsp",val);
|
||||||
|
|
||||||
|
val = new Integer(HTMLTagSets.JAVA_SERVER);
|
||||||
|
tmp.put("server.java",val);
|
||||||
|
tmp.put("jsp.component",val);
|
||||||
|
|
||||||
|
val = new Integer(HTMLTagSets.COMMENT);
|
||||||
|
tmp.put("comment",val);
|
||||||
|
|
||||||
|
LABELS = Collections.unmodifiableMap(tmp);
|
||||||
|
|
||||||
|
} // end static initializer
|
||||||
|
|
||||||
} // end HTMLCheckerCreator
|
} // end HTMLCheckerCreator
|
||||||
|
|
|
@ -24,6 +24,7 @@ import com.silverwrist.venice.db.SQLUtil;
|
||||||
import com.silverwrist.venice.core.AuditData;
|
import com.silverwrist.venice.core.AuditData;
|
||||||
import com.silverwrist.venice.except.DataException;
|
import com.silverwrist.venice.except.DataException;
|
||||||
import com.silverwrist.venice.except.InternalStateError;
|
import com.silverwrist.venice.except.InternalStateError;
|
||||||
|
import com.silverwrist.venice.svc.internal.GlobalSite;
|
||||||
|
|
||||||
public class AuditRecord implements AuditData
|
public class AuditRecord implements AuditData
|
||||||
{
|
{
|
||||||
|
@ -385,6 +386,29 @@ public class AuditRecord implements AuditData
|
||||||
|
|
||||||
} // end store
|
} // end store
|
||||||
|
|
||||||
|
public void store(GlobalSite globalsite)
|
||||||
|
{
|
||||||
|
Connection conn = null;
|
||||||
|
|
||||||
|
try
|
||||||
|
{ // get a connection and use it to store the audit record
|
||||||
|
conn = globalsite.getConnection(null);
|
||||||
|
this.store(conn);
|
||||||
|
|
||||||
|
} // end try
|
||||||
|
catch (SQLException e)
|
||||||
|
{ // just log an error if we screwed up
|
||||||
|
logger.error("DB error saving audit record: " + e.getMessage(),e);
|
||||||
|
|
||||||
|
} // end catch
|
||||||
|
finally
|
||||||
|
{ // make sure the connection is released before we go
|
||||||
|
SQLUtil.shutdown(conn);
|
||||||
|
|
||||||
|
} // end finally
|
||||||
|
|
||||||
|
} // end store
|
||||||
|
|
||||||
/*--------------------------------------------------------------------------------
|
/*--------------------------------------------------------------------------------
|
||||||
* External static operations
|
* External static operations
|
||||||
*--------------------------------------------------------------------------------
|
*--------------------------------------------------------------------------------
|
||||||
|
|
|
@ -312,6 +312,13 @@ public class XMLLoader
|
||||||
|
|
||||||
} // end configGetAttribute
|
} // end configGetAttribute
|
||||||
|
|
||||||
|
public final String configGetAttribute(Element elt, String attr_name, String default_val)
|
||||||
|
{
|
||||||
|
String rc = elt.getAttribute(attr_name);
|
||||||
|
return (StringUtil.isStringEmpty(rc) ? default_val : rc);
|
||||||
|
|
||||||
|
} // end configGetAttribute
|
||||||
|
|
||||||
public final int configGetAttributeInt(Element elt, String attr_name) throws ConfigException
|
public final int configGetAttributeInt(Element elt, String attr_name) throws ConfigException
|
||||||
{
|
{
|
||||||
String tmp = elt.getAttribute(attr_name);
|
String tmp = elt.getAttribute(attr_name);
|
||||||
|
@ -338,6 +345,43 @@ public class XMLLoader
|
||||||
|
|
||||||
} // end configGetAttributeInt
|
} // end configGetAttributeInt
|
||||||
|
|
||||||
|
public final int configGetAttributeInt(Element elt, String attr_name, int default_val) throws ConfigException
|
||||||
|
{
|
||||||
|
String tmp = elt.getAttribute(attr_name);
|
||||||
|
if (StringUtil.isStringEmpty(tmp))
|
||||||
|
return default_val; // the attribute is not present
|
||||||
|
|
||||||
|
try
|
||||||
|
{ // parse out the integer value
|
||||||
|
return Integer.parseInt(tmp.trim());
|
||||||
|
|
||||||
|
} // end try
|
||||||
|
catch (NumberFormatException nfe)
|
||||||
|
{ // but it's not a valid integer - throw something else!
|
||||||
|
logger.fatal(attr_name + "= attribute in <" + elt.getTagName() + "/> element is not a valid integer");
|
||||||
|
throw new ConfigException(attr_name + "= attribute in <" + elt.getTagName()
|
||||||
|
+ "/> element is not a valid integer",elt);
|
||||||
|
|
||||||
|
} // end catch
|
||||||
|
|
||||||
|
} // end configGetAttributeInt
|
||||||
|
|
||||||
|
public final boolean configGetAttributeBoolean(Element elt, String attr_name, boolean default_val)
|
||||||
|
throws ConfigException
|
||||||
|
{
|
||||||
|
String tmp = elt.getAttribute(attr_name);
|
||||||
|
if (StringUtil.isStringEmpty(tmp))
|
||||||
|
return default_val; // the attribute is not present
|
||||||
|
if (StringUtil.isBooleanTrue(tmp))
|
||||||
|
return true;
|
||||||
|
if (StringUtil.isBooleanFalse(tmp))
|
||||||
|
return false;
|
||||||
|
logger.fatal(attr_name + "= attribute in <" + elt.getTagName() + "/> element is not a valid Boolean");
|
||||||
|
throw new ConfigException(attr_name + "= attribute in <" + elt.getTagName()
|
||||||
|
+ "/> element is not a valid Boolean",elt);
|
||||||
|
|
||||||
|
} // end configGetAttributeBoolean
|
||||||
|
|
||||||
/*--------------------------------------------------------------------------------
|
/*--------------------------------------------------------------------------------
|
||||||
* External static operations
|
* External static operations
|
||||||
*--------------------------------------------------------------------------------
|
*--------------------------------------------------------------------------------
|
||||||
|
|
Loading…
Reference in New Issue
Block a user