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> +