Added: felix/trunk/ipojo/handler/whiteboard/whiteboard-handler/doc/white-board-pattern-handler_files/shCore.js URL: http://svn.apache.org/viewvc/felix/trunk/ipojo/handler/whiteboard/whiteboard-handler/doc/white-board-pattern-handler_files/shCore.js?rev=1454063&view=auto ============================================================================== --- felix/trunk/ipojo/handler/whiteboard/whiteboard-handler/doc/white-board-pattern-handler_files/shCore.js (added) +++ felix/trunk/ipojo/handler/whiteboard/whiteboard-handler/doc/white-board-pattern-handler_files/shCore.js Thu Mar 7 20:00:30 2013 @@ -0,0 +1,622 @@ +/** + * Code Syntax Highlighter. + * Version 1.3.0 + * Copyright (C) 2004 Alex Gorbatchev. + * http://www.dreamprojections.com/syntaxhighlighter/ + * + * This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General + * Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) + * any later version. + * + * This library 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 Lesser General Public License for more + * details. + * + * You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to + * the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +// +// create namespaces +// +var dp = { + sh : // dp.sh + { + Utils : {}, // dp.sh.Utils + Brushes : {}, // dp.sh.Brushes + Strings : {}, + Version : '1.3.0' + } +}; + +dp.sh.Strings = { + AboutDialog : '<html><head><title>About...</title></head><body class="dp-about"><table cellspacing="0"><tr><td class="copy"><p class="title">dp.SyntaxHighlighter</div><div class="para">Version: {V}</p><p><a href="http://www.dreamprojections.com/syntaxhighlighter/?ref=about" target="_blank">http://www.dreamprojections.com/SyntaxHighlighter</a></p>©2004-2005 Alex Gorbatchev. All right reserved.</td></tr><tr><td class="footer"><input type="button" class="close" value="OK" onClick="window.close()"/></td></tr></table></body></html>', + + // tools + ExpandCode : '+ expand code', + ViewPlain : 'view plain', + Print : 'print', + CopyToClipboard : 'copy to clipboard', + About : '?', + + CopiedToClipboard : 'The code is in your clipboard now.' +}; + +dp.SyntaxHighlighter = dp.sh; + +// +// Dialog and toolbar functions +// + +dp.sh.Utils.Expand = function(sender) +{ + var table = sender; + var span = sender; + + // find the span in which the text label and pipe contained so we can hide it + while(span != null && span.tagName != 'SPAN') + span = span.parentNode; + + // find the table + while(table != null && table.tagName != 'TABLE') + table = table.parentNode; + + // remove the 'expand code' button + span.parentNode.removeChild(span); + + table.tBodies[0].className = 'show'; + table.parentNode.style.height = '100%'; // containing div isn't getting updated properly when the TBODY is shown +} + +// opens a new windows and puts the original unformatted source code inside. +dp.sh.Utils.ViewSource = function(sender) +{ + var code = sender.parentNode.originalCode; + var wnd = window.open('', '_blank', 'width=750, height=400, location=0, resizable=1, menubar=0, scrollbars=1'); + + code = code.replace(/</g, '<'); + + wnd.document.write('<pre>' + code + '</pre>'); + wnd.document.close(); +} + +// copies the original source code in to the clipboard (IE only) +dp.sh.Utils.ToClipboard = function(sender) +{ + var code = sender.parentNode.originalCode; + + // This works only for IE. There's a way to make it work with Mozilla as well, + // but it requires security settings changed on the client, which isn't by + // default, so 99% of users won't have it working anyways. + if(window.clipboardData) + { + window.clipboardData.setData('text', code); + + alert(dp.sh.Strings.CopiedToClipboard); + } +} + +// creates an invisible iframe, puts the original source code inside and prints it +dp.sh.Utils.PrintSource = function(sender) +{ + var td = sender.parentNode; + var code = td.processedCode; + var iframe = document.createElement('IFRAME'); + var doc = null; + var wnd = + + // this hides the iframe + iframe.style.cssText = 'position:absolute; width:0px; height:0px; left:-5px; top:-5px;'; + + td.appendChild(iframe); + + doc = iframe.contentWindow.document; + code = code.replace(/</g, '<'); + + doc.open(); + doc.write('<pre>' + code + '</pre>'); + doc.close(); + + iframe.contentWindow.focus(); + iframe.contentWindow.print(); + + td.removeChild(iframe); +} + +dp.sh.Utils.About = function() +{ + var wnd = window.open('', '_blank', 'dialog,width=320,height=150,scrollbars=0'); + var doc = wnd.document; + + var styles = document.getElementsByTagName('style'); + var links = document.getElementsByTagName('link'); + + doc.write(dp.sh.Strings.AboutDialog.replace('{V}', dp.sh.Version)); + + // copy over ALL the styles from the parent page + for(var i = 0; i < styles.length; i++) + doc.write('<style>' + styles[i].innerHTML + '</style>'); + + for(var i = 0; i < links.length; i++) + if(links[i].rel.toLowerCase() == 'stylesheet') + doc.write('<link type="text/css" rel="stylesheet" href="' + links[i].href + '"></link>'); + + doc.close(); + wnd.focus(); +} + +// +// Match object +// +dp.sh.Match = function(value, index, css) +{ + this.value = value; + this.index = index; + this.length = value.length; + this.css = css; +} + +// +// Highlighter object +// +dp.sh.Highlighter = function() +{ + this.addGutter = true; + this.addControls = true; + this.collapse = false; + this.tabsToSpaces = true; +} + +// static callback for the match sorting +dp.sh.Highlighter.SortCallback = function(m1, m2) +{ + // sort matches by index first + if(m1.index < m2.index) + return -1; + else if(m1.index > m2.index) + return 1; + else + { + // if index is the same, sort by length + if(m1.length < m2.length) + return -1; + else if(m1.length > m2.length) + return 1; + } + return 0; +} + +// gets a list of all matches for a given regular expression +dp.sh.Highlighter.prototype.GetMatches = function(regex, css) +{ + var index = 0; + var match = null; + + while((match = regex.exec(this.code)) != null) + { + this.matches[this.matches.length] = new dp.sh.Match(match[0], match.index, css); + } +} + +dp.sh.Highlighter.prototype.AddBit = function(str, css) +{ + var span = document.createElement('span'); + + str = str.replace(/&/g, '&'); + str = str.replace(/ /g, ' '); + str = str.replace(/</g, '<'); + str = str.replace(/\n/gm, ' <br>'); + + // when adding a piece of code, check to see if it has line breaks in it + // and if it does, wrap individual line breaks with span tags + if(css != null) + { + var regex = new RegExp('<br>', 'gi'); + + if(regex.test(str)) + { + var lines = str.split(' <br>'); + + str = ''; + + for(var i = 0; i < lines.length; i++) + { + span = document.createElement('SPAN'); + span.className = css; + span.innerHTML = lines[i]; + + this.div.appendChild(span); + + // don't add a <BR> for the last line + if(i + 1 < lines.length) + this.div.appendChild(document.createElement('BR')); + } + } + else + { + span.className = css; + span.innerHTML = str; + this.div.appendChild(span); + } + } + else + { + span.innerHTML = str; + this.div.appendChild(span); + } +} + +// checks if one match is inside any other match +dp.sh.Highlighter.prototype.IsInside = function(match) +{ + if(match == null || match.length == 0) + return; + + for(var i = 0; i < this.matches.length; i++) + { + var c = this.matches[i]; + + if(c == null) + continue; + + if((match.index > c.index) && (match.index <= c.index + c.length)) + return true; + } + + return false; +} + +dp.sh.Highlighter.prototype.ProcessRegexList = function() +{ + for(var i = 0; i < this.regexList.length; i++) + this.GetMatches(this.regexList[i].regex, this.regexList[i].css); +} + +dp.sh.Highlighter.prototype.ProcessSmartTabs = function(code) +{ + var lines = code.split('\n'); + var result = ''; + var tabSize = 4; + var tab = '\t'; + + // This function inserts specified amount of spaces in the string + // where a tab is while removing that given tab. + function InsertSpaces(line, pos, count) + { + var left = line.substr(0, pos); + var right = line.substr(pos + 1, line.length); // pos + 1 will get rid of the tab + var spaces = ''; + + for(var i = 0; i < count; i++) + spaces += ' '; + + return left + spaces + right; + } + + // This function process one line for 'smart tabs' + function ProcessLine(line, tabSize) + { + if(line.indexOf(tab) == -1) + return line; + + var pos = 0; + + while((pos = line.indexOf(tab)) != -1) + { + // This is pretty much all there is to the 'smart tabs' logic. + // Based on the position within the line and size of a tab, + // calculate the amount of spaces we need to insert. + var spaces = tabSize - pos % tabSize; + + line = InsertSpaces(line, pos, spaces); + } + + return line; + } + + // Go through all the lines and do the 'smart tabs' magic. + for(var i = 0; i < lines.length; i++) + result += ProcessLine(lines[i], tabSize) + '\n'; + + return result; +} + +dp.sh.Highlighter.prototype.SwitchToTable = function() +{ + // thanks to Lachlan Donald from SitePoint.com for this <br/> tag fix. + var html = this.div.innerHTML.replace(/<(br)\/?>/gi, '\n'); + var lines = html.split('\n'); + var row = null; + var cell = null; + var tBody = null; + var html = ''; + var pipe = ' | '; + + // creates an anchor to a utility + function UtilHref(util, text) + { + return '<a href="#" onclick="dp.sh.Utils.' + util + '(this); return false;">' + text + '</a>'; + } + + tBody = document.createElement('TBODY'); // can be created and all others go to tBodies collection. + + this.table.appendChild(tBody); + + if(this.addGutter == true) + { + row = tBody.insertRow(-1); + cell = row.insertCell(-1); + cell.className = 'tools-corner'; + } + + if(this.addControls == true) + { + var tHead = document.createElement('THEAD'); // controls will be placed in here + this.table.appendChild(tHead); + + row = tHead.insertRow(-1); + + // add corner if there's a gutter + if(this.addGutter == true) + { + cell = row.insertCell(-1); + cell.className = 'tools-corner'; + } + + cell = row.insertCell(-1); + + // preserve some variables for the controls + cell.originalCode = this.originalCode; + cell.processedCode = this.code; + cell.className = 'tools'; + + if(this.collapse == true) + { + tBody.className = 'hide'; + cell.innerHTML += '<span><b>' + UtilHref('Expand', dp.sh.Strings.ExpandCode) + '</b>' + pipe + '</span>'; + } + + cell.innerHTML += UtilHref('ViewSource', dp.sh.Strings.ViewPlain) + pipe + UtilHref('PrintSource', dp.sh.Strings.Print); + + // IE has this clipboard object which is easy enough to use + if(window.clipboardData) + cell.innerHTML += pipe + UtilHref('ToClipboard', dp.sh.Strings.CopyToClipboard); + + cell.innerHTML += pipe + UtilHref('About', dp.sh.Strings.About); + } + + for(var i = 0, lineIndex = this.firstLine; i < lines.length - 1; i++, lineIndex++) + { + row = tBody.insertRow(-1); + + if(this.addGutter == true) + { + cell = row.insertCell(-1); + cell.className = 'gutter'; + cell.innerHTML = lineIndex; + } + + cell = row.insertCell(-1); + cell.className = 'line' + (i % 2 + 1); // uses .line1 and .line2 css styles for alternating lines + cell.innerHTML = lines[i]; + } + + this.div.innerHTML = ''; +} + +dp.sh.Highlighter.prototype.Highlight = function(code) +{ + function Trim(str) + { + return str.replace(/^\s*(.*?)[\s\n]*$/g, '$1'); + } + + function Chop(str) + { + return str.replace(/\n*$/, '').replace(/^\n*/, ''); + } + + function Unindent(str) + { + var lines = str.split('\n'); + var indents = new Array(); + var regex = new RegExp('^\\s*', 'g'); + var min = 1000; + + // go through every line and check for common number of indents + for(var i = 0; i < lines.length && min > 0; i++) + { + if(Trim(lines[i]).length == 0) + continue; + + var matches = regex.exec(lines[i]); + + if(matches != null && matches.length > 0) + min = Math.min(matches[0].length, min); + } + + // trim minimum common number of white space from the begining of every line + if(min > 0) + for(var i = 0; i < lines.length; i++) + lines[i] = lines[i].substr(min); + + return lines.join('\n'); + } + + // This function returns a portions of the string from pos1 to pos2 inclusive + function Copy(string, pos1, pos2) + { + return string.substr(pos1, pos2 - pos1); + } + + var pos = 0; + + this.originalCode = code; + this.code = Chop(Unindent(code)); + this.div = document.createElement('DIV'); + this.table = document.createElement('TABLE'); + this.matches = new Array(); + + if(this.CssClass != null) + this.table.className = this.CssClass; + + // replace tabs with spaces + if(this.tabsToSpaces == true) + this.code = this.ProcessSmartTabs(this.code); + + this.table.border = 0; + this.table.cellSpacing = 0; + this.table.cellPadding = 0; + + this.ProcessRegexList(); + + // if no matches found, add entire code as plain text + if(this.matches.length == 0) + { + this.AddBit(this.code, null); + this.SwitchToTable(); + return; + } + + // sort the matches + this.matches = this.matches.sort(dp.sh.Highlighter.SortCallback); + + // The following loop checks to see if any of the matches are inside + // of other matches. This process would get rid of highligting strings + // inside comments, keywords inside strings and so on. + for(var i = 0; i < this.matches.length; i++) + if(this.IsInside(this.matches[i])) + this.matches[i] = null; + + // Finally, go through the final list of matches and pull the all + // together adding everything in between that isn't a match. + for(var i = 0; i < this.matches.length; i++) + { + var match = this.matches[i]; + + if(match == null || match.length == 0) + continue; + + this.AddBit(Copy(this.code, pos, match.index), null); + this.AddBit(match.value, match.css); + + pos = match.index + match.length; + } + + this.AddBit(this.code.substr(pos), null); + + this.SwitchToTable(); +} + +dp.sh.Highlighter.prototype.GetKeywords = function(str) +{ + return '\\b' + str.replace(/ /g, '\\b|\\b') + '\\b'; +} + +// highlightes all elements identified by name and gets source code from specified property +dp.sh.HighlightAll = function(name, showGutter /* optional */, showControls /* optional */, collapseAll /* optional */, firstLine /* optional */) +{ + function FindValue() + { + var a = arguments; + + for(var i = 0; i < a.length; i++) + { + if(a[i] == null) + continue; + + if(typeof(a[i]) == 'string' && a[i] != '') + return a[i] + ''; + + if(typeof(a[i]) == 'object' && a[i].value != '') + return a[i].value + ''; + } + + return null; + } + + function IsOptionSet(value, list) + { + for(var i = 0; i < list.length; i++) + if(list[i] == value) + return true; + + return false; + } + + function GetOptionValue(name, list, defaultValue) + { + var regex = new RegExp('^' + name + '\\[(\\w+)\\]$', 'gi'); + var matches = null; + + for(var i = 0; i < list.length; i++) + if((matches = regex.exec(list[i])) != null) + return matches[1]; + + return defaultValue; + } + + var elements = document.getElementsByName(name); + var highlighter = null; + var registered = new Object(); + var propertyName = 'value'; + + // if no code blocks found, leave + if(elements == null) + return; + + // register all brushes + for(var brush in dp.sh.Brushes) + { + var aliases = dp.sh.Brushes[brush].Aliases; + + if(aliases == null) + continue; + + for(var i = 0; i < aliases.length; i++) + registered[aliases[i]] = brush; + } + + for(var i = 0; i < elements.length; i++) + { + var element = elements[i]; + var options = FindValue( + element.attributes['class'], element.className, + element.attributes['language'], element.language + ); + var language = ''; + + if(options == null) + continue; + + options = options.split(':'); + + language = options[0].toLowerCase(); + + if(registered[language] == null) + continue; + + // instantiate a brush + highlighter = new dp.sh.Brushes[registered[language]](); + + // hide the original element + element.style.display = 'none'; + + highlighter.addGutter = (showGutter == null) ? !IsOptionSet('nogutter', options) : showGutter; + highlighter.addControls = (showControls == null) ? !IsOptionSet('nocontrols', options) : showControls; + highlighter.collapse = (collapseAll == null) ? IsOptionSet('collapse', options) : collapseAll; + + // first line idea comes from Andrew Collington, thanks! + highlighter.firstLine = (firstLine == null) ? parseInt(GetOptionValue('firstline', options, 1)) : firstLine; + + highlighter.Highlight(element[propertyName]); + + // place the result table inside a div + var div = document.createElement('DIV'); + + div.className = 'dp-highlighter'; + div.appendChild(highlighter.table); + + element.parentNode.insertBefore(div, element); + } +}
Added: felix/trunk/ipojo/handler/whiteboard/whiteboard-handler/doc/white-board-pattern-handler_files/site.css URL: http://svn.apache.org/viewvc/felix/trunk/ipojo/handler/whiteboard/whiteboard-handler/doc/white-board-pattern-handler_files/site.css?rev=1454063&view=auto ============================================================================== --- felix/trunk/ipojo/handler/whiteboard/whiteboard-handler/doc/white-board-pattern-handler_files/site.css (added) +++ felix/trunk/ipojo/handler/whiteboard/whiteboard-handler/doc/white-board-pattern-handler_files/site.css Thu Mar 7 20:00:30 2013 @@ -0,0 +1,25 @@ +/* @override http://felix.apache.org/site/media.data/site.css */ + +body { background-color: #ffffff; color: #3b3b3b; font-family: Tahoma, Arial, sans-serif; font-size: 10pt; line-height: 140% } +h1, h2, h3, h4, h5, h6 { font-weight: normal; color: #000000; line-height: 100%; margin-top: 0px} +h1 { font-size: 200% } +h2 { font-size: 175% } +h3 { font-size: 150% } +h4 { font-size: 140% } +h5 { font-size: 130% } +h6 { font-size: 120% } +a { color: #1980af } +a:visited { color: #1980af } +a:hover { color: #1faae9 } +.title { position: absolute; left: 1px; right: 1px; top:25px; height: 81px; background: url(http://felix.apache.org/site/media.data/gradient.png) repeat-x; background-position: bottom; } +.logo { position: absolute; width: 15em; height: 81px; text-align: center; } +.header { text-align: right; margin-right: 20pt; margin-top: 30pt;} +.menu { border-top: 10px solid #f9bb00; position: absolute; top: 107px; left: 1px; width: 15em; bottom: 0px; padding: 0px; background-color: #fcfcfc } +.menu ul { background-color: #fdf5d9; list-style: none; padding-left: 4em; margin-top: 0px; padding-top: 2em; padding-bottom: 2em; margin-left: 0px; color: #4a4a43} +.menu a { text-decoration: none; color: #4a4a43 } +.main { position: absolute; border-top: 10px solid #cde0ea; top: 107px; left: 15em; right: 1px; margin-left: 2px; padding-right: 4em; padding-left: 1em; padding-top: 1em;} +.code { background-color: #eeeeee; border: solid 1px black; padding: 0.5em } +.code-keyword { color: #880000 } +.code-quote { color: #008800 } +.code-object { color: #0000dd } +.code-java { margin: 0em } \ No newline at end of file Added: felix/trunk/ipojo/handler/whiteboard/whiteboard-handler/doc/white-board-pattern-handler_files/superfish.js URL: http://svn.apache.org/viewvc/felix/trunk/ipojo/handler/whiteboard/whiteboard-handler/doc/white-board-pattern-handler_files/superfish.js?rev=1454063&view=auto ============================================================================== --- felix/trunk/ipojo/handler/whiteboard/whiteboard-handler/doc/white-board-pattern-handler_files/superfish.js (added) +++ felix/trunk/ipojo/handler/whiteboard/whiteboard-handler/doc/white-board-pattern-handler_files/superfish.js Thu Mar 7 20:00:30 2013 @@ -0,0 +1,121 @@ + +/* + * Superfish v1.4.8 - jQuery menu widget + * Copyright (c) 2008 Joel Birch + * + * Dual licensed under the MIT and GPL licenses: + * http://www.opensource.org/licenses/mit-license.php + * http://www.gnu.org/licenses/gpl.html + * + * CHANGELOG: http://users.tpg.com.au/j_birch/plugins/superfish/changelog.txt + */ + +;(function($){ + $.fn.superfish = function(op){ + + var sf = $.fn.superfish, + c = sf.c, + $arrow = $(['<span class="',c.arrowClass,'"> »</span>'].join('')), + over = function(){ + var $$ = $(this), menu = getMenu($$); + clearTimeout(menu.sfTimer); + $$.showSuperfishUl().siblings().hideSuperfishUl(); + }, + out = function(){ + var $$ = $(this), menu = getMenu($$), o = sf.op; + clearTimeout(menu.sfTimer); + menu.sfTimer=setTimeout(function(){ + o.retainPath=($.inArray($$[0],o.$path)>-1); + $$.hideSuperfishUl(); + if (o.$path.length && $$.parents(['li.',o.hoverClass].join('')).length<1){over.call(o.$path);} + },o.delay); + }, + getMenu = function($menu){ + var menu = $menu.parents(['ul.',c.menuClass,':first'].join(''))[0]; + sf.op = sf.o[menu.serial]; + return menu; + }, + addArrow = function($a){ $a.addClass(c.anchorClass).append($arrow.clone()); }; + + return this.each(function() { + var s = this.serial = sf.o.length; + var o = $.extend({},sf.defaults,op); + o.$path = $('li.'+o.pathClass,this).slice(0,o.pathLevels).each(function(){ + $(this).addClass([o.hoverClass,c.bcClass].join(' ')) + .filter('li:has(ul)').removeClass(o.pathClass); + }); + sf.o[s] = sf.op = o; + + $('li:has(ul)',this)[($.fn.hoverIntent && !o.disableHI) ? 'hoverIntent' : 'hover'](over,out).each(function() { + if (o.autoArrows) addArrow( $('>a:first-child',this) ); + }) + .not('.'+c.bcClass) + .hideSuperfishUl(); + + var $a = $('a',this); + $a.each(function(i){ + var $li = $a.eq(i).parents('li'); + $a.eq(i).focus(function(){over.call($li);}).blur(function(){out.call($li);}); + }); + o.onInit.call(this); + + }).each(function() { + var menuClasses = [c.menuClass]; + if (sf.op.dropShadows && !($.browser.msie && $.browser.version < 7)) menuClasses.push(c.shadowClass); + $(this).addClass(menuClasses.join(' ')); + }); + }; + + var sf = $.fn.superfish; + sf.o = []; + sf.op = {}; + sf.IE7fix = function(){ + var o = sf.op; + if ($.browser.msie && $.browser.version > 6 && o.dropShadows && o.animation.opacity!=undefined) + this.toggleClass(sf.c.shadowClass+'-off'); + }; + sf.c = { + bcClass : 'sf-breadcrumb', + menuClass : 'sf-js-enabled', + anchorClass : 'sf-with-ul', + arrowClass : 'sf-sub-indicator', + shadowClass : 'sf-shadow' + }; + sf.defaults = { + hoverClass : 'sfHover', + pathClass : 'overideThisToUse', + pathLevels : 1, + delay : 800, + animation : {opacity:'show'}, + speed : 'normal', + autoArrows : true, + dropShadows : true, + disableHI : false, // true disables hoverIntent detection + onInit : function(){}, // callback functions + onBeforeShow: function(){}, + onShow : function(){}, + onHide : function(){} + }; + $.fn.extend({ + hideSuperfishUl : function(){ + var o = sf.op, + not = (o.retainPath===true) ? o.$path : ''; + o.retainPath = false; + var $ul = $(['li.',o.hoverClass].join(''),this).add(this).not(not).removeClass(o.hoverClass) + .find('>ul').hide().css('visibility','hidden'); + o.onHide.call($ul); + return this; + }, + showSuperfishUl : function(){ + var o = sf.op, + sh = sf.c.shadowClass+'-off', + $ul = this.addClass(o.hoverClass) + .find('>ul:hidden').css('visibility','visible'); + sf.IE7fix.call($ul); + o.onBeforeShow.call($ul); + $ul.animate(o.animation,o.speed,function(){ sf.IE7fix.call($ul); o.onShow.call($ul); }); + return this; + } + }); + +})(jQuery); Added: felix/trunk/ipojo/handler/whiteboard/whiteboard-handler/doc/white-board-pattern-handler_files/supersubs.js URL: http://svn.apache.org/viewvc/felix/trunk/ipojo/handler/whiteboard/whiteboard-handler/doc/white-board-pattern-handler_files/supersubs.js?rev=1454063&view=auto ============================================================================== --- felix/trunk/ipojo/handler/whiteboard/whiteboard-handler/doc/white-board-pattern-handler_files/supersubs.js (added) +++ felix/trunk/ipojo/handler/whiteboard/whiteboard-handler/doc/white-board-pattern-handler_files/supersubs.js Thu Mar 7 20:00:30 2013 @@ -0,0 +1,90 @@ + +/* + * Supersubs v0.2b - jQuery plugin + * Copyright (c) 2008 Joel Birch + * + * Dual licensed under the MIT and GPL licenses: + * http://www.opensource.org/licenses/mit-license.php + * http://www.gnu.org/licenses/gpl.html + * + * + * This plugin automatically adjusts submenu widths of suckerfish-style menus to that of + * their longest list item children. If you use this, please expect bugs and report them + * to the jQuery Google Group with the word 'Superfish' in the subject line. + * + */ + +;(function($){ // $ will refer to jQuery within this closure + + $.fn.supersubs = function(options){ + var opts = $.extend({}, $.fn.supersubs.defaults, options); + // return original object to support chaining + return this.each(function() { + // cache selections + var $$ = $(this); + // support metadata + var o = $.meta ? $.extend({}, opts, $$.data()) : opts; + // get the font size of menu. + // .css('fontSize') returns various results cross-browser, so measure an em dash instead + var fontsize = $('<li id="menu-fontsize">—</li>').css({ + 'padding' : 0, + 'position' : 'absolute', + 'top' : '-999em', + 'width' : 'auto' + }).appendTo($$).width(); //clientWidth is faster, but was incorrect here + // remove em dash + $('#menu-fontsize').remove(); + // cache all ul elements + $ULs = $$.find('ul'); + // loop through each ul in menu + $ULs.each(function(i) { + // cache this ul + var $ul = $ULs.eq(i); + // get all (li) children of this ul + var $LIs = $ul.children(); + // get all anchor grand-children + var $As = $LIs.children('a'); + // force content to one line and save current float property + var liFloat = $LIs.css('white-space','nowrap').css('float'); + // remove width restrictions and floats so elements remain vertically stacked + var emWidth = $ul.add($LIs).add($As).css({ + 'float' : 'none', + 'width' : 'auto' + }) + // this ul will now be shrink-wrapped to longest li due to position:absolute + // so save its width as ems. Clientwidth is 2 times faster than .width() - thanks Dan Switzer + .end().end()[0].clientWidth / fontsize; + // add more width to ensure lines don't turn over at certain sizes in various browsers + emWidth += o.extraWidth; + // restrict to at least minWidth and at most maxWidth + if (emWidth > o.maxWidth) { emWidth = o.maxWidth; } + else if (emWidth < o.minWidth) { emWidth = o.minWidth; } + emWidth += 'em'; + // set ul to width in ems + $ul.css('width',emWidth); + // restore li floats to avoid IE bugs + // set li width to full width of this ul + // revert white-space to normal + $LIs.css({ + 'float' : liFloat, + 'width' : '100%', + 'white-space' : 'normal' + }) + // update offset position of descendant ul to reflect new width of parent + .each(function(){ + var $childUl = $('>ul',this); + var offsetDirection = $childUl.css('left')!==undefined ? 'left' : 'right'; + $childUl.css(offsetDirection,emWidth); + }); + }); + + }); + }; + // expose defaults + $.fn.supersubs.defaults = { + minWidth : 9, // requires em unit. + maxWidth : 25, // requires em unit. + extraWidth : 0 // extra width can ensure lines don't sometimes turn over due to slight browser differences in how they round-off values + }; + +})(jQuery); // plugin code ends Added: felix/trunk/ipojo/handler/whiteboard/whiteboard-handler/doc/white-board-pattern-handler_files/warning.gif URL: http://svn.apache.org/viewvc/felix/trunk/ipojo/handler/whiteboard/whiteboard-handler/doc/white-board-pattern-handler_files/warning.gif?rev=1454063&view=auto ============================================================================== Binary file - no diff available. Propchange: felix/trunk/ipojo/handler/whiteboard/whiteboard-handler/doc/white-board-pattern-handler_files/warning.gif ------------------------------------------------------------------------------ svn:mime-type = application/octet-stream Added: felix/trunk/ipojo/handler/whiteboard/whiteboard-handler/metadata.xml URL: http://svn.apache.org/viewvc/felix/trunk/ipojo/handler/whiteboard/whiteboard-handler/metadata.xml?rev=1454063&view=auto ============================================================================== --- felix/trunk/ipojo/handler/whiteboard/whiteboard-handler/metadata.xml (added) +++ felix/trunk/ipojo/handler/whiteboard/whiteboard-handler/metadata.xml Thu Mar 7 20:00:30 2013 @@ -0,0 +1,30 @@ +<!-- + Licensed to the Apache Software Foundation (ASF) under one + or more contributor license agreements. See the NOTICE file + distributed with this work for additional information + regarding copyright ownership. The ASF licenses this file + to you under the Apache License, Version 2.0 (the + "License"); you may not use this file except in compliance + with the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, + software distributed under the License is distributed on an + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + KIND, either express or implied. See the License for the + specific language governing permissions and limitations + under the License. +--> +<ipojo> + <handler + classname="org.apache.felix.ipojo.handler.wbp.WhiteBoardPatternHandler" + name="wbp" namespace="org.apache.felix.ipojo.whiteboard"> + </handler> + + <!-- Alternative handler for component using the @Whiteboards annotation --> + <handler + classname="org.apache.felix.ipojo.handler.wbp.WhiteBoardPatternHandler" + name="whiteboards" namespace="org.apache.felix.ipojo.whiteboard"> + </handler> +</ipojo> \ No newline at end of file Added: felix/trunk/ipojo/handler/whiteboard/whiteboard-handler/obr.xml URL: http://svn.apache.org/viewvc/felix/trunk/ipojo/handler/whiteboard/whiteboard-handler/obr.xml?rev=1454063&view=auto ============================================================================== --- felix/trunk/ipojo/handler/whiteboard/whiteboard-handler/obr.xml (added) +++ felix/trunk/ipojo/handler/whiteboard/whiteboard-handler/obr.xml Thu Mar 7 20:00:30 2013 @@ -0,0 +1,25 @@ +<!-- + Licensed to the Apache Software Foundation (ASF) under one + or more contributor license agreements. See the NOTICE file + distributed with this work for additional information + regarding copyright ownership. The ASF licenses this file + to you under the Apache License, Version 2.0 (the + "License"); you may not use this file except in compliance + with the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, + software distributed under the License is distributed on an + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + KIND, either express or implied. See the License for the + specific language governing permissions and limitations + under the License. +--> +<obr> + <capability name="ipojo.handler"> + <p n="name" v="wbp"/> + <p n="namespace" v="org.apache.felix.ipojo.whiteboard"/> + <p n="type" v="primitive"/> + </capability> +</obr> \ No newline at end of file Added: felix/trunk/ipojo/handler/whiteboard/whiteboard-handler/pom.xml URL: http://svn.apache.org/viewvc/felix/trunk/ipojo/handler/whiteboard/whiteboard-handler/pom.xml?rev=1454063&view=auto ============================================================================== --- felix/trunk/ipojo/handler/whiteboard/whiteboard-handler/pom.xml (added) +++ felix/trunk/ipojo/handler/whiteboard/whiteboard-handler/pom.xml Thu Mar 7 20:00:30 2013 @@ -0,0 +1,130 @@ +<!-- + Licensed to the Apache Software Foundation (ASF) under one + or more contributor license agreements. See the NOTICE file + distributed with this work for additional information + regarding copyright ownership. The ASF licenses this file + to you under the Apache License, Version 2.0 (the + "License"); you may not use this file except in compliance + with the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, + software distributed under the License is distributed on an + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + KIND, either express or implied. See the License for the + specific language governing permissions and limitations + under the License. +--> +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> + <parent> + <groupId>org.apache.felix</groupId> + <artifactId>felix-parent</artifactId> + <version>1.2.1</version> + <relativePath>../../../pom/pom.xml</relativePath> + </parent> + <modelVersion>4.0.0</modelVersion> + <packaging>bundle</packaging> + <name>Apache Felix iPOJO White Board Pattern Handler</name> + <artifactId>org.apache.felix.ipojo.handler.whiteboard</artifactId> + <groupId>org.apache.felix</groupId> + <version>1.6.1-SNAPSHOT</version> + + <description> + iPOJO extension to easily implement a white-board pattern (host). + </description> + <url> + http://felix.apache.org/site/white-board-pattern-handler.html + </url> + + <dependencies> + <dependency> + <groupId>org.apache.felix</groupId> + <artifactId>org.apache.felix.ipojo</artifactId> + <version>1.6.4</version> + </dependency> + <dependency> + <groupId>org.osgi</groupId> + <artifactId>org.osgi.core</artifactId> + <version>4.0.0</version> + </dependency> + </dependencies> + <build> + <plugins> + <plugin> + <groupId>org.apache.felix</groupId> + <artifactId>maven-bundle-plugin</artifactId> + <extensions>true</extensions> + <configuration> + <instructions> + <Bundle-Name>${project.name}</Bundle-Name> + <Bundle-SymbolicName>${project.artifactId}</Bundle-SymbolicName> + <Bundle-Vendor>The Apache Software Foundation</Bundle-Vendor> + <Bundle-Description>iPOJO White-Board Pattern Handler + </Bundle-Description> + <Bundle-DocURL> + http://felix.apache.org/site/white-board-pattern-handler.html + </Bundle-DocURL> + <Private-Package>org.apache.felix.ipojo.handler.wbp + </Private-Package> + <Bundle-Name>${project.name}</Bundle-Name> + <Include-Resource> + META-INF/LICENSE=LICENSE, + META-INF/NOTICE=NOTICE, + META-INF/DEPENDENCIES=DEPENDENCIES + </Include-Resource> + </instructions> + </configuration> + </plugin> + <plugin> + <groupId>org.apache.felix</groupId> + <artifactId>maven-ipojo-plugin</artifactId> + <version>1.6.0</version> + <executions> + <execution> + <goals> + <goal>ipojo-bundle</goal> + </goals> + <configuration> + <metadata>metadata.xml</metadata> + </configuration> + </execution> + </executions> + </plugin> + <plugin> + <groupId>org.codehaus.mojo</groupId> + <artifactId>rat-maven-plugin</artifactId> + <configuration> + <excludeSubProjects>false</excludeSubProjects> + <useEclipseDefaultExcludes>true</useEclipseDefaultExcludes> + <useMavenDefaultExcludes>true</useMavenDefaultExcludes> + <excludes> + <param>doc/**/*</param> + <param>maven-eclipse.xml</param> + <param>.checkstyle</param> + <param>.externalToolBuilders/*</param> + <param>LICENSE.asm</param> + </excludes> + </configuration> + </plugin> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-checkstyle-plugin</artifactId> + <configuration> + <enableRulesSummary>false</enableRulesSummary> + <violationSeverity>warning</violationSeverity> + <configLocation>http://felix.apache.org/ipojo/dev/checkstyle_ipojo.xml</configLocation> + </configuration> + </plugin> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-compiler-plugin</artifactId> + <configuration> + <target>1.5</target> + <source>1.5</source> + </configuration> + </plugin> + </plugins> + </build> +</project> Added: felix/trunk/ipojo/handler/whiteboard/whiteboard-handler/src/main/java/org/apache/felix/ipojo/handler/wbp/WhiteBoardManager.java URL: http://svn.apache.org/viewvc/felix/trunk/ipojo/handler/whiteboard/whiteboard-handler/src/main/java/org/apache/felix/ipojo/handler/wbp/WhiteBoardManager.java?rev=1454063&view=auto ============================================================================== --- felix/trunk/ipojo/handler/whiteboard/whiteboard-handler/src/main/java/org/apache/felix/ipojo/handler/wbp/WhiteBoardManager.java (added) +++ felix/trunk/ipojo/handler/whiteboard/whiteboard-handler/src/main/java/org/apache/felix/ipojo/handler/wbp/WhiteBoardManager.java Thu Mar 7 20:00:30 2013 @@ -0,0 +1,176 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.felix.ipojo.handler.wbp; + +import java.lang.reflect.InvocationTargetException; + +import org.apache.felix.ipojo.PrimitiveHandler; +import org.apache.felix.ipojo.util.Callback; +import org.apache.felix.ipojo.util.Tracker; +import org.apache.felix.ipojo.util.TrackerCustomizer; +import org.osgi.framework.Filter; +import org.osgi.framework.ServiceReference; + +/** + * Manage a white board pattern. + * @author <a href="mailto:[email protected]">Felix Project Team</a> + */ +public class WhiteBoardManager implements TrackerCustomizer { + + /** + * The monitored filter. + */ + private Filter m_filter; + + /** + * The onArrival method. + */ + private Callback m_onArrival; + + /** + * The onDeparture method. + */ + private Callback m_onDeparture; + + /** + * The onModify method. + */ + private Callback m_onModification; + + /** + * The service tracker. + */ + private Tracker m_tracker; + + /** + * The attached handler. + */ + private PrimitiveHandler m_handler; + + /** + * Constructor. + * @param handler the attached handler + * @param filter the monitored filter + * @param bind the onArrival method + * @param unbind the onDeparture method + * @param modification the onModify method + */ + public WhiteBoardManager(WhiteBoardPatternHandler handler, Filter filter, String bind, String unbind, String modification) { + m_handler = handler; + m_onArrival = new Callback(bind, new Class[] {ServiceReference.class}, false, m_handler.getInstanceManager()); + m_onDeparture = new Callback(unbind, new Class[] {ServiceReference.class}, false, m_handler.getInstanceManager()); + if (modification != null) { + m_onModification = new Callback(modification, new Class[] {ServiceReference.class}, false, m_handler.getInstanceManager()); + } + m_filter = filter; + m_tracker = new Tracker(handler.getInstanceManager().getContext(), m_filter, this); + } + + + + /** + * Opens the tracker. + */ + public void start() { + // Calling several times open is no-effect. + m_tracker.open(); + } + + /** + * Closes the tracker. + */ + public void stop() { + m_tracker.close(); + } + + /** + * A new service was added to the tracker. + * @param arg0 the service reference. + * @see org.apache.felix.ipojo.util.TrackerCustomizer#addedService(org.osgi.framework.ServiceReference) + */ + public void addedService(ServiceReference arg0) { + try { + m_onArrival.call(new Object[] {arg0}); + } catch (NoSuchMethodException e) { + m_handler.error("The onArrival method " + m_onArrival.getMethod() + " does not exist in the class", e); + m_handler.getInstanceManager().stop(); + } catch (IllegalAccessException e) { + m_handler.error("The onArrival method " + m_onArrival.getMethod() + " cannot be invoked", e); + m_handler.getInstanceManager().stop(); + } catch (InvocationTargetException e) { + m_handler.error("The onArrival method " + m_onArrival.getMethod() + " has thrown an exception", e.getTargetException()); + m_handler.getInstanceManager().stop(); + } + } + + /** + * A new service is detected. + * @param arg0 the service reference + * @return {@code true} to add the service. + * @see org.apache.felix.ipojo.util.TrackerCustomizer#addingService(org.osgi.framework.ServiceReference) + */ + public boolean addingService(ServiceReference arg0) { + return true; + } + + /** + * An existing service was modified. + * @param arg0 the service reference + * @param arg1 the service object (if already get) + * @see org.apache.felix.ipojo.util.TrackerCustomizer#modifiedService(org.osgi.framework.ServiceReference, java.lang.Object) + */ + public void modifiedService(ServiceReference arg0, Object arg1) { + if (m_onModification != null) { + try { + m_onModification.call(new Object[] {arg0}); + } catch (NoSuchMethodException e) { + m_handler.error("The onModification method " + m_onModification.getMethod() + " does not exist in the class", e); + m_handler.getInstanceManager().stop(); + } catch (IllegalAccessException e) { + m_handler.error("The onModification method " + m_onModification.getMethod() + " cannot be invoked", e); + m_handler.getInstanceManager().stop(); + } catch (InvocationTargetException e) { + m_handler.error("The onModification method " + m_onModification.getMethod() + " has thrown an exception", e.getTargetException()); + m_handler.getInstanceManager().stop(); + } + } + } + + /** + * A service disappears. + * @param arg0 the service reference + * @param arg1 the service object (if already get) + * @see org.apache.felix.ipojo.util.TrackerCustomizer#removedService(org.osgi.framework.ServiceReference, java.lang.Object) + */ + public void removedService(ServiceReference arg0, Object arg1) { + try { + m_onDeparture.call(new Object[] {arg0}); + } catch (NoSuchMethodException e) { + m_handler.error("The onDeparture method " + m_onDeparture.getMethod() + " does not exist in the class", e); + m_handler.getInstanceManager().stop(); + } catch (IllegalAccessException e) { + m_handler.error("The onDeparture method " + m_onDeparture.getMethod() + " cannot be invoked", e); + m_handler.getInstanceManager().stop(); + } catch (InvocationTargetException e) { + m_handler.error("The onDeparture method " + m_onDeparture.getMethod() + " has thrown an exception", e.getTargetException()); + m_handler.getInstanceManager().stop(); + } + } + +} Added: felix/trunk/ipojo/handler/whiteboard/whiteboard-handler/src/main/java/org/apache/felix/ipojo/handler/wbp/WhiteBoardPatternHandler.java URL: http://svn.apache.org/viewvc/felix/trunk/ipojo/handler/whiteboard/whiteboard-handler/src/main/java/org/apache/felix/ipojo/handler/wbp/WhiteBoardPatternHandler.java?rev=1454063&view=auto ============================================================================== --- felix/trunk/ipojo/handler/whiteboard/whiteboard-handler/src/main/java/org/apache/felix/ipojo/handler/wbp/WhiteBoardPatternHandler.java (added) +++ felix/trunk/ipojo/handler/whiteboard/whiteboard-handler/src/main/java/org/apache/felix/ipojo/handler/wbp/WhiteBoardPatternHandler.java Thu Mar 7 20:00:30 2013 @@ -0,0 +1,131 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.felix.ipojo.handler.wbp; + +import java.util.ArrayList; +import java.util.Dictionary; +import java.util.List; + +import org.apache.felix.ipojo.ComponentInstance; +import org.apache.felix.ipojo.ConfigurationException; +import org.apache.felix.ipojo.PrimitiveHandler; +import org.apache.felix.ipojo.metadata.Element; +import org.osgi.framework.InvalidSyntaxException; + +/** + * White board pattern handler. + * This handler aims to automate white board patterns by invoking callback when needed. + * @author <a href="mailto:[email protected]">Felix Project Team</a> + */ +public class WhiteBoardPatternHandler extends PrimitiveHandler { + + /** + * The handler namespace. + */ + public static final String NAMESPACE = "org.apache.felix.ipojo.whiteboard"; + + /** + * The white board pattern to manage. By default just one. + */ + private List m_managers = new ArrayList(1); + + /** + * Configure method. Parses the metadata to analyze white-board-pattern elements. + * @param elem the component type description + * @param dict the instance description + * @throws ConfigurationException if the description is not valid. + * @see org.apache.felix.ipojo.Handler#configure(org.apache.felix.ipojo.metadata.Element, java.util.Dictionary) + */ + public void configure(Element elem, Dictionary dict) throws ConfigurationException { + + // There is two way to configure the handler : + // - the wbp elements + // - the whiteboards elements + Element[] elems = elem.getElements("wbp", NAMESPACE); + + if (elems == null || elems.length == 0) { + // Alternative way + Element[] whiteboards = elem.getElements("whiteboards", NAMESPACE); + if (whiteboards == null) { + throw new ConfigurationException("Cannot configure the whiteboard pattern handler - no suitable configuration found"); + } else { + elems = whiteboards[0].getElements("wbp", NAMESPACE); + } + } + + // Last check. + if (elems == null) { + throw new ConfigurationException("Cannot configure the whiteboard pattern handler - no suitable configuration found"); + } + + for (int i = 0; i < elems.length; i++) { + String filter = elems[i].getAttribute("filter"); + String onArrival = elems[i].getAttribute("onArrival"); + String onDeparture = elems[i].getAttribute("onDeparture"); + String onModification = elems[i].getAttribute("onModification"); + + if (filter == null) { + throw new ConfigurationException("The white board pattern element requires a filter attribute"); + } + if (onArrival == null || onDeparture == null) { + throw new ConfigurationException("The white board pattern element requires the onArrival and onDeparture attributes"); + } + + try { + WhiteBoardManager wbm = new WhiteBoardManager(this, getInstanceManager().getContext().createFilter(filter), onArrival, onDeparture, onModification); + m_managers.add(wbm); + } catch (InvalidSyntaxException e) { + throw new ConfigurationException("The filter " + filter + " is invalid : " + e); + } + } + + } + + /** + * Start method. + * @see org.apache.felix.ipojo.Handler#start() + */ + public void start() { + } + + + + /** + * Start managers if we're valid. + * @see org.apache.felix.ipojo.Handler#stateChanged(int) + */ + public void stateChanged(int state) { + if (state == ComponentInstance.VALID) { + for (int i = 0; i < m_managers.size(); i++) { + ((WhiteBoardManager) m_managers.get(i)).start(); + } + } + } + + /** + * Stop method. Stops managers. + * @see org.apache.felix.ipojo.Handler#stop() + */ + public void stop() { + for (int i = 0; i < m_managers.size(); i++) { + ((WhiteBoardManager) m_managers.get(i)).stop(); + } + } + +} Added: felix/trunk/ipojo/handler/whiteboard/whiteboard-handler/src/main/resources/whiteboard-pattern.xsd URL: http://svn.apache.org/viewvc/felix/trunk/ipojo/handler/whiteboard/whiteboard-handler/src/main/resources/whiteboard-pattern.xsd?rev=1454063&view=auto ============================================================================== --- felix/trunk/ipojo/handler/whiteboard/whiteboard-handler/src/main/resources/whiteboard-pattern.xsd (added) +++ felix/trunk/ipojo/handler/whiteboard/whiteboard-handler/src/main/resources/whiteboard-pattern.xsd Thu Mar 7 20:00:30 2013 @@ -0,0 +1,45 @@ +<!-- + Licensed to the Apache Software Foundation (ASF) under one + or more contributor license agreements. See the NOTICE file + distributed with this work for additional information + regarding copyright ownership. The ASF licenses this file + to you under the Apache License, Version 2.0 (the + "License"); you may not use this file except in compliance + with the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, + software distributed under the License is distributed on an + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + KIND, either express or implied. See the License for the + specific language governing permissions and limitations + under the License. +--> +<xs:schema targetNamespace="org.apache.felix.ipojo.whiteboard" + xmlns="org.apache.felix.ipojo.whiteboard" + xmlns:xs="http://www.w3.org/2001/XMLSchema" + elementFormDefault="qualified"> + <xs:element name="wbp" type="WBPType"></xs:element> + <xs:complexType name="WBPType"> + <xs:annotation> + <xs:documentation>Description of the white-board architecture.</xs:documentation> + </xs:annotation> + <xs:attribute name="onArrival" type="xs:string" use="required"> + <xs:annotation> + <xs:documentation>Declaring the method to invoke when a matching service arrives.</xs:documentation> + </xs:annotation></xs:attribute> + <xs:attribute name="onDeparture" type="xs:string" use="required"> + <xs:annotation> + <xs:documentation>Declaring the method to invoke when a matching service leaves.</xs:documentation> + </xs:annotation></xs:attribute> + <xs:attribute name="onModification" type="xs:string" use="optional"> + <xs:annotation> + <xs:documentation>Method called when an injected service reference is modified but stills valid against the filter.</xs:documentation> + </xs:annotation></xs:attribute> + <xs:attribute name="filter" type="xs:string" use="required"> + <xs:annotation> + <xs:documentation>Filter use to discover matching filter.</xs:documentation> + </xs:annotation></xs:attribute> + </xs:complexType> +</xs:schema> \ No newline at end of file
