diff --git a/artemis-bom/pom.xml b/artemis-bom/pom.xml index 8682f52be70..ae5507232f5 100644 --- a/artemis-bom/pom.xml +++ b/artemis-bom/pom.xml @@ -179,9 +179,9 @@ org.apache.activemq - artemis-plugin + artemis-console-war war - ${project.version} + ${artemis-console-war-version} org.apache.activemq diff --git a/artemis-cli/src/main/java/org/apache/activemq/artemis/cli/commands/Upgrade.java b/artemis-cli/src/main/java/org/apache/activemq/artemis/cli/commands/Upgrade.java index 3f8aa97c4a8..d3a463dcd17 100644 --- a/artemis-cli/src/main/java/org/apache/activemq/artemis/cli/commands/Upgrade.java +++ b/artemis-cli/src/main/java/org/apache/activemq/artemis/cli/commands/Upgrade.java @@ -16,16 +16,20 @@ */ package org.apache.activemq.artemis.cli.commands; +import java.io.ByteArrayInputStream; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.io.PrintStream; +import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.StandardCopyOption; +import java.util.Collections; import java.util.HashMap; import java.util.Iterator; +import java.util.Map; import java.util.function.Consumer; import java.util.function.Function; import java.util.stream.Stream; @@ -36,8 +40,12 @@ @Command(name = "upgrade", description = "Update a broker instance to the current artemis.home, keeping all the data and broker.xml. Warning: backup your instance before using this command and compare the files.") public class Upgrade extends InstallAbstract { - // these are the JVM argumnents we must keep between upgrades - private static final String[] KEEPING_JVM_ARGUMENTS = new String[]{"-Xmx", "-Djava.security.auth.login.config", "-Dhawtio.role="}; + // These are the JVM arguments we must keep between upgrades + private static final String[] KEEPING_JVM_ARGUMENTS = new String[]{"-Xmx", "-Djava.security.auth.login.config", "-Dhawtio.roles="}; + + // These are the renamed JVM arguments we must keep between upgrades + // The keys MUST be one of the current KEEPING_JVM_ARGUMENTS args above, the values then being its old variant to be renamed. + private static final Map KEEPING_JVM_ARGUMENTS_ALTERNATES = Map.of("-Dhawtio.roles=", "-Dhawtio.role="); // this is the prefix where we can find the JDK arguments in Windows script private static final String JDK_PREFIX_WINDOWS = "IF \"%JAVA_ARGS%\"==\"\" (set JAVA_ARGS="; @@ -140,20 +148,22 @@ public Object run(ActionContext context) throws Exception { final File serviceXml = new File(bin, Create.ARTEMIS_SERVICE_XML); final File serviceXmlBkp = new File(binBkp, Create.ARTEMIS_SERVICE_XML); + Map keepPrefixAlternates = Map.of("-Dhawtio.roles=", "-Dhawtio.role="); + write(Create.BIN_ARTEMIS_SERVICE_XML, serviceXmlTmp, filters, false, false); - upgrade(context, serviceXmlTmp, serviceXml, serviceXmlBkp, + upgrade(context, serviceXmlTmp, serviceXml, serviceXmlBkp, keepPrefixAlternates, "", "-Xmx", "-Xmx", - "", "", "-Dhawtio.role="); + "", "", "-Dhawtio.roles="); final File artemisProfileCmdTmp = new File(tmp, Create.ETC_ARTEMIS_PROFILE_CMD); final File artemisProfileCmd = new File(etcFolder, Create.ETC_ARTEMIS_PROFILE_CMD); final File artemisProfileCmdBkp = new File(etcBkp, Create.ETC_ARTEMIS_PROFILE_CMD); write("etc/" + Create.ETC_ARTEMIS_PROFILE_CMD, artemisProfileCmdTmp, filters, false, false); - upgradeJDK(context, JDK_PREFIX_WINDOWS, "", KEEPING_JVM_ARGUMENTS, artemisProfileCmdTmp, artemisProfileCmd, artemisProfileCmdBkp, - "set ARTEMIS_INSTANCE=\"", "set ARTEMIS_DATA_DIR=", "set ARTEMIS_ETC_DIR=", "set ARTEMIS_OOME_DUMP=", "set ARTEMIS_INSTANCE_URI=", "set ARTEMIS_INSTANCE_ETC_URI="); + upgradeJDK(context, JDK_PREFIX_WINDOWS, "", KEEPING_JVM_ARGUMENTS_ALTERNATES, KEEPING_JVM_ARGUMENTS, artemisProfileCmdTmp, artemisProfileCmd, artemisProfileCmdBkp, + Collections.emptyMap(), "set ARTEMIS_INSTANCE=\"", "set ARTEMIS_DATA_DIR=", "set ARTEMIS_ETC_DIR=", "set ARTEMIS_OOME_DUMP=", "set ARTEMIS_INSTANCE_URI=", "set ARTEMIS_INSTANCE_ETC_URI="); } if (IS_NIX) { @@ -170,10 +180,12 @@ public Object run(ActionContext context) throws Exception { write(Create.BIN_ARTEMIS_SERVICE, artemisServiceTmp, filters, false, false); upgrade(context, artemisServiceTmp, artemisService, artemisServiceBkp); // we replace the whole thing + Map keepPrefixAlternates = Map.of("HAWTIO_ROLES=", "HAWTIO_ROLE="); + write("etc/" + Create.ETC_ARTEMIS_PROFILE, new File(tmp, Create.ETC_ARTEMIS_PROFILE), filters, false, false); - upgradeJDK(context, JDK_PREFIX_LINUX, "\"", KEEPING_JVM_ARGUMENTS, - new File(tmp, Create.ETC_ARTEMIS_PROFILE), new File(etcFolder, Create.ETC_ARTEMIS_PROFILE), new File(etcBkp, Create.ETC_ARTEMIS_PROFILE), "ARTEMIS_INSTANCE=", - "ARTEMIS_DATA_DIR=", "ARTEMIS_ETC_DIR=", "ARTEMIS_OOME_DUMP=", "ARTEMIS_INSTANCE_URI=", "ARTEMIS_INSTANCE_ETC_URI=", "HAWTIO_ROLE="); + upgradeJDK(context, JDK_PREFIX_LINUX, "\"", KEEPING_JVM_ARGUMENTS_ALTERNATES, KEEPING_JVM_ARGUMENTS, + new File(tmp, Create.ETC_ARTEMIS_PROFILE), new File(etcFolder, Create.ETC_ARTEMIS_PROFILE), new File(etcBkp, Create.ETC_ARTEMIS_PROFILE), keepPrefixAlternates, + "ARTEMIS_INSTANCE=", "ARTEMIS_DATA_DIR=", "ARTEMIS_ETC_DIR=", "ARTEMIS_OOME_DUMP=", "ARTEMIS_INSTANCE_URI=", "ARTEMIS_INSTANCE_ETC_URI=", "HAWTIO_ROLES="); } final File bootstrapXml = new File(etcFolder, Create.ETC_BOOTSTRAP_XML); @@ -187,6 +199,10 @@ public Object run(ActionContext context) throws Exception { "^(.*) keepArgumentAlternates, String[] keepArguments, File tmpFile, File targetFile, File bkpFile, Map keepPrefixAlternates, String... keepingPrefixes) throws Exception { final HashMap replaceMatrix = new HashMap<>(); final HashMap currentArguments = new HashMap<>(); @@ -230,12 +246,18 @@ private void upgradeJDK(ActionContext context, String jdkPrefix, String endOfLin doUpgrade(context, tmpFile, targetFile, bkpFile, oldLine -> { if (oldLine.trim().startsWith(jdkPrefix)) { - JVMArgumentParser.parseOriginalArgs(jdkPrefix, endOfLine, oldLine, keepArguments, currentArguments); + JVMArgumentParser.parseOriginalArgs(jdkPrefix, endOfLine, oldLine, keepArgumentAlternates, keepArguments, currentArguments); return; } else { for (String prefix : keepingPrefixes) { if (oldLine.trim().startsWith(prefix)) { replaceMatrix.put(prefix, oldLine); + } else if (keepPrefixAlternates.containsKey(prefix)) { + String oldPrefix = keepPrefixAlternates.get(prefix); + if (oldLine.trim().startsWith(oldPrefix)) { + String renamedOldLine = oldLine.replaceFirst(oldPrefix, prefix); + replaceMatrix.put(prefix, renamedOldLine); + } } } } @@ -270,6 +292,10 @@ private void replaceLines(ActionContext context, File tmpFile, File targetFile, } private void upgrade(ActionContext context, File tmpFile, File targetFile, File bkpFile, String... keepingPrefixes) throws Exception { + upgrade(context, tmpFile, targetFile, bkpFile, Collections.emptyMap(), keepingPrefixes); + } + + private void upgrade(ActionContext context, File tmpFile, File targetFile, File bkpFile, Map keepPrefixAlternates, String... keepingPrefixes) throws Exception { HashMap replaceMatrix = new HashMap<>(); doUpgrade(context, tmpFile, targetFile, bkpFile, @@ -278,6 +304,12 @@ private void upgrade(ActionContext context, File tmpFile, File targetFile, File for (String prefix : keepingPrefixes) { if (oldLine.trim().startsWith(prefix)) { replaceMatrix.put(prefix, oldLine); + } else if (keepPrefixAlternates.containsKey(prefix)) { + String oldPrefix = keepPrefixAlternates.get(prefix); + if (oldLine.trim().startsWith(oldPrefix)) { + String renamedOldLine = oldLine.replaceFirst(oldPrefix, prefix); + replaceMatrix.put(prefix, renamedOldLine); + } } } } @@ -361,4 +393,31 @@ protected File findBackup(ActionContext context) throws IOException { } throw new RuntimeException("Too many backup folders in place already. Please remove some of the old-config-bkp.* folders"); } + + private void removeWars(ActionContext context, File bootstrapXml) throws Exception { + StringBuilder sb = new StringBuilder(); + boolean remove = false; + try (Stream lines = Files.lines(bootstrapXml.toPath())) { + Iterator linesIterator = lines.iterator(); + while (linesIterator.hasNext()) { + String line = linesIterator.next(); + if (line.matches("^(.*) originalArgs) { + public static void parseOriginalArgs(String prefix, String endOfLine, String originalLine, Map keepPrefixAlternates, String[] keepingPrefixes, Map originalArgs) { originalLine = originalLine.trim(); String line = originalLine.substring(prefix.length(), originalLine.length() - endOfLine.length()); String[] split = line.split(" "); @@ -29,6 +29,12 @@ public static void parseOriginalArgs(String prefix, String endOfLine, String ori for (String k : keepingPrefixes) { if (s.startsWith(k)) { originalArgs.put(k, s); + } else if (keepPrefixAlternates.containsKey(k)) { + String oldKey = keepPrefixAlternates.get(k); + if (s.startsWith(oldKey)) { + String renamed = s.replaceFirst(oldKey, k); + originalArgs.put(k, renamed); + } } } } diff --git a/artemis-cli/src/main/resources/org/apache/activemq/artemis/cli/commands/bin/artemis b/artemis-cli/src/main/resources/org/apache/activemq/artemis/cli/commands/bin/artemis index 9143e172d94..c722b727ff1 100755 --- a/artemis-cli/src/main/resources/org/apache/activemq/artemis/cli/commands/bin/artemis +++ b/artemis-cli/src/main/resources/org/apache/activemq/artemis/cli/commands/bin/artemis @@ -44,7 +44,7 @@ if [ -z "$ARTEMIS_INSTANCE" ] ; then ARTEMIS_INSTANCE=`cd "$ARTEMIS_INSTANCE/.." && pwd` fi -HAWTIO_ROLE="NO_HAWTIO_ROLE" +HAWTIO_ROLES="NO_HAWTIO_ROLES" # Load Profile Data ARTEMIS_INSTANCE_ETC='${artemis.instance.etc}' @@ -102,7 +102,7 @@ fi exec "$JAVACMD" \ $JAVA_ARGS \ - -Dhawtio.role="$HAWTIO_ROLE" \ + -Dhawtio.roles="$HAWTIO_ROLES" \ -Djava.security.auth.login.config="$ARTEMIS_INSTANCE_ETC/login.config" \ $ARTEMIS_CLUSTER_PROPS \ -classpath "$CLASSPATH" \ diff --git a/artemis-cli/src/main/resources/org/apache/activemq/artemis/cli/commands/bin/artemis-service.xml b/artemis-cli/src/main/resources/org/apache/activemq/artemis/cli/commands/bin/artemis-service.xml index f7390552c57..22eeac6db34 100644 --- a/artemis-cli/src/main/resources/org/apache/activemq/artemis/cli/commands/bin/artemis-service.xml +++ b/artemis-cli/src/main/resources/org/apache/activemq/artemis/cli/commands/bin/artemis-service.xml @@ -54,7 +54,7 @@ -Dhawtio.disableProxy=true -Dhawtio.realm=activemq -Dhawtio.offline="true" - -Dhawtio.role=${role} + -Dhawtio.roles=${role} -Dhawtio.rolePrincipalClasses=org.apache.activemq.artemis.spi.core.security.jaas.RolePrincipal -Djolokia.policyLocation=%ARTEMIS_INSTANCE_ETC_URI%/jolokia-access.xml diff --git a/artemis-cli/src/main/resources/org/apache/activemq/artemis/cli/commands/etc/artemis.profile b/artemis-cli/src/main/resources/org/apache/activemq/artemis/cli/commands/etc/artemis.profile index 4e1c28dc37e..aa64723973e 100644 --- a/artemis-cli/src/main/resources/org/apache/activemq/artemis/cli/commands/etc/artemis.profile +++ b/artemis-cli/src/main/resources/org/apache/activemq/artemis/cli/commands/etc/artemis.profile @@ -31,9 +31,9 @@ ARTEMIS_INSTANCE_ETC_URI='${artemis.instance.etc.uri}' #ARTEMIS_CLUSTER_PROPS="-Dactivemq.remoting.default.port=61617 -Dactivemq.remoting.amqp.port=5673 -Dactivemq.remoting.stomp.port=61614 -Dactivemq.remoting.hornetq.port=5446" # Hawtio Properties -# HAWTIO_ROLE define the user role or roles required to be able to login to the console. Multiple roles to allow can +# HAWTIO_ROLES defines the user roles required to be able to login to the console. Multiple roles to allow can # be separated by a comma. Set to '*' or an empty value to disable role checking when Hawtio authenticates a user. -HAWTIO_ROLE='${role}' +HAWTIO_ROLES='${role}' # Java Opts if [ -z "$JAVA_ARGS" ]; then diff --git a/artemis-cli/src/main/resources/org/apache/activemq/artemis/cli/commands/etc/artemis.profile.cmd b/artemis-cli/src/main/resources/org/apache/activemq/artemis/cli/commands/etc/artemis.profile.cmd index 547666df371..c989e316716 100644 --- a/artemis-cli/src/main/resources/org/apache/activemq/artemis/cli/commands/etc/artemis.profile.cmd +++ b/artemis-cli/src/main/resources/org/apache/activemq/artemis/cli/commands/etc/artemis.profile.cmd @@ -33,7 +33,7 @@ rem Cluster Properties: Used to pass arguments to ActiveMQ Artemis which can be rem set ARTEMIS_CLUSTER_PROPS=-Dactivemq.remoting.default.port=61617 -Dactivemq.remoting.amqp.port=5673 -Dactivemq.remoting.stomp.port=61614 -Dactivemq.remoting.hornetq.port=5446 rem Java Opts -IF "%JAVA_ARGS%"=="" (set JAVA_ARGS=${java-opts} -XX:AutoBoxCacheMax=20000 -XX:+PrintClassHistogram -XX:+UseG1GC -XX:+UseStringDeduplication -Xms512M -Xmx${java-memory} -Djava.security.auth.login.config=%ARTEMIS_ETC_DIR%\login.config -Dhawtio.disableProxy=true -Dhawtio.offline=true -Dhawtio.realm=activemq -Dhawtio.role=${role} -Dhawtio.rolePrincipalClasses=org.apache.activemq.artemis.spi.core.security.jaas.RolePrincipal -Dhawtio.http.strictTransportSecurity=max-age=31536000;includeSubDomains;preload -Djolokia.policyLocation=%ARTEMIS_INSTANCE_ETC_URI%\jolokia-access.xml -Dartemis.instance=%ARTEMIS_INSTANCE% --add-opens java.base/jdk.internal.misc=ALL-UNNAMED -Dlog4j2.disableJmx=true) +IF "%JAVA_ARGS%"=="" (set JAVA_ARGS=${java-opts} -XX:AutoBoxCacheMax=20000 -XX:+PrintClassHistogram -XX:+UseG1GC -XX:+UseStringDeduplication -Xms512M -Xmx${java-memory} -Djava.security.auth.login.config=%ARTEMIS_ETC_DIR%\login.config -Dhawtio.disableProxy=true -Dhawtio.offline=true -Dhawtio.realm=activemq -Dhawtio.roles=${role} -Dhawtio.rolePrincipalClasses=org.apache.activemq.artemis.spi.core.security.jaas.RolePrincipal -Dhawtio.http.strictTransportSecurity=max-age=31536000;includeSubDomains;preload -Djolokia.policyLocation=%ARTEMIS_INSTANCE_ETC_URI%\jolokia-access.xml -Dartemis.instance=%ARTEMIS_INSTANCE% --add-opens java.base/jdk.internal.misc=ALL-UNNAMED -Dlog4j2.disableJmx=true) rem Logs Safepoints JVM pauses: Uncomment to enable them rem In addition to the traditional GC logs you could enable some JVM flags to know any meaningful and "hidden" pause that could diff --git a/artemis-cli/src/main/resources/org/apache/activemq/artemis/cli/commands/etc/bootstrap-web-settings.txt b/artemis-cli/src/main/resources/org/apache/activemq/artemis/cli/commands/etc/bootstrap-web-settings.txt index a564e3431da..c3b39903154 100644 --- a/artemis-cli/src/main/resources/org/apache/activemq/artemis/cli/commands/etc/bootstrap-web-settings.txt +++ b/artemis-cli/src/main/resources/org/apache/activemq/artemis/cli/commands/etc/bootstrap-web-settings.txt @@ -1,8 +1,6 @@ - - diff --git a/artemis-cli/src/test/java/org/apache/activemq/artemis/util/JVMArgumentTest.java b/artemis-cli/src/test/java/org/apache/activemq/artemis/util/JVMArgumentTest.java index 747aacae0c4..48a5ffafd93 100644 --- a/artemis-cli/src/test/java/org/apache/activemq/artemis/util/JVMArgumentTest.java +++ b/artemis-cli/src/test/java/org/apache/activemq/artemis/util/JVMArgumentTest.java @@ -21,55 +21,83 @@ import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertTrue; +import java.lang.invoke.MethodHandles; +import java.util.Collections; import java.util.HashMap; +import java.util.Map; import org.junit.jupiter.api.Test; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; public class JVMArgumentTest { + private static final Logger logger = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass()); + @Test public void testArgumentsWindows() { - String arguments = "IF \"%JAVA_ARGS%\"==\"\" (set JAVA_ARGS= -must-go -XX:AutoBoxCacheMax=20000 -XX:+PrintClassHistogram -XX:+UseG1GC -XX:+UseStringDeduplication -Xms333M -Xmx77G -Djava.security.auth.login.config=%ARTEMIS_ETC_DIR%\\login.config -Dhawtio.disableProxy=true -Dhawtio.offline=true -Dhawtio.realm=activemq -Dhawtio.role=amq -Dhawtio.rolePrincipalClasses=org.apache.activemq.artemis.spi.core.security.jaas.RolePrincipal -Djolokia.policyLocation=%ARTEMIS_INSTANCE_ETC_URI%\\jolokia-access.xml -Dartemis.instance=%ARTEMIS_INSTANCE%)"; + doArgumentsWindowsTestImpl(true); + } + + @Test + public void testArgumentsWindowsWithArgRenameRequired() { + doArgumentsWindowsTestImpl(false); + } + + private void doArgumentsWindowsTestImpl(boolean useNewArgPropName) { + final String arguments; + if (useNewArgPropName) { + // Uses new args prop -Dhawtio.roles= + arguments = "IF \"%JAVA_ARGS%\"==\"\" (set JAVA_ARGS= -must-go -XX:AutoBoxCacheMax=20000 -XX:+PrintClassHistogram -XX:+UseG1GC -XX:+UseStringDeduplication -Xms333M -Xmx77G -Djava.security.auth.login.config=%ARTEMIS_ETC_DIR%\\login.config -Dhawtio.disableProxy=true -Dhawtio.offline=true -Dhawtio.realm=activemq -Dhawtio.roles=amq -Dhawtio.rolePrincipalClasses=org.apache.activemq.artemis.spi.core.security.jaas.RolePrincipal -Dhawtio.http.strictTransportSecurity=max-age=31536000;includeSubDomains;preload -Djolokia.policyLocation=%ARTEMIS_INSTANCE_ETC_URI%\\jolokia-access.xml -Dartemis.instance=%ARTEMIS_INSTANCE% --add-opens java.base/jdk.internal.misc=ALL-UNNAMED -Dlog4j2.disableJmx=true)"; + } else { + // Uses old args prop -Dhawtio.role= + arguments = "IF \"%JAVA_ARGS%\"==\"\" (set JAVA_ARGS= -must-go -XX:AutoBoxCacheMax=20000 -XX:+PrintClassHistogram -XX:+UseG1GC -XX:+UseStringDeduplication -Xms333M -Xmx77G -Djava.security.auth.login.config=%ARTEMIS_ETC_DIR%\\login.config -Dhawtio.disableProxy=true -Dhawtio.offline=true -Dhawtio.realm=activemq -Dhawtio.role=amq -Dhawtio.rolePrincipalClasses=org.apache.activemq.artemis.spi.core.security.jaas.RolePrincipal -Dhawtio.http.strictTransportSecurity=max-age=31536000;includeSubDomains;preload -Djolokia.policyLocation=%ARTEMIS_INSTANCE_ETC_URI%\\jolokia-access.xml -Dartemis.instance=%ARTEMIS_INSTANCE% --add-opens java.base/jdk.internal.misc=ALL-UNNAMED -Dlog4j2.disableJmx=true)"; + } String prefix = "IF \"%JAVA_ARGS%\"==\"\" (set JAVA_ARGS= "; - String[] fixedArguments = new String[]{"-Xmx", "-Xms"}; + String[] fixedArguments = new String[]{"-Xmx", "-Xms", "-Dhawtio.roles="}; + Map keepArgumentsAlternates = Map.of("-Dhawtio.roles=", "-Dhawtio.role="); HashMap usedArgs = new HashMap<>(); - JVMArgumentParser.parseOriginalArgs(prefix, "\"", arguments, fixedArguments, usedArgs); - assertEquals(2, usedArgs.size()); + JVMArgumentParser.parseOriginalArgs(prefix, "\"", arguments, keepArgumentsAlternates, fixedArguments, usedArgs); + assertEquals(3, usedArgs.size()); assertEquals("-Xmx77G", usedArgs.get("-Xmx")); assertEquals("-Xms333M", usedArgs.get("-Xms")); + assertEquals("-Dhawtio.roles=amq", usedArgs.get("-Dhawtio.roles=")); - String newLine = "IF \"%JAVA_ARGS%\"==\"\" (set JAVA_ARGS= -XX:AutoBoxCacheMax=20000 -XX:+PrintClassHistogram -XX:+UseG1GC -XX:+UseStringDeduplication -Xms512M -Xmx1G -Djava.security.auth.login.config=%ARTEMIS_ETC_DIR%\\login.config -Dhawtio.disableProxy=true -Dhawtio.offline=true -Dhawtio.realm=activemq -Dhawtio.role=amq -Dhawtio.rolePrincipalClasses=org.apache.activemq.artemis.spi.core.security.jaas.RolePrincipal -Djolokia.policyLocation=%ARTEMIS_INSTANCE_ETC_URI%\\jolokia-access.xml -Dartemis.instance=%ARTEMIS_INSTANCE%)"; + String newLine = "IF \"%JAVA_ARGS%\"==\"\" (set JAVA_ARGS= -XX:AutoBoxCacheMax=20000 -XX:+PrintClassHistogram -XX:+UseG1GC -XX:+UseStringDeduplication -Xms512M -Xmx1G -Djava.security.auth.login.config=%ARTEMIS_ETC_DIR%\\login.config -Dhawtio.disableProxy=true -Dhawtio.offline=true -Dhawtio.realm=activemq -Dhawtio.roles=replaceThisRole -Dhawtio.rolePrincipalClasses=org.apache.activemq.artemis.spi.core.security.jaas.RolePrincipal -Djolokia.policyLocation=%ARTEMIS_INSTANCE_ETC_URI%\\jolokia-access.xml -Dartemis.instance=%ARTEMIS_INSTANCE%)"; String resultLine = JVMArgumentParser.parseNewLine(prefix, "\"", newLine, fixedArguments, usedArgs); - System.out.println("output::" + resultLine); + logger.info("output:: {}", resultLine); assertFalse(resultLine.contains("-must-go")); assertTrue(resultLine.contains("-Xmx77G")); assertTrue(resultLine.contains("-Xms333M")); + assertTrue(resultLine.contains("-Dhawtio.roles=amq")); assertFalse(resultLine.contains("-Xmx1G")); assertFalse(resultLine.contains("-Xmx512M")); + assertFalse(resultLine.contains("replaceThisRole")); + assertFalse(resultLine.contains("-Dhawtio.role=")); } @Test public void testArgumentsLinux() { - String arguments = " JAVA_ARGS=\"-must-go -XX:AutoBoxCacheMax=20000 -XX:+PrintClassHistogram -XX:+UseG1GC -XX:+UseStringDeduplication -Xms333M -Xmx77G -Dhawtio.disableProxy=true -Dhawtio.realm=activemq -Dhawtio.offline=true -Dhawtio.rolePrincipalClasses=org.apache.activemq.artemis.spi.core.security.jaas.RolePrincipal -Djolokia.policyLocation=${ARTEMIS_INSTANCE_ETC_URI}jolokia-access.xml \""; + String arguments = " JAVA_ARGS=\"-must-go -XX:AutoBoxCacheMax=20000 -XX:+PrintClassHistogram -XX:+UseG1GC -XX:+UseStringDeduplication -Xms333M -Xmx77G -Dhawtio.disableProxy=true -Dhawtio.realm=activemq -Dhawtio.offline=true -Dhawtio.rolePrincipalClasses=org.apache.activemq.artemis.spi.core.security.jaas.RolePrincipal -Dhawtio.http.strictTransportSecurity=max-age=31536000;includeSubDomains;preload -Djolokia.policyLocation=${ARTEMIS_INSTANCE_ETC_URI}jolokia-access.xml -Dlog4j2.disableJmx=true --add-opens java.base/jdk.internal.misc=ALL-UNNAMED \""; String prefix = "JAVA_ARGS="; String[] fixedArguments = new String[]{"-Xmx", "-Xms"}; HashMap usedArgs = new HashMap<>(); - JVMArgumentParser.parseOriginalArgs(prefix, "\"", arguments, fixedArguments, usedArgs); + JVMArgumentParser.parseOriginalArgs(prefix, "\"", arguments, Collections.emptyMap(), fixedArguments, usedArgs); assertEquals(2, usedArgs.size()); assertEquals("-Xmx77G", usedArgs.get("-Xmx")); assertEquals("-Xms333M", usedArgs.get("-Xms")); - String newLine = " JAVA_ARGS= -XX:AutoBoxCacheMax=20000 -XX:+PrintClassHistogram -XX:+UseG1GC -XX:+UseStringDeduplication -Xms512M -Xmx1G -Djava.security.auth.login.config=%ARTEMIS_ETC_DIR%\\login.config -Dhawtio.disableProxy=true -Dhawtio.offline=true -Dhawtio.realm=activemq -Dhawtio.role=amq -Dhawtio.rolePrincipalClasses=org.apache.activemq.artemis.spi.core.security.jaas.RolePrincipal -Djolokia.policyLocation=%ARTEMIS_INSTANCE_ETC_URI%\\jolokia-access.xml -Dartemis.instance=%ARTEMIS_INSTANCE%)"; + String newLine = " JAVA_ARGS=\"-XX:AutoBoxCacheMax=20000 -XX:+PrintClassHistogram -XX:+UseG1GC -XX:+UseStringDeduplication -Xms512M -Xmx1G -Dhawtio.disableProxy=true -Dhawtio.realm=activemq -Dhawtio.offline=true -Dhawtio.rolePrincipalClasses=org.apache.activemq.artemis.spi.core.security.jaas.RolePrincipal -Dhawtio.http.strictTransportSecurity=max-age=31536000;includeSubDomains;preload -Djolokia.policyLocation=${ARTEMIS_INSTANCE_ETC_URI}jolokia-access.xml -Dlog4j2.disableJmx=true --add-opens java.base/jdk.internal.misc=ALL-UNNAMED \""; String resultLine = JVMArgumentParser.parseNewLine(prefix, "\"", newLine, fixedArguments, usedArgs); diff --git a/artemis-hawtio/artemis-console/pom.xml b/artemis-console/pom.xml similarity index 86% rename from artemis-hawtio/artemis-console/pom.xml rename to artemis-console/pom.xml index 74209dfd0cc..ac2770d2c1c 100644 --- a/artemis-hawtio/artemis-console/pom.xml +++ b/artemis-console/pom.xml @@ -21,8 +21,9 @@ org.apache.activemq - artemis-hawtio-pom + artemis-pom 2.36.0 + ../artemis-pom/pom.xml artemis-console @@ -30,31 +31,20 @@ war - - ${project.basedir}/../.. - - org.eclipse.jetty.toolchain - jetty-servlet-api + jetty-jakarta-servlet-api provided - io.hawt - hawtio-war - ${hawtio.version} + org.apache.activemq + artemis-console-war war - - io.hawt - hawtio-core - ${hawtio.version} - provided - com.google.guava guava @@ -78,7 +68,10 @@ true **/lib/slf4j*.jar, - **/lib/log4j*.jar + **/lib/log4j*.jar, + **/lib/jolokia-service-discovery*.jar, + **/lib/jolokia-service-history*.jar, + **/lib/jolokia-service-notif*.jar false @@ -87,19 +80,16 @@ src/main/webapp **/*.svg + hawtconfig.json - io.hawt - hawtio-war + org.apache.activemq + artemis-console-war - hawtconfig.json - img/icons/**/* - img/**/* - fonts/glyphicons** WEB-INF/lib/guava*.jar WEB-INF/lib/checker-qual-*.jar WEB-INF/lib/error_prone_annotations-*.jar diff --git a/artemis-console/src/main/webapp/hawtconfig.json b/artemis-console/src/main/webapp/hawtconfig.json new file mode 100644 index 00000000000..7dec8a0e55b --- /dev/null +++ b/artemis-console/src/main/webapp/hawtconfig.json @@ -0,0 +1,25 @@ +{ + "branding": { + "appName": "Artemis Console", + "showAppName": false, + "appLogoUrl": "img/activemq.png", + "companyLogoUrl": "img/activemq.png", + "css": "css/activemq.css", + "favicon": "img/favicon.png" + }, + "login": { + "description": "Login page for Artemis Console.", + "links": [ + { "url": "https://activemq.apache.org/components/artemis/documentation/", "text": "Documentation" }, + { "url": "https://activemq.apache.org/", "text": "Website" } + ] + }, + "about": { + "title": "ActiveMQ Artemis Management Console", + "productInfo": [{"name": "Artemis", "value": "${project.version}"}], + "additionalInfo": "", + "copyright": " ", + "imgSrc": "img/activemq.png" + }, + "disabledRoutes": [] +} \ No newline at end of file diff --git a/artemis-hawtio/artemis-console/src/main/webapp/img/img_avatar.svg b/artemis-console/src/main/webapp/img/img_avatar.svg similarity index 100% rename from artemis-hawtio/artemis-console/src/main/webapp/img/img_avatar.svg rename to artemis-console/src/main/webapp/img/img_avatar.svg diff --git a/artemis-distribution/pom.xml b/artemis-distribution/pom.xml index 0d557728ce4..008751893df 100644 --- a/artemis-distribution/pom.xml +++ b/artemis-distribution/pom.xml @@ -117,16 +117,6 @@ artemis-console war - - org.apache.activemq - activemq-branding - war - - - org.apache.activemq - artemis-plugin - war - org.apache.activemq diff --git a/artemis-distribution/src/main/assembly/dep.xml b/artemis-distribution/src/main/assembly/dep.xml index 2681c7d7b21..c3b7ed43a34 100644 --- a/artemis-distribution/src/main/assembly/dep.xml +++ b/artemis-distribution/src/main/assembly/dep.xml @@ -42,8 +42,6 @@ org.apache.activemq:artemis-console:war - org.apache.activemq:activemq-branding:war - org.apache.activemq:artemis-plugin:war lib false @@ -79,28 +77,6 @@ 0755 0644 - - - org.apache.activemq:activemq-branding:war - - web - false - activemq-branding.war - false - 0755 - 0644 - - - - org.apache.activemq:artemis-plugin:war - - web - false - artemis-plugin.war - false - 0755 - 0644 - diff --git a/artemis-hawtio/activemq-branding/pom.xml b/artemis-hawtio/activemq-branding/pom.xml deleted file mode 100644 index 88164e91e19..00000000000 --- a/artemis-hawtio/activemq-branding/pom.xml +++ /dev/null @@ -1,270 +0,0 @@ - - - - - 4.0.0 - - - org.apache.activemq - artemis-hawtio-pom - 2.36.0 - - - activemq-branding - ActiveMQ Artemis HawtIO Branding - - Artemis branding plugin module for the HawtIO web console - - - war - - - ${project.basedir}/../.. - - - - /activemq-branding - - - ${project.artifactId} - - - - - - - javax.servlet, - *;resolution:=optional - - - ${project.artifactId}-${project.version} - ${basedir}/target/${webapp-dir} - ${basedir}/src/main/webapp/lib - ${webapp-outdir}/app/app.js - - - - - - - - io.hawt - hawtio-plugin-mbean - - - org.slf4j - slf4j-log4j12 - - - - - - - org.eclipse.jetty.toolchain - jetty-servlet-api - provided - - - - - org.slf4j - slf4j-api - provided - - - - - - - - - - src/main/resources - true - - **/*.xml - - - - - - - - - - maven-antrun-plugin - - - - - generate-sources - generate-sources - - run - - - - Building plugin javascript file list - - - - - - - - - Files: ${plugin-scripts} - - - - - true - - - - - - - maven-resources-plugin - - - - copy-resources - generate-sources - - resources - - - - - - - - org.apache.felix - maven-bundle-plugin - - - bundle-manifest - process-classes - - manifest - - - - - ${webapp-outdir}/META-INF - - jar - bundle - war - - - ${plugin-context} - ${plugin-context} - - WEB-INF/lib - *;scope=compile|runtime - true - - ${osgi.export} - ${osgi.import} - ${osgi.dynamic} - ${osgi.private.pkg} - - .,WEB-INF/classes - - ${project.name} - ${project.groupId}.${project.artifactId} - HawtIO - ${project.version} - - - - - - - org.apache.maven.plugins - maven-war-plugin - - @{artifactId}@-@{baseVersion}@@{dashClassifier?}@.@{extension}@ - **/classes/OSGI-INF/** - false - - ${webapp-outdir}/META-INF/MANIFEST.MF - - - - true - src/main/resources - - **/*.* - - - log4j.properties - - - - true - src/main/webapp - - **/*.* - - - log4j.properties - - - - - - - - - - - diff --git a/artemis-hawtio/activemq-branding/src/main/java/org/apache/activemq/hawtio/branding/PluginContextListener.java b/artemis-hawtio/activemq-branding/src/main/java/org/apache/activemq/hawtio/branding/PluginContextListener.java deleted file mode 100644 index ec4c06249d1..00000000000 --- a/artemis-hawtio/activemq-branding/src/main/java/org/apache/activemq/hawtio/branding/PluginContextListener.java +++ /dev/null @@ -1,72 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.apache.activemq.hawtio.branding; - -import io.hawt.web.plugin.HawtioPlugin; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import java.lang.invoke.MethodHandles; - -import javax.servlet.ServletContext; -import javax.servlet.ServletContextEvent; -import javax.servlet.ServletContextListener; - -/** - * The Plugin Context Listener used to load in the plugin - **/ -public class PluginContextListener implements ServletContextListener { - - private static final Logger logger = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass()); - - HawtioPlugin plugin = null; - - @Override - public void contextInitialized(ServletContextEvent servletContextEvent) { - - ServletContext context = servletContextEvent.getServletContext(); - - plugin = new HawtioPlugin(); - plugin.setContext(context.getContextPath()); - plugin.setName(context.getInitParameter("plugin-name")); - plugin.setScripts(context.getInitParameter("plugin-scripts")); - plugin.setDomain(null); - - try { - plugin.init(); - } catch (Exception e) { - throw createServletException(e); - } - - logger.info("Initialized {} plugin", plugin.getName()); - } - - @Override - public void contextDestroyed(ServletContextEvent servletContextEvent) { - try { - plugin.destroy(); - } catch (Exception e) { - throw createServletException(e); - } - - logger.info("Destroyed {} plugin", plugin.getName()); - } - - protected RuntimeException createServletException(Exception e) { - return new RuntimeException(e); - } - -} diff --git a/artemis-hawtio/activemq-branding/src/main/resources/WEB-INF/web.xml b/artemis-hawtio/activemq-branding/src/main/resources/WEB-INF/web.xml deleted file mode 100644 index 3fd8b746be6..00000000000 --- a/artemis-hawtio/activemq-branding/src/main/resources/WEB-INF/web.xml +++ /dev/null @@ -1,63 +0,0 @@ - - - - - ActiveMQ Artemis HawtIO branding plugin - activemq artemis hawt.io branding plugin - - - Plugin's path on the server - plugin-context - ${plugin-context} - - - - Plugin's path on the server - plugin-name - ${project.artifactId} - - - - Plugin's path on the server - plugin-domain - ${plugin-domain} - - - - Plugin's path on the server - plugin-scripts - ${plugin-scripts} - - - - Disable listing of directories and files - org.eclipse.jetty.servlet.Default.dirAllowed - false - - - - org.apache.activemq.hawtio.branding.PluginContextListener - - - - - diff --git a/artemis-hawtio/activemq-branding/src/main/webapp/index.html b/artemis-hawtio/activemq-branding/src/main/webapp/index.html deleted file mode 100644 index a9d6e10fc7e..00000000000 --- a/artemis-hawtio/activemq-branding/src/main/webapp/index.html +++ /dev/null @@ -1,27 +0,0 @@ - - - - - - hawtio-activemq-branding - - -

hawtio :: ActiveMQ Artemis Branding

- - diff --git a/artemis-hawtio/activemq-branding/src/main/webapp/plugin/css/activemq.css b/artemis-hawtio/activemq-branding/src/main/webapp/plugin/css/activemq.css deleted file mode 100644 index e9f8a8e0bda..00000000000 --- a/artemis-hawtio/activemq-branding/src/main/webapp/plugin/css/activemq.css +++ /dev/null @@ -1,2520 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* fonts */ - - -/* You can customise the styles of your application here. */ -@font-face { - font-family: 'PatternFlyIcons-webfont'; - src: url('../../../console/fonts/PatternFlyIcons-webfont.eot'), - url('../../../console/fonts/PatternFlyIcons-webfont.woff') format('woff'), - url('../../../console/fonts/PatternFlyIcons-webfont.ttf') format('truetype'), - url('../../../console/fonts/PatternFlyIcons-webfont.svg') format('svg'); - font-weight: normal; - font-style: normal; -} - -@font-face { - font-family: 'OpenSans'; - src: url('../../../console/fonts/OpenSans-Regular-webfont.eot'), - url('../../../console/fonts/OpenSans-Regular-webfont.woff') format('woff'), - url('../../../console/fonts/OpenSans-Regular-webfont.ttf') format('truetype'), - url('../../../console/fonts/OpenSans-Regular-webfont.svg') format('svg'); - font-weight: normal; - font-style: normal; -} - -/*Uses ActiveMQ colors in broker diagram*/ -svg text { - font-family: PatternFlyIcons-webfont; -} - -.pf-topology-svg g.ThisPrimaryBroker circle { - stroke: black; - fill: #c12766; -} - -.pf-topology-svg g.PrimaryBroker circle { - stroke: #801944; - fill: #c12766; -} - -.pf-topology-svg g.ThisBackupBroker circle { - stroke: black; - fill: #cf242a; -} - -.pf-topology-svg g.BackupBroker circle { - stroke: #82171b; - fill: #cf242a; -} - -.pf-topology-svg g.OtherBroker circle { - stroke: #82171b; -} - -.pf-topology-svg g.Address circle { - stroke: #2b326e; - fill: #3e489f; -} - -.pf-topology-svg g.Queue circle { - stroke: #50621d; - fill: #78932c; -} - -.pf-topology-svg g.InternalAddress circle { - stroke: #2b326e; -} - -.pf-topology-svg g.InternalQueue circle { - stroke: #50621d; -} - -/*Adds a border to top of page*/ -.pf-c-page__header { - border-top: 3px solid #B21054; -} - -/* Change the background image for Login page and About modal as well as text color etc*/ -.pf-c-login, .pf-c-about-modal-box__hero { - background-image: url("../img/login-screen-background.png"); - background-size: cover; - --pf-c-form__label--Color: white; -} - -.pf-c-login__main { - grid-area: main; - background-color: transparent; -} - -.pf-c-login__footer .pf-c-list a { - color: white; -} - -.pf-c-login__footer p { - font-size: 150%; -} - -.pf-c-login__main-body label { - color: white; -} - -.pf-c-login__main-header { - color: white; -} - -/*These change the color of the buttons*/ -.btn-link { - color: #B24E78; -} - -.pf-c-button.pf-m-primary { - background-color: #B24E78; -} - -.pf-c-button.pf-m-primary.pf-m-hover, .pf-c-button.pf-m-primary:hover { - background-color: #B24E78; - background-image: linear-gradient(to bottom,#B24E78 0,#B24E78 100%); - background: #B21054; - border-color: #B24E78; -} - -.pf-c-title.pf-m-3xl { - color: white; -} - -.btn-primary { - background-color: #B24E78; - background-image: linear-gradient(to bottom,#B24E78 0,#B24E78 100%); - background-repeat: repeat-x; - border-color: #B24E78; - color: #fff; -} -.btn-primary.active.focus, -.btn-primary.active:focus, -.btn-primary.active:hover, .btn-primary:active.focus, -.btn-primary:active:focus, -.btn-primary:active:hover, -.open .dropdown-toggle.btn-primary.focus, -.open .dropdown-toggle.btn-primary:focus, -.open .dropdown-toggle.btn-primary:hover { - background-color: #B24E78; - border-color: #B21054; -} - -/*These change the row ina table when hovered over*/ -.table-hover>tbody>tr:hover { - background-color: #B24E78; -} - -.table-hover>tbody>tr:hover td { - background-color: #B24E78; -} - -select>option:hover, -select>option:active { - background: #B24E78; - background-color: #B24E78; -} - -tbody>tr:hover { - background-color: #B24E78; -} - -/*This controls the color of the buttons when clicked, hovered or visited*/ -.btn-primary:hover, -.btn-primary.hover -.btn-primary:active, -.btn-primary.active, -.btn-primary:focus, -.btn-primary.focus, -.btn-primary:visited, -.btn-primary.visited{ - background-color: #B24E78; - background-image: linear-gradient(to bottom,#B24E78 0,#B24E78 100%); - background: #B21054; - border-color: #B24E78; -} - -/*This changes the color of the hover item in the JMX Tree*/ -.treeview-pf-hover .list-group-item:hover { - background-color: #B24E78!important; - border-color: #B24E78!important; -} - -/*This changes the color of the chosen selection in the JMX Tree*/ -.treeview-pf-select .list-group-item.node-selected { - background: #B24E78!important; - border-color: #B24E78!important; - color: #fff!important; -} - -/* This changes the color of the underline in the main left menuLeft hand menu tab underline*/ -.pf-c-nav__list .pf-m-current.pf-c-nav__link::after, .pf-c-nav__list .pf-m-current>.pf-c-nav__link::after { - background-color: #B24E78; -} - -.pf-c-nav__list .pf-c-nav__link.pf-m-hover::after, .pf-c-nav__list .pf-c-nav__link:hover::after { - background-color: #B24E78; -} - -.card-pf.card-pf-accented { - border-top-color: #B24E78; -} - -/*This changes the hover color in all the tables*/ -.table-hover tbody tr:hover td.focus { - background-color: #B24E78; -} - -/*This changes the color of the sort column header*/ -table.dataTable thead .sorting_asc, table.dataTable thead .sorting_desc { - color: #B24E78!important; - position: relative; -} - -/*This is the original css from HawtIO 1,leaving as is as somemay be used*/ -* { - font-family: "Open Sans"; -} - -body { - font-family: "Open Sans"; -} - -#log-panel-statements li { - font-family: DroidSansMonoRegular; -} - -#log-panel-statements li pre span { - font-family: DroidSansMonoRegular; -} - -div.log-stack-trace { - font-family: DroidSansMonoRegular; -} - -div.log-stack-trace p { - font-family: DroidSansMonoRegular; -} - -.log-stack-trace > dd > ul > li > .stack-line * { - font-family: DroidSansMonoRegular; -} - -pre.stack-line { - font-family: DroidSansMonoRegular; - font-size: 12px; -} - -div.stack-line { - font-family: DroidSansMonoRegular; - font-size: 12px; -} - -.log-table *:not('.icon*') { - font-family: DroidSansMonoRegular; -} - -.log-table > li > div > div { - font-family: DroidSansMonoRegular; -} - -fs-donut svg g text.units { - font-family: DroidSansMonoRegular; -} - -/* colors */ -#log-panel { - background: inherit; - background-color: none; - border: 1px solid #d4d4d4; - transition: bottom 1s ease-in-out; - box-shadow: 0 1px 10px rgba(0, 0, 0, 0.1); - opacity: 0.8; - border-bottom-left-radius: 4px; - border-bottom-right-radius: 4px; -} - -#log-panel #log-panel-statements { - background: #252525; -} - -#log-panel-statements li pre { - color: white; - background-color: inherit; - border: none; -} - -#log-panel-statements li:hover { - background: #111111; -} - -#log-panel-statements li.DEBUG { - color: dodgerblue; -} - -#log-panel-statements li.INFO { - color: white; -} - -#log-panel-statements li.WARN { - color: yellow; -} - -#log-panel-statements li.ERROR { - color: red; -} - -#log-panel #close { - background: #131313; - border-top: 1px solid #222222; - box-shadow: 0 1px 13px rgba(0, 0, 0, 0.1) inset; - color: #eeeeee; - border-bottom-left-radius: 4px; - border-bottom-right-radius: 4px; -} - -#log-panel #copy { - background: inherit; - color: white; -} - -ul.dynatree-container { - background: inherit; -} -ul.dynatree-container li { - background: inherit; -} - -.axis line { - stroke: #000; -} - -.axis.top { - border-bottom: 1px solid #d4d4d4; -} - -.axis.bottom { - border-top: 1px solid #d4d4d4; -} - -.horizon { - border-bottom: solid 1px #eeeeee; -} - -.horizon:last-child { - border-bottom: none; -} - -.horizon + .horizon { - border-top: none; -} - -.horizon .title, -.horizon .value { - text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); -} - -.line { - background: #000; - opacity: .2; -} - -.CodeMirror { - border: 1px solid #d4d4d4; -} - -i.expandable-indicator { - color: #666; -} - -span.dynatree-expander { - color: #728271; -} - -span.dynatree-icon { - color: #EECA7C; -} -span:not(.dynatree-has-children) .dynatree-icon:before { - color: gray; -} - -.table-hover tbody tr:hover td.details { - background-color: #ffffff; -} - -tr td.focus { - background-color: #d9edf7; -} - -.table-hover tbody tr:hover td.focus { - background-color: #d9edf7; -} - -.table-striped tbody tr:nth-child(odd) td.focus { - background-color: #d9edf7; -} -/* -.red { - color: red !important; -} - -.orange { - color: orange !important; -} - -.yellow { - color: yellow !important; -} - -.green { - color: green !important; -} - -.blue { - color: dodgerblue !important; -} -*/ - -.gridster ul#widgets .gs_w { - border: 1px solid #d4d4d4; - box-shadow: 0 1px 10px rgba(0, 0, 0, 0.1); - background: #ffffff; - border-radius: 6px; -} -.gridster ul#widgets .gs_w.dragging { - box-shadow: 0 1px 13px rgba(0, 0, 0, 0.12); -} -.gridster ul#widgets .preview-holder { - border-radius: 6px; - border: 1px solid #d4d4d4; - box-shadow: 0 1px 13px rgba(0, 0, 0, 0.1) inset; -} - -.widget-title { - background-color: #FAFAFA; - background-image: -moz-linear-gradient(top, #ffffff, #f2f2f2); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#f2f2f2)); - background-image: -webkit-linear-gradient(top, #ffffff, #f2f2f2); - background-image: -o-linear-gradient(top, #ffffff, #f2f2f2); - background-image: linear-gradient(to bottom, #ffffff, #f2f2f2); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFFFFF', endColorstr='#F2F2F2', GradientType=0); - border-bottom: 1px solid #d4d4d4; - color: #777777; - text-shadow: 0 1px 0 #FFFFFF; - border-top-left-radius: 5px; - border-top-right-radius: 5px; -} - -.widget-title:hover { - color: #333333; - text-shadow: 0 1px 0 #FFFFFF; - border-bottom: 1px solid #d4d4d4; - background-image: -moz-linear-gradient(top, #fafafa, #f0f0f0); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#fafafa), to(#f0f0f0)); - background-image: -webkit-linear-gradient(top, #fafafa, #f0f0f0); - background-image: -o-linear-gradient(top, #fafafa, #f0f0f0); - background-image: linear-gradient(to bottom, #fafafa, #f0f0f0); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fafafa', endColorstr='#f0f0f0', GradientType=0); -} - -.ep[ng-show=editing] { - background: white; - border-bottom: 1px solid #d4d4d4; - border: 1px solid #cecdcd; - box-shadow: 0 1px 10px rgba(0, 0, 0, 0.1); -} - -.ep > form > fieldset > input { - border: 0; -} - -.ngFooterPanel { - background: inherit; -} -.ngTopPanel { - background: inherit; -} -.ngGrid { - background: inherit; -} - -.ngCellText:hover i:before { - text-shadow: 0px 0px 8px #969696; -} - -.ACTIVE:before { - color: #777777; -} -.RESOLVED:before { - -} -.STARTING:before { - -} -.STARTING { - -} -.STOPPING:before { - -} -.STOPPING { - -} -.UNINSTALLED:before { - -} -.INSTALLED:before { - -} -.table-bordered { - border: none; - border-radius: 0px; -} -.table-bordered thead:first-child tr:first-child th:first-child, -.table-bordered tbody:first-child tr:first-child td:first-child { - border-radius: 0px; - border-left: none; -} -.table-bordered th { - border-bottom: 1px solid #d4d4d4; -} -.table-bordered th, -.table-bordered td { - border-left: none; - border-top: none; - border-right: 1px solid #d4d4d4; -} -.table-bordered th:last-child, -.table-bordered td:last-child { - border-left: none; - border-top: none; - border-right: none; -} -table.table thead .sorting { - background: inherit; -} -/* -table.table thead .sorting_asc:after { - background: url('../img/datatable/sort_asc.png') no-repeat top center; -} -table.table thead .sorting_desc:after { - background: url('../img/datatable/sort_desc.png') no-repeat top center; -} -*/ - -div#main div ul.nav { - border-radius: 0 0 4px 4px; - border: 1px solid #d4d4d4; - border-top: 1px transparent; - background-color: #FAFAFA; - background-image: linear-gradient(to bottom, #ffffff, #f2f2f2); - background-repeat: repeat-x; - box-shadow: 0 1px 10px rgba(0, 0, 0, 0.1); -} - -.navbar .btn-navbar span { - color: #777777; - text-shadow: 0 1px 0 #FFFFFF; -} - -div#main div ul.nav li.active a, div#main div ul.nav li.active span.a { - border: 1px; - border-radius: 2px; - background-color: #E5E5E5; - box-shadow: 0 3px 8px rgba(0, 0, 0, 0.125) inset; - text-shadow: 0 1px 0 #FFFFFF; -} - -div#main div ul.nav li.active a:hover, div#main div ul.nav li.active span.a:hover { - border: 1px; - border-radius: 2px; - background-color: #E5E5E5; - box-shadow: 0 3px 8px rgba(0, 0, 0, 0.125) inset; - text-shadow: 0 1px 0 #FFFFFF; -} - -div#main div ul.nav li a, div#main div ul.nav li span.a { - border: 1px; - border-radius: 2px; - background: inherit; - color: #777777; - text-shadow: 0 1px 0 #FFFFFF; -} - -div#main div ul.nav li div.separator { - padding: 6px 12px; - line-height: 20px; -} - -div#main div ul.nav li a:hover { - border: 1px; - border-radius: 2px; - background: inherit; - color: #333333; - text-shadow: 0 1px 0 #FFFFFF; -} - -#main div div div section .tabbable .nav.nav-tabs { - border-radius: 0 0 4px 4px; - border: 1px solid #d4d4d4; - border-top: 1px transparent; - background-color: #FAFAFA; - background-image: linear-gradient(to bottom, #ffffff, #f2f2f2); - background-repeat: repeat-x; - box-shadow: 0 1px 10px rgba(0, 0, 0, 0.1); -} - -#main div div div .nav.nav-tabs:not(.connected) { - border-radius: 4px; - border: 1px solid #d4d4d4; -} - -.logbar { - background: white; - border-bottom: 1px solid #d4d4d4; - box-shadow: 0 1px 10px rgba(0, 0, 0, 0.1); - border-bottom-left-radius: 5px; - border-bottom-right-radius: 5px; - border-left: 1px solid #d4d4d4; - border-right: 1px solid #d4d4d4; - top: 106px; -} - -.ui-resizable-se { - height: 10px; - width: 10px; - margin-right: 5px; - margin-bottom: 5px; - background: inherit; - box-shadow: -3px -3px 10px rgba(0, 0, 0, 0.1) inset; - font-size: 32px; - z-index: 50; - position: absolute; - display: block; - right: 0px; - bottom: 0px; - border-radius: 6px; - border: 1px solid #d4d4d4; - cursor: se-resize; -} - -.innerDetails { - box-shadow: 0 10px 10px -10px rgba(0, 0, 0, 0.1) inset; - border: 1px solid #d4d4d4; - display: none; - background: #ffffff; -} - -.odd { - background-color: #f9f9f9; -} - -#main .logbar[ng-controller='Wiki.NavBarController'] .wiki.logbar-container .nav.nav-tabs, -#main .logbar-wiki .wiki.logbar-container .nav.nav-tabs { - border: none; - border-radius: 0; - box-shadow: none; - background: inherit; -} - -.help-display img:not(.no-shadow) { - box-shadow: 2px 2px 10px rgba(0, 0, 0, 0.1); -} - -.text-shadowed { - text-shadow: 1px 1px rgba(0, 0, 0, 0.5); -} - -.bundle-item-details { - background: white; -} - -.bundle-item > a { - border-radius: 4px; - border: 1px solid #d4d4d4; - display: block; - box-shadow: 0 1px 10px rgba(0, 0, 0, 0.1); - background: #ffffff; - background: -moz-linear-gradient(top, #ffffff 0%, #ffffff 34%, #f4f4f4 76%); - background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #ffffff), color-stop(34%, #ffffff), color-stop(76%, #f4f4f4)); - background: -webkit-linear-gradient(top, #ffffff 0%, #ffffff 34%, #f4f4f4 76%); - background: -o-linear-gradient(top, #ffffff 0%, #ffffff 34%, #f4f4f4 76%); - background: -ms-linear-gradient(top, #ffffff 0%, #ffffff 34%, #f4f4f4 76%); - background: linear-gradient(to bottom, #ffffff 0%, #ffffff 34%, #f4f4f4 76%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#f4f4f4', GradientType=0); -} - -.bundle-item.in-selected-repository > a { - background: #ddeeff; - background: -moz-linear-gradient(top, #ddeeff 0%, #ddeeff 34%, #e3e3f4 76%); - background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #ddeeff), color-stop(34%, #ddeeff), color-stop(76%, #e3e3f4)); - background: -webkit-linear-gradient(top, #ddeeff 0%, #ddeeff 34%, #e3e3f4 76%); - background: -o-linear-gradient(top, #ddeeff 0%, #ddeeff 34%, #e3e3f4 76%); - background: -ms-linear-gradient(top, #ddeeff 0%, #ddeeff 34%, #e3e3f4 76%); - background: linear-gradient(to bottom, #ddeeff 0%, #ddeeff 34%, #e3e3f4 76%); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ddeeff', endColorstr='#e3e3f4', GradientType=0); -} - -.bundle-item > a:hover { - text-decoration: none; -} - -.bundle-item a span { - background: inherit; - border-radius: 4px; - border: 0px; - color: #404040; - text-shadow: none; -} - -.bundle-item a span.badge::before { - border-radius: 3px; - background: #737373; -} - -.bundle-item a span.badge-success::before { - background: #1cd11d; - box-shadow: inset 0px 1px 0px 0px rgba(250, 250, 250, 0.5), 0px 0px 4px 1px rgba(34, 203, 1, 0.49); -} - -.bundle-item a span.badge-inverse::before { - background: #737373; - box-shadow: inset 0px 1px 0px 0px rgba(250, 250, 250, 0.5); -} - -.bundle-item a span.badge-important::before { - background: #ee0002; - box-shadow: inset 0px 1px 0px 0px rgba(250, 250, 250, 0.5), 0px 0px 4px 1px rgba(195, 6, 0, 0.47); -} - -.bundle-item a span.badge-info::before { - background: #3a87ad; - box-shadow: inset 0px 1px 0px 0px rgba(250, 250, 250, 0.5), 0px 0px 4px 1px rgba(45, 105, 135, 0.47); -} - -.bundle-item a span.badge-warning::before { - background: #f89406; - box-shadow: inset 0px 1px 0px 0px rgba(250, 250, 250, 0.5), 0px 0px 4px 1px rgba(198, 118, 5, 0.47); -} - -.bundle-item a.toggle-action { - border-radius: 0; - border: none; - opacity: 0.2; - color: inherit; - box-shadow: none; -} - -.bundle-item a.toggle-action .icon-power-off { - color: orange; -} - -.bundle-item a.toggle-action .icon-play-circle { - color: green; -} - -div.hawtio-form-tabs div.tab-content { - border: 1px solid #d4d4d4; - border-radius: 4px; - box-shadow: 0 1px 10px rgba(0, 0, 0, 0.1); -} - -div.hawtio-form-tabs ul.nav-tabs { - border: none !important; - border-radius: 0 !important; - box-shadow: none !important; - background: inherit; - background-color: inherit !important; - background-image: inherit !important; - border-top: none !important; -} - -div.hawtio-form-tabs ul.nav-tabs li { - border: 1px solid #d4d4d4 !important; - border-top-left-radius: 4px; - border-top-right-radius: 4px; - background-color: inherit; - box-shadow: inset 0 -10px 10px -10px rgba(0, 0, 0, 0.08) !important; -} - -div.hawtio-form-tabs ul.nav-tabs li.active { - border-bottom: 1px solid white !important; - background-color: white; - box-shadow: 0 -10px 10px -10px rgba(0, 0, 0, 0.1) !important; -} - -div.hawtio-form-tabs ul.nav-tabs li.active a { - box-shadow: none !important; - text-shadow: none !important; - background-color: inherit !important; -} - - -.slideout { - box-shadow: 0 1px 10px rgba(0, 0, 0, 0.1); - border: 1px solid #d4d4d4; - background: white; -} - -.slideout > .slideout-content { - box-shadow: inset 0 1px 10px rgba(0, 0, 0, 0.1); - border: 1px solid white; - background: white; -} - -.slideout.right { - border-top-left-radius: 4px; - border-bottom-left-radius: 4px; -} - -.slideout.left { - border-top-right-radius: 4px; - border-bottom-right-radius: 4px; -} - -.slideout.left > .slideout-content { - border-top-right-radius: 4px; - border-bottom-right-radius: 4px; -} - -.slideout.right > .slideout-content { - border-top-left-radius: 4px; - border-bottom-left-radius: 4px; -} - -.slideout > .slideout-content > .slideout-body { - background: white; -} - -.slideout .slideout-title a { - color: #d4d4d4; -} - -.ngHeaderCell:last-child { - border-right: 1px solid rgba(0, 0, 0, 0) !important; -} - -.color-picker .wrapper { - border: 1px solid #d4d4d4; - border-radius: 4px; -} - -.selected-color { - width: 1em; - height: 1em; - border-radius: 4px; - padding: 4px; - box-shadow: 0 1px 10px rgba(0, 0, 0, 0.1); -} - -.color-picker-popout { - transition: opacity 0.25s ease-in-out; - background: white; - border-radius: 4px; - border: 1px solid rgba(0, 0, 0, 0); -} - -.popout-open { - border: 1px solid #d4d4d4; -} - -.color-picker div table tr td div { - border: 3px solid rgba(0, 0, 0, 0); - border-radius: 4px; - box-shadow: 0 1px 10px rgba(0, 0, 0, 0.1); -} - -.color-picker div table tr td div.color-picker-selected { - border-color: #474747; -} - -.clickable { - color: #787878; -} - -.canvas { - box-shadow: inset 0 0 10px rgba(0, 0, 0, 0); -} - -.container-group-header { - background: #fdfdfd; - border-bottom: 1px solid #d4d4d4; -} - -.box { - background: none repeat scroll 0 0 white; - border-top: 1px solid #d4d4d4; -} - -.container-group-header:not([style]) + div > .box { - border-top: 1px solid transparent; -} - -.selected, -.box.selected { - background-color: #AEAEAE !important; -} - -.box.selected .box-right i { - text-shadow: none; -} - -.box > .box-left > div { - border-radius: 4px; -} - -.section-header { - background: none; - background-color: transparent; - background-image: none; -} - -.section-header .dropdown-menu { - border-top: 1px solid #d4d4d4; - -} - -.section-controls > a, -.section-controls > span > span > span > span > span > .hawtio-dropdown { - color: #4d5258; -} - -.section-controls > a.nav-danger { - color: IndianRed !important; -} - -.section-controls > a.nav-danger:hover { - text-shadow: rgba(205, 92, 92, 0.6) 0 0 20px !important; -} - -td.deleting { - background-color: IndianRed !important; -} - -td.adding { - background-color: Aquamarine !important; -} - -.input-prepend .progress { - border-top-left-radius: 0px; - border-bottom-left-radius: 0px; -} - -/** highlight required fields which have no focus */ -input.ng-invalid, -textarea.ng-invalid, -select.ng-invalid { - border-color: #e5e971; - -webkit-box-shadow: 0 0 6px #eff898; - -moz-box-shadow: 0 0 6px #eff898; - box-shadow: 0 0 6px #eff898; -} - -/** Use bigger and darker border on checkboxes as its hard to see since they already have a shadow */ -input[type="checkbox"].ng-invalid { - -webkit-box-shadow: 0 0 12px #e5e971; - -moz-box-shadow: 0 0 12px #e5e971; - box-shadow: 0 0 12px #e5e971; -} - -.profile-details div .tab-pane ul li:nth-child(even):not(.add) { - background-color: #f3f3f3; -} - -.fabric-page-header { - border-bottom: 1px solid #d4d4d4; -} - -pre.stack-line { - color: #333333; - background: inherit; - border: none; - border-radius: 0; -} - -.directive-example { - border: 1px solid #d4d4d4; - border-radius: 4px; -} - -div#main div ul.nav li a.nav-primary.active { - color: rgba(255, 255, 255, 0.75); -} - -div#main div ul.nav li a.nav-primary { - color: #ffffff; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); - background-color: #006dcc; - background-image: -moz-linear-gradient(top, #0088cc, #0044cc); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0044cc)); - background-image: -webkit-linear-gradient(top, #0088cc, #0044cc); - background-image: -o-linear-gradient(top, #0088cc, #0044cc); - background-image: linear-gradient(to bottom, #0088cc, #0044cc); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0044cc', GradientType=0); - border-color: #0044cc #0044cc #002a80; - border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); - background-color: #0044cc; -} - -div#main div ul.nav li a.nav-primary:hover, -div#main div ul.nav li a.nav-primary:active, -div#main div ul.nav li a.nav-primary.active, -div#main div ul.nav li a.nav-primary.disabled, -div#main div ul.nav li a.nav-primary[disabled] { - color: #ffffff; - background-color: #0044cc; -} - -div#main div ul.nav li a.nav-primary:active, -div#main div ul.nav li a.nav-primary.active { - background-color: #003399 \9; -} - -div#main div ul.nav li a.nav-primary .caret { - border-top-color: #ffffff; - border-bottom-color: #ffffff; -} - -.main-nav-upper { - background-image: none; - background-color: white; -} - -.main-nav-upper .nav li a { - border-radius: 0; -} - -.file-list-toolbar .nav { - border: none !important; - border-bottom: 1px solid #d4d4d4 !important; - border-radius: 0 !important; - background: inherit !important; - box-shadow: none !important; -} - -.file-list-toolbar .nav li a { - background: inherit !important; -} - -.file-icon i.icon-folder-close { - color: #EECA7C; -} - -.status-icon { - color: inherit; -} - -.active-profile-icon { - color: green !important; -} - -.mq-profile-icon { - color: green !important; -} - -i.mq-master { - color: orange; -} - -.mq-broker-rectangle, .mq-container-rectangle { - - border-left-width: 10px; - border-right-width: 10px; - border-top-width: 10px; - - color: #333333; - text-shadow: 0 1px 1px rgba(255, 255, 255, 0.75); - background-color: #f5f5f5; - background-image: -moz-linear-gradient(top, #ffffff, #e6e6e6); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#e6e6e6)); - background-image: -webkit-linear-gradient(top, #ffffff, #e6e6e6); - background-image: -o-linear-gradient(top, #ffffff, #e6e6e6); - background-image: linear-gradient(to bottom, #ffffff, #e6e6e6); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe6e6e6', GradientType=0); - border-color: #e6e6e6 #e6e6e6 #bfbfbf; - border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); - *background-color: #e6e6e6; - /* Darken IE7 buttons by default so they stand out more given they won't have borders */ - - filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); - border: 1px solid #bbbbbb; - *border: 0; - border-bottom-color: #a2a2a2; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; - *margin-left: .3em; - -webkit-box-shadow: inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05); - -moz-box-shadow: inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05); - box-shadow: inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05); -} - -.mq-group-rectangle:nth-child(odd) .mq-group-rectangle-label { - background-color: #f3f3f3; -} - -.mq-group-rectangle-label { - border-radius: 4px; - background-color: #f9f9f9; - border: 1px solid #d4d4d4; - box-shadow: 0 1px 10px rgba(0, 0, 0, 0.1); -} - -.mq-profile-rectangle { - border: 1px solid #d4d4d4; - border-radius: 4px; - box-shadow: 0 1px 10px rgba(0, 0, 0, 0.1); -} - -.mq-container-rectangle { - border-radius: 4px; -} - -.mq-container-rectangle.master { - background-color: #DFFFB9; - background-image: -moz-linear-gradient(top, #efffdd, #CCFF99); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#efffdd), to(#CCFF99)); - background-image: -webkit-linear-gradient(top, #efffdd, #CCFF99); - background-image: -o-linear-gradient(top, #efffdd, #CCFF99); - background-image: linear-gradient(to bottom, #efffdd, #CCFF99); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffefffdd', endColorstr='#ffCCFF99', GradientType=0); - border-color: #CCFF99 #CCFF99 #CCFF99; - *background-color: #CCFF99; -} - -.mq-broker-rectangle { - background-color: #bbddff; - background-image: -moz-linear-gradient(top, #bbddff, #88bbdd); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#bbddff), to(#88bbdd)); - background-image: -webkit-linear-gradient(top, #bbddff, #88bbdd); - background-image: -o-linear-gradient(top, #bbddff, #88bbdd); - background-image: linear-gradient(to bottom, #bbddff, #88bbdd); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff88bbdd', GradientType=0); - border-color: #88bbdd #88bbdd #002a80; - *background-color: #88bbdd; -} - -a.dashboard-link { - color: black; -} - -.provision-list ul li:nth-child(even) { - background-color: #f3f3f3; -} - -.zebra-list > li:nth-child(even), -ol.zebra-list > li:nth-child(even):before { - background-color: #f3f3f3; -} - -.add-link { - background: white; - border-radius: 4px; - border: 1px solid #d4d4d4; -} - -.log-table > .table-row.selected:before { - color: green; -} - -.log-table > li:nth-child(odd) > div > div:not(.stack-line) { - background-color: white; -} - -.log-table > li:nth-child(even) > div > div:not(.stack-line) { - background-color: #f3f3f3; -} - -.log-table > li > div > div:nth-child(2) { - border-right: 1px solid #d4d4d4; -} - -.log-table > li > div > div:nth-child(3) { - border-right: 1px solid #d4d4d4; -} - -.log-table > li > div > div:nth-child(4) { - border-right: 1px solid #d4d4d4; -} - -.log-table > li > div > div:nth-child(6) { - background: white; -} - -.log-info-panel { - background: white; - border-radius: 4px; - border: 1px solid #d4d4d4; - box-shadow: 0 1px 10px rgba(0, 0, 0, 0.1); -} - -.log-info-panel > .log-info-panel-frame > .log-info-panel-header { - border-bottom: 1px solid #d4d4d4; -} - -.log-info-panel > .log-info-panel-frame > .log-info-panel-body > .row-fluid > span { - margin-right: 7px; - white-space: nowrap; -} - -.ex-node { - border-radius: 4px; - border: 1px solid #d4d4d4; - background: white; - box-shadow: 0 1px 10px rgba(0, 0, 0, 0.1); -} - -.dozer-mapping-node { - border: 1px solid #f3f3f3; - border-radius: 4px; - box-shadow: 0 1px 10px rgba(0, 0, 0, 0.1); -} - -.wiki-grid { - border-right: 1px solid #d4d4d4; -} - -.wiki-file-list-up { - color: black; -} - -.fabric-page-header.features { - margin-top: 10px; -} - -.profile-selector-name a:not(.profile-info) { - color: #333333; -} - -.profile-selector-name.abstract { - color: #888888; -} - -.file-name { - color: #333333; -} - -i.expandable-indicator.folder { - color: #EECA7C; -} - -.camel-canvas { - border: 1px solid #d4d4d4; - border-radius: 4px; - box-shadow: inset 0 1px 13px rgba(0, 0, 0, 0.1); - background-image: url('../img/img-noise-600x600.png') -} - -/* - * jquery.tocify.css 1.8.0 - * Author: @gregfranko - */ -/* The Table of Contents container element */ -.tocify { - /* top works for the wiki, may need customization - elsewhere */ - border: 1px solid #ccc; - webkit-border-radius: 6px; - moz-border-radius: 6px; - border-radius: 6px; - background-color: white; -} - -.tocify li a { - border-top: 1px solid rgba(0, 0, 0, 0); - border-bottom: 1px solid rgba(0, 0, 0, 0); -} - -.tocify li a:hover { - background-color: #FAFAFA; - border-top: 1px solid rgba(0, 0, 0, 0); - border-bottom: 1px solid rgba(0, 0, 0, 0); -} - -.tocify li a.active { - border-top: 1px solid #d4d4d4; - border-bottom: 1px solid #d4d4d4; - background-color: #FAFAFA; -} - -.health-displays .health-display { - border-radius: 4px; - border: 1px solid #d4d4d4; -} - -.health-details { - background: white; -} - -.health-status { - background: white; - border-bottom-left-radius: 4px; - border-bottom-right-radius: 4px; -} - -.health-message-wrap { - border-top: 1px solid #d4d4d4; -} - -.health-details-wrap dl { - border-bottom: 1px solid #f3f3f3; -} - -.health-details-wrap table tr { - border-bottom: 1px solid #f3f3f3; -} - -.health-display-title { - border-radius: 4px; - background-color: #eaeaea; - border: 1px solid #d3d3d3; -} - -.health-display-title.ok { - background-color: lightgreen; -} - -.health-display-title.warning { - background-color: darkorange; -} - -.toast.toast-warning * { - color: black; -} - -.hawtio-toc .panel-title { - border: 1px solid #d4d4d4; - border-radius: 4px; -} - -.hawtio-toc .panel-title a { - border-radius: 3px; - background: #cceeff; -} - -.camel-canvas-endpoint svg circle { - fill: #346789; -} - -tr.selected, -tr.selected .ngCell, -tr.selected .ngCellText i, -.table-striped tbody tr.selected:nth-child(odd) td { - background-color: #c9dde1; -} - -input.ng-invalid-pattern { - border-color: #e9322d; - -webkit-box-shadow: 0 0 6px #f8b9b7; - -moz-box-shadow: 0 0 6px #f8b9b7; - box-shadow: 0 0 6px #f8b9b7; -} - -input.ng-invalid-pattern:focus { - border-color: #e9322d; - -webkit-box-shadow: 0 0 6px #f8b9b7; - -moz-box-shadow: 0 0 6px #f8b9b7; - box-shadow: 0 0 6px #f8b9b7; -} - -.runnable { - color: green; -} - -.timed-waiting { - color: orange; -} - -.waiting, -.darkgray { - color: darkgray; -} - -.blocked { - color: red; -} - -strong.new, -.lightgreen { - color: lightgreen; -} - -.terminated, -.darkred { - color: darkred; -} - -.monitor-indicator { - border-radius: 6px; -} - -.monitor-indicator.true { - background: #1cd11d; - box-shadow: inset 0px 1px 0px 0px rgba(250, 250, 250, 0.5), 0px 0px 4px 1px rgba(34, 203, 1, 0.49); -} - -.monitor-indicator.false { - background: #737373; - box-shadow: inset 0px 1px 0px 0px rgba(250, 250, 250, 0.5); -} - -.table-header { - color: black; -} - -.table-header:hover { - background-color: #f3f3f3; -} - -.table-header.asc, -.table-header.desc { - background-color: #f3f3f3; -} - -.dropdown-menu { - border-radius: 0; -} - -.main-nav-upper .dropdown-menu { - border-radius: 0; -} - -.main-nav-lower .dropdown-menu { - border-top: none; -} - -.submenu-caret:before { - color: #53595f; -} - -.hawtio-dropdown > ul > li.item:hover { - text-decoration: none; - color: #ffffff; - background-color: #0081c2; - background-image: -moz-linear-gradient(top, #0088cc, #0077b3); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0077b3)); - background-image: -webkit-linear-gradient(top, #0088cc, #0077b3); - background-image: -o-linear-gradient(top, #0088cc, #0077b3); - background-image: linear-gradient(to bottom, #0088cc, #0077b3); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0077b3', GradientType=0); -} - -.hawtio-dropdown > ul > li:hover > span > ul.sub-menu > li { - color: #333333; -} - -.dropdown-menu .sub-menu { - border-top: 1px solid #d3d3d3; -} - -.caret:before { - color: #53595f; -} - -.hawtio-breadcrumb .caret { - border: 0; - width: 17px; - margin-right: 2px; - margin-left: 0; -} - -.hawtio-breadcrumb .caret:before { - color: rgba(255, 255, 255, 0.8); - text-shadow: 2px 0 2px rgba(0, 0, 0, 0.3); -} - -.component { - background-color: white; - color: black; -} - -.window, -.node > rect { - stroke-width: 2px; - stroke: #346789; - border: 2px solid #346789; - box-shadow: 2px 2px 19px #e0e0e0; - -o-box-shadow: 2px 2px 19px #e0e0e0; - -webkit-box-shadow: 2px 2px 19px #e0e0e0; - -moz-box-shadow: 2px 2px 19px #e0e0e0; - -moz-border-radius: 4px; - border-radius: 4px; -} - -.window-inner.from, -.node > .from { - background-color: lightsteelblue; - fill: lightsteelblue; -} - -.window-inner.choice, -.node > .choice { - background-color: lightblue; - fill: lightblue; -} - -.window-inner.when, -.node > .when { - background-color: lightgreen; - fill: lightgreen; -} - -.window-inner.otherwise, -.node > .otherwise { - background-color: lightgreen; - fill: lightgreen; -} - -.window-inner.to, -.node > .to { - background-color: lightsteelblue; - fill: lightsteelblue; -} - -.window-inner.log, -.node > .log { - background-color: lightcyan; - fill: lightcyan; -} - -.window-inner.setBody, -.node > .setBody { - background-color: #d3d3d3; - fill: #d3d3d3; -} - -.window-inner.onException, -.node > .onException { - background-color: lightpink; - fill: lightpink; -} - -.window-inner.delay, -.node > .delay { - background-color: lightgrey; - fill: lightgrey; -} - -.window-inner.bean, -.node > .bean { - background-color: mediumaquamarine; - fill: mediumaquamarine; -} - -.window:hover { - border-color: #5d94a6; - background-color: #ffffa0; -} - -.window.selected { - background-color: #f0f0a0; -} - -.window.selected > .window-inner { - background: inherit; -} - -img.nodeIcon:hover { - opacity: 0.6; - box-shadow: 2px 2px 19px #a0a0a0; - background-color: #a0a0a0; -} - -.hl { - border: 3px solid red; -} - -.discovery > li > div:last-child > div > i, -.discovery > li > .lock > i { - color: lightgreen; -} - -.discovery > li > .lock > i { - color: lightgrey; -} - -html, body { - font-size: 13.5px; -} - -small { - font-size: 11.5px; -} - -h1, h2, h3, h4, h5, h6 { - letter-spacing: -1px; - font-weight: normal; - font-family: "Overpass", sans-serif; -} - -.nav-tabs>li.active>a, .nav-tabs>li.active>a:focus, .nav-tabs>li.active>a:hover { - color: #B21054; - cursor: default; - background-color: #fff; - border: 1px solid #ddd; - border-bottom-color: transparent; -} - -table.jmx-attributes-table td { - color: #B21054; - overflow: hidden; - white-space: nowrap; - text-overflow: ellipsis; -} - -a { - color: #B21054; - text-decoration: none; -} - -a:hover { - text-decoration: underline; -} - -#tree-ctrl { - top: 0; -} - - -#main { - margin-top: 106px!important; -} - -#main-nav { - max-height: 106px !important; -} - -#main-nav .main-nav-upper .nav { - max-height: 106px !important; -} - -#main-nav .main-nav-upper .nav li { - max-height: 106px !important; -} - -#main-nav .main-nav-upper .nav li a { - max-height: 106px !important; -} - -#main-nav .main-nav-upper .nav li a i.fixme:before { - top: 0 !important; -} - - -#main-nav > .navbar-inner { - background-color: inherit; - background-image: linear-gradient(to bottom, #3f4349 0%, #464c51 100%); -} - -.navbar-inner { - height: auto; - min-height: 0; -} - -.main-nav-upper { - height: auto; - min-height: 0; -} - -#main-nav > .main-nav-upper { - filter: none; - border-top: 3px solid #B21054; - border-bottom: none; - height: 60px !important; - min-height: 60px !important; - box-shadow: none; -} - -#main-nav > .main-nav-lower { - border-top: 1px solid #53565b; - box-shadow: none; - background: #3f4349; - - background: -moz-linear-gradient(top, #3f4349 0%, #464c51 100%); - background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#3f4349), color-stop(100%,#464c51)); - background: -webkit-linear-gradient(top, #3f4349 0%,#464c51 100%); - background: -o-linear-gradient(top, #3f4349 0%,#464c51 100%); - background: -ms-linear-gradient(top, #3f4349 0%,#464c51 100%); - background: linear-gradient(to bottom, #3f4349 0%,#464c51 100%); - filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#3f4349', endColorstr='#464c51',GradientType=0 ); - - padding: 0px; - height: 42px; - max-height: 42px; - min-height: 42px; - border-bottom: none; - -} - -/* -.prefs > .row-fluid > .tabbable > .nav.nav-tabs { - margin-top: 0 !important; - border-radius: 0 !important; - border: none !important; - max-height: 45px !important; - min-height: 45px !important; - border-bottom: 1px solid #cecdcd !important; -} -*/ - -.prefs > .row-fluid > .tabbable > .nav.nav-tabs > li { - margin-bottom: 0px; - margin-top: 0px; padding-left: 20px; - padding-right: 20px; -} - -.prefs > .row-fluid > .tabbable > .nav.nav-tabs > li > a { - background-image: none; - background: #f6f6f6; - color: #4d5258; - border-radius: 0; - padding-left: 0px; - padding-right: 0px; - padding-top: 6px; - padding-bottom: 5px; -} - -.prefs > .row-fluid > .tabbable > .nav.nav-tabs > li.active a { - border: none; - border-bottom: 1px solid #B21054 !important; -} - -#main-nav > .navbar-inner.main-nav-upper > .container > .pull-left > .brand { - text-shadow: none; -} - -#main-nav > .navbar-inner.main-nav-lower .nav { - width: 100%; - float: none; - position: relative; - top: -1px; - height: 42px; - background: inherit; - background-color: inherit; - background-image: inherit; - background-image: linear-gradient(to bottom, #474d52, #3f4349 100%); - border-top: 1px solid #565b60; -} - -.main-nav-lower > .container > ul > .dropdown.overflow { - margin-right: 0; -} - -@media (max-width: 767px) { - .navbar .container { - margin-left: 10px; - margin-right: 10px; - } - - .main-nav-lower > .container > ul > .dropdown.overflow { - margin-right: 45px; - } - -} - -.main-nav-lower > .container { - padding-left: 0 !important; - padding-right: 0 !important; -} - -#main-nav > .main-nav-lower > .container .nav > li.overflow > ul > li > a { - font-weight: normal; - color: #4D5258; -} - -#main-nav > .main-nav-lower .nav > li.overflow.open > a { - color: #ffffff; - text-shadow: none; - border-top: 1px solid #949699; - background-color: inherit; - background-image: linear-gradient(to bottom, #72757a 0%, #64686C 100%); - font-weight: bold; - border-bottom: none; -} - -.dropdown-menu { - border-radius: 0; -} - -#main-nav > .navbar-inner .nav > li > a { - margin-top: -1px; - border-top: 1px solid #53565B; - color: #ffffff; - text-shadow: none; - height: 32px; - padding-bottom: 0; -} - -#main-nav > .navbar-inner .nav > li:hover > a { - color: #ffffff; - border-top: 1px solid #949699; - text-shadow: 1px 0 0 white; - background-color: inherit; - background-image: linear-gradient(to bottom, #5c6165, #4b5053 100%); -} - - -#main-nav .navbar-inner .nav li.active a { - color: #ffffff; - text-shadow: none; - border-top: 1px solid #949699; - background-color: inherit; - background-image: linear-gradient(to bottom, #72757a 0%, #64686C 100%); - font-weight: bold; -} - -#main-nav .navbar-inner.main-nav-upper .nav { - -} - -#main-nav .navbar-inner.main-nav-upper .nav > li { - height: 60px; - border-left: 1px solid #585b5e; -} - -#main-nav .navbar-inner.main-nav-upper .nav > li > a { - position: relative; - top: 1px; - padding-top: 1px; - border-radius: 0; - border: none; - height: 60px; - max-height: 60px; - color: #ffffff; -} - -#main-nav .navbar-inner.main-nav-upper .nav > li:hover a { - color: #ffffff; - text-shadow: none; -} - -#main-nav .navbar-inner.main-nav-upper .nav li a i:before { - position: relative; - top: 2px; -} - -#main-nav .navbar-inner.main-nav-upper .nav li.dropdown a.dropdown-toggle span:not(.caret) { - display: inline-block; - margin-top: 2px; -} - -#main-nav .navbar-inner.main-nav-upper .nav li.dropdown a.dropdown-toggle span.caret { - margin-top: 10px; - margin-left: 1px; -} - -#main-nav .main-nav-upper .nav li.dropdown.open a.dropdown-toggle { - color: #ffffff !important; - text-shadow: none; - background-color: inherit; - background-image: linear-gradient(to bottom, #72757a 0%, #64686C 100%); - border-bottom-color: inherit !important; -} - -#main-nav .main-nav-upper .nav li.dropdown .dropdown-menu li { - border: none !important; -} - -#main-nav .main-nav-upper .nav li.dropdown .dropdown-menu li a { - color: #4D5258; - border: none !important; - padding-top: 2px !important; - height: 22px; -} - -#main-nav .main-nav-upper .nav li.dropdown .dropdown-menu li:hover a { - border: none; - color: white; -} - -#main-nav .navbar-inner.main-nav-upper .nav li.active a { - border-top: none; - color: #ffffff -} - -.navbar .nav > li > .dropdown-menu:before { - display: none; -} - -.navbar .nav > li > .dropdown-menu:after { - display: none; -} - -#main.container-fluid { - padding-left: 0; - padding-right: 0; -} - -#main.container-fluid div .nav { - background-image: none; - background: #f6f6f6; - border-radius: 0; - line-height: 18px; - padding: 0; - max-height: 31px; - min-height: 31px; - border-top: none; - border-bottom: 1px solid #cecdcd; -} - -#main.container-fluid div .nav li { - margin-bottom: 0; - margin-top: 0; - padding-left: 0; - padding-right: 0; -} - -#main.container-fluid div .nav li a { - background-image: none; - background: #f6f6f6; - color: #4d5258; - border-radius: 0; - border: 1px solid inherit; - padding: 6px 20px 5px 20px; -} - -#main.container-fluid div .nav li a:hover { - border-radius: 0; - padding-top: 6px; - padding-bottom: 5px; -} - -#main.container-fluid div .nav li.overflow a:hover { - background-image: none; - background-color: #B21054; - color: #4d5258 -} - - - -div#main div ul.nav li a:hover[disabled] { - border: 1px; - border-radius: 2px; - background: inherit; - color: #4d5258; - cursor: default; -} - -#main.container-fluid div .nav li.active a { - border-radius: 0; - background-color: inherit; - background-image: none; - color: #B21054; - box-shadow: none; - border-bottom: 1px solid #B21054; -} - -#main.container-fluid div .nav li.active a:hover { - border-radius: 0; - background-color: inherit; - background-image: none; - color: #B21054; - box-shadow: none; - border-bottom: 1px solid #B21054; - padding-top: 6px; - padding-bottom: 5px; -} - -/* -div[ng-include][src='viewPartial'] .row-fluid { - padding-left: 10px; - padding-right: 10px; - width: auto; -} -*/ - -.nav li a { - cursor: pointer; -} - - -select, textarea, input[type="text"], input[type="password"], input[type="datetime"], input[type="datetime-local"], input[type="date"], input[type="month"], input[type="time"], input[type="week"], input[type="number"], input[type="email"], input[type="url"], input[type="search"], input[type="tel"], input[type="color"], .uneditable-input { - font-size: 13.5px; - border-radius: 0; - /* - color: #555555; - display: inline-block; - font-size: 14px; - height: 20px; - line-height: 20px; - margin-bottom: 10px; - padding: 4px 6px; - vertical-align: middle; - */ -} - -.dropdown-menu li > a:hover, -.dropdown-menu li > a:focus, -.dropdown-submenu:hover > a { - color: #ffffff; - text-decoration: none; - background-color: #B26182; - background-image: -moz-linear-gradient(top, #B26182, #B2577A); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#B26182), to(#B2577A)); - background-image: -webkit-linear-gradient(top, #B26182, #B2577A); - background-image: -o-linear-gradient(top, #B26182, #B2577A); - background-image: linear-gradient(to bottom, #B26182, #B2577A); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#B26182', endColorstr='#B2577A', GradientType=0); -} - -.dropdown-menu .active > a, -.dropdown-menu .active > a:hover { - color: #333333; - text-decoration: none; - background-color: #B26182; - background-image: -moz-linear-gradient(top, #B26182, #B2577A); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#B26182), to(#B2577A)); - background-image: -webkit-linear-gradient(top, #B26182, #B2577A); - background-image: -o-linear-gradient(top, #B26182, #B2577A); - background-image: linear-gradient(to bottom, #B26182, #B2577A); - background-repeat: repeat-x; - outline: 0; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#B26182', endColorstr='#B2577A', GradientType=0); -} - -.logbar { - width: 100%; - left: 0; - background: inherit !important; - border-bottom: none !important; - box-shadow: none; - border-left: none; - border-right: none; - border-bottom-left-radius: 0; - border-bottom-right-radius: 0; - padding-left: 0; - padding-right: 0; -} - -.logbar-container > .control-group { - margin-bottom: 0; -} - -.logbar-container > .control-group:first-child { - padding-left: 20px; -} - -.logbar-container > .control-group:last-child { - padding-right: 20px; -} - -.logbar-container { - margin-top: 4px; - margin-bottom: 4px; -} - -.threads.logbar { - background-color: #F6F6F6 !important; - border-bottom: 1px solid #CECDCD !important; -} - -.threads.logbar > .logbar-container { - margin-bottom: 2px; -} - -.threads.logbar > .logbar-container > .state-panel { - margin-left: 10px; - margin-top: 2px; -} - -.threads.logbar > .logbar-container > .support-panel { - margin-right: 10px; -} - -.wiki.logbar-container { - margin-top: 0; - margin-bottom: 0; -} - -.wiki.logbar-container > .nav.nav-tabs { - background-color: #F6F6F6 !important; - border-bottom: 1px solid #CECDCD !important; - border-radius: 0 !important; - border-top: 0 !important; - border-left: 0 !important; - border-right: 0 !important; - margin-top: 0 !important; -} - -div#main div ul.nav li a.nav-primary:hover, div#main div ul.nav li a.nav-primary:active, div#main div ul.nav li a.nav-primary.active, div#main div ul.nav li a.nav-primary.disabled, div#main div ul.nav li a.nav-primary[disabled] { - background-color: inherit; - color: #0044CC; -} - -div#main div ul.nav li a.nav-primary { - background-color: inherit; - background-image: inherit; - background-repeat: repeat-x; - border-color: inherit; - color: #0044CC; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); -} - -.nav.help-sidebar { - /* - background: none; - border-bottom: 0; - */ - max-height: inherit !important; - position: relative; - left: -10px; -} - -.nav.help-sidebar li:first-child { - padding-top: 3px; -} - -.nav-tabs .dropdown-menu { - border-radius: 0; -} - -.perspective-selector { - border-right: 1px solid #65696e; - background-color: inherit; -} - -.perspective-selector:hover > a { - border-top: 1px solid #65696e; -} - -.perspective-selector > a { - border-top: 1px solid #64696d !important; - background-image: linear-gradient(to bottom, #585d62 0%, #4e5257 100%); -} - -#main-nav .dropdown-toggle > .caret:before { - color: white; -} - -#main-nav li.dropdown.open > a.dropdown-toggle { - border-bottom: 1px solid #585b60; -} - -#main-nav .dropdown.open, -li.dropdown.open > a.dropdown-toggle { - color: white; - border-bottom: none; - background-color: inherit; - background-image: linear-gradient(to bottom, #72757a 0%, #64686C 100%); - text-shadow: 1px 0 0 white; - -} - -.dropdown-menu { - border: 1px solid #b6b6b6; - border-top: 0; - margin-top: 0; - padding: 0; - background-color: white; -} - -.dropdown-menu > .divider { - margin: 0 !important; - border: 0; - color: #E5E5E5; -} - -.dropdown-menu > li > a { - background: inherit; - text-shadow: none; - line-height: 22px; - font-size: 14px; - border: 0 !important; - padding: 0 !important; - max-height: 22px; -} - -.dropdown-menu > li:hover { - color: #ffffff !important; - border-top: 1px solid #B24E78; - background-color: #B2577A !important; - background-image: linear-gradient(to bottom, #B2577A 0%, #B26182 100%) !important; - cursor: pointer; -} - -.dropdown-menu > li:hover > span > ul.sub-menu > li { - color: #333333 !important; -} - -.dropdown-menu > li:hover > span > ul.sub-menu > li:hover { - color: #ffffff !important; -} - -.ngRow:hover { - background-color: lightyellow; -} - -.ngRow.selected { - color: #ffffff !important; - background-color: #B21054 !important; - border-bottom: 1px solid #d4d4d4; -} - -.ngRow.selected .ngCell { - color: #ffffff !important; - background-color: #B21054 !important; - border-bottom: 1px solid #d4d4d4; -} - -.ngRow.selected .ngCellText i { - color: #ffffff !important; - background-color: #B21054 !important; -} - -.dropdown-menu > .divider:hover { - border-top: 0; - background-image: none !important; -} - -.dropdown-menu > li:hover > a { - color: white !important; - text-shadow: 0px 0px 1px white; -} - -.dropdown-menu > li { - padding-left: 10px !important; - padding-right: 10px !important; - line-height: 60px !important; - border-top: none; - max-height: 60px; -} - -li.dropdown.open > a.dropdown-toggle { - color: #B21054; - border-bottom: 1px solid #B21054; -} - -.main-nav-upper .container .pull-right .nav.nav-tabs .dropdown .caret:before { - color: white !important; -} - -.wiki > ul > li[ng-repeat='link in breadcrumbs']:first-child { - padding-left: 20px !important; -} - -.wiki > ul > li[ng-repeat='link in breadcrumbs'] { - padding-left: 5px !important; - padding-right: 5px !important; - white-space: nowrap; -} - -.wiki > ul > li[ng-repeat='link in breadcrumbs'] a { - display: inline-block; -} - -.wiki > ul > li[ng-repeat='link in breadcrumbs']:after { - position: relative; - top: 1px; - content: '/'; -} - -.wiki > ul > li[ng-repeat='link in breadcrumbs'].active:after { - content: ''; -} - -.wiki > ul > li.pull-right.dropdown { - padding-right: 20px; -} - -.tabbable > .nav-tabs { - min-height: inherit !important; - max-height: inherit !important; -} - -.tabbable li a { - background-color: inherit !important; -} - -.tabbable li.active a { - border-bottom: 0 !important; -} - -.no-bottom-margin .control-group { - margin-bottom: 10px; -} - -div.hawtio-form-tabs ul.nav-tabs li:first-child { - margin-left: 3px; -} - -div.hawtio-form-tabs ul.nav-tabs li.active:first-child { - margin-left: 3px; -} - -.instance-name { - border-top-left-radius: 0; - padding: 0; - padding-left: 3px; - padding-top: 3px; - box-shadow: none; -} - -ng-include[src="'app/jmx/html/subLevelTabs.html'"] .nav.nav-tabs { - border-radius: 0 !important; - margin-top: 0 !important; -} - -div.wiki-fixed[ng-controller] .row-fluid .span12 .nav.nav-tabs { - border-radius: 0 !important; - margin-top: 0 !important; - border: none !important; - box-shadow: none !important; - background: inherit !important; - border-bottom: 1px solid #cecdcd !important; - position: relative; - top: -8px; - margin-bottom: 0 !important; -} - -div.wiki-fixed[ng-controller] .row-fluid .span12 .nav.nav-tabs li a { - background: inherit !important; -} - -.controller-section { - padding-left: 20px; - padding-right: 20px; -} - -@media(max-width: 849px) { - .controller-section { - padding-left: 5px; - padding-right: 5px; - } - -} - -#jmxtree { - margin-left: 20px; -} - -#activemqtree { - margin-left: 20px; -} - -#cameltree { - margin-left: 20px; -} - -.span9 #properties { - margin-right: 20px; -} - -.wiki-fixed { - margin-left: 20px; - margin-right: 20px; -} - -.CodeMirror * { - font-family: monospace; -} - -.fabric-page-header .span4 h2 { - margin-top: 0px; -} - -div[ng-controller="Log.LogController"] .logbar { - -} - -div[ng-controller="Log.LogController"] .logbar .logbar-container { - background: white; - margin :0px; - padding-top: 4px; - padding-bottom: 3px; - border-bottom: 1px solid #cecdcd !important; -} - -.help-header { - background-color: #43484D; - padding-left: 20px; - padding-right: 20px; - border-radius: 4px; -} - -.help-header img { - position: relative; - margin-right: 7px; - margin-left: 3px; - height: 50px; - top: -2px; -} - -.about-display { - margin-left: auto; - margin-right: auto; - width: 700px; -} - -.about-display > .about-header { - text-align: center; - background-color: #B2577A; - color: white; - padding-left: 10px; - padding-right: 10px; - border-radius: 4px; -} - -.about-display > .about-header > img { - position: relative; - margin-right: 7px; - margin-left: 3px; - height: 22px; - top: -2px; -} - -.camel-tree > .section-filter { - margin-left: 10px; - margin-top: 5px; - margin-right: 10px; -} - -.dropdown-menu .sub-menu { - left: 190px; - top: -5px; -} - -.hawtio-breadcrumb { - margin-top: 5px; - display: inline-block; -} - -.hawtio-breadcrumb > li:first-child { - padding-left: 10px !important; -} - -.hawtio-breadcrumb > li:last-child { - padding-right: 10px !important; -} - -.hawtio-breadcrumb > li { - padding-left: 2px !important; - padding-right: 2px !important; -} - -.nav.nav-tabs li .hawtio-dropdown .dropdown-menu { - margin-top: 7px; - border-top: none; -} - -.dropdown.perspective-selector .dropdown-menu > div > p, -.hawtio-dropdown p { - color: #333333; -} - -.can-invoke > .dynatree-icon:before, -.icon-cog.can-invoke { - color: green !important; -} - -.cant-invoke > .dynatree-icon:before, -.icon-cog.cant-invoke { - color: red !important; -} - -.pane-bar { - border-left: 1px solid #d4d4d4; - border-right: 1px solid #d4d4d4; - background: white; -} - -.pane { - box-shadow: 0 0 50px rgba(0, 0, 0, 0.05); - background: #fff; - top: 106px; -} - -.pane-header-wrapper { - box-shadow: 0 0 50px rgba(0, 0, 0, 0.2); -} - -.navbar .nav > li > .dropdown-menu:before, -.navbar .nav > li > .dropdown-menu:after { - display: none; - border: none; -} - -.dropdown.perspective-selector .dropdown-menu > div > p, -.hawtio-dropdown p { - border-top: 1px solid #d4d4d4; - border-bottom: 1px solid #d4d4d4; - background-image: linear-gradient(to bottom, #fff, #e5e5e5); -} -.dropdown.perspective-selector .dropdown-menu li.clear-recent { - border-top: 1px dashed #d4d4d4; -} - -ng-include > .nav.nav-tabs { - border-left: none; - border-right: none; -} - -.modal-body{ - max-height: calc(100vh - 200px); - overflow-y: auto; -} diff --git a/artemis-hawtio/activemq-branding/src/main/webapp/plugin/img/activemq.png b/artemis-hawtio/activemq-branding/src/main/webapp/plugin/img/activemq.png deleted file mode 100644 index cc8cd5002e3..00000000000 Binary files a/artemis-hawtio/activemq-branding/src/main/webapp/plugin/img/activemq.png and /dev/null differ diff --git a/artemis-hawtio/activemq-branding/src/main/webapp/plugin/img/checkbox-background-checked.png b/artemis-hawtio/activemq-branding/src/main/webapp/plugin/img/checkbox-background-checked.png deleted file mode 100644 index 21be54a1333..00000000000 Binary files a/artemis-hawtio/activemq-branding/src/main/webapp/plugin/img/checkbox-background-checked.png and /dev/null differ diff --git a/artemis-hawtio/activemq-branding/src/main/webapp/plugin/img/checkbox-background-hover.png b/artemis-hawtio/activemq-branding/src/main/webapp/plugin/img/checkbox-background-hover.png deleted file mode 100644 index b12873f9d26..00000000000 Binary files a/artemis-hawtio/activemq-branding/src/main/webapp/plugin/img/checkbox-background-hover.png and /dev/null differ diff --git a/artemis-hawtio/activemq-branding/src/main/webapp/plugin/img/checkbox-background.png b/artemis-hawtio/activemq-branding/src/main/webapp/plugin/img/checkbox-background.png deleted file mode 100644 index 9b0ee2e3802..00000000000 Binary files a/artemis-hawtio/activemq-branding/src/main/webapp/plugin/img/checkbox-background.png and /dev/null differ diff --git a/artemis-hawtio/activemq-branding/src/main/webapp/plugin/img/favicon.png b/artemis-hawtio/activemq-branding/src/main/webapp/plugin/img/favicon.png deleted file mode 100644 index c2b43f52078..00000000000 Binary files a/artemis-hawtio/activemq-branding/src/main/webapp/plugin/img/favicon.png and /dev/null differ diff --git a/artemis-hawtio/activemq-branding/src/main/webapp/plugin/img/input-background.png b/artemis-hawtio/activemq-branding/src/main/webapp/plugin/img/input-background.png deleted file mode 100644 index 7c731595535..00000000000 Binary files a/artemis-hawtio/activemq-branding/src/main/webapp/plugin/img/input-background.png and /dev/null differ diff --git a/artemis-hawtio/activemq-branding/src/main/webapp/plugin/img/login-screen-background.png b/artemis-hawtio/activemq-branding/src/main/webapp/plugin/img/login-screen-background.png deleted file mode 100644 index 77d6207aa60..00000000000 Binary files a/artemis-hawtio/activemq-branding/src/main/webapp/plugin/img/login-screen-background.png and /dev/null differ diff --git a/artemis-hawtio/activemq-branding/src/main/webapp/plugin/img/login-screen-logo.png b/artemis-hawtio/activemq-branding/src/main/webapp/plugin/img/login-screen-logo.png deleted file mode 100644 index a334300cbe0..00000000000 Binary files a/artemis-hawtio/activemq-branding/src/main/webapp/plugin/img/login-screen-logo.png and /dev/null differ diff --git a/artemis-hawtio/activemq-branding/src/main/webapp/plugin/js/brandingPlugin.js b/artemis-hawtio/activemq-branding/src/main/webapp/plugin/js/brandingPlugin.js deleted file mode 100644 index f3a1ae835ba..00000000000 --- a/artemis-hawtio/activemq-branding/src/main/webapp/plugin/js/brandingPlugin.js +++ /dev/null @@ -1,96 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - /** - * The main entry point for the Branding module - */ -var Branding = (function (Branding) { - - /** - * The name of this plugin - */ - Branding.pluginName = 'activemq-branding'; - - /** - * This plugin's logger instance - */ - Branding.log = Logger.get('activemq-branding-plugin'); - - /** - * The top level path of this plugin on the server - */ - Branding.contextPath = '/activemq-branding'; - if (hawtioPluginLoader.getPlugins().hasOwnProperty(Branding.pluginName)) { - Branding.contextPath = hawtioPluginLoader.getPlugins()[Branding.pluginName]['Context']; - } - - /** - * This plugin's AngularJS module instance. - */ - Branding.module = angular.module(Branding.pluginName, []) - .run(initPlugin); - - /** - * Here you can overwrite hawtconfig.json by putting the JSON - * data directly to configManager.config property. - */ - function initPlugin(configManager, aboutService) { - configManager.config = { - "branding": { - "appName": "Artemis Console", - "appLogoUrl": `${Branding.contextPath}/plugin/img/activemq.png`, - "companyLogoUrl": `${Branding.contextPath}/plugin/img/activemq.png`, - "css": `${Branding.contextPath}/plugin/css/activemq.css`, - "favicon": `${Branding.contextPath}/plugin/img/favicon.png` - }, - "login": { - "description": "ActiveMQ Artemis Management Console", - "links": [ - { - "text": "Documentation", - "url": "https://activemq.apache.org/components/artemis/documentation/", - }, - { - "text": "Website", - "url": "https://activemq.apache.org/" - } - ] - }, - "about": { - "title": "ActiveMQ Artemis Management Console", - "productInfo": [], - "additionalInfo": "", - "imgSrc": `${Branding.contextPath}/plugin/img/activemq.png` - }, - "disabledRoutes": [] - }; - - aboutService.addProductInfo('Artemis', '${project.version}'); - // Calling this function is required to apply the custom css and - // favicon settings - Core.applyBranding(configManager); - - Branding.log.info(Branding.pluginName, "loaded"); - } - initPlugin.$inject = ['configManager', 'aboutService']; - - return Branding; - -})(Branding || {}); - -// tell the Hawtio plugin loader about our plugin so it can be -// bootstrapped with the rest of AngularJS -hawtioPluginLoader.addModule(Branding.pluginName); diff --git a/artemis-hawtio/artemis-console/src/main/webapp/hawtconfig.json b/artemis-hawtio/artemis-console/src/main/webapp/hawtconfig.json deleted file mode 100644 index 940ba41cea0..00000000000 --- a/artemis-hawtio/artemis-console/src/main/webapp/hawtconfig.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "branding": { - "appName": "Artemis Console", - "appLogoUrl": "", - "companyLogoUrl": "", - "css": "", - "favicon": "" - }, - "login": { - "description": "ActiveMQ Artemis Management Console", - "links": [ - { - "url": "/user_manual/index.html", - "text": "User Manual" - } - ] - }, - "about": { - "title": "ActiveMQ Artemis Management Console", - "productInfo": [], - "additionalInfo": "", - "copyright": "", - "imgSrc": "" - }, - "disabledRoutes": [] -} \ No newline at end of file diff --git a/artemis-hawtio/artemis-plugin/README.md b/artemis-hawtio/artemis-plugin/README.md deleted file mode 100644 index dbf6e454364..00000000000 --- a/artemis-hawtio/artemis-plugin/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# artemis-hawtio - -Is a HawtIO plugin that allows the viewing and manipulation of topic/queues and other JMS resources. diff --git a/artemis-hawtio/artemis-plugin/pom.xml b/artemis-hawtio/artemis-plugin/pom.xml deleted file mode 100644 index b59ab62b787..00000000000 --- a/artemis-hawtio/artemis-plugin/pom.xml +++ /dev/null @@ -1,250 +0,0 @@ - - - - - 4.0.0 - - - org.apache.activemq - artemis-hawtio-pom - 2.36.0 - - - artemis-plugin - ActiveMQ Artemis HawtIO Plugin - - Artemis plugin module for the HawtIO web console - - - war - - - ${project.basedir}/../.. - - - - /artemis-plugin - - - ${project.artifactId} - - - - - - - javax.servlet;version="2.6", - *;resolution:=optional - - - ${project.artifactId}-${project.version} - ${basedir}/target/${webapp-dir} - ${basedir}/src/main/webapp/lib - ${webapp-outdir}/app/app.js - - - - - - - - io.hawt - hawtio-plugin-mbean - - - - - org.eclipse.jetty.toolchain - jetty-servlet-api - provided - - - - - org.slf4j - slf4j-api - provided - - - - - - - - - - src/main/resources - true - - **/*.xml - - - - - - - - - - maven-antrun-plugin - - - - - generate-sources - generate-sources - - run - - - - Building plugin javascript file list - - - - - - - - - Files: ${plugin-scripts} - - - - true - - - - - - - maven-resources-plugin - - - - copy-resources - generate-sources - - resources - - - - - - - - org.apache.felix - maven-bundle-plugin - - - bundle-manifest - process-classes - - manifest - - - - - ${webapp-outdir}/META-INF - - jar - bundle - war - - - ${plugin-context} - ${plugin-context} - - WEB-INF/lib - *;scope=compile|runtime - true - - ${osgi.export} - ${osgi.import} - ${osgi.dynamic} - ${osgi.private.pkg} - - .,WEB-INF/classes - - ${project.name} - ${project.groupId}.${project.artifactId} - HawtIO - ${project.version} - - - - - - - org.apache.maven.plugins - maven-war-plugin - - @{artifactId}@-@{baseVersion}@@{dashClassifier?}@.@{extension}@ - **/classes/OSGI-INF/** - false - - ${webapp-outdir}/META-INF/MANIFEST.MF - - - - true - src/main/resources - - **/*.* - - - log4j.properties - - - - - - - - - - diff --git a/artemis-hawtio/artemis-plugin/src/main/java/org/apache/activemq/hawtio/plugin/PluginContextListener.java b/artemis-hawtio/artemis-plugin/src/main/java/org/apache/activemq/hawtio/plugin/PluginContextListener.java deleted file mode 100644 index a1aac00249b..00000000000 --- a/artemis-hawtio/artemis-plugin/src/main/java/org/apache/activemq/hawtio/plugin/PluginContextListener.java +++ /dev/null @@ -1,72 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.apache.activemq.hawtio.plugin; - -import io.hawt.web.plugin.HawtioPlugin; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import java.lang.invoke.MethodHandles; - -import javax.servlet.ServletContext; -import javax.servlet.ServletContextEvent; -import javax.servlet.ServletContextListener; - -/** - * The Plugin Context Listener used to load in the plugin - **/ -public class PluginContextListener implements ServletContextListener { - - private static final Logger logger = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass()); - - HawtioPlugin plugin = null; - - @Override - public void contextInitialized(ServletContextEvent servletContextEvent) { - - ServletContext context = servletContextEvent.getServletContext(); - - plugin = new HawtioPlugin(); - plugin.setContext(context.getContextPath()); - plugin.setName(context.getInitParameter("plugin-name")); - plugin.setScripts(context.getInitParameter("plugin-scripts")); - plugin.setDomain(null); - - try { - plugin.init(); - } catch (Exception e) { - throw createServletException(e); - } - - logger.info("Initialized {} plugin", plugin.getName()); - } - - @Override - public void contextDestroyed(ServletContextEvent servletContextEvent) { - try { - plugin.destroy(); - } catch (Exception e) { - throw createServletException(e); - } - - logger.info("Destroyed {} plugin", plugin.getName()); - } - - protected RuntimeException createServletException(Exception e) { - return new RuntimeException(e); - } - -} \ No newline at end of file diff --git a/artemis-hawtio/artemis-plugin/src/main/resources/WEB-INF/web.xml b/artemis-hawtio/artemis-plugin/src/main/resources/WEB-INF/web.xml deleted file mode 100644 index a75489c5d2e..00000000000 --- a/artemis-hawtio/artemis-plugin/src/main/resources/WEB-INF/web.xml +++ /dev/null @@ -1,63 +0,0 @@ - - - - - An Artemis Plugin - An Artemis plugin - - - Plugin's path on the server - plugin-context - ${plugin-context} - - - - Plugin's path on the server - plugin-name - ${project.artifactId} - - - - Plugin's path on the server - plugin-domain - ${plugin-domain} - - - - Plugin's path on the server - plugin-scripts - ${plugin-scripts} - - - - Disable listing of directories and files - org.eclipse.jetty.servlet.Default.dirAllowed - false - - - - org.apache.activemq.hawtio.plugin.PluginContextListener - - - - - diff --git a/artemis-hawtio/artemis-plugin/src/main/webapp/index.html b/artemis-hawtio/artemis-plugin/src/main/webapp/index.html deleted file mode 100644 index fe036f6ab7e..00000000000 --- a/artemis-hawtio/artemis-plugin/src/main/webapp/index.html +++ /dev/null @@ -1,27 +0,0 @@ - - - - - - Artemis plugin - - -

Hawtio :: Artemis plugin example

- - diff --git a/artemis-hawtio/artemis-plugin/src/main/webapp/plugin/doc/help.md b/artemis-hawtio/artemis-plugin/src/main/webapp/plugin/doc/help.md deleted file mode 100644 index e875acd8bcf..00000000000 --- a/artemis-hawtio/artemis-plugin/src/main/webapp/plugin/doc/help.md +++ /dev/null @@ -1,19 +0,0 @@ -### Artemis - -Click [Artemis](#/jmx/attributes?tab=artemis) in the top navigation bar to see the Artemis specific plugin. (The Artemis tab won't appear if there is no broker in this JVM). The Artemis plugin works very much the same as the JMX plugin however with a focus on interacting with an Artemis broker. - -The tree view on the left-hand side shows the top level JMX tree of each broker instance running in the JVM. Expanding the tree will show the various MBeans registered by Artemis that you can inspect via the **Attributes** tab. - -#### Creating a new Address - -To create a new address simply click on the broker or the address folder in the jmx tree and click on the create tab. - -Once you have created an address you should be able to **Send** to it by clicking on it in the jmx tree and clicking on the send tab. - -#### Creating a new Queue - -To create a new queue click on the address you want to bind the queue to and click on the create tab. - -Once you have created a queue you should be able to **Send** a message to it or **Browse** it or view the **Attributes** or **Charts**. Simply click on the queue in th ejmx tree and click on the appropriate tab. - -You can also see a graphical view of all brokers, addresses, queues and their consumers using the **Diagram** tab. diff --git a/artemis-hawtio/artemis-plugin/src/main/webapp/plugin/html/preferences.html b/artemis-hawtio/artemis-plugin/src/main/webapp/plugin/html/preferences.html deleted file mode 100644 index 8227bba7c0a..00000000000 --- a/artemis-hawtio/artemis-plugin/src/main/webapp/plugin/html/preferences.html +++ /dev/null @@ -1,74 +0,0 @@ - -
- -
- -
- -
-
- -
- -
- -
-
- -
- -
- -
-
- -
- -
- -
-
- - - -
diff --git a/artemis-hawtio/artemis-plugin/src/main/webapp/plugin/html/tree/content.html b/artemis-hawtio/artemis-plugin/src/main/webapp/plugin/html/tree/content.html deleted file mode 100644 index be06f47f052..00000000000 --- a/artemis-hawtio/artemis-plugin/src/main/webapp/plugin/html/tree/content.html +++ /dev/null @@ -1,20 +0,0 @@ - -
-
-
diff --git a/artemis-hawtio/artemis-plugin/src/main/webapp/plugin/html/tree/header.html b/artemis-hawtio/artemis-plugin/src/main/webapp/plugin/html/tree/header.html deleted file mode 100644 index 6a9ecf612ca..00000000000 --- a/artemis-hawtio/artemis-plugin/src/main/webapp/plugin/html/tree/header.html +++ /dev/null @@ -1,41 +0,0 @@ - -
-
-
-
- - - -
-
-
- - {{$ctrl.result.length}} - - - -
-
-
diff --git a/artemis-hawtio/artemis-plugin/src/main/webapp/plugin/js/artemisPlugin.js b/artemis-hawtio/artemis-plugin/src/main/webapp/plugin/js/artemisPlugin.js deleted file mode 100644 index f51f4ba1ed3..00000000000 --- a/artemis-hawtio/artemis-plugin/src/main/webapp/plugin/js/artemisPlugin.js +++ /dev/null @@ -1,75 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -/** - * The main entry point for the Simple module - */ -var Artemis = (function (Artemis) { - - /** - * The name of this plugin - */ - Artemis.pluginName = 'artemis-plugin'; - - /** - * This plugin's logger instance - */ - Artemis.log = Logger.get('artemis-plugin'); - - /** - * The top level path of this plugin on the server - */ - Artemis.contextPath = "/artemis-plugin/"; - - Artemis.log.info("loading artemis plugin") - Artemis._module = angular.module(Artemis.pluginName, [ - 'angularResizable' - ]) - .component('artemis', { - template: - `
- -
- - -
-
-
- ` - }) - .run(configurePlugin); - - function configurePlugin(mainNavService, workspace, helpRegistry, preferencesRegistry, localStorage, preLogoutTasks, documentBase, $templateCache) { - var artemisJmxDomain = localStorage['artemisJmxDomain'] || "org.apache.activemq.artemis"; - mainNavService.addItem({ - title: 'Artemis', - basePath: '/artemis', - template: '', - isValid: function () { return workspace.treeContainsDomainAndProperties(artemisJmxDomain); } - }); - } - configurePlugin.$inject = ['mainNavService', 'workspace', 'helpRegistry', 'preferencesRegistry', 'localStorage', 'preLogoutTasks', 'documentBase', '$templateCache']; - - return Artemis; - -})(Artemis || {}); - -// tell the Hawtio plugin loader about our plugin so it can be -// bootstrapped with the rest of AngularJS -hawtioPluginLoader.addModule(Artemis.pluginName); diff --git a/artemis-hawtio/artemis-plugin/src/main/webapp/plugin/js/components/addressSendMessage.js b/artemis-hawtio/artemis-plugin/src/main/webapp/plugin/js/components/addressSendMessage.js deleted file mode 100644 index 50283fe6ad8..00000000000 --- a/artemis-hawtio/artemis-plugin/src/main/webapp/plugin/js/components/addressSendMessage.js +++ /dev/null @@ -1,182 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - /// -var Artemis; -(function (Artemis) { - Artemis.log.debug("loading address send message"); - Artemis._module.component('artemisAddressSendMessage', { - template: - `

Send Message - -

- -
- -
-
-
- - - -
-
- - - -
-
- - - -
-
- - -
- -
-
-
- - -
- -
-
-
-
-
- -

Headers

- -
- - - - - - - - -
- -
-
- -

- -

- -

Body

- -
-
-
-
-
- - -
-
- -

- -

- - - - - `, - controller: AddressSendMessageController - }) - .name; - Artemis.log.debug("loaded queue " + Artemis.createQueueModule); - - function AddressSendMessageController($route, $scope, $element, $timeout, workspace, jolokia, localStorage, $location, artemisMessage, messageCreator) { - Core.initPreferenceScope($scope, localStorage, { - 'durable': { - 'value': true, - 'converter': Core.parseBooleanValue - }, - 'messageID': { - 'value': true, - 'converter': Core.parseBooleanValue - } - }); - var ctrl = this; - ctrl.messageCreator = messageCreator; - ctrl.message = ctrl.messageCreator.createNewMessage($scope, $location, $route, localStorage, artemisMessage, workspace, $element, $timeout, jolokia); - - } - AddressSendMessageController.$inject = ['$route', '$scope', '$element', '$timeout', 'workspace', 'jolokia', 'localStorage', '$location', 'artemisMessage', 'messageCreator']; - -})(Artemis || (Artemis = {})); diff --git a/artemis-hawtio/artemis-plugin/src/main/webapp/plugin/js/components/addresses.js b/artemis-hawtio/artemis-plugin/src/main/webapp/plugin/js/components/addresses.js deleted file mode 100644 index c0fc8be326e..00000000000 --- a/artemis-hawtio/artemis-plugin/src/main/webapp/plugin/js/components/addresses.js +++ /dev/null @@ -1,259 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -var Artemis; -(function (Artemis) { - //Artemis.log.debug("loading addresses"); - Artemis._module.component('artemisAddresses', { - template: - `

Browse Addresses - -

-
- - -
- - - `, - controller: AddressesController - }) - .name; - - - function AddressesController($scope, workspace, jolokia, localStorage, artemisMessage, $location, $timeout, $filter, pagination, artemisAddress) { - var ctrl = this; - ctrl.pagination = pagination; - ctrl.pagination.reset(); - var mbean = Artemis.getBrokerMBean(workspace, jolokia); - ctrl.allAddresses = []; - ctrl.addresses = []; - ctrl.workspace = workspace; - ctrl.refreshed = false; - ctrl.dtOptions = { - // turn of ordering as we do it ourselves - ordering: false, - columns: [ - {name: "ID", visible: true}, - {name: "Name", visible: true}, - {name: "Internal", visible: false}, - {name: "Routing Types", visible: true}, - {name: "Queue Count", visible: true} - ] - }; - - Artemis.log.debug('sessionStorage: addressColumnDefs =', localStorage.getItem('addressColumnDefs')); - if (localStorage.getItem('addressColumnDefs')) { - loadedDefs = JSON.parse(localStorage.getItem('addressColumnDefs')); - //sanity check to make sure columns havent been added - if(loadedDefs.length === ctrl.dtOptions.columns.length) { - ctrl.dtOptions.columns = loadedDefs; - } - - } - - ctrl.updateColumns = function () { - var attributes = []; - ctrl.dtOptions.columns.forEach(function (column) { - attributes.push({name: column.name, visible: column.visible}); - }); - Artemis.log.debug("saving columns " + JSON.stringify(attributes)); - localStorage.setItem('addressColumnDefs', JSON.stringify(attributes)); - } - - ctrl.filter = { - fieldOptions: [ - {id: 'id', name: 'ID'}, - {id: 'name', name: 'Name'}, - {id: 'internal', name: 'Internal'}, - {id: 'routingTypes', name: 'Routing Types'}, - {id: 'queueCount', name: 'Queue Count'} - ], - operationOptions: [ - {id: 'EQUALS', name: 'Equals'}, - {id: 'CONTAINS', name: 'Contains'}, - {id: 'NOT_CONTAINS', name: 'Does Not Contain'}, - {id: 'GREATER_THAN', name: 'Greater Than'}, - {id: 'LESS_THAN', name: 'Less Than'} - ], - sortOptions: [ - {id: 'asc', name: 'ascending'}, - {id: 'desc', name: 'descending'} - ], - values: { - field: "", - operation: "", - value: "", - sortOrder: "asc", - sortColumn: "id" - }, - text: { - fieldText: "Filter Field..", - operationText: "Operation..", - sortOrderText: "ascending", - sortByText: "ID" - } - }; - - ctrl.tableActionButtons = [ - { - name: 'attributes', - title: 'Navigate to attributes', - actionFn: navigateToAddressAtts - }, - { - name: 'operations', - title: 'navigate to operations', - actionFn: navigateToAddressOps - } - ]; - ctrl.tableConfig = { - selectionMatchProp: 'id', - showCheckboxes: false - }; - ctrl.tableColumns = [ - { header: 'ID', itemField: 'id' }, - { header: 'Name', itemField: 'name' }, - { header: 'Internal', itemField: 'internal' }, - { header: 'Routing Types', itemField: 'routingTypes' }, - { header: 'Queue Count', itemField: 'queueCount' , htmlTemplate: 'addresses-anchor-column-template', colActionFn: (item) => selectQueues(item.idx) } - ]; - - ctrl.refresh = function () { - ctrl.refreshed = true; - ctrl.pagination.load(); - }; - ctrl.reset = function () { - ctrl.filter.values.field = ""; - ctrl.filter.values.operation = ""; - ctrl.filter.values.value = ""; - ctrl.filter.sortOrder = "asc"; - ctrl.filter.sortColumn = "id"; - ctrl.refreshed = true; - artemisAddress.address = null; - ctrl.pagination.load(); - }; - - if (artemisAddress.address) { - Artemis.log.debug("navigating to address = " + artemisAddress.address.address); - ctrl.filter.values.field = ctrl.filter.fieldOptions[1].id; - ctrl.filter.values.operation = ctrl.filter.operationOptions[0].id; - ctrl.filter.values.value = artemisAddress.address.address; - artemisAddress.address = null; - } - - selectQueues = function (idx) { - var address = ctrl.addresses[idx].name; - Artemis.log.debug("navigating to queues:" + address) - artemisAddress.address = { address: address }; - $location.path("artemis/artemisQueues"); - }; - - function navigateToAddressAtts(action, item) { - $location.path("artemis/attributes").search({"tab": "artemis", "nid": getAddressNid(item.name, $location)}); - }; - function navigateToAddressOps(action, item) { - $location.path("artemis/operations").search({"tab": "artemis", "nid": getAddressNid(item.name, $location)}); - }; - function getAddressNid(address, $location) { - var rootNID = getRootNid($location); - var targetNID = rootNID + "addresses-" + address; - Artemis.log.debug("targetNID=" + targetNID); - return targetNID; - } - function getRootNid($location) { - var currentNid = $location.search()['nid']; - Artemis.log.debug("current nid=" + currentNid); - var firstDash = currentNid.indexOf('-'); - var secondDash = currentNid.indexOf('-', firstDash + 1); - var thirdDash = currentNid.indexOf('-', secondDash + 1); - if (thirdDash < 0) { - return currentNid + "-"; - } - var rootNID = currentNid.substring(0, thirdDash + 1); - return rootNID; - } - ctrl.loadOperation = function () { - if (mbean) { - var method = 'listAddresses(java.lang.String, int, int)'; - var addressFilter = { - field: ctrl.filter.values.field, - operation: ctrl.filter.values.operation, - value: ctrl.filter.values.value, - sortOrder: ctrl.filter.values.sortOrder, - sortColumn: ctrl.filter.values.sortColumn - }; - - if (ctrl.refreshed == true) { - ctrl.pagination.reset(); - ctrl.refreshed = false; - } - jolokia.request({ type: 'exec', mbean: mbean, operation: method, arguments: [JSON.stringify(addressFilter), ctrl.pagination.pageNumber, ctrl.pagination.pageSize] }, Core.onSuccess(populateTable, { error: onError })); - } - }; - - ctrl.pagination.setOperation(ctrl.loadOperation); - - function onError(response) { - Core.notification("error", "could not invoke list sessions" + response.error); - $scope.workspace.selectParentNode(); - }; - - function populateTable(response) { - var data = JSON.parse(response.value); - ctrl.addresses = []; - angular.forEach(data["data"], function (value, idx) { - value.idx = idx; - ctrl.addresses.push(value); - }); - ctrl.pagination.page(data["count"]); - allAddresses = ctrl.addresses; - ctrl.addresses = allAddresses; - Core.$apply($scope); - } - - ctrl.pagination.load(); - } - AddressesController.$inject = ['$scope', 'workspace', 'jolokia', 'localStorage', 'artemisMessage', '$location', '$timeout', '$filter', 'pagination', 'artemisAddress']; - - -})(Artemis || (Artemis = {})); \ No newline at end of file diff --git a/artemis-hawtio/artemis-plugin/src/main/webapp/plugin/js/components/browse.js b/artemis-hawtio/artemis-plugin/src/main/webapp/plugin/js/components/browse.js deleted file mode 100644 index 548e325f93d..00000000000 --- a/artemis-hawtio/artemis-plugin/src/main/webapp/plugin/js/components/browse.js +++ /dev/null @@ -1,1056 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -var Artemis; -(function (Artemis) { - Artemis._module.component('artemisBrowseQueue', { - template: - `

Browse Queue - -

- - -
-
-
-
-
-
- -
- -
-
-
-
- - - - - -
-
-
-
- - -
- -
-
- - - -