You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@juneau.apache.org by ja...@apache.org on 2016/08/01 00:08:33 UTC
[44/51] [partial] incubator-juneau git commit: Initial Juno contents
from IBM JazzHub repo
http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/7e4f63e6/com.ibm.team.juno.microservice/src/com/ibm/juno/microservice/RestMicroservice.java
----------------------------------------------------------------------
diff --git a/com.ibm.team.juno.microservice/src/com/ibm/juno/microservice/RestMicroservice.java b/com.ibm.team.juno.microservice/src/com/ibm/juno/microservice/RestMicroservice.java
new file mode 100755
index 0000000..980f88c
--- /dev/null
+++ b/com.ibm.team.juno.microservice/src/com/ibm/juno/microservice/RestMicroservice.java
@@ -0,0 +1,554 @@
+/*******************************************************************************
+ * Licensed Materials - Property of IBM
+ * � Copyright IBM Corporation 2015. All Rights Reserved.
+ *
+ * The source code for this program is not published or otherwise
+ * divested of its trade secrets, irrespective of what has been
+ * deposited with the U.S. Copyright Office.
+ *******************************************************************************/
+package com.ibm.juno.microservice;
+
+import java.io.File;
+import java.util.*;
+import java.util.logging.*;
+
+import javax.servlet.Servlet;
+
+import org.eclipse.jetty.security.ConstraintMapping;
+import org.eclipse.jetty.security.ConstraintSecurityHandler;
+import org.eclipse.jetty.security.HashLoginService;
+import org.eclipse.jetty.security.SecurityHandler;
+import org.eclipse.jetty.security.authentication.BasicAuthenticator;
+import org.eclipse.jetty.server.*;
+import org.eclipse.jetty.server.ssl.SslSocketConnector;
+import org.eclipse.jetty.servlet.*;
+import org.eclipse.jetty.util.security.Constraint;
+import org.eclipse.jetty.util.security.Credential;
+import org.eclipse.jetty.util.ssl.SslContextFactory;
+
+import com.ibm.juno.core.ObjectMap;
+import com.ibm.juno.core.ini.ConfigFile;
+import com.ibm.juno.core.json.JsonSerializer;
+import com.ibm.juno.core.parser.ParseException;
+import com.ibm.juno.core.utils.*;
+import com.ibm.juno.microservice.resources.LogEntryFormatter;
+import com.ibm.juno.server.annotation.RestResource;
+
+
+/**
+ * Entry point for Juno microservice that implements a REST interface using Jetty on a single port.
+ *
+ * <h6 class='topic'>Jetty Server Details</h6>
+ * <p>
+ * The Jetty server is created by the {@link #createServer()} method and started with the {@link #startServer()} method.
+ * These methods can be overridden to provided customized behavior.
+ * <p>
+ *
+ * <h6 class='topic'>Defining REST Resources</h6>
+ * <p>
+ * Top-level REST resources are defined by the {@link #getResourceMap()} method.
+ * This method can be overridden to provide a customized list of REST resources.
+ * <p>
+ *
+ * <h6 class='topic'>Logging</h6>
+ * <p>
+ * Logging is initialized by the {@link #initLogging()} method.
+ * This method can be overridden to provide customized logging behavior.
+ *
+ * <h6 class='topic'>Lifecycle Listener Methods</h6>
+ * Subclasses can optionally implement the following event listener methods:
+ * <ul>
+ * <li>{@link #onStart()} - Gets executed before {@link #start()}.
+ * <li>{@link #onStop()} - Gets executed before {@link #stop()}.
+ * <li>{@link #onCreateServer()} - Gets executed before {@link #createServer()}.
+ * <li>{@link #onStartServer()} - Gets executed before {@link #startServer()}.
+ * <li>{@link #onPostStartServer()} - Gets executed after {@link #startServer()}.
+ * <li>{@link #onStopServer()} - Gets executed before {@link #stop()}.
+ * <li>{@link #onPostStopServer()} - Gets executed after {@link #stop()}.
+ * </ul>
+ *
+ * @author jbognar@us.ibm.com
+ */
+public class RestMicroservice extends Microservice {
+
+ Server server;
+ int port;
+ Logger logger;
+
+ /**
+ * Main method.
+ * Subclasses must also implement this method!
+ *
+ * @param args Command line arguments.
+ * @throws Exception
+ */
+ public static void main(String[] args) throws Exception {
+ new RestMicroservice(args).start();
+ }
+
+ /**
+ * Constructor.
+ *
+ * @param args The command line arguments.
+ * @throws Exception
+ */
+ public RestMicroservice(String[] args) throws Exception {
+ super(args);
+ }
+
+ //--------------------------------------------------------------------------------
+ // Methods implemented on Microservice API
+ //--------------------------------------------------------------------------------
+
+ @Override /* Microservice */
+ protected void start() throws Exception {
+ super.start();
+ initLogging();
+ createServer();
+ startServer();
+ }
+
+ @Override /* Microservice */
+ public void stop() {
+ Thread t = new Thread() {
+ @Override /* Thread */
+ public void run() {
+ try {
+ onStopServer();
+ logger.warning("Stopping server.");
+ System.out.println();
+ server.stop();
+ logger.warning("Server stopped.");
+ onPostStopServer();
+ } catch (Exception e) {
+ logger.log(Level.SEVERE, e.getLocalizedMessage(), e);
+ }
+ }
+ };
+ t.start();
+ try {
+ t.join();
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ }
+ super.stop();
+ }
+
+ //--------------------------------------------------------------------------------
+ // RestMicroservice API methods.
+ //--------------------------------------------------------------------------------
+
+ /**
+ * Initialize the logging for this microservice.
+ * <p>
+ * Subclasses can override this method to provide customized logging.
+ * <p>
+ * The default implementation uses the <cs>Logging</cs> section in the config file to set up logging:
+ * <p class='bcode'>
+ * <cc>#================================================================================
+ * # Logger settings
+ * # See FileHandler Java class for details.
+ * #================================================================================</cc>
+ * <cs>[Logging]</cs>
+ *
+ * <cc># The directory where to create the log file.
+ * # Default is ".".</cc>
+ * <ck>logDir</ck> = logs
+ *
+ * <cc># The name of the log file to create for the main logger.
+ * # The logDir and logFile make up the pattern that's passed to the FileHandler
+ * # constructor.
+ * # If value is not specified, then logging to a file will not be set up.</cc>
+ * <ck>logFile</ck> = microservice.%g.log
+ *
+ * <cc># Whether to append to the existing log file or create a new one.
+ * # Default is false.</cc>
+ * <ck>append</ck> =
+ *
+ * <cc># The SimpleDateFormat format to use for dates.
+ * # Default is "yyyy.MM.dd hh:mm:ss".</cc>
+ * <ck>dateFormat</ck> =
+ *
+ * <cc># The log message format.
+ * # The value can contain any of the following variables:
+ * # {date} - The date, formatted per dateFormat.
+ * # {class} - The class name.
+ * # {method} - The method name.
+ * # {logger} - The logger name.
+ * # {level} - The log level name.
+ * # {msg} - The log message.
+ * # {threadid} - The thread ID.
+ * # {exception} - The localized exception message.
+ * # Default is "[{date} {level}] {msg}%n".</cc>
+ * <ck>format</ck> =
+ *
+ * <cc># The maximum log file size.
+ * # Suffixes available for numbers.
+ * # See ConfigFile.getInt(String,int) for details.
+ * # Default is 1M.</cc>
+ * <ck>limit</ck> = 10M
+ *
+ * <cc># Max number of log files.
+ * # Default is 1.</cc>
+ * <ck>count</ck> = 5
+ *
+ * <cc># Default log levels.
+ * # Keys are logger names.
+ * # Values are serialized Level POJOs.</cc>
+ * <ck>levels</ck> = { com.ibm.juno:'INFO' }
+ *
+ * <cc># Only print unique stack traces once and then refer to them by a simple 8 character hash identifier.
+ * # Useful for preventing log files from filling up with duplicate stack traces.
+ * # Default is false.</cc>
+ * <ck>useStackTraceHashes</ck> = true
+ *
+ * <cc># The default level for the console logger.
+ * # Default is WARNING.</cc>
+ * <ck>consoleLevel</ck> = WARNING
+ * </p>
+ *
+ * @throws Exception
+ */
+ protected void initLogging() throws Exception {
+ ConfigFile cf = getConfig();
+ logger = Logger.getLogger("");
+ String logFile = cf.getString("Logging/logFile");
+ if (! StringUtils.isEmpty(logFile)) {
+ LogManager.getLogManager().reset();
+ String logDir = cf.getString("Logging/logDir", ".");
+ FileUtils.mkdirs(new File(logDir), false);
+ boolean append = cf.getBoolean("Logging/append");
+ int limit = cf.getInt("Logging/limit", 1024*1024);
+ int count = cf.getInt("Logging/count", 1);
+ FileHandler fh = new FileHandler(logDir + '/' + logFile, limit, count, append);
+
+ boolean useStackTraceHashes = cf.getBoolean("Logging/useStackTraceHashes");
+ String format = cf.getString("Logging/format", "[{date} {level}] {msg}%n");
+ String dateFormat = cf.getString("Logging/dateFormat", "yyyy.MM.dd hh:mm:ss");
+ fh.setFormatter(new LogEntryFormatter(format, dateFormat, useStackTraceHashes));
+ logger.addHandler(fh);
+
+ ConsoleHandler ch = new ConsoleHandler();
+ ch.setLevel(Level.parse(cf.getString("Logging/consoleLevel", "WARNING")));
+ ch.setFormatter(new LogEntryFormatter(format, dateFormat, false));
+ logger.addHandler(ch);
+ }
+ ObjectMap loggerLevels = cf.getObject(ObjectMap.class, "Logging/levels");
+ if (loggerLevels != null)
+ for (String l : loggerLevels.keySet())
+ Logger.getLogger(l).setLevel(loggerLevels.get(Level.class, l));
+ }
+
+ /**
+ * Method used to create (but not start) an instance of a Jetty server.
+ * <p>
+ * Subclasses can override this method to customize the Jetty server before it is started.
+ * <p>
+ * The default implementation is configured by the following values in the config file:
+ * <p>
+ * <p class='bcode'>
+ * <cc>#================================================================================
+ * # REST settings
+ * #================================================================================</cc>
+ * <cs>[REST]</cs>
+ *
+ * <cc># The HTTP port number to use.
+ * # Default is Rest-Port setting in manifest file, or 8000.</cc>
+ * <ck>port</ck> = 10000
+ *
+ * <cc># The context root of the Jetty server.
+ * # Default is Rest-ContextPath in manifest file, or "/".</cc>
+ * <ck>contextPath</ck> = 10000
+ *
+ * <cc># Authentication: NONE, BASIC.
+ * # Default is Rest-AuthType in manifest file, or NONE.</cc>
+ * <ck>authType</ck> = NONE
+ *
+ * <cc># The BASIC auth username.
+ * # Default is Rest-LoginUser in manifest file.</cc>
+ * <ck>loginUser</ck> =
+ *
+ * <cc># The BASIC auth password.
+ * # Default is Rest-LoginPassword in manifest file.</cc>
+ * <ck>loginPassword</ck> =
+ *
+ * <cc># The BASIC auth realm.
+ * # Default is Rest-AuthRealm in manifest file.</cc>
+ * <ck>authRealm</ck> =
+ *
+ * <cc># Enable SSL support.</cc>
+ * <ck>useSsl</ck> = false
+ *
+ * <cc>#================================================================================
+ * # Bean properties on the org.eclipse.jetty.util.ssl.SslSocketFactory class
+ * #--------------------------------------------------------------------------------
+ * # Ignored if REST/useSsl is false.
+ * #================================================================================</cc>
+ * <cs>[REST-SslContextFactory]</cs>
+ * <ck>keyStorePath</ck> = client_keystore.jks
+ * <ck>keyStorePassword*</ck> = {HRAaRQoT}
+ * <ck>excludeCipherSuites</ck> = TLS_DHE.*, TLS_EDH.*
+ * <ck>excludeProtocols</ck> = SSLv3
+ * <ck>allowRenegotiate</ck> = false
+ * </p>
+ *
+ * @return The newly-created server.
+ * @throws Exception
+ */
+ protected Server createServer() throws Exception {
+ onCreateServer();
+
+ ConfigFile cf = getConfig();
+ ObjectMap mf = getManifest();
+
+ port = cf.getInt("REST/port", mf.getInt("Rest-Port", 8000));
+ String contextPath = cf.getString("REST/contextPath", mf.getString("Rest-ContextPath", "/"));
+
+ if (cf.getBoolean("REST/useSsl")) {
+
+ SslContextFactory sslContextFactory = new SslContextFactory();
+
+ // Write the properties in REST-SslContextFactory to the bean setters on sslContextFactory.
+ // Throws an exception if section contains unknown properties.
+ // Only look for bean properties of type String/String/boolean/int since class has multiple
+ // setters with the same name (e.g. setKeyStore(KeyStore) and setKeyStore(String)).
+ ObjectMap m = cf.writeProperties("REST-SslContextFactory", sslContextFactory, false, String.class, String[].class, boolean.class, int.class);
+
+ // We're using Jetty 8 that doesn't allow regular expression matching in SslContextFactory.setExcludeCipherSuites(),
+ // so to prevent having the config file list all old cipher suites, exclude the known bad ones.
+ String[] excludeCipherSuites = ArrayUtils.combine(
+ StringUtils.split("SSL_RSA_WITH_DES_CBC_SHA,SSL_DHE_RSA_WITH_DES_CBC_SHA,SSL_DHE_DSS_WITH_DES_CBC_SHA,SSL_RSA_EXPORT_WITH_RC4_40_MD5,SSL_RSA_EXPORT_WITH_DES40_CBC_SHA,SSL_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA,SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA,SSL_DHE_DSS_WITH_3DES_EDE_CBC_SHA,TLS_DHE_RSA_WITH_AES_256_CBC_SHA256,TLS_DHE_DSS_WITH_AES_256_CBC_SHA256,TLS_DHE_RSA_WITH_AES_256_CBC_SHA,TLS_DHE_DSS_WITH_AES_256_CBC_SHA,TLS_DHE_RSA_WITH_AES_128_CBC_SHA256,TLS_DHE_DSS_WITH_AES_128_CBC_SHA256,TLS_DHE_RSA_WITH_AES_128_CBC_SHA,TLS_DHE_DSS_WITH_AES_128_CBC_SHA", ','),
+ sslContextFactory.getExcludeCipherSuites()
+ );
+ sslContextFactory.setExcludeCipherSuites(excludeCipherSuites);
+
+ logger.log(Level.WARNING, "SSL properties set: {0}", JsonSerializer.DEFAULT_LAX.toString(m));
+
+ SslSocketConnector connector = new SslSocketConnector(sslContextFactory);
+ connector.setPort(port);
+
+ server = new Server();
+ server.setConnectors(new Connector[] { connector });
+
+ } else {
+ server = new Server(port);
+ }
+
+ ServletContextHandler context = new ServletContextHandler(ServletContextHandler.SESSIONS);
+
+ String authType = cf.getString("REST/authType", mf.getString("Rest-AuthType", "NONE"));
+ if (authType.equals("BASIC"))
+ context.setSecurityHandler(basicAuth(cf, mf));
+
+ context.setContextPath(contextPath);
+ server.setHandler(context);
+
+ for (Map.Entry<String,Class<? extends Servlet>> e : getResourceMap().entrySet())
+ context.addServlet(e.getValue(), e.getKey()).setInitOrder(0);
+
+ return server;
+ }
+
+ /**
+ * Method used to start the Jetty server created by {@link #createServer()}.
+ * <p>
+ * Subclasses can override this method to customize server startup.
+ *
+ * @throws Exception
+ */
+ protected void startServer() throws Exception {
+ onStartServer();
+ server.start();
+ logger.warning("Server started on port " + port);
+ onPostStartServer();
+ server.join();
+ }
+
+ /**
+ * Returns the resource map to use for this microservice.
+ * <p>
+ * <p>
+ * Subclasses can override this method to programmatically specify their resources.
+ * <p>
+ * The default implementation is configured by the following values in the config file:
+ * <p>
+ * <p class='bcode'>
+ *
+ * <cc>#================================================================================
+ * # REST settings
+ * #================================================================================</cc>
+ * <cs>[REST]</cs>
+ *
+ * <cc># A JSON map of servlet paths to servlet classes.
+ * # Example:
+ * # resourceMap = {'/*':'com.ibm.MyServlet'}
+ * # Either resourceMap or resources must be specified if it's not defined in
+ * # the manifest file.</cc>
+ * <ck>resourceMap</ck> =
+ *
+ * <cc># A comma-delimited list of names of classes that extend from Servlet.
+ * # Resource paths are pulled from @RestResource.path() annotation, or
+ * # "/*" if annotation not specified.
+ * # Example:
+ * # resources = com.ibm.MyServlet
+ * * # Default is Rest-Resources in manifest file.
+ * # Either resourceMap or resources must be specified if it's not defined in
+ * # the manifest file.</cc>
+ * <ck>resources</ck> =
+ * </p>
+ * <p>
+ * In most cases, the rest resources will be specified in the manifest file since
+ * it's not likely to be a configurable property:
+ * <p>
+ * <p class='bcode'>
+ * <mk>Rest-Resources:</mk> com.ibm.juno.microservice.sample.RootResources
+ * </p>
+ *
+ * @return The map of REST resources.
+ * @throws ClassNotFoundException
+ * @throws ParseException
+ */
+ @SuppressWarnings("unchecked")
+ protected Map<String,Class<? extends Servlet>> getResourceMap() throws ClassNotFoundException, ParseException {
+ ConfigFile cf = getConfig();
+ ObjectMap mf = getManifest();
+ Map<String,Class<? extends Servlet>> rm = new LinkedHashMap<String,Class<? extends Servlet>>();
+
+ ObjectMap resourceMap = cf.getObject(ObjectMap.class, "REST/resourceMap");
+ String[] resources = cf.getStringArray("REST/resources", mf.getStringArray("Rest-Resources"));
+
+ if (resourceMap != null && ! resourceMap.isEmpty()) {
+ for (Map.Entry<String,Object> e : resourceMap.entrySet()) {
+ Class<?> c = Class.forName(e.getValue().toString());
+ if (! ClassUtils.isParentClass(Servlet.class, c))
+ throw new ClassNotFoundException("Invalid class specified as resource. Must be a Servlet. Class='"+c.getName()+"'");
+ rm.put(e.getKey(), (Class<? extends Servlet>)c);
+ }
+ } else if (resources.length > 0) {
+ for (String resource : resources) {
+ Class<?> c = Class.forName(resource);
+ if (! ClassUtils.isParentClass(Servlet.class, c))
+ throw new ClassNotFoundException("Invalid class specified as resource. Must be a Servlet. Class='"+c.getName()+"'");
+ RestResource rr = c.getAnnotation(RestResource.class);
+ String path = rr == null ? "/*" : rr.path();
+ if (! path.endsWith("*"))
+ path += (path.endsWith("/") ? "*" : "/*");
+ rm.put(path, (Class<? extends Servlet>)c);
+ }
+ }
+ return rm;
+ }
+
+ /**
+ * Called when {@link ConfigFile#save()} is called on the config file.
+ * <p>
+ * The default behavior is configured by the following value in the config file:
+ * <p>
+ * <p class='bcode'>
+ * <cs>[REST]</cs>
+ *
+ * <cc># What to do when the config file is saved.
+ * # Possible values:
+ * # NOTHING - Don't do anything. (default)
+ * # RESTART_SERVER - Restart the Jetty server.
+ * # RESTART_SERVICE - Shutdown and exit with code '3'.</cc>
+ * <ck>saveConfigAction</ck> = RESTART_SERVER
+ * </p>
+ */
+ @Override /* Microservice */
+ protected void onConfigSave(ConfigFile cf) {
+ try {
+ String saveConfigAction = cf.getString("REST/saveConfigAction", "NOTHING");
+ if (saveConfigAction.equals("RESTART_SERVER")) {
+ new Thread() {
+ @Override /* Thread */
+ public void run() {
+ try {
+ RestMicroservice.this.stop();
+ RestMicroservice.this.start();
+ } catch (Exception e) {
+ logger.log(Level.SEVERE, e.getLocalizedMessage(), e);
+ }
+ }
+ }.start();
+ } else if (saveConfigAction.equals("RESTART_SERVICE")) {
+ stop();
+ System.exit(3);
+ }
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ //--------------------------------------------------------------------------------
+ // Lifecycle listener methods.
+ //--------------------------------------------------------------------------------
+
+ /**
+ * Called before {@link #createServer()} is called.
+ * <p>
+ * Subclasses can override this method to hook into the lifecycle of this application.
+ */
+ protected void onCreateServer() {}
+
+ /**
+ * Called before {@link #startServer()} is called.
+ * <p>
+ * Subclasses can override this method to hook into the lifecycle of this application.
+ */
+ protected void onStartServer() {}
+
+ /**
+ * Called after the Jetty server is started.
+ * <p>
+ * Subclasses can override this method to hook into the lifecycle of this application.
+ */
+ protected void onPostStartServer() {}
+
+ /**
+ * Called before the Jetty server is stopped.
+ * <p>
+ * Subclasses can override this method to hook into the lifecycle of this application.
+ */
+ protected void onStopServer() {}
+
+ /**
+ * Called after the Jetty server is stopped.
+ * <p>
+ * Subclasses can override this method to hook into the lifecycle of this application.
+ */
+ protected void onPostStopServer() {}
+
+ //--------------------------------------------------------------------------------
+ // Other methods.
+ //--------------------------------------------------------------------------------
+
+ private static final SecurityHandler basicAuth(ConfigFile cf, ObjectMap mf) {
+
+ HashLoginService l = new HashLoginService();
+ String user = cf.getString("REST/loginUser", mf.getString("Rest-LoginUser"));
+ String pw = cf.getString("REST/loginPassword", mf.getString("Rest-LoginPassword"));
+ String realm = cf.getString("REST/authRealm", mf.getString("Rest-AuthRealm", ""));
+ String ctx = cf.getString("REST/contextPath", mf.getString("Rest-ContextPath", "/"));
+
+ l.putUser(user, Credential.getCredential(pw), new String[] { "user" });
+ l.setName(realm);
+
+ Constraint constraint = new Constraint();
+ constraint.setName(Constraint.__BASIC_AUTH);
+ constraint.setRoles(new String[] { "user" });
+ constraint.setAuthenticate(true);
+
+ ConstraintMapping cm = new ConstraintMapping();
+ cm.setConstraint(constraint);
+ cm.setPathSpec(ctx);
+
+ ConstraintSecurityHandler csh = new ConstraintSecurityHandler();
+ csh.setAuthenticator(new BasicAuthenticator());
+ csh.setRealmName("myrealm");
+ csh.addConstraintMapping(cm);
+ csh.setLoginService(l);
+
+ return csh;
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/7e4f63e6/com.ibm.team.juno.microservice/src/com/ibm/juno/microservice/doc-files/build1.png
----------------------------------------------------------------------
diff --git a/com.ibm.team.juno.microservice/src/com/ibm/juno/microservice/doc-files/build1.png b/com.ibm.team.juno.microservice/src/com/ibm/juno/microservice/doc-files/build1.png
new file mode 100755
index 0000000..008c6b5
Binary files /dev/null and b/com.ibm.team.juno.microservice/src/com/ibm/juno/microservice/doc-files/build1.png differ
http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/7e4f63e6/com.ibm.team.juno.microservice/src/com/ibm/juno/microservice/doc-files/build2.png
----------------------------------------------------------------------
diff --git a/com.ibm.team.juno.microservice/src/com/ibm/juno/microservice/doc-files/build2.png b/com.ibm.team.juno.microservice/src/com/ibm/juno/microservice/doc-files/build2.png
new file mode 100755
index 0000000..9e55346
Binary files /dev/null and b/com.ibm.team.juno.microservice/src/com/ibm/juno/microservice/doc-files/build2.png differ
http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/7e4f63e6/com.ibm.team.juno.microservice/src/com/ibm/juno/microservice/doc-files/helloworld1.png
----------------------------------------------------------------------
diff --git a/com.ibm.team.juno.microservice/src/com/ibm/juno/microservice/doc-files/helloworld1.png b/com.ibm.team.juno.microservice/src/com/ibm/juno/microservice/doc-files/helloworld1.png
new file mode 100755
index 0000000..f5f0c7c
Binary files /dev/null and b/com.ibm.team.juno.microservice/src/com/ibm/juno/microservice/doc-files/helloworld1.png differ
http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/7e4f63e6/com.ibm.team.juno.microservice/src/com/ibm/juno/microservice/doc-files/instructions1.png
----------------------------------------------------------------------
diff --git a/com.ibm.team.juno.microservice/src/com/ibm/juno/microservice/doc-files/instructions1.png b/com.ibm.team.juno.microservice/src/com/ibm/juno/microservice/doc-files/instructions1.png
new file mode 100755
index 0000000..1234828
Binary files /dev/null and b/com.ibm.team.juno.microservice/src/com/ibm/juno/microservice/doc-files/instructions1.png differ
http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/7e4f63e6/com.ibm.team.juno.microservice/src/com/ibm/juno/microservice/doc-files/instructions2.png
----------------------------------------------------------------------
diff --git a/com.ibm.team.juno.microservice/src/com/ibm/juno/microservice/doc-files/instructions2.png b/com.ibm.team.juno.microservice/src/com/ibm/juno/microservice/doc-files/instructions2.png
new file mode 100755
index 0000000..4589f19
Binary files /dev/null and b/com.ibm.team.juno.microservice/src/com/ibm/juno/microservice/doc-files/instructions2.png differ
http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/7e4f63e6/com.ibm.team.juno.microservice/src/com/ibm/juno/microservice/doc-files/instructions3.png
----------------------------------------------------------------------
diff --git a/com.ibm.team.juno.microservice/src/com/ibm/juno/microservice/doc-files/instructions3.png b/com.ibm.team.juno.microservice/src/com/ibm/juno/microservice/doc-files/instructions3.png
new file mode 100755
index 0000000..21808c0
Binary files /dev/null and b/com.ibm.team.juno.microservice/src/com/ibm/juno/microservice/doc-files/instructions3.png differ
http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/7e4f63e6/com.ibm.team.juno.microservice/src/com/ibm/juno/microservice/doc-files/instructions4.png
----------------------------------------------------------------------
diff --git a/com.ibm.team.juno.microservice/src/com/ibm/juno/microservice/doc-files/instructions4.png b/com.ibm.team.juno.microservice/src/com/ibm/juno/microservice/doc-files/instructions4.png
new file mode 100755
index 0000000..b5e8471
Binary files /dev/null and b/com.ibm.team.juno.microservice/src/com/ibm/juno/microservice/doc-files/instructions4.png differ
http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/7e4f63e6/com.ibm.team.juno.microservice/src/com/ibm/juno/microservice/doc-files/instructions5.png
----------------------------------------------------------------------
diff --git a/com.ibm.team.juno.microservice/src/com/ibm/juno/microservice/doc-files/instructions5.png b/com.ibm.team.juno.microservice/src/com/ibm/juno/microservice/doc-files/instructions5.png
new file mode 100755
index 0000000..50504de
Binary files /dev/null and b/com.ibm.team.juno.microservice/src/com/ibm/juno/microservice/doc-files/instructions5.png differ
http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/7e4f63e6/com.ibm.team.juno.microservice/src/com/ibm/juno/microservice/doc-files/instructions6.png
----------------------------------------------------------------------
diff --git a/com.ibm.team.juno.microservice/src/com/ibm/juno/microservice/doc-files/instructions6.png b/com.ibm.team.juno.microservice/src/com/ibm/juno/microservice/doc-files/instructions6.png
new file mode 100755
index 0000000..e730d32
Binary files /dev/null and b/com.ibm.team.juno.microservice/src/com/ibm/juno/microservice/doc-files/instructions6.png differ
http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/7e4f63e6/com.ibm.team.juno.microservice/src/com/ibm/juno/microservice/doc-files/manifest1.png
----------------------------------------------------------------------
diff --git a/com.ibm.team.juno.microservice/src/com/ibm/juno/microservice/doc-files/manifest1.png b/com.ibm.team.juno.microservice/src/com/ibm/juno/microservice/doc-files/manifest1.png
new file mode 100755
index 0000000..77604c1
Binary files /dev/null and b/com.ibm.team.juno.microservice/src/com/ibm/juno/microservice/doc-files/manifest1.png differ
http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/7e4f63e6/com.ibm.team.juno.microservice/src/com/ibm/juno/microservice/javadoc.css
----------------------------------------------------------------------
diff --git a/com.ibm.team.juno.microservice/src/com/ibm/juno/microservice/javadoc.css b/com.ibm.team.juno.microservice/src/com/ibm/juno/microservice/javadoc.css
new file mode 100755
index 0000000..036160c
--- /dev/null
+++ b/com.ibm.team.juno.microservice/src/com/ibm/juno/microservice/javadoc.css
@@ -0,0 +1,1039 @@
+/* Javadoc style sheet */
+/*
+Overall document style
+*/
+body {
+ background-image: linear-gradient(top, #cddddf 0, #eaeded 20px, #ffffff 70px);
+ background-image: -o-linear-gradient(top, #cddddf 0, #eaeded 20px, #ffffff 70px);
+ background-image: -moz-linear-gradient(top, #cddddf 0, #eaeded 20px, #ffffff 70px);
+ background-image: -webkit-linear-gradient(top, #cddddf 0, #eaeded 20px, #ffffff 70px);
+ background-image: -ms-linear-gradient(top, #cddddf 0, #eaeded 20px, #ffffff 70px);
+ background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0, #cddddf), color-stop(20px, #eaeded), color-stop(70px, #ffffff) );
+ background-repeat: no-repeat;
+ background-attachment: fixed;
+ color: #353833;
+ font-family: Arial, Helvetica, sans-serif;
+ font-size: 76%;
+ margin: 0;
+}
+
+a:link,a:visited {
+ text-decoration: none;
+ color: #4c6b87;
+}
+
+a:hover,a:focus {
+ text-decoration: none;
+ color: #bb7a2a;
+}
+
+a:active {
+ text-decoration: none;
+ color: #4c6b87;
+}
+
+a[name] {
+ color: #353833;
+}
+
+a[name]:hover {
+ text-decoration: none;
+ color: #353833;
+}
+
+h1 {
+ font-size: 1.5em;
+}
+
+h2 {
+ font-size: 1.4em;
+}
+
+h3 {
+ font-size: 1.3em;
+}
+
+h4 {
+ font-size: 1.2em;
+}
+
+h5 {
+ font-size: 1.1em;
+}
+
+h6 {
+ font-size: 1.0em;
+}
+
+ul {
+ list-style-type: disc;
+}
+
+code,
+tt,
+pre,
+dt code {
+ font-size: 9pt;
+}
+
+table tr td dt code {
+ font-size: 9pt;
+ vertical-align: top;
+}
+
+sup {
+ font-size: .6em;
+}
+
+/*
+Document title and Copyright styles
+*/
+.clear {
+ clear: both;
+ height: 0px;
+ overflow: hidden;
+}
+
+.aboutLanguage {
+ float: right;
+ padding: 0px 21px;
+ font-size: .8em;
+ z-index: 200;
+ margin-top: -7px;
+}
+
+.legalCopy {
+ margin-left: .5em;
+}
+
+.bar a,
+.bar a:link,
+.bar a:visited,
+.bar a:active {
+ color: #ffffff;
+ text-decoration: none;
+}
+
+.bar a:hover,
+.bar a:focus {
+ color: #bb7a2a;
+}
+
+.tab {
+ background-color: #0066ff;
+ background-image: url('data:image/gif;base64,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');
+ background-position: left top;
+ background-repeat: no-repeat;
+ color: #ffffff;
+ padding: 8px;
+ width: 5em;
+ font-weight: bold;
+}
+/*
+Navigation bar styles
+*/
+.bar {
+ background-image: url('data:image/gif;base64,R0lGODlhMgBwAOYAAAAAAP///z1bcT5ccj9dc0NieUBedERjekFfdUtthlZ6lTxbcT1ccjxbcD5dcz1ccTtZbUJieUFhdz9edD5dcjxZbjxabjtYbEZogEVmfkVnfkRlfENjekJieEBfdT9ecz1bbzxZbUZof0VmfURle0NjeUJhd0BfdD1abk5zjEtvh0pthUlrg0hqgURkek1xiUxviExwiEtuhklrglN5k1F2kFB1jk9zjE5xik5yiktthVJ2kFJ3kFF2j05xiVd9mFV6lVR5k1F1jld9l1Z7lVV6lFqAm1l/mVh9mFh+mFqAml2DnluAm1uBm1p/mV2DnWGIo2CGoV+FoF+Fn16Dnl6Enl2CnGKIo2KJo2GHomGIomCFoGCGoGKHomKIomGGoWGHoWOIo2OJozxbb0VofzxbbjtZbEZpgDxabUhrgkJid0Fhdklsg0hrgTxZbE5ziz1abU90jElrgUhqgFN5klB1jVR6k1F2jll/mFqAmVyCm12DnP///wAAAAAAAAAAACH5BAEAAHwALAAAAAAyAHAAAAf/gGYhgmaFgiGIg4OEi4WJiISGkIuNh4mWgheGbpOWipqFnJchoI+ToGZuFhUQrK2trrAQs6+vFbG1rLe5s7quaMDAcCgoaCjDw8EhwcPFx8fMxMbB0c7DZWUg2iBj3Nnb2djb3N7j291j3+bo3wsLDe/wAg0P8A32C/Px+fT2/vz19t0DCI/BAAYPBgx4gPAgg4YLDyZc2PDhw4kME1bEWJEBAQoEHBD46ICCSAciKagcKZKkyZAnR5p82bLlzJMfDBjI+aFnzp0TJvTUuXOnT50fJhT1+bOp0aE7T0iVigDBCQ8IPEjValUr1a5Zp369alXsiapktUqQsMZEWxMm/9aumbtGTdy5buHGZUs3L1y5btu+3Tu3Q4QIJQp0KHF4MWLEHQwjVsw
4gmPGiR1bnjxZs2MXB0qI5uCiBIcDHEq4cJG6tGjTpU+3fk3adOjXo2OjLrGBhO/evUlsGA5cuG/jwYknN858efLhGTKMGCE9unUN0bFn0DC9uvXt0qlTt969/PftZDCoV3+GjAgMItKvP/N+vnv48u3XX68f/5wWc8zRBoD/EdhCG3IcSOCAAbZgYIAMFgghhAYSyAYbaczAwoYbsqEhCxdiiOGHHHq4YYYcdogiiimamIAOCSQgQ4wzxriCjCvosMKNMtIYYwI89iikj0LWCKQKMcAAg/8KSi6pApNKQtmklE9KueSUUGaJJZM4vJDDl116+cKYOeDgAw5oflkmmWN6qWaYObip5ppijpnCDW/cgOcbceDZp55vBIonoHz6CSihfQo66J6J9mlDHXXcIcQdNlA6KaQ2CKGpEJFOWmmmd0DaKaWWdjrqp5fysAMPrO6wQw871MBqDzz0QKusrb4a66ysqqorrr36CiuuNNBABx1BFEuHHcfSkKyxxx777LLNBiGtssxKe62x2dJQhAJEEAGuuEQUYS4RQABRRLjhjguuueu2K2+87s5r7g9JIJFEEvj2+wO+QwyBhL768mvwv/gW3C+/BSt88L95OCExHng4gUf/xBFffMQRFE9c8cVOZOyxxRFPPDLIESthhBFMNKGEyka43AQTSjDR8sotv7yyzEyw7DLMTfjss84xK9GEHnpYobQVeuxhhdNI77FH004v3fTTTCdttdNVL6301VA/scQSVFDxxBNVVIG22FSovUQVZJuNttpux3122mxTYffca0uxxd9TTOH331xwMQUXfh8OuOB/b1H4FIsP3jjkWwQueeFgRPEFF19kHoXmYIDBReabg7F555+DLvrpnmt+Ouupdw5GF6FnQfvsXWThBRheeNFF7rXf/rvuvINhe+jDG0/78bgTL8YVXlwRxvRePH+FGNVfcX0Y0U/PvfXYd0/9//Pdi/+99s9DoQUU7GOBhRZavM/+
Fe2v3/778a9vPxTuw2///v3Ln/sGSMACGvCACEygAhfIwAY68IEQjKAEJ0jBClrwghjMoAY3yMEOevCDIAyhCEdIwhKa8IQoTKEKV8jCFrrwhTCMoQxnSMMa2vCGOMyhDnfIwx76EIb0AyD+5AcF+vFPiPCTHxLhx74lvo980hsf+rK3PfNRMXxRPF/5snjF2zFveLvrXfKUh7zchZGMzSPjF80YOs1xrnWyG50bTffG2IWOc3X83Bdel0fVSc5yjXsc4irHhcgF0nCGbFzlEuk4Lohtb3hzW9vEBrey3Y1uj7Qk3+IGSUwizf9rYMua1KgGSq5lrZRY89rXTKkHmOUMaEajmc2CNjRYzqyWOxPaK3dmtJJZ7GMYI9nGOvZLkoXMYifzZcWKiTInJGxfC0NYEgI2sHxB82HPPBjD9uUwf/3gW/IiF7zQpS52kUuc5wrnu9RpryIoC1nYqtY7ozWtblkLntyi57aoRQcaqKpXrhoWr2zFA2AFdFe1AuivgpUrgfLgUaeyVKjqkKlNRRRUopIUqTJlKo2iKlR3yhOjDEWoPIk0UI061EgVddJCFapLb2ITmcyEJhzEtE5yolOc5gQmmb4ASVHa0pSaFNQoPYmoVNLSlYzKpBcRyUg3kkGOdvTUHwWpRkb/KhKRgHQhFpXoQyFKw4hSBKIPeVVFGjprWVnwHwo1yEAIUpBbJdRWAVVoQnZ9a4Dyw577xIc/9AGsX/mKgfbshz+FHWx0zPMd7TiWsdcJj3cWKx7xnEcDwUHOb4ij2d80h7OdXU5ohwMa2uimNaxRDW5qIxvV5sY2uHltayWTmcpcBjK0pUxjMNMZ23KmtruNAGAGIxe62IUvfiFMX4jLlsAkt7hmQQtWvMKVq0xFumERC3bNchawaMUpTEFKUKCylKMApbxQAa95P/CRkMikJCdJyUrc65L40vcm9LUJfENiEIhkxCH+lYhC/msR/25EwBTRCAPc8Y95BGQg8mhwZ
j8EEuEHSzgg4jhHOcABggxrgx3m+PCG17FhaqChGcZARjGAsQxhSOMZcKjGNEyM4mesghe76AUuXOELWuBYF70Ico4VcYpNdOIRmTDyKEphiiSHghGG8IQiHBEJRyC5Ep2osicCAQA7');
+ background-repeat: repeat-x;
+ color: #ffffff;
+ padding: .8em .5em .4em .8em;
+ height: auto; /*height:1.8em;*/
+ font-size: 1em;
+ margin: 0;
+}
+
+.topNav {
+ background-image: url('data:image/gif;base64,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');
+ background-repeat: repeat-x;
+ color: #ffffff;
+ float: left;
+ padding: 0;
+ width: 100%;
+ clear: right;
+ height: 2.8em;
+ padding-top: 10px;
+ overflow: hidden;
+}
+
+.bottomNav {
+ margin-top: 10px;
+ background-image: url('data:image/gif;base64,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');
+ background-repeat: repeat-x;
+ color: #ffffff;
+ float: left;
+ padding: 0;
+ width: 100%;
+ clear: right;
+ height: 2.8em;
+ padding-top: 10px;
+ overflow: hidden;
+}
+
+.subNav {
+ background-color: #dee3e9;
+ border-bottom: 1px solid #9eadc0;
+ float: left;
+ width: 100%;
+ overflow: hidden;
+}
+
+.subNav div {
+ clear: left;
+ float: left;
+ padding: 0 0 5px 6px;
+}
+
+ul.navList,
+ul.subNavList {
+ float: left;
+ margin: 0 25px 0 0;
+ padding: 0;
+}
+
+ul.navList li {
+ list-style: none;
+ float: left;
+ padding: 3px 6px;
+}
+
+ul.subNavList li {
+ list-style: none;
+ float: left;
+ font-size: 90%;
+}
+
+.topNav a:link,
+.topNav a:active,
+.topNav a:visited,
+.bottomNav a:link,
+.bottomNav a:active,
+.bottomNav a:visited {
+ color: #ffffff;
+ text-decoration: none;
+}
+
+.topNav a:hover,
+.bottomNav a:hover {
+ text-decoration: none;
+ color: #bb7a2a;
+}
+
+.navBarCell1Rev {
+ background-image: url('data:image/gif;base64,R0lGODlhAwAeANUAAAAAAP///9+VNfChOu+gOeKXNr58Kr18Krp6KbZ3KMyGLr9+K7t6Krh4KbZ3KdKKMM+IL8yGL8mELsiDLsWBLcWCLcKALLl4KtKLMd+UNdyRNNmPM9WNMvCgOuqcOOaZN+WYN+KWNtqQNPGhO+yeOuucOeeaOPOiPP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAACgALAAAAAADAB4AAAZAwJNwMBoQOgSS0lPymJ4f0CdUCGUEGY12I9pwvpgHBkJWRBQTyaRCqVjei/jBcGAgGI1LI+FI5Pd9f3x+eoJ9QQA7');
+ background-color: #a88834;
+ color: #ffffff;
+ margin: auto 5px;
+ border: 1px solid #c9aa44;
+}
+/*
+Page header and footer styles
+*/
+.header,
+.footer {
+ clear: both;
+ margin: 0 20px;
+ padding: 5px 0 0 0;
+}
+
+.indexHeader {
+ margin: 10px;
+ position: relative;
+}
+
+.indexHeader h1 {
+ font-size: 1.3em;
+}
+
+.title {
+ color: #2c4557;
+ margin: 10px 0;
+}
+
+.subTitle {
+ margin: 5px 0 0 0;
+}
+
+.header ul {
+ margin: 0 0 25px 0;
+ padding: 0;
+}
+
+.footer ul {
+ margin: 20px 0 5px 0;
+}
+
+.header ul li/*,
+.footer ul li*/ {
+ list-style: none;
+ font-size: 1.2em;
+}
+/*
+Heading styles
+*/
+div.details ul.blockList ul.blockList ul.blockList li.blockList h4,
+div.details ul.blockList ul.blockList ul.blockListLast li.blockList h4 {
+ background-color: #dee3e9;
+ border-top: 1px solid #9eadc0;
+ border-bottom: 1px solid #9eadc0;
+ margin: 0 0 6px -8px;
+ padding: 2px 5px;
+}
+
+ul.blockList ul.blockList ul.blockList li.blockList h3 {
+ background-color: #dee3e9;
+ border-top: 1px solid #9eadc0;
+ border-bottom: 1px solid #9eadc0;
+ margin: 0 0 6px -8px;
+ padding: 2px 5px;
+}
+
+ul.blockList ul.blockList li.blockList h3 {
+ padding: 0;
+ margin: 15px 0;
+}
+
+ul.blockList li.blockList h2 {
+ padding: 0px 0 20px 0;
+}
+/*
+Page layout container styles
+*/
+.contentContainer,
+.sourceContainer,
+.classUseContainer,
+.serializedFormContainer,
+.constantValuesContainer {
+ clear: both;
+ padding: 10px 20px;
+ position: relative;
+}
+
+.indexContainer {
+ margin: 10px;
+ position: relative;
+ font-size: 1.0em;
+}
+
+.indexContainer h2 {
+ font-size: 1.1em;
+ padding: 0 0 3px 0;
+}
+
+.indexContainer ul {
+ margin: 0;
+ padding: 0;
+}
+
+.indexContainer ul li {
+ list-style: none;
+}
+
+.contentContainer .description dl dt,
+.contentContainer .details dl dt,
+.serializedFormContainer dl dt {
+ font-size: 1.1em;
+ font-weight: bold;
+ margin: 10px 0 0 0;
+ color: #4e4e4e;
+}
+
+.contentContainer .description dl dd,
+.contentContainer .details dl dd,
+.serializedFormContainer dl dd {
+ margin: 10px 0 10px 20px;
+}
+
+.serializedFormContainer dl.nameValue dt {
+ margin-left: 1px;
+ font-size: 1.1em;
+ display: inline;
+ font-weight: bold;
+}
+
+.serializedFormContainer dl.nameValue dd {
+ margin: 0 0 0 1px;
+ font-size: 1.1em;
+ display: inline;
+}
+/*
+List styles
+*/
+ul.horizontal li {
+ display: inline;
+ font-size: 0.9em;
+}
+
+ul.inheritance {
+ margin: 0;
+ padding: 0;
+}
+
+ul.inheritance li {
+ display: inline;
+ list-style: none;
+}
+
+ul.inheritance li ul.inheritance {
+ margin-left: 15px;
+ padding-left: 15px;
+ padding-top: 1px;
+}
+
+ul.blockList,
+ul.blockListLast {
+ margin: 10px 0 10px 0;
+ padding: 0;
+}
+
+ul.blockList li.blockList,
+ul.blockListLast li.blockList {
+ list-style: none;
+ margin-bottom: 25px;
+}
+
+ul.blockList ul.blockList li.blockList,
+ul.blockList ul.blockListLast li.blockList {
+ padding: 0px 20px 5px 10px;
+ border: 1px solid #9eadc0;
+ background-color: #f9f9f9;
+}
+
+ul.blockList ul.blockList ul.blockList li.blockList,
+ul.blockList ul.blockList ul.blockListLast li.blockList {
+ padding: 0 0 5px 8px;
+ background-color: #ffffff;
+ border: 1px solid #9eadc0;
+ border-top: none;
+}
+
+ul.blockList ul.blockList ul.blockList ul.blockList li.blockList {
+ margin-left: 0;
+ padding-left: 0;
+ padding-bottom: 15px;
+ border: none;
+ border-bottom: 1px solid #9eadc0;
+}
+
+ul.blockList ul.blockList ul.blockList ul.blockList li.blockListLast {
+ list-style: none;
+ border-bottom: none;
+ padding-bottom: 0;
+}
+
+table tr td dl,
+table tr td dl dt,
+table tr td dl dd {
+ margin-top: 0;
+ margin-bottom: 1px;
+}
+/*
+Table styles
+*/
+.contentContainer table,
+.classUseContainer table,
+.constantValuesContainer table {
+ border-bottom: 1px solid #9eadc0;
+ width: 100%;
+}
+
+.contentContainer ul li table,
+.classUseContainer ul li table,
+.constantValuesContainer ul li table {
+ width: 100%;
+}
+
+.contentContainer .description table,
+.contentContainer .details table {
+ border-bottom: none;
+}
+
+.contentContainer ul li table th.colOne,
+.contentContainer ul li table th.colFirst,
+.contentContainer ul li table th.colLast,
+.classUseContainer ul li table th,
+.constantValuesContainer ul li table th,
+.contentContainer ul li table td.colOne,
+.contentContainer ul li table td.colFirst,
+.contentContainer ul li table td.colLast,
+.classUseContainer ul li table td,
+.constantValuesContainer ul li table td {
+ vertical-align: top;
+ padding-right: 20px;
+}
+
+.contentContainer ul li table th.colLast,
+.classUseContainer ul li table th.colLast,
+.constantValuesContainer ul li table th.colLast,
+.contentContainer ul li table td.colLast,
+.classUseContainer ul li table td.colLast,
+.constantValuesContainer ul li table td.colLast,
+.contentContainer ul li table th.colOne,
+.classUseContainer ul li table th.colOne,
+.contentContainer ul li table td.colOne,
+.classUseContainer ul li table td.colOne {
+ padding-right: 3px;
+}
+
+.overviewSummary caption,
+.packageSummary caption,
+.contentContainer ul.blockList li.blockList caption,
+.summary caption,
+.classUseContainer caption,
+.constantValuesContainer caption {
+ position: relative;
+ text-align: left;
+ background-repeat: no-repeat;
+ color: #ffffff;
+ font-weight: bold;
+ clear: none;
+ overflow: hidden;
+ padding: 0px;
+ margin: 0px;
+}
+
+caption a:link,
+caption a:hover,
+caption a:active,
+caption a:visited {
+ color: #ffffff;
+}
+
+.overviewSummary caption span,
+.packageSummary caption span,
+.contentContainer ul.blockList li.blockList caption span,
+.summary caption span,
+.classUseContainer caption span,
+.constantValuesContainer caption span {
+ white-space: nowrap;
+ padding-top: 8px;
+ padding-left: 8px;
+ display: block;
+ float: left;
+ background-image: url(resources/titlebar.gif);
+ height: 18px;
+}
+
+.overviewSummary .tabEnd,.packageSummary .tabEnd,
+.contentContainer ul.blockList li.blockList .tabEnd,
+.summary .tabEnd,
+.classUseContainer .tabEnd,
+.constantValuesContainer .tabEnd {
+ width: 10px;
+ background-image: url('data:image/gif;base64,R0lGODlhEwAoAOYAAAAAAP////CgOe6fON+VNfChOu+gOeKXNvGiO+2fOtqOML58Kr17Kr18Krt6Kbp6KbZ2KLZ3KNuPMdqOMdqPMcyFLsyGLsiDLcOALMB+K799K79+K758K7t6Krh3Kbh4KbZ3KdKKMNKLMM+IL8yGL8mELsiDLsiELsaCLcWBLcWCLcJ/LMKALLl4Krh4KtKLMc+JMOWYNuOXNt+UNdyRNNmPM9WNMvCgOuqcOOibOOaYN+aZN+WYN+KWNt2SNdqQNNmQNNWOM/GhO/CgO+2eOuyeOuucOeudOeqcOeeaOPOiPN2VP92XQd+bSOezd+i1evnt4Pvy6v///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAFIALAAAAAATACgAAAf/gBQTCoQUChSGgoVNT1EBSpCRkpNDOkxQBQUICEIFnZ6ZnJkFO04GBpk3BqqrpwWqAgUDS0UJtkW4ubUJuLZECjhIR0dGOMXGwcTGSEgUSTlJ0dLS0NE50BM7PNs82jve3NoxPBQ9Mj09B+no6ufq5j0SM/MzBPXz9vj3BBI0PjQAAwb8N5CGghoIa/xQiHBhwxpAgNSgYCOIRRsYM1YMojHIhBcvQogMCTJESZMiTE4YAaPliJcwWcJ4OXMEBQsVSOi0QMICT5w7dZJQYKLEiRMlippQajRpiQsnJKhAQTWFCqtXp6KwuhXFBBYYWIgdOzasWAwrMEzYoCFDhg1wruOyfbvhbQYKDRowYLCgQV+/efnmbcBBQocHDhw8ONyBMeLFDyJT+OD
iw4cWly1jroz5socJESJAgAAiQmnToUmHBgFicuXMnTdn9gxatOrTp1Wbbk1Z82zZsT+nvr06NW7erzHH7h18Qm/YvjlrFm67NG7jq5H7Xi6d9nDrxUUfd709+m/qo8GjFp+dPPTM3VugJ75eN2v3ys03/74+93hEiEwgSIAACijBIBQEAgA7');
+ background-repeat: no-repeat;
+ background-position: top right;
+ position: relative;
+ float: left;
+}
+
+ul.blockList ul.blockList li.blockList table {
+ margin: 0 0 12px 0px;
+ width: 100%;
+}
+
+.tableSubHeadingColor {
+ background-color: #EEEEFF;
+}
+
+.altColor {
+ background-color: #eeeeef;
+}
+
+.rowColor {
+ background-color: #ffffff;
+}
+
+.overviewSummary td,
+.packageSummary td,
+.contentContainer ul.blockList li.blockList td,
+.summary td,
+.classUseContainer td,.constantValuesContainer td {
+ text-align: left;
+ padding: 3px 3px 3px 7px;
+}
+
+th.colFirst,
+th.colLast,
+th.colOne,
+.constantValuesContainer th {
+ background: #dee3e9;
+ border-top: 1px solid #9eadc0;
+ border-bottom: 1px solid #9eadc0;
+ text-align: left;
+ padding: 3px 3px 3px 7px;
+}
+
+td.colOne a:link,
+td.colOne a:active,
+td.colOne a:visited,
+td.colOne a:hover,
+td.colFirst a:link,
+td.colFirst a:active,
+td.colFirst a:visited,
+td.colFirst a:hover,
+td.colLast a:link,
+td.colLast a:active,
+td.colLast a:visited,
+td.colLast a:hover,
+.constantValuesContainer td a:link,
+.constantValuesContainer td a:active,
+.constantValuesContainer td a:visited,
+.constantValuesContainer td a:hover {
+ font-weight: bold;
+}
+
+td.colFirst,
+th.colFirst {
+ border-left: 1px solid #9eadc0;
+ white-space: nowrap;
+}
+
+td.colLast,
+th.colLast {
+ border-right: 1px solid #9eadc0;
+}
+
+td.colOne,
+th.colOne {
+ border-right: 1px solid #9eadc0;
+ border-left: 1px solid #9eadc0;
+}
+
+table.overviewSummary {
+ padding: 0px;
+ margin-left: 0px;
+}
+
+table.overviewSummary td.colFirst,
+table.overviewSummary th.colFirst,
+table.overviewSummary td.colOne,
+table.overviewSummary th.colOne {
+ width: 25%;
+ vertical-align: middle;
+}
+
+table.packageSummary td.colFirst,
+table.overviewSummary th.colFirst {
+ width: 25%;
+ vertical-align: middle;
+}
+/*
+Content styles
+*/
+.description pre {
+ margin-top: 0;
+}
+
+.deprecatedContent {
+ margin: 0;
+ padding: 10px 0;
+}
+
+.docSummary {
+ padding: 0;
+}
+
+/*
+Formatting effect styles
+*/
+.sourceLineNo {
+ color: green;
+ padding: 0 30px 0 0;
+}
+
+h1.hidden {
+ visibility: hidden;
+ overflow: hidden;
+ font-size: .9em;
+}
+
+.block {
+ display: block;
+ margin: 0px;
+}
+
+.strong {
+ font-weight: bold;
+}
+
+/*--- Juno-specific styles --------------------------------------------------*/
+
+property {
+ font-size: 9pt;
+ font-family: monospace;
+ font-weight: bold;
+}
+
+/*--- Bordered code ---*/
+p.bcode {
+ font-size: 9pt;
+ white-space: pre;
+ border: 1px solid black;
+ margin: 0px 20px;
+ border-radius: 10px;
+ overflow: hidden;
+ font-family: monospace;
+ background-color: #f8f8f8;
+ border-color: #cccccc;
+ -moz-tab-size: 3;
+ tab-size: 3;
+ -o-tab-size: 3;
+}
+
+.fixedWidth {
+ max-width: 800px;
+}
+
+/* Override padding bottom in javadoc comments. */
+.blockList p.bcode {
+ padding-bottom: 0px !important;
+}
+
+/*--- Unbordered code ---*/
+p.code {
+ font-size: 9pt;
+ white-space: pre;
+ font-family: monospace;
+ padding-bottom: 15px;
+ margin: -15px;
+}
+
+td.code {
+ font-size: 9pt;
+ white-space: pre;
+ font-family: monospace;
+}
+
+table.code {
+ font-size: 9pt;
+ white-space: pre;
+ font-family: monospace;
+}
+
+/*--- Java code effects ---*/
+jc,jd,jt,jk,js,jf,jsf,jsm,ja {
+ font-size: 9pt;
+ white-space: pre;
+ font-family: monospace;
+}
+/* Comment */
+jc {
+ color: green;
+}
+/* Javadoc comment */
+jd {
+ color: #3f5fbf;
+}
+/* Javadoc tag */
+jt {
+ color: #7f9fbf;
+ font-weight: bold;
+}
+/* Primitive */
+jk {
+ color: #7f0055;
+ font-weight: bold;
+}
+/* String */
+js {
+ color: blue;
+}
+/* Field */
+jf {
+ color: blue;
+}
+/* Static field */
+jsf {
+ color: blue;
+ font-style: italic;
+}
+/* Static method */
+jsm {
+ font-style: italic;
+}
+/* Annotation */
+ja {
+ color: grey;
+}
+
+/*--- XML code effects ---*/
+xt,xa,xc,xs {
+ font-size: 9pt;
+ white-space: pre;
+ font-family: monospace;
+}
+
+xt {
+ color: DarkCyan;
+}
+
+xa {
+ color: purple;
+}
+
+xc {
+ color: mediumblue;
+}
+
+xs {
+ color: blue;
+ font-style: italic;
+}
+
+/*--- Override formatting on <table class='styled'> ---*/
+table.styled,.contentContainer .description table.styled,.contentContainer ul li table.styled,ul.blockList ul.blockList li.blockList table.styled
+ {
+ padding: 0px;
+ position: relative;
+ font-size: 1.1em;
+ width: auto;
+ border: 1px solid #9eadc0;
+ margin-left: 20px;
+ margin-right: 20px;
+ border-collapse: collapse;
+}
+
+table.styled th {
+ background-color: #dee3e9;
+ border: 1px solid #9eadc0;
+ padding: 3px 10px 3px 10px;
+}
+
+table.styled td {
+ padding: 3px;
+}
+
+table.styled ul {
+ padding: 0px 10px;
+}
+
+table.styled tr:nth-child(1) {
+ background-color: #dee3e9;
+}
+
+table.styled tr:nth-child(2n+2) {
+ background-color: #eeeeef;
+}
+
+table.styled tr:nth-child(2n+3) {
+ background-color: white;
+}
+
+/* Same as r1 except with a border on the bottom */
+table.styled tr.bb {
+ border-bottom: 1px solid #9eadc0
+}
+
+table.styled tr.light {
+ background-color: white !important;
+}
+
+table.styled tr.dark {
+ background-color: #eeeeef !important;
+}
+
+/*--- Juno topic headers ---*/
+h2.topic,
+h3.topic,
+h4.topic {
+ margin-bottom: 20px;
+ margin-top: 25px;
+ padding-top: 3px;
+ padding-left: 25px;
+ color: #2c4557;
+ border-top: 2px groove #9eadc0;
+ background-image: url('data:image/gif;base64,R0lGODlhEAAQAIQfACZJcSdKcjFTejVWfT5fhUFih0ZnjEhojUxskFFwk1Z0l1d1mFp4ml98nmaComiEpGuHpnKNq3SOrHiRroGZtYeeuJGmv5erwp+yx6O1yqm6zrDA0sTQ3s3X4+Dn7v///yH+EUNyZWF0ZWQgd2l0aCBHSU1QACH5BAEAAB8ALAAAAAAQABAAAAVk4CeOZGmWgmEQG/k0MHw4UY0gY1PvfG3kvaBhUqk4IMgkcuGrdJ7QaCfDiBgunKx2m1VYP5KNeEze0H4VjHrNVh9+HodlTq9bEr9PhMLv+ykOAyIaNEE8ACMFiouMigEnkJGQIQA7');
+ background-repeat: no-repeat;
+ background-position: left center;
+}
+
+h2.closed,
+h3.closed,
+h4.closed {
+ background-image: url('data:image/gif;base64,R0lGODlhEAAQAIQYADNVfDhagUNkiUZnjEhojUxskE9vklFwlFd1mF17nWJ/oGaCo2+KqXKNq3aQrX2WsoGZtYObtoeeuJKowJ2wxqm6zrbF1sTQ3v///////////////////////////////yH+EUNyZWF0ZWQgd2l0aCBHSU1QACH5BAEAAB8ALAAAAAAQABAAAAVi4CeOZGmST6EGpLK8cNHMi6GI8qzvcyEikqBwGByIIJekcpmEiByWqHQadYgYlax2m2WIFpSweBxeiBKTtHqdTvwi8LgcjhAdHPi8Hn8QERiAgYKABCIAAoiJiogAJ46PjiEAOw==') !important;
+}
+
+div.topic {
+ margin-left: 10px;
+}
+
+h5.topic,
+h6.topic {
+ margin-bottom: 10px;
+ margin-top: 20px;
+ color: #2c4557;
+ text-decoration: underline;
+}
+
+h6 {
+ margin: 10px 0px;
+}
+
+h6.figure {
+ color: #2c4557;
+ margin-left: 30px;
+ margin-right: 30px;
+ margin-top: 10px;
+ margin-bottom: 0px;
+ font-style: italic;
+}
+
+/*--- Override how Javadoc handles unordered lists inside .footer ---*/
+ul.normal {
+ margin-top: 0px;
+}
+
+ul.normal li {
+ font-size: 100%;
+ list-style: disc;
+}
+
+/*--- Bordered images ---*/
+.bordered {
+ border: 1px solid #cccccc;
+ margin: 0px 20px;
+ border-radius: 10px;
+}
+
+.padded {
+ padding-left: 20px;
+ padding-right: 20px;
+}
+
+/*--- Rows with bottom borders ---*/
+tr.borderbottom td {
+ border-bottom: 1px solid #9eadc0
+}
+
+/* Article links */
+a.doclink {
+ font-weight: bold;
+}
+
+.nomargin {
+ margin: 0px;
+}
+
+ol.toc,
+ul.toc,
+.toc ol,
+.toc ul {
+ background: #dee3e9;
+ margin: 0px;
+ padding: 0px;
+}
+
+ul.toc,
+.toc ul {
+ list-style: disc;
+}
+
+ol.toc p,
+ul.toc p,
+.toc ol p,
+.toc ul p,
+ol.toc div,
+ul.toc div,
+.toc ol div,
+.toc ul div {
+ color: #353833;
+ font: normal 1em Arial, Helvetica, sans-serif;
+ font-size: 1em;
+ padding-bottom: 5px;
+ margin: 0px;
+}
+
+.toc li {
+ background: #FFFFFF;
+ margin-left: 30px;
+ padding-left: 5px;
+}
+
+/* Linear gradients */
+
+/* Light-colored background headers */
+h5.toc,
+h6.toc,
+h2.title,
+div.docSummary > div.block,
+div.contentContainer > div.block > p:first-child {
+ background: linear-gradient(to bottom, #F5F5F5, #DEE3E9) repeat scroll 0% 0% transparent;
+ background: -moz-linear-gradient(to bottom, #F5F5F5, #DEE3E9) repeat scroll 0% 0% transparent;
+ background: -webkit-gradient(linear, left top, left bottom, from(#F5F5F5), to(#DEE3E9) );
+}
+
+/* Dark-colored background headers */
+div.header > div.subTitle > div.block,
+div.footer > div.subTitle > div.block > p:first-child,
+h1.title,
+div.contentContainer > h2:first-of-type,
+body > p:first-child {
+ background: linear-gradient(to bottom, #3B596D, #6289A3) repeat scroll 0% 0% transparent;
+ background: -moz-linear-gradient(to bottom, #3B596D, #6289A3) repeat scroll 0% 0% transparent;
+ background: -webkit-gradient(linear, left top, left bottom, from(#3B596D), to(#6289A3) );
+}
+
+/* Header styles */
+
+h5.toc,
+h6.toc {
+ color: #2C4557;
+ margin-bottom: 0px;
+ padding: 5px 30px;
+ border-radius: 15px 15px 15px 0px;
+ text-decoration: none;
+}
+
+/* Light-colored title on package summary pages */
+div.docSummary > div.block,
+div.contentContainer > div.block > p:first-child {
+ font-size: 1.2em;
+ font-weight: bold;
+ color: #2C4557;
+ margin-top: 0px;
+ margin-bottom: 0px;
+ padding: 5px 30px;
+ border-radius: 0px 0px 15px 15px;
+ text-decoration: none;
+}
+
+/* Dark-colored title on overview page */
+div.header > div.subTitle > div.block,
+div.footer > div.subTitle > div.block > p:first-child,
+body > p:first-child {
+ font-size: 1.2em;
+ font-weight: bold;
+ color: white;
+ margin-bottom: 0px;
+ padding: 5px 30px;
+ border-radius: 15px;
+ text-decoration: none;
+}
+
+/* Dark-colored package title on package summary pages */
+h1.title,
+div.contentContainer > h2:first-of-type {
+ font-size: 1.2em;
+ font-weight: bold;
+ color: white;
+ margin-bottom: 0px;
+ padding: 5px 30px;
+ border-radius: 15px 15px 0px 0px;
+ text-decoration: none;
+}
+
+/* Class titles */
+h2.title {
+ font-size: 1.2em;
+ font-weight: bold;
+ color: #2C4557;
+ margin-top: 0px;
+ margin-bottom: 0px;
+ padding: 5px 30px;
+ border-radius: 15px;
+ text-decoration: none;
+}
+
+
+.spaced-list li { padding:5px; }
+.footer .spaced-list ul { margin:0 }