You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@turbine.apache.org by gk...@apache.org on 2021/08/04 08:28:06 UTC

svn commit: r1076294 [13/46] - in /websites/production/turbine/content/fulcrum/fulcrum-quartz: ./ apidocs/ apidocs/jquery/ apidocs/jquery/external/ apidocs/jquery/external/jquery/ apidocs/jquery/images/ apidocs/jquery/jszip-utils/ apidocs/jquery/jszip-...

Added: websites/production/turbine/content/fulcrum/fulcrum-quartz/apidocs/search.js
==============================================================================
--- websites/production/turbine/content/fulcrum/fulcrum-quartz/apidocs/search.js (added)
+++ websites/production/turbine/content/fulcrum/fulcrum-quartz/apidocs/search.js Wed Aug  4 08:28:04 2021
@@ -0,0 +1,326 @@
+/*
+ * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code 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
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+var noResult = {l: "No results found"};
+var catModules = "Modules";
+var catPackages = "Packages";
+var catTypes = "Types";
+var catMembers = "Members";
+var catSearchTags = "SearchTags";
+var highlight = "<span class=\"resultHighlight\">$&</span>";
+var camelCaseRegexp = "";
+var secondaryMatcher = "";
+function getHighlightedText(item) {
+    var ccMatcher = new RegExp(camelCaseRegexp);
+    var label = item.replace(ccMatcher, highlight);
+    if (label === item) {
+        label = item.replace(secondaryMatcher, highlight);
+    }
+    return label;
+}
+function getURLPrefix(ui) {
+    var urlPrefix="";
+    if (useModuleDirectories) {
+        var slash = "/";
+        if (ui.item.category === catModules) {
+            return ui.item.l + slash;
+        } else if (ui.item.category === catPackages && ui.item.m) {
+            return ui.item.m + slash;
+        } else if ((ui.item.category === catTypes && ui.item.p) || ui.item.category === catMembers) {
+            $.each(packageSearchIndex, function(index, item) {
+                if (ui.item.p == item.l) {
+                    urlPrefix = item.m + slash;
+                }
+            });
+            return urlPrefix;
+        } else {
+            return urlPrefix;
+        }
+    }
+    return urlPrefix;
+}
+var watermark = 'Search';
+$(function() {
+    $("#search").val('');
+    $("#search").prop("disabled", false);
+    $("#reset").prop("disabled", false);
+    $("#search").val(watermark).addClass('watermark');
+    $("#search").blur(function() {
+        if ($(this).val().length == 0) {
+            $(this).val(watermark).addClass('watermark');
+        }
+    });
+    $("#search").on('click keydown', function() {
+        if ($(this).val() == watermark) {
+            $(this).val('').removeClass('watermark');
+        }
+    });
+    $("#reset").click(function() {
+        $("#search").val('');
+        $("#search").focus();
+    });
+    $("#search").focus();
+    $("#search")[0].setSelectionRange(0, 0);
+});
+$.widget("custom.catcomplete", $.ui.autocomplete, {
+    _create: function() {
+        this._super();
+        this.widget().menu("option", "items", "> :not(.ui-autocomplete-category)");
+    },
+    _renderMenu: function(ul, items) {
+        var rMenu = this,
+                currentCategory = "";
+        rMenu.menu.bindings = $();
+        $.each(items, function(index, item) {
+            var li;
+            if (item.l !== noResult.l && item.category !== currentCategory) {
+                ul.append("<li class=\"ui-autocomplete-category\">" + item.category + "</li>");
+                currentCategory = item.category;
+            }
+            li = rMenu._renderItemData(ul, item);
+            if (item.category) {
+                li.attr("aria-label", item.category + " : " + item.l);
+                li.attr("class", "resultItem");
+            } else {
+                li.attr("aria-label", item.l);
+                li.attr("class", "resultItem");
+            }
+        });
+    },
+    _renderItem: function(ul, item) {
+        var label = "";
+        if (item.category === catModules) {
+            label = getHighlightedText(item.l);
+        } else if (item.category === catPackages) {
+            label = (item.m)
+                    ? getHighlightedText(item.m + "/" + item.l)
+                    : getHighlightedText(item.l);
+        } else if (item.category === catTypes) {
+            label = (item.p)
+                    ? getHighlightedText(item.p + "." + item.l)
+                    : getHighlightedText(item.l);
+        } else if (item.category === catMembers) {
+            label = getHighlightedText(item.p + "." + (item.c + "." + item.l));
+        } else if (item.category === catSearchTags) {
+            label = getHighlightedText(item.l);
+        } else {
+            label = item.l;
+        }
+        var li = $("<li/>").appendTo(ul);
+        var div = $("<div/>").appendTo(li);
+        if (item.category === catSearchTags) {
+            if (item.d) {
+                div.html(label + "<span class=\"searchTagHolderResult\"> (" + item.h + ")</span><br><span class=\"searchTagDescResult\">"
+                                + item.d + "</span><br>");
+            } else {
+                div.html(label + "<span class=\"searchTagHolderResult\"> (" + item.h + ")</span>");
+            }
+        } else {
+            div.html(label);
+        }
+        return li;
+    }
+});
+$(function() {
+    $("#search").catcomplete({
+        minLength: 1,
+        delay: 100,
+        source: function(request, response) {
+            var result = new Array();
+            var presult = new Array();
+            var tresult = new Array();
+            var mresult = new Array();
+            var tgresult = new Array();
+            var secondaryresult = new Array();
+            var displayCount = 0;
+            var exactMatcher = new RegExp("^" + $.ui.autocomplete.escapeRegex(request.term) + "$", "i");
+            camelCaseRegexp = ($.ui.autocomplete.escapeRegex(request.term)).split(/(?=[A-Z])/).join("([a-z0-9_$]*?)");
+            var camelCaseMatcher = new RegExp("^" + camelCaseRegexp);
+            secondaryMatcher = new RegExp($.ui.autocomplete.escapeRegex(request.term), "i");
+
+            // Return the nested innermost name from the specified object
+            function nestedName(e) {
+                return e.l.substring(e.l.lastIndexOf(".") + 1);
+            }
+
+            function concatResults(a1, a2) {
+                a1 = a1.concat(a2);
+                a2.length = 0;
+                return a1;
+            }
+
+            if (moduleSearchIndex) {
+                var mdleCount = 0;
+                $.each(moduleSearchIndex, function(index, item) {
+                    item.category = catModules;
+                    if (exactMatcher.test(item.l)) {
+                        result.push(item);
+                        mdleCount++;
+                    } else if (camelCaseMatcher.test(item.l)) {
+                        result.push(item);
+                    } else if (secondaryMatcher.test(item.l)) {
+                        secondaryresult.push(item);
+                    }
+                });
+                displayCount = mdleCount;
+                result = concatResults(result, secondaryresult);
+            }
+            if (packageSearchIndex) {
+                var pCount = 0;
+                var pkg = "";
+                $.each(packageSearchIndex, function(index, item) {
+                    item.category = catPackages;
+                    pkg = (item.m)
+                            ? (item.m + "/" + item.l)
+                            : item.l;
+                    if (exactMatcher.test(item.l)) {
+                        presult.push(item);
+                        pCount++;
+                    } else if (camelCaseMatcher.test(pkg)) {
+                        presult.push(item);
+                    } else if (secondaryMatcher.test(pkg)) {
+                        secondaryresult.push(item);
+                    }
+                });
+                result = result.concat(concatResults(presult, secondaryresult));
+                displayCount = (pCount > displayCount) ? pCount : displayCount;
+            }
+            if (typeSearchIndex) {
+                var tCount = 0;
+                $.each(typeSearchIndex, function(index, item) {
+                    item.category = catTypes;
+                    var s = nestedName(item);
+                    if (exactMatcher.test(s)) {
+                        tresult.push(item);
+                        tCount++;
+                    } else if (camelCaseMatcher.test(s)) {
+                        tresult.push(item);
+                    } else if (secondaryMatcher.test(item.p + "." + item.l)) {
+                        secondaryresult.push(item);
+                    }
+                });
+                result = result.concat(concatResults(tresult, secondaryresult));
+                displayCount = (tCount > displayCount) ? tCount : displayCount;
+            }
+            if (memberSearchIndex) {
+                var mCount = 0;
+                $.each(memberSearchIndex, function(index, item) {
+                    item.category = catMembers;
+                    var s = nestedName(item);
+                    if (exactMatcher.test(s)) {
+                        mresult.push(item);
+                        mCount++;
+                    } else if (camelCaseMatcher.test(s)) {
+                        mresult.push(item);
+                    } else if (secondaryMatcher.test(item.c + "." + item.l)) {
+                        secondaryresult.push(item);
+                    }
+                });
+                result = result.concat(concatResults(mresult, secondaryresult));
+                displayCount = (mCount > displayCount) ? mCount : displayCount;
+            }
+            if (tagSearchIndex) {
+                var tgCount = 0;
+                $.each(tagSearchIndex, function(index, item) {
+                    item.category = catSearchTags;
+                    if (exactMatcher.test(item.l)) {
+                        tgresult.push(item);
+                        tgCount++;
+                    } else if (secondaryMatcher.test(item.l)) {
+                        secondaryresult.push(item);
+                    }
+                });
+                result = result.concat(concatResults(tgresult, secondaryresult));
+                displayCount = (tgCount > displayCount) ? tgCount : displayCount;
+            }
+            displayCount = (displayCount > 500) ? displayCount : 500;
+            var counter = function() {
+                var count = {Modules: 0, Packages: 0, Types: 0, Members: 0, SearchTags: 0};
+                var f = function(item) {
+                    count[item.category] += 1;
+                    return (count[item.category] <= displayCount);
+                };
+                return f;
+            }();
+            response(result.filter(counter));
+        },
+        response: function(event, ui) {
+            if (!ui.content.length) {
+                ui.content.push(noResult);
+            } else {
+                $("#search").empty();
+            }
+        },
+        autoFocus: true,
+        position: {
+            collision: "flip"
+        },
+        select: function(event, ui) {
+            if (ui.item.l !== noResult.l) {
+                var url = getURLPrefix(ui);
+                if (ui.item.category === catModules) {
+                    if (useModuleDirectories) {
+                        url += "module-summary.html";
+                    } else {
+                        url = ui.item.l + "-summary.html";
+                    }
+                } else if (ui.item.category === catPackages) {
+                    if (ui.item.url) {
+                        url = ui.item.url;
+                    } else {
+                    url += ui.item.l.replace(/\./g, '/') + "/package-summary.html";
+                    }
+                } else if (ui.item.category === catTypes) {
+                    if (ui.item.url) {
+                        url = ui.item.url;
+                    } else if (ui.item.p === "<Unnamed>") {
+                        url += ui.item.l + ".html";
+                    } else {
+                        url += ui.item.p.replace(/\./g, '/') + "/" + ui.item.l + ".html";
+                    }
+                } else if (ui.item.category === catMembers) {
+                    if (ui.item.p === "<Unnamed>") {
+                        url += ui.item.c + ".html" + "#";
+                    } else {
+                        url += ui.item.p.replace(/\./g, '/') + "/" + ui.item.c + ".html" + "#";
+                    }
+                    if (ui.item.url) {
+                        url += ui.item.url;
+                    } else {
+                        url += ui.item.l;
+                    }
+                } else if (ui.item.category === catSearchTags) {
+                    url += ui.item.u;
+                }
+                if (top !== window) {
+                    parent.classFrame.location = pathtoroot + url;
+                } else {
+                    window.location.href = pathtoroot + url;
+                }
+                $("#search").focus();
+            }
+        }
+    });
+});
\ No newline at end of file

Modified: websites/production/turbine/content/fulcrum/fulcrum-quartz/apidocs/src-html/org/apache/fulcrum/quartz/QuartzScheduler.html
==============================================================================
--- websites/production/turbine/content/fulcrum/fulcrum-quartz/apidocs/src-html/org/apache/fulcrum/quartz/QuartzScheduler.html (original)
+++ websites/production/turbine/content/fulcrum/fulcrum-quartz/apidocs/src-html/org/apache/fulcrum/quartz/QuartzScheduler.html Wed Aug  4 08:28:04 2021
@@ -1,111 +1,113 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<html lang="en">
-<head>
-<title>Source code</title>
-<link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
-</head>
-<body>
-<div class="sourceContainer">
-<pre><span class="sourceLineNo">001</span>package org.apache.fulcrum.quartz;<a name="line.1"></a>
-<span class="sourceLineNo">002</span><a name="line.2"></a>
-<span class="sourceLineNo">003</span>/*<a name="line.3"></a>
-<span class="sourceLineNo">004</span> * Licensed to the Apache Software Foundation (ASF) under one<a name="line.4"></a>
-<span class="sourceLineNo">005</span> * or more contributor license agreements.  See the NOTICE file<a name="line.5"></a>
-<span class="sourceLineNo">006</span> * distributed with this work for additional information<a name="line.6"></a>
-<span class="sourceLineNo">007</span> * regarding copyright ownership.  The ASF licenses this file<a name="line.7"></a>
-<span class="sourceLineNo">008</span> * to you under the Apache License, Version 2.0 (the<a name="line.8"></a>
-<span class="sourceLineNo">009</span> * "License"); you may not use this file except in compliance<a name="line.9"></a>
-<span class="sourceLineNo">010</span> * with the License.  You may obtain a copy of the License at<a name="line.10"></a>
-<span class="sourceLineNo">011</span> *<a name="line.11"></a>
-<span class="sourceLineNo">012</span> *   http://www.apache.org/licenses/LICENSE-2.0<a name="line.12"></a>
-<span class="sourceLineNo">013</span> *<a name="line.13"></a>
-<span class="sourceLineNo">014</span> * Unless required by applicable law or agreed to in writing,<a name="line.14"></a>
-<span class="sourceLineNo">015</span> * software distributed under the License is distributed on an<a name="line.15"></a>
-<span class="sourceLineNo">016</span> * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY<a name="line.16"></a>
-<span class="sourceLineNo">017</span> * KIND, either express or implied.  See the License for the<a name="line.17"></a>
-<span class="sourceLineNo">018</span> * specific language governing permissions and limitations<a name="line.18"></a>
-<span class="sourceLineNo">019</span> * under the License.<a name="line.19"></a>
-<span class="sourceLineNo">020</span> */<a name="line.20"></a>
-<span class="sourceLineNo">021</span><a name="line.21"></a>
-<span class="sourceLineNo">022</span>import org.quartz.Scheduler;<a name="line.22"></a>
-<span class="sourceLineNo">023</span><a name="line.23"></a>
-<span class="sourceLineNo">024</span>/**<a name="line.24"></a>
-<span class="sourceLineNo">025</span> *<a name="line.25"></a>
-<span class="sourceLineNo">026</span> * @author &lt;a href="mailto:leandro@ibnetwork.com.br"&gt;Leandro Rodrigo Saad Cruz&lt;/a&gt;<a name="line.26"></a>
-<span class="sourceLineNo">027</span> */<a name="line.27"></a>
-<span class="sourceLineNo">028</span>public interface QuartzScheduler<a name="line.28"></a>
-<span class="sourceLineNo">029</span>{<a name="line.29"></a>
-<span class="sourceLineNo">030</span>        /** Avalon role - used to id the component within the manager */<a name="line.30"></a>
-<span class="sourceLineNo">031</span>        String ROLE = QuartzScheduler.class.getName();<a name="line.31"></a>
-<span class="sourceLineNo">032</span>                <a name="line.32"></a>
-<span class="sourceLineNo">033</span>    /**<a name="line.33"></a>
-<span class="sourceLineNo">034</span>     * Get the underlying Quartz scheduler.<a name="line.34"></a>
-<span class="sourceLineNo">035</span>     *<a name="line.35"></a>
-<span class="sourceLineNo">036</span>     * @return the Quartz scheduler<a name="line.36"></a>
-<span class="sourceLineNo">037</span>     */<a name="line.37"></a>
-<span class="sourceLineNo">038</span>        Scheduler getScheduler();<a name="line.38"></a>
-<span class="sourceLineNo">039</span>}<a name="line.39"></a>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-</pre>
-</div>
-</body>
+<!DOCTYPE HTML>
+<html lang="de">
+<head>
+<title>Source code</title>
+<link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
+</head>
+<body>
+<main role="main">
+<div class="sourceContainer">
+<pre><span class="sourceLineNo">001</span><a id="line.1">package org.apache.fulcrum.quartz;</a>
+<span class="sourceLineNo">002</span><a id="line.2"></a>
+<span class="sourceLineNo">003</span><a id="line.3">/*</a>
+<span class="sourceLineNo">004</span><a id="line.4"> * Licensed to the Apache Software Foundation (ASF) under one</a>
+<span class="sourceLineNo">005</span><a id="line.5"> * or more contributor license agreements.  See the NOTICE file</a>
+<span class="sourceLineNo">006</span><a id="line.6"> * distributed with this work for additional information</a>
+<span class="sourceLineNo">007</span><a id="line.7"> * regarding copyright ownership.  The ASF licenses this file</a>
+<span class="sourceLineNo">008</span><a id="line.8"> * to you under the Apache License, Version 2.0 (the</a>
+<span class="sourceLineNo">009</span><a id="line.9"> * "License"); you may not use this file except in compliance</a>
+<span class="sourceLineNo">010</span><a id="line.10"> * with the License.  You may obtain a copy of the License at</a>
+<span class="sourceLineNo">011</span><a id="line.11"> *</a>
+<span class="sourceLineNo">012</span><a id="line.12"> *   http://www.apache.org/licenses/LICENSE-2.0</a>
+<span class="sourceLineNo">013</span><a id="line.13"> *</a>
+<span class="sourceLineNo">014</span><a id="line.14"> * Unless required by applicable law or agreed to in writing,</a>
+<span class="sourceLineNo">015</span><a id="line.15"> * software distributed under the License is distributed on an</a>
+<span class="sourceLineNo">016</span><a id="line.16"> * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY</a>
+<span class="sourceLineNo">017</span><a id="line.17"> * KIND, either express or implied.  See the License for the</a>
+<span class="sourceLineNo">018</span><a id="line.18"> * specific language governing permissions and limitations</a>
+<span class="sourceLineNo">019</span><a id="line.19"> * under the License.</a>
+<span class="sourceLineNo">020</span><a id="line.20"> */</a>
+<span class="sourceLineNo">021</span><a id="line.21"></a>
+<span class="sourceLineNo">022</span><a id="line.22">import org.quartz.Scheduler;</a>
+<span class="sourceLineNo">023</span><a id="line.23"></a>
+<span class="sourceLineNo">024</span><a id="line.24">/**</a>
+<span class="sourceLineNo">025</span><a id="line.25"> *</a>
+<span class="sourceLineNo">026</span><a id="line.26"> * @author &lt;a href="mailto:leandro@ibnetwork.com.br"&gt;Leandro Rodrigo Saad Cruz&lt;/a&gt;</a>
+<span class="sourceLineNo">027</span><a id="line.27"> */</a>
+<span class="sourceLineNo">028</span><a id="line.28">public interface QuartzScheduler</a>
+<span class="sourceLineNo">029</span><a id="line.29">{</a>
+<span class="sourceLineNo">030</span><a id="line.30">        /** Avalon role - used to id the component within the manager */</a>
+<span class="sourceLineNo">031</span><a id="line.31">        String ROLE = QuartzScheduler.class.getName();</a>
+<span class="sourceLineNo">032</span><a id="line.32">                </a>
+<span class="sourceLineNo">033</span><a id="line.33">    /**</a>
+<span class="sourceLineNo">034</span><a id="line.34">     * Get the underlying Quartz scheduler.</a>
+<span class="sourceLineNo">035</span><a id="line.35">     *</a>
+<span class="sourceLineNo">036</span><a id="line.36">     * @return the Quartz scheduler</a>
+<span class="sourceLineNo">037</span><a id="line.37">     */</a>
+<span class="sourceLineNo">038</span><a id="line.38">        Scheduler getScheduler();</a>
+<span class="sourceLineNo">039</span><a id="line.39">}</a>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+</pre>
+</div>
+</main>
+</body>
 </html>
\ No newline at end of file

Modified: websites/production/turbine/content/fulcrum/fulcrum-quartz/apidocs/src-html/org/apache/fulcrum/quartz/impl/QuartzSchedulerImpl.html
==============================================================================
--- websites/production/turbine/content/fulcrum/fulcrum-quartz/apidocs/src-html/org/apache/fulcrum/quartz/impl/QuartzSchedulerImpl.html (original)
+++ websites/production/turbine/content/fulcrum/fulcrum-quartz/apidocs/src-html/org/apache/fulcrum/quartz/impl/QuartzSchedulerImpl.html Wed Aug  4 08:28:04 2021
@@ -1,376 +1,378 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<html lang="en">
-<head>
-<title>Source code</title>
-<link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
-</head>
-<body>
-<div class="sourceContainer">
-<pre><span class="sourceLineNo">001</span>package org.apache.fulcrum.quartz.impl;<a name="line.1"></a>
-<span class="sourceLineNo">002</span><a name="line.2"></a>
-<span class="sourceLineNo">003</span>/*<a name="line.3"></a>
-<span class="sourceLineNo">004</span> * Licensed to the Apache Software Foundation (ASF) under one<a name="line.4"></a>
-<span class="sourceLineNo">005</span> * or more contributor license agreements.  See the NOTICE file<a name="line.5"></a>
-<span class="sourceLineNo">006</span> * distributed with this work for additional information<a name="line.6"></a>
-<span class="sourceLineNo">007</span> * regarding copyright ownership.  The ASF licenses this file<a name="line.7"></a>
-<span class="sourceLineNo">008</span> * to you under the Apache License, Version 2.0 (the<a name="line.8"></a>
-<span class="sourceLineNo">009</span> * "License"); you may not use this file except in compliance<a name="line.9"></a>
-<span class="sourceLineNo">010</span> * with the License.  You may obtain a copy of the License at<a name="line.10"></a>
-<span class="sourceLineNo">011</span> *<a name="line.11"></a>
-<span class="sourceLineNo">012</span> *   http://www.apache.org/licenses/LICENSE-2.0<a name="line.12"></a>
-<span class="sourceLineNo">013</span> *<a name="line.13"></a>
-<span class="sourceLineNo">014</span> * Unless required by applicable law or agreed to in writing,<a name="line.14"></a>
-<span class="sourceLineNo">015</span> * software distributed under the License is distributed on an<a name="line.15"></a>
-<span class="sourceLineNo">016</span> * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY<a name="line.16"></a>
-<span class="sourceLineNo">017</span> * KIND, either express or implied.  See the License for the<a name="line.17"></a>
-<span class="sourceLineNo">018</span> * specific language governing permissions and limitations<a name="line.18"></a>
-<span class="sourceLineNo">019</span> * under the License.<a name="line.19"></a>
-<span class="sourceLineNo">020</span> */<a name="line.20"></a>
-<span class="sourceLineNo">021</span><a name="line.21"></a>
-<span class="sourceLineNo">022</span><a name="line.22"></a>
-<span class="sourceLineNo">023</span>import java.util.ArrayList;<a name="line.23"></a>
-<span class="sourceLineNo">024</span>import java.util.List;<a name="line.24"></a>
-<span class="sourceLineNo">025</span>import java.util.Properties;<a name="line.25"></a>
-<span class="sourceLineNo">026</span>import java.util.Set;<a name="line.26"></a>
-<span class="sourceLineNo">027</span><a name="line.27"></a>
-<span class="sourceLineNo">028</span>import org.apache.avalon.framework.activity.Disposable;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import org.apache.avalon.framework.activity.Initializable;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import org.apache.avalon.framework.activity.Startable;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import org.apache.avalon.framework.configuration.Configurable;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import org.apache.avalon.framework.configuration.Configuration;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import org.apache.avalon.framework.configuration.ConfigurationException;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import org.apache.avalon.framework.logger.AbstractLogEnabled;<a name="line.34"></a>
-<span class="sourceLineNo">035</span>import org.apache.avalon.framework.logger.LogEnabled;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import org.apache.avalon.framework.parameters.Parameters;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import org.apache.avalon.framework.service.ServiceException;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import org.apache.avalon.framework.service.ServiceManager;<a name="line.38"></a>
-<span class="sourceLineNo">039</span>import org.apache.avalon.framework.service.Serviceable;<a name="line.39"></a>
-<span class="sourceLineNo">040</span>import org.apache.avalon.framework.thread.ThreadSafe;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import org.apache.fulcrum.quartz.QuartzScheduler;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>import org.quartz.Job;<a name="line.42"></a>
-<span class="sourceLineNo">043</span>import org.quartz.JobDetail;<a name="line.43"></a>
-<span class="sourceLineNo">044</span>import org.quartz.JobExecutionContext;<a name="line.44"></a>
-<span class="sourceLineNo">045</span>import org.quartz.JobExecutionException;<a name="line.45"></a>
-<span class="sourceLineNo">046</span>import org.quartz.JobKey;<a name="line.46"></a>
-<span class="sourceLineNo">047</span>import org.quartz.JobListener;<a name="line.47"></a>
-<span class="sourceLineNo">048</span>import org.quartz.Matcher;<a name="line.48"></a>
-<span class="sourceLineNo">049</span>import org.quartz.Scheduler;<a name="line.49"></a>
-<span class="sourceLineNo">050</span>import org.quartz.SchedulerException;<a name="line.50"></a>
-<span class="sourceLineNo">051</span>import org.quartz.Trigger;<a name="line.51"></a>
-<span class="sourceLineNo">052</span>import org.quartz.impl.StdSchedulerFactory;<a name="line.52"></a>
-<span class="sourceLineNo">053</span>import org.quartz.impl.matchers.GroupMatcher;<a name="line.53"></a>
-<span class="sourceLineNo">054</span><a name="line.54"></a>
-<span class="sourceLineNo">055</span>/**<a name="line.55"></a>
-<span class="sourceLineNo">056</span> * Avalon service  wrapping the QuartzScheduler.<a name="line.56"></a>
-<span class="sourceLineNo">057</span> */<a name="line.57"></a>
-<span class="sourceLineNo">058</span>public class QuartzSchedulerImpl<a name="line.58"></a>
-<span class="sourceLineNo">059</span>        extends AbstractLogEnabled<a name="line.59"></a>
-<span class="sourceLineNo">060</span>        implements QuartzScheduler, Configurable, Serviceable, Disposable, Initializable, ThreadSafe, JobListener, Startable<a name="line.60"></a>
-<span class="sourceLineNo">061</span>{<a name="line.61"></a>
-<span class="sourceLineNo">062</span>    /** Configuration key */<a name="line.62"></a>
-<span class="sourceLineNo">063</span>    private static final String CONFIG_CONFIGURATION = "configuration";<a name="line.63"></a>
-<span class="sourceLineNo">064</span><a name="line.64"></a>
-<span class="sourceLineNo">065</span>    /** Configuration key */<a name="line.65"></a>
-<span class="sourceLineNo">066</span>    private static final String CONFIG_PROPERTY_FILE = "quartzPropertyFile";<a name="line.66"></a>
-<span class="sourceLineNo">067</span><a name="line.67"></a>
-<span class="sourceLineNo">068</span>    /** Configuration key */<a name="line.68"></a>
-<span class="sourceLineNo">069</span>    private static final String CONFIG_PROPERTIES = "properties";<a name="line.69"></a>
-<span class="sourceLineNo">070</span><a name="line.70"></a>
-<span class="sourceLineNo">071</span>    /**<a name="line.71"></a>
-<span class="sourceLineNo">072</span>     * the Avalon service serviceManager<a name="line.72"></a>
-<span class="sourceLineNo">073</span>     */<a name="line.73"></a>
-<span class="sourceLineNo">074</span>    private ServiceManager serviceManager;<a name="line.74"></a>
-<span class="sourceLineNo">075</span><a name="line.75"></a>
-<span class="sourceLineNo">076</span>    /**<a name="line.76"></a>
-<span class="sourceLineNo">077</span>     * the Quartz scheduler instance<a name="line.77"></a>
-<span class="sourceLineNo">078</span>     */<a name="line.78"></a>
-<span class="sourceLineNo">079</span>    private Scheduler scheduler;<a name="line.79"></a>
-<span class="sourceLineNo">080</span><a name="line.80"></a>
-<span class="sourceLineNo">081</span>    /**<a name="line.81"></a>
-<span class="sourceLineNo">082</span>     * the quartz property file<a name="line.82"></a>
-<span class="sourceLineNo">083</span>     */<a name="line.83"></a>
-<span class="sourceLineNo">084</span>    private String quartzPropertyFile;<a name="line.84"></a>
-<span class="sourceLineNo">085</span><a name="line.85"></a>
-<span class="sourceLineNo">086</span>    /**<a name="line.86"></a>
-<span class="sourceLineNo">087</span>     * the quartz properties loaded from the XML configuration<a name="line.87"></a>
-<span class="sourceLineNo">088</span>     */<a name="line.88"></a>
-<span class="sourceLineNo">089</span>    private Properties quartzProperties;<a name="line.89"></a>
-<span class="sourceLineNo">090</span><a name="line.90"></a>
-<span class="sourceLineNo">091</span>    // === Avalon Lifecycle =================================================<a name="line.91"></a>
-<span class="sourceLineNo">092</span><a name="line.92"></a>
-<span class="sourceLineNo">093</span>    /**<a name="line.93"></a>
-<span class="sourceLineNo">094</span>     * @see org.apache.avalon.framework.configuration.Configurable#configure(org.apache.avalon.framework.configuration.Configuration)<a name="line.94"></a>
-<span class="sourceLineNo">095</span>     */<a name="line.95"></a>
-<span class="sourceLineNo">096</span>    @Override<a name="line.96"></a>
-<span class="sourceLineNo">097</span>    public void configure(Configuration conf) throws ConfigurationException<a name="line.97"></a>
-<span class="sourceLineNo">098</span>    {<a name="line.98"></a>
-<span class="sourceLineNo">099</span>        Configuration quartzConf = conf.getChild(CONFIG_CONFIGURATION, true);<a name="line.99"></a>
-<span class="sourceLineNo">100</span><a name="line.100"></a>
-<span class="sourceLineNo">101</span>        if(quartzConf.getChild(CONFIG_PROPERTIES, false) != null)<a name="line.101"></a>
-<span class="sourceLineNo">102</span>        {<a name="line.102"></a>
-<span class="sourceLineNo">103</span>            this.quartzProperties = Parameters.toProperties(Parameters.fromConfiguration(quartzConf.getChild(CONFIG_PROPERTIES)));<a name="line.103"></a>
-<span class="sourceLineNo">104</span>        }<a name="line.104"></a>
-<span class="sourceLineNo">105</span>        else if(quartzConf.getChild(CONFIG_PROPERTY_FILE, false) != null)<a name="line.105"></a>
-<span class="sourceLineNo">106</span>        {<a name="line.106"></a>
-<span class="sourceLineNo">107</span>            this.quartzPropertyFile = quartzConf.getChild(CONFIG_PROPERTY_FILE).getValue();<a name="line.107"></a>
-<span class="sourceLineNo">108</span>        }<a name="line.108"></a>
-<span class="sourceLineNo">109</span>    }<a name="line.109"></a>
-<span class="sourceLineNo">110</span><a name="line.110"></a>
-<span class="sourceLineNo">111</span>    /**<a name="line.111"></a>
-<span class="sourceLineNo">112</span>     * @see org.apache.avalon.framework.service.Serviceable#service(org.apache.avalon.framework.service.ServiceManager)<a name="line.112"></a>
-<span class="sourceLineNo">113</span>     */<a name="line.113"></a>
-<span class="sourceLineNo">114</span>    @Override<a name="line.114"></a>
-<span class="sourceLineNo">115</span>    public void service(ServiceManager manager) throws ServiceException<a name="line.115"></a>
-<span class="sourceLineNo">116</span>    {<a name="line.116"></a>
-<span class="sourceLineNo">117</span>        this.serviceManager = manager;<a name="line.117"></a>
-<span class="sourceLineNo">118</span>    }<a name="line.118"></a>
-<span class="sourceLineNo">119</span><a name="line.119"></a>
-<span class="sourceLineNo">120</span>    /**<a name="line.120"></a>
-<span class="sourceLineNo">121</span>     * @see org.apache.avalon.framework.activity.Initializable#initialize()<a name="line.121"></a>
-<span class="sourceLineNo">122</span>     */<a name="line.122"></a>
-<span class="sourceLineNo">123</span>    @Override<a name="line.123"></a>
-<span class="sourceLineNo">124</span>    public void initialize() throws Exception<a name="line.124"></a>
-<span class="sourceLineNo">125</span>    {<a name="line.125"></a>
-<span class="sourceLineNo">126</span>        // instantiating a specific scheduler from a property file or properties<a name="line.126"></a>
-<span class="sourceLineNo">127</span>        StdSchedulerFactory schedulerFactory = new StdSchedulerFactory();<a name="line.127"></a>
-<span class="sourceLineNo">128</span>        if(this.quartzProperties != null)<a name="line.128"></a>
-<span class="sourceLineNo">129</span>        {<a name="line.129"></a>
-<span class="sourceLineNo">130</span>            getLogger().info("Pulling quartz configuration from the container XML configuration");<a name="line.130"></a>
-<span class="sourceLineNo">131</span>            schedulerFactory.initialize(this.quartzProperties);<a name="line.131"></a>
-<span class="sourceLineNo">132</span>        }<a name="line.132"></a>
-<span class="sourceLineNo">133</span>        else if(this.quartzPropertyFile != null)<a name="line.133"></a>
-<span class="sourceLineNo">134</span>        {<a name="line.134"></a>
-<span class="sourceLineNo">135</span>            getLogger().info("Pulling quartz configuration from the following property file : " + this.quartzPropertyFile);<a name="line.135"></a>
-<span class="sourceLineNo">136</span>            schedulerFactory.initialize(this.quartzPropertyFile);<a name="line.136"></a>
-<span class="sourceLineNo">137</span>        }<a name="line.137"></a>
-<span class="sourceLineNo">138</span>        else<a name="line.138"></a>
-<span class="sourceLineNo">139</span>        {<a name="line.139"></a>
-<span class="sourceLineNo">140</span>            getLogger().info("Using Quartz default configuration since no user-supplied configuration was found");<a name="line.140"></a>
-<span class="sourceLineNo">141</span>            schedulerFactory.initialize();<a name="line.141"></a>
-<span class="sourceLineNo">142</span>        }<a name="line.142"></a>
-<span class="sourceLineNo">143</span><a name="line.143"></a>
-<span class="sourceLineNo">144</span>        this.scheduler = schedulerFactory.getScheduler();<a name="line.144"></a>
-<span class="sourceLineNo">145</span><a name="line.145"></a>
-<span class="sourceLineNo">146</span>        // add this service instance as JobListener to allow basic monitoring<a name="line.146"></a>
-<span class="sourceLineNo">147</span>        getScheduler().getListenerManager().addJobListener(this, new ArrayList&lt;Matcher&lt;JobKey&gt;&gt;());<a name="line.147"></a>
-<span class="sourceLineNo">148</span>    }<a name="line.148"></a>
-<span class="sourceLineNo">149</span><a name="line.149"></a>
-<span class="sourceLineNo">150</span>    @Override<a name="line.150"></a>
-<span class="sourceLineNo">151</span>    public void start() throws Exception<a name="line.151"></a>
-<span class="sourceLineNo">152</span>    {<a name="line.152"></a>
-<span class="sourceLineNo">153</span>        getScheduler().start();<a name="line.153"></a>
-<span class="sourceLineNo">154</span><a name="line.154"></a>
-<span class="sourceLineNo">155</span>        if(getLogger().isInfoEnabled())<a name="line.155"></a>
-<span class="sourceLineNo">156</span>        {<a name="line.156"></a>
-<span class="sourceLineNo">157</span>            logSchedulerConfiguration();<a name="line.157"></a>
-<span class="sourceLineNo">158</span>        }<a name="line.158"></a>
-<span class="sourceLineNo">159</span><a name="line.159"></a>
-<span class="sourceLineNo">160</span>    }<a name="line.160"></a>
-<span class="sourceLineNo">161</span><a name="line.161"></a>
-<span class="sourceLineNo">162</span>    @Override<a name="line.162"></a>
-<span class="sourceLineNo">163</span>    public void stop() throws Exception<a name="line.163"></a>
-<span class="sourceLineNo">164</span>    {<a name="line.164"></a>
-<span class="sourceLineNo">165</span>        getScheduler().standby();<a name="line.165"></a>
-<span class="sourceLineNo">166</span>    }<a name="line.166"></a>
-<span class="sourceLineNo">167</span><a name="line.167"></a>
-<span class="sourceLineNo">168</span>    /**<a name="line.168"></a>
-<span class="sourceLineNo">169</span>     * @see org.apache.avalon.framework.activity.Disposable#dispose()<a name="line.169"></a>
-<span class="sourceLineNo">170</span>     */<a name="line.170"></a>
-<span class="sourceLineNo">171</span>    @Override<a name="line.171"></a>
-<span class="sourceLineNo">172</span>    public void dispose()<a name="line.172"></a>
-<span class="sourceLineNo">173</span>    {<a name="line.173"></a>
-<span class="sourceLineNo">174</span>        try<a name="line.174"></a>
-<span class="sourceLineNo">175</span>        {<a name="line.175"></a>
-<span class="sourceLineNo">176</span>            // shutdown() does not return until executing Jobs complete execution<a name="line.176"></a>
-<span class="sourceLineNo">177</span>            this.scheduler.shutdown(true);<a name="line.177"></a>
-<span class="sourceLineNo">178</span>        }<a name="line.178"></a>
-<span class="sourceLineNo">179</span>        catch (SchedulerException e)<a name="line.179"></a>
-<span class="sourceLineNo">180</span>        {<a name="line.180"></a>
-<span class="sourceLineNo">181</span>            this.getLogger().warn("Problem shutting down quartz scheduler ", e);<a name="line.181"></a>
-<span class="sourceLineNo">182</span>        }<a name="line.182"></a>
-<span class="sourceLineNo">183</span><a name="line.183"></a>
-<span class="sourceLineNo">184</span>        this.scheduler = null;<a name="line.184"></a>
-<span class="sourceLineNo">185</span>        this.serviceManager = null;<a name="line.185"></a>
-<span class="sourceLineNo">186</span>    }<a name="line.186"></a>
-<span class="sourceLineNo">187</span><a name="line.187"></a>
-<span class="sourceLineNo">188</span>    // === Service Interface Implementation =================================<a name="line.188"></a>
-<span class="sourceLineNo">189</span><a name="line.189"></a>
-<span class="sourceLineNo">190</span>    /**<a name="line.190"></a>
-<span class="sourceLineNo">191</span>     * @see org.apache.fulcrum.quartz.QuartzScheduler#getScheduler()<a name="line.191"></a>
-<span class="sourceLineNo">192</span>     */<a name="line.192"></a>
-<span class="sourceLineNo">193</span>    @Override<a name="line.193"></a>
-<span class="sourceLineNo">194</span>    public Scheduler getScheduler()<a name="line.194"></a>
-<span class="sourceLineNo">195</span>    {<a name="line.195"></a>
-<span class="sourceLineNo">196</span>        return scheduler;<a name="line.196"></a>
-<span class="sourceLineNo">197</span>    }<a name="line.197"></a>
-<span class="sourceLineNo">198</span><a name="line.198"></a>
-<span class="sourceLineNo">199</span>    /**<a name="line.199"></a>
-<span class="sourceLineNo">200</span>     * Calls getName() on jobListener<a name="line.200"></a>
-<span class="sourceLineNo">201</span>     *<a name="line.201"></a>
-<span class="sourceLineNo">202</span>     * @see org.quartz.JobListener#getName()<a name="line.202"></a>
-<span class="sourceLineNo">203</span>     */<a name="line.203"></a>
-<span class="sourceLineNo">204</span>    @Override<a name="line.204"></a>
-<span class="sourceLineNo">205</span>    public String getName()<a name="line.205"></a>
-<span class="sourceLineNo">206</span>    {<a name="line.206"></a>
-<span class="sourceLineNo">207</span>        return getClass().getName();<a name="line.207"></a>
-<span class="sourceLineNo">208</span>    }<a name="line.208"></a>
-<span class="sourceLineNo">209</span><a name="line.209"></a>
-<span class="sourceLineNo">210</span>    /**<a name="line.210"></a>
-<span class="sourceLineNo">211</span>     * Hook to support jobs implementing Avalon interface such as<a name="line.211"></a>
-<span class="sourceLineNo">212</span>     * LogEnabled and Serviceable.<a name="line.212"></a>
-<span class="sourceLineNo">213</span>     *<a name="line.213"></a>
-<span class="sourceLineNo">214</span>     * @see org.quartz.JobListener#jobToBeExecuted(org.quartz.JobExecutionContext)<a name="line.214"></a>
-<span class="sourceLineNo">215</span>     */<a name="line.215"></a>
-<span class="sourceLineNo">216</span>    @Override<a name="line.216"></a>
-<span class="sourceLineNo">217</span>    public void jobToBeExecuted(JobExecutionContext context)<a name="line.217"></a>
-<span class="sourceLineNo">218</span>    {<a name="line.218"></a>
-<span class="sourceLineNo">219</span>        Job job = context.getJobInstance();<a name="line.219"></a>
-<span class="sourceLineNo">220</span><a name="line.220"></a>
-<span class="sourceLineNo">221</span>        // inject a logger instance<a name="line.221"></a>
-<span class="sourceLineNo">222</span>        if(job instanceof LogEnabled)<a name="line.222"></a>
-<span class="sourceLineNo">223</span>        {<a name="line.223"></a>
-<span class="sourceLineNo">224</span>            ((LogEnabled) job).enableLogging(getLogger());<a name="line.224"></a>
-<span class="sourceLineNo">225</span>        }<a name="line.225"></a>
-<span class="sourceLineNo">226</span><a name="line.226"></a>
-<span class="sourceLineNo">227</span>        // inject a ServiceManager instance<a name="line.227"></a>
-<span class="sourceLineNo">228</span>        if (job instanceof Serviceable)<a name="line.228"></a>
-<span class="sourceLineNo">229</span>        {<a name="line.229"></a>
-<span class="sourceLineNo">230</span>            try<a name="line.230"></a>
-<span class="sourceLineNo">231</span>            {<a name="line.231"></a>
-<span class="sourceLineNo">232</span>                ((Serviceable) job).service(serviceManager);<a name="line.232"></a>
-<span class="sourceLineNo">233</span>            }<a name="line.233"></a>
-<span class="sourceLineNo">234</span>            catch (ServiceException e)<a name="line.234"></a>
-<span class="sourceLineNo">235</span>            {<a name="line.235"></a>
-<span class="sourceLineNo">236</span>                getLogger().error("Error servicing Job[" + job + "]", e);<a name="line.236"></a>
-<span class="sourceLineNo">237</span>            }<a name="line.237"></a>
-<span class="sourceLineNo">238</span>        }<a name="line.238"></a>
-<span class="sourceLineNo">239</span>    }<a name="line.239"></a>
-<span class="sourceLineNo">240</span><a name="line.240"></a>
-<span class="sourceLineNo">241</span>    /**<a name="line.241"></a>
-<span class="sourceLineNo">242</span>     * @see org.quartz.JobListener#jobWasExecuted(org.quartz.JobExecutionContext, org.quartz.JobExecutionException)<a name="line.242"></a>
-<span class="sourceLineNo">243</span>     */<a name="line.243"></a>
-<span class="sourceLineNo">244</span>    @Override<a name="line.244"></a>
-<span class="sourceLineNo">245</span>    public void jobWasExecuted(JobExecutionContext context, JobExecutionException ex)<a name="line.245"></a>
-<span class="sourceLineNo">246</span>    {<a name="line.246"></a>
-<span class="sourceLineNo">247</span>        if (ex != null)<a name="line.247"></a>
-<span class="sourceLineNo">248</span>        {<a name="line.248"></a>
-<span class="sourceLineNo">249</span>            String msg = "Executing the job '" + context.getJobDetail().getKey() + "' failed";<a name="line.249"></a>
-<span class="sourceLineNo">250</span>            getLogger().error(msg, ex.getCause());<a name="line.250"></a>
-<span class="sourceLineNo">251</span>        }<a name="line.251"></a>
-<span class="sourceLineNo">252</span>        else<a name="line.252"></a>
-<span class="sourceLineNo">253</span>        {<a name="line.253"></a>
-<span class="sourceLineNo">254</span>            if (getLogger().isDebugEnabled())<a name="line.254"></a>
-<span class="sourceLineNo">255</span>            {<a name="line.255"></a>
-<span class="sourceLineNo">256</span>                getLogger().debug("Executing the job '" + context.getJobDetail().getKey() + "' took " + context.getJobRunTime() + " ms");<a name="line.256"></a>
-<span class="sourceLineNo">257</span>            }<a name="line.257"></a>
-<span class="sourceLineNo">258</span>        }<a name="line.258"></a>
-<span class="sourceLineNo">259</span>    }<a name="line.259"></a>
-<span class="sourceLineNo">260</span><a name="line.260"></a>
-<span class="sourceLineNo">261</span>    /**<a name="line.261"></a>
-<span class="sourceLineNo">262</span>     * @see org.quartz.JobListener#jobExecutionVetoed(org.quartz.JobExecutionContext)<a name="line.262"></a>
-<span class="sourceLineNo">263</span>     */<a name="line.263"></a>
-<span class="sourceLineNo">264</span>    @Override<a name="line.264"></a>
-<span class="sourceLineNo">265</span>    public void jobExecutionVetoed(JobExecutionContext context)<a name="line.265"></a>
-<span class="sourceLineNo">266</span>    {<a name="line.266"></a>
-<span class="sourceLineNo">267</span>        // nothing to do<a name="line.267"></a>
-<span class="sourceLineNo">268</span>    }<a name="line.268"></a>
-<span class="sourceLineNo">269</span><a name="line.269"></a>
-<span class="sourceLineNo">270</span>    // === Service Implementation ===========================================<a name="line.270"></a>
-<span class="sourceLineNo">271</span>    /**<a name="line.271"></a>
-<span class="sourceLineNo">272</span>     * @throws SchedulerException generic exception<a name="line.272"></a>
-<span class="sourceLineNo">273</span>     */<a name="line.273"></a>
-<span class="sourceLineNo">274</span>    private void logSchedulerConfiguration() throws SchedulerException<a name="line.274"></a>
-<span class="sourceLineNo">275</span>    {<a name="line.275"></a>
-<span class="sourceLineNo">276</span>        for (String jobGroup : getScheduler().getJobGroupNames())<a name="line.276"></a>
-<span class="sourceLineNo">277</span>        {<a name="line.277"></a>
-<span class="sourceLineNo">278</span>            Set&lt;JobKey&gt; jobsInGroup = getScheduler().getJobKeys(GroupMatcher.jobGroupEquals(jobGroup));<a name="line.278"></a>
-<span class="sourceLineNo">279</span>            getLogger().info("Job Group: " + jobGroup + " contains the following number of jobs : " + jobsInGroup.size());<a name="line.279"></a>
-<span class="sourceLineNo">280</span>            for (JobKey jobKey : jobsInGroup)<a name="line.280"></a>
-<span class="sourceLineNo">281</span>            {<a name="line.281"></a>
-<span class="sourceLineNo">282</span>                StringBuilder buffer = new StringBuilder();<a name="line.282"></a>
-<span class="sourceLineNo">283</span>                JobDetail jobDetail = getScheduler().getJobDetail(jobKey);<a name="line.283"></a>
-<span class="sourceLineNo">284</span>                List&lt;? extends Trigger&gt; jobTriggers = getScheduler().getTriggersOfJob(jobKey);<a name="line.284"></a>
-<span class="sourceLineNo">285</span>                buffer.append(jobDetail.getKey());<a name="line.285"></a>
-<span class="sourceLineNo">286</span>                buffer.append(" =&gt; ");<a name="line.286"></a>
-<span class="sourceLineNo">287</span>                if(jobTriggers != null &amp;&amp; !jobTriggers.isEmpty())<a name="line.287"></a>
-<span class="sourceLineNo">288</span>                {<a name="line.288"></a>
-<span class="sourceLineNo">289</span>                    Trigger jt = jobTriggers.get(0);<a name="line.289"></a>
-<span class="sourceLineNo">290</span>                    buffer.append(jt.getKey());<a name="line.290"></a>
-<span class="sourceLineNo">291</span>                    buffer.append(" (");<a name="line.291"></a>
-<span class="sourceLineNo">292</span>                    buffer.append(jt.getNextFireTime());<a name="line.292"></a>
-<span class="sourceLineNo">293</span>                    buffer.append(")");<a name="line.293"></a>
-<span class="sourceLineNo">294</span>                }<a name="line.294"></a>
-<span class="sourceLineNo">295</span>                else<a name="line.295"></a>
-<span class="sourceLineNo">296</span>                {<a name="line.296"></a>
-<span class="sourceLineNo">297</span>                    buffer.append("no trigger defined");<a name="line.297"></a>
-<span class="sourceLineNo">298</span>                }<a name="line.298"></a>
-<span class="sourceLineNo">299</span><a name="line.299"></a>
-<span class="sourceLineNo">300</span>                getLogger().info(buffer.toString());<a name="line.300"></a>
-<span class="sourceLineNo">301</span>            }<a name="line.301"></a>
-<span class="sourceLineNo">302</span>        }<a name="line.302"></a>
-<span class="sourceLineNo">303</span>    }<a name="line.303"></a>
-<span class="sourceLineNo">304</span>}<a name="line.304"></a>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-</pre>
-</div>
-</body>
+<!DOCTYPE HTML>
+<html lang="de">
+<head>
+<title>Source code</title>
+<link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
+</head>
+<body>
+<main role="main">
+<div class="sourceContainer">
+<pre><span class="sourceLineNo">001</span><a id="line.1">package org.apache.fulcrum.quartz.impl;</a>
+<span class="sourceLineNo">002</span><a id="line.2"></a>
+<span class="sourceLineNo">003</span><a id="line.3">/*</a>
+<span class="sourceLineNo">004</span><a id="line.4"> * Licensed to the Apache Software Foundation (ASF) under one</a>
+<span class="sourceLineNo">005</span><a id="line.5"> * or more contributor license agreements.  See the NOTICE file</a>
+<span class="sourceLineNo">006</span><a id="line.6"> * distributed with this work for additional information</a>
+<span class="sourceLineNo">007</span><a id="line.7"> * regarding copyright ownership.  The ASF licenses this file</a>
+<span class="sourceLineNo">008</span><a id="line.8"> * to you under the Apache License, Version 2.0 (the</a>
+<span class="sourceLineNo">009</span><a id="line.9"> * "License"); you may not use this file except in compliance</a>
+<span class="sourceLineNo">010</span><a id="line.10"> * with the License.  You may obtain a copy of the License at</a>
+<span class="sourceLineNo">011</span><a id="line.11"> *</a>
+<span class="sourceLineNo">012</span><a id="line.12"> *   http://www.apache.org/licenses/LICENSE-2.0</a>
+<span class="sourceLineNo">013</span><a id="line.13"> *</a>
+<span class="sourceLineNo">014</span><a id="line.14"> * Unless required by applicable law or agreed to in writing,</a>
+<span class="sourceLineNo">015</span><a id="line.15"> * software distributed under the License is distributed on an</a>
+<span class="sourceLineNo">016</span><a id="line.16"> * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY</a>
+<span class="sourceLineNo">017</span><a id="line.17"> * KIND, either express or implied.  See the License for the</a>
+<span class="sourceLineNo">018</span><a id="line.18"> * specific language governing permissions and limitations</a>
+<span class="sourceLineNo">019</span><a id="line.19"> * under the License.</a>
+<span class="sourceLineNo">020</span><a id="line.20"> */</a>
+<span class="sourceLineNo">021</span><a id="line.21"></a>
+<span class="sourceLineNo">022</span><a id="line.22"></a>
+<span class="sourceLineNo">023</span><a id="line.23">import java.util.ArrayList;</a>
+<span class="sourceLineNo">024</span><a id="line.24">import java.util.List;</a>
+<span class="sourceLineNo">025</span><a id="line.25">import java.util.Properties;</a>
+<span class="sourceLineNo">026</span><a id="line.26">import java.util.Set;</a>
+<span class="sourceLineNo">027</span><a id="line.27"></a>
+<span class="sourceLineNo">028</span><a id="line.28">import org.apache.avalon.framework.activity.Disposable;</a>
+<span class="sourceLineNo">029</span><a id="line.29">import org.apache.avalon.framework.activity.Initializable;</a>
+<span class="sourceLineNo">030</span><a id="line.30">import org.apache.avalon.framework.activity.Startable;</a>
+<span class="sourceLineNo">031</span><a id="line.31">import org.apache.avalon.framework.configuration.Configurable;</a>
+<span class="sourceLineNo">032</span><a id="line.32">import org.apache.avalon.framework.configuration.Configuration;</a>
+<span class="sourceLineNo">033</span><a id="line.33">import org.apache.avalon.framework.configuration.ConfigurationException;</a>
+<span class="sourceLineNo">034</span><a id="line.34">import org.apache.avalon.framework.logger.AbstractLogEnabled;</a>
+<span class="sourceLineNo">035</span><a id="line.35">import org.apache.avalon.framework.logger.LogEnabled;</a>
+<span class="sourceLineNo">036</span><a id="line.36">import org.apache.avalon.framework.parameters.Parameters;</a>
+<span class="sourceLineNo">037</span><a id="line.37">import org.apache.avalon.framework.service.ServiceException;</a>
+<span class="sourceLineNo">038</span><a id="line.38">import org.apache.avalon.framework.service.ServiceManager;</a>
+<span class="sourceLineNo">039</span><a id="line.39">import org.apache.avalon.framework.service.Serviceable;</a>
+<span class="sourceLineNo">040</span><a id="line.40">import org.apache.avalon.framework.thread.ThreadSafe;</a>
+<span class="sourceLineNo">041</span><a id="line.41">import org.apache.fulcrum.quartz.QuartzScheduler;</a>
+<span class="sourceLineNo">042</span><a id="line.42">import org.quartz.Job;</a>
+<span class="sourceLineNo">043</span><a id="line.43">import org.quartz.JobDetail;</a>
+<span class="sourceLineNo">044</span><a id="line.44">import org.quartz.JobExecutionContext;</a>
+<span class="sourceLineNo">045</span><a id="line.45">import org.quartz.JobExecutionException;</a>
+<span class="sourceLineNo">046</span><a id="line.46">import org.quartz.JobKey;</a>
+<span class="sourceLineNo">047</span><a id="line.47">import org.quartz.JobListener;</a>
+<span class="sourceLineNo">048</span><a id="line.48">import org.quartz.Matcher;</a>
+<span class="sourceLineNo">049</span><a id="line.49">import org.quartz.Scheduler;</a>
+<span class="sourceLineNo">050</span><a id="line.50">import org.quartz.SchedulerException;</a>
+<span class="sourceLineNo">051</span><a id="line.51">import org.quartz.Trigger;</a>
+<span class="sourceLineNo">052</span><a id="line.52">import org.quartz.impl.StdSchedulerFactory;</a>
+<span class="sourceLineNo">053</span><a id="line.53">import org.quartz.impl.matchers.GroupMatcher;</a>
+<span class="sourceLineNo">054</span><a id="line.54"></a>
+<span class="sourceLineNo">055</span><a id="line.55">/**</a>
+<span class="sourceLineNo">056</span><a id="line.56"> * Avalon service  wrapping the QuartzScheduler.</a>
+<span class="sourceLineNo">057</span><a id="line.57"> */</a>
+<span class="sourceLineNo">058</span><a id="line.58">public class QuartzSchedulerImpl</a>
+<span class="sourceLineNo">059</span><a id="line.59">        extends AbstractLogEnabled</a>
+<span class="sourceLineNo">060</span><a id="line.60">        implements QuartzScheduler, Configurable, Serviceable, Disposable, Initializable, ThreadSafe, JobListener, Startable</a>
+<span class="sourceLineNo">061</span><a id="line.61">{</a>
+<span class="sourceLineNo">062</span><a id="line.62">    /** Configuration key */</a>
+<span class="sourceLineNo">063</span><a id="line.63">    private static final String CONFIG_CONFIGURATION = "configuration";</a>
+<span class="sourceLineNo">064</span><a id="line.64"></a>
+<span class="sourceLineNo">065</span><a id="line.65">    /** Configuration key */</a>
+<span class="sourceLineNo">066</span><a id="line.66">    private static final String CONFIG_PROPERTY_FILE = "quartzPropertyFile";</a>
+<span class="sourceLineNo">067</span><a id="line.67"></a>
+<span class="sourceLineNo">068</span><a id="line.68">    /** Configuration key */</a>
+<span class="sourceLineNo">069</span><a id="line.69">    private static final String CONFIG_PROPERTIES = "properties";</a>
+<span class="sourceLineNo">070</span><a id="line.70"></a>
+<span class="sourceLineNo">071</span><a id="line.71">    /**</a>
+<span class="sourceLineNo">072</span><a id="line.72">     * the Avalon service serviceManager</a>
+<span class="sourceLineNo">073</span><a id="line.73">     */</a>
+<span class="sourceLineNo">074</span><a id="line.74">    private ServiceManager serviceManager;</a>
+<span class="sourceLineNo">075</span><a id="line.75"></a>
+<span class="sourceLineNo">076</span><a id="line.76">    /**</a>
+<span class="sourceLineNo">077</span><a id="line.77">     * the Quartz scheduler instance</a>
+<span class="sourceLineNo">078</span><a id="line.78">     */</a>
+<span class="sourceLineNo">079</span><a id="line.79">    private Scheduler scheduler;</a>
+<span class="sourceLineNo">080</span><a id="line.80"></a>
+<span class="sourceLineNo">081</span><a id="line.81">    /**</a>
+<span class="sourceLineNo">082</span><a id="line.82">     * the quartz property file</a>
+<span class="sourceLineNo">083</span><a id="line.83">     */</a>
+<span class="sourceLineNo">084</span><a id="line.84">    private String quartzPropertyFile;</a>
+<span class="sourceLineNo">085</span><a id="line.85"></a>
+<span class="sourceLineNo">086</span><a id="line.86">    /**</a>
+<span class="sourceLineNo">087</span><a id="line.87">     * the quartz properties loaded from the XML configuration</a>
+<span class="sourceLineNo">088</span><a id="line.88">     */</a>
+<span class="sourceLineNo">089</span><a id="line.89">    private Properties quartzProperties;</a>
+<span class="sourceLineNo">090</span><a id="line.90"></a>
+<span class="sourceLineNo">091</span><a id="line.91">    // === Avalon Lifecycle =================================================</a>
+<span class="sourceLineNo">092</span><a id="line.92"></a>
+<span class="sourceLineNo">093</span><a id="line.93">    /**</a>
+<span class="sourceLineNo">094</span><a id="line.94">     * @see org.apache.avalon.framework.configuration.Configurable#configure(org.apache.avalon.framework.configuration.Configuration)</a>
+<span class="sourceLineNo">095</span><a id="line.95">     */</a>
+<span class="sourceLineNo">096</span><a id="line.96">    @Override</a>
+<span class="sourceLineNo">097</span><a id="line.97">    public void configure(Configuration conf) throws ConfigurationException</a>
+<span class="sourceLineNo">098</span><a id="line.98">    {</a>
+<span class="sourceLineNo">099</span><a id="line.99">        Configuration quartzConf = conf.getChild(CONFIG_CONFIGURATION, true);</a>
+<span class="sourceLineNo">100</span><a id="line.100"></a>
+<span class="sourceLineNo">101</span><a id="line.101">        if(quartzConf.getChild(CONFIG_PROPERTIES, false) != null)</a>
+<span class="sourceLineNo">102</span><a id="line.102">        {</a>
+<span class="sourceLineNo">103</span><a id="line.103">            this.quartzProperties = Parameters.toProperties(Parameters.fromConfiguration(quartzConf.getChild(CONFIG_PROPERTIES)));</a>
+<span class="sourceLineNo">104</span><a id="line.104">        }</a>
+<span class="sourceLineNo">105</span><a id="line.105">        else if(quartzConf.getChild(CONFIG_PROPERTY_FILE, false) != null)</a>
+<span class="sourceLineNo">106</span><a id="line.106">        {</a>
+<span class="sourceLineNo">107</span><a id="line.107">            this.quartzPropertyFile = quartzConf.getChild(CONFIG_PROPERTY_FILE).getValue();</a>
+<span class="sourceLineNo">108</span><a id="line.108">        }</a>
+<span class="sourceLineNo">109</span><a id="line.109">    }</a>
+<span class="sourceLineNo">110</span><a id="line.110"></a>
+<span class="sourceLineNo">111</span><a id="line.111">    /**</a>
+<span class="sourceLineNo">112</span><a id="line.112">     * @see org.apache.avalon.framework.service.Serviceable#service(org.apache.avalon.framework.service.ServiceManager)</a>
+<span class="sourceLineNo">113</span><a id="line.113">     */</a>
+<span class="sourceLineNo">114</span><a id="line.114">    @Override</a>
+<span class="sourceLineNo">115</span><a id="line.115">    public void service(ServiceManager manager) throws ServiceException</a>
+<span class="sourceLineNo">116</span><a id="line.116">    {</a>
+<span class="sourceLineNo">117</span><a id="line.117">        this.serviceManager = manager;</a>
+<span class="sourceLineNo">118</span><a id="line.118">    }</a>
+<span class="sourceLineNo">119</span><a id="line.119"></a>
+<span class="sourceLineNo">120</span><a id="line.120">    /**</a>
+<span class="sourceLineNo">121</span><a id="line.121">     * @see org.apache.avalon.framework.activity.Initializable#initialize()</a>
+<span class="sourceLineNo">122</span><a id="line.122">     */</a>
+<span class="sourceLineNo">123</span><a id="line.123">    @Override</a>
+<span class="sourceLineNo">124</span><a id="line.124">    public void initialize() throws Exception</a>
+<span class="sourceLineNo">125</span><a id="line.125">    {</a>
+<span class="sourceLineNo">126</span><a id="line.126">        // instantiating a specific scheduler from a property file or properties</a>
+<span class="sourceLineNo">127</span><a id="line.127">        StdSchedulerFactory schedulerFactory = new StdSchedulerFactory();</a>
+<span class="sourceLineNo">128</span><a id="line.128">        if(this.quartzProperties != null)</a>
+<span class="sourceLineNo">129</span><a id="line.129">        {</a>
+<span class="sourceLineNo">130</span><a id="line.130">            getLogger().info("Pulling quartz configuration from the container XML configuration");</a>
+<span class="sourceLineNo">131</span><a id="line.131">            schedulerFactory.initialize(this.quartzProperties);</a>
+<span class="sourceLineNo">132</span><a id="line.132">        }</a>
+<span class="sourceLineNo">133</span><a id="line.133">        else if(this.quartzPropertyFile != null)</a>
+<span class="sourceLineNo">134</span><a id="line.134">        {</a>
+<span class="sourceLineNo">135</span><a id="line.135">            getLogger().info("Pulling quartz configuration from the following property file : " + this.quartzPropertyFile);</a>
+<span class="sourceLineNo">136</span><a id="line.136">            schedulerFactory.initialize(this.quartzPropertyFile);</a>
+<span class="sourceLineNo">137</span><a id="line.137">        }</a>
+<span class="sourceLineNo">138</span><a id="line.138">        else</a>
+<span class="sourceLineNo">139</span><a id="line.139">        {</a>
+<span class="sourceLineNo">140</span><a id="line.140">            getLogger().info("Using Quartz default configuration since no user-supplied configuration was found");</a>
+<span class="sourceLineNo">141</span><a id="line.141">            schedulerFactory.initialize();</a>
+<span class="sourceLineNo">142</span><a id="line.142">        }</a>
+<span class="sourceLineNo">143</span><a id="line.143"></a>
+<span class="sourceLineNo">144</span><a id="line.144">        this.scheduler = schedulerFactory.getScheduler();</a>
+<span class="sourceLineNo">145</span><a id="line.145"></a>
+<span class="sourceLineNo">146</span><a id="line.146">        // add this service instance as JobListener to allow basic monitoring</a>
+<span class="sourceLineNo">147</span><a id="line.147">        getScheduler().getListenerManager().addJobListener(this, new ArrayList&lt;Matcher&lt;JobKey&gt;&gt;());</a>
+<span class="sourceLineNo">148</span><a id="line.148">    }</a>
+<span class="sourceLineNo">149</span><a id="line.149"></a>
+<span class="sourceLineNo">150</span><a id="line.150">    @Override</a>
+<span class="sourceLineNo">151</span><a id="line.151">    public void start() throws Exception</a>
+<span class="sourceLineNo">152</span><a id="line.152">    {</a>
+<span class="sourceLineNo">153</span><a id="line.153">        getScheduler().start();</a>
+<span class="sourceLineNo">154</span><a id="line.154"></a>
+<span class="sourceLineNo">155</span><a id="line.155">        if(getLogger().isInfoEnabled())</a>
+<span class="sourceLineNo">156</span><a id="line.156">        {</a>
+<span class="sourceLineNo">157</span><a id="line.157">            logSchedulerConfiguration();</a>
+<span class="sourceLineNo">158</span><a id="line.158">        }</a>
+<span class="sourceLineNo">159</span><a id="line.159"></a>
+<span class="sourceLineNo">160</span><a id="line.160">    }</a>
+<span class="sourceLineNo">161</span><a id="line.161"></a>
+<span class="sourceLineNo">162</span><a id="line.162">    @Override</a>
+<span class="sourceLineNo">163</span><a id="line.163">    public void stop() throws Exception</a>
+<span class="sourceLineNo">164</span><a id="line.164">    {</a>
+<span class="sourceLineNo">165</span><a id="line.165">        getScheduler().standby();</a>
+<span class="sourceLineNo">166</span><a id="line.166">    }</a>
+<span class="sourceLineNo">167</span><a id="line.167"></a>
+<span class="sourceLineNo">168</span><a id="line.168">    /**</a>
+<span class="sourceLineNo">169</span><a id="line.169">     * @see org.apache.avalon.framework.activity.Disposable#dispose()</a>
+<span class="sourceLineNo">170</span><a id="line.170">     */</a>
+<span class="sourceLineNo">171</span><a id="line.171">    @Override</a>
+<span class="sourceLineNo">172</span><a id="line.172">    public void dispose()</a>
+<span class="sourceLineNo">173</span><a id="line.173">    {</a>
+<span class="sourceLineNo">174</span><a id="line.174">        try</a>
+<span class="sourceLineNo">175</span><a id="line.175">        {</a>
+<span class="sourceLineNo">176</span><a id="line.176">            // shutdown() does not return until executing Jobs complete execution</a>
+<span class="sourceLineNo">177</span><a id="line.177">            this.scheduler.shutdown(true);</a>
+<span class="sourceLineNo">178</span><a id="line.178">        }</a>
+<span class="sourceLineNo">179</span><a id="line.179">        catch (SchedulerException e)</a>
+<span class="sourceLineNo">180</span><a id="line.180">        {</a>
+<span class="sourceLineNo">181</span><a id="line.181">            this.getLogger().warn("Problem shutting down quartz scheduler ", e);</a>
+<span class="sourceLineNo">182</span><a id="line.182">        }</a>
+<span class="sourceLineNo">183</span><a id="line.183"></a>
+<span class="sourceLineNo">184</span><a id="line.184">        this.scheduler = null;</a>
+<span class="sourceLineNo">185</span><a id="line.185">        this.serviceManager = null;</a>
+<span class="sourceLineNo">186</span><a id="line.186">    }</a>
+<span class="sourceLineNo">187</span><a id="line.187"></a>
+<span class="sourceLineNo">188</span><a id="line.188">    // === Service Interface Implementation =================================</a>
+<span class="sourceLineNo">189</span><a id="line.189"></a>
+<span class="sourceLineNo">190</span><a id="line.190">    /**</a>
+<span class="sourceLineNo">191</span><a id="line.191">     * @see org.apache.fulcrum.quartz.QuartzScheduler#getScheduler()</a>
+<span class="sourceLineNo">192</span><a id="line.192">     */</a>
+<span class="sourceLineNo">193</span><a id="line.193">    @Override</a>
+<span class="sourceLineNo">194</span><a id="line.194">    public Scheduler getScheduler()</a>
+<span class="sourceLineNo">195</span><a id="line.195">    {</a>
+<span class="sourceLineNo">196</span><a id="line.196">        return scheduler;</a>
+<span class="sourceLineNo">197</span><a id="line.197">    }</a>
+<span class="sourceLineNo">198</span><a id="line.198"></a>
+<span class="sourceLineNo">199</span><a id="line.199">    /**</a>
+<span class="sourceLineNo">200</span><a id="line.200">     * Calls getName() on jobListener</a>
+<span class="sourceLineNo">201</span><a id="line.201">     *</a>
+<span class="sourceLineNo">202</span><a id="line.202">     * @see org.quartz.JobListener#getName()</a>
+<span class="sourceLineNo">203</span><a id="line.203">     */</a>
+<span class="sourceLineNo">204</span><a id="line.204">    @Override</a>
+<span class="sourceLineNo">205</span><a id="line.205">    public String getName()</a>
+<span class="sourceLineNo">206</span><a id="line.206">    {</a>
+<span class="sourceLineNo">207</span><a id="line.207">        return getClass().getName();</a>
+<span class="sourceLineNo">208</span><a id="line.208">    }</a>
+<span class="sourceLineNo">209</span><a id="line.209"></a>
+<span class="sourceLineNo">210</span><a id="line.210">    /**</a>
+<span class="sourceLineNo">211</span><a id="line.211">     * Hook to support jobs implementing Avalon interface such as</a>
+<span class="sourceLineNo">212</span><a id="line.212">     * LogEnabled and Serviceable.</a>
+<span class="sourceLineNo">213</span><a id="line.213">     *</a>
+<span class="sourceLineNo">214</span><a id="line.214">     * @see org.quartz.JobListener#jobToBeExecuted(org.quartz.JobExecutionContext)</a>
+<span class="sourceLineNo">215</span><a id="line.215">     */</a>
+<span class="sourceLineNo">216</span><a id="line.216">    @Override</a>
+<span class="sourceLineNo">217</span><a id="line.217">    public void jobToBeExecuted(JobExecutionContext context)</a>
+<span class="sourceLineNo">218</span><a id="line.218">    {</a>
+<span class="sourceLineNo">219</span><a id="line.219">        Job job = context.getJobInstance();</a>
+<span class="sourceLineNo">220</span><a id="line.220"></a>
+<span class="sourceLineNo">221</span><a id="line.221">        // inject a logger instance</a>
+<span class="sourceLineNo">222</span><a id="line.222">        if(job instanceof LogEnabled)</a>
+<span class="sourceLineNo">223</span><a id="line.223">        {</a>
+<span class="sourceLineNo">224</span><a id="line.224">            ((LogEnabled) job).enableLogging(getLogger());</a>
+<span class="sourceLineNo">225</span><a id="line.225">        }</a>
+<span class="sourceLineNo">226</span><a id="line.226"></a>
+<span class="sourceLineNo">227</span><a id="line.227">        // inject a ServiceManager instance</a>
+<span class="sourceLineNo">228</span><a id="line.228">        if (job instanceof Serviceable)</a>
+<span class="sourceLineNo">229</span><a id="line.229">        {</a>
+<span class="sourceLineNo">230</span><a id="line.230">            try</a>
+<span class="sourceLineNo">231</span><a id="line.231">            {</a>
+<span class="sourceLineNo">232</span><a id="line.232">                ((Serviceable) job).service(serviceManager);</a>
+<span class="sourceLineNo">233</span><a id="line.233">            }</a>
+<span class="sourceLineNo">234</span><a id="line.234">            catch (ServiceException e)</a>
+<span class="sourceLineNo">235</span><a id="line.235">            {</a>
+<span class="sourceLineNo">236</span><a id="line.236">                getLogger().error("Error servicing Job[" + job + "]", e);</a>
+<span class="sourceLineNo">237</span><a id="line.237">            }</a>
+<span class="sourceLineNo">238</span><a id="line.238">        }</a>
+<span class="sourceLineNo">239</span><a id="line.239">    }</a>
+<span class="sourceLineNo">240</span><a id="line.240"></a>
+<span class="sourceLineNo">241</span><a id="line.241">    /**</a>
+<span class="sourceLineNo">242</span><a id="line.242">     * @see org.quartz.JobListener#jobWasExecuted(org.quartz.JobExecutionContext, org.quartz.JobExecutionException)</a>
+<span class="sourceLineNo">243</span><a id="line.243">     */</a>
+<span class="sourceLineNo">244</span><a id="line.244">    @Override</a>
+<span class="sourceLineNo">245</span><a id="line.245">    public void jobWasExecuted(JobExecutionContext context, JobExecutionException ex)</a>
+<span class="sourceLineNo">246</span><a id="line.246">    {</a>
+<span class="sourceLineNo">247</span><a id="line.247">        if (ex != null)</a>
+<span class="sourceLineNo">248</span><a id="line.248">        {</a>
+<span class="sourceLineNo">249</span><a id="line.249">            String msg = "Executing the job '" + context.getJobDetail().getKey() + "' failed";</a>
+<span class="sourceLineNo">250</span><a id="line.250">            getLogger().error(msg, ex.getCause());</a>
+<span class="sourceLineNo">251</span><a id="line.251">        }</a>
+<span class="sourceLineNo">252</span><a id="line.252">        else</a>
+<span class="sourceLineNo">253</span><a id="line.253">        {</a>
+<span class="sourceLineNo">254</span><a id="line.254">            if (getLogger().isDebugEnabled())</a>
+<span class="sourceLineNo">255</span><a id="line.255">            {</a>
+<span class="sourceLineNo">256</span><a id="line.256">                getLogger().debug("Executing the job '" + context.getJobDetail().getKey() + "' took " + context.getJobRunTime() + " ms");</a>
+<span class="sourceLineNo">257</span><a id="line.257">            }</a>
+<span class="sourceLineNo">258</span><a id="line.258">        }</a>
+<span class="sourceLineNo">259</span><a id="line.259">    }</a>
+<span class="sourceLineNo">260</span><a id="line.260"></a>
+<span class="sourceLineNo">261</span><a id="line.261">    /**</a>
+<span class="sourceLineNo">262</span><a id="line.262">     * @see org.quartz.JobListener#jobExecutionVetoed(org.quartz.JobExecutionContext)</a>
+<span class="sourceLineNo">263</span><a id="line.263">     */</a>
+<span class="sourceLineNo">264</span><a id="line.264">    @Override</a>
+<span class="sourceLineNo">265</span><a id="line.265">    public void jobExecutionVetoed(JobExecutionContext context)</a>
+<span class="sourceLineNo">266</span><a id="line.266">    {</a>
+<span class="sourceLineNo">267</span><a id="line.267">        // nothing to do</a>
+<span class="sourceLineNo">268</span><a id="line.268">    }</a>
+<span class="sourceLineNo">269</span><a id="line.269"></a>
+<span class="sourceLineNo">270</span><a id="line.270">    // === Service Implementation ===========================================</a>
+<span class="sourceLineNo">271</span><a id="line.271">    /**</a>
+<span class="sourceLineNo">272</span><a id="line.272">     * @throws SchedulerException generic exception</a>
+<span class="sourceLineNo">273</span><a id="line.273">     */</a>
+<span class="sourceLineNo">274</span><a id="line.274">    private void logSchedulerConfiguration() throws SchedulerException</a>
+<span class="sourceLineNo">275</span><a id="line.275">    {</a>
+<span class="sourceLineNo">276</span><a id="line.276">        for (String jobGroup : getScheduler().getJobGroupNames())</a>
+<span class="sourceLineNo">277</span><a id="line.277">        {</a>
+<span class="sourceLineNo">278</span><a id="line.278">            Set&lt;JobKey&gt; jobsInGroup = getScheduler().getJobKeys(GroupMatcher.jobGroupEquals(jobGroup));</a>
+<span class="sourceLineNo">279</span><a id="line.279">            getLogger().info("Job Group: " + jobGroup + " contains the following number of jobs : " + jobsInGroup.size());</a>
+<span class="sourceLineNo">280</span><a id="line.280">            for (JobKey jobKey : jobsInGroup)</a>
+<span class="sourceLineNo">281</span><a id="line.281">            {</a>
+<span class="sourceLineNo">282</span><a id="line.282">                StringBuilder buffer = new StringBuilder();</a>
+<span class="sourceLineNo">283</span><a id="line.283">                JobDetail jobDetail = getScheduler().getJobDetail(jobKey);</a>
+<span class="sourceLineNo">284</span><a id="line.284">                List&lt;? extends Trigger&gt; jobTriggers = getScheduler().getTriggersOfJob(jobKey);</a>
+<span class="sourceLineNo">285</span><a id="line.285">                buffer.append(jobDetail.getKey());</a>
+<span class="sourceLineNo">286</span><a id="line.286">                buffer.append(" =&gt; ");</a>
+<span class="sourceLineNo">287</span><a id="line.287">                if(jobTriggers != null &amp;&amp; !jobTriggers.isEmpty())</a>
+<span class="sourceLineNo">288</span><a id="line.288">                {</a>
+<span class="sourceLineNo">289</span><a id="line.289">                    Trigger jt = jobTriggers.get(0);</a>
+<span class="sourceLineNo">290</span><a id="line.290">                    buffer.append(jt.getKey());</a>
+<span class="sourceLineNo">291</span><a id="line.291">                    buffer.append(" (");</a>
+<span class="sourceLineNo">292</span><a id="line.292">                    buffer.append(jt.getNextFireTime());</a>
+<span class="sourceLineNo">293</span><a id="line.293">                    buffer.append(")");</a>
+<span class="sourceLineNo">294</span><a id="line.294">                }</a>
+<span class="sourceLineNo">295</span><a id="line.295">                else</a>
+<span class="sourceLineNo">296</span><a id="line.296">                {</a>
+<span class="sourceLineNo">297</span><a id="line.297">                    buffer.append("no trigger defined");</a>
+<span class="sourceLineNo">298</span><a id="line.298">                }</a>
+<span class="sourceLineNo">299</span><a id="line.299"></a>
+<span class="sourceLineNo">300</span><a id="line.300">                getLogger().info(buffer.toString());</a>
+<span class="sourceLineNo">301</span><a id="line.301">            }</a>
+<span class="sourceLineNo">302</span><a id="line.302">        }</a>
+<span class="sourceLineNo">303</span><a id="line.303">    }</a>
+<span class="sourceLineNo">304</span><a id="line.304">}</a>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+</pre>
+</div>
+</main>
+</body>
 </html>
\ No newline at end of file