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 [email protected] + */ +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,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'); + 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 }
