You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@felix.apache.org by cl...@apache.org on 2013/02/27 16:51:10 UTC
svn commit: r1450816 [6/7] - in /felix/trunk/ipojo/handler/eventadmin: ./
doc/ eventadmin-handler-it/ eventadmin-handler-it/src/
eventadmin-handler-it/src/it/ eventadmin-handler-it/src/it/event-admin-it/
eventadmin-handler-it/src/it/event-admin-it/src/...
Added: felix/trunk/ipojo/handler/eventadmin/eventadmin-handler/doc/event-admin-handlers_files/shBrushCSharp.js
URL: http://svn.apache.org/viewvc/felix/trunk/ipojo/handler/eventadmin/eventadmin-handler/doc/event-admin-handlers_files/shBrushCSharp.js?rev=1450816&view=auto
==============================================================================
--- felix/trunk/ipojo/handler/eventadmin/eventadmin-handler/doc/event-admin-handlers_files/shBrushCSharp.js (added)
+++ felix/trunk/ipojo/handler/eventadmin/eventadmin-handler/doc/event-admin-handlers_files/shBrushCSharp.js Wed Feb 27 15:51:08 2013
@@ -0,0 +1,30 @@
+dp.sh.Brushes.CSharp = function()
+{
+ var keywords = 'abstract as base bool break byte case catch char checked class const ' +
+ 'continue decimal default delegate do double else enum event explicit ' +
+ 'extern false finally fixed float for foreach get goto if implicit in int ' +
+ 'interface internal is lock long namespace new null object operator out ' +
+ 'override params private protected public readonly ref return sbyte sealed set ' +
+ 'short sizeof stackalloc static string struct switch this throw true try ' +
+ 'typeof uint ulong unchecked unsafe ushort using virtual void while';
+
+ this.regexList = [
+ // There's a slight problem with matching single line comments and figuring out
+ // a difference between // and ///. Using lookahead and lookbehind solves the
+ // problem, unfortunately JavaScript doesn't support lookbehind. So I'm at a
+ // loss how to translate that regular expression to JavaScript compatible one.
+// { regex: new RegExp('(?<!/)//(?!/).*$|(?<!/)////(?!/).*$|/\\*[^\\*]*(.)*?\\*/', 'gm'), css: 'comment' }, // one line comments starting with anything BUT '///' and multiline comments
+// { regex: new RegExp('(?<!/)///(?!/).*$', 'gm'), css: 'comments' }, // XML comments starting with ///
+
+ { regex: new RegExp('//.*$', 'gm'), css: 'comment' }, // one line comments
+ { regex: new RegExp('/\\*[\\s\\S]*?\\*/', 'g'), css: 'comment' }, // multiline comments
+ { regex: new RegExp('"(?:\\.|[^\\""])*"', 'g'), css: 'string' }, // strings
+ { regex: new RegExp('^\\s*#.*', 'gm'), css: 'preprocessor' }, // preprocessor tags like #region and #endregion
+ { regex: new RegExp(this.GetKeywords(keywords), 'gm'), css: 'keyword' } // c# keyword
+ ];
+
+ this.CssClass = 'dp-c';
+}
+
+dp.sh.Brushes.CSharp.prototype = new dp.sh.Highlighter();
+dp.sh.Brushes.CSharp.Aliases = ['c#', 'c-sharp', 'csharp'];
Added: felix/trunk/ipojo/handler/eventadmin/eventadmin-handler/doc/event-admin-handlers_files/shBrushDelphi.js
URL: http://svn.apache.org/viewvc/felix/trunk/ipojo/handler/eventadmin/eventadmin-handler/doc/event-admin-handlers_files/shBrushDelphi.js?rev=1450816&view=auto
==============================================================================
--- felix/trunk/ipojo/handler/eventadmin/eventadmin-handler/doc/event-admin-handlers_files/shBrushDelphi.js (added)
+++ felix/trunk/ipojo/handler/eventadmin/eventadmin-handler/doc/event-admin-handlers_files/shBrushDelphi.js Wed Feb 27 15:51:08 2013
@@ -0,0 +1,31 @@
+/* Delphi brush is contributed by Eddie Shipman */
+dp.sh.Brushes.Delphi = function()
+{
+ var keywords = 'abs addr and ansichar ansistring array as asm begin boolean byte cardinal ' +
+ 'case char class comp const constructor currency destructor div do double ' +
+ 'downto else end except exports extended false file finalization finally ' +
+ 'for function goto if implementation in inherited int64 initialization ' +
+ 'integer interface is label library longint longword mod nil not object ' +
+ 'of on or packed pansichar pansistring pchar pcurrency pdatetime pextended ' +
+ 'pint64 pointer private procedure program property pshortstring pstring ' +
+ 'pvariant pwidechar pwidestring protected public published raise real real48 ' +
+ 'record repeat set shl shortint shortstring shr single smallint string then ' +
+ 'threadvar to true try type unit until uses val var varirnt while widechar ' +
+ 'widestring with word write writeln xor';
+
+ this.regexList = [
+ { regex: new RegExp('\\(\\*[\\s\\S]*?\\*\\)', 'gm'), css: 'comment' }, // multiline comments (* *)
+ { regex: new RegExp('{(?!\\$)[\\s\\S]*?}', 'gm'), css: 'comment' }, // multiline comments { }
+ { regex: new RegExp('//.*$', 'gm'), css: 'comment' }, // one line
+ { regex: new RegExp('\'(?:\\.|[^\\\'\'])*\'', 'g'), css: 'string' }, // strings
+ { regex: new RegExp('\\{\\$[a-zA-Z]+ .+\\}', 'g'), css: 'directive' }, // Compiler Directives and Region tags
+ { regex: new RegExp('\\b[\\d\\.]+\\b', 'g'), css: 'number' }, // numbers 12345
+ { regex: new RegExp('\\$[a-zA-Z0-9]+\\b', 'g'), css: 'number' }, // numbers $F5D3
+ { regex: new RegExp(this.GetKeywords(keywords), 'gm'), css: 'keyword' } // keyword
+ ];
+
+ this.CssClass = 'dp-delphi';
+}
+
+dp.sh.Brushes.Delphi.prototype = new dp.sh.Highlighter();
+dp.sh.Brushes.Delphi.Aliases = ['delphi', 'pascal'];
Added: felix/trunk/ipojo/handler/eventadmin/eventadmin-handler/doc/event-admin-handlers_files/shBrushJScript.js
URL: http://svn.apache.org/viewvc/felix/trunk/ipojo/handler/eventadmin/eventadmin-handler/doc/event-admin-handlers_files/shBrushJScript.js?rev=1450816&view=auto
==============================================================================
--- felix/trunk/ipojo/handler/eventadmin/eventadmin-handler/doc/event-admin-handlers_files/shBrushJScript.js (added)
+++ felix/trunk/ipojo/handler/eventadmin/eventadmin-handler/doc/event-admin-handlers_files/shBrushJScript.js Wed Feb 27 15:51:08 2013
@@ -0,0 +1,22 @@
+dp.sh.Brushes.JScript = function()
+{
+ var keywords = 'abstract boolean break byte case catch char class const continue debugger ' +
+ 'default delete do double else enum export extends false final finally float ' +
+ 'for function goto if implements import in instanceof int interface long native ' +
+ 'new null package private protected public return short static super switch ' +
+ 'synchronized this throw throws transient true try typeof var void volatile while with';
+
+ this.regexList = [
+ { regex: new RegExp('//.*$', 'gm'), css: 'comment' }, // one line comments
+ { regex: new RegExp('/\\*[\\s\\S]*?\\*/', 'g'), css: 'comment' }, // multiline comments
+ { regex: new RegExp('"(?:[^"\n]|[\"])*?"', 'g'), css: 'string' }, // double quoted strings
+ { regex: new RegExp("'(?:[^'\n]|[\'])*?'", 'g'), css: 'string' }, // single quoted strings
+ { regex: new RegExp('^\\s*#.*', 'gm'), css: 'preprocessor' }, // preprocessor tags like #region and #endregion
+ { regex: new RegExp(this.GetKeywords(keywords), 'gm'), css: 'keyword' } // keywords
+ ];
+
+ this.CssClass = 'dp-c';
+}
+
+dp.sh.Brushes.JScript.prototype = new dp.sh.Highlighter();
+dp.sh.Brushes.JScript.Aliases = ['js', 'jscript', 'javascript'];
Added: felix/trunk/ipojo/handler/eventadmin/eventadmin-handler/doc/event-admin-handlers_files/shBrushJava.js
URL: http://svn.apache.org/viewvc/felix/trunk/ipojo/handler/eventadmin/eventadmin-handler/doc/event-admin-handlers_files/shBrushJava.js?rev=1450816&view=auto
==============================================================================
--- felix/trunk/ipojo/handler/eventadmin/eventadmin-handler/doc/event-admin-handlers_files/shBrushJava.js (added)
+++ felix/trunk/ipojo/handler/eventadmin/eventadmin-handler/doc/event-admin-handlers_files/shBrushJava.js Wed Feb 27 15:51:08 2013
@@ -0,0 +1,22 @@
+dp.sh.Brushes.Java = function()
+{
+ var keywords = 'abstract assert boolean break byte case catch char class const' +
+ 'continue default do double else enum extends false final finally float' +
+ 'for goto if implements import instanceof inst interface log native' +
+ 'new null package private protected public return short static strictfp super' +
+ 'switch synchronized this throw throws transient true try void volatile while';
+
+ this.regexList = [
+ { regex: new RegExp('//.*$', 'gm'), css: 'comment' }, // one line comments
+ { regex: new RegExp('/\\*[\\s\\S]*?\\*/', 'g'), css: 'comment' }, // multiline comments
+ { regex: new RegExp('"(?:[^"\n]|[\"])*?"', 'g'), css: 'string' }, // double quoted strings
+ { regex: new RegExp("'(?:[^'\n]|[\'])*?'", 'g'), css: 'string' }, // single quoted strings
+ { regex: new RegExp('^\\s*@.*', 'gm'), css: 'preprocessor' }, // preprocessor tags like @see
+ { regex: new RegExp(this.GetKeywords(keywords), 'gm'), css: 'keyword' } // keywords
+ ];
+
+ this.CssClass = 'dp-c';
+}
+
+dp.sh.Brushes.Java.prototype = new dp.sh.Highlighter();
+dp.sh.Brushes.Java.Aliases = ['java'];
Added: felix/trunk/ipojo/handler/eventadmin/eventadmin-handler/doc/event-admin-handlers_files/shBrushPhp.js
URL: http://svn.apache.org/viewvc/felix/trunk/ipojo/handler/eventadmin/eventadmin-handler/doc/event-admin-handlers_files/shBrushPhp.js?rev=1450816&view=auto
==============================================================================
--- felix/trunk/ipojo/handler/eventadmin/eventadmin-handler/doc/event-admin-handlers_files/shBrushPhp.js (added)
+++ felix/trunk/ipojo/handler/eventadmin/eventadmin-handler/doc/event-admin-handlers_files/shBrushPhp.js Wed Feb 27 15:51:08 2013
@@ -0,0 +1,23 @@
+dp.sh.Brushes.Php = function()
+{
+ var keywords = 'and or xor __FILE__ __LINE__ array as break case ' +
+ 'cfunction class const continue declare default die do echo else ' +
+ 'elseif empty enddeclare endfor endforeach endif endswitch endwhile eval exit ' +
+ 'extends for foreach function global if include include_once isset list ' +
+ 'new old_function print require require_once return static switch unset use ' +
+ 'var while __FUNCTION__ __CLASS__';
+
+ this.regexList = [
+ { regex: new RegExp('//.*$', 'gm'), css: 'comment' }, // one line comments
+ { regex: new RegExp('/\\*[\\s\\S]*?\\*/', 'g'), css: 'comment' }, // multiline comments
+ { regex: new RegExp('"(?:[^"\n]|[\"])*?"', 'g'), css: 'string' }, // double quoted strings
+ { regex: new RegExp("'(?:[^'\n]|[\'])*?'", 'g'), css: 'string' }, // single quoted strings
+ { regex: new RegExp('\\$\\w+', 'g'), css: 'vars' }, // variables
+ { regex: new RegExp(this.GetKeywords(keywords), 'gm'), css: 'keyword' } // keyword
+ ];
+
+ this.CssClass = 'dp-c';
+}
+
+dp.sh.Brushes.Php.prototype = new dp.sh.Highlighter();
+dp.sh.Brushes.Php.Aliases = ['php'];
Added: felix/trunk/ipojo/handler/eventadmin/eventadmin-handler/doc/event-admin-handlers_files/shBrushPython.js
URL: http://svn.apache.org/viewvc/felix/trunk/ipojo/handler/eventadmin/eventadmin-handler/doc/event-admin-handlers_files/shBrushPython.js?rev=1450816&view=auto
==============================================================================
--- felix/trunk/ipojo/handler/eventadmin/eventadmin-handler/doc/event-admin-handlers_files/shBrushPython.js (added)
+++ felix/trunk/ipojo/handler/eventadmin/eventadmin-handler/doc/event-admin-handlers_files/shBrushPython.js Wed Feb 27 15:51:08 2013
@@ -0,0 +1,71 @@
+/* Python 2.3 syntax contributed by Gheorghe Milas */
+dp.sh.Brushes.Python = function()
+{
+ var keywords = 'and assert break class continue def del elif else except exec ' +
+ 'finally for from global if import in is lambda not or object pass print ' +
+ 'raise return try yield while';
+
+ var builtins = 'self __builtin__ __dict__ __future__ __methods__ __members__ __author__ __email__ __version__' +
+ '__class__ __bases__ __import__ __main__ __name__ __doc__ __self__ __debug__ __slots__ ' +
+ 'abs append apply basestring bool buffer callable chr classmethod clear close cmp coerce compile complex ' +
+ 'conjugate copy count delattr dict dir divmod enumerate Ellipsis eval execfile extend False file fileno filter float flush ' +
+ 'get getattr globals has_key hasarttr hash hex id index input insert int intern isatty isinstance isubclass ' +
+ 'items iter keys len list locals long map max min mode oct open ord pop pow property range ' +
+ 'raw_input read readline readlines reduce reload remove repr reverse round seek setattr slice sum ' +
+ 'staticmethod str super tell True truncate tuple type unichr unicode update values write writelines xrange zip';
+
+ var magicmethods = '__abs__ __add__ __and__ __call__ __cmp__ __coerce__ __complex__ __concat__ __contains__ __del__ __delattr__ __delitem__ ' +
+ '__delslice__ __div__ __divmod__ __float__ __getattr__ __getitem__ __getslice__ __hash__ __hex__ __eq__ __le__ __lt__ __gt__ __ge__ ' +
+ '__iadd__ __isub__ __imod__ __idiv__ __ipow__ __iand__ __ior__ __ixor__ __ilshift__ __irshift__ ' +
+ '__invert__ __init__ __int__ __inv__ __iter__ __len__ __long__ __lshift__ __mod__ __mul__ __new__ __neg__ __nonzero__ __oct__ __or__ ' +
+ '__pos__ __pow__ __radd__ __rand__ __rcmp__ __rdiv__ __rdivmod__ __repeat__ __repr__ __rlshift__ __rmod__ __rmul__ ' +
+ '__ror__ __rpow__ __rrshift__ __rshift__ __rsub__ __rxor__ __setattr__ __setitem__ __setslice__ __str__ __sub__ __xor__';
+
+ var exceptions = 'Exception StandardError ArithmeticError LookupError EnvironmentError AssertionError AttributeError EOFError ' +
+ 'FutureWarning IndentationError OverflowWarning PendingDeprecationWarning ReferenceError RuntimeWarning ' +
+ 'SyntaxWarning TabError UnicodeDecodeError UnicodeEncodeError UnicodeTranslateError UserWarning Warning ' +
+ 'IOError ImportError IndexError KeyError KeyboardInterrupt MemoryError NameError NotImplementedError OSError ' +
+ 'RuntimeError StopIteration SyntaxError SystemError SystemExit TypeError UnboundLocalError UnicodeError ValueError ' +
+ 'FloatingPointError OverflowError WindowsError ZeroDivisionError';
+
+ var types = 'NoneType TypeType IntType LongType FloatType ComplexType StringType UnicodeType BufferType TupleType ListType ' +
+ 'DictType FunctionType LambdaType CodeType ClassType UnboundMethodType InstanceType MethodType BuiltinFunctionType BuiltinMethodType ' +
+ 'ModuleType FileType XRangeType TracebackType FrameType SliceType EllipsisType';
+
+ var commonlibs = 'anydbm array asynchat asyncore AST base64 binascii binhex bisect bsddb buildtools bz2 ' +
+ 'BaseHTTPServer Bastion calendar cgi cmath cmd codecs codeop commands compiler copy copy_reg ' +
+ 'cPickle crypt cStringIO csv curses Carbon CGIHTTPServer ConfigParser Cookie datetime dbhash ' +
+ 'dbm difflib dircache distutils doctest DocXMLRPCServer email encodings errno exceptions fcntl ' +
+ 'filecmp fileinput ftplib gc gdbm getopt getpass glob gopherlib gzip heapq htmlentitydefs ' +
+ 'htmllib httplib HTMLParser imageop imaplib imgfile imghdr imp inspect itertools jpeg keyword ' +
+ 'linecache locale logging mailbox mailcap marshal math md5 mhlib mimetools mimetypes mimify mmap ' +
+ 'mpz multifile mutex MimeWriter netrc new nis nntplib nsremote operator optparse os parser pickle pipes ' +
+ 'popen2 poplib posix posixfile pprint preferences profile pstats pwd pydoc pythonprefs quietconsole ' +
+ 'quopri Queue random re readline resource rexec rfc822 rgbimg sched select sets sgmllib sha shelve shutil ' +
+ 'signal site smtplib socket stat statcache string struct symbol sys syslog SimpleHTTPServer ' +
+ 'SimpleXMLRPCServer SocketServer StringIO tabnanny tarfile telnetlib tempfile termios textwrap ' +
+ 'thread threading time timeit token tokenize traceback tty types Tkinter unicodedata unittest ' +
+ 'urllib urllib2 urlparse user UserDict UserList UserString warnings weakref webbrowser whichdb ' +
+ 'xml xmllib xmlrpclib xreadlines zipfile zlib';
+
+ this.regexList = [
+ { regex: new RegExp('#.*$', 'gm'), css: 'comment' }, // comments
+ { regex: new RegExp('^\\s*"""(.|\n)*?"""\\s*$', 'gm'), css: 'docstring' }, // documentation string "
+ { regex: new RegExp('^\\s*\'\'\'(.|\n)*?\'\'\'\\s*$', 'gm'), css: 'docstring' }, // documentation string '
+ { regex: new RegExp('"""(.|\n)*?"""', 'g'), css: 'string' }, // multi-line strings "
+ { regex: new RegExp('\'\'\'(.|\n)*?\'\'\'', 'g'), css: 'string' }, // multi-line strings '
+ { regex: new RegExp('"(?:\\.|[^\\""])*"', 'g'), css: 'string' }, // strings "
+ { regex: new RegExp('\'(?:\\.|[^\\\'\'])*\'', 'g'), css: 'string' }, // strings '
+ { regex: new RegExp(this.GetKeywords(keywords), 'gm'), css: 'keyword' }, // keywords
+ { regex: new RegExp(this.GetKeywords(builtins), 'gm'), css: 'builtins' }, // builtin objects, functions, methods, magic attributes
+ { regex: new RegExp(this.GetKeywords(magicmethods), 'gm'), css: 'magicmethods' }, // special methods
+ { regex: new RegExp(this.GetKeywords(exceptions), 'gm'), css: 'exceptions' }, // standard exception classes
+ { regex: new RegExp(this.GetKeywords(types), 'gm'), css: 'types' }, // types from types.py
+ { regex: new RegExp(this.GetKeywords(commonlibs), 'gm'), css: 'commonlibs' } // common standard library modules
+ ];
+
+ this.CssClass = 'dp-py';
+}
+
+dp.sh.Brushes.Python.prototype = new dp.sh.Highlighter();
+dp.sh.Brushes.Python.Aliases = ['py', 'python'];
Added: felix/trunk/ipojo/handler/eventadmin/eventadmin-handler/doc/event-admin-handlers_files/shBrushShell.js
URL: http://svn.apache.org/viewvc/felix/trunk/ipojo/handler/eventadmin/eventadmin-handler/doc/event-admin-handlers_files/shBrushShell.js?rev=1450816&view=auto
==============================================================================
--- felix/trunk/ipojo/handler/eventadmin/eventadmin-handler/doc/event-admin-handlers_files/shBrushShell.js (added)
+++ felix/trunk/ipojo/handler/eventadmin/eventadmin-handler/doc/event-admin-handlers_files/shBrushShell.js Wed Feb 27 15:51:08 2013
@@ -0,0 +1,27 @@
+dp.sh.Brushes.Shell = function()
+{
+ var keywords = 'alias array autor base basename break ' +
+ 'cat catv cd chdir cmpv continue conv copy ' +
+ 'crc ctime cut dirname echo env eval exec else if elif then ' +
+ 'export expr extern false fmode fork fprint ' +
+ 'fsize fstat fullname global goend goto grep ifdef ' +
+ 'ifset ifenv inv kill line link list ' +
+ 'local localset mkdirs mktemp move mtime nop print ' +
+ 'prints pwd read readc readl readonly rel ' +
+ 'remove return seek set shift sleep sortl ' +
+ 'static stime sum system systime tee test times ' +
+ 'tr trap true type typeset tz umask unalias ' +
+ 'unexport unset unsetenv ver wait wc whence ' +
+ 'sane exit prompt let';
+
+
+ this.regexList = [
+ { regex: new RegExp('#.*$', 'gm'), css: 'comment' }, // one line
+ { regex: new RegExp(this.GetKeywords(keywords), 'gm'), css: 'keyword' } // keyword
+ ];
+
+ this.CssClass = 'dp-shell';
+}
+
+dp.sh.Brushes.Shell.prototype = new dp.sh.Highlighter();
+dp.sh.Brushes.Shell.Aliases = ['shell'];
Added: felix/trunk/ipojo/handler/eventadmin/eventadmin-handler/doc/event-admin-handlers_files/shBrushSql.js
URL: http://svn.apache.org/viewvc/felix/trunk/ipojo/handler/eventadmin/eventadmin-handler/doc/event-admin-handlers_files/shBrushSql.js?rev=1450816&view=auto
==============================================================================
--- felix/trunk/ipojo/handler/eventadmin/eventadmin-handler/doc/event-admin-handlers_files/shBrushSql.js (added)
+++ felix/trunk/ipojo/handler/eventadmin/eventadmin-handler/doc/event-admin-handlers_files/shBrushSql.js Wed Feb 27 15:51:08 2013
@@ -0,0 +1,40 @@
+dp.sh.Brushes.Sql = function()
+{
+ var funcs = 'abs avg case cast coalesce convert count current_timestamp ' +
+ 'current_user day isnull left lower month nullif replace right ' +
+ 'session_user space substring sum system_user upper user year';
+
+ var keywords = 'absolute action add after alter as asc at authorization begin bigint ' +
+ 'binary bit by cascade char character check checkpoint close collate ' +
+ 'column commit committed connect connection constraint contains continue ' +
+ 'create cube current current_date current_time cursor database date ' +
+ 'deallocate dec decimal declare default delete desc distinct double drop ' +
+ 'dynamic else end end-exec escape except exec execute false fetch first ' +
+ 'float for force foreign forward free from full function global goto grant ' +
+ 'group grouping having hour ignore index inner insensitive insert instead ' +
+ 'int integer intersect into is isolation key last level load local max min ' +
+ 'minute modify move name national nchar next no numeric of off on only ' +
+ 'open option order out output partial password precision prepare primary ' +
+ 'prior privileges procedure public read real references relative repeatable ' +
+ 'restrict return returns revoke rollback rollup rows rule schema scroll ' +
+ 'second section select sequence serializable set size smallint static ' +
+ 'statistics table temp temporary then time timestamp to top transaction ' +
+ 'translation trigger true truncate uncommitted union unique update values ' +
+ 'varchar varying view when where with work';
+
+ var operators = 'all and any between cross in join like not null or outer some';
+
+ this.regexList = [
+ { regex: new RegExp('--(.*)$', 'gm'), css: 'comment' }, // one line and multiline comments
+ { regex: new RegExp('"(?:\\.|[^\\""])*"', 'g'), css: 'string' }, // strings
+ { regex: new RegExp('\'(?:\\.|[^\\\'\'])*\'', 'g'), css: 'string' }, // strings
+ { regex: new RegExp(this.GetKeywords(funcs), 'gmi'), css: 'func' }, // functions
+ { regex: new RegExp(this.GetKeywords(operators), 'gmi'), css: 'op' }, // operators and such
+ { regex: new RegExp(this.GetKeywords(keywords), 'gmi'), css: 'keyword' } // keyword
+ ];
+
+ this.CssClass = 'dp-sql';
+}
+
+dp.sh.Brushes.Sql.prototype = new dp.sh.Highlighter();
+dp.sh.Brushes.Sql.Aliases = ['sql'];
Added: felix/trunk/ipojo/handler/eventadmin/eventadmin-handler/doc/event-admin-handlers_files/shBrushVb.js
URL: http://svn.apache.org/viewvc/felix/trunk/ipojo/handler/eventadmin/eventadmin-handler/doc/event-admin-handlers_files/shBrushVb.js?rev=1450816&view=auto
==============================================================================
--- felix/trunk/ipojo/handler/eventadmin/eventadmin-handler/doc/event-admin-handlers_files/shBrushVb.js (added)
+++ felix/trunk/ipojo/handler/eventadmin/eventadmin-handler/doc/event-admin-handlers_files/shBrushVb.js Wed Feb 27 15:51:08 2013
@@ -0,0 +1,29 @@
+dp.sh.Brushes.Vb = function()
+{
+ var keywords = 'AddHandler AddressOf AndAlso Alias And Ansi As Assembly Auto ' +
+ 'Boolean ByRef Byte ByVal Call Case Catch CBool CByte CChar CDate ' +
+ 'CDec CDbl Char CInt Class CLng CObj Const CShort CSng CStr CType ' +
+ 'Date Decimal Declare Default Delegate Dim DirectCast Do Double Each ' +
+ 'Else ElseIf End Enum Erase Error Event Exit False Finally For Friend ' +
+ 'Function Get GetType GoSub GoTo Handles If Implements Imports In ' +
+ 'Inherits Integer Interface Is Let Lib Like Long Loop Me Mod Module ' +
+ 'MustInherit MustOverride MyBase MyClass Namespace New Next Not Nothing ' +
+ 'NotInheritable NotOverridable Object On Option Optional Or OrElse ' +
+ 'Overloads Overridable Overrides ParamArray Preserve Private Property ' +
+ 'Protected Public RaiseEvent ReadOnly ReDim REM RemoveHandler Resume ' +
+ 'Return Select Set Shadows Shared Short Single Static Step Stop String ' +
+ 'Structure Sub SyncLock Then Throw To True Try TypeOf Unicode Until ' +
+ 'Variant When While With WithEvents WriteOnly Xor';
+
+ this.regexList = [
+ { regex: new RegExp('\'.*$', 'gm'), css: 'comment' }, // one line comments
+ { regex: new RegExp('"(?:\\.|[^\\""])*"', 'g'), css: 'string' }, // strings
+ { regex: new RegExp('^\\s*#.*', 'gm'), css: 'preprocessor' }, // preprocessor tags like #region and #endregion
+ { regex: new RegExp(this.GetKeywords(keywords), 'gm'), css: 'keyword' } // c# keyword
+ ];
+
+ this.CssClass = 'dp-vb';
+}
+
+dp.sh.Brushes.Vb.prototype = new dp.sh.Highlighter();
+dp.sh.Brushes.Vb.Aliases = ['vb', 'vb.net'];
Added: felix/trunk/ipojo/handler/eventadmin/eventadmin-handler/doc/event-admin-handlers_files/shBrushXml.js
URL: http://svn.apache.org/viewvc/felix/trunk/ipojo/handler/eventadmin/eventadmin-handler/doc/event-admin-handlers_files/shBrushXml.js?rev=1450816&view=auto
==============================================================================
--- felix/trunk/ipojo/handler/eventadmin/eventadmin-handler/doc/event-admin-handlers_files/shBrushXml.js (added)
+++ felix/trunk/ipojo/handler/eventadmin/eventadmin-handler/doc/event-admin-handlers_files/shBrushXml.js Wed Feb 27 15:51:08 2013
@@ -0,0 +1,61 @@
+dp.sh.Brushes.Xml = function()
+{
+ this.CssClass = 'dp-xml';
+}
+
+dp.sh.Brushes.Xml.prototype = new dp.sh.Highlighter();
+dp.sh.Brushes.Xml.Aliases = ['xml', 'xhtml', 'xslt', 'html', 'xhtml'];
+
+dp.sh.Brushes.Xml.prototype.ProcessRegexList = function()
+{
+ function push(array, value)
+ {
+ array[array.length] = value;
+ }
+
+ /* If only there was a way to get index of a group within a match, the whole XML
+ could be matched with the expression looking something like that:
+
+ (<!\[CDATA\[\s*.*\s*\]\]>)
+ | (<!--\s*.*\s*?-->)
+ | (<)*(\w+)*\s*(\w+)\s*=\s*(".*?"|'.*?'|\w+)(/*>)*
+ | (</?)(.*?)(/?>)
+ */
+ var index = 0;
+ var match = null;
+ var regex = null;
+
+ // Match CDATA in the following format <![ ... [ ... ]]>
+ // <\!\[[\w\s]*?\[(.|\s)*?\]\]>
+ this.GetMatches(new RegExp('<\\!\\[[\\w\\s]*?\\[(.|\\s)*?\\]\\]>', 'gm'), 'cdata');
+
+ // Match comments
+ // <!--\s*.*\s*?-->
+ this.GetMatches(new RegExp('<!--\\s*.*\\s*?-->', 'gm'), 'comments');
+
+ // Match attributes and their values
+ // (\w+)\s*=\s*(".*?"|\'.*?\'|\w+)*
+ regex = new RegExp('([\\w-\.]+)\\s*=\\s*(".*?"|\'.*?\'|\\w+)*', 'gm');
+ while((match = regex.exec(this.code)) != null)
+ {
+ push(this.matches, new dp.sh.Match(match[1], match.index, 'attribute'));
+
+ // if xml is invalid and attribute has no property value, ignore it
+ if(match[2] != undefined)
+ {
+ push(this.matches, new dp.sh.Match(match[2], match.index + match[0].indexOf(match[2]), 'attribute-value'));
+ }
+ }
+
+ // Match opening and closing tag brackets
+ // </*\?*(?!\!)|/*\?*>
+ this.GetMatches(new RegExp('</*\\?*(?!\\!)|/*\\?*>', 'gm'), 'tag');
+
+ // Match tag names
+ // </*\?*\s*(\w+)
+ regex = new RegExp('</*\\?*\\s*([\\w-\.]+)', 'gm');
+ while((match = regex.exec(this.code)) != null)
+ {
+ push(this.matches, new dp.sh.Match(match[1], match.index + match[0].indexOf(match[1]), 'tag-name'));
+ }
+}
Added: felix/trunk/ipojo/handler/eventadmin/eventadmin-handler/doc/event-admin-handlers_files/shCore.js
URL: http://svn.apache.org/viewvc/felix/trunk/ipojo/handler/eventadmin/eventadmin-handler/doc/event-admin-handlers_files/shCore.js?rev=1450816&view=auto
==============================================================================
--- felix/trunk/ipojo/handler/eventadmin/eventadmin-handler/doc/event-admin-handlers_files/shCore.js (added)
+++ felix/trunk/ipojo/handler/eventadmin/eventadmin-handler/doc/event-admin-handlers_files/shCore.js Wed Feb 27 15:51:08 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/eventadmin/eventadmin-handler/doc/event-admin-handlers_files/site.css
URL: http://svn.apache.org/viewvc/felix/trunk/ipojo/handler/eventadmin/eventadmin-handler/doc/event-admin-handlers_files/site.css?rev=1450816&view=auto
==============================================================================
--- felix/trunk/ipojo/handler/eventadmin/eventadmin-handler/doc/event-admin-handlers_files/site.css (added)
+++ felix/trunk/ipojo/handler/eventadmin/eventadmin-handler/doc/event-admin-handlers_files/site.css Wed Feb 27 15:51:08 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/eventadmin/eventadmin-handler/doc/event-admin-handlers_files/superfish.js
URL: http://svn.apache.org/viewvc/felix/trunk/ipojo/handler/eventadmin/eventadmin-handler/doc/event-admin-handlers_files/superfish.js?rev=1450816&view=auto
==============================================================================
--- felix/trunk/ipojo/handler/eventadmin/eventadmin-handler/doc/event-admin-handlers_files/superfish.js (added)
+++ felix/trunk/ipojo/handler/eventadmin/eventadmin-handler/doc/event-admin-handlers_files/superfish.js Wed Feb 27 15:51:08 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/eventadmin/eventadmin-handler/doc/event-admin-handlers_files/supersubs.js
URL: http://svn.apache.org/viewvc/felix/trunk/ipojo/handler/eventadmin/eventadmin-handler/doc/event-admin-handlers_files/supersubs.js?rev=1450816&view=auto
==============================================================================
--- felix/trunk/ipojo/handler/eventadmin/eventadmin-handler/doc/event-admin-handlers_files/supersubs.js (added)
+++ felix/trunk/ipojo/handler/eventadmin/eventadmin-handler/doc/event-admin-handlers_files/supersubs.js Wed Feb 27 15:51:08 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/eventadmin/eventadmin-handler/metadata.xml
URL: http://svn.apache.org/viewvc/felix/trunk/ipojo/handler/eventadmin/eventadmin-handler/metadata.xml?rev=1450816&view=auto
==============================================================================
--- felix/trunk/ipojo/handler/eventadmin/eventadmin-handler/metadata.xml (added)
+++ felix/trunk/ipojo/handler/eventadmin/eventadmin-handler/metadata.xml Wed Feb 27 15:51:08 2013
@@ -0,0 +1,41 @@
+<!--
+ 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.handlers.event.subscriber.EventAdminSubscriberHandler"
+ name="subscriber"
+ namespace="org.apache.felix.ipojo.handlers.event">
+ <provides>
+ <property field="m_topics" name="event.topics"/>
+ </provides>
+ </handler>
+
+ <!-- This handler is duplicated to support the 'Publishes' annotation -->
+ <handler classname="org.apache.felix.ipojo.handlers.event.publisher.EventAdminPublisherHandler"
+ name="publisher"
+ namespace="org.apache.felix.ipojo.handlers.event">
+ <requires field="m_ea"/>
+ </handler>
+
+ <handler classname="org.apache.felix.ipojo.handlers.event.publisher.EventAdminPublisherHandler"
+ name="publishes"
+ namespace="org.apache.felix.ipojo.handlers.event">
+ <requires field="m_ea"/>
+ </handler>
+</ipojo>
\ No newline at end of file
Added: felix/trunk/ipojo/handler/eventadmin/eventadmin-handler/obr.xml
URL: http://svn.apache.org/viewvc/felix/trunk/ipojo/handler/eventadmin/eventadmin-handler/obr.xml?rev=1450816&view=auto
==============================================================================
--- felix/trunk/ipojo/handler/eventadmin/eventadmin-handler/obr.xml (added)
+++ felix/trunk/ipojo/handler/eventadmin/eventadmin-handler/obr.xml Wed Feb 27 15:51:08 2013
@@ -0,0 +1,31 @@
+<!--
+ 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="publisher"/>
+ <p n="namespace" v="org.apache.felix.ipojo.handlers.event"/>
+ <p n="type" v="primitive"/>
+ </capability>
+ <capability name="ipojo.handler">
+ <p n="name" v="subscriber"/>
+ <p n="namespace" v="org.apache.felix.ipojo.handlers.event"/>
+ <p n="type" v="primitive"/>
+ </capability>
+ <require extend="false" filter="(service=org.osgi.service.event.EventAdmin)" multiple="false" name="service" optional="false">Import Event Admin service</require>
+</obr>
\ No newline at end of file
Added: felix/trunk/ipojo/handler/eventadmin/eventadmin-handler/pom.xml
URL: http://svn.apache.org/viewvc/felix/trunk/ipojo/handler/eventadmin/eventadmin-handler/pom.xml?rev=1450816&view=auto
==============================================================================
--- felix/trunk/ipojo/handler/eventadmin/eventadmin-handler/pom.xml (added)
+++ felix/trunk/ipojo/handler/eventadmin/eventadmin-handler/pom.xml Wed Feb 27 15:51:08 2013
@@ -0,0 +1,240 @@
+<!--
+ 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 Event Admin Handler</name>
+ <artifactId>org.apache.felix.ipojo.handler.eventadmin</artifactId>
+ <version>1.9.0-SNAPSHOT</version>
+
+ <description>
+ iPOJO extension to easily interact with the OSGi Event Admin.
+ </description>
+ <url>http://felix.apache.org/site/event-admin-handlers.html</url>
+
+ <properties>
+ <exam.version>3.0.0</exam.version>
+ <url.version>1.5.1</url.version>
+ </properties>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.felix</groupId>
+ <artifactId>org.apache.felix.ipojo</artifactId>
+ <version>1.6.0</version>
+ </dependency>
+ <dependency>
+ <groupId>org.osgi</groupId>
+ <artifactId>org.osgi.core</artifactId>
+ <version>4.2.0</version>
+ </dependency>
+ <dependency>
+ <groupId>org.osgi</groupId>
+ <artifactId>org.osgi.compendium</artifactId>
+ <version>4.2.0</version>
+ </dependency>
+ </dependencies>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.felix</groupId>
+ <artifactId>maven-bundle-plugin</artifactId>
+ <version>1.4.3</version>
+ <extensions>true</extensions>
+ <configuration>
+ <instructions>
+ <Export-Package>org.apache.felix.ipojo.handlers.event*;version="1.2.0"</Export-Package>
+ <Bundle-Name>${project.name}</Bundle-Name>
+ <Bundle-SymbolicName>${project.artifactId}</Bundle-SymbolicName>
+ <Bundle-Description>iPOJO Event Admin Handlers
+ </Bundle-Description>
+ <Bundle-DocURL>
+ http://felix.apache.org/site/event-admin-handlers.html
+ </Bundle-DocURL>
+ <Bundle-Vendor>The Apache Software Foundation</Bundle-Vendor>
+ <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.9.0-SNAPSHOT</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>
+ <version>2.5.1</version>
+ <configuration>
+ <source>1.6</source>
+ <target>1.6</target>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+
+ <profiles>
+ <profile>
+ <id>test</id>
+ <activation>
+ <activeByDefault>true</activeByDefault>
+ </activation>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-invoker-plugin</artifactId>
+ <version>1.8</version>
+ <configuration>
+ <streamLogs>true</streamLogs>
+ <goals>
+ <goal>clean</goal>
+ <goal>test</goal>
+ </goals>
+ <cloneClean>true</cloneClean>
+ </configuration>
+ <executions>
+ <execution>
+ <id>regular</id>
+ <goals>
+ <goal>run</goal>
+ </goals>
+ <configuration>
+ <profiles>
+ <profile>felix</profile>
+ </profiles>
+ <cloneProjectsTo>${project.build.directory}/regular</cloneProjectsTo>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+ </profile>
+
+ <profile>
+ <id>test-all</id>
+ <activation>
+ <activeByDefault>false</activeByDefault>
+ </activation>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-invoker-plugin</artifactId>
+ <version>1.8</version>
+ <configuration>
+ <streamLogs>true</streamLogs>
+ <goals>
+ <goal>clean</goal>
+ <goal>test</goal>
+ </goals>
+ <cloneClean>true</cloneClean>
+ </configuration>
+ <executions>
+ <execution>
+ <id>equinox-native</id>
+ <goals>
+ <goal>run</goal>
+ </goals>
+ <configuration>
+ <profiles>
+ <profile>equinox</profile>
+ </profiles>
+ <cloneProjectsTo>${project.build.directory}/equinox-native</cloneProjectsTo>
+
+ </configuration>
+ </execution>
+ <execution>
+ <id>felix-native</id>
+ <goals>
+ <goal>run</goal>
+ </goals>
+ <configuration>
+ <profiles>
+ <profile>felix</profile>
+ </profiles>
+ <cloneProjectsTo>${project.build.directory}/felix-native</cloneProjectsTo>
+ </configuration>
+ </execution>
+ <execution>
+ <id>knopflerfish-native</id>
+ <goals>
+ <goal>run</goal>
+ </goals>
+ <configuration>
+ <profiles>
+ <profile>knopflerfish</profile>
+ </profiles>
+ <cloneProjectsTo>${project.build.directory}/knopflerfish-native</cloneProjectsTo>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+ </profile>
+ </profiles>
+</project>
Added: felix/trunk/ipojo/handler/eventadmin/eventadmin-handler/src/main/java/org/apache/felix/ipojo/handlers/event/EventUtil.java
URL: http://svn.apache.org/viewvc/felix/trunk/ipojo/handler/eventadmin/eventadmin-handler/src/main/java/org/apache/felix/ipojo/handlers/event/EventUtil.java?rev=1450816&view=auto
==============================================================================
--- felix/trunk/ipojo/handler/eventadmin/eventadmin-handler/src/main/java/org/apache/felix/ipojo/handlers/event/EventUtil.java (added)
+++ felix/trunk/ipojo/handler/eventadmin/eventadmin-handler/src/main/java/org/apache/felix/ipojo/handlers/event/EventUtil.java Wed Feb 27 15:51:08 2013
@@ -0,0 +1,173 @@
+/*
+ * 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.handlers.event;
+
+import org.apache.felix.ipojo.parser.ParseUtils;
+
+/**
+ * Utility methods.
+ *
+ * @author <a href="mailto:dev@felix.apache.org">Felix Project Team</a>
+ */
+public class EventUtil {
+
+ /**
+ * The separator between topics.
+ */
+ public static final String TOPIC_SEPARATOR = ",";
+
+ /**
+ * The separator between topics.
+ */
+ public static final String TOPIC_TOKEN_SEPARATOR = "/";
+
+ /**
+ * The topic token alphabet.
+ */
+ private static final String TOKEN_ALPHABET = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_-";
+
+ /**
+ * Tests that the given topic match with the given topic pattern.
+ *
+ * @param topic the topic to test
+ * @param topicPattern the topic pattern
+ * @return true if it matches.
+ */
+ public static final boolean matches(String topic, String topicPattern) {
+ if (topicPattern.equals("*")) {
+ return true;
+ }
+ int star;
+ if ((star = topicPattern.indexOf("*")) > 0) {
+ return topic.startsWith(topicPattern.substring(0, star - 1));
+ } else {
+ return topic.equals(topicPattern);
+ }
+ }
+
+ /**
+ * Tests that the given topic match with the given topic patterns.
+ *
+ * @param topic the topic to test
+ * @param topicPatterns the topic patterns
+ * @return true if it matches.
+ */
+ public static final boolean matches(String topic, String[] topicPatterns) {
+ int n = topicPatterns.length;
+ for (int i = 0; i < n; i++) {
+ if (matches(topic, topicPatterns[i])) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ /**
+ * Check the given topic scope is valid.
+ *
+ * topicScope ::= "*" | ( topic "/*" ? )
+ *
+ * @param topicScope the topic scope to check.
+ *
+ * @return {@code true} if the given topic scope is valid, {@code false}
+ * otherwise.
+ */
+ public static final boolean isValidTopicScope(String topicScope) {
+ if (topicScope.equals("*")) {
+ // Wildcard character only accepted.
+ return true;
+ }
+
+ // Remove trailing "/*" if present, to check the topic radix.
+ String topicWithoutWildcard;
+ if (topicScope.endsWith("/*")) {
+ topicWithoutWildcard = topicScope.substring(0,
+ topicScope.length() - 2);
+ } else {
+ topicWithoutWildcard = topicScope;
+ }
+
+ // Validate the topic radix.
+ return isValidTopic(topicWithoutWildcard);
+ }
+
+ /**
+ * Check the given topic is valid.
+ *
+ * topic ::= token ( �/� token ) *
+ *
+ * @param topic the topic to check.
+ *
+ * @return {@code true} if the given topic is valid, {@code false}
+ * otherwise.
+ */
+ public static final boolean isValidTopic(String topic) {
+ if (topic.startsWith(TOPIC_TOKEN_SEPARATOR)
+ || topic.endsWith(TOPIC_TOKEN_SEPARATOR)) {
+ // A topic cannot start nor end with '/'.
+ return false;
+ }
+
+ String[] tokens = ParseUtils.split(topic, TOPIC_TOKEN_SEPARATOR);
+ if (tokens.length < 1) {
+ // A topic must contain at least one token.
+ return false;
+ }
+
+ // Check each token is valid.
+ for (int i = 0; i < tokens.length; i++) {
+ String token = tokens[i];
+ if (!isValidToken(token)) {
+ return false;
+ }
+ }
+
+ // The topic is valid.
+ return true;
+ }
+
+ /**
+ * Check the given token is valid.
+ *
+ * token ::= ( alphanum | "_" | "-" )+
+ *
+ * @param token the token to check.
+ *
+ * @return {@code true} if the given topic token is valid, {@code false}
+ * otherwise.
+ */
+ private static boolean isValidToken(String token) {
+ int length = token.length();
+ if (length < 1) {
+ // Token must contain at least one character.
+ return false;
+ }
+
+ for (int i = 0; i < length; i++) {
+ // Each character in the token must belong to the token alphabet.
+ if (TOKEN_ALPHABET.indexOf(token.charAt(i)) == -1) {
+ return false;
+ }
+ }
+
+ // The token is valid.
+ return true;
+ }
+
+}
Added: felix/trunk/ipojo/handler/eventadmin/eventadmin-handler/src/main/java/org/apache/felix/ipojo/handlers/event/publisher/EventAdminPublisherHandler.java
URL: http://svn.apache.org/viewvc/felix/trunk/ipojo/handler/eventadmin/eventadmin-handler/src/main/java/org/apache/felix/ipojo/handlers/event/publisher/EventAdminPublisherHandler.java?rev=1450816&view=auto
==============================================================================
--- felix/trunk/ipojo/handler/eventadmin/eventadmin-handler/src/main/java/org/apache/felix/ipojo/handlers/event/publisher/EventAdminPublisherHandler.java (added)
+++ felix/trunk/ipojo/handler/eventadmin/eventadmin-handler/src/main/java/org/apache/felix/ipojo/handlers/event/publisher/EventAdminPublisherHandler.java Wed Feb 27 15:51:08 2013
@@ -0,0 +1,282 @@
+/*
+ * 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.handlers.event.publisher;
+
+import java.util.Dictionary;
+import java.util.HashSet;
+import java.util.Hashtable;
+import java.util.Map;
+import java.util.Properties;
+import java.util.Set;
+
+import org.apache.felix.ipojo.ConfigurationException;
+import org.apache.felix.ipojo.InstanceManager;
+import org.apache.felix.ipojo.PrimitiveHandler;
+import org.apache.felix.ipojo.architecture.ComponentTypeDescription;
+import org.apache.felix.ipojo.architecture.HandlerDescription;
+import org.apache.felix.ipojo.architecture.PropertyDescription;
+import org.apache.felix.ipojo.metadata.Element;
+import org.apache.felix.ipojo.parser.FieldMetadata;
+import org.osgi.service.event.EventAdmin;
+
+/**
+ * Event Publisher Handler.
+ *
+ * @author <a href="mailto:dev@felix.apache.org">Felix Project Team</a>
+ */
+public class EventAdminPublisherHandler extends PrimitiveHandler {
+
+ /**
+ * The handler Namespace.
+ */
+ public static final String NAMESPACE = "org.apache.felix.ipojo.handlers.event";
+
+ /**
+ * The names of instance configuration properties.
+ */
+ public static final String TOPICS_PROPERTY = "event.topics";
+
+ /**
+ * The prefix for logged messages.
+ */
+ private static final String LOG_PREFIX = "EVENT ADMIN PUBLISHER HANDLER : ";
+
+ /**
+ * The instance manager.
+ */
+ private InstanceManager m_manager;
+
+ /**
+ * The current EventAdmin service.
+ */
+ private EventAdmin m_ea;
+
+ /**
+ * The publishers accessible by their fields.
+ */
+ private Map m_publishersByField = new Hashtable();
+
+ /**
+ * The handler description
+ */
+ private EventAdminPublisherHandlerDescription m_description;
+
+ /**
+ * Initializes the component type.
+ *
+ * @param cd the component type description to populate
+ * @param metadata the component type metadata
+ * @throws ConfigurationException if the given metadata is incorrect.
+ * @see org.apache.felix.ipojo.Handler#initializeComponentFactory(
+ * org.apache.felix.ipojo.architecture.ComponentTypeDescription, org.apache.felix.ipojo.metadata.Element)
+ */
+ public void initializeComponentFactory(ComponentTypeDescription cd,
+ Element metadata)
+ throws ConfigurationException {
+
+ // Update the current component description
+ Dictionary dict = new Properties();
+ PropertyDescription pd = new PropertyDescription(TOPICS_PROPERTY,
+ Dictionary.class.getName(), dict.toString());
+ cd.addProperty(pd);
+
+ // Get Metadata publishers
+ Element[] publishers = metadata.getElements("publisher", NAMESPACE);
+
+ // if publisher is null, look for 'publishes' elements
+ if (publishers == null || publishers.length == 0) {
+ publishers = metadata.getElements("publishes", NAMESPACE);
+ }
+
+ if (publishers != null) {
+
+ // Maps used to check name and field are unique
+ Set nameSet = new HashSet();
+ Set fieldSet = new HashSet();
+
+ // Check all publishers are well formed
+ for (int i = 0; i < publishers.length; i++) {
+
+ // Check the publisher configuration is correct by creating an
+ // unused publisher metadata
+ EventAdminPublisherMetadata publisherMetadata = new EventAdminPublisherMetadata(
+ publishers[i]);
+ String name = publisherMetadata.getName();
+ info(LOG_PREFIX + "Checking publisher " + name);
+
+ // Check field existence and type
+ String field = publisherMetadata.getField();
+ FieldMetadata fieldMetadata = getPojoMetadata()
+ .getField(publisherMetadata.getField(),
+ Publisher.class.getName());
+ if (fieldMetadata == null) {
+ throw new ConfigurationException(
+ "Field not found in the component : "
+ + Publisher.class.getName() + " " + field);
+ }
+
+ // Check name and field are unique
+ if (nameSet.contains(name)) {
+ throw new ConfigurationException(
+ "A publisher with the same name already exists : "
+ + name);
+ } else if (fieldSet.contains(field)) {
+ throw new ConfigurationException("The field " + field
+ + " is already associated to a publisher");
+ }
+ nameSet.add(name);
+ fieldSet.add(field);
+ }
+ } else {
+ info(LOG_PREFIX + "No publisher to check");
+ }
+ }
+
+ /**
+ * Constructor.
+ *
+ * @param metadata the component type metadata
+ * @param conf the instance configuration
+ * @throws ConfigurationException if one event publication is not correct
+ * @see org.apache.felix.ipojo.Handler#configure(org.apache.felix.ipojo.metadata.Element, java.util.Dictionary)
+ */
+ public void configure(Element metadata, Dictionary conf)
+ throws ConfigurationException {
+
+ // Store the component manager
+ m_manager = getInstanceManager();
+
+ // Get the topics instance configuration
+ Dictionary instanceTopics = (Dictionary) conf.get(TOPICS_PROPERTY);
+
+ // Get Metadata publishers
+ Element[] publishers = metadata.getElements("publisher", NAMESPACE);
+
+ // if publisher is null, look for 'publishes' elements
+ if (publishers == null || publishers.length == 0) {
+ publishers = metadata.getElements("publishes", NAMESPACE);
+ }
+
+ if (publishers != null) {
+ // then check publishers are well formed and fill the publishers'
+ // map
+ for (int i = 0; i < publishers.length; i++) {
+
+ // Extract the publisher configuration
+ EventAdminPublisherMetadata publisherMetadata = new EventAdminPublisherMetadata(
+ publishers[i]);
+ String name = publisherMetadata.getName();
+ info(LOG_PREFIX + "Configuring publisher " + name);
+
+ // Get the topic instance configuration if redefined
+ String topicsString = (instanceTopics != null) ? (String) instanceTopics
+ .get(name)
+ : null;
+ if (topicsString != null) {
+ publisherMetadata.setTopics(topicsString);
+ }
+
+ // Check the publisher is correctly configured
+ publisherMetadata.check();
+
+ // Create the associated Publisher and insert it in the
+ // publisher map
+ Publisher publisher = new PublisherImpl(this, publisherMetadata
+ .getTopics(), publisherMetadata.isSynchronous(),
+ publisherMetadata.getDataKey(), m_manager
+ .getInstanceName());
+ m_publishersByField
+ .put(publisherMetadata.getField(), publisher);
+
+ // Register the callback that return the publisher
+ // reference when the specified field is read by the
+ // POJO.
+ FieldMetadata fieldMetadata = getPojoMetadata()
+ .getField(publisherMetadata.getField(),
+ Publisher.class.getName());
+ m_manager.register(fieldMetadata, this);
+
+ }
+ } else {
+ info(LOG_PREFIX + "No publisher to configure");
+ }
+
+ setValidity(true);
+
+ debug(LOG_PREFIX+ "Setup description....");
+ m_description = new EventAdminPublisherHandlerDescription(this, m_publishersByField.values()); // Initialize the description.
+
+ }
+
+ /**
+ * Starts the handler instance.
+ *
+ * This method does nothing.
+ */
+ public void start() {
+ }
+
+ /**
+ * Stops the handler instance.
+ *
+ * This method does nothing.
+ */
+ public void stop() {
+ }
+
+ /**
+ * Field interceptor callback. This method is called when the component
+ * attempt to one of its Publisher field.
+ *
+ * @param pojo the accessed field
+ * @param fieldName the name of the accessed field
+ * @param value the value of the field (useless here)
+ *
+ * @return the Publisher associated with the accessed field's name
+ */
+ public Object onGet(Object pojo, String fieldName, Object value) {
+ // Retrieve the publisher associated to the given field name
+ Publisher pub = (Publisher) m_publishersByField.get(fieldName);
+ if (pub == null) {
+ error(LOG_PREFIX + "No publisher associated to the field "
+ + fieldName);
+ }
+ return pub;
+ }
+
+ /**
+ * This method is called by managed publishers to obtain the current
+ * EventAdmin service.
+ *
+ * @return the current EventAdmin service.
+ */
+ public EventAdmin getEventAdminService() {
+ return m_ea;
+ }
+
+ /**
+ * Gets the handler description
+ * @see org.apache.felix.ipojo.Handler#getDescription()
+ */
+ public HandlerDescription getDescription() {
+ return m_description;
+ }
+
+
+}