Move first stab at ServiceMix 5 into a separate branch
git-svn-id: https://svn.apache.org/repos/asf/servicemix/smx5/branches/first_stab_at_smx5@1442546 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/assembly/pom.xml b/assembly/pom.xml
new file mode 100644
index 0000000..c09d337
--- /dev/null
+++ b/assembly/pom.xml
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<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">
+
+ <!--
+
+ 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.
+ -->
+
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>org.apache.servicemix</groupId>
+ <artifactId>servicemix-parent</artifactId>
+ <version>5.0.0-SNAPSHOT</version>
+ </parent>
+
+ <groupId>org.apache.servicemix</groupId>
+ <artifactId>apache-servicemix</artifactId>
+ <packaging>pom</packaging>
+ <version>5.0.0-SNAPSHOT</version>
+ <name>Apache ServiceMix :: Assembly</name>
+
+</project>
diff --git a/console/pom.xml b/console/pom.xml
new file mode 100644
index 0000000..edbb1b5
--- /dev/null
+++ b/console/pom.xml
@@ -0,0 +1,158 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<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">
+
+ <!--
+
+ 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.
+ -->
+
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>org.apache.servicemix</groupId>
+ <artifactId>servicemix-parent</artifactId>
+ <version>5.0.0-SNAPSHOT</version>
+ </parent>
+
+ <groupId>org.apache.servicemix</groupId>
+ <artifactId>servicemix-console</artifactId>
+ <packaging>war</packaging>
+ <version>5.0.0-SNAPSHOT</version>
+ <name>Apache ServiceMix :: Console</name>
+
+ <properties>
+ <jetty-port>8080</jetty-port>
+ </properties>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.fusesource.scalate</groupId>
+ <artifactId>scalate-wikitext</artifactId>
+ <version>${scalate-version}</version>
+ </dependency>
+ <dependency>
+ <groupId>ch.qos.logback</groupId>
+ <artifactId>logback-classic</artifactId>
+ <version>0.9.24</version>
+ </dependency>
+ <dependency>
+ <groupId>org.slf4j</groupId>
+ <artifactId>slf4j-api</artifactId>
+ <version>1.6.0</version>
+ </dependency>
+ <dependency>
+ <groupId>org.scala-lang</groupId>
+ <artifactId>scala-library</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.scala-lang</groupId>
+ <artifactId>scala-compiler</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>org.fusesource.scalamd</groupId>
+ <artifactId>scalamd</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>org.fusesource.scalate</groupId>
+ <artifactId>scalate-util</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>com.sun.jersey</groupId>
+ <artifactId>jersey-server</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>com.sun.jersey</groupId>
+ <artifactId>jersey-client</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>com.sun.jersey</groupId>
+ <artifactId>jersey-json</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>com.sun.xml.bind</groupId>
+ <artifactId>jaxb-impl</artifactId>
+ </dependency>
+ </dependencies>
+
+ <build>
+ <sourceDirectory>src/main/scala</sourceDirectory>
+
+ <resources>
+ <resource>
+ <directory>src/main/resources</directory>
+ <filtering>false</filtering>
+ </resource>
+ </resources>
+
+ <plugins>
+ <plugin>
+ <artifactId>maven-war-plugin</artifactId>
+ <configuration>
+ <attachClasses>true</attachClasses>
+ </configuration>
+ </plugin>
+
+ <!--
+ <plugin>
+ <groupId>org.fusesource.scalate</groupId>
+ <artifactId>maven-scalate-plugin</artifactId>
+ <version>${scalate-version}</version>
+ <executions>
+ <execution>
+ <goals>
+ <goal>precompile</goal>
+ </goals>
+ <phase>process-classes</phase>
+ </execution>
+ </executions>
+ </plugin>
+ -->
+
+ <plugin>
+ <groupId>org.mortbay.jetty</groupId>
+ <artifactId>jetty-maven-plugin</artifactId>
+ <version>${jetty-version}</version>
+ <configuration>
+ <!--
+ <connectors> <connector implementation="org.eclipse.jetty.server.nio.SelectChannelConnector">
+ <port>${jetty.port}</port> <maxIdleTime>60000</maxIdleTime>
+ </connector> </connectors>
+ -->
+
+ <webAppConfig>
+ <contextPath>/</contextPath>
+ </webAppConfig>
+
+ <systemProperties>
+ <!-- enable easy JMX connection to JConsole -->
+ <systemProperty>
+ <name>com.sun.management.jmxremote</name>
+ <value/>
+ </systemProperty>
+ </systemProperties>
+ <!--
+ <scanIntervalSeconds>10</scanIntervalSeconds>
+ -->
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+</project>
diff --git a/console/src/main/scala/org/apache/servicemix/console/JSonProvider.scala b/console/src/main/scala/org/apache/servicemix/console/JSonProvider.scala
new file mode 100644
index 0000000..9c4e407
--- /dev/null
+++ b/console/src/main/scala/org/apache/servicemix/console/JSonProvider.scala
@@ -0,0 +1,12 @@
+package org.apache.servicemix.console
+
+import org.codehaus.jackson.jaxrs.Annotations
+import org.codehaus.jackson.jaxrs.JacksonJsonProvider
+import org.codehaus.jackson.map.SerializationConfig
+
+class JsonProvider extends JacksonJsonProvider(Annotations.JAXB) {
+
+ configure(SerializationConfig.Feature.FAIL_ON_EMPTY_BEANS, false)
+
+}
+
diff --git a/console/src/main/webapp/WEB-INF/scalate/layouts/default.scaml b/console/src/main/webapp/WEB-INF/scalate/layouts/default.scaml
new file mode 100644
index 0000000..c9da696
--- /dev/null
+++ b/console/src/main/webapp/WEB-INF/scalate/layouts/default.scaml
@@ -0,0 +1,116 @@
+-#
+-# Copyright (C) 2009-2010 the original author or authors.
+-# See the notice.md file distributed with this work for additional
+-# information regarding copyright ownership.
+-#
+-# Licensed 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.
+-#
+
+-@ var body: String
+-@ var title : String = "Apache Karaf ${pom.version} Guide"
+- response.setContentType("text/html")
+
+-# Only include the console if it's available and the engine is in dev mode.
+- val include_console = engine.isDevelopmentMode && engine.resourceLoader.exists("/org/fusesource/scalate/console/console_head.scaml")
+
+!!! Basic
+%html(lang="en")
+ %head
+ %meta(http-equiv="Content-Type" content="text/html; charset=utf-8")
+ %meta(name="description" content="description goes here")
+ %meta(name="keywords" content="keywords,goes,here")
+ %meta(name="author" content="The Apache Karaf Team")
+
+ - if (include_console)
+ = include("/org/fusesource/scalate/console/console_head.scaml")
+
+ %link(href={uri("/css/style.css")} rel="stylesheet" type="text/css")
+ %link(href={uri("/css/pygmentize.css")} rel="stylesheet" type="text/css")
+
+ - if (include_console)
+ %link(href={uri("/css/scalate/console.css")} rel="stylesheet" type="text/css")
+
+ %title
+ = title
+
+ %body
+ %table{:width => "100%", :cellpadding => "0", :cellspacing => "0"}
+ %tr{:width => "100%"}
+ %td#cell-0-0{:colspan => "2"}
+
+ %td#cell-0-1
+
+ %td#cell-0-2{:colspan => "2"}
+
+ %tr{:width => "100%"}
+ %td#cell-1-0
+
+ %td#cell-1-1
+
+ %td#cell-1-2
+ %div{:style => "padding: 5px;"}
+ #banner
+ = include("/_banner.ssp")
+ #top-menu
+ %table{:border => "0", :cellpadding => "1", :cellspacing => "0", :width => "100%"}
+ %tr
+ %td
+ %div{:align => "left"}
+ %td
+ %div{:align => "right"}
+ = include("/_quicklinks.ssp")
+ %td#cell-1-3
+
+ %td#cell-1-4
+
+ %tr{:width => "100%"}
+ %td#cell-2-0{:colspan => "2"}
+
+ %td#cell-2-1
+ %table
+ %tr{:height => "100%", :valign => "top"}
+ %td{:height => "100%"}
+ #wrapper-menu-page-right
+ #wrapper-menu-page-top
+ #wrapper-menu-page-bottom
+ #menu-page
+ = include("/_navigation.conf")
+ %td{:height =>"100%", :width => "100%"}
+ .wiki-content
+ !~~ body
+ %td#cell-2-2{:colspan => "2"}
+
+ %tr{:width => "100%"}
+ %td#cell-3-0
+
+ %td#cell-3-1
+
+ %td#cell-3-2
+ #footer
+ #site-footer
+ © 2008-2011 The Apache Software Foundation
+ %br
+ Apache ServiceMix, ServiceMix, Apache, the Apache feather logo, and the Apache ServiceMix project logo are trademarks of The Apache Software Foundation.
+ %td#cell-3-3
+
+ %td#cell-3-4
+
+ %tr{:width => "100%"}
+ %td#cell-4-0{:colspan => "2"}
+
+ %td#cell-4-1
+
+ %td#cell-4-2{:colspan => "2"}
+
+ - if (include_console)
+ = include("/org/fusesource/scalate/console/console.scaml")
diff --git a/console/src/main/webapp/WEB-INF/scalate/layouts/print.ssp b/console/src/main/webapp/WEB-INF/scalate/layouts/print.ssp
new file mode 100644
index 0000000..1a042ef
--- /dev/null
+++ b/console/src/main/webapp/WEB-INF/scalate/layouts/print.ssp
@@ -0,0 +1,817 @@
+<%--
+Copyright (C) 2009-2010 the original author or authors.
+See the notice.md file distributed with this work for additional
+information regarding copyright ownership.
+
+Licensed 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.
+--%>
+<%@ var body: String %>
+<%@ var title: String = "Apache Karaf ${karaf.version}" %>
+<% escapeMarkup = false %>
+<!DOCTYPE html>
+<html>
+<head>
+ <style type="text/css">
+/*
+
+Copyright (c) 2005 Hakon Wium Lie and Bert Bos
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
+*/
+html {
+ margin: 0; padding: 0;
+ font: 10pt/1.26 "Gill Sans", sans-serif;
+}
+
+h1, h2, h3, h4, h5, h6 {
+ font-family: "Gill Sans", sans-serif;
+ margin: 2em 0 0.5em 0;
+ page-break-after: avoid;
+}
+
+h1 {
+ font-size: 2.0em;
+ font-weight: 900;
+
+ margin: 0;
+ margin-left:-2cm;
+ margin-top:-1cm;
+ margin-bottom:1.5cm;
+ top: 0cm;
+ left: 0cm;
+ padding: 2cm;
+ padding-top: 0cm;
+ padding-bottom: 1cm;
+ background: #888;
+ border-bottom-right-radius: 2cm;
+ page-break-before: always;
+ page-break-inside: avoid;
+}
+
+@media screen, handheld {
+h1 {
+ margin-top:1cm;
+ background-image: url("chapter-rounded-bottom.png");
+ background-repeat: no-repeat;
+ background-position: bottom right;
+}
+div.page-reset > h1 {
+ margin-top:0cm;
+}
+}
+
+
+h2 {
+ font-size: 1.2em;
+ text-transform: uppercase;
+ font-weight: bold;
+}
+
+h3 {
+ font-size: 1em;
+ font-weight: bold;
+}
+
+q::before {
+ content: "\201C";
+}
+
+q::after {
+ content: "\201D";
+}
+
+p { margin: 0 }
+p + p { text-indent: 1.3em ; margin-top: 0.2em; }
+p.sidenote + p, p.caption, p.art { text-indent: 0 }
+
+p.author {
+ margin-top: 2em;
+ text-indent: 0;
+ text-align: right;
+}
+
+a { text-decoration: none; color: black }
+
+/* cross-references */
+
+a.pageref::after { content: " on page " target-counter(attr(href), page); }
+a.chapref::before { content: " Chapter " target-counter(attr(href), chapter) ", "; }
+a.figref { content: " Figure " target-counter(attr(href), figure); }
+a.tableref { content: " Table " target-counter(attr(href), figure); }
+a.listingref { content: " Listing " target-counter(attr(href), listing); }
+
+/* sidenotes */
+
+.sidenote {
+ float: left;
+ clear: left;
+ margin: 0 0 1em -41%;
+ width: 37%;
+ font-size: 0.9em;
+ font-style: normal;
+ text-indent: 0;
+ text-align: right;
+ page-break-inside: avoid;
+}
+
+/* sidebars */
+
+div.sidebar {
+ float: top-next;
+ margin: 1.2em 0 1.2em 0;
+ border: thin solid;
+ background: #CCC;
+ padding: 0.5em 1em;
+ page-break-inside: avoid;
+ column-count: 2;
+ column-gap: 1.5em;
+}
+
+div.sidebar h2 {
+ margin-top: 0;
+}
+
+/* frontpage */
+
+.title p{
+ font-size:22pt;
+ font-family: "Gill Sans", sans-serif;
+ text-align: center;
+}
+
+.copyright-section {
+ text-align: center;
+ font-size: 9pt;
+ page-break-after: always;
+ margin-top: 50pt;
+ margin-bottom: 20pt;
+}
+
+.toc-title {
+ font-size:18pt;
+ font-family: "Gill Sans", sans-serif;
+ text-align: left;
+ margin-left:20pt;
+ margin-bottom: 40pt;
+
+}
+
+/* figures, tables, and listings */
+
+div.confluenceTableSmall th.confluenceTh {
+ font-size: 11px;
+}
+
+div.confluenceTableSmall td.confluenceTd {
+ font-size: 7px;
+}
+
+div.figure {
+ margin: 1em 0;
+ counter-increment: figure;
+}
+
+div.figure .caption, div.table .caption {
+ font-size: 0.9em;
+ font-style: italic;
+}
+
+div.figure .caption::before {
+ content: "Figure " counter(figure) ". ";
+ font-weight: bold;
+ font-style: normal;
+}
+
+div.table .caption::before {
+ content: "Table " counter(table) ". ";
+ font-weight: bold;
+ font-style: normal;
+}
+
+div.table {
+ margin: 1em 0;
+ counter-increment: table;
+}
+
+div.table th {
+ text-align: left;
+}
+
+table th, table td {
+ text-align: left;
+ padding-right: 1em;
+ page-break-inside: avoid;
+}
+
+table th {
+ border-top: thin solid;
+ border-bottom: thin solid;
+ padding-top: 0.2em;
+ padding-bottom: 0.2em;
+}
+table td {
+ border-top: none;
+ border-bottom: thin dotted;
+ padding-top: 0.2em;
+ padding-bottom: 0.2em;
+}
+
+div.Scrollbar {
+ display: none;
+}
+
+
+/* Weird div.codeHeader a b::before would be a better selection
+ but prince does not properly match it.. Firefox does. */
+div.codeHeader::before {
+ content: "Listing " counter(listing) ". ";
+ font-weight: bold;
+ font-style: normal;
+}
+div.codeHeader a b {
+ font-style: italic;
+ font-weight: normal;
+}
+div.codeHeader {
+ font-size: 0.9em;
+ counter-increment: listing;
+}
+div.code {
+ border: 1px dashed #c0c0c0;
+ font-size: 12px;
+ font-family: Courier;
+ margin: 5px;
+ line-height: 13px;
+ padding: 3px;
+ background-color: #f8f8f8;
+
+}
+
+
+@page {
+ margin: 2cm;
+ size: 7in 9.25in;
+
+ @footnotes {
+ border-top: thin solid black;
+ padding-top: 0.3em;
+ margin-top: 0.6em;
+ }
+}
+
+
+/* define default page and names pages: cover, blank, frontmatter */
+div.page-reset {
+ counter-reset: page 1;
+}
+
+@page :left {
+ @top-left-corner {
+ font-weight: 900; font: 9pt "Gill Sans", serif;
+ content: counter(page);
+ text-align: left;
+ margin-left: 1cm;
+ visibility: hidden;
+ }
+ @top-left {
+ font-weight: 900;
+ font: 9pt "Gill Sans", serif; white-space: pre; text-transform: uppercase; letter-spacing: 0.1em;
+ content: string(header, first);
+ visibility: hidden;
+ }
+ @bottom-left-corner {
+ font-weight: 900; font: 9pt "Gill Sans", serif;
+ content: counter(page);
+ text-align: left;
+ margin-left: 1cm;
+ }
+ @bottom-left {
+ font-weight: 900;
+ font: 9pt "Gill Sans", serif; white-space: pre; text-transform: uppercase; letter-spacing: 0.1em;
+ content: string(header, first);
+ }
+}
+
+@page :right {
+ @top-right-corner {
+ font-weight: 900; font: 9pt "Gill Sans", serif;
+ content: counter(page);
+ text-align: left;
+ margin-left: 1cm;
+ visibility: hidden;
+ }
+ @top-right {
+ font-weight: 900;
+ font: 9pt "Gill Sans", serif; white-space: pre; text-transform: uppercase; letter-spacing: 0.1em;
+ content: string(header, first)
+ visibility: hidden;
+ }
+ @bottom-right-corner {
+ font-weight: 900; font: 9pt "Gill Sans", serif;
+ content: counter(page);
+ text-align: right;
+ margin-right: 1cm;
+ }
+ @bottom-right {
+ font-weight: 900; font: 9pt "Gill Sans", serif;
+ white-space: pre; text-transform: uppercase; letter-spacing: 0.1em;
+ content: string(header, first)
+ }
+}
+
+/*
+ In theory we should be able to use the :first selector so taht
+ we can put the page numbering on the bottom of the first page of the chapter
+ but have the rest of the pages number at the top. But this does not seem
+ to work. See http://www.princexml.com/doc/6.0/page-selectors/
+
+ So for now just always number at the bottom :(
+*/
+/*
+div.chapter { page: bottom-number; }
+@page bottom-number :first {
+ @top-left {
+ visibility: hidden;
+ }
+ @bottom-left {
+ visibility: visible;
+ }
+ @top-right {
+ visibility: hidden;
+ }
+ @bottom-right {
+ visibility: visible;
+ }
+}
+*/
+
+@page cover { margin: 0; }
+
+@page frontmatter :left {
+ @bottom-left-corner {
+ content: counter(page, lower-roman);
+ }
+ @bottom-left-corner {
+ content: counter(page, lower-roman);
+ }
+}
+
+@page frontmatter :right {
+ @bottom-right-corner {
+ content: counter(page, lower-roman);
+ }
+ @bottom-right-corner {
+ content: counter(page, lower-roman);
+ }
+}
+
+@page blank :left {
+ @top-left { visibility: hidden; }
+ @bottom-left { visibility: hidden; }
+ @top-left-corner { visibility: hidden; }
+ @bottom-left-corner { visibility: hidden; }
+}
+
+@page blank :right {
+ @top-right { visibility: hidden; }
+ @bottom-right { visibility: hidden; }
+ @top-right-corner { visibility: hidden; }
+ @bottom-right-corner { visibility: hidden; }
+}
+
+/* footnotes */
+.footnote {
+ display: none; /* default rule */
+
+ display: prince-footnote; /* prince-specific rules */
+ position: footnote;
+ footnote-style-position: inside;
+
+ counter-increment: footnote;
+ margin-left: 1.4em;
+ font-size: 90%;
+ line-height: 1.4;
+}
+
+.footnote::footnote-call {
+ vertical-align: super;
+ font-size: 80%;
+}
+
+.footnote::footnote-marker {
+ vertical-align: super;
+ color: green;
+ padding-right: 0.4em;
+}
+
+/* Confluence contents to hide */
+#labels-section {
+ display: none;
+}
+#comments-section {
+ display: none;
+}
+#footer {
+ display: none;
+}
+.hidden {
+ display: none;
+}
+
+/*
+ A book consists of different types of sections. We propose to use
+ DIV elements with these class names:
+
+ frontcover
+ halftitlepage: contains the title of the book
+ titlepage: contains the title of the book, name of author(s) and publisher
+ imprint: left page with copyright, publisher, library printing information
+ dedication: right page with short dedication
+ foreword: written by someone other than the author(s)
+ toc: table of contents
+ preface: preface, including acknowledgements
+ chapter: each chapter is given its own DIV element
+ references: contains list of references
+ appendix: each appendix is given its own
+ bibliography
+ glossary
+ index
+ colophon: describes how the book was produced
+ backcover
+
+ A book will use several of the types listed above, but few books
+ will use all of them.
+*/
+
+/* which section uses which named page */
+
+div.halftitlepage, div.titlepage, div.imprint, div.dedication { page: blank }
+div.foreword, div.toc, div.preface { page: frontmatter }
+
+
+/* page breaks */
+div.frontcover, div.halftitlepage, div.titlepage { page-break-before: right }
+div.imprint { page-break-before: always; }
+div.chapter { page-break-before: always; }
+div.dedication, div.foreword, div.toc, div.preface, div.reference,
+div.appendix, div.bibliography, div.glossary, div.index, div.colophon {
+ page-break-before: always
+}
+div.backcover { page-break-before: left }
+
+/* titlepage, halftitlepage */
+
+div.titlepage h1, div.halftitlepage h1 { margin-bottom: 2em; }
+div.titlepage h2, div.halftitlepage h2 { font-size: 1.2em; margin-bottom: 3em; }
+div.titlepage h3, div.halftitlepage h3 { font-size: 1em; margin-bottom: 3em; }
+div.titlepage p, div.halftitlepage p {
+ font-size: 1.4em;
+ font-weight: bold;
+ margin: 0; padding: 0;
+}
+
+
+/* TOC */
+
+ul.toc, ul.toc ul {
+ list-style-type: none;
+ margin: 0; padding: 0;
+ margin-left: 3cm;
+}
+ul.toc ul {
+ margin-left: 1em;
+ font-weight: normal;
+}
+ul.toc > li {
+ font-weight: bold;
+ margin-bottom: 0.5em;
+}
+ul.toc a::after {
+ content: leader('.') target-counter(attr(href), page);
+ font-style: normal;
+}
+ul.toc > li.frontmatter a::after {
+ content: leader('.') target-counter(attr(href), page, lower-roman);
+ font-style: normal;
+}
+ul.toc > li.endmatter a::after {
+ content: leader('.') target-counter(attr(href), page);
+ font-style: normal;
+}
+ul.toc > li.chapter::before {
+ content: "Chapter " counter(toc-chapter, decimal);
+ display: block;
+ margin: 1em 0 0.1em -2.5cm;
+ font-weight: normal;
+ counter-increment: toc-chapter;
+ page-break-after: avoid;
+}
+
+/* chapter numbers */
+
+div.chapter { counter-increment: chapter; }
+div.chapter h1::before {
+ text-transform: uppercase;
+ letter-spacing: 0.15em;
+ content: "Chapter " counter(chapter) " \A\B0 \B0 \B0 \B0\A";
+ white-space: pre;
+ font-size: 50%;
+}
+
+div.frontcover h1::before, div.titlepage h1::before, div.halftitlepage h1::before {
+ content: normal; /* that is, none */
+}
+
+h1 { string-set: header content();}
+div.chapter h1 { string-set: header "Chapter " counter(chapter) " - " content(); }
+
+/* index */
+
+ul.index {
+ list-style-type: none;
+ margin: 0; padding: 0;
+ column-count: 2;
+ column-gap: 1em;
+}
+
+ul.index a::after { content: ", " target-counter(attr(href), page); }
+
+
+span.element, span.attribute {
+ text-transform: uppercase;
+ font-weight: bold;
+ font-size: 80%;
+}
+span.property { font-weight: bold }
+code, span.css, span.value, span.declaration {
+ font: 90% "Lucida Console", "Lucida Sans Typewriter", monospace;
+}
+
+
+@media screen, handheld {
+ html {font: 14px "Gill Sans", sans-serif; }
+ h1 { margin-bottom: 0.5em }
+ div.frontcover, div.halftitlepage, div.titlepage, div.imprint,
+ div.dedication, div.foreword, div.toc, div.index { display: none }
+ body {
+ margin: 0cm;
+ margin-left: 2cm;
+ margin-right: 2cm;
+ }
+}
+
+/*
+ * Enhancements to the take advantage of some of the style markup that
+ * Confluence generates
+ */
+a sup img { visibility: hidden; position: absolute;}
+
+img {
+ prince-image-resolution:150dpi;
+}
+
+table {
+ font: "Lucida Console", "Lucida Sans Typewriter", monospace;
+}
+
+table td {
+ font-size: 10pt;
+}
+
+pre {
+ white-space: pre-wrap;
+}
+
+.codeContent {
+ font-size: 80%;
+}
+.code {
+}
+.code-keyword {
+ color: #000091;
+ background-color: inherit;
+}
+
+.code-object {
+ color: #910091;
+ background-color: inherit;
+}
+
+.code-quote {
+ color: #009100;
+ background-color: inherit;
+}
+
+.code-comment {
+ color: #808080;
+ background-color: inherit;
+}
+
+
+.code-xml .code-keyword {
+ color: inherit;
+ font-weight: bold;
+}
+
+.code-tag {
+ color: #000091;
+ background-color: inherit;
+}
+
+.noteMacro { border-color: #F0C000; background-color: #FFFFCE;}
+.warningMacro { border-color: #CC0000; background-color: #FFCCCC }
+.infoMacro { border-color: #3c78b5; background-color: #D8E4F1; }
+.tipMacro { border-color: #090; background-color: #dfd;}
+.noteMacro, .warningMacro, .infoMacro, .tipMacro, .informationMacroPadding {
+ border: thin solid;
+ float: top-next;
+ margin: 1em 0 1.2em 0;
+ padding: 0.5em;
+ column-count: 2;
+ column-gap: 1.5em;
+ width: 100%;
+}
+table.infoMacro td, table.warningMacro td, table.tipMacro td, table.noteMacro td, table.sectionMacro td {
+ border: none;
+}
+table.infoMacro p, table.warningMacro p, table.tipMacro p, table.noteMacro p, table.sectionMacro p {
+ font-size:x-small;
+ margin-top: 1em;
+}
+ </style>
+ <style type="text/css">
+.syntax .hll { background-color: #ffffcc }
+.syntax { background: #f0f0f0; }
+.syntax .c { color: #60a0b0; font-style: italic } /* Comment */
+.syntax .err { border: 1px solid #FF0000 } /* Error */
+.syntax .k { color: #007020; font-weight: bold } /* Keyword */
+.syntax .o { color: #666666 } /* Operator */
+.syntax .cm { color: #60a0b0; font-style: italic } /* Comment.Multiline */
+.syntax .cp { color: #007020 } /* Comment.Preproc */
+.syntax .c1 { color: #60a0b0; font-style: italic } /* Comment.Single */
+.syntax .cs { color: #60a0b0; background-color: #fff0f0 } /* Comment.Special */
+.syntax .gd { color: #A00000 } /* Generic.Deleted */
+.syntax .ge { font-style: italic } /* Generic.Emph */
+.syntax .gr { color: #FF0000 } /* Generic.Error */
+.syntax .gh { color: #000080; font-weight: bold } /* Generic.Heading */
+.syntax .gi { color: #00A000 } /* Generic.Inserted */
+.syntax .go { color: #808080 } /* Generic.Output */
+.syntax .gp { color: #c65d09; font-weight: bold } /* Generic.Prompt */
+.syntax .gs { font-weight: bold } /* Generic.Strong */
+.syntax .gu { color: #800080; font-weight: bold } /* Generic.Subheading */
+.syntax .gt { color: #0040D0 } /* Generic.Traceback */
+.syntax .kc { color: #007020; font-weight: bold } /* Keyword.Constant */
+.syntax .kd { color: #007020; font-weight: bold } /* Keyword.Declaration */
+.syntax .kn { color: #007020; font-weight: bold } /* Keyword.Namespace */
+.syntax .kp { color: #007020 } /* Keyword.Pseudo */
+.syntax .kr { color: #007020; font-weight: bold } /* Keyword.Reserved */
+.syntax .kt { color: #902000 } /* Keyword.Type */
+.syntax .m { color: #40a070 } /* Literal.Number */
+.syntax .s { color: #4070a0 } /* Literal.String */
+.syntax .na { color: #4070a0 } /* Name.Attribute */
+.syntax .nb { color: #007020 } /* Name.Builtin */
+.syntax .nc { color: #0e84b5; font-weight: bold } /* Name.Class */
+.syntax .no { color: #60add5 } /* Name.Constant */
+.syntax .nd { color: #555555; font-weight: bold } /* Name.Decorator */
+.syntax .ni { color: #d55537; font-weight: bold } /* Name.Entity */
+.syntax .ne { color: #007020 } /* Name.Exception */
+.syntax .nf { color: #06287e } /* Name.Function */
+.syntax .nl { color: #002070; font-weight: bold } /* Name.Label */
+.syntax .nn { color: #0e84b5; font-weight: bold } /* Name.Namespace */
+.syntax .nt { color: #062873; font-weight: bold } /* Name.Tag */
+.syntax .nv { color: #bb60d5 } /* Name.Variable */
+.syntax .ow { color: #007020; font-weight: bold } /* Operator.Word */
+.syntax .w { color: #bbbbbb } /* Text.Whitespace */
+.syntax .mf { color: #40a070 } /* Literal.Number.Float */
+.syntax .mh { color: #40a070 } /* Literal.Number.Hex */
+.syntax .mi { color: #40a070 } /* Literal.Number.Integer */
+.syntax .mo { color: #40a070 } /* Literal.Number.Oct */
+.syntax .sb { color: #4070a0 } /* Literal.String.Backtick */
+.syntax .sc { color: #4070a0 } /* Literal.String.Char */
+.syntax .sd { color: #4070a0; font-style: italic } /* Literal.String.Doc */
+.syntax .s2 { color: #4070a0 } /* Literal.String.Double */
+.syntax .se { color: #4070a0; font-weight: bold } /* Literal.String.Escape */
+.syntax .sh { color: #4070a0 } /* Literal.String.Heredoc */
+.syntax .si { color: #70a0d0; font-style: italic } /* Literal.String.Interpol */
+.syntax .sx { color: #c65d09 } /* Literal.String.Other */
+.syntax .sr { color: #235388 } /* Literal.String.Regex */
+.syntax .s1 { color: #4070a0 } /* Literal.String.Single */
+.syntax .ss { color: #517918 } /* Literal.String.Symbol */
+.syntax .bp { color: #007020 } /* Name.Builtin.Pseudo */
+.syntax .vc { color: #bb60d5 } /* Name.Variable.Class */
+.syntax .vg { color: #bb60d5 } /* Name.Variable.Global */
+.syntax .vi { color: #bb60d5 } /* Name.Variable.Instance */
+.syntax .il { color: #40a070 } /* Literal.Number.Integer.Long */
+
+
+/* don't highlight errors */
+.syntax .err {
+ border: none;
+}
+
+.syntax {
+ font-size: .9em;
+ font-family:Monaco,"Courier New","DejaVu Sans Mono","Bitstream Vera Sans Mono",monospace;
+ background-color: #F8F8FF;
+
+ overflow:auto;
+ -moz-background-clip:border;
+ -moz-background-inline-policy:continuous;
+ -moz-background-origin:padding;
+ margin: 1em 0 1em 0;
+ border:1px solid #DDDDDD;
+
+ border-top-left-radius: 8px; -webkit-border-top-left-radius: 8px; -moz-border-radius-topleft: 8px;
+ border-top-right-radius: 8px; -webkit-border-top-right-radius: 8px; -moz-border-radius-topright: 8px;
+ border-style: solid; border-width: 1px; border-color: #dedede !important;
+ padding: 1em;
+}
+.syntax .linenodiv {
+ background-color:#ECECEC;
+ border-right:1px solid #DDDDDD;
+ color:#AAAAAA;
+ padding: .5em;
+ text-align:right;
+}
+.syntax .highlight {
+}
+.syntax pre {
+ margin:0;
+}
+
+pre.syntax {
+ padding: .5em;
+ background-color: #F8F8FF; overflow:auto;
+}
+
+.syntax code {
+ font-family:Monaco,"Courier New","DejaVu Sans Mono","Bitstream Vera Sans Mono",monospace;
+ font-size: 10pt;
+}
+
+div.compare { width: 700px; }
+div.compare div.compare-left { float:left; width:340px; padding:5px; margin-top: 15px; }
+div.compare div.compare-right { float:right; width:340px; padding:5px; margin-top: 15px; }
+div.compare div h3 {
+ margin-left: 15px;
+ padding: 5px 15px;
+ display: inline;
+ font-size: .8em;
+ color: #666;
+
+ border-top: 1px solid #ccc; -moz-border-top-colors: #ccc white white #e5e5e5;
+ border-left: 1px solid #ccc; -moz-border-left-colors: #ccc white white #e5e5e5;
+ border-right: 1px solid #ccc;-moz-border-right-colors: #ccc white white #e5e5e5;
+ border-top-left-radius: 8px; -webkit-border-top-left-radius: 8px; -moz-border-radius-topleft: 8px;
+ border-top-right-radius: 8px; -webkit-border-top-right-radius: 8px; -moz-border-radius-topright: 8px;
+}
+div.compare div div {
+ margin: 5px 0px 0px 0px;
+}
+.clear {
+ clear:both;
+}
+.wide div.compare div.compare-left { float:none; width:700px; }
+.wide div.compare div.compare-right { float:none; width:700px; }
+
+ </style>
+
+ <title>${title}</title>
+</head>
+<body>
+ <div id="titlepage">
+ <div id="title">Apache Karaf</div>
+ <div id="subtitle">Version ${karaf.version}</div>
+ </div>
+ <div id="main">
+ <%= body %>
+ </div>
+</body>
+</html>
diff --git a/console/src/main/webapp/WEB-INF/web.xml b/console/src/main/webapp/WEB-INF/web.xml
new file mode 100644
index 0000000..9b44f34
--- /dev/null
+++ b/console/src/main/webapp/WEB-INF/web.xml
@@ -0,0 +1,50 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+ Copyright (C) 2009-2010 the original author or authors.
+ See the notice.md file distributed with this work for additional
+ information regarding copyright ownership.
+
+ Licensed 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.
+
+-->
+
+<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
+ xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
+ version="2.5">
+
+ <display-name>Apache ServiceMix Documentation</display-name>
+
+ <description>
+ Apache ServiceMix Documentation
+ </description>
+
+ <filter>
+ <filter-name>TemplateEngineFilter</filter-name>
+ <filter-class>org.fusesource.scalate.servlet.TemplateEngineFilter</filter-class>
+ </filter>
+ <filter-mapping>
+ <filter-name>TemplateEngineFilter</filter-name>
+ <url-pattern>/*</url-pattern>
+ </filter-mapping>
+
+ <welcome-file-list>
+ <welcome-file>index.conf</welcome-file>
+ </welcome-file-list>
+
+ <error-page>
+ <error-code>500</error-code>
+ <location>/WEB-INF/scalate/errors/500.scaml</location>
+ </error-page>
+</web-app>
diff --git a/console/src/main/webapp/_banner.ssp b/console/src/main/webapp/_banner.ssp
new file mode 100644
index 0000000..899fa60
--- /dev/null
+++ b/console/src/main/webapp/_banner.ssp
@@ -0,0 +1,15 @@
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr>
+ <td align="left" class="topbardiv" nowrap="">
+<a href="http://servicemix.apache.org/" title="An Open Source ESB and Integration Plaftorm powered by OSGi">
+ <img border="0" src="${uri("/images/smx-logo.png")}" width="400px"></img>
+ <span style="position: relative; top: -24px; font-family: Comic Sans MS; font-size: 64px; color: white;"></span>
+</a>
+ </td>
+ <td align="right" nowrap="">
+<a href="http://www.apache.org/" title="The Apache Sofware Foundation">
+ <img border="0" src="${uri("/images/asf-logo.png")}">
+</a>
+ </td>
+ </tr>
+ </table>
diff --git a/console/src/main/webapp/_navigation.conf b/console/src/main/webapp/_navigation.conf
new file mode 100644
index 0000000..ddb1684
--- /dev/null
+++ b/console/src/main/webapp/_navigation.conf
@@ -0,0 +1,2 @@
+h3. [Home|/index]
+
diff --git a/console/src/main/webapp/_quicklinks.ssp b/console/src/main/webapp/_quicklinks.ssp
new file mode 100644
index 0000000..334d683
--- /dev/null
+++ b/console/src/main/webapp/_quicklinks.ssp
@@ -0,0 +1,8 @@
+<p>
+<a href="${uri("/index.html")}" title="Home">Home</a>
+|
+<a href="${uri("/index.html")}" title="Home">Home</a>
+|
+<a href="${uri("/index.html")}" title="Home">Home</a>
+</p>
+
diff --git a/console/src/main/webapp/css/pygmentize.css b/console/src/main/webapp/css/pygmentize.css
new file mode 100644
index 0000000..80efdcd
--- /dev/null
+++ b/console/src/main/webapp/css/pygmentize.css
@@ -0,0 +1,134 @@
+.syntax .hll { background-color: #ffffcc }
+.syntax { background: #f0f0f0; }
+.syntax .c { color: #60a0b0; font-style: italic } /* Comment */
+.syntax .err { border: 1px solid #FF0000 } /* Error */
+.syntax .k { color: #007020; font-weight: bold } /* Keyword */
+.syntax .o { color: #666666 } /* Operator */
+.syntax .cm { color: #60a0b0; font-style: italic } /* Comment.Multiline */
+.syntax .cp { color: #007020 } /* Comment.Preproc */
+.syntax .c1 { color: #60a0b0; font-style: italic } /* Comment.Single */
+.syntax .cs { color: #60a0b0; background-color: #fff0f0 } /* Comment.Special */
+.syntax .gd { color: #A00000 } /* Generic.Deleted */
+.syntax .ge { font-style: italic } /* Generic.Emph */
+.syntax .gr { color: #FF0000 } /* Generic.Error */
+.syntax .gh { color: #000080; font-weight: bold } /* Generic.Heading */
+.syntax .gi { color: #00A000 } /* Generic.Inserted */
+.syntax .go { color: #808080 } /* Generic.Output */
+.syntax .gp { color: #c65d09; font-weight: bold } /* Generic.Prompt */
+.syntax .gs { font-weight: bold } /* Generic.Strong */
+.syntax .gu { color: #800080; font-weight: bold } /* Generic.Subheading */
+.syntax .gt { color: #0040D0 } /* Generic.Traceback */
+.syntax .kc { color: #007020; font-weight: bold } /* Keyword.Constant */
+.syntax .kd { color: #007020; font-weight: bold } /* Keyword.Declaration */
+.syntax .kn { color: #007020; font-weight: bold } /* Keyword.Namespace */
+.syntax .kp { color: #007020 } /* Keyword.Pseudo */
+.syntax .kr { color: #007020; font-weight: bold } /* Keyword.Reserved */
+.syntax .kt { color: #902000 } /* Keyword.Type */
+.syntax .m { color: #40a070 } /* Literal.Number */
+.syntax .s { color: #4070a0 } /* Literal.String */
+.syntax .na { color: #4070a0 } /* Name.Attribute */
+.syntax .nb { color: #007020 } /* Name.Builtin */
+.syntax .nc { color: #0e84b5; font-weight: bold } /* Name.Class */
+.syntax .no { color: #60add5 } /* Name.Constant */
+.syntax .nd { color: #555555; font-weight: bold } /* Name.Decorator */
+.syntax .ni { color: #d55537; font-weight: bold } /* Name.Entity */
+.syntax .ne { color: #007020 } /* Name.Exception */
+.syntax .nf { color: #06287e } /* Name.Function */
+.syntax .nl { color: #002070; font-weight: bold } /* Name.Label */
+.syntax .nn { color: #0e84b5; font-weight: bold } /* Name.Namespace */
+.syntax .nt { color: #062873; font-weight: bold } /* Name.Tag */
+.syntax .nv { color: #bb60d5 } /* Name.Variable */
+.syntax .ow { color: #007020; font-weight: bold } /* Operator.Word */
+.syntax .w { color: #bbbbbb } /* Text.Whitespace */
+.syntax .mf { color: #40a070 } /* Literal.Number.Float */
+.syntax .mh { color: #40a070 } /* Literal.Number.Hex */
+.syntax .mi { color: #40a070 } /* Literal.Number.Integer */
+.syntax .mo { color: #40a070 } /* Literal.Number.Oct */
+.syntax .sb { color: #4070a0 } /* Literal.String.Backtick */
+.syntax .sc { color: #4070a0 } /* Literal.String.Char */
+.syntax .sd { color: #4070a0; font-style: italic } /* Literal.String.Doc */
+.syntax .s2 { color: #4070a0 } /* Literal.String.Double */
+.syntax .se { color: #4070a0; font-weight: bold } /* Literal.String.Escape */
+.syntax .sh { color: #4070a0 } /* Literal.String.Heredoc */
+.syntax .si { color: #70a0d0; font-style: italic } /* Literal.String.Interpol */
+.syntax .sx { color: #c65d09 } /* Literal.String.Other */
+.syntax .sr { color: #235388 } /* Literal.String.Regex */
+.syntax .s1 { color: #4070a0 } /* Literal.String.Single */
+.syntax .ss { color: #517918 } /* Literal.String.Symbol */
+.syntax .bp { color: #007020 } /* Name.Builtin.Pseudo */
+.syntax .vc { color: #bb60d5 } /* Name.Variable.Class */
+.syntax .vg { color: #bb60d5 } /* Name.Variable.Global */
+.syntax .vi { color: #bb60d5 } /* Name.Variable.Instance */
+.syntax .il { color: #40a070 } /* Literal.Number.Integer.Long */
+
+
+/* don't highlight errors */
+.syntax .err {
+ border: none;
+}
+
+.syntax {
+ font-size: .9em;
+ font-family:Monaco,"Courier New","DejaVu Sans Mono","Bitstream Vera Sans Mono",monospace;
+ background-color: #F8F8FF;
+
+ overflow:auto;
+ -moz-background-clip:border;
+ -moz-background-inline-policy:continuous;
+ -moz-background-origin:padding;
+ margin: 1em 0 1em 0;
+ border:1px solid #DDDDDD;
+
+ border-top-left-radius: 8px; -webkit-border-top-left-radius: 8px; -moz-border-radius-topleft: 8px;
+ border-top-right-radius: 8px; -webkit-border-top-right-radius: 8px; -moz-border-radius-topright: 8px;
+ border-style: solid; border-width: 1px; border-color: #dedede !important;
+ padding: 1em;
+}
+.syntax .linenodiv {
+ background-color:#ECECEC;
+ border-right:1px solid #DDDDDD;
+ color:#AAAAAA;
+ padding: .5em;
+ text-align:right;
+}
+.syntax .highlight {
+}
+.syntax pre {
+ margin:0;
+}
+
+pre.syntax {
+ padding: .5em;
+ background-color: #F8F8FF; overflow:auto;
+}
+
+.syntax code {
+ font-family:Monaco,"Courier New","DejaVu Sans Mono","Bitstream Vera Sans Mono",monospace;
+ font-size: 10pt;
+}
+
+div.compare { width: 700px; }
+div.compare div.compare-left { float:left; width:340px; padding:5px; margin-top: 15px; }
+div.compare div.compare-right { float:right; width:340px; padding:5px; margin-top: 15px; }
+div.compare div h3 {
+ margin-left: 15px;
+ padding: 5px 15px;
+ display: inline;
+ font-size: .8em;
+ color: #666;
+
+ border-top: 1px solid #ccc; -moz-border-top-colors: #ccc white white #e5e5e5;
+ border-left: 1px solid #ccc; -moz-border-left-colors: #ccc white white #e5e5e5;
+ border-right: 1px solid #ccc;-moz-border-right-colors: #ccc white white #e5e5e5;
+ border-top-left-radius: 8px; -webkit-border-top-left-radius: 8px; -moz-border-radius-topleft: 8px;
+ border-top-right-radius: 8px; -webkit-border-top-right-radius: 8px; -moz-border-radius-topright: 8px;
+}
+div.compare div div {
+ margin: 5px 0px 0px 0px;
+}
+.clear {
+ clear:both;
+}
+.wide div.compare div.compare-left { float:none; width:700px; }
+.wide div.compare div.compare-right { float:none; width:700px; }
+
diff --git a/console/src/main/webapp/css/scalate/console.css b/console/src/main/webapp/css/scalate/console.css
new file mode 100644
index 0000000..4b2dfe7
--- /dev/null
+++ b/console/src/main/webapp/css/scalate/console.css
@@ -0,0 +1,71 @@
+/**
+ * Copyright (C) 2009-2010 the original author or authors.
+ * See the notice.md file distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * Licensed 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.
+ */
+
+#scalate-console {
+ position:fixed;
+ top:40px;
+ right:10px;
+ background: #FDFCAD;
+ padding:10px;
+ border: 1px solid #BDBD81;
+ font-family:Arial,Verdana,Helvetica,sans-serif;
+ font-size: 80%;
+ max-width: 400px;
+}
+
+#scalate-console .archetypes ul, #scalate-console .templates ul, #scalate-console .resources ul, #scalate-console .layouts ul {
+ padding-left:20px;
+ overflow: auto;
+}
+
+#scalate-console .toggle {
+ text-align: right;
+}
+
+#scalate-console .toggle img {
+ vertical-align: middle;
+}
+
+#scalate-console div.attributes {
+ margin: 10px;
+ overflow: auto;
+ background: white;
+}
+
+#scalate-console div.attributes table th {
+ text-align: left;
+ color: #993333;
+}
+#scalate-console div.attributes table td {
+ padding:2px;
+ border-top: 1px solid #BDBD81;
+}
+
+#scalate-console div.body {
+ margin: 10px;
+ overflow: auto;
+ max-height: 300px;
+ background: white;
+}
+
+#scalate-console div.systemProperties {
+ margin: 10px;
+ overflow: auto;
+ max-height: 300px;
+ background: white;
+}
diff --git a/console/src/main/webapp/css/style.css b/console/src/main/webapp/css/style.css
new file mode 100644
index 0000000..496901e
--- /dev/null
+++ b/console/src/main/webapp/css/style.css
@@ -0,0 +1,1588 @@
+/**
+ * Copyright (C) 2009-2010 the original author or authors.
+ * See the notice.md file distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * Licensed 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.
+ */
+body {
+ margin: 0;
+ padding: 0;
+}
+
+#cell-0-0 { background: white url( '../images/bg02-white-left-nogr.png' ) repeat-y right top; }
+#cell-0-1 { height: 1em; width: 85%; }
+#cell-0-2 { background: transparent url( '../images/bg02-white-right-nogr.png' ) repeat-y left top; }
+#cell-1-0 { background: transparent url( '../images/bg.png' ) repeat-x top; }
+#cell-1-1 { background: transparent url( '../images/bg02-blue-left.png' ) no-repeat right top; width:13px; }
+#cell-1-2 { background: transparent url( '../images/bg.png' ) repeat-x top; width:85%; }
+#banner { height: 80px; }
+#cell-1-3 { background: transparent url( '../images/bg02-blue-right.png' ) no-repeat left top; width:13px; }
+#cell-1-4 { background: transparent url( '../images/bg.png' ) repeat-x top; }
+#cell-2-0 { background: white url( '../images/bg02-white-left-nogr.png' ) repeat-y right top; }
+#cell-2-1 { height: 1em; width: 85%; }
+#cell-2-2 { background: white url( '../images/bg02-white-right-nogr.png' ) repeat-y left top; }
+#cell-3-0 { background: transparent url( '../images/bg.png' ) repeat-x top; }
+#cell-3-1 { background: transparent url( '../images/bg02-blue-left.png' ) no-repeat right top; width:13px; }
+#cell-3-2 { background: transparent url( '../images/bg.png' ) repeat-x top; width:85%; }
+#cell-3-3 { background: transparent url( '../images/bg02-blue-right.png' ) no-repeat left top; width:13px; }
+#cell-3-4 { background: transparent url( '../images/bg.png' ) repeat-x top; }
+#cell-4-0 { background: white url( '../images/bg02-white-left-nogr.png' ) repeat-y right top; }
+#cell-4-1 { height: 1em; width: 85%; }
+#cell-4-2 { background: transparent url( '../images/bg02-white-right-nogr.png' ) repeat-y left top; }
+
+#banner {
+ margin: 0px 20px;
+ padding: 0px 50px 0px 50px;
+ font-size: 200%;
+ text-align: center;
+ background: transparent;
+}
+#top-menu {
+ margin: 0px 25px;
+ padding: 2px;
+ line-height: 100%;
+ font-family: Verdana, arial, sans-serif;
+ font-weight: bold;
+ font-size: 11px;
+ color: white;
+ line-height: 13px;
+ overflow: none;
+}
+#top-menu a:link, #top-menu a:visited {
+ color: #ffffff;
+ text-decoration: none;
+}
+#top-menu a:active, #top-menu a:hover {
+ color: #5b8fbe;
+ text-decoration: underline;
+}
+#top-menu sup img {
+ height: 0px;
+ width: 0px;
+}
+
+#footer {
+ padding: 0px 50px 0px 50px;
+ min-height: 0em;
+ text-align: center;
+ color: white;
+ font-size: 65%;
+ font-family: Verdana, arial, sans-serif;
+}
+#site-footer {
+ margin: 5px;
+}
+#footer a:link, #footer a:visited {
+ color: white;
+ text-decoration: none;
+}
+#footer a:hover {
+ color: white;
+ text-decoration: underline;
+}
+
+#wrapper-menu-page-right {
+ background: transparent url( '../images/left-box-right.png' ) repeat-y right;
+}
+
+#wrapper-menu-page-bottom {
+ background: transparent url( '../images/left-box-bottom.png' ) no-repeat right bottom;
+}
+
+#wrapper-menu-page-top {
+ background: transparent url( '../images/left-box-top.png' ) no-repeat right top;
+}
+
+#menu-page {
+ width: 200px;
+ color: #5b8fbe;
+ font-family: Verdana, arial, sans-serif;
+ font-weight: bold;
+ margin: 0px;
+ padding: 17px 11px 17px 0px;
+ text-align: left;
+ margin-left: 0px;
+ line-height: 1em;
+}
+
+#menu-page ul {
+ margin: 0;
+ padding: 0;
+ padding-left: 35px;
+ font-size: 75%;
+}
+
+#menu-page h3 {
+ font-size: 75%;
+ text-transform: uppercase;
+ margin: 1em 0 0.3em 0;
+ color: #5b8fbe;
+ font-weight: normal;
+ letter-spacing: 0.15em;
+ background: url('../images/big-bullet.png') no-repeat 0pt;
+ background-position:left center;
+ margin-left:15px;
+ padding-left: 20px;
+ font-family: Verdana, arial, sans-serif;
+ font-weight: bold;
+}
+
+#menu-page a:link, #menu-page a:visited {
+ color: black;
+}
+
+#menu-page a:hover {
+ color: #5b8fbe;
+}
+
+#content {
+ padding: 20px 0px 0px 0px;
+ display: block;
+ text-align: left;
+ height: 100%;
+ width: 100%;
+ color: black;
+}
+
+h2 {
+ font-size: 110%;
+}
+
+h3 {
+ font-size: 100%;
+}
+
+a:link, a:visited {
+ color: #5b8fbe;
+ text-decoration: none;
+}
+
+a:hover {
+ color: #666;
+ text-decoration: none;
+}
+
+
+table.align {
+ padding: 0px;
+ border: none;
+}
+
+td.align {
+ padding: 0px;
+ border: none;
+}
+
+/*********************************************************************
+ CSS Elements that are part of the confluence rendered xhtml
+ *********************************************************************/
+.wiki-content {
+ font-family: Verdana, arial, sans-serif;
+ font-size: 11px;
+ line-height: 16px;
+ color: #000000;
+ font-weight: normal;
+ padding-top: 10px;
+ padding-bottom: 10px;
+}
+
+/*
+** when this stylesheet is used for the Tiny MCE Wysiwyg editor's edit area, we can't
+** use an id=PageContent or class=wiki-content, so we must
+** set the body style to that used for PageContent, and p to that used for wiki-content.
+*/
+
+.monospaceInput {
+ font:12px monospace
+}
+
+.wiki-content p, .commentblock p {
+ margin: 16px 0px 16px 0px;
+ padding: 0px;
+}
+
+.wiki-content-preview {
+ padding: 5px;
+ border-left: 1px solid #3c78b5;
+ border-right: 1px solid #3c78b5;
+}
+
+ul, ol {
+ margin-top: 2px;
+ margin-bottom: 2px;
+ padding-top: 0px;
+ padding-bottom: 0px;
+}
+
+pre {
+ padding: 0px;
+ margin-top: 5px;
+ margin-left: 15px;
+ margin-bottom: 5px;
+ margin-right: 5px;
+ text-align: left;
+}
+
+.helpheading {
+ font-weight: bold;
+ background-color: #D0D9BD;
+ border-bottom: 1px solid #3c78b5;
+ padding: 4px 4px 4px 4px;
+ margin: 0px;
+ margin-top: 10px;
+}
+.helpcontent {
+ padding: 4px 4px 20px 4px;
+ background-color: #f5f7f1;
+}
+
+.code {
+ border: 1px dashed #3c78b5;
+ font-size: 11px;
+ font-family: Courier;
+ margin: 10px;
+ line-height: 13px;
+}
+
+.focusedComment {
+ background: #ffffce;
+}
+
+.commentBox, .focusedComment {
+ padding: 10px;
+ margin: 5px 0 5px 0;
+ border: 1px #bbb solid;
+}
+
+.codeHeader {
+ background-color: #f0f0f0;
+ border-bottom: 1px dashed #3c78b5;
+ padding: 3px;
+ text-align: center;
+}
+
+.codeContent {
+ text-align: left;
+ background-color: #f0f0f0;
+ padding: 3px;
+}
+
+.preformatted {
+ border: 1px dashed #3c78b5;
+ font-size: 11px;
+ font-family: Courier;
+ margin: 10px;
+ line-height: 13px;
+}
+
+.preformattedHeader {
+ background-color: #f0f0f0;
+ border-bottom: 1px dashed #3c78b5;
+ padding: 3px;
+ text-align: center;
+}
+
+.preformattedContent {
+ background-color: #f0f0f0;
+ padding: 3px;
+}
+
+.panel {
+ border: 1px dashed #3c78b5;
+ margin: 10px;
+ margin-top: 0px;
+}
+
+.panelHeader {
+ background-color: #f0f0f0;
+ border-bottom: 1px dashed #3c78b5;
+ padding: 3px;
+ text-align: center;
+}
+
+.panelContent {
+ background-color: #f0f0f0;
+ padding: 5px;
+}
+
+.anonymousAlert {
+ background-color: #f0f0f0;
+ border: 1px dashed red;
+ font-size: 11px;
+ padding: 10px 5px 10px 5px;
+ margin: 4px;
+ line-height: 13px;
+}
+
+.lockAlert {
+ background-color: #f0f0f0;
+ width: 50%;
+ border: 1px dashed red;
+ font-size: 11px;
+ padding: 10px 5px 10px 5px;
+ margin: 4px;
+ line-height: 13px;
+}
+
+
+.code-keyword {
+ color: #000091;
+ background-color: inherit;
+}
+
+.code-object {
+ color: #910091;
+ background-color: inherit;
+}
+
+.code-quote {
+ color: #009100;
+ background-color: inherit;
+}
+
+.code-comment {
+ color: #808080;
+ background-color: inherit;
+}
+
+
+.code-xml .code-keyword {
+ color: inherit;
+ font-weight: bold;
+}
+
+.code-tag {
+ color: #000091;
+ background-color: inherit;
+}
+
+.breadcrumbs {
+ background-color: #f0f0f0;
+ border-color: #3c78b5;
+ border-width: 1px 0px 1px 0px;
+ border-style: solid;
+ font-size: 11px;
+ padding: 3px 0px 3px 0px;
+}
+
+.navmenu {
+ border: 1px solid #ccc;
+}
+
+.menuheading {
+ font-weight: bold;
+ background-color: #f0f0f0;
+ border-bottom: 1px solid #3c78b5;
+ padding: 4px 4px 2px 4px;
+}
+
+.menuitems {
+ padding: 4px 4px 20px 4px;
+}
+
+.rightpanel {
+ border-left: 1px solid #ccc;
+ border-bottom: 1px solid #ccc;
+}
+
+#helpheading {
+ text-align: left;
+ font-weight: bold;
+ background-color: #D0D9BD;
+ border-bottom: 1px solid #3c78b5;
+ padding: 4px 4px 4px 4px;
+ margin: 0px;
+}
+#helpcontent {
+ padding: 4px 4px 4px 4px;
+ background-color: #f5f7f1;
+}
+.helptab-unselected {
+ font-weight: bold;
+ padding: 5px;
+ background-color: #f5f7f1;
+}
+.helptab-selected {
+ font-weight: bold;
+ background-color: #D0D9BD;
+ padding: 5px;
+}
+.helptabs {
+ margin: 0px;
+ background-color: #f5f7f1;
+ padding: 5px;
+}
+.infopanel-heading {
+ font-weight: bold;
+ padding: 4px 0px 2px 0px;
+}
+
+.pagebody {
+}
+
+.pageheader {
+ padding: 5px 5px 5px 0px;
+ border-bottom: 1px solid #3c78b5;
+}
+
+.steptitle {
+ font-size: 18px;
+ font-weight: bold;
+ font-family: Arial, sans-serif;
+ color: #003366;
+ margin-bottom: 7px;
+}
+
+.substeptitle {
+ font-size: 12px;
+ font-weight: bold;
+ font-family: Arial, sans-serif;
+ color: #003366;
+ margin: 2px 4px 4px 4px;
+ padding: 2px 4px 1px 4px;
+}
+
+.stepdesc {
+ font-family: Verdana, arial, sans-serif;
+ font-size: 11px;
+ line-height: 16px;
+ font-weight: normal;
+ color: #666666;
+ margin-top: 7px;
+ margin-bottom: 7px;
+}
+
+.steplabel {
+ font-weight: bold;
+ margin-right: 4px;
+ color: black;
+ float: left;
+ width: 15%;
+ text-align: right;
+}
+
+.stepfield {
+ background: #f0f0f0;
+ padding: 5px;
+}
+
+.submitButtons{
+ margin-top:5px;
+ text-align:right;
+}
+
+.formtitle {
+ font-size: 12px;
+ font-weight: bold;
+ font-family: Arial, sans-serif;
+ color: #003366;
+}
+
+.sectionbottom {
+ border-bottom: 1px solid #3c78b5;
+}
+
+.topRow {
+ border-top: 2px solid #3c78b5;
+}
+
+.tabletitle {
+ font-size: 14px;
+ font-weight: bold;
+ font-family: Arial, sans-serif;
+ padding: 3px 0px 2px 0px;
+ margin: 8px 4px 2px 0px;
+ color: #003366;
+ border-bottom: 2px solid #3c78b5;
+}
+.pagesubheading {
+ color: #666666;
+ font-size: 10px;
+ padding: 0px 0px 5px 0px;
+}
+
+HR {
+ color: 3c78b5;
+ height: 1;
+}
+
+A:link, A:visited, A:active, A:hover {
+ color: #5b8fbe;
+}
+
+A:hover {
+ text-decoration: underline;
+}
+
+h1 A:link, h1 A:visited, h1 A:active {
+ text-decoration: none;
+}
+
+h1 A:hover {
+ border-bottom: 1px dotted #003366;
+}
+
+.wiki-content > :first-child, .commentblock > :first-child {
+ margin-top: 3px;
+}
+
+.logocell {
+ padding: 10px;
+}
+
+input {
+ font-family: verdana, geneva, arial, sans-serif;
+ font-size: 11px;
+ color: #000000;
+}
+
+textarea, textarea.editor {
+ font-family: verdana, geneva, arial, sans-serif;
+ font-size: 11px;
+ color: #333333;
+}
+
+/* use logoSpaceLink instead.
+.spacenametitle {
+ font: 21px/31px Impact, Arial, Helvetica;
+ font-weight: 100;
+ color: #999999;
+ margin: 0px;
+}
+.spacenametitle img {
+ margin: 0 0 -4px 0;
+}
+.spacenametitle a {
+ text-decoration: none;
+ color: #999999;
+}
+.spacenametitle a:visited {
+ text-decoration: none;
+ color: #999999;
+}*/
+
+.spacenametitle-printable {
+ font: 20px/25px Impact, Arial, Helvetica;
+ font-weight: 100;
+ color: #999999;
+ margin: 0px;
+}
+.spacenametitle-printable a {
+ text-decoration: none;
+ color: #999999;
+}
+.spacenametitle-printable a:visited {
+ text-decoration: none;
+ color: #999999;
+}
+
+.blogDate {
+ font-weight: bold;
+ text-decoration: none;
+ color: black;
+}
+
+.blogSurtitle {
+ background: #f0f0f0;
+ border: 1px solid #ddd;
+ padding: 3px;
+ margin: 1px 1px 10px 1px;
+}
+
+.blogHeading {
+ font-size: 20px;
+ line-height: normal;
+ font-weight: bold;
+ padding: 0px;
+ margin: 0px;
+}
+
+.blogHeading a {
+ text-decoration: none;
+ color: black;
+}
+
+.endsection {
+ align: right;
+ color: #666666;
+ margin-top: 10px;
+}
+.endsectionleftnav {
+ align: right;
+ color: #666666;
+ margin-top: 10px;
+}
+
+h1 {
+ font-size: 24px;
+ line-height: normal;
+ font-weight: bold;
+ background-color: #f0f0f0;
+ color: #003366;
+ border-bottom: 1px solid #3c78b5;
+ padding: 2px;
+ margin: 36px 0px 4px 0px;
+}
+
+h2 {
+ font-size: 18px;
+ line-height: normal;
+ font-weight: bold;
+ background-color: #f0f0f0;
+ border-bottom: 1px solid #3c78b5;
+ padding: 2px;
+ margin: 27px 0px 4px 0px;
+}
+
+h3 {
+ font-size: 14px;
+ line-height: normal;
+ font-weight: bold;
+ background-color: #f0f0f0;
+ padding: 2px;
+ margin: 21px 0px 4px 0px;
+}
+
+h4 {
+ font-size: 12px;
+ line-height: normal;
+ font-weight: bold;
+ background-color: #f0f0f0;
+ padding: 2px;
+ margin: 18px 0px 4px 0px;
+}
+
+h4.search {
+ font-size: 12px;
+ line-height: normal;
+ font-weight: normal;
+ background-color: #f0f0f0;
+ padding: 4px;
+ margin: 18px 0px 4px 0px;
+}
+
+h5 {
+ font-size: 10px;
+ line-height: normal;
+ font-weight: bold;
+ background-color: #f0f0f0;
+ padding: 2px;
+ margin: 14px 0px 4px 0px;
+}
+
+h6 {
+ font-size: 8px;
+ line-height: normal;
+ font-weight: bold;
+ background-color: #f0f0f0;
+ padding: 2px;
+ margin: 14px 0px 4px 0px;
+}
+
+.smallfont {
+ font-size: 10px;
+}
+.descfont {
+ font-size: 10px;
+ color: #666666;
+}
+.smallerfont {
+ font-size: 9px;
+}
+.smalltext {
+ color: #666666;
+ font-size: 10px;
+}
+.smalltext a {
+ color: #666666;
+}
+.smalltext-blue {
+ color: #3c78b5;
+ font-size: 10px;
+}
+.surtitle {
+ margin-left: 1px;
+ margin-bottom: 5px;
+ font-size: 14px;
+ color: #666666;
+}
+
+/* css hack found here: http://www.fo3nix.pwp.blueyonder.co.uk/tutorials/css/hacks/ */
+.navItemOver { font-size: 10px; font-weight: bold; color: #ffffff; background-color: #003366; cursor: hand; voice-family: '\'}\''; voice-family:inherit; cursor: pointer;}
+.navItemOver a { color: #ffffff; background-color:#003366; text-decoration: none; }
+.navItemOver a:visited { color: #ffffff; background-color:#003366; text-decoration: none; }
+.navItemOver a:hover { color: #ffffff; background-color:#003366; text-decoration: none; }
+.navItem { font-size: 10px; font-weight: bold; color: #ffffff; background-color: #3c78b5; }
+.navItem a { color: #ffffff; text-decoration: none; }
+.navItem a:hover { color: #ffffff; text-decoration: none; }
+.navItem a:visited { color: #ffffff; text-decoration: none; }
+
+div.padded { padding: 4px; }
+div.thickPadded { padding: 10px; }
+h3.macrolibrariestitle {
+ margin: 0px 0px 0px 0px;
+}
+
+div.centered { text-align: center; margin: 10px; }
+div.centered table {margin: 0px auto; text-align: left; }
+
+.tableview table {
+ margin: 0;
+}
+
+.tableview th {
+ text-align: left;
+ color: #003366;
+ font-size: 12px;
+ padding: 5px 0px 0px 5px;
+ border-bottom: 2px solid #3c78b5;
+}
+.tableview td {
+ text-align: left;
+ border-color: #ccc;
+ border-width: 0px 0px 1px 0px;
+ border-style: solid;
+ margin: 0;
+ padding: 4px 10px 4px 5px;
+}
+
+.grid {
+ margin: 2px 0px 5px 0px;
+ border-collapse: collapse;
+}
+.grid th {
+ border: 1px solid #ccc;
+ padding: 2px 4px 2px 4px;
+ background: #f0f0f0;
+ text-align: center;
+}
+.grid td {
+ border: 1px solid #ccc;
+ padding: 3px 4px 3px 4px;
+}
+.gridHover {
+ background-color: #f9f9f9;
+}
+
+td.infocell {
+ background-color: #f0f0f0;
+}
+.label {
+ font-weight: bold;
+ color: #003366;
+}
+.error {
+ background-color: #fcc;
+}
+
+.errorBox {
+ background-color: #fcc;
+ border: 1px solid #c00;
+ padding: 5px;
+ margin: 5px;
+}
+
+.errorMessage {
+ color: #c00;
+}
+
+.success {
+ background-color: #dfd;
+}
+
+.successBox {
+ background-color: #dfd;
+ border: 1px solid #090;
+ padding: 5px;
+ margin-top:5px;
+ margin-bottom:5px;
+}
+
+blockquote {
+ padding-left: 10px;
+ padding-right: 10px;
+ margin-left: 5px;
+ margin-right: 0px;
+ border-left: 1px solid #3c78b5;
+}
+
+table.confluenceTable
+{
+ margin: 5px;
+ border-collapse: collapse;
+}
+
+/* Added as a temporary fix for CONF-4223. The table elements appear to be inheriting the border: none attribute from the sectionMacro class */
+table.confluenceTable td.confluenceTd
+{
+ border-width: 1px;
+ border-style: solid;
+ border-color: #ccc;
+ padding: 3px 4px 3px 4px;
+}
+
+/* Added as a temporary fix for CONF-4223. The table elements appear to be inheriting the border: none attribute from the sectionMacro class */
+table.confluenceTable th.confluenceTh
+{
+ border-width: 1px;
+ border-style: solid;
+ border-color: #ccc;
+ padding: 3px 4px 3px 4px;
+ background-color: #f0f0f0;
+ text-align: center;
+}
+
+td.confluenceTd
+{
+ border-width: 1px;
+ border-style: solid;
+ border-color: #ccc;
+ padding: 3px 4px 3px 4px;
+}
+
+th.confluenceTh
+{
+ border-width: 1px;
+ border-style: solid;
+ border-color: #ccc;
+ padding: 3px 4px 3px 4px;
+ background-color: #f0f0f0;
+ text-align: center;
+}
+
+DIV.small {
+ font-size: 9px;
+}
+
+H1.pagename {
+ margin-top: 0px;
+}
+
+IMG.inline {}
+
+.loginform {
+ margin: 5px;
+ border: 1px solid #ccc;
+}
+
+/* The text how the "This is a preview" comment should be shown. */
+.previewnote { text-align: center;
+ font-size: 11px;
+ color: red; }
+
+/* How the preview content should be shown */
+.previewcontent { background: #E0E0E0; }
+
+/* How the system messages should be shown (DisplayMessage.jsp) */
+.messagecontent { background: #E0E0E0; }
+
+/* How the "This page has been modified..." -comment should be shown. */
+.conflictnote { }
+
+.createlink {
+ color: maroon;
+}
+a.createlink {
+ color: maroon;
+}
+.templateparameter {
+ font-size: 9px;
+ color: darkblue;
+}
+
+.diffadded {
+ background: #ddffdd;
+ padding: 1px 1px 1px 4px;
+ border-left: 4px solid darkgreen;
+}
+.diffdeleted {
+ color: #999;
+ background: #ffdddd;
+ padding: 1px 1px 1px 4px;
+ border-left: 4px solid darkred;
+}
+.diffnochange {
+ padding: 1px 1px 1px 4px;
+ border-left: 4px solid lightgrey;
+}
+.differror {
+ background: brown;
+}
+.diff {
+ font-family: lucida console, courier new, fixed-width;
+ font-size: 12px;
+ line-height: 14px;
+}
+.diffaddedchars {
+ background-color:#99ff99;
+ font-weight:bolder;
+}
+.diffremovedchars {
+ background-color:#ff9999;
+ text-decoration: line-through;
+ font-weight:bolder;
+}
+
+.greybackground {
+ background: #f0f0f0
+}
+
+.greybox {
+ border: 1px solid #ddd;
+ padding: 3px;
+ margin: 1px 1px 10px 1px;
+}
+
+.borderedGreyBox {
+ border: 1px solid #cccccc;
+ background-color: #f0f0f0;
+ padding: 10px;
+}
+
+.greyboxfilled {
+ border: 1px solid #ddd;
+ padding: 5px;
+ margin: 10px 1px 10px 1px;
+ background: #f0f0f0;
+}
+
+.navBackgroundBox {
+ padding: 5px 5px 5px 5px;
+ font-size: 22px;
+ font-weight: bold;
+ font-family: Arial, sans-serif;
+ color: white;
+ background: #3c78b5;
+ text-decoration: none;
+}
+
+.previewBoxTop {
+ background-color: #f0f0f0;
+ border-width: 1px 1px 0px 1px;
+ border-style: solid;
+ border-color: #3c78b5;
+ padding: 5px;
+ margin: 5px 0px 0px 0px;
+ text-align: center;
+}
+.previewContent {
+ background-color: #fff;
+ border-color: #3c78b5;
+ border-width: 0px 1px 0px 1px;
+ border-style: solid;
+ padding: 10px;
+ margin: 0px;
+}
+.previewBoxBottom {
+ background-color: #f0f0f0;
+ border-width: 0px 1px 1px 1px;
+ border-style: solid;
+ border-color: #3c78b5;
+ padding: 5px;
+ margin: 0px 0px 5px 0px;
+ text-align: center;
+}
+
+.functionbox {
+ background-color: #f0f0f0;
+ border: 1px solid #3c78b5;
+ padding: 3px;
+ margin: 1px 1px 10px 1px;
+}
+
+.functionbox-greyborder {
+ background-color: #f0f0f0;
+ border: 1px solid #ddd;
+ padding: 3px;
+ margin: 1px 1px 10px 1px;
+}
+
+.search-highlight {
+ background-color: #ffffcc;
+}
+
+/* normal (white) background */
+.rowNormal {
+ background-color: #ffffff;
+ }
+
+/* alternate (pale yellow) background */
+.rowAlternate {
+ background-color: #f7f7f7;
+}
+
+/* used in the list attachments table */
+.rowAlternateNoBottomColor {
+ background-color: #f7f7f7;
+}
+
+.rowAlternateNoBottomNoColor {
+}
+
+.rowAlternateNoBottomColor td {
+ border-bottom: 0px;
+}
+
+.rowAlternateNoBottomNoColor td {
+ border-bottom: 0px;
+}
+
+/* row highlight (grey) background */
+.rowHighlight {
+ background-color: #f0f0f0;
+
+}
+
+TD.greenbar {FONT-SIZE: 2px; BACKGROUND: #00df00; BORDER: 1px solid #9c9c9c; PADDING: 0px; }
+TD.redbar {FONT-SIZE: 2px; BACKGROUND: #df0000; BORDER: 1px solid #9c9c9c; PADDING: 0px; }
+TD.darkredbar {FONT-SIZE: 2px; BACKGROUND: #af0000; BORDER: 1px solid #9c9c9c; PADDING: 0px; }
+
+TR.testpassed {FONT-SIZE: 2px; BACKGROUND: #ddffdd; PADDING: 0px; }
+TR.testfailed {FONT-SIZE: 2px; BACKGROUND: #ffdddd; PADDING: 0px; }
+
+.toolbar {
+ margin: 0px;
+ border-collapse: collapse;
+}
+
+.toolbar td {
+ border: 1px solid #ccc;
+ padding: 2px 2px 2px 2px;
+ color: #ccc;
+}
+
+td.noformatting {
+ border-width: 0px;
+ border-style: none;
+ text-align: center;
+ padding: 0px;
+}
+
+.commentblock {
+ margin: 12px 0 12px 0;
+}
+
+/*
+ * Divs displaying the license information, if necessary.
+ */
+.license-eval, .license-none, .license-nonprofit {
+ border-top: 1px solid #bbbbbb;
+ text-align: center;
+ font-size: 10px;
+ font-family: Verdana, Arial, Helvetica, sans-serif;
+}
+
+.license-eval, .license-none {
+ background-color: #ffcccc;
+}
+
+.license-eval b, .license-none b {
+ color: #990000
+}
+
+.license-nonprofit {
+ background-color: #ffffff;
+}
+
+/*
+ * The shadow at the bottom of the page between the main content and the
+ * "powered by" section.
+ */
+.bottomshadow {
+ height: 12px;
+ background-image: url("$req.contextPath/images/border/border_bottom.gif");
+ background-repeat: repeat-x;
+}
+
+/*
+ * Styling of the operations box
+ */
+.navmenu .operations li, .navmenu .operations ul {
+ list-style: none;
+ margin-left: 0;
+ padding-left: 0;
+}
+
+.navmenu .operations ul {
+ margin-bottom: 9px;
+}
+
+.navmenu .label {
+ font-weight: inherit;
+}
+
+/*
+ * Styling of ops as a toolbar
+ */
+.toolbar div {
+ display: none;
+}
+
+.toolbar .label {
+ display: none;
+}
+
+.toolbar .operations {
+ display: block;
+}
+
+.toolbar .operations ul {
+ display: inline;
+ list-style: none;
+ margin-left: 10px;
+ padding-left: 0;
+}
+
+.toolbar .operations li {
+ list-style: none;
+ display: inline;
+}
+
+/* list page navigational tabs */
+#foldertab {
+padding: 3px 0px 3px 8px;
+margin-left: 0;
+border-bottom: 1px solid #3c78b5;
+font: bold 11px Verdana, sans-serif;
+}
+
+#foldertab li {
+list-style: none;
+margin: 0;
+display: inline;
+}
+
+#foldertab li a {
+padding: 3px 0.5em;
+margin-left: 3px;
+border: 1px solid #3c78b5;
+border-bottom: none;
+background: #3c78b5;
+text-decoration: none;
+}
+
+#foldertab li a:link { color: #ffffff; }
+#foldertab li a:visited { color: #ffffff; }
+
+#foldertab li a:hover {
+color: #ffffff;
+background: #003366;
+border-color: #003366;
+}
+
+#foldertab li a.current {
+background: white;
+border-bottom: 1px solid white;
+color: black;
+}
+
+#foldertab li a.current:link { color: black; }
+#foldertab li a.current:visited { color: black; }
+#foldertab li a.current:hover {
+background: white;
+border-bottom: 1px solid white;
+color: black;
+}
+
+/* alphabet list */
+ul#squaretab {
+margin-left: 0;
+padding-left: 0;
+white-space: nowrap;
+font: bold 8px Verdana, sans-serif;
+}
+
+#squaretab li {
+display: inline;
+list-style-type: none;
+}
+
+#squaretab a {
+padding: 2px 6px;
+border: 1px solid #3c78b5;
+}
+
+#squaretab a:link, #squaretab a:visited {
+color: #fff;
+background-color: #3c78b5;
+text-decoration: none;
+}
+
+#squaretab a:hover {
+color: #ffffff;
+background-color: #003366;
+border-color: #003366;
+text-decoration: none;
+}
+
+#squaretab li a#current {
+background: white;
+color: black;
+}
+
+.blogcalendar * {
+ font-family:verdana, arial, sans-serif;
+ font-size:x-small;
+ font-weight:normal;
+ line-height:140%;
+ padding:2px;
+}
+
+
+table.blogcalendar {
+ border: 1px solid #3c78b5;
+}
+
+.blogcalendar th.calendarhead, a.calendarhead {
+ font-size:x-small;
+ font-weight:bold;
+ padding:2px;
+ text-transform:uppercase;
+ background-color: #3c78b5;
+ color: #ffffff;
+ letter-spacing: .3em;
+ text-transform: uppercase;
+}
+
+.calendarhead:visited {color: white;}
+.calendarhead:active {color: white;}
+.calendarhead:hover {color: white;}
+
+.blogcalendar th {
+ font-size:x-small;
+ font-weight:bold;
+ padding:2px;
+ background-color:#f0f0f0;
+}
+
+.blogcalendar td {
+ font-size:x-small;
+ font-weight:normal;
+}
+
+.searchGroup { padding: 0 0 10px 0; background: #f0f0f0; }
+.searchGroupHeading { font-size: 10px; font-weight: bold; color: #ffffff; background-color: #3c78b5; padding: 2px 4px 1px 4px; }
+.searchItem { padding: 1px 4px 1px 4px; }
+.searchItemSelected { padding: 1px 4px 1px 4px; font-weight: bold; background: #ddd; }
+
+/* permissions page styles */
+.permissionHeading {
+ border-bottom: #bbb; border-width: 0 0 1px 0; border-style: solid; font-size: 16px; text-align: left;
+}
+.permissionTab {
+ border-width: 0 0 0 1px; border-style: solid; background: #3c78b5; color: #ffffff; font-size: 10px;
+}
+.permissionSuperTab {
+ border-width: 0 0 0 1px; border-style: solid; background: #003366; color: #ffffff;
+}
+.permissionCell {
+ border-left: #bbb; border-width: 0 0 0 1px; border-style: solid;
+}
+
+/* warning panel */
+.warningPanel { background: #FFFFCE; border:#F0C000 1px solid; padding: 8px; margin: 10px; }
+/* alert panel */
+.alertPanel { background: #FFCCCC; border:#C00 1px solid; padding: 8px; margin: 10px; }
+
+/* side menu highlighting (e.g. space content screen) */
+.optionPadded { padding: 2px; }
+.optionSelected { background-color: #ffffcc; padding: 2px; border: 1px solid #ddd; margin: -1px; }
+.optionSelected a { font-weight: bold; text-decoration: none; color: black; }
+
+/* information macros */
+.noteMacro { border-style: solid; border-width: 1px; border-color: #F0C000; background-color: #FFFFCE; text-align:left; margin-top: 5px; margin-bottom: 5px}
+.warningMacro { border-style: solid; border-width: 1px; border-color: #c00; background-color: #fcc; text-align:left; margin-top: 5px; margin-bottom: 5px}
+.infoMacro { border-style: solid; border-width: 1px; border-color: #3c78b5; background-color: #D8E4F1; text-align:left; margin-top: 5px; margin-bottom: 5px}
+.tipMacro { border-style: solid; border-width: 1px; border-color: #090; background-color: #dfd; text-align:left; margin-top: 5px; margin-bottom: 5px}
+.informationMacroPadding { padding: 5px 0 0 5px; }
+
+table.infoMacro td, table.warningMacro td, table.tipMacro td, table.noteMacro td, table.sectionMacro td {
+ border: none;
+}
+
+table.sectionMacroWithBorder td.columnMacro { border-style: dashed; border-width: 1px; border-color: #cccccc;}
+
+/* styles for links in the top bar */
+.topBarDiv a:link {color: #ffffff;}
+.topBarDiv a:visited {color: #ffffff;}
+.topBarDiv a:active {color: #ffffff;}
+.topBarDiv a:hover {color: #ffffff;}
+.topBarDiv {color: #ffffff;}
+
+.topBar {
+ background-color: #003366;
+}
+
+
+/* styles for extended operations */
+.greyLinks a:link {color: #666666; text-decoration:underline;}
+.greyLinks a:visited {color: #666666; text-decoration:underline;}
+.greyLinks a:active {color: #666666; text-decoration:underline;}
+.greyLinks a:hover {color: #666666; text-decoration:underline;}
+.greyLinks {color: #666666; display:block; padding: 10px}
+
+.logoSpaceLink {color: #999999; text-decoration: none}
+.logoSpaceLink a:link {color: #999999; text-decoration: none}
+.logoSpaceLink a:visited {color: #999999; text-decoration: none}
+.logoSpaceLink a:active {color: #999999; text-decoration: none}
+.logoSpaceLink a:hover {color: #003366; text-decoration: none}
+
+/* basic panel (basicpanel.vmd) style */
+.basicPanelContainer {border: 1px solid #3c78b5; margin-top: 2px; margin-bottom: 8px; width: 100%}
+.basicPanelTitle {padding: 5px; margin: 0px; background-color: #f0f0f0; color: black; font-weight: bold;}
+.basicPanelBody {padding: 5px; margin: 0px}
+
+.separatorLinks a:link {color: white}
+.separatorLinks a:visited {color: white}
+.separatorLinks a:active {color: white}
+
+.greynavbar {background-color: #f0f0f0; border-top: 1px solid #3c78b5; margin-top: 2px}
+
+div.headerField {
+ float: left;
+ width: auto;
+ height: 100%;
+}
+
+.headerFloat {
+ margin-left: auto;
+ width: 50%;
+}
+
+.headerFloatLeft {
+ float: left;
+ margin-right: 20px;
+ margin-bottom: 10px;
+}
+
+#headerRow {
+ padding: 10px;
+}
+
+div.license-personal {
+ background-color: #003366;
+ color: #ffffff;
+}
+
+div.license-personal a {
+ color: #ffffff;
+}
+
+.greyFormBox {
+ border: 1px solid #cccccc;
+ padding: 5px;
+}
+
+/* IE automatically adds a margin before and after form tags. Use this style to remove that */
+.marginlessForm {
+ margin: 0px;
+}
+
+.openPageHighlight {
+ background-color: #ffffcc;
+ padding: 2px;
+ border: 1px solid #ddd;
+}
+
+.editPageInsertLinks, .editPageInsertLinks a
+{
+ color: #666666;
+ font-weight: bold;
+ font-size: 10px;
+}
+
+/* Style for label heatmap. */
+.top10 a {
+ font-weight: bold;
+ font-size: 2em;
+ color: #003366;
+}
+.top25 a {
+ font-weight: bold;
+ font-size: 1.6em;
+ color: #003366;
+}
+.top50 a {
+ font-size: 1.4em;
+ color: #003366;
+}
+.top100 a {
+ font-size: 1.2em;
+ color: #003366;
+}
+
+.heatmap {
+ list-style:none;
+ width: 95%;
+ margin: 0px auto;
+}
+
+.heatmap a {
+ text-decoration:none;
+}
+
+.heatmap a:hover {
+ text-decoration:underline;
+}
+
+.heatmap li {
+ display: inline;
+}
+
+.minitab {
+padding: 3px 0px 3px 8px;
+margin-left: 0;
+margin-top: 1px;
+margin-bottom: 0px;
+border-bottom: 1px solid #3c78b5;
+font: bold 9px Verdana, sans-serif;
+text-decoration: none;
+float:none;
+}
+.selectedminitab {
+padding: 3px 0.5em;
+margin-left: 3px;
+margin-top: 1px;
+border: 1px solid #3c78b5;
+background: white;
+border-bottom: 1px solid white;
+color: #000000;
+text-decoration: none;
+}
+.unselectedminitab {
+padding: 3px 0.5em;
+margin-left: 3px;
+margin-top: 1px;
+border: 1px solid #3c78b5;
+border-bottom: none;
+background: #3c78b5;
+color: #ffffff;
+text-decoration: none;
+}
+
+a.unselectedminitab:hover {
+color: #ffffff;
+background: #003366;
+border-color: #003366;
+}
+
+a.unselectedminitab:link { color: white; }
+a.unselectedminitab:visited { color: white; }
+
+a.selectedminitab:link { color: black; }
+a.selectedminitab:visited { color: black; }
+
+.linkerror { background-color: #fcc;}
+
+a.labelOperationLink:link {text-decoration: underline}
+a.labelOperationLink:active {text-decoration: underline}
+a.labelOperationLink:visited {text-decoration: underline}
+a.labelOperationLink:hover {text-decoration: underline}
+
+a.newLabel:link {background-color: #ddffdd}
+a.newLabel:active {background-color: #ddffdd}
+a.newLabel:visited {background-color: #ddffdd}
+a.newLabel:hover {background-color: #ddffdd}
+
+ul.square {list-style-type: square}
+
+.inline-control-link {
+ background: #ffc;
+ font-size: 9px;
+ color: #666;
+ padding: 2px;
+ text-transform: uppercase;
+ text-decoration: none;
+}
+
+
+.inline-control-link a:link {text-decoration: none}
+.inline-control-link a:active {text-decoration: none}
+.inline-control-link a:visited {text-decoration: none}
+.inline-control-link a:hover {text-decoration: none}
+
+.inline-control-link {
+ background: #ffc;
+ font-size: 9px;
+ color: #666;
+ padding: 2px;
+ text-transform: uppercase;
+ text-decoration: none;
+ cursor: pointer;
+}
+
+div.auto_complete {
+ width: 350px;
+ background: #fff;
+}
+div.auto_complete ul {
+ border: 1px solid #888;
+ margin: 0;
+ padding: 0;
+ width: 100%;
+ list-style-type: none;
+}
+div.auto_complete ul li {
+ margin: 0;
+ padding: 3px;
+}
+div.auto_complete ul li.selected {
+ background-color: #ffb;
+}
+div.auto_complete ul strong.highlight {
+ color: #800;
+ margin: 0;
+ padding: 0;
+}
+
+/******* Edit Page Styles *******/
+.toogleFormDiv{
+ border:1px solid #A7A6AA;
+ background-color:white;
+ padding:5px;
+ margin-top: 5px;
+}
+
+.toogleInfoDiv{
+ border:1px solid #A7A6AA;
+ background-color:white;
+ display:none;
+ padding:5px;
+ margin-top: 10px;
+}
+
+.inputSection{
+ margin-bottom:20px;
+}
+
+#editBox{
+ border:1px solid lightgray;
+ background-color:#F0F0F0;
+}
+
+/******* Left Navigation Theme Styles ********/
+.leftnav li a {
+ text-decoration:none;
+ color:white;
+ margin:0px;
+ display:block;
+ padding:2px;
+ padding-left:5px;
+ background-color: #3c78b5;
+ border-top:1px solid #3c78b5;
+}
+
+.leftnav li a:active {color:white;}
+.leftnav li a:visited {color:white;}
+.leftnav li a:hover {background-color: #003366; color:white;}
diff --git a/console/src/main/webapp/images/asf-logo.png b/console/src/main/webapp/images/asf-logo.png
new file mode 100644
index 0000000..d824fab
--- /dev/null
+++ b/console/src/main/webapp/images/asf-logo.png
Binary files differ
diff --git a/console/src/main/webapp/images/bg.png b/console/src/main/webapp/images/bg.png
new file mode 100644
index 0000000..878a84f
--- /dev/null
+++ b/console/src/main/webapp/images/bg.png
Binary files differ
diff --git a/console/src/main/webapp/images/bg02-blue-left.png b/console/src/main/webapp/images/bg02-blue-left.png
new file mode 100644
index 0000000..057efdf
--- /dev/null
+++ b/console/src/main/webapp/images/bg02-blue-left.png
Binary files differ
diff --git a/console/src/main/webapp/images/bg02-blue-right.png b/console/src/main/webapp/images/bg02-blue-right.png
new file mode 100644
index 0000000..edf9a9d
--- /dev/null
+++ b/console/src/main/webapp/images/bg02-blue-right.png
Binary files differ
diff --git a/console/src/main/webapp/images/bg02-white-left-nogr.png b/console/src/main/webapp/images/bg02-white-left-nogr.png
new file mode 100644
index 0000000..1c5186c
--- /dev/null
+++ b/console/src/main/webapp/images/bg02-white-left-nogr.png
Binary files differ
diff --git a/console/src/main/webapp/images/bg02-white-right-nogr.png b/console/src/main/webapp/images/bg02-white-right-nogr.png
new file mode 100644
index 0000000..9734def
--- /dev/null
+++ b/console/src/main/webapp/images/bg02-white-right-nogr.png
Binary files differ
diff --git a/console/src/main/webapp/images/big-bullet.png b/console/src/main/webapp/images/big-bullet.png
new file mode 100644
index 0000000..f036db5
--- /dev/null
+++ b/console/src/main/webapp/images/big-bullet.png
Binary files differ
diff --git a/console/src/main/webapp/images/left-box-bottom.png b/console/src/main/webapp/images/left-box-bottom.png
new file mode 100644
index 0000000..0495248
--- /dev/null
+++ b/console/src/main/webapp/images/left-box-bottom.png
Binary files differ
diff --git a/console/src/main/webapp/images/left-box-right.png b/console/src/main/webapp/images/left-box-right.png
new file mode 100644
index 0000000..2698074
--- /dev/null
+++ b/console/src/main/webapp/images/left-box-right.png
Binary files differ
diff --git a/console/src/main/webapp/images/left-box-top.png b/console/src/main/webapp/images/left-box-top.png
new file mode 100644
index 0000000..e1fc26e
--- /dev/null
+++ b/console/src/main/webapp/images/left-box-top.png
Binary files differ
diff --git a/console/src/main/webapp/images/smx-logo.png b/console/src/main/webapp/images/smx-logo.png
new file mode 100644
index 0000000..ce2332a
--- /dev/null
+++ b/console/src/main/webapp/images/smx-logo.png
Binary files differ
diff --git a/console/src/main/webapp/index.jade b/console/src/main/webapp/index.jade
new file mode 100644
index 0000000..803ba34
--- /dev/null
+++ b/console/src/main/webapp/index.jade
@@ -0,0 +1,5 @@
+h1 Apache ServiceMix
+
+:markdown
+ This project contains documentation about Apache ServiceMix 5.
+
diff --git a/core/pom.xml b/core/pom.xml
new file mode 100644
index 0000000..fe753cd
--- /dev/null
+++ b/core/pom.xml
@@ -0,0 +1,65 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<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">
+
+ <!--
+
+ 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.
+ -->
+
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>org.apache.servicemix</groupId>
+ <artifactId>servicemix-parent</artifactId>
+ <version>5.0.0-SNAPSHOT</version>
+ </parent>
+
+ <groupId>org.apache.servicemix</groupId>
+ <artifactId>servicemix-core</artifactId>
+ <packaging>jar</packaging>
+ <version>5.0.0-SNAPSHOT</version>
+ <name>Apache ServiceMix :: Core</name>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.scala-lang</groupId>
+ <artifactId>scala-library</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.camel</groupId>
+ <artifactId>camel-core</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.camel</groupId>
+ <artifactId>camel-scala</artifactId>
+ <scope>test</scope>
+ </dependency>
+ </dependencies>
+
+ <build>
+ <sourceDirectory>src/main/scala</sourceDirectory>
+ <testSourceDirectory>src/test/scala</testSourceDirectory>
+
+ <plugins>
+ <plugin>
+ <groupId>org.scala-tools</groupId>
+ <artifactId>maven-scala-plugin</artifactId>
+ </plugin>
+ </plugins>
+
+ </build>
+</project>
diff --git a/core/src/main/scala/org/apache/servicemix/core/Breadcrumbs.scala b/core/src/main/scala/org/apache/servicemix/core/Breadcrumbs.scala
new file mode 100644
index 0000000..20a7dba
--- /dev/null
+++ b/core/src/main/scala/org/apache/servicemix/core/Breadcrumbs.scala
@@ -0,0 +1,125 @@
+/**
+ * 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.servicemix.core
+
+import org.apache.camel.processor.{DelegateProcessor, DelegateAsyncProcessor}
+import org.apache.camel.processor.aggregate.{AggregationStrategy, AggregateProcessor}
+import collection.Iterable
+import org.apache.camel._
+
+/**
+ * The ServiceMix bread crumb strategy adds a header to the message to ensure we can follow the message throughout
+ * different routes and processors.
+ */
+class Breadcrumbs extends DelegateProcessorFactory {
+
+ import Breadcrumbs._
+
+ def create(delegate: Processor) = new DelegateAsyncProcessor(process(delegate)) {
+ override def process(exchange: Exchange, callback: AsyncCallback) = {
+ if (isEnabled(exchange) && !hasBreadCrumb(exchange)) {
+ addBreadCrumb(exchange)
+ }
+ processNext(exchange, callback)
+ }
+ }
+
+ private def process(delegate: Processor) : Processor = {
+ var p = delegate
+ if (p.isInstanceOf[DelegateProcessor]) {
+ p = p.asInstanceOf[DelegateProcessor].getProcessor
+ }
+ if (p.isInstanceOf[AggregateProcessor]) {
+ val agg = p.asInstanceOf[AggregateProcessor]
+ val oldstrat = agg.getAggregationStrategy
+ val strategy = new AggregationStrategy {
+ def aggregate(oldExchange: Exchange, newExchange: Exchange) : Exchange = {
+ val ex = oldstrat.aggregate(oldExchange, newExchange)
+ if (isEnabled(ex)) {
+ val bcs = if (oldExchange == null) getBreadCrumbs(ex) ++ getBreadCrumbs(newExchange)
+ else getBreadCrumbs(ex) ++ getBreadCrumbs(oldExchange) ++ getBreadCrumbs(newExchange)
+ setBreadCrumbs(ex, bcs)
+ }
+ ex
+ }
+ }
+ agg.setAggregationStrategy(strategy)
+ }
+ delegate
+ }
+}
+
+object Breadcrumbs extends Switchable {
+
+ /**
+ * ServiceMix bread crumb header name
+ */
+ val SERVICEMIX_BREAD_CRUMB = "ServiceMixBreadCrumb"
+
+ /**
+ * Does the exchange have a ServiceMix bread crumb set?
+ */
+ def hasBreadCrumb(exchange: Exchange) : Boolean = getBreadCrumb(exchange) != null
+
+ /**
+ * Get the ServiceMix bread crumb value for an Exchange (eventually a comma separated list)
+ */
+ def getBreadCrumb(exchange: Exchange) : String = exchange.getIn.getHeader(SERVICEMIX_BREAD_CRUMB, classOf[String])
+
+ /**
+ * Get the ServiceMix bread crumb values for an Exchange
+ */
+ def getBreadCrumbs(exchange: Exchange) : Set[String] = getBreadCrumbs(getBreadCrumb(exchange))
+
+ def getBreadCrumbs(breadcrumbs: String) : Set[String] = if (breadcrumbs == null) Set[String]() else breadcrumbs.split(",").toSet
+
+ /**
+ * Add a ServiceMix bread crumb to an Exchange
+ */
+ def addBreadCrumb(exchange: Exchange) {
+ setBreadCrumb(exchange, exchange.getContext.getUuidGenerator.generateUuid())
+ }
+
+ /**
+ * Set the ServiceMix bread crumb to an Exchange
+ */
+ def setBreadCrumb(exchange: Exchange, breadcrumb: String) {
+ exchange.getIn.setHeader(SERVICEMIX_BREAD_CRUMB, breadcrumb)
+ }
+
+ /**
+ * Set the ServiceMix bread crumbs to an Exchange
+ */
+ def setBreadCrumbs(exchange: Exchange, breadcrumbs: Iterable[String]) {
+ setBreadCrumb(exchange, breadcrumbs.mkString(","))
+ }
+
+ /**
+ * Enable bread crumbs on the ServiceMix Container
+ */
+ def register(container: ServiceMixContainer = ServiceMixContainer.instance) {
+ container.register(classOf[Breadcrumbs])
+ }
+
+ /**
+ * Disable bread crumbs on the ServiceMix Container
+ */
+ def unregister(container: ServiceMixContainer = ServiceMixContainer.instance) {
+ container.unregister(classOf[Breadcrumbs])
+ }
+
+}
diff --git a/core/src/main/scala/org/apache/servicemix/core/DelegateProcessorFactory.scala b/core/src/main/scala/org/apache/servicemix/core/DelegateProcessorFactory.scala
new file mode 100644
index 0000000..3b6e3d4
--- /dev/null
+++ b/core/src/main/scala/org/apache/servicemix/core/DelegateProcessorFactory.scala
@@ -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.
+ */
+package org.apache.servicemix.core
+
+import org.apache.camel.{AsyncProcessor, Processor}
+
+/**
+ * Trait to allow creating delegate processor on demand
+ */
+trait DelegateProcessorFactory {
+
+ /**
+ * Create a new AsyncProcessor instance that can delegate part of its work to the Processor instance provided
+ */
+ def create(delegate: Processor) : AsyncProcessor
+
+}
\ No newline at end of file
diff --git a/core/src/main/scala/org/apache/servicemix/core/GlobalProcessorFactory.scala b/core/src/main/scala/org/apache/servicemix/core/GlobalProcessorFactory.scala
new file mode 100644
index 0000000..79e420f
--- /dev/null
+++ b/core/src/main/scala/org/apache/servicemix/core/GlobalProcessorFactory.scala
@@ -0,0 +1,87 @@
+/**
+ * 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.servicemix.core
+
+import org.apache.camel.spi.{RouteContext, ProcessorFactory}
+import org.apache.camel.model.ProcessorDefinition
+import java.util.concurrent.atomic.AtomicInteger
+import collection.mutable.ListBuffer
+import org.apache.camel._
+import processor.DelegateAsyncProcessor
+import GlobalProcessorFactory._
+
+/**
+ * Global ServiceMix ProcessorFactory implementation, which will take care of wrapping processors with the additional
+ * functionality provided by the {@link DelegateProcessorFactory} instances
+ */
+class GlobalProcessorFactory extends ProcessorFactory {
+
+ val factories = new ListBuffer[DelegateProcessorFactory]
+ val version = new AtomicInteger(1)
+
+ def addFactory(factory: DelegateProcessorFactory) = triggerUpdate(factories += factory);
+ def removeFactory(factory: DelegateProcessorFactory) = triggerUpdate(factories -= factory);
+
+ def createChildProcessor(context: RouteContext, definition: ProcessorDefinition[_], mandatory: Boolean) = {
+ nullOrElse(context.createProcessor(definition))(new GlobalDelegateProcessor(context, definition, _))
+ }
+
+ def createProcessor(context: RouteContext, definition: ProcessorDefinition[_]) = {
+ nullOrElse(definition.createProcessor(context))(new GlobalDelegateProcessor(context, definition, _))
+ }
+
+ def triggerUpdate(block: => Unit) = {
+ block
+ version.incrementAndGet()
+ }
+
+ class GlobalDelegateProcessor(routeContext: RouteContext, definition: ProcessorDefinition[_], target: Processor) extends DelegateAsyncProcessor(target) {
+
+ var currentProcessor = configure(getProcessor)
+ var version = GlobalProcessorFactory.this.version.get()
+
+ override def process(exchange: Exchange, callback: AsyncCallback) = {
+ // let's check if processor factories have changed and reconfigure things if necessary
+ if (version < GlobalProcessorFactory.this.version.get) {
+ currentProcessor = configure(getProcessor)
+ }
+
+ currentProcessor.process(exchange, callback)
+ }
+
+ override def toString = "ServiceMix Wrapper[" + processor + "]"
+
+ def configure(original: AsyncProcessor) : AsyncProcessor = {
+ factories.foldLeft(original) { (delegate: AsyncProcessor, factory: DelegateProcessorFactory) => {
+ factory.create(delegate)
+ }
+ }
+ }
+
+ }
+}
+
+object GlobalProcessorFactory {
+
+ private def nullOrElse[S,T](value: S)(function: S => T) = if (value == null) {
+ null.asInstanceOf[T]
+ } else {
+ function(value)
+ }
+
+}
+
diff --git a/core/src/main/scala/org/apache/servicemix/core/ProfilerStrategy.scala b/core/src/main/scala/org/apache/servicemix/core/ProfilerStrategy.scala
new file mode 100644
index 0000000..c830e5f
--- /dev/null
+++ b/core/src/main/scala/org/apache/servicemix/core/ProfilerStrategy.scala
@@ -0,0 +1,103 @@
+/**
+ * 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.servicemix.core
+
+import org.apache.camel._
+import model.{RouteDefinition, ProcessorDefinition}
+import processor.DelegateAsyncProcessor
+import spi.{RouteContext, ProcessorFactory}
+import collection.mutable.LinkedHashMap
+
+class ProfilerStrategy extends ProcessorFactory {
+
+ val proc = new LinkedHashMap[ProcessorDefinition[_], Stats]
+
+ def createProcessor(routeContext: RouteContext, definition: ProcessorDefinition[_]) : Processor = {
+ val proc = definition.createProcessor(routeContext)
+ if (proc != null) {
+ new ProcessorWrapper(routeContext.getCamelContext, definition, proc, getStats(definition))
+ } else {
+ null
+ }
+ }
+
+ def createChildProcessor(routeContext: RouteContext, definition: ProcessorDefinition[_], mandatory: Boolean) : Processor = {
+ val proc = routeContext.createProcessor(definition)
+ if (proc != null) {
+ new ProcessorWrapper(routeContext.getCamelContext, definition, proc, getStats(definition))
+ } else {
+ null
+ }
+ }
+
+ def getStats(definition: ProcessorDefinition[_]) : Stats = {
+ if (definition == null) {
+ null
+ } else {
+ proc.getOrElseUpdate(definition, new Stats(definition, getStats(definition.getParent())))
+ }
+ }
+
+ class ProcessorWrapper(context: CamelContext, definition: ProcessorDefinition[_], target: Processor, stats: Stats) extends DelegateAsyncProcessor(target) {
+ override def process(exchange: Exchange, callback: AsyncCallback) : Boolean = {
+ val t0 = System.nanoTime()
+ try {
+ super.process(exchange, callback)
+ } finally {
+ val t1 = System.nanoTime()
+ stats.addTime(t1 - t0)
+ }
+ }
+ override def toString: String = {
+ "ProfilerWrapper[" + processor + "]"
+ }
+ }
+
+}
+
+class Stats(_definition: ProcessorDefinition[_], _parent : Stats) {
+ var count : Long = 0
+ var time : Long = 0
+ var total : Long = 0
+ def parent = _parent
+ def definition = _definition
+
+ def addTime(nanos: Long) {
+ count = count + 1
+ time = time + nanos
+ total = total + nanos
+ if (parent != null) {
+ parent.addChildTime(nanos)
+ }
+ }
+
+ def timeIncludesChildren() = {
+ definition.getClass != classOf[RouteDefinition]
+ }
+
+ def addChildTime(nanos: Long) {
+ if (timeIncludesChildren()) {
+ time = time - nanos
+ } else {
+ total = total + nanos
+ if (parent != null) {
+ parent.addChildTime(nanos)
+ }
+ }
+ }
+}
+
diff --git a/core/src/main/scala/org/apache/servicemix/core/ServiceMixContainer.scala b/core/src/main/scala/org/apache/servicemix/core/ServiceMixContainer.scala
new file mode 100644
index 0000000..782fe74
--- /dev/null
+++ b/core/src/main/scala/org/apache/servicemix/core/ServiceMixContainer.scala
@@ -0,0 +1,52 @@
+/**
+ * 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.servicemix.core
+
+import org.apache.camel.spi.Container
+import org.apache.camel._
+
+class ServiceMixContainer extends Container {
+
+ val processorFactory = new GlobalProcessorFactory
+
+ def manage(camelContext: CamelContext) {
+ if (camelContext.getProcessorFactory == null) {
+ camelContext.setProcessorFactory(processorFactory)
+ }
+ }
+ def register(factory: Class[_ <: DelegateProcessorFactory]) {
+ if (processorFactory.factories.filter(_.getClass == factory).isEmpty) {
+ processorFactory.addFactory(factory.newInstance())
+ }
+ }
+ def unregister(factory: Class[_ <: DelegateProcessorFactory]) {
+ for (f <- processorFactory.factories.filter(_.getClass == factory)) {
+ processorFactory.removeFactory(f)
+ }
+ }
+
+}
+
+object ServiceMixContainer {
+
+ val instance = new ServiceMixContainer
+
+ def init() {
+ Container.Instance.set(instance)
+ }
+
+}
\ No newline at end of file
diff --git a/core/src/main/scala/org/apache/servicemix/core/Switchable.scala b/core/src/main/scala/org/apache/servicemix/core/Switchable.scala
new file mode 100644
index 0000000..73ebcda
--- /dev/null
+++ b/core/src/main/scala/org/apache/servicemix/core/Switchable.scala
@@ -0,0 +1,70 @@
+/**
+ * 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.servicemix.core
+
+import collection.mutable.HashMap
+import org.apache.camel.{Route, Exchange, CamelContext}
+
+trait Switchable {
+
+ def enable() {
+ global = true
+ }
+
+ def disable() {
+ global = false
+ }
+
+ def enable(camelContext: CamelContext) {
+ perContext += camelContext.getName -> true
+ }
+
+ def disable(camelContext: CamelContext) {
+ perContext += camelContext.getName -> false
+ }
+
+ def clear(camelContext: CamelContext) {
+ perContext -= camelContext.getName
+ }
+
+ def enable(route: Route) {
+ perRoute += route.getId -> true
+ }
+
+ def disable(route: Route) {
+ perRoute += route.getId -> false
+ }
+
+ def clear(route: Route) {
+ perRoute -= route.getId
+ }
+
+ def reset() {
+ global = true
+ perContext.clear()
+ perRoute.clear()
+ }
+
+ def isEnabled(exchange: Exchange) : Boolean = isRouteEnabled(exchange).getOrElse(isContextEnabled(exchange).getOrElse(global))
+ def isContextEnabled(exchange: Exchange): Option[Boolean] = perContext.get(exchange.getContext.getName)
+ def isRouteEnabled(exchange: Exchange): Option[Boolean] = if (exchange.getFromRouteId != null) perRoute.get(exchange.getFromRouteId) else Some(true)
+
+ private var global: Boolean = true
+ private val perContext = new HashMap[String, Boolean]
+ private val perRoute = new HashMap[String, Boolean]
+
+}
\ No newline at end of file
diff --git a/core/src/test/resources/log4j.properties b/core/src/test/resources/log4j.properties
new file mode 100644
index 0000000..3c8e4d1
--- /dev/null
+++ b/core/src/test/resources/log4j.properties
@@ -0,0 +1,26 @@
+#
+# Copyright (C) 2011, FuseSource Corp. All rights reserved.
+# http://fusesource.com
+#
+# The software in this package is published under the terms of the
+# CDDL license a copy of which has been included with this distribution
+# in the license.txt file.
+#
+
+#
+# The logging properties used during tests..
+#
+log4j.rootLogger=DEBUG, console, file
+
+# Console will only display warnnings
+log4j.appender.console=org.apache.log4j.ConsoleAppender
+log4j.appender.console.layout=org.apache.log4j.PatternLayout
+log4j.appender.console.layout.ConversionPattern=%-5p | %t | %m%n
+log4j.appender.console.threshold=WARN
+
+# File appender will contain all info messages
+log4j.appender.file=org.apache.log4j.FileAppender
+log4j.appender.file.layout=org.apache.log4j.PatternLayout
+log4j.appender.file.layout.ConversionPattern=%d | %-5p | %m | %c | %t%n
+log4j.appender.file.file=target/test.log
+log4j.appender.file.append=true
diff --git a/core/src/test/scala/org/apache/servicemix/core/BreadcrumbsTest.scala b/core/src/test/scala/org/apache/servicemix/core/BreadcrumbsTest.scala
new file mode 100644
index 0000000..1ca928d
--- /dev/null
+++ b/core/src/test/scala/org/apache/servicemix/core/BreadcrumbsTest.scala
@@ -0,0 +1,164 @@
+/**
+ * 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.servicemix.core
+
+import _root_.scala.Predef._
+import org.junit.runner.RunWith
+import org.scalatest.junit.JUnitRunner
+import collection.immutable.List
+import org.apache.camel.component.mock.MockEndpoint
+import org.apache.camel.scala.dsl.builder.{RouteBuilderSupport, RouteBuilder}
+
+import scala.collection.JavaConversions.asScalaBuffer
+import org.apache.camel.impl.{DefaultCamelContext, DefaultProducerTemplate}
+
+import org.apache.servicemix.core.Breadcrumbs.{hasBreadCrumb, getBreadCrumb, getBreadCrumbs}
+import org.scalatest.{BeforeAndAfterEach, BeforeAndAfterAll, FunSuite}
+import org.apache.camel.processor.aggregate.UseLatestAggregationStrategy
+
+@RunWith(classOf[JUnitRunner])
+class BreadcrumbsTest extends FunSuite with RouteBuilderSupport with BeforeAndAfterAll with BeforeAndAfterEach {
+
+ val messages = List("<gingerbread/>", "<cakes/>", "<sugar/>")
+
+ lazy val context = {
+ val result = new DefaultCamelContext()
+ result.addRoutes(createRouteBuilder())
+ result.start()
+ result
+ }
+
+ lazy val template = {
+ val result = new DefaultProducerTemplate(context);
+ result.start()
+ result
+ }
+
+
+ override protected def beforeEach() {
+ Breadcrumbs.reset()
+ }
+
+ override protected def beforeAll() {
+ ServiceMixContainer.init()
+ Breadcrumbs.register()
+ }
+
+ override protected def afterAll() {
+ template.stop()
+ context.stop()
+ Breadcrumbs.unregister()
+ }
+
+ test("add breadcrumbs to message headers") {
+ for (body <- messages) {
+ template.sendBody("direct:test", body)
+ }
+
+ val hansel = getMockEndpoint("mock:hansel")
+ hansel.expectedMessageCount(messages.size)
+
+ val gretel = getMockEndpoint("mock:gretel")
+ gretel.expectedMessageCount(messages.size)
+
+ List(hansel, gretel).foreach(_.assertIsSatisfied())
+
+ val hansels = for (exchange <- hansel.getExchanges) yield getBreadCrumb(exchange)
+ assert(hansels.toSet.size == 3, "We should have distinct breadcrumbs per message")
+
+ val gretels = for (exchange <- gretel.getExchanges) yield getBreadCrumb(exchange)
+ assert(hansels == gretels, "Gretel should be able to find all of Hansel's bread crumbs")
+ }
+
+ test("bread crumb strategy can be disabled if necessary") {
+ for (body <- messages) {
+ template.sendBody("direct:test", body)
+ }
+
+ val hansel = getMockEndpoint("mock:hansel")
+ hansel.expectedMessageCount(messages.size)
+
+ val gretel = getMockEndpoint("mock:gretel")
+ gretel.expectedMessageCount(messages.size)
+
+ List(hansel, gretel).foreach(_.assertIsSatisfied())
+
+ val hansels = for (exchange <- hansel.getExchanges) yield getBreadCrumb(exchange)
+ assert(hansels.toSet.size == messages.size, "We should have distinct breadcrumbs per message")
+
+ val gretels = for (exchange <- gretel.getExchanges) yield getBreadCrumb(exchange)
+ assert(hansels == gretels, "Gretel should be able to find all of Hansel's bread crumbs")
+
+ // let's now disable the bread crumbs and just continue with same context/processors/...
+ Breadcrumbs.disable(context)
+ MockEndpoint.resetMocks(context)
+
+ for (body <- messages) {
+ template.sendBody("direct:test", body)
+ }
+
+ hansel.expectedMessageCount(messages.size)
+
+ gretel.expectedMessageCount(messages.size)
+
+ List(hansel, gretel).foreach(_.assertIsSatisfied())
+
+ for (exchange <- hansel.getExchanges)
+ assert(!hasBreadCrumb(exchange), "There should be no more bread crumbs here")
+
+ for (exchange <- gretel.getExchanges)
+ assert(!hasBreadCrumb(exchange), "There should be no more bread crumbs here")
+ }
+
+ test("bread crumb strategy with aggregator") {
+ for (body <- messages) {
+ template.sendBody("direct:aggregate", body)
+ }
+
+ val aggres = getMockEndpoint("mock:aggres")
+ aggres.expectedMessageCount(1)
+ aggres.assertIsSatisfied()
+
+ val exchange = aggres.getExchanges.get(0)
+ val bcs = getBreadCrumbs(exchange)
+ expect(messages.size, "The number of breadcrumbs from the aggregator is wrong")(bcs.size)
+ }
+
+
+ override protected def afterEach() {
+ MockEndpoint.resetMocks(context)
+ context.getProcessorFactory.asInstanceOf[GlobalProcessorFactory].factories.clear
+ }
+
+ def getMockEndpoint(name: String) = context.getEndpoint(name, classOf[MockEndpoint])
+
+ def createRouteBuilder() = new RouteBuilder {
+ "direct:aggregate" ==> {
+ aggregate (true, new UseLatestAggregationStrategy()).completionSize(messages.size) {
+ to("mock:aggres")
+ }
+ }
+
+ "direct:test" ==> {
+ to("mock:hansel")
+ to("seda:forest")
+ }
+
+ "seda:forest" to "mock:gretel"
+
+ }
+}
\ No newline at end of file
diff --git a/core/src/test/scala/org/apache/servicemix/core/ProfilerStrategyTest.scala b/core/src/test/scala/org/apache/servicemix/core/ProfilerStrategyTest.scala
new file mode 100644
index 0000000..ba73322
--- /dev/null
+++ b/core/src/test/scala/org/apache/servicemix/core/ProfilerStrategyTest.scala
@@ -0,0 +1,109 @@
+/**
+ * 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.servicemix.core
+
+import _root_.scala.Predef._
+import org.junit.runner.RunWith
+import org.scalatest.junit.JUnitRunner
+import org.scalatest.{BeforeAndAfterEach, BeforeAndAfterAll, FunSuite}
+import org.apache.camel.scala.dsl.builder.RouteBuilder
+import org.apache.camel.impl.{DefaultProducerTemplate, DefaultCamelContext}
+import org.apache.camel.model.ProcessorDefinition
+import collection.mutable.Map
+import collection.immutable.List
+import java.util.concurrent.TimeUnit
+import org.apache.camel.{Exchange, ProducerTemplate}
+
+@RunWith(classOf[JUnitRunner])
+class ProfilerStrategyTest extends FunSuite with BeforeAndAfterAll with BeforeAndAfterEach {
+
+ override protected def beforeAll() {
+ }
+
+ override protected def afterAll() {
+
+ }
+
+ def sleep() {
+ Thread.sleep(2)
+ }
+
+ test("testCamel") {
+
+ val context = new DefaultCamelContext();
+ context.addRoutes(new RouteBuilder {
+ "direct:a" ==> {
+ to("mock:polyglot")
+ choice {
+ when( (e: Exchange) => { sleep(); e.in == "<hello/>" }) {
+ to ("mock:english")
+ }
+ when(_.in == "<hallo/>") {
+ to("mock:dutch")
+ delay( 2 ms )
+ to("mock:german")
+ }
+ otherwise to ("mock:french")
+ }
+ }
+ });
+
+ val strategy = new ProfilerStrategy
+ context.setProcessorFactory(strategy)
+ context.start()
+
+ val template : ProducerTemplate = new DefaultProducerTemplate(context)
+
+ template.start()
+ val values = List("<hello/>", "<hallo/>", "<bonjour/>")
+ val rnd = new scala.util.Random
+
+ val t0 = System.nanoTime()
+ for (i <- 0 until 1000) {
+ template.sendBody("direct:a", values(rnd.nextInt(values.size)))
+ }
+ val t1 = System.nanoTime()
+ System.out.println("Total time: " + TimeUnit.MILLISECONDS.convert(t1 - t0, TimeUnit.NANOSECONDS))
+
+ print(strategy.proc)
+ }
+
+ def print(proc: Map[ProcessorDefinition[_], Stats]) {
+ System.out.println("%-40s %8s %8s %8s".format("Processor", "Count", "Time", "Total"))
+ print(proc, null, "")
+ }
+
+ def print(proc: Map[ProcessorDefinition[_], Stats], parent: Stats, indent: String) {
+ for ((p, s) <- proc) {
+ if (s.parent == parent) {
+ var name = indent + p.toString
+ val max = 40
+ if (name.length() > max) {
+ name = name.substring(0, max - 4) + "...]"
+ } else {
+ while (name.length() < max) {
+ name = name + " "
+ }
+ }
+
+ System.out.println("%s %8d %8d %8d".format(name, s.count, TimeUnit.MILLISECONDS.convert(s.time, TimeUnit.NANOSECONDS), TimeUnit.MILLISECONDS.convert(s.total, TimeUnit.NANOSECONDS)))
+ print(proc, s, indent + " ")
+ }
+ }
+ }
+
+}
\ No newline at end of file
diff --git a/core/src/test/scala/org/apache/servicemix/core/SwitchableTest.scala b/core/src/test/scala/org/apache/servicemix/core/SwitchableTest.scala
new file mode 100644
index 0000000..02b2b98
--- /dev/null
+++ b/core/src/test/scala/org/apache/servicemix/core/SwitchableTest.scala
@@ -0,0 +1,88 @@
+/**
+ * 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.servicemix.core
+
+import org.junit.runner.RunWith
+import org.scalatest.junit.JUnitRunner
+import org.scalatest.{BeforeAndAfterEach, BeforeAndAfterAll, FunSuite}
+import org.apache.camel.scala.dsl.builder.{RouteBuilder, RouteBuilderSupport}
+import org.apache.camel.impl._
+
+@RunWith(classOf[JUnitRunner])
+class SwitchableTest extends FunSuite with RouteBuilderSupport with BeforeAndAfterAll with BeforeAndAfterEach {
+
+ lazy val context = {
+ val ctx = new DefaultCamelContext()
+ ctx.setName("contextId")
+ ctx.addRoutes(new RouteBuilder() { "direct:a" --> "direct:b" routeId("routeId") })
+ ctx.start()
+ ctx
+ }
+ lazy val route = context.getRoutes.get(0)
+ lazy val exchange = {
+ val ex = new DefaultExchange(context)
+ ex.setFromRouteId(route.getId)
+ ex
+ }
+ lazy val switchable = new Switchable() {}
+
+ override def beforeEach() {
+ switchable.reset()
+ }
+
+ test("global level") {
+ switchable.reset()
+ assert(switchable.isEnabled(exchange))
+
+ switchable.disable()
+ assert(!switchable.isEnabled(exchange))
+ }
+
+ test("context level") {
+ switchable.disable()
+ switchable.enable(context)
+ assert(switchable.isEnabled(exchange))
+
+ switchable.clear(context)
+ assert(!switchable.isEnabled(exchange))
+
+ switchable.enable()
+ assert(switchable.isEnabled(exchange))
+
+ switchable.disable(context)
+ assert(!switchable.isEnabled(exchange))
+ }
+
+ test("route level") {
+ switchable.disable()
+ switchable.enable(route)
+ assert(switchable.isEnabled(exchange))
+
+ switchable.clear(route)
+ assert(!switchable.isEnabled(exchange))
+
+ switchable.enable()
+ assert(switchable.isEnabled(exchange))
+
+ switchable.disable(route)
+ assert(!switchable.isEnabled(exchange))
+
+ switchable.enable(context)
+ assert(!switchable.isEnabled(exchange))
+ }
+
+}
\ No newline at end of file
diff --git a/manual/pom.xml b/manual/pom.xml
new file mode 100644
index 0000000..0beb72f
--- /dev/null
+++ b/manual/pom.xml
@@ -0,0 +1,313 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<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">
+
+ <!--
+
+ 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.
+ -->
+
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>org.apache.servicemix</groupId>
+ <artifactId>servicemix-parent</artifactId>
+ <version>5.0.0-SNAPSHOT</version>
+ </parent>
+
+ <groupId>org.apache.servicemix</groupId>
+ <artifactId>servicemix-manual</artifactId>
+ <packaging>war</packaging>
+ <version>5.0.0-SNAPSHOT</version>
+ <name>Apache ServiceMix :: Manual</name>
+
+ <properties>
+ <jetty-port>8080</jetty-port>
+ <must-succeed>false</must-succeed>
+ <manual.dir>${project.build.directory}/manual</manual.dir>
+ <manual>${manual.dir}/manual-${project.version}</manual>
+ </properties>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.fusesource.scalate</groupId>
+ <artifactId>scalate-wikitext</artifactId>
+ <version>${scalate-version}</version>
+ </dependency>
+ <dependency>
+ <groupId>ch.qos.logback</groupId>
+ <artifactId>logback-classic</artifactId>
+ <version>0.9.24</version>
+ </dependency>
+ <dependency>
+ <groupId>org.slf4j</groupId>
+ <artifactId>slf4j-api</artifactId>
+ <version>1.6.0</version>
+ </dependency>
+ <dependency>
+ <groupId>org.scala-lang</groupId>
+ <artifactId>scala-library</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.scala-lang</groupId>
+ <artifactId>scala-compiler</artifactId>
+ </dependency>
+ </dependencies>
+
+ <build>
+ <sourceDirectory>src/main/scala</sourceDirectory>
+
+ <resources>
+ <resource>
+ <directory>src/main/resources</directory>
+ <filtering>false</filtering>
+ </resource>
+ </resources>
+
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-resources-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>filter</id>
+ <phase>generate-resources</phase>
+ <goals>
+ <goal>copy-resources</goal>
+ </goals>
+ <configuration>
+ <outputDirectory>${project.build.directory}/webapp</outputDirectory>
+ <resources>
+ <resource>
+ <directory>src/main/webapp</directory>
+ <filtering>true</filtering>
+ </resource>
+ </resources>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.karaf.tooling</groupId>
+ <artifactId>cmdhelp-maven-plugin</artifactId>
+ <version>${karaf-version}</version>
+ <executions>
+ <execution>
+ <id>generate-commands</id>
+ <phase>generate-resources</phase>
+ <goals>
+ <goal>cmdhelp</goal>
+ </goals>
+ <configuration>
+ <format>conf</format>
+ <targetFolder>${project.build.directory}/webapp/commands/</targetFolder>
+ <classLoader>plugin</classLoader>
+ </configuration>
+ </execution>
+ </executions>
+ <dependencies>
+ <!-- Commands for help generation -->
+ <!-- Additional Required Dependencies -->
+ <dependency>
+ <groupId>org.osgi</groupId>
+ <artifactId>org.osgi.core</artifactId>
+ <version>${osgi-version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.osgi</groupId>
+ <artifactId>org.osgi.compendium</artifactId>
+ <version>${osgi-version}</version>
+ </dependency>
+ </dependencies>
+ </plugin>
+ <plugin>
+ <groupId>org.fusesource.scalate</groupId>
+ <artifactId>maven-scalate-plugin</artifactId>
+ <version>${scalate-version}</version>
+ <executions>
+ <execution>
+ <id>generate-htmls</id>
+ <phase>compile</phase>
+ <goals>
+ <goal>sitegen</goal>
+ </goals>
+ <configuration>
+ <warSourceDirectory>${project.build.directory}/webapp</warSourceDirectory>
+ </configuration>
+ </execution>
+ </executions>
+ <configuration>
+ <remoteServerId>people.apache.org</remoteServerId>
+ <remoteServerUrl>scp://people.apache.org/www/servicemix.apache.org/manual/${project.version}</remoteServerUrl>
+ </configuration>
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.maven.wagon</groupId>
+ <artifactId>wagon-ssh</artifactId>
+ <version>${maven-wagon-version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.fusesource.wikitext</groupId>
+ <artifactId>confluence-core</artifactId>
+ <version>${wikitext-version}</version>
+ </dependency>
+ </dependencies>
+ </plugin>
+ <plugin>
+ <artifactId>maven-antrun-plugin</artifactId>
+ <version>1.2</version>
+ <executions>
+ <execution>
+ <id>attach-manual</id>
+ <phase>install</phase>
+ <goals>
+ <goal>run</goal>
+ </goals>
+ <configuration>
+ <tasks>
+ <mkdir dir="${manual.dir}" />
+ <move file="${project.build.directory}/sitegen/manual.html" tofile="${manual}.html" />
+ <echo message="Generating PDF using Prince XML (http://www.princexml.com/)" />
+ <exec executable="prince">
+ <arg value="${manual}.html" />
+ <arg value="${manual}.pdf" />
+ <arg value="--log" />
+ <arg value="${project.build.directory}/prince.log" />
+ </exec>
+ </tasks>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>build-helper-maven-plugin</artifactId>
+ <version>1.5</version>
+ <executions>
+ <execution>
+ <id>add-source</id>
+ <phase>generate-resources</phase>
+ <goals>
+ <goal>add-source</goal>
+ </goals>
+ <configuration>
+ <sources>
+ <source>${project.build.directory}/webapp</source>
+ </sources>
+ </configuration>
+ </execution>
+ <execution>
+ <id>attach-artifacts</id>
+ <phase>install</phase>
+ <goals>
+ <goal>attach-artifact</goal>
+ </goals>
+ <configuration>
+ <artifacts>
+ <artifact>
+ <file>${manual}.pdf</file>
+ <type>pdf</type>
+ </artifact>
+ <artifact>
+ <file>${manual}.html</file>
+ <type>html</type>
+ </artifact>
+ </artifacts>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <artifactId>maven-war-plugin</artifactId>
+ <version>2.1</version>
+ <configuration>
+ <webResources>
+ <resource>
+ <directory>${project.build.directory}/webapp/</directory>
+ </resource>
+ </webResources>
+ <archive>
+ <manifestFile>${project.build.outputDirectory}/META-INF/MANIFEST.MF</manifestFile>
+ </archive>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.mortbay.jetty</groupId>
+ <artifactId>jetty-maven-plugin</artifactId>
+ <version>7.1.5.v20100705</version>
+ <configuration>
+ <!-- When editing the conf files, you can comment this line to run
+ mvn jetty:run
+ to have a live web site
+ -->
+ <webAppSourceDirectory>${jetty-war-dir}</webAppSourceDirectory>
+
+ <systemProperties>
+ <systemProperty>
+ <name>scalate.editor</name>
+ <value>${scalate.editor}</value>
+ </systemProperty>
+ <systemProperty>
+ <name>scalate.workdir</name>
+ <value>${scalate.workdir}</value>
+ </systemProperty>
+ <systemProperty>
+ <name>scalate.mode</name>
+ <value>${scalate.mode}</value>
+ </systemProperty>
+ </systemProperties>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.felix</groupId>
+ <artifactId>maven-bundle-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>bundle-manifest</id>
+ <phase>process-classes</phase>
+ <goals>
+ <goal>manifest</goal>
+ </goals>
+ </execution>
+ </executions>
+ <configuration>
+ <supportedProjectTypes>
+ <supportedProjectType>jar</supportedProjectType>
+ <supportedProjectType>bundle</supportedProjectType>
+ <supportedProjectType>war</supportedProjectType>
+ </supportedProjectTypes>
+ <instructions>
+ <Import-Package>
+ javax.servlet,
+ javax.servlet.http,
+ org.osgi.framework,
+ org.osgi.service.packageadmin,
+ javax.swing.tree,
+ org.apache.commons.logging;provider=paxlogging;resolution:=optional,
+ org.apache.log4j;provider=paxlogging;resolution:=optional,
+ org.slf4j;provider=paxlogging;resolution:=optional;version="[1.5,2)",
+ </Import-Package>
+ <Bundle-ClassPath>.,WEB-INF/classes</Bundle-ClassPath>
+ <Embed-Directory>WEB-INF/lib</Embed-Directory>
+ <Embed-Dependency>*;scope=compile|runtime</Embed-Dependency>
+ <Embed-Transitive>true</Embed-Transitive>
+ <Webapp-Context>/karaf-doc</Webapp-Context>
+ </instructions>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+</project>
diff --git a/manual/src/main/webapp/.livereload b/manual/src/main/webapp/.livereload
new file mode 100644
index 0000000..b185045
--- /dev/null
+++ b/manual/src/main/webapp/.livereload
@@ -0,0 +1,19 @@
+# Lines starting with pound sign (#) are ignored.
+
+# additional extensions to monitor
+#config.exts << 'haml'
+
+# exclude files with NAMES matching this mask
+#config.exclusions << '~*'
+# exclude files with PATHS matching this mask (if the mask contains a slash)
+#config.exclusions << '/excluded_dir/*'
+# exclude files with PATHS matching this REGEXP
+#config.exclusions << /somedir.*(ab){2,4}.(css|js)$/
+
+# reload the whole page when .js changes
+#config.apply_js_live = false
+# reload the whole page when .css changes
+#config.apply_css_live = false
+
+# wait 100ms for more changes before reloading a page
+#config.grace_period = 0.1
diff --git a/manual/src/main/webapp/WEB-INF/scalate/layouts/default.scaml b/manual/src/main/webapp/WEB-INF/scalate/layouts/default.scaml
new file mode 100644
index 0000000..c9da696
--- /dev/null
+++ b/manual/src/main/webapp/WEB-INF/scalate/layouts/default.scaml
@@ -0,0 +1,116 @@
+-#
+-# Copyright (C) 2009-2010 the original author or authors.
+-# See the notice.md file distributed with this work for additional
+-# information regarding copyright ownership.
+-#
+-# Licensed 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.
+-#
+
+-@ var body: String
+-@ var title : String = "Apache Karaf ${pom.version} Guide"
+- response.setContentType("text/html")
+
+-# Only include the console if it's available and the engine is in dev mode.
+- val include_console = engine.isDevelopmentMode && engine.resourceLoader.exists("/org/fusesource/scalate/console/console_head.scaml")
+
+!!! Basic
+%html(lang="en")
+ %head
+ %meta(http-equiv="Content-Type" content="text/html; charset=utf-8")
+ %meta(name="description" content="description goes here")
+ %meta(name="keywords" content="keywords,goes,here")
+ %meta(name="author" content="The Apache Karaf Team")
+
+ - if (include_console)
+ = include("/org/fusesource/scalate/console/console_head.scaml")
+
+ %link(href={uri("/css/style.css")} rel="stylesheet" type="text/css")
+ %link(href={uri("/css/pygmentize.css")} rel="stylesheet" type="text/css")
+
+ - if (include_console)
+ %link(href={uri("/css/scalate/console.css")} rel="stylesheet" type="text/css")
+
+ %title
+ = title
+
+ %body
+ %table{:width => "100%", :cellpadding => "0", :cellspacing => "0"}
+ %tr{:width => "100%"}
+ %td#cell-0-0{:colspan => "2"}
+
+ %td#cell-0-1
+
+ %td#cell-0-2{:colspan => "2"}
+
+ %tr{:width => "100%"}
+ %td#cell-1-0
+
+ %td#cell-1-1
+
+ %td#cell-1-2
+ %div{:style => "padding: 5px;"}
+ #banner
+ = include("/_banner.ssp")
+ #top-menu
+ %table{:border => "0", :cellpadding => "1", :cellspacing => "0", :width => "100%"}
+ %tr
+ %td
+ %div{:align => "left"}
+ %td
+ %div{:align => "right"}
+ = include("/_quicklinks.ssp")
+ %td#cell-1-3
+
+ %td#cell-1-4
+
+ %tr{:width => "100%"}
+ %td#cell-2-0{:colspan => "2"}
+
+ %td#cell-2-1
+ %table
+ %tr{:height => "100%", :valign => "top"}
+ %td{:height => "100%"}
+ #wrapper-menu-page-right
+ #wrapper-menu-page-top
+ #wrapper-menu-page-bottom
+ #menu-page
+ = include("/_navigation.conf")
+ %td{:height =>"100%", :width => "100%"}
+ .wiki-content
+ !~~ body
+ %td#cell-2-2{:colspan => "2"}
+
+ %tr{:width => "100%"}
+ %td#cell-3-0
+
+ %td#cell-3-1
+
+ %td#cell-3-2
+ #footer
+ #site-footer
+ © 2008-2011 The Apache Software Foundation
+ %br
+ Apache ServiceMix, ServiceMix, Apache, the Apache feather logo, and the Apache ServiceMix project logo are trademarks of The Apache Software Foundation.
+ %td#cell-3-3
+
+ %td#cell-3-4
+
+ %tr{:width => "100%"}
+ %td#cell-4-0{:colspan => "2"}
+
+ %td#cell-4-1
+
+ %td#cell-4-2{:colspan => "2"}
+
+ - if (include_console)
+ = include("/org/fusesource/scalate/console/console.scaml")
diff --git a/manual/src/main/webapp/WEB-INF/scalate/layouts/print.ssp b/manual/src/main/webapp/WEB-INF/scalate/layouts/print.ssp
new file mode 100644
index 0000000..41c0720
--- /dev/null
+++ b/manual/src/main/webapp/WEB-INF/scalate/layouts/print.ssp
@@ -0,0 +1,817 @@
+<%--
+Copyright (C) 2009-2010 the original author or authors.
+See the notice.md file distributed with this work for additional
+information regarding copyright ownership.
+
+Licensed 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.
+--%>
+<%@ var body: String %>
+<%@ var title: String = "Apache Karaf ${karaf.version}" %>
+<% escapeMarkup = false %>
+<!DOCTYPE html>
+<html>
+<head>
+ <style type="text/css">
+/*
+
+Copyright (c) 2005 Hakon Wium Lie and Bert Bos
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
+*/
+html {
+ margin: 0; padding: 0;
+ font: 10pt/1.26 "Gill Sans", sans-serif;
+}
+
+h1, h2, h3, h4, h5, h6 {
+ font-family: "Gill Sans", sans-serif;
+ margin: 2em 0 0.5em 0;
+ page-break-after: avoid;
+}
+
+h1 {
+ font-size: 2.0em;
+ font-weight: 900;
+
+ margin: 0;
+ margin-left:-2cm;
+ margin-top:-1cm;
+ margin-bottom:1.5cm;
+ top: 0cm;
+ left: 0cm;
+ padding: 2cm;
+ padding-top: 0cm;
+ padding-bottom: 1cm;
+ background: #888;
+ border-bottom-right-radius: 2cm;
+ page-break-before: always;
+ page-break-inside: avoid;
+}
+
+@media screen, handheld {
+h1 {
+ margin-top:1cm;
+ background-image: url("chapter-rounded-bottom.png");
+ background-repeat: no-repeat;
+ background-position: bottom right;
+}
+div.page-reset > h1 {
+ margin-top:0cm;
+}
+}
+
+
+h2 {
+ font-size: 1.2em;
+ text-transform: uppercase;
+ font-weight: bold;
+}
+
+h3 {
+ font-size: 1em;
+ font-weight: bold;
+}
+
+q::before {
+ content: "\201C";
+}
+
+q::after {
+ content: "\201D";
+}
+
+p { margin: 0 }
+p + p { text-indent: 1.3em ; margin-top: 0.2em; }
+p.sidenote + p, p.caption, p.art { text-indent: 0 }
+
+p.author {
+ margin-top: 2em;
+ text-indent: 0;
+ text-align: right;
+}
+
+a { text-decoration: none; color: black }
+
+/* cross-references */
+
+a.pageref::after { content: " on page " target-counter(attr(href), page); }
+a.chapref::before { content: " Chapter " target-counter(attr(href), chapter) ", "; }
+a.figref { content: " Figure " target-counter(attr(href), figure); }
+a.tableref { content: " Table " target-counter(attr(href), figure); }
+a.listingref { content: " Listing " target-counter(attr(href), listing); }
+
+/* sidenotes */
+
+.sidenote {
+ float: left;
+ clear: left;
+ margin: 0 0 1em -41%;
+ width: 37%;
+ font-size: 0.9em;
+ font-style: normal;
+ text-indent: 0;
+ text-align: right;
+ page-break-inside: avoid;
+}
+
+/* sidebars */
+
+div.sidebar {
+ float: top-next;
+ margin: 1.2em 0 1.2em 0;
+ border: thin solid;
+ background: #CCC;
+ padding: 0.5em 1em;
+ page-break-inside: avoid;
+ column-count: 2;
+ column-gap: 1.5em;
+}
+
+div.sidebar h2 {
+ margin-top: 0;
+}
+
+/* frontpage */
+
+.title p{
+ font-size:22pt;
+ font-family: "Gill Sans", sans-serif;
+ text-align: center;
+}
+
+.copyright-section {
+ text-align: center;
+ font-size: 9pt;
+ page-break-after: always;
+ margin-top: 50pt;
+ margin-bottom: 20pt;
+}
+
+.toc-title {
+ font-size:18pt;
+ font-family: "Gill Sans", sans-serif;
+ text-align: left;
+ margin-left:20pt;
+ margin-bottom: 40pt;
+
+}
+
+/* figures, tables, and listings */
+
+div.confluenceTableSmall th.confluenceTh {
+ font-size: 11px;
+}
+
+div.confluenceTableSmall td.confluenceTd {
+ font-size: 7px;
+}
+
+div.figure {
+ margin: 1em 0;
+ counter-increment: figure;
+}
+
+div.figure .caption, div.table .caption {
+ font-size: 0.9em;
+ font-style: italic;
+}
+
+div.figure .caption::before {
+ content: "Figure " counter(figure) ". ";
+ font-weight: bold;
+ font-style: normal;
+}
+
+div.table .caption::before {
+ content: "Table " counter(table) ". ";
+ font-weight: bold;
+ font-style: normal;
+}
+
+div.table {
+ margin: 1em 0;
+ counter-increment: table;
+}
+
+div.table th {
+ text-align: left;
+}
+
+table th, table td {
+ text-align: left;
+ padding-right: 1em;
+ page-break-inside: avoid;
+}
+
+table th {
+ border-top: thin solid;
+ border-bottom: thin solid;
+ padding-top: 0.2em;
+ padding-bottom: 0.2em;
+}
+table td {
+ border-top: none;
+ border-bottom: thin dotted;
+ padding-top: 0.2em;
+ padding-bottom: 0.2em;
+}
+
+div.Scrollbar {
+ display: none;
+}
+
+
+/* Weird div.codeHeader a b::before would be a better selection
+ but prince does not properly match it.. Firefox does. */
+div.codeHeader::before {
+ content: "Listing " counter(listing) ". ";
+ font-weight: bold;
+ font-style: normal;
+}
+div.codeHeader a b {
+ font-style: italic;
+ font-weight: normal;
+}
+div.codeHeader {
+ font-size: 0.9em;
+ counter-increment: listing;
+}
+div.code {
+ border: 1px dashed #c0c0c0;
+ font-size: 12px;
+ font-family: Courier;
+ margin: 5px;
+ line-height: 13px;
+ padding: 3px;
+ background-color: #f8f8f8;
+
+}
+
+
+@page {
+ margin: 2cm;
+ size: 7in 9.25in;
+
+ @footnotes {
+ border-top: thin solid black;
+ padding-top: 0.3em;
+ margin-top: 0.6em;
+ }
+}
+
+
+/* define default page and names pages: cover, blank, frontmatter */
+div.page-reset {
+ counter-reset: page 1;
+}
+
+@page :left {
+ @top-left-corner {
+ font-weight: 900; font: 9pt "Gill Sans", serif;
+ content: counter(page);
+ text-align: left;
+ margin-left: 1cm;
+ visibility: hidden;
+ }
+ @top-left {
+ font-weight: 900;
+ font: 9pt "Gill Sans", serif; white-space: pre; text-transform: uppercase; letter-spacing: 0.1em;
+ content: string(header, first);
+ visibility: hidden;
+ }
+ @bottom-left-corner {
+ font-weight: 900; font: 9pt "Gill Sans", serif;
+ content: counter(page);
+ text-align: left;
+ margin-left: 1cm;
+ }
+ @bottom-left {
+ font-weight: 900;
+ font: 9pt "Gill Sans", serif; white-space: pre; text-transform: uppercase; letter-spacing: 0.1em;
+ content: string(header, first);
+ }
+}
+
+@page :right {
+ @top-right-corner {
+ font-weight: 900; font: 9pt "Gill Sans", serif;
+ content: counter(page);
+ text-align: left;
+ margin-left: 1cm;
+ visibility: hidden;
+ }
+ @top-right {
+ font-weight: 900;
+ font: 9pt "Gill Sans", serif; white-space: pre; text-transform: uppercase; letter-spacing: 0.1em;
+ content: string(header, first)
+ visibility: hidden;
+ }
+ @bottom-right-corner {
+ font-weight: 900; font: 9pt "Gill Sans", serif;
+ content: counter(page);
+ text-align: right;
+ margin-right: 1cm;
+ }
+ @bottom-right {
+ font-weight: 900; font: 9pt "Gill Sans", serif;
+ white-space: pre; text-transform: uppercase; letter-spacing: 0.1em;
+ content: string(header, first)
+ }
+}
+
+/*
+ In theory we should be able to use the :first selector so taht
+ we can put the page numbering on the bottom of the first page of the chapter
+ but have the rest of the pages number at the top. But this does not seem
+ to work. See http://www.princexml.com/doc/6.0/page-selectors/
+
+ So for now just always number at the bottom :(
+*/
+/*
+div.chapter { page: bottom-number; }
+@page bottom-number :first {
+ @top-left {
+ visibility: hidden;
+ }
+ @bottom-left {
+ visibility: visible;
+ }
+ @top-right {
+ visibility: hidden;
+ }
+ @bottom-right {
+ visibility: visible;
+ }
+}
+*/
+
+@page cover { margin: 0; }
+
+@page frontmatter :left {
+ @bottom-left-corner {
+ content: counter(page, lower-roman);
+ }
+ @bottom-left-corner {
+ content: counter(page, lower-roman);
+ }
+}
+
+@page frontmatter :right {
+ @bottom-right-corner {
+ content: counter(page, lower-roman);
+ }
+ @bottom-right-corner {
+ content: counter(page, lower-roman);
+ }
+}
+
+@page blank :left {
+ @top-left { visibility: hidden; }
+ @bottom-left { visibility: hidden; }
+ @top-left-corner { visibility: hidden; }
+ @bottom-left-corner { visibility: hidden; }
+}
+
+@page blank :right {
+ @top-right { visibility: hidden; }
+ @bottom-right { visibility: hidden; }
+ @top-right-corner { visibility: hidden; }
+ @bottom-right-corner { visibility: hidden; }
+}
+
+/* footnotes */
+.footnote {
+ display: none; /* default rule */
+
+ display: prince-footnote; /* prince-specific rules */
+ position: footnote;
+ footnote-style-position: inside;
+
+ counter-increment: footnote;
+ margin-left: 1.4em;
+ font-size: 90%;
+ line-height: 1.4;
+}
+
+.footnote::footnote-call {
+ vertical-align: super;
+ font-size: 80%;
+}
+
+.footnote::footnote-marker {
+ vertical-align: super;
+ color: green;
+ padding-right: 0.4em;
+}
+
+/* Confluence contents to hide */
+#labels-section {
+ display: none;
+}
+#comments-section {
+ display: none;
+}
+#footer {
+ display: none;
+}
+.hidden {
+ display: none;
+}
+
+/*
+ A book consists of different types of sections. We propose to use
+ DIV elements with these class names:
+
+ frontcover
+ halftitlepage: contains the title of the book
+ titlepage: contains the title of the book, name of author(s) and publisher
+ imprint: left page with copyright, publisher, library printing information
+ dedication: right page with short dedication
+ foreword: written by someone other than the author(s)
+ toc: table of contents
+ preface: preface, including acknowledgements
+ chapter: each chapter is given its own DIV element
+ references: contains list of references
+ appendix: each appendix is given its own
+ bibliography
+ glossary
+ index
+ colophon: describes how the book was produced
+ backcover
+
+ A book will use several of the types listed above, but few books
+ will use all of them.
+*/
+
+/* which section uses which named page */
+
+div.halftitlepage, div.titlepage, div.imprint, div.dedication { page: blank }
+div.foreword, div.toc, div.preface { page: frontmatter }
+
+
+/* page breaks */
+div.frontcover, div.halftitlepage, div.titlepage { page-break-before: right }
+div.imprint { page-break-before: always; }
+div.chapter { page-break-before: always; }
+div.dedication, div.foreword, div.toc, div.preface, div.reference,
+div.appendix, div.bibliography, div.glossary, div.index, div.colophon {
+ page-break-before: always
+}
+div.backcover { page-break-before: left }
+
+/* titlepage, halftitlepage */
+
+div.titlepage h1, div.halftitlepage h1 { margin-bottom: 2em; }
+div.titlepage h2, div.halftitlepage h2 { font-size: 1.2em; margin-bottom: 3em; }
+div.titlepage h3, div.halftitlepage h3 { font-size: 1em; margin-bottom: 3em; }
+div.titlepage p, div.halftitlepage p {
+ font-size: 1.4em;
+ font-weight: bold;
+ margin: 0; padding: 0;
+}
+
+
+/* TOC */
+
+ul.toc, ul.toc ul {
+ list-style-type: none;
+ margin: 0; padding: 0;
+ margin-left: 3cm;
+}
+ul.toc ul {
+ margin-left: 1em;
+ font-weight: normal;
+}
+ul.toc > li {
+ font-weight: bold;
+ margin-bottom: 0.5em;
+}
+ul.toc a::after {
+ content: leader('.') target-counter(attr(href), page);
+ font-style: normal;
+}
+ul.toc > li.frontmatter a::after {
+ content: leader('.') target-counter(attr(href), page, lower-roman);
+ font-style: normal;
+}
+ul.toc > li.endmatter a::after {
+ content: leader('.') target-counter(attr(href), page);
+ font-style: normal;
+}
+ul.toc > li.chapter::before {
+ content: "Chapter " counter(toc-chapter, decimal);
+ display: block;
+ margin: 1em 0 0.1em -2.5cm;
+ font-weight: normal;
+ counter-increment: toc-chapter;
+ page-break-after: avoid;
+}
+
+/* chapter numbers */
+
+div.chapter { counter-increment: chapter; }
+div.chapter h1::before {
+ text-transform: uppercase;
+ letter-spacing: 0.15em;
+ content: "Chapter " counter(chapter) " \A\B0 \B0 \B0 \B0\A";
+ white-space: pre;
+ font-size: 50%;
+}
+
+div.frontcover h1::before, div.titlepage h1::before, div.halftitlepage h1::before {
+ content: normal; /* that is, none */
+}
+
+h1 { string-set: header content();}
+div.chapter h1 { string-set: header "Chapter " counter(chapter) " - " content(); }
+
+/* index */
+
+ul.index {
+ list-style-type: none;
+ margin: 0; padding: 0;
+ column-count: 2;
+ column-gap: 1em;
+}
+
+ul.index a::after { content: ", " target-counter(attr(href), page); }
+
+
+span.element, span.attribute {
+ text-transform: uppercase;
+ font-weight: bold;
+ font-size: 80%;
+}
+span.property { font-weight: bold }
+code, span.css, span.value, span.declaration {
+ font: 90% "Lucida Console", "Lucida Sans Typewriter", monospace;
+}
+
+
+@media screen, handheld {
+ html {font: 14px "Gill Sans", sans-serif; }
+ h1 { margin-bottom: 0.5em }
+ div.frontcover, div.halftitlepage, div.titlepage, div.imprint,
+ div.dedication, div.foreword, div.toc, div.index { display: none }
+ body {
+ margin: 0cm;
+ margin-left: 2cm;
+ margin-right: 2cm;
+ }
+}
+
+/*
+ * Enhancements to the take advantage of some of the style markup that
+ * Confluence generates
+ */
+a sup img { visibility: hidden; position: absolute;}
+
+img {
+ prince-image-resolution:150dpi;
+}
+
+table {
+ font: "Lucida Console", "Lucida Sans Typewriter", monospace;
+}
+
+table td {
+ font-size: 10pt;
+}
+
+pre {
+ white-space: pre-wrap;
+}
+
+.codeContent {
+ font-size: 80%;
+}
+.code {
+}
+.code-keyword {
+ color: #000091;
+ background-color: inherit;
+}
+
+.code-object {
+ color: #910091;
+ background-color: inherit;
+}
+
+.code-quote {
+ color: #009100;
+ background-color: inherit;
+}
+
+.code-comment {
+ color: #808080;
+ background-color: inherit;
+}
+
+
+.code-xml .code-keyword {
+ color: inherit;
+ font-weight: bold;
+}
+
+.code-tag {
+ color: #000091;
+ background-color: inherit;
+}
+
+.noteMacro { border-color: #F0C000; background-color: #FFFFCE;}
+.warningMacro { border-color: #CC0000; background-color: #FFCCCC }
+.infoMacro { border-color: #3c78b5; background-color: #D8E4F1; }
+.tipMacro { border-color: #090; background-color: #dfd;}
+.noteMacro, .warningMacro, .infoMacro, .tipMacro, .informationMacroPadding {
+ border: thin solid;
+ float: top-next;
+ margin: 1em 0 1.2em 0;
+ padding: 0.5em;
+ column-count: 2;
+ column-gap: 1.5em;
+ width: 100%;
+}
+table.infoMacro td, table.warningMacro td, table.tipMacro td, table.noteMacro td, table.sectionMacro td {
+ border: none;
+}
+table.infoMacro p, table.warningMacro p, table.tipMacro p, table.noteMacro p, table.sectionMacro p {
+ font-size:x-small;
+ margin-top: 1em;
+}
+ </style>
+ <style type="text/css">
+.syntax .hll { background-color: #ffffcc }
+.syntax { background: #f0f0f0; }
+.syntax .c { color: #60a0b0; font-style: italic } /* Comment */
+.syntax .err { border: 1px solid #FF0000 } /* Error */
+.syntax .k { color: #007020; font-weight: bold } /* Keyword */
+.syntax .o { color: #666666 } /* Operator */
+.syntax .cm { color: #60a0b0; font-style: italic } /* Comment.Multiline */
+.syntax .cp { color: #007020 } /* Comment.Preproc */
+.syntax .c1 { color: #60a0b0; font-style: italic } /* Comment.Single */
+.syntax .cs { color: #60a0b0; background-color: #fff0f0 } /* Comment.Special */
+.syntax .gd { color: #A00000 } /* Generic.Deleted */
+.syntax .ge { font-style: italic } /* Generic.Emph */
+.syntax .gr { color: #FF0000 } /* Generic.Error */
+.syntax .gh { color: #000080; font-weight: bold } /* Generic.Heading */
+.syntax .gi { color: #00A000 } /* Generic.Inserted */
+.syntax .go { color: #808080 } /* Generic.Output */
+.syntax .gp { color: #c65d09; font-weight: bold } /* Generic.Prompt */
+.syntax .gs { font-weight: bold } /* Generic.Strong */
+.syntax .gu { color: #800080; font-weight: bold } /* Generic.Subheading */
+.syntax .gt { color: #0040D0 } /* Generic.Traceback */
+.syntax .kc { color: #007020; font-weight: bold } /* Keyword.Constant */
+.syntax .kd { color: #007020; font-weight: bold } /* Keyword.Declaration */
+.syntax .kn { color: #007020; font-weight: bold } /* Keyword.Namespace */
+.syntax .kp { color: #007020 } /* Keyword.Pseudo */
+.syntax .kr { color: #007020; font-weight: bold } /* Keyword.Reserved */
+.syntax .kt { color: #902000 } /* Keyword.Type */
+.syntax .m { color: #40a070 } /* Literal.Number */
+.syntax .s { color: #4070a0 } /* Literal.String */
+.syntax .na { color: #4070a0 } /* Name.Attribute */
+.syntax .nb { color: #007020 } /* Name.Builtin */
+.syntax .nc { color: #0e84b5; font-weight: bold } /* Name.Class */
+.syntax .no { color: #60add5 } /* Name.Constant */
+.syntax .nd { color: #555555; font-weight: bold } /* Name.Decorator */
+.syntax .ni { color: #d55537; font-weight: bold } /* Name.Entity */
+.syntax .ne { color: #007020 } /* Name.Exception */
+.syntax .nf { color: #06287e } /* Name.Function */
+.syntax .nl { color: #002070; font-weight: bold } /* Name.Label */
+.syntax .nn { color: #0e84b5; font-weight: bold } /* Name.Namespace */
+.syntax .nt { color: #062873; font-weight: bold } /* Name.Tag */
+.syntax .nv { color: #bb60d5 } /* Name.Variable */
+.syntax .ow { color: #007020; font-weight: bold } /* Operator.Word */
+.syntax .w { color: #bbbbbb } /* Text.Whitespace */
+.syntax .mf { color: #40a070 } /* Literal.Number.Float */
+.syntax .mh { color: #40a070 } /* Literal.Number.Hex */
+.syntax .mi { color: #40a070 } /* Literal.Number.Integer */
+.syntax .mo { color: #40a070 } /* Literal.Number.Oct */
+.syntax .sb { color: #4070a0 } /* Literal.String.Backtick */
+.syntax .sc { color: #4070a0 } /* Literal.String.Char */
+.syntax .sd { color: #4070a0; font-style: italic } /* Literal.String.Doc */
+.syntax .s2 { color: #4070a0 } /* Literal.String.Double */
+.syntax .se { color: #4070a0; font-weight: bold } /* Literal.String.Escape */
+.syntax .sh { color: #4070a0 } /* Literal.String.Heredoc */
+.syntax .si { color: #70a0d0; font-style: italic } /* Literal.String.Interpol */
+.syntax .sx { color: #c65d09 } /* Literal.String.Other */
+.syntax .sr { color: #235388 } /* Literal.String.Regex */
+.syntax .s1 { color: #4070a0 } /* Literal.String.Single */
+.syntax .ss { color: #517918 } /* Literal.String.Symbol */
+.syntax .bp { color: #007020 } /* Name.Builtin.Pseudo */
+.syntax .vc { color: #bb60d5 } /* Name.Variable.Class */
+.syntax .vg { color: #bb60d5 } /* Name.Variable.Global */
+.syntax .vi { color: #bb60d5 } /* Name.Variable.Instance */
+.syntax .il { color: #40a070 } /* Literal.Number.Integer.Long */
+
+
+/* don't highlight errors */
+.syntax .err {
+ border: none;
+}
+
+.syntax {
+ font-size: .9em;
+ font-family:Monaco,"Courier New","DejaVu Sans Mono","Bitstream Vera Sans Mono",monospace;
+ background-color: #F8F8FF;
+
+ overflow:auto;
+ -moz-background-clip:border;
+ -moz-background-inline-policy:continuous;
+ -moz-background-origin:padding;
+ margin: 1em 0 1em 0;
+ border:1px solid #DDDDDD;
+
+ border-top-left-radius: 8px; -webkit-border-top-left-radius: 8px; -moz-border-radius-topleft: 8px;
+ border-top-right-radius: 8px; -webkit-border-top-right-radius: 8px; -moz-border-radius-topright: 8px;
+ border-style: solid; border-width: 1px; border-color: #dedede !important;
+ padding: 1em;
+}
+.syntax .linenodiv {
+ background-color:#ECECEC;
+ border-right:1px solid #DDDDDD;
+ color:#AAAAAA;
+ padding: .5em;
+ text-align:right;
+}
+.syntax .highlight {
+}
+.syntax pre {
+ margin:0;
+}
+
+pre.syntax {
+ padding: .5em;
+ background-color: #F8F8FF; overflow:auto;
+}
+
+.syntax code {
+ font-family:Monaco,"Courier New","DejaVu Sans Mono","Bitstream Vera Sans Mono",monospace;
+ font-size: 10pt;
+}
+
+div.compare { width: 700px; }
+div.compare div.compare-left { float:left; width:340px; padding:5px; margin-top: 15px; }
+div.compare div.compare-right { float:right; width:340px; padding:5px; margin-top: 15px; }
+div.compare div h3 {
+ margin-left: 15px;
+ padding: 5px 15px;
+ display: inline;
+ font-size: .8em;
+ color: #666;
+
+ border-top: 1px solid #ccc; -moz-border-top-colors: #ccc white white #e5e5e5;
+ border-left: 1px solid #ccc; -moz-border-left-colors: #ccc white white #e5e5e5;
+ border-right: 1px solid #ccc;-moz-border-right-colors: #ccc white white #e5e5e5;
+ border-top-left-radius: 8px; -webkit-border-top-left-radius: 8px; -moz-border-radius-topleft: 8px;
+ border-top-right-radius: 8px; -webkit-border-top-right-radius: 8px; -moz-border-radius-topright: 8px;
+}
+div.compare div div {
+ margin: 5px 0px 0px 0px;
+}
+.clear {
+ clear:both;
+}
+.wide div.compare div.compare-left { float:none; width:700px; }
+.wide div.compare div.compare-right { float:none; width:700px; }
+
+ </style>
+
+ <title>${title}</title>
+</head>
+<body>
+ <div id="titlepage">
+ <div id="title">Apache ServiceMix</div>
+ <div id="subtitle">Version ${servicemix-version}</div>
+ </div>
+ <div id="main">
+ <%= body %>
+ </div>
+</body>
+</html>
diff --git a/manual/src/main/webapp/WEB-INF/web.xml b/manual/src/main/webapp/WEB-INF/web.xml
new file mode 100644
index 0000000..9b44f34
--- /dev/null
+++ b/manual/src/main/webapp/WEB-INF/web.xml
@@ -0,0 +1,50 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+ Copyright (C) 2009-2010 the original author or authors.
+ See the notice.md file distributed with this work for additional
+ information regarding copyright ownership.
+
+ Licensed 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.
+
+-->
+
+<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
+ xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
+ version="2.5">
+
+ <display-name>Apache ServiceMix Documentation</display-name>
+
+ <description>
+ Apache ServiceMix Documentation
+ </description>
+
+ <filter>
+ <filter-name>TemplateEngineFilter</filter-name>
+ <filter-class>org.fusesource.scalate.servlet.TemplateEngineFilter</filter-class>
+ </filter>
+ <filter-mapping>
+ <filter-name>TemplateEngineFilter</filter-name>
+ <url-pattern>/*</url-pattern>
+ </filter-mapping>
+
+ <welcome-file-list>
+ <welcome-file>index.conf</welcome-file>
+ </welcome-file-list>
+
+ <error-page>
+ <error-code>500</error-code>
+ <location>/WEB-INF/scalate/errors/500.scaml</location>
+ </error-page>
+</web-app>
diff --git a/manual/src/main/webapp/_banner.ssp b/manual/src/main/webapp/_banner.ssp
new file mode 100644
index 0000000..899fa60
--- /dev/null
+++ b/manual/src/main/webapp/_banner.ssp
@@ -0,0 +1,15 @@
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
+ <tr>
+ <td align="left" class="topbardiv" nowrap="">
+<a href="http://servicemix.apache.org/" title="An Open Source ESB and Integration Plaftorm powered by OSGi">
+ <img border="0" src="${uri("/images/smx-logo.png")}" width="400px"></img>
+ <span style="position: relative; top: -24px; font-family: Comic Sans MS; font-size: 64px; color: white;"></span>
+</a>
+ </td>
+ <td align="right" nowrap="">
+<a href="http://www.apache.org/" title="The Apache Sofware Foundation">
+ <img border="0" src="${uri("/images/asf-logo.png")}">
+</a>
+ </td>
+ </tr>
+ </table>
diff --git a/manual/src/main/webapp/_navigation.conf b/manual/src/main/webapp/_navigation.conf
new file mode 100644
index 0000000..ddb1684
--- /dev/null
+++ b/manual/src/main/webapp/_navigation.conf
@@ -0,0 +1,2 @@
+h3. [Home|/index]
+
diff --git a/manual/src/main/webapp/_quicklinks.ssp b/manual/src/main/webapp/_quicklinks.ssp
new file mode 100644
index 0000000..334d683
--- /dev/null
+++ b/manual/src/main/webapp/_quicklinks.ssp
@@ -0,0 +1,8 @@
+<p>
+<a href="${uri("/index.html")}" title="Home">Home</a>
+|
+<a href="${uri("/index.html")}" title="Home">Home</a>
+|
+<a href="${uri("/index.html")}" title="Home">Home</a>
+</p>
+
diff --git a/manual/src/main/webapp/css/pygmentize.css b/manual/src/main/webapp/css/pygmentize.css
new file mode 100644
index 0000000..80efdcd
--- /dev/null
+++ b/manual/src/main/webapp/css/pygmentize.css
@@ -0,0 +1,134 @@
+.syntax .hll { background-color: #ffffcc }
+.syntax { background: #f0f0f0; }
+.syntax .c { color: #60a0b0; font-style: italic } /* Comment */
+.syntax .err { border: 1px solid #FF0000 } /* Error */
+.syntax .k { color: #007020; font-weight: bold } /* Keyword */
+.syntax .o { color: #666666 } /* Operator */
+.syntax .cm { color: #60a0b0; font-style: italic } /* Comment.Multiline */
+.syntax .cp { color: #007020 } /* Comment.Preproc */
+.syntax .c1 { color: #60a0b0; font-style: italic } /* Comment.Single */
+.syntax .cs { color: #60a0b0; background-color: #fff0f0 } /* Comment.Special */
+.syntax .gd { color: #A00000 } /* Generic.Deleted */
+.syntax .ge { font-style: italic } /* Generic.Emph */
+.syntax .gr { color: #FF0000 } /* Generic.Error */
+.syntax .gh { color: #000080; font-weight: bold } /* Generic.Heading */
+.syntax .gi { color: #00A000 } /* Generic.Inserted */
+.syntax .go { color: #808080 } /* Generic.Output */
+.syntax .gp { color: #c65d09; font-weight: bold } /* Generic.Prompt */
+.syntax .gs { font-weight: bold } /* Generic.Strong */
+.syntax .gu { color: #800080; font-weight: bold } /* Generic.Subheading */
+.syntax .gt { color: #0040D0 } /* Generic.Traceback */
+.syntax .kc { color: #007020; font-weight: bold } /* Keyword.Constant */
+.syntax .kd { color: #007020; font-weight: bold } /* Keyword.Declaration */
+.syntax .kn { color: #007020; font-weight: bold } /* Keyword.Namespace */
+.syntax .kp { color: #007020 } /* Keyword.Pseudo */
+.syntax .kr { color: #007020; font-weight: bold } /* Keyword.Reserved */
+.syntax .kt { color: #902000 } /* Keyword.Type */
+.syntax .m { color: #40a070 } /* Literal.Number */
+.syntax .s { color: #4070a0 } /* Literal.String */
+.syntax .na { color: #4070a0 } /* Name.Attribute */
+.syntax .nb { color: #007020 } /* Name.Builtin */
+.syntax .nc { color: #0e84b5; font-weight: bold } /* Name.Class */
+.syntax .no { color: #60add5 } /* Name.Constant */
+.syntax .nd { color: #555555; font-weight: bold } /* Name.Decorator */
+.syntax .ni { color: #d55537; font-weight: bold } /* Name.Entity */
+.syntax .ne { color: #007020 } /* Name.Exception */
+.syntax .nf { color: #06287e } /* Name.Function */
+.syntax .nl { color: #002070; font-weight: bold } /* Name.Label */
+.syntax .nn { color: #0e84b5; font-weight: bold } /* Name.Namespace */
+.syntax .nt { color: #062873; font-weight: bold } /* Name.Tag */
+.syntax .nv { color: #bb60d5 } /* Name.Variable */
+.syntax .ow { color: #007020; font-weight: bold } /* Operator.Word */
+.syntax .w { color: #bbbbbb } /* Text.Whitespace */
+.syntax .mf { color: #40a070 } /* Literal.Number.Float */
+.syntax .mh { color: #40a070 } /* Literal.Number.Hex */
+.syntax .mi { color: #40a070 } /* Literal.Number.Integer */
+.syntax .mo { color: #40a070 } /* Literal.Number.Oct */
+.syntax .sb { color: #4070a0 } /* Literal.String.Backtick */
+.syntax .sc { color: #4070a0 } /* Literal.String.Char */
+.syntax .sd { color: #4070a0; font-style: italic } /* Literal.String.Doc */
+.syntax .s2 { color: #4070a0 } /* Literal.String.Double */
+.syntax .se { color: #4070a0; font-weight: bold } /* Literal.String.Escape */
+.syntax .sh { color: #4070a0 } /* Literal.String.Heredoc */
+.syntax .si { color: #70a0d0; font-style: italic } /* Literal.String.Interpol */
+.syntax .sx { color: #c65d09 } /* Literal.String.Other */
+.syntax .sr { color: #235388 } /* Literal.String.Regex */
+.syntax .s1 { color: #4070a0 } /* Literal.String.Single */
+.syntax .ss { color: #517918 } /* Literal.String.Symbol */
+.syntax .bp { color: #007020 } /* Name.Builtin.Pseudo */
+.syntax .vc { color: #bb60d5 } /* Name.Variable.Class */
+.syntax .vg { color: #bb60d5 } /* Name.Variable.Global */
+.syntax .vi { color: #bb60d5 } /* Name.Variable.Instance */
+.syntax .il { color: #40a070 } /* Literal.Number.Integer.Long */
+
+
+/* don't highlight errors */
+.syntax .err {
+ border: none;
+}
+
+.syntax {
+ font-size: .9em;
+ font-family:Monaco,"Courier New","DejaVu Sans Mono","Bitstream Vera Sans Mono",monospace;
+ background-color: #F8F8FF;
+
+ overflow:auto;
+ -moz-background-clip:border;
+ -moz-background-inline-policy:continuous;
+ -moz-background-origin:padding;
+ margin: 1em 0 1em 0;
+ border:1px solid #DDDDDD;
+
+ border-top-left-radius: 8px; -webkit-border-top-left-radius: 8px; -moz-border-radius-topleft: 8px;
+ border-top-right-radius: 8px; -webkit-border-top-right-radius: 8px; -moz-border-radius-topright: 8px;
+ border-style: solid; border-width: 1px; border-color: #dedede !important;
+ padding: 1em;
+}
+.syntax .linenodiv {
+ background-color:#ECECEC;
+ border-right:1px solid #DDDDDD;
+ color:#AAAAAA;
+ padding: .5em;
+ text-align:right;
+}
+.syntax .highlight {
+}
+.syntax pre {
+ margin:0;
+}
+
+pre.syntax {
+ padding: .5em;
+ background-color: #F8F8FF; overflow:auto;
+}
+
+.syntax code {
+ font-family:Monaco,"Courier New","DejaVu Sans Mono","Bitstream Vera Sans Mono",monospace;
+ font-size: 10pt;
+}
+
+div.compare { width: 700px; }
+div.compare div.compare-left { float:left; width:340px; padding:5px; margin-top: 15px; }
+div.compare div.compare-right { float:right; width:340px; padding:5px; margin-top: 15px; }
+div.compare div h3 {
+ margin-left: 15px;
+ padding: 5px 15px;
+ display: inline;
+ font-size: .8em;
+ color: #666;
+
+ border-top: 1px solid #ccc; -moz-border-top-colors: #ccc white white #e5e5e5;
+ border-left: 1px solid #ccc; -moz-border-left-colors: #ccc white white #e5e5e5;
+ border-right: 1px solid #ccc;-moz-border-right-colors: #ccc white white #e5e5e5;
+ border-top-left-radius: 8px; -webkit-border-top-left-radius: 8px; -moz-border-radius-topleft: 8px;
+ border-top-right-radius: 8px; -webkit-border-top-right-radius: 8px; -moz-border-radius-topright: 8px;
+}
+div.compare div div {
+ margin: 5px 0px 0px 0px;
+}
+.clear {
+ clear:both;
+}
+.wide div.compare div.compare-left { float:none; width:700px; }
+.wide div.compare div.compare-right { float:none; width:700px; }
+
diff --git a/manual/src/main/webapp/css/scalate/console.css b/manual/src/main/webapp/css/scalate/console.css
new file mode 100644
index 0000000..4b2dfe7
--- /dev/null
+++ b/manual/src/main/webapp/css/scalate/console.css
@@ -0,0 +1,71 @@
+/**
+ * Copyright (C) 2009-2010 the original author or authors.
+ * See the notice.md file distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * Licensed 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.
+ */
+
+#scalate-console {
+ position:fixed;
+ top:40px;
+ right:10px;
+ background: #FDFCAD;
+ padding:10px;
+ border: 1px solid #BDBD81;
+ font-family:Arial,Verdana,Helvetica,sans-serif;
+ font-size: 80%;
+ max-width: 400px;
+}
+
+#scalate-console .archetypes ul, #scalate-console .templates ul, #scalate-console .resources ul, #scalate-console .layouts ul {
+ padding-left:20px;
+ overflow: auto;
+}
+
+#scalate-console .toggle {
+ text-align: right;
+}
+
+#scalate-console .toggle img {
+ vertical-align: middle;
+}
+
+#scalate-console div.attributes {
+ margin: 10px;
+ overflow: auto;
+ background: white;
+}
+
+#scalate-console div.attributes table th {
+ text-align: left;
+ color: #993333;
+}
+#scalate-console div.attributes table td {
+ padding:2px;
+ border-top: 1px solid #BDBD81;
+}
+
+#scalate-console div.body {
+ margin: 10px;
+ overflow: auto;
+ max-height: 300px;
+ background: white;
+}
+
+#scalate-console div.systemProperties {
+ margin: 10px;
+ overflow: auto;
+ max-height: 300px;
+ background: white;
+}
diff --git a/manual/src/main/webapp/css/style.css b/manual/src/main/webapp/css/style.css
new file mode 100644
index 0000000..496901e
--- /dev/null
+++ b/manual/src/main/webapp/css/style.css
@@ -0,0 +1,1588 @@
+/**
+ * Copyright (C) 2009-2010 the original author or authors.
+ * See the notice.md file distributed with this work for additional
+ * information regarding copyright ownership.
+ *
+ * Licensed 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.
+ */
+body {
+ margin: 0;
+ padding: 0;
+}
+
+#cell-0-0 { background: white url( '../images/bg02-white-left-nogr.png' ) repeat-y right top; }
+#cell-0-1 { height: 1em; width: 85%; }
+#cell-0-2 { background: transparent url( '../images/bg02-white-right-nogr.png' ) repeat-y left top; }
+#cell-1-0 { background: transparent url( '../images/bg.png' ) repeat-x top; }
+#cell-1-1 { background: transparent url( '../images/bg02-blue-left.png' ) no-repeat right top; width:13px; }
+#cell-1-2 { background: transparent url( '../images/bg.png' ) repeat-x top; width:85%; }
+#banner { height: 80px; }
+#cell-1-3 { background: transparent url( '../images/bg02-blue-right.png' ) no-repeat left top; width:13px; }
+#cell-1-4 { background: transparent url( '../images/bg.png' ) repeat-x top; }
+#cell-2-0 { background: white url( '../images/bg02-white-left-nogr.png' ) repeat-y right top; }
+#cell-2-1 { height: 1em; width: 85%; }
+#cell-2-2 { background: white url( '../images/bg02-white-right-nogr.png' ) repeat-y left top; }
+#cell-3-0 { background: transparent url( '../images/bg.png' ) repeat-x top; }
+#cell-3-1 { background: transparent url( '../images/bg02-blue-left.png' ) no-repeat right top; width:13px; }
+#cell-3-2 { background: transparent url( '../images/bg.png' ) repeat-x top; width:85%; }
+#cell-3-3 { background: transparent url( '../images/bg02-blue-right.png' ) no-repeat left top; width:13px; }
+#cell-3-4 { background: transparent url( '../images/bg.png' ) repeat-x top; }
+#cell-4-0 { background: white url( '../images/bg02-white-left-nogr.png' ) repeat-y right top; }
+#cell-4-1 { height: 1em; width: 85%; }
+#cell-4-2 { background: transparent url( '../images/bg02-white-right-nogr.png' ) repeat-y left top; }
+
+#banner {
+ margin: 0px 20px;
+ padding: 0px 50px 0px 50px;
+ font-size: 200%;
+ text-align: center;
+ background: transparent;
+}
+#top-menu {
+ margin: 0px 25px;
+ padding: 2px;
+ line-height: 100%;
+ font-family: Verdana, arial, sans-serif;
+ font-weight: bold;
+ font-size: 11px;
+ color: white;
+ line-height: 13px;
+ overflow: none;
+}
+#top-menu a:link, #top-menu a:visited {
+ color: #ffffff;
+ text-decoration: none;
+}
+#top-menu a:active, #top-menu a:hover {
+ color: #5b8fbe;
+ text-decoration: underline;
+}
+#top-menu sup img {
+ height: 0px;
+ width: 0px;
+}
+
+#footer {
+ padding: 0px 50px 0px 50px;
+ min-height: 0em;
+ text-align: center;
+ color: white;
+ font-size: 65%;
+ font-family: Verdana, arial, sans-serif;
+}
+#site-footer {
+ margin: 5px;
+}
+#footer a:link, #footer a:visited {
+ color: white;
+ text-decoration: none;
+}
+#footer a:hover {
+ color: white;
+ text-decoration: underline;
+}
+
+#wrapper-menu-page-right {
+ background: transparent url( '../images/left-box-right.png' ) repeat-y right;
+}
+
+#wrapper-menu-page-bottom {
+ background: transparent url( '../images/left-box-bottom.png' ) no-repeat right bottom;
+}
+
+#wrapper-menu-page-top {
+ background: transparent url( '../images/left-box-top.png' ) no-repeat right top;
+}
+
+#menu-page {
+ width: 200px;
+ color: #5b8fbe;
+ font-family: Verdana, arial, sans-serif;
+ font-weight: bold;
+ margin: 0px;
+ padding: 17px 11px 17px 0px;
+ text-align: left;
+ margin-left: 0px;
+ line-height: 1em;
+}
+
+#menu-page ul {
+ margin: 0;
+ padding: 0;
+ padding-left: 35px;
+ font-size: 75%;
+}
+
+#menu-page h3 {
+ font-size: 75%;
+ text-transform: uppercase;
+ margin: 1em 0 0.3em 0;
+ color: #5b8fbe;
+ font-weight: normal;
+ letter-spacing: 0.15em;
+ background: url('../images/big-bullet.png') no-repeat 0pt;
+ background-position:left center;
+ margin-left:15px;
+ padding-left: 20px;
+ font-family: Verdana, arial, sans-serif;
+ font-weight: bold;
+}
+
+#menu-page a:link, #menu-page a:visited {
+ color: black;
+}
+
+#menu-page a:hover {
+ color: #5b8fbe;
+}
+
+#content {
+ padding: 20px 0px 0px 0px;
+ display: block;
+ text-align: left;
+ height: 100%;
+ width: 100%;
+ color: black;
+}
+
+h2 {
+ font-size: 110%;
+}
+
+h3 {
+ font-size: 100%;
+}
+
+a:link, a:visited {
+ color: #5b8fbe;
+ text-decoration: none;
+}
+
+a:hover {
+ color: #666;
+ text-decoration: none;
+}
+
+
+table.align {
+ padding: 0px;
+ border: none;
+}
+
+td.align {
+ padding: 0px;
+ border: none;
+}
+
+/*********************************************************************
+ CSS Elements that are part of the confluence rendered xhtml
+ *********************************************************************/
+.wiki-content {
+ font-family: Verdana, arial, sans-serif;
+ font-size: 11px;
+ line-height: 16px;
+ color: #000000;
+ font-weight: normal;
+ padding-top: 10px;
+ padding-bottom: 10px;
+}
+
+/*
+** when this stylesheet is used for the Tiny MCE Wysiwyg editor's edit area, we can't
+** use an id=PageContent or class=wiki-content, so we must
+** set the body style to that used for PageContent, and p to that used for wiki-content.
+*/
+
+.monospaceInput {
+ font:12px monospace
+}
+
+.wiki-content p, .commentblock p {
+ margin: 16px 0px 16px 0px;
+ padding: 0px;
+}
+
+.wiki-content-preview {
+ padding: 5px;
+ border-left: 1px solid #3c78b5;
+ border-right: 1px solid #3c78b5;
+}
+
+ul, ol {
+ margin-top: 2px;
+ margin-bottom: 2px;
+ padding-top: 0px;
+ padding-bottom: 0px;
+}
+
+pre {
+ padding: 0px;
+ margin-top: 5px;
+ margin-left: 15px;
+ margin-bottom: 5px;
+ margin-right: 5px;
+ text-align: left;
+}
+
+.helpheading {
+ font-weight: bold;
+ background-color: #D0D9BD;
+ border-bottom: 1px solid #3c78b5;
+ padding: 4px 4px 4px 4px;
+ margin: 0px;
+ margin-top: 10px;
+}
+.helpcontent {
+ padding: 4px 4px 20px 4px;
+ background-color: #f5f7f1;
+}
+
+.code {
+ border: 1px dashed #3c78b5;
+ font-size: 11px;
+ font-family: Courier;
+ margin: 10px;
+ line-height: 13px;
+}
+
+.focusedComment {
+ background: #ffffce;
+}
+
+.commentBox, .focusedComment {
+ padding: 10px;
+ margin: 5px 0 5px 0;
+ border: 1px #bbb solid;
+}
+
+.codeHeader {
+ background-color: #f0f0f0;
+ border-bottom: 1px dashed #3c78b5;
+ padding: 3px;
+ text-align: center;
+}
+
+.codeContent {
+ text-align: left;
+ background-color: #f0f0f0;
+ padding: 3px;
+}
+
+.preformatted {
+ border: 1px dashed #3c78b5;
+ font-size: 11px;
+ font-family: Courier;
+ margin: 10px;
+ line-height: 13px;
+}
+
+.preformattedHeader {
+ background-color: #f0f0f0;
+ border-bottom: 1px dashed #3c78b5;
+ padding: 3px;
+ text-align: center;
+}
+
+.preformattedContent {
+ background-color: #f0f0f0;
+ padding: 3px;
+}
+
+.panel {
+ border: 1px dashed #3c78b5;
+ margin: 10px;
+ margin-top: 0px;
+}
+
+.panelHeader {
+ background-color: #f0f0f0;
+ border-bottom: 1px dashed #3c78b5;
+ padding: 3px;
+ text-align: center;
+}
+
+.panelContent {
+ background-color: #f0f0f0;
+ padding: 5px;
+}
+
+.anonymousAlert {
+ background-color: #f0f0f0;
+ border: 1px dashed red;
+ font-size: 11px;
+ padding: 10px 5px 10px 5px;
+ margin: 4px;
+ line-height: 13px;
+}
+
+.lockAlert {
+ background-color: #f0f0f0;
+ width: 50%;
+ border: 1px dashed red;
+ font-size: 11px;
+ padding: 10px 5px 10px 5px;
+ margin: 4px;
+ line-height: 13px;
+}
+
+
+.code-keyword {
+ color: #000091;
+ background-color: inherit;
+}
+
+.code-object {
+ color: #910091;
+ background-color: inherit;
+}
+
+.code-quote {
+ color: #009100;
+ background-color: inherit;
+}
+
+.code-comment {
+ color: #808080;
+ background-color: inherit;
+}
+
+
+.code-xml .code-keyword {
+ color: inherit;
+ font-weight: bold;
+}
+
+.code-tag {
+ color: #000091;
+ background-color: inherit;
+}
+
+.breadcrumbs {
+ background-color: #f0f0f0;
+ border-color: #3c78b5;
+ border-width: 1px 0px 1px 0px;
+ border-style: solid;
+ font-size: 11px;
+ padding: 3px 0px 3px 0px;
+}
+
+.navmenu {
+ border: 1px solid #ccc;
+}
+
+.menuheading {
+ font-weight: bold;
+ background-color: #f0f0f0;
+ border-bottom: 1px solid #3c78b5;
+ padding: 4px 4px 2px 4px;
+}
+
+.menuitems {
+ padding: 4px 4px 20px 4px;
+}
+
+.rightpanel {
+ border-left: 1px solid #ccc;
+ border-bottom: 1px solid #ccc;
+}
+
+#helpheading {
+ text-align: left;
+ font-weight: bold;
+ background-color: #D0D9BD;
+ border-bottom: 1px solid #3c78b5;
+ padding: 4px 4px 4px 4px;
+ margin: 0px;
+}
+#helpcontent {
+ padding: 4px 4px 4px 4px;
+ background-color: #f5f7f1;
+}
+.helptab-unselected {
+ font-weight: bold;
+ padding: 5px;
+ background-color: #f5f7f1;
+}
+.helptab-selected {
+ font-weight: bold;
+ background-color: #D0D9BD;
+ padding: 5px;
+}
+.helptabs {
+ margin: 0px;
+ background-color: #f5f7f1;
+ padding: 5px;
+}
+.infopanel-heading {
+ font-weight: bold;
+ padding: 4px 0px 2px 0px;
+}
+
+.pagebody {
+}
+
+.pageheader {
+ padding: 5px 5px 5px 0px;
+ border-bottom: 1px solid #3c78b5;
+}
+
+.steptitle {
+ font-size: 18px;
+ font-weight: bold;
+ font-family: Arial, sans-serif;
+ color: #003366;
+ margin-bottom: 7px;
+}
+
+.substeptitle {
+ font-size: 12px;
+ font-weight: bold;
+ font-family: Arial, sans-serif;
+ color: #003366;
+ margin: 2px 4px 4px 4px;
+ padding: 2px 4px 1px 4px;
+}
+
+.stepdesc {
+ font-family: Verdana, arial, sans-serif;
+ font-size: 11px;
+ line-height: 16px;
+ font-weight: normal;
+ color: #666666;
+ margin-top: 7px;
+ margin-bottom: 7px;
+}
+
+.steplabel {
+ font-weight: bold;
+ margin-right: 4px;
+ color: black;
+ float: left;
+ width: 15%;
+ text-align: right;
+}
+
+.stepfield {
+ background: #f0f0f0;
+ padding: 5px;
+}
+
+.submitButtons{
+ margin-top:5px;
+ text-align:right;
+}
+
+.formtitle {
+ font-size: 12px;
+ font-weight: bold;
+ font-family: Arial, sans-serif;
+ color: #003366;
+}
+
+.sectionbottom {
+ border-bottom: 1px solid #3c78b5;
+}
+
+.topRow {
+ border-top: 2px solid #3c78b5;
+}
+
+.tabletitle {
+ font-size: 14px;
+ font-weight: bold;
+ font-family: Arial, sans-serif;
+ padding: 3px 0px 2px 0px;
+ margin: 8px 4px 2px 0px;
+ color: #003366;
+ border-bottom: 2px solid #3c78b5;
+}
+.pagesubheading {
+ color: #666666;
+ font-size: 10px;
+ padding: 0px 0px 5px 0px;
+}
+
+HR {
+ color: 3c78b5;
+ height: 1;
+}
+
+A:link, A:visited, A:active, A:hover {
+ color: #5b8fbe;
+}
+
+A:hover {
+ text-decoration: underline;
+}
+
+h1 A:link, h1 A:visited, h1 A:active {
+ text-decoration: none;
+}
+
+h1 A:hover {
+ border-bottom: 1px dotted #003366;
+}
+
+.wiki-content > :first-child, .commentblock > :first-child {
+ margin-top: 3px;
+}
+
+.logocell {
+ padding: 10px;
+}
+
+input {
+ font-family: verdana, geneva, arial, sans-serif;
+ font-size: 11px;
+ color: #000000;
+}
+
+textarea, textarea.editor {
+ font-family: verdana, geneva, arial, sans-serif;
+ font-size: 11px;
+ color: #333333;
+}
+
+/* use logoSpaceLink instead.
+.spacenametitle {
+ font: 21px/31px Impact, Arial, Helvetica;
+ font-weight: 100;
+ color: #999999;
+ margin: 0px;
+}
+.spacenametitle img {
+ margin: 0 0 -4px 0;
+}
+.spacenametitle a {
+ text-decoration: none;
+ color: #999999;
+}
+.spacenametitle a:visited {
+ text-decoration: none;
+ color: #999999;
+}*/
+
+.spacenametitle-printable {
+ font: 20px/25px Impact, Arial, Helvetica;
+ font-weight: 100;
+ color: #999999;
+ margin: 0px;
+}
+.spacenametitle-printable a {
+ text-decoration: none;
+ color: #999999;
+}
+.spacenametitle-printable a:visited {
+ text-decoration: none;
+ color: #999999;
+}
+
+.blogDate {
+ font-weight: bold;
+ text-decoration: none;
+ color: black;
+}
+
+.blogSurtitle {
+ background: #f0f0f0;
+ border: 1px solid #ddd;
+ padding: 3px;
+ margin: 1px 1px 10px 1px;
+}
+
+.blogHeading {
+ font-size: 20px;
+ line-height: normal;
+ font-weight: bold;
+ padding: 0px;
+ margin: 0px;
+}
+
+.blogHeading a {
+ text-decoration: none;
+ color: black;
+}
+
+.endsection {
+ align: right;
+ color: #666666;
+ margin-top: 10px;
+}
+.endsectionleftnav {
+ align: right;
+ color: #666666;
+ margin-top: 10px;
+}
+
+h1 {
+ font-size: 24px;
+ line-height: normal;
+ font-weight: bold;
+ background-color: #f0f0f0;
+ color: #003366;
+ border-bottom: 1px solid #3c78b5;
+ padding: 2px;
+ margin: 36px 0px 4px 0px;
+}
+
+h2 {
+ font-size: 18px;
+ line-height: normal;
+ font-weight: bold;
+ background-color: #f0f0f0;
+ border-bottom: 1px solid #3c78b5;
+ padding: 2px;
+ margin: 27px 0px 4px 0px;
+}
+
+h3 {
+ font-size: 14px;
+ line-height: normal;
+ font-weight: bold;
+ background-color: #f0f0f0;
+ padding: 2px;
+ margin: 21px 0px 4px 0px;
+}
+
+h4 {
+ font-size: 12px;
+ line-height: normal;
+ font-weight: bold;
+ background-color: #f0f0f0;
+ padding: 2px;
+ margin: 18px 0px 4px 0px;
+}
+
+h4.search {
+ font-size: 12px;
+ line-height: normal;
+ font-weight: normal;
+ background-color: #f0f0f0;
+ padding: 4px;
+ margin: 18px 0px 4px 0px;
+}
+
+h5 {
+ font-size: 10px;
+ line-height: normal;
+ font-weight: bold;
+ background-color: #f0f0f0;
+ padding: 2px;
+ margin: 14px 0px 4px 0px;
+}
+
+h6 {
+ font-size: 8px;
+ line-height: normal;
+ font-weight: bold;
+ background-color: #f0f0f0;
+ padding: 2px;
+ margin: 14px 0px 4px 0px;
+}
+
+.smallfont {
+ font-size: 10px;
+}
+.descfont {
+ font-size: 10px;
+ color: #666666;
+}
+.smallerfont {
+ font-size: 9px;
+}
+.smalltext {
+ color: #666666;
+ font-size: 10px;
+}
+.smalltext a {
+ color: #666666;
+}
+.smalltext-blue {
+ color: #3c78b5;
+ font-size: 10px;
+}
+.surtitle {
+ margin-left: 1px;
+ margin-bottom: 5px;
+ font-size: 14px;
+ color: #666666;
+}
+
+/* css hack found here: http://www.fo3nix.pwp.blueyonder.co.uk/tutorials/css/hacks/ */
+.navItemOver { font-size: 10px; font-weight: bold; color: #ffffff; background-color: #003366; cursor: hand; voice-family: '\'}\''; voice-family:inherit; cursor: pointer;}
+.navItemOver a { color: #ffffff; background-color:#003366; text-decoration: none; }
+.navItemOver a:visited { color: #ffffff; background-color:#003366; text-decoration: none; }
+.navItemOver a:hover { color: #ffffff; background-color:#003366; text-decoration: none; }
+.navItem { font-size: 10px; font-weight: bold; color: #ffffff; background-color: #3c78b5; }
+.navItem a { color: #ffffff; text-decoration: none; }
+.navItem a:hover { color: #ffffff; text-decoration: none; }
+.navItem a:visited { color: #ffffff; text-decoration: none; }
+
+div.padded { padding: 4px; }
+div.thickPadded { padding: 10px; }
+h3.macrolibrariestitle {
+ margin: 0px 0px 0px 0px;
+}
+
+div.centered { text-align: center; margin: 10px; }
+div.centered table {margin: 0px auto; text-align: left; }
+
+.tableview table {
+ margin: 0;
+}
+
+.tableview th {
+ text-align: left;
+ color: #003366;
+ font-size: 12px;
+ padding: 5px 0px 0px 5px;
+ border-bottom: 2px solid #3c78b5;
+}
+.tableview td {
+ text-align: left;
+ border-color: #ccc;
+ border-width: 0px 0px 1px 0px;
+ border-style: solid;
+ margin: 0;
+ padding: 4px 10px 4px 5px;
+}
+
+.grid {
+ margin: 2px 0px 5px 0px;
+ border-collapse: collapse;
+}
+.grid th {
+ border: 1px solid #ccc;
+ padding: 2px 4px 2px 4px;
+ background: #f0f0f0;
+ text-align: center;
+}
+.grid td {
+ border: 1px solid #ccc;
+ padding: 3px 4px 3px 4px;
+}
+.gridHover {
+ background-color: #f9f9f9;
+}
+
+td.infocell {
+ background-color: #f0f0f0;
+}
+.label {
+ font-weight: bold;
+ color: #003366;
+}
+.error {
+ background-color: #fcc;
+}
+
+.errorBox {
+ background-color: #fcc;
+ border: 1px solid #c00;
+ padding: 5px;
+ margin: 5px;
+}
+
+.errorMessage {
+ color: #c00;
+}
+
+.success {
+ background-color: #dfd;
+}
+
+.successBox {
+ background-color: #dfd;
+ border: 1px solid #090;
+ padding: 5px;
+ margin-top:5px;
+ margin-bottom:5px;
+}
+
+blockquote {
+ padding-left: 10px;
+ padding-right: 10px;
+ margin-left: 5px;
+ margin-right: 0px;
+ border-left: 1px solid #3c78b5;
+}
+
+table.confluenceTable
+{
+ margin: 5px;
+ border-collapse: collapse;
+}
+
+/* Added as a temporary fix for CONF-4223. The table elements appear to be inheriting the border: none attribute from the sectionMacro class */
+table.confluenceTable td.confluenceTd
+{
+ border-width: 1px;
+ border-style: solid;
+ border-color: #ccc;
+ padding: 3px 4px 3px 4px;
+}
+
+/* Added as a temporary fix for CONF-4223. The table elements appear to be inheriting the border: none attribute from the sectionMacro class */
+table.confluenceTable th.confluenceTh
+{
+ border-width: 1px;
+ border-style: solid;
+ border-color: #ccc;
+ padding: 3px 4px 3px 4px;
+ background-color: #f0f0f0;
+ text-align: center;
+}
+
+td.confluenceTd
+{
+ border-width: 1px;
+ border-style: solid;
+ border-color: #ccc;
+ padding: 3px 4px 3px 4px;
+}
+
+th.confluenceTh
+{
+ border-width: 1px;
+ border-style: solid;
+ border-color: #ccc;
+ padding: 3px 4px 3px 4px;
+ background-color: #f0f0f0;
+ text-align: center;
+}
+
+DIV.small {
+ font-size: 9px;
+}
+
+H1.pagename {
+ margin-top: 0px;
+}
+
+IMG.inline {}
+
+.loginform {
+ margin: 5px;
+ border: 1px solid #ccc;
+}
+
+/* The text how the "This is a preview" comment should be shown. */
+.previewnote { text-align: center;
+ font-size: 11px;
+ color: red; }
+
+/* How the preview content should be shown */
+.previewcontent { background: #E0E0E0; }
+
+/* How the system messages should be shown (DisplayMessage.jsp) */
+.messagecontent { background: #E0E0E0; }
+
+/* How the "This page has been modified..." -comment should be shown. */
+.conflictnote { }
+
+.createlink {
+ color: maroon;
+}
+a.createlink {
+ color: maroon;
+}
+.templateparameter {
+ font-size: 9px;
+ color: darkblue;
+}
+
+.diffadded {
+ background: #ddffdd;
+ padding: 1px 1px 1px 4px;
+ border-left: 4px solid darkgreen;
+}
+.diffdeleted {
+ color: #999;
+ background: #ffdddd;
+ padding: 1px 1px 1px 4px;
+ border-left: 4px solid darkred;
+}
+.diffnochange {
+ padding: 1px 1px 1px 4px;
+ border-left: 4px solid lightgrey;
+}
+.differror {
+ background: brown;
+}
+.diff {
+ font-family: lucida console, courier new, fixed-width;
+ font-size: 12px;
+ line-height: 14px;
+}
+.diffaddedchars {
+ background-color:#99ff99;
+ font-weight:bolder;
+}
+.diffremovedchars {
+ background-color:#ff9999;
+ text-decoration: line-through;
+ font-weight:bolder;
+}
+
+.greybackground {
+ background: #f0f0f0
+}
+
+.greybox {
+ border: 1px solid #ddd;
+ padding: 3px;
+ margin: 1px 1px 10px 1px;
+}
+
+.borderedGreyBox {
+ border: 1px solid #cccccc;
+ background-color: #f0f0f0;
+ padding: 10px;
+}
+
+.greyboxfilled {
+ border: 1px solid #ddd;
+ padding: 5px;
+ margin: 10px 1px 10px 1px;
+ background: #f0f0f0;
+}
+
+.navBackgroundBox {
+ padding: 5px 5px 5px 5px;
+ font-size: 22px;
+ font-weight: bold;
+ font-family: Arial, sans-serif;
+ color: white;
+ background: #3c78b5;
+ text-decoration: none;
+}
+
+.previewBoxTop {
+ background-color: #f0f0f0;
+ border-width: 1px 1px 0px 1px;
+ border-style: solid;
+ border-color: #3c78b5;
+ padding: 5px;
+ margin: 5px 0px 0px 0px;
+ text-align: center;
+}
+.previewContent {
+ background-color: #fff;
+ border-color: #3c78b5;
+ border-width: 0px 1px 0px 1px;
+ border-style: solid;
+ padding: 10px;
+ margin: 0px;
+}
+.previewBoxBottom {
+ background-color: #f0f0f0;
+ border-width: 0px 1px 1px 1px;
+ border-style: solid;
+ border-color: #3c78b5;
+ padding: 5px;
+ margin: 0px 0px 5px 0px;
+ text-align: center;
+}
+
+.functionbox {
+ background-color: #f0f0f0;
+ border: 1px solid #3c78b5;
+ padding: 3px;
+ margin: 1px 1px 10px 1px;
+}
+
+.functionbox-greyborder {
+ background-color: #f0f0f0;
+ border: 1px solid #ddd;
+ padding: 3px;
+ margin: 1px 1px 10px 1px;
+}
+
+.search-highlight {
+ background-color: #ffffcc;
+}
+
+/* normal (white) background */
+.rowNormal {
+ background-color: #ffffff;
+ }
+
+/* alternate (pale yellow) background */
+.rowAlternate {
+ background-color: #f7f7f7;
+}
+
+/* used in the list attachments table */
+.rowAlternateNoBottomColor {
+ background-color: #f7f7f7;
+}
+
+.rowAlternateNoBottomNoColor {
+}
+
+.rowAlternateNoBottomColor td {
+ border-bottom: 0px;
+}
+
+.rowAlternateNoBottomNoColor td {
+ border-bottom: 0px;
+}
+
+/* row highlight (grey) background */
+.rowHighlight {
+ background-color: #f0f0f0;
+
+}
+
+TD.greenbar {FONT-SIZE: 2px; BACKGROUND: #00df00; BORDER: 1px solid #9c9c9c; PADDING: 0px; }
+TD.redbar {FONT-SIZE: 2px; BACKGROUND: #df0000; BORDER: 1px solid #9c9c9c; PADDING: 0px; }
+TD.darkredbar {FONT-SIZE: 2px; BACKGROUND: #af0000; BORDER: 1px solid #9c9c9c; PADDING: 0px; }
+
+TR.testpassed {FONT-SIZE: 2px; BACKGROUND: #ddffdd; PADDING: 0px; }
+TR.testfailed {FONT-SIZE: 2px; BACKGROUND: #ffdddd; PADDING: 0px; }
+
+.toolbar {
+ margin: 0px;
+ border-collapse: collapse;
+}
+
+.toolbar td {
+ border: 1px solid #ccc;
+ padding: 2px 2px 2px 2px;
+ color: #ccc;
+}
+
+td.noformatting {
+ border-width: 0px;
+ border-style: none;
+ text-align: center;
+ padding: 0px;
+}
+
+.commentblock {
+ margin: 12px 0 12px 0;
+}
+
+/*
+ * Divs displaying the license information, if necessary.
+ */
+.license-eval, .license-none, .license-nonprofit {
+ border-top: 1px solid #bbbbbb;
+ text-align: center;
+ font-size: 10px;
+ font-family: Verdana, Arial, Helvetica, sans-serif;
+}
+
+.license-eval, .license-none {
+ background-color: #ffcccc;
+}
+
+.license-eval b, .license-none b {
+ color: #990000
+}
+
+.license-nonprofit {
+ background-color: #ffffff;
+}
+
+/*
+ * The shadow at the bottom of the page between the main content and the
+ * "powered by" section.
+ */
+.bottomshadow {
+ height: 12px;
+ background-image: url("$req.contextPath/images/border/border_bottom.gif");
+ background-repeat: repeat-x;
+}
+
+/*
+ * Styling of the operations box
+ */
+.navmenu .operations li, .navmenu .operations ul {
+ list-style: none;
+ margin-left: 0;
+ padding-left: 0;
+}
+
+.navmenu .operations ul {
+ margin-bottom: 9px;
+}
+
+.navmenu .label {
+ font-weight: inherit;
+}
+
+/*
+ * Styling of ops as a toolbar
+ */
+.toolbar div {
+ display: none;
+}
+
+.toolbar .label {
+ display: none;
+}
+
+.toolbar .operations {
+ display: block;
+}
+
+.toolbar .operations ul {
+ display: inline;
+ list-style: none;
+ margin-left: 10px;
+ padding-left: 0;
+}
+
+.toolbar .operations li {
+ list-style: none;
+ display: inline;
+}
+
+/* list page navigational tabs */
+#foldertab {
+padding: 3px 0px 3px 8px;
+margin-left: 0;
+border-bottom: 1px solid #3c78b5;
+font: bold 11px Verdana, sans-serif;
+}
+
+#foldertab li {
+list-style: none;
+margin: 0;
+display: inline;
+}
+
+#foldertab li a {
+padding: 3px 0.5em;
+margin-left: 3px;
+border: 1px solid #3c78b5;
+border-bottom: none;
+background: #3c78b5;
+text-decoration: none;
+}
+
+#foldertab li a:link { color: #ffffff; }
+#foldertab li a:visited { color: #ffffff; }
+
+#foldertab li a:hover {
+color: #ffffff;
+background: #003366;
+border-color: #003366;
+}
+
+#foldertab li a.current {
+background: white;
+border-bottom: 1px solid white;
+color: black;
+}
+
+#foldertab li a.current:link { color: black; }
+#foldertab li a.current:visited { color: black; }
+#foldertab li a.current:hover {
+background: white;
+border-bottom: 1px solid white;
+color: black;
+}
+
+/* alphabet list */
+ul#squaretab {
+margin-left: 0;
+padding-left: 0;
+white-space: nowrap;
+font: bold 8px Verdana, sans-serif;
+}
+
+#squaretab li {
+display: inline;
+list-style-type: none;
+}
+
+#squaretab a {
+padding: 2px 6px;
+border: 1px solid #3c78b5;
+}
+
+#squaretab a:link, #squaretab a:visited {
+color: #fff;
+background-color: #3c78b5;
+text-decoration: none;
+}
+
+#squaretab a:hover {
+color: #ffffff;
+background-color: #003366;
+border-color: #003366;
+text-decoration: none;
+}
+
+#squaretab li a#current {
+background: white;
+color: black;
+}
+
+.blogcalendar * {
+ font-family:verdana, arial, sans-serif;
+ font-size:x-small;
+ font-weight:normal;
+ line-height:140%;
+ padding:2px;
+}
+
+
+table.blogcalendar {
+ border: 1px solid #3c78b5;
+}
+
+.blogcalendar th.calendarhead, a.calendarhead {
+ font-size:x-small;
+ font-weight:bold;
+ padding:2px;
+ text-transform:uppercase;
+ background-color: #3c78b5;
+ color: #ffffff;
+ letter-spacing: .3em;
+ text-transform: uppercase;
+}
+
+.calendarhead:visited {color: white;}
+.calendarhead:active {color: white;}
+.calendarhead:hover {color: white;}
+
+.blogcalendar th {
+ font-size:x-small;
+ font-weight:bold;
+ padding:2px;
+ background-color:#f0f0f0;
+}
+
+.blogcalendar td {
+ font-size:x-small;
+ font-weight:normal;
+}
+
+.searchGroup { padding: 0 0 10px 0; background: #f0f0f0; }
+.searchGroupHeading { font-size: 10px; font-weight: bold; color: #ffffff; background-color: #3c78b5; padding: 2px 4px 1px 4px; }
+.searchItem { padding: 1px 4px 1px 4px; }
+.searchItemSelected { padding: 1px 4px 1px 4px; font-weight: bold; background: #ddd; }
+
+/* permissions page styles */
+.permissionHeading {
+ border-bottom: #bbb; border-width: 0 0 1px 0; border-style: solid; font-size: 16px; text-align: left;
+}
+.permissionTab {
+ border-width: 0 0 0 1px; border-style: solid; background: #3c78b5; color: #ffffff; font-size: 10px;
+}
+.permissionSuperTab {
+ border-width: 0 0 0 1px; border-style: solid; background: #003366; color: #ffffff;
+}
+.permissionCell {
+ border-left: #bbb; border-width: 0 0 0 1px; border-style: solid;
+}
+
+/* warning panel */
+.warningPanel { background: #FFFFCE; border:#F0C000 1px solid; padding: 8px; margin: 10px; }
+/* alert panel */
+.alertPanel { background: #FFCCCC; border:#C00 1px solid; padding: 8px; margin: 10px; }
+
+/* side menu highlighting (e.g. space content screen) */
+.optionPadded { padding: 2px; }
+.optionSelected { background-color: #ffffcc; padding: 2px; border: 1px solid #ddd; margin: -1px; }
+.optionSelected a { font-weight: bold; text-decoration: none; color: black; }
+
+/* information macros */
+.noteMacro { border-style: solid; border-width: 1px; border-color: #F0C000; background-color: #FFFFCE; text-align:left; margin-top: 5px; margin-bottom: 5px}
+.warningMacro { border-style: solid; border-width: 1px; border-color: #c00; background-color: #fcc; text-align:left; margin-top: 5px; margin-bottom: 5px}
+.infoMacro { border-style: solid; border-width: 1px; border-color: #3c78b5; background-color: #D8E4F1; text-align:left; margin-top: 5px; margin-bottom: 5px}
+.tipMacro { border-style: solid; border-width: 1px; border-color: #090; background-color: #dfd; text-align:left; margin-top: 5px; margin-bottom: 5px}
+.informationMacroPadding { padding: 5px 0 0 5px; }
+
+table.infoMacro td, table.warningMacro td, table.tipMacro td, table.noteMacro td, table.sectionMacro td {
+ border: none;
+}
+
+table.sectionMacroWithBorder td.columnMacro { border-style: dashed; border-width: 1px; border-color: #cccccc;}
+
+/* styles for links in the top bar */
+.topBarDiv a:link {color: #ffffff;}
+.topBarDiv a:visited {color: #ffffff;}
+.topBarDiv a:active {color: #ffffff;}
+.topBarDiv a:hover {color: #ffffff;}
+.topBarDiv {color: #ffffff;}
+
+.topBar {
+ background-color: #003366;
+}
+
+
+/* styles for extended operations */
+.greyLinks a:link {color: #666666; text-decoration:underline;}
+.greyLinks a:visited {color: #666666; text-decoration:underline;}
+.greyLinks a:active {color: #666666; text-decoration:underline;}
+.greyLinks a:hover {color: #666666; text-decoration:underline;}
+.greyLinks {color: #666666; display:block; padding: 10px}
+
+.logoSpaceLink {color: #999999; text-decoration: none}
+.logoSpaceLink a:link {color: #999999; text-decoration: none}
+.logoSpaceLink a:visited {color: #999999; text-decoration: none}
+.logoSpaceLink a:active {color: #999999; text-decoration: none}
+.logoSpaceLink a:hover {color: #003366; text-decoration: none}
+
+/* basic panel (basicpanel.vmd) style */
+.basicPanelContainer {border: 1px solid #3c78b5; margin-top: 2px; margin-bottom: 8px; width: 100%}
+.basicPanelTitle {padding: 5px; margin: 0px; background-color: #f0f0f0; color: black; font-weight: bold;}
+.basicPanelBody {padding: 5px; margin: 0px}
+
+.separatorLinks a:link {color: white}
+.separatorLinks a:visited {color: white}
+.separatorLinks a:active {color: white}
+
+.greynavbar {background-color: #f0f0f0; border-top: 1px solid #3c78b5; margin-top: 2px}
+
+div.headerField {
+ float: left;
+ width: auto;
+ height: 100%;
+}
+
+.headerFloat {
+ margin-left: auto;
+ width: 50%;
+}
+
+.headerFloatLeft {
+ float: left;
+ margin-right: 20px;
+ margin-bottom: 10px;
+}
+
+#headerRow {
+ padding: 10px;
+}
+
+div.license-personal {
+ background-color: #003366;
+ color: #ffffff;
+}
+
+div.license-personal a {
+ color: #ffffff;
+}
+
+.greyFormBox {
+ border: 1px solid #cccccc;
+ padding: 5px;
+}
+
+/* IE automatically adds a margin before and after form tags. Use this style to remove that */
+.marginlessForm {
+ margin: 0px;
+}
+
+.openPageHighlight {
+ background-color: #ffffcc;
+ padding: 2px;
+ border: 1px solid #ddd;
+}
+
+.editPageInsertLinks, .editPageInsertLinks a
+{
+ color: #666666;
+ font-weight: bold;
+ font-size: 10px;
+}
+
+/* Style for label heatmap. */
+.top10 a {
+ font-weight: bold;
+ font-size: 2em;
+ color: #003366;
+}
+.top25 a {
+ font-weight: bold;
+ font-size: 1.6em;
+ color: #003366;
+}
+.top50 a {
+ font-size: 1.4em;
+ color: #003366;
+}
+.top100 a {
+ font-size: 1.2em;
+ color: #003366;
+}
+
+.heatmap {
+ list-style:none;
+ width: 95%;
+ margin: 0px auto;
+}
+
+.heatmap a {
+ text-decoration:none;
+}
+
+.heatmap a:hover {
+ text-decoration:underline;
+}
+
+.heatmap li {
+ display: inline;
+}
+
+.minitab {
+padding: 3px 0px 3px 8px;
+margin-left: 0;
+margin-top: 1px;
+margin-bottom: 0px;
+border-bottom: 1px solid #3c78b5;
+font: bold 9px Verdana, sans-serif;
+text-decoration: none;
+float:none;
+}
+.selectedminitab {
+padding: 3px 0.5em;
+margin-left: 3px;
+margin-top: 1px;
+border: 1px solid #3c78b5;
+background: white;
+border-bottom: 1px solid white;
+color: #000000;
+text-decoration: none;
+}
+.unselectedminitab {
+padding: 3px 0.5em;
+margin-left: 3px;
+margin-top: 1px;
+border: 1px solid #3c78b5;
+border-bottom: none;
+background: #3c78b5;
+color: #ffffff;
+text-decoration: none;
+}
+
+a.unselectedminitab:hover {
+color: #ffffff;
+background: #003366;
+border-color: #003366;
+}
+
+a.unselectedminitab:link { color: white; }
+a.unselectedminitab:visited { color: white; }
+
+a.selectedminitab:link { color: black; }
+a.selectedminitab:visited { color: black; }
+
+.linkerror { background-color: #fcc;}
+
+a.labelOperationLink:link {text-decoration: underline}
+a.labelOperationLink:active {text-decoration: underline}
+a.labelOperationLink:visited {text-decoration: underline}
+a.labelOperationLink:hover {text-decoration: underline}
+
+a.newLabel:link {background-color: #ddffdd}
+a.newLabel:active {background-color: #ddffdd}
+a.newLabel:visited {background-color: #ddffdd}
+a.newLabel:hover {background-color: #ddffdd}
+
+ul.square {list-style-type: square}
+
+.inline-control-link {
+ background: #ffc;
+ font-size: 9px;
+ color: #666;
+ padding: 2px;
+ text-transform: uppercase;
+ text-decoration: none;
+}
+
+
+.inline-control-link a:link {text-decoration: none}
+.inline-control-link a:active {text-decoration: none}
+.inline-control-link a:visited {text-decoration: none}
+.inline-control-link a:hover {text-decoration: none}
+
+.inline-control-link {
+ background: #ffc;
+ font-size: 9px;
+ color: #666;
+ padding: 2px;
+ text-transform: uppercase;
+ text-decoration: none;
+ cursor: pointer;
+}
+
+div.auto_complete {
+ width: 350px;
+ background: #fff;
+}
+div.auto_complete ul {
+ border: 1px solid #888;
+ margin: 0;
+ padding: 0;
+ width: 100%;
+ list-style-type: none;
+}
+div.auto_complete ul li {
+ margin: 0;
+ padding: 3px;
+}
+div.auto_complete ul li.selected {
+ background-color: #ffb;
+}
+div.auto_complete ul strong.highlight {
+ color: #800;
+ margin: 0;
+ padding: 0;
+}
+
+/******* Edit Page Styles *******/
+.toogleFormDiv{
+ border:1px solid #A7A6AA;
+ background-color:white;
+ padding:5px;
+ margin-top: 5px;
+}
+
+.toogleInfoDiv{
+ border:1px solid #A7A6AA;
+ background-color:white;
+ display:none;
+ padding:5px;
+ margin-top: 10px;
+}
+
+.inputSection{
+ margin-bottom:20px;
+}
+
+#editBox{
+ border:1px solid lightgray;
+ background-color:#F0F0F0;
+}
+
+/******* Left Navigation Theme Styles ********/
+.leftnav li a {
+ text-decoration:none;
+ color:white;
+ margin:0px;
+ display:block;
+ padding:2px;
+ padding-left:5px;
+ background-color: #3c78b5;
+ border-top:1px solid #3c78b5;
+}
+
+.leftnav li a:active {color:white;}
+.leftnav li a:visited {color:white;}
+.leftnav li a:hover {background-color: #003366; color:white;}
diff --git a/manual/src/main/webapp/images/asf-logo.png b/manual/src/main/webapp/images/asf-logo.png
new file mode 100644
index 0000000..d824fab
--- /dev/null
+++ b/manual/src/main/webapp/images/asf-logo.png
Binary files differ
diff --git a/manual/src/main/webapp/images/bg.png b/manual/src/main/webapp/images/bg.png
new file mode 100644
index 0000000..878a84f
--- /dev/null
+++ b/manual/src/main/webapp/images/bg.png
Binary files differ
diff --git a/manual/src/main/webapp/images/bg02-blue-left.png b/manual/src/main/webapp/images/bg02-blue-left.png
new file mode 100644
index 0000000..057efdf
--- /dev/null
+++ b/manual/src/main/webapp/images/bg02-blue-left.png
Binary files differ
diff --git a/manual/src/main/webapp/images/bg02-blue-right.png b/manual/src/main/webapp/images/bg02-blue-right.png
new file mode 100644
index 0000000..edf9a9d
--- /dev/null
+++ b/manual/src/main/webapp/images/bg02-blue-right.png
Binary files differ
diff --git a/manual/src/main/webapp/images/bg02-white-left-nogr.png b/manual/src/main/webapp/images/bg02-white-left-nogr.png
new file mode 100644
index 0000000..1c5186c
--- /dev/null
+++ b/manual/src/main/webapp/images/bg02-white-left-nogr.png
Binary files differ
diff --git a/manual/src/main/webapp/images/bg02-white-right-nogr.png b/manual/src/main/webapp/images/bg02-white-right-nogr.png
new file mode 100644
index 0000000..9734def
--- /dev/null
+++ b/manual/src/main/webapp/images/bg02-white-right-nogr.png
Binary files differ
diff --git a/manual/src/main/webapp/images/big-bullet.png b/manual/src/main/webapp/images/big-bullet.png
new file mode 100644
index 0000000..f036db5
--- /dev/null
+++ b/manual/src/main/webapp/images/big-bullet.png
Binary files differ
diff --git a/manual/src/main/webapp/images/left-box-bottom.png b/manual/src/main/webapp/images/left-box-bottom.png
new file mode 100644
index 0000000..0495248
--- /dev/null
+++ b/manual/src/main/webapp/images/left-box-bottom.png
Binary files differ
diff --git a/manual/src/main/webapp/images/left-box-right.png b/manual/src/main/webapp/images/left-box-right.png
new file mode 100644
index 0000000..2698074
--- /dev/null
+++ b/manual/src/main/webapp/images/left-box-right.png
Binary files differ
diff --git a/manual/src/main/webapp/images/left-box-top.png b/manual/src/main/webapp/images/left-box-top.png
new file mode 100644
index 0000000..e1fc26e
--- /dev/null
+++ b/manual/src/main/webapp/images/left-box-top.png
Binary files differ
diff --git a/manual/src/main/webapp/images/smx-logo.png b/manual/src/main/webapp/images/smx-logo.png
new file mode 100644
index 0000000..ce2332a
--- /dev/null
+++ b/manual/src/main/webapp/images/smx-logo.png
Binary files differ
diff --git a/manual/src/main/webapp/index.conf b/manual/src/main/webapp/index.conf
new file mode 100644
index 0000000..63761bc
--- /dev/null
+++ b/manual/src/main/webapp/index.conf
@@ -0,0 +1,4 @@
+h1. Apache ServiceMix
+
+This project contains documentation about Apache ServiceMix 5.
+
diff --git a/manual/src/main/webapp/manual.conf b/manual/src/main/webapp/manual.conf
new file mode 100644
index 0000000..d3900ad
--- /dev/null
+++ b/manual/src/main/webapp/manual.conf
@@ -0,0 +1,29 @@
+{attributes:layout=/WEB-INF/scalate/layouts/print.ssp}
+
+{div:class=title}
+!/images/smx-logo.png!
+\\
+\\
+\\
+\\
+Apache Karaf
+Users' Guide
+\\
+\\
+\\
+\\
+{div}
+
+{div:class=copyright-section}
+Copyright 2011 The Apache Software Foundation
+{div}
+
+
+{div:class=toc-title}
+Table of contents
+{div}
+
+{toc:maxLevel=2}
+
+{include:index.conf}
+
diff --git a/pom.xml b/pom.xml
new file mode 100644
index 0000000..eb81156
--- /dev/null
+++ b/pom.xml
@@ -0,0 +1,215 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<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">
+
+ <!--
+
+ 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.
+ -->
+
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>org.apache</groupId>
+ <artifactId>apache</artifactId>
+ <version>9</version>
+ </parent>
+
+ <groupId>org.apache.servicemix</groupId>
+ <artifactId>servicemix-parent</artifactId>
+ <packaging>pom</packaging>
+ <version>5.0.0-SNAPSHOT</version>
+ <name>Apache ServiceMix</name>
+ <inceptionYear>2005</inceptionYear>
+
+ <properties>
+ <camel-version>2.8-SNAPSHOT</camel-version>
+ <karaf-version>2.2.1</karaf-version>
+ <scala-version>2.9.0-1</scala-version>
+ <scala-plugin-version>2.15.0</scala-plugin-version>
+ <scalate-version>1.5.0</scalate-version>
+ <jersey-version>1.7</jersey-version>
+ <logback-version>0.9.28</logback-version>
+ <jetty-version>7.4.2.v20110526</jetty-version>
+ <jersey-version>1.7</jersey-version>
+ <scalatest-version>1.4.1</scalatest-version>
+ <junit-version>4.8.1</junit-version>
+ <slf4j-version>1.6.1</slf4j-version>
+ <maven-wagon-version>1.0-beta-6</maven-wagon-version>
+ <wikitext-version>1.3</wikitext-version>
+ <osgi-version>4.2.0</osgi-version>
+ <scalamd-version>1.5</scalamd-version>
+ <jaxb-version>2.2.3</jaxb-version>
+ <servicemix-version>${project.version}</servicemix-version>
+ </properties>
+
+ <modules>
+ <module>core</module>
+ <module>console</module>
+ <module>manual</module>
+ <module>assembly</module>
+ </modules>
+
+ <dependencies>
+
+ <!-- test -->
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <version>${junit-version}</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.scalatest</groupId>
+ <artifactId>scalatest_2.9.0</artifactId>
+ <version>${scalatest-version}</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.slf4j</groupId>
+ <artifactId>slf4j-log4j12</artifactId>
+ <version>${slf4j-version}</version>
+ <scope>test</scope>
+ </dependency>
+
+ </dependencies>
+
+ <repositories>
+ <repository>
+ <id>repo1.maven</id>
+ <name>Maven Central Repo</name>
+ <url>http://repo1.maven.org/maven2/</url>
+ </repository>
+ <repository>
+ <id>java.net.m2</id>
+ <name>java.net Maven 2 Repo</name>
+ <url>http://download.java.net/maven/2</url>
+ </repository>
+ </repositories>
+
+
+ <dependencyManagement>
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.camel</groupId>
+ <artifactId>camel-core</artifactId>
+ <version>${camel-version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.camel</groupId>
+ <artifactId>camel-scala</artifactId>
+ <version>${camel-version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.scala-lang</groupId>
+ <artifactId>scala-library</artifactId>
+ <version>${scala-version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.scala-lang</groupId>
+ <artifactId>scala-compiler</artifactId>
+ <version>${scala-version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.fusesource.scalamd</groupId>
+ <artifactId>scalamd</artifactId>
+ <version>${scalamd-version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.fusesource.scalate</groupId>
+ <artifactId>scalate-util</artifactId>
+ <version>${scalate-version}</version>
+ </dependency>
+ <dependency>
+ <groupId>com.sun.jersey</groupId>
+ <artifactId>jersey-server</artifactId>
+ <version>${jersey-version}</version>
+ </dependency>
+ <dependency>
+ <groupId>com.sun.jersey</groupId>
+ <artifactId>jersey-client</artifactId>
+ <version>${jersey-version}</version>
+ </dependency>
+ <dependency>
+ <groupId>com.sun.jersey</groupId>
+ <artifactId>jersey-json</artifactId>
+ <version>${jersey-version}</version>
+ </dependency>
+ <dependency>
+ <groupId>com.sun.xml.bind</groupId>
+ <artifactId>jaxb-impl</artifactId>
+ <version>${jaxb-version}</version>
+ </dependency>
+ </dependencies>
+ </dependencyManagement>
+
+ <build>
+ <pluginManagement>
+ <plugins>
+ <plugin>
+ <groupId>org.scala-tools</groupId>
+ <artifactId>maven-scala-plugin</artifactId>
+ <version>${scala-plugin-version}</version>
+ <executions>
+ <execution>
+ <goals>
+ <goal>compile</goal>
+ <goal>testCompile</goal>
+ </goals>
+ <configuration>
+ <args>
+ <arg>-deprecation</arg>
+ <arg>-P:continuations:enable</arg>
+ </args>
+ <compilerPlugins>
+ <compilerPlugin>
+ <groupId>org.scala-lang.plugins</groupId>
+ <artifactId>continuations</artifactId>
+ <version>${scala-version}</version>
+ </compilerPlugin>
+ <compilerPlugin>
+ <groupId>org.fusesource.jvmassert</groupId>
+ <artifactId>jvmassert</artifactId>
+ <version>1.1</version>
+ </compilerPlugin>
+ </compilerPlugins>
+ </configuration>
+ </execution>
+ </executions>
+ <configuration>
+ <jvmArgs>
+ <jvmArg>-Xmx1024m</jvmArg>
+ <jvmArg>-Xss8m</jvmArg>
+ </jvmArgs>
+ <scalaVersion>${scala-version}</scalaVersion>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-war-plugin</artifactId>
+ <version>2.1.1</version>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.felix</groupId>
+ <artifactId>maven-bundle-plugin</artifactId>
+ <version>2.3.5</version>
+ </plugin>
+ </plugins>
+ </pluginManagement>
+ </build>
+
+</project>
+