[rhq] 2 commits - modules/common modules/enterprise
by mazz
modules/common/jboss-as-dmr-client/src/main/java/org/rhq/common/jbossas/client/controller/JBossASClient.java | 16 ++++++++++
modules/enterprise/server/installer/src/main/java/org/rhq/enterprise/server/installer/Installer.java | 3 +
2 files changed, 18 insertions(+), 1 deletion(-)
New commits:
commit e7753928bddf03a031642b43c1ff9031813abee5
Author: John Mazzitelli <mazz(a)redhat.com>
Date: Fri Dec 21 13:34:12 2012 -0500
add generic API to remove a resource
diff --git a/modules/common/jboss-as-dmr-client/src/main/java/org/rhq/common/jbossas/client/controller/JBossASClient.java b/modules/common/jboss-as-dmr-client/src/main/java/org/rhq/common/jbossas/client/controller/JBossASClient.java
index fa4a5b9..a4f47a0 100644
--- a/modules/common/jboss-as-dmr-client/src/main/java/org/rhq/common/jbossas/client/controller/JBossASClient.java
+++ b/modules/common/jboss-as-dmr-client/src/main/java/org/rhq/common/jbossas/client/controller/JBossASClient.java
@@ -57,6 +57,7 @@ public class JBossASClient {
public static final String ADD = "add";
public static final String SYSTEM_PROPERTY = "system-property";
public static final String PERSISTENT = "persistent"; // used by some operations to persist their effects
+ public static final String REMOVE = "remove";
private ModelControllerClient client;
@@ -283,6 +284,21 @@ public class JBossASClient {
}
/**
+ * Removes the resource at the given address.
+ *
+ * @param doomedAddr the address of the resource to remove
+ * @throws Exception
+ */
+ public void remove(Address doomedAddr) throws Exception {
+ final ModelNode request = createRequest(REMOVE, doomedAddr);
+ final ModelNode response = execute(request);
+ if (!isSuccess(response)) {
+ throw new FailureException(response, "Failed to remove resource at address [" + doomedAddr + "]");
+ }
+ return;
+ }
+
+ /**
* Convienence method that allows you to obtain a single attribute's string value from
* a resource.
*
commit 7d167bdc1be3e4c5e1bae16881cbe7e11db213b8
Author: John Mazzitelli <mazz(a)redhat.com>
Date: Fri Dec 21 13:01:30 2012 -0500
don't dump the whole stack, just show the error messages
diff --git a/modules/enterprise/server/installer/src/main/java/org/rhq/enterprise/server/installer/Installer.java b/modules/enterprise/server/installer/src/main/java/org/rhq/enterprise/server/installer/Installer.java
index 909a39e..0c8876b 100644
--- a/modules/enterprise/server/installer/src/main/java/org/rhq/enterprise/server/installer/Installer.java
+++ b/modules/enterprise/server/installer/src/main/java/org/rhq/enterprise/server/installer/Installer.java
@@ -27,6 +27,7 @@ import java.util.HashMap;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+import org.rhq.core.util.exception.ThrowableUtil;
import org.rhq.enterprise.server.installer.InstallerService.AlreadyInstalledException;
import org.rhq.enterprise.server.installer.InstallerService.AutoInstallDisabledException;
@@ -103,7 +104,7 @@ public class Installer {
installerService.prepareDatabase(serverProperties, null, null);
LOG.info("Database setup is complete.");
} catch (Exception e) {
- LOG.error(e.getMessage(), e);
+ LOG.error(ThrowableUtil.getAllMessages(e));
System.exit(EXIT_CODE_INSTALLATION_ERROR);
}
continue;
11 years, 4 months
[rhq] 2 commits - modules/enterprise
by mazz
modules/enterprise/server/appserver/src/main/bin-resources/bin/rhq-installer.bat | 2
modules/enterprise/server/appserver/src/main/bin-resources/bin/rhq-installer.sh | 2
modules/enterprise/server/installer/src/main/java/org/rhq/enterprise/server/installer/Installer.java | 29 +-
modules/enterprise/server/installer/src/main/java/org/rhq/enterprise/server/installer/InstallerService.java | 20 +
modules/enterprise/server/installer/src/main/java/org/rhq/enterprise/server/installer/InstallerServiceImpl.java | 139 ++++++----
5 files changed, 134 insertions(+), 58 deletions(-)
New commits:
commit ebcaebf8ca7c0ade8cafe3731c72da2ea7fdce7a
Author: John Mazzitelli <mazz(a)redhat.com>
Date: Fri Dec 21 11:58:05 2012 -0500
allow for a user to do a dbsetup without having to do a full install. we had some people ask for this, its a rare use-case, but it can be useful. also useful for devs .. rhq-installer.sh --setupdb (or use the shorthand "-b" option)
diff --git a/modules/enterprise/server/installer/src/main/java/org/rhq/enterprise/server/installer/Installer.java b/modules/enterprise/server/installer/src/main/java/org/rhq/enterprise/server/installer/Installer.java
index 9f7b619..909a39e 100644
--- a/modules/enterprise/server/installer/src/main/java/org/rhq/enterprise/server/installer/Installer.java
+++ b/modules/enterprise/server/installer/src/main/java/org/rhq/enterprise/server/installer/Installer.java
@@ -46,7 +46,7 @@ public class Installer {
private InstallerConfiguration installerConfig;
private enum WhatToDo {
- DISPLAY_USAGE, DO_NOTHING, TEST, LIST_SERVERS, INSTALL
+ DISPLAY_USAGE, DO_NOTHING, TEST, SETUPDB, LIST_SERVERS, INSTALL
}
public static void main(String[] args) {
@@ -96,6 +96,18 @@ public class Installer {
}
continue;
}
+ case SETUPDB: {
+ try {
+ final InstallerService installerService = new InstallerServiceImpl(installerConfig);
+ final HashMap<String, String> serverProperties = installerService.getServerProperties();
+ installerService.prepareDatabase(serverProperties, null, null);
+ LOG.info("Database setup is complete.");
+ } catch (Exception e) {
+ LOG.error(e.getMessage(), e);
+ System.exit(EXIT_CODE_INSTALLATION_ERROR);
+ }
+ continue;
+ }
case INSTALL: {
try {
final InstallerService installerService = new InstallerServiceImpl(installerConfig);
@@ -131,22 +143,25 @@ public class Installer {
usage.append("\t--port=<port>, -p: talk to the app server over this management port").append("\n");
usage.append("\t--test, -t: test the validity of the server properties (install not performed)").append("\n");
usage.append("\t--listservers, -l: show list of known installed servers (install not performed)").append("\n");
+ usage.append("\t--setupdb, -b: only perform database schema creation or update").append("\n");
usage.append("\t--dbpassword, -d: encodes a DB password for rhq-server.properties (install not performed)")
.append("\n");
LOG.info(usage);
}
private WhatToDo[] processArguments(String[] args) throws Exception {
- String sopts = "-:HD:h:p:d:lt";
+ String sopts = "-:HD:h:p:d:blt";
LongOpt[] lopts = { new LongOpt("help", LongOpt.NO_ARGUMENT, null, 'H'),
new LongOpt("host", LongOpt.REQUIRED_ARGUMENT, null, 'h'),
new LongOpt("port", LongOpt.REQUIRED_ARGUMENT, null, 'p'),
new LongOpt("dbpassword", LongOpt.REQUIRED_ARGUMENT, null, 'd'),
+ new LongOpt("setupdb", LongOpt.NO_ARGUMENT, null, 'b'),
new LongOpt("listservers", LongOpt.NO_ARGUMENT, null, 'l'),
new LongOpt("test", LongOpt.NO_ARGUMENT, null, 't') };
boolean test = false;
boolean listservers = false;
+ boolean setupdb = false;
String dbpassword = null;
Getopt getopt = new Getopt("installer", args, sopts, lopts);
@@ -217,6 +232,11 @@ public class Installer {
break;
}
+ case 'b': {
+ setupdb = true;
+ break; // don't return, in case we need to allow more args
+ }
+
case 'l': {
listservers = true;
break; // don't return, we need to allow more args to be processed, like -p or -h
@@ -236,11 +256,14 @@ public class Installer {
return new WhatToDo[] { WhatToDo.DO_NOTHING };
}
- if (test || listservers) {
+ if (test || setupdb || listservers) {
ArrayList<WhatToDo> whatToDo = new ArrayList<WhatToDo>();
if (test) {
whatToDo.add(WhatToDo.TEST);
}
+ if (setupdb) {
+ whatToDo.add(WhatToDo.SETUPDB);
+ }
if (listservers) {
whatToDo.add(WhatToDo.LIST_SERVERS);
}
diff --git a/modules/enterprise/server/installer/src/main/java/org/rhq/enterprise/server/installer/InstallerService.java b/modules/enterprise/server/installer/src/main/java/org/rhq/enterprise/server/installer/InstallerService.java
index d597d29..6eff4b7 100644
--- a/modules/enterprise/server/installer/src/main/java/org/rhq/enterprise/server/installer/InstallerService.java
+++ b/modules/enterprise/server/installer/src/main/java/org/rhq/enterprise/server/installer/InstallerService.java
@@ -101,6 +101,26 @@ public interface InstallerService {
throws AutoInstallDisabledException, AlreadyInstalledException, Exception;
/**
+ * Prepares the database. This is either going to do a full clean db setup or a db upgrade
+ * depending on the existingSchemaOption parameter unless autoinstall setting is on, in which case
+ * the autoinstall schema setting in serverProperties parameter will tell this method what to do.
+ * NOTE: if not in auto-install mode, the database password is assumed to be in clear text (i.e. unencoded).
+ * If in auto-install mode, the database password must be encoded already.
+ *
+ * @param serverProperties the server's settings to use. These will be persisted to
+ * the server's .properties file.
+ * @param serverDetails details on the server being installed.
+ * If in auto-install mode, this value is ignored and can be anything.
+ * @param existingSchemaOption if not in auto-install mode, this tells the installer what to do with any
+ * existing schema. Must be one of the names of the
+ * {@link ServerInstallUtil.ExistingSchemaOption} enum.
+ * If in auto-install mode, this value is ignored and can be anything.
+ * @throws Exception failed to successfully prepare the database
+ */
+ void prepareDatabase(HashMap<String, String> serverProperties, ServerDetails serverDetails,
+ String existingSchemaOption) throws Exception;
+
+ /**
* Returns a list of all registered servers in the database.
*
* @param connectionUrl
diff --git a/modules/enterprise/server/installer/src/main/java/org/rhq/enterprise/server/installer/InstallerServiceImpl.java b/modules/enterprise/server/installer/src/main/java/org/rhq/enterprise/server/installer/InstallerServiceImpl.java
index 81dcdd0..7006601 100644
--- a/modules/enterprise/server/installer/src/main/java/org/rhq/enterprise/server/installer/InstallerServiceImpl.java
+++ b/modules/enterprise/server/installer/src/main/java/org/rhq/enterprise/server/installer/InstallerServiceImpl.java
@@ -229,6 +229,54 @@ public class InstallerServiceImpl implements InstallerService {
"It looks like the installation has already been completed - there is nothing for the installer to do.");
}
+ prepareDatabase(serverProperties, serverDetails, existingSchemaOption);
+
+ String appServerConfigDir = getAppServerConfigDir();
+
+ // create an rhqadmin/rhqadmin management user so when discovered, the AS7 plugin can immediately
+ // connect to the RHQ Server.
+ ServerInstallUtil.createDefaultManagementUser(serverDetails, appServerConfigDir);
+
+ // perform stuff that has to get done via the JBossAS management client
+ ModelControllerClient mcc = null;
+ try {
+ mcc = getModelControllerClient();
+
+ // ensure the server info is up to date and stored in the DB
+ ServerInstallUtil.setSocketBindings(mcc, serverProperties);
+
+ // Make sure our deployment scanner is configured as we need it
+ ServerInstallUtil.configureDeploymentScanner(mcc);
+
+ // create a keystore whose cert has a CN of this server's public endpoint address
+ ServerInstallUtil.prepareWebConnectors(mcc, serverDetails, appServerConfigDir, serverProperties);
+ } finally {
+ safeClose(mcc);
+ }
+
+ // now create our deployment services and our main EAR
+ deployServices(serverProperties);
+
+ // deploy the main EAR app startup module extension
+ deployAppExtension();
+
+ // some of the changes we made require the app server container to reload before we can deploy the app
+ reloadConfiguration();
+
+ // we need to wait for the reload to finish - wait until we can connect again
+ testModelControllerClient(60);
+
+ // deploy the main EAR app subsystem - this is the thing that contains and actually deploys the EAR
+ deployAppSubsystem();
+
+ return;
+ }
+
+ @Override
+ public void prepareDatabase(HashMap<String, String> serverProperties, ServerDetails serverDetails,
+ String existingSchemaOption) throws Exception {
+
+ // since we are going to write out the properties file, we need to make sure the properties are valid
verifyDataFormats(serverProperties);
// if we are in auto-install mode, ignore the server details passed in and build our own using the given server properties
@@ -237,6 +285,9 @@ public class InstallerServiceImpl implements InstallerService {
if (autoInstallMode) {
serverDetails = getServerDetailsFromPropertiesOnly(serverProperties);
} else {
+ if (serverDetails == null) {
+ throw new Exception("Auto-installation is disabled and cannot determine server details");
+ }
if (ServerInstallUtil.isEmpty(serverDetails.getName())) {
throw new Exception("Please enter a server name");
}
@@ -339,7 +390,7 @@ public class InstallerServiceImpl implements InstallerService {
throw new Exception("Cannot connect to the database: " + testConnectionErrorMessage);
}
- // write the new properties to the rhq-server.properties file
+ // write the new properties to the rhq-server.properties file (this ensures the encoded password is written out)
saveServerProperties(serverProperties);
// Prepare the db schema.
@@ -357,20 +408,21 @@ public class InstallerServiceImpl implements InstallerService {
try {
if (ExistingSchemaOption.SKIP != existingSchemaOptionEnum) {
+ String dbSetupLogDir = getDatabaseSetupLogDir();
if (isDatabaseSchemaExist(dbUrl, dbUsername, clearTextDbPassword)) {
if (ExistingSchemaOption.OVERWRITE == existingSchemaOptionEnum) {
log("Database schema exists but installer was told to overwrite it - a new schema will be created now.");
ServerInstallUtil.createNewDatabaseSchema(serverProperties, serverDetails, clearTextDbPassword,
- getLogDir());
+ dbSetupLogDir);
} else {
log("Database schema exists - it will now be updated.");
ServerInstallUtil.upgradeExistingDatabaseSchema(serverProperties, serverDetails,
- clearTextDbPassword, getLogDir());
+ clearTextDbPassword, dbSetupLogDir);
}
} else {
log("Database schema does not yet exist - it will now be created.");
ServerInstallUtil.createNewDatabaseSchema(serverProperties, serverDetails, clearTextDbPassword,
- getLogDir());
+ dbSetupLogDir);
}
} else {
log("Ignoring database schema - installer will assume it exists and is already up-to-date.");
@@ -381,46 +433,6 @@ public class InstallerServiceImpl implements InstallerService {
// ensure the server info is up to date and stored in the DB
ServerInstallUtil.storeServerDetails(serverProperties, clearTextDbPassword, serverDetails);
-
- String appServerConfigDir = getAppServerConfigDir();
-
- // create an rhqadmin/rhqadmin management user so when discovered, the AS7 plugin can immediately
- // connect to the RHQ Server.
- ServerInstallUtil.createDefaultManagementUser(serverDetails, appServerConfigDir);
-
- // perform stuff that has to get done via the JBossAS management client
- ModelControllerClient mcc = null;
- try {
- mcc = getModelControllerClient();
-
- // ensure the server info is up to date and stored in the DB
- ServerInstallUtil.setSocketBindings(mcc, serverProperties);
-
- // Make sure our deployment scanner is configured as we need it
- ServerInstallUtil.configureDeploymentScanner(mcc);
-
- // create a keystore whose cert has a CN of this server's public endpoint address
- ServerInstallUtil.prepareWebConnectors(mcc, serverDetails, appServerConfigDir, serverProperties);
- } finally {
- safeClose(mcc);
- }
-
- // now create our deployment services and our main EAR
- deployServices(serverProperties);
-
- // deploy the main EAR app startup module extension
- deployAppExtension();
-
- // some of the changes we made require the app server container to reload before we can deploy the app
- reloadConfiguration();
-
- // we need to wait for the reload to finish - wait until we can connect again
- testModelControllerClient(60);
-
- // deploy the main EAR app subsystem - this is the thing that contains and actually deploys the EAR
- deployAppSubsystem();
-
- return;
}
@Override
@@ -655,16 +667,37 @@ public class InstallerServiceImpl implements InstallerService {
}
}
- private String getLogDir() throws Exception {
- ModelControllerClient mcc = null;
- try {
- mcc = getModelControllerClient();
- final CoreJBossASClient client = new CoreJBossASClient(mcc);
- final String dir = client.getAppServerLogDir();
- return dir;
- } finally {
- safeClose(mcc);
+ private String getDatabaseSetupLogDir() throws Exception {
+
+ File logDir;
+
+ // Our installer normally sets this sysprop - so use it for our log dir.
+ // If we don't have a log dir sysprop (don't know why we wouldn't), just create a tmp location.
+ final String installerLogDirStr = System.getProperty("rhq.server.installer.logdir");
+ if (installerLogDirStr != null) {
+ logDir = new File(installerLogDirStr);
+ logDir.mkdirs();
+ if (!logDir.isDirectory()) {
+ throw new Exception("Cannot create installer log directory: " + logDir);
+ }
+ } else {
+ final File tmpDir = new File(System.getProperty("java.io.tmpdir"));
+ if (!tmpDir.isDirectory()) {
+ log("Missing tmp dir [" + tmpDir + "]; will use current directory to store logs");
+ logDir = new File(".");
+ } else {
+ logDir = new File(tmpDir, "rhq-installer-db");
+ logDir.mkdir();
+ if (!logDir.isDirectory()) {
+ log("Cannot create database setup log directory [" + logDir + "]; will use current directory");
+ logDir = new File(".");
+ }
+ }
}
+
+ final String logDirPath = logDir.getAbsolutePath();
+ log("Database setup log file directory: " + logDirPath);
+ return logDirPath;
}
private File getServerPropertiesFile() throws Exception {
commit 5443514da7b5a5bf85f50afde30667e079463339
Author: John Mazzitelli <mazz(a)redhat.com>
Date: Fri Dec 21 11:48:22 2012 -0500
dbsetup stuff uses the old i18nlog still and we need to tell it to not use log4j because otherwise it looks like the log messages aren't getting spit out (log4j isn't configured)
diff --git a/modules/enterprise/server/appserver/src/main/bin-resources/bin/rhq-installer.bat b/modules/enterprise/server/appserver/src/main/bin-resources/bin/rhq-installer.bat
index 3140467..811aa17 100644
--- a/modules/enterprise/server/appserver/src/main/bin-resources/bin/rhq-installer.bat
+++ b/modules/enterprise/server/appserver/src/main/bin-resources/bin/rhq-installer.bat
@@ -117,7 +117,7 @@ if not defined RHQ_SERVER_INSTALLER_JAVA_OPTS set RHQ_SERVER_INSTALLER_JAVA_OPTS
rem Add the JVM opts that we always want to specify, whether or not the user set RHQ_SERVER_INSTALLER_JAVA_OPTS.
if defined RHQ_SERVER_DEBUG set _RHQ_LOGLEVEL=DEBUG
if not defined RHQ_SERVER_DEBUG set _RHQ_LOGLEVEL=INFO
-set RHQ_SERVER_INSTALLER_JAVA_OPTS=%RHQ_SERVER_INSTALLER_JAVA_OPTS% -Djava.awt.headless=true -Drhq.server.properties-file=%RHQ_SERVER_HOME%\bin\rhq-server.properties -Drhq.server.installer.logdir=%RHQ_SERVER_HOME%\logs -Drhq.server.installer.loglevel=%_RHQ_LOGLEVEL%
+set RHQ_SERVER_INSTALLER_JAVA_OPTS=%RHQ_SERVER_INSTALLER_JAVA_OPTS% -Djava.awt.headless=true -Di18nlog.logger-type=commons -Drhq.server.properties-file=%RHQ_SERVER_HOME%\bin\rhq-server.properties -Drhq.server.installer.logdir=%RHQ_SERVER_HOME%\logs -Drhq.server.installer.loglevel=%_RHQ_LOGLEVEL%
rem Sample JPDA settings for remote socket debugging
rem RHQ_SERVER_INSTALLER_JAVA_OPTS=%RHQ_SERVER_INSTALLER_JAVA_OPTS% -Xrunjdwp:transport=dt_socket,address=8787,server=y,suspend=y
diff --git a/modules/enterprise/server/appserver/src/main/bin-resources/bin/rhq-installer.sh b/modules/enterprise/server/appserver/src/main/bin-resources/bin/rhq-installer.sh
index 969773f..ddcde6c 100755
--- a/modules/enterprise/server/appserver/src/main/bin-resources/bin/rhq-installer.sh
+++ b/modules/enterprise/server/appserver/src/main/bin-resources/bin/rhq-installer.sh
@@ -214,7 +214,7 @@ else
_RHQ_LOGLEVEL="INFO"
fi
-RHQ_SERVER_INSTALLER_JAVA_OPTS="${RHQ_SERVER_INSTALLER_JAVA_OPTS} -Djava.awt.headless=true -Drhq.server.properties-file=${RHQ_SERVER_HOME}/bin/rhq-server.properties -Drhq.server.installer.logdir=${RHQ_SERVER_HOME}/logs -Drhq.server.installer.loglevel=${_RHQ_LOGLEVEL}"
+RHQ_SERVER_INSTALLER_JAVA_OPTS="${RHQ_SERVER_INSTALLER_JAVA_OPTS} -Djava.awt.headless=true -Di18nlog.logger-type=commons -Drhq.server.properties-file=${RHQ_SERVER_HOME}/bin/rhq-server.properties -Drhq.server.installer.logdir=${RHQ_SERVER_HOME}/logs -Drhq.server.installer.loglevel=${_RHQ_LOGLEVEL}"
# Sample JPDA settings for remote socket debugging
#RHQ_SERVER_INSTALLER_JAVA_OPTS="${RHQ_SERVER_INSTALLER_JAVA_OPTS} -Xrunjdwp:transport=dt_socket,address=8787,server=y,suspend=y"
11 years, 4 months
[rhq] modules/enterprise
by Jiri Kremser
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/measurement/AbstractMeasurementRangeEditor.java | 39 ++++++++--
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/MeasurementChartsGWTServiceImpl.java | 15 +++
modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages.properties | 1
modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_cs.properties | 1
modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_de.properties | 1
modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_ja.properties | 1
modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_pt.properties | 1
modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_ru.properties | 1
modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_zh.properties | 1
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/measurement/MeasurementChartsManagerLocal.java | 19 ----
10 files changed, 59 insertions(+), 21 deletions(-)
New commits:
commit ea3d203dcd9fd9bb110bb0f6dce6f1379e88bacb
Author: Jirka Kremser <jkremser(a)redhat.com>
Date: Fri Dec 21 16:54:02 2012 +0100
[BZ 888369 - Time range setting on monitoring table should be more robust] Adding form validators for the format of the times as well as for the start time < end time; if the end time is after the current server time, the end time is set to the current server time. This caused the NaNs in the table before. However, It is still not perfect, because the user with bad time settings will have prefilled values in the start/end time fields. The simple form ("last n hours") on the monitoring tab is working as it should.
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/measurement/AbstractMeasurementRangeEditor.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/measurement/AbstractMeasurementRangeEditor.java
index 9b39faa..78b7778 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/measurement/AbstractMeasurementRangeEditor.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/measurement/AbstractMeasurementRangeEditor.java
@@ -21,10 +21,13 @@ package org.rhq.enterprise.gui.coregui.client.components.measurement;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
+import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
+import java.util.Map;
import com.smartgwt.client.types.Alignment;
+import com.smartgwt.client.types.DateDisplayFormat;
import com.smartgwt.client.widgets.form.fields.ButtonItem;
import com.smartgwt.client.widgets.form.fields.CheckboxItem;
import com.smartgwt.client.widgets.form.fields.DateTimeItem;
@@ -34,6 +37,7 @@ import com.smartgwt.client.widgets.form.fields.events.ChangeEvent;
import com.smartgwt.client.widgets.form.fields.events.ChangeHandler;
import com.smartgwt.client.widgets.form.fields.events.ClickEvent;
import com.smartgwt.client.widgets.form.fields.events.ClickHandler;
+import com.smartgwt.client.widgets.form.validator.CustomValidator;
import com.smartgwt.client.widgets.grid.ListGrid;
import org.rhq.enterprise.gui.coregui.client.CoreGUI;
@@ -133,9 +137,22 @@ public abstract class AbstractMeasurementRangeEditor extends LocatableDynamicFor
//time range start from
advancedStartItem = new DateTimeItem(ADVANCED_START_ITEM, MSG.view_measureRange_start());
advancedStartItem.setTitleAlign(Alignment.LEFT);
+ advancedStartItem.setUseMask(true);
+ advancedStartItem.setDisplayFormat(DateDisplayFormat.TOUSSHORTDATE);
//time range end
advancedEndItem = new DateTimeItem(ADVANCED_END_ITEM, MSG.common_title_end());
+ advancedEndItem.setUseMask(true);
+ advancedEndItem.setDisplayFormat(DateDisplayFormat.TOUSSHORTDATE);
+
+ //time validator, start should be before end
+ CustomValidator timeValidator = new CustomValidator() {
+ protected boolean condition(Object value) {
+ return advancedEndItem.getValueAsDate().after(advancedStartItem.getValueAsDate());
+ }
+ };
+ timeValidator.setErrorMessage(MSG.view_measureTable_startBeforeEnd());
+ advancedStartItem.setValidators(timeValidator);
setButton = new ButtonItem(SET_ITEM, MSG.common_button_set());
setButton.setStartRow(false);
@@ -146,14 +163,26 @@ public abstract class AbstractMeasurementRangeEditor extends LocatableDynamicFor
MetricRangePreferences prefs = new MetricRangePreferences();
prefs.explicitBeginEnd = advanced;
if (advanced) {
- prefs.begin = advancedStartItem.getValueAsDate().getTime();
- prefs.end = advancedEndItem.getValueAsDate().getTime();
+ try {
+ if (validate()) {
+ prefs.begin = advancedStartItem.getValueAsDate().getTime();
+ prefs.end = advancedEndItem.getValueAsDate().getTime();
+ setMetricRangeProperties(prefs);
+ }
+ } catch (Exception ex) {
+ // some of the digints are not filled correctly
+ Map<String, String> errors = new HashMap<String, String>();
+ errors.put(ADVANCED_END_ITEM, "MM/DD/YYYY HH:MM");
+ errors.put(ADVANCED_START_ITEM, "MM/DD/YYYY HH:MM");
+ setErrors(errors, true);
+ }
} else {
prefs.lastN = Integer.valueOf(simpleLastValuesItem.getValueAsString());
prefs.unit = Integer.valueOf(simpleLastUnitsItem.getValueAsString());
+ setMetricRangeProperties(prefs);
}
- setMetricRangeProperties(prefs);
}
+
});
advancedSimpleButton = new ButtonItem(ADVANCED_BUTTON_ITEM, MSG.common_button_advanced());
@@ -165,7 +194,7 @@ public abstract class AbstractMeasurementRangeEditor extends LocatableDynamicFor
update();
}
});
-
+
space = new SpacerItem();
space.setWidth(300);
@@ -173,7 +202,7 @@ public abstract class AbstractMeasurementRangeEditor extends LocatableDynamicFor
if (metricRangePrefs != null) {
advanced = (metricRangePrefs.explicitBeginEnd);
}
-
+
if (displaySetButton) {
setItems(simpleLastValuesItem, simpleLastUnitsItem, advancedStartItem, advancedEndItem, setButton,
advancedSimpleButton, space);
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/MeasurementChartsGWTServiceImpl.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/MeasurementChartsGWTServiceImpl.java
index 4f5a8fe..31f3e41 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/MeasurementChartsGWTServiceImpl.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/MeasurementChartsGWTServiceImpl.java
@@ -51,6 +51,11 @@ public class MeasurementChartsGWTServiceImpl extends AbstractGWTServiceImpl impl
@Override
public ArrayList<MetricDisplaySummary> getMetricDisplaySummariesForAutoGroup(int parent, int type, int[] schedIds,
long begin, long end, boolean enabledOnly) throws RuntimeException {
+ Long now = System.currentTimeMillis();
+ if (now < end) {
+ // we can't foretell the future (this may be caused by different timezone on client's)
+ end = now;
+ }
try {
ArrayList<MetricDisplaySummary> list = new ArrayList<MetricDisplaySummary>(chartsManager
.getMetricDisplaySummariesForAutoGroup(getSessionSubject(), parent, type, schedIds, begin, end,
@@ -79,6 +84,11 @@ public class MeasurementChartsGWTServiceImpl extends AbstractGWTServiceImpl impl
@Override
public ArrayList<MetricDisplaySummary> getMetricDisplaySummariesForCompatibleGroup(int groupId, int[] defIds,
long begin, long end, boolean enabledOnly) throws RuntimeException {
+ Long now = System.currentTimeMillis();
+ if (now < end) {
+ // we can't foretell the future (this may be caused by different timezone on client's)
+ end = now;
+ }
try {
ArrayList<MetricDisplaySummary> list = new ArrayList<MetricDisplaySummary>(chartsManager
.getMetricDisplaySummariesForCompatibleGroup(getSessionSubject(), groupId, defIds, begin, end,
@@ -107,6 +117,11 @@ public class MeasurementChartsGWTServiceImpl extends AbstractGWTServiceImpl impl
@Override
public ArrayList<MetricDisplaySummary> getMetricDisplaySummariesForResource(int resourceId, int[] schedIds,
long begin, long end) throws RuntimeException {
+ Long now = System.currentTimeMillis();
+ if (now < end) {
+ // we can't foretell the future (this may be caused by different timezone on client's)
+ end = now;
+ }
try {
ArrayList<MetricDisplaySummary> list = new ArrayList<MetricDisplaySummary>(chartsManager
.getMetricDisplaySummariesForResource(getSessionSubject(), resourceId, schedIds, begin, end));
diff --git a/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages.properties b/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages.properties
index 56ed2ac..182e5bb 100644
--- a/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages.properties
+++ b/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages.properties
@@ -1689,6 +1689,7 @@ view_measureTable_chartMetricValues = Chart Selected Metrics
view_measureTable_getLive = Get Live Value
view_measureTable_getLive_failure = Cannot get live values for those metrics. Make sure the agent is running and the managed resource is up.
view_measureTable_live_title = Live Data
+view_measureTable_startBeforeEnd = Start time should be before the end time.
view_measure_nan = --no data available--
view_measurementOob_title = Suspect Metrics
view_menuBar_logout = Logout
diff --git a/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_cs.properties b/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_cs.properties
index 0775491..87a31f9 100644
--- a/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_cs.properties
+++ b/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_cs.properties
@@ -1706,6 +1706,7 @@ view_measureTable_chartMetricValues = Vykreslit vybraná měření
view_measureTable_getLive = Získat aktuální hodnotu
view_measureTable_getLive_failure = Nepodařilo se získat hodnoty těchto měření. Ujistěte se, že agent běží a že spravovaný zdroj také.
view_measureTable_live_title = Aktuální data
+view_measureTable_startBeforeEnd = Počáteční čas musí být menší než koncový.
view_measure_nan = --žádná data nejsou k dispozici--
view_measurementOob_title = Podezřelá měření
view_menuBar_logout = Odhlásit se
diff --git a/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_de.properties b/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_de.properties
index f9876c3..b0f72d4 100644
--- a/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_de.properties
+++ b/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_de.properties
@@ -1479,6 +1479,7 @@ view_measureRange_start = Zeitraum - Start
view_measureTable_chartMetricValues = Graphen für ausgewählte Metriken anzeigen
view_measureTable_getLive = Aktuellen Wert holen
view_measure_nan = --keine Daten verfügbar--
+##view_measureTable_startBeforeEnd = Start time should be before the end time.
view_measurementOob_title = Verdächtige Metriken
view_menuBar_logout = Ausloggen
view_messageCenter_button_messages = Nachrichten
diff --git a/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_ja.properties b/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_ja.properties
index 83b705b..01d1db8 100644
--- a/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_ja.properties
+++ b/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_ja.properties
@@ -1678,6 +1678,7 @@ view_measureTable_getLive = 動作中の値の取得
view_measureTable_getLive_failure = これらのメトリックスの動作中の値を取得できませんでした。 エージェントは実行中で管理リソースは作動中であることを確認してください。
view_measureTable_live_title = ライブデータ
view_measure_nan = --データは存在しません--
+##view_measureTable_startBeforeEnd = Start time should be before the end time.
view_measurementOob_title = 疑わしいメトリックス
view_menuBar_logout = ログアウト
view_messageCenter_clearAllMessages = すべてのメッセージをクリア
diff --git a/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_pt.properties b/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_pt.properties
index 9f545fb..bdeb0c7 100644
--- a/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_pt.properties
+++ b/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_pt.properties
@@ -1708,6 +1708,7 @@ view_measureTable_chartMetricValues = Chart Selected Metrics
view_measureTable_getLive = Get Live Value
view_measureTable_getLive_failure = Cannot get live values for those metrics. Make sure the agent is running and the managed resource is up.
view_measureTable_live_title = Live Data
+##view_measureTable_startBeforeEnd = Start time should be before the end time.
view_measure_nan = --dados indispon\u00EDveis--
view_measurementOob_title = M\u00E9tricas Suspeitas
view_menuBar_help = Ajuda
diff --git a/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_ru.properties b/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_ru.properties
index 47025b7..4df1def 100644
--- a/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_ru.properties
+++ b/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_ru.properties
@@ -1667,6 +1667,7 @@
#view_measureTable_getLive = Get Live Value
#view_measureTable_getLive_failure = Cannot get live values for those metrics. Make sure the agent is running and the managed resource is up.
#view_measureTable_live_title = Live Data
+##view_measureTable_startBeforeEnd = Start time should be before the end time.
#view_measure_nan = --no data available--
#view_measurementOob_title = Suspect Metrics
#view_menuBar_logout = Logout
diff --git a/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_zh.properties b/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_zh.properties
index b9941fc..3a22b3a 100644
--- a/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_zh.properties
+++ b/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_zh.properties
@@ -1678,6 +1678,7 @@ view_measureTable_chartMetricValues = \u751f\u6210\u6307\u6807\u56fe
view_measureTable_getLive = \u53d6\u5f97\u6d3b\u52a8\u6570\u636e
view_measureTable_getLive_failure = Cannot get live values for those metrics. Make sure the agent is running and the managed resource is up.
view_measureTable_live_title = \u52a8\u6001\u6570\u636e
+##view_measureTable_startBeforeEnd = Start time should be before the end time.
view_measure_nan = --\u65e0\u6570\u636e--
view_measurementOob_title = \u53ef\u7591\u7684\u6307\u6807
view_menuBar_logout = \u6ce8\u9500
diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/measurement/MeasurementChartsManagerLocal.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/measurement/MeasurementChartsManagerLocal.java
index 73195ec..6b5d70e 100644
--- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/measurement/MeasurementChartsManagerLocal.java
+++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/measurement/MeasurementChartsManagerLocal.java
@@ -54,15 +54,11 @@ public interface MeasurementChartsManagerLocal {
* @return
*
* @throws MeasurementException
- *
- * @deprecated portal-war
*/
List<MetricDisplaySummary> getMetricDisplaySummariesForCompatibleGroup(Subject subject, int groupId,
int[] measurementDefinitionIds, long begin, long end, boolean enabledOnly) throws MeasurementException;
- /**
- * @deprecated portal-war
- */
+
List<MetricDisplaySummary> getMetricDisplaySummariesForCompatibleGroup(Subject subject, int groupId, String viewName);
/**
@@ -79,28 +75,19 @@ public interface MeasurementChartsManagerLocal {
* @return
*
* @throws MeasurementException
- *
- * @deprecated portal-war
*/
List<MetricDisplaySummary> getMetricDisplaySummariesForAutoGroup(Subject subject, int autoGroupParentResourceId,
int autoGroupChildResourceTypeId, int[] measurementDefinitionIds, long begin, long end, boolean enabledOnly)
throws MeasurementException;
- /**
- * @deprecated portal-war
- */
+
List<MetricDisplaySummary> getMetricDisplaySummariesForAutoGroup(Subject subject, int parent, int type,
String viewName);
- /**
- * @deprecated portal-war
- */
List<MetricDisplaySummary> getMetricDisplaySummariesForResource(Subject subject, int resourceId,
int[] measurementScheduleIds, long begin, long end) throws MeasurementException;
- /**
- * @deprecated portal-war
- */
+
List<MetricDisplaySummary> getMetricDisplaySummariesForResource(Subject subject, int resourceId, String viewName)
throws MeasurementException;
11 years, 4 months
[rhq] Changes to 'tsegismont/as7plugin-httpclient'
by Thomas Segismont
New branch 'tsegismont/as7plugin-httpclient' available with the following commits:
commit 440eea6381d0435f3a81c0e3b46d37f6d397d22a
Author: Thomas SEGISMONT <tsegismo(a)redhat.com>
Date: Fri Dec 21 14:23:35 2012 +0100
as7plugin switch to httpclient: first compiling version
Creating new child resource of type deployment now works
commit b2e4587b139c66a7708fc3e9c7aae661fbac5605
Author: Thomas Segismont <tsegismo(a)redhat.com>
Date: Thu Dec 20 15:23:15 2012 +0100
Share first modifications
commit 5345be9a196d7a9ad64144b58313e2b968a400c1
Author: Thomas SEGISMONT <tsegismo(a)redhat.com>
Date: Wed Dec 19 00:55:25 2012 +0100
AS7 plugin: add httpclient dependency
commit 8908998253f7fd28b25428ab7e05ff4190c5993f
Author: Thomas SEGISMONT <tsegismo(a)redhat.com>
Date: Tue Dec 18 17:56:46 2012 +0100
Add common property for commons-httpclient version and update POMs
11 years, 4 months
[rhq] Branch 'tsegismont/as7plugin-httpclient' - .classpath modules/plugins
by Thomas Segismont
.classpath | 6
modules/plugins/jboss-as-7/pom.xml | 21
modules/plugins/jboss-as-7/src/main/java/org/rhq/modules/plugins/jbossas7/ASUploadConnection.java | 282 ++++++----
modules/plugins/jboss-as-7/src/main/java/org/rhq/modules/plugins/jbossas7/BaseComponent.java | 90 +--
modules/plugins/jboss-as-7/src/main/java/org/rhq/modules/plugins/jbossas7/DeploymentComponent.java | 111 ++-
modules/plugins/jboss-as-7/src/main/java/org/rhq/modules/plugins/jbossas7/ServerGroupComponent.java | 87 +--
modules/plugins/jboss-as-7/src/test/java/org/rhq/modules/plugins/jbossas7/itest/nonpc/AbstractIntegrationTest.java | 27
7 files changed, 383 insertions(+), 241 deletions(-)
New commits:
commit 072ce8deb4aa14cb5968739752002e1a765f4397
Author: Thomas SEGISMONT <tsegismo(a)redhat.com>
Date: Fri Dec 21 14:23:35 2012 +0100
as7plugin switch to httpclient: first compiling version
Creating new child resource of type deployment now works
diff --git a/.classpath b/.classpath
index ab18820..f493247 100644
--- a/.classpath
+++ b/.classpath
@@ -222,7 +222,7 @@
<classpathentry exported="true" kind="var" path="M2_REPO/org/jetbrains/annotations/7.0.2/annotations-7.0.2.jar"/>
<classpathentry exported="true" kind="var" path="M2_REPO/org/apache/ant/ant-launcher/1.8.0/ant-launcher-1.8.0.jar"/>
<classpathentry exported="true" kind="var" path="M2_REPO/cglib/cglib-nodep/2.1_3/cglib-nodep-2.1_3.jar"/>
- <classpathentry exported="true" kind="var" path="M2_REPO/commons-logging/commons-logging/1.1.1/commons-logging-1.1.1.jar"/>
+ <classpathentry exported="true" kind="var" path="M2_REPO/commons-logging/commons-logging/1.1.1/commons-logging-1.1.1.jar" sourcepath="/M2_REPO/commons-logging/commons-logging/1.1.1/commons-logging-1.1.1-sources.jar"/>
<classpathentry exported="true" kind="var" path="M2_REPO/commons-lang/commons-lang/2.4/commons-lang-2.4.jar"/>
<classpathentry exported="true" kind="var" path="M2_REPO/javax/faces/jsf-api/1.2_14/jsf-api-1.2_14.jar" sourcepath="/M2_REPO/javax/faces/jsf-api/1.2_14/jsf-api-1.2_14-sources.jar"/>
<classpathentry exported="true" kind="var" path="M2_REPO/javax/faces/jsf-impl/1.2_14/jsf-impl-1.2_14.jar" sourcepath="/M2_REPO/javax/faces/jsf-impl/1.2_14/jsf-impl-1.2_14-sources.jar"/>
@@ -274,8 +274,8 @@
<classpathentry exported="true" kind="var" path="M2_REPO/org/unitils/unitils-dbunit/3.1/unitils-dbunit-3.1.jar"/>
<classpathentry exported="true" kind="var" path="M2_REPO/org/unitils/unitils-orm/3.1/unitils-orm-3.1.jar"/>
<classpathentry exported="true" kind="var" path="M2_REPO/org/unitils/unitils-testng/3.1/unitils-testng-3.1.jar"/>
- <classpathentry exported="true" kind="var" path="M2_REPO/org/codehaus/jackson/jackson-core-asl/1.8.5/jackson-core-asl-1.8.5.jar"/>
- <classpathentry exported="true" kind="var" path="M2_REPO/org/codehaus/jackson/jackson-mapper-asl/1.8.5/jackson-mapper-asl-1.8.5.jar"/>
+ <classpathentry exported="true" kind="var" path="M2_REPO/org/codehaus/jackson/jackson-core-asl/1.8.5/jackson-core-asl-1.8.5.jar" sourcepath="/M2_REPO/org/codehaus/jackson/jackson-core-asl/1.8.5/jackson-core-asl-1.8.5-sources.jar"/>
+ <classpathentry exported="true" kind="var" path="M2_REPO/org/codehaus/jackson/jackson-mapper-asl/1.8.5/jackson-mapper-asl-1.8.5.jar" sourcepath="/M2_REPO/org/codehaus/jackson/jackson-mapper-asl/1.8.5/jackson-mapper-asl-1.8.5-sources.jar"/>
<classpathentry exported="true" kind="var" path="M2_REPO/org/mongodb/mongo-java-driver/2.6.5/mongo-java-driver-2.6.5.jar"/>
<classpathentry exported="true" kind="var" path="M2_REPO/com/googlecode/java-diff-utils/diffutils/1.2.1/diffutils-1.2.1.jar"/>
<classpathentry exported="true" kind="var" path="M2_REPO/com/google/code/morphia/morphia/0.99/morphia-0.99.jar"/>
diff --git a/modules/plugins/jboss-as-7/pom.xml b/modules/plugins/jboss-as-7/pom.xml
index 8a2b9e0..6c9a833 100644
--- a/modules/plugins/jboss-as-7/pom.xml
+++ b/modules/plugins/jboss-as-7/pom.xml
@@ -66,12 +66,26 @@
<version>${jboss.sasl.version}</version>
</dependency>
+ <!-- For communication with AS7 http management interface -->
+
<dependency>
<groupId>commons-httpclient</groupId>
<artifactId>commons-httpclient</artifactId>
<version>${commons-httpclient.version}</version>
+ <exclusions>
+ <exclusion>
+ <groupId>commons-codec</groupId>
+ <artifactId>commons-codec</artifactId>
+ </exclusion>
+ </exclusions>
</dependency>
-
+
+ <dependency>
+ <groupId>commons-codec</groupId>
+ <artifactId>commons-codec</artifactId>
+ <version>${commons-codec.version}</version>
+ </dependency>
+
<!-- === Test Deps === -->
<dependency>
@@ -130,6 +144,11 @@
<groupId>commons-httpclient</groupId>
<artifactId>commons-httpclient</artifactId>
</artifactItem>
+
+ <artifactItem>
+ <groupId>commons-codec</groupId>
+ <artifactId>commons-codec</artifactId>
+ </artifactItem>
</artifactItems>
<outputDirectory>${project.build.outputDirectory}/lib</outputDirectory>
diff --git a/modules/plugins/jboss-as-7/src/main/java/org/rhq/modules/plugins/jbossas7/ASUploadConnection.java b/modules/plugins/jboss-as-7/src/main/java/org/rhq/modules/plugins/jbossas7/ASUploadConnection.java
index 3a3b651..f97eb83 100644
--- a/modules/plugins/jboss-as-7/src/main/java/org/rhq/modules/plugins/jbossas7/ASUploadConnection.java
+++ b/modules/plugins/jboss-as-7/src/main/java/org/rhq/modules/plugins/jbossas7/ASUploadConnection.java
@@ -1,6 +1,6 @@
/*
* RHQ Management Platform
- * Copyright (C) 2005-2011 Red Hat, Inc.
+ * Copyright (C) 2005-2012 Red Hat, Inc.
* All rights reserved.
*
* This program is free software; you can redistribute it and/or modify
@@ -19,46 +19,76 @@
package org.rhq.modules.plugins.jbossas7;
import java.io.BufferedOutputStream;
-import java.io.BufferedReader;
import java.io.Closeable;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
-import java.io.InputStreamReader;
+import java.io.InputStream;
import java.io.OutputStream;
import org.apache.commons.httpclient.Credentials;
import org.apache.commons.httpclient.HttpClient;
+import org.apache.commons.httpclient.HttpStatus;
+import org.apache.commons.httpclient.SimpleHttpConnectionManager;
import org.apache.commons.httpclient.UsernamePasswordCredentials;
import org.apache.commons.httpclient.auth.AuthScope;
import org.apache.commons.httpclient.methods.GetMethod;
import org.apache.commons.httpclient.methods.PostMethod;
+import org.apache.commons.httpclient.methods.multipart.FilePart;
+import org.apache.commons.httpclient.methods.multipart.MultipartRequestEntity;
+import org.apache.commons.httpclient.methods.multipart.Part;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.codehaus.jackson.JsonNode;
import org.codehaus.jackson.map.ObjectMapper;
import org.rhq.core.util.StringUtil;
+import org.rhq.modules.plugins.jbossas7.helper.ServerPluginConfiguration;
/**
- * TODO review comments of the class. Add message to say that's it's callers resonsability to call finishUpload or cancelUpload in order to free resources
- *
* Connection for uploading of content.
- * Partially taken from https://github.com/jbossas/jboss-as/blob/master/testsuite/smoke/src/test/...
+ *
+ * This class needs to cache the content to be uploaded. Users of this class should:
+ * <ol>
+ * <li>Call {@link #getOutputStream()} an write their content to the returned {@link OutputStream}</li>
+ * <li>Call {@link #finishUpload()} to actually upload the content</li>
+ * </ol>
+ *
+ * As instances of this class held some resources it is the caller responsibility to call {@link #cancelUpload()}
+ * instead of {@link #finishUpload()} if, for example, an {@link IOException} occured while writing their content
+ * to the {@link OutputStream}.
+ *
+ * Original code taken from https://github.com/jbossas/jboss-as/blob/master/testsuite/smoke/src/test/...
*
* @author Jonathan Pearlin (of the original code)
* @author Heiko W. Rupp
- *
+ * @author Thomas Segismont
*/
public class ASUploadConnection {
private static final String HTTP_SCHEME = "http";
- private static final String UPLOAD_URL_PATH = ASConnection.MANAGEMENT + "/add-content";
+ private static final int SOCKET_CONNECTION_TIMEOUT = 30 * 1000; // 60sec
private static final int SOCKET_READ_TIMEOUT = 60 * 1000; // 30sec
- private static final int SOCKET_CONNECTION_TIMEOUT = 30 * 1000; // 60sec
+ private static final String TRIGGER_AUTH_URL_PATH = ASConnection.MANAGEMENT;
+
+ private static final String UPLOAD_URL_PATH = ASConnection.MANAGEMENT + "/add-content";
+
+ private static final int FILE_POST_MAX_LOGGABLE_RESPONSE_LENGTH = 1024 * 2; // 2k max
+
+ private static final String SYSTEM_LINE_SEPARATOR = System.getProperty("line.separator");
+
+ private static final String EMPTY_JSON_TREE = "{}";
+
+ private static final String JSON_NODE_FAILURE_DESCRIPTION = "failure-description";
+
+ private static final String JSON_NODE_FAILURE_DESCRIPTION_VALUE_DEFAULT = "FailureDescription: -input was null-";
+
+ private static final String JSON_NODE_OUTCOME = "outcome";
+
+ private static final String JSON_NODE_OUTCOME_VALUE_FAILED = "failed";
private static final Log log = LogFactory.getLog(ASUploadConnection.class);
@@ -76,14 +106,22 @@ public class ASUploadConnection {
private BufferedOutputStream cacheOutputStream;
- private boolean credentialsProvided() {
- // If null user or password is given to the constructor
- // no credentials instance is created
- return credentials != null;
- }
-
- public ASUploadConnection(String dcHost, int port, String user, String password, String fileName) {
- if (dcHost == null) {
+ /**
+ * Creates a new {@link ASUploadConnection} for a remote http management interface.
+ *
+ * If null user or password is given, this instance will not be able to reply to an authentication challenge.
+ *
+ * It's the responsibility of the caller to make sure either {@link #finishUpload()} or {@link #cancelUpload()}
+ * will be called to free resources this class helds.
+ *
+ * @param host - hostname of the remote http management interface
+ * @param port - port of the remote http management interface
+ * @param user - username to logon with to the remote http management interface.
+ * @param password - password to logon with to the remote http management interface
+ * @param fileName - fileName of the content (to provide in multipart post request)
+ */
+ public ASUploadConnection(String host, int port, String user, String password, String fileName) {
+ if (host == null) {
throw new IllegalArgumentException("Management host cannot be null.");
}
if (port <= 0 || port > 65535) {
@@ -92,7 +130,7 @@ public class ASUploadConnection {
if (StringUtil.isBlank(fileName)) {
throw new IllegalArgumentException("Filename cannot be blank");
}
- this.host = dcHost;
+ this.host = host;
this.port = port;
if (user != null && password != null) {
credentials = new UsernamePasswordCredentials(user, password);
@@ -101,143 +139,158 @@ public class ASUploadConnection {
}
/**
- * TODO : more
- * Gives an outpustream where callers should write the content that will be uploaded to AS7 when {@link #finishUpload()} will be called.
+ * This factory method simplifies creation of a new {@link ASUploadConnection} instance given the caller has
+ * access to the {@link ServerPluginConfiguration}.
+ *
+ * @param pluginConfig - the {@link ServerPluginConfiguration}
+ * @param fileName - fileName of the content (to provide in multipart post request)
+ * @return
+ */
+ public static ASUploadConnection newInstanceForServerPluginConfiguration(ServerPluginConfiguration pluginConfig,
+ String fileName) {
+ return new ASUploadConnection(pluginConfig.getHostname(), pluginConfig.getPort(), pluginConfig.getUser(),
+ pluginConfig.getPassword(), fileName);
+ }
+
+ /**
+ * Gives an outpustream where callers should write the content which will be uploaded to AS7
+ * when {@link #finishUpload()} will be called.
*
- * @return an outputstream or null if it could not be created.
+ * @return an {@link OutputStream} or null if it could not be created.
*/
public OutputStream getOutputStream() {
try {
- cacheFile = File.createTempFile("as7upload-" + fileName, "cache");
+ cacheFile = File.createTempFile(getClass().getSimpleName(), ".cache");
cacheOutputStream = new BufferedOutputStream(new FileOutputStream(cacheFile));
return cacheOutputStream;
} catch (IOException e) {
log.error("Could not create outputstream for " + fileName, e);
}
return null;
-
- // String url = "http://" + host + ":" + port + UPLOAD_URL_PATH;
- // try {
- // // Create the HTTP connection to the upload URL
- // connection = (HttpURLConnection) new URL(url).openConnection();
- // connection.setConnectTimeout(30 * 1000); // 30s
- // connection.setReadTimeout(timeout * 1000); // default 60s
- // connection.setDoInput(true);
- // connection.setDoOutput(true);
- // connection.setRequestMethod(POST_REQUEST_METHOD);
- // connection.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + BOUNDARY_PARAM);
- //
- // // Grab the test WAR file and get a stream to its contents to be included in the POST.
- // os = new BufferedOutputStream(connection.getOutputStream());
- // os.write(buildPostRequestHeader(fileName));
- //
- // return os;
- // }
- // catch (Exception e) {
- // log.error("Failed to open output stream to URL [" + url + "]: " + e, e);
- // }
- //
- // return null;
}
/**
- * TODO
+ * To be called instead of {@link #finishUpload()} if one doesn't want to upload the cached content.
+ *
+ * It's important to call this method if not actually uploading as it frees resources this class helds.
*/
public void cancelUpload() {
closeQuietly(cacheOutputStream);
- cacheFile.delete();
+ deleteCacheFile();
}
/**
- * TODO
- * @return
+ * Triggers the real upload to the AS7 instance. At this point the caller should have written
+ * the content in the {@link OutputStream} given by {@link #getOutputStream()}.
+ *
+ * @return a {@link JsonNode} instance read from the upload response body or null if something went wrong.
*/
public JsonNode finishUpload() {
closeQuietly(cacheOutputStream);
- String targetURL = scheme + "://" + host + ":" + port + UPLOAD_URL_PATH;
-
- // TODO : we use the same url for the hack but there maybe is a management endpoint with very little response
- // We will issue a simple get request in order to trigger authentication challenge.
+ // We will first send a simple get request in order to trigger authentication challenge.
// This allows to send the potentially big file only once to the server
// The typical resulting http exchange would be:
+ //
// GET without auth <- 401 (start auth challenge : the server will name the realm and the scheme)
// GET with auth <- 200
// POST big file
- GetMethod triggerAuthGET = new GetMethod(targetURL);
-
- PostMethod filePOST = new PostMethod(targetURL);
+ //
+ // Note this only works because we use SimpleHttpConnectionManager which maintains
+ // only one HttpConnection
+ //
+ // A better way to avoid uploading a big file multiple times would be to use header Expect: Continue
+ // Unfortunately AS7 responds 100 Continue even if the authentication headers are not yet present
- HttpClient client = new HttpClient();
+ SimpleHttpConnectionManager httpConnectionManager = new SimpleHttpConnectionManager();
+ HttpClient client = new HttpClient(httpConnectionManager);
if (credentialsProvided()) {
client.getState().setCredentials(new AuthScope(host, port, AuthScope.ANY_REALM), credentials);
}
client.getHttpConnectionManager().getParams().setConnectionTimeout(SOCKET_CONNECTION_TIMEOUT);
client.getHttpConnectionManager().getParams().setSoTimeout(SOCKET_READ_TIMEOUT);
- JsonNode tree = null;
+ String triggerAuthURL = scheme + "://" + host + ":" + port + TRIGGER_AUTH_URL_PATH;
+ GetMethod triggerAuthGET = new GetMethod(triggerAuthURL);
try {
- os.write(buildPostRequestFooter());
- os.flush();
+ // Send GET request in order to trigger authentication
+ // We don't check response code because we're not already uploading the file
+ client.executeMethod(triggerAuthGET);
+ } catch (Exception ignore) {
+ // We don't stop trying upload if triggerAuthGET raises exception
+ // See comment above
+ } finally {
+ triggerAuthGET.releaseConnection();
+ }
- int code = connection.getResponseCode();
- if (code != 200) {
- log.warn("Response code for file upload: " + code + " " + connection.getResponseMessage());
- }
- if (code == 500)
- is = connection.getErrorStream();
- else
- is = connection.getInputStream();
-
- if (is != null) {
- BufferedReader in = new BufferedReader(new InputStreamReader(is));
- String line;
- StringBuilder builder = new StringBuilder();
- while ((line = in.readLine()) != null) {
- builder.append(line);
- }
+ String uploadURL = scheme + "://" + host + ":" + port + UPLOAD_URL_PATH;
+ PostMethod filePOST = new PostMethod(uploadURL);
+ try {
- ObjectMapper mapper = new ObjectMapper();
+ // Now upload file with multipart POST request
+ Part[] parts = { new FilePart(fileName, cacheFile) };
+ filePOST.setRequestEntity(new MultipartRequestEntity(parts, filePOST.getParams()));
+ int responseCode = client.executeMethod(filePOST);
+ if (responseCode != HttpStatus.SC_OK) {
+ logUploadDoesNotEndWithHttpOkStatus(filePOST, responseCode);
+ return null;
+ }
- String s = builder.toString();
- if (s != null)
- tree = mapper.readTree(s);
- else
- log.warn("- no result received from InputStream -");
- } else
- log.warn("- no InputStream available -");
+ ObjectMapper objectMapper = new ObjectMapper();
+ InputStream responseBodyAsStream = filePOST.getResponseBodyAsStream();
+ if (responseBodyAsStream == null) {
+ log.warn("POST request has no response body");
+ return objectMapper.readTree(EMPTY_JSON_TREE);
+ }
+ return objectMapper.readTree(responseBodyAsStream);
- } catch (IOException e) {
+ } catch (Exception e) {
log.error(e);
+ return null;
} finally {
- closeQuietly(is);
- closeQuietly(os);
+ // First release connection
+ filePOST.releaseConnection();
+ // Then force close
+ httpConnectionManager.closeIdleConnections(0);
+ deleteCacheFile();
}
-
- return tree;
}
+ /**
+ * Inspects the supplied {@link JsonNode} instance and returns the json 'failure-description' node value as text.
+ *
+ * @param jsonNode
+ * @return
+ */
public static String getFailureDescription(JsonNode jsonNode) {
- if (jsonNode == null)
- return "getFailureDescription: -input was null-";
- JsonNode node = jsonNode.findValue("failure-description");
+ if (jsonNode == null) {
+ return JSON_NODE_FAILURE_DESCRIPTION_VALUE_DEFAULT;
+ }
+ JsonNode node = jsonNode.findValue(JSON_NODE_FAILURE_DESCRIPTION);
+ if (node == null) {
+ return JSON_NODE_FAILURE_DESCRIPTION_VALUE_DEFAULT;
+ }
return node.getValueAsText();
}
- static boolean isErrorReply(JsonNode in) {
- if (in == null)
+ /**
+ * Inspects the supplied {@link JsonNode} instance to determine if it represents an error outcome.
+ *
+ * @param jsonNode
+ * @return
+ */
+ public static boolean isErrorReply(JsonNode jsonNode) {
+ if (jsonNode == null) {
return true;
+ }
- if (in.has("outcome")) {
+ if (jsonNode.has(JSON_NODE_OUTCOME)) {
String outcome = null;
try {
- JsonNode outcomeNode = in.findValue("outcome");
+ JsonNode outcomeNode = jsonNode.findValue(JSON_NODE_OUTCOME);
outcome = outcomeNode.getTextValue();
- if (outcome.equals("failed")) {
- JsonNode reasonNode = in.findValue("failure-description");
-
- reasonNode.getTextValue();
+ if (outcome.equals(JSON_NODE_OUTCOME_VALUE_FAILED)) {
return true;
}
} catch (Exception e) {
@@ -248,6 +301,29 @@ public class ASUploadConnection {
return false;
}
+ private boolean credentialsProvided() {
+ // If null user or password is given to the constructor
+ // no credentials instance is created
+ return credentials != null;
+ }
+
+ private void logUploadDoesNotEndWithHttpOkStatus(PostMethod filePOST, int responseCode) {
+ StringBuilder logMessageBuilder = new StringBuilder("File upload failed: ").append(HttpStatus
+ .getStatusText(responseCode));
+ // If it's sure there is a response body and it's not too long
+ if (filePOST.getResponseContentLength() > 0
+ && filePOST.getResponseContentLength() < FILE_POST_MAX_LOGGABLE_RESPONSE_LENGTH) {
+ try {
+ // It is safe to call getResponseBodyAsString as we know the body is not too long
+ String responseBodyAsString = filePOST.getResponseBodyAsString();
+ logMessageBuilder.append(SYSTEM_LINE_SEPARATOR).append(responseBodyAsString);
+ } catch (IOException ignore) {
+ // If we can't get the response body, we'll just not log it
+ }
+ }
+ log.warn(logMessageBuilder.toString());
+ }
+
private void closeQuietly(final Closeable closeable) {
if (closeable != null) {
try {
@@ -257,4 +333,10 @@ public class ASUploadConnection {
}
}
+ private void deleteCacheFile() {
+ if (cacheFile != null) {
+ cacheFile.delete();
+ }
+ }
+
}
diff --git a/modules/plugins/jboss-as-7/src/main/java/org/rhq/modules/plugins/jbossas7/BaseComponent.java b/modules/plugins/jboss-as-7/src/main/java/org/rhq/modules/plugins/jbossas7/BaseComponent.java
index 080c60f..2451728 100644
--- a/modules/plugins/jboss-as-7/src/main/java/org/rhq/modules/plugins/jbossas7/BaseComponent.java
+++ b/modules/plugins/jboss-as-7/src/main/java/org/rhq/modules/plugins/jbossas7/BaseComponent.java
@@ -63,7 +63,6 @@ import org.rhq.core.pluginapi.measurement.MeasurementFacet;
import org.rhq.core.pluginapi.operation.OperationFacet;
import org.rhq.core.pluginapi.operation.OperationResult;
import org.rhq.core.pluginapi.util.StartScriptConfiguration;
-import org.rhq.modules.plugins.jbossas7.helper.ServerPluginConfiguration;
import org.rhq.modules.plugins.jbossas7.json.Address;
import org.rhq.modules.plugins.jbossas7.json.CompositeOperation;
import org.rhq.modules.plugins.jbossas7.json.Operation;
@@ -80,7 +79,7 @@ import org.rhq.modules.plugins.jbossas7.json.Result;
* @param <T> the type of the component's parent resource component
*/
public class BaseComponent<T extends ResourceComponent<?>> implements AS7Component<T>, MeasurementFacet,
- ConfigurationFacet, DeleteResourceFacet, CreateChildResourceFacet, OperationFacet {
+ ConfigurationFacet, DeleteResourceFacet, CreateChildResourceFacet, OperationFacet {
private static final String INTERNAL = "_internal:";
private static final int INTERNAL_SIZE = INTERNAL.length();
@@ -105,6 +104,7 @@ public class BaseComponent<T extends ResourceComponent<?>> implements AS7Compone
* Start the resource connection
* @see org.rhq.core.pluginapi.inventory.ResourceComponent#start(org.rhq.core.pluginapi.inventory.ResourceContext)
*/
+ @Override
public void start(ResourceContext<T> context) throws InvalidPluginConfigurationException, Exception {
this.context = context;
pluginConfiguration = context.getPluginConfiguration();
@@ -132,6 +132,7 @@ public class BaseComponent<T extends ResourceComponent<?>> implements AS7Compone
* Return availability of this resource
* @see org.rhq.core.pluginapi.inventory.ResourceComponent#getAvailability()
*/
+ @Override
public AvailabilityType getAvailability() {
ReadResource op = new ReadResource(address);
Result res = getASConnection().execute(op);
@@ -147,7 +148,7 @@ public class BaseComponent<T extends ResourceComponent<?>> implements AS7Compone
while ((component != null) && !(component instanceof BaseServerComponent)) {
component = (BaseComponent<?>) component.context.getParentResourceComponent();
}
- return (BaseServerComponent)component;
+ return (BaseServerComponent) component;
}
public BaseServerComponent getServerComponent() {
@@ -158,6 +159,7 @@ public class BaseComponent<T extends ResourceComponent<?>> implements AS7Compone
* Gather measurement data
* @see org.rhq.core.pluginapi.measurement.MeasurementFacet#getValues(org.rhq.core.domain.measurement.MeasurementReport, java.util.Set)
*/
+ @Override
public void getValues(MeasurementReport report, Set<MeasurementScheduleRequest> metrics) throws Exception {
for (MeasurementScheduleRequest req : metrics) {
@@ -262,19 +264,22 @@ public class BaseComponent<T extends ResourceComponent<?>> implements AS7Compone
report.addData(data);
}
+ @Override
public ASConnection getASConnection() {
return (this.testConnection != null) ? this.testConnection : getServerComponent().getASConnection();
}
+ @Override
public String getPath() {
return path;
}
+ @Override
public Configuration loadResourceConfiguration() throws Exception {
ConfigurationDefinition configDef = context.getResourceType().getResourceConfigurationDefinition();
ConfigurationLoadDelegate delegate = new ConfigurationLoadDelegate(configDef, getASConnection(), address,
- includeRuntime);
+ includeRuntime);
Configuration configuration = delegate.loadResourceConfiguration();
// Read server state
@@ -289,7 +294,8 @@ public class BaseComponent<T extends ResourceComponent<?>> implements AS7Compone
}
if (res.isReloadRequired()) {
- PropertySimple oobMessage = new PropertySimple("__OOB","The server needs a reload for the latest changes to come effective.");
+ PropertySimple oobMessage = new PropertySimple("__OOB",
+ "The server needs a reload for the latest changes to come effective.");
configuration.put(oobMessage);
}
if (res.isRestartRequired()) {
@@ -300,6 +306,7 @@ public class BaseComponent<T extends ResourceComponent<?>> implements AS7Compone
return configuration;
}
+ @Override
public void updateResourceConfiguration(ConfigurationUpdateReport report) {
ConfigurationDefinition configDef = context.getResourceType().getResourceConfigurationDefinition();
@@ -354,18 +361,19 @@ public class BaseComponent<T extends ResourceComponent<?>> implements AS7Compone
// check if there is already a child with th desired type is present
Configuration pluginConfig = report.getPluginConfiguration();
PropertySimple pathProperty = pluginConfig.getSimple("path");
- if (path==null || path.isEmpty()) {
+ if (path == null || path.isEmpty()) {
report.setErrorMessage("No path property found in plugin configuration");
report.setStatus(CreateResourceStatus.INVALID_CONFIGURATION);
return report;
}
- ReadChildrenNames op = new ReadChildrenNames(address,pathProperty.getStringValue());
+ ReadChildrenNames op = new ReadChildrenNames(address, pathProperty.getStringValue());
Result res = connection.execute(op);
if (res.isSuccess()) {
List<String> entries = (List<String>) res.getResult();
if (!entries.isEmpty()) {
- report.setErrorMessage("Resource is a singleton, but there are already children " + entries + " please remove them and retry");
+ report.setErrorMessage("Resource is a singleton, but there are already children " + entries
+ + " please remove them and retry");
report.setStatus(CreateResourceStatus.FAILURE);
return report;
}
@@ -395,11 +403,23 @@ public class BaseComponent<T extends ResourceComponent<?>> implements AS7Compone
ContentServices contentServices = cctx.getContentServices();
String resourceTypeName = report.getResourceType().getName();
- ServerPluginConfiguration serverPluginConfig = getServerComponent().getServerPluginConfiguration();
- ASUploadConnection uploadConnection = new ASUploadConnection(serverPluginConfig.getHostname(),
- serverPluginConfig.getPort(), serverPluginConfig.getUser(), serverPluginConfig.getPassword());
- OutputStream out = uploadConnection.getOutputStream(details.getKey().getName());
- contentServices.downloadPackageBitsForChildResource(cctx, resourceTypeName, details.getKey(), out);
+ ASUploadConnection uploadConnection = ASUploadConnection.newInstanceForServerPluginConfiguration(
+ getServerComponent().getServerPluginConfiguration(), details.getKey().getName());
+
+ OutputStream out = uploadConnection.getOutputStream();
+ if (out == null) {
+ report.setStatus(CreateResourceStatus.FAILURE);
+ report.setErrorMessage("An error occured while the agent was preparing for content download");
+ return report;
+ }
+ try {
+ contentServices.downloadPackageBitsForChildResource(cctx, resourceTypeName, details.getKey(), out);
+ } catch (Exception e) {
+ uploadConnection.cancelUpload();
+ report.setStatus(CreateResourceStatus.FAILURE);
+ report.setErrorMessage("An error occured while the agent was downloading the content");
+ return report;
+ }
JsonNode uploadResult = uploadConnection.finishUpload();
if (verbose) {
@@ -409,12 +429,11 @@ public class BaseComponent<T extends ResourceComponent<?>> implements AS7Compone
if (ASUploadConnection.isErrorReply(uploadResult)) {
report.setStatus(CreateResourceStatus.FAILURE);
report.setErrorMessage(ASUploadConnection.getFailureDescription(uploadResult));
-
return report;
}
// Key is available from UI and CLI
- String fileName = details.getKey().getName();
+ String fileName = details.getKey().getName();
String runtimeName = report.getPackageDetails().getDeploymentTimeConfiguration().getSimpleValue("runtimeName");
if (runtimeName == null || runtimeName.isEmpty()) {
@@ -523,14 +542,12 @@ public class BaseComponent<T extends ResourceComponent<?>> implements AS7Compone
int colonPos = name.indexOf(':');
what = name.substring(0, colonPos);
op = name.substring(colonPos + 1);
- }
- else {
- what=""; // dummy value
+ } else {
+ what = ""; // dummy value
op = name;
}
Operation operation = null;
-
Address theAddress = new Address();
if (what.equals("server-group")) {
@@ -583,11 +600,10 @@ public class BaseComponent<T extends ResourceComponent<?>> implements AS7Compone
if (prop instanceof PropertySimple) {
PropertySimple ps = (PropertySimple) prop;
if (ps.getStringValue() != null) {
- Object val = getObjectForProperty(ps,op);
- operation.addAdditionalProperty(ps.getName(),val);
+ Object val = getObjectForProperty(ps, op);
+ operation.addAdditionalProperty(ps.getName(), val);
}
- }
- else if (prop instanceof PropertyList) {
+ } else if (prop instanceof PropertyList) {
PropertyList pl = (PropertyList) prop;
List<Object> items = new ArrayList<Object>(pl.getList().size());
// Loop over the inner elements of the list
@@ -595,14 +611,13 @@ public class BaseComponent<T extends ResourceComponent<?>> implements AS7Compone
if (p2 instanceof PropertySimple) {
PropertySimple ps = (PropertySimple) p2;
if (ps.getStringValue() != null) {
- Object val = getObjectForPropertyList(ps,pl,op);
+ Object val = getObjectForPropertyList(ps, pl, op);
items.add(val);
}
}
}
- operation.addAdditionalProperty(pl.getName(),items);
- }
- else {
+ operation.addAdditionalProperty(pl.getName(), items);
+ } else {
log.error("PropertyMap for " + prop.getName() + " not yet supported");
}
}
@@ -637,7 +652,7 @@ public class BaseComponent<T extends ResourceComponent<?>> implements AS7Compone
*/
Object getObjectForProperty(PropertySimple prop, String operationName) {
ConfigurationDefinition parameterDefinitions = getParameterDefinitionsForOperation(operationName);
- if (parameterDefinitions==null)
+ if (parameterDefinitions == null)
return null;
PropertyDefinition pd = parameterDefinitions.get(prop.getName());
@@ -660,14 +675,14 @@ public class BaseComponent<T extends ResourceComponent<?>> implements AS7Compone
*/
Object getObjectForPropertyList(PropertySimple prop, PropertyList propertyList, String operationName) {
ConfigurationDefinition parameterDefinitions = getParameterDefinitionsForOperation(operationName);
- if (parameterDefinitions==null)
+ if (parameterDefinitions == null)
return null;
PropertyDefinition def = parameterDefinitions.get(propertyList.getName());
- if (def instanceof PropertyDefinitionList) {
+ if (def instanceof PropertyDefinitionList) {
PropertyDefinitionList definitionList = (PropertyDefinitionList) def;
PropertyDefinition tmp = definitionList.getMemberDefinition();
- if (tmp instanceof PropertyDefinitionSimple) {
+ if (tmp instanceof PropertyDefinitionSimple) {
return getObjectForProperty(prop, (PropertyDefinitionSimple) tmp);
}
}
@@ -755,7 +770,7 @@ public class BaseComponent<T extends ResourceComponent<?>> implements AS7Compone
Result res = getASConnection().execute(op);
if (!res.isSuccess()) {
throw new Exception("Failed to read attribute [" + name + "] of address [" + getAddress().getPath()
- + "] - response: " + res);
+ + "] - response: " + res);
}
return (T) res.getResult();
}
@@ -797,11 +812,13 @@ public class BaseComponent<T extends ResourceComponent<?>> implements AS7Compone
int endIndex = expressionValue.indexOf('}', beginIndex);
if (endIndex >= 0) {
String expression = expressionValue.substring(beginIndex + 2, endIndex);
- StartScriptConfiguration startScriptConfig = getServerComponent().getStartScriptConfiguration();
+ StartScriptConfiguration startScriptConfig = getServerComponent()
+ .getStartScriptConfiguration();
List<String> startScriptArgs = startScriptConfig.getStartScriptArgs();
for (String startScriptArg : startScriptArgs) {
if (startScriptArg.startsWith("-Djboss.default.multicast.address=")) {
- multicastHost = startScriptArg.substring("-Djboss.default.multicast.address=".length());
+ multicastHost = startScriptArg.substring("-Djboss.default.multicast.address="
+ .length());
break;
}
}
@@ -812,7 +829,7 @@ public class BaseComponent<T extends ResourceComponent<?>> implements AS7Compone
multicastHost = defaultValue;
} else {
log.error("Failed to resolve expression value [" + expressionValue
- + "] of 'multicast-address' attribute.");
+ + "] of 'multicast-address' attribute.");
}
}
}
@@ -822,7 +839,8 @@ public class BaseComponent<T extends ResourceComponent<?>> implements AS7Compone
}
multicastPort = readAttribute(jgroupsSocketBindingAddress, "multicast-port", Integer.class);
} catch (Exception e) {
- throw new RuntimeException("Failed to lookup multicast address for socket binding [" + socketBinding + "].");
+ throw new RuntimeException("Failed to lookup multicast address for socket binding [" + socketBinding
+ + "].");
}
if (multicastHost != null && multicastPort != null) {
diff --git a/modules/plugins/jboss-as-7/src/main/java/org/rhq/modules/plugins/jbossas7/DeploymentComponent.java b/modules/plugins/jboss-as-7/src/main/java/org/rhq/modules/plugins/jbossas7/DeploymentComponent.java
index 3cf2cdb..0d166b4 100644
--- a/modules/plugins/jboss-as-7/src/main/java/org/rhq/modules/plugins/jbossas7/DeploymentComponent.java
+++ b/modules/plugins/jboss-as-7/src/main/java/org/rhq/modules/plugins/jbossas7/DeploymentComponent.java
@@ -50,34 +50,35 @@ import org.rhq.modules.plugins.jbossas7.json.Result;
* Deal with deployments
* @author Heiko W. Rupp
*/
-public class DeploymentComponent extends BaseComponent<ResourceComponent<?>> implements OperationFacet, ContentFacet {
+public class DeploymentComponent extends BaseComponent<ResourceComponent<?>> implements OperationFacet, ContentFacet {
private static final String DOMAIN_DATA_CONTENT_SUBDIR = "/data/content";
private boolean verbose = ASConnection.verbose;
private File deploymentFile;
@Override
- public void start(ResourceContext<ResourceComponent<?>> context) throws InvalidPluginConfigurationException, Exception {
+ public void start(ResourceContext<ResourceComponent<?>> context) throws InvalidPluginConfigurationException,
+ Exception {
super.start(context);
deploymentFile = determineDeploymentFile();
}
@Override
public AvailabilityType getAvailability() {
- Operation op = new ReadAttribute(getAddress(),"enabled");
+ Operation op = new ReadAttribute(getAddress(), "enabled");
Result res = getASConnection().execute(op);
if (!res.isSuccess())
return AvailabilityType.DOWN;
- if (res.getResult()== null || !(Boolean)(res.getResult()))
+ if (res.getResult() == null || !(Boolean) (res.getResult()))
return AvailabilityType.DOWN;
return AvailabilityType.UP;
}
@Override
- public OperationResult invokeOperation(String name,
- Configuration parameters) throws InterruptedException, Exception {
+ public OperationResult invokeOperation(String name, Configuration parameters) throws InterruptedException,
+ Exception {
if (name.equals("enable")) {
return invokeSimpleOperation("deploy");
@@ -86,7 +87,7 @@ public class DeploymentComponent extends BaseComponent<ResourceComponent<?>> imp
} else if (name.equals("restart")) {
OperationResult result = invokeSimpleOperation("undeploy");
- if(result.getErrorMessage() == null){
+ if (result.getErrorMessage() == null) {
result = invokeSimpleOperation("deploy");
}
@@ -97,7 +98,7 @@ public class DeploymentComponent extends BaseComponent<ResourceComponent<?>> imp
}
private OperationResult invokeSimpleOperation(String action) {
- Operation op = new Operation(action,getAddress());
+ Operation op = new Operation(action, getAddress());
Result res = getASConnection().execute(op);
OperationResult result = new OperationResult();
if (res.isSuccess()) {
@@ -115,19 +116,17 @@ public class DeploymentComponent extends BaseComponent<ResourceComponent<?>> imp
return result;
}
-
@Override
public List<DeployPackageStep> generateInstallationSteps(ResourcePackageDetails packageDetails) {
return new ArrayList<DeployPackageStep>();
}
@Override
- public DeployPackagesResponse deployPackages(Set<ResourcePackageDetails> packages,
- ContentServices contentServices) {
+ public DeployPackagesResponse deployPackages(Set<ResourcePackageDetails> packages, ContentServices contentServices) {
log.debug("Starting deployment..");
DeployPackagesResponse response = new DeployPackagesResponse();
- if (packages.size()!=1) {
+ if (packages.size() != 1) {
response.setOverallRequestResult(ContentResponseResult.FAILURE);
response.setOverallRequestErrorMessage("Can only deploy one package at a time");
log.warn("deployPackages can only deploy one package at a time");
@@ -135,14 +134,27 @@ public class DeploymentComponent extends BaseComponent<ResourceComponent<?>> imp
ResourcePackageDetails detail = packages.iterator().next();
- ASUploadConnection uploadConnection = new ASUploadConnection(getASConnection());
- OutputStream out = uploadConnection.getOutputStream(detail.getKey().getName());
+ ASUploadConnection uploadConnection = ASUploadConnection.newInstanceForServerPluginConfiguration(
+ getServerComponent().getServerPluginConfiguration(), detail.getKey().getName());
+ OutputStream out = uploadConnection.getOutputStream();
+ if (out == null) {
+ response.setOverallRequestResult(ContentResponseResult.FAILURE);
+ response
+ .setOverallRequestErrorMessage("An error occured while the agent was preparing for content download");
+ return response;
+ }
ResourceType resourceType = context.getResourceType();
- log.info("Deploying " + resourceType.getName() + " Resource with key [" + detail.getKey() +"]...");
+ log.info("Deploying " + resourceType.getName() + " Resource with key [" + detail.getKey() + "]...");
- contentServices.downloadPackageBits(context.getContentContext(),
- detail.getKey(), out, true);
+ try {
+ contentServices.downloadPackageBits(context.getContentContext(), detail.getKey(), out, true);
+ } catch (Exception e) {
+ uploadConnection.cancelUpload();
+ response.setOverallRequestResult(ContentResponseResult.FAILURE);
+ response.setOverallRequestErrorMessage("An error occured while the agent was downloading the content");
+ return response;
+ }
JsonNode uploadResult = uploadConnection.finishUpload();
if (verbose) {
@@ -152,32 +164,29 @@ public class DeploymentComponent extends BaseComponent<ResourceComponent<?>> imp
if (ASUploadConnection.isErrorReply(uploadResult)) {
response.setOverallRequestResult(ContentResponseResult.FAILURE);
response.setOverallRequestErrorMessage(ASUploadConnection.getFailureDescription(uploadResult));
-
return response;
}
+
JsonNode resultNode = uploadResult.get("result");
String hash = resultNode.get("BYTES_VALUE").getTextValue();
-
- CreateResourceReport report1 = new CreateResourceReport("", resourceType, new Configuration(),
- new Configuration(), detail);
- //CreateResourceReport report = runDeploymentMagicOnServer(report1,detail.getKey().getName(),hash, hash);
+ new CreateResourceReport("", resourceType, new Configuration(), new Configuration(), detail);
try {
redeployOnServer(detail.getKey().getName(), hash);
response.setOverallRequestResult(ContentResponseResult.SUCCESS);
//we just deployed a different file on the AS7 server, so let's refresh ourselves
deploymentFile = determineDeploymentFile();
- DeployIndividualPackageResponse packageResponse = new DeployIndividualPackageResponse(detail.getKey(), ContentResponseResult.SUCCESS);
- response.addPackageResponse(packageResponse);
+ DeployIndividualPackageResponse packageResponse = new DeployIndividualPackageResponse(detail.getKey(),
+ ContentResponseResult.SUCCESS);
+ response.addPackageResponse(packageResponse);
- }
- catch (Exception e) {
+ } catch (Exception e) {
response.setOverallRequestResult(ContentResponseResult.FAILURE);
}
- log.info("Result of deployment of " + resourceType.getName() + " Resource with key [" + detail.getKey()
- + "]: " + response);
+ log.info("Result of deployment of " + resourceType.getName() + " Resource with key [" + detail.getKey() + "]: "
+ + response);
return response;
}
@@ -185,12 +194,12 @@ public class DeploymentComponent extends BaseComponent<ResourceComponent<?>> imp
private void redeployOnServer(String name, String hash) throws Exception {
Operation op = new Operation("full-replace-deployment", new Address());
- op.addAdditionalProperty("name",name);
+ op.addAdditionalProperty("name", name);
List<Object> content = new ArrayList<Object>(1);
- Map<String,Object> contentValues = new HashMap<String,Object>();
- contentValues.put("hash",new PROPERTY_VALUE("BYTES_VALUE",hash));
+ Map<String, Object> contentValues = new HashMap<String, Object>();
+ contentValues.put("hash", new PROPERTY_VALUE("BYTES_VALUE", hash));
content.add(contentValues);
- op.addAdditionalProperty("content",content);
+ op.addAdditionalProperty("content", content);
Result result = getASConnection().execute(op);
if (result.isRolledBack())
throw new Exception(result.getFailureDescription());
@@ -257,12 +266,12 @@ public class DeploymentComponent extends BaseComponent<ResourceComponent<?>> imp
// No content -> check for server group
if (path.startsWith(("server-group="))) {
// Server group has no content of its own - use the domain deployment
- String name = (String) path.substring(path.lastIndexOf("=")+1);
- op = new ReadResource(new Address("deployment",name));
+ String name = (String) path.substring(path.lastIndexOf("=") + 1);
+ op = new ReadResource(new Address("deployment", name));
result = getASConnection().execute(op);
if (result.isSuccess()) {
@SuppressWarnings("unchecked")
- Map<String,Object> contentMap = (Map<String, Object>) result.getResult();
+ Map<String, Object> contentMap = (Map<String, Object>) result.getResult();
content = (List<Map<String, Object>>) contentMap.get("content");
if (content.get(0).containsKey("path")) {
String path = (String) content.get(0).get("path");
@@ -270,19 +279,21 @@ public class DeploymentComponent extends BaseComponent<ResourceComponent<?>> imp
deploymentFile = getDeploymentFileFromPath(relativeTo, path);
} else if (content.get(0).containsKey("hash")) {
@SuppressWarnings("unchecked")
- String base64Hash = ((Map<String, String>)content.get(0).get("hash")).get("BYTES_VALUE");
+ String base64Hash = ((Map<String, String>) content.get(0).get("hash")).get("BYTES_VALUE");
byte[] hash = Base64.decode(base64Hash);
ServerGroupComponent sgc = (ServerGroupComponent) context.getParentResourceComponent();
- String baseDir = ((HostControllerComponent) sgc.context.getParentResourceComponent()).pluginConfiguration.getSimpleValue("baseDir");
- String contentPath = new File(baseDir , "/data/content").getAbsolutePath();
+ String baseDir = ((HostControllerComponent) sgc.context.getParentResourceComponent()).pluginConfiguration
+ .getSimpleValue("baseDir");
+ String contentPath = new File(baseDir, "/data/content").getAbsolutePath();
deploymentFile = getDeploymentFileFromHash(hash, contentPath);
}
return deploymentFile;
}
+ } else {
+ log.warn("Could not determine the location of the deployment - the content descriptor wasn't found for deployment"
+ + getAddress() + ".");
+ return null;
}
- else {
- log.warn("Could not determine the location of the deployment - the content descriptor wasn't found for deployment" + getAddress() + ".");
- return null;}
}
Boolean archive = (Boolean) content.get(0).get("archive");
@@ -298,17 +309,16 @@ public class DeploymentComponent extends BaseComponent<ResourceComponent<?>> imp
deploymentFile = getDeploymentFileFromPath(relativeTo, path);
} else if (content.get(0).containsKey("hash")) {
@SuppressWarnings("unchecked")
- String base64Hash = ((Map<String, String>)content.get(0).get("hash")).get("BYTES_VALUE");
+ String base64Hash = ((Map<String, String>) content.get(0).get("hash")).get("BYTES_VALUE");
byte[] hash = Base64.decode(base64Hash);
Address contentPathAddress;
if (context.getParentResourceComponent() instanceof ManagedASComponent) {
// -> managed server we need to check for host=x/server=y, but the path brings host=x,server-config=y
String p = ((ManagedASComponent) context.getParentResourceComponent()).getPath();
- p = p.replaceAll("server-config=","server=");
+ p = p.replaceAll("server-config=", "server=");
contentPathAddress = new Address(p);
contentPathAddress.add("core-service", "server-environment");
- }
- else {
+ } else {
// standalone
contentPathAddress = new Address("core-service", "server-environment");
}
@@ -321,16 +331,17 @@ public class DeploymentComponent extends BaseComponent<ResourceComponent<?>> imp
} else {
// No success above -> check if this is a domain deployment
if (this instanceof DomainDeploymentComponent) {
- String baseDir = ((HostControllerComponent) context.getParentResourceComponent()).pluginConfiguration.getSimpleValue("baseDir");
- contentPath = new File(baseDir , DOMAIN_DATA_CONTENT_SUBDIR).getAbsolutePath();
- }
- else {
+ String baseDir = ((HostControllerComponent) context.getParentResourceComponent()).pluginConfiguration
+ .getSimpleValue("baseDir");
+ contentPath = new File(baseDir, DOMAIN_DATA_CONTENT_SUBDIR).getAbsolutePath();
+ } else {
contentPath = "-unknown-";
}
}
deploymentFile = getDeploymentFileFromHash(hash, contentPath);
} else {
- log.warn("Failed to determine the deployment file of " + getAddress() + " deployment. Neither path nor hash attributes were available.");
+ log.warn("Failed to determine the deployment file of " + getAddress()
+ + " deployment. Neither path nor hash attributes were available.");
}
return deploymentFile;
diff --git a/modules/plugins/jboss-as-7/src/main/java/org/rhq/modules/plugins/jbossas7/ServerGroupComponent.java b/modules/plugins/jboss-as-7/src/main/java/org/rhq/modules/plugins/jbossas7/ServerGroupComponent.java
index 82b1042..71967e5 100644
--- a/modules/plugins/jboss-as-7/src/main/java/org/rhq/modules/plugins/jbossas7/ServerGroupComponent.java
+++ b/modules/plugins/jboss-as-7/src/main/java/org/rhq/modules/plugins/jbossas7/ServerGroupComponent.java
@@ -44,7 +44,6 @@ import org.rhq.core.pluginapi.content.ContentServices;
import org.rhq.core.pluginapi.inventory.CreateChildResourceFacet;
import org.rhq.core.pluginapi.operation.OperationFacet;
import org.rhq.core.pluginapi.operation.OperationResult;
-import org.rhq.modules.plugins.jbossas7.helper.ServerPluginConfiguration;
import org.rhq.modules.plugins.jbossas7.json.Address;
import org.rhq.modules.plugins.jbossas7.json.CompositeOperation;
import org.rhq.modules.plugins.jbossas7.json.Operation;
@@ -58,24 +57,23 @@ import org.rhq.modules.plugins.jbossas7.json.Result;
*/
@SuppressWarnings("unused")
public class ServerGroupComponent extends BaseComponent implements ContentFacet, CreateChildResourceFacet,
- OperationFacet {
+ OperationFacet {
private static final String SUCCESS = "success";
private static final String OUTCOME = "outcome";
@Override
- public OperationResult invokeOperation(String name,
- Configuration parameters) throws InterruptedException, Exception {
+ public OperationResult invokeOperation(String name, Configuration parameters) throws InterruptedException,
+ Exception {
- Operation op = new Operation(name,getAddress());
+ Operation op = new Operation(name, getAddress());
Result res = getASConnection().execute(op);
OperationResult result = new OperationResult();
if (res.isSuccess()) {
result.setSimpleResult(SUCCESS);
- }
- else {
+ } else {
result.setErrorMessage(res.getFailureDescription());
}
return result;
@@ -84,13 +82,12 @@ public class ServerGroupComponent extends BaseComponent implements ContentFacet,
@Override
public List<DeployPackageStep> generateInstallationSteps(ResourcePackageDetails packageDetails) {
- return null; // TODO: Customise this generated block
+ return null; // TODO: Customise this generated block
}
// TODO I think this package code is not used.
@Override
- public DeployPackagesResponse deployPackages(Set<ResourcePackageDetails> packages,
- ContentServices contentServices) {
+ public DeployPackagesResponse deployPackages(Set<ResourcePackageDetails> packages, ContentServices contentServices) {
ContentContext cctx = context.getContentContext();
@@ -98,13 +95,28 @@ public class ServerGroupComponent extends BaseComponent implements ContentFacet,
for (ResourcePackageDetails details : packages) {
- ServerPluginConfiguration serverPluginConfig = getServerComponent().getServerPluginConfiguration();
- ASUploadConnection uploadConnection = new ASUploadConnection(serverPluginConfig.getHostname(),
- serverPluginConfig.getPort(), serverPluginConfig.getUser(), serverPluginConfig.getPassword());
String packageName = details.getName();
- OutputStream out = uploadConnection.getOutputStream(packageName);
- contentServices.downloadPackageBits(cctx, details.getKey(), out, false);
+
+ ASUploadConnection uploadConnection = ASUploadConnection.newInstanceForServerPluginConfiguration(
+ getServerComponent().getServerPluginConfiguration(), packageName);
+ OutputStream out = uploadConnection.getOutputStream();
+ if (out == null) {
+ response.addPackageResponse(new DeployIndividualPackageResponse(details.getKey(),
+ ContentResponseResult.FAILURE));
+ continue;
+ }
+
+ try {
+ contentServices.downloadPackageBits(cctx, details.getKey(), out, false);
+ } catch (Exception e) {
+ uploadConnection.cancelUpload();
+ response.addPackageResponse(new DeployIndividualPackageResponse(details.getKey(),
+ ContentResponseResult.FAILURE));
+ continue;
+ }
+
JsonNode uploadResult = uploadConnection.finishUpload();
+
if (uploadResult.has(OUTCOME)) {
String outcome = uploadResult.get(OUTCOME).getTextValue();
if (outcome.equals(SUCCESS)) { // Upload was successful, so now add the file to the server group
@@ -114,20 +126,20 @@ public class ServerGroupComponent extends BaseComponent implements ContentFacet,
Address deploymentsAddress = new Address();
deploymentsAddress.add("deployment", packageName);
- Operation step1 = new Operation("add",deploymentsAddress);
-// step1.addAdditionalProperty("hash", new PROPERTY_VALUE("BYTES_VALUE", hash));
+ Operation step1 = new Operation("add", deploymentsAddress);
+ // step1.addAdditionalProperty("hash", new PROPERTY_VALUE("BYTES_VALUE", hash));
List<Object> content = new ArrayList<Object>(1);
- Map<String,Object> contentValues = new HashMap<String,Object>();
- contentValues.put("hash",new PROPERTY_VALUE("BYTES_VALUE",hash));
+ Map<String, Object> contentValues = new HashMap<String, Object>();
+ contentValues.put("hash", new PROPERTY_VALUE("BYTES_VALUE", hash));
content.add(contentValues);
- step1.addAdditionalProperty("content",content);
+ step1.addAdditionalProperty("content", content);
step1.addAdditionalProperty("name", packageName);
Address serverGroupAddress = new Address(context.getResourceKey());
serverGroupAddress.add("deployment", packageName);
- Operation step2 = new Operation("add",serverGroupAddress);
- Operation step3 = new Operation("deploy",serverGroupAddress);
+ Operation step2 = new Operation("add", serverGroupAddress);
+ Operation step3 = new Operation("deploy", serverGroupAddress);
CompositeOperation cop = new CompositeOperation();
cop.addStep(step1);
@@ -136,36 +148,35 @@ public class ServerGroupComponent extends BaseComponent implements ContentFacet,
Result result = connection.execute(cop);
if (!result.isSuccess()) // TODO get failure message into response
- response.addPackageResponse(new DeployIndividualPackageResponse(details.getKey(),ContentResponseResult.FAILURE));
+ response.addPackageResponse(new DeployIndividualPackageResponse(details.getKey(),
+ ContentResponseResult.FAILURE));
else {
DeployIndividualPackageResponse individualPackageResponse = new DeployIndividualPackageResponse(
- details.getKey(), ContentResponseResult.SUCCESS);
+ details.getKey(), ContentResponseResult.SUCCESS);
response.addPackageResponse(individualPackageResponse);
response.setOverallRequestResult(ContentResponseResult.SUCCESS);
}
- }
- else
- response.addPackageResponse(new DeployIndividualPackageResponse(details.getKey(),ContentResponseResult.FAILURE));
- }
- else {
- response.addPackageResponse(
- new DeployIndividualPackageResponse(details.getKey(), ContentResponseResult.FAILURE));
+ } else
+ response.addPackageResponse(new DeployIndividualPackageResponse(details.getKey(),
+ ContentResponseResult.FAILURE));
+ } else {
+ response.addPackageResponse(new DeployIndividualPackageResponse(details.getKey(),
+ ContentResponseResult.FAILURE));
}
}
-
return response;
}
@Override
public RemovePackagesResponse removePackages(Set<ResourcePackageDetails> packages) {
- return null; // TODO: Customise this generated block
+ return null; // TODO: Customise this generated block
}
@Override
public Set<ResourcePackageDetails> discoverDeployedPackages(PackageType type) {
- Operation op = new ReadChildrenNames(address,"deployment"); // TODO read full packages not only names
+ Operation op = new ReadChildrenNames(address, "deployment"); // TODO read full packages not only names
Result node = getASConnection().execute(op);
if (!node.isSuccess())
return null;
@@ -175,11 +186,11 @@ public class ServerGroupComponent extends BaseComponent implements ContentFacet,
for (String file : resultList) {
String t;
if (file.contains("."))
- t = file.substring(file.lastIndexOf(".")+1);
+ t = file.substring(file.lastIndexOf(".") + 1);
else
t = "-none-";
- ResourcePackageDetails detail = new ResourcePackageDetails(new PackageDetailsKey(file,"1.0",t,"all"));
+ ResourcePackageDetails detail = new ResourcePackageDetails(new PackageDetailsKey(file, "1.0", t, "all"));
details.add(detail);
}
return details;
@@ -188,11 +199,11 @@ public class ServerGroupComponent extends BaseComponent implements ContentFacet,
@Override
public InputStream retrievePackageBits(ResourcePackageDetails packageDetails) {
- return null; // TODO: Customise this generated block
+ return null; // TODO: Customise this generated block
}
private String serverGroupFromKey() {
String key1 = context.getResourceKey();
- return key1.substring(key1.lastIndexOf("/")+1);
+ return key1.substring(key1.lastIndexOf("/") + 1);
}
}
diff --git a/modules/plugins/jboss-as-7/src/test/java/org/rhq/modules/plugins/jbossas7/itest/nonpc/AbstractIntegrationTest.java b/modules/plugins/jboss-as-7/src/test/java/org/rhq/modules/plugins/jbossas7/itest/nonpc/AbstractIntegrationTest.java
index 130f7f3..428f854 100644
--- a/modules/plugins/jboss-as-7/src/test/java/org/rhq/modules/plugins/jbossas7/itest/nonpc/AbstractIntegrationTest.java
+++ b/modules/plugins/jboss-as-7/src/test/java/org/rhq/modules/plugins/jbossas7/itest/nonpc/AbstractIntegrationTest.java
@@ -59,7 +59,7 @@ import org.rhq.modules.plugins.jbossas7.json.PROPERTY_VALUE;
*
* @author Heiko W. Rupp
*/
-@Test(groups = {"integration", "nonpc"}, dependsOnGroups = "discovery")
+@Test(groups = { "integration", "nonpc" }, dependsOnGroups = "discovery")
public abstract class AbstractIntegrationTest {
protected static final String PLUGIN_NAME = "JBossAS7";
@@ -71,19 +71,19 @@ public abstract class AbstractIntegrationTest {
protected static final String MAVEN_REPO_LOCAL = System.getProperty("settings.localRepository");
String uploadToAs(String deploymentPath) throws IOException {
- ASUploadConnection conn = new ASUploadConnection(DC_HOST, DC_HTTP_PORT, DC_USER, DC_PASS);
String fileName = new File(deploymentPath).getName();
- OutputStream os = conn.getOutputStream(fileName);
+ ASUploadConnection conn = new ASUploadConnection(DC_HOST, DC_HTTP_PORT, DC_USER, DC_PASS, fileName);
+ OutputStream os = conn.getOutputStream();
-// URL url = getClass().getClassLoader().getResource(".");
-// System.out.println(url);
+ // URL url = getClass().getClassLoader().getResource(".");
+ // System.out.println(url);
InputStream fis = getClass().getClassLoader().getResourceAsStream(deploymentPath);
if (fis == null) {
File inputFile = new File(deploymentPath);
if (!inputFile.canRead()) {
throw new FileNotFoundException("Input stream for path [" + deploymentPath
- + "] could not be opened - does the file exist either in the test classpath or on the filesystem?");
+ + "] could not be opened - does the file exist either in the test classpath or on the filesystem?");
}
fis = new FileInputStream(inputFile);
}
@@ -96,7 +96,7 @@ public abstract class AbstractIntegrationTest {
}
JsonNode node = conn.finishUpload();
-// System.out.println(node);
+ // System.out.println(node);
assert node != null : "No result from upload - node was null";
assert node.has("outcome") : "No outcome from upload";
String outcome = node.get("outcome").getTextValue();
@@ -111,13 +111,12 @@ public abstract class AbstractIntegrationTest {
return connection;
}
- Operation addDeployment(String deploymentName, String bytes_value)
- {
+ Operation addDeployment(String deploymentName, String bytes_value) {
Address deploymentsAddress = new Address("deployment", deploymentName);
Operation op = new Operation("add", deploymentsAddress);
List<Object> content = new ArrayList<Object>(1);
- Map<String,Object> contentValues = new HashMap<String,Object>();
- contentValues.put("hash",new PROPERTY_VALUE("BYTES_VALUE", bytes_value));
+ Map<String, Object> contentValues = new HashMap<String, Object>();
+ contentValues.put("hash", new PROPERTY_VALUE("BYTES_VALUE", bytes_value));
content.add(contentValues);
op.addAdditionalProperty("content", content);
op.addAdditionalProperty("name", deploymentName); // this needs to be unique per upload
@@ -156,7 +155,8 @@ public abstract class AbstractIntegrationTest {
List<ServerDescriptor> servers = pluginDescriptor.getServers();
ServerDescriptor serverDescriptor = findServer(serverName, servers);
- assert serverDescriptor != null : "Server descriptor for server [" + serverName + "] not found in test plugin descriptor";
+ assert serverDescriptor != null : "Server descriptor for server [" + serverName
+ + "] not found in test plugin descriptor";
return ConfigurationMetadataParser.parse("null", serverDescriptor.getResourceConfiguration());
}
@@ -165,7 +165,8 @@ public abstract class AbstractIntegrationTest {
List<ServiceDescriptor> services = pluginDescriptor.getServices();
ServiceDescriptor serviceDescriptor = findService(serviceName, services);
- assert serviceDescriptor != null : "Service descriptor for service [" + serviceName + "] not found in plugin descriptor";
+ assert serviceDescriptor != null : "Service descriptor for service [" + serviceName
+ + "] not found in plugin descriptor";
return ConfigurationMetadataParser.parse("null", serviceDescriptor.getResourceConfiguration());
}
11 years, 4 months
[rhq] modules/integration-tests modules/plugins
by lkrejci
modules/integration-tests/apache-plugin-test/pom.xml | 1 +
modules/plugins/aliases/pom.xml | 1 +
modules/plugins/apache/pom.xml | 1 +
modules/plugins/cobbler/pom.xml | 1 +
modules/plugins/cron/pom.xml | 1 +
modules/plugins/grub/pom.xml | 1 +
modules/plugins/hosts/pom.xml | 1 +
modules/plugins/postfix/pom.xml | 1 +
modules/plugins/samba/pom.xml | 1 +
modules/plugins/sshd/pom.xml | 1 +
modules/plugins/sudoers/pom.xml | 1 +
11 files changed, 11 insertions(+)
New commits:
commit f0eeae4bbd5537966e94d7a1a9ba17d8a0981323
Author: Lukas Krejci <lkrejci(a)redhat.com>
Date: Fri Dec 21 13:00:55 2012 +0100
Define the jna.platform.library.path in the tests, too, so that the correct
augeas library gets picked up.
diff --git a/modules/integration-tests/apache-plugin-test/pom.xml b/modules/integration-tests/apache-plugin-test/pom.xml
index 390c772..4411185 100644
--- a/modules/integration-tests/apache-plugin-test/pom.xml
+++ b/modules/integration-tests/apache-plugin-test/pom.xml
@@ -279,6 +279,7 @@
<!-- <org.jboss.byteman.verbose>true</org.jboss.byteman.verbose> -->
<AugeasReferenceLeakingTest.configurationReadingInvocationCount>10</AugeasReferenceLeakingTest.configurationReadingInvocationCount>
<org.hyperic.sigar.path>${basedir}/target/itest/lib</org.hyperic.sigar.path>
+ <jna.platform.library.path>${basedir}/target/itest/lib</jna.platform.library.path>
<project.artifactId>${project.artifactId}</project.artifactId>
<project.version>${project.version}</project.version>
diff --git a/modules/plugins/aliases/pom.xml b/modules/plugins/aliases/pom.xml
index edf8b01..2244a12 100644
--- a/modules/plugins/aliases/pom.xml
+++ b/modules/plugins/aliases/pom.xml
@@ -169,6 +169,7 @@
</environmentVariables>
<systemPropertyVariables>
<org.hyperic.sigar.path>${basedir}/target/itest/lib</org.hyperic.sigar.path>
+ <jna.platform.library.path>${basedir}/target/itest/lib</jna.platform.library.path>
<project.artifactId>${project.artifactId}</project.artifactId>
<project.version>${project.version}</project.version>
</systemPropertyVariables>
diff --git a/modules/plugins/apache/pom.xml b/modules/plugins/apache/pom.xml
index 13588ed..e887a4e 100644
--- a/modules/plugins/apache/pom.xml
+++ b/modules/plugins/apache/pom.xml
@@ -231,6 +231,7 @@
</environmentVariables>
<systemPropertyVariables>
<org.hyperic.sigar.path>${basedir}/target/itest/lib</org.hyperic.sigar.path>
+ <jna.platform.library.path>${basedir}/target/itest/lib</jna.platform.library.path>
<project.artifactId>${project.artifactId}</project.artifactId>
<project.version>${project.version}</project.version>
</systemPropertyVariables>
diff --git a/modules/plugins/cobbler/pom.xml b/modules/plugins/cobbler/pom.xml
index 67c1145..b333ad2 100644
--- a/modules/plugins/cobbler/pom.xml
+++ b/modules/plugins/cobbler/pom.xml
@@ -174,6 +174,7 @@
</environmentVariables>
<systemPropertyVariables>
<org.hyperic.sigar.path>${basedir}/target/itest/lib</org.hyperic.sigar.path>
+ <jna.platform.library.path>${basedir}/target/itest/lib</jna.platform.library.path>
<project.artifactId>${project.artifactId}</project.artifactId>
<project.version>${project.version}</project.version>
</systemPropertyVariables>
diff --git a/modules/plugins/cron/pom.xml b/modules/plugins/cron/pom.xml
index b248d67..b0e4004 100644
--- a/modules/plugins/cron/pom.xml
+++ b/modules/plugins/cron/pom.xml
@@ -163,6 +163,7 @@
</environmentVariables>
<systemPropertyVariables>
<org.hyperic.sigar.path>${basedir}/target/itest/lib</org.hyperic.sigar.path>
+ <jna.platform.library.path>${basedir}/target/itest/lib</jna.platform.library.path>
<project.artifactId>${project.artifactId}</project.artifactId>
<project.version>${project.version}</project.version>
</systemPropertyVariables>
diff --git a/modules/plugins/grub/pom.xml b/modules/plugins/grub/pom.xml
index fb03e5d..0b00df8 100644
--- a/modules/plugins/grub/pom.xml
+++ b/modules/plugins/grub/pom.xml
@@ -160,6 +160,7 @@
</environmentVariables>
<systemPropertyVariables>
<org.hyperic.sigar.path>${basedir}/target/itest/lib</org.hyperic.sigar.path>
+ <jna.platform.library.path>${basedir}/target/itest/lib</jna.platform.library.path>
<project.artifactId>${project.artifactId}</project.artifactId>
<project.version>${project.version}</project.version>
</systemPropertyVariables>
diff --git a/modules/plugins/hosts/pom.xml b/modules/plugins/hosts/pom.xml
index f77421f..06315b2 100644
--- a/modules/plugins/hosts/pom.xml
+++ b/modules/plugins/hosts/pom.xml
@@ -170,6 +170,7 @@
</environmentVariables>
<systemPropertyVariables>
<org.hyperic.sigar.path>${basedir}/target/itest/lib</org.hyperic.sigar.path>
+ <jna.platform.library.path>${basedir}/target/itest/lib</jna.platform.library.path>
<project.artifactId>${project.artifactId}</project.artifactId>
<project.version>${project.version}</project.version>
</systemPropertyVariables>
diff --git a/modules/plugins/postfix/pom.xml b/modules/plugins/postfix/pom.xml
index f3539d1..29ea010 100644
--- a/modules/plugins/postfix/pom.xml
+++ b/modules/plugins/postfix/pom.xml
@@ -168,6 +168,7 @@
</environmentVariables>
<systemPropertyVariables>
<org.hyperic.sigar.path>${basedir}/target/itest/lib</org.hyperic.sigar.path>
+ <jna.platform.library.path>${basedir}/target/itest/lib</jna.platform.library.path>
<project.artifactId>${project.artifactId}</project.artifactId>
<project.version>${project.version}</project.version>
</systemPropertyVariables>
diff --git a/modules/plugins/samba/pom.xml b/modules/plugins/samba/pom.xml
index aaf326a..dd8150c 100644
--- a/modules/plugins/samba/pom.xml
+++ b/modules/plugins/samba/pom.xml
@@ -168,6 +168,7 @@
</environmentVariables>
<systemPropertyVariables>
<org.hyperic.sigar.path>${basedir}/target/itest/lib</org.hyperic.sigar.path>
+ <jna.platform.library.path>${basedir}/target/itest/lib</jna.platform.library.path>
<project.artifactId>${project.artifactId}</project.artifactId>
<project.version>${project.version}</project.version>
</systemPropertyVariables>
diff --git a/modules/plugins/sshd/pom.xml b/modules/plugins/sshd/pom.xml
index 9553b61..6d880e3 100644
--- a/modules/plugins/sshd/pom.xml
+++ b/modules/plugins/sshd/pom.xml
@@ -160,6 +160,7 @@
</environmentVariables>
<systemPropertyVariables>
<org.hyperic.sigar.path>${basedir}/target/itest/lib</org.hyperic.sigar.path>
+ <jna.platform.library.path>${basedir}/target/itest/lib</jna.platform.library.path>
<project.artifactId>${project.artifactId}</project.artifactId>
<project.version>${project.version}</project.version>
</systemPropertyVariables>
diff --git a/modules/plugins/sudoers/pom.xml b/modules/plugins/sudoers/pom.xml
index 316e07a..91bfbee 100644
--- a/modules/plugins/sudoers/pom.xml
+++ b/modules/plugins/sudoers/pom.xml
@@ -158,6 +158,7 @@
</environmentVariables>
<systemPropertyVariables>
<org.hyperic.sigar.path>${basedir}/target/itest/lib</org.hyperic.sigar.path>
+ <jna.platform.library.path>${basedir}/target/itest/lib</jna.platform.library.path>
<project.artifactId>${project.artifactId}</project.artifactId>
<project.version>${project.version}</project.version>
</systemPropertyVariables>
11 years, 4 months
[rhq] modules/enterprise
by mike thompson
modules/enterprise/gui/coregui/src/main/webapp/CoreGUI.html | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
New commits:
commit 4ad902ff3c6cb3e6b18ec58699ec96e3fd4629e3
Author: mtho11 <mikecthompson(a)gmail.com>
Date: Thu Dec 20 16:31:09 2012 -0800
[BZ 889375] Doc type change to eliminate the strange checkbox checking/unchecking behavior. Changing <meta http-equiv=X-UA-Compatible content=IE=9 />
diff --git a/modules/enterprise/gui/coregui/src/main/webapp/CoreGUI.html b/modules/enterprise/gui/coregui/src/main/webapp/CoreGUI.html
index cdcfe24..d4178e7 100644
--- a/modules/enterprise/gui/coregui/src/main/webapp/CoreGUI.html
+++ b/modules/enterprise/gui/coregui/src/main/webapp/CoreGUI.html
@@ -5,7 +5,7 @@
http://forums.smartclient.com/showthread.php?t=15973
2) solves initial app load issues that we experienced on some XP and Vista/Windows7 flavors.
-->
- <meta http-equiv="X-UA-Compatible" content="IE=8" />
+ <meta http-equiv="X-UA-Compatible" content="IE=9" />
<!-- support internationalized characters -->
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8" />
11 years, 4 months
[rhq] Branch 'feature/cassandra-backend' - modules/common modules/enterprise
by John Sanda
modules/common/cassandra-common-itests/src/main/java/org/rhq/cassandra/CCMTestNGListener.java | 36 --
modules/common/cassandra-common/pom.xml | 4
modules/common/cassandra-common/src/main/java/org/rhq/cassandra/BootstrapDeployer.java | 18 -
modules/common/cassandra-common/src/main/java/org/rhq/cassandra/CassandraClusterManager.java | 171 ++++++++++
modules/common/cassandra-common/src/main/java/org/rhq/cassandra/DeploymentOptions.java | 6
modules/common/cassandra-common/src/main/resources/module/main/module.xml | 2
modules/enterprise/server/appserver/src/main/dev-resources/bin/rhq-ccm.sh | 3
7 files changed, 203 insertions(+), 37 deletions(-)
New commits:
commit caa034bdc6acc65ce0b0d871a3cf5348b679bd6e
Author: John Sanda <jsanda(a)redhat.com>
Date: Thu Dec 20 16:45:36 2012 -0500
initial commit for the new CassandraClusterManager
As its name implies CassandraClusterManager (CCM) encapsulates the functionality
for managing an embedded cluster. The rhq-ccm.sh script which is executed by the
installer in the dev-container now invokes CCM. CCMTestNGListener has been
refactored to delegate to CCM. BootstrapDeployer is now just an implementation
detail.
diff --git a/modules/common/cassandra-common-itests/src/main/java/org/rhq/cassandra/CCMTestNGListener.java b/modules/common/cassandra-common-itests/src/main/java/org/rhq/cassandra/CCMTestNGListener.java
index 750145a..0d6d26f 100644
--- a/modules/common/cassandra-common-itests/src/main/java/org/rhq/cassandra/CCMTestNGListener.java
+++ b/modules/common/cassandra-common-itests/src/main/java/org/rhq/cassandra/CCMTestNGListener.java
@@ -49,6 +49,8 @@ public class CCMTestNGListener implements IInvokedMethodListener {
private final Log log = LogFactory.getLog(CCMTestNGListener.class);
+ private CassandraClusterManager ccm;
+
@Override
public void beforeInvocation(IInvokedMethod invokedMethod, ITestResult testResult) {
Method method = invokedMethod.getTestMethod().getConstructorOrMethod().getMethod();
@@ -87,19 +89,13 @@ public class CCMTestNGListener implements IInvokedMethodListener {
deploymentOptions.setNumNodes(numNodes);
deploymentOptions.setUsername(annotation.username());
deploymentOptions.setPassword(annotation.password());
- try {
- deploymentOptions.load();
- } catch (IOException e) {
- throw new RuntimeException("Unable to load deployment options.", e);
- }
-
- BootstrapDeployer deployer = new BootstrapDeployer();
- deployer.setDeploymentOptions(deploymentOptions);
- deployer.deploy();
+ ccm = new CassandraClusterManager(deploymentOptions);
+ List<File> nodeDirs = ccm.installCluster();
+ ccm.startCluster(nodeDirs);
ClusterInitService clusterInitService = new ClusterInitService();
- List<CassandraNode> cassandraHosts = getCassandraHosts(deployer.getCassandraHosts());
+ List<CassandraNode> cassandraHosts = getCassandraHosts(ccm.getHostNames());
if (annotation.waitForClusterToStart()) {
clusterInitService.waitForClusterToStart(cassandraHosts);
@@ -116,8 +112,8 @@ public class CCMTestNGListener implements IInvokedMethodListener {
clusterInitService.waitForSchemaAgreement("rhq", cassandraHosts);
}
- String[] hostNames = getHostNames(deployer.getCassandraHosts());
- SchemaManager schemaManager = new SchemaManager(annotation.username(), annotation.password(), hostNames);
+ SchemaManager schemaManager = new SchemaManager(annotation.username(), annotation.password(),
+ ccm.getHostNames().toArray(new String[] {}));
if (!schemaManager.schemaExists()) {
schemaManager.createSchema();
}
@@ -145,23 +141,13 @@ public class CCMTestNGListener implements IInvokedMethodListener {
return Long.parseLong(writer.getBuffer().toString());
}
- private List<CassandraNode> getCassandraHosts(String hosts) {
+ private List<CassandraNode> getCassandraHosts(List<String> hostNames) {
List<CassandraNode> cassandraHosts = new ArrayList<CassandraNode>();
- for (String s : hosts.split(",")) {
- String[] params = s.split(":");
- cassandraHosts.add(new CassandraNode(params[0], Integer.parseInt(params[1])));
-
+ for (String hostName : hostNames) {
+ cassandraHosts.add(new CassandraNode(hostName, 9160));
}
return cassandraHosts;
}
- private String[] getHostNames(String hosts) {
- List<String> hostNames = new ArrayList<String>();
- for (String s : hosts.split(",")) {
- String[] params = s.split(":");
- hostNames.add(params[0]);
- }
- return hostNames.toArray(new String[hostNames.size()]);
- }
}
diff --git a/modules/common/cassandra-common/pom.xml b/modules/common/cassandra-common/pom.xml
index c2a7e22..a3d1918 100644
--- a/modules/common/cassandra-common/pom.xml
+++ b/modules/common/cassandra-common/pom.xml
@@ -191,10 +191,6 @@
<groupId>${project.groupId}</groupId>
<artifactId>rhq-core-plugin-api</artifactId>
</artifactItem>
- <!--<artifactItem>-->
- <!--<groupId>org.apache.cassandra</groupId>-->
- <!--<artifactId>cassandra-clientutil</artifactId>-->
- <!--</artifactItem>-->
<artifactItem>
<groupId>org.apache.cassandra</groupId>
<artifactId>cassandra-thrift</artifactId>
diff --git a/modules/common/cassandra-common/src/main/java/org/rhq/cassandra/BootstrapDeployer.java b/modules/common/cassandra-common/src/main/java/org/rhq/cassandra/BootstrapDeployer.java
index 0bda778..73015c7 100644
--- a/modules/common/cassandra-common/src/main/java/org/rhq/cassandra/BootstrapDeployer.java
+++ b/modules/common/cassandra-common/src/main/java/org/rhq/cassandra/BootstrapDeployer.java
@@ -35,8 +35,10 @@ import java.io.IOException;
import java.io.InputStream;
import java.math.BigInteger;
import java.util.ArrayList;
+import java.util.Collections;
import java.util.Date;
import java.util.HashSet;
+import java.util.LinkedList;
import java.util.List;
import java.util.Properties;
import java.util.Set;
@@ -81,19 +83,20 @@ public class BootstrapDeployer {
return hosts.toString();
}
- public void deploy() throws CassandraException {
+ public List<File> deploy() throws CassandraException {
Set<String> ipAddresses = calculateLocalIPAddresses(deploymentOptions.getNumNodes());
File clusterDir = new File(deploymentOptions.getClusterDir());
File installedMarker = new File(clusterDir, ".installed");
if (isClusterInstalled()) {
- return;
+ return Collections.emptyList();
}
FileUtil.purge(clusterDir, false);
File bundleZipeFile = null;
File bundleDir = null;
+ List<File> nodeDirs = new LinkedList<File>();
try {
deploymentOptions.load();
@@ -105,6 +108,7 @@ public class BootstrapDeployer {
int jmxPort = 7200 + i;
String address = getLocalIPAddress(i + 1);
File nodeBasedir = new File(clusterDir, "node" + i);
+ nodeDirs.add(nodeBasedir);
Properties props = new Properties();
props.put("cluster.name", "rhq");
@@ -137,10 +141,10 @@ public class BootstrapDeployer {
props.put("rhq.cassandra.authorizer", deploymentOptions.getAuthorizer());
doLocalDeploy(props, bundleDir);
- startNode(nodeBasedir);
- if (i == 0) {
- waitForNodeToStart(10, address);
- }
+// startNode(nodeBasedir);
+// if (i == 0) {
+// waitForNodeToStart(10, address);
+// }
}
FileUtil.writeFile(new ByteArrayInputStream(new byte[] {0}), installedMarker);
} catch (IOException e) {
@@ -154,6 +158,8 @@ public class BootstrapDeployer {
FileUtil.purge(bundleDir, true);
}
}
+
+ return nodeDirs;
}
public static void main(String[] args) {
diff --git a/modules/common/cassandra-common/src/main/java/org/rhq/cassandra/CassandraClusterManager.java b/modules/common/cassandra-common/src/main/java/org/rhq/cassandra/CassandraClusterManager.java
new file mode 100644
index 0000000..6b6fd31
--- /dev/null
+++ b/modules/common/cassandra-common/src/main/java/org/rhq/cassandra/CassandraClusterManager.java
@@ -0,0 +1,171 @@
+/*
+ *
+ * * RHQ Management Platform
+ * * Copyright (C) 2005-2012 Red Hat, Inc.
+ * * All rights reserved.
+ * *
+ * * This program is free software; you can redistribute it and/or modify
+ * * it under the terms of the GNU General Public License, version 2, as
+ * * published by the Free Software Foundation, and/or the GNU Lesser
+ * * General Public License, version 2.1, also as published by the Free
+ * * Software Foundation.
+ * *
+ * * This program is distributed in the hope that it will be useful,
+ * * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * * GNU General Public License and the GNU Lesser General Public License
+ * * for more details.
+ * *
+ * * You should have received a copy of the GNU General Public License
+ * * and the GNU Lesser General Public License along with this program;
+ * * if not, write to the Free Software Foundation, Inc.,
+ * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+package org.rhq.cassandra;
+
+import static java.util.Arrays.asList;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import org.rhq.core.pluginapi.util.ProcessExecutionUtility;
+import org.rhq.core.system.OperatingSystemType;
+import org.rhq.core.system.ProcessExecution;
+import org.rhq.core.system.ProcessExecutionResults;
+import org.rhq.core.system.SystemInfo;
+import org.rhq.core.system.SystemInfoFactory;
+import org.rhq.core.util.PropertiesFileUpdate;
+import org.rhq.core.util.StringUtil;
+
+/**
+ * @author John Sanda
+ */
+public class CassandraClusterManager {
+
+ private final Log log = LogFactory.getLog(CassandraClusterManager.class);
+
+ private DeploymentOptions deploymentOptions;
+
+ public CassandraClusterManager() {
+ this(new DeploymentOptions());
+ }
+
+ public CassandraClusterManager(DeploymentOptions deploymentOptions) {
+ this.deploymentOptions = deploymentOptions;
+ try {
+ this.deploymentOptions.load();
+ } catch (IOException e) {
+ log.error("Failed to load deployment options", e);
+ throw new IllegalStateException("An initialization error occurred.", e);
+ }
+ }
+
+ public List<File> installCluster() {
+ if (log.isDebugEnabled()) {
+ log.debug("Installing embedded " + deploymentOptions.getNumNodes() + " node cluster to " +
+ deploymentOptions.getClusterDir());
+ } else {
+ log.info("Installing embedded cluster");
+ }
+
+ BootstrapDeployer deployer = new BootstrapDeployer();
+ deployer.setDeploymentOptions(deploymentOptions);
+ try {
+ return deployer.deploy();
+ } catch (CassandraException e) {
+ String msg = "Failed to install cluster.";
+ log.error(msg, e);
+ throw new RuntimeException(msg, e);
+ }
+ }
+
+ public void startCluster(List<File> nodeDirs) {
+ long start = System.currentTimeMillis();
+ log.info("Starting embedded cluster");
+ for (File dir : nodeDirs) {
+ ProcessExecutionResults results = startNode(dir);
+ if (results.getError() != null) {
+ log.warn("An unexpected error occurred while starting the node at " + dir, results.getError());
+ }
+ }
+ long end = System.currentTimeMillis();
+ log.info("Started embedded cluster in " + (end - start) + " ms");
+ }
+
+ private ProcessExecutionResults startNode(File basedir) {
+ if (log.isDebugEnabled()) {
+ log.debug("Starting node at " + basedir);
+ }
+ File binDir = new File(basedir, "bin");
+ File startScript;
+ SystemInfo systemInfo = SystemInfoFactory.createSystemInfo();
+
+ if (systemInfo.getOperatingSystemType() == OperatingSystemType.WINDOWS) {
+ startScript = new File(binDir, "cassandra.bat");
+ } else {
+ startScript = new File(binDir, "cassandra");
+ }
+
+ ProcessExecution startScriptExe = ProcessExecutionUtility.createProcessExecution(startScript);
+ startScriptExe.setArguments(asList("-p", "cassandra.pid"));
+
+ ProcessExecutionResults results = systemInfo.executeProcess(startScriptExe);
+ if (log.isDebugEnabled()) {
+ log.debug(startScript + " returned with exit code [" + results.getExitCode() + "]");
+ }
+
+ return results;
+ }
+
+ public void shutdownCluster() {
+ }
+
+ public List<String> getHostNames() {
+ List<String> hosts = new ArrayList<String>(deploymentOptions.getNumNodes());
+ for (int i = 0; i < deploymentOptions.getNumNodes(); ++i) {
+ hosts.add("127.0.0." + (i + 1));
+ }
+ return hosts;
+ }
+
+ public InputStream loadBundle() {
+ return null;
+ }
+
+ public static void main(String[] args) {
+ CassandraClusterManager ccm = new CassandraClusterManager();
+ List<File> nodeDirs = ccm.installCluster();
+ ccm.startCluster(nodeDirs);
+
+ PropertiesFileUpdate serverPropertiesUpdater = getServerProperties();
+ try {
+ serverPropertiesUpdater.update("rhq.cassandra.cluster.seeds",
+ StringUtil.collectionToString(ccm.getHostNames()));
+ } catch (IOException e) {
+ throw new RuntimeException("An error occurred while trying to update RHQ server properties", e);
+ }
+ }
+
+ private static PropertiesFileUpdate getServerProperties() {
+ String sysprop = System.getProperty("rhq.server.properties-file");
+ if (sysprop == null) {
+ throw new RuntimeException("The required system property [rhq.server.properties] is not defined.");
+ }
+
+ File file = new File(sysprop);
+ if (!(file.exists() && file.isFile())) {
+ throw new RuntimeException("System property [" + sysprop + "] points to in invalid file.");
+ }
+
+ return new PropertiesFileUpdate(file.getAbsolutePath());
+ }
+
+}
diff --git a/modules/common/cassandra-common/src/main/java/org/rhq/cassandra/DeploymentOptions.java b/modules/common/cassandra-common/src/main/java/org/rhq/cassandra/DeploymentOptions.java
index 96211f3..098b1b0 100644
--- a/modules/common/cassandra-common/src/main/java/org/rhq/cassandra/DeploymentOptions.java
+++ b/modules/common/cassandra-common/src/main/java/org/rhq/cassandra/DeploymentOptions.java
@@ -39,6 +39,8 @@ public class DeploymentOptions {
private final Log log = LogFactory.getLog(DeploymentOptions.class);
+ private boolean loaded;
+
private String bundleFileName;
private String bundleName;
private String bundleVersion;
@@ -60,6 +62,9 @@ public class DeploymentOptions {
}
public void load() throws IOException {
+ if (loaded) {
+ return;
+ }
InputStream stream = null;
try {
stream = getClass().getResourceAsStream("/cassandra.properties");
@@ -67,6 +72,7 @@ public class DeploymentOptions {
props.load(stream);
init(props);
+ loaded = true;
} catch (IOException e) {
log.warn("Unable to load deployment options from cassandra.properties.");
log.info("The following error occurred while trying to load options.", e);
diff --git a/modules/common/cassandra-common/src/main/resources/module/main/module.xml b/modules/common/cassandra-common/src/main/resources/module/main/module.xml
index 2b842ed..0f5af62 100644
--- a/modules/common/cassandra-common/src/main/resources/module/main/module.xml
+++ b/modules/common/cassandra-common/src/main/resources/module/main/module.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<module xmlns="urn:jboss:module:1.0" name="${moduleName}">
- <main-class name="org.rhq.cassandra.BootstrapDeployer"/>
+ <main-class name="org.rhq.cassandra.CassandraClusterManager"/>
<resources>
<resource-root path="${project.build.finalName}.jar"/>
diff --git a/modules/enterprise/server/appserver/src/main/dev-resources/bin/rhq-ccm.sh b/modules/enterprise/server/appserver/src/main/dev-resources/bin/rhq-ccm.sh
index fd67c48..033ea44 100755
--- a/modules/enterprise/server/appserver/src/main/dev-resources/bin/rhq-ccm.sh
+++ b/modules/enterprise/server/appserver/src/main/dev-resources/bin/rhq-ccm.sh
@@ -213,7 +213,8 @@ else
_RHQ_LOGLEVEL="INFO"
fi
-RHQ_CCM_JAVA_OPTS="${RHQ_CCM_JAVA_OPTS} -Djava.awt.headless=true -Drhq.server.properties-file=${RHQ_SERVER_HOME}/bin/rhq-server.properties -Drhq.ccm.logdir=${RHQ_SERVER_HOME}/logs -Drhq.ccm.loglevel=${_RHQ_LOGLEVEL}"
+# debugging the logging level now for development/testing
+RHQ_CCM_JAVA_OPTS="${RHQ_CCM_JAVA_OPTS} -Djava.awt.headless=true -Drhq.server.properties-file=${RHQ_SERVER_HOME}/bin/rhq-server.properties -Drhq.ccm.logdir=${RHQ_SERVER_HOME}/logs -Drhq.ccm.loglevel=DEBUG"
# Sample JPDA settings for remote socket debugging
#RHQ_CCM_JAVA_OPTS="${RHQ_CCM_JAVA_OPTS} -Xrunjdwp:transport=dt_socket,address=8787,server=y,suspend=y"
11 years, 4 months
[rhq] 41 commits - modules/core modules/enterprise
by Jiri Kremser
modules/core/domain/src/main/java/org/rhq/core/domain/cloud/composite/AffinityGroupCountComposite.java | 16
modules/core/domain/src/main/java/org/rhq/core/domain/cloud/composite/ServerWithAgentCountComposite.java | 14
modules/core/domain/src/main/java/org/rhq/core/domain/criteria/AgentCriteria.java | 113 +++
modules/core/domain/src/main/java/org/rhq/core/domain/criteria/PartitionEventCriteria.java | 87 ++
modules/core/domain/src/main/java/org/rhq/core/domain/criteria/ServerCriteria.java | 131 ++++
modules/core/domain/src/main/java/org/rhq/core/domain/resource/Agent.java | 5
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/AdministrationView.java | 178 ++---
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AbstractServerNodeDatasource.java | 37 +
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupAgentsSelector.java | 253 ++++++++
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupDetailView.java | 213 ++++++
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupServersSelector.java | 258 ++++++++
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupTableView.java | 255 ++++++++
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupWithCountsDatasource.java | 180 +++++
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentDatasource.java | 182 +++++
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentDatasourceField.java | 86 ++
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentDetailView.java | 215 ++++++
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentTableView.java | 151 ++++
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/FailoverListItemDatasource.java | 149 ++++
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventDatasource.java | 161 +++++
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventDatasourceField.java | 76 ++
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventDetailView.java | 235 +++++++
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventTableView.java | 258 ++++++++
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDatasource.java | 208 ++++++
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDatasourceField.java | 87 ++
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDetailView.java | 272 ++++++++
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerTableView.java | 263 ++++++++
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerWithAgentCountDatasource.java | 123 +++
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/form/EnumSelectItem.java | 2
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/selector/AbstractSelector.java | 4
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/AgentGWTService.java | 10
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/GWTServiceLookup.java | 4
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/TopologyGWTService.java | 237 +++++++
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/RPCDataSource.java | 9
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/AgentGWTServiceImpl.java | 35 +
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/TopologyGWTServiceImpl.java | 272 ++++++++
modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages.properties | 87 ++
modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_cs.properties | 89 ++
modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_de.properties | 85 ++
modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_ja.properties | 85 ++
modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_pt.properties | 85 ++
modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_ru.properties | 85 ++
modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_zh.properties | 85 ++
modules/enterprise/gui/coregui/src/main/webapp/WEB-INF/web.xml | 8
modules/enterprise/gui/portal-war/src/main/java/org/rhq/enterprise/gui/ha/ListServersUIBean.java | 10
modules/enterprise/gui/portal-war/src/main/java/org/rhq/enterprise/gui/ha/ViewAgentUIBean.java | 7
modules/enterprise/gui/portal-war/src/main/java/org/rhq/enterprise/gui/ha/ViewServerUIBean.java | 8
modules/enterprise/server/itests-2/src/test/java/org/rhq/enterprise/server/alert/test/AlertConditionTest.java | 2
modules/enterprise/server/itests-2/src/test/java/org/rhq/enterprise/server/cloud/FailoverListManagerBeanTest.java | 9
modules/enterprise/server/itests-2/src/test/java/org/rhq/enterprise/server/core/CoreServerServiceImplTest.java | 5
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/AffinityGroupManagerBean.java | 28
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/AffinityGroupManagerLocal.java | 75 ++
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/CloudManagerBean.java | 295 ---------
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/CloudManagerException.java | 43 -
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/CloudManagerLocal.java | 92 --
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/FailoverListManagerBean.java | 6
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/PartitionEventManagerBean.java | 27
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/PartitionEventManagerLocal.java | 45 +
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/StatusManagerBean.java | 2
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/TopologyManagerBean.java | 316 ++++++++++
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/TopologyManagerException.java | 43 +
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/TopologyManagerLocal.java | 155 ++++
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/instance/ServerManagerBean.java | 10
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/core/AgentManagerBean.java | 10
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/core/AgentManagerLocal.java | 18
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/core/ShutdownListener.java | 6
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/core/StartupBean.java | 9
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/plugin/pc/AbstractJobWrapper.java | 2
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/scheduler/jobs/CloudManagerJob.java | 2
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/util/LookupUtil.java | 8
modules/enterprise/server/jar/src/main/resources/META-INF/jboss.xml | 4
modules/enterprise/server/plugins/cloud/src/main/java/org/rhq/enterprise/server/plugins/cloud/CloudServerPluginComponent.java | 6
71 files changed, 6028 insertions(+), 603 deletions(-)
New commits:
commit 454f7e7a3818472c25148f537b6840fc65f664df
Merge: 57fd95f 73c363d
Author: Jirka Kremser <jkremser(a)redhat.com>
Date: Thu Dec 20 22:28:02 2012 +0100
Merge branch 'master' into jkremser/ha-jsf-to-gwt-rewrite
commit 57fd95fca7c516481c31666324ea50257a21afa5
Author: Jirka Kremser <jkremser(a)redhat.com>
Date: Thu Dec 20 20:46:32 2012 +0100
Adding renamed servlet (TopologyGWTService) to the web.xml
diff --git a/modules/enterprise/gui/coregui/src/main/webapp/WEB-INF/web.xml b/modules/enterprise/gui/coregui/src/main/webapp/WEB-INF/web.xml
index 124c979..a17f947 100644
--- a/modules/enterprise/gui/coregui/src/main/webapp/WEB-INF/web.xml
+++ b/modules/enterprise/gui/coregui/src/main/webapp/WEB-INF/web.xml
@@ -198,8 +198,8 @@
<servlet-class>org.rhq.enterprise.gui.coregui.server.gwt.PlatformUtilizationGWTServiceImpl</servlet-class>
</servlet>
<servlet>
- <servlet-name>org.rhq.enterprise.gui.coregui.CoreGUI CloudGWTService</servlet-name>
- <servlet-class>org.rhq.enterprise.gui.coregui.server.gwt.CloudGWTServiceImpl</servlet-class>
+ <servlet-name>org.rhq.enterprise.gui.coregui.CoreGUI TopologyGWTService</servlet-name>
+ <servlet-class>org.rhq.enterprise.gui.coregui.server.gwt.TopologyGWTServiceImpl</servlet-class>
</servlet>
<servlet>
@@ -374,8 +374,8 @@
<url-pattern>/org.rhq.enterprise.gui.coregui.CoreGUI/PlatformUtilizationGWTService</url-pattern>
</servlet-mapping>
<servlet-mapping>
- <servlet-name>org.rhq.enterprise.gui.coregui.CoreGUI CloudGWTService</servlet-name>
- <url-pattern>/org.rhq.enterprise.gui.coregui.CoreGUI/CloudGWTService</url-pattern>
+ <servlet-name>org.rhq.enterprise.gui.coregui.CoreGUI TopologyGWTService</servlet-name>
+ <url-pattern>/org.rhq.enterprise.gui.coregui.CoreGUI/TopologyGWTService</url-pattern>
</servlet-mapping>
<servlet-mapping>
commit 87fb0278c16f47d5597e02685d7693d12b9b6b21
Merge: 2d5ccbf 1769169
Author: Jirka Kremser <jkremser(a)redhat.com>
Date: Thu Dec 20 20:39:59 2012 +0100
Merge branch 'master' into jkremser/ha-jsf-to-gwt-rewrite
commit 2d5ccbf8e6756ccc444b540420938071c4842fa2
Author: Jirka Kremser <jkremser(a)redhat.com>
Date: Thu Dec 20 20:28:24 2012 +0100
Refactoring: renaming "CloudManager" to "TopologyManager".
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupAgentsSelector.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupAgentsSelector.java
index f7c8083..3be1d58 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupAgentsSelector.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupAgentsSelector.java
@@ -94,7 +94,7 @@ public class AffinityGroupAgentsSelector extends AbstractSelector<Agent, AgentCr
private void prepareMembers(final AffinityGroupAgentsSelector selector) {
AgentCriteria criteria = new AgentCriteria();
criteria.addFilterAffinityGroupId(affinityGroupId);
- GWTServiceLookup.getCloudService().findAgentsByCriteria(criteria, new AsyncCallback<PageList<Agent>>() {
+ GWTServiceLookup.getTopologyService().findAgentsByCriteria(criteria, new AsyncCallback<PageList<Agent>>() {
public void onSuccess(PageList<Agent> result) {
ListGridRecord[] records = getDataSource().buildRecords(result);
originallyAssignedIds = getIdList(records);
@@ -179,7 +179,7 @@ public class AffinityGroupAgentsSelector extends AbstractSelector<Agent, AgentCr
shouldBeClosed = true;
if (!originallySelected.isEmpty()) {
shouldBeClosed = false;
- GWTServiceLookup.getCloudService().removeAgentsFromGroup(
+ GWTServiceLookup.getTopologyService().removeAgentsFromGroup(
originallySelected.toArray(new Integer[originallySelected.size()]), new AsyncCallback<Void>() {
public void onSuccess(Void result) {
closeAndRefresh(parrent, true);
@@ -194,7 +194,7 @@ public class AffinityGroupAgentsSelector extends AbstractSelector<Agent, AgentCr
}
if (!actuallySelected.isEmpty()) {
shouldBeClosed = false;
- GWTServiceLookup.getCloudService().addAgentsToGroup(selector.getAffinityGroupId(),
+ GWTServiceLookup.getTopologyService().addAgentsToGroup(selector.getAffinityGroupId(),
actuallySelected.toArray(new Integer[actuallySelected.size()]), new AsyncCallback<Void>() {
public void onSuccess(Void result) {
closeAndRefresh(parrent, true);
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupDetailView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupDetailView.java
index 669ea22..03711a4 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupDetailView.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupDetailView.java
@@ -79,7 +79,7 @@ public class AffinityGroupDetailView extends LocatableVLayout implements Bookmar
@Override
protected void onInit() {
super.onInit();
- GWTServiceLookup.getCloudService().getAffinityGroupById(affinityGroupId, new AsyncCallback<AffinityGroup>() {
+ GWTServiceLookup.getTopologyService().getAffinityGroupById(affinityGroupId, new AsyncCallback<AffinityGroup>() {
public void onSuccess(final AffinityGroup affinityGroup) {
prepareDetailsSection(sectionStack, affinityGroup);
}
@@ -180,7 +180,7 @@ public class AffinityGroupDetailView extends LocatableVLayout implements Bookmar
saveButton.addClickHandler(new ClickHandler() {
public void onClick(ClickEvent event) {
affinityGroup.setName(nameItem.getValueAsString());
- GWTServiceLookup.getCloudService().updateAffinityGroup(affinityGroup, new AsyncCallback<Void>() {
+ GWTServiceLookup.getTopologyService().updateAffinityGroup(affinityGroup, new AsyncCallback<Void>() {
public void onSuccess(Void result) {
Message msg = new Message(MSG.view_adminTopology_message_agroupRenamed(
String.valueOf(affinityGroupId), affinityGroup.getName(), nameItem.getValueAsString()),
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupServersSelector.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupServersSelector.java
index d1d97d4..0f64fd7 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupServersSelector.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupServersSelector.java
@@ -98,7 +98,7 @@ public class AffinityGroupServersSelector extends AbstractSelector<Server, Serve
private void prepareMembers(final AffinityGroupServersSelector selector) {
ServerCriteria criteria = new ServerCriteria();
criteria.addFilterAffinityGroupId(affinityGroupId);
- GWTServiceLookup.getCloudService().findServersByCriteria(criteria, new AsyncCallback<PageList<Server>>() {
+ GWTServiceLookup.getTopologyService().findServersByCriteria(criteria, new AsyncCallback<PageList<Server>>() {
public void onSuccess(PageList<Server> result) {
ListGridRecord[] records = getDataSource().buildRecords(result);
originallyAssignedIds = getIdList(records);
@@ -184,7 +184,7 @@ public class AffinityGroupServersSelector extends AbstractSelector<Server, Serve
shouldBeClosed = true;
if (!originallySelected.isEmpty()) {
shouldBeClosed = false;
- GWTServiceLookup.getCloudService().removeServersFromGroup(
+ GWTServiceLookup.getTopologyService().removeServersFromGroup(
originallySelected.toArray(new Integer[originallySelected.size()]), new AsyncCallback<Void>() {
public void onSuccess(Void result) {
closeAndRefresh(parrent, true);
@@ -199,7 +199,7 @@ public class AffinityGroupServersSelector extends AbstractSelector<Server, Serve
}
if (!actuallySelected.isEmpty()) {
shouldBeClosed = false;
- GWTServiceLookup.getCloudService().addServersToGroup(selector.getAffinityGroupId(),
+ GWTServiceLookup.getTopologyService().addServersToGroup(selector.getAffinityGroupId(),
actuallySelected.toArray(new Integer[actuallySelected.size()]), new AsyncCallback<Void>() {
public void onSuccess(Void result) {
closeAndRefresh(parrent, true);
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupTableView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupTableView.java
index ef271dc..90b0dc3 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupTableView.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupTableView.java
@@ -110,7 +110,7 @@ public class AffinityGroupTableView extends TableSection<AffinityGroupWithCounts
public void execute(Boolean confirmed) {
if (confirmed) {
int[] selectedIds = getSelectedIds(selections);
- GWTServiceLookup.getCloudService().deleteAffinityGroups(selectedIds,
+ GWTServiceLookup.getTopologyService().deleteAffinityGroups(selectedIds,
new AsyncCallback<Integer>() {
public void onSuccess(Integer count) {
Message msg = new Message(MSG
@@ -232,7 +232,7 @@ public class AffinityGroupTableView extends TableSection<AffinityGroupWithCounts
if (form.validate()) {
String name = form.getValueAsString(FIELD_NAME);
AffinityGroup affinityGroup = new AffinityGroup(name);
- GWTServiceLookup.getCloudService().createAffinityGroup(affinityGroup, new AsyncCallback<Integer>() {
+ GWTServiceLookup.getTopologyService().createAffinityGroup(affinityGroup, new AsyncCallback<Integer>() {
public void onSuccess(Integer affinityGroupId) {
modalWindow.destroy();
CoreGUI.goToView(VIEW_PATH + "/" + affinityGroupId);
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupWithCountsDatasource.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupWithCountsDatasource.java
index bd8b6b3..33a0e5f 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupWithCountsDatasource.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupWithCountsDatasource.java
@@ -116,7 +116,7 @@ public class AffinityGroupWithCountsDatasource extends RPCDataSource<AffinityGro
protected void executeFetch(final DSRequest request, final DSResponse response, Criteria criteria) {
final PageControl pc = getPageControl(request);
- GWTServiceLookup.getCloudService().getAffinityGroupCountComposites(pc,
+ GWTServiceLookup.getTopologyService().getAffinityGroupCountComposites(pc,
new AsyncCallback<PageList<AffinityGroupCountComposite>>() {
public void onSuccess(PageList<AffinityGroupCountComposite> result) {
response.setData(buildRecords(result));
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentDatasource.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentDatasource.java
index f35aaee..ac33e74 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentDatasource.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentDatasource.java
@@ -122,7 +122,7 @@ public class AgentDatasource extends RPCDataSource<Agent, AgentCriteria> {
criteria.addFilterServerId(id);
}
- GWTServiceLookup.getCloudService().findAgentsByCriteria(criteria, new AsyncCallback<PageList<Agent>>() {
+ GWTServiceLookup.getTopologyService().findAgentsByCriteria(criteria, new AsyncCallback<PageList<Agent>>() {
public void onSuccess(PageList<Agent> result) {
response.setData(buildRecords(result));
response.setTotalRows(result.size());
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentDetailView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentDetailView.java
index 255a571..92ee011 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentDetailView.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentDetailView.java
@@ -84,7 +84,7 @@ public class AgentDetailView extends LocatableVLayout {
super.onInit();
AgentCriteria criteria = new AgentCriteria();
criteria.addFilterId(agentId);
- GWTServiceLookup.getCloudService().findAgentsByCriteria(criteria, new AsyncCallback<PageList<Agent>>() {
+ GWTServiceLookup.getTopologyService().findAgentsByCriteria(criteria, new AsyncCallback<PageList<Agent>>() {
public void onSuccess(final PageList<Agent> agents) {
if (agents == null || agents.isEmpty() || agents.size() != 1) {
CoreGUI.getErrorHandler().handleError(
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/FailoverListItemDatasource.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/FailoverListItemDatasource.java
index c21d086..8146a42 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/FailoverListItemDatasource.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/FailoverListItemDatasource.java
@@ -103,7 +103,7 @@ public class FailoverListItemDatasource extends AbstractServerNodeDatasource<Fai
final PageControl pc = getPageControl(request);
// if agentId == null all FailoverListDetails are returned
- GWTServiceLookup.getCloudService().getFailoverListDetailsByAgentId(agentId, pc,
+ GWTServiceLookup.getTopologyService().getFailoverListDetailsByAgentId(agentId, pc,
new AsyncCallback<List<FailoverListDetails>>() {
public void onSuccess(List<FailoverListDetails> result) {
response.setData(buildRecords(result));
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventDatasource.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventDatasource.java
index 39bd457..9042b6b 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventDatasource.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventDatasource.java
@@ -100,7 +100,7 @@ public class PartitionEventDatasource extends RPCDataSource<PartitionEvent, Part
processResponse(request.getRequestId(), response);
return;
}
- GWTServiceLookup.getCloudService().findPartitionEventsByCriteria(criteria,
+ GWTServiceLookup.getTopologyService().findPartitionEventsByCriteria(criteria,
new AsyncCallback<PageList<PartitionEvent>>() {
public void onSuccess(PageList<PartitionEvent> result) {
response.setData(buildRecords(result));
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventDetailView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventDetailView.java
index 43ac373..d9103eb 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventDetailView.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventDetailView.java
@@ -46,7 +46,7 @@ import org.rhq.enterprise.gui.coregui.client.BookmarkableView;
import org.rhq.enterprise.gui.coregui.client.CoreGUI;
import org.rhq.enterprise.gui.coregui.client.ViewPath;
import org.rhq.enterprise.gui.coregui.client.components.table.TimestampCellFormatter;
-import org.rhq.enterprise.gui.coregui.client.gwt.CloudGWTServiceAsync;
+import org.rhq.enterprise.gui.coregui.client.gwt.TopologyGWTServiceAsync;
import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup;
import org.rhq.enterprise.gui.coregui.client.util.Log;
import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableDynamicForm;
@@ -89,7 +89,7 @@ public class PartitionEventDetailView extends LocatableVLayout implements Bookma
super.onInit();
PartitionEventCriteria criteria = new PartitionEventCriteria();
criteria.addFilterId(partitionEventId);
- final CloudGWTServiceAsync service = GWTServiceLookup.getCloudService();
+ final TopologyGWTServiceAsync service = GWTServiceLookup.getTopologyService();
service.findPartitionEventsByCriteria(criteria, new AsyncCallback<PageList<PartitionEvent>>() {
public void onSuccess(final PageList<PartitionEvent> events) {
if (events == null || events.size() != 1) {
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventTableView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventTableView.java
index 3cbfdb1..dc7e545 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventTableView.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventTableView.java
@@ -209,13 +209,13 @@ public class PartitionEventTableView extends TableSection<PartitionEventDatasour
};
switch (action) {
case REMOVE_SELECTED:
- GWTServiceLookup.getCloudService().deletePartitionEvents(selectedIds, callback);
+ GWTServiceLookup.getTopologyService().deletePartitionEvents(selectedIds, callback);
break;
case PURGE_ALL:
- GWTServiceLookup.getCloudService().purgeAllEvents(callback);
+ GWTServiceLookup.getTopologyService().purgeAllEvents(callback);
break;
case FORCE_REPARTITION:
- GWTServiceLookup.getCloudService().cloudPartitionEventRequest(callback);
+ GWTServiceLookup.getTopologyService().cloudPartitionEventRequest(callback);
}
} else {
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDatasource.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDatasource.java
index 09ea8c3..76ba87c 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDatasource.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDatasource.java
@@ -119,7 +119,7 @@ public class ServerDatasource extends AbstractServerNodeDatasource<Server, Serve
if (affinityGroupId != null) {
criteria.addFilterAffinityGroupId(affinityGroupId);
}
- GWTServiceLookup.getCloudService().findServersByCriteria(criteria, new AsyncCallback<PageList<Server>>() {
+ GWTServiceLookup.getTopologyService().findServersByCriteria(criteria, new AsyncCallback<PageList<Server>>() {
public void onSuccess(PageList<Server> result) {
response.setData(buildRecords(result));
response.setTotalRows(result.size());
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDetailView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDetailView.java
index ccc11aa..1e15208 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDetailView.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDetailView.java
@@ -97,7 +97,7 @@ public class ServerDetailView extends LocatableVLayout implements BookmarkableVi
super.onInit();
ServerCriteria criteria = new ServerCriteria();
criteria.addFilterId(serverId);
- GWTServiceLookup.getCloudService().findServersByCriteria(criteria, new AsyncCallback<PageList<Server>>() {
+ GWTServiceLookup.getTopologyService().findServersByCriteria(criteria, new AsyncCallback<PageList<Server>>() {
public void onSuccess(final PageList<Server> servers) {
if (servers == null || servers.isEmpty() || servers.size() != 1) {
CoreGUI.getErrorHandler().handleError(
@@ -229,7 +229,7 @@ public class ServerDetailView extends LocatableVLayout implements BookmarkableVi
server.setPort(Integer.parseInt(portItem.getValueAsString()));
server.setSecurePort(Integer.parseInt(securePortItem.getValueAsString()));
server.setOperationMode(OperationMode.valueOf(operationModeItem.getValueAsString()));
- GWTServiceLookup.getCloudService().updateServer(server, new AsyncCallback<Void>() {
+ GWTServiceLookup.getTopologyService().updateServer(server, new AsyncCallback<Void>() {
public void onSuccess(Void result) {
Message msg = new Message(MSG.view_adminTopology_message_serverUpdated(server.getName()),
Message.Severity.Info);
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerTableView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerTableView.java
index 6cae592..1c6e6d5 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerTableView.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerTableView.java
@@ -157,7 +157,7 @@ public class ServerTableView extends
public void execute(Boolean confirmed) {
if (confirmed) {
int[] selectedIds = getSelectedIds(selections);
- GWTServiceLookup.getCloudService().deleteServers(selectedIds,
+ GWTServiceLookup.getTopologyService().deleteServers(selectedIds,
new AsyncCallback<Void>() {
public void onSuccess(Void arg0) {
Message msg = new Message(MSG
@@ -192,7 +192,7 @@ public class ServerTableView extends
public void execute(Boolean confirmed) {
if (confirmed) {
int[] selectedIds = getSelectedIds(selections);
- GWTServiceLookup.getCloudService().updateServerMode(selectedIds, mode,
+ GWTServiceLookup.getTopologyService().updateServerMode(selectedIds, mode,
new AsyncCallback<Void>() {
public void onSuccess(Void result) {
Message msg = new Message(MSG.view_adminTopology_message_setMode(
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerWithAgentCountDatasource.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerWithAgentCountDatasource.java
index d686395..91f5f53 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerWithAgentCountDatasource.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerWithAgentCountDatasource.java
@@ -78,7 +78,7 @@ public class ServerWithAgentCountDatasource extends
protected void executeFetch(final DSRequest request, final DSResponse response, Criteria criteria) {
final PageControl pc = getPageControl(request);
- GWTServiceLookup.getCloudService().getServers(pc, new AsyncCallback<List<ServerWithAgentCountComposite>>() {
+ GWTServiceLookup.getTopologyService().getServers(pc, new AsyncCallback<List<ServerWithAgentCountComposite>>() {
public void onSuccess(List<ServerWithAgentCountComposite> result) {
response.setData(buildRecords(result));
response.setTotalRows(result.size());
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/CloudGWTService.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/CloudGWTService.java
deleted file mode 100644
index 4b92d6f..0000000
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/CloudGWTService.java
+++ /dev/null
@@ -1,237 +0,0 @@
-/*
- * RHQ Management Platform
- * Copyright (C) 2005-2012 Red Hat, Inc.
- * All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License, version 2, as
- * published by the Free Software Foundation, and/or the GNU Lesser
- * General Public License, version 2.1, also as published by the Free
- * Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License and the GNU Lesser General Public License
- * for more details.
- *
- * You should have received a copy of the GNU General Public License
- * and the GNU Lesser General Public License along with this program;
- * if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-package org.rhq.enterprise.gui.coregui.client.gwt;
-
-import java.util.List;
-
-import com.google.gwt.user.client.rpc.RemoteService;
-
-import org.rhq.core.domain.cloud.AffinityGroup;
-import org.rhq.core.domain.cloud.FailoverListDetails;
-import org.rhq.core.domain.cloud.PartitionEvent;
-import org.rhq.core.domain.cloud.PartitionEventDetails;
-import org.rhq.core.domain.cloud.Server;
-import org.rhq.core.domain.cloud.composite.AffinityGroupCountComposite;
-import org.rhq.core.domain.cloud.composite.ServerWithAgentCountComposite;
-import org.rhq.core.domain.criteria.AgentCriteria;
-import org.rhq.core.domain.criteria.PartitionEventCriteria;
-import org.rhq.core.domain.criteria.ServerCriteria;
-import org.rhq.core.domain.resource.Agent;
-import org.rhq.core.domain.util.PageControl;
-import org.rhq.core.domain.util.PageList;
-
-/**
- * API for HAAC console, mostly CRUD operations for entities <code>Server</code>, <code>Agent</code>,
- * <code>PartitionEvent</code> and <code>AffinityGroup</code>.
- *
- * @author Jiri Kremser
- */
-public interface CloudGWTService extends RemoteService {
-
- /**
- * Returns all the servers with agent count.
- *
- * @param pageControl the page control instance
- * @return a list of all available servers (the servers in <code>MAINTENANCE</code> or <code>DOWN</code> mode are included as well)
- * @throws RuntimeException
- */
- List<ServerWithAgentCountComposite> getServers(PageControl pageControl) throws RuntimeException;
-
- /**
- * Deletes the servers with provided ids.
- *
- * @param serverIds array of server ids
- * @throws RuntimeException
- */
- void deleteServers(int[] serverIds) throws RuntimeException;
-
- /**
- * Updates the server mode to particular servers.
- *
- * @param serverIds the array of ids of the servers whose modes are object of update
- * @param mode the new operation mode
- * @throws RuntimeException
- */
- void updateServerMode(int[] serverIds, Server.OperationMode mode) throws RuntimeException;
-
- /**
- * Updates the server.
- *
- * @param server instance of Server
- * @throws RuntimeException
- */
- void updateServer(Server server) throws RuntimeException;
-
- /**
- * Returns the list of <code>FailoverListDetails</code> for a particular agent.
- *
- * @param agentId the id the agent
- * @param pageControl the page control instance
- * @return a list of <code>FailoverListDetails</code> instances
- * @throws RuntimeException
- */
- List<FailoverListDetails> getFailoverListDetailsByAgentId(int agentId, PageControl pageControl) throws RuntimeException;;
-
- /**
- * Finder for <code>PartitionEvent</code> instances
- *
- * @param criteria the criteria for finding partition events
- * @return a list of <code>codePartitionEvent</code> instances
- * @throws RuntimeException
- */
- PageList<PartitionEvent> findPartitionEventsByCriteria(PartitionEventCriteria criteria) throws RuntimeException;
-
- /**
- * Finder for <code>Server</code> instances
- *
- * @param criteria the criteria for finding servers
- * @return a list of <code>Server</code> instances
- * @throws RuntimeException
- */
- PageList<Server> findServersByCriteria(ServerCriteria criteria) throws RuntimeException;
-
- /**
- * Finder for <code>Agent</code> instances
- *
- * @param criteria the criteria for finding agents
- * @return a list of <code>Agent</code> instances
- * @throws RuntimeException
- */
- PageList<Agent> findAgentsByCriteria(AgentCriteria criteria) throws RuntimeException;
-
- /**
- * Request forcing the repartition of the cluster. All agents should eventually reconnects to its most preferred server
- * (The first one in their failover list.)
- *
- * @throws RuntimeException
- */
- void cloudPartitionEventRequest() throws RuntimeException;
-
- /**
- * Deletes all the partition events.
- *
- * @throws RuntimeException
- */
- void purgeAllEvents() throws RuntimeException;
-
- /**
- * Deletes some partition events.
- *
- * @param eventIds the list of ids of partition events to delete
- * @throws RuntimeException
- */
- void deletePartitionEvents(int[] eventIds) throws RuntimeException;
-
- /**
- * Returns the list of <code>PartitionEventDetails</code> instances.
- *
- * @param partitionEventId
- * @param pageControl the page control instance
- * @return list of <code>PartitionEventDetails</code> instances
- * @throws RuntimeException
- */
- PageList<PartitionEventDetails> getPartitionEventDetails(int partitionEventId, PageControl pageControl)
- throws RuntimeException;
-
- /**
- * Returns the list with <code>AffinityGroupCountComposite</code> instances, i.e. affinity groups with agent and server
- * counts.
- *
- * @param pageControl the page control instance
- * @return list with <code>AffinityGroupCountComposite</code> instances
- * @throws RuntimeException
- */
- PageList<AffinityGroupCountComposite> getAffinityGroupCountComposites(PageControl pageControl)
- throws RuntimeException;
-
- /**
- * Deletes some affinity groups.
- *
- * @param affinityGroupIds array of ids of affinity group to delete
- * @return the number of deleted affinity groups
- * @throws RuntimeException
- */
- int deleteAffinityGroups(int[] affinityGroupIds) throws RuntimeException;
-
- /**
- * Creates new affinity group.
- *
- * @param affinityGroup instance of <code>AffinityGroup</code> to create
- * @return the new id of the affinity group
- * @throws RuntimeException
- */
- int createAffinityGroup(AffinityGroup affinityGroup) throws RuntimeException;
-
- /**
- * Updates existing affinity group.
- *
- * @param affinityGroup instance of <code>AffinityGroup</code>
- * @throws RuntimeException
- */
- void updateAffinityGroup(AffinityGroup affinityGroup) throws RuntimeException;
-
- /**
- * Returns the affinity group based on the provided id.
- *
- * @param affinityGroupId the id of an affinity group
- * @return the instance of <code>AffinityGroup</code>
- * @throws RuntimeException
- */
- AffinityGroup getAffinityGroupById(int affinityGroupId) throws RuntimeException;
-
- /**
- * Add servers to an existing affinity group.
- *
- * @param affinityGroupId id of the affinity group into which the servers should be added
- * @param serverIds array of ids of servers to be added
- * @throws RuntimeException
- */
- void addServersToGroup(int affinityGroupId, Integer[] serverIds) throws RuntimeException;
-
- /**
- * Removes the servers from the affinity group. There is no need to provide the id of affinity group,
- * because it is part of the server data.
- *
- * @param serverIds array of ids of servers to be removed
- * @throws RuntimeException
- */
- void removeServersFromGroup(Integer[] serverIds) throws RuntimeException;
-
- /**
- * Add agents to an existing affinity group.
- *
- * @param affinityGroupId id of the affinity group into which the agents should be added
- * @param agentIds array of ids of agents to be added
- * @throws RuntimeException
- */
- void addAgentsToGroup(int affinityGroupId, Integer[] agentIds) throws RuntimeException;
-
- /**
- * Removes the agents from the affinity group. There is no need to provide the id of affinity group,
- * because it is part of the agent data.
- *
- * @param agentIds array of ids of agents to be removed
- * @throws RuntimeException
- */
- void removeAgentsFromGroup(Integer[] agentIds) throws RuntimeException;
-}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/GWTServiceLookup.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/GWTServiceLookup.java
index d41b173..8e883af 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/GWTServiceLookup.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/GWTServiceLookup.java
@@ -202,8 +202,8 @@ public class GWTServiceLookup {
return secure(PlatformUtilizationGWTServiceAsync.Util.getInstance());
}
- public static CloudGWTServiceAsync getCloudService() {
- return secure(CloudGWTServiceAsync.Util.getInstance());
+ public static TopologyGWTServiceAsync getTopologyService() {
+ return secure(TopologyGWTServiceAsync.Util.getInstance());
}
@SuppressWarnings("unchecked")
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/TopologyGWTService.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/TopologyGWTService.java
new file mode 100644
index 0000000..666fb3e
--- /dev/null
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/TopologyGWTService.java
@@ -0,0 +1,237 @@
+/*
+ * RHQ Management Platform
+ * Copyright (C) 2005-2012 Red Hat, Inc.
+ * All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License, version 2, as
+ * published by the Free Software Foundation, and/or the GNU Lesser
+ * General Public License, version 2.1, also as published by the Free
+ * Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License and the GNU Lesser General Public License
+ * for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * and the GNU Lesser General Public License along with this program;
+ * if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+package org.rhq.enterprise.gui.coregui.client.gwt;
+
+import java.util.List;
+
+import com.google.gwt.user.client.rpc.RemoteService;
+
+import org.rhq.core.domain.cloud.AffinityGroup;
+import org.rhq.core.domain.cloud.FailoverListDetails;
+import org.rhq.core.domain.cloud.PartitionEvent;
+import org.rhq.core.domain.cloud.PartitionEventDetails;
+import org.rhq.core.domain.cloud.Server;
+import org.rhq.core.domain.cloud.composite.AffinityGroupCountComposite;
+import org.rhq.core.domain.cloud.composite.ServerWithAgentCountComposite;
+import org.rhq.core.domain.criteria.AgentCriteria;
+import org.rhq.core.domain.criteria.PartitionEventCriteria;
+import org.rhq.core.domain.criteria.ServerCriteria;
+import org.rhq.core.domain.resource.Agent;
+import org.rhq.core.domain.util.PageControl;
+import org.rhq.core.domain.util.PageList;
+
+/**
+ * API for HAAC console, mostly CRUD operations for entities <code>Server</code>, <code>Agent</code>,
+ * <code>PartitionEvent</code> and <code>AffinityGroup</code>.
+ *
+ * @author Jiri Kremser
+ */
+public interface TopologyGWTService extends RemoteService {
+
+ /**
+ * Returns all the servers with agent count.
+ *
+ * @param pageControl the page control instance
+ * @return a list of all available servers (the servers in <code>MAINTENANCE</code> or <code>DOWN</code> mode are included as well)
+ * @throws RuntimeException
+ */
+ List<ServerWithAgentCountComposite> getServers(PageControl pageControl) throws RuntimeException;
+
+ /**
+ * Deletes the servers with provided ids.
+ *
+ * @param serverIds array of server ids
+ * @throws RuntimeException
+ */
+ void deleteServers(int[] serverIds) throws RuntimeException;
+
+ /**
+ * Updates the server mode to particular servers.
+ *
+ * @param serverIds the array of ids of the servers whose modes are object of update
+ * @param mode the new operation mode
+ * @throws RuntimeException
+ */
+ void updateServerMode(int[] serverIds, Server.OperationMode mode) throws RuntimeException;
+
+ /**
+ * Updates the server.
+ *
+ * @param server instance of Server
+ * @throws RuntimeException
+ */
+ void updateServer(Server server) throws RuntimeException;
+
+ /**
+ * Returns the list of <code>FailoverListDetails</code> for a particular agent.
+ *
+ * @param agentId the id the agent
+ * @param pageControl the page control instance
+ * @return a list of <code>FailoverListDetails</code> instances
+ * @throws RuntimeException
+ */
+ List<FailoverListDetails> getFailoverListDetailsByAgentId(int agentId, PageControl pageControl) throws RuntimeException;;
+
+ /**
+ * Finder for <code>PartitionEvent</code> instances
+ *
+ * @param criteria the criteria for finding partition events
+ * @return a list of <code>codePartitionEvent</code> instances
+ * @throws RuntimeException
+ */
+ PageList<PartitionEvent> findPartitionEventsByCriteria(PartitionEventCriteria criteria) throws RuntimeException;
+
+ /**
+ * Finder for <code>Server</code> instances
+ *
+ * @param criteria the criteria for finding servers
+ * @return a list of <code>Server</code> instances
+ * @throws RuntimeException
+ */
+ PageList<Server> findServersByCriteria(ServerCriteria criteria) throws RuntimeException;
+
+ /**
+ * Finder for <code>Agent</code> instances
+ *
+ * @param criteria the criteria for finding agents
+ * @return a list of <code>Agent</code> instances
+ * @throws RuntimeException
+ */
+ PageList<Agent> findAgentsByCriteria(AgentCriteria criteria) throws RuntimeException;
+
+ /**
+ * Request forcing the repartition of the cluster. All agents should eventually reconnects to its most preferred server
+ * (The first one in their failover list.)
+ *
+ * @throws RuntimeException
+ */
+ void cloudPartitionEventRequest() throws RuntimeException;
+
+ /**
+ * Deletes all the partition events.
+ *
+ * @throws RuntimeException
+ */
+ void purgeAllEvents() throws RuntimeException;
+
+ /**
+ * Deletes some partition events.
+ *
+ * @param eventIds the list of ids of partition events to delete
+ * @throws RuntimeException
+ */
+ void deletePartitionEvents(int[] eventIds) throws RuntimeException;
+
+ /**
+ * Returns the list of <code>PartitionEventDetails</code> instances.
+ *
+ * @param partitionEventId
+ * @param pageControl the page control instance
+ * @return list of <code>PartitionEventDetails</code> instances
+ * @throws RuntimeException
+ */
+ PageList<PartitionEventDetails> getPartitionEventDetails(int partitionEventId, PageControl pageControl)
+ throws RuntimeException;
+
+ /**
+ * Returns the list with <code>AffinityGroupCountComposite</code> instances, i.e. affinity groups with agent and server
+ * counts.
+ *
+ * @param pageControl the page control instance
+ * @return list with <code>AffinityGroupCountComposite</code> instances
+ * @throws RuntimeException
+ */
+ PageList<AffinityGroupCountComposite> getAffinityGroupCountComposites(PageControl pageControl)
+ throws RuntimeException;
+
+ /**
+ * Deletes some affinity groups.
+ *
+ * @param affinityGroupIds array of ids of affinity group to delete
+ * @return the number of deleted affinity groups
+ * @throws RuntimeException
+ */
+ int deleteAffinityGroups(int[] affinityGroupIds) throws RuntimeException;
+
+ /**
+ * Creates new affinity group.
+ *
+ * @param affinityGroup instance of <code>AffinityGroup</code> to create
+ * @return the new id of the affinity group
+ * @throws RuntimeException
+ */
+ int createAffinityGroup(AffinityGroup affinityGroup) throws RuntimeException;
+
+ /**
+ * Updates existing affinity group.
+ *
+ * @param affinityGroup instance of <code>AffinityGroup</code>
+ * @throws RuntimeException
+ */
+ void updateAffinityGroup(AffinityGroup affinityGroup) throws RuntimeException;
+
+ /**
+ * Returns the affinity group based on the provided id.
+ *
+ * @param affinityGroupId the id of an affinity group
+ * @return the instance of <code>AffinityGroup</code>
+ * @throws RuntimeException
+ */
+ AffinityGroup getAffinityGroupById(int affinityGroupId) throws RuntimeException;
+
+ /**
+ * Add servers to an existing affinity group.
+ *
+ * @param affinityGroupId id of the affinity group into which the servers should be added
+ * @param serverIds array of ids of servers to be added
+ * @throws RuntimeException
+ */
+ void addServersToGroup(int affinityGroupId, Integer[] serverIds) throws RuntimeException;
+
+ /**
+ * Removes the servers from the affinity group. There is no need to provide the id of affinity group,
+ * because it is part of the server data.
+ *
+ * @param serverIds array of ids of servers to be removed
+ * @throws RuntimeException
+ */
+ void removeServersFromGroup(Integer[] serverIds) throws RuntimeException;
+
+ /**
+ * Add agents to an existing affinity group.
+ *
+ * @param affinityGroupId id of the affinity group into which the agents should be added
+ * @param agentIds array of ids of agents to be added
+ * @throws RuntimeException
+ */
+ void addAgentsToGroup(int affinityGroupId, Integer[] agentIds) throws RuntimeException;
+
+ /**
+ * Removes the agents from the affinity group. There is no need to provide the id of affinity group,
+ * because it is part of the agent data.
+ *
+ * @param agentIds array of ids of agents to be removed
+ * @throws RuntimeException
+ */
+ void removeAgentsFromGroup(Integer[] agentIds) throws RuntimeException;
+}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/CloudGWTServiceImpl.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/CloudGWTServiceImpl.java
deleted file mode 100644
index ab46527..0000000
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/CloudGWTServiceImpl.java
+++ /dev/null
@@ -1,272 +0,0 @@
-/*
- * RHQ Management Platform
- * Copyright (C) 2005-2012 Red Hat, Inc.
- * All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License, version 2, as
- * published by the Free Software Foundation, and/or the GNU Lesser
- * General Public License, version 2.1, also as published by the Free
- * Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License and the GNU Lesser General Public License
- * for more details.
- *
- * You should have received a copy of the GNU General Public License
- * and the GNU Lesser General Public License along with this program;
- * if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-package org.rhq.enterprise.gui.coregui.server.gwt;
-
-import java.util.List;
-
-import org.apache.commons.lang.ArrayUtils;
-
-import org.rhq.core.domain.cloud.AffinityGroup;
-import org.rhq.core.domain.cloud.FailoverListDetails;
-import org.rhq.core.domain.cloud.PartitionEvent;
-import org.rhq.core.domain.cloud.PartitionEventDetails;
-import org.rhq.core.domain.cloud.PartitionEventType;
-import org.rhq.core.domain.cloud.Server;
-import org.rhq.core.domain.cloud.Server.OperationMode;
-import org.rhq.core.domain.cloud.composite.AffinityGroupCountComposite;
-import org.rhq.core.domain.cloud.composite.ServerWithAgentCountComposite;
-import org.rhq.core.domain.criteria.AgentCriteria;
-import org.rhq.core.domain.criteria.PartitionEventCriteria;
-import org.rhq.core.domain.criteria.ServerCriteria;
-import org.rhq.core.domain.resource.Agent;
-import org.rhq.core.domain.util.PageControl;
-import org.rhq.core.domain.util.PageList;
-import org.rhq.enterprise.gui.coregui.client.gwt.CloudGWTService;
-import org.rhq.enterprise.gui.coregui.server.util.SerialUtility;
-import org.rhq.enterprise.server.cloud.AffinityGroupManagerLocal;
-import org.rhq.enterprise.server.cloud.CloudManagerLocal;
-import org.rhq.enterprise.server.cloud.PartitionEventManagerLocal;
-import org.rhq.enterprise.server.core.AgentManagerLocal;
-import org.rhq.enterprise.server.util.LookupUtil;
-
-/**
- * @author Jiri Kremser
- */
-public class CloudGWTServiceImpl extends AbstractGWTServiceImpl implements CloudGWTService {
-
- private static final long serialVersionUID = 1L;
-
- private CloudManagerLocal cloudManager = LookupUtil.getCloudManager();
-
- private AgentManagerLocal agentManager = LookupUtil.getAgentManager();
-
- private PartitionEventManagerLocal partitionEventManager = LookupUtil.getPartitionEventManager();
-
- private AffinityGroupManagerLocal affinityGroupManager = LookupUtil.getAffinityGroupManager();
-
- @Override
- public PageList<ServerWithAgentCountComposite> getServers(PageControl pc) throws RuntimeException {
- try {
- return SerialUtility.prepare(cloudManager.getServerComposites(getSessionSubject(), pc),
- "CloudGWTServiceImpl.getServers");
- } catch (Throwable t) {
- throw getExceptionToThrowToClient(t);
- }
- }
-
- @Override
- public void deleteServers(int[] serverIds) throws RuntimeException {
- try {
- cloudManager.deleteServers(getSessionSubject(), ArrayUtils.toObject(serverIds));
- } catch (Throwable t) {
- throw getExceptionToThrowToClient(t);
- }
- }
-
- @Override
- public void updateServerMode(int[] serverIds, OperationMode mode) throws RuntimeException {
- try {
- cloudManager.updateServerMode(getSessionSubject(), ArrayUtils.toObject(serverIds), mode);
- } catch (Throwable t) {
- throw getExceptionToThrowToClient(t);
- }
- }
-
- @Override
- public List<FailoverListDetails> getFailoverListDetailsByAgentId(int agentId, PageControl pc)
- throws RuntimeException {
- try {
- return SerialUtility.prepare(
- cloudManager.getFailoverListDetailsByAgentId(getSessionSubject(), agentId, pc),
- "CloudGWTServiceImpl.getFailoverListDetailsByAgentId");
- } catch (Throwable t) {
- throw getExceptionToThrowToClient(t);
- }
- }
-
- @Override
- public PageList<PartitionEvent> findPartitionEventsByCriteria(PartitionEventCriteria criteria)
- throws RuntimeException {
- try {
- return SerialUtility.prepare(
- partitionEventManager.findPartitionEventsByCriteria(getSessionSubject(), criteria),
- "CloudGWTServiceImpl.findPartitionEventsByCriteria");
- } catch (Throwable t) {
- throw getExceptionToThrowToClient(t);
- }
- }
-
- @Override
- public PageList<Server> findServersByCriteria(ServerCriteria criteria) throws RuntimeException {
- try {
- return SerialUtility.prepare(cloudManager.findServersByCriteria(getSessionSubject(), criteria),
- "CloudGWTServiceImpl.findServersByCriteria");
- } catch (Throwable t) {
- throw getExceptionToThrowToClient(t);
- }
- }
-
- @Override
- public PageList<Agent> findAgentsByCriteria(AgentCriteria criteria) throws RuntimeException {
- try {
- return SerialUtility.prepare(agentManager.findAgentsByCriteria(getSessionSubject(), criteria),
- "CloudGWTServiceImpl.findAgentsByCriteria");
- } catch (Throwable t) {
- throw getExceptionToThrowToClient(t);
- }
- }
-
- @Override
- public void cloudPartitionEventRequest() throws RuntimeException {
- try {
- partitionEventManager.cloudPartitionEventRequest(getSessionSubject(),
- PartitionEventType.ADMIN_INITIATED_PARTITION, "");
- } catch (Throwable t) {
- throw getExceptionToThrowToClient(t);
- }
- }
-
- @Override
- public void purgeAllEvents() throws RuntimeException {
- try {
- partitionEventManager.purgeAllEvents(getSessionSubject());
- } catch (Throwable t) {
- throw getExceptionToThrowToClient(t);
- }
- }
-
- @Override
- public void deletePartitionEvents(int[] eventIds) throws RuntimeException {
- try {
- partitionEventManager.deletePartitionEvents(getSessionSubject(), ArrayUtils.toObject(eventIds));
- } catch (Throwable t) {
- throw getExceptionToThrowToClient(t);
- }
- }
-
- @Override
- public PageList<PartitionEventDetails> getPartitionEventDetails(int partitionEventId, PageControl pageControl)
- throws RuntimeException {
- try {
- return SerialUtility.prepare(
- partitionEventManager.getPartitionEventDetails(getSessionSubject(), partitionEventId, pageControl),
- "CloudGWTServiceImpl.getPartitionEventDetails");
- } catch (Throwable t) {
- throw getExceptionToThrowToClient(t);
- }
- }
-
- @Override
- public PageList<AffinityGroupCountComposite> getAffinityGroupCountComposites(PageControl pageControl)
- throws RuntimeException {
- try {
- return SerialUtility.prepare(affinityGroupManager.getComposites(getSessionSubject(), pageControl),
- "CloudGWTServiceImpl.getAffinityGroupCountComposites");
- } catch (Throwable t) {
- throw getExceptionToThrowToClient(t);
- }
- }
-
- @Override
- public int deleteAffinityGroups(int[] affinityGroupIds) throws RuntimeException {
- try {
- return affinityGroupManager.delete(getSessionSubject(), ArrayUtils.toObject(affinityGroupIds));
- } catch (Throwable t) {
- throw getExceptionToThrowToClient(t);
- }
- }
-
- @Override
- public int createAffinityGroup(AffinityGroup affinityGroup) throws RuntimeException {
- try {
- return affinityGroupManager.create(getSessionSubject(), affinityGroup);
- } catch (Throwable t) {
- throw getExceptionToThrowToClient(t);
- }
- }
-
- @Override
- public AffinityGroup getAffinityGroupById(int affinityGroupId) throws RuntimeException {
- try {
- return SerialUtility.prepare(affinityGroupManager.getById(getSessionSubject(), affinityGroupId),
- "CloudGWTServiceImpl.getAffinityGroupById");
- } catch (Throwable t) {
- throw getExceptionToThrowToClient(t);
- }
- }
-
- @Override
- public void addServersToGroup(int affinityGroupId, Integer[] serverIds) throws RuntimeException {
- try {
- affinityGroupManager.addServersToGroup(getSessionSubject(), affinityGroupId, serverIds);
- } catch (Throwable t) {
- throw getExceptionToThrowToClient(t);
- }
- }
-
- @Override
- public void removeServersFromGroup(Integer[] serverIds) throws RuntimeException {
- try {
- affinityGroupManager.removeServersFromGroup(getSessionSubject(), serverIds);
- } catch (Throwable t) {
- throw getExceptionToThrowToClient(t);
- }
- }
-
- @Override
- public void addAgentsToGroup(int affinityGroupId, Integer[] agentIds) throws RuntimeException {
- try {
- affinityGroupManager.addAgentsToGroup(getSessionSubject(), affinityGroupId, agentIds);
- } catch (Throwable t) {
- throw getExceptionToThrowToClient(t);
- }
- }
-
- @Override
- public void removeAgentsFromGroup(Integer[] agentIds) throws RuntimeException {
- try {
- affinityGroupManager.removeAgentsFromGroup(getSessionSubject(), agentIds);
- } catch (Throwable t) {
- throw getExceptionToThrowToClient(t);
- }
- }
-
- @Override
- public void updateServer(Server server) throws RuntimeException {
- try {
- cloudManager.updateServer(getSessionSubject(), server);
- } catch (Throwable t) {
- throw getExceptionToThrowToClient(t);
- }
- }
-
- @Override
- public void updateAffinityGroup(AffinityGroup affinityGroup) throws RuntimeException {
- try {
- affinityGroupManager.update(getSessionSubject(), affinityGroup);
- } catch (Throwable t) {
- throw getExceptionToThrowToClient(t);
- }
- }
-
-}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/TopologyGWTServiceImpl.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/TopologyGWTServiceImpl.java
new file mode 100644
index 0000000..4445368
--- /dev/null
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/TopologyGWTServiceImpl.java
@@ -0,0 +1,272 @@
+/*
+ * RHQ Management Platform
+ * Copyright (C) 2005-2012 Red Hat, Inc.
+ * All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License, version 2, as
+ * published by the Free Software Foundation, and/or the GNU Lesser
+ * General Public License, version 2.1, also as published by the Free
+ * Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License and the GNU Lesser General Public License
+ * for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * and the GNU Lesser General Public License along with this program;
+ * if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+package org.rhq.enterprise.gui.coregui.server.gwt;
+
+import java.util.List;
+
+import org.apache.commons.lang.ArrayUtils;
+
+import org.rhq.core.domain.cloud.AffinityGroup;
+import org.rhq.core.domain.cloud.FailoverListDetails;
+import org.rhq.core.domain.cloud.PartitionEvent;
+import org.rhq.core.domain.cloud.PartitionEventDetails;
+import org.rhq.core.domain.cloud.PartitionEventType;
+import org.rhq.core.domain.cloud.Server;
+import org.rhq.core.domain.cloud.Server.OperationMode;
+import org.rhq.core.domain.cloud.composite.AffinityGroupCountComposite;
+import org.rhq.core.domain.cloud.composite.ServerWithAgentCountComposite;
+import org.rhq.core.domain.criteria.AgentCriteria;
+import org.rhq.core.domain.criteria.PartitionEventCriteria;
+import org.rhq.core.domain.criteria.ServerCriteria;
+import org.rhq.core.domain.resource.Agent;
+import org.rhq.core.domain.util.PageControl;
+import org.rhq.core.domain.util.PageList;
+import org.rhq.enterprise.gui.coregui.client.gwt.TopologyGWTService;
+import org.rhq.enterprise.gui.coregui.server.util.SerialUtility;
+import org.rhq.enterprise.server.cloud.AffinityGroupManagerLocal;
+import org.rhq.enterprise.server.cloud.PartitionEventManagerLocal;
+import org.rhq.enterprise.server.cloud.TopologyManagerLocal;
+import org.rhq.enterprise.server.core.AgentManagerLocal;
+import org.rhq.enterprise.server.util.LookupUtil;
+
+/**
+ * @author Jiri Kremser
+ */
+public class TopologyGWTServiceImpl extends AbstractGWTServiceImpl implements TopologyGWTService {
+
+ private static final long serialVersionUID = 1L;
+
+ private TopologyManagerLocal topologyManager = LookupUtil.getTopologyManager();
+
+ private AgentManagerLocal agentManager = LookupUtil.getAgentManager();
+
+ private PartitionEventManagerLocal partitionEventManager = LookupUtil.getPartitionEventManager();
+
+ private AffinityGroupManagerLocal affinityGroupManager = LookupUtil.getAffinityGroupManager();
+
+ @Override
+ public PageList<ServerWithAgentCountComposite> getServers(PageControl pc) throws RuntimeException {
+ try {
+ return SerialUtility.prepare(topologyManager.getServerComposites(getSessionSubject(), pc),
+ "TopologyGWTServiceImpl.getServers");
+ } catch (Throwable t) {
+ throw getExceptionToThrowToClient(t);
+ }
+ }
+
+ @Override
+ public void deleteServers(int[] serverIds) throws RuntimeException {
+ try {
+ topologyManager.deleteServers(getSessionSubject(), ArrayUtils.toObject(serverIds));
+ } catch (Throwable t) {
+ throw getExceptionToThrowToClient(t);
+ }
+ }
+
+ @Override
+ public void updateServerMode(int[] serverIds, OperationMode mode) throws RuntimeException {
+ try {
+ topologyManager.updateServerMode(getSessionSubject(), ArrayUtils.toObject(serverIds), mode);
+ } catch (Throwable t) {
+ throw getExceptionToThrowToClient(t);
+ }
+ }
+
+ @Override
+ public List<FailoverListDetails> getFailoverListDetailsByAgentId(int agentId, PageControl pc)
+ throws RuntimeException {
+ try {
+ return SerialUtility.prepare(
+ topologyManager.getFailoverListDetailsByAgentId(getSessionSubject(), agentId, pc),
+ "TopologyGWTServiceImpl.getFailoverListDetailsByAgentId");
+ } catch (Throwable t) {
+ throw getExceptionToThrowToClient(t);
+ }
+ }
+
+ @Override
+ public PageList<PartitionEvent> findPartitionEventsByCriteria(PartitionEventCriteria criteria)
+ throws RuntimeException {
+ try {
+ return SerialUtility.prepare(
+ partitionEventManager.findPartitionEventsByCriteria(getSessionSubject(), criteria),
+ "TopologyGWTServiceImpl.findPartitionEventsByCriteria");
+ } catch (Throwable t) {
+ throw getExceptionToThrowToClient(t);
+ }
+ }
+
+ @Override
+ public PageList<Server> findServersByCriteria(ServerCriteria criteria) throws RuntimeException {
+ try {
+ return SerialUtility.prepare(topologyManager.findServersByCriteria(getSessionSubject(), criteria),
+ "TopologyGWTServiceImpl.findServersByCriteria");
+ } catch (Throwable t) {
+ throw getExceptionToThrowToClient(t);
+ }
+ }
+
+ @Override
+ public PageList<Agent> findAgentsByCriteria(AgentCriteria criteria) throws RuntimeException {
+ try {
+ return SerialUtility.prepare(agentManager.findAgentsByCriteria(getSessionSubject(), criteria),
+ "TopologyGWTServiceImpl.findAgentsByCriteria");
+ } catch (Throwable t) {
+ throw getExceptionToThrowToClient(t);
+ }
+ }
+
+ @Override
+ public void cloudPartitionEventRequest() throws RuntimeException {
+ try {
+ partitionEventManager.cloudPartitionEventRequest(getSessionSubject(),
+ PartitionEventType.ADMIN_INITIATED_PARTITION, "");
+ } catch (Throwable t) {
+ throw getExceptionToThrowToClient(t);
+ }
+ }
+
+ @Override
+ public void purgeAllEvents() throws RuntimeException {
+ try {
+ partitionEventManager.purgeAllEvents(getSessionSubject());
+ } catch (Throwable t) {
+ throw getExceptionToThrowToClient(t);
+ }
+ }
+
+ @Override
+ public void deletePartitionEvents(int[] eventIds) throws RuntimeException {
+ try {
+ partitionEventManager.deletePartitionEvents(getSessionSubject(), ArrayUtils.toObject(eventIds));
+ } catch (Throwable t) {
+ throw getExceptionToThrowToClient(t);
+ }
+ }
+
+ @Override
+ public PageList<PartitionEventDetails> getPartitionEventDetails(int partitionEventId, PageControl pageControl)
+ throws RuntimeException {
+ try {
+ return SerialUtility.prepare(
+ partitionEventManager.getPartitionEventDetails(getSessionSubject(), partitionEventId, pageControl),
+ "TopologyGWTServiceImpl.getPartitionEventDetails");
+ } catch (Throwable t) {
+ throw getExceptionToThrowToClient(t);
+ }
+ }
+
+ @Override
+ public PageList<AffinityGroupCountComposite> getAffinityGroupCountComposites(PageControl pageControl)
+ throws RuntimeException {
+ try {
+ return SerialUtility.prepare(affinityGroupManager.getComposites(getSessionSubject(), pageControl),
+ "TopologyGWTServiceImpl.getAffinityGroupCountComposites");
+ } catch (Throwable t) {
+ throw getExceptionToThrowToClient(t);
+ }
+ }
+
+ @Override
+ public int deleteAffinityGroups(int[] affinityGroupIds) throws RuntimeException {
+ try {
+ return affinityGroupManager.delete(getSessionSubject(), ArrayUtils.toObject(affinityGroupIds));
+ } catch (Throwable t) {
+ throw getExceptionToThrowToClient(t);
+ }
+ }
+
+ @Override
+ public int createAffinityGroup(AffinityGroup affinityGroup) throws RuntimeException {
+ try {
+ return affinityGroupManager.create(getSessionSubject(), affinityGroup);
+ } catch (Throwable t) {
+ throw getExceptionToThrowToClient(t);
+ }
+ }
+
+ @Override
+ public AffinityGroup getAffinityGroupById(int affinityGroupId) throws RuntimeException {
+ try {
+ return SerialUtility.prepare(affinityGroupManager.getById(getSessionSubject(), affinityGroupId),
+ "TopologyGWTServiceImpl.getAffinityGroupById");
+ } catch (Throwable t) {
+ throw getExceptionToThrowToClient(t);
+ }
+ }
+
+ @Override
+ public void addServersToGroup(int affinityGroupId, Integer[] serverIds) throws RuntimeException {
+ try {
+ affinityGroupManager.addServersToGroup(getSessionSubject(), affinityGroupId, serverIds);
+ } catch (Throwable t) {
+ throw getExceptionToThrowToClient(t);
+ }
+ }
+
+ @Override
+ public void removeServersFromGroup(Integer[] serverIds) throws RuntimeException {
+ try {
+ affinityGroupManager.removeServersFromGroup(getSessionSubject(), serverIds);
+ } catch (Throwable t) {
+ throw getExceptionToThrowToClient(t);
+ }
+ }
+
+ @Override
+ public void addAgentsToGroup(int affinityGroupId, Integer[] agentIds) throws RuntimeException {
+ try {
+ affinityGroupManager.addAgentsToGroup(getSessionSubject(), affinityGroupId, agentIds);
+ } catch (Throwable t) {
+ throw getExceptionToThrowToClient(t);
+ }
+ }
+
+ @Override
+ public void removeAgentsFromGroup(Integer[] agentIds) throws RuntimeException {
+ try {
+ affinityGroupManager.removeAgentsFromGroup(getSessionSubject(), agentIds);
+ } catch (Throwable t) {
+ throw getExceptionToThrowToClient(t);
+ }
+ }
+
+ @Override
+ public void updateServer(Server server) throws RuntimeException {
+ try {
+ topologyManager.updateServer(getSessionSubject(), server);
+ } catch (Throwable t) {
+ throw getExceptionToThrowToClient(t);
+ }
+ }
+
+ @Override
+ public void updateAffinityGroup(AffinityGroup affinityGroup) throws RuntimeException {
+ try {
+ affinityGroupManager.update(getSessionSubject(), affinityGroup);
+ } catch (Throwable t) {
+ throw getExceptionToThrowToClient(t);
+ }
+ }
+
+}
diff --git a/modules/enterprise/gui/portal-war/src/main/java/org/rhq/enterprise/gui/ha/ListServersUIBean.java b/modules/enterprise/gui/portal-war/src/main/java/org/rhq/enterprise/gui/ha/ListServersUIBean.java
index ef4b65a..cc85b4d 100644
--- a/modules/enterprise/gui/portal-war/src/main/java/org/rhq/enterprise/gui/ha/ListServersUIBean.java
+++ b/modules/enterprise/gui/portal-war/src/main/java/org/rhq/enterprise/gui/ha/ListServersUIBean.java
@@ -31,13 +31,13 @@ import org.rhq.enterprise.gui.common.framework.PagedDataTableUIBean;
import org.rhq.enterprise.gui.common.paging.PageControlView;
import org.rhq.enterprise.gui.common.paging.PagedListDataModel;
import org.rhq.enterprise.gui.util.EnterpriseFacesContextUtility;
-import org.rhq.enterprise.server.cloud.CloudManagerLocal;
+import org.rhq.enterprise.server.cloud.TopologyManagerLocal;
import org.rhq.enterprise.server.util.LookupUtil;
public class ListServersUIBean extends PagedDataTableUIBean {
public static final String MANAGED_BEAN_NAME = "ListServersUIBean";
- private CloudManagerLocal cloudManager = LookupUtil.getCloudManager();
+ private TopologyManagerLocal topologyManager = LookupUtil.getTopologyManager();
public ListServersUIBean() {
}
@@ -49,7 +49,7 @@ public class ListServersUIBean extends PagedDataTableUIBean {
if (ids.length > 0) {
try {
- cloudManager.deleteServers(subject, ids);
+ topologyManager.deleteServers(subject, ids);
FacesContextUtility.addMessage(FacesMessage.SEVERITY_INFO, "Removed [" + ids.length
+ "] servers from the cloud.");
@@ -70,7 +70,7 @@ public class ListServersUIBean extends PagedDataTableUIBean {
if (ids.length > 0) {
try {
- cloudManager.updateServerMode(EnterpriseFacesContextUtility.getSubject(), ids, mode);
+ topologyManager.updateServerMode(EnterpriseFacesContextUtility.getSubject(), ids, mode);
FacesContextUtility.addMessage(FacesMessage.SEVERITY_INFO, "Set [" + ids.length + "] servers to mode "
+ mode);
@@ -109,7 +109,7 @@ public class ListServersUIBean extends PagedDataTableUIBean {
public PageList<ServerWithAgentCountComposite> fetchPage(PageControl pc) {
Subject subject = EnterpriseFacesContextUtility.getSubject();
- PageList<ServerWithAgentCountComposite> results = cloudManager.getServerComposites(subject, pc);
+ PageList<ServerWithAgentCountComposite> results = topologyManager.getServerComposites(subject, pc);
return results;
}
}
diff --git a/modules/enterprise/gui/portal-war/src/main/java/org/rhq/enterprise/gui/ha/ViewAgentUIBean.java b/modules/enterprise/gui/portal-war/src/main/java/org/rhq/enterprise/gui/ha/ViewAgentUIBean.java
index 4ccba78..be91add 100644
--- a/modules/enterprise/gui/portal-war/src/main/java/org/rhq/enterprise/gui/ha/ViewAgentUIBean.java
+++ b/modules/enterprise/gui/portal-war/src/main/java/org/rhq/enterprise/gui/ha/ViewAgentUIBean.java
@@ -32,7 +32,7 @@ import org.rhq.enterprise.gui.common.paging.PageControlView;
import org.rhq.enterprise.gui.common.paging.PagedListDataModel;
import org.rhq.enterprise.gui.util.EnterpriseFacesContextUtility;
import org.rhq.enterprise.server.authz.PermissionException;
-import org.rhq.enterprise.server.cloud.CloudManagerLocal;
+import org.rhq.enterprise.server.cloud.TopologyManagerLocal;
import org.rhq.enterprise.server.core.AgentManagerLocal;
import org.rhq.enterprise.server.util.LookupUtil;
@@ -47,7 +47,7 @@ public class ViewAgentUIBean extends PagedDataTableUIBean {
public static final String MANAGED_BEAN_NAME = "ViewAgentUIBean";
private AgentManagerLocal agentManager = LookupUtil.getAgentManager();
- private CloudManagerLocal cloudManager = LookupUtil.getCloudManager();
+ private TopologyManagerLocal topologyManager = LookupUtil.getTopologyManager();
private Agent agent;
@@ -81,7 +81,7 @@ public class ViewAgentUIBean extends PagedDataTableUIBean {
@Override
public PageList<FailoverListDetails> fetchPage(PageControl pc) {
int agentId = getAgent().getId();
- PageList<FailoverListDetails> pageList = cloudManager.getFailoverListDetailsByAgentId(
+ PageList<FailoverListDetails> pageList = topologyManager.getFailoverListDetailsByAgentId(
EnterpriseFacesContextUtility.getSubject(), agentId, pc);
return pageList;
diff --git a/modules/enterprise/gui/portal-war/src/main/java/org/rhq/enterprise/gui/ha/ViewServerUIBean.java b/modules/enterprise/gui/portal-war/src/main/java/org/rhq/enterprise/gui/ha/ViewServerUIBean.java
index 7811b57..0674cf5 100644
--- a/modules/enterprise/gui/portal-war/src/main/java/org/rhq/enterprise/gui/ha/ViewServerUIBean.java
+++ b/modules/enterprise/gui/portal-war/src/main/java/org/rhq/enterprise/gui/ha/ViewServerUIBean.java
@@ -33,7 +33,7 @@ import org.rhq.enterprise.gui.common.paging.PageControlView;
import org.rhq.enterprise.gui.common.paging.PagedListDataModel;
import org.rhq.enterprise.gui.util.EnterpriseFacesContextUtility;
import org.rhq.enterprise.server.authz.PermissionException;
-import org.rhq.enterprise.server.cloud.CloudManagerLocal;
+import org.rhq.enterprise.server.cloud.TopologyManagerLocal;
import org.rhq.enterprise.server.core.AgentManagerLocal;
import org.rhq.enterprise.server.util.LookupUtil;
@@ -41,13 +41,13 @@ public class ViewServerUIBean extends PagedDataTableUIBean {
public static final String MANAGED_BEAN_NAME = "ViewServerUIBean";
private AgentManagerLocal agentManager = LookupUtil.getAgentManager();
- private CloudManagerLocal cloudManager = LookupUtil.getCloudManager();
+ private TopologyManagerLocal topologyManager = LookupUtil.getTopologyManager();
private Server server;
public ViewServerUIBean() {
hasPermission();
int serverId = FacesContextUtility.getRequiredRequestParameter("serverId", Integer.class);
- server = cloudManager.getServerById(serverId);
+ server = topologyManager.getServerById(serverId);
}
@Override
@@ -69,7 +69,7 @@ public class ViewServerUIBean extends PagedDataTableUIBean {
public String save() {
try {
- cloudManager.updateServer(getSubject(), getServer());
+ topologyManager.updateServer(getSubject(), getServer());
FacesContextUtility.addMessage(FacesMessage.SEVERITY_INFO,
"This server's public address and ports have been updated.");
} catch (Exception e) {
diff --git a/modules/enterprise/server/itests-2/src/test/java/org/rhq/enterprise/server/alert/test/AlertConditionTest.java b/modules/enterprise/server/itests-2/src/test/java/org/rhq/enterprise/server/alert/test/AlertConditionTest.java
index a02d19f..1eaea93 100644
--- a/modules/enterprise/server/itests-2/src/test/java/org/rhq/enterprise/server/alert/test/AlertConditionTest.java
+++ b/modules/enterprise/server/itests-2/src/test/java/org/rhq/enterprise/server/alert/test/AlertConditionTest.java
@@ -685,7 +685,7 @@ public class AlertConditionTest extends UpdatePluginMetadataTestBase {
private void deleteServerIdentity() throws Exception {
if (server != null) {
cleanupAgent(); // can't remove the server before we purge the agent
- LookupUtil.getCloudManager().deleteServer(LookupUtil.getSubjectManager().getOverlord(), server.getId());
+ LookupUtil.getTopologyManager().deleteServer(LookupUtil.getSubjectManager().getOverlord(), server.getId());
server = null;
}
}
diff --git a/modules/enterprise/server/itests-2/src/test/java/org/rhq/enterprise/server/cloud/FailoverListManagerBeanTest.java b/modules/enterprise/server/itests-2/src/test/java/org/rhq/enterprise/server/cloud/FailoverListManagerBeanTest.java
index 2494ece..8a95e80 100644
--- a/modules/enterprise/server/itests-2/src/test/java/org/rhq/enterprise/server/cloud/FailoverListManagerBeanTest.java
+++ b/modules/enterprise/server/itests-2/src/test/java/org/rhq/enterprise/server/cloud/FailoverListManagerBeanTest.java
@@ -55,7 +55,7 @@ public class FailoverListManagerBeanTest extends AbstractEJB3Test {
private FailoverListManagerLocal failoverListManager;
private AgentManagerLocal agentManager;
private PartitionEventManagerLocal partitionEventManager;
- private CloudManagerLocal cloudManager;
+ private TopologyManagerLocal topologyManager;
private AffinityGroupManagerLocal affinityGroupManager;
private Subject overlord;
@@ -70,7 +70,7 @@ public class FailoverListManagerBeanTest extends AbstractEJB3Test {
agentManager = LookupUtil.getAgentManager();
failoverListManager = LookupUtil.getFailoverListManager();
partitionEventManager = LookupUtil.getPartitionEventManager();
- cloudManager = LookupUtil.getCloudManager();
+ topologyManager = LookupUtil.getTopologyManager();
affinityGroupManager = LookupUtil.getAffinityGroupManager();
overlord = LookupUtil.getSubjectManager().getOverlord();
@@ -95,9 +95,9 @@ public class FailoverListManagerBeanTest extends AbstractEJB3Test {
try {
for (Server server : servers) {
// must set to down to allow for a delete
- cloudManager.updateServerMode(LookupUtil.getSubjectManager().getOverlord(),
+ topologyManager.updateServerMode(LookupUtil.getSubjectManager().getOverlord(),
new Integer[] { server.getId() }, Server.OperationMode.DOWN);
- cloudManager.deleteServer(LookupUtil.getSubjectManager().getOverlord(), server.getId());
+ topologyManager.deleteServer(LookupUtil.getSubjectManager().getOverlord(), server.getId());
}
for (Agent agent : agents) {
diff --git a/modules/enterprise/server/itests-2/src/test/java/org/rhq/enterprise/server/core/CoreServerServiceImplTest.java b/modules/enterprise/server/itests-2/src/test/java/org/rhq/enterprise/server/core/CoreServerServiceImplTest.java
index 3857afc..b32ad30 100644
--- a/modules/enterprise/server/itests-2/src/test/java/org/rhq/enterprise/server/core/CoreServerServiceImplTest.java
+++ b/modules/enterprise/server/itests-2/src/test/java/org/rhq/enterprise/server/core/CoreServerServiceImplTest.java
@@ -178,9 +178,9 @@ public class CoreServerServiceImplTest extends AbstractEJB3Test {
protected void afterMethod() throws Exception {
// cleanup our test server
- LookupUtil.getCloudManager().updateServerMode(LookupUtil.getSubjectManager().getOverlord(),
+ LookupUtil.getTopologyManager().updateServerMode(LookupUtil.getSubjectManager().getOverlord(),
new Integer[] { server.getId() }, OperationMode.DOWN);
- LookupUtil.getCloudManager().deleteServer(LookupUtil.getSubjectManager().getOverlord(), server.getId());
+ LookupUtil.getTopologyManager().deleteServer(LookupUtil.getSubjectManager().getOverlord(), server.getId());
// shutdown our mock mbean server
unprepareCustomServerService(CoreServerMBean.OBJECT_NAME);
diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/AffinityGroupManagerLocal.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/AffinityGroupManagerLocal.java
index 0466a7c..6e755ae 100644
--- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/AffinityGroupManagerLocal.java
+++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/AffinityGroupManagerLocal.java
@@ -118,25 +118,25 @@ public interface AffinityGroupManagerLocal {
/**
* @deprecated portal war was using it (use finders <code>AgentManagerBean.findAgentsByCriteria()</code> and
- * <code>CloudManagerBean.findServersByCriteria()</code> instead)
+ * <code>TopologyManagerBean.findServersByCriteria()</code> instead)
*/
PageList<Server> getServerMembers(Subject subject, int affinityGroupId, PageControl pageControl);
/**
* @deprecated portal war was using it (use finders <code>AgentManagerBean.findAgentsByCriteria()</code> and
- * <code>CloudManagerBean.findServersByCriteria()</code> instead)
+ * <code>TopologyManagerBean.findServersByCriteria()</code> instead)
*/
PageList<Server> getServerNonMembers(Subject subject, int affinityGroupId, PageControl pageControl);
/**
* @deprecated portal war was using it (use finders <code>AgentManagerBean.findAgentsByCriteria()</code> and
- * <code>CloudManagerBean.findServersByCriteria()</code> instead)
+ * <code>TopologyManagerBean.findServersByCriteria()</code> instead)
*/
PageList<Agent> getAgentMembers(Subject subject, int affinityGroupId, PageControl pageControl);
/**
* @deprecated portal war was using it (use finders <code>AgentManagerBean.findAgentsByCriteria()</code> and
- * <code>CloudManagerBean.findServersByCriteria()</code> instead)
+ * <code>TopologyManagerBean.findServersByCriteria()</code> instead)
*/
PageList<Agent> getAgentNonMembers(Subject subject, int affinityGroupId, PageControl pageControl);
diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/CloudManagerBean.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/CloudManagerBean.java
deleted file mode 100644
index 2c775d4..0000000
--- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/CloudManagerBean.java
+++ /dev/null
@@ -1,316 +0,0 @@
-/*
- * RHQ Management Platform
- * Copyright (C) 2005-2008 Red Hat, Inc.
- * All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation version 2 of the License.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-package org.rhq.enterprise.server.cloud;
-
-import java.util.List;
-
-import javax.ejb.EJB;
-import javax.ejb.Stateless;
-import javax.persistence.EntityManager;
-import javax.persistence.NoResultException;
-import javax.persistence.PersistenceContext;
-import javax.persistence.Query;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-import org.rhq.core.domain.auth.Subject;
-import org.rhq.core.domain.authz.Permission;
-import org.rhq.core.domain.cloud.FailoverListDetails;
-import org.rhq.core.domain.cloud.PartitionEventType;
-import org.rhq.core.domain.cloud.Server;
-import org.rhq.core.domain.cloud.composite.ServerWithAgentCountComposite;
-import org.rhq.core.domain.criteria.ServerCriteria;
-import org.rhq.core.domain.resource.Agent;
-import org.rhq.core.domain.server.PersistenceUtility;
-import org.rhq.core.domain.util.PageControl;
-import org.rhq.core.domain.util.PageList;
-import org.rhq.enterprise.server.RHQConstants;
-import org.rhq.enterprise.server.authz.AuthorizationManagerLocal;
-import org.rhq.enterprise.server.authz.RequiredPermission;
-import org.rhq.enterprise.server.authz.RequiredPermissions;
-import org.rhq.enterprise.server.cloud.instance.ServerManagerLocal;
-import org.rhq.enterprise.server.util.CriteriaQueryGenerator;
-import org.rhq.enterprise.server.util.CriteriaQueryRunner;
-import org.rhq.enterprise.server.util.LookupUtil;
-
-/**
- * This class manages and reports information about the RHQ Server Cloud as a whole.
- * It does not discern which server is which, and can be called from any server in
- * the cloud and will operate identically the same results.
- *
- * @author Joseph Marques
- */
-@Stateless
-public class CloudManagerBean implements CloudManagerLocal {
- private final Log log = LogFactory.getLog(CloudManagerBean.class);
-
- // A time sufficient to determine whether a server is down. Can be based on the initial delay set for the server instance
- // job updating the server mtimes. See StartupServlet.
- private static final long SERVER_DOWN_INTERVAL = 1000L * 2 * 60;
-
- @PersistenceContext(unitName = RHQConstants.PERSISTENCE_UNIT_NAME)
- private EntityManager entityManager;
-
- @EJB
- private CloudManagerLocal cloudManager;
-
- @EJB
- private FailoverListManagerLocal failoverListManager;
-
- @EJB
- private PartitionEventManagerLocal partitionEventManager;
-
- @EJB
- private AuthorizationManagerLocal authorizationManager;
-
- @EJB
- //@IgnoreDependency
- private ServerManagerLocal serverManager;
-
- public List<Agent> getAgentsByServerName(String serverName) {
- Server server = cloudManager.getServerByName(serverName);
- List<Agent> agents = server.getAgents();
- agents.size(); // iterating over this collection out of a transactional boundaries will throw LazyInitExceptions
- return agents;
- }
-
- public Server getServerById(int serverId) {
- Server server = entityManager.find(Server.class, serverId);
- return server;
- }
-
- public Server getServerByName(String serverName) {
- Query query = entityManager.createNamedQuery(Server.QUERY_FIND_BY_NAME);
- query.setParameter("name", serverName);
-
- try {
- Server server = (Server) query.getSingleResult();
- return server;
- } catch (NoResultException nre) {
- log.info("Server[name=" + serverName + "] not found, returning null...");
- return null;
- }
- }
-
- @SuppressWarnings("unchecked")
- public List<Server> getAllCloudServers() {
- Query query = entityManager.createNamedQuery(Server.QUERY_FIND_ALL_CLOUD_MEMBERS);
- List<Server> results = query.getResultList();
- return results;
- }
-
- @SuppressWarnings("unchecked")
- public List<Server> getAllServers() {
- Query query = entityManager.createNamedQuery(Server.QUERY_FIND_ALL);
- List<Server> results = query.getResultList();
- return results;
- }
-
- @SuppressWarnings("unchecked")
- @RequiredPermissions({ @RequiredPermission(Permission.MANAGE_SETTINGS),
- @RequiredPermission(Permission.MANAGE_INVENTORY) })
- public PageList<ServerWithAgentCountComposite> getServerComposites(Subject subject, PageControl pc) {
- pc.initDefaultOrderingField("s.name");
-
- Query query = PersistenceUtility.createQueryWithOrderBy(entityManager, Server.QUERY_FIND_ALL_COMPOSITES, pc);
-
- List<ServerWithAgentCountComposite> results = query.getResultList();
- int count = getServerCount();
-
- return new PageList<ServerWithAgentCountComposite>(results, count, pc);
- }
-
- public int getServerCount() {
- Query query = PersistenceUtility.createCountQuery(entityManager, Server.QUERY_FIND_ALL);
-
- try {
- long serverCount = (Long) query.getSingleResult();
- return (int) serverCount;
- } catch (NoResultException nre) {
- log.debug("Could not get count of cloud instances, returning 0...");
- return 0;
- }
- }
-
- public int getNormalServerCount() {
- Query query = PersistenceUtility.createCountQuery(entityManager, Server.QUERY_FIND_ALL_NORMAL_CLOUD_MEMBERS);
-
- try {
- long serverCount = (Long) query.getSingleResult();
- return (int) serverCount;
- } catch (NoResultException nre) {
- log.debug("Could not get count of normal cloud instances, returning 0...");
- return 0;
- }
- }
-
- @RequiredPermissions({ @RequiredPermission(Permission.MANAGE_SETTINGS),
- @RequiredPermission(Permission.MANAGE_INVENTORY) })
- public void deleteServers(Subject subject, Integer[] serverIds) throws CloudManagerException {
- if (serverIds == null) {
- return;
- }
-
- for (Integer nextServerId : serverIds) {
- cloudManager.deleteServer(subject, nextServerId);
- }
- }
-
- @RequiredPermissions({ @RequiredPermission(Permission.MANAGE_SETTINGS),
- @RequiredPermission(Permission.MANAGE_INVENTORY) })
- public void deleteServer(Subject subject, Integer serverId) throws CloudManagerException {
- try {
- Server server = entityManager.find(Server.class, serverId);
-
- if (Server.OperationMode.NORMAL == server.getOperationMode()) {
- throw new CloudManagerException("Could not delete server " + server.getName()
- + ". Server must be down or in maintenance mode. Current operating mode is: "
- + server.getOperationMode().name());
- }
-
- // Delete any server list entries referencing this server
- failoverListManager.deleteServerListDetailsForServer(serverId);
-
- // Delete any agent references to this server
- Query query = entityManager.createNamedQuery(Agent.QUERY_REMOVE_SERVER_REFERENCE);
- query.setParameter("serverId", serverId);
- query.executeUpdate();
-
- // Then, delete the server
- query = entityManager.createNamedQuery(Server.QUERY_DELETE_BY_ID);
- query.setParameter("serverId", serverId);
- query.executeUpdate();
-
- entityManager.flush();
- entityManager.clear();
-
- log.info("Removed server " + server);
-
- // Now, request a cloud repartitioning due to the server removal
- partitionEventManager.cloudPartitionEventRequest(LookupUtil.getSubjectManager().getOverlord(),
- PartitionEventType.SERVER_DELETION, server.getName());
-
- } catch (Exception e) {
- throw new CloudManagerException("Could not delete server[id=" + serverId + "]: " + e.getMessage(), e);
- }
- }
-
- @RequiredPermissions({ @RequiredPermission(Permission.MANAGE_SETTINGS),
- @RequiredPermission(Permission.MANAGE_INVENTORY) })
- public void updateServerMode(Subject subject, Integer[] serverIds, Server.OperationMode mode) {
- if (serverIds == null) {
- return;
- }
-
- if (mode == null) {
- throw new IllegalArgumentException("mode can not be null");
- }
-
- if (serverIds.length > 0) {
- try {
- for (Integer id : serverIds) {
- Server server = entityManager.find(Server.class, id);
-
- if (server.getOperationMode() == mode) {
- // ignore if there is no change
- continue;
- }
-
- // Audit servers being set to DOWN since the state change can't be reported any other way. Servers
- // be set to any other mode will be handled when the cloud job established the current operating mode.
- if (Server.OperationMode.DOWN == mode) {
- String audit = server.getName() + ": " + server.getOperationMode().name() + " --> " + mode;
-
- partitionEventManager.auditPartitionEvent(LookupUtil.getSubjectManager().getOverlord(),
- PartitionEventType.OPERATION_MODE_CHANGE, audit);
- }
- server.setOperationMode(mode);
- }
- } catch (Exception e) {
- log.debug("Failed to update HA server modes: " + e);
- }
- }
- }
-
- @RequiredPermissions({ @RequiredPermission(Permission.MANAGE_SETTINGS),
- @RequiredPermission(Permission.MANAGE_INVENTORY) })
- public Server updateServer(Subject subject, Server server) {
- return entityManager.merge(server);
- }
-
- @RequiredPermissions({ @RequiredPermission(Permission.MANAGE_SETTINGS),
- @RequiredPermission(Permission.MANAGE_INVENTORY) })
- public PageList<FailoverListDetails> getFailoverListDetailsByAgentId(Subject subject, int agentId, PageControl pc) {
- pc.initDefaultOrderingField("fld.ordinal");
-
- Query query = PersistenceUtility.createQueryWithOrderBy(entityManager,
- FailoverListDetails.QUERY_GET_VIA_AGENT_ID_WITH_SERVERS, pc);
- Query countQuery = PersistenceUtility.createCountQuery(entityManager,
- FailoverListDetails.QUERY_GET_VIA_AGENT_ID);
-
- query.setParameter("agentId", agentId);
- countQuery.setParameter("agentId", agentId);
-
- @SuppressWarnings("unchecked")
- List<FailoverListDetails> list = query.getResultList();
- long count = (Long) countQuery.getSingleResult();
-
- return new PageList<FailoverListDetails>(list, (int) count, pc);
- }
-
- public void markStaleServersDown(Subject subject) {
- if (!authorizationManager.isOverlord(subject)) {
- throw new IllegalArgumentException("The markStaleServersDown method must be called by the overlord");
- }
-
- long staleTime = System.currentTimeMillis() - SERVER_DOWN_INTERVAL;
-
- String serverName = null;
- try {
- serverName = serverManager.getIdentity();
- if (log.isDebugEnabled()) {
- log.debug(serverName + " is marking stale servers DOWN");
- }
- } catch (Exception e) {
- log.error("Could not determine which instance is marking stale servers DOWN");
- }
- Query query = entityManager.createNamedQuery(Server.QUERY_UPDATE_SET_STALE_DOWN);
- query.setParameter("downMode", Server.OperationMode.DOWN);
- query.setParameter("normalMode", Server.OperationMode.NORMAL);
- query.setParameter("staleTime", staleTime);
- query.setParameter("thisServerName", serverName); // might be null
- int resultCount = query.executeUpdate();
-
- if (log.isDebugEnabled()) {
- log.debug(String.valueOf(resultCount) + " stale servers were marked DOWN");
- }
-
- // Perform requested partition events. Note that we only need to execute one cloud partition
- // regardless of the number of pending requests, as the work would be duplicated.
- partitionEventManager.processRequestedPartitionEvents();
- }
-
- @RequiredPermission(Permission.MANAGE_SETTINGS)
- public PageList<Server> findServersByCriteria(Subject subject, ServerCriteria criteria) {
- CriteriaQueryGenerator generator = new CriteriaQueryGenerator(subject, criteria);
- CriteriaQueryRunner<Server> runner = new CriteriaQueryRunner<Server>(criteria, generator, entityManager);
- return runner.execute();
- }
-}
diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/CloudManagerException.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/CloudManagerException.java
deleted file mode 100644
index dce22cf..0000000
--- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/CloudManagerException.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * RHQ Management Platform
- * Copyright (C) 2005-2008 Red Hat, Inc.
- * All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation version 2 of the License.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-package org.rhq.enterprise.server.cloud;
-
-/**
- * @author Joseph Marques
- */
-public class CloudManagerException extends AffinityGroupException {
-
- private static final long serialVersionUID = 1L;
-
- public CloudManagerException() {
- }
-
- public CloudManagerException(String message) {
- super(message);
- }
-
- public CloudManagerException(Throwable cause) {
- super(cause);
- }
-
- public CloudManagerException(String message, Throwable cause) {
- super(message, cause);
- }
-
-}
diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/CloudManagerLocal.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/CloudManagerLocal.java
deleted file mode 100644
index 25a9145..0000000
--- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/CloudManagerLocal.java
+++ /dev/null
@@ -1,155 +0,0 @@
-/*
- * RHQ Management Platform
- * Copyright (C) 2005-2008 Red Hat, Inc.
- * All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation version 2 of the License.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-package org.rhq.enterprise.server.cloud;
-
-import java.util.List;
-
-import javax.ejb.Local;
-
-import org.rhq.core.domain.auth.Subject;
-import org.rhq.core.domain.cloud.FailoverListDetails;
-import org.rhq.core.domain.cloud.Server;
-import org.rhq.core.domain.cloud.composite.ServerWithAgentCountComposite;
-import org.rhq.core.domain.criteria.ServerCriteria;
-import org.rhq.core.domain.resource.Agent;
-import org.rhq.core.domain.util.PageControl;
-import org.rhq.core.domain.util.PageList;
-
-/**
- * @author Joseph Marques
- */
-@Local
-public interface CloudManagerLocal {
-
- void deleteServers(Subject subject, Integer[] serverIds) throws CloudManagerException;
-
- void deleteServer(Subject subject, Integer serverId) throws CloudManagerException;
-
- List<Agent> getAgentsByServerName(String serverName);
-
- /**
- *
- * @param serverId
- * @return the server
- * @deprecated Use the <code>findServersByCriteria()</code> instead.
- */
- Server getServerById(int serverId);
-
- /**
- *
- * @param serverName
- * @return the server
- * @deprecated Use the <code>findServersByCriteria()</code> instead.
- */
- Server getServerByName(String serverName);
-
- /**
- * Return every server registered in the database considered part of the active cloud. This will exclude, for example,
- * servers in INSTALLED mode or any other mode that should not be included when performing cloud operations such as partitioning.
- * @return All servers available to the cloud.
- *
- */
- List<Server> getAllCloudServers();
-
- /**
- * Return every server registered in the database.
- * @return All servers, regardless of operation mode.
- * @deprecated Use the <code>findServersByCriteria()</code> instead.
- */
- List<Server> getAllServers();
-
-
- /**
- * Returns all servers with the agent counts
- *
- * the subject needs to have MANAGE_INVENTORY and MANAGE_SETTINGS permissions.
- *
- * @param subject the caller
- * @param pc
- * @return list of <code>ServerWithAgentCountComposite</code>
- */
- PageList<ServerWithAgentCountComposite> getServerComposites(Subject subject, PageControl pc);
-
- /**
- * Returns the number of servers that are part of the "server cloud", which excludes
- * servers that have been installed but not associated with the cloud.
- * The returned count will include those servers that are down or in maintenance mode,
- * in addition to those servers that are currently running in a normal state.
- *
- * @return count of servers in the cloud
- */
- int getServerCount();
-
- /**
- * Returns the number of servers that are part of the "server cloud" that are currently
- * running in "normal" mode.
- *
- * This excludes all other servers such as those servers that have been installed but
- * not associated with the cloud, servers that are down or in maintenance mode.
- *
- * @return count of servers in the cloud that are in a normal running state
- */
- int getNormalServerCount();
-
- /**
- * Updates the server operation mode for multiple servers.
- *
- * the subject needs to have MANAGE_INVENTORY and MANAGE_SETTINGS permissions.
- *
- * @param subject the caller
- * @param serverIds
- * @param mode desired server operation mode
- */
- void updateServerMode(Subject subject, Integer[] serverIds, Server.OperationMode mode);
-
- /**
- * Updates the server.
- *
- * the subject needs to have MANAGE_INVENTORY and MANAGE_SETTINGS permissions.
- *
- * @param subject the caller.
- * @param server
- * @return
- */
- Server updateServer(Subject subject, Server server);
-
- /**
- *
- * the subject needs to have MANAGE_SETTINGS permissions.
- *
- * @param subject
- * @param agentId
- * @param pc
- * @return
- */
- PageList<FailoverListDetails> getFailoverListDetailsByAgentId(Subject subject, int agentId, PageControl pc);
-
- void markStaleServersDown(Subject subject);
-
- /**
- * Fetches the server based on provided criteria.
- *
- * the subject needs to have MANAGE_SETTINGS permissions.
- *
- * @param subject caller
- * @param criteria the criteria
- * @return list of servers
- */
- PageList<Server> findServersByCriteria(Subject subject, ServerCriteria criteria);
-}
diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/FailoverListManagerBean.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/FailoverListManagerBean.java
index 56de2e5..7d5cc79 100644
--- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/FailoverListManagerBean.java
+++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/FailoverListManagerBean.java
@@ -73,7 +73,7 @@ public class FailoverListManagerBean implements FailoverListManagerLocal {
@EJB
//@IgnoreDependency
- CloudManagerLocal cloudManager;
+ TopologyManagerLocal topologyManager;
@EJB
AgentManagerLocal agentManager;
@@ -131,7 +131,7 @@ public class FailoverListManagerBean implements FailoverListManagerLocal {
}
private FailoverListComposite generateServerList(PartitionEvent event, Agent agent) {
- List<Server> servers = cloudManager.getAllCloudServers();
+ List<Server> servers = topologyManager.getAllCloudServers();
List<Agent> agents = new ArrayList<Agent>(1);
agents.add(agent);
@@ -151,7 +151,7 @@ public class FailoverListManagerBean implements FailoverListManagerLocal {
}
public Map<Agent, FailoverListComposite> refresh(PartitionEvent event) {
- List<Server> servers = cloudManager.getAllCloudServers();
+ List<Server> servers = topologyManager.getAllCloudServers();
List<Agent> agents = agentManager.getAllAgents();
// persist results immediate, which will be the only writes (as opposed to reads) in this transaction
diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/StatusManagerBean.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/StatusManagerBean.java
index 38b8233..dc851da 100644
--- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/StatusManagerBean.java
+++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/StatusManagerBean.java
@@ -79,7 +79,7 @@ public class StatusManagerBean implements StatusManagerLocal {
@EJB
//@IgnoreDependency
- CloudManagerLocal cloudManager;
+ TopologyManagerLocal topologyManager;
@EJB
//@IgnoreDependency
diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/TopologyManagerBean.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/TopologyManagerBean.java
new file mode 100644
index 0000000..7926504
--- /dev/null
+++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/TopologyManagerBean.java
@@ -0,0 +1,316 @@
+/*
+ * RHQ Management Platform
+ * Copyright (C) 2005-2008 Red Hat, Inc.
+ * All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation version 2 of the License.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+package org.rhq.enterprise.server.cloud;
+
+import java.util.List;
+
+import javax.ejb.EJB;
+import javax.ejb.Stateless;
+import javax.persistence.EntityManager;
+import javax.persistence.NoResultException;
+import javax.persistence.PersistenceContext;
+import javax.persistence.Query;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import org.rhq.core.domain.auth.Subject;
+import org.rhq.core.domain.authz.Permission;
+import org.rhq.core.domain.cloud.FailoverListDetails;
+import org.rhq.core.domain.cloud.PartitionEventType;
+import org.rhq.core.domain.cloud.Server;
+import org.rhq.core.domain.cloud.composite.ServerWithAgentCountComposite;
+import org.rhq.core.domain.criteria.ServerCriteria;
+import org.rhq.core.domain.resource.Agent;
+import org.rhq.core.domain.server.PersistenceUtility;
+import org.rhq.core.domain.util.PageControl;
+import org.rhq.core.domain.util.PageList;
+import org.rhq.enterprise.server.RHQConstants;
+import org.rhq.enterprise.server.authz.AuthorizationManagerLocal;
+import org.rhq.enterprise.server.authz.RequiredPermission;
+import org.rhq.enterprise.server.authz.RequiredPermissions;
+import org.rhq.enterprise.server.cloud.instance.ServerManagerLocal;
+import org.rhq.enterprise.server.util.CriteriaQueryGenerator;
+import org.rhq.enterprise.server.util.CriteriaQueryRunner;
+import org.rhq.enterprise.server.util.LookupUtil;
+
+/**
+ * This class manages and reports information about the RHQ Server Cloud as a whole.
+ * It does not discern which server is which, and can be called from any server in
+ * the cloud and will operate identically the same results.
+ *
+ * @author Joseph Marques
+ */
+@Stateless
+public class TopologyManagerBean implements TopologyManagerLocal {
+ private final Log log = LogFactory.getLog(TopologyManagerBean.class);
+
+ // A time sufficient to determine whether a server is down. Can be based on the initial delay set for the server instance
+ // job updating the server mtimes. See StartupServlet.
+ private static final long SERVER_DOWN_INTERVAL = 1000L * 2 * 60;
+
+ @PersistenceContext(unitName = RHQConstants.PERSISTENCE_UNIT_NAME)
+ private EntityManager entityManager;
+
+ @EJB
+ private TopologyManagerLocal topologyManager;
+
+ @EJB
+ private FailoverListManagerLocal failoverListManager;
+
+ @EJB
+ private PartitionEventManagerLocal partitionEventManager;
+
+ @EJB
+ private AuthorizationManagerLocal authorizationManager;
+
+ @EJB
+ //@IgnoreDependency
+ private ServerManagerLocal serverManager;
+
+ public List<Agent> getAgentsByServerName(String serverName) {
+ Server server = topologyManager.getServerByName(serverName);
+ List<Agent> agents = server.getAgents();
+ agents.size(); // iterating over this collection out of a transactional boundaries will throw LazyInitExceptions
+ return agents;
+ }
+
+ public Server getServerById(int serverId) {
+ Server server = entityManager.find(Server.class, serverId);
+ return server;
+ }
+
+ public Server getServerByName(String serverName) {
+ Query query = entityManager.createNamedQuery(Server.QUERY_FIND_BY_NAME);
+ query.setParameter("name", serverName);
+
+ try {
+ Server server = (Server) query.getSingleResult();
+ return server;
+ } catch (NoResultException nre) {
+ log.info("Server[name=" + serverName + "] not found, returning null...");
+ return null;
+ }
+ }
+
+ @SuppressWarnings("unchecked")
+ public List<Server> getAllCloudServers() {
+ Query query = entityManager.createNamedQuery(Server.QUERY_FIND_ALL_CLOUD_MEMBERS);
+ List<Server> results = query.getResultList();
+ return results;
+ }
+
+ @SuppressWarnings("unchecked")
+ public List<Server> getAllServers() {
+ Query query = entityManager.createNamedQuery(Server.QUERY_FIND_ALL);
+ List<Server> results = query.getResultList();
+ return results;
+ }
+
+ @SuppressWarnings("unchecked")
+ @RequiredPermissions({ @RequiredPermission(Permission.MANAGE_SETTINGS),
+ @RequiredPermission(Permission.MANAGE_INVENTORY) })
+ public PageList<ServerWithAgentCountComposite> getServerComposites(Subject subject, PageControl pc) {
+ pc.initDefaultOrderingField("s.name");
+
+ Query query = PersistenceUtility.createQueryWithOrderBy(entityManager, Server.QUERY_FIND_ALL_COMPOSITES, pc);
+
+ List<ServerWithAgentCountComposite> results = query.getResultList();
+ int count = getServerCount();
+
+ return new PageList<ServerWithAgentCountComposite>(results, count, pc);
+ }
+
+ public int getServerCount() {
+ Query query = PersistenceUtility.createCountQuery(entityManager, Server.QUERY_FIND_ALL);
+
+ try {
+ long serverCount = (Long) query.getSingleResult();
+ return (int) serverCount;
+ } catch (NoResultException nre) {
+ log.debug("Could not get count of cloud instances, returning 0...");
+ return 0;
+ }
+ }
+
+ public int getNormalServerCount() {
+ Query query = PersistenceUtility.createCountQuery(entityManager, Server.QUERY_FIND_ALL_NORMAL_CLOUD_MEMBERS);
+
+ try {
+ long serverCount = (Long) query.getSingleResult();
+ return (int) serverCount;
+ } catch (NoResultException nre) {
+ log.debug("Could not get count of normal cloud instances, returning 0...");
+ return 0;
+ }
+ }
+
+ @RequiredPermissions({ @RequiredPermission(Permission.MANAGE_SETTINGS),
+ @RequiredPermission(Permission.MANAGE_INVENTORY) })
+ public void deleteServers(Subject subject, Integer[] serverIds) throws TopologyManagerException {
+ if (serverIds == null) {
+ return;
+ }
+
+ for (Integer nextServerId : serverIds) {
+ topologyManager.deleteServer(subject, nextServerId);
+ }
+ }
+
+ @RequiredPermissions({ @RequiredPermission(Permission.MANAGE_SETTINGS),
+ @RequiredPermission(Permission.MANAGE_INVENTORY) })
+ public void deleteServer(Subject subject, Integer serverId) throws TopologyManagerException {
+ try {
+ Server server = entityManager.find(Server.class, serverId);
+
+ if (Server.OperationMode.NORMAL == server.getOperationMode()) {
+ throw new TopologyManagerException("Could not delete server " + server.getName()
+ + ". Server must be down or in maintenance mode. Current operating mode is: "
+ + server.getOperationMode().name());
+ }
+
+ // Delete any server list entries referencing this server
+ failoverListManager.deleteServerListDetailsForServer(serverId);
+
+ // Delete any agent references to this server
+ Query query = entityManager.createNamedQuery(Agent.QUERY_REMOVE_SERVER_REFERENCE);
+ query.setParameter("serverId", serverId);
+ query.executeUpdate();
+
+ // Then, delete the server
+ query = entityManager.createNamedQuery(Server.QUERY_DELETE_BY_ID);
+ query.setParameter("serverId", serverId);
+ query.executeUpdate();
+
+ entityManager.flush();
+ entityManager.clear();
+
+ log.info("Removed server " + server);
+
+ // Now, request a cloud repartitioning due to the server removal
+ partitionEventManager.cloudPartitionEventRequest(LookupUtil.getSubjectManager().getOverlord(),
+ PartitionEventType.SERVER_DELETION, server.getName());
+
+ } catch (Exception e) {
+ throw new TopologyManagerException("Could not delete server[id=" + serverId + "]: " + e.getMessage(), e);
+ }
+ }
+
+ @RequiredPermissions({ @RequiredPermission(Permission.MANAGE_SETTINGS),
+ @RequiredPermission(Permission.MANAGE_INVENTORY) })
+ public void updateServerMode(Subject subject, Integer[] serverIds, Server.OperationMode mode) {
+ if (serverIds == null) {
+ return;
+ }
+
+ if (mode == null) {
+ throw new IllegalArgumentException("mode can not be null");
+ }
+
+ if (serverIds.length > 0) {
+ try {
+ for (Integer id : serverIds) {
+ Server server = entityManager.find(Server.class, id);
+
+ if (server.getOperationMode() == mode) {
+ // ignore if there is no change
+ continue;
+ }
+
+ // Audit servers being set to DOWN since the state change can't be reported any other way. Servers
+ // be set to any other mode will be handled when the cloud job established the current operating mode.
+ if (Server.OperationMode.DOWN == mode) {
+ String audit = server.getName() + ": " + server.getOperationMode().name() + " --> " + mode;
+
+ partitionEventManager.auditPartitionEvent(LookupUtil.getSubjectManager().getOverlord(),
+ PartitionEventType.OPERATION_MODE_CHANGE, audit);
+ }
+ server.setOperationMode(mode);
+ }
+ } catch (Exception e) {
+ log.debug("Failed to update HA server modes: " + e);
+ }
+ }
+ }
+
+ @RequiredPermissions({ @RequiredPermission(Permission.MANAGE_SETTINGS),
+ @RequiredPermission(Permission.MANAGE_INVENTORY) })
+ public Server updateServer(Subject subject, Server server) {
+ return entityManager.merge(server);
+ }
+
+ @RequiredPermissions({ @RequiredPermission(Permission.MANAGE_SETTINGS),
+ @RequiredPermission(Permission.MANAGE_INVENTORY) })
+ public PageList<FailoverListDetails> getFailoverListDetailsByAgentId(Subject subject, int agentId, PageControl pc) {
+ pc.initDefaultOrderingField("fld.ordinal");
+
+ Query query = PersistenceUtility.createQueryWithOrderBy(entityManager,
+ FailoverListDetails.QUERY_GET_VIA_AGENT_ID_WITH_SERVERS, pc);
+ Query countQuery = PersistenceUtility.createCountQuery(entityManager,
+ FailoverListDetails.QUERY_GET_VIA_AGENT_ID);
+
+ query.setParameter("agentId", agentId);
+ countQuery.setParameter("agentId", agentId);
+
+ @SuppressWarnings("unchecked")
+ List<FailoverListDetails> list = query.getResultList();
+ long count = (Long) countQuery.getSingleResult();
+
+ return new PageList<FailoverListDetails>(list, (int) count, pc);
+ }
+
+ public void markStaleServersDown(Subject subject) {
+ if (!authorizationManager.isOverlord(subject)) {
+ throw new IllegalArgumentException("The markStaleServersDown method must be called by the overlord");
+ }
+
+ long staleTime = System.currentTimeMillis() - SERVER_DOWN_INTERVAL;
+
+ String serverName = null;
+ try {
+ serverName = serverManager.getIdentity();
+ if (log.isDebugEnabled()) {
+ log.debug(serverName + " is marking stale servers DOWN");
+ }
+ } catch (Exception e) {
+ log.error("Could not determine which instance is marking stale servers DOWN");
+ }
+ Query query = entityManager.createNamedQuery(Server.QUERY_UPDATE_SET_STALE_DOWN);
+ query.setParameter("downMode", Server.OperationMode.DOWN);
+ query.setParameter("normalMode", Server.OperationMode.NORMAL);
+ query.setParameter("staleTime", staleTime);
+ query.setParameter("thisServerName", serverName); // might be null
+ int resultCount = query.executeUpdate();
+
+ if (log.isDebugEnabled()) {
+ log.debug(String.valueOf(resultCount) + " stale servers were marked DOWN");
+ }
+
+ // Perform requested partition events. Note that we only need to execute one cloud partition
+ // regardless of the number of pending requests, as the work would be duplicated.
+ partitionEventManager.processRequestedPartitionEvents();
+ }
+
+ @RequiredPermission(Permission.MANAGE_SETTINGS)
+ public PageList<Server> findServersByCriteria(Subject subject, ServerCriteria criteria) {
+ CriteriaQueryGenerator generator = new CriteriaQueryGenerator(subject, criteria);
+ CriteriaQueryRunner<Server> runner = new CriteriaQueryRunner<Server>(criteria, generator, entityManager);
+ return runner.execute();
+ }
+}
diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/TopologyManagerException.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/TopologyManagerException.java
new file mode 100644
index 0000000..22ba34a
--- /dev/null
+++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/TopologyManagerException.java
@@ -0,0 +1,43 @@
+/*
+ * RHQ Management Platform
+ * Copyright (C) 2005-2008 Red Hat, Inc.
+ * All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation version 2 of the License.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+package org.rhq.enterprise.server.cloud;
+
+/**
+ * @author Joseph Marques
+ */
+public class TopologyManagerException extends AffinityGroupException {
+
+ private static final long serialVersionUID = 1L;
+
+ public TopologyManagerException() {
+ }
+
+ public TopologyManagerException(String message) {
+ super(message);
+ }
+
+ public TopologyManagerException(Throwable cause) {
+ super(cause);
+ }
+
+ public TopologyManagerException(String message, Throwable cause) {
+ super(message, cause);
+ }
+
+}
diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/TopologyManagerLocal.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/TopologyManagerLocal.java
new file mode 100644
index 0000000..f098e54
--- /dev/null
+++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/TopologyManagerLocal.java
@@ -0,0 +1,155 @@
+/*
+ * RHQ Management Platform
+ * Copyright (C) 2005-2008 Red Hat, Inc.
+ * All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation version 2 of the License.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+package org.rhq.enterprise.server.cloud;
+
+import java.util.List;
+
+import javax.ejb.Local;
+
+import org.rhq.core.domain.auth.Subject;
+import org.rhq.core.domain.cloud.FailoverListDetails;
+import org.rhq.core.domain.cloud.Server;
+import org.rhq.core.domain.cloud.composite.ServerWithAgentCountComposite;
+import org.rhq.core.domain.criteria.ServerCriteria;
+import org.rhq.core.domain.resource.Agent;
+import org.rhq.core.domain.util.PageControl;
+import org.rhq.core.domain.util.PageList;
+
+/**
+ * @author Joseph Marques
+ */
+@Local
+public interface TopologyManagerLocal {
+
+ void deleteServers(Subject subject, Integer[] serverIds) throws TopologyManagerException;
+
+ void deleteServer(Subject subject, Integer serverId) throws TopologyManagerException;
+
+ List<Agent> getAgentsByServerName(String serverName);
+
+ /**
+ *
+ * @param serverId
+ * @return the server
+ * @deprecated Use the <code>findServersByCriteria()</code> instead.
+ */
+ Server getServerById(int serverId);
+
+ /**
+ *
+ * @param serverName
+ * @return the server
+ * @deprecated Use the <code>findServersByCriteria()</code> instead.
+ */
+ Server getServerByName(String serverName);
+
+ /**
+ * Return every server registered in the database considered part of the active cloud. This will exclude, for example,
+ * servers in INSTALLED mode or any other mode that should not be included when performing cloud operations such as partitioning.
+ * @return All servers available to the cloud.
+ *
+ */
+ List<Server> getAllCloudServers();
+
+ /**
+ * Return every server registered in the database.
+ * @return All servers, regardless of operation mode.
+ * @deprecated Use the <code>findServersByCriteria()</code> instead.
+ */
+ List<Server> getAllServers();
+
+
+ /**
+ * Returns all servers with the agent counts
+ *
+ * the subject needs to have MANAGE_INVENTORY and MANAGE_SETTINGS permissions.
+ *
+ * @param subject the caller
+ * @param pc
+ * @return list of <code>ServerWithAgentCountComposite</code>
+ */
+ PageList<ServerWithAgentCountComposite> getServerComposites(Subject subject, PageControl pc);
+
+ /**
+ * Returns the number of servers that are part of the "server cloud", which excludes
+ * servers that have been installed but not associated with the cloud.
+ * The returned count will include those servers that are down or in maintenance mode,
+ * in addition to those servers that are currently running in a normal state.
+ *
+ * @return count of servers in the cloud
+ */
+ int getServerCount();
+
+ /**
+ * Returns the number of servers that are part of the "server cloud" that are currently
+ * running in "normal" mode.
+ *
+ * This excludes all other servers such as those servers that have been installed but
+ * not associated with the cloud, servers that are down or in maintenance mode.
+ *
+ * @return count of servers in the cloud that are in a normal running state
+ */
+ int getNormalServerCount();
+
+ /**
+ * Updates the server operation mode for multiple servers.
+ *
+ * the subject needs to have MANAGE_INVENTORY and MANAGE_SETTINGS permissions.
+ *
+ * @param subject the caller
+ * @param serverIds
+ * @param mode desired server operation mode
+ */
+ void updateServerMode(Subject subject, Integer[] serverIds, Server.OperationMode mode);
+
+ /**
+ * Updates the server.
+ *
+ * the subject needs to have MANAGE_INVENTORY and MANAGE_SETTINGS permissions.
+ *
+ * @param subject the caller.
+ * @param server
+ * @return
+ */
+ Server updateServer(Subject subject, Server server);
+
+ /**
+ *
+ * the subject needs to have MANAGE_SETTINGS permissions.
+ *
+ * @param subject
+ * @param agentId
+ * @param pc
+ * @return
+ */
+ PageList<FailoverListDetails> getFailoverListDetailsByAgentId(Subject subject, int agentId, PageControl pc);
+
+ void markStaleServersDown(Subject subject);
+
+ /**
+ * Fetches the server based on provided criteria.
+ *
+ * the subject needs to have MANAGE_SETTINGS permissions.
+ *
+ * @param subject caller
+ * @param criteria the criteria
+ * @return list of servers
+ */
+ PageList<Server> findServersByCriteria(Subject subject, ServerCriteria criteria);
+}
diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/instance/ServerManagerBean.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/instance/ServerManagerBean.java
index b74df73..4300313 100644
--- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/instance/ServerManagerBean.java
+++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/instance/ServerManagerBean.java
@@ -46,9 +46,9 @@ import org.rhq.core.util.exception.ThrowableUtil;
import org.rhq.enterprise.communications.GlobalSuspendCommandListener;
import org.rhq.enterprise.server.RHQConstants;
import org.rhq.enterprise.server.auth.SubjectManagerLocal;
-import org.rhq.enterprise.server.cloud.CloudManagerLocal;
import org.rhq.enterprise.server.cloud.PartitionEventManagerLocal;
import org.rhq.enterprise.server.cloud.StatusManagerLocal;
+import org.rhq.enterprise.server.cloud.TopologyManagerLocal;
import org.rhq.enterprise.server.core.comm.ServerCommunicationsServiceUtil;
/**
@@ -79,7 +79,7 @@ public class ServerManagerBean implements ServerManagerLocal {
private EntityManager entityManager;
@EJB
- private CloudManagerLocal cloudManager;
+ private TopologyManagerLocal topologyManager;
@EJB
private StatusManagerLocal agentStatusManager;
@@ -141,7 +141,7 @@ public class ServerManagerBean implements ServerManagerLocal {
public List<Agent> getAgents() {
String identity = getIdentity();
- List<Agent> results = cloudManager.getAgentsByServerName(identity);
+ List<Agent> results = topologyManager.getAgentsByServerName(identity);
return results;
}
@@ -152,7 +152,7 @@ public class ServerManagerBean implements ServerManagerLocal {
public boolean getAndClearServerStatus() {
String identity = getIdentity();
- Server server = cloudManager.getServerByName(identity);
+ Server server = topologyManager.getServerByName(identity);
if (server == null) {
return false; // don't reload caches if we don't know who we are
}
@@ -163,7 +163,7 @@ public class ServerManagerBean implements ServerManagerLocal {
public Server getServer() throws ServerNotFoundException {
String identity = getIdentity();
- Server result = cloudManager.getServerByName(identity);
+ Server result = topologyManager.getServerByName(identity);
if (result == null) {
throw new ServerNotFoundException("Could not find server; is the " + RHQ_SERVER_NAME_PROPERTY
+ " property set in rhq-server.properties?");
diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/core/ShutdownListener.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/core/ShutdownListener.java
index 0749543..dd2e244 100644
--- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/core/ShutdownListener.java
+++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/core/ShutdownListener.java
@@ -41,7 +41,7 @@ import org.rhq.core.domain.cloud.Server.OperationMode;
import org.rhq.core.util.file.FileUtil;
import org.rhq.core.util.jdbc.JDBCUtil;
import org.rhq.enterprise.server.RHQConstants;
-import org.rhq.enterprise.server.cloud.CloudManagerLocal;
+import org.rhq.enterprise.server.cloud.TopologyManagerLocal;
import org.rhq.enterprise.server.cloud.instance.ServerManagerLocal;
import org.rhq.enterprise.server.scheduler.SchedulerLocal;
import org.rhq.enterprise.server.util.LookupUtil;
@@ -70,7 +70,7 @@ public class ShutdownListener {
private ServerManagerLocal serverManager;
@EJB
- private CloudManagerLocal cloudManager;
+ private TopologyManagerLocal topologyManager;
@Resource(name = "RHQ_DS", mappedName = RHQConstants.DATASOURCE_JNDI_NAME)
private DataSource dataSource;
@@ -169,7 +169,7 @@ public class ShutdownListener {
// Set the server operation mode to DOWN unless in MM
Server server = serverManager.getServer();
if (Server.OperationMode.MAINTENANCE != server.getOperationMode()) {
- cloudManager.updateServerMode(LookupUtil.getSubjectManager().getOverlord(), new Integer[] { server.getId() }, OperationMode.DOWN);
+ topologyManager.updateServerMode(LookupUtil.getSubjectManager().getOverlord(), new Integer[] { server.getId() }, OperationMode.DOWN);
}
} catch (Throwable t) {
// only show ugly stack traces if the user runs the server in debug mode
diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/core/StartupBean.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/core/StartupBean.java
index 3240c1e..aa153d5 100644
--- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/core/StartupBean.java
+++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/core/StartupBean.java
@@ -63,7 +63,7 @@ import org.rhq.enterprise.server.RHQConstants;
import org.rhq.enterprise.server.alert.engine.internal.AlertConditionCacheCoordinator;
import org.rhq.enterprise.server.auth.SessionManager;
import org.rhq.enterprise.server.auth.SubjectManagerLocal;
-import org.rhq.enterprise.server.cloud.CloudManagerLocal;
+import org.rhq.enterprise.server.cloud.TopologyManagerLocal;
import org.rhq.enterprise.server.cloud.instance.CacheConsistencyManagerLocal;
import org.rhq.enterprise.server.cloud.instance.ServerManagerLocal;
import org.rhq.enterprise.server.cloud.instance.SyncEndpointAddressException;
@@ -112,7 +112,7 @@ public class StartupBean {
private CacheConsistencyManagerLocal cacheConsistencyManager;
@EJB
- private CloudManagerLocal cloudManager;
+ private TopologyManagerLocal topologyManager;
@EJB
private ResourceTypeManagerLocal resourceTypeManager;
@@ -258,7 +258,7 @@ public class StartupBean {
log.info("Server is configured to start up in MAINTENANCE mode.");
Server server = serverManager.getServer();
Integer[] serverId = new Integer[] { server.getId() };
- cloudManager.updateServerMode(LookupUtil.getSubjectManager().getOverlord(), serverId,
+ topologyManager.updateServerMode(LookupUtil.getSubjectManager().getOverlord(), serverId,
OperationMode.MAINTENANCE);
}
@@ -284,7 +284,7 @@ public class StartupBean {
*/
private void createDefaultServerIfNecessary() {
String identity = serverManager.getIdentity();
- Server server = cloudManager.getServerByName(identity);
+ Server server = topologyManager.getServerByName(identity);
if (server == null) {
server = new Server();
server.setName(identity);
diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/plugin/pc/AbstractJobWrapper.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/plugin/pc/AbstractJobWrapper.java
index da89754..e2e5338 100644
--- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/plugin/pc/AbstractJobWrapper.java
+++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/plugin/pc/AbstractJobWrapper.java
@@ -178,7 +178,7 @@ abstract class AbstractJobWrapper implements Job {
// we only refire immediately if we are in an HA environment- which means another server might
// be able to take over - and that other server might have its master PC running for us to execute in.
- boolean isHA = LookupUtil.getCloudManager().getNormalServerCount() > 1;
+ boolean isHA = LookupUtil.getTopologyManager().getNormalServerCount() > 1;
exception.setRefireImmediately(isHA);
// abort this invocation now - we can't run without the plugin containers
diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/scheduler/jobs/CloudManagerJob.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/scheduler/jobs/CloudManagerJob.java
index 7540d7e..4922ffd 100644
--- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/scheduler/jobs/CloudManagerJob.java
+++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/scheduler/jobs/CloudManagerJob.java
@@ -35,7 +35,7 @@ public class CloudManagerJob extends AbstractStatefulJob {
Subject overlord = LookupUtil.getSubjectManager().getOverlord();
log.debug("Begin scanning for servers that missed their heartbeat");
try {
- LookupUtil.getCloudManager().markStaleServersDown(overlord);
+ LookupUtil.getTopologyManager().markStaleServersDown(overlord);
} finally {
log.debug("Finished scanning for servers that missed their heartbeat");
}
diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/util/LookupUtil.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/util/LookupUtil.java
index f1b685a..b6ed2b2 100644
--- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/util/LookupUtil.java
+++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/util/LookupUtil.java
@@ -62,8 +62,8 @@ import org.rhq.enterprise.server.bundle.BundleManagerBean;
import org.rhq.enterprise.server.bundle.BundleManagerLocal;
import org.rhq.enterprise.server.cloud.AffinityGroupManagerBean;
import org.rhq.enterprise.server.cloud.AffinityGroupManagerLocal;
-import org.rhq.enterprise.server.cloud.CloudManagerBean;
-import org.rhq.enterprise.server.cloud.CloudManagerLocal;
+import org.rhq.enterprise.server.cloud.TopologyManagerBean;
+import org.rhq.enterprise.server.cloud.TopologyManagerLocal;
import org.rhq.enterprise.server.cloud.FailoverListManagerBean;
import org.rhq.enterprise.server.cloud.FailoverListManagerLocal;
import org.rhq.enterprise.server.cloud.PartitionEventManagerBean;
@@ -469,8 +469,8 @@ public final class LookupUtil {
return lookupLocal(AffinityGroupManagerBean.class);
}
- public static CloudManagerLocal getCloudManager() {
- return lookupLocal(CloudManagerBean.class);
+ public static TopologyManagerLocal getTopologyManager() {
+ return lookupLocal(TopologyManagerBean.class);
}
public static ClusterManagerLocal getClusterManager() {
diff --git a/modules/enterprise/server/jar/src/main/resources/META-INF/jboss.xml b/modules/enterprise/server/jar/src/main/resources/META-INF/jboss.xml
index b7c5c66..6ce7bb2 100644
--- a/modules/enterprise/server/jar/src/main/resources/META-INF/jboss.xml
+++ b/modules/enterprise/server/jar/src/main/resources/META-INF/jboss.xml
@@ -102,7 +102,7 @@
<!--
- The CacheConsistencyManagerBean, CloudManagerBean, ServerManagerBean, StatusManagerBean, and SystemManagerBean
+ The CacheConsistencyManagerBean, TopologyManagerBean, ServerManagerBean, StatusManagerBean, and SystemManagerBean
SLSB's are all invoked, either directly or indirectly, by EJB timers. Since EJB timer invocations are always
done in new threads, using the default SLSB pool impl (ThreadlocalPool) would cause a new instance of this
SLSB to be created every time it was invoked by an EJB timer. This would be bad if only because an existing
@@ -128,7 +128,7 @@
</session>
<session>
- <ejb-name>CloudManagerBean</ejb-name>
+ <ejb-name>TopologyManagerBean</ejb-name>
<pool-config>
<pool-class>org.jboss.ejb3.StrictMaxPool</pool-class>
<pool-max-size>30</pool-max-size>
diff --git a/modules/enterprise/server/plugins/cloud/src/main/java/org/rhq/enterprise/server/plugins/cloud/CloudServerPluginComponent.java b/modules/enterprise/server/plugins/cloud/src/main/java/org/rhq/enterprise/server/plugins/cloud/CloudServerPluginComponent.java
index 88eb3ba..2dfc404 100644
--- a/modules/enterprise/server/plugins/cloud/src/main/java/org/rhq/enterprise/server/plugins/cloud/CloudServerPluginComponent.java
+++ b/modules/enterprise/server/plugins/cloud/src/main/java/org/rhq/enterprise/server/plugins/cloud/CloudServerPluginComponent.java
@@ -20,7 +20,7 @@ import org.rhq.core.domain.criteria.ResourceCriteria;
import org.rhq.core.domain.resource.Agent;
import org.rhq.core.domain.resource.Resource;
import org.rhq.enterprise.server.auth.SubjectManagerLocal;
-import org.rhq.enterprise.server.cloud.CloudManagerLocal;
+import org.rhq.enterprise.server.cloud.TopologyManagerLocal;
import org.rhq.enterprise.server.operation.OperationManagerLocal;
import org.rhq.enterprise.server.operation.ResourceOperationSchedule;
import org.rhq.enterprise.server.plugin.pc.ControlFacet;
@@ -57,7 +57,7 @@ public class CloudServerPluginComponent implements ServerPluginComponent, Contro
ControlResults results = new ControlResults();
- CloudManagerLocal cloudMgr = LookupUtil.getCloudManager();
+ TopologyManagerLocal cloudMgr = LookupUtil.getTopologyManager();
Server server = cloudMgr.getServerByName(serverName);
if (server == null) {
@@ -91,7 +91,7 @@ public class CloudServerPluginComponent implements ServerPluginComponent, Contro
public void syncServerEndpoints(ScheduledJobInvocationContext context) {
log.debug("Preparing to sync server endpoints.");
- CloudManagerLocal cloudMgr = LookupUtil.getCloudManager();
+ TopologyManagerLocal cloudMgr = LookupUtil.getTopologyManager();
List<Server> servers = cloudMgr.getAllServers();
purgeStaleServers(context, servers);
commit 17527ede423834ae3aef36021f3b8d162240cfea
Author: Jirka Kremser <jkremser(a)redhat.com>
Date: Thu Dec 20 19:47:11 2012 +0100
ServerCriteria now allows filtering by multiple operation modes, AgentCriteria allows filtering by agenttoken
diff --git a/modules/core/domain/src/main/java/org/rhq/core/domain/criteria/AgentCriteria.java b/modules/core/domain/src/main/java/org/rhq/core/domain/criteria/AgentCriteria.java
index ba1a470..b535141 100644
--- a/modules/core/domain/src/main/java/org/rhq/core/domain/criteria/AgentCriteria.java
+++ b/modules/core/domain/src/main/java/org/rhq/core/domain/criteria/AgentCriteria.java
@@ -46,6 +46,7 @@ public class AgentCriteria extends Criteria {
private String filterName;
private String filterAddress;
private Integer filterPort;
+ private String filterAgenttoken;
private Integer filterServerId; // requires override
private Integer filterAffinityGroupId; // requires override
@@ -56,8 +57,8 @@ public class AgentCriteria extends Criteria {
private PageOrdering sortName;
public AgentCriteria() {
- filterOverrides.put("serverId", "server.id = ?");
- filterOverrides.put("affinityGroupId", "affinityGroup.id = ?");
+ filterOverrides.put("serverId", "server.id = ?");
+ filterOverrides.put("affinityGroupId", "affinityGroup.id = ?");
}
public Class<?> getPersistentClass() {
@@ -71,7 +72,7 @@ public class AgentCriteria extends Criteria {
public void addFilterName(String filterName) {
this.filterName = filterName;
}
-
+
public void addFilterAffinityGroupId(Integer filterAffinityGroupId) {
this.filterAffinityGroupId = filterAffinityGroupId;
}
@@ -84,14 +85,18 @@ public class AgentCriteria extends Criteria {
this.filterPort = filterPort;
}
+ public void addFilterAgenttoken(String filterAgenttoken) {
+ this.filterAgenttoken = filterAgenttoken;
+ }
+
public void addFilterServerId(Integer filterServerId) {
this.filterServerId = filterServerId;
}
-
+
public void fetchAffinityGroup(boolean fetchAffinityGroup) {
this.fetchAffinityGroup = fetchAffinityGroup;
}
-
+
public void fetchServer(boolean fetchServer) {
this.fetchServer = fetchServer;
}
diff --git a/modules/core/domain/src/main/java/org/rhq/core/domain/criteria/ServerCriteria.java b/modules/core/domain/src/main/java/org/rhq/core/domain/criteria/ServerCriteria.java
index b00b3d7..ebbdbc6 100644
--- a/modules/core/domain/src/main/java/org/rhq/core/domain/criteria/ServerCriteria.java
+++ b/modules/core/domain/src/main/java/org/rhq/core/domain/criteria/ServerCriteria.java
@@ -19,6 +19,9 @@
package org.rhq.core.domain.criteria;
+import java.util.Arrays;
+import java.util.List;
+
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
@@ -28,6 +31,7 @@ import org.rhq.core.domain.util.PageOrdering;
/**
* Criteria object for querying {@link Server}s.
+ * Only subject with MANAGE_SETTINGS can fetch these instances.
*
* @author Jiri Kremser
*/
@@ -48,7 +52,7 @@ public class ServerCriteria extends Criteria {
private String filterAddress;
private Integer filterPort;
private Integer filterSecurePort;
- private OperationMode filterOperationMode; // requires override
+ private List<OperationMode> filterOperationMode; // requires override
private Integer filterComputePower;
private Integer filterAffinityGroupId; // requires override
@@ -60,8 +64,8 @@ public class ServerCriteria extends Criteria {
private PageOrdering sortComputePower;
public ServerCriteria() {
- // filterOverrides.put("operationMode", "operationMode IN ( ? )");
- filterOverrides.put("affinityGroupId", "affinityGroup.id = ?");
+ filterOverrides.put("operationMode", "operationMode IN ( ? )");
+ filterOverrides.put("affinityGroupId", "affinityGroup.id = ?");
}
public Class<?> getPersistentClass() {
@@ -88,8 +92,10 @@ public class ServerCriteria extends Criteria {
this.filterSecurePort = filterSecurePort;
}
- public void addFilterOperationMode(OperationMode operationMode) {
- this.filterOperationMode = operationMode;
+ public void addFilterOperationMode(OperationMode... operationMode) {
+ if (operationMode != null && operationMode.length > 0) {
+ this.filterOperationMode = Arrays.asList(operationMode);
+ }
}
public void addFilterComputePower(Integer filterComputePower) {
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupAgentsSelector.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupAgentsSelector.java
index 04949ef..f7c8083 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupAgentsSelector.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupAgentsSelector.java
@@ -126,12 +126,7 @@ public class AffinityGroupAgentsSelector extends AbstractSelector<Agent, AgentCr
@Override
protected Criteria getLatestCriteria(DynamicForm availableFilterForm) {
- String search = (String) availableFilterForm.getValue(FIELD_NAME.propertyName());
- Criteria criteria = new Criteria();
- if (null != search) {
- criteria.addCriteria(FIELD_NAME.propertyName(), search);
- }
- return criteria;
+ return availableFilterForm.getValuesAsCriteria();
}
@Override
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupServersSelector.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupServersSelector.java
index fcfe892..d1d97d4 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupServersSelector.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupServersSelector.java
@@ -37,7 +37,6 @@ import com.smartgwt.client.widgets.events.ClickHandler;
import com.smartgwt.client.widgets.events.CloseClickEvent;
import com.smartgwt.client.widgets.events.CloseClickHandler;
import com.smartgwt.client.widgets.form.DynamicForm;
-import com.smartgwt.client.widgets.form.fields.SelectItem;
import com.smartgwt.client.widgets.form.fields.TextItem;
import com.smartgwt.client.widgets.grid.ListGridRecord;
import com.smartgwt.client.widgets.layout.VLayout;
@@ -49,7 +48,7 @@ import org.rhq.core.domain.criteria.ServerCriteria;
import org.rhq.core.domain.util.PageList;
import org.rhq.enterprise.gui.coregui.client.CoreGUI;
import org.rhq.enterprise.gui.coregui.client.IconEnum;
-import org.rhq.enterprise.gui.coregui.client.components.form.SortedSelectItem;
+import org.rhq.enterprise.gui.coregui.client.components.form.EnumSelectItem;
import org.rhq.enterprise.gui.coregui.client.components.selector.AbstractSelector;
import org.rhq.enterprise.gui.coregui.client.components.table.TableSection;
import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup;
@@ -89,25 +88,13 @@ public class AffinityGroupServersSelector extends AbstractSelector<Server, Serve
availableFilterForm.setNumCols(4);
availableFilterForm.setWidth("75%");
final TextItem search = new TextItem(FIELD_NAME.propertyName(), MSG.common_title_search());
- final SelectItem operationModeSelect = new SortedSelectItem(ServerDatasource.FILTER_OPERATION_MODE,
- MSG.view_adminTopology_serverDetail_operationMode());
- operationModeSelect.setValueMap(buildOperationModeOptions());
- operationModeSelect.setValue("ALL");
+ final EnumSelectItem operationModeSelect = new EnumSelectItem(ServerDatasource.FILTER_OPERATION_MODE,
+ MSG.view_adminTopology_serverDetail_operationMode(), OperationMode.class, null, null);
availableFilterForm.setItems(search, operationModeSelect);
}
return availableFilterForm;
}
- private String[] buildOperationModeOptions() {
- OperationMode[] modes = OperationMode.values();
- String[] options = new String[modes.length + 1];
- for (int i = 0; i < modes.length; i++) {
- options[i] = modes[i].toString();
- }
- options[modes.length] = "ALL";
- return options;
- }
-
private void prepareMembers(final AffinityGroupServersSelector selector) {
ServerCriteria criteria = new ServerCriteria();
criteria.addFilterAffinityGroupId(affinityGroupId);
@@ -144,16 +131,7 @@ public class AffinityGroupServersSelector extends AbstractSelector<Server, Serve
@Override
protected Criteria getLatestCriteria(DynamicForm availableFilterForm) {
- String search = (String) availableFilterForm.getValue(FIELD_NAME.propertyName());
- String operationMode = (String) availableFilterForm.getValue(ServerDatasource.FILTER_OPERATION_MODE);
- Criteria criteria = new Criteria();
- if (null != search) {
- criteria.addCriteria(FIELD_NAME.propertyName(), search);
- }
- if (operationMode != null && !"ALL".equals(operationMode)) {
- criteria.addCriteria(ServerDatasource.FILTER_OPERATION_MODE, operationMode);
- }
- return criteria;
+ return availableFilterForm.getValuesAsCriteria();
}
@Override
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentDatasource.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentDatasource.java
index 31dd28b..f35aaee 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentDatasource.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentDatasource.java
@@ -21,6 +21,7 @@ package org.rhq.enterprise.gui.coregui.client.admin.topology;
import static org.rhq.enterprise.gui.coregui.client.admin.topology.AgentDatasourceField.FIELD_ADDRESS;
import static org.rhq.enterprise.gui.coregui.client.admin.topology.AgentDatasourceField.FIELD_AFFINITY_GROUP;
import static org.rhq.enterprise.gui.coregui.client.admin.topology.AgentDatasourceField.FIELD_AFFINITY_GROUP_ID;
+import static org.rhq.enterprise.gui.coregui.client.admin.topology.AgentDatasourceField.FIELD_AGENTTOKEN;
import static org.rhq.enterprise.gui.coregui.client.admin.topology.AgentDatasourceField.FIELD_ID;
import static org.rhq.enterprise.gui.coregui.client.admin.topology.AgentDatasourceField.FIELD_LAST_AVAILABILITY_REPORT;
import static org.rhq.enterprise.gui.coregui.client.admin.topology.AgentDatasourceField.FIELD_NAME;
@@ -59,6 +60,7 @@ public class AgentDatasource extends RPCDataSource<Agent, AgentCriteria> {
// filters
public static final String FILTER_ADDRESS = FIELD_ADDRESS.propertyName();
public static final String FILTER_PORT = FIELD_PORT.propertyName();
+ public static final String FILTER_AGENTTOKEN = FIELD_AGENTTOKEN.propertyName();
public static final String FILTER_SERVER_ID = "serverId";
public static final String FILTER_AFFINITY_GROUP_ID = "affinityGroupId";
@@ -167,6 +169,7 @@ public class AgentDatasource extends RPCDataSource<Agent, AgentCriteria> {
criteria.addFilterName(getFilter(request, FIELD_NAME.propertyName(), String.class));
criteria.addFilterAddress(getFilter(request, FILTER_ADDRESS, String.class));
criteria.addFilterPort(getFilter(request, FILTER_PORT, Integer.class));
+ criteria.addFilterAgenttoken(getFilter(request, FILTER_AGENTTOKEN, String.class));
criteria.addFilterServerId(getFilter(request, FILTER_SERVER_ID, Integer.class));
criteria.addFilterAffinityGroupId(getFilter(request, FILTER_AFFINITY_GROUP_ID, Integer.class));
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentDatasourceField.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentDatasourceField.java
index 7935446..71d9d5a 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentDatasourceField.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentDatasourceField.java
@@ -39,6 +39,8 @@ public enum AgentDatasourceField {
FIELD_ADDRESS("address", CoreGUI.getMessages().view_adminTopology_agent_agentBindAddress()),
FIELD_PORT("port", CoreGUI.getMessages().view_adminTopology_agent_agentBindPort()),
+
+ FIELD_AGENTTOKEN("agenttoken", CoreGUI.getMessages().view_adminTopology_agentDetail_token()),
FIELD_LAST_AVAILABILITY_REPORT("lastAvailabilityReport", CoreGUI.getMessages()
.view_adminTopology_agent_lastAvailabilityReport()),
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventDatasource.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventDatasource.java
index 2eb0d87..39bd457 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventDatasource.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventDatasource.java
@@ -95,6 +95,11 @@ public class PartitionEventDatasource extends RPCDataSource<PartitionEvent, Part
@Override
protected void executeFetch(final DSRequest request, final DSResponse response, PartitionEventCriteria criteria) {
+ if (criteria == null) {
+ response.setTotalRows(0);
+ processResponse(request.getRequestId(), response);
+ return;
+ }
GWTServiceLookup.getCloudService().findPartitionEventsByCriteria(criteria,
new AsyncCallback<PageList<PartitionEvent>>() {
public void onSuccess(PageList<PartitionEvent> result) {
@@ -134,12 +139,18 @@ public class PartitionEventDatasource extends RPCDataSource<PartitionEvent, Part
@Override
protected PartitionEventCriteria getFetchCriteria(DSRequest request) {
+ ExecutionStatus[] statusesFilter = getArrayFilter(request, FILTER_EXECUTION_STATUS, ExecutionStatus.class);
+ PartitionEventType[] typesFilter = getArrayFilter(request, FILTER_EVENT_TYPE, PartitionEventType.class);
+ if (statusesFilter == null || statusesFilter.length == 0 || typesFilter == null || typesFilter.length == 0) {
+ return null; // user didn't select any ex. status or event type - return null to indicate no data should
+ // be displayed
+ }
PartitionEventCriteria criteria = new PartitionEventCriteria();
// printRequestCriteria(request);
criteria.addFilterId(getFilter(request, FIELD_ID.propertyName(), Integer.class));
criteria.addFilterEventDetail(getFilter(request, FIELD_EVENT_DETAIL.propertyName(), String.class));
- criteria.addFilterExecutionStatus(getArrayFilter(request, FILTER_EXECUTION_STATUS, ExecutionStatus.class));
- criteria.addFilterEventType(getArrayFilter(request, FILTER_EVENT_TYPE, PartitionEventType.class));
+ criteria.addFilterExecutionStatus(statusesFilter);
+ criteria.addFilterEventType(typesFilter);
//@todo: Remove me when finished debugging search expression
Log.debug(" *** PartitionEventCriteria Search String: " + getFilter(request, "search", String.class));
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDatasource.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDatasource.java
index 736e5b6..09ea8c3 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDatasource.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDatasource.java
@@ -111,6 +111,11 @@ public class ServerDatasource extends AbstractServerNodeDatasource<Server, Serve
@Override
protected void executeFetch(final DSRequest request, final DSResponse response, ServerCriteria criteria) {
+ if (criteria == null) {
+ response.setTotalRows(0);
+ processResponse(request.getRequestId(), response);
+ return;
+ }
if (affinityGroupId != null) {
criteria.addFilterAffinityGroupId(affinityGroupId);
}
@@ -179,6 +184,10 @@ public class ServerDatasource extends AbstractServerNodeDatasource<Server, Serve
@Override
protected ServerCriteria getFetchCriteria(DSRequest request) {
+ OperationMode[] modesFilter = getArrayFilter(request, FILTER_OPERATION_MODE, OperationMode.class);
+ if (modesFilter == null || modesFilter.length == 0) {
+ return null; // user didn't select any modes - return null to indicate no data should be displayed
+ }
ServerCriteria criteria = new ServerCriteria();
// printRequestCriteria(request);
criteria.addFilterId(getFilter(request, FIELD_ID.propertyName(), Integer.class));
@@ -186,7 +195,7 @@ public class ServerDatasource extends AbstractServerNodeDatasource<Server, Serve
criteria.addFilterAddress(getFilter(request, FILTER_ADDRESS, String.class));
criteria.addFilterPort(getFilter(request, FILTER_PORT, Integer.class));
criteria.addFilterSecurePort(getFilter(request, FILTER_SECURE_PORT, Integer.class));
- criteria.addFilterOperationMode(getFilter(request, FILTER_OPERATION_MODE, OperationMode.class));
+ criteria.addFilterOperationMode(modesFilter);
criteria.addFilterComputePower(getFilter(request, FILTER_COMPUTE_POWER, Integer.class));
criteria.addFilterAffinityGroupId(getFilter(request, FILTER_AFFINITY_GROUP_ID, Integer.class));
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/RPCDataSource.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/RPCDataSource.java
index bf6d10a..c4222fc 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/RPCDataSource.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/RPCDataSource.java
@@ -51,6 +51,7 @@ import com.smartgwt.client.widgets.grid.ListGridRecord;
import org.rhq.core.domain.alert.AlertPriority;
import org.rhq.core.domain.cloud.PartitionEvent.ExecutionStatus;
import org.rhq.core.domain.cloud.PartitionEventType;
+import org.rhq.core.domain.cloud.Server.OperationMode;
import org.rhq.core.domain.criteria.BaseCriteria;
import org.rhq.core.domain.drift.DriftCategory;
import org.rhq.core.domain.event.EventSeverity;
@@ -605,6 +606,8 @@ public abstract class RPCDataSource<T, C extends BaseCriteria> extends DataSourc
return (S[]) new ExecutionStatus[size];
} else if (genericEnumType == PartitionEventType.class) {
return (S[]) new PartitionEventType[size];
+ } else if (genericEnumType == OperationMode.class) {
+ return (S[]) new OperationMode[size];
} else {
throw new IllegalArgumentException(MSG.dataSource_rpc_error_unsupportedEnumType(genericEnumType.getName()));
}
commit 84a7565038764cea982692bd25e5060c28fa7d3c
Author: Jirka Kremser <jkremser(a)redhat.com>
Date: Thu Dec 20 17:29:01 2012 +0100
JavaDoc for SLSBs (describing needed permissions)
diff --git a/modules/core/domain/src/main/java/org/rhq/core/domain/criteria/AgentCriteria.java b/modules/core/domain/src/main/java/org/rhq/core/domain/criteria/AgentCriteria.java
index b18b5d6..ba1a470 100644
--- a/modules/core/domain/src/main/java/org/rhq/core/domain/criteria/AgentCriteria.java
+++ b/modules/core/domain/src/main/java/org/rhq/core/domain/criteria/AgentCriteria.java
@@ -28,6 +28,7 @@ import org.rhq.core.domain.util.PageOrdering;
/**
* Criteria object for querying {@link Server}s.
+ * Only subject with MANAGE_SETTINGS can fetch these instances.
*
* @author Jiri Kremser
*/
diff --git a/modules/core/domain/src/main/java/org/rhq/core/domain/criteria/PartitionEventCriteria.java b/modules/core/domain/src/main/java/org/rhq/core/domain/criteria/PartitionEventCriteria.java
index 13ad211..975d425 100644
--- a/modules/core/domain/src/main/java/org/rhq/core/domain/criteria/PartitionEventCriteria.java
+++ b/modules/core/domain/src/main/java/org/rhq/core/domain/criteria/PartitionEventCriteria.java
@@ -32,6 +32,7 @@ import org.rhq.core.domain.util.PageOrdering;
/**
* Criteria object for querying {@link PartitionEvent}s.
+ * Only subject with MANAGE_SETTINGS can fetch these instances.
*
* @author Jiri Kremser
*/
diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/AffinityGroupManagerLocal.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/AffinityGroupManagerLocal.java
index 37029b4..0466a7c 100644
--- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/AffinityGroupManagerLocal.java
+++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/AffinityGroupManagerLocal.java
@@ -35,28 +35,81 @@ import org.rhq.core.domain.util.PageList;
public interface AffinityGroupManagerLocal {
AffinityGroup getById(Subject subject, int affinityGroupId);
+ /**
+ * Creates a new affinity group.
+ *
+ * Subject needs MANAGE_SETTINGS and MANAGE_INVENTORY permissions.
+ *
+ * @param subject the Subject instance
+ * @param affinityGroup @see AffinityGroup
+ * @return new id of the group
+ * @throws AffinityGroupException
+ */
int create(Subject subject, AffinityGroup affinityGroup) throws AffinityGroupException;
+ /**
+ * Deletes the affinity groups.
+ *
+ * Subject needs MANAGE_SETTINGS and MANAGE_INVENTORY permissions.
+ *
+ * @param subject the Subject instance
+ * @param affinityGroupIds
+ * @return
+ */
int delete(Subject subject, Integer[] affinityGroupIds);
+ /**
+ * Updates the affinity group.
+ *
+ * Subject needs MANAGE_SETTINGS and MANAGE_INVENTORY permissions.
+ *
+ * @param subject the Subject instance
+ * @param affinityGroup @see AffinityGroup
+ * @return
+ * @throws AffinityGroupException
+ */
AffinityGroup update(Subject subject, AffinityGroup affinityGroup) throws AffinityGroupException;
+ /**
+ * Adds agents to the affinity group.
+ *
+ * Subject needs MANAGE_SETTINGS and MANAGE_INVENTORY permissions.
+ *
+ * @param subject the Subject instance
+ * @param affinityGroupId
+ * @param agentIds
+ */
void addAgentsToGroup(Subject subject, int affinityGroupId, Integer[] agentIds);
/**
* This should only be called if the agent is currently assigned to an affinity group and that group
- * is being removed, setting the agent to no affinity. Otherwise, unnecessary partition events can be generated.
- * @param subject
+ * is being removed, setting the agent to no affinity. Otherwise, unnecessary partition events can be generated.
+ *
+ * Subjects needs MANAGE_SETTINGS and MANAGE_INVENTORY permissions.
+ *
+ * @param subject the Subject instance
* @param agentIds
*/
void removeAgentsFromGroup(Subject subject, Integer[] agentIds);
+ /**
+ * Adds servers to the affinity group.
+ *
+ * Subject needs MANAGE_SETTINGS and MANAGE_INVENTORY permissions.
+ *
+ * @param subject the Subject instance
+ * @param affinityGroupId
+ * @param serverIds
+ */
void addServersToGroup(Subject subject, int affinityGroupId, Integer[] serverIds);
/**
* This should only be called if the server is currently assigned to an affinity group and that group
* is being removed, setting the server to no affinity. Otherwise, unnecessary partition events can be generated.
- * @param subject
+ *
+ * Subject needs MANAGE_SETTINGS and MANAGE_INVENTORY permissions.
+ *
+ * @param subject the Subject instance
* @param agentIds
*/
void removeServersFromGroup(Subject subject, Integer[] serverIds);
diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/CloudManagerLocal.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/CloudManagerLocal.java
index 8ba595a..25a9145 100644
--- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/CloudManagerLocal.java
+++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/CloudManagerLocal.java
@@ -43,23 +43,47 @@ public interface CloudManagerLocal {
List<Agent> getAgentsByServerName(String serverName);
+ /**
+ *
+ * @param serverId
+ * @return the server
+ * @deprecated Use the <code>findServersByCriteria()</code> instead.
+ */
Server getServerById(int serverId);
+ /**
+ *
+ * @param serverName
+ * @return the server
+ * @deprecated Use the <code>findServersByCriteria()</code> instead.
+ */
Server getServerByName(String serverName);
/**
* Return every server registered in the database considered part of the active cloud. This will exclude, for example,
* servers in INSTALLED mode or any other mode that should not be included when performing cloud operations such as partitioning.
* @return All servers available to the cloud.
+ *
*/
List<Server> getAllCloudServers();
/**
* Return every server registered in the database.
* @return All servers, regardless of operation mode.
+ * @deprecated Use the <code>findServersByCriteria()</code> instead.
*/
List<Server> getAllServers();
+
+ /**
+ * Returns all servers with the agent counts
+ *
+ * the subject needs to have MANAGE_INVENTORY and MANAGE_SETTINGS permissions.
+ *
+ * @param subject the caller
+ * @param pc
+ * @return list of <code>ServerWithAgentCountComposite</code>
+ */
PageList<ServerWithAgentCountComposite> getServerComposites(Subject subject, PageControl pc);
/**
@@ -83,10 +107,37 @@ public interface CloudManagerLocal {
*/
int getNormalServerCount();
+ /**
+ * Updates the server operation mode for multiple servers.
+ *
+ * the subject needs to have MANAGE_INVENTORY and MANAGE_SETTINGS permissions.
+ *
+ * @param subject the caller
+ * @param serverIds
+ * @param mode desired server operation mode
+ */
void updateServerMode(Subject subject, Integer[] serverIds, Server.OperationMode mode);
+ /**
+ * Updates the server.
+ *
+ * the subject needs to have MANAGE_INVENTORY and MANAGE_SETTINGS permissions.
+ *
+ * @param subject the caller.
+ * @param server
+ * @return
+ */
Server updateServer(Subject subject, Server server);
+ /**
+ *
+ * the subject needs to have MANAGE_SETTINGS permissions.
+ *
+ * @param subject
+ * @param agentId
+ * @param pc
+ * @return
+ */
PageList<FailoverListDetails> getFailoverListDetailsByAgentId(Subject subject, int agentId, PageControl pc);
void markStaleServersDown(Subject subject);
@@ -94,9 +145,11 @@ public interface CloudManagerLocal {
/**
* Fetches the server based on provided criteria.
*
+ * the subject needs to have MANAGE_SETTINGS permissions.
+ *
* @param subject caller
* @param criteria the criteria
- * @return
+ * @return list of servers
*/
PageList<Server> findServersByCriteria(Subject subject, ServerCriteria criteria);
}
diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/PartitionEventManagerBean.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/PartitionEventManagerBean.java
index 961af25..4618fda 100644
--- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/PartitionEventManagerBean.java
+++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/PartitionEventManagerBean.java
@@ -254,7 +254,8 @@ public class PartitionEventManagerBean implements PartitionEventManagerLocal {
return new PageList<PartitionEventDetails>(detailsList, (int) count, pageControl);
}
- @RequiredPermission(Permission.MANAGE_SETTINGS)
+ @RequiredPermissions({ @RequiredPermission(Permission.MANAGE_SETTINGS),
+ @RequiredPermission(Permission.MANAGE_INVENTORY) })
public PageList<PartitionEvent> findPartitionEventsByCriteria(Subject subject, PartitionEventCriteria criteria) {
CriteriaQueryGenerator generator = new CriteriaQueryGenerator(subject, criteria);
CriteriaQueryRunner<PartitionEvent> runner = new CriteriaQueryRunner<PartitionEvent>(criteria, generator,
diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/PartitionEventManagerLocal.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/PartitionEventManagerLocal.java
index f0a1bf2..4a4805e9 100644
--- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/PartitionEventManagerLocal.java
+++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/PartitionEventManagerLocal.java
@@ -56,8 +56,11 @@ public interface PartitionEventManagerLocal {
String eventDetail);
/**
- * This call requests full repartitioning of the agent population by the recurring cluster manager job.
- * @param subject
+ * This call requests full repartitioning of the agent population by the recurring cluster manager job.
+ *
+ * the subject needs to have MANAGE_INVENTORY and MANAGE_SETTINGS permissions.
+ *
+ * @param subject the caller
* @param eventType
* @param eventDetail Any useful information regarding the event generation. Should be suitable for display.
* Typically a relevant server name.
@@ -82,10 +85,22 @@ public interface PartitionEventManagerLocal {
/**
* This is primarily a test entry point.
- * @param event
+ *
+ * the subject needs to have MANAGE_INVENTORY and MANAGE_SETTINGS permissions.
+ *
+ * @param subject
+ * @param partitionEventIds
*/
void deletePartitionEvents(Subject subject, Integer[] partitionEventIds);
+ /**
+ * Deletes all the partition events.
+ *
+ * the subject needs to have MANAGE_INVENTORY and MANAGE_SETTINGS permissions.
+ *
+ * @param subject
+ * @return count of deleted events
+ */
int purgeAllEvents(Subject subject);
PartitionEvent getPartitionEvent(Subject subject, int partitionEventId);
@@ -93,14 +108,26 @@ public interface PartitionEventManagerLocal {
PageList<PartitionEvent> getPartitionEvents(Subject subject, PartitionEventType type, ExecutionStatus status,
String details, PageControl pageControl);
+ /**
+ * Returns the partition event details.
+ *
+ * the subject needs to have MANAGE_INVENTORY and MANAGE_SETTINGS permissions.
+ *
+ * @param subject the caller
+ * @param partitionEventId
+ * @param pageControl
+ * @return list with partition event details
+ */
PageList<PartitionEventDetails> getPartitionEventDetails(Subject subject, int partitionEventId,
PageControl pageControl);
/**
- * the subject needs to have MANAGE_INVENTORY permission.
+ * Fetches the partition events based on provided criteria.
*
- * @param subject
- * @param criteria
+ * the subject needs to have MANAGE_INVENTORY and MANAGE_SETTINGS permissions.
+ *
+ * @param subject the caller
+ * @param criteria the criteria
* @return list with partition events
*/
PageList<PartitionEvent> findPartitionEventsByCriteria(Subject subject, PartitionEventCriteria criteria);
diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/core/AgentManagerLocal.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/core/AgentManagerLocal.java
index 5494e4d..7c003ac 100644
--- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/core/AgentManagerLocal.java
+++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/core/AgentManagerLocal.java
@@ -102,6 +102,7 @@ public interface AgentManagerLocal {
* Returns a collection of all agents currently in inventory.
*
* @return list of all known agents in inventory
+ * @deprecated Use <code>findAgentsByCriteria()</code> instead
*/
List<Agent> getAllAgents();
@@ -110,6 +111,7 @@ public interface AgentManagerLocal {
*
* @param serverId the server to filter the agent list by. pass null to view unfiltered results.
* @return list of all known agents in inventory
+ * @deprecated Use <code>findAgentsByCriteria()</code> instead
*/
PageList<Agent> getAgentsByServer(Subject subject, Integer serverId, PageControl pageControl);
@@ -127,6 +129,7 @@ public interface AgentManagerLocal {
* @param agentName
*
* @return the agent whose name matches the given name; <code>null</code> if there is no agent with the given name
+ * @deprecated Use <code>findAgentsByCriteria()</code> instead
*/
Agent getAgentByName(String agentName);
@@ -137,6 +140,7 @@ public interface AgentManagerLocal {
* @param agentId
*
* @return the agent whose id matches the given id; <code>null</code> if there is no agent with the given id
+ * @deprecated Use <code>findAgentsByCriteria()</code> instead
*/
Agent getAgentByID(int agentId);
@@ -148,6 +152,7 @@ public interface AgentManagerLocal {
*
* @return the agent whose agent token matches the given token; <code>null</code> if there is no agent with the
* given token
+ * @deprecated Use <code>findAgentsByCriteria()</code> instead
*/
Agent getAgentByAgentToken(String token);
@@ -160,6 +165,7 @@ public interface AgentManagerLocal {
*
* @return the agent to be known at the given address and port; <code>null</code> if there is no agent with the
* given token
+ * @deprecated Use <code>findAgentsByCriteria()</code> instead
*/
Agent getAgentByAddressAndPort(String address, int port);
@@ -310,5 +316,14 @@ public interface AgentManagerLocal {
*/
public PingRequest handlePingRequest(PingRequest request);
+ /**
+ * Fetches the agents based on provided criteria.
+ *
+ * Subject needs MANAGE_SETTINGS and MANAGE_INVENTORY permissions.
+ *
+ * @param subject caller
+ * @param criteria the criteria
+ * @return list of agents
+ */
PageList<Agent> findAgentsByCriteria(Subject subject, AgentCriteria criteria);
}
\ No newline at end of file
commit e12e4d9e200288cb65be0c15e3bf175b1c0a8b3f
Author: Jirka Kremser <jkremser(a)redhat.com>
Date: Thu Dec 20 14:42:00 2012 +0100
Overriding getBasePath() methods for allowing double clicking on table record for detail views & some JavaDoc
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupAgentsSelector.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupAgentsSelector.java
index 65efb7c..04949ef 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupAgentsSelector.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupAgentsSelector.java
@@ -55,6 +55,8 @@ import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableDynamicForm;
import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableIButton;
/**
+ * Component for assigning the agents into affinity group.
+ *
* @author Jirka Kremser
*/
public class AffinityGroupAgentsSelector extends AbstractSelector<Agent, AgentCriteria> {
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupDetailView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupDetailView.java
index 8a8d81b..669ea22 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupDetailView.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupDetailView.java
@@ -45,7 +45,7 @@ import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableToolStrip;
import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableVLayout;
/**
- * Shows details of a server.
+ * Shows details of a affinity group.
*
* @author Jirka Kremser
*/
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupServersSelector.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupServersSelector.java
index fe4db20..fcfe892 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupServersSelector.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupServersSelector.java
@@ -58,6 +58,8 @@ import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableDynamicForm;
import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableIButton;
/**
+ * Component for assigning the servers into affinity group.
+ *
* @author Jirka Kremser
*/
public class AffinityGroupServersSelector extends AbstractSelector<Server, ServerCriteria> {
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupTableView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupTableView.java
index 87afd6d..ef271dc 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupTableView.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupTableView.java
@@ -60,8 +60,9 @@ import org.rhq.enterprise.gui.coregui.client.util.message.Message;
import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableIButton;
/**
+ * Shows the table of all affinity groups.
+ *
* @author Jirka Kremser
- *
*/
public class AffinityGroupTableView extends TableSection<AffinityGroupWithCountsDatasource> implements HasViewName {
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentDatasource.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentDatasource.java
index dd596e9..31dd28b 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentDatasource.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentDatasource.java
@@ -50,8 +50,9 @@ import org.rhq.enterprise.gui.coregui.client.util.Log;
import org.rhq.enterprise.gui.coregui.client.util.RPCDataSource;
/**
+ * Datasource for @see FailoverListDetails.
+ *
* @author Jirka Kremser
- *
*/
public class AgentDatasource extends RPCDataSource<Agent, AgentCriteria> {
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentDetailView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentDetailView.java
index 7e5c3ac..255a571 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentDetailView.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentDetailView.java
@@ -49,7 +49,7 @@ import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableVLayout;
import org.rhq.enterprise.gui.coregui.client.util.selenium.SeleniumUtility;
/**
- * Shows details of a server.
+ * Shows details of an agent.
*
* @author Jirka Kremser
*/
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentTableView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentTableView.java
index 8f2a658..dbc5bb2 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentTableView.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentTableView.java
@@ -44,6 +44,8 @@ import org.rhq.enterprise.gui.coregui.client.util.StringUtility;
import org.rhq.enterprise.gui.coregui.client.util.selenium.SeleniumUtility;
/**
+ * Shows the table of all agents.
+ *
* @author Jirka Kremser
*/
public class AgentTableView extends TableSection<AgentDatasource> implements HasViewName {
@@ -141,5 +143,9 @@ public class AgentTableView extends TableSection<AgentDatasource> implements Has
public ViewName getViewName() {
return VIEW_ID;
}
-
+
+ @Override
+ protected String getBasePath() {
+ return VIEW_PATH;
+ }
}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/FailoverListItemDatasource.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/FailoverListItemDatasource.java
index 6bfa378..c21d086 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/FailoverListItemDatasource.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/FailoverListItemDatasource.java
@@ -48,8 +48,9 @@ import org.rhq.enterprise.gui.coregui.client.components.table.TimestampCellForma
import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup;
/**
+ * Datasource for @see FailoverListDetails.
+ *
* @author Jirka Kremser
- *
*/
public class FailoverListItemDatasource extends AbstractServerNodeDatasource<FailoverListDetails, Criteria> {
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventDatasource.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventDatasource.java
index c3d103b..2eb0d87 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventDatasource.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventDatasource.java
@@ -49,8 +49,9 @@ import org.rhq.enterprise.gui.coregui.client.util.Log;
import org.rhq.enterprise.gui.coregui.client.util.RPCDataSource;
/**
+ * Datasource for @see PartitionEvent.
+ *
* @author Jirka Kremser
- *
*/
public class PartitionEventDatasource extends RPCDataSource<PartitionEvent, PartitionEventCriteria> {
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventDetailView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventDetailView.java
index 4210202..43ac373 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventDetailView.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventDetailView.java
@@ -114,7 +114,6 @@ public class PartitionEventDetailView extends LocatableVLayout implements Bookma
return;
}
});
-
}
public void onFailure(Throwable caught) {
@@ -167,7 +166,9 @@ public class PartitionEventDetailView extends LocatableVLayout implements Bookma
MSG.view_adminTopology_partitionEventsDetail_agentAssignments());
section.setExpanded(true);
if (eventDetails == null || eventDetails.size() == 0) {
- section.setItems(new Label(MSG.view_adminTopology_partitionEventsDetail_agentAssignments_nothing()));
+ Label nothing = new Label(MSG.view_adminTopology_partitionEventsDetail_agentAssignments_nothing());
+ nothing.setMargin(10);
+ section.setItems(nothing);
} else {
// there is no need for datasource, it is a simple table with two columns
ListGrid assignments = new ListGrid();
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventTableView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventTableView.java
index 599b2c2..3cbfdb1 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventTableView.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventTableView.java
@@ -53,8 +53,9 @@ import org.rhq.enterprise.gui.coregui.client.util.message.Message;
import org.rhq.enterprise.gui.coregui.client.util.selenium.SeleniumUtility;
/**
- * @author Jirka Kremser
+ * Shows the table of all partition events.
*
+ * @author Jirka Kremser
*/
public class PartitionEventTableView extends TableSection<PartitionEventDatasource> implements HasViewName {
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDatasource.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDatasource.java
index 0e7fd48..736e5b6 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDatasource.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDatasource.java
@@ -52,8 +52,9 @@ import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup;
import org.rhq.enterprise.gui.coregui.client.util.Log;
/**
+ * Datasource for @see Server.
+ *
* @author Jirka Kremser
- *
*/
public class ServerDatasource extends AbstractServerNodeDatasource<Server, ServerCriteria> {
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerTableView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerTableView.java
index 2374685..6cae592 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerTableView.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerTableView.java
@@ -53,8 +53,9 @@ import org.rhq.enterprise.gui.coregui.client.util.message.Message;
import org.rhq.enterprise.gui.coregui.client.util.selenium.SeleniumUtility;
/**
- * @author Jirka Kremser
+ * Shows the table of all servers.
*
+ * @author Jirka Kremser
*/
public class ServerTableView extends
TableSection<AbstractServerNodeDatasource<? extends Serializable, ? extends BaseCriteria>> implements HasViewName {
@@ -137,6 +138,11 @@ public class ServerTableView extends
public Canvas getDetailsView(Integer id) {
return new ServerDetailView(extendLocatorId("detailsView"), id);
}
+
+// @Override
+// public abstract void showDetails(ID id) {
+//
+// }
private void showCommonActions() {
addChangeOperationModeAction(OperationMode.NORMAL, MSG.view_adminTopology_server_setNormal());
@@ -249,5 +255,9 @@ public class ServerTableView extends
public ViewName getViewName() {
return VIEW_ID;
}
-
+
+ @Override
+ protected String getBasePath() {
+ return VIEW_PATH;
+ }
}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerWithAgentCountDatasource.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerWithAgentCountDatasource.java
index addd59d..d686395 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerWithAgentCountDatasource.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerWithAgentCountDatasource.java
@@ -38,8 +38,9 @@ import org.rhq.enterprise.gui.coregui.client.CoreGUI;
import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup;
/**
+ * Datasource for @see ServerWithAgentCountComposite.
+ *
* @author Jirka Kremser
- *
*/
public class ServerWithAgentCountDatasource extends
AbstractServerNodeDatasource<ServerWithAgentCountComposite, Criteria> {
commit 8aa16ccbb947f95aee01f25a1c4d8c800c133a8c
Merge: 764fb31 17d9ac9
Author: Jirka Kremser <jkremser(a)redhat.com>
Date: Wed Dec 19 23:50:44 2012 +0100
Merge branch 'master' into jkremser/ha-jsf-to-gwt-rewrite
commit 764fb31756c961b5f5a31df71a8b04def6fce249
Author: Jirka Kremser <jkremser(a)redhat.com>
Date: Wed Dec 19 23:47:56 2012 +0100
AuthZ for CloudManagerBean (adding Subject param to methods)
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerWithAgentCountDatasource.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerWithAgentCountDatasource.java
index 3659082..addd59d 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerWithAgentCountDatasource.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerWithAgentCountDatasource.java
@@ -64,9 +64,8 @@ public class ServerWithAgentCountDatasource extends
ListGridField agentCountField = FIELD_AGENT_COUNT.getListGridField("75");
agentCountField.setHoverCustomizer(new HoverCustomizer() {
public String hoverHTML(Object value, ListGridRecord record, int rowNum, int colNum) {
- return MSG.view_adminTopology_message_agentsCount(FIELD_AGENT_COUNT.propertyName());
- // "There are " + record.getAttributeAsInt(FIELD_AGENT_COUNT.propertyName())
- // + " agents registered to this server.";
+ return MSG.view_adminTopology_message_agentsCount(record.getAttributeAsString(FIELD_AGENT_COUNT
+ .propertyName()));
}
});
agentCountField.setShowHover(true);
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/CloudGWTServiceImpl.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/CloudGWTServiceImpl.java
index dd63fa0..ab46527 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/CloudGWTServiceImpl.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/CloudGWTServiceImpl.java
@@ -77,7 +77,7 @@ public class CloudGWTServiceImpl extends AbstractGWTServiceImpl implements Cloud
@Override
public void deleteServers(int[] serverIds) throws RuntimeException {
try {
- cloudManager.deleteServers(ArrayUtils.toObject(serverIds));
+ cloudManager.deleteServers(getSessionSubject(), ArrayUtils.toObject(serverIds));
} catch (Throwable t) {
throw getExceptionToThrowToClient(t);
}
@@ -86,7 +86,7 @@ public class CloudGWTServiceImpl extends AbstractGWTServiceImpl implements Cloud
@Override
public void updateServerMode(int[] serverIds, OperationMode mode) throws RuntimeException {
try {
- cloudManager.updateServerMode(ArrayUtils.toObject(serverIds), mode);
+ cloudManager.updateServerMode(getSessionSubject(), ArrayUtils.toObject(serverIds), mode);
} catch (Throwable t) {
throw getExceptionToThrowToClient(t);
}
@@ -96,7 +96,8 @@ public class CloudGWTServiceImpl extends AbstractGWTServiceImpl implements Cloud
public List<FailoverListDetails> getFailoverListDetailsByAgentId(int agentId, PageControl pc)
throws RuntimeException {
try {
- return SerialUtility.prepare(cloudManager.getFailoverListDetailsByAgentId(agentId, pc),
+ return SerialUtility.prepare(
+ cloudManager.getFailoverListDetailsByAgentId(getSessionSubject(), agentId, pc),
"CloudGWTServiceImpl.getFailoverListDetailsByAgentId");
} catch (Throwable t) {
throw getExceptionToThrowToClient(t);
diff --git a/modules/enterprise/gui/portal-war/src/main/java/org/rhq/enterprise/gui/ha/ListServersUIBean.java b/modules/enterprise/gui/portal-war/src/main/java/org/rhq/enterprise/gui/ha/ListServersUIBean.java
index 49dee0d..ef4b65a 100644
--- a/modules/enterprise/gui/portal-war/src/main/java/org/rhq/enterprise/gui/ha/ListServersUIBean.java
+++ b/modules/enterprise/gui/portal-war/src/main/java/org/rhq/enterprise/gui/ha/ListServersUIBean.java
@@ -49,7 +49,7 @@ public class ListServersUIBean extends PagedDataTableUIBean {
if (ids.length > 0) {
try {
- cloudManager.deleteServers(ids);
+ cloudManager.deleteServers(subject, ids);
FacesContextUtility.addMessage(FacesMessage.SEVERITY_INFO, "Removed [" + ids.length
+ "] servers from the cloud.");
@@ -70,7 +70,7 @@ public class ListServersUIBean extends PagedDataTableUIBean {
if (ids.length > 0) {
try {
- cloudManager.updateServerMode(ids, mode);
+ cloudManager.updateServerMode(EnterpriseFacesContextUtility.getSubject(), ids, mode);
FacesContextUtility.addMessage(FacesMessage.SEVERITY_INFO, "Set [" + ids.length + "] servers to mode "
+ mode);
diff --git a/modules/enterprise/gui/portal-war/src/main/java/org/rhq/enterprise/gui/ha/ViewAgentUIBean.java b/modules/enterprise/gui/portal-war/src/main/java/org/rhq/enterprise/gui/ha/ViewAgentUIBean.java
index 90d7042..4ccba78 100644
--- a/modules/enterprise/gui/portal-war/src/main/java/org/rhq/enterprise/gui/ha/ViewAgentUIBean.java
+++ b/modules/enterprise/gui/portal-war/src/main/java/org/rhq/enterprise/gui/ha/ViewAgentUIBean.java
@@ -81,7 +81,8 @@ public class ViewAgentUIBean extends PagedDataTableUIBean {
@Override
public PageList<FailoverListDetails> fetchPage(PageControl pc) {
int agentId = getAgent().getId();
- PageList<FailoverListDetails> pageList = cloudManager.getFailoverListDetailsByAgentId(agentId, pc);
+ PageList<FailoverListDetails> pageList = cloudManager.getFailoverListDetailsByAgentId(
+ EnterpriseFacesContextUtility.getSubject(), agentId, pc);
return pageList;
}
diff --git a/modules/enterprise/server/itests-2/src/test/java/org/rhq/enterprise/server/alert/test/AlertConditionTest.java b/modules/enterprise/server/itests-2/src/test/java/org/rhq/enterprise/server/alert/test/AlertConditionTest.java
index a74550d..a33d77c 100644
--- a/modules/enterprise/server/itests-2/src/test/java/org/rhq/enterprise/server/alert/test/AlertConditionTest.java
+++ b/modules/enterprise/server/itests-2/src/test/java/org/rhq/enterprise/server/alert/test/AlertConditionTest.java
@@ -683,7 +683,7 @@ public class AlertConditionTest extends UpdatePluginMetadataTestBase {
private void deleteServerIdentity() throws Exception {
if (server != null) {
cleanupAgent(); // can't remove the server before we purge the agent
- LookupUtil.getCloudManager().deleteServer(server.getId());
+ LookupUtil.getCloudManager().deleteServer(LookupUtil.getSubjectManager().getOverlord(), server.getId());
server = null;
}
}
diff --git a/modules/enterprise/server/itests-2/src/test/java/org/rhq/enterprise/server/cloud/FailoverListManagerBeanTest.java b/modules/enterprise/server/itests-2/src/test/java/org/rhq/enterprise/server/cloud/FailoverListManagerBeanTest.java
index 26a6254..2494ece 100644
--- a/modules/enterprise/server/itests-2/src/test/java/org/rhq/enterprise/server/cloud/FailoverListManagerBeanTest.java
+++ b/modules/enterprise/server/itests-2/src/test/java/org/rhq/enterprise/server/cloud/FailoverListManagerBeanTest.java
@@ -95,8 +95,9 @@ public class FailoverListManagerBeanTest extends AbstractEJB3Test {
try {
for (Server server : servers) {
// must set to down to allow for a delete
- cloudManager.updateServerMode(new Integer[] { server.getId() }, Server.OperationMode.DOWN);
- cloudManager.deleteServer(server.getId());
+ cloudManager.updateServerMode(LookupUtil.getSubjectManager().getOverlord(),
+ new Integer[] { server.getId() }, Server.OperationMode.DOWN);
+ cloudManager.deleteServer(LookupUtil.getSubjectManager().getOverlord(), server.getId());
}
for (Agent agent : agents) {
diff --git a/modules/enterprise/server/itests-2/src/test/java/org/rhq/enterprise/server/core/CoreServerServiceImplTest.java b/modules/enterprise/server/itests-2/src/test/java/org/rhq/enterprise/server/core/CoreServerServiceImplTest.java
index 0e25ee4..3857afc 100644
--- a/modules/enterprise/server/itests-2/src/test/java/org/rhq/enterprise/server/core/CoreServerServiceImplTest.java
+++ b/modules/enterprise/server/itests-2/src/test/java/org/rhq/enterprise/server/core/CoreServerServiceImplTest.java
@@ -178,8 +178,9 @@ public class CoreServerServiceImplTest extends AbstractEJB3Test {
protected void afterMethod() throws Exception {
// cleanup our test server
- LookupUtil.getCloudManager().updateServerMode(new Integer[] { server.getId() }, OperationMode.DOWN);
- LookupUtil.getCloudManager().deleteServer(server.getId());
+ LookupUtil.getCloudManager().updateServerMode(LookupUtil.getSubjectManager().getOverlord(),
+ new Integer[] { server.getId() }, OperationMode.DOWN);
+ LookupUtil.getCloudManager().deleteServer(LookupUtil.getSubjectManager().getOverlord(), server.getId());
// shutdown our mock mbean server
unprepareCustomServerService(CoreServerMBean.OBJECT_NAME);
diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/AffinityGroupManagerLocal.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/AffinityGroupManagerLocal.java
index 455e375..37029b4 100644
--- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/AffinityGroupManagerLocal.java
+++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/AffinityGroupManagerLocal.java
@@ -87,9 +87,5 @@ public interface AffinityGroupManagerLocal {
*/
PageList<Agent> getAgentNonMembers(Subject subject, int affinityGroupId, PageControl pageControl);
- /**
- * @deprecated portal war was using it (use finders <code>AgentManagerBean.findAgentsByCriteria()</code> and
- * <code>CloudManagerBean.findServersByCriteria()</code> instead)
- */
PageList<AffinityGroupCountComposite> getComposites(Subject subject, PageControl pageControl);
}
diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/CloudManagerBean.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/CloudManagerBean.java
index d1ffb1b..2c775d4 100644
--- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/CloudManagerBean.java
+++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/CloudManagerBean.java
@@ -163,19 +163,19 @@ public class CloudManagerBean implements CloudManagerLocal {
@RequiredPermissions({ @RequiredPermission(Permission.MANAGE_SETTINGS),
@RequiredPermission(Permission.MANAGE_INVENTORY) })
- public void deleteServers(Integer[] serverIds) throws CloudManagerException {
+ public void deleteServers(Subject subject, Integer[] serverIds) throws CloudManagerException {
if (serverIds == null) {
return;
}
for (Integer nextServerId : serverIds) {
- cloudManager.deleteServer(nextServerId);
+ cloudManager.deleteServer(subject, nextServerId);
}
}
@RequiredPermissions({ @RequiredPermission(Permission.MANAGE_SETTINGS),
@RequiredPermission(Permission.MANAGE_INVENTORY) })
- public void deleteServer(Integer serverId) throws CloudManagerException {
+ public void deleteServer(Subject subject, Integer serverId) throws CloudManagerException {
try {
Server server = entityManager.find(Server.class, serverId);
@@ -214,7 +214,7 @@ public class CloudManagerBean implements CloudManagerLocal {
@RequiredPermissions({ @RequiredPermission(Permission.MANAGE_SETTINGS),
@RequiredPermission(Permission.MANAGE_INVENTORY) })
- public void updateServerMode(Integer[] serverIds, Server.OperationMode mode) {
+ public void updateServerMode(Subject subject, Integer[] serverIds, Server.OperationMode mode) {
if (serverIds == null) {
return;
}
@@ -249,14 +249,15 @@ public class CloudManagerBean implements CloudManagerLocal {
}
}
- @RequiredPermission(Permission.MANAGE_INVENTORY)
+ @RequiredPermissions({ @RequiredPermission(Permission.MANAGE_SETTINGS),
+ @RequiredPermission(Permission.MANAGE_INVENTORY) })
public Server updateServer(Subject subject, Server server) {
return entityManager.merge(server);
}
@RequiredPermissions({ @RequiredPermission(Permission.MANAGE_SETTINGS),
@RequiredPermission(Permission.MANAGE_INVENTORY) })
- public PageList<FailoverListDetails> getFailoverListDetailsByAgentId(int agentId, PageControl pc) {
+ public PageList<FailoverListDetails> getFailoverListDetailsByAgentId(Subject subject, int agentId, PageControl pc) {
pc.initDefaultOrderingField("fld.ordinal");
Query query = PersistenceUtility.createQueryWithOrderBy(entityManager,
diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/CloudManagerLocal.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/CloudManagerLocal.java
index 595ca8f..8ba595a 100644
--- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/CloudManagerLocal.java
+++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/CloudManagerLocal.java
@@ -37,9 +37,9 @@ import org.rhq.core.domain.util.PageList;
@Local
public interface CloudManagerLocal {
- void deleteServers(Integer[] serverIds) throws CloudManagerException;
+ void deleteServers(Subject subject, Integer[] serverIds) throws CloudManagerException;
- void deleteServer(Integer serverId) throws CloudManagerException;
+ void deleteServer(Subject subject, Integer serverId) throws CloudManagerException;
List<Agent> getAgentsByServerName(String serverName);
@@ -83,11 +83,11 @@ public interface CloudManagerLocal {
*/
int getNormalServerCount();
- void updateServerMode(Integer[] serverIds, Server.OperationMode mode);
+ void updateServerMode(Subject subject, Integer[] serverIds, Server.OperationMode mode);
Server updateServer(Subject subject, Server server);
- PageList<FailoverListDetails> getFailoverListDetailsByAgentId(int agentId, PageControl pc);
+ PageList<FailoverListDetails> getFailoverListDetailsByAgentId(Subject subject, int agentId, PageControl pc);
void markStaleServersDown(Subject subject);
diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/core/ShutdownListener.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/core/ShutdownListener.java
index 3490df6..0749543 100644
--- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/core/ShutdownListener.java
+++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/core/ShutdownListener.java
@@ -169,7 +169,7 @@ public class ShutdownListener {
// Set the server operation mode to DOWN unless in MM
Server server = serverManager.getServer();
if (Server.OperationMode.MAINTENANCE != server.getOperationMode()) {
- cloudManager.updateServerMode(new Integer[] { server.getId() }, OperationMode.DOWN);
+ cloudManager.updateServerMode(LookupUtil.getSubjectManager().getOverlord(), new Integer[] { server.getId() }, OperationMode.DOWN);
}
} catch (Throwable t) {
// only show ugly stack traces if the user runs the server in debug mode
diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/core/StartupBean.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/core/StartupBean.java
index f7e0606..3240c1e 100644
--- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/core/StartupBean.java
+++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/core/StartupBean.java
@@ -258,7 +258,8 @@ public class StartupBean {
log.info("Server is configured to start up in MAINTENANCE mode.");
Server server = serverManager.getServer();
Integer[] serverId = new Integer[] { server.getId() };
- cloudManager.updateServerMode(serverId, OperationMode.MAINTENANCE);
+ cloudManager.updateServerMode(LookupUtil.getSubjectManager().getOverlord(), serverId,
+ OperationMode.MAINTENANCE);
}
// Establish the current server mode for the server. This will move the server to NORMAL
commit 5a78346ff88d4b2694a68b6c519c01d52da12df6
Author: Jirka Kremser <jkremser(a)redhat.com>
Date: Wed Dec 19 22:46:03 2012 +0100
Old JSF views are not accessible from UI anymore, instead the new GWT views are on their place (without the "GWT" suffix)
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/AdministrationView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/AdministrationView.java
index 6afe5e4..652299d 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/AdministrationView.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/AdministrationView.java
@@ -144,69 +144,40 @@ public class AdministrationView extends AbstractSectionedLeftNavigationView {
ProductInfo productInfo = CoreGUI.get().getProductInfo();
boolean isRHQ = (productInfo != null) && "RHQ".equals(productInfo.getShortName());
- NavigationItem serversItem = new NavigationItem(PAGE_SERVERS_VIEW_ID, new ViewFactory() {
- public Canvas createView() {
- return new FullHTMLPane(extendLocatorId(PAGE_SERVERS_VIEW_ID.getName()),
- "/rhq/ha/listServers-plain.xhtml?nomenu=true");
- }
- }, getGlobalPermissions().contains(Permission.MANAGE_INVENTORY));
-
- NavigationItem agentsItem = new NavigationItem(PAGE_AGENTS_VIEW_ID, new ViewFactory() {
- public Canvas createView() {
- return new FullHTMLPane(extendLocatorId(PAGE_AGENTS_VIEW_ID.getName()),
- "/rhq/ha/listAgents-plain.xhtml?nomenu=true");
- }
- }, getGlobalPermissions().contains(Permission.MANAGE_INVENTORY));
-
- NavigationItem affinityGroupsItem = new NavigationItem(PAGE_AFFINITY_GROUPS_VIEW_ID, new ViewFactory() {
- public Canvas createView() {
- return new FullHTMLPane(extendLocatorId(PAGE_AFFINITY_GROUPS_VIEW_ID.getName()),
- "/rhq/ha/listAffinityGroups-plain.xhtml?nomenu=true");
- }
- }, getGlobalPermissions().contains(Permission.MANAGE_INVENTORY));
-
- NavigationItem partitionEventsItem = new NavigationItem(PAGE_PARTITION_EVENTS_VIEW_ID, new ViewFactory() {
- public Canvas createView() {
- return new FullHTMLPane(extendLocatorId(PAGE_PARTITION_EVENTS_VIEW_ID.getName()),
- "/rhq/ha/listPartitionEvents-plain.xhtml?nomenu=true");
- }
- }, getGlobalPermissions().contains(Permission.MANAGE_INVENTORY));
-
NavigationItem remoteAgentInstallItem = new NavigationItem(RemoteAgentInstallView.VIEW_ID, new ViewFactory() {
public Canvas createView() {
return new RemoteAgentInstallView(extendLocatorId("RemoteAgentInstall"));
}
- }, getGlobalPermissions().contains(Permission.MANAGE_INVENTORY));
+ }, getGlobalPermissions().contains(Permission.MANAGE_SETTINGS));
- NavigationItem serversItemGwt = new NavigationItem(ServerTableView.VIEW_ID, new ViewFactory() {
+ NavigationItem serversItem = new NavigationItem(ServerTableView.VIEW_ID, new ViewFactory() {
public Canvas createView() {
return new ServerTableView(extendLocatorId(ServerTableView.VIEW_ID.getName()), null, false);
}
- }, getGlobalPermissions().contains(Permission.MANAGE_INVENTORY));
+ }, getGlobalPermissions().contains(Permission.MANAGE_SETTINGS));
- NavigationItem agentsItemGwt = new NavigationItem(AgentTableView.VIEW_ID, new ViewFactory() {
+ NavigationItem agentsItem = new NavigationItem(AgentTableView.VIEW_ID, new ViewFactory() {
public Canvas createView() {
return new AgentTableView(extendLocatorId(AgentTableView.VIEW_ID.getName()), null, false);
}
- }, getGlobalPermissions().contains(Permission.MANAGE_INVENTORY));
+ }, getGlobalPermissions().contains(Permission.MANAGE_SETTINGS));
- NavigationItem affinityGroupsItemGwt = new NavigationItem(AffinityGroupTableView.VIEW_ID, new ViewFactory() {
+ NavigationItem affinityGroupsItem = new NavigationItem(AffinityGroupTableView.VIEW_ID, new ViewFactory() {
public Canvas createView() {
return new AffinityGroupTableView(extendLocatorId(AffinityGroupTableView.VIEW_ID.getName()));
}
- }, getGlobalPermissions().contains(Permission.MANAGE_INVENTORY));
+ }, getGlobalPermissions().contains(Permission.MANAGE_SETTINGS));
- NavigationItem partitionEventsGwt = new NavigationItem(PartitionEventTableView.VIEW_ID, new ViewFactory() {
+ NavigationItem partitionEventsItem = new NavigationItem(PartitionEventTableView.VIEW_ID, new ViewFactory() {
public Canvas createView() {
return new PartitionEventTableView(extendLocatorId(PartitionEventTableView.VIEW_ID.getName()),
PartitionEventTableView.VIEW_ID.getTitle());
}
- }, getGlobalPermissions().contains(Permission.MANAGE_INVENTORY));
+ }, getGlobalPermissions().contains(Permission.MANAGE_SETTINGS));
// Arrays.asList returns a list with a fixed size, therefore there is the wrapping ArrayList
List<NavigationItem> navigationItems = new ArrayList<NavigationItem>(Arrays.asList(serversItem, agentsItem,
- affinityGroupsItem, partitionEventsItem, serversItemGwt, agentsItemGwt, affinityGroupsItemGwt,
- partitionEventsGwt));
+ affinityGroupsItem, partitionEventsItem));
if (isRHQ) {
navigationItems.add(remoteAgentInstallItem);
}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AbstractServerNodeDatasource.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AbstractServerNodeDatasource.java
index 528ab8e..ac4c736 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AbstractServerNodeDatasource.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AbstractServerNodeDatasource.java
@@ -22,10 +22,14 @@ import java.util.List;
import com.smartgwt.client.widgets.grid.ListGridField;
+import org.rhq.core.domain.cloud.FailoverListDetails;
+import org.rhq.core.domain.cloud.composite.ServerWithAgentCountComposite;
import org.rhq.core.domain.criteria.BaseCriteria;
import org.rhq.enterprise.gui.coregui.client.util.RPCDataSource;
/**
+ * Base class for all Server derivatives like {@link ServerWithAgentCountComposite} and {@link FailoverListDetails}
+ *
* @author Jirka Kremser
*/
public abstract class AbstractServerNodeDatasource<T, C extends BaseCriteria> extends RPCDataSource<T, C> {
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupAgentsSelector.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupAgentsSelector.java
index 6786a89..65efb7c 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupAgentsSelector.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupAgentsSelector.java
@@ -60,9 +60,7 @@ import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableIButton;
public class AffinityGroupAgentsSelector extends AbstractSelector<Agent, AgentCriteria> {
private final Integer affinityGroupId;
-
private static RPCDataSource<Agent, AgentCriteria> datasource = null;
-
private static final int MAX_AVAIL_AGENTS = 3000;
private static Window modalWindow;
private static boolean shouldBeClosed;
@@ -104,7 +102,6 @@ public class AffinityGroupAgentsSelector extends AbstractSelector<Agent, AgentCr
selector.reset();
}
- @Override
public void onFailure(Throwable t) {
CoreGUI.getErrorHandler().handleError(
MSG.view_adminTopology_message_fetchAgentsFail(String.valueOf(affinityGroupId)), t);
@@ -187,7 +184,6 @@ public class AffinityGroupAgentsSelector extends AbstractSelector<Agent, AgentCr
shouldBeClosed = false;
GWTServiceLookup.getCloudService().removeAgentsFromGroup(
originallySelected.toArray(new Integer[originallySelected.size()]), new AsyncCallback<Void>() {
-
public void onSuccess(Void result) {
closeAndRefresh(parrent, true);
}
@@ -203,7 +199,6 @@ public class AffinityGroupAgentsSelector extends AbstractSelector<Agent, AgentCr
shouldBeClosed = false;
GWTServiceLookup.getCloudService().addAgentsToGroup(selector.getAffinityGroupId(),
actuallySelected.toArray(new Integer[actuallySelected.size()]), new AsyncCallback<Void>() {
-
public void onSuccess(Void result) {
closeAndRefresh(parrent, true);
}
@@ -258,5 +253,4 @@ public class AffinityGroupAgentsSelector extends AbstractSelector<Agent, AgentCr
public Integer getAffinityGroupId() {
return affinityGroupId;
}
-
}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupDetailView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupDetailView.java
index fbd832e..8a8d81b 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupDetailView.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupDetailView.java
@@ -199,7 +199,7 @@ public class AffinityGroupDetailView extends LocatableVLayout implements Bookmar
footer.addMember(saveButton);
form.setItems(nameItem);
SectionStackSection section = new SectionStackSection(MSG.common_title_details());
- section.setExpanded(true);
+ section.setExpanded(false);
section.setItems(form, footer);
detailsSection = section;
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupServersSelector.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupServersSelector.java
index b21b2a6..fe4db20 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupServersSelector.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupServersSelector.java
@@ -63,9 +63,7 @@ import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableIButton;
public class AffinityGroupServersSelector extends AbstractSelector<Server, ServerCriteria> {
private final Integer affinityGroupId;
-
private static RPCDataSource<Server, ServerCriteria> datasource = null;
-
private static Window modalWindow;
private static boolean shouldBeClosed;
private static VLayout layout;
@@ -93,7 +91,6 @@ public class AffinityGroupServersSelector extends AbstractSelector<Server, Serve
MSG.view_adminTopology_serverDetail_operationMode());
operationModeSelect.setValueMap(buildOperationModeOptions());
operationModeSelect.setValue("ALL");
-
availableFilterForm.setItems(search, operationModeSelect);
}
return availableFilterForm;
@@ -122,7 +119,6 @@ public class AffinityGroupServersSelector extends AbstractSelector<Server, Serve
selector.reset();
}
- @Override
public void onFailure(Throwable t) {
CoreGUI.getErrorHandler().handleError(
MSG.view_adminTopology_message_fetchServersFail(String.valueOf(affinityGroupId)), t);
@@ -279,5 +275,4 @@ public class AffinityGroupServersSelector extends AbstractSelector<Server, Serve
public Integer getAffinityGroupId() {
return affinityGroupId;
}
-
}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupTableView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupTableView.java
index dbe8d0f..87afd6d 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupTableView.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupTableView.java
@@ -65,8 +65,8 @@ import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableIButton;
*/
public class AffinityGroupTableView extends TableSection<AffinityGroupWithCountsDatasource> implements HasViewName {
- public static final ViewName VIEW_ID = new ViewName("AffinityGroups(GWT)", MSG.view_adminTopology_affinityGroups()
- + "(GWT)", IconEnum.ALL_GROUPS);
+ public static final ViewName VIEW_ID = new ViewName("AffinityGroups", MSG.view_adminTopology_affinityGroups(),
+ IconEnum.ALL_GROUPS);
public static final String VIEW_PATH = AdministrationView.VIEW_ID + "/"
+ AdministrationView.SECTION_TOPOLOGY_VIEW_ID + "/" + VIEW_ID;
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentTableView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentTableView.java
index 8c47813..8f2a658 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentTableView.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentTableView.java
@@ -48,14 +48,12 @@ import org.rhq.enterprise.gui.coregui.client.util.selenium.SeleniumUtility;
*/
public class AgentTableView extends TableSection<AgentDatasource> implements HasViewName {
- public static final ViewName VIEW_ID = new ViewName("Agents(GWT)", MSG.view_adminTopology_agents() + "(GWT)",
- IconEnum.AGENT);
+ public static final ViewName VIEW_ID = new ViewName("Agents", MSG.view_adminTopology_agents(), IconEnum.AGENT);
public static final String VIEW_PATH = AdministrationView.VIEW_ID + "/"
+ AdministrationView.SECTION_TOPOLOGY_VIEW_ID + "/" + VIEW_ID;
private final boolean isAffinityGroupId;
-
private final Integer id;
public AgentTableView(String locatorId, Integer id, boolean isAffinityGroupId) {
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventTableView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventTableView.java
index 7fa9a7c..599b2c2 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventTableView.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventTableView.java
@@ -58,8 +58,8 @@ import org.rhq.enterprise.gui.coregui.client.util.selenium.SeleniumUtility;
*/
public class PartitionEventTableView extends TableSection<PartitionEventDatasource> implements HasViewName {
- public static final ViewName VIEW_ID = new ViewName("PartitionEvents(GWT)",
- MSG.view_adminTopology_partitionEvents() + "(GWT)", IconEnum.EVENTS);
+ public static final ViewName VIEW_ID = new ViewName("PartitionEvents", MSG.view_adminTopology_partitionEvents(),
+ IconEnum.EVENTS);
public static final String VIEW_PATH = AdministrationView.VIEW_ID + "/"
+ AdministrationView.SECTION_TOPOLOGY_VIEW_ID + "/" + VIEW_ID;
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerTableView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerTableView.java
index d38d95d..2374685 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerTableView.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerTableView.java
@@ -18,8 +18,8 @@
*/
package org.rhq.enterprise.gui.coregui.client.admin.topology;
-import static org.rhq.enterprise.gui.coregui.client.admin.topology.AgentDatasourceField.FIELD_AFFINITY_GROUP;
-import static org.rhq.enterprise.gui.coregui.client.admin.topology.AgentDatasourceField.FIELD_AFFINITY_GROUP_ID;
+import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerDatasourceField.FIELD_AFFINITY_GROUP;
+import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerDatasourceField.FIELD_AFFINITY_GROUP_ID;
import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerDatasourceField.FIELD_ORDINAL;
import java.io.Serializable;
@@ -59,16 +59,13 @@ import org.rhq.enterprise.gui.coregui.client.util.selenium.SeleniumUtility;
public class ServerTableView extends
TableSection<AbstractServerNodeDatasource<? extends Serializable, ? extends BaseCriteria>> implements HasViewName {
- public static final ViewName VIEW_ID = new ViewName("Servers(GWT)", MSG.view_adminTopology_servers() + "(GWT)",
- IconEnum.SERVERS);
+ public static final ViewName VIEW_ID = new ViewName("Servers", MSG.view_adminTopology_servers(), IconEnum.SERVERS);
public static final String VIEW_PATH = AdministrationView.VIEW_ID + "/"
+ AdministrationView.SECTION_TOPOLOGY_VIEW_ID + "/" + VIEW_ID;
private final boolean showActions;
-
private final boolean isAffinityGroupId;
-
private final Integer id;
public ServerTableView(String locatorId, Integer id, boolean isAffinityGroupId) {
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerWithAgentCountDatasource.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerWithAgentCountDatasource.java
index 1b6609b..3659082 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerWithAgentCountDatasource.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerWithAgentCountDatasource.java
@@ -44,6 +44,7 @@ import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup;
public class ServerWithAgentCountDatasource extends
AbstractServerNodeDatasource<ServerWithAgentCountComposite, Criteria> {
+ // server datasource delegate
private final ServerDatasource serverDatasource;
public ServerWithAgentCountDatasource() {
commit dfa080a3388830a3c948b64090af7f586b97bbe8
Author: Jirka Kremser <jkremser(a)redhat.com>
Date: Wed Dec 19 21:56:55 2012 +0100
Deprecation of newly unused methods (were used from portal war before), checking the rights
diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/AffinityGroupManagerBean.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/AffinityGroupManagerBean.java
index 2ebbdab..fb37d77 100644
--- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/AffinityGroupManagerBean.java
+++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/AffinityGroupManagerBean.java
@@ -43,6 +43,7 @@ import org.rhq.core.domain.util.PageControl;
import org.rhq.core.domain.util.PageList;
import org.rhq.enterprise.server.RHQConstants;
import org.rhq.enterprise.server.authz.RequiredPermission;
+import org.rhq.enterprise.server.authz.RequiredPermissions;
/**
* Manages CRUD operations for {@link AffinityGroup}s
@@ -60,7 +61,8 @@ public class AffinityGroupManagerBean implements AffinityGroupManagerLocal {
@EJB
private PartitionEventManagerLocal partitionEventManager;
- @RequiredPermission(Permission.MANAGE_INVENTORY)
+ @RequiredPermissions({ @RequiredPermission(Permission.MANAGE_SETTINGS),
+ @RequiredPermission(Permission.MANAGE_INVENTORY) })
public AffinityGroup getById(Subject subject, int affinityGroupId) {
AffinityGroup affinityGroup = entityManager.find(AffinityGroup.class, affinityGroupId);
return affinityGroup;
@@ -132,14 +134,16 @@ public class AffinityGroupManagerBean implements AffinityGroupManagerLocal {
return new PageList<Server>(results, (int) count, pageControl);
}
- @RequiredPermission(Permission.MANAGE_INVENTORY)
+ @RequiredPermissions({ @RequiredPermission(Permission.MANAGE_SETTINGS),
+ @RequiredPermission(Permission.MANAGE_INVENTORY) })
public AffinityGroup update(Subject subject, AffinityGroup affinityGroup) throws AffinityGroupException {
validate(affinityGroup, true);
return entityManager.merge(affinityGroup);
}
@SuppressWarnings("unchecked")
- @RequiredPermission(Permission.MANAGE_INVENTORY)
+ @RequiredPermissions({ @RequiredPermission(Permission.MANAGE_SETTINGS),
+ @RequiredPermission(Permission.MANAGE_INVENTORY) })
public PageList<AffinityGroupCountComposite> getComposites(Subject subject, PageControl pageControl) {
pageControl.initDefaultOrderingField("ag.name");
@@ -164,7 +168,8 @@ public class AffinityGroupManagerBean implements AffinityGroupManagerLocal {
}
}
- @RequiredPermission(Permission.MANAGE_INVENTORY)
+ @RequiredPermissions({ @RequiredPermission(Permission.MANAGE_SETTINGS),
+ @RequiredPermission(Permission.MANAGE_INVENTORY) })
public int create(Subject subject, AffinityGroup affinityGroup) throws AffinityGroupException {
validate(affinityGroup, false);
entityManager.persist(affinityGroup);
@@ -198,7 +203,8 @@ public class AffinityGroupManagerBean implements AffinityGroupManagerLocal {
}
}
- @RequiredPermission(Permission.MANAGE_INVENTORY)
+ @RequiredPermissions({ @RequiredPermission(Permission.MANAGE_SETTINGS),
+ @RequiredPermission(Permission.MANAGE_INVENTORY) })
public int delete(Subject subject, Integer[] affinityGroupIds) {
// A deleted affinity group forces a cloud repartitioning. Note, it is ok to request multiple
@@ -229,7 +235,8 @@ public class AffinityGroupManagerBean implements AffinityGroupManagerLocal {
return removedAffinityGroups;
}
- @RequiredPermission(Permission.MANAGE_INVENTORY)
+ @RequiredPermissions({ @RequiredPermission(Permission.MANAGE_SETTINGS),
+ @RequiredPermission(Permission.MANAGE_INVENTORY) })
public void addAgentsToGroup(Subject subject, int affinityGroupId, Integer[] agentIds) {
List<Integer> agentIdsList = Arrays.asList(agentIds);
@@ -254,7 +261,8 @@ public class AffinityGroupManagerBean implements AffinityGroupManagerLocal {
.getName());
}
- @RequiredPermission(Permission.MANAGE_INVENTORY)
+ @RequiredPermissions({ @RequiredPermission(Permission.MANAGE_SETTINGS),
+ @RequiredPermission(Permission.MANAGE_INVENTORY) })
public void removeAgentsFromGroup(Subject subject, Integer[] agentIds) {
List<Integer> agentIdsList = Arrays.asList(agentIds);
@@ -275,7 +283,8 @@ public class AffinityGroupManagerBean implements AffinityGroupManagerLocal {
PartitionEventType.AGENT_AFFINITY_GROUP_REMOVE.name());
}
- @RequiredPermission(Permission.MANAGE_INVENTORY)
+ @RequiredPermissions({ @RequiredPermission(Permission.MANAGE_SETTINGS),
+ @RequiredPermission(Permission.MANAGE_INVENTORY) })
public void addServersToGroup(Subject subject, int affinityGroupId, Integer[] serverIds) {
List<Integer> serverIdsList = Arrays.asList(serverIds);
@@ -300,7 +309,8 @@ public class AffinityGroupManagerBean implements AffinityGroupManagerLocal {
.getName());
}
- @RequiredPermission(Permission.MANAGE_INVENTORY)
+ @RequiredPermissions({ @RequiredPermission(Permission.MANAGE_SETTINGS),
+ @RequiredPermission(Permission.MANAGE_INVENTORY) })
public void removeServersFromGroup(Subject subject, Integer[] serverIds) {
List<Integer> serverIdsList = Arrays.asList(serverIds);
diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/AffinityGroupManagerLocal.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/AffinityGroupManagerLocal.java
index 115d0a4..455e375 100644
--- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/AffinityGroupManagerLocal.java
+++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/AffinityGroupManagerLocal.java
@@ -63,13 +63,33 @@ public interface AffinityGroupManagerLocal {
int getAffinityGroupCount();
+ /**
+ * @deprecated portal war was using it (use finders <code>AgentManagerBean.findAgentsByCriteria()</code> and
+ * <code>CloudManagerBean.findServersByCriteria()</code> instead)
+ */
PageList<Server> getServerMembers(Subject subject, int affinityGroupId, PageControl pageControl);
+ /**
+ * @deprecated portal war was using it (use finders <code>AgentManagerBean.findAgentsByCriteria()</code> and
+ * <code>CloudManagerBean.findServersByCriteria()</code> instead)
+ */
PageList<Server> getServerNonMembers(Subject subject, int affinityGroupId, PageControl pageControl);
+ /**
+ * @deprecated portal war was using it (use finders <code>AgentManagerBean.findAgentsByCriteria()</code> and
+ * <code>CloudManagerBean.findServersByCriteria()</code> instead)
+ */
PageList<Agent> getAgentMembers(Subject subject, int affinityGroupId, PageControl pageControl);
+ /**
+ * @deprecated portal war was using it (use finders <code>AgentManagerBean.findAgentsByCriteria()</code> and
+ * <code>CloudManagerBean.findServersByCriteria()</code> instead)
+ */
PageList<Agent> getAgentNonMembers(Subject subject, int affinityGroupId, PageControl pageControl);
+ /**
+ * @deprecated portal war was using it (use finders <code>AgentManagerBean.findAgentsByCriteria()</code> and
+ * <code>CloudManagerBean.findServersByCriteria()</code> instead)
+ */
PageList<AffinityGroupCountComposite> getComposites(Subject subject, PageControl pageControl);
}
diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/CloudManagerBean.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/CloudManagerBean.java
index f51b246..d1ffb1b 100644
--- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/CloudManagerBean.java
+++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/CloudManagerBean.java
@@ -44,6 +44,7 @@ import org.rhq.core.domain.util.PageList;
import org.rhq.enterprise.server.RHQConstants;
import org.rhq.enterprise.server.authz.AuthorizationManagerLocal;
import org.rhq.enterprise.server.authz.RequiredPermission;
+import org.rhq.enterprise.server.authz.RequiredPermissions;
import org.rhq.enterprise.server.cloud.instance.ServerManagerLocal;
import org.rhq.enterprise.server.util.CriteriaQueryGenerator;
import org.rhq.enterprise.server.util.CriteriaQueryRunner;
@@ -123,7 +124,8 @@ public class CloudManagerBean implements CloudManagerLocal {
}
@SuppressWarnings("unchecked")
- @RequiredPermission(Permission.MANAGE_INVENTORY)
+ @RequiredPermissions({ @RequiredPermission(Permission.MANAGE_SETTINGS),
+ @RequiredPermission(Permission.MANAGE_INVENTORY) })
public PageList<ServerWithAgentCountComposite> getServerComposites(Subject subject, PageControl pc) {
pc.initDefaultOrderingField("s.name");
@@ -159,6 +161,8 @@ public class CloudManagerBean implements CloudManagerLocal {
}
}
+ @RequiredPermissions({ @RequiredPermission(Permission.MANAGE_SETTINGS),
+ @RequiredPermission(Permission.MANAGE_INVENTORY) })
public void deleteServers(Integer[] serverIds) throws CloudManagerException {
if (serverIds == null) {
return;
@@ -169,6 +173,8 @@ public class CloudManagerBean implements CloudManagerLocal {
}
}
+ @RequiredPermissions({ @RequiredPermission(Permission.MANAGE_SETTINGS),
+ @RequiredPermission(Permission.MANAGE_INVENTORY) })
public void deleteServer(Integer serverId) throws CloudManagerException {
try {
Server server = entityManager.find(Server.class, serverId);
@@ -206,6 +212,8 @@ public class CloudManagerBean implements CloudManagerLocal {
}
}
+ @RequiredPermissions({ @RequiredPermission(Permission.MANAGE_SETTINGS),
+ @RequiredPermission(Permission.MANAGE_INVENTORY) })
public void updateServerMode(Integer[] serverIds, Server.OperationMode mode) {
if (serverIds == null) {
return;
@@ -246,6 +254,8 @@ public class CloudManagerBean implements CloudManagerLocal {
return entityManager.merge(server);
}
+ @RequiredPermissions({ @RequiredPermission(Permission.MANAGE_SETTINGS),
+ @RequiredPermission(Permission.MANAGE_INVENTORY) })
public PageList<FailoverListDetails> getFailoverListDetailsByAgentId(int agentId, PageControl pc) {
pc.initDefaultOrderingField("fld.ordinal");
@@ -295,7 +305,7 @@ public class CloudManagerBean implements CloudManagerLocal {
// regardless of the number of pending requests, as the work would be duplicated.
partitionEventManager.processRequestedPartitionEvents();
}
-
+
@RequiredPermission(Permission.MANAGE_SETTINGS)
public PageList<Server> findServersByCriteria(Subject subject, ServerCriteria criteria) {
CriteriaQueryGenerator generator = new CriteriaQueryGenerator(subject, criteria);
diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/PartitionEventManagerBean.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/PartitionEventManagerBean.java
index 0b82063..961af25 100644
--- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/PartitionEventManagerBean.java
+++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/PartitionEventManagerBean.java
@@ -48,6 +48,7 @@ import org.rhq.core.domain.util.PageList;
import org.rhq.core.domain.util.PageOrdering;
import org.rhq.enterprise.server.RHQConstants;
import org.rhq.enterprise.server.authz.RequiredPermission;
+import org.rhq.enterprise.server.authz.RequiredPermissions;
import org.rhq.enterprise.server.core.AgentManagerLocal;
import org.rhq.enterprise.server.util.CriteriaQueryGenerator;
import org.rhq.enterprise.server.util.CriteriaQueryRunner;
@@ -125,7 +126,8 @@ public class PartitionEventManagerBean implements PartitionEventManagerLocal {
return failoverListManager.refresh(partitionEvent);
}
- @RequiredPermission(Permission.MANAGE_INVENTORY)
+ @RequiredPermissions({ @RequiredPermission(Permission.MANAGE_SETTINGS),
+ @RequiredPermission(Permission.MANAGE_INVENTORY) })
public void cloudPartitionEventRequest(Subject subject, PartitionEventType eventType, String eventDetail) {
if (!eventType.isCloudPartitionEvent()) {
throw new IllegalArgumentException("Invalid cloud partition event type: " + eventType);
@@ -143,7 +145,8 @@ public class PartitionEventManagerBean implements PartitionEventManagerLocal {
entityManager.persist(partitionEvent);
}
- @RequiredPermission(Permission.MANAGE_INVENTORY)
+ @RequiredPermissions({ @RequiredPermission(Permission.MANAGE_SETTINGS),
+ @RequiredPermission(Permission.MANAGE_INVENTORY) })
public void deletePartitionEvents(Subject subject, Integer[] partitionEventIds) {
for (int partitionEventId : partitionEventIds) {
PartitionEvent doomedEvent = entityManager.find(PartitionEvent.class, partitionEventId);
@@ -151,7 +154,8 @@ public class PartitionEventManagerBean implements PartitionEventManagerLocal {
}
}
- @RequiredPermission(Permission.MANAGE_INVENTORY)
+ @RequiredPermissions({ @RequiredPermission(Permission.MANAGE_SETTINGS),
+ @RequiredPermission(Permission.MANAGE_INVENTORY) })
public int purgeAllEvents(Subject subject) {
List<PartitionEvent> events = getPartitionEvents(subject, null, null, null, PageControl.getUnlimitedInstance());
@@ -221,7 +225,7 @@ public class PartitionEventManagerBean implements PartitionEventManagerLocal {
query.setParameter("details", details);
countQuery.setParameter("details", details);
query.setParameter("escapeChar", QueryUtility.getEscapeCharacter());
- countQuery.setParameter("escapeChar", QueryUtility.getEscapeCharacter());
+ countQuery.setParameter("escapeChar", QueryUtility.getEscapeCharacter());
List<PartitionEvent> results = query.getResultList();
long count = (Long) countQuery.getSingleResult();
@@ -230,7 +234,8 @@ public class PartitionEventManagerBean implements PartitionEventManagerLocal {
}
@SuppressWarnings("unchecked")
- @RequiredPermission(Permission.MANAGE_INVENTORY)
+ @RequiredPermissions({ @RequiredPermission(Permission.MANAGE_SETTINGS),
+ @RequiredPermission(Permission.MANAGE_INVENTORY) })
public PageList<PartitionEventDetails> getPartitionEventDetails(Subject subject, int partitionEventId,
PageControl pageControl) {
pageControl.initDefaultOrderingField("ped.id", PageOrdering.ASC);
@@ -248,11 +253,12 @@ public class PartitionEventManagerBean implements PartitionEventManagerLocal {
return new PageList<PartitionEventDetails>(detailsList, (int) count, pageControl);
}
-
- @RequiredPermission(Permission.MANAGE_INVENTORY)
+
+ @RequiredPermission(Permission.MANAGE_SETTINGS)
public PageList<PartitionEvent> findPartitionEventsByCriteria(Subject subject, PartitionEventCriteria criteria) {
CriteriaQueryGenerator generator = new CriteriaQueryGenerator(subject, criteria);
- CriteriaQueryRunner<PartitionEvent> runner = new CriteriaQueryRunner<PartitionEvent>(criteria, generator, entityManager);
+ CriteriaQueryRunner<PartitionEvent> runner = new CriteriaQueryRunner<PartitionEvent>(criteria, generator,
+ entityManager);
return runner.execute();
}
}
commit 2d4217f767b2e2d7860edf153ea4bb714e0cfc6f
Author: Jirka Kremser <jkremser(a)redhat.com>
Date: Wed Dec 19 21:55:50 2012 +0100
Modal window for assigning the servers/agents into affinity group has now the buttons in the ToolStrip
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupAgentsSelector.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupAgentsSelector.java
index b1a1a6c..6786a89 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupAgentsSelector.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupAgentsSelector.java
@@ -29,7 +29,6 @@ import java.util.List;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.smartgwt.client.data.Criteria;
-import com.smartgwt.client.types.Alignment;
import com.smartgwt.client.types.Overflow;
import com.smartgwt.client.widgets.IButton;
import com.smartgwt.client.widgets.Window;
@@ -40,8 +39,8 @@ import com.smartgwt.client.widgets.events.CloseClickHandler;
import com.smartgwt.client.widgets.form.DynamicForm;
import com.smartgwt.client.widgets.form.fields.TextItem;
import com.smartgwt.client.widgets.grid.ListGridRecord;
-import com.smartgwt.client.widgets.layout.HLayout;
import com.smartgwt.client.widgets.layout.VLayout;
+import com.smartgwt.client.widgets.toolbar.ToolStrip;
import org.rhq.core.domain.criteria.AgentCriteria;
import org.rhq.core.domain.resource.Agent;
@@ -165,10 +164,9 @@ public class AffinityGroupAgentsSelector extends AbstractSelector<Agent, AgentCr
layout = new VLayout();
layout.setWidth100();
layout.setHeight100();
- layout.setPadding(10);
- layout.setLayoutMargin(10);
final AffinityGroupAgentsSelector selector = new AffinityGroupAgentsSelector("assignAgents", affinityGroupId);
+ selector.setMargin(10);
layout.addMember(selector);
IButton cancel = new LocatableIButton(selector.extendLocatorId("Cancel"), MSG.common_button_cancel());
@@ -222,14 +220,13 @@ public class AffinityGroupAgentsSelector extends AbstractSelector<Agent, AgentCr
}
}
});
-
- HLayout buttons = new HLayout(10);
- buttons.setHeight(20);
- buttons.setLayoutAlign(Alignment.CENTER);
- buttons.setLayoutBottomMargin(0);
- buttons.addMember(save);
- buttons.addMember(cancel);
- layout.addMember(buttons);
+ ToolStrip buttonBar = new ToolStrip();
+ buttonBar.setPadding(5);
+ buttonBar.setWidth100();
+ buttonBar.setMembersMargin(15);
+ buttonBar.addMember(save);
+ buttonBar.addMember(cancel);
+ layout.addMember(buttonBar);
}
private static void closeAndRefresh(TableSection<?> parrent, boolean fullRefresh) {
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupServersSelector.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupServersSelector.java
index 803214c..b21b2a6 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupServersSelector.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupServersSelector.java
@@ -29,7 +29,6 @@ import java.util.List;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.smartgwt.client.data.Criteria;
-import com.smartgwt.client.types.Alignment;
import com.smartgwt.client.types.Overflow;
import com.smartgwt.client.widgets.IButton;
import com.smartgwt.client.widgets.Window;
@@ -41,8 +40,8 @@ import com.smartgwt.client.widgets.form.DynamicForm;
import com.smartgwt.client.widgets.form.fields.SelectItem;
import com.smartgwt.client.widgets.form.fields.TextItem;
import com.smartgwt.client.widgets.grid.ListGridRecord;
-import com.smartgwt.client.widgets.layout.HLayout;
import com.smartgwt.client.widgets.layout.VLayout;
+import com.smartgwt.client.widgets.toolbar.ToolStrip;
import org.rhq.core.domain.cloud.Server;
import org.rhq.core.domain.cloud.Server.OperationMode;
@@ -188,10 +187,9 @@ public class AffinityGroupServersSelector extends AbstractSelector<Server, Serve
layout = new VLayout();
layout.setWidth100();
layout.setHeight100();
- layout.setPadding(10);
- layout.setLayoutMargin(10);
final AffinityGroupServersSelector selector = new AffinityGroupServersSelector("assignServers", affinityGroupId);
+ selector.setMargin(10);
layout.addMember(selector);
IButton cancel = new LocatableIButton(selector.extendLocatorId("Cancel"), MSG.common_button_cancel());
@@ -243,14 +241,13 @@ public class AffinityGroupServersSelector extends AbstractSelector<Server, Serve
}
}
});
-
- HLayout buttons = new HLayout(10);
- buttons.setHeight(20);
- buttons.setLayoutAlign(Alignment.CENTER);
- buttons.setLayoutBottomMargin(0);
- buttons.addMember(save);
- buttons.addMember(cancel);
- layout.addMember(buttons);
+ ToolStrip buttonBar = new ToolStrip();
+ buttonBar.setPadding(5);
+ buttonBar.setWidth100();
+ buttonBar.setMembersMargin(15);
+ buttonBar.addMember(save);
+ buttonBar.addMember(cancel);
+ layout.addMember(buttonBar);
}
private static void closeAndRefresh(TableSection<?> parrent, boolean fullRefresh) {
commit 49c19bafe83b2b2f55f514c51d34eb88fe960304
Author: Jirka Kremser <jkremser(a)redhat.com>
Date: Wed Dec 19 21:10:31 2012 +0100
the rest of l10n for error and other messages, some javadoc
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupAgentsSelector.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupAgentsSelector.java
index 5515e18..b1a1a6c 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupAgentsSelector.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupAgentsSelector.java
@@ -22,7 +22,7 @@
*/
package org.rhq.enterprise.gui.coregui.client.admin.topology;
-import static org.rhq.enterprise.gui.coregui.client.inventory.resource.ResourceDataSourceField.NAME;
+import static org.rhq.enterprise.gui.coregui.client.admin.topology.AgentDatasourceField.FIELD_NAME;
import java.util.ArrayList;
import java.util.List;
@@ -31,7 +31,6 @@ import com.google.gwt.user.client.rpc.AsyncCallback;
import com.smartgwt.client.data.Criteria;
import com.smartgwt.client.types.Alignment;
import com.smartgwt.client.types.Overflow;
-import com.smartgwt.client.util.SC;
import com.smartgwt.client.widgets.IButton;
import com.smartgwt.client.widgets.Window;
import com.smartgwt.client.widgets.events.ClickEvent;
@@ -47,6 +46,7 @@ import com.smartgwt.client.widgets.layout.VLayout;
import org.rhq.core.domain.criteria.AgentCriteria;
import org.rhq.core.domain.resource.Agent;
import org.rhq.core.domain.util.PageList;
+import org.rhq.enterprise.gui.coregui.client.CoreGUI;
import org.rhq.enterprise.gui.coregui.client.IconEnum;
import org.rhq.enterprise.gui.coregui.client.components.selector.AbstractSelector;
import org.rhq.enterprise.gui.coregui.client.components.table.TableSection;
@@ -64,6 +64,7 @@ public class AffinityGroupAgentsSelector extends AbstractSelector<Agent, AgentCr
private static RPCDataSource<Agent, AgentCriteria> datasource = null;
+ private static final int MAX_AVAIL_AGENTS = 3000;
private static Window modalWindow;
private static boolean shouldBeClosed;
private static VLayout layout;
@@ -79,13 +80,13 @@ public class AffinityGroupAgentsSelector extends AbstractSelector<Agent, AgentCr
this.affinityGroupId = affinityGroupId;
prepareMembers(this);
}
-
+
@Override
protected DynamicForm getAvailableFilterForm() {
if (availableFilterForm == null) {
- availableFilterForm = new LocatableDynamicForm(extendLocatorId("AgeSelectAvailFilterForm"));
+ availableFilterForm = new LocatableDynamicForm(extendLocatorId("AgentSelectAvailFilterForm"));
availableFilterForm.setWidth("75%");
- final TextItem search = new TextItem(NAME.propertyName(), MSG.common_title_search());
+ final TextItem search = new TextItem(FIELD_NAME.propertyName(), MSG.common_title_search());
availableFilterForm.setItems(search);
}
return availableFilterForm;
@@ -95,21 +96,21 @@ public class AffinityGroupAgentsSelector extends AbstractSelector<Agent, AgentCr
AgentCriteria criteria = new AgentCriteria();
criteria.addFilterAffinityGroupId(affinityGroupId);
GWTServiceLookup.getCloudService().findAgentsByCriteria(criteria, new AsyncCallback<PageList<Agent>>() {
- public void onSuccess(PageList<Agent> result) {
- ListGridRecord[] records = getDataSource().buildRecords(result);
- originallyAssignedIds = getIdList(records);
- setAssigned(records);
- modalWindow.addItem(layout);
- modalWindow.show();
- selector.reset();
- }
-
- @Override
- public void onFailure(Throwable t) {
- //todo: CoreGUI.getErrorHandler().handleError(MSG.view_admin_plugins_loadFailure(), t);
- }
- });
+ public void onSuccess(PageList<Agent> result) {
+ ListGridRecord[] records = getDataSource().buildRecords(result);
+ originallyAssignedIds = getIdList(records);
+ setAssigned(records);
+ modalWindow.addItem(layout);
+ modalWindow.show();
+ selector.reset();
+ }
+ @Override
+ public void onFailure(Throwable t) {
+ CoreGUI.getErrorHandler().handleError(
+ MSG.view_adminTopology_message_fetchAgentsFail(String.valueOf(affinityGroupId)), t);
+ }
+ });
}
@Override
@@ -122,15 +123,15 @@ public class AffinityGroupAgentsSelector extends AbstractSelector<Agent, AgentCr
@Override
protected int getMaxAvailableRecords() {
- return 3000;
+ return MAX_AVAIL_AGENTS;
}
@Override
protected Criteria getLatestCriteria(DynamicForm availableFilterForm) {
- String search = (String) availableFilterForm.getValue(NAME.propertyName());
+ String search = (String) availableFilterForm.getValue(FIELD_NAME.propertyName());
Criteria criteria = new Criteria();
if (null != search) {
- criteria.addCriteria(NAME.propertyName(), search);
+ criteria.addCriteria(FIELD_NAME.propertyName(), search);
}
return criteria;
}
@@ -145,15 +146,15 @@ public class AffinityGroupAgentsSelector extends AbstractSelector<Agent, AgentCr
return IconEnum.AGENT.getIcon16x16Path();
}
- public static void show(Integer affinityGroupId, final TableSection parrent) {
+ public static void show(final Integer affinityGroupId, final TableSection<?> parrent) {
modalWindow = new Window();
modalWindow.addCloseClickHandler(new CloseClickHandler() {
public void onCloseClick(CloseClickEvent event) {
closeAndRefresh(parrent, false);
}
});
- modalWindow.setTitle(MSG.view_adminTopology_agents() + ": "
- + MSG.view_adminTopology_affinityGroups_createNew());
+ modalWindow
+ .setTitle(MSG.view_adminTopology_agents() + ": " + MSG.view_adminTopology_affinityGroups_createNew());
modalWindow.setOverflow(Overflow.VISIBLE);
modalWindow.setWidth(800);
modalWindow.setHeight(400);
@@ -167,7 +168,7 @@ public class AffinityGroupAgentsSelector extends AbstractSelector<Agent, AgentCr
layout.setPadding(10);
layout.setLayoutMargin(10);
- final AffinityGroupAgentsSelector selector = new AffinityGroupAgentsSelector("foo", affinityGroupId);
+ final AffinityGroupAgentsSelector selector = new AffinityGroupAgentsSelector("assignAgents", affinityGroupId);
layout.addMember(selector);
IButton cancel = new LocatableIButton(selector.extendLocatorId("Cancel"), MSG.common_button_cancel());
@@ -193,9 +194,10 @@ public class AffinityGroupAgentsSelector extends AbstractSelector<Agent, AgentCr
closeAndRefresh(parrent, true);
}
- public void onFailure(Throwable caught) {
- //todo: error handling
- SC.say("errX");
+ public void onFailure(Throwable t) {
+ CoreGUI.getErrorHandler().handleError(
+ MSG.view_adminTopology_message_agroupAssingAgentsFail(String
+ .valueOf(affinityGroupId)), t);
}
});
}
@@ -208,17 +210,16 @@ public class AffinityGroupAgentsSelector extends AbstractSelector<Agent, AgentCr
closeAndRefresh(parrent, true);
}
- public void onFailure(Throwable caught) {
- //todo: error handling
- SC.say("errX");
+ public void onFailure(Throwable t) {
+ CoreGUI.getErrorHandler().handleError(
+ MSG.view_adminTopology_message_agroupRemovingAgentsFail(String
+ .valueOf(affinityGroupId)), t);
}
});
}
if (shouldBeClosed) {
closeAndRefresh(parrent, false);
}
- // SC.say("To del: " + originallySelected + "\n\nTo add: " + actuallySelected);
-
}
});
@@ -231,7 +232,7 @@ public class AffinityGroupAgentsSelector extends AbstractSelector<Agent, AgentCr
layout.addMember(buttons);
}
- private static void closeAndRefresh(TableSection parrent, boolean fullRefresh) {
+ private static void closeAndRefresh(TableSection<?> parrent, boolean fullRefresh) {
if (modalWindow != null) {
modalWindow.destroy();
}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupDetailView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupDetailView.java
index 4355814..fbd832e 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupDetailView.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupDetailView.java
@@ -25,7 +25,6 @@ import com.google.gwt.user.client.Timer;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.smartgwt.client.types.Overflow;
import com.smartgwt.client.types.VisibilityMode;
-import com.smartgwt.client.util.SC;
import com.smartgwt.client.widgets.IButton;
import com.smartgwt.client.widgets.events.ClickEvent;
import com.smartgwt.client.widgets.events.ClickHandler;
@@ -35,9 +34,11 @@ import com.smartgwt.client.widgets.layout.SectionStackSection;
import org.rhq.core.domain.cloud.AffinityGroup;
import org.rhq.enterprise.gui.coregui.client.BookmarkableView;
+import org.rhq.enterprise.gui.coregui.client.CoreGUI;
import org.rhq.enterprise.gui.coregui.client.ViewPath;
import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup;
import org.rhq.enterprise.gui.coregui.client.util.Log;
+import org.rhq.enterprise.gui.coregui.client.util.message.Message;
import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableDynamicForm;
import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableSectionStack;
import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableToolStrip;
@@ -50,7 +51,6 @@ import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableVLayout;
*/
public class AffinityGroupDetailView extends LocatableVLayout implements BookmarkableView {
- // private final CloudGWTServiceAsync cloudManager = GWTServiceLookup.getCloudService();
private final int affinityGroupId;
private static final int SECTION_COUNT = 3;
@@ -79,28 +79,18 @@ public class AffinityGroupDetailView extends LocatableVLayout implements Bookmar
@Override
protected void onInit() {
super.onInit();
- GWTServiceLookup.getCloudService().getAffinityGroupById(this.affinityGroupId,
- new AsyncCallback<AffinityGroup>() {
- public void onSuccess(final AffinityGroup affinityGroup) {
- prepareDetailsSection(sectionStack, affinityGroup);
-
- // GWTServiceLookup.getCloudService().getAgentsByServerName(server.getName(),
- // new AsyncCallback<List<Agent>>() {
- // public void onSuccess(List<Agent> agents) {
- // prepareAgentSection(sectionStack, server, agents);
- // };
- //
- // public void onFailure(Throwable caught) {
- // //TODO: CoreGUI.getErrorHandler().handleError(MSG.view_admin_plugins_loadFailure(), caught);
- // }
- // });
- }
+ GWTServiceLookup.getCloudService().getAffinityGroupById(affinityGroupId, new AsyncCallback<AffinityGroup>() {
+ public void onSuccess(final AffinityGroup affinityGroup) {
+ prepareDetailsSection(sectionStack, affinityGroup);
+ }
- public void onFailure(Throwable caught) {
- SC.say("er1:" + caught);
- //TODO: CoreGUI.getErrorHandler().handleError(MSG.view_admin_plugins_loadFailure(), caught);
- }
- });
+ public void onFailure(Throwable caught) {
+ CoreGUI.getErrorHandler().handleError(
+ MSG.view_adminTopology_message_fetchAgroupFail(String.valueOf(affinityGroupId)), caught);
+ initSectionCount = SECTION_COUNT;
+ return;
+ }
+ });
prepareAgentSection(sectionStack);
prepareServerSection(sectionStack);
}
@@ -178,7 +168,7 @@ public class AffinityGroupDetailView extends LocatableVLayout implements Bookmar
final TextItem nameItem = new TextItem(FIELD_NAME.propertyName(), FIELD_NAME.title());
nameItem.setValue(affinityGroup.getName());
-
+
LocatableToolStrip footer = new LocatableToolStrip(extendLocatorId("detailsFooter"));
footer.setPadding(5);
footer.setWidth100();
@@ -187,25 +177,27 @@ public class AffinityGroupDetailView extends LocatableVLayout implements Bookmar
IButton saveButton = new IButton();
saveButton.setOverflow(Overflow.VISIBLE);
saveButton.setTitle(MSG.common_button_save());
-// saveButton.setWidth(70);
saveButton.addClickHandler(new ClickHandler() {
public void onClick(ClickEvent event) {
affinityGroup.setName(nameItem.getValueAsString());
GWTServiceLookup.getCloudService().updateAffinityGroup(affinityGroup, new AsyncCallback<Void>() {
public void onSuccess(Void result) {
- // todo: notify
+ Message msg = new Message(MSG.view_adminTopology_message_agroupRenamed(
+ String.valueOf(affinityGroupId), affinityGroup.getName(), nameItem.getValueAsString()),
+ Message.Severity.Info);
+ CoreGUI.getMessageCenter().notify(msg);
}
public void onFailure(Throwable caught) {
- // todo: handle
+ CoreGUI.getErrorHandler().handleError(
+ MSG.view_adminTopology_message_agroupRenamingFail(String.valueOf(affinityGroupId),
+ affinityGroup.getName()) + " " + caught.getMessage(), caught);
}
});
}
});
footer.addMember(saveButton);
-
form.setItems(nameItem);
-
SectionStackSection section = new SectionStackSection(MSG.common_title_details());
section.setExpanded(true);
section.setItems(form, footer);
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupServersSelector.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupServersSelector.java
index 13b1559..803214c 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupServersSelector.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupServersSelector.java
@@ -22,7 +22,7 @@
*/
package org.rhq.enterprise.gui.coregui.client.admin.topology;
-import static org.rhq.enterprise.gui.coregui.client.inventory.resource.ResourceDataSourceField.NAME;
+import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerDatasourceField.FIELD_NAME;
import java.util.ArrayList;
import java.util.List;
@@ -31,7 +31,6 @@ import com.google.gwt.user.client.rpc.AsyncCallback;
import com.smartgwt.client.data.Criteria;
import com.smartgwt.client.types.Alignment;
import com.smartgwt.client.types.Overflow;
-import com.smartgwt.client.util.SC;
import com.smartgwt.client.widgets.IButton;
import com.smartgwt.client.widgets.Window;
import com.smartgwt.client.widgets.events.ClickEvent;
@@ -49,6 +48,7 @@ import org.rhq.core.domain.cloud.Server;
import org.rhq.core.domain.cloud.Server.OperationMode;
import org.rhq.core.domain.criteria.ServerCriteria;
import org.rhq.core.domain.util.PageList;
+import org.rhq.enterprise.gui.coregui.client.CoreGUI;
import org.rhq.enterprise.gui.coregui.client.IconEnum;
import org.rhq.enterprise.gui.coregui.client.components.form.SortedSelectItem;
import org.rhq.enterprise.gui.coregui.client.components.selector.AbstractSelector;
@@ -82,27 +82,24 @@ public class AffinityGroupServersSelector extends AbstractSelector<Server, Serve
this.affinityGroupId = affinityGroupId;
prepareMembers(this);
}
-
+
@Override
protected DynamicForm getAvailableFilterForm() {
if (availableFilterForm == null) {
availableFilterForm = new LocatableDynamicForm(extendLocatorId("SerSelectAvailFilterForm"));
availableFilterForm.setNumCols(4);
availableFilterForm.setWidth("75%");
- final TextItem search = new TextItem(NAME.propertyName(), MSG.common_title_search());
- final SelectItem operationModeSelect = new SortedSelectItem(ServerDatasource.FILTER_OPERATION_MODE, MSG.view_adminTopology_serverDetail_operationMode());
+ final TextItem search = new TextItem(FIELD_NAME.propertyName(), MSG.common_title_search());
+ final SelectItem operationModeSelect = new SortedSelectItem(ServerDatasource.FILTER_OPERATION_MODE,
+ MSG.view_adminTopology_serverDetail_operationMode());
operationModeSelect.setValueMap(buildOperationModeOptions());
operationModeSelect.setValue("ALL");
-//
-// final EnumSelectItem operationModeFilter = new EnumSelectItem(ServerDatasource.FILTER_OPERATION_MODE,
-// MSG.view_adminTopology_serverDetail_operationMode(), OperationMode.class, null, null);
-
availableFilterForm.setItems(search, operationModeSelect);
}
return availableFilterForm;
}
-
+
private String[] buildOperationModeOptions() {
OperationMode[] modes = OperationMode.values();
String[] options = new String[modes.length + 1];
@@ -117,27 +114,28 @@ public class AffinityGroupServersSelector extends AbstractSelector<Server, Serve
ServerCriteria criteria = new ServerCriteria();
criteria.addFilterAffinityGroupId(affinityGroupId);
GWTServiceLookup.getCloudService().findServersByCriteria(criteria, new AsyncCallback<PageList<Server>>() {
- public void onSuccess(PageList<Server> result) {
- ListGridRecord[] records = getDataSource().buildRecords(result);
- originallyAssignedIds = getIdList(records);
- setAssigned(records);
- modalWindow.addItem(layout);
- modalWindow.show();
- selector.reset();
- }
+ public void onSuccess(PageList<Server> result) {
+ ListGridRecord[] records = getDataSource().buildRecords(result);
+ originallyAssignedIds = getIdList(records);
+ setAssigned(records);
+ modalWindow.addItem(layout);
+ modalWindow.show();
+ selector.reset();
+ }
- @Override
- public void onFailure(Throwable t) {
- //todo: CoreGUI.getErrorHandler().handleError(MSG.view_admin_plugins_loadFailure(), t);
- }
- });
+ @Override
+ public void onFailure(Throwable t) {
+ CoreGUI.getErrorHandler().handleError(
+ MSG.view_adminTopology_message_fetchServersFail(String.valueOf(affinityGroupId)), t);
+ }
+ });
}
@Override
protected RPCDataSource<Server, ServerCriteria> getDataSource() {
if (datasource == null) {
- datasource = new ServerDatasource(affinityGroupId, false);
+ datasource = new ServerDatasource(null);
}
return datasource;
}
@@ -149,11 +147,11 @@ public class AffinityGroupServersSelector extends AbstractSelector<Server, Serve
@Override
protected Criteria getLatestCriteria(DynamicForm availableFilterForm) {
- String search = (String) availableFilterForm.getValue(NAME.propertyName());
+ String search = (String) availableFilterForm.getValue(FIELD_NAME.propertyName());
String operationMode = (String) availableFilterForm.getValue(ServerDatasource.FILTER_OPERATION_MODE);
Criteria criteria = new Criteria();
if (null != search) {
- criteria.addCriteria(NAME.propertyName(), search);
+ criteria.addCriteria(FIELD_NAME.propertyName(), search);
}
if (operationMode != null && !"ALL".equals(operationMode)) {
criteria.addCriteria(ServerDatasource.FILTER_OPERATION_MODE, operationMode);
@@ -171,7 +169,7 @@ public class AffinityGroupServersSelector extends AbstractSelector<Server, Serve
return IconEnum.SERVERS.getIcon16x16Path();
}
- public static void show(Integer affinityGroupId, final TableSection parrent) {
+ public static void show(final Integer affinityGroupId, final TableSection<?> parrent) {
modalWindow = new Window();
modalWindow.addCloseClickHandler(new CloseClickHandler() {
public void onCloseClick(CloseClickEvent event) {
@@ -193,7 +191,7 @@ public class AffinityGroupServersSelector extends AbstractSelector<Server, Serve
layout.setPadding(10);
layout.setLayoutMargin(10);
- final AffinityGroupServersSelector selector = new AffinityGroupServersSelector("foo", affinityGroupId);
+ final AffinityGroupServersSelector selector = new AffinityGroupServersSelector("assignServers", affinityGroupId);
layout.addMember(selector);
IButton cancel = new LocatableIButton(selector.extendLocatorId("Cancel"), MSG.common_button_cancel());
@@ -214,14 +212,14 @@ public class AffinityGroupServersSelector extends AbstractSelector<Server, Serve
shouldBeClosed = false;
GWTServiceLookup.getCloudService().removeServersFromGroup(
originallySelected.toArray(new Integer[originallySelected.size()]), new AsyncCallback<Void>() {
-
public void onSuccess(Void result) {
closeAndRefresh(parrent, true);
}
- public void onFailure(Throwable caught) {
- //todo: error handling
- SC.say("errX");
+ public void onFailure(Throwable t) {
+ CoreGUI.getErrorHandler().handleError(
+ MSG.view_adminTopology_message_agroupAssingServersFail(String
+ .valueOf(affinityGroupId)), t);
}
});
}
@@ -229,22 +227,20 @@ public class AffinityGroupServersSelector extends AbstractSelector<Server, Serve
shouldBeClosed = false;
GWTServiceLookup.getCloudService().addServersToGroup(selector.getAffinityGroupId(),
actuallySelected.toArray(new Integer[actuallySelected.size()]), new AsyncCallback<Void>() {
-
public void onSuccess(Void result) {
closeAndRefresh(parrent, true);
}
- public void onFailure(Throwable caught) {
- //todo: error handling
- SC.say("errX");
+ public void onFailure(Throwable t) {
+ CoreGUI.getErrorHandler().handleError(
+ MSG.view_adminTopology_message_agroupRemovingServersFail(String
+ .valueOf(affinityGroupId)), t);
}
});
}
if (shouldBeClosed) {
closeAndRefresh(parrent, false);
}
- // SC.say("To del: " + originallySelected + "\n\nTo add: " + actuallySelected);
-
}
});
@@ -257,7 +253,7 @@ public class AffinityGroupServersSelector extends AbstractSelector<Server, Serve
layout.addMember(buttons);
}
- private static void closeAndRefresh(TableSection parrent, boolean fullRefresh) {
+ private static void closeAndRefresh(TableSection<?> parrent, boolean fullRefresh) {
if (modalWindow != null) {
modalWindow.destroy();
}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupTableView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupTableView.java
index ac44d44..dbe8d0f 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupTableView.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupTableView.java
@@ -36,6 +36,8 @@ import com.smartgwt.client.widgets.events.ClickEvent;
import com.smartgwt.client.widgets.events.ClickHandler;
import com.smartgwt.client.widgets.form.DynamicForm;
import com.smartgwt.client.widgets.form.fields.TextItem;
+import com.smartgwt.client.widgets.form.fields.events.KeyUpEvent;
+import com.smartgwt.client.widgets.form.fields.events.KeyUpHandler;
import com.smartgwt.client.widgets.form.validator.LengthRangeValidator;
import com.smartgwt.client.widgets.grid.ListGrid;
import com.smartgwt.client.widgets.grid.ListGridField;
@@ -98,32 +100,29 @@ public class AffinityGroupTableView extends TableSection<AffinityGroupWithCounts
}
});
- addTableAction(extendLocatorId("removeSelected"), MSG.view_adminTopology_server_removeSelected(),
- MSG.common_msg_areYouSure(), new AuthorizedTableAction(this, TableActionEnablement.ANY,
- Permission.MANAGE_SETTINGS) {
+ addTableAction(extendLocatorId("removeSelected"), MSG.view_adminTopology_server_removeSelected(), null,
+ new AuthorizedTableAction(this, TableActionEnablement.ANY, Permission.MANAGE_SETTINGS) {
public void executeAction(final ListGridRecord[] selections, Object actionValue) {
- List<String> selectedNames = getSelectedNames(selections);
- String message = "Really? Delete? For all I've done for you? " + selectedNames;
+ final List<String> selectedNames = getSelectedNames(selections);
+ String message = MSG.view_adminTopology_message_removeAGroupsConfirm(selectedNames.toString());
SC.ask(message, new BooleanCallback() {
public void execute(Boolean confirmed) {
if (confirmed) {
int[] selectedIds = getSelectedIds(selections);
- SC.say("setting servers to maintenance mode, ids: " + selectedIds);
GWTServiceLookup.getCloudService().deleteAffinityGroups(selectedIds,
new AsyncCallback<Integer>() {
public void onSuccess(Integer count) {
- // TODO: msg with count
Message msg = new Message(MSG
- .view_admin_plugins_disabledServerPlugins("sdf"), Message.Severity.Info);
+ .view_adminTopology_message_removedAGroups(String.valueOf(count)),
+ Message.Severity.Info);
CoreGUI.getMessageCenter().notify(msg);
refresh();
}
public void onFailure(Throwable caught) {
- // TODO: msg
CoreGUI.getErrorHandler().handleError(
- MSG.view_admin_plugins_disabledServerPluginsFailure() + " "
- + caught.getMessage(), caught);
+ MSG.view_adminTopology_message_removeAGroupsFail(selectedNames
+ .toString()) + " " + caught.getMessage(), caught);
refreshTableInfo();
}
@@ -190,9 +189,16 @@ public class AffinityGroupTableView extends TableSection<AffinityGroupWithCounts
nameLengthValidator.setMin(3);
nameLengthValidator.setMax(100);
name.setValidators(nameLengthValidator);
+ name.addKeyUpHandler(new KeyUpHandler() {
+ public void onKeyUp(KeyUpEvent event) {
+ if ("Enter".equals(event.getKeyName())) {
+ createNewGroup(modalWindow, form);
+ }
+ }
+ });
+
form.setFields(name);
layout.addMember(form);
-
VLayout spacer = new VLayout();
spacer.setHeight(10);
layout.addMember(spacer);
@@ -203,32 +209,17 @@ public class AffinityGroupTableView extends TableSection<AffinityGroupWithCounts
modalWindow.destroy();
}
});
- IButton save = new LocatableIButton(this.extendLocatorId("Create"),
+ final IButton create = new LocatableIButton(this.extendLocatorId("Create"),
MSG.view_adminTopology_affinityGroups_createNew());
- save.addClickHandler(new ClickHandler() {
+ create.addClickHandler(new ClickHandler() {
public void onClick(ClickEvent clickEvent) {
- if (form.validate()) {
- String name = form.getValueAsString(FIELD_NAME);
- AffinityGroup affinityGroup = new AffinityGroup(name);
- GWTServiceLookup.getCloudService().createAffinityGroup(affinityGroup, new AsyncCallback<Integer>() {
- public void onSuccess(Integer affinityGroupId) {
- modalWindow.destroy();
- CoreGUI.goToView(VIEW_PATH + "/" + affinityGroupId);
- }
-
- public void onFailure(Throwable caught) {
- Map<String, String> errors = new HashMap<String, String>();
- errors.put(FIELD_NAME, caught.getMessage());
- form.setErrors(errors, true);
- }
- });
- }
+ createNewGroup(modalWindow, form);
}
});
HLayout buttons = new HLayout(10);
buttons.setLayoutAlign(Alignment.CENTER);
- buttons.addMember(save);
+ buttons.addMember(create);
buttons.addMember(cancel);
layout.addMember(buttons);
modalWindow.addItem(layout);
@@ -236,6 +227,25 @@ public class AffinityGroupTableView extends TableSection<AffinityGroupWithCounts
name.focusInItem();
}
+ private void createNewGroup(final Window modalWindow, final DynamicForm form) {
+ if (form.validate()) {
+ String name = form.getValueAsString(FIELD_NAME);
+ AffinityGroup affinityGroup = new AffinityGroup(name);
+ GWTServiceLookup.getCloudService().createAffinityGroup(affinityGroup, new AsyncCallback<Integer>() {
+ public void onSuccess(Integer affinityGroupId) {
+ modalWindow.destroy();
+ CoreGUI.goToView(VIEW_PATH + "/" + affinityGroupId);
+ }
+
+ public void onFailure(Throwable caught) {
+ Map<String, String> errors = new HashMap<String, String>();
+ errors.put(FIELD_NAME, caught.getMessage());
+ form.setErrors(errors, true);
+ }
+ });
+ }
+ }
+
@Override
public ViewName getViewName() {
return VIEW_ID;
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupWithCountsDatasource.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupWithCountsDatasource.java
index e08a88e..bd8b6b3 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupWithCountsDatasource.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupWithCountsDatasource.java
@@ -55,14 +55,7 @@ public class AffinityGroupWithCountsDatasource extends RPCDataSource<AffinityGro
FIELD_SERVER_COUNT("serverCount", CoreGUI.getMessages().view_adminTopology_affinityGroups_serverCount());
- /**
- * Corresponds to a property name of Server (e.g. operationMode).
- */
private String propertyName;
-
- /**
- * The table header for the field or property (e.g. Mode).
- */
private String title;
private Fields(String propertyName, String title) {
@@ -131,8 +124,8 @@ public class AffinityGroupWithCountsDatasource extends RPCDataSource<AffinityGro
processResponse(request.getRequestId(), response);
}
- public void onFailure(Throwable caught) {
- //todo: CoreGUI.getErrorHandler().handleError(MSG.view_admin_plugins_loadFailure(), t);
+ public void onFailure(Throwable t) {
+ CoreGUI.getErrorHandler().handleError(MSG.view_adminTopology_message_fetchAgroupsFail(), t);
response.setStatus(DSResponse.STATUS_FAILURE);
processResponse(request.getRequestId(), response);
}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentDatasource.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentDatasource.java
index ac1d26b..dd596e9 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentDatasource.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentDatasource.java
@@ -42,9 +42,8 @@ import com.smartgwt.client.widgets.grid.ListGridRecord;
import org.rhq.core.domain.criteria.AgentCriteria;
import org.rhq.core.domain.resource.Agent;
-import org.rhq.core.domain.util.PageControl;
import org.rhq.core.domain.util.PageList;
-import org.rhq.core.domain.util.PageOrdering;
+import org.rhq.enterprise.gui.coregui.client.CoreGUI;
import org.rhq.enterprise.gui.coregui.client.components.table.TimestampCellFormatter;
import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup;
import org.rhq.enterprise.gui.coregui.client.util.Log;
@@ -61,7 +60,6 @@ public class AgentDatasource extends RPCDataSource<Agent, AgentCriteria> {
public static final String FILTER_PORT = FIELD_PORT.propertyName();
public static final String FILTER_SERVER_ID = "serverId";
public static final String FILTER_AFFINITY_GROUP_ID = "affinityGroupId";
-
private final Integer id;
private final boolean isAffinityGroupId;
@@ -115,31 +113,10 @@ public class AgentDatasource extends RPCDataSource<Agent, AgentCriteria> {
@Override
protected void executeFetch(final DSRequest request, final DSResponse response, AgentCriteria criteria) {
-// final PageControl pc = getPageControl(request);
-
-// AsyncCallback<PageList<Agent>> callback = new AsyncCallback<PageList<Agent>>() {
-// public void onSuccess(PageList<Agent> result) {
-// response.setData(buildRecords(result));
-// response.setTotalRows(result.size());
-// processResponse(request.getRequestId(), response);
-// }
-//
-// @Override
-// public void onFailure(Throwable t) {
-// //todo: CoreGUI.getErrorHandler().handleError(MSG.view_admin_plugins_loadFailure(), t);
-// response.setStatus(DSResponse.STATUS_FAILURE);
-// processResponse(request.getRequestId(), response);
-// }
-// };
-//
-//
if (isAffinityGroupId) {
-// GWTServiceLookup.getCloudService().getAgentMembersByAffinityGroupId(id, pc, callback);
criteria.addFilterAffinityGroupId(id);
- } else if (id != null) {
- // if id == null all agent are returned
+ } else {
criteria.addFilterServerId(id);
-// GWTServiceLookup.getAgentService().getAgentsByServer(id, pc, callback);
}
GWTServiceLookup.getCloudService().findAgentsByCriteria(criteria, new AsyncCallback<PageList<Agent>>() {
@@ -151,38 +128,13 @@ public class AgentDatasource extends RPCDataSource<Agent, AgentCriteria> {
@Override
public void onFailure(Throwable t) {
- //todo: CoreGUI.getErrorHandler().handleError(MSG.view_admin_plugins_loadFailure(), t);
+ CoreGUI.getErrorHandler().handleError(MSG.view_adminTopology_message_fetchAgents2Fail(), t);
response.setStatus(DSResponse.STATUS_FAILURE);
processResponse(request.getRequestId(), response);
}
});
}
- /**
- * Returns a prepopulated PageControl based on the provided DSRequest. This will set sort fields,
- * pagination, but *not* filter fields.
- *
- * @param request the request to turn into a page control
- * @return the page control for passing to criteria and other queries
- */
- protected PageControl getPageControl(DSRequest request) {
- // Initialize paging.
- PageControl pageControl = new PageControl(0, getDataPageSize());
-
- // Initialize sorting.
- String sortBy = request.getAttribute("sortBy");
- if (sortBy != null) {
- String[] sorts = sortBy.split(",");
- for (String sort : sorts) {
- PageOrdering ordering = (sort.startsWith("-")) ? PageOrdering.DESC : PageOrdering.ASC;
- String columnName = (ordering == PageOrdering.DESC) ? sort.substring(1) : sort;
- pageControl.addDefaultOrderingField(columnName, ordering);
- }
- }
-
- return pageControl;
- }
-
@Override
public Agent copyValues(Record from) {
throw new UnsupportedOperationException("AgentNodeDatasource.copyValues(Record from)");
@@ -216,7 +168,6 @@ public class AgentDatasource extends RPCDataSource<Agent, AgentCriteria> {
criteria.addFilterPort(getFilter(request, FILTER_PORT, Integer.class));
criteria.addFilterServerId(getFilter(request, FILTER_SERVER_ID, Integer.class));
criteria.addFilterAffinityGroupId(getFilter(request, FILTER_AFFINITY_GROUP_ID, Integer.class));
-
//@todo: Remove me when finished debugging search expression
Log.debug(" *** AgentCriteria Search String: " + getFilter(request, "search", String.class));
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentDatasourceField.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentDatasourceField.java
index 26792d4..7935446 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentDatasourceField.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentDatasourceField.java
@@ -33,19 +33,20 @@ public enum AgentDatasourceField {
FIELD_NAME("name", CoreGUI.getMessages().common_title_name()),
FIELD_SERVER("server", CoreGUI.getMessages().view_adminTopology_agent_connectedServer()),
-
+
FIELD_SERVER_ID("serverId", "serverId"),
FIELD_ADDRESS("address", CoreGUI.getMessages().view_adminTopology_agent_agentBindAddress()),
FIELD_PORT("port", CoreGUI.getMessages().view_adminTopology_agent_agentBindPort()),
- FIELD_LAST_AVAILABILITY_REPORT("lastAvailabilityReport", CoreGUI.getMessages().view_adminTopology_agent_lastAvailabilityReport()),
+ FIELD_LAST_AVAILABILITY_REPORT("lastAvailabilityReport", CoreGUI.getMessages()
+ .view_adminTopology_agent_lastAvailabilityReport()),
FIELD_AGENT_TOKEN("agentToken", CoreGUI.getMessages().view_adminTopology_agentDetail_token()),
FIELD_AFFINITY_GROUP("affinityGroup", CoreGUI.getMessages().view_adminTopology_server_affinityGroup()),
-
+
FIELD_AFFINITY_GROUP_ID("affinityGroupId", "affinityGroupId");
/**
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentDetailView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentDetailView.java
index f48e7b7..7e5c3ac 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentDetailView.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentDetailView.java
@@ -31,7 +31,6 @@ import com.google.gwt.user.client.Timer;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.smartgwt.client.types.Overflow;
import com.smartgwt.client.types.VisibilityMode;
-import com.smartgwt.client.util.SC;
import com.smartgwt.client.widgets.form.fields.StaticTextItem;
import com.smartgwt.client.widgets.layout.SectionStack;
import com.smartgwt.client.widgets.layout.SectionStackSection;
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentTableView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentTableView.java
index dc34602..8c47813 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentTableView.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentTableView.java
@@ -55,7 +55,7 @@ public class AgentTableView extends TableSection<AgentDatasource> implements Has
+ AdministrationView.SECTION_TOPOLOGY_VIEW_ID + "/" + VIEW_ID;
private final boolean isAffinityGroupId;
-
+
private final Integer id;
public AgentTableView(String locatorId, Integer id, boolean isAffinityGroupId) {
@@ -91,7 +91,7 @@ public class AgentTableView extends TableSection<AgentDatasource> implements Has
}
});
} else if (field.getName() == FIELD_SERVER.propertyName()) {
- // adding the cell formatter for server field (clickable link)
+ // adding the cell formatter for server field (clickable link)
field.setCellFormatter(new CellFormatter() {
@Override
public String format(Object value, ListGridRecord record, int rowNum, int colNum) {
@@ -105,7 +105,7 @@ public class AgentTableView extends TableSection<AgentDatasource> implements Has
}
});
} else if (field.getName() == FIELD_AFFINITY_GROUP.propertyName()) {
- // adding the cell formatter for affinity group field (clickable link)
+ // adding the cell formatter for affinity group field (clickable link)
field.setCellFormatter(new CellFormatter() {
@Override
public String format(Object value, ListGridRecord record, int rowNum, int colNum) {
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/FailoverListItemDatasource.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/FailoverListItemDatasource.java
index 6dd2430..6bfa378 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/FailoverListItemDatasource.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/FailoverListItemDatasource.java
@@ -43,6 +43,7 @@ import com.smartgwt.client.widgets.grid.ListGridRecord;
import org.rhq.core.domain.cloud.FailoverListDetails;
import org.rhq.core.domain.criteria.Criteria;
import org.rhq.core.domain.util.PageControl;
+import org.rhq.enterprise.gui.coregui.client.CoreGUI;
import org.rhq.enterprise.gui.coregui.client.components.table.TimestampCellFormatter;
import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup;
@@ -53,14 +54,14 @@ import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup;
public class FailoverListItemDatasource extends AbstractServerNodeDatasource<FailoverListDetails, Criteria> {
private final int agentId;
-
+
// this delegate is there to not repeat the copyValues code
private final ServerDatasource serverDatasource;
public FailoverListItemDatasource(int agentId) {
super();
this.agentId = agentId;
- this.serverDatasource = new ServerDatasource(null, false);
+ this.serverDatasource = new ServerDatasource(null);
List<DataSourceField> fields = addDataSourceFields();
addFields(fields);
}
@@ -111,13 +112,14 @@ public class FailoverListItemDatasource extends AbstractServerNodeDatasource<Fai
@Override
public void onFailure(Throwable t) {
- //todo: CoreGUI.getErrorHandler().handleError(MSG.view_admin_plugins_loadFailure(), t);
+ CoreGUI.getErrorHandler().handleError(MSG.view_adminTopology_message_fetchFailOverLists(), t);
response.setStatus(DSResponse.STATUS_FAILURE);
processResponse(request.getRequestId(), response);
}
});
}
+ @Override
protected PageControl getPageControl(DSRequest request) {
return serverDatasource.getPageControl(request);
}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventDatasource.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventDatasource.java
index f77a843..c3d103b 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventDatasource.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventDatasource.java
@@ -27,7 +27,6 @@ import static org.rhq.enterprise.gui.coregui.client.admin.topology.PartitionEven
import java.util.ArrayList;
import java.util.List;
-import java.util.Map;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.smartgwt.client.data.DSRequest;
@@ -42,11 +41,11 @@ import org.rhq.core.domain.cloud.PartitionEvent;
import org.rhq.core.domain.cloud.PartitionEvent.ExecutionStatus;
import org.rhq.core.domain.cloud.PartitionEventType;
import org.rhq.core.domain.criteria.PartitionEventCriteria;
-import org.rhq.core.domain.util.PageControl;
import org.rhq.core.domain.util.PageList;
-import org.rhq.core.domain.util.PageOrdering;
+import org.rhq.enterprise.gui.coregui.client.CoreGUI;
import org.rhq.enterprise.gui.coregui.client.components.table.TimestampCellFormatter;
import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup;
+import org.rhq.enterprise.gui.coregui.client.util.Log;
import org.rhq.enterprise.gui.coregui.client.util.RPCDataSource;
/**
@@ -95,8 +94,6 @@ public class PartitionEventDatasource extends RPCDataSource<PartitionEvent, Part
@Override
protected void executeFetch(final DSRequest request, final DSResponse response, PartitionEventCriteria criteria) {
- // final PageControl pc = getPageControl(request);
-
GWTServiceLookup.getCloudService().findPartitionEventsByCriteria(criteria,
new AsyncCallback<PageList<PartitionEvent>>() {
public void onSuccess(PageList<PartitionEvent> result) {
@@ -107,38 +104,13 @@ public class PartitionEventDatasource extends RPCDataSource<PartitionEvent, Part
@Override
public void onFailure(Throwable t) {
- //todo: CoreGUI.getErrorHandler().handleError(MSG.view_admin_plugins_loadFailure(), t);
+ CoreGUI.getErrorHandler().handleError(MSG.view_adminTopology_message_fetchPEventFail(), t);
response.setStatus(DSResponse.STATUS_FAILURE);
processResponse(request.getRequestId(), response);
}
});
}
- /**
- * Returns a prepopulated PageControl based on the provided DSRequest. This will set sort fields,
- * pagination, but *not* filter fields.
- *
- * @param request the request to turn into a page control
- * @return the page control for passing to criteria and other queries
- */
- protected PageControl getPageControl(DSRequest request) {
- // Initialize paging.
- PageControl pageControl = new PageControl(0, getDataPageSize());
-
- // Initialize sorting.
- String sortBy = request.getAttribute("sortBy");
- if (sortBy != null) {
- String[] sorts = sortBy.split(",");
- for (String sort : sorts) {
- PageOrdering ordering = (sort.startsWith("-")) ? PageOrdering.DESC : PageOrdering.ASC;
- String columnName = (ordering == PageOrdering.DESC) ? sort.substring(1) : sort;
- pageControl.addDefaultOrderingField(columnName, ordering);
- }
- }
-
- return pageControl;
- }
-
@Override
public PartitionEvent copyValues(Record from) {
throw new UnsupportedOperationException("PartitionEventDatasource.copyValues(Record from)");
@@ -150,46 +122,27 @@ public class PartitionEventDatasource extends RPCDataSource<PartitionEvent, Part
record.setAttribute(FIELD_ID.propertyName(), from.getId());
record.setAttribute(FIELD_CTIME.propertyName(), from.getCtime());
record.setAttribute(FIELD_EVENT_TYPE.propertyName(), from.getEventType() == null ? "" : from.getEventType());
- record.setAttribute(FIELD_EVENT_DETAIL.propertyName(), from.getEventDetail() == null ? "" : from.getEventDetail());
- record.setAttribute(FIELD_SUBJECT_NAME.propertyName(), from.getSubjectName() == null ? "" : from.getSubjectName());
- record.setAttribute(FIELD_EXECUTION_STATUS.propertyName(), from.getExecutionStatus() == null ? "" : from.getExecutionStatus());
+ record.setAttribute(FIELD_EVENT_DETAIL.propertyName(),
+ from.getEventDetail() == null ? "" : from.getEventDetail());
+ record.setAttribute(FIELD_SUBJECT_NAME.propertyName(),
+ from.getSubjectName() == null ? "" : from.getSubjectName());
+ record.setAttribute(FIELD_EXECUTION_STATUS.propertyName(),
+ from.getExecutionStatus() == null ? "" : from.getExecutionStatus());
return record;
}
@Override
protected PartitionEventCriteria getFetchCriteria(DSRequest request) {
- //todo: do it like in ResourceDatasource.class
-
-
- ExecutionStatus[] statuses = getArrayFilter(request, FILTER_EXECUTION_STATUS, ExecutionStatus.class);
- PartitionEventType[] types = getArrayFilter(request, FILTER_EVENT_TYPE, PartitionEventType.class);
- if (types == null || types.length == 0 || statuses == null || statuses.length == 0) {
- return null; // user didn't select any type or status - return null to indicate no data should be displayed
- }
-
PartitionEventCriteria criteria = new PartitionEventCriteria();
- // This code is unlikely to be necessary as the encompassing view should be using an initial
- // sort specifier. But just in case, make sure we set the initial sort. Note that we have to
- // manipulate the PageControl directly as per the restrictions on getFetchCriteria() (see jdoc).
- PageControl pageControl = getPageControl(request);
- if (pageControl.getOrderingFields().isEmpty()) {
- pageControl.initDefaultOrderingField(FIELD_CTIME.propertyName(), PageOrdering.DESC);
- }
-
- // TODO: This call is broken in 2.2, http://code.google.com/p/smartgwt/issues/detail?id=490
- // when using AdvancedCriteria
- Map<String, Object> criteriaMap = request.getCriteria().getValues();
- criteria.addFilterEventDetail((String) criteriaMap.get(FILTER_EVENT_DETAIL));
-
- // There's no need to add a exec. status filter to the criteria if the user specified all exec. statuses.
- if (statuses.length != ExecutionStatus.values().length) {
- criteria.addFilterExecutionStatus(statuses);
- }
-
- // There's no need to add a event type filter to the criteria if the user specified all event types.
- if (types.length != PartitionEventType.values().length) {
- criteria.addFilterEventType(types);
- }
+ // printRequestCriteria(request);
+ criteria.addFilterId(getFilter(request, FIELD_ID.propertyName(), Integer.class));
+ criteria.addFilterEventDetail(getFilter(request, FIELD_EVENT_DETAIL.propertyName(), String.class));
+ criteria.addFilterExecutionStatus(getArrayFilter(request, FILTER_EXECUTION_STATUS, ExecutionStatus.class));
+ criteria.addFilterEventType(getArrayFilter(request, FILTER_EVENT_TYPE, PartitionEventType.class));
+
+ //@todo: Remove me when finished debugging search expression
+ Log.debug(" *** PartitionEventCriteria Search String: " + getFilter(request, "search", String.class));
+ criteria.setSearchExpression(getFilter(request, "search", String.class));
return criteria;
}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventDetailView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventDetailView.java
index dc96374..4210202 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventDetailView.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventDetailView.java
@@ -29,7 +29,6 @@ import com.google.gwt.user.client.Timer;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.smartgwt.client.types.Overflow;
import com.smartgwt.client.types.VisibilityMode;
-import com.smartgwt.client.util.SC;
import com.smartgwt.client.widgets.Label;
import com.smartgwt.client.widgets.form.fields.StaticTextItem;
import com.smartgwt.client.widgets.grid.ListGrid;
@@ -44,6 +43,7 @@ import org.rhq.core.domain.criteria.PartitionEventCriteria;
import org.rhq.core.domain.util.PageControl;
import org.rhq.core.domain.util.PageList;
import org.rhq.enterprise.gui.coregui.client.BookmarkableView;
+import org.rhq.enterprise.gui.coregui.client.CoreGUI;
import org.rhq.enterprise.gui.coregui.client.ViewPath;
import org.rhq.enterprise.gui.coregui.client.components.table.TimestampCellFormatter;
import org.rhq.enterprise.gui.coregui.client.gwt.CloudGWTServiceAsync;
@@ -90,32 +90,39 @@ public class PartitionEventDetailView extends LocatableVLayout implements Bookma
PartitionEventCriteria criteria = new PartitionEventCriteria();
criteria.addFilterId(partitionEventId);
final CloudGWTServiceAsync service = GWTServiceLookup.getCloudService();
- service.findPartitionEventsByCriteria(criteria,
- new AsyncCallback<PageList<PartitionEvent>>() {
- public void onSuccess(final PageList<PartitionEvent> events) {
- if (events == null || events.size() != 1) {
- //TODO: notify user in msg center
- return;
- }
- prepareDetailsSection(sectionStack, events.get(0));
- service.getPartitionEventDetails(partitionEventId,
- PageControl.getUnlimitedInstance(), new AsyncCallback<PageList<PartitionEventDetails>>() {
- public void onSuccess(PageList<PartitionEventDetails> result) {
- prepareAssignmentsSection(sectionStack, result);
- }
- public void onFailure(Throwable caught) {
- SC.say("er2:" + caught);
- //TODO: CoreGUI.getErrorHandler().handleError(MSG.view_admin_plugins_loadFailure(), caught);
- }
- });
-
+ service.findPartitionEventsByCriteria(criteria, new AsyncCallback<PageList<PartitionEvent>>() {
+ public void onSuccess(final PageList<PartitionEvent> events) {
+ if (events == null || events.size() != 1) {
+ CoreGUI.getErrorHandler().handleError(
+ MSG.view_adminTopology_message_fetchPEventDetailsFail(String.valueOf(partitionEventId)));
+ initSectionCount = SECTION_COUNT;
+ return;
}
+ prepareDetailsSection(sectionStack, events.get(0));
+ service.getPartitionEventDetails(partitionEventId, PageControl.getUnlimitedInstance(),
+ new AsyncCallback<PageList<PartitionEventDetails>>() {
+ public void onSuccess(PageList<PartitionEventDetails> result) {
+ prepareAssignmentsSection(sectionStack, result);
+ }
+
+ public void onFailure(Throwable caught) {
+ CoreGUI.getErrorHandler()
+ .handleError(
+ MSG.view_adminTopology_message_fetchPEventDetailsFail(String
+ .valueOf(partitionEventId)));
+ initSectionCount = SECTION_COUNT;
+ return;
+ }
+ });
- public void onFailure(Throwable caught) {
- SC.say("er1:" + caught);
- //TODO: CoreGUI.getErrorHandler().handleError(MSG.view_admin_plugins_loadFailure(), caught);
- }
- });
+ }
+
+ public void onFailure(Throwable caught) {
+ CoreGUI.getErrorHandler().handleError(
+ MSG.view_adminTopology_message_fetchPEventDetailsFail(String.valueOf(partitionEventId)));
+ initSectionCount = SECTION_COUNT;
+ }
+ });
}
public boolean isInitialized() {
@@ -165,7 +172,8 @@ public class PartitionEventDetailView extends LocatableVLayout implements Bookma
// there is no need for datasource, it is a simple table with two columns
ListGrid assignments = new ListGrid();
ListGridField agentName = new ListGridField("agentName", MSG.view_adminTopology_agent_agentName());
- ListGridField serverName = new ListGridField("serverName", MSG.view_admin_systemSettings_serverDetails_serverName());
+ ListGridField serverName = new ListGridField("serverName",
+ MSG.view_admin_systemSettings_serverDetails_serverName());
assignments.setFields(agentName, serverName);
ListGridRecord[] records = new ListGridRecord[eventDetails.size()];
for (int i = 0; i < eventDetails.size(); i++) {
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventTableView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventTableView.java
index b25a4d3..7fa9a7c 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventTableView.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventTableView.java
@@ -18,6 +18,7 @@
*/
package org.rhq.enterprise.gui.coregui.client.admin.topology;
+import java.util.ArrayList;
import java.util.List;
import com.google.gwt.user.client.rpc.AsyncCallback;
@@ -63,18 +64,29 @@ public class PartitionEventTableView extends TableSection<PartitionEventDatasour
public static final String VIEW_PATH = AdministrationView.VIEW_ID + "/"
+ AdministrationView.SECTION_TOPOLOGY_VIEW_ID + "/" + VIEW_ID;
-
private static final Criteria INITIAL_CRITERIA = new Criteria();
- private static SortSpecifier DEFAULT_SORT_SPECIFIER = new SortSpecifier(PartitionEventCriteria.SORT_FIELD_CTIME,
- SortDirection.DESCENDING);
+ private static final SortSpecifier DEFAULT_SORT_SPECIFIER = new SortSpecifier(
+ PartitionEventCriteria.SORT_FIELD_CTIME, SortDirection.DESCENDING);
+
+ private enum TableAction {
+ REMOVE_SELECTED(MSG.view_adminTopology_server_removeSelected(), TableActionEnablement.ANY), PURGE_ALL(MSG
+ .view_adminTopology_partitionEvents_purgeAll(), TableActionEnablement.ALWAYS), FORCE_REPARTITION(MSG
+ .view_adminTopology_partitionEvents_forceRepartition(), TableActionEnablement.ALWAYS);
+
+ private String title;
+ private TableActionEnablement enablement;
+
+ private TableAction(String title, TableActionEnablement enablement) {
+ this.title = title;
+ this.enablement = enablement;
+ }
+ }
public PartitionEventTableView(String locatorId, String tableTitle) {
super(locatorId, tableTitle, INITIAL_CRITERIA, new SortSpecifier[] { DEFAULT_SORT_SPECIFIER });
-
setHeight100();
setWidth100();
-
setInitialCriteriaFixed(false);
setDataSource(new PartitionEventDatasource());
}
@@ -89,22 +101,6 @@ public class PartitionEventTableView extends TableSection<PartitionEventDatasour
final TextItem detail = new TextItem(PartitionEventDatasource.FILTER_EVENT_DETAIL,
MSG.view_adminTopology_partitionEvents_detailsFilter());
- // detail.setValue("");
-
- // startDateFilter = new DateFilterItem(DateFilterItem.START_DATE_FILTER, MSG.filter_from_date());
- // endDateFilter = new DateFilterItem(DateFilterItem.END_DATE_FILTER, MSG.filter_to_date());
-
-// SpacerItem spacerItem = new SpacerItem();
-// spacerItem.setColSpan(1);
-// final ButtonItem showAll = new ButtonItem("showAll", "Show All");
-// showAll.addClickHandler(new ClickHandler() {
-// public void onClick(ClickEvent event) {
-// statusFilter.init(ExecutionStatus.class, null, null);
-// typeFilter.init(PartitionEventType.class, null, null);
-// detail.setValue("");
-// refresh();
-// }
-// });
if (isShowFilterForm()) {
setFilterFormItems(statusFilter, detail, typeFilter);
@@ -118,7 +114,7 @@ public class PartitionEventTableView extends TableSection<PartitionEventDatasour
ListGrid listGrid = getListGrid();
listGrid.setFields(fields.toArray(new ListGridField[fields.size()]));
showActions();
-
+
for (ListGridField field : fields) {
// adding the cell formatter for name field (clickable link)
if (field.getName() == PartitionEventDatasourceField.FIELD_EVENT_TYPE.propertyName()) {
@@ -137,140 +133,97 @@ public class PartitionEventTableView extends TableSection<PartitionEventDatasour
}
}
- // @Override
- // protected String getDetailsLinkColumnName() {
- // return PartitionEventDatasourceField.FIELD_EVENT_TYPE.propertyName();
- // }
- //
- // @Override
- // protected CellFormatter getDetailsLinkColumnCellFormatter() {
- // return new CellFormatter() {
- // public String format(Object value, ListGridRecord record, int rowNum, int colNum) {
- // Integer recordId = getId(record);
- // String detailsUrl = "#" + VIEW_PATH + "/" + recordId;
- // return SeleniumUtility.getLocatableHref(detailsUrl, detailsUrl, null);
- // }
- // };
- // }
-
@Override
public Canvas getDetailsView(Integer id) {
return new PartitionEventDetailView(extendLocatorId("detailsView"), id);
}
private void showActions() {
- addTableAction(extendLocatorId("removeSelected"), MSG.view_adminTopology_server_removeSelected(),
- MSG.common_msg_areYouSure(), new AuthorizedTableAction(this, TableActionEnablement.ANY,
- Permission.MANAGE_SETTINGS) {
- public void executeAction(final ListGridRecord[] selections, Object actionValue) {
- String message = "Really? Delete? For all I've done for you? ";
- SC.ask(message, new BooleanCallback() {
- public void execute(Boolean confirmed) {
- if (confirmed) {
- int[] selectedIds = getSelectedIds(selections);
- SC.say("setting servers to maintenance mode, ids: " + selectedIds);
- GWTServiceLookup.getCloudService().deletePartitionEvents(selectedIds,
- new AsyncCallback<Void>() {
- public void onSuccess(Void arg0) {
- // TODO: msg
- Message msg = new Message(MSG
- .view_admin_plugins_disabledServerPlugins("sdf"), Message.Severity.Info);
- CoreGUI.getMessageCenter().notify(msg);
- refresh();
- }
-
- public void onFailure(Throwable caught) {
- // TODO: msg
- CoreGUI.getErrorHandler().handleError(
- MSG.view_admin_plugins_disabledServerPluginsFailure() + " "
- + caught.getMessage(), caught);
- refreshTableInfo();
- }
+ addTableAction(TableAction.REMOVE_SELECTED);
+ addTableAction(TableAction.PURGE_ALL);
+ addTableAction(TableAction.FORCE_REPARTITION);
+ }
- });
- } else {
- refreshTableInfo();
- }
- }
- });
+ private void addTableAction(final TableAction action) {
+ addTableAction(extendLocatorId(action.toString()), action.title, null, new AuthorizedTableAction(this,
+ action.enablement, Permission.MANAGE_SETTINGS) {
+ public void executeAction(final ListGridRecord[] selections, Object actionValue) {
+ String eventTypes = getSelectedEventTypes(selections).toString();
+ String message = null;
+ switch (action) {
+ case REMOVE_SELECTED:
+ message = MSG.view_adminTopology_message_removePEventConfirm(eventTypes);
+ break;
+ case PURGE_ALL:
+ message = MSG.view_adminTopology_message_removeAllPEventConfirm();
+ break;
+ case FORCE_REPARTITION:
+ message = MSG.view_adminTopology_message_forceRepartition();
+ break;
+ default:
+ throw new IllegalArgumentException("unknown table action type");
}
- });
-
- addTableAction(extendLocatorId("purgeAll"), MSG.view_adminTopology_partitionEvents_purgeAll(),
- MSG.common_msg_areYouSure(), new AuthorizedTableAction(this, TableActionEnablement.ALWAYS,
- Permission.MANAGE_SETTINGS) {
- public void executeAction(final ListGridRecord[] selections, Object actionValue) {
- // TODO: msg
- // String message = MSG.view_admin_plugins_serverDisableConfirm(selectedNames.toString());
- String message = "Really? Normal? For all I've done for you? ";
- SC.ask(message, new BooleanCallback() {
- public void execute(Boolean confirmed) {
- if (confirmed) {
- int[] selectedIds = getSelectedIds(selections);
- SC.say("setting servers to maintenance mode, ids: " + selectedIds);
- GWTServiceLookup.getCloudService().purgeAllEvents(new AsyncCallback<Void>() {
- public void onSuccess(Void arg0) {
- // TODO: msg
- Message msg = new Message(MSG.view_admin_plugins_disabledServerPlugins("sdf"),
- Message.Severity.Info);
- CoreGUI.getMessageCenter().notify(msg);
- refresh();
+ SC.ask(message, new BooleanCallback() {
+ public void execute(Boolean confirmed) {
+ if (confirmed) {
+ int[] selectedIds = getSelectedIds(selections);
+
+ AsyncCallback<Void> callback = new AsyncCallback<Void>() {
+ public void onSuccess(Void arg0) {
+ String msgString = null;
+ switch (action) {
+ case REMOVE_SELECTED:
+ msgString = MSG.view_adminTopology_message_removedPEvent(String
+ .valueOf(selections.length));
+ break;
+ case PURGE_ALL:
+ msgString = MSG.view_adminTopology_message_removedAllPEvent();
+ break;
+ case FORCE_REPARTITION:
+ msgString = MSG.view_adminTopology_message_repartitioned();
}
-
- public void onFailure(Throwable caught) {
- // TODO: msg
- CoreGUI.getErrorHandler().handleError(
- MSG.view_admin_plugins_disabledServerPluginsFailure() + " "
- + caught.getMessage(), caught);
- refreshTableInfo();
+ Message msg = new Message(msgString, Message.Severity.Info);
+ CoreGUI.getMessageCenter().notify(msg);
+ refresh();
+ }
+
+ public void onFailure(Throwable caught) {
+ String msgString = null;
+ switch (action) {
+ case REMOVE_SELECTED:
+ msgString = MSG.view_adminTopology_message_removePEventFail(String
+ .valueOf(selections.length));
+ break;
+ case PURGE_ALL:
+ msgString = MSG.view_adminTopology_message_removedAllPEventFail();
+ break;
+ case FORCE_REPARTITION:
+ msgString = MSG.view_adminTopology_message_forceRepartitionFail();
}
-
- });
- } else {
- refreshTableInfo();
+ CoreGUI.getErrorHandler()
+ .handleError(msgString + " " + caught.getMessage(), caught);
+ refreshTableInfo();
+ }
+
+ };
+ switch (action) {
+ case REMOVE_SELECTED:
+ GWTServiceLookup.getCloudService().deletePartitionEvents(selectedIds, callback);
+ break;
+ case PURGE_ALL:
+ GWTServiceLookup.getCloudService().purgeAllEvents(callback);
+ break;
+ case FORCE_REPARTITION:
+ GWTServiceLookup.getCloudService().cloudPartitionEventRequest(callback);
}
- }
- });
- }
- });
-
- addTableAction(extendLocatorId("forceRepartition"), MSG.view_adminTopology_partitionEvents_forceRepartition(),
- new AuthorizedTableAction(this, TableActionEnablement.ALWAYS, Permission.MANAGE_SETTINGS) {
- public void executeAction(final ListGridRecord[] selections, Object actionValue) {
- // List<String> selectedNames = getSelectedNames(selections);
- // TODO: msg
- // String message = MSG.view_admin_plugins_serverDisableConfirm(selectedNames.toString());
- String message = "Really? Repartition? For all I've done for you? ";// + selectedNames;
- SC.ask(message, new BooleanCallback() {
- public void execute(Boolean confirmed) {
- if (confirmed) {
- SC.say("repartition is now forced");
- GWTServiceLookup.getCloudService().cloudPartitionEventRequest(
- new AsyncCallback<Void>() {
- public void onSuccess(Void arg0) {
- // TODO: msg
- Message msg = new Message(MSG
- .view_admin_plugins_disabledServerPlugins("sdf"), Message.Severity.Info);
- CoreGUI.getMessageCenter().notify(msg);
- refresh();
- }
- public void onFailure(Throwable caught) {
- // TODO: msg
- CoreGUI.getErrorHandler().handleError(
- MSG.view_admin_plugins_disabledServerPluginsFailure() + " "
- + caught.getMessage(), caught);
- refreshTableInfo();
- }
-
- });
- } else {
- refreshTableInfo();
- }
+ } else {
+ refreshTableInfo();
}
- });
- }
- });
+ }
+ });
+ }
+ });
}
private int[] getSelectedIds(ListGridRecord[] selections) {
@@ -285,16 +238,16 @@ public class PartitionEventTableView extends TableSection<PartitionEventDatasour
return ids;
}
- // private List<String> getSelectedNames(ListGridRecord[] selections) {
- // if (selections == null) {
- // return new ArrayList<String>(0);
- // }
- // List<String> ids = new ArrayList<String>(selections.length);
- // for (ListGridRecord selection : selections) {
- // ids.add(selection.getAttributeAsString(FIELD_NAME));
- // }
- // return ids;
- // }
+ private List<String> getSelectedEventTypes(ListGridRecord[] selections) {
+ if (selections == null) {
+ return new ArrayList<String>(0);
+ }
+ List<String> ids = new ArrayList<String>(selections.length);
+ for (ListGridRecord selection : selections) {
+ ids.add(selection.getAttributeAsString(PartitionEventDatasourceField.FIELD_EVENT_TYPE.propertyName()));
+ }
+ return ids;
+ }
@Override
public ViewName getViewName() {
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDatasource.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDatasource.java
index 2d1a75e..0e7fd48 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDatasource.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDatasource.java
@@ -21,7 +21,6 @@ package org.rhq.enterprise.gui.coregui.client.admin.topology;
import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerDatasourceField.FIELD_ADDRESS;
import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerDatasourceField.FIELD_AFFINITY_GROUP;
import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerDatasourceField.FIELD_AFFINITY_GROUP_ID;
-import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerDatasourceField.FIELD_AGENT_COUNT;
import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerDatasourceField.FIELD_ID;
import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerDatasourceField.FIELD_MTIME;
import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerDatasourceField.FIELD_NAME;
@@ -47,6 +46,7 @@ import org.rhq.core.domain.criteria.ServerCriteria;
import org.rhq.core.domain.util.PageControl;
import org.rhq.core.domain.util.PageList;
import org.rhq.core.domain.util.PageOrdering;
+import org.rhq.enterprise.gui.coregui.client.CoreGUI;
import org.rhq.enterprise.gui.coregui.client.components.table.TimestampCellFormatter;
import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup;
import org.rhq.enterprise.gui.coregui.client.util.Log;
@@ -56,7 +56,7 @@ import org.rhq.enterprise.gui.coregui.client.util.Log;
*
*/
public class ServerDatasource extends AbstractServerNodeDatasource<Server, ServerCriteria> {
-
+
// filters
public static final String FILTER_ADDRESS = FIELD_ADDRESS.propertyName();
public static final String FILTER_PORT = FIELD_PORT.propertyName();
@@ -66,13 +66,10 @@ public class ServerDatasource extends AbstractServerNodeDatasource<Server, Serve
public static final String FILTER_AFFINITY_GROUP_ID = "affinityGroupId";
private final Integer affinityGroupId;
-
- private final boolean fetchMembers;
- public ServerDatasource(Integer affinityGroupId, boolean fetchMembers) {
+ public ServerDatasource(Integer affinityGroupId) {
super();
this.affinityGroupId = affinityGroupId;
- this.fetchMembers = fetchMembers;
List<DataSourceField> fields = addDataSourceFields();
addFields(fields);
}
@@ -107,36 +104,28 @@ public class ServerDatasource extends AbstractServerNodeDatasource<Server, Serve
ListGridField affinityGroupIdField = FIELD_AFFINITY_GROUP_ID.getListGridField();
affinityGroupIdField.setHidden(true);
fields.add(affinityGroupIdField);
- fields.add(FIELD_AGENT_COUNT.getListGridField("75"));
return fields;
}
@Override
protected void executeFetch(final DSRequest request, final DSResponse response, ServerCriteria criteria) {
- if (affinityGroupId == null) {
- return;
+ if (affinityGroupId != null) {
+ criteria.addFilterAffinityGroupId(affinityGroupId);
}
- final PageControl pc = getPageControl(request);
- AsyncCallback<PageList<Server>> callback = new AsyncCallback<PageList<Server>>() {
+ GWTServiceLookup.getCloudService().findServersByCriteria(criteria, new AsyncCallback<PageList<Server>>() {
public void onSuccess(PageList<Server> result) {
response.setData(buildRecords(result));
response.setTotalRows(result.size());
processResponse(request.getRequestId(), response);
}
- @Override
public void onFailure(Throwable t) {
- //todo: CoreGUI.getErrorHandler().handleError(MSG.view_admin_plugins_loadFailure(), t);
+ CoreGUI.getErrorHandler().handleError(MSG.view_adminTopology_message_fetchServers2Fail(), t);
response.setStatus(DSResponse.STATUS_FAILURE);
processResponse(request.getRequestId(), response);
}
- };
-
- if(fetchMembers) {
- criteria.addFilterAffinityGroupId(affinityGroupId);
- }
- GWTServiceLookup.getCloudService().findServersByCriteria(criteria, callback);
+ });
}
/**
@@ -146,6 +135,7 @@ public class ServerDatasource extends AbstractServerNodeDatasource<Server, Serve
* @param request the request to turn into a page control
* @return the page control for passing to criteria and other queries
*/
+ @Override
protected PageControl getPageControl(DSRequest request) {
// Initialize paging.
PageControl pageControl = new PageControl(0, getDataPageSize());
@@ -167,10 +157,6 @@ public class ServerDatasource extends AbstractServerNodeDatasource<Server, Serve
@Override
public Server copyValues(Record from) {
throw new UnsupportedOperationException("ServerDatasource.copyValues(Record from)");
-// Server server = new Server();
-// server.setId(from.getAttributeAsInt(FIELD_ID.propertyName()));
-// server.setName(from.getAttributeAsString(FIELD_NAME.propertyName()));
-// return server;
}
@Override
@@ -193,7 +179,7 @@ public class ServerDatasource extends AbstractServerNodeDatasource<Server, Serve
@Override
protected ServerCriteria getFetchCriteria(DSRequest request) {
ServerCriteria criteria = new ServerCriteria();
-// printRequestCriteria(request);
+ // printRequestCriteria(request);
criteria.addFilterId(getFilter(request, FIELD_ID.propertyName(), Integer.class));
criteria.addFilterName(getFilter(request, FIELD_NAME.propertyName(), String.class));
criteria.addFilterAddress(getFilter(request, FILTER_ADDRESS, String.class));
@@ -202,7 +188,7 @@ public class ServerDatasource extends AbstractServerNodeDatasource<Server, Serve
criteria.addFilterOperationMode(getFilter(request, FILTER_OPERATION_MODE, OperationMode.class));
criteria.addFilterComputePower(getFilter(request, FILTER_COMPUTE_POWER, Integer.class));
criteria.addFilterAffinityGroupId(getFilter(request, FILTER_AFFINITY_GROUP_ID, Integer.class));
-
+
//@todo: Remove me when finished debugging search expression
Log.debug(" *** ServerCriteria Search String: " + getFilter(request, "search", String.class));
criteria.setSearchExpression(getFilter(request, "search", String.class));
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDatasourceField.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDatasourceField.java
index 09577d8..6dbcee3 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDatasourceField.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDatasourceField.java
@@ -29,9 +29,8 @@ import org.rhq.enterprise.gui.coregui.client.CoreGUI;
public enum ServerDatasourceField {
FIELD_ID("id", CoreGUI.getMessages().common_title_id()),
-
- // todo: i18n
- FIELD_ORDINAL("ordinal", "Order"),
+
+ FIELD_ORDINAL("ordinal", CoreGUI.getMessages().view_adminTopology_message_order()),
FIELD_NAME("name", CoreGUI.getMessages().common_title_name()),
@@ -42,13 +41,13 @@ public enum ServerDatasourceField {
FIELD_PORT("port", CoreGUI.getMessages().view_adminTopology_server_nonSecurePort()),
FIELD_SECURE_PORT("securePort", CoreGUI.getMessages().view_adminTopology_server_securePort()),
-
+
FIELD_CTIME("ctime", CoreGUI.getMessages().view_adminTopology_serverDetail_installationDate()),
FIELD_MTIME("mtime", CoreGUI.getMessages().view_adminTopology_server_lastUpdateTime()),
FIELD_AFFINITY_GROUP("affinityGroup", CoreGUI.getMessages().view_adminTopology_server_affinityGroup()),
-
+
FIELD_AFFINITY_GROUP_ID("affinityGroupId", "affinityGroupId"),
FIELD_AGENT_COUNT("agentCount", CoreGUI.getMessages().view_adminTopology_server_agentCount());
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerTableView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerTableView.java
index b50e18c..d38d95d 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerTableView.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerTableView.java
@@ -79,7 +79,7 @@ public class ServerTableView extends
setHeight100();
setWidth100();
if (isAffinityGroupId) {
- setDataSource(new ServerDatasource(id, true));
+ setDataSource(new ServerDatasource(id));
} else {
setDataSource(showActions ? new ServerWithAgentCountDatasource() : new FailoverListItemDatasource(id));
}
@@ -96,6 +96,7 @@ public class ServerTableView extends
listGrid.sort(FIELD_NAME, SortDirection.ASCENDING);
showCommonActions();
} else if (isAffinityGroupId) {
+ listGrid.sort(FIELD_NAME, SortDirection.ASCENDING);
// displayed from AffinityGroupDetailView
showUpdateMembersAction();
} else {
@@ -141,7 +142,7 @@ public class ServerTableView extends
}
private void showCommonActions() {
- addChangeOperationModeAction(OperationMode.NORMAL, MSG.view_adminTopology_server_setMaintenance());
+ addChangeOperationModeAction(OperationMode.NORMAL, MSG.view_adminTopology_server_setNormal());
addChangeOperationModeAction(OperationMode.MAINTENANCE, MSG.view_adminTopology_server_setMaintenance());
addTableAction(extendLocatorId("removeSelected"), MSG.view_adminTopology_server_removeSelected(), null,
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerWithAgentCountDatasource.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerWithAgentCountDatasource.java
index af52e7a..1b6609b 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerWithAgentCountDatasource.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerWithAgentCountDatasource.java
@@ -27,25 +27,28 @@ import com.smartgwt.client.data.DSRequest;
import com.smartgwt.client.data.DSResponse;
import com.smartgwt.client.data.DataSourceField;
import com.smartgwt.client.data.Record;
+import com.smartgwt.client.widgets.grid.HoverCustomizer;
import com.smartgwt.client.widgets.grid.ListGridField;
import com.smartgwt.client.widgets.grid.ListGridRecord;
import org.rhq.core.domain.cloud.composite.ServerWithAgentCountComposite;
import org.rhq.core.domain.criteria.Criteria;
import org.rhq.core.domain.util.PageControl;
+import org.rhq.enterprise.gui.coregui.client.CoreGUI;
import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup;
/**
* @author Jirka Kremser
*
*/
-public class ServerWithAgentCountDatasource extends AbstractServerNodeDatasource<ServerWithAgentCountComposite, Criteria> {
-
+public class ServerWithAgentCountDatasource extends
+ AbstractServerNodeDatasource<ServerWithAgentCountComposite, Criteria> {
+
private final ServerDatasource serverDatasource;
public ServerWithAgentCountDatasource() {
super();
- serverDatasource = new ServerDatasource(null, false);
+ serverDatasource = new ServerDatasource(null);
List<DataSourceField> fields = addDataSourceFields();
addFields(fields);
}
@@ -56,7 +59,18 @@ public class ServerWithAgentCountDatasource extends AbstractServerNodeDatasource
}
public List<ListGridField> getListGridFields() {
- return serverDatasource.getListGridFields();
+ List<ListGridField> fields = serverDatasource.getListGridFields();
+ ListGridField agentCountField = FIELD_AGENT_COUNT.getListGridField("75");
+ agentCountField.setHoverCustomizer(new HoverCustomizer() {
+ public String hoverHTML(Object value, ListGridRecord record, int rowNum, int colNum) {
+ return MSG.view_adminTopology_message_agentsCount(FIELD_AGENT_COUNT.propertyName());
+ // "There are " + record.getAttributeAsInt(FIELD_AGENT_COUNT.propertyName())
+ // + " agents registered to this server.";
+ }
+ });
+ agentCountField.setShowHover(true);
+ fields.add(agentCountField);
+ return fields;
}
@Override
@@ -72,20 +86,14 @@ public class ServerWithAgentCountDatasource extends AbstractServerNodeDatasource
@Override
public void onFailure(Throwable t) {
- //todo: CoreGUI.getErrorHandler().handleError(MSG.view_admin_plugins_loadFailure(), t);
+ CoreGUI.getErrorHandler().handleError(MSG.view_adminTopology_message_fetchServers2Fail(), t);
response.setStatus(DSResponse.STATUS_FAILURE);
processResponse(request.getRequestId(), response);
}
});
}
- /**
- * Returns a prepopulated PageControl based on the provided DSRequest. This will set sort fields,
- * pagination, but *not* filter fields.
- *
- * @param request the request to turn into a page control
- * @return the page control for passing to criteria and other queries
- */
+ @Override
protected PageControl getPageControl(DSRequest request) {
return serverDatasource.getPageControl(request);
}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/CloudGWTService.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/CloudGWTService.java
index df83ba8..4b92d6f 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/CloudGWTService.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/CloudGWTService.java
@@ -41,72 +41,197 @@ import org.rhq.core.domain.util.PageControl;
import org.rhq.core.domain.util.PageList;
/**
+ * API for HAAC console, mostly CRUD operations for entities <code>Server</code>, <code>Agent</code>,
+ * <code>PartitionEvent</code> and <code>AffinityGroup</code>.
+ *
* @author Jiri Kremser
*/
public interface CloudGWTService extends RemoteService {
/**
+ * Returns all the servers with agent count.
*
- * @return a list of all available servers (the servers in MAINTENANCE mode are included as well)
+ * @param pageControl the page control instance
+ * @return a list of all available servers (the servers in <code>MAINTENANCE</code> or <code>DOWN</code> mode are included as well)
* @throws RuntimeException
*/
- List<ServerWithAgentCountComposite> getServers(PageControl pc) throws RuntimeException;
-
- Server getServerById(int serverId) throws RuntimeException;
-
- List<Agent> getAgentsByServerName(String serverName) throws RuntimeException;
+ List<ServerWithAgentCountComposite> getServers(PageControl pageControl) throws RuntimeException;
+ /**
+ * Deletes the servers with provided ids.
+ *
+ * @param serverIds array of server ids
+ * @throws RuntimeException
+ */
void deleteServers(int[] serverIds) throws RuntimeException;
+ /**
+ * Updates the server mode to particular servers.
+ *
+ * @param serverIds the array of ids of the servers whose modes are object of update
+ * @param mode the new operation mode
+ * @throws RuntimeException
+ */
void updateServerMode(int[] serverIds, Server.OperationMode mode) throws RuntimeException;
+ /**
+ * Updates the server.
+ *
+ * @param server instance of Server
+ * @throws RuntimeException
+ */
void updateServer(Server server) throws RuntimeException;
- List<FailoverListDetails> getFailoverListDetailsByAgentId(int agentId, PageControl pc) throws RuntimeException;;
+ /**
+ * Returns the list of <code>FailoverListDetails</code> for a particular agent.
+ *
+ * @param agentId the id the agent
+ * @param pageControl the page control instance
+ * @return a list of <code>FailoverListDetails</code> instances
+ * @throws RuntimeException
+ */
+ List<FailoverListDetails> getFailoverListDetailsByAgentId(int agentId, PageControl pageControl) throws RuntimeException;;
+ /**
+ * Finder for <code>PartitionEvent</code> instances
+ *
+ * @param criteria the criteria for finding partition events
+ * @return a list of <code>codePartitionEvent</code> instances
+ * @throws RuntimeException
+ */
PageList<PartitionEvent> findPartitionEventsByCriteria(PartitionEventCriteria criteria) throws RuntimeException;
+ /**
+ * Finder for <code>Server</code> instances
+ *
+ * @param criteria the criteria for finding servers
+ * @return a list of <code>Server</code> instances
+ * @throws RuntimeException
+ */
PageList<Server> findServersByCriteria(ServerCriteria criteria) throws RuntimeException;
+ /**
+ * Finder for <code>Agent</code> instances
+ *
+ * @param criteria the criteria for finding agents
+ * @return a list of <code>Agent</code> instances
+ * @throws RuntimeException
+ */
PageList<Agent> findAgentsByCriteria(AgentCriteria criteria) throws RuntimeException;
+ /**
+ * Request forcing the repartition of the cluster. All agents should eventually reconnects to its most preferred server
+ * (The first one in their failover list.)
+ *
+ * @throws RuntimeException
+ */
void cloudPartitionEventRequest() throws RuntimeException;
+ /**
+ * Deletes all the partition events.
+ *
+ * @throws RuntimeException
+ */
void purgeAllEvents() throws RuntimeException;
+ /**
+ * Deletes some partition events.
+ *
+ * @param eventIds the list of ids of partition events to delete
+ * @throws RuntimeException
+ */
void deletePartitionEvents(int[] eventIds) throws RuntimeException;
+ /**
+ * Returns the list of <code>PartitionEventDetails</code> instances.
+ *
+ * @param partitionEventId
+ * @param pageControl the page control instance
+ * @return list of <code>PartitionEventDetails</code> instances
+ * @throws RuntimeException
+ */
PageList<PartitionEventDetails> getPartitionEventDetails(int partitionEventId, PageControl pageControl)
throws RuntimeException;
+ /**
+ * Returns the list with <code>AffinityGroupCountComposite</code> instances, i.e. affinity groups with agent and server
+ * counts.
+ *
+ * @param pageControl the page control instance
+ * @return list with <code>AffinityGroupCountComposite</code> instances
+ * @throws RuntimeException
+ */
PageList<AffinityGroupCountComposite> getAffinityGroupCountComposites(PageControl pageControl)
throws RuntimeException;
+ /**
+ * Deletes some affinity groups.
+ *
+ * @param affinityGroupIds array of ids of affinity group to delete
+ * @return the number of deleted affinity groups
+ * @throws RuntimeException
+ */
int deleteAffinityGroups(int[] affinityGroupIds) throws RuntimeException;
+ /**
+ * Creates new affinity group.
+ *
+ * @param affinityGroup instance of <code>AffinityGroup</code> to create
+ * @return the new id of the affinity group
+ * @throws RuntimeException
+ */
int createAffinityGroup(AffinityGroup affinityGroup) throws RuntimeException;
+ /**
+ * Updates existing affinity group.
+ *
+ * @param affinityGroup instance of <code>AffinityGroup</code>
+ * @throws RuntimeException
+ */
void updateAffinityGroup(AffinityGroup affinityGroup) throws RuntimeException;
- PageList<Server> getServerMembersByAffinityGroupId(int affinityGroupId, PageControl pageControl)
- throws RuntimeException;
-
- PageList<Server> getServerNonMembersByAffinityGroupId(int affinityGroupId, PageControl pageControl)
- throws RuntimeException;
-
- PageList<Agent> getAgentMembersByAffinityGroupId(int affinityGroupId, PageControl pageControl)
- throws RuntimeException;
-
- PageList<Agent> getAgentNonMembersByAffinityGroupId(int affinityGroupId, PageControl pageControl)
- throws RuntimeException;
-
+ /**
+ * Returns the affinity group based on the provided id.
+ *
+ * @param affinityGroupId the id of an affinity group
+ * @return the instance of <code>AffinityGroup</code>
+ * @throws RuntimeException
+ */
AffinityGroup getAffinityGroupById(int affinityGroupId) throws RuntimeException;
+ /**
+ * Add servers to an existing affinity group.
+ *
+ * @param affinityGroupId id of the affinity group into which the servers should be added
+ * @param serverIds array of ids of servers to be added
+ * @throws RuntimeException
+ */
void addServersToGroup(int affinityGroupId, Integer[] serverIds) throws RuntimeException;
+ /**
+ * Removes the servers from the affinity group. There is no need to provide the id of affinity group,
+ * because it is part of the server data.
+ *
+ * @param serverIds array of ids of servers to be removed
+ * @throws RuntimeException
+ */
void removeServersFromGroup(Integer[] serverIds) throws RuntimeException;
+ /**
+ * Add agents to an existing affinity group.
+ *
+ * @param affinityGroupId id of the affinity group into which the agents should be added
+ * @param agentIds array of ids of agents to be added
+ * @throws RuntimeException
+ */
void addAgentsToGroup(int affinityGroupId, Integer[] agentIds) throws RuntimeException;
+ /**
+ * Removes the agents from the affinity group. There is no need to provide the id of affinity group,
+ * because it is part of the agent data.
+ *
+ * @param agentIds array of ids of agents to be removed
+ * @throws RuntimeException
+ */
void removeAgentsFromGroup(Integer[] agentIds) throws RuntimeException;
}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/CloudGWTServiceImpl.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/CloudGWTServiceImpl.java
index db7ec3c..dd63fa0 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/CloudGWTServiceImpl.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/CloudGWTServiceImpl.java
@@ -22,7 +22,6 @@
*/
package org.rhq.enterprise.gui.coregui.server.gwt;
-import java.util.ArrayList;
import java.util.List;
import org.apache.commons.lang.ArrayUtils;
@@ -58,7 +57,7 @@ public class CloudGWTServiceImpl extends AbstractGWTServiceImpl implements Cloud
private static final long serialVersionUID = 1L;
private CloudManagerLocal cloudManager = LookupUtil.getCloudManager();
-
+
private AgentManagerLocal agentManager = LookupUtil.getAgentManager();
private PartitionEventManagerLocal partitionEventManager = LookupUtil.getPartitionEventManager();
@@ -76,26 +75,6 @@ public class CloudGWTServiceImpl extends AbstractGWTServiceImpl implements Cloud
}
@Override
- public Server getServerById(int serverId) throws RuntimeException {
- try {
- return SerialUtility.prepare(cloudManager.getServerById(serverId), "CloudGWTServiceImpl.getServerById");
- } catch (Throwable t) {
- throw getExceptionToThrowToClient(t);
- }
- }
-
- @Override
- public List<Agent> getAgentsByServerName(String serverName) throws RuntimeException {
- try {
- List<Agent> persistentBag = SerialUtility.prepare(cloudManager.getAgentsByServerName(serverName),
- "CloudGWTServiceImpl.getAgentsByServerName");
- return new ArrayList<Agent>(persistentBag);
- } catch (Throwable t) {
- throw getExceptionToThrowToClient(t);
- }
- }
-
- @Override
public void deleteServers(int[] serverIds) throws RuntimeException {
try {
cloudManager.deleteServers(ArrayUtils.toObject(serverIds));
@@ -135,24 +114,21 @@ public class CloudGWTServiceImpl extends AbstractGWTServiceImpl implements Cloud
throw getExceptionToThrowToClient(t);
}
}
-
+
@Override
- public PageList<Server> findServersByCriteria(ServerCriteria criteria)
- throws RuntimeException {
+ public PageList<Server> findServersByCriteria(ServerCriteria criteria) throws RuntimeException {
try {
- return SerialUtility.prepare(
- cloudManager.findServersByCriteria(getSessionSubject(), criteria),
+ return SerialUtility.prepare(cloudManager.findServersByCriteria(getSessionSubject(), criteria),
"CloudGWTServiceImpl.findServersByCriteria");
} catch (Throwable t) {
throw getExceptionToThrowToClient(t);
}
}
-
+
@Override
public PageList<Agent> findAgentsByCriteria(AgentCriteria criteria) throws RuntimeException {
try {
- return SerialUtility.prepare(
- agentManager.findAgentsByCriteria(getSessionSubject(), criteria),
+ return SerialUtility.prepare(agentManager.findAgentsByCriteria(getSessionSubject(), criteria),
"CloudGWTServiceImpl.findAgentsByCriteria");
} catch (Throwable t) {
throw getExceptionToThrowToClient(t);
@@ -229,54 +205,6 @@ public class CloudGWTServiceImpl extends AbstractGWTServiceImpl implements Cloud
}
@Override
- public PageList<Server> getServerMembersByAffinityGroupId(int affinityGroupId, PageControl pageControl)
- throws RuntimeException {
- try {
- return SerialUtility.prepare(
- affinityGroupManager.getServerMembers(getSessionSubject(), affinityGroupId, pageControl),
- "CloudGWTServiceImpl.getServerMembersByAffinityGroupId");
- } catch (Throwable t) {
- throw getExceptionToThrowToClient(t);
- }
- }
-
- @Override
- public PageList<Server> getServerNonMembersByAffinityGroupId(int affinityGroupId, PageControl pageControl)
- throws RuntimeException {
- try {
- return SerialUtility.prepare(
- affinityGroupManager.getServerNonMembers(getSessionSubject(), affinityGroupId, pageControl),
- "CloudGWTServiceImpl.getServerNonMembersByAffinityGroupId");
- } catch (Throwable t) {
- throw getExceptionToThrowToClient(t);
- }
- }
-
- @Override
- public PageList<Agent> getAgentMembersByAffinityGroupId(int affinityGroupId, PageControl pageControl)
- throws RuntimeException {
- try {
- return SerialUtility.prepare(
- affinityGroupManager.getAgentMembers(getSessionSubject(), affinityGroupId, pageControl),
- "CloudGWTServiceImpl.getAgentMembersByAffinityGroupId");
- } catch (Throwable t) {
- throw getExceptionToThrowToClient(t);
- }
- }
-
- @Override
- public PageList<Agent> getAgentNonMembersByAffinityGroupId(int affinityGroupId, PageControl pageControl)
- throws RuntimeException {
- try {
- return SerialUtility.prepare(
- affinityGroupManager.getAgentNonMembers(getSessionSubject(), affinityGroupId, pageControl),
- "CloudGWTServiceImpl.getAgentNonMembersByAffinityGroupId");
- } catch (Throwable t) {
- throw getExceptionToThrowToClient(t);
- }
- }
-
- @Override
public AffinityGroup getAffinityGroupById(int affinityGroupId) throws RuntimeException {
try {
return SerialUtility.prepare(affinityGroupManager.getById(getSessionSubject(), affinityGroupId),
@@ -322,7 +250,6 @@ public class CloudGWTServiceImpl extends AbstractGWTServiceImpl implements Cloud
}
}
-
@Override
public void updateServer(Server server) throws RuntimeException {
try {
@@ -332,7 +259,6 @@ public class CloudGWTServiceImpl extends AbstractGWTServiceImpl implements Cloud
}
}
-
@Override
public void updateAffinityGroup(AffinityGroup affinityGroup) throws RuntimeException {
try {
diff --git a/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages.properties b/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages.properties
index ceaad0d..56ed2ac 100644
--- a/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages.properties
+++ b/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages.properties
@@ -552,16 +552,45 @@ view_adminTopology_agentDetail_address = Address
view_adminTopology_agentDetail_agentFailoverList = Agent Failover List
view_adminTopology_agentDetail_currentServer = Current Server
view_adminTopology_agentDetail_token = Token
-view_adminTopology_message_fetchServerFail=Unable to fetch server details for server with id {0}.
-view_adminTopology_message_fetchAgentFail=Unable to fetch agent details for agent with id {0}.
-view_adminTopology_message_removeServerConfirm=Do you really want to remove servers [{0}]?
-view_adminTopology_message_removeServerFail=Unable to remove {0} server(s).
-view_adminTopology_message_removedServer=Removed {0} server(s).
-view_adminTopology_message_serverUpdated=The server {0} was successfully updated.
-view_adminTopology_message_serverUpdateFail=Unable to update server {0}.
-view_adminTopology_message_setMode=Set {0} server(s) to {1} mode.
-view_adminTopology_message_setModeConfirm=Do you really want to set servers [{0}] to {1} mode?
-view_adminTopology_message_setModeFail=Unable to set {0} server(s) to {1} mode.
+view_adminTopology_message_agentsCount = There are {0} agents registered to this server. This number does not correspond to the number of currently connected agents.
+view_adminTopology_message_agroupAssingAgentsFail = Unable to assign agents to the affinity group with id {0}.
+view_adminTopology_message_agroupAssingServersFail = Unable to assign servers to the affinity group with id {0}.
+view_adminTopology_message_agroupRemovingAgentsFail = Unable to remove agents from the affinity group with id {0}.
+view_adminTopology_message_agroupRemovingServersFail = Unable to remove servers from the affinity group with id {0}.
+view_adminTopology_message_agroupRenamed = Affinity group with id {0} and name {1} was renamed to {2}.
+view_adminTopology_message_agroupRenamingFail = Unable to rename affinity group with id {0} and name {1}.
+view_adminTopology_message_fetchAgentFail = Unable to fetch agent details for agent with id {0}.
+view_adminTopology_message_fetchAgentsFail = Unable to fetch agent(s) for affinity group with id {0}.
+view_adminTopology_message_fetchAgents2Fail = Unable to fetch agents.
+view_adminTopology_message_fetchAgroupFail = Unable to fetch affinity group details for group with id {0}.
+view_adminTopology_message_fetchAgroupsFail = Unable to fetch affinity group(s).
+view_adminTopology_message_fetchFailOverLists = Unable to fetch fail over list details.
+view_adminTopology_message_fetchPEventDetailsFail = Unable to fetch partition event details for event with id {0}.
+view_adminTopology_message_fetchPEventFail = Unable to fetch partition events.
+view_adminTopology_message_fetchServerFail = Unable to fetch server details for server with id {0}.
+view_adminTopology_message_fetchServersFail = Unable to fetch server(s) for affinity group with id {0}.
+view_adminTopology_message_fetchServers2Fail = Unable to fetch servers.
+view_adminTopology_message_forceRepartition = Do you really want to force a repartition of whole cluster? It will force all the agents to connect to its most preferred server.
+view_adminTopology_message_forceRepartitionFail = Unable to run repartition.
+view_adminTopology_message_order = Order
+view_adminTopology_message_removeAGroupsFail = Unable to remove following affinity groups(s) {0}.
+view_adminTopology_message_removeAGroupsConfirm = Do you really want to remove following affinity groups {0}?
+view_adminTopology_message_removeAllPEventConfirm = Do you really want to purge all partition events?
+view_adminTopology_message_removePEventConfirm = Do you really want to remove following partition events {0}?
+view_adminTopology_message_removePEventFail = Unable to remove {0} partition events(s).
+view_adminTopology_message_removeServerConfirm = Do you really want to remove servers {0}?
+view_adminTopology_message_removeServerFail = Unable to remove {0} server(s).
+view_adminTopology_message_removedAGroups = Removed {0} affinity group(s).
+view_adminTopology_message_removedAllPEvent = All partition events have been purged.
+view_adminTopology_message_removedAllPEventFail = Unable to purge all partition events.
+view_adminTopology_message_removedPEvent = Removed {0} partition events(s).
+view_adminTopology_message_removedServer = Removed {0} server(s).
+view_adminTopology_message_repartitioned = The cluster repartitioning was successfully invoked.
+view_adminTopology_message_serverUpdated = The server {0} was successfully updated.
+view_adminTopology_message_serverUpdateFail = Unable to update server {0}.
+view_adminTopology_message_setMode = Set {0} server(s) to {1} mode.
+view_adminTopology_message_setModeConfirm = Do you really want to set servers {0} to {1} mode?
+view_adminTopology_message_setModeFail = Unable to set {0} server(s) to {1} mode.
view_adminTopology_partitionEvents = Partition Events
view_adminTopology_partitionEvents_details = Details
view_adminTopology_partitionEvents_detailsFilter = Details Filter
diff --git a/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_cs.properties b/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_cs.properties
index 35b7b46..0775491 100644
--- a/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_cs.properties
+++ b/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_cs.properties
@@ -571,6 +571,45 @@ view_adminTopology_agentDetail_address = Adresa
view_adminTopology_agentDetail_agentFailoverList = Agentův failover list
view_adminTopology_agentDetail_currentServer = Současný server
view_adminTopology_agentDetail_token = Token
+view_adminTopology_message_agentsCount = K serveru je zaregistrováno {0} agentů. Toto číslo neznamená počet aktuálně připojených agentů.
+view_adminTopology_message_agroupAssingAgentsFail = Nepodařilo se přiřadit agenty do afinitní skupiny s id {0}.
+view_adminTopology_message_agroupAssingServersFail = Nepodařilo se přiřadit servery do afinitní skupiny s id {0}.
+view_adminTopology_message_agroupRemovingAgentsFail = Nepodařilo se odstranit agenty z afinitní skupiny s id {0}.
+view_adminTopology_message_agroupRemovingServersFail = Nepodařilo se odstranit servery z afinitní skupiny s id {0}.
+view_adminTopology_message_agroupRenamed = Afinitní skupina s id {0} a jménem {1} byla přejmenována na {2}.
+view_adminTopology_message_agroupRenamingFail = Nepodařilo se přejmenovat afinitní skupinu s id {0} a jménem {1}.
+view_adminTopology_message_fetchAgentFail = Nepodařilo se získat detaily o agentovi s id {0}.
+view_adminTopology_message_fetchAgentsFail = Nepodařilo se agenty pro afinitní skupinu s id {0}.
+view_adminTopology_message_fetchAgents2Fail = Nepodařilo se získat agenty.
+view_adminTopology_message_fetchAgroupFail = Nepodařilo se získat detaily o afinitní skupině s id {0}.
+view_adminTopology_message_fetchAgroupsFail = Nepodařilo se získat afinitní skupiny.
+view_adminTopology_message_fetchFailOverLists = Nepodařilo se získat dataily failover listu.
+view_adminTopology_message_fetchPEventDetailsFail = Nepodařilo se získat detaily události clusteru s id {0}.
+view_adminTopology_message_fetchPEventFail = Nepodařilo se získat události clusteru.
+view_adminTopology_message_fetchServerFail = Nepodařilo se získat detaily o serveru s id {0}.
+view_adminTopology_message_fetchServersFail = Nepodařilo se získat servery pro afinitní skupinu s id {0}.
+view_adminTopology_message_fetchServers2Fail = Nepodařilo se získat servery.
+view_adminTopology_message_forceRepartition = Přejete si opravdu vynutit přerozdělení celého clusteru? Přiměje to každého z agentů připojit se na svůj preferovaný server tzn. první ve failover listu.
+view_adminTopology_message_forceRepartitionFail = Nepodařilo se spustit přerozdělení.
+view_adminTopology_message_order = Pořadí
+view_adminTopology_message_removeAGroupsFail = Nepodařilo se odstranit následující afinitní skupiny {0}.
+view_adminTopology_message_removeAGroupsConfirm = Přejete si opravdu odstanit následující afinitní skupiny {0}?
+view_adminTopology_message_removeAllPEventConfirm = Přejete si opravdu odstranit všechny události clusteru?
+view_adminTopology_message_removePEventConfirm = Chcete opravdu odstranit následující události clusteru {0}?
+view_adminTopology_message_removePEventFail = Nepodařilo se odstranit {0} události clusteru.
+view_adminTopology_message_removeServerConfirm = Chcete opravdu odstranit následující servery {0}?
+view_adminTopology_message_removeServerFail = Nepodařilo se odstranit {0} serverů.
+view_adminTopology_message_removedAGroups = Odstraněno {0} afinitních skupin.
+view_adminTopology_message_removedAllPEvent = Všechnz události clusteru byly smazány.
+view_adminTopology_message_removedAllPEventFail = Nepodařilo se odstranit všechny události clusteru.
+view_adminTopology_message_removedPEvent = Odstraněno {0} událostí clusteru.
+view_adminTopology_message_removedServer =Odstraněno {0} serverů.
+view_adminTopology_message_repartitioned = Operace přerozdělení clusteru byla úspěšně spuštěna.
+view_adminTopology_message_serverUpdated = Server {0} byl úspěšně změněn.
+view_adminTopology_message_serverUpdateFail = Nepodařilo se změnit server {0}.
+view_adminTopology_message_setMode =Nastaveno {0} serverů do {1} módu.
+view_adminTopology_message_setModeConfirm = Přejete si opravdu nastavit servery {0} do {1} módu?
+view_adminTopology_message_setModeFail = Nepodařilo se nastavit {0} serverů do {1} módu.
view_adminTopology_partitionEvents = Události o clusteru
view_adminTopology_partitionEvents_details = Detaily
view_adminTopology_partitionEvents_detailsFilter = Filtrovat podle detailu
diff --git a/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_de.properties b/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_de.properties
index 6c2cc91..f9876c3 100644
--- a/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_de.properties
+++ b/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_de.properties
@@ -519,6 +519,45 @@ view_adminTopology_agents = Agenten
##view_adminTopology_agentDetail_agentFailoverList = Agent Failover List
##view_adminTopology_agentDetail_currentServer = Current Server
##view_adminTopology_agentDetail_token = Token
+##view_adminTopology_message_agentsCount = There are {0} agents registered to this server. This number doesn't correspond to the number of currently connected agents.
+##view_adminTopology_message_agroupAssingAgentsFail = Unable to assign agents to the affinity group with id {0}.
+##view_adminTopology_message_agroupAssingServersFail = Unable to assign servers to the affinity group with id {0}.
+##view_adminTopology_message_agroupRemovingAgentsFail = Unable to remove agents from the affinity group with id {0}.
+##view_adminTopology_message_agroupRemovingServersFail = Unable to remove servers from the affinity group with id {0}.
+##view_adminTopology_message_agroupRenamed = Affinity group with id {0} and name {1} was renamed to {2}.
+##view_adminTopology_message_agroupRenamingFail = Unable to rename affinity group with id {0} and name {1}.
+##view_adminTopology_message_fetchAgentFail = Unable to fetch agent details for agent with id {0}.
+##view_adminTopology_message_fetchAgentsFail = Unable to fetch agent(s) for affinity group with id {0}.
+##view_adminTopology_message_fetchAgents2Fail = Unable to fetch agents.
+##view_adminTopology_message_fetchAgroupFail = Unable to fetch affinity group details for group with id {0}.
+##view_adminTopology_message_fetchAgroupsFail = Unable to fetch affinity group(s).
+##view_adminTopology_message_fetchFailOverLists = Unable to fetch fail over list details.
+##view_adminTopology_message_fetchPEventDetailsFail = Unable to fetch partition event details for event with id {0}.
+##view_adminTopology_message_fetchPEventFail = Unable to fetch partition events.
+##view_adminTopology_message_fetchServerFail = Unable to fetch server details for server with id {0}.
+##view_adminTopology_message_fetchServersFail = Unable to fetch server(s) for affinity group with id {0}.
+##view_adminTopology_message_fetchServers2Fail = Unable to fetch servers.
+##view_adminTopology_message_forceRepartition = Do you really want to force a repartition of whole cluster? It will force all the agents to connect to its most preferred server.
+##view_adminTopology_message_forceRepartitionFail = Unable to run repartition.
+##view_adminTopology_message_order = Order
+##view_adminTopology_message_removeAGroupsFail = Unable to remove following affinity groups(s) {0}.
+##view_adminTopology_message_removeAGroupsConfirm = Do you really want to remove following affinity groups {0}?
+##view_adminTopology_message_removeAllPEventConfirm = Do you really want to purge all partition events?
+##view_adminTopology_message_removePEventConfirm = Do you really want to remove following partition events {0}?
+##view_adminTopology_message_removePEventFail = Unable to remove {0} partition events(s).
+##view_adminTopology_message_removeServerConfirm = Do you really want to remove servers {0}?
+##view_adminTopology_message_removeServerFail = Unable to remove {0} server(s).
+##view_adminTopology_message_removedAGroups = Removed {0} affinity group(s).
+##view_adminTopology_message_removedAllPEvent = All partition events have been purged.
+##view_adminTopology_message_removedAllPEventFail = Unable to purge all partition events.
+##view_adminTopology_message_removedPEvent = Removed {0} partition events(s).
+##view_adminTopology_message_removedServer = Removed {0} server(s).
+##view_adminTopology_message_repartitioned = The cluster repartitioning was successfully invoked.
+##view_adminTopology_message_serverUpdated = The server {0} was successfully updated.
+##view_adminTopology_message_serverUpdateFail = Unable to update server {0}.
+##view_adminTopology_message_setMode = Set {0} server(s) to {1} mode.
+##view_adminTopology_message_setModeConfirm = Do you really want to set servers {0} to {1} mode?
+##view_adminTopology_message_setModeFail = Unable to set {0} server(s) to {1} mode.
view_adminTopology_partitionEvents = Partitionierungs-Ereignisse
##view_adminTopology_partitionEvents_details = Details
##view_adminTopology_partitionEvents_detailsFilter = Details Filter
diff --git a/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_ja.properties b/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_ja.properties
index 2b74e1b..83b705b 100644
--- a/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_ja.properties
+++ b/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_ja.properties
@@ -550,6 +550,45 @@ view_adminTopology_agents = エージェント
##view_adminTopology_agentDetail_agentFailoverList = Agent Failover List
##view_adminTopology_agentDetail_currentServer = Current Server
##view_adminTopology_agentDetail_token = Token
+##view_adminTopology_message_agentsCount = There are {0} agents registered to this server. This number doesn't correspond to the number of currently connected agents.
+##view_adminTopology_message_agroupAssingAgentsFail = Unable to assign agents to the affinity group with id {0}.
+##view_adminTopology_message_agroupAssingServersFail = Unable to assign servers to the affinity group with id {0}.
+##view_adminTopology_message_agroupRemovingAgentsFail = Unable to remove agents from the affinity group with id {0}.
+##view_adminTopology_message_agroupRemovingServersFail = Unable to remove servers from the affinity group with id {0}.
+##view_adminTopology_message_agroupRenamed = Affinity group with id {0} and name {1} was renamed to {2}.
+##view_adminTopology_message_agroupRenamingFail = Unable to rename affinity group with id {0} and name {1}.
+##view_adminTopology_message_fetchAgentFail = Unable to fetch agent details for agent with id {0}.
+##view_adminTopology_message_fetchAgentsFail = Unable to fetch agent(s) for affinity group with id {0}.
+##view_adminTopology_message_fetchAgents2Fail = Unable to fetch agents.
+##view_adminTopology_message_fetchAgroupFail = Unable to fetch affinity group details for group with id {0}.
+##view_adminTopology_message_fetchAgroupsFail = Unable to fetch affinity group(s).
+##view_adminTopology_message_fetchFailOverLists = Unable to fetch fail over list details.
+##view_adminTopology_message_fetchPEventDetailsFail = Unable to fetch partition event details for event with id {0}.
+##view_adminTopology_message_fetchPEventFail = Unable to fetch partition events.
+##view_adminTopology_message_fetchServerFail = Unable to fetch server details for server with id {0}.
+##view_adminTopology_message_fetchServersFail = Unable to fetch server(s) for affinity group with id {0}.
+##view_adminTopology_message_fetchServers2Fail = Unable to fetch servers.
+##view_adminTopology_message_forceRepartition = Do you really want to force a repartition of whole cluster? It will force all the agents to connect to its most preferred server.
+##view_adminTopology_message_forceRepartitionFail = Unable to run repartition.
+##view_adminTopology_message_order = Order
+##view_adminTopology_message_removeAGroupsFail = Unable to remove following affinity groups(s) {0}.
+##view_adminTopology_message_removeAGroupsConfirm = Do you really want to remove following affinity groups {0}?
+##view_adminTopology_message_removeAllPEventConfirm = Do you really want to purge all partition events?
+##view_adminTopology_message_removePEventConfirm = Do you really want to remove following partition events {0}?
+##view_adminTopology_message_removePEventFail = Unable to remove {0} partition events(s).
+##view_adminTopology_message_removeServerConfirm = Do you really want to remove servers {0}?
+##view_adminTopology_message_removeServerFail = Unable to remove {0} server(s).
+##view_adminTopology_message_removedAGroups = Removed {0} affinity group(s).
+##view_adminTopology_message_removedAllPEvent = All partition events have been purged.
+##view_adminTopology_message_removedAllPEventFail = Unable to purge all partition events.
+##view_adminTopology_message_removedPEvent = Removed {0} partition events(s).
+##view_adminTopology_message_removedServer = Removed {0} server(s).
+##view_adminTopology_message_repartitioned = The cluster repartitioning was successfully invoked.
+##view_adminTopology_message_serverUpdated = The server {0} was successfully updated.
+##view_adminTopology_message_serverUpdateFail = Unable to update server {0}.
+##view_adminTopology_message_setMode = Set {0} server(s) to {1} mode.
+##view_adminTopology_message_setModeConfirm = Do you really want to set servers {0} to {1} mode?
+##view_adminTopology_message_setModeFail = Unable to set {0} server(s) to {1} mode.
view_adminTopology_partitionEvents = イベントの分類
##view_adminTopology_partitionEvents_details = Details
##view_adminTopology_partitionEvents_detailsFilter = Details Filter
diff --git a/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_pt.properties b/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_pt.properties
index ceb89bd..9f545fb 100644
--- a/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_pt.properties
+++ b/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_pt.properties
@@ -555,6 +555,45 @@ view_adminTopology_agents = Agentes
##view_adminTopology_agentDetail_agentFailoverList = Agent Failover List
##view_adminTopology_agentDetail_currentServer = Current Server
##view_adminTopology_agentDetail_token = Token
+##view_adminTopology_message_agentsCount = There are {0} agents registered to this server. This number doesn't correspond to the number of currently connected agents.
+##view_adminTopology_message_agroupAssingAgentsFail = Unable to assign agents to the affinity group with id {0}.
+##view_adminTopology_message_agroupAssingServersFail = Unable to assign servers to the affinity group with id {0}.
+##view_adminTopology_message_agroupRemovingAgentsFail = Unable to remove agents from the affinity group with id {0}.
+##view_adminTopology_message_agroupRemovingServersFail = Unable to remove servers from the affinity group with id {0}.
+##view_adminTopology_message_agroupRenamed = Affinity group with id {0} and name {1} was renamed to {2}.
+##view_adminTopology_message_agroupRenamingFail = Unable to rename affinity group with id {0} and name {1}.
+##view_adminTopology_message_fetchAgentFail = Unable to fetch agent details for agent with id {0}.
+##view_adminTopology_message_fetchAgentsFail = Unable to fetch agent(s) for affinity group with id {0}.
+##view_adminTopology_message_fetchAgents2Fail = Unable to fetch agents.
+##view_adminTopology_message_fetchAgroupFail = Unable to fetch affinity group details for group with id {0}.
+##view_adminTopology_message_fetchAgroupsFail = Unable to fetch affinity group(s).
+##view_adminTopology_message_fetchFailOverLists = Unable to fetch fail over list details.
+##view_adminTopology_message_fetchPEventDetailsFail = Unable to fetch partition event details for event with id {0}.
+##view_adminTopology_message_fetchPEventFail = Unable to fetch partition events.
+##view_adminTopology_message_fetchServerFail = Unable to fetch server details for server with id {0}.
+##view_adminTopology_message_fetchServersFail = Unable to fetch server(s) for affinity group with id {0}.
+##view_adminTopology_message_fetchServers2Fail = Unable to fetch servers.
+##view_adminTopology_message_forceRepartition = Do you really want to force a repartition of whole cluster? It will force all the agents to connect to its most preferred server.
+##view_adminTopology_message_forceRepartitionFail = Unable to run repartition.
+##view_adminTopology_message_order = Order
+##view_adminTopology_message_removeAGroupsFail = Unable to remove following affinity groups(s) {0}.
+##view_adminTopology_message_removeAGroupsConfirm = Do you really want to remove following affinity groups {0}?
+##view_adminTopology_message_removeAllPEventConfirm = Do you really want to purge all partition events?
+##view_adminTopology_message_removePEventConfirm = Do you really want to remove following partition events {0}?
+##view_adminTopology_message_removePEventFail = Unable to remove {0} partition events(s).
+##view_adminTopology_message_removeServerConfirm = Do you really want to remove servers {0}?
+##view_adminTopology_message_removeServerFail = Unable to remove {0} server(s).
+##view_adminTopology_message_removedAGroups = Removed {0} affinity group(s).
+##view_adminTopology_message_removedAllPEvent = All partition events have been purged.
+##view_adminTopology_message_removedAllPEventFail = Unable to purge all partition events.
+##view_adminTopology_message_removedPEvent = Removed {0} partition events(s).
+##view_adminTopology_message_removedServer = Removed {0} server(s).
+##view_adminTopology_message_repartitioned = The cluster repartitioning was successfully invoked.
+##view_adminTopology_message_serverUpdated = The server {0} was successfully updated.
+##view_adminTopology_message_serverUpdateFail = Unable to update server {0}.
+##view_adminTopology_message_setMode = Set {0} server(s) to {1} mode.
+##view_adminTopology_message_setModeConfirm = Do you really want to set servers {0} to {1} mode?
+##view_adminTopology_message_setModeFail = Unable to set {0} server(s) to {1} mode.
view_adminTopology_partitionEvents = Eventos na Parti\u00E7\u00E3o
##view_adminTopology_partitionEvents_details = Details
##view_adminTopology_partitionEvents_detailsFilter = Details Filter
diff --git a/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_ru.properties b/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_ru.properties
index 86c16cb..47025b7 100644
--- a/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_ru.properties
+++ b/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_ru.properties
@@ -542,6 +542,45 @@
#view_adminTopology_agentDetail_agentFailoverList = Agent Failover List
#view_adminTopology_agentDetail_currentServer = Current Server
#view_adminTopology_agentDetail_token = Token
+##view_adminTopology_message_agentsCount = There are {0} agents registered to this server. This number doesn't correspond to the number of currently connected agents.
+##view_adminTopology_message_agroupAssingAgentsFail = Unable to assign agents to the affinity group with id {0}.
+##view_adminTopology_message_agroupAssingServersFail = Unable to assign servers to the affinity group with id {0}.
+##view_adminTopology_message_agroupRemovingAgentsFail = Unable to remove agents from the affinity group with id {0}.
+##view_adminTopology_message_agroupRemovingServersFail = Unable to remove servers from the affinity group with id {0}.
+##view_adminTopology_message_agroupRenamed = Affinity group with id {0} and name {1} was renamed to {2}.
+##view_adminTopology_message_agroupRenamingFail = Unable to rename affinity group with id {0} and name {1}.
+##view_adminTopology_message_fetchAgentFail = Unable to fetch agent details for agent with id {0}.
+##view_adminTopology_message_fetchAgentsFail = Unable to fetch agent(s) for affinity group with id {0}.
+##view_adminTopology_message_fetchAgents2Fail = Unable to fetch agents.
+##view_adminTopology_message_fetchAgroupFail = Unable to fetch affinity group details for group with id {0}.
+##view_adminTopology_message_fetchAgroupsFail = Unable to fetch affinity group(s).
+##view_adminTopology_message_fetchFailOverLists = Unable to fetch fail over list details.
+##view_adminTopology_message_fetchPEventDetailsFail = Unable to fetch partition event details for event with id {0}.
+##view_adminTopology_message_fetchPEventFail = Unable to fetch partition events.
+##view_adminTopology_message_fetchServerFail = Unable to fetch server details for server with id {0}.
+##view_adminTopology_message_fetchServersFail = Unable to fetch server(s) for affinity group with id {0}.
+##view_adminTopology_message_fetchServers2Fail = Unable to fetch servers.
+##view_adminTopology_message_forceRepartition = Do you really want to force a repartition of whole cluster? It will force all the agents to connect to its most preferred server.
+##view_adminTopology_message_forceRepartitionFail = Unable to run repartition.
+##view_adminTopology_message_order = Order
+##view_adminTopology_message_removeAGroupsFail = Unable to remove following affinity groups(s) {0}.
+##view_adminTopology_message_removeAGroupsConfirm = Do you really want to remove following affinity groups {0}?
+##view_adminTopology_message_removeAllPEventConfirm = Do you really want to purge all partition events?
+##view_adminTopology_message_removePEventConfirm = Do you really want to remove following partition events {0}?
+##view_adminTopology_message_removePEventFail = Unable to remove {0} partition events(s).
+##view_adminTopology_message_removeServerConfirm = Do you really want to remove servers {0}?
+##view_adminTopology_message_removeServerFail = Unable to remove {0} server(s).
+##view_adminTopology_message_removedAGroups = Removed {0} affinity group(s).
+##view_adminTopology_message_removedAllPEvent = All partition events have been purged.
+##view_adminTopology_message_removedAllPEventFail = Unable to purge all partition events.
+##view_adminTopology_message_removedPEvent = Removed {0} partition events(s).
+##view_adminTopology_message_removedServer = Removed {0} server(s).
+##view_adminTopology_message_repartitioned = The cluster repartitioning was successfully invoked.
+##view_adminTopology_message_serverUpdated = The server {0} was successfully updated.
+##view_adminTopology_message_serverUpdateFail = Unable to update server {0}.
+##view_adminTopology_message_setMode = Set {0} server(s) to {1} mode.
+##view_adminTopology_message_setModeConfirm = Do you really want to set servers {0} to {1} mode?
+##view_adminTopology_message_setModeFail = Unable to set {0} server(s) to {1} mode.
#view_adminTopology_partitionEvents = Partition Events
##view_adminTopology_partitionEvents_details = Details
##view_adminTopology_partitionEvents_detailsFilter = Details Filter
diff --git a/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_zh.properties b/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_zh.properties
index 2c649de..b9941fc 100644
--- a/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_zh.properties
+++ b/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_zh.properties
@@ -542,6 +542,45 @@ view_adminTopology_agents = \u4ee3\u7406
##view_adminTopology_agentDetail_agentFailoverList = Agent Failover List
##view_adminTopology_agentDetail_currentServer = Current Server
##view_adminTopology_agentDetail_token = Token
+##view_adminTopology_message_agentsCount = There are {0} agents registered to this server. This number doesn't correspond to the number of currently connected agents.
+##view_adminTopology_message_agroupAssingAgentsFail = Unable to assign agents to the affinity group with id {0}.
+##view_adminTopology_message_agroupAssingServersFail = Unable to assign servers to the affinity group with id {0}.
+##view_adminTopology_message_agroupRemovingAgentsFail = Unable to remove agents from the affinity group with id {0}.
+##view_adminTopology_message_agroupRemovingServersFail = Unable to remove servers from the affinity group with id {0}.
+##view_adminTopology_message_agroupRenamed = Affinity group with id {0} and name {1} was renamed to {2}.
+##view_adminTopology_message_agroupRenamingFail = Unable to rename affinity group with id {0} and name {1}.
+##view_adminTopology_message_fetchAgentFail = Unable to fetch agent details for agent with id {0}.
+##view_adminTopology_message_fetchAgentsFail = Unable to fetch agent(s) for affinity group with id {0}.
+##view_adminTopology_message_fetchAgents2Fail = Unable to fetch agents.
+##view_adminTopology_message_fetchAgroupFail = Unable to fetch affinity group details for group with id {0}.
+##view_adminTopology_message_fetchAgroupsFail = Unable to fetch affinity group(s).
+##view_adminTopology_message_fetchFailOverLists = Unable to fetch fail over list details.
+##view_adminTopology_message_fetchPEventDetailsFail = Unable to fetch partition event details for event with id {0}.
+##view_adminTopology_message_fetchPEventFail = Unable to fetch partition events.
+##view_adminTopology_message_fetchServerFail = Unable to fetch server details for server with id {0}.
+##view_adminTopology_message_fetchServersFail = Unable to fetch server(s) for affinity group with id {0}.
+##view_adminTopology_message_fetchServers2Fail = Unable to fetch servers.
+##view_adminTopology_message_forceRepartition = Do you really want to force a repartition of whole cluster? It will force all the agents to connect to its most preferred server.
+##view_adminTopology_message_forceRepartitionFail = Unable to run repartition.
+##view_adminTopology_message_order = Order
+##view_adminTopology_message_removeAGroupsFail = Unable to remove following affinity groups(s) {0}.
+##view_adminTopology_message_removeAGroupsConfirm = Do you really want to remove following affinity groups {0}?
+##view_adminTopology_message_removeAllPEventConfirm = Do you really want to purge all partition events?
+##view_adminTopology_message_removePEventConfirm = Do you really want to remove following partition events {0}?
+##view_adminTopology_message_removePEventFail = Unable to remove {0} partition events(s).
+##view_adminTopology_message_removeServerConfirm = Do you really want to remove servers {0}?
+##view_adminTopology_message_removeServerFail = Unable to remove {0} server(s).
+##view_adminTopology_message_removedAGroups = Removed {0} affinity group(s).
+##view_adminTopology_message_removedAllPEvent = All partition events have been purged.
+##view_adminTopology_message_removedAllPEventFail = Unable to purge all partition events.
+##view_adminTopology_message_removedPEvent = Removed {0} partition events(s).
+##view_adminTopology_message_removedServer = Removed {0} server(s).
+##view_adminTopology_message_repartitioned = The cluster repartitioning was successfully invoked.
+##view_adminTopology_message_serverUpdated = The server {0} was successfully updated.
+##view_adminTopology_message_serverUpdateFail = Unable to update server {0}.
+##view_adminTopology_message_setMode = Set {0} server(s) to {1} mode.
+##view_adminTopology_message_setModeConfirm = Do you really want to set servers {0} to {1} mode?
+##view_adminTopology_message_setModeFail = Unable to set {0} server(s) to {1} mode.
view_adminTopology_partitionEvents = Partition\u4e8b\u4ef6
##view_adminTopology_partitionEvents_details = Details
##view_adminTopology_partitionEvents_detailsFilter = Details Filter
diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/CloudManagerLocal.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/CloudManagerLocal.java
index 92b59d3..595ca8f 100644
--- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/CloudManagerLocal.java
+++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/CloudManagerLocal.java
@@ -90,6 +90,13 @@ public interface CloudManagerLocal {
PageList<FailoverListDetails> getFailoverListDetailsByAgentId(int agentId, PageControl pc);
void markStaleServersDown(Subject subject);
-
+
+ /**
+ * Fetches the server based on provided criteria.
+ *
+ * @param subject caller
+ * @param criteria the criteria
+ * @return
+ */
PageList<Server> findServersByCriteria(Subject subject, ServerCriteria criteria);
}
commit caa81f6bf0a2e126896b8d40e5f066f39e88e013
Author: Jirka Kremser <jkremser(a)redhat.com>
Date: Wed Dec 19 13:01:23 2012 +0100
i18n for error messages, exception handling for agent and server views
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupDetailView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupDetailView.java
index 3005f7d..4355814 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupDetailView.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupDetailView.java
@@ -53,6 +53,7 @@ public class AffinityGroupDetailView extends LocatableVLayout implements Bookmar
// private final CloudGWTServiceAsync cloudManager = GWTServiceLookup.getCloudService();
private final int affinityGroupId;
+ private static final int SECTION_COUNT = 3;
private final LocatableSectionStack sectionStack;
private SectionStackSection detailsSection = null;
private SectionStackSection agentSection = null;
@@ -105,7 +106,7 @@ public class AffinityGroupDetailView extends LocatableVLayout implements Bookmar
}
public boolean isInitialized() {
- return initSectionCount >= 3;
+ return initSectionCount >= SECTION_COUNT;
}
@Override
@@ -136,7 +137,7 @@ public class AffinityGroupDetailView extends LocatableVLayout implements Bookmar
// don't wait forever, give up after 20s and show what we have
long elapsedMillis = System.currentTimeMillis() - startTime;
if (elapsedMillis > 20000) {
- initSectionCount = 3;
+ initSectionCount = SECTION_COUNT;
}
schedule(100); // Reschedule the timer.
}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentDetailView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentDetailView.java
index 026a846..f48e7b7 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentDetailView.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentDetailView.java
@@ -37,7 +37,10 @@ import com.smartgwt.client.widgets.layout.SectionStack;
import com.smartgwt.client.widgets.layout.SectionStackSection;
import org.rhq.core.domain.cloud.AffinityGroup;
+import org.rhq.core.domain.criteria.AgentCriteria;
import org.rhq.core.domain.resource.Agent;
+import org.rhq.core.domain.util.PageList;
+import org.rhq.enterprise.gui.coregui.client.CoreGUI;
import org.rhq.enterprise.gui.coregui.client.components.table.TimestampCellFormatter;
import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup;
import org.rhq.enterprise.gui.coregui.client.util.StringUtility;
@@ -53,9 +56,9 @@ import org.rhq.enterprise.gui.coregui.client.util.selenium.SeleniumUtility;
*/
public class AgentDetailView extends LocatableVLayout {
- // private final CloudGWTServiceAsync cloudManager = GWTServiceLookup.getCloudService();
private final int agentId;
+ private static final int SECTION_COUNT = 2;
private final LocatableSectionStack sectionStack;
private SectionStackSection detailsSection = null;
private SectionStackSection failoverListSection = null;
@@ -80,21 +83,31 @@ public class AgentDetailView extends LocatableVLayout {
@Override
protected void onInit() {
super.onInit();
- GWTServiceLookup.getAgentService().getAgentByID(this.agentId, new AsyncCallback<Agent>() {
- public void onSuccess(final Agent agent) {
- prepareDetailsSection(sectionStack, agent);
- prepareFailoverListSection(sectionStack, agent);
+ AgentCriteria criteria = new AgentCriteria();
+ criteria.addFilterId(agentId);
+ GWTServiceLookup.getCloudService().findAgentsByCriteria(criteria, new AsyncCallback<PageList<Agent>>() {
+ public void onSuccess(final PageList<Agent> agents) {
+ if (agents == null || agents.isEmpty() || agents.size() != 1) {
+ CoreGUI.getErrorHandler().handleError(
+ MSG.view_adminTopology_message_fetchAgentFail(String.valueOf(agentId)));
+ initSectionCount = SECTION_COUNT;
+ return;
+ }
+ prepareDetailsSection(sectionStack, agents.get(0));
+ prepareFailoverListSection(sectionStack, agents.get(0));
}
public void onFailure(Throwable caught) {
- SC.say("er1:" + caught);
- //TODO: CoreGUI.getErrorHandler().handleError(MSG.view_admin_plugins_loadFailure(), caught);
+ CoreGUI.getErrorHandler().handleError(
+ MSG.view_adminTopology_message_fetchAgentFail(String.valueOf(agentId)) + " " + caught.getMessage(),
+ caught);
+ initSectionCount = SECTION_COUNT;
}
});
}
public boolean isInitialized() {
- return initSectionCount >= 2;
+ return initSectionCount >= SECTION_COUNT;
}
@Override
@@ -122,7 +135,7 @@ public class AgentDetailView extends LocatableVLayout {
// don't wait forever, give up after 20s and show what we have
long elapsedMillis = System.currentTimeMillis() - startTime;
if (elapsedMillis > 20000) {
- initSectionCount = 2;
+ initSectionCount = SECTION_COUNT;
}
schedule(100); // Reschedule the timer.
}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentTableView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentTableView.java
index b50d852..dc34602 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentTableView.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentTableView.java
@@ -124,7 +124,7 @@ public class AgentTableView extends TableSection<AgentDatasource> implements Has
showUpdateMembersAction();
}
}
-
+
private void showUpdateMembersAction() {
addTableAction(extendLocatorId("editGroupAgents"), MSG.view_groupInventoryMembers_button_updateMembership(),
new AuthorizedTableAction(this, TableActionEnablement.ALWAYS, Permission.MANAGE_SETTINGS) {
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventDetailView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventDetailView.java
index f09a707..dc96374 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventDetailView.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventDetailView.java
@@ -62,6 +62,7 @@ public class PartitionEventDetailView extends LocatableVLayout implements Bookma
private final int partitionEventId;
+ private static final int SECTION_COUNT = 2;
private final LocatableSectionStack sectionStack;
private SectionStackSection detailsSection = null;
private SectionStackSection agentSection = null;
@@ -118,7 +119,7 @@ public class PartitionEventDetailView extends LocatableVLayout implements Bookma
}
public boolean isInitialized() {
- return initSectionCount >= 2;
+ return initSectionCount >= SECTION_COUNT;
}
@Override
@@ -146,7 +147,7 @@ public class PartitionEventDetailView extends LocatableVLayout implements Bookma
// don't wait forever, give up after 20s and show what we have
long elapsedMillis = System.currentTimeMillis() - startTime;
if (elapsedMillis > 20000) {
- initSectionCount = 2;
+ initSectionCount = SECTION_COUNT;
}
schedule(100); // Reschedule the timer.
}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDetailView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDetailView.java
index f3dbd4d..ccc11aa 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDetailView.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDetailView.java
@@ -32,7 +32,6 @@ import com.google.gwt.user.client.Timer;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.smartgwt.client.types.Overflow;
import com.smartgwt.client.types.VisibilityMode;
-import com.smartgwt.client.util.SC;
import com.smartgwt.client.widgets.IButton;
import com.smartgwt.client.widgets.events.ClickEvent;
import com.smartgwt.client.widgets.events.ClickHandler;
@@ -46,12 +45,16 @@ import com.smartgwt.client.widgets.layout.SectionStackSection;
import org.rhq.core.domain.cloud.AffinityGroup;
import org.rhq.core.domain.cloud.Server;
import org.rhq.core.domain.cloud.Server.OperationMode;
+import org.rhq.core.domain.criteria.ServerCriteria;
+import org.rhq.core.domain.util.PageList;
import org.rhq.enterprise.gui.coregui.client.BookmarkableView;
+import org.rhq.enterprise.gui.coregui.client.CoreGUI;
import org.rhq.enterprise.gui.coregui.client.ViewPath;
import org.rhq.enterprise.gui.coregui.client.components.table.TimestampCellFormatter;
import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup;
import org.rhq.enterprise.gui.coregui.client.util.Log;
import org.rhq.enterprise.gui.coregui.client.util.StringUtility;
+import org.rhq.enterprise.gui.coregui.client.util.message.Message;
import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableDynamicForm;
import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableSectionStack;
import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableToolStrip;
@@ -65,9 +68,9 @@ import org.rhq.enterprise.gui.coregui.client.util.selenium.SeleniumUtility;
*/
public class ServerDetailView extends LocatableVLayout implements BookmarkableView {
- // private final CloudGWTServiceAsync cloudManager = GWTServiceLookup.getCloudService();
private final int serverId;
+ private static final int SECTION_COUNT = 2;
private final LocatableSectionStack sectionStack;
private SectionStackSection detailsSection = null;
private SectionStackSection agentSection = null;
@@ -92,31 +95,31 @@ public class ServerDetailView extends LocatableVLayout implements BookmarkableVi
@Override
protected void onInit() {
super.onInit();
- GWTServiceLookup.getCloudService().getServerById(this.serverId, new AsyncCallback<Server>() {
- public void onSuccess(final Server server) {
- prepareDetailsSection(sectionStack, server);
- prepareAgentSection(sectionStack, server);
- // GWTServiceLookup.getCloudService().getAgentsByServerName(server.getName(),
- // new AsyncCallback<List<Agent>>() {
- // public void onSuccess(List<Agent> agents) {
- // prepareAgentSection(sectionStack, server, agents);
- // };
- //
- // public void onFailure(Throwable caught) {
- // //TODO: CoreGUI.getErrorHandler().handleError(MSG.view_admin_plugins_loadFailure(), caught);
- // }
- // });
+ ServerCriteria criteria = new ServerCriteria();
+ criteria.addFilterId(serverId);
+ GWTServiceLookup.getCloudService().findServersByCriteria(criteria, new AsyncCallback<PageList<Server>>() {
+ public void onSuccess(final PageList<Server> servers) {
+ if (servers == null || servers.isEmpty() || servers.size() != 1) {
+ CoreGUI.getErrorHandler().handleError(
+ MSG.view_adminTopology_message_fetchServerFail(String.valueOf(serverId)));
+ initSectionCount = SECTION_COUNT;
+ return;
+ }
+ prepareDetailsSection(sectionStack, servers.get(0));
+ prepareAgentSection(sectionStack, servers.get(0));
}
public void onFailure(Throwable caught) {
- SC.say("er1:" + caught);
- //TODO: CoreGUI.getErrorHandler().handleError(MSG.view_admin_plugins_loadFailure(), caught);
+ CoreGUI.getErrorHandler().handleError(
+ MSG.view_adminTopology_message_fetchServerFail(String.valueOf(serverId)) + " "
+ + caught.getMessage(), caught);
+ initSectionCount = SECTION_COUNT;
}
});
}
public boolean isInitialized() {
- return initSectionCount >= 2;
+ return initSectionCount >= SECTION_COUNT;
}
@Override
@@ -144,7 +147,7 @@ public class ServerDetailView extends LocatableVLayout implements BookmarkableVi
// don't wait forever, give up after 20s and show what we have
long elapsedMillis = System.currentTimeMillis() - startTime;
if (elapsedMillis > 20000) {
- initSectionCount = 2;
+ initSectionCount = SECTION_COUNT;
}
schedule(100); // Reschedule the timer.
}
@@ -228,20 +231,25 @@ public class ServerDetailView extends LocatableVLayout implements BookmarkableVi
server.setOperationMode(OperationMode.valueOf(operationModeItem.getValueAsString()));
GWTServiceLookup.getCloudService().updateServer(server, new AsyncCallback<Void>() {
public void onSuccess(Void result) {
- // todo: notify
+ Message msg = new Message(MSG.view_adminTopology_message_serverUpdated(server.getName()),
+ Message.Severity.Info);
+ CoreGUI.getMessageCenter().notify(msg);
+
}
public void onFailure(Throwable caught) {
- // todo: handle
+ CoreGUI.getErrorHandler().handleError(
+ MSG.view_adminTopology_message_serverUpdateFail(server.getName()) + " "
+ + caught.getMessage(), caught);
}
});
}
}
});
-
+
form.setItems(nameItem, addressItem, portItem, securePortItem, operationModeItem, affinityGroupItem,
installationDateItem, lastUpdatetem);
-
+
LocatableToolStrip footer = new LocatableToolStrip(extendLocatorId("detailsFooter"));
footer.setPadding(5);
footer.setWidth100();
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerTableView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerTableView.java
index 3c08618..b50e18c 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerTableView.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerTableView.java
@@ -37,7 +37,7 @@ import com.smartgwt.client.widgets.grid.ListGridField;
import com.smartgwt.client.widgets.grid.ListGridRecord;
import org.rhq.core.domain.authz.Permission;
-import org.rhq.core.domain.cloud.Server;
+import org.rhq.core.domain.cloud.Server.OperationMode;
import org.rhq.core.domain.criteria.BaseCriteria;
import org.rhq.enterprise.gui.coregui.client.CoreGUI;
import org.rhq.enterprise.gui.coregui.client.IconEnum;
@@ -56,8 +56,8 @@ import org.rhq.enterprise.gui.coregui.client.util.selenium.SeleniumUtility;
* @author Jirka Kremser
*
*/
-public class ServerTableView extends TableSection<AbstractServerNodeDatasource<? extends Serializable, ? extends BaseCriteria>>
- implements HasViewName {
+public class ServerTableView extends
+ TableSection<AbstractServerNodeDatasource<? extends Serializable, ? extends BaseCriteria>> implements HasViewName {
public static final ViewName VIEW_ID = new ViewName("Servers(GWT)", MSG.view_adminTopology_servers() + "(GWT)",
IconEnum.SERVERS);
@@ -141,117 +141,36 @@ public class ServerTableView extends TableSection<AbstractServerNodeDatasource<?
}
private void showCommonActions() {
- addTableAction(extendLocatorId("setNormal"), MSG.view_adminTopology_server_setNormal(),
- MSG.common_msg_areYouSure(), new AuthorizedTableAction(this, TableActionEnablement.ANY,
- Permission.MANAGE_SETTINGS) {
- public void executeAction(final ListGridRecord[] selections, Object actionValue) {
- List<String> selectedNames = getSelectedNames(selections);
- // TODO: msg
- // String message = MSG.view_admin_plugins_serverDisableConfirm(selectedNames.toString());
- String message = "Really? Normal? For all I've done for you? " + selectedNames;
- SC.ask(message, new BooleanCallback() {
- public void execute(Boolean confirmed) {
- if (confirmed) {
- int[] selectedIds = getSelectedIds(selections);
- SC.say("setting servers to maintenance mode, ids: " + selectedIds);
- GWTServiceLookup.getCloudService().updateServerMode(selectedIds,
- Server.OperationMode.NORMAL, new AsyncCallback<Void>() {
- public void onSuccess(Void arg0) {
- // TODO: msg
- Message msg = new Message(MSG
- .view_admin_plugins_disabledServerPlugins("sdf"), Message.Severity.Info);
- CoreGUI.getMessageCenter().notify(msg);
- refresh();
- }
+ addChangeOperationModeAction(OperationMode.NORMAL, MSG.view_adminTopology_server_setMaintenance());
+ addChangeOperationModeAction(OperationMode.MAINTENANCE, MSG.view_adminTopology_server_setMaintenance());
- public void onFailure(Throwable caught) {
- // TODO: msg
- CoreGUI.getErrorHandler().handleError(
- MSG.view_admin_plugins_disabledServerPluginsFailure() + " "
- + caught.getMessage(), caught);
- refreshTableInfo();
- }
-
- });
- } else {
- refreshTableInfo();
- }
- }
- });
- }
- });
-
- addTableAction(extendLocatorId("setMaintenance"), MSG.view_adminTopology_server_setMaintenance(),
+ addTableAction(extendLocatorId("removeSelected"), MSG.view_adminTopology_server_removeSelected(), null,
new AuthorizedTableAction(this, TableActionEnablement.ANY, Permission.MANAGE_SETTINGS) {
public void executeAction(final ListGridRecord[] selections, Object actionValue) {
List<String> selectedNames = getSelectedNames(selections);
- // TODO: msg
- // String message = MSG.view_admin_plugins_serverDisableConfirm(selectedNames.toString());
- String message = "Really? Maitenance? For all I've done for you? " + selectedNames;
+ String message = MSG.view_adminTopology_message_removeServerConfirm(selectedNames.toString());
SC.ask(message, new BooleanCallback() {
public void execute(Boolean confirmed) {
if (confirmed) {
int[] selectedIds = getSelectedIds(selections);
- SC.say("setting servers to maintenance mode, ids: " + selectedIds);
- GWTServiceLookup.getCloudService().updateServerMode(selectedIds,
- Server.OperationMode.MAINTENANCE, new AsyncCallback<Void>() {
- public void onSuccess(Void arg0) {
- // TODO: msg
- Message msg = new Message(MSG
- .view_admin_plugins_disabledServerPlugins("sdf"), Message.Severity.Info);
- CoreGUI.getMessageCenter().notify(msg);
- refresh();
- }
-
- public void onFailure(Throwable caught) {
- // TODO: msg
- CoreGUI.getErrorHandler().handleError(
- MSG.view_admin_plugins_disabledServerPluginsFailure() + " "
- + caught.getMessage(), caught);
- refreshTableInfo();
- }
-
- });
- } else {
- refreshTableInfo();
- }
- }
- });
- }
- });
-
- addTableAction(extendLocatorId("removeSelected"), MSG.view_adminTopology_server_removeSelected(),
- MSG.common_msg_areYouSure(), new AuthorizedTableAction(this, TableActionEnablement.ANY,
- Permission.MANAGE_SETTINGS) {
- public void executeAction(final ListGridRecord[] selections, Object actionValue) {
- List<String> selectedNames = getSelectedNames(selections);
- String message = "Really? Delete? For all I've done for you? " + selectedNames;
- SC.ask(message, new BooleanCallback() {
- public void execute(Boolean confirmed) {
- if (confirmed) {
- int[] selectedIds = getSelectedIds(selections);
- SC.say("setting servers to maintenance mode, ids: " + selectedIds);
GWTServiceLookup.getCloudService().deleteServers(selectedIds,
new AsyncCallback<Void>() {
public void onSuccess(Void arg0) {
- // TODO: msg
Message msg = new Message(MSG
- .view_admin_plugins_disabledServerPlugins("sdf"), Message.Severity.Info);
+ .view_adminTopology_message_removedServer(String
+ .valueOf(selections.length)), Message.Severity.Info);
CoreGUI.getMessageCenter().notify(msg);
refresh();
}
public void onFailure(Throwable caught) {
- // TODO: msg
CoreGUI.getErrorHandler().handleError(
- MSG.view_admin_plugins_disabledServerPluginsFailure() + " "
- + caught.getMessage(), caught);
+ MSG.view_adminTopology_message_removeServerFail(String
+ .valueOf(selections.length)) + " " + caught.getMessage(), caught);
refreshTableInfo();
}
});
- } else {
- refreshTableInfo();
}
}
});
@@ -259,6 +178,43 @@ public class ServerTableView extends TableSection<AbstractServerNodeDatasource<?
});
}
+ private void addChangeOperationModeAction(final OperationMode mode, String label) {
+ addTableAction(extendLocatorId("set" + mode), label, null, new AuthorizedTableAction(this,
+ TableActionEnablement.ANY, Permission.MANAGE_SETTINGS) {
+ public void executeAction(final ListGridRecord[] selections, Object actionValue) {
+ List<String> selectedNames = getSelectedNames(selections);
+ String message = MSG.view_adminTopology_message_setModeConfirm(selectedNames.toString(), mode.name());
+ SC.ask(message, new BooleanCallback() {
+ public void execute(Boolean confirmed) {
+ if (confirmed) {
+ int[] selectedIds = getSelectedIds(selections);
+ GWTServiceLookup.getCloudService().updateServerMode(selectedIds, mode,
+ new AsyncCallback<Void>() {
+ public void onSuccess(Void result) {
+ Message msg = new Message(MSG.view_adminTopology_message_setMode(
+ String.valueOf(selections.length), mode.name()), Message.Severity.Info);
+ CoreGUI.getMessageCenter().notify(msg);
+ refresh();
+ }
+
+ public void onFailure(Throwable caught) {
+ CoreGUI.getErrorHandler().handleError(
+ MSG.view_adminTopology_message_setModeFail(
+ String.valueOf(selections.length), mode.name())
+ + " " + caught.getMessage(), caught);
+ refreshTableInfo();
+ }
+
+ });
+ } else {
+ refreshTableInfo();
+ }
+ }
+ });
+ }
+ });
+ }
+
private void showUpdateMembersAction() {
addTableAction(extendLocatorId("editGroupServers"), MSG.view_groupInventoryMembers_button_updateMembership(),
new AuthorizedTableAction(this, TableActionEnablement.ALWAYS, Permission.MANAGE_SETTINGS) {
diff --git a/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages.properties b/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages.properties
index 47611e8..ceaad0d 100644
--- a/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages.properties
+++ b/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages.properties
@@ -552,6 +552,16 @@ view_adminTopology_agentDetail_address = Address
view_adminTopology_agentDetail_agentFailoverList = Agent Failover List
view_adminTopology_agentDetail_currentServer = Current Server
view_adminTopology_agentDetail_token = Token
+view_adminTopology_message_fetchServerFail=Unable to fetch server details for server with id {0}.
+view_adminTopology_message_fetchAgentFail=Unable to fetch agent details for agent with id {0}.
+view_adminTopology_message_removeServerConfirm=Do you really want to remove servers [{0}]?
+view_adminTopology_message_removeServerFail=Unable to remove {0} server(s).
+view_adminTopology_message_removedServer=Removed {0} server(s).
+view_adminTopology_message_serverUpdated=The server {0} was successfully updated.
+view_adminTopology_message_serverUpdateFail=Unable to update server {0}.
+view_adminTopology_message_setMode=Set {0} server(s) to {1} mode.
+view_adminTopology_message_setModeConfirm=Do you really want to set servers [{0}] to {1} mode?
+view_adminTopology_message_setModeFail=Unable to set {0} server(s) to {1} mode.
view_adminTopology_partitionEvents = Partition Events
view_adminTopology_partitionEvents_details = Details
view_adminTopology_partitionEvents_detailsFilter = Details Filter
commit e3c531c1f52ef4298b0e5d29a044765cc97c8ac7
Author: Jirka Kremser <jkremser(a)redhat.com>
Date: Tue Dec 18 17:12:46 2012 +0100
Assigning the agent to the affinity group; some refactoring (renaming AgentNodeDatasource -> AgentDatasource, AgentNodeDatasourceField -> AgentDatasourceField)
diff --git a/modules/core/domain/src/main/java/org/rhq/core/domain/resource/Agent.java b/modules/core/domain/src/main/java/org/rhq/core/domain/resource/Agent.java
index 870cc8f..5948a7e 100644
--- a/modules/core/domain/src/main/java/org/rhq/core/domain/resource/Agent.java
+++ b/modules/core/domain/src/main/java/org/rhq/core/domain/resource/Agent.java
@@ -172,6 +172,9 @@ public class Agent implements Serializable {
public static final String QUERY_UPDATE_STATUS_BY_MEASUREMENT_BASELINE = "Agent.updateStatusByMeasurementBasleine";
public static final String QUERY_UPDATE_STATUS_BY_AGENT = "Agent.updateStatusByAgent";
public static final String QUERY_UPDATE_STATUS_FOR_ALL = "Agent.updateStatusForAll";
+
+ // this value is set, when authorized user wants to reset the token
+ public static final String SECURITY_TOKEN_RESET = "@#$reset$#@";
@Column(name = "ID", nullable = false)
@GeneratedValue(strategy = GenerationType.AUTO, generator = "id")
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupAgentsSelector.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupAgentsSelector.java
new file mode 100644
index 0000000..5515e18
--- /dev/null
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupAgentsSelector.java
@@ -0,0 +1,264 @@
+/*
+ * RHQ Management Platform
+ * Copyright (C) 2005-2012 Red Hat, Inc.
+ * All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License, version 2, as
+ * published by the Free Software Foundation, and/or the GNU Lesser
+ * General Public License, version 2.1, also as published by the Free
+ * Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License and the GNU Lesser General Public License
+ * for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * and the GNU Lesser General Public License along with this program;
+ * if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+package org.rhq.enterprise.gui.coregui.client.admin.topology;
+
+import static org.rhq.enterprise.gui.coregui.client.inventory.resource.ResourceDataSourceField.NAME;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import com.google.gwt.user.client.rpc.AsyncCallback;
+import com.smartgwt.client.data.Criteria;
+import com.smartgwt.client.types.Alignment;
+import com.smartgwt.client.types.Overflow;
+import com.smartgwt.client.util.SC;
+import com.smartgwt.client.widgets.IButton;
+import com.smartgwt.client.widgets.Window;
+import com.smartgwt.client.widgets.events.ClickEvent;
+import com.smartgwt.client.widgets.events.ClickHandler;
+import com.smartgwt.client.widgets.events.CloseClickEvent;
+import com.smartgwt.client.widgets.events.CloseClickHandler;
+import com.smartgwt.client.widgets.form.DynamicForm;
+import com.smartgwt.client.widgets.form.fields.TextItem;
+import com.smartgwt.client.widgets.grid.ListGridRecord;
+import com.smartgwt.client.widgets.layout.HLayout;
+import com.smartgwt.client.widgets.layout.VLayout;
+
+import org.rhq.core.domain.criteria.AgentCriteria;
+import org.rhq.core.domain.resource.Agent;
+import org.rhq.core.domain.util.PageList;
+import org.rhq.enterprise.gui.coregui.client.IconEnum;
+import org.rhq.enterprise.gui.coregui.client.components.selector.AbstractSelector;
+import org.rhq.enterprise.gui.coregui.client.components.table.TableSection;
+import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup;
+import org.rhq.enterprise.gui.coregui.client.util.RPCDataSource;
+import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableDynamicForm;
+import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableIButton;
+
+/**
+ * @author Jirka Kremser
+ */
+public class AffinityGroupAgentsSelector extends AbstractSelector<Agent, AgentCriteria> {
+
+ private final Integer affinityGroupId;
+
+ private static RPCDataSource<Agent, AgentCriteria> datasource = null;
+
+ private static Window modalWindow;
+ private static boolean shouldBeClosed;
+ private static VLayout layout;
+ private List<Integer> originallyAssignedIds;
+
+ private AffinityGroupAgentsSelector() {
+ super("");
+ affinityGroupId = -1;
+ }
+
+ private AffinityGroupAgentsSelector(String id, Integer affinityGroupId) {
+ super(id, false);
+ this.affinityGroupId = affinityGroupId;
+ prepareMembers(this);
+ }
+
+ @Override
+ protected DynamicForm getAvailableFilterForm() {
+ if (availableFilterForm == null) {
+ availableFilterForm = new LocatableDynamicForm(extendLocatorId("AgeSelectAvailFilterForm"));
+ availableFilterForm.setWidth("75%");
+ final TextItem search = new TextItem(NAME.propertyName(), MSG.common_title_search());
+ availableFilterForm.setItems(search);
+ }
+ return availableFilterForm;
+ }
+
+ private void prepareMembers(final AffinityGroupAgentsSelector selector) {
+ AgentCriteria criteria = new AgentCriteria();
+ criteria.addFilterAffinityGroupId(affinityGroupId);
+ GWTServiceLookup.getCloudService().findAgentsByCriteria(criteria, new AsyncCallback<PageList<Agent>>() {
+ public void onSuccess(PageList<Agent> result) {
+ ListGridRecord[] records = getDataSource().buildRecords(result);
+ originallyAssignedIds = getIdList(records);
+ setAssigned(records);
+ modalWindow.addItem(layout);
+ modalWindow.show();
+ selector.reset();
+ }
+
+ @Override
+ public void onFailure(Throwable t) {
+ //todo: CoreGUI.getErrorHandler().handleError(MSG.view_admin_plugins_loadFailure(), t);
+ }
+ });
+
+ }
+
+ @Override
+ protected RPCDataSource<Agent, AgentCriteria> getDataSource() {
+ if (datasource == null) {
+ datasource = new AgentDatasource(affinityGroupId, false);
+ }
+ return datasource;
+ }
+
+ @Override
+ protected int getMaxAvailableRecords() {
+ return 3000;
+ }
+
+ @Override
+ protected Criteria getLatestCriteria(DynamicForm availableFilterForm) {
+ String search = (String) availableFilterForm.getValue(NAME.propertyName());
+ Criteria criteria = new Criteria();
+ if (null != search) {
+ criteria.addCriteria(NAME.propertyName(), search);
+ }
+ return criteria;
+ }
+
+ @Override
+ protected String getItemTitle() {
+ return MSG.view_adminTopology_agents();
+ }
+
+ @Override
+ protected String getItemIcon() {
+ return IconEnum.AGENT.getIcon16x16Path();
+ }
+
+ public static void show(Integer affinityGroupId, final TableSection parrent) {
+ modalWindow = new Window();
+ modalWindow.addCloseClickHandler(new CloseClickHandler() {
+ public void onCloseClick(CloseClickEvent event) {
+ closeAndRefresh(parrent, false);
+ }
+ });
+ modalWindow.setTitle(MSG.view_adminTopology_agents() + ": "
+ + MSG.view_adminTopology_affinityGroups_createNew());
+ modalWindow.setOverflow(Overflow.VISIBLE);
+ modalWindow.setWidth(800);
+ modalWindow.setHeight(400);
+ modalWindow.setAutoCenter(true);
+ modalWindow.setCanDragResize(true);
+ modalWindow.setCanDragReposition(true);
+
+ layout = new VLayout();
+ layout.setWidth100();
+ layout.setHeight100();
+ layout.setPadding(10);
+ layout.setLayoutMargin(10);
+
+ final AffinityGroupAgentsSelector selector = new AffinityGroupAgentsSelector("foo", affinityGroupId);
+ layout.addMember(selector);
+
+ IButton cancel = new LocatableIButton(selector.extendLocatorId("Cancel"), MSG.common_button_cancel());
+ cancel.addClickHandler(new ClickHandler() {
+ public void onClick(ClickEvent clickEvent) {
+ closeAndRefresh(parrent, false);
+ }
+ });
+ IButton save = new LocatableIButton(selector.extendLocatorId("Save"), MSG.common_button_save());
+ save.addClickHandler(new ClickHandler() {
+ public void onClick(ClickEvent clickEvent) {
+ List<Integer> actuallySelected = getIdList(selector.getSelectedRecords());
+ List<Integer> originallySelected = selector.getOriginallyAssignedIds();
+ originallySelected.removeAll(actuallySelected);
+ actuallySelected.removeAll(selector.getOriginallyAssignedIds());
+ shouldBeClosed = true;
+ if (!originallySelected.isEmpty()) {
+ shouldBeClosed = false;
+ GWTServiceLookup.getCloudService().removeAgentsFromGroup(
+ originallySelected.toArray(new Integer[originallySelected.size()]), new AsyncCallback<Void>() {
+
+ public void onSuccess(Void result) {
+ closeAndRefresh(parrent, true);
+ }
+
+ public void onFailure(Throwable caught) {
+ //todo: error handling
+ SC.say("errX");
+ }
+ });
+ }
+ if (!actuallySelected.isEmpty()) {
+ shouldBeClosed = false;
+ GWTServiceLookup.getCloudService().addAgentsToGroup(selector.getAffinityGroupId(),
+ actuallySelected.toArray(new Integer[actuallySelected.size()]), new AsyncCallback<Void>() {
+
+ public void onSuccess(Void result) {
+ closeAndRefresh(parrent, true);
+ }
+
+ public void onFailure(Throwable caught) {
+ //todo: error handling
+ SC.say("errX");
+ }
+ });
+ }
+ if (shouldBeClosed) {
+ closeAndRefresh(parrent, false);
+ }
+ // SC.say("To del: " + originallySelected + "\n\nTo add: " + actuallySelected);
+
+ }
+ });
+
+ HLayout buttons = new HLayout(10);
+ buttons.setHeight(20);
+ buttons.setLayoutAlign(Alignment.CENTER);
+ buttons.setLayoutBottomMargin(0);
+ buttons.addMember(save);
+ buttons.addMember(cancel);
+ layout.addMember(buttons);
+ }
+
+ private static void closeAndRefresh(TableSection parrent, boolean fullRefresh) {
+ if (modalWindow != null) {
+ modalWindow.destroy();
+ }
+ if (fullRefresh) {
+ parrent.refresh();
+ } else {
+ parrent.refreshTableInfo();
+ }
+ }
+
+ private static List<Integer> getIdList(ListGridRecord[] records) {
+ if (records == null) {
+ return null;
+ }
+ List<Integer> ids = new ArrayList<Integer>(records.length);
+ for (ListGridRecord record : records) {
+ ids.add(record.getAttributeAsInt(AgentDatasourceField.FIELD_ID.propertyName()));
+ }
+ return ids;
+ }
+
+ public List<Integer> getOriginallyAssignedIds() {
+ return new ArrayList<Integer>(originallyAssignedIds);
+ }
+
+ public Integer getAffinityGroupId() {
+ return affinityGroupId;
+ }
+
+}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupServersSelector.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupServersSelector.java
index f104d6c..13b1559 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupServersSelector.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupServersSelector.java
@@ -22,6 +22,8 @@
*/
package org.rhq.enterprise.gui.coregui.client.admin.topology;
+import static org.rhq.enterprise.gui.coregui.client.inventory.resource.ResourceDataSourceField.NAME;
+
import java.util.ArrayList;
import java.util.List;
@@ -37,18 +39,23 @@ import com.smartgwt.client.widgets.events.ClickHandler;
import com.smartgwt.client.widgets.events.CloseClickEvent;
import com.smartgwt.client.widgets.events.CloseClickHandler;
import com.smartgwt.client.widgets.form.DynamicForm;
+import com.smartgwt.client.widgets.form.fields.SelectItem;
+import com.smartgwt.client.widgets.form.fields.TextItem;
import com.smartgwt.client.widgets.grid.ListGridRecord;
import com.smartgwt.client.widgets.layout.HLayout;
import com.smartgwt.client.widgets.layout.VLayout;
import org.rhq.core.domain.cloud.Server;
+import org.rhq.core.domain.cloud.Server.OperationMode;
import org.rhq.core.domain.criteria.ServerCriteria;
-import org.rhq.core.domain.util.PageControl;
import org.rhq.core.domain.util.PageList;
+import org.rhq.enterprise.gui.coregui.client.IconEnum;
+import org.rhq.enterprise.gui.coregui.client.components.form.SortedSelectItem;
import org.rhq.enterprise.gui.coregui.client.components.selector.AbstractSelector;
import org.rhq.enterprise.gui.coregui.client.components.table.TableSection;
import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup;
import org.rhq.enterprise.gui.coregui.client.util.RPCDataSource;
+import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableDynamicForm;
import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableIButton;
/**
@@ -56,8 +63,6 @@ import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableIButton;
*/
public class AffinityGroupServersSelector extends AbstractSelector<Server, ServerCriteria> {
- private static final String ITEM_ICON = "types/Server_up_16.png";
-
private final Integer affinityGroupId;
private static RPCDataSource<Server, ServerCriteria> datasource = null;
@@ -77,10 +82,41 @@ public class AffinityGroupServersSelector extends AbstractSelector<Server, Serve
this.affinityGroupId = affinityGroupId;
prepareMembers(this);
}
+
+ @Override
+ protected DynamicForm getAvailableFilterForm() {
+ if (availableFilterForm == null) {
+ availableFilterForm = new LocatableDynamicForm(extendLocatorId("SerSelectAvailFilterForm"));
+ availableFilterForm.setNumCols(4);
+ availableFilterForm.setWidth("75%");
+ final TextItem search = new TextItem(NAME.propertyName(), MSG.common_title_search());
+ final SelectItem operationModeSelect = new SortedSelectItem(ServerDatasource.FILTER_OPERATION_MODE, MSG.view_adminTopology_serverDetail_operationMode());
+ operationModeSelect.setValueMap(buildOperationModeOptions());
+ operationModeSelect.setValue("ALL");
+//
+// final EnumSelectItem operationModeFilter = new EnumSelectItem(ServerDatasource.FILTER_OPERATION_MODE,
+// MSG.view_adminTopology_serverDetail_operationMode(), OperationMode.class, null, null);
+
+
+ availableFilterForm.setItems(search, operationModeSelect);
+ }
+ return availableFilterForm;
+ }
+
+ private String[] buildOperationModeOptions() {
+ OperationMode[] modes = OperationMode.values();
+ String[] options = new String[modes.length + 1];
+ for (int i = 0; i < modes.length; i++) {
+ options[i] = modes[i].toString();
+ }
+ options[modes.length] = "ALL";
+ return options;
+ }
private void prepareMembers(final AffinityGroupServersSelector selector) {
- GWTServiceLookup.getCloudService().getServerMembersByAffinityGroupId(affinityGroupId,
- PageControl.getUnlimitedInstance(), new AsyncCallback<PageList<Server>>() {
+ ServerCriteria criteria = new ServerCriteria();
+ criteria.addFilterAffinityGroupId(affinityGroupId);
+ GWTServiceLookup.getCloudService().findServersByCriteria(criteria, new AsyncCallback<PageList<Server>>() {
public void onSuccess(PageList<Server> result) {
ListGridRecord[] records = getDataSource().buildRecords(result);
originallyAssignedIds = getIdList(records);
@@ -107,28 +143,32 @@ public class AffinityGroupServersSelector extends AbstractSelector<Server, Serve
}
@Override
- protected DynamicForm getAvailableFilterForm() {
- return null; // No Filters Currently
- }
-
- @Override
protected int getMaxAvailableRecords() {
return 500;
}
@Override
protected Criteria getLatestCriteria(DynamicForm availableFilterForm) {
- return null; // No Filters Currently
+ String search = (String) availableFilterForm.getValue(NAME.propertyName());
+ String operationMode = (String) availableFilterForm.getValue(ServerDatasource.FILTER_OPERATION_MODE);
+ Criteria criteria = new Criteria();
+ if (null != search) {
+ criteria.addCriteria(NAME.propertyName(), search);
+ }
+ if (operationMode != null && !"ALL".equals(operationMode)) {
+ criteria.addCriteria(ServerDatasource.FILTER_OPERATION_MODE, operationMode);
+ }
+ return criteria;
}
@Override
protected String getItemTitle() {
- return MSG.view_adminTopology_affinityGroups();
+ return MSG.view_adminTopology_servers();
}
@Override
protected String getItemIcon() {
- return ITEM_ICON;
+ return IconEnum.SERVERS.getIcon16x16Path();
}
public static void show(Integer affinityGroupId, final TableSection parrent) {
@@ -138,7 +178,7 @@ public class AffinityGroupServersSelector extends AbstractSelector<Server, Serve
closeAndRefresh(parrent, false);
}
});
- modalWindow.setTitle(MSG.view_adminTopology_affinityGroups() + ": "
+ modalWindow.setTitle(MSG.view_adminTopology_servers() + ": "
+ MSG.view_adminTopology_affinityGroups_createNew());
modalWindow.setOverflow(Overflow.VISIBLE);
modalWindow.setWidth(800);
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentDatasource.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentDatasource.java
new file mode 100644
index 0000000..ac1d26b
--- /dev/null
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentDatasource.java
@@ -0,0 +1,227 @@
+/*
+ * RHQ Management Platform
+ * Copyright (C) 2005-2012 Red Hat, Inc.
+ * All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation version 2 of the License.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+package org.rhq.enterprise.gui.coregui.client.admin.topology;
+
+import static org.rhq.enterprise.gui.coregui.client.admin.topology.AgentDatasourceField.FIELD_ADDRESS;
+import static org.rhq.enterprise.gui.coregui.client.admin.topology.AgentDatasourceField.FIELD_AFFINITY_GROUP;
+import static org.rhq.enterprise.gui.coregui.client.admin.topology.AgentDatasourceField.FIELD_AFFINITY_GROUP_ID;
+import static org.rhq.enterprise.gui.coregui.client.admin.topology.AgentDatasourceField.FIELD_ID;
+import static org.rhq.enterprise.gui.coregui.client.admin.topology.AgentDatasourceField.FIELD_LAST_AVAILABILITY_REPORT;
+import static org.rhq.enterprise.gui.coregui.client.admin.topology.AgentDatasourceField.FIELD_NAME;
+import static org.rhq.enterprise.gui.coregui.client.admin.topology.AgentDatasourceField.FIELD_PORT;
+import static org.rhq.enterprise.gui.coregui.client.admin.topology.AgentDatasourceField.FIELD_SERVER;
+import static org.rhq.enterprise.gui.coregui.client.admin.topology.AgentDatasourceField.FIELD_SERVER_ID;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import com.google.gwt.user.client.rpc.AsyncCallback;
+import com.smartgwt.client.data.DSRequest;
+import com.smartgwt.client.data.DSResponse;
+import com.smartgwt.client.data.DataSourceField;
+import com.smartgwt.client.data.Record;
+import com.smartgwt.client.data.fields.DataSourceIntegerField;
+import com.smartgwt.client.widgets.grid.ListGridField;
+import com.smartgwt.client.widgets.grid.ListGridRecord;
+
+import org.rhq.core.domain.criteria.AgentCriteria;
+import org.rhq.core.domain.resource.Agent;
+import org.rhq.core.domain.util.PageControl;
+import org.rhq.core.domain.util.PageList;
+import org.rhq.core.domain.util.PageOrdering;
+import org.rhq.enterprise.gui.coregui.client.components.table.TimestampCellFormatter;
+import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup;
+import org.rhq.enterprise.gui.coregui.client.util.Log;
+import org.rhq.enterprise.gui.coregui.client.util.RPCDataSource;
+
+/**
+ * @author Jirka Kremser
+ *
+ */
+public class AgentDatasource extends RPCDataSource<Agent, AgentCriteria> {
+
+ // filters
+ public static final String FILTER_ADDRESS = FIELD_ADDRESS.propertyName();
+ public static final String FILTER_PORT = FIELD_PORT.propertyName();
+ public static final String FILTER_SERVER_ID = "serverId";
+ public static final String FILTER_AFFINITY_GROUP_ID = "affinityGroupId";
+
+
+ private final Integer id;
+ private final boolean isAffinityGroupId;
+
+ public AgentDatasource(Integer id, boolean isAffinityGroupId) {
+ super();
+ this.id = id;
+ this.isAffinityGroupId = isAffinityGroupId;
+ List<DataSourceField> fields = addDataSourceFields();
+ addFields(fields);
+ }
+
+ @Override
+ protected List<DataSourceField> addDataSourceFields() {
+ List<DataSourceField> fields = super.addDataSourceFields();
+ DataSourceField idField = new DataSourceIntegerField(FIELD_ID.propertyName(), FIELD_ID.title(), 50);
+ idField.setPrimaryKey(true);
+ idField.setHidden(true);
+ fields.add(idField);
+ return fields;
+ }
+
+ public List<ListGridField> getListGridFields() {
+ List<ListGridField> fields = new ArrayList<ListGridField>();
+
+ ListGridField idField = FIELD_ID.getListGridField();
+ idField.setHidden(true);
+ fields.add(idField);
+ fields.add(FIELD_NAME.getListGridField("*"));
+ fields.add(FIELD_SERVER.getListGridField("120"));
+ fields.add(FIELD_ADDRESS.getListGridField("110"));
+
+ ListGridField serverIdField = FIELD_SERVER_ID.getListGridField();
+ serverIdField.setHidden(true);
+ fields.add(serverIdField);
+
+ fields.add(FIELD_PORT.getListGridField("90"));
+ ListGridField lastAvailabilityReportField = FIELD_LAST_AVAILABILITY_REPORT.getListGridField("120");
+ TimestampCellFormatter.prepareDateField(lastAvailabilityReportField);
+ fields.add(lastAvailabilityReportField);
+
+ if (!isAffinityGroupId) {
+ fields.add(FIELD_AFFINITY_GROUP.getListGridField("100"));
+ ListGridField affinityGroupIdField = FIELD_AFFINITY_GROUP_ID.getListGridField();
+ affinityGroupIdField.setHidden(true);
+ fields.add(affinityGroupIdField);
+ }
+
+ return fields;
+ }
+
+ @Override
+ protected void executeFetch(final DSRequest request, final DSResponse response, AgentCriteria criteria) {
+// final PageControl pc = getPageControl(request);
+
+// AsyncCallback<PageList<Agent>> callback = new AsyncCallback<PageList<Agent>>() {
+// public void onSuccess(PageList<Agent> result) {
+// response.setData(buildRecords(result));
+// response.setTotalRows(result.size());
+// processResponse(request.getRequestId(), response);
+// }
+//
+// @Override
+// public void onFailure(Throwable t) {
+// //todo: CoreGUI.getErrorHandler().handleError(MSG.view_admin_plugins_loadFailure(), t);
+// response.setStatus(DSResponse.STATUS_FAILURE);
+// processResponse(request.getRequestId(), response);
+// }
+// };
+//
+//
+ if (isAffinityGroupId) {
+// GWTServiceLookup.getCloudService().getAgentMembersByAffinityGroupId(id, pc, callback);
+ criteria.addFilterAffinityGroupId(id);
+ } else if (id != null) {
+ // if id == null all agent are returned
+ criteria.addFilterServerId(id);
+// GWTServiceLookup.getAgentService().getAgentsByServer(id, pc, callback);
+ }
+
+ GWTServiceLookup.getCloudService().findAgentsByCriteria(criteria, new AsyncCallback<PageList<Agent>>() {
+ public void onSuccess(PageList<Agent> result) {
+ response.setData(buildRecords(result));
+ response.setTotalRows(result.size());
+ processResponse(request.getRequestId(), response);
+ }
+
+ @Override
+ public void onFailure(Throwable t) {
+ //todo: CoreGUI.getErrorHandler().handleError(MSG.view_admin_plugins_loadFailure(), t);
+ response.setStatus(DSResponse.STATUS_FAILURE);
+ processResponse(request.getRequestId(), response);
+ }
+ });
+ }
+
+ /**
+ * Returns a prepopulated PageControl based on the provided DSRequest. This will set sort fields,
+ * pagination, but *not* filter fields.
+ *
+ * @param request the request to turn into a page control
+ * @return the page control for passing to criteria and other queries
+ */
+ protected PageControl getPageControl(DSRequest request) {
+ // Initialize paging.
+ PageControl pageControl = new PageControl(0, getDataPageSize());
+
+ // Initialize sorting.
+ String sortBy = request.getAttribute("sortBy");
+ if (sortBy != null) {
+ String[] sorts = sortBy.split(",");
+ for (String sort : sorts) {
+ PageOrdering ordering = (sort.startsWith("-")) ? PageOrdering.DESC : PageOrdering.ASC;
+ String columnName = (ordering == PageOrdering.DESC) ? sort.substring(1) : sort;
+ pageControl.addDefaultOrderingField(columnName, ordering);
+ }
+ }
+
+ return pageControl;
+ }
+
+ @Override
+ public Agent copyValues(Record from) {
+ throw new UnsupportedOperationException("AgentNodeDatasource.copyValues(Record from)");
+ }
+
+ @Override
+ public ListGridRecord copyValues(Agent from) {
+ ListGridRecord record = new ListGridRecord();
+ record.setAttribute(FIELD_ID.propertyName(), from.getId());
+ record.setAttribute(FIELD_NAME.propertyName(), from.getName());
+ record.setAttribute(FIELD_ADDRESS.propertyName(), from.getAddress());
+ record.setAttribute(FIELD_PORT.propertyName(), from.getPort());
+ record.setAttribute(FIELD_SERVER.propertyName(), from.getServer() == null ? "" : from.getServer().getName());
+ record.setAttribute(FIELD_SERVER_ID.propertyName(), from.getServer() == null ? "" : from.getServer().getId());
+ record.setAttribute(FIELD_LAST_AVAILABILITY_REPORT.propertyName(), from.getLastAvailabilityReport());
+ record.setAttribute(FIELD_AFFINITY_GROUP.propertyName(), from.getAffinityGroup() == null ? "" : from
+ .getAffinityGroup().getName());
+ record.setAttribute(FIELD_AFFINITY_GROUP_ID.propertyName(), from.getAffinityGroup() == null ? "" : from
+ .getAffinityGroup().getId());
+
+ return record;
+ }
+
+ @Override
+ protected AgentCriteria getFetchCriteria(DSRequest request) {
+ AgentCriteria criteria = new AgentCriteria();
+ // printRequestCriteria(request);
+ criteria.addFilterId(getFilter(request, FIELD_ID.propertyName(), Integer.class));
+ criteria.addFilterName(getFilter(request, FIELD_NAME.propertyName(), String.class));
+ criteria.addFilterAddress(getFilter(request, FILTER_ADDRESS, String.class));
+ criteria.addFilterPort(getFilter(request, FILTER_PORT, Integer.class));
+ criteria.addFilterServerId(getFilter(request, FILTER_SERVER_ID, Integer.class));
+ criteria.addFilterAffinityGroupId(getFilter(request, FILTER_AFFINITY_GROUP_ID, Integer.class));
+
+
+ //@todo: Remove me when finished debugging search expression
+ Log.debug(" *** AgentCriteria Search String: " + getFilter(request, "search", String.class));
+ criteria.setSearchExpression(getFilter(request, "search", String.class));
+
+ return criteria;
+ }
+}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentDatasourceField.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentDatasourceField.java
new file mode 100644
index 0000000..26792d4
--- /dev/null
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentDatasourceField.java
@@ -0,0 +1,83 @@
+/*
+ * RHQ Management Platform
+ * Copyright (C) 2005-2012 Red Hat, Inc.
+ * All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation version 2 of the License.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+package org.rhq.enterprise.gui.coregui.client.admin.topology;
+
+import com.smartgwt.client.widgets.grid.ListGridField;
+
+import org.rhq.enterprise.gui.coregui.client.CoreGUI;
+
+/**
+ * @author Jirka Kremser
+ *
+ */
+public enum AgentDatasourceField {
+
+ FIELD_ID("id", CoreGUI.getMessages().common_title_id()),
+
+ FIELD_NAME("name", CoreGUI.getMessages().common_title_name()),
+
+ FIELD_SERVER("server", CoreGUI.getMessages().view_adminTopology_agent_connectedServer()),
+
+ FIELD_SERVER_ID("serverId", "serverId"),
+
+ FIELD_ADDRESS("address", CoreGUI.getMessages().view_adminTopology_agent_agentBindAddress()),
+
+ FIELD_PORT("port", CoreGUI.getMessages().view_adminTopology_agent_agentBindPort()),
+
+ FIELD_LAST_AVAILABILITY_REPORT("lastAvailabilityReport", CoreGUI.getMessages().view_adminTopology_agent_lastAvailabilityReport()),
+
+ FIELD_AGENT_TOKEN("agentToken", CoreGUI.getMessages().view_adminTopology_agentDetail_token()),
+
+ FIELD_AFFINITY_GROUP("affinityGroup", CoreGUI.getMessages().view_adminTopology_server_affinityGroup()),
+
+ FIELD_AFFINITY_GROUP_ID("affinityGroupId", "affinityGroupId");
+
+ /**
+ * Corresponds to a property name of Server (e.g. operationMode).
+ */
+ private String propertyName;
+
+ /**
+ * The table header for the field or property (e.g. Mode).
+ */
+ private String title;
+
+ private AgentDatasourceField(String propertyName, String title) {
+ this.propertyName = propertyName;
+ this.title = title;
+ }
+
+ public String propertyName() {
+ return propertyName;
+ }
+
+ public String title() {
+ return title;
+ }
+
+ public ListGridField getListGridField() {
+ return new ListGridField(propertyName, title);
+ }
+
+ public ListGridField getListGridField(String width) {
+ ListGridField field = new ListGridField(propertyName, title);
+ field.setWidth(width);
+ return field;
+ }
+}
\ No newline at end of file
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentDetailView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentDetailView.java
index b91f71d..026a846 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentDetailView.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentDetailView.java
@@ -19,13 +19,13 @@
package org.rhq.enterprise.gui.coregui.client.admin.topology;
-import static org.rhq.enterprise.gui.coregui.client.admin.topology.AgentNodeDatasourceField.FIELD_ADDRESS;
-import static org.rhq.enterprise.gui.coregui.client.admin.topology.AgentNodeDatasourceField.FIELD_AFFINITY_GROUP;
-import static org.rhq.enterprise.gui.coregui.client.admin.topology.AgentNodeDatasourceField.FIELD_AGENT_TOKEN;
-import static org.rhq.enterprise.gui.coregui.client.admin.topology.AgentNodeDatasourceField.FIELD_LAST_AVAILABILITY_REPORT;
-import static org.rhq.enterprise.gui.coregui.client.admin.topology.AgentNodeDatasourceField.FIELD_NAME;
-import static org.rhq.enterprise.gui.coregui.client.admin.topology.AgentNodeDatasourceField.FIELD_PORT;
-import static org.rhq.enterprise.gui.coregui.client.admin.topology.AgentNodeDatasourceField.FIELD_SERVER;
+import static org.rhq.enterprise.gui.coregui.client.admin.topology.AgentDatasourceField.FIELD_ADDRESS;
+import static org.rhq.enterprise.gui.coregui.client.admin.topology.AgentDatasourceField.FIELD_AFFINITY_GROUP;
+import static org.rhq.enterprise.gui.coregui.client.admin.topology.AgentDatasourceField.FIELD_AGENT_TOKEN;
+import static org.rhq.enterprise.gui.coregui.client.admin.topology.AgentDatasourceField.FIELD_LAST_AVAILABILITY_REPORT;
+import static org.rhq.enterprise.gui.coregui.client.admin.topology.AgentDatasourceField.FIELD_NAME;
+import static org.rhq.enterprise.gui.coregui.client.admin.topology.AgentDatasourceField.FIELD_PORT;
+import static org.rhq.enterprise.gui.coregui.client.admin.topology.AgentDatasourceField.FIELD_SERVER;
import com.google.gwt.user.client.Timer;
import com.google.gwt.user.client.rpc.AsyncCallback;
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentNodeDatasource.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentNodeDatasource.java
deleted file mode 100644
index 8a9da96..0000000
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentNodeDatasource.java
+++ /dev/null
@@ -1,188 +0,0 @@
-/*
- * RHQ Management Platform
- * Copyright (C) 2005-2012 Red Hat, Inc.
- * All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation version 2 of the License.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-package org.rhq.enterprise.gui.coregui.client.admin.topology;
-
-import static org.rhq.enterprise.gui.coregui.client.admin.topology.AgentNodeDatasourceField.FIELD_ADDRESS;
-import static org.rhq.enterprise.gui.coregui.client.admin.topology.AgentNodeDatasourceField.FIELD_AFFINITY_GROUP;
-import static org.rhq.enterprise.gui.coregui.client.admin.topology.AgentNodeDatasourceField.FIELD_AFFINITY_GROUP_ID;
-import static org.rhq.enterprise.gui.coregui.client.admin.topology.AgentNodeDatasourceField.FIELD_ID;
-import static org.rhq.enterprise.gui.coregui.client.admin.topology.AgentNodeDatasourceField.FIELD_LAST_AVAILABILITY_REPORT;
-import static org.rhq.enterprise.gui.coregui.client.admin.topology.AgentNodeDatasourceField.FIELD_NAME;
-import static org.rhq.enterprise.gui.coregui.client.admin.topology.AgentNodeDatasourceField.FIELD_PORT;
-import static org.rhq.enterprise.gui.coregui.client.admin.topology.AgentNodeDatasourceField.FIELD_SERVER;
-import static org.rhq.enterprise.gui.coregui.client.admin.topology.AgentNodeDatasourceField.FIELD_SERVER_ID;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import com.google.gwt.user.client.rpc.AsyncCallback;
-import com.smartgwt.client.data.DSRequest;
-import com.smartgwt.client.data.DSResponse;
-import com.smartgwt.client.data.DataSourceField;
-import com.smartgwt.client.data.Record;
-import com.smartgwt.client.data.fields.DataSourceIntegerField;
-import com.smartgwt.client.widgets.grid.ListGridField;
-import com.smartgwt.client.widgets.grid.ListGridRecord;
-
-import org.rhq.core.domain.criteria.Criteria;
-import org.rhq.core.domain.resource.Agent;
-import org.rhq.core.domain.util.PageControl;
-import org.rhq.core.domain.util.PageList;
-import org.rhq.core.domain.util.PageOrdering;
-import org.rhq.enterprise.gui.coregui.client.components.table.TimestampCellFormatter;
-import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup;
-import org.rhq.enterprise.gui.coregui.client.util.RPCDataSource;
-
-/**
- * @author Jirka Kremser
- *
- */
-public class AgentNodeDatasource extends RPCDataSource<Agent, Criteria> {
-
- private final Integer id;
- private final boolean isAffinityGroupId;
-
- public AgentNodeDatasource(Integer id, boolean isAffinityGroupId) {
- super();
- this.id = id;
- this.isAffinityGroupId = isAffinityGroupId;
- List<DataSourceField> fields = addDataSourceFields();
- addFields(fields);
- }
-
- @Override
- protected List<DataSourceField> addDataSourceFields() {
- List<DataSourceField> fields = super.addDataSourceFields();
- DataSourceField idField = new DataSourceIntegerField(FIELD_ID.propertyName(), FIELD_ID.title(), 50);
- idField.setPrimaryKey(true);
- idField.setHidden(true);
- fields.add(idField);
- return fields;
- }
-
- public List<ListGridField> getListGridFields() {
- List<ListGridField> fields = new ArrayList<ListGridField>();
-
- ListGridField idField = FIELD_ID.getListGridField();
- idField.setHidden(true);
- fields.add(idField);
- fields.add(FIELD_NAME.getListGridField("*"));
- fields.add(FIELD_SERVER.getListGridField("120"));
- fields.add(FIELD_ADDRESS.getListGridField("110"));
-
- ListGridField serverIdField = FIELD_SERVER_ID.getListGridField();
- serverIdField.setHidden(true);
- fields.add(serverIdField);
-
- fields.add(FIELD_PORT.getListGridField("90"));
- ListGridField lastAvailabilityReportField = FIELD_LAST_AVAILABILITY_REPORT.getListGridField("120");
- TimestampCellFormatter.prepareDateField(lastAvailabilityReportField);
- fields.add(lastAvailabilityReportField);
-
- if (!isAffinityGroupId) {
- fields.add(FIELD_AFFINITY_GROUP.getListGridField("100"));
- ListGridField affinityGroupIdField = FIELD_AFFINITY_GROUP_ID.getListGridField();
- affinityGroupIdField.setHidden(true);
- fields.add(affinityGroupIdField);
- }
-
- return fields;
- }
-
- @Override
- protected void executeFetch(final DSRequest request, final DSResponse response, Criteria criteria) {
- final PageControl pc = getPageControl(request);
-
- AsyncCallback<PageList<Agent>> callback = new AsyncCallback<PageList<Agent>>() {
- public void onSuccess(PageList<Agent> result) {
- response.setData(buildRecords(result));
- response.setTotalRows(result.size());
- processResponse(request.getRequestId(), response);
- }
-
- @Override
- public void onFailure(Throwable t) {
- //todo: CoreGUI.getErrorHandler().handleError(MSG.view_admin_plugins_loadFailure(), t);
- response.setStatus(DSResponse.STATUS_FAILURE);
- processResponse(request.getRequestId(), response);
- }
- };
-
- if (isAffinityGroupId) {
- GWTServiceLookup.getCloudService().getAgentMembersByAffinityGroupId(id, pc, callback);
- } else {
- // if id == null all agent are returned
- GWTServiceLookup.getAgentService().getAgentsByServer(id, pc, callback);
- }
- }
-
- /**
- * Returns a prepopulated PageControl based on the provided DSRequest. This will set sort fields,
- * pagination, but *not* filter fields.
- *
- * @param request the request to turn into a page control
- * @return the page control for passing to criteria and other queries
- */
- protected PageControl getPageControl(DSRequest request) {
- // Initialize paging.
- PageControl pageControl = new PageControl(0, getDataPageSize());
-
- // Initialize sorting.
- String sortBy = request.getAttribute("sortBy");
- if (sortBy != null) {
- String[] sorts = sortBy.split(",");
- for (String sort : sorts) {
- PageOrdering ordering = (sort.startsWith("-")) ? PageOrdering.DESC : PageOrdering.ASC;
- String columnName = (ordering == PageOrdering.DESC) ? sort.substring(1) : sort;
- pageControl.addDefaultOrderingField(columnName, ordering);
- }
- }
-
- return pageControl;
- }
-
- @Override
- public Agent copyValues(Record from) {
- throw new UnsupportedOperationException("AgentNodeDatasource.copyValues(Record from)");
- }
-
- @Override
- public ListGridRecord copyValues(Agent from) {
- ListGridRecord record = new ListGridRecord();
- record.setAttribute(FIELD_ID.propertyName(), from.getId());
- record.setAttribute(FIELD_NAME.propertyName(), from.getName());
- record.setAttribute(FIELD_ADDRESS.propertyName(), from.getAddress());
- record.setAttribute(FIELD_PORT.propertyName(), from.getPort());
- record.setAttribute(FIELD_SERVER.propertyName(), from.getServer() == null ? "" : from.getServer().getName());
- record.setAttribute(FIELD_SERVER_ID.propertyName(), from.getServer() == null ? "" : from.getServer().getId());
- record.setAttribute(FIELD_LAST_AVAILABILITY_REPORT.propertyName(), from.getLastAvailabilityReport());
- record.setAttribute(FIELD_AFFINITY_GROUP.propertyName(), from.getAffinityGroup() == null ? "" : from
- .getAffinityGroup().getName());
- record.setAttribute(FIELD_AFFINITY_GROUP_ID.propertyName(), from.getAffinityGroup() == null ? "" : from
- .getAffinityGroup().getId());
-
- return record;
- }
-
- @Override
- protected Criteria getFetchCriteria(DSRequest request) {
- // we don't use criteria for this datasource, just return null
- return null;
- }
-}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentNodeDatasourceField.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentNodeDatasourceField.java
deleted file mode 100644
index dc82130..0000000
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentNodeDatasourceField.java
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- * RHQ Management Platform
- * Copyright (C) 2005-2012 Red Hat, Inc.
- * All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation version 2 of the License.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-package org.rhq.enterprise.gui.coregui.client.admin.topology;
-
-import com.smartgwt.client.widgets.grid.ListGridField;
-
-import org.rhq.enterprise.gui.coregui.client.CoreGUI;
-
-/**
- * @author Jirka Kremser
- *
- */
-public enum AgentNodeDatasourceField {
-
- FIELD_ID("id", CoreGUI.getMessages().common_title_id()),
-
- FIELD_NAME("name", CoreGUI.getMessages().common_title_name()),
-
- FIELD_SERVER("server", CoreGUI.getMessages().view_adminTopology_agent_connectedServer()),
-
- FIELD_SERVER_ID("serverId", "serverId"),
-
- FIELD_ADDRESS("address", CoreGUI.getMessages().view_adminTopology_agent_agentBindAddress()),
-
- FIELD_PORT("port", CoreGUI.getMessages().view_adminTopology_agent_agentBindPort()),
-
- FIELD_LAST_AVAILABILITY_REPORT("lastAvailabilityReport", CoreGUI.getMessages().view_adminTopology_agent_lastAvailabilityReport()),
-
- FIELD_AGENT_TOKEN("agentToken", CoreGUI.getMessages().view_adminTopology_agentDetail_token()),
-
- FIELD_AFFINITY_GROUP("affinityGroup", CoreGUI.getMessages().view_adminTopology_server_affinityGroup()),
-
- FIELD_AFFINITY_GROUP_ID("affinityGroupId", "affinityGroupId");
-
- /**
- * Corresponds to a property name of Server (e.g. operationMode).
- */
- private String propertyName;
-
- /**
- * The table header for the field or property (e.g. Mode).
- */
- private String title;
-
- private AgentNodeDatasourceField(String propertyName, String title) {
- this.propertyName = propertyName;
- this.title = title;
- }
-
- public String propertyName() {
- return propertyName;
- }
-
- public String title() {
- return title;
- }
-
- public ListGridField getListGridField() {
- return new ListGridField(propertyName, title);
- }
-
- public ListGridField getListGridField(String width) {
- ListGridField field = new ListGridField(propertyName, title);
- field.setWidth(width);
- return field;
- }
-}
\ No newline at end of file
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentTableView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentTableView.java
index d3b8761..b50d852 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentTableView.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentTableView.java
@@ -18,15 +18,14 @@
*/
package org.rhq.enterprise.gui.coregui.client.admin.topology;
-import static org.rhq.enterprise.gui.coregui.client.admin.topology.AgentNodeDatasourceField.FIELD_AFFINITY_GROUP;
-import static org.rhq.enterprise.gui.coregui.client.admin.topology.AgentNodeDatasourceField.FIELD_AFFINITY_GROUP_ID;
-import static org.rhq.enterprise.gui.coregui.client.admin.topology.AgentNodeDatasourceField.FIELD_SERVER;
-import static org.rhq.enterprise.gui.coregui.client.admin.topology.AgentNodeDatasourceField.FIELD_SERVER_ID;
+import static org.rhq.enterprise.gui.coregui.client.admin.topology.AgentDatasourceField.FIELD_AFFINITY_GROUP;
+import static org.rhq.enterprise.gui.coregui.client.admin.topology.AgentDatasourceField.FIELD_AFFINITY_GROUP_ID;
+import static org.rhq.enterprise.gui.coregui.client.admin.topology.AgentDatasourceField.FIELD_SERVER;
+import static org.rhq.enterprise.gui.coregui.client.admin.topology.AgentDatasourceField.FIELD_SERVER_ID;
import java.util.List;
import com.smartgwt.client.types.SortDirection;
-import com.smartgwt.client.util.SC;
import com.smartgwt.client.widgets.Canvas;
import com.smartgwt.client.widgets.grid.CellFormatter;
import com.smartgwt.client.widgets.grid.ListGrid;
@@ -47,7 +46,7 @@ import org.rhq.enterprise.gui.coregui.client.util.selenium.SeleniumUtility;
/**
* @author Jirka Kremser
*/
-public class AgentTableView extends TableSection<AgentNodeDatasource> implements HasViewName {
+public class AgentTableView extends TableSection<AgentDatasource> implements HasViewName {
public static final ViewName VIEW_ID = new ViewName("Agents(GWT)", MSG.view_adminTopology_agents() + "(GWT)",
IconEnum.AGENT);
@@ -56,13 +55,16 @@ public class AgentTableView extends TableSection<AgentNodeDatasource> implements
+ AdministrationView.SECTION_TOPOLOGY_VIEW_ID + "/" + VIEW_ID;
private final boolean isAffinityGroupId;
+
+ private final Integer id;
public AgentTableView(String locatorId, Integer id, boolean isAffinityGroupId) {
super(locatorId, null);
this.isAffinityGroupId = isAffinityGroupId;
+ this.id = id;
setHeight100();
setWidth100();
- setDataSource(new AgentNodeDatasource(id, isAffinityGroupId));
+ setDataSource(new AgentDatasource(id, isAffinityGroupId));
}
@Override
@@ -118,15 +120,18 @@ public class AgentTableView extends TableSection<AgentNodeDatasource> implements
});
}
}
-
- if (isAffinityGroupId)
- addTableAction(extendLocatorId("editGroupAgents"), MSG.view_groupInventoryMembers_button_updateMembership(),
- new AuthorizedTableAction(this, TableActionEnablement.ALWAYS, Permission.MANAGE_SETTINGS) {
- public void executeAction(final ListGridRecord[] selections, Object actionValue) {
- SC.say("working..");
- // todo: open editor for agent members
- }
- });
+ if (isAffinityGroupId) {
+ showUpdateMembersAction();
+ }
+ }
+
+ private void showUpdateMembersAction() {
+ addTableAction(extendLocatorId("editGroupAgents"), MSG.view_groupInventoryMembers_button_updateMembership(),
+ new AuthorizedTableAction(this, TableActionEnablement.ALWAYS, Permission.MANAGE_SETTINGS) {
+ public void executeAction(final ListGridRecord[] selections, Object actionValue) {
+ AffinityGroupAgentsSelector.show(id, AgentTableView.this);
+ }
+ });
}
@Override
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDatasource.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDatasource.java
index 0f76f74..2d1a75e 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDatasource.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDatasource.java
@@ -135,10 +135,8 @@ public class ServerDatasource extends AbstractServerNodeDatasource<Server, Serve
if(fetchMembers) {
criteria.addFilterAffinityGroupId(affinityGroupId);
- GWTServiceLookup.getCloudService().findServersByCriteria(criteria, callback);
- } else {
- GWTServiceLookup.getCloudService().getServerNonMembersByAffinityGroupId(affinityGroupId, pc, callback);
}
+ GWTServiceLookup.getCloudService().findServersByCriteria(criteria, callback);
}
/**
@@ -195,7 +193,7 @@ public class ServerDatasource extends AbstractServerNodeDatasource<Server, Serve
@Override
protected ServerCriteria getFetchCriteria(DSRequest request) {
ServerCriteria criteria = new ServerCriteria();
- printRequestCriteria(request);
+// printRequestCriteria(request);
criteria.addFilterId(getFilter(request, FIELD_ID.propertyName(), Integer.class));
criteria.addFilterName(getFilter(request, FIELD_NAME.propertyName(), String.class));
criteria.addFilterAddress(getFilter(request, FILTER_ADDRESS, String.class));
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDetailView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDetailView.java
index 7165390..f3dbd4d 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDetailView.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDetailView.java
@@ -19,7 +19,7 @@
package org.rhq.enterprise.gui.coregui.client.admin.topology;
-import static org.rhq.enterprise.gui.coregui.client.admin.topology.AgentNodeDatasourceField.FIELD_AFFINITY_GROUP;
+import static org.rhq.enterprise.gui.coregui.client.admin.topology.AgentDatasourceField.FIELD_AFFINITY_GROUP;
import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerDatasourceField.FIELD_ADDRESS;
import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerDatasourceField.FIELD_CTIME;
import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerDatasourceField.FIELD_MTIME;
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerTableView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerTableView.java
index 79be297..3c08618 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerTableView.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerTableView.java
@@ -18,8 +18,8 @@
*/
package org.rhq.enterprise.gui.coregui.client.admin.topology;
-import static org.rhq.enterprise.gui.coregui.client.admin.topology.AgentNodeDatasourceField.FIELD_AFFINITY_GROUP;
-import static org.rhq.enterprise.gui.coregui.client.admin.topology.AgentNodeDatasourceField.FIELD_AFFINITY_GROUP_ID;
+import static org.rhq.enterprise.gui.coregui.client.admin.topology.AgentDatasourceField.FIELD_AFFINITY_GROUP;
+import static org.rhq.enterprise.gui.coregui.client.admin.topology.AgentDatasourceField.FIELD_AFFINITY_GROUP_ID;
import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerDatasourceField.FIELD_ORDINAL;
import java.io.Serializable;
diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/CloudManagerBean.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/CloudManagerBean.java
index bd9e88b..f51b246 100644
--- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/CloudManagerBean.java
+++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/CloudManagerBean.java
@@ -296,7 +296,7 @@ public class CloudManagerBean implements CloudManagerLocal {
partitionEventManager.processRequestedPartitionEvents();
}
- @RequiredPermission(Permission.MANAGE_INVENTORY)
+ @RequiredPermission(Permission.MANAGE_SETTINGS)
public PageList<Server> findServersByCriteria(Subject subject, ServerCriteria criteria) {
CriteriaQueryGenerator generator = new CriteriaQueryGenerator(subject, criteria);
CriteriaQueryRunner<Server> runner = new CriteriaQueryRunner<Server>(criteria, generator, entityManager);
commit 9c52b1e5e5e75f65acad0fcd250da92914d7435c
Author: Jirka Kremser <jkremser(a)redhat.com>
Date: Tue Dec 18 17:10:43 2012 +0100
AgentCriteria and Agent finder have been added
diff --git a/modules/core/domain/src/main/java/org/rhq/core/domain/criteria/AgentCriteria.java b/modules/core/domain/src/main/java/org/rhq/core/domain/criteria/AgentCriteria.java
new file mode 100644
index 0000000..b18b5d6
--- /dev/null
+++ b/modules/core/domain/src/main/java/org/rhq/core/domain/criteria/AgentCriteria.java
@@ -0,0 +1,107 @@
+/*
+ * RHQ Management Platform
+ * Copyright (C) 2005-2012 Red Hat, Inc.
+ * All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation version 2 of the License.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+package org.rhq.core.domain.criteria;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+
+import org.rhq.core.domain.cloud.Server;
+import org.rhq.core.domain.resource.Agent;
+import org.rhq.core.domain.util.PageOrdering;
+
+/**
+ * Criteria object for querying {@link Server}s.
+ *
+ * @author Jiri Kremser
+ */
+(a)XmlAccessorType(XmlAccessType.FIELD)
+@SuppressWarnings("unused")
+public class AgentCriteria extends Criteria {
+
+ private static final long serialVersionUID = 1L;
+
+ public static final String SORT_FIELD_CTIME = "ctime";
+
+ public static final String SORT_FIELD_NAME = "name";
+
+ private Integer filterId;
+ private String filterName;
+ private String filterAddress;
+ private Integer filterPort;
+ private Integer filterServerId; // requires override
+ private Integer filterAffinityGroupId; // requires override
+
+ private boolean fetchServer;
+ private boolean fetchAffinityGroup;
+
+ private PageOrdering sortCtime;
+ private PageOrdering sortName;
+
+ public AgentCriteria() {
+ filterOverrides.put("serverId", "server.id = ?");
+ filterOverrides.put("affinityGroupId", "affinityGroup.id = ?");
+ }
+
+ public Class<?> getPersistentClass() {
+ return Agent.class;
+ }
+
+ public void addFilterId(Integer filterId) {
+ this.filterId = filterId;
+ }
+
+ public void addFilterName(String filterName) {
+ this.filterName = filterName;
+ }
+
+ public void addFilterAffinityGroupId(Integer filterAffinityGroupId) {
+ this.filterAffinityGroupId = filterAffinityGroupId;
+ }
+
+ public void addFilterAddress(String filterAddress) {
+ this.filterAddress = filterAddress;
+ }
+
+ public void addFilterPort(Integer filterPort) {
+ this.filterPort = filterPort;
+ }
+
+ public void addFilterServerId(Integer filterServerId) {
+ this.filterServerId = filterServerId;
+ }
+
+ public void fetchAffinityGroup(boolean fetchAffinityGroup) {
+ this.fetchAffinityGroup = fetchAffinityGroup;
+ }
+
+ public void fetchServer(boolean fetchServer) {
+ this.fetchServer = fetchServer;
+ }
+
+ public void addSortCtime(PageOrdering sort) {
+ addSortField(SORT_FIELD_CTIME);
+ this.sortCtime = sort;
+ }
+
+ public void addSortName(PageOrdering sort) {
+ addSortField(SORT_FIELD_NAME);
+ this.sortName = sort;
+ }
+}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/CloudGWTService.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/CloudGWTService.java
index 3e64318..df83ba8 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/CloudGWTService.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/CloudGWTService.java
@@ -33,6 +33,7 @@ import org.rhq.core.domain.cloud.PartitionEventDetails;
import org.rhq.core.domain.cloud.Server;
import org.rhq.core.domain.cloud.composite.AffinityGroupCountComposite;
import org.rhq.core.domain.cloud.composite.ServerWithAgentCountComposite;
+import org.rhq.core.domain.criteria.AgentCriteria;
import org.rhq.core.domain.criteria.PartitionEventCriteria;
import org.rhq.core.domain.criteria.ServerCriteria;
import org.rhq.core.domain.resource.Agent;
@@ -58,47 +59,54 @@ public interface CloudGWTService extends RemoteService {
void deleteServers(int[] serverIds) throws RuntimeException;
void updateServerMode(int[] serverIds, Server.OperationMode mode) throws RuntimeException;
-
+
void updateServer(Server server) throws RuntimeException;
List<FailoverListDetails> getFailoverListDetailsByAgentId(int agentId, PageControl pc) throws RuntimeException;;
PageList<PartitionEvent> findPartitionEventsByCriteria(PartitionEventCriteria criteria) throws RuntimeException;
-
+
PageList<Server> findServersByCriteria(ServerCriteria criteria) throws RuntimeException;
+ PageList<Agent> findAgentsByCriteria(AgentCriteria criteria) throws RuntimeException;
+
void cloudPartitionEventRequest() throws RuntimeException;
void purgeAllEvents() throws RuntimeException;
void deletePartitionEvents(int[] eventIds) throws RuntimeException;
- PageList<PartitionEventDetails> getPartitionEventDetails(int partitionEventId,
- PageControl pageControl) throws RuntimeException;
-
- PageList<AffinityGroupCountComposite> getAffinityGroupCountComposites(PageControl pageControl) throws RuntimeException;
-
+ PageList<PartitionEventDetails> getPartitionEventDetails(int partitionEventId, PageControl pageControl)
+ throws RuntimeException;
+
+ PageList<AffinityGroupCountComposite> getAffinityGroupCountComposites(PageControl pageControl)
+ throws RuntimeException;
+
int deleteAffinityGroups(int[] affinityGroupIds) throws RuntimeException;
-
+
int createAffinityGroup(AffinityGroup affinityGroup) throws RuntimeException;
-
+
void updateAffinityGroup(AffinityGroup affinityGroup) throws RuntimeException;
-
- PageList<Server> getServerMembersByAffinityGroupId(int affinityGroupId, PageControl pageControl) throws RuntimeException;
-
- PageList<Server> getServerNonMembersByAffinityGroupId(int affinityGroupId, PageControl pageControl) throws RuntimeException;
-
- PageList<Agent> getAgentMembersByAffinityGroupId(int affinityGroupId, PageControl pageControl) throws RuntimeException;
-
- PageList<Agent> getAgentNonMembersByAffinityGroupId(int affinityGroupId, PageControl pageControl) throws RuntimeException;
-
+
+ PageList<Server> getServerMembersByAffinityGroupId(int affinityGroupId, PageControl pageControl)
+ throws RuntimeException;
+
+ PageList<Server> getServerNonMembersByAffinityGroupId(int affinityGroupId, PageControl pageControl)
+ throws RuntimeException;
+
+ PageList<Agent> getAgentMembersByAffinityGroupId(int affinityGroupId, PageControl pageControl)
+ throws RuntimeException;
+
+ PageList<Agent> getAgentNonMembersByAffinityGroupId(int affinityGroupId, PageControl pageControl)
+ throws RuntimeException;
+
AffinityGroup getAffinityGroupById(int affinityGroupId) throws RuntimeException;
-
+
void addServersToGroup(int affinityGroupId, Integer[] serverIds) throws RuntimeException;
-
+
void removeServersFromGroup(Integer[] serverIds) throws RuntimeException;
-
+
void addAgentsToGroup(int affinityGroupId, Integer[] agentIds) throws RuntimeException;
-
+
void removeAgentsFromGroup(Integer[] agentIds) throws RuntimeException;
}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/CloudGWTServiceImpl.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/CloudGWTServiceImpl.java
index 1daa1df..db7ec3c 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/CloudGWTServiceImpl.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/CloudGWTServiceImpl.java
@@ -36,6 +36,7 @@ import org.rhq.core.domain.cloud.Server;
import org.rhq.core.domain.cloud.Server.OperationMode;
import org.rhq.core.domain.cloud.composite.AffinityGroupCountComposite;
import org.rhq.core.domain.cloud.composite.ServerWithAgentCountComposite;
+import org.rhq.core.domain.criteria.AgentCriteria;
import org.rhq.core.domain.criteria.PartitionEventCriteria;
import org.rhq.core.domain.criteria.ServerCriteria;
import org.rhq.core.domain.resource.Agent;
@@ -46,6 +47,7 @@ import org.rhq.enterprise.gui.coregui.server.util.SerialUtility;
import org.rhq.enterprise.server.cloud.AffinityGroupManagerLocal;
import org.rhq.enterprise.server.cloud.CloudManagerLocal;
import org.rhq.enterprise.server.cloud.PartitionEventManagerLocal;
+import org.rhq.enterprise.server.core.AgentManagerLocal;
import org.rhq.enterprise.server.util.LookupUtil;
/**
@@ -56,6 +58,8 @@ public class CloudGWTServiceImpl extends AbstractGWTServiceImpl implements Cloud
private static final long serialVersionUID = 1L;
private CloudManagerLocal cloudManager = LookupUtil.getCloudManager();
+
+ private AgentManagerLocal agentManager = LookupUtil.getAgentManager();
private PartitionEventManagerLocal partitionEventManager = LookupUtil.getPartitionEventManager();
@@ -143,6 +147,17 @@ public class CloudGWTServiceImpl extends AbstractGWTServiceImpl implements Cloud
throw getExceptionToThrowToClient(t);
}
}
+
+ @Override
+ public PageList<Agent> findAgentsByCriteria(AgentCriteria criteria) throws RuntimeException {
+ try {
+ return SerialUtility.prepare(
+ agentManager.findAgentsByCriteria(getSessionSubject(), criteria),
+ "CloudGWTServiceImpl.findAgentsByCriteria");
+ } catch (Throwable t) {
+ throw getExceptionToThrowToClient(t);
+ }
+ }
@Override
public void cloudPartitionEventRequest() throws RuntimeException {
diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/core/AgentManagerBean.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/core/AgentManagerBean.java
index 9cced72..42adb10 100644
--- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/core/AgentManagerBean.java
+++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/core/AgentManagerBean.java
@@ -48,6 +48,7 @@ import org.rhq.core.clientapi.server.core.PingRequest;
import org.rhq.core.domain.auth.Subject;
import org.rhq.core.domain.authz.Permission;
import org.rhq.core.domain.common.composite.SystemSetting;
+import org.rhq.core.domain.criteria.AgentCriteria;
import org.rhq.core.domain.measurement.AvailabilityType;
import org.rhq.core.domain.resource.Agent;
import org.rhq.core.domain.resource.composite.AgentLastAvailabilityPingComposite;
@@ -67,6 +68,8 @@ import org.rhq.enterprise.server.core.comm.ServerCommunicationsServiceMBean;
import org.rhq.enterprise.server.core.comm.ServerCommunicationsServiceUtil;
import org.rhq.enterprise.server.measurement.AvailabilityManagerLocal;
import org.rhq.enterprise.server.system.SystemManagerLocal;
+import org.rhq.enterprise.server.util.CriteriaQueryGenerator;
+import org.rhq.enterprise.server.util.CriteriaQueryRunner;
import org.rhq.enterprise.server.util.LookupUtil;
import org.rhq.enterprise.server.util.concurrent.AvailabilityReportSerializer;
@@ -654,5 +657,12 @@ public class AgentManagerBean implements AgentManagerLocal {
return pingResults;
}
+
+ @RequiredPermission(Permission.MANAGE_SETTINGS)
+ public PageList<Agent> findAgentsByCriteria(Subject subject, AgentCriteria criteria) {
+ CriteriaQueryGenerator generator = new CriteriaQueryGenerator(subject, criteria);
+ CriteriaQueryRunner<Agent> runner = new CriteriaQueryRunner<Agent>(criteria, generator, entityManager);
+ return runner.execute();
+ }
}
\ No newline at end of file
diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/core/AgentManagerLocal.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/core/AgentManagerLocal.java
index e09cfaa..5494e4d 100644
--- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/core/AgentManagerLocal.java
+++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/core/AgentManagerLocal.java
@@ -30,6 +30,7 @@ import org.rhq.core.clientapi.server.core.AgentVersion;
import org.rhq.core.clientapi.server.core.CoreServerService;
import org.rhq.core.clientapi.server.core.PingRequest;
import org.rhq.core.domain.auth.Subject;
+import org.rhq.core.domain.criteria.AgentCriteria;
import org.rhq.core.domain.resource.Agent;
import org.rhq.core.domain.util.PageControl;
import org.rhq.core.domain.util.PageList;
@@ -308,4 +309,6 @@ public interface AgentManagerLocal {
* @return The updated request object.
*/
public PingRequest handlePingRequest(PingRequest request);
+
+ PageList<Agent> findAgentsByCriteria(Subject subject, AgentCriteria criteria);
}
\ No newline at end of file
commit 6ad56994db007039324ad2d6462636546e4e1ce1
Author: Jirka Kremser <jkremser(a)redhat.com>
Date: Fri Dec 14 19:35:46 2012 +0100
ServerCriteria and Server finder have been added
diff --git a/modules/core/domain/src/main/java/org/rhq/core/domain/criteria/ServerCriteria.java b/modules/core/domain/src/main/java/org/rhq/core/domain/criteria/ServerCriteria.java
new file mode 100644
index 0000000..b00b3d7
--- /dev/null
+++ b/modules/core/domain/src/main/java/org/rhq/core/domain/criteria/ServerCriteria.java
@@ -0,0 +1,125 @@
+/*
+ * RHQ Management Platform
+ * Copyright (C) 2005-2012 Red Hat, Inc.
+ * All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation version 2 of the License.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+package org.rhq.core.domain.criteria;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+
+import org.rhq.core.domain.cloud.Server;
+import org.rhq.core.domain.cloud.Server.OperationMode;
+import org.rhq.core.domain.util.PageOrdering;
+
+/**
+ * Criteria object for querying {@link Server}s.
+ *
+ * @author Jiri Kremser
+ */
+(a)XmlAccessorType(XmlAccessType.FIELD)
+@SuppressWarnings("unused")
+public class ServerCriteria extends Criteria {
+
+ private static final long serialVersionUID = 1L;
+
+ public static final String SORT_FIELD_CTIME = "ctime";
+
+ public static final String SORT_FIELD_NAME = "name";
+
+ public static final String SORT_FIELD_COMPUTE_POWER = "computePower";
+
+ private Integer filterId;
+ private String filterName;
+ private String filterAddress;
+ private Integer filterPort;
+ private Integer filterSecurePort;
+ private OperationMode filterOperationMode; // requires override
+ private Integer filterComputePower;
+ private Integer filterAffinityGroupId; // requires override
+
+ private boolean fetchAgents;
+ private boolean fetchAffinityGroup;
+
+ private PageOrdering sortCtime;
+ private PageOrdering sortName;
+ private PageOrdering sortComputePower;
+
+ public ServerCriteria() {
+ // filterOverrides.put("operationMode", "operationMode IN ( ? )");
+ filterOverrides.put("affinityGroupId", "affinityGroup.id = ?");
+ }
+
+ public Class<?> getPersistentClass() {
+ return Server.class;
+ }
+
+ public void addFilterId(Integer filterId) {
+ this.filterId = filterId;
+ }
+
+ public void addFilterName(String filterName) {
+ this.filterName = filterName;
+ }
+
+ public void addFilterAddress(String filterAddress) {
+ this.filterAddress = filterAddress;
+ }
+
+ public void addFilterPort(Integer filterPort) {
+ this.filterPort = filterPort;
+ }
+
+ public void addFilterSecurePort(Integer filterSecurePort) {
+ this.filterSecurePort = filterSecurePort;
+ }
+
+ public void addFilterOperationMode(OperationMode operationMode) {
+ this.filterOperationMode = operationMode;
+ }
+
+ public void addFilterComputePower(Integer filterComputePower) {
+ this.filterComputePower = filterComputePower;
+ }
+
+ public void addFilterAffinityGroupId(Integer filterAffinityGroupId) {
+ this.filterAffinityGroupId = filterAffinityGroupId;
+ }
+
+ public void fetchAgents(boolean fetchAgents) {
+ this.fetchAgents = fetchAgents;
+ }
+
+ public void fetchAffinityGroup(boolean fetchAffinityGroup) {
+ this.fetchAffinityGroup = fetchAffinityGroup;
+ }
+
+ public void addSortCtime(PageOrdering sort) {
+ addSortField(SORT_FIELD_CTIME);
+ this.sortCtime = sort;
+ }
+
+ public void addSortName(PageOrdering sort) {
+ addSortField(SORT_FIELD_NAME);
+ this.sortName = sort;
+ }
+
+ public void addSortComputePower(PageOrdering sortComputePower) {
+ addSortField(SORT_FIELD_COMPUTE_POWER);
+ this.sortComputePower = sortComputePower;
+ }
+}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupServersSelector.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupServersSelector.java
index a1f5507..f104d6c 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupServersSelector.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupServersSelector.java
@@ -42,6 +42,7 @@ import com.smartgwt.client.widgets.layout.HLayout;
import com.smartgwt.client.widgets.layout.VLayout;
import org.rhq.core.domain.cloud.Server;
+import org.rhq.core.domain.criteria.ServerCriteria;
import org.rhq.core.domain.util.PageControl;
import org.rhq.core.domain.util.PageList;
import org.rhq.enterprise.gui.coregui.client.components.selector.AbstractSelector;
@@ -53,13 +54,13 @@ import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableIButton;
/**
* @author Jirka Kremser
*/
-public class AffinityGroupServersSelector extends AbstractSelector<Server, org.rhq.core.domain.criteria.Criteria> {
+public class AffinityGroupServersSelector extends AbstractSelector<Server, ServerCriteria> {
private static final String ITEM_ICON = "types/Server_up_16.png";
private final Integer affinityGroupId;
- private static RPCDataSource<Server, org.rhq.core.domain.criteria.Criteria> datasource = null;
+ private static RPCDataSource<Server, ServerCriteria> datasource = null;
private static Window modalWindow;
private static boolean shouldBeClosed;
@@ -98,7 +99,7 @@ public class AffinityGroupServersSelector extends AbstractSelector<Server, org.r
}
@Override
- protected RPCDataSource<Server, org.rhq.core.domain.criteria.Criteria> getDataSource() {
+ protected RPCDataSource<Server, ServerCriteria> getDataSource() {
if (datasource == null) {
datasource = new ServerDatasource(affinityGroupId, false);
}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventDatasource.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventDatasource.java
index 4a07853..f77a843 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventDatasource.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventDatasource.java
@@ -158,6 +158,9 @@ public class PartitionEventDatasource extends RPCDataSource<PartitionEvent, Part
@Override
protected PartitionEventCriteria getFetchCriteria(DSRequest request) {
+ //todo: do it like in ResourceDatasource.class
+
+
ExecutionStatus[] statuses = getArrayFilter(request, FILTER_EXECUTION_STATUS, ExecutionStatus.class);
PartitionEventType[] types = getArrayFilter(request, FILTER_EVENT_TYPE, PartitionEventType.class);
if (types == null || types.length == 0 || statuses == null || statuses.length == 0) {
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDatasource.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDatasource.java
index d942c44..0f76f74 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDatasource.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDatasource.java
@@ -42,18 +42,28 @@ import com.smartgwt.client.widgets.grid.ListGridField;
import com.smartgwt.client.widgets.grid.ListGridRecord;
import org.rhq.core.domain.cloud.Server;
-import org.rhq.core.domain.criteria.Criteria;
+import org.rhq.core.domain.cloud.Server.OperationMode;
+import org.rhq.core.domain.criteria.ServerCriteria;
import org.rhq.core.domain.util.PageControl;
import org.rhq.core.domain.util.PageList;
import org.rhq.core.domain.util.PageOrdering;
import org.rhq.enterprise.gui.coregui.client.components.table.TimestampCellFormatter;
import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup;
+import org.rhq.enterprise.gui.coregui.client.util.Log;
/**
* @author Jirka Kremser
*
*/
-public class ServerDatasource extends AbstractServerNodeDatasource<Server, Criteria> {
+public class ServerDatasource extends AbstractServerNodeDatasource<Server, ServerCriteria> {
+
+ // filters
+ public static final String FILTER_ADDRESS = FIELD_ADDRESS.propertyName();
+ public static final String FILTER_PORT = FIELD_PORT.propertyName();
+ public static final String FILTER_SECURE_PORT = FIELD_SECURE_PORT.propertyName();
+ public static final String FILTER_OPERATION_MODE = FIELD_OPERATION_MODE.propertyName();
+ public static final String FILTER_COMPUTE_POWER = "computePower";
+ public static final String FILTER_AFFINITY_GROUP_ID = "affinityGroupId";
private final Integer affinityGroupId;
@@ -103,7 +113,7 @@ public class ServerDatasource extends AbstractServerNodeDatasource<Server, Crite
}
@Override
- protected void executeFetch(final DSRequest request, final DSResponse response, Criteria criteria) {
+ protected void executeFetch(final DSRequest request, final DSResponse response, ServerCriteria criteria) {
if (affinityGroupId == null) {
return;
}
@@ -122,8 +132,10 @@ public class ServerDatasource extends AbstractServerNodeDatasource<Server, Crite
processResponse(request.getRequestId(), response);
}
};
+
if(fetchMembers) {
- GWTServiceLookup.getCloudService().getServerMembersByAffinityGroupId(affinityGroupId, pc, callback);
+ criteria.addFilterAffinityGroupId(affinityGroupId);
+ GWTServiceLookup.getCloudService().findServersByCriteria(criteria, callback);
} else {
GWTServiceLookup.getCloudService().getServerNonMembersByAffinityGroupId(affinityGroupId, pc, callback);
}
@@ -181,8 +193,22 @@ public class ServerDatasource extends AbstractServerNodeDatasource<Server, Crite
}
@Override
- protected Criteria getFetchCriteria(DSRequest request) {
- // we don't use criteria for this datasource, just return null
- return null;
+ protected ServerCriteria getFetchCriteria(DSRequest request) {
+ ServerCriteria criteria = new ServerCriteria();
+ printRequestCriteria(request);
+ criteria.addFilterId(getFilter(request, FIELD_ID.propertyName(), Integer.class));
+ criteria.addFilterName(getFilter(request, FIELD_NAME.propertyName(), String.class));
+ criteria.addFilterAddress(getFilter(request, FILTER_ADDRESS, String.class));
+ criteria.addFilterPort(getFilter(request, FILTER_PORT, Integer.class));
+ criteria.addFilterSecurePort(getFilter(request, FILTER_SECURE_PORT, Integer.class));
+ criteria.addFilterOperationMode(getFilter(request, FILTER_OPERATION_MODE, OperationMode.class));
+ criteria.addFilterComputePower(getFilter(request, FILTER_COMPUTE_POWER, Integer.class));
+ criteria.addFilterAffinityGroupId(getFilter(request, FILTER_AFFINITY_GROUP_ID, Integer.class));
+
+ //@todo: Remove me when finished debugging search expression
+ Log.debug(" *** ServerCriteria Search String: " + getFilter(request, "search", String.class));
+ criteria.setSearchExpression(getFilter(request, "search", String.class));
+
+ return criteria;
}
}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerTableView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerTableView.java
index 24e2d9c..79be297 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerTableView.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerTableView.java
@@ -38,7 +38,7 @@ import com.smartgwt.client.widgets.grid.ListGridRecord;
import org.rhq.core.domain.authz.Permission;
import org.rhq.core.domain.cloud.Server;
-import org.rhq.core.domain.criteria.Criteria;
+import org.rhq.core.domain.criteria.BaseCriteria;
import org.rhq.enterprise.gui.coregui.client.CoreGUI;
import org.rhq.enterprise.gui.coregui.client.IconEnum;
import org.rhq.enterprise.gui.coregui.client.admin.AdministrationView;
@@ -56,7 +56,7 @@ import org.rhq.enterprise.gui.coregui.client.util.selenium.SeleniumUtility;
* @author Jirka Kremser
*
*/
-public class ServerTableView extends TableSection<AbstractServerNodeDatasource<? extends Serializable, Criteria>>
+public class ServerTableView extends TableSection<AbstractServerNodeDatasource<? extends Serializable, ? extends BaseCriteria>>
implements HasViewName {
public static final ViewName VIEW_ID = new ViewName("Servers(GWT)", MSG.view_adminTopology_servers() + "(GWT)",
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/CloudGWTService.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/CloudGWTService.java
index afaacb8..3e64318 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/CloudGWTService.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/CloudGWTService.java
@@ -34,6 +34,7 @@ import org.rhq.core.domain.cloud.Server;
import org.rhq.core.domain.cloud.composite.AffinityGroupCountComposite;
import org.rhq.core.domain.cloud.composite.ServerWithAgentCountComposite;
import org.rhq.core.domain.criteria.PartitionEventCriteria;
+import org.rhq.core.domain.criteria.ServerCriteria;
import org.rhq.core.domain.resource.Agent;
import org.rhq.core.domain.util.PageControl;
import org.rhq.core.domain.util.PageList;
@@ -63,6 +64,8 @@ public interface CloudGWTService extends RemoteService {
List<FailoverListDetails> getFailoverListDetailsByAgentId(int agentId, PageControl pc) throws RuntimeException;;
PageList<PartitionEvent> findPartitionEventsByCriteria(PartitionEventCriteria criteria) throws RuntimeException;
+
+ PageList<Server> findServersByCriteria(ServerCriteria criteria) throws RuntimeException;
void cloudPartitionEventRequest() throws RuntimeException;
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/CloudGWTServiceImpl.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/CloudGWTServiceImpl.java
index 32fadde..1daa1df 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/CloudGWTServiceImpl.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/CloudGWTServiceImpl.java
@@ -37,6 +37,7 @@ import org.rhq.core.domain.cloud.Server.OperationMode;
import org.rhq.core.domain.cloud.composite.AffinityGroupCountComposite;
import org.rhq.core.domain.cloud.composite.ServerWithAgentCountComposite;
import org.rhq.core.domain.criteria.PartitionEventCriteria;
+import org.rhq.core.domain.criteria.ServerCriteria;
import org.rhq.core.domain.resource.Agent;
import org.rhq.core.domain.util.PageControl;
import org.rhq.core.domain.util.PageList;
@@ -130,6 +131,18 @@ public class CloudGWTServiceImpl extends AbstractGWTServiceImpl implements Cloud
throw getExceptionToThrowToClient(t);
}
}
+
+ @Override
+ public PageList<Server> findServersByCriteria(ServerCriteria criteria)
+ throws RuntimeException {
+ try {
+ return SerialUtility.prepare(
+ cloudManager.findServersByCriteria(getSessionSubject(), criteria),
+ "CloudGWTServiceImpl.findServersByCriteria");
+ } catch (Throwable t) {
+ throw getExceptionToThrowToClient(t);
+ }
+ }
@Override
public void cloudPartitionEventRequest() throws RuntimeException {
diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/CloudManagerBean.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/CloudManagerBean.java
index 4bfc1af..bd9e88b 100644
--- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/CloudManagerBean.java
+++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/CloudManagerBean.java
@@ -36,6 +36,7 @@ import org.rhq.core.domain.cloud.FailoverListDetails;
import org.rhq.core.domain.cloud.PartitionEventType;
import org.rhq.core.domain.cloud.Server;
import org.rhq.core.domain.cloud.composite.ServerWithAgentCountComposite;
+import org.rhq.core.domain.criteria.ServerCriteria;
import org.rhq.core.domain.resource.Agent;
import org.rhq.core.domain.server.PersistenceUtility;
import org.rhq.core.domain.util.PageControl;
@@ -44,6 +45,8 @@ import org.rhq.enterprise.server.RHQConstants;
import org.rhq.enterprise.server.authz.AuthorizationManagerLocal;
import org.rhq.enterprise.server.authz.RequiredPermission;
import org.rhq.enterprise.server.cloud.instance.ServerManagerLocal;
+import org.rhq.enterprise.server.util.CriteriaQueryGenerator;
+import org.rhq.enterprise.server.util.CriteriaQueryRunner;
import org.rhq.enterprise.server.util.LookupUtil;
/**
@@ -292,4 +295,11 @@ public class CloudManagerBean implements CloudManagerLocal {
// regardless of the number of pending requests, as the work would be duplicated.
partitionEventManager.processRequestedPartitionEvents();
}
+
+ @RequiredPermission(Permission.MANAGE_INVENTORY)
+ public PageList<Server> findServersByCriteria(Subject subject, ServerCriteria criteria) {
+ CriteriaQueryGenerator generator = new CriteriaQueryGenerator(subject, criteria);
+ CriteriaQueryRunner<Server> runner = new CriteriaQueryRunner<Server>(criteria, generator, entityManager);
+ return runner.execute();
+ }
}
diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/CloudManagerLocal.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/CloudManagerLocal.java
index 212f835..92b59d3 100644
--- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/CloudManagerLocal.java
+++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/CloudManagerLocal.java
@@ -26,6 +26,7 @@ import org.rhq.core.domain.auth.Subject;
import org.rhq.core.domain.cloud.FailoverListDetails;
import org.rhq.core.domain.cloud.Server;
import org.rhq.core.domain.cloud.composite.ServerWithAgentCountComposite;
+import org.rhq.core.domain.criteria.ServerCriteria;
import org.rhq.core.domain.resource.Agent;
import org.rhq.core.domain.util.PageControl;
import org.rhq.core.domain.util.PageList;
@@ -89,4 +90,6 @@ public interface CloudManagerLocal {
PageList<FailoverListDetails> getFailoverListDetailsByAgentId(int agentId, PageControl pc);
void markStaleServersDown(Subject subject);
+
+ PageList<Server> findServersByCriteria(Subject subject, ServerCriteria criteria);
}
commit 134d6f6984e69dc06b105a3024f30f947c8f498a
Author: Jirka Kremser <jkremser(a)redhat.com>
Date: Fri Dec 14 15:21:53 2012 +0100
Revert "exposing the CloudManagerBean via CLI"
This reverts commit 60c1d42fa5750ef5d1829e97b6b15323501bc3f2.
diff --git a/modules/enterprise/binding/src/main/java/org/rhq/bindings/client/RhqManager.java b/modules/enterprise/binding/src/main/java/org/rhq/bindings/client/RhqManager.java
index 151267f..d374324 100644
--- a/modules/enterprise/binding/src/main/java/org/rhq/bindings/client/RhqManager.java
+++ b/modules/enterprise/binding/src/main/java/org/rhq/bindings/client/RhqManager.java
@@ -24,7 +24,6 @@ import org.rhq.enterprise.server.alert.AlertManagerRemote;
import org.rhq.enterprise.server.auth.SubjectManagerRemote;
import org.rhq.enterprise.server.authz.RoleManagerRemote;
import org.rhq.enterprise.server.bundle.BundleManagerRemote;
-import org.rhq.enterprise.server.cloud.CloudManagerRemote;
import org.rhq.enterprise.server.configuration.ConfigurationManagerRemote;
import org.rhq.enterprise.server.content.ContentManagerRemote;
import org.rhq.enterprise.server.content.RepoManagerRemote;
@@ -64,7 +63,6 @@ public enum RhqManager {
BundleManager(BundleManagerRemote.class, "${BundleManager}"), //
CallTimeDataManager(CallTimeDataManagerRemote.class, "${CallTimeDataManager}"), //
RepoManager(RepoManagerRemote.class, "${RepoManager}"), //
- CloudManager(CloudManagerRemote.class, "${CloudManager}"), //
ConfigurationManager(ConfigurationManagerRemote.class, "${ConfigurationManager}"), //
ContentManager(ContentManagerRemote.class, "${ContentManager}"), //
DataAccessManager(DataAccessManagerRemote.class, "${DataAccessManager}"), //
diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/CloudManagerBean.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/CloudManagerBean.java
index 391b9e4..4bfc1af 100644
--- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/CloudManagerBean.java
+++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/CloudManagerBean.java
@@ -54,7 +54,7 @@ import org.rhq.enterprise.server.util.LookupUtil;
* @author Joseph Marques
*/
@Stateless
-public class CloudManagerBean implements CloudManagerLocal, CloudManagerRemote {
+public class CloudManagerBean implements CloudManagerLocal {
private final Log log = LogFactory.getLog(CloudManagerBean.class);
// A time sufficient to determine whether a server is down. Can be based on the initial delay set for the server instance
diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/CloudManagerRemote.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/CloudManagerRemote.java
deleted file mode 100644
index 1f97b99..0000000
--- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/CloudManagerRemote.java
+++ /dev/null
@@ -1,90 +0,0 @@
-/*
- * RHQ Management Platform
- * Copyright (C) 2005-2012 Red Hat, Inc.
- * All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation version 2 of the License.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-package org.rhq.enterprise.server.cloud;
-
-import java.util.List;
-
-import javax.ejb.Remote;
-
-import org.rhq.core.domain.auth.Subject;
-import org.rhq.core.domain.cloud.Server;
-import org.rhq.core.domain.cloud.composite.ServerWithAgentCountComposite;
-import org.rhq.core.domain.util.PageControl;
-import org.rhq.core.domain.util.PageList;
-
-/**
- * @author Jiri Kremser
- */
-@Remote
-public interface CloudManagerRemote {
-
-// void deleteServers(Integer[] serverIds) throws CloudManagerException;
-//
-// void deleteServer(Integer serverId) throws CloudManagerException;
-//
-// List<Agent> getAgentsByServerName(String serverName);
-//
-// Server getServerById(int serverId);
-//
-// Server getServerByName(String serverName);
-//
-// /**
-// * Return every server registered in the database considered part of the active cloud. This will exclude, for example,
-// * servers in INSTALLED mode or any other mode that should not be included when performing cloud operations such as partitioning.
-// * @return All servers available to the cloud.
-// */
-// List<Server> getAllCloudServers();
-//
- /**
- * Return every server registered in the database.
- * @return All servers, regardless of operation mode.
- */
- List<Server> getAllServers();
-
- PageList<ServerWithAgentCountComposite> getServerComposites(Subject subject, PageControl pc);
-//
-// /**
-// * Returns the number of servers that are part of the "server cloud", which excludes
-// * servers that have been installed but not associated with the cloud.
-// * The returned count will include those servers that are down or in maintenance mode,
-// * in addition to those servers that are currently running in a normal state.
-// *
-// * @return count of servers in the cloud
-// */
-// int getServerCount();
-//
-// /**
-// * Returns the number of servers that are part of the "server cloud" that are currently
-// * running in "normal" mode.
-// *
-// * This excludes all other servers such as those servers that have been installed but
-// * not associated with the cloud, servers that are down or in maintenance mode.
-// *
-// * @return count of servers in the cloud that are in a normal running state
-// */
-// int getNormalServerCount();
-//
-// void updateServerMode(Integer[] serverIds, Server.OperationMode mode);
-//
-// Server updateServer(Subject subject, Server server);
-//
-// PageList<FailoverListDetails> getFailoverListDetailsByAgentId(int agentId, PageControl pc);
-//
-// void markStaleServersDown(Subject subject);
-}
diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/util/RemoteAPIValidator.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/util/RemoteAPIValidator.java
index 453e0a5..fddc6c6 100644
--- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/util/RemoteAPIValidator.java
+++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/util/RemoteAPIValidator.java
@@ -34,7 +34,6 @@ import org.rhq.enterprise.server.alert.AlertDefinitionManagerBean;
import org.rhq.enterprise.server.alert.AlertManagerBean;
import org.rhq.enterprise.server.auth.SubjectManagerBean;
import org.rhq.enterprise.server.authz.RoleManagerBean;
-import org.rhq.enterprise.server.cloud.CloudManagerBean;
import org.rhq.enterprise.server.configuration.ConfigurationManagerBean;
import org.rhq.enterprise.server.content.AdvisoryManagerBean;
import org.rhq.enterprise.server.content.ContentManagerBean;
@@ -69,7 +68,6 @@ public class RemoteAPIValidator {
AvailabilityManagerBean.class,//
CallTimeDataManagerBean.class, //
RepoManagerBean.class,//
- CloudManagerBean.class,//
ConfigurationManagerBean.class, //
ContentManagerBean.class, //
//ContentSourceManagerBean.class, //
commit 756bac150c6f31e4dd5a60c9f519226fff7f28c1
Author: Jirka Kremser <jkremser(a)redhat.com>
Date: Fri Dec 14 14:43:33 2012 +0100
adding comment
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/FailoverListItemDatasource.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/FailoverListItemDatasource.java
index edce33a..6dd2430 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/FailoverListItemDatasource.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/FailoverListItemDatasource.java
@@ -53,6 +53,8 @@ import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup;
public class FailoverListItemDatasource extends AbstractServerNodeDatasource<FailoverListDetails, Criteria> {
private final int agentId;
+
+ // this delegate is there to not repeat the copyValues code
private final ServerDatasource serverDatasource;
public FailoverListItemDatasource(int agentId) {
commit 2ecf112a35453de2ab40aa4c091aff039c73f26c
Merge: 829bede e794a37
Author: Jirka Kremser <jkremser(a)redhat.com>
Date: Fri Dec 14 13:30:23 2012 +0100
Merge branch 'master' into jkremser/ha-jsf-to-gwt-rewrite
commit 829bedef03364ec7dcafdd64fef274fe52a951e4
Author: Jirka Kremser <jkremser(a)redhat.com>
Date: Thu Dec 13 18:37:27 2012 +0100
Buttons were moved to tool strips; button enablement is now refreshing properly even after the modal window is closed by "X" button
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/AdministrationView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/AdministrationView.java
index e749f61..6afe5e4 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/AdministrationView.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/AdministrationView.java
@@ -151,57 +151,51 @@ public class AdministrationView extends AbstractSectionedLeftNavigationView {
}
}, getGlobalPermissions().contains(Permission.MANAGE_INVENTORY));
- NavigationItem agentsItem = new NavigationItem(PAGE_AGENTS_VIEW_ID, new ViewFactory() {
+ NavigationItem agentsItem = new NavigationItem(PAGE_AGENTS_VIEW_ID, new ViewFactory() {
public Canvas createView() {
return new FullHTMLPane(extendLocatorId(PAGE_AGENTS_VIEW_ID.getName()),
"/rhq/ha/listAgents-plain.xhtml?nomenu=true");
}
}, getGlobalPermissions().contains(Permission.MANAGE_INVENTORY));
- NavigationItem affinityGroupsItem = new NavigationItem(PAGE_AFFINITY_GROUPS_VIEW_ID,
- new ViewFactory() {
- public Canvas createView() {
- return new FullHTMLPane(extendLocatorId(PAGE_AFFINITY_GROUPS_VIEW_ID.getName()),
- "/rhq/ha/listAffinityGroups-plain.xhtml?nomenu=true");
- }
- }, getGlobalPermissions().contains(Permission.MANAGE_INVENTORY));
+ NavigationItem affinityGroupsItem = new NavigationItem(PAGE_AFFINITY_GROUPS_VIEW_ID, new ViewFactory() {
+ public Canvas createView() {
+ return new FullHTMLPane(extendLocatorId(PAGE_AFFINITY_GROUPS_VIEW_ID.getName()),
+ "/rhq/ha/listAffinityGroups-plain.xhtml?nomenu=true");
+ }
+ }, getGlobalPermissions().contains(Permission.MANAGE_INVENTORY));
- NavigationItem partitionEventsItem = new NavigationItem(PAGE_PARTITION_EVENTS_VIEW_ID,
- new ViewFactory() {
- public Canvas createView() {
- return new FullHTMLPane(extendLocatorId(PAGE_PARTITION_EVENTS_VIEW_ID.getName()),
- "/rhq/ha/listPartitionEvents-plain.xhtml?nomenu=true");
- }
- }, getGlobalPermissions().contains(Permission.MANAGE_INVENTORY));
+ NavigationItem partitionEventsItem = new NavigationItem(PAGE_PARTITION_EVENTS_VIEW_ID, new ViewFactory() {
+ public Canvas createView() {
+ return new FullHTMLPane(extendLocatorId(PAGE_PARTITION_EVENTS_VIEW_ID.getName()),
+ "/rhq/ha/listPartitionEvents-plain.xhtml?nomenu=true");
+ }
+ }, getGlobalPermissions().contains(Permission.MANAGE_INVENTORY));
- NavigationItem remoteAgentInstallItem = new NavigationItem(RemoteAgentInstallView.VIEW_ID,
- new ViewFactory() {
- public Canvas createView() {
- return new RemoteAgentInstallView(extendLocatorId("RemoteAgentInstall"));
- }
- }, getGlobalPermissions().contains(Permission.MANAGE_INVENTORY));
+ NavigationItem remoteAgentInstallItem = new NavigationItem(RemoteAgentInstallView.VIEW_ID, new ViewFactory() {
+ public Canvas createView() {
+ return new RemoteAgentInstallView(extendLocatorId("RemoteAgentInstall"));
+ }
+ }, getGlobalPermissions().contains(Permission.MANAGE_INVENTORY));
NavigationItem serversItemGwt = new NavigationItem(ServerTableView.VIEW_ID, new ViewFactory() {
public Canvas createView() {
- return new ServerTableView(extendLocatorId(ServerTableView.VIEW_ID.getName()),
- ServerTableView.VIEW_ID.getTitle(), null);
+ return new ServerTableView(extendLocatorId(ServerTableView.VIEW_ID.getName()), null, false);
}
}, getGlobalPermissions().contains(Permission.MANAGE_INVENTORY));
-
+
NavigationItem agentsItemGwt = new NavigationItem(AgentTableView.VIEW_ID, new ViewFactory() {
public Canvas createView() {
- return new AgentTableView(extendLocatorId(AgentTableView.VIEW_ID.getName()),
- AgentTableView.VIEW_ID.getTitle(), null);
+ return new AgentTableView(extendLocatorId(AgentTableView.VIEW_ID.getName()), null, false);
}
}, getGlobalPermissions().contains(Permission.MANAGE_INVENTORY));
-
+
NavigationItem affinityGroupsItemGwt = new NavigationItem(AffinityGroupTableView.VIEW_ID, new ViewFactory() {
public Canvas createView() {
- return new AffinityGroupTableView(extendLocatorId(AffinityGroupTableView.VIEW_ID.getName()),
- AffinityGroupTableView.VIEW_ID.getTitle());
+ return new AffinityGroupTableView(extendLocatorId(AffinityGroupTableView.VIEW_ID.getName()));
}
}, getGlobalPermissions().contains(Permission.MANAGE_INVENTORY));
-
+
NavigationItem partitionEventsGwt = new NavigationItem(PartitionEventTableView.VIEW_ID, new ViewFactory() {
public Canvas createView() {
return new PartitionEventTableView(extendLocatorId(PartitionEventTableView.VIEW_ID.getName()),
@@ -211,11 +205,13 @@ public class AdministrationView extends AbstractSectionedLeftNavigationView {
// Arrays.asList returns a list with a fixed size, therefore there is the wrapping ArrayList
List<NavigationItem> navigationItems = new ArrayList<NavigationItem>(Arrays.asList(serversItem, agentsItem,
- affinityGroupsItem, partitionEventsItem, serversItemGwt, agentsItemGwt, affinityGroupsItemGwt, partitionEventsGwt));
+ affinityGroupsItem, partitionEventsItem, serversItemGwt, agentsItemGwt, affinityGroupsItemGwt,
+ partitionEventsGwt));
if (isRHQ) {
navigationItems.add(remoteAgentInstallItem);
}
- NavigationSection topologyRegion = new NavigationSection(SECTION_TOPOLOGY_VIEW_ID, navigationItems.toArray(new NavigationItem[]{}));
+ NavigationSection topologyRegion = new NavigationSection(SECTION_TOPOLOGY_VIEW_ID,
+ navigationItems.toArray(new NavigationItem[] {}));
return topologyRegion;
}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupDetailView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupDetailView.java
index 8dcd595..3005f7d 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupDetailView.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupDetailView.java
@@ -26,10 +26,10 @@ import com.google.gwt.user.client.rpc.AsyncCallback;
import com.smartgwt.client.types.Overflow;
import com.smartgwt.client.types.VisibilityMode;
import com.smartgwt.client.util.SC;
-import com.smartgwt.client.widgets.form.fields.ButtonItem;
+import com.smartgwt.client.widgets.IButton;
+import com.smartgwt.client.widgets.events.ClickEvent;
+import com.smartgwt.client.widgets.events.ClickHandler;
import com.smartgwt.client.widgets.form.fields.TextItem;
-import com.smartgwt.client.widgets.form.fields.events.ClickEvent;
-import com.smartgwt.client.widgets.form.fields.events.ClickHandler;
import com.smartgwt.client.widgets.layout.SectionStack;
import com.smartgwt.client.widgets.layout.SectionStackSection;
@@ -40,6 +40,7 @@ import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup;
import org.rhq.enterprise.gui.coregui.client.util.Log;
import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableDynamicForm;
import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableSectionStack;
+import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableToolStrip;
import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableVLayout;
/**
@@ -146,7 +147,7 @@ public class AffinityGroupDetailView extends LocatableVLayout implements Bookmar
private void prepareAgentSection(SectionStack stack) {
SectionStackSection section = new SectionStackSection(MSG.view_adminTopology_affinityGroups_agetnMembers());
section.setExpanded(true);
- AgentTableView agentsTable = new AgentTableView(extendLocatorId(AgentTableView.VIEW_ID.getName()), null,
+ AgentTableView agentsTable = new AgentTableView(extendLocatorId(AgentTableView.VIEW_ID.getName()),
affinityGroupId, true);
section.setItems(agentsTable);
@@ -158,7 +159,7 @@ public class AffinityGroupDetailView extends LocatableVLayout implements Bookmar
private void prepareServerSection(SectionStack stack) {
SectionStackSection section = new SectionStackSection(MSG.view_adminTopology_affinityGroups_serverMembers());
section.setExpanded(true);
- ServerTableView serverTable = new ServerTableView(extendLocatorId(AgentTableView.VIEW_ID.getName()), null,
+ ServerTableView serverTable = new ServerTableView(extendLocatorId(AgentTableView.VIEW_ID.getName()),
affinityGroupId, true);
section.setItems(serverTable);
@@ -176,10 +177,16 @@ public class AffinityGroupDetailView extends LocatableVLayout implements Bookmar
final TextItem nameItem = new TextItem(FIELD_NAME.propertyName(), FIELD_NAME.title());
nameItem.setValue(affinityGroup.getName());
+
+ LocatableToolStrip footer = new LocatableToolStrip(extendLocatorId("detailsFooter"));
+ footer.setPadding(5);
+ footer.setWidth100();
+ footer.setMembersMargin(15);
- ButtonItem saveButton = new ButtonItem();
+ IButton saveButton = new IButton();
saveButton.setOverflow(Overflow.VISIBLE);
saveButton.setTitle(MSG.common_button_save());
+// saveButton.setWidth(70);
saveButton.addClickHandler(new ClickHandler() {
public void onClick(ClickEvent event) {
affinityGroup.setName(nameItem.getValueAsString());
@@ -194,12 +201,13 @@ public class AffinityGroupDetailView extends LocatableVLayout implements Bookmar
});
}
});
+ footer.addMember(saveButton);
- form.setItems(nameItem, saveButton);
+ form.setItems(nameItem);
SectionStackSection section = new SectionStackSection(MSG.common_title_details());
section.setExpanded(true);
- section.setItems(form);
+ section.setItems(form, footer);
detailsSection = section;
initSectionCount++;
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupServersSelector.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupServersSelector.java
index 9653ef2..a1f5507 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupServersSelector.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupServersSelector.java
@@ -25,17 +25,17 @@ package org.rhq.enterprise.gui.coregui.client.admin.topology;
import java.util.ArrayList;
import java.util.List;
-import com.google.gwt.user.client.Timer;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.smartgwt.client.data.Criteria;
import com.smartgwt.client.types.Alignment;
-import com.smartgwt.client.types.LayoutPolicy;
import com.smartgwt.client.types.Overflow;
import com.smartgwt.client.util.SC;
import com.smartgwt.client.widgets.IButton;
import com.smartgwt.client.widgets.Window;
import com.smartgwt.client.widgets.events.ClickEvent;
import com.smartgwt.client.widgets.events.ClickHandler;
+import com.smartgwt.client.widgets.events.CloseClickEvent;
+import com.smartgwt.client.widgets.events.CloseClickHandler;
import com.smartgwt.client.widgets.form.DynamicForm;
import com.smartgwt.client.widgets.grid.ListGridRecord;
import com.smartgwt.client.widgets.layout.HLayout;
@@ -62,6 +62,7 @@ public class AffinityGroupServersSelector extends AbstractSelector<Server, org.r
private static RPCDataSource<Server, org.rhq.core.domain.criteria.Criteria> datasource = null;
private static Window modalWindow;
+ private static boolean shouldBeClosed;
private static VLayout layout;
private List<Integer> originallyAssignedIds;
@@ -83,15 +84,9 @@ public class AffinityGroupServersSelector extends AbstractSelector<Server, org.r
ListGridRecord[] records = getDataSource().buildRecords(result);
originallyAssignedIds = getIdList(records);
setAssigned(records);
- new Timer() {
- @Override
- public void run() {
- modalWindow.addItem(layout);
- modalWindow.show();
- selector.reset();
- }
- }.schedule(2000);
-
+ modalWindow.addItem(layout);
+ modalWindow.show();
+ selector.reset();
}
@Override
@@ -137,14 +132,16 @@ public class AffinityGroupServersSelector extends AbstractSelector<Server, org.r
public static void show(Integer affinityGroupId, final TableSection parrent) {
modalWindow = new Window();
+ modalWindow.addCloseClickHandler(new CloseClickHandler() {
+ public void onCloseClick(CloseClickEvent event) {
+ closeAndRefresh(parrent, false);
+ }
+ });
modalWindow.setTitle(MSG.view_adminTopology_affinityGroups() + ": "
+ MSG.view_adminTopology_affinityGroups_createNew());
modalWindow.setOverflow(Overflow.VISIBLE);
-// modalWindow.setMinWidth(800);
-// modalWindow.setMinHeight(400);
- modalWindow.setWidth(800);
- modalWindow.setHeight(400);
-// modalWindow.setAutoSize(true);
+ modalWindow.setWidth(800);
+ modalWindow.setHeight(400);
modalWindow.setAutoCenter(true);
modalWindow.setCanDragResize(true);
modalWindow.setCanDragReposition(true);
@@ -152,21 +149,16 @@ public class AffinityGroupServersSelector extends AbstractSelector<Server, org.r
layout = new VLayout();
layout.setWidth100();
layout.setHeight100();
- layout.setPadding(15);
- layout.setLayoutMargin(20);
- layout.setVPolicy(LayoutPolicy.FILL);
+ layout.setPadding(10);
+ layout.setLayoutMargin(10);
final AffinityGroupServersSelector selector = new AffinityGroupServersSelector("foo", affinityGroupId);
layout.addMember(selector);
- VLayout spacer = new VLayout();
- spacer.setHeight(10);
- layout.addMember(spacer);
-
IButton cancel = new LocatableIButton(selector.extendLocatorId("Cancel"), MSG.common_button_cancel());
cancel.addClickHandler(new ClickHandler() {
public void onClick(ClickEvent clickEvent) {
- modalWindow.destroy();
+ closeAndRefresh(parrent, false);
}
});
IButton save = new LocatableIButton(selector.extendLocatorId("Save"), MSG.common_button_save());
@@ -176,15 +168,14 @@ public class AffinityGroupServersSelector extends AbstractSelector<Server, org.r
List<Integer> originallySelected = selector.getOriginallyAssignedIds();
originallySelected.removeAll(actuallySelected);
actuallySelected.removeAll(selector.getOriginallyAssignedIds());
+ shouldBeClosed = true;
if (!originallySelected.isEmpty()) {
+ shouldBeClosed = false;
GWTServiceLookup.getCloudService().removeServersFromGroup(
originallySelected.toArray(new Integer[originallySelected.size()]), new AsyncCallback<Void>() {
public void onSuccess(Void result) {
- if (modalWindow != null) {
- modalWindow.destroy();
- }
- parrent.refresh();
+ closeAndRefresh(parrent, true);
}
public void onFailure(Throwable caught) {
@@ -194,14 +185,12 @@ public class AffinityGroupServersSelector extends AbstractSelector<Server, org.r
});
}
if (!actuallySelected.isEmpty()) {
+ shouldBeClosed = false;
GWTServiceLookup.getCloudService().addServersToGroup(selector.getAffinityGroupId(),
- originallySelected.toArray(new Integer[originallySelected.size()]), new AsyncCallback<Void>() {
+ actuallySelected.toArray(new Integer[actuallySelected.size()]), new AsyncCallback<Void>() {
public void onSuccess(Void result) {
- if (modalWindow != null) {
- modalWindow.destroy();
- }
- parrent.refresh();
+ closeAndRefresh(parrent, true);
}
public void onFailure(Throwable caught) {
@@ -210,18 +199,34 @@ public class AffinityGroupServersSelector extends AbstractSelector<Server, org.r
}
});
}
- SC.say("To del: " + originallySelected + "\n\nTo add: " + actuallySelected);
+ if (shouldBeClosed) {
+ closeAndRefresh(parrent, false);
+ }
+ // SC.say("To del: " + originallySelected + "\n\nTo add: " + actuallySelected);
}
});
HLayout buttons = new HLayout(10);
+ buttons.setHeight(20);
buttons.setLayoutAlign(Alignment.CENTER);
- buttons.addMember(cancel);
+ buttons.setLayoutBottomMargin(0);
buttons.addMember(save);
+ buttons.addMember(cancel);
layout.addMember(buttons);
}
+ private static void closeAndRefresh(TableSection parrent, boolean fullRefresh) {
+ if (modalWindow != null) {
+ modalWindow.destroy();
+ }
+ if (fullRefresh) {
+ parrent.refresh();
+ } else {
+ parrent.refreshTableInfo();
+ }
+ }
+
private static List<Integer> getIdList(ListGridRecord[] records) {
if (records == null) {
return null;
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupTableView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupTableView.java
index 0879f99..ac44d44 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupTableView.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupTableView.java
@@ -69,8 +69,8 @@ public class AffinityGroupTableView extends TableSection<AffinityGroupWithCounts
public static final String VIEW_PATH = AdministrationView.VIEW_ID + "/"
+ AdministrationView.SECTION_TOPOLOGY_VIEW_ID + "/" + VIEW_ID;
- public AffinityGroupTableView(String locatorId, String tableTitle) {
- super(locatorId, tableTitle);
+ public AffinityGroupTableView(String locatorId) {
+ super(locatorId, null);
setHeight100();
setWidth100();
setDataSource(new AffinityGroupWithCountsDatasource());
@@ -233,6 +233,7 @@ public class AffinityGroupTableView extends TableSection<AffinityGroupWithCounts
layout.addMember(buttons);
modalWindow.addItem(layout);
modalWindow.show();
+ name.focusInItem();
}
@Override
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentDetailView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentDetailView.java
index 7baa1df..b91f71d 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentDetailView.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentDetailView.java
@@ -133,8 +133,8 @@ public class AgentDetailView extends LocatableVLayout {
private void prepareFailoverListSection(SectionStack stack, Agent agent) {
SectionStackSection section = new SectionStackSection(MSG.view_adminTopology_agentDetail_agentFailoverList());
section.setExpanded(true);
- ServerTableView agentsTable = new ServerTableView(extendLocatorId(ServerTableView.VIEW_ID.getName()), null,
- agent.getId());
+ ServerTableView agentsTable = new ServerTableView(extendLocatorId(ServerTableView.VIEW_ID.getName()),
+ agent.getId(), false);
section.setItems(agentsTable);
failoverListSection = section;
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentTableView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentTableView.java
index b66c817..d3b8761 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentTableView.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentTableView.java
@@ -57,18 +57,14 @@ public class AgentTableView extends TableSection<AgentNodeDatasource> implements
private final boolean isAffinityGroupId;
- public AgentTableView(String locatorId, String tableTitle, Integer id, boolean isAffinityGroupId) {
- super(locatorId, tableTitle);
+ public AgentTableView(String locatorId, Integer id, boolean isAffinityGroupId) {
+ super(locatorId, null);
this.isAffinityGroupId = isAffinityGroupId;
setHeight100();
setWidth100();
setDataSource(new AgentNodeDatasource(id, isAffinityGroupId));
}
- public AgentTableView(String locatorId, String tableTitle, Integer id) {
- this(locatorId, tableTitle, id, false);
- }
-
@Override
protected void configureTable() {
super.configureTable();
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventDatasource.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventDatasource.java
index be374b6..4a07853 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventDatasource.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventDatasource.java
@@ -82,13 +82,13 @@ public class PartitionEventDatasource extends RPCDataSource<PartitionEvent, Part
ListGridField idField = FIELD_ID.getListGridField();
idField.setHidden(true);
fields.add(idField);
- ListGridField executionTimeField = FIELD_CTIME.getListGridField("120");
+ ListGridField executionTimeField = FIELD_CTIME.getListGridField("125");
TimestampCellFormatter.prepareDateField(executionTimeField);
fields.add(executionTimeField);
- fields.add(FIELD_EVENT_TYPE.getListGridField("190"));
+ fields.add(FIELD_EVENT_TYPE.getListGridField("215"));
fields.add(FIELD_EVENT_DETAIL.getListGridField("*"));
- fields.add(FIELD_SUBJECT_NAME.getListGridField("90"));
- fields.add(FIELD_EXECUTION_STATUS.getListGridField("90"));
+ fields.add(FIELD_SUBJECT_NAME.getListGridField("100"));
+ fields.add(FIELD_EXECUTION_STATUS.getListGridField("100"));
return fields;
}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDatasource.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDatasource.java
index 2a1253a..d942c44 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDatasource.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDatasource.java
@@ -86,7 +86,7 @@ public class ServerDatasource extends AbstractServerNodeDatasource<Server, Crite
fields.add(FIELD_NAME.getListGridField("*"));
fields.add(FIELD_OPERATION_MODE.getListGridField("90"));
- fields.add(FIELD_ADDRESS.getListGridField("110"));
+ fields.add(FIELD_ADDRESS.getListGridField("190"));
fields.add(FIELD_PORT.getListGridField("90"));
fields.add(FIELD_SECURE_PORT.getListGridField("75"));
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDatasourceField.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDatasourceField.java
index 18754c5..09577d8 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDatasourceField.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDatasourceField.java
@@ -30,7 +30,8 @@ public enum ServerDatasourceField {
FIELD_ID("id", CoreGUI.getMessages().common_title_id()),
- FIELD_ORDINAL("ordinal", "poradi"),
+ // todo: i18n
+ FIELD_ORDINAL("ordinal", "Order"),
FIELD_NAME("name", CoreGUI.getMessages().common_title_name()),
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDetailView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDetailView.java
index 89c291d..7165390 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDetailView.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDetailView.java
@@ -33,12 +33,12 @@ import com.google.gwt.user.client.rpc.AsyncCallback;
import com.smartgwt.client.types.Overflow;
import com.smartgwt.client.types.VisibilityMode;
import com.smartgwt.client.util.SC;
-import com.smartgwt.client.widgets.form.fields.ButtonItem;
+import com.smartgwt.client.widgets.IButton;
+import com.smartgwt.client.widgets.events.ClickEvent;
+import com.smartgwt.client.widgets.events.ClickHandler;
import com.smartgwt.client.widgets.form.fields.SelectItem;
import com.smartgwt.client.widgets.form.fields.StaticTextItem;
import com.smartgwt.client.widgets.form.fields.TextItem;
-import com.smartgwt.client.widgets.form.fields.events.ClickEvent;
-import com.smartgwt.client.widgets.form.fields.events.ClickHandler;
import com.smartgwt.client.widgets.form.validator.IntegerRangeValidator;
import com.smartgwt.client.widgets.layout.SectionStack;
import com.smartgwt.client.widgets.layout.SectionStackSection;
@@ -54,6 +54,7 @@ import org.rhq.enterprise.gui.coregui.client.util.Log;
import org.rhq.enterprise.gui.coregui.client.util.StringUtility;
import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableDynamicForm;
import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableSectionStack;
+import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableToolStrip;
import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableVLayout;
import org.rhq.enterprise.gui.coregui.client.util.selenium.SeleniumUtility;
@@ -154,8 +155,8 @@ public class ServerDetailView extends LocatableVLayout implements BookmarkableVi
private void prepareAgentSection(SectionStack stack, Server server) {
SectionStackSection section = new SectionStackSection(MSG.view_adminTopology_serverDetail_connectedAgents());
section.setExpanded(true);
- AgentTableView agentsTable = new AgentTableView(extendLocatorId(AgentTableView.VIEW_ID.getName()), null,
- serverId);
+ AgentTableView agentsTable = new AgentTableView(extendLocatorId(AgentTableView.VIEW_ID.getName()), serverId,
+ false);
section.setItems(agentsTable);
agentSection = section;
@@ -215,7 +216,7 @@ public class ServerDetailView extends LocatableVLayout implements BookmarkableVi
lastUpdatetem.setValue(TimestampCellFormatter.format(Long.valueOf(server.getMtime()),
TimestampCellFormatter.DATE_TIME_FORMAT_LONG));
- ButtonItem saveButton = new ButtonItem();
+ IButton saveButton = new IButton();
saveButton.setOverflow(Overflow.VISIBLE);
saveButton.setTitle(MSG.common_button_save());
saveButton.addClickHandler(new ClickHandler() {
@@ -237,13 +238,19 @@ public class ServerDetailView extends LocatableVLayout implements BookmarkableVi
}
}
});
-
+
form.setItems(nameItem, addressItem, portItem, securePortItem, operationModeItem, affinityGroupItem,
- installationDateItem, lastUpdatetem, saveButton);
+ installationDateItem, lastUpdatetem);
+
+ LocatableToolStrip footer = new LocatableToolStrip(extendLocatorId("detailsFooter"));
+ footer.setPadding(5);
+ footer.setWidth100();
+ footer.setMembersMargin(15);
+ footer.addMember(saveButton);
SectionStackSection section = new SectionStackSection(MSG.common_title_details());
section.setExpanded(true);
- section.setItems(form);
+ section.setItems(form, footer);
detailsSection = section;
initSectionCount++;
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerTableView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerTableView.java
index df1ac8d..24e2d9c 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerTableView.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerTableView.java
@@ -71,8 +71,8 @@ public class ServerTableView extends TableSection<AbstractServerNodeDatasource<?
private final Integer id;
- public ServerTableView(String locatorId, String tableTitle, Integer id, boolean isAffinityGroupId) {
- super(locatorId, tableTitle);
+ public ServerTableView(String locatorId, Integer id, boolean isAffinityGroupId) {
+ super(locatorId, null);
this.showActions = id == null && !isAffinityGroupId;
this.isAffinityGroupId = isAffinityGroupId;
this.id = id;
@@ -86,10 +86,6 @@ public class ServerTableView extends TableSection<AbstractServerNodeDatasource<?
}
- public ServerTableView(String locatorId, String tableTitle, Integer id) {
- this(locatorId, tableTitle, id, false);
- }
-
@Override
protected void configureTable() {
super.configureTable();
commit d48595c629722c936660d2ce611d527eab7808ee
Author: Jirka Kremser <jkremser(a)redhat.com>
Date: Wed Dec 12 13:47:42 2012 +0100
More work behind assigning the servers into groups; added logic for updating details of existing server and existing affinity group
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupDetailView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupDetailView.java
index 9c006a5..8dcd595 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupDetailView.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupDetailView.java
@@ -23,7 +23,6 @@ import static org.rhq.enterprise.gui.coregui.client.admin.topology.AffinityGroup
import com.google.gwt.user.client.Timer;
import com.google.gwt.user.client.rpc.AsyncCallback;
-import com.smartgwt.client.data.RecordList;
import com.smartgwt.client.types.Overflow;
import com.smartgwt.client.types.VisibilityMode;
import com.smartgwt.client.util.SC;
@@ -168,14 +167,14 @@ public class AffinityGroupDetailView extends LocatableVLayout implements Bookmar
return;
}
- private void prepareDetailsSection(SectionStack stack, AffinityGroup affinityGroup) {
+ private void prepareDetailsSection(SectionStack stack, final AffinityGroup affinityGroup) {
final LocatableDynamicForm form = new LocatableDynamicForm(extendLocatorId("detailsForm"));
form.setMargin(10);
form.setWidth100();
form.setWrapItemTitles(false);
form.setNumCols(2);
- TextItem nameItem = new TextItem(FIELD_NAME.propertyName(), FIELD_NAME.title());
+ final TextItem nameItem = new TextItem(FIELD_NAME.propertyName(), FIELD_NAME.title());
nameItem.setValue(affinityGroup.getName());
ButtonItem saveButton = new ButtonItem();
@@ -183,8 +182,16 @@ public class AffinityGroupDetailView extends LocatableVLayout implements Bookmar
saveButton.setTitle(MSG.common_button_save());
saveButton.addClickHandler(new ClickHandler() {
public void onClick(ClickEvent event) {
- RecordList list = form.getRecordList();
- SC.say("name is " + list.get(0).getAttribute("name"));
+ affinityGroup.setName(nameItem.getValueAsString());
+ GWTServiceLookup.getCloudService().updateAffinityGroup(affinityGroup, new AsyncCallback<Void>() {
+ public void onSuccess(Void result) {
+ // todo: notify
+ }
+
+ public void onFailure(Throwable caught) {
+ // todo: handle
+ }
+ });
}
});
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupServersSelector.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupServersSelector.java
index ebc7ae2..9653ef2 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupServersSelector.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupServersSelector.java
@@ -22,6 +22,9 @@
*/
package org.rhq.enterprise.gui.coregui.client.admin.topology;
+import java.util.ArrayList;
+import java.util.List;
+
import com.google.gwt.user.client.Timer;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.smartgwt.client.data.Criteria;
@@ -42,6 +45,7 @@ import org.rhq.core.domain.cloud.Server;
import org.rhq.core.domain.util.PageControl;
import org.rhq.core.domain.util.PageList;
import org.rhq.enterprise.gui.coregui.client.components.selector.AbstractSelector;
+import org.rhq.enterprise.gui.coregui.client.components.table.TableSection;
import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup;
import org.rhq.enterprise.gui.coregui.client.util.RPCDataSource;
import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableIButton;
@@ -52,14 +56,15 @@ import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableIButton;
public class AffinityGroupServersSelector extends AbstractSelector<Server, org.rhq.core.domain.criteria.Criteria> {
private static final String ITEM_ICON = "types/Server_up_16.png";
-
+
private final Integer affinityGroupId;
-
+
private static RPCDataSource<Server, org.rhq.core.domain.criteria.Criteria> datasource = null;
-
- private static Window modalWindow = null;
- private static VLayout layout = null;
-
+
+ private static Window modalWindow;
+ private static VLayout layout;
+ private List<Integer> originallyAssignedIds;
+
private AffinityGroupServersSelector() {
super("");
affinityGroupId = -1;
@@ -68,31 +73,33 @@ public class AffinityGroupServersSelector extends AbstractSelector<Server, org.r
private AffinityGroupServersSelector(String id, Integer affinityGroupId) {
super(id, false);
this.affinityGroupId = affinityGroupId;
- prepareMembers();
+ prepareMembers(this);
}
-
- private void prepareMembers() {
- GWTServiceLookup.getCloudService().getServerMembersByAffinityGroupId(affinityGroupId, PageControl.getUnlimitedInstance(), new AsyncCallback<PageList<Server>>() {
- public void onSuccess(PageList<Server> result) {
- ListGridRecord[] records = getDataSource().buildRecords(result);
- setAssigned(records);
-// AffinityGroupServersSelector.super.onInit();
- new Timer(){
- @Override
- public void run() {
- modalWindow.addItem(layout);
- modalWindow.show();
- }
- }.schedule(2000);
-
-
- }
- @Override
- public void onFailure(Throwable t) {
- //todo: CoreGUI.getErrorHandler().handleError(MSG.view_admin_plugins_loadFailure(), t);
- }
- });
+ private void prepareMembers(final AffinityGroupServersSelector selector) {
+ GWTServiceLookup.getCloudService().getServerMembersByAffinityGroupId(affinityGroupId,
+ PageControl.getUnlimitedInstance(), new AsyncCallback<PageList<Server>>() {
+ public void onSuccess(PageList<Server> result) {
+ ListGridRecord[] records = getDataSource().buildRecords(result);
+ originallyAssignedIds = getIdList(records);
+ setAssigned(records);
+ new Timer() {
+ @Override
+ public void run() {
+ modalWindow.addItem(layout);
+ modalWindow.show();
+ selector.reset();
+ }
+ }.schedule(2000);
+
+ }
+
+ @Override
+ public void onFailure(Throwable t) {
+ //todo: CoreGUI.getErrorHandler().handleError(MSG.view_admin_plugins_loadFailure(), t);
+ }
+ });
+
}
@Override
@@ -127,16 +134,16 @@ public class AffinityGroupServersSelector extends AbstractSelector<Server, org.r
protected String getItemIcon() {
return ITEM_ICON;
}
-
- public static void show(Integer affinityGroupId) {
+
+ public static void show(Integer affinityGroupId, final TableSection parrent) {
modalWindow = new Window();
modalWindow.setTitle(MSG.view_adminTopology_affinityGroups() + ": "
+ MSG.view_adminTopology_affinityGroups_createNew());
modalWindow.setOverflow(Overflow.VISIBLE);
- modalWindow.setMinWidth(800);
- modalWindow.setMinHeight(400);
- modalWindow.setWidth(800);
- modalWindow.setHeight(400);
+// modalWindow.setMinWidth(800);
+// modalWindow.setMinHeight(400);
+ modalWindow.setWidth(800);
+ modalWindow.setHeight(400);
// modalWindow.setAutoSize(true);
modalWindow.setAutoCenter(true);
modalWindow.setCanDragResize(true);
@@ -149,7 +156,7 @@ public class AffinityGroupServersSelector extends AbstractSelector<Server, org.r
layout.setLayoutMargin(20);
layout.setVPolicy(LayoutPolicy.FILL);
- AffinityGroupServersSelector selector = new AffinityGroupServersSelector("foo", affinityGroupId);
+ final AffinityGroupServersSelector selector = new AffinityGroupServersSelector("foo", affinityGroupId);
layout.addMember(selector);
VLayout spacer = new VLayout();
@@ -162,11 +169,49 @@ public class AffinityGroupServersSelector extends AbstractSelector<Server, org.r
modalWindow.destroy();
}
});
- IButton save = new LocatableIButton(selector.extendLocatorId("Save"),
- MSG.common_button_save());
+ IButton save = new LocatableIButton(selector.extendLocatorId("Save"), MSG.common_button_save());
save.addClickHandler(new ClickHandler() {
public void onClick(ClickEvent clickEvent) {
- SC.say("asdf..");
+ List<Integer> actuallySelected = getIdList(selector.getSelectedRecords());
+ List<Integer> originallySelected = selector.getOriginallyAssignedIds();
+ originallySelected.removeAll(actuallySelected);
+ actuallySelected.removeAll(selector.getOriginallyAssignedIds());
+ if (!originallySelected.isEmpty()) {
+ GWTServiceLookup.getCloudService().removeServersFromGroup(
+ originallySelected.toArray(new Integer[originallySelected.size()]), new AsyncCallback<Void>() {
+
+ public void onSuccess(Void result) {
+ if (modalWindow != null) {
+ modalWindow.destroy();
+ }
+ parrent.refresh();
+ }
+
+ public void onFailure(Throwable caught) {
+ //todo: error handling
+ SC.say("errX");
+ }
+ });
+ }
+ if (!actuallySelected.isEmpty()) {
+ GWTServiceLookup.getCloudService().addServersToGroup(selector.getAffinityGroupId(),
+ originallySelected.toArray(new Integer[originallySelected.size()]), new AsyncCallback<Void>() {
+
+ public void onSuccess(Void result) {
+ if (modalWindow != null) {
+ modalWindow.destroy();
+ }
+ parrent.refresh();
+ }
+
+ public void onFailure(Throwable caught) {
+ //todo: error handling
+ SC.say("errX");
+ }
+ });
+ }
+ SC.say("To del: " + originallySelected + "\n\nTo add: " + actuallySelected);
+
}
});
@@ -177,4 +222,23 @@ public class AffinityGroupServersSelector extends AbstractSelector<Server, org.r
layout.addMember(buttons);
}
+ private static List<Integer> getIdList(ListGridRecord[] records) {
+ if (records == null) {
+ return null;
+ }
+ List<Integer> ids = new ArrayList<Integer>(records.length);
+ for (ListGridRecord record : records) {
+ ids.add(record.getAttributeAsInt(ServerDatasourceField.FIELD_ID.propertyName()));
+ }
+ return ids;
+ }
+
+ public List<Integer> getOriginallyAssignedIds() {
+ return new ArrayList<Integer>(originallyAssignedIds);
+ }
+
+ public Integer getAffinityGroupId() {
+ return affinityGroupId;
+ }
+
}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupTableView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupTableView.java
index bc133b4..0879f99 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupTableView.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupTableView.java
@@ -211,11 +211,9 @@ public class AffinityGroupTableView extends TableSection<AffinityGroupWithCounts
String name = form.getValueAsString(FIELD_NAME);
AffinityGroup affinityGroup = new AffinityGroup(name);
GWTServiceLookup.getCloudService().createAffinityGroup(affinityGroup, new AsyncCallback<Integer>() {
- public void onSuccess(Integer result) {
- Map<String, String> errors = new HashMap<String, String>();
- errors.put(FIELD_NAME, result + "");
- form.setErrors(errors, true);
- // todo: hide dialog and open the detail window
+ public void onSuccess(Integer affinityGroupId) {
+ modalWindow.destroy();
+ CoreGUI.goToView(VIEW_PATH + "/" + affinityGroupId);
}
public void onFailure(Throwable caught) {
@@ -230,8 +228,8 @@ public class AffinityGroupTableView extends TableSection<AffinityGroupWithCounts
HLayout buttons = new HLayout(10);
buttons.setLayoutAlign(Alignment.CENTER);
- buttons.addMember(cancel);
buttons.addMember(save);
+ buttons.addMember(cancel);
layout.addMember(buttons);
modalWindow.addItem(layout);
modalWindow.show();
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentDetailView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentDetailView.java
index 62218c1..7baa1df 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentDetailView.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentDetailView.java
@@ -190,16 +190,6 @@ public class AgentDetailView extends LocatableVLayout {
}
currentServerItem.setValue(serverValue);
- // ButtonItem saveButton = new ButtonItem();
- // saveButton.setOverflow(Overflow.VISIBLE);
- // saveButton.setTitle(MSG.common_button_save());
- // saveButton.addClickHandler(new ClickHandler() {
- // public void onClick(ClickEvent event) {
- // RecordList list = form.getRecordList();
- // SC.say("name is " + list.get(0).getAttribute("name"));
- // }
- // });
-
form.setItems(nameItem, addressItem, portItem, tokenItem, lastAvailabilityItem, affinityGroupItem,
currentServerItem);
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentTableView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentTableView.java
index 032f284..b66c817 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentTableView.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentTableView.java
@@ -124,7 +124,7 @@ public class AgentTableView extends TableSection<AgentNodeDatasource> implements
}
if (isAffinityGroupId)
- addTableAction(extendLocatorId("editGroupAgents"), "i18nEditGroupAgents",
+ addTableAction(extendLocatorId("editGroupAgents"), MSG.view_groupInventoryMembers_button_updateMembership(),
new AuthorizedTableAction(this, TableActionEnablement.ALWAYS, Permission.MANAGE_SETTINGS) {
public void executeAction(final ListGridRecord[] selections, Object actionValue) {
SC.say("working..");
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDatasource.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDatasource.java
index 6f85f9e..2a1253a 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDatasource.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDatasource.java
@@ -157,6 +157,10 @@ public class ServerDatasource extends AbstractServerNodeDatasource<Server, Crite
@Override
public Server copyValues(Record from) {
throw new UnsupportedOperationException("ServerDatasource.copyValues(Record from)");
+// Server server = new Server();
+// server.setId(from.getAttributeAsInt(FIELD_ID.propertyName()));
+// server.setName(from.getAttributeAsString(FIELD_NAME.propertyName()));
+// return server;
}
@Override
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDetailView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDetailView.java
index 087d841..89c291d 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDetailView.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDetailView.java
@@ -30,7 +30,6 @@ import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerDatasou
import com.google.gwt.user.client.Timer;
import com.google.gwt.user.client.rpc.AsyncCallback;
-import com.smartgwt.client.data.RecordList;
import com.smartgwt.client.types.Overflow;
import com.smartgwt.client.types.VisibilityMode;
import com.smartgwt.client.util.SC;
@@ -40,11 +39,13 @@ import com.smartgwt.client.widgets.form.fields.StaticTextItem;
import com.smartgwt.client.widgets.form.fields.TextItem;
import com.smartgwt.client.widgets.form.fields.events.ClickEvent;
import com.smartgwt.client.widgets.form.fields.events.ClickHandler;
+import com.smartgwt.client.widgets.form.validator.IntegerRangeValidator;
import com.smartgwt.client.widgets.layout.SectionStack;
import com.smartgwt.client.widgets.layout.SectionStackSection;
import org.rhq.core.domain.cloud.AffinityGroup;
import org.rhq.core.domain.cloud.Server;
+import org.rhq.core.domain.cloud.Server.OperationMode;
import org.rhq.enterprise.gui.coregui.client.BookmarkableView;
import org.rhq.enterprise.gui.coregui.client.ViewPath;
import org.rhq.enterprise.gui.coregui.client.components.table.TimestampCellFormatter;
@@ -162,7 +163,7 @@ public class ServerDetailView extends LocatableVLayout implements BookmarkableVi
return;
}
- private void prepareDetailsSection(SectionStack stack, Server server) {
+ private void prepareDetailsSection(SectionStack stack, final Server server) {
final LocatableDynamicForm form = new LocatableDynamicForm(extendLocatorId("detailsForm"));
form.setMargin(10);
form.setWidth100();
@@ -172,16 +173,24 @@ public class ServerDetailView extends LocatableVLayout implements BookmarkableVi
StaticTextItem nameItem = new StaticTextItem(FIELD_NAME.propertyName(), FIELD_NAME.title());
nameItem.setValue("<b>" + server.getName() + "</b>");
- TextItem addressItem = new TextItem(FIELD_ADDRESS.propertyName(), FIELD_ADDRESS.title());
+ final TextItem addressItem = new TextItem(FIELD_ADDRESS.propertyName(), FIELD_ADDRESS.title());
+ addressItem.setRequired(true);
addressItem.setValue(server.getAddress());
- TextItem portItem = new TextItem(FIELD_PORT.propertyName(), FIELD_PORT.title());
+ IntegerRangeValidator portValidator = new IntegerRangeValidator();
+ portValidator.setMin(0);
+ portValidator.setMax(65535);
+ final TextItem portItem = new TextItem(FIELD_PORT.propertyName(), FIELD_PORT.title());
+ portItem.setRequired(true);
+ portItem.setValidators(portValidator);
portItem.setValue(server.getPort());
- TextItem securePortItem = new TextItem(FIELD_SECURE_PORT.propertyName(), FIELD_SECURE_PORT.title());
+ final TextItem securePortItem = new TextItem(FIELD_SECURE_PORT.propertyName(), FIELD_SECURE_PORT.title());
+ securePortItem.setRequired(true);
+ securePortItem.setValidators(portValidator);
securePortItem.setValue(server.getSecurePort());
- SelectItem operationModeItem = new SelectItem(FIELD_OPERATION_MODE.propertyName(),
+ final SelectItem operationModeItem = new SelectItem(FIELD_OPERATION_MODE.propertyName(),
MSG.view_adminTopology_serverDetail_operationMode());
operationModeItem.setValueMap("NORMAL", "MAINTENANCE");
operationModeItem.setValue(server.getOperationMode());
@@ -211,8 +220,21 @@ public class ServerDetailView extends LocatableVLayout implements BookmarkableVi
saveButton.setTitle(MSG.common_button_save());
saveButton.addClickHandler(new ClickHandler() {
public void onClick(ClickEvent event) {
- RecordList list = form.getRecordList();
- SC.say("name is " + list.get(0).getAttribute("name"));
+ if (form.validate()) {
+ server.setAddress(addressItem.getValueAsString());
+ server.setPort(Integer.parseInt(portItem.getValueAsString()));
+ server.setSecurePort(Integer.parseInt(securePortItem.getValueAsString()));
+ server.setOperationMode(OperationMode.valueOf(operationModeItem.getValueAsString()));
+ GWTServiceLookup.getCloudService().updateServer(server, new AsyncCallback<Void>() {
+ public void onSuccess(Void result) {
+ // todo: notify
+ }
+
+ public void onFailure(Throwable caught) {
+ // todo: handle
+ }
+ });
+ }
}
});
@@ -231,4 +253,5 @@ public class ServerDetailView extends LocatableVLayout implements BookmarkableVi
public void renderView(ViewPath viewPath) {
Log.debug("ServerDetailView: " + viewPath);
}
+
}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerTableView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerTableView.java
index f986dad..df1ac8d 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerTableView.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerTableView.java
@@ -264,14 +264,12 @@ public class ServerTableView extends TableSection<AbstractServerNodeDatasource<?
}
private void showUpdateMembersAction() {
- addTableAction(extendLocatorId("foo"), "olala", new AuthorizedTableAction(this, TableActionEnablement.ALWAYS,
- Permission.MANAGE_SETTINGS) {
- public void executeAction(final ListGridRecord[] selections, Object actionValue) {
- // AffinityGroupServersSelector selector = new AffinityGroupServersSelector(extendLocatorId("foo"), id);
-
- AffinityGroupServersSelector.show(id);
- }
- });
+ addTableAction(extendLocatorId("editGroupServers"), MSG.view_groupInventoryMembers_button_updateMembership(),
+ new AuthorizedTableAction(this, TableActionEnablement.ALWAYS, Permission.MANAGE_SETTINGS) {
+ public void executeAction(final ListGridRecord[] selections, Object actionValue) {
+ AffinityGroupServersSelector.show(id, ServerTableView.this);
+ }
+ });
}
private int[] getSelectedIds(ListGridRecord[] selections) {
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/CloudGWTService.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/CloudGWTService.java
index 8f79df4..afaacb8 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/CloudGWTService.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/CloudGWTService.java
@@ -57,6 +57,8 @@ public interface CloudGWTService extends RemoteService {
void deleteServers(int[] serverIds) throws RuntimeException;
void updateServerMode(int[] serverIds, Server.OperationMode mode) throws RuntimeException;
+
+ void updateServer(Server server) throws RuntimeException;
List<FailoverListDetails> getFailoverListDetailsByAgentId(int agentId, PageControl pc) throws RuntimeException;;
@@ -77,6 +79,8 @@ public interface CloudGWTService extends RemoteService {
int createAffinityGroup(AffinityGroup affinityGroup) throws RuntimeException;
+ void updateAffinityGroup(AffinityGroup affinityGroup) throws RuntimeException;
+
PageList<Server> getServerMembersByAffinityGroupId(int affinityGroupId, PageControl pageControl) throws RuntimeException;
PageList<Server> getServerNonMembersByAffinityGroupId(int affinityGroupId, PageControl pageControl) throws RuntimeException;
@@ -86,4 +90,12 @@ public interface CloudGWTService extends RemoteService {
PageList<Agent> getAgentNonMembersByAffinityGroupId(int affinityGroupId, PageControl pageControl) throws RuntimeException;
AffinityGroup getAffinityGroupById(int affinityGroupId) throws RuntimeException;
+
+ void addServersToGroup(int affinityGroupId, Integer[] serverIds) throws RuntimeException;
+
+ void removeServersFromGroup(Integer[] serverIds) throws RuntimeException;
+
+ void addAgentsToGroup(int affinityGroupId, Integer[] agentIds) throws RuntimeException;
+
+ void removeAgentsFromGroup(Integer[] agentIds) throws RuntimeException;
}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/CloudGWTServiceImpl.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/CloudGWTServiceImpl.java
index 8a2e806..32fadde 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/CloudGWTServiceImpl.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/CloudGWTServiceImpl.java
@@ -258,4 +258,60 @@ public class CloudGWTServiceImpl extends AbstractGWTServiceImpl implements Cloud
}
}
+ @Override
+ public void addServersToGroup(int affinityGroupId, Integer[] serverIds) throws RuntimeException {
+ try {
+ affinityGroupManager.addServersToGroup(getSessionSubject(), affinityGroupId, serverIds);
+ } catch (Throwable t) {
+ throw getExceptionToThrowToClient(t);
+ }
+ }
+
+ @Override
+ public void removeServersFromGroup(Integer[] serverIds) throws RuntimeException {
+ try {
+ affinityGroupManager.removeServersFromGroup(getSessionSubject(), serverIds);
+ } catch (Throwable t) {
+ throw getExceptionToThrowToClient(t);
+ }
+ }
+
+ @Override
+ public void addAgentsToGroup(int affinityGroupId, Integer[] agentIds) throws RuntimeException {
+ try {
+ affinityGroupManager.addAgentsToGroup(getSessionSubject(), affinityGroupId, agentIds);
+ } catch (Throwable t) {
+ throw getExceptionToThrowToClient(t);
+ }
+ }
+
+ @Override
+ public void removeAgentsFromGroup(Integer[] agentIds) throws RuntimeException {
+ try {
+ affinityGroupManager.removeAgentsFromGroup(getSessionSubject(), agentIds);
+ } catch (Throwable t) {
+ throw getExceptionToThrowToClient(t);
+ }
+ }
+
+
+ @Override
+ public void updateServer(Server server) throws RuntimeException {
+ try {
+ cloudManager.updateServer(getSessionSubject(), server);
+ } catch (Throwable t) {
+ throw getExceptionToThrowToClient(t);
+ }
+ }
+
+
+ @Override
+ public void updateAffinityGroup(AffinityGroup affinityGroup) throws RuntimeException {
+ try {
+ affinityGroupManager.update(getSessionSubject(), affinityGroup);
+ } catch (Throwable t) {
+ throw getExceptionToThrowToClient(t);
+ }
+ }
+
}
commit 08712a0ad088dbf430fab1424ef1dd1bf564fa56
Author: Jirka Kremser <jkremser(a)redhat.com>
Date: Tue Dec 11 11:23:29 2012 +0100
Assigning servers into affinity group + new methods in GWT service for this purpose
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupDetailView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupDetailView.java
index 863dbb5..9c006a5 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupDetailView.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupDetailView.java
@@ -46,7 +46,7 @@ import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableVLayout;
/**
* Shows details of a server.
*
- * @author Jiri Kremser
+ * @author Jirka Kremser
*/
public class AffinityGroupDetailView extends LocatableVLayout implements BookmarkableView {
@@ -105,7 +105,7 @@ public class AffinityGroupDetailView extends LocatableVLayout implements Bookmar
}
public boolean isInitialized() {
- return initSectionCount >= 2;
+ return initSectionCount >= 3;
}
@Override
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupServersSelector.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupServersSelector.java
new file mode 100644
index 0000000..ebc7ae2
--- /dev/null
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupServersSelector.java
@@ -0,0 +1,180 @@
+/*
+ * RHQ Management Platform
+ * Copyright (C) 2005-2012 Red Hat, Inc.
+ * All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License, version 2, as
+ * published by the Free Software Foundation, and/or the GNU Lesser
+ * General Public License, version 2.1, also as published by the Free
+ * Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License and the GNU Lesser General Public License
+ * for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * and the GNU Lesser General Public License along with this program;
+ * if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+package org.rhq.enterprise.gui.coregui.client.admin.topology;
+
+import com.google.gwt.user.client.Timer;
+import com.google.gwt.user.client.rpc.AsyncCallback;
+import com.smartgwt.client.data.Criteria;
+import com.smartgwt.client.types.Alignment;
+import com.smartgwt.client.types.LayoutPolicy;
+import com.smartgwt.client.types.Overflow;
+import com.smartgwt.client.util.SC;
+import com.smartgwt.client.widgets.IButton;
+import com.smartgwt.client.widgets.Window;
+import com.smartgwt.client.widgets.events.ClickEvent;
+import com.smartgwt.client.widgets.events.ClickHandler;
+import com.smartgwt.client.widgets.form.DynamicForm;
+import com.smartgwt.client.widgets.grid.ListGridRecord;
+import com.smartgwt.client.widgets.layout.HLayout;
+import com.smartgwt.client.widgets.layout.VLayout;
+
+import org.rhq.core.domain.cloud.Server;
+import org.rhq.core.domain.util.PageControl;
+import org.rhq.core.domain.util.PageList;
+import org.rhq.enterprise.gui.coregui.client.components.selector.AbstractSelector;
+import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup;
+import org.rhq.enterprise.gui.coregui.client.util.RPCDataSource;
+import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableIButton;
+
+/**
+ * @author Jirka Kremser
+ */
+public class AffinityGroupServersSelector extends AbstractSelector<Server, org.rhq.core.domain.criteria.Criteria> {
+
+ private static final String ITEM_ICON = "types/Server_up_16.png";
+
+ private final Integer affinityGroupId;
+
+ private static RPCDataSource<Server, org.rhq.core.domain.criteria.Criteria> datasource = null;
+
+ private static Window modalWindow = null;
+ private static VLayout layout = null;
+
+ private AffinityGroupServersSelector() {
+ super("");
+ affinityGroupId = -1;
+ }
+
+ private AffinityGroupServersSelector(String id, Integer affinityGroupId) {
+ super(id, false);
+ this.affinityGroupId = affinityGroupId;
+ prepareMembers();
+ }
+
+ private void prepareMembers() {
+ GWTServiceLookup.getCloudService().getServerMembersByAffinityGroupId(affinityGroupId, PageControl.getUnlimitedInstance(), new AsyncCallback<PageList<Server>>() {
+ public void onSuccess(PageList<Server> result) {
+ ListGridRecord[] records = getDataSource().buildRecords(result);
+ setAssigned(records);
+// AffinityGroupServersSelector.super.onInit();
+ new Timer(){
+ @Override
+ public void run() {
+ modalWindow.addItem(layout);
+ modalWindow.show();
+ }
+ }.schedule(2000);
+
+
+ }
+
+ @Override
+ public void onFailure(Throwable t) {
+ //todo: CoreGUI.getErrorHandler().handleError(MSG.view_admin_plugins_loadFailure(), t);
+ }
+ });
+ }
+
+ @Override
+ protected RPCDataSource<Server, org.rhq.core.domain.criteria.Criteria> getDataSource() {
+ if (datasource == null) {
+ datasource = new ServerDatasource(affinityGroupId, false);
+ }
+ return datasource;
+ }
+
+ @Override
+ protected DynamicForm getAvailableFilterForm() {
+ return null; // No Filters Currently
+ }
+
+ @Override
+ protected int getMaxAvailableRecords() {
+ return 500;
+ }
+
+ @Override
+ protected Criteria getLatestCriteria(DynamicForm availableFilterForm) {
+ return null; // No Filters Currently
+ }
+
+ @Override
+ protected String getItemTitle() {
+ return MSG.view_adminTopology_affinityGroups();
+ }
+
+ @Override
+ protected String getItemIcon() {
+ return ITEM_ICON;
+ }
+
+ public static void show(Integer affinityGroupId) {
+ modalWindow = new Window();
+ modalWindow.setTitle(MSG.view_adminTopology_affinityGroups() + ": "
+ + MSG.view_adminTopology_affinityGroups_createNew());
+ modalWindow.setOverflow(Overflow.VISIBLE);
+ modalWindow.setMinWidth(800);
+ modalWindow.setMinHeight(400);
+ modalWindow.setWidth(800);
+ modalWindow.setHeight(400);
+// modalWindow.setAutoSize(true);
+ modalWindow.setAutoCenter(true);
+ modalWindow.setCanDragResize(true);
+ modalWindow.setCanDragReposition(true);
+
+ layout = new VLayout();
+ layout.setWidth100();
+ layout.setHeight100();
+ layout.setPadding(15);
+ layout.setLayoutMargin(20);
+ layout.setVPolicy(LayoutPolicy.FILL);
+
+ AffinityGroupServersSelector selector = new AffinityGroupServersSelector("foo", affinityGroupId);
+ layout.addMember(selector);
+
+ VLayout spacer = new VLayout();
+ spacer.setHeight(10);
+ layout.addMember(spacer);
+
+ IButton cancel = new LocatableIButton(selector.extendLocatorId("Cancel"), MSG.common_button_cancel());
+ cancel.addClickHandler(new ClickHandler() {
+ public void onClick(ClickEvent clickEvent) {
+ modalWindow.destroy();
+ }
+ });
+ IButton save = new LocatableIButton(selector.extendLocatorId("Save"),
+ MSG.common_button_save());
+ save.addClickHandler(new ClickHandler() {
+ public void onClick(ClickEvent clickEvent) {
+ SC.say("asdf..");
+ }
+ });
+
+ HLayout buttons = new HLayout(10);
+ buttons.setLayoutAlign(Alignment.CENTER);
+ buttons.addMember(cancel);
+ buttons.addMember(save);
+ layout.addMember(buttons);
+ }
+
+}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupTableView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupTableView.java
index 28fc8b1..bc133b4 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupTableView.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupTableView.java
@@ -58,7 +58,7 @@ import org.rhq.enterprise.gui.coregui.client.util.message.Message;
import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableIButton;
/**
- * @author Jiri Kremser
+ * @author Jirka Kremser
*
*/
public class AffinityGroupTableView extends TableSection<AffinityGroupWithCountsDatasource> implements HasViewName {
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentDetailView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentDetailView.java
index 87e01a7..62218c1 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentDetailView.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentDetailView.java
@@ -49,7 +49,7 @@ import org.rhq.enterprise.gui.coregui.client.util.selenium.SeleniumUtility;
/**
* Shows details of a server.
*
- * @author Jiri Kremser
+ * @author Jirka Kremser
*/
public class AgentDetailView extends LocatableVLayout {
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentTableView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentTableView.java
index 6363511..032f284 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentTableView.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentTableView.java
@@ -45,7 +45,7 @@ import org.rhq.enterprise.gui.coregui.client.util.StringUtility;
import org.rhq.enterprise.gui.coregui.client.util.selenium.SeleniumUtility;
/**
- * @author Jiri Kremser
+ * @author Jirka Kremser
*/
public class AgentTableView extends TableSection<AgentNodeDatasource> implements HasViewName {
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/FailoverListItemDatasource.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/FailoverListItemDatasource.java
index 4ca0c64..edce33a 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/FailoverListItemDatasource.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/FailoverListItemDatasource.java
@@ -58,7 +58,7 @@ public class FailoverListItemDatasource extends AbstractServerNodeDatasource<Fai
public FailoverListItemDatasource(int agentId) {
super();
this.agentId = agentId;
- this.serverDatasource = new ServerDatasource(null);
+ this.serverDatasource = new ServerDatasource(null, false);
List<DataSourceField> fields = addDataSourceFields();
addFields(fields);
}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventDetailView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventDetailView.java
index b555f2d..f09a707 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventDetailView.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventDetailView.java
@@ -56,7 +56,7 @@ import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableVLayout;
/**
* Shows details of a partition event.
*
- * @author Jiri Kremser
+ * @author Jirka Kremser
*/
public class PartitionEventDetailView extends LocatableVLayout implements BookmarkableView {
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventTableView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventTableView.java
index 41d1b8a..b25a4d3 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventTableView.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventTableView.java
@@ -52,7 +52,7 @@ import org.rhq.enterprise.gui.coregui.client.util.message.Message;
import org.rhq.enterprise.gui.coregui.client.util.selenium.SeleniumUtility;
/**
- * @author Jiri Kremser
+ * @author Jirka Kremser
*
*/
public class PartitionEventTableView extends TableSection<PartitionEventDatasource> implements HasViewName {
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDatasource.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDatasource.java
index 2413d41..6f85f9e 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDatasource.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDatasource.java
@@ -56,10 +56,13 @@ import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup;
public class ServerDatasource extends AbstractServerNodeDatasource<Server, Criteria> {
private final Integer affinityGroupId;
+
+ private final boolean fetchMembers;
- public ServerDatasource(Integer affinityGroupId) {
+ public ServerDatasource(Integer affinityGroupId, boolean fetchMembers) {
super();
this.affinityGroupId = affinityGroupId;
+ this.fetchMembers = fetchMembers;
List<DataSourceField> fields = addDataSourceFields();
addFields(fields);
}
@@ -105,21 +108,25 @@ public class ServerDatasource extends AbstractServerNodeDatasource<Server, Crite
return;
}
final PageControl pc = getPageControl(request);
- GWTServiceLookup.getCloudService().getServerMembersByAffinityGroupId(affinityGroupId, pc,
- new AsyncCallback<PageList<Server>>() {
- public void onSuccess(PageList<Server> result) {
- response.setData(buildRecords(result));
- response.setTotalRows(result.size());
- processResponse(request.getRequestId(), response);
- }
-
- @Override
- public void onFailure(Throwable t) {
- //todo: CoreGUI.getErrorHandler().handleError(MSG.view_admin_plugins_loadFailure(), t);
- response.setStatus(DSResponse.STATUS_FAILURE);
- processResponse(request.getRequestId(), response);
- }
- });
+ AsyncCallback<PageList<Server>> callback = new AsyncCallback<PageList<Server>>() {
+ public void onSuccess(PageList<Server> result) {
+ response.setData(buildRecords(result));
+ response.setTotalRows(result.size());
+ processResponse(request.getRequestId(), response);
+ }
+
+ @Override
+ public void onFailure(Throwable t) {
+ //todo: CoreGUI.getErrorHandler().handleError(MSG.view_admin_plugins_loadFailure(), t);
+ response.setStatus(DSResponse.STATUS_FAILURE);
+ processResponse(request.getRequestId(), response);
+ }
+ };
+ if(fetchMembers) {
+ GWTServiceLookup.getCloudService().getServerMembersByAffinityGroupId(affinityGroupId, pc, callback);
+ } else {
+ GWTServiceLookup.getCloudService().getServerNonMembersByAffinityGroupId(affinityGroupId, pc, callback);
+ }
}
/**
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDetailView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDetailView.java
index efeb9b7..087d841 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDetailView.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDetailView.java
@@ -59,7 +59,7 @@ import org.rhq.enterprise.gui.coregui.client.util.selenium.SeleniumUtility;
/**
* Shows details of a server.
*
- * @author Jiri Kremser
+ * @author Jirka Kremser
*/
public class ServerDetailView extends LocatableVLayout implements BookmarkableView {
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerTableView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerTableView.java
index da44c9c..f986dad 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerTableView.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerTableView.java
@@ -53,7 +53,7 @@ import org.rhq.enterprise.gui.coregui.client.util.message.Message;
import org.rhq.enterprise.gui.coregui.client.util.selenium.SeleniumUtility;
/**
- * @author Jiri Kremser
+ * @author Jirka Kremser
*
*/
public class ServerTableView extends TableSection<AbstractServerNodeDatasource<? extends Serializable, Criteria>>
@@ -69,14 +69,17 @@ public class ServerTableView extends TableSection<AbstractServerNodeDatasource<?
private final boolean isAffinityGroupId;
+ private final Integer id;
+
public ServerTableView(String locatorId, String tableTitle, Integer id, boolean isAffinityGroupId) {
super(locatorId, tableTitle);
this.showActions = id == null && !isAffinityGroupId;
this.isAffinityGroupId = isAffinityGroupId;
+ this.id = id;
setHeight100();
setWidth100();
if (isAffinityGroupId) {
- setDataSource(new ServerDatasource(id));
+ setDataSource(new ServerDatasource(id, true));
} else {
setDataSource(showActions ? new ServerWithAgentCountDatasource() : new FailoverListItemDatasource(id));
}
@@ -97,7 +100,7 @@ public class ServerTableView extends TableSection<AbstractServerNodeDatasource<?
listGrid.sort(FIELD_NAME, SortDirection.ASCENDING);
showCommonActions();
} else if (isAffinityGroupId) {
- // displayed from AffinityGroupDetailView
+ // displayed from AffinityGroupDetailView
showUpdateMembersAction();
} else {
// sorting by order field (displayed from AgentDetailView)
@@ -259,14 +262,16 @@ public class ServerTableView extends TableSection<AbstractServerNodeDatasource<?
}
});
}
-
+
private void showUpdateMembersAction() {
- addTableAction(extendLocatorId("foo"), "olala", new AuthorizedTableAction(this, TableActionEnablement.ANY,
- Permission.MANAGE_SETTINGS) {
- public void executeAction(final ListGridRecord[] selections, Object actionValue) {
- SC.say("fooparek");
- }
- });
+ addTableAction(extendLocatorId("foo"), "olala", new AuthorizedTableAction(this, TableActionEnablement.ALWAYS,
+ Permission.MANAGE_SETTINGS) {
+ public void executeAction(final ListGridRecord[] selections, Object actionValue) {
+ // AffinityGroupServersSelector selector = new AffinityGroupServersSelector(extendLocatorId("foo"), id);
+
+ AffinityGroupServersSelector.show(id);
+ }
+ });
}
private int[] getSelectedIds(ListGridRecord[] selections) {
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerWithAgentCountDatasource.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerWithAgentCountDatasource.java
index 5b9c314..af52e7a 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerWithAgentCountDatasource.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerWithAgentCountDatasource.java
@@ -45,7 +45,7 @@ public class ServerWithAgentCountDatasource extends AbstractServerNodeDatasource
public ServerWithAgentCountDatasource() {
super();
- serverDatasource = new ServerDatasource(null);
+ serverDatasource = new ServerDatasource(null, false);
List<DataSourceField> fields = addDataSourceFields();
addFields(fields);
}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/selector/AbstractSelector.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/selector/AbstractSelector.java
index 0d98e36..67fa2a7 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/selector/AbstractSelector.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/selector/AbstractSelector.java
@@ -295,6 +295,8 @@ public abstract class AbstractSelector<T, C extends org.rhq.core.domain.criteria
availableSection.setItems(this.availableGrid);
availableSectionStack.addSection(availableSection);
+ this.datasource = getDataSource();
+ this.datasource.setDataPageSize(getMaxAvailableRecords());
// Load data.
if (this.availableFilterForm != null) {
// this grabs any initial criteria prior to the first data fetch
@@ -319,8 +321,6 @@ public abstract class AbstractSelector<T, C extends org.rhq.core.domain.criteria
}
});
}
- this.datasource = getDataSource();
- this.datasource.setDataPageSize(getMaxAvailableRecords());
populateAvailableGrid((null == latestCriteria) ? new Criteria() : latestCriteria);
// Add event handlers.
commit 23cf57cba97af917f978aa86a64ec5169e565717
Author: Jirka Kremser <jkremser(a)redhat.com>
Date: Thu Dec 6 16:15:14 2012 +0100
Affinity Group detail view added; refactor of data sources for entities derived from the Server class (various composites)
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AbstractServerNodeDatasource.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AbstractServerNodeDatasource.java
new file mode 100644
index 0000000..528ab8e
--- /dev/null
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AbstractServerNodeDatasource.java
@@ -0,0 +1,33 @@
+/*
+ * RHQ Management Platform
+ * Copyright (C) 2005-2012 Red Hat, Inc.
+ * All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation version 2 of the License.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+package org.rhq.enterprise.gui.coregui.client.admin.topology;
+
+import java.util.List;
+
+import com.smartgwt.client.widgets.grid.ListGridField;
+
+import org.rhq.core.domain.criteria.BaseCriteria;
+import org.rhq.enterprise.gui.coregui.client.util.RPCDataSource;
+
+/**
+ * @author Jirka Kremser
+ */
+public abstract class AbstractServerNodeDatasource<T, C extends BaseCriteria> extends RPCDataSource<T, C> {
+ protected abstract List<ListGridField> getListGridFields();
+}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupDetailView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupDetailView.java
new file mode 100644
index 0000000..863dbb5
--- /dev/null
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupDetailView.java
@@ -0,0 +1,205 @@
+/*
+ * RHQ Management Platform
+ * Copyright (C) 2005-2012 Red Hat, Inc.
+ * All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation version 2 of the License.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+package org.rhq.enterprise.gui.coregui.client.admin.topology;
+
+import static org.rhq.enterprise.gui.coregui.client.admin.topology.AffinityGroupWithCountsDatasource.Fields.FIELD_NAME;
+
+import com.google.gwt.user.client.Timer;
+import com.google.gwt.user.client.rpc.AsyncCallback;
+import com.smartgwt.client.data.RecordList;
+import com.smartgwt.client.types.Overflow;
+import com.smartgwt.client.types.VisibilityMode;
+import com.smartgwt.client.util.SC;
+import com.smartgwt.client.widgets.form.fields.ButtonItem;
+import com.smartgwt.client.widgets.form.fields.TextItem;
+import com.smartgwt.client.widgets.form.fields.events.ClickEvent;
+import com.smartgwt.client.widgets.form.fields.events.ClickHandler;
+import com.smartgwt.client.widgets.layout.SectionStack;
+import com.smartgwt.client.widgets.layout.SectionStackSection;
+
+import org.rhq.core.domain.cloud.AffinityGroup;
+import org.rhq.enterprise.gui.coregui.client.BookmarkableView;
+import org.rhq.enterprise.gui.coregui.client.ViewPath;
+import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup;
+import org.rhq.enterprise.gui.coregui.client.util.Log;
+import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableDynamicForm;
+import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableSectionStack;
+import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableVLayout;
+
+/**
+ * Shows details of a server.
+ *
+ * @author Jiri Kremser
+ */
+public class AffinityGroupDetailView extends LocatableVLayout implements BookmarkableView {
+
+ // private final CloudGWTServiceAsync cloudManager = GWTServiceLookup.getCloudService();
+ private final int affinityGroupId;
+
+ private final LocatableSectionStack sectionStack;
+ private SectionStackSection detailsSection = null;
+ private SectionStackSection agentSection = null;
+ private SectionStackSection serverSection = null;
+
+ private volatile int initSectionCount = 0;
+
+ public AffinityGroupDetailView(String locatorId, int affinityGroupId) {
+ super(locatorId);
+ this.affinityGroupId = affinityGroupId;
+ setHeight100();
+ setWidth100();
+ setOverflow(Overflow.AUTO);
+
+ sectionStack = new LocatableSectionStack(extendLocatorId("stack"));
+ sectionStack.setVisibilityMode(VisibilityMode.MULTIPLE);
+ sectionStack.setWidth100();
+ sectionStack.setHeight100();
+ sectionStack.setMargin(5);
+ sectionStack.setOverflow(Overflow.VISIBLE);
+ }
+
+ @Override
+ protected void onInit() {
+ super.onInit();
+ GWTServiceLookup.getCloudService().getAffinityGroupById(this.affinityGroupId,
+ new AsyncCallback<AffinityGroup>() {
+ public void onSuccess(final AffinityGroup affinityGroup) {
+ prepareDetailsSection(sectionStack, affinityGroup);
+
+ // GWTServiceLookup.getCloudService().getAgentsByServerName(server.getName(),
+ // new AsyncCallback<List<Agent>>() {
+ // public void onSuccess(List<Agent> agents) {
+ // prepareAgentSection(sectionStack, server, agents);
+ // };
+ //
+ // public void onFailure(Throwable caught) {
+ // //TODO: CoreGUI.getErrorHandler().handleError(MSG.view_admin_plugins_loadFailure(), caught);
+ // }
+ // });
+ }
+
+ public void onFailure(Throwable caught) {
+ SC.say("er1:" + caught);
+ //TODO: CoreGUI.getErrorHandler().handleError(MSG.view_admin_plugins_loadFailure(), caught);
+ }
+ });
+ prepareAgentSection(sectionStack);
+ prepareServerSection(sectionStack);
+ }
+
+ public boolean isInitialized() {
+ return initSectionCount >= 2;
+ }
+
+ @Override
+ protected void onDraw() {
+ super.onDraw();
+
+ // wait until we have all of the sections before we show them. We don't use InitializableView because,
+ // it seems they are not supported (in the applicable renderView()) at this level.
+ new Timer() {
+ final long startTime = System.currentTimeMillis();
+
+ public void run() {
+ if (isInitialized()) {
+ if (null != detailsSection) {
+ sectionStack.addSection(detailsSection);
+ }
+ if (null != agentSection) {
+ sectionStack.addSection(agentSection);
+ }
+ if (null != serverSection) {
+ sectionStack.addSection(serverSection);
+ }
+
+ addMember(sectionStack);
+ markForRedraw();
+
+ } else {
+ // don't wait forever, give up after 20s and show what we have
+ long elapsedMillis = System.currentTimeMillis() - startTime;
+ if (elapsedMillis > 20000) {
+ initSectionCount = 3;
+ }
+ schedule(100); // Reschedule the timer.
+ }
+ }
+ }.run(); // fire the timer immediately
+ }
+
+ private void prepareAgentSection(SectionStack stack) {
+ SectionStackSection section = new SectionStackSection(MSG.view_adminTopology_affinityGroups_agetnMembers());
+ section.setExpanded(true);
+ AgentTableView agentsTable = new AgentTableView(extendLocatorId(AgentTableView.VIEW_ID.getName()), null,
+ affinityGroupId, true);
+ section.setItems(agentsTable);
+
+ agentSection = section;
+ initSectionCount++;
+ return;
+ }
+
+ private void prepareServerSection(SectionStack stack) {
+ SectionStackSection section = new SectionStackSection(MSG.view_adminTopology_affinityGroups_serverMembers());
+ section.setExpanded(true);
+ ServerTableView serverTable = new ServerTableView(extendLocatorId(AgentTableView.VIEW_ID.getName()), null,
+ affinityGroupId, true);
+ section.setItems(serverTable);
+
+ serverSection = section;
+ initSectionCount++;
+ return;
+ }
+
+ private void prepareDetailsSection(SectionStack stack, AffinityGroup affinityGroup) {
+ final LocatableDynamicForm form = new LocatableDynamicForm(extendLocatorId("detailsForm"));
+ form.setMargin(10);
+ form.setWidth100();
+ form.setWrapItemTitles(false);
+ form.setNumCols(2);
+
+ TextItem nameItem = new TextItem(FIELD_NAME.propertyName(), FIELD_NAME.title());
+ nameItem.setValue(affinityGroup.getName());
+
+ ButtonItem saveButton = new ButtonItem();
+ saveButton.setOverflow(Overflow.VISIBLE);
+ saveButton.setTitle(MSG.common_button_save());
+ saveButton.addClickHandler(new ClickHandler() {
+ public void onClick(ClickEvent event) {
+ RecordList list = form.getRecordList();
+ SC.say("name is " + list.get(0).getAttribute("name"));
+ }
+ });
+
+ form.setItems(nameItem, saveButton);
+
+ SectionStackSection section = new SectionStackSection(MSG.common_title_details());
+ section.setExpanded(true);
+ section.setItems(form);
+
+ detailsSection = section;
+ initSectionCount++;
+ }
+
+ @Override
+ public void renderView(ViewPath viewPath) {
+ Log.debug("AffinityGroupDetailView: " + viewPath);
+ }
+}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupTableView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupTableView.java
index d14fe57..28fc8b1 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupTableView.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupTableView.java
@@ -83,30 +83,11 @@ public class AffinityGroupTableView extends TableSection<AffinityGroupWithCounts
listGrid.setFields(fields.toArray(new ListGridField[fields.size()]));
showActions();
super.configureTable();
-
- // for (ListGridField field : fields) {
- // // adding the cell formatter for name field (clickable link)
- // if (field.getName() == FIELD_NAME) {
- // field.setCellFormatter(new CellFormatter() {
- // @Override
- // public String format(Object value, ListGridRecord record, int rowNum, int colNum) {
- // if (value == null) {
- // return "";
- // }
- // String detailsUrl = "#" + VIEW_PATH + "/" + getId(record);
- // String formattedValue = StringUtility.escapeHtml(value.toString());
- // return SeleniumUtility.getLocatableHref(detailsUrl, formattedValue, null);
- //
- // }
- // });
- // }
- // // TODO: adding the cell formatter for affinity group (clickable link)
- // }
}
@Override
public Canvas getDetailsView(Integer id) {
- return new ServerDetailView(extendLocatorId("detailsView"), id);
+ return new AffinityGroupDetailView(extendLocatorId("detailsView"), id);
}
private void showActions() {
@@ -252,10 +233,8 @@ public class AffinityGroupTableView extends TableSection<AffinityGroupWithCounts
buttons.addMember(cancel);
buttons.addMember(save);
layout.addMember(buttons);
-
modalWindow.addItem(layout);
modalWindow.show();
-
}
@Override
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupWithCountsDatasource.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupWithCountsDatasource.java
index aa05e06..e08a88e 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupWithCountsDatasource.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupWithCountsDatasource.java
@@ -51,7 +51,7 @@ public class AffinityGroupWithCountsDatasource extends RPCDataSource<AffinityGro
FIELD_NAME("name", CoreGUI.getMessages().common_title_name()),
- FIELD_AGENT_COUNT("serverCount", CoreGUI.getMessages().view_adminTopology_affinityGroups_agentCount()),
+ FIELD_AGENT_COUNT("agentCount", CoreGUI.getMessages().view_adminTopology_affinityGroups_agentCount()),
FIELD_SERVER_COUNT("serverCount", CoreGUI.getMessages().view_adminTopology_affinityGroups_serverCount());
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentDetailView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentDetailView.java
index 9c32758..87e01a7 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentDetailView.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentDetailView.java
@@ -36,6 +36,7 @@ import com.smartgwt.client.widgets.form.fields.StaticTextItem;
import com.smartgwt.client.widgets.layout.SectionStack;
import com.smartgwt.client.widgets.layout.SectionStackSection;
+import org.rhq.core.domain.cloud.AffinityGroup;
import org.rhq.core.domain.resource.Agent;
import org.rhq.enterprise.gui.coregui.client.components.table.TimestampCellFormatter;
import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup;
@@ -166,10 +167,17 @@ public class AgentDetailView extends LocatableVLayout {
Long.valueOf(agent.getLastAvailabilityReport()), TimestampCellFormatter.DATE_TIME_FORMAT_LONG);
lastAvailabilityItem.setValue(lastReport);
- // TODO: make clickable link
+ // make clickable link for affinity group
StaticTextItem affinityGroupItem = new StaticTextItem(FIELD_AFFINITY_GROUP.propertyName(),
FIELD_AFFINITY_GROUP.title());
- affinityGroupItem.setValue(agent.getAffinityGroup() == null ? "" : agent.getAffinityGroup().getName());
+ String affinityGroupItemText = "";
+ AffinityGroup ag = agent.getAffinityGroup();
+ if (ag != null && ag.getName() != null && !ag.getName().isEmpty()) {
+ String detailsUrl = "#" + AffinityGroupTableView.VIEW_PATH + "/" + ag.getId();
+ String formattedValue = StringUtility.escapeHtml(ag.getName());
+ affinityGroupItemText = SeleniumUtility.getLocatableHref(detailsUrl, formattedValue, null);
+ }
+ affinityGroupItem.setValue(affinityGroupItemText);
StaticTextItem currentServerItem = new StaticTextItem(FIELD_SERVER.propertyName(), FIELD_SERVER.title());
String serverValue = null;
@@ -182,7 +190,6 @@ public class AgentDetailView extends LocatableVLayout {
}
currentServerItem.setValue(serverValue);
-
// ButtonItem saveButton = new ButtonItem();
// saveButton.setOverflow(Overflow.VISIBLE);
// saveButton.setTitle(MSG.common_button_save());
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentNodeDatasource.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentNodeDatasource.java
index 96bce3c..8a9da96 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentNodeDatasource.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentNodeDatasource.java
@@ -20,6 +20,7 @@ package org.rhq.enterprise.gui.coregui.client.admin.topology;
import static org.rhq.enterprise.gui.coregui.client.admin.topology.AgentNodeDatasourceField.FIELD_ADDRESS;
import static org.rhq.enterprise.gui.coregui.client.admin.topology.AgentNodeDatasourceField.FIELD_AFFINITY_GROUP;
+import static org.rhq.enterprise.gui.coregui.client.admin.topology.AgentNodeDatasourceField.FIELD_AFFINITY_GROUP_ID;
import static org.rhq.enterprise.gui.coregui.client.admin.topology.AgentNodeDatasourceField.FIELD_ID;
import static org.rhq.enterprise.gui.coregui.client.admin.topology.AgentNodeDatasourceField.FIELD_LAST_AVAILABILITY_REPORT;
import static org.rhq.enterprise.gui.coregui.client.admin.topology.AgentNodeDatasourceField.FIELD_NAME;
@@ -54,11 +55,13 @@ import org.rhq.enterprise.gui.coregui.client.util.RPCDataSource;
*/
public class AgentNodeDatasource extends RPCDataSource<Agent, Criteria> {
- private final Integer serverId;
+ private final Integer id;
+ private final boolean isAffinityGroupId;
- public AgentNodeDatasource(Integer serverId) {
+ public AgentNodeDatasource(Integer id, boolean isAffinityGroupId) {
super();
- this.serverId = serverId;
+ this.id = id;
+ this.isAffinityGroupId = isAffinityGroupId;
List<DataSourceField> fields = addDataSourceFields();
addFields(fields);
}
@@ -82,17 +85,22 @@ public class AgentNodeDatasource extends RPCDataSource<Agent, Criteria> {
fields.add(FIELD_NAME.getListGridField("*"));
fields.add(FIELD_SERVER.getListGridField("120"));
fields.add(FIELD_ADDRESS.getListGridField("110"));
-
+
ListGridField serverIdField = FIELD_SERVER_ID.getListGridField();
serverIdField.setHidden(true);
fields.add(serverIdField);
-
+
fields.add(FIELD_PORT.getListGridField("90"));
ListGridField lastAvailabilityReportField = FIELD_LAST_AVAILABILITY_REPORT.getListGridField("120");
TimestampCellFormatter.prepareDateField(lastAvailabilityReportField);
fields.add(lastAvailabilityReportField);
-
- fields.add(FIELD_AFFINITY_GROUP.getListGridField("100"));
+
+ if (!isAffinityGroupId) {
+ fields.add(FIELD_AFFINITY_GROUP.getListGridField("100"));
+ ListGridField affinityGroupIdField = FIELD_AFFINITY_GROUP_ID.getListGridField();
+ affinityGroupIdField.setHidden(true);
+ fields.add(affinityGroupIdField);
+ }
return fields;
}
@@ -101,7 +109,7 @@ public class AgentNodeDatasource extends RPCDataSource<Agent, Criteria> {
protected void executeFetch(final DSRequest request, final DSResponse response, Criteria criteria) {
final PageControl pc = getPageControl(request);
- GWTServiceLookup.getAgentService().getAgentsByServer(serverId, pc, new AsyncCallback<PageList<Agent>>() {
+ AsyncCallback<PageList<Agent>> callback = new AsyncCallback<PageList<Agent>>() {
public void onSuccess(PageList<Agent> result) {
response.setData(buildRecords(result));
response.setTotalRows(result.size());
@@ -114,7 +122,14 @@ public class AgentNodeDatasource extends RPCDataSource<Agent, Criteria> {
response.setStatus(DSResponse.STATUS_FAILURE);
processResponse(request.getRequestId(), response);
}
- });
+ };
+
+ if (isAffinityGroupId) {
+ GWTServiceLookup.getCloudService().getAgentMembersByAffinityGroupId(id, pc, callback);
+ } else {
+ // if id == null all agent are returned
+ GWTServiceLookup.getAgentService().getAgentsByServer(id, pc, callback);
+ }
}
/**
@@ -159,6 +174,9 @@ public class AgentNodeDatasource extends RPCDataSource<Agent, Criteria> {
record.setAttribute(FIELD_LAST_AVAILABILITY_REPORT.propertyName(), from.getLastAvailabilityReport());
record.setAttribute(FIELD_AFFINITY_GROUP.propertyName(), from.getAffinityGroup() == null ? "" : from
.getAffinityGroup().getName());
+ record.setAttribute(FIELD_AFFINITY_GROUP_ID.propertyName(), from.getAffinityGroup() == null ? "" : from
+ .getAffinityGroup().getId());
+
return record;
}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentNodeDatasourceField.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentNodeDatasourceField.java
index 5873ab3..dc82130 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentNodeDatasourceField.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentNodeDatasourceField.java
@@ -44,7 +44,9 @@ public enum AgentNodeDatasourceField {
FIELD_AGENT_TOKEN("agentToken", CoreGUI.getMessages().view_adminTopology_agentDetail_token()),
- FIELD_AFFINITY_GROUP("affinityGroup", CoreGUI.getMessages().view_adminTopology_server_affinityGroup());
+ FIELD_AFFINITY_GROUP("affinityGroup", CoreGUI.getMessages().view_adminTopology_server_affinityGroup()),
+
+ FIELD_AFFINITY_GROUP_ID("affinityGroupId", "affinityGroupId");
/**
* Corresponds to a property name of Server (e.g. operationMode).
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentTableView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentTableView.java
index fe06e65..6363511 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentTableView.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentTableView.java
@@ -18,20 +18,26 @@
*/
package org.rhq.enterprise.gui.coregui.client.admin.topology;
+import static org.rhq.enterprise.gui.coregui.client.admin.topology.AgentNodeDatasourceField.FIELD_AFFINITY_GROUP;
+import static org.rhq.enterprise.gui.coregui.client.admin.topology.AgentNodeDatasourceField.FIELD_AFFINITY_GROUP_ID;
import static org.rhq.enterprise.gui.coregui.client.admin.topology.AgentNodeDatasourceField.FIELD_SERVER;
import static org.rhq.enterprise.gui.coregui.client.admin.topology.AgentNodeDatasourceField.FIELD_SERVER_ID;
import java.util.List;
import com.smartgwt.client.types.SortDirection;
+import com.smartgwt.client.util.SC;
import com.smartgwt.client.widgets.Canvas;
import com.smartgwt.client.widgets.grid.CellFormatter;
import com.smartgwt.client.widgets.grid.ListGrid;
import com.smartgwt.client.widgets.grid.ListGridField;
import com.smartgwt.client.widgets.grid.ListGridRecord;
+import org.rhq.core.domain.authz.Permission;
import org.rhq.enterprise.gui.coregui.client.IconEnum;
import org.rhq.enterprise.gui.coregui.client.admin.AdministrationView;
+import org.rhq.enterprise.gui.coregui.client.components.table.AuthorizedTableAction;
+import org.rhq.enterprise.gui.coregui.client.components.table.TableActionEnablement;
import org.rhq.enterprise.gui.coregui.client.components.table.TableSection;
import org.rhq.enterprise.gui.coregui.client.components.view.HasViewName;
import org.rhq.enterprise.gui.coregui.client.components.view.ViewName;
@@ -45,15 +51,22 @@ public class AgentTableView extends TableSection<AgentNodeDatasource> implements
public static final ViewName VIEW_ID = new ViewName("Agents(GWT)", MSG.view_adminTopology_agents() + "(GWT)",
IconEnum.AGENT);
-
+
public static final String VIEW_PATH = AdministrationView.VIEW_ID + "/"
+ AdministrationView.SECTION_TOPOLOGY_VIEW_ID + "/" + VIEW_ID;
- public AgentTableView(String locatorId, String tableTitle, Integer serverId) {
+ private final boolean isAffinityGroupId;
+
+ public AgentTableView(String locatorId, String tableTitle, Integer id, boolean isAffinityGroupId) {
super(locatorId, tableTitle);
+ this.isAffinityGroupId = isAffinityGroupId;
setHeight100();
setWidth100();
- setDataSource(new AgentNodeDatasource(serverId));
+ setDataSource(new AgentNodeDatasource(id, isAffinityGroupId));
+ }
+
+ public AgentTableView(String locatorId, String tableTitle, Integer id) {
+ this(locatorId, tableTitle, id, false);
}
@Override
@@ -63,7 +76,7 @@ public class AgentTableView extends TableSection<AgentNodeDatasource> implements
ListGrid listGrid = getListGrid();
listGrid.setFields(fields.toArray(new ListGridField[fields.size()]));
listGrid.sort(FIELD_NAME, SortDirection.ASCENDING);
-
+
for (ListGridField field : fields) {
// adding the cell formatter for name field (clickable link)
if (field.getName() == FIELD_NAME) {
@@ -80,6 +93,7 @@ public class AgentTableView extends TableSection<AgentNodeDatasource> implements
}
});
} else if (field.getName() == FIELD_SERVER.propertyName()) {
+ // adding the cell formatter for server field (clickable link)
field.setCellFormatter(new CellFormatter() {
@Override
public String format(Object value, ListGridRecord record, int rowNum, int colNum) {
@@ -90,15 +104,33 @@ public class AgentTableView extends TableSection<AgentNodeDatasource> implements
+ record.getAttributeAsString(FIELD_SERVER_ID.propertyName());
String formattedValue = StringUtility.escapeHtml(value.toString());
return SeleniumUtility.getLocatableHref(detailsUrl, formattedValue, null);
-
+ }
+ });
+ } else if (field.getName() == FIELD_AFFINITY_GROUP.propertyName()) {
+ // adding the cell formatter for affinity group field (clickable link)
+ field.setCellFormatter(new CellFormatter() {
+ @Override
+ public String format(Object value, ListGridRecord record, int rowNum, int colNum) {
+ if (value == null || value.toString().isEmpty()) {
+ return "";
+ }
+ String detailsUrl = "#" + AffinityGroupTableView.VIEW_PATH + "/"
+ + record.getAttributeAsString(FIELD_AFFINITY_GROUP_ID.propertyName());
+ String formattedValue = StringUtility.escapeHtml(value.toString());
+ return SeleniumUtility.getLocatableHref(detailsUrl, formattedValue, null);
}
});
}
- // TODO: adding the cell formatter for affinity group (clickable link)
-
}
-
+ if (isAffinityGroupId)
+ addTableAction(extendLocatorId("editGroupAgents"), "i18nEditGroupAgents",
+ new AuthorizedTableAction(this, TableActionEnablement.ALWAYS, Permission.MANAGE_SETTINGS) {
+ public void executeAction(final ListGridRecord[] selections, Object actionValue) {
+ SC.say("working..");
+ // todo: open editor for agent members
+ }
+ });
}
@Override
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/FailoverListItemDatasource.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/FailoverListItemDatasource.java
index fc5f3a5..4ca0c64 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/FailoverListItemDatasource.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/FailoverListItemDatasource.java
@@ -18,15 +18,16 @@
*/
package org.rhq.enterprise.gui.coregui.client.admin.topology;
-import static org.rhq.enterprise.gui.coregui.client.admin.topology.FailoverListItemDatasourceField.FIELD_ADDRESS;
-import static org.rhq.enterprise.gui.coregui.client.admin.topology.FailoverListItemDatasourceField.FIELD_AFFINITY_GROUP;
-import static org.rhq.enterprise.gui.coregui.client.admin.topology.FailoverListItemDatasourceField.FIELD_ID;
-import static org.rhq.enterprise.gui.coregui.client.admin.topology.FailoverListItemDatasourceField.FIELD_MTIME;
-import static org.rhq.enterprise.gui.coregui.client.admin.topology.FailoverListItemDatasourceField.FIELD_NAME;
-import static org.rhq.enterprise.gui.coregui.client.admin.topology.FailoverListItemDatasourceField.FIELD_OPERATION_MODE;
-import static org.rhq.enterprise.gui.coregui.client.admin.topology.FailoverListItemDatasourceField.FIELD_ORDINAL;
-import static org.rhq.enterprise.gui.coregui.client.admin.topology.FailoverListItemDatasourceField.FIELD_PORT;
-import static org.rhq.enterprise.gui.coregui.client.admin.topology.FailoverListItemDatasourceField.FIELD_SECURE_PORT;
+import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerDatasourceField.FIELD_ADDRESS;
+import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerDatasourceField.FIELD_AFFINITY_GROUP;
+import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerDatasourceField.FIELD_AFFINITY_GROUP_ID;
+import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerDatasourceField.FIELD_ID;
+import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerDatasourceField.FIELD_MTIME;
+import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerDatasourceField.FIELD_NAME;
+import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerDatasourceField.FIELD_OPERATION_MODE;
+import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerDatasourceField.FIELD_ORDINAL;
+import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerDatasourceField.FIELD_PORT;
+import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerDatasourceField.FIELD_SECURE_PORT;
import java.util.ArrayList;
import java.util.List;
@@ -36,14 +37,12 @@ import com.smartgwt.client.data.DSRequest;
import com.smartgwt.client.data.DSResponse;
import com.smartgwt.client.data.DataSourceField;
import com.smartgwt.client.data.Record;
-import com.smartgwt.client.data.fields.DataSourceIntegerField;
import com.smartgwt.client.widgets.grid.ListGridField;
import com.smartgwt.client.widgets.grid.ListGridRecord;
import org.rhq.core.domain.cloud.FailoverListDetails;
import org.rhq.core.domain.criteria.Criteria;
import org.rhq.core.domain.util.PageControl;
-import org.rhq.core.domain.util.PageOrdering;
import org.rhq.enterprise.gui.coregui.client.components.table.TimestampCellFormatter;
import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup;
@@ -51,25 +50,22 @@ import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup;
* @author Jirka Kremser
*
*/
-public class FailoverListItemDatasource extends ServerDatasource<FailoverListDetails, Criteria> {
-
+public class FailoverListItemDatasource extends AbstractServerNodeDatasource<FailoverListDetails, Criteria> {
+
private final int agentId;
+ private final ServerDatasource serverDatasource;
public FailoverListItemDatasource(int agentId) {
super();
this.agentId = agentId;
+ this.serverDatasource = new ServerDatasource(null);
List<DataSourceField> fields = addDataSourceFields();
addFields(fields);
}
@Override
protected List<DataSourceField> addDataSourceFields() {
- List<DataSourceField> fields = super.addDataSourceFields();
- DataSourceField idField = new DataSourceIntegerField(FIELD_ID.propertyName(), FIELD_ID.title(), 50);
- idField.setPrimaryKey(true);
- idField.setHidden(true);
- fields.add(idField);
- return fields;
+ return serverDatasource.addDataSourceFields();
}
@Override
@@ -91,6 +87,9 @@ public class FailoverListItemDatasource extends ServerDatasource<FailoverListDet
fields.add(lastUpdateTimeField);
fields.add(FIELD_AFFINITY_GROUP.getListGridField("80"));
+ ListGridField affinityGroupIdField = FIELD_AFFINITY_GROUP_ID.getListGridField();
+ affinityGroupIdField.setHidden(true);
+ fields.add(affinityGroupIdField);
return fields;
}
@@ -99,45 +98,26 @@ public class FailoverListItemDatasource extends ServerDatasource<FailoverListDet
protected void executeFetch(final DSRequest request, final DSResponse response, Criteria criteria) {
final PageControl pc = getPageControl(request);
- GWTServiceLookup.getCloudService().getFailoverListDetailsByAgentId(agentId, pc, new AsyncCallback<List<FailoverListDetails>>() {
- public void onSuccess(List<FailoverListDetails> result) {
- response.setData(buildRecords(result));
- response.setTotalRows(result.size());
- processResponse(request.getRequestId(), response);
- }
-
- @Override
- public void onFailure(Throwable t) {
- //todo: CoreGUI.getErrorHandler().handleError(MSG.view_admin_plugins_loadFailure(), t);
- response.setStatus(DSResponse.STATUS_FAILURE);
- processResponse(request.getRequestId(), response);
- }
- });
+ // if agentId == null all FailoverListDetails are returned
+ GWTServiceLookup.getCloudService().getFailoverListDetailsByAgentId(agentId, pc,
+ new AsyncCallback<List<FailoverListDetails>>() {
+ public void onSuccess(List<FailoverListDetails> result) {
+ response.setData(buildRecords(result));
+ response.setTotalRows(result.size());
+ processResponse(request.getRequestId(), response);
+ }
+
+ @Override
+ public void onFailure(Throwable t) {
+ //todo: CoreGUI.getErrorHandler().handleError(MSG.view_admin_plugins_loadFailure(), t);
+ response.setStatus(DSResponse.STATUS_FAILURE);
+ processResponse(request.getRequestId(), response);
+ }
+ });
}
- /**
- * Returns a prepopulated PageControl based on the provided DSRequest. This will set sort fields,
- * pagination, but *not* filter fields.
- *
- * @param request the request to turn into a page control
- * @return the page control for passing to criteria and other queries
- */
protected PageControl getPageControl(DSRequest request) {
- // Initialize paging.
- PageControl pageControl = new PageControl(0, getDataPageSize());
-
- // Initialize sorting.
- String sortBy = request.getAttribute("sortBy");
- if (sortBy != null) {
- String[] sorts = sortBy.split(",");
- for (String sort : sorts) {
- PageOrdering ordering = (sort.startsWith("-")) ? PageOrdering.DESC : PageOrdering.ASC;
- String columnName = (ordering == PageOrdering.DESC) ? sort.substring(1) : sort;
- pageControl.addDefaultOrderingField(columnName, ordering);
- }
- }
-
- return pageControl;
+ return serverDatasource.getPageControl(request);
}
@Override
@@ -148,16 +128,11 @@ public class FailoverListItemDatasource extends ServerDatasource<FailoverListDet
@Override
public ListGridRecord copyValues(FailoverListDetails from) {
ListGridRecord record = new ListGridRecord();
- record.setAttribute(FIELD_ID.propertyName(), from.getServer().getId());
+ if (from == null || from.getServer() == null) {
+ return record;
+ }
+ record = serverDatasource.copyValues(from.getServer());
record.setAttribute(FIELD_ORDINAL.propertyName(), from.getOrdinal());
- record.setAttribute(FIELD_NAME.propertyName(), from.getServer().getName());
- record.setAttribute(FIELD_OPERATION_MODE.propertyName(), from.getServer().getOperationMode());
- record.setAttribute(FIELD_ADDRESS.propertyName(), from.getServer().getAddress());
- record.setAttribute(FIELD_PORT.propertyName(), from.getServer().getPort());
- record.setAttribute(FIELD_SECURE_PORT.propertyName(), from.getServer().getSecurePort());
- record.setAttribute(FIELD_MTIME.propertyName(), from.getServer().getMtime());
- record.setAttribute(FIELD_AFFINITY_GROUP.propertyName(), from.getServer().getAffinityGroup() == null ? ""
- : from.getServer().getAffinityGroup().getName());
return record;
}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/FailoverListItemDatasourceField.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/FailoverListItemDatasourceField.java
deleted file mode 100644
index 4c380fd..0000000
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/FailoverListItemDatasourceField.java
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- * RHQ Management Platform
- * Copyright (C) 2005-2012 Red Hat, Inc.
- * All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation version 2 of the License.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-package org.rhq.enterprise.gui.coregui.client.admin.topology;
-
-import com.smartgwt.client.widgets.grid.ListGridField;
-
-import org.rhq.enterprise.gui.coregui.client.CoreGUI;
-
-/**
- * @author Jirka Kremser
- *
- */
-public enum FailoverListItemDatasourceField {
-
- FIELD_ID("id", CoreGUI.getMessages().common_title_id()),
-
- FIELD_ORDINAL("ordinal", "poradi"),
-
- FIELD_NAME("name", CoreGUI.getMessages().common_title_name()),
-
- FIELD_OPERATION_MODE("operationMode", CoreGUI.getMessages().view_adminTopology_server_mode()),
-
- FIELD_ADDRESS("address", CoreGUI.getMessages().view_adminTopology_server_endpointAddress()),
-
- FIELD_PORT("port", CoreGUI.getMessages().view_adminTopology_server_nonSecurePort()),
-
- FIELD_SECURE_PORT("securePort", CoreGUI.getMessages().view_adminTopology_server_securePort()),
-
- FIELD_MTIME("mtime", CoreGUI.getMessages().view_adminTopology_server_lastUpdateTime()),
-
- FIELD_AFFINITY_GROUP("affinityGroup", CoreGUI.getMessages().view_adminTopology_server_affinityGroup()),
-
- FIELD_AGENT_COUNT("agentCount", CoreGUI.getMessages().view_adminTopology_server_agentCount());
-
- /**
- * Corresponds to a property name of Server (e.g. operationMode).
- */
- private String propertyName;
-
- /**
- * The table header for the field or property (e.g. Mode).
- */
- private String title;
-
- private FailoverListItemDatasourceField(String propertyName, String title) {
- this.propertyName = propertyName;
- this.title = title;
- }
-
- public String propertyName() {
- return propertyName;
- }
-
- public String title() {
- return title;
- }
-
- public ListGridField getListGridField() {
- return new ListGridField(propertyName, title);
- }
-
- public ListGridField getListGridField(String width) {
- ListGridField field = new ListGridField(propertyName, title);
- field.setWidth(width);
- return field;
- }
-}
\ No newline at end of file
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDatasource.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDatasource.java
index 619821d..2413d41 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDatasource.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDatasource.java
@@ -18,16 +18,160 @@
*/
package org.rhq.enterprise.gui.coregui.client.admin.topology;
+import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerDatasourceField.FIELD_ADDRESS;
+import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerDatasourceField.FIELD_AFFINITY_GROUP;
+import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerDatasourceField.FIELD_AFFINITY_GROUP_ID;
+import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerDatasourceField.FIELD_AGENT_COUNT;
+import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerDatasourceField.FIELD_ID;
+import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerDatasourceField.FIELD_MTIME;
+import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerDatasourceField.FIELD_NAME;
+import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerDatasourceField.FIELD_OPERATION_MODE;
+import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerDatasourceField.FIELD_PORT;
+import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerDatasourceField.FIELD_SECURE_PORT;
+
+import java.util.ArrayList;
import java.util.List;
+import com.google.gwt.user.client.rpc.AsyncCallback;
+import com.smartgwt.client.data.DSRequest;
+import com.smartgwt.client.data.DSResponse;
+import com.smartgwt.client.data.DataSourceField;
+import com.smartgwt.client.data.Record;
+import com.smartgwt.client.data.fields.DataSourceIntegerField;
import com.smartgwt.client.widgets.grid.ListGridField;
+import com.smartgwt.client.widgets.grid.ListGridRecord;
-import org.rhq.core.domain.criteria.BaseCriteria;
-import org.rhq.enterprise.gui.coregui.client.util.RPCDataSource;
+import org.rhq.core.domain.cloud.Server;
+import org.rhq.core.domain.criteria.Criteria;
+import org.rhq.core.domain.util.PageControl;
+import org.rhq.core.domain.util.PageList;
+import org.rhq.core.domain.util.PageOrdering;
+import org.rhq.enterprise.gui.coregui.client.components.table.TimestampCellFormatter;
+import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup;
/**
* @author Jirka Kremser
+ *
*/
-public abstract class ServerDatasource<T, C extends BaseCriteria> extends RPCDataSource<T, C> {
- protected abstract List<ListGridField> getListGridFields();
+public class ServerDatasource extends AbstractServerNodeDatasource<Server, Criteria> {
+
+ private final Integer affinityGroupId;
+
+ public ServerDatasource(Integer affinityGroupId) {
+ super();
+ this.affinityGroupId = affinityGroupId;
+ List<DataSourceField> fields = addDataSourceFields();
+ addFields(fields);
+ }
+
+ @Override
+ protected List<DataSourceField> addDataSourceFields() {
+ List<DataSourceField> fields = super.addDataSourceFields();
+ DataSourceField idField = new DataSourceIntegerField(FIELD_ID.propertyName(), FIELD_ID.title(), 50);
+ idField.setPrimaryKey(true);
+ idField.setHidden(true);
+ fields.add(idField);
+ return fields;
+ }
+
+ public List<ListGridField> getListGridFields() {
+ List<ListGridField> fields = new ArrayList<ListGridField>();
+
+ ListGridField idField = FIELD_ID.getListGridField();
+ idField.setHidden(true);
+ fields.add(idField);
+
+ fields.add(FIELD_NAME.getListGridField("*"));
+ fields.add(FIELD_OPERATION_MODE.getListGridField("90"));
+ fields.add(FIELD_ADDRESS.getListGridField("110"));
+ fields.add(FIELD_PORT.getListGridField("90"));
+ fields.add(FIELD_SECURE_PORT.getListGridField("75"));
+
+ ListGridField lastUpdateTimeField = FIELD_MTIME.getListGridField("120");
+ TimestampCellFormatter.prepareDateField(lastUpdateTimeField);
+ fields.add(lastUpdateTimeField);
+
+ ListGridField affinityGroupIdField = FIELD_AFFINITY_GROUP_ID.getListGridField();
+ affinityGroupIdField.setHidden(true);
+ fields.add(affinityGroupIdField);
+ fields.add(FIELD_AGENT_COUNT.getListGridField("75"));
+
+ return fields;
+ }
+
+ @Override
+ protected void executeFetch(final DSRequest request, final DSResponse response, Criteria criteria) {
+ if (affinityGroupId == null) {
+ return;
+ }
+ final PageControl pc = getPageControl(request);
+ GWTServiceLookup.getCloudService().getServerMembersByAffinityGroupId(affinityGroupId, pc,
+ new AsyncCallback<PageList<Server>>() {
+ public void onSuccess(PageList<Server> result) {
+ response.setData(buildRecords(result));
+ response.setTotalRows(result.size());
+ processResponse(request.getRequestId(), response);
+ }
+
+ @Override
+ public void onFailure(Throwable t) {
+ //todo: CoreGUI.getErrorHandler().handleError(MSG.view_admin_plugins_loadFailure(), t);
+ response.setStatus(DSResponse.STATUS_FAILURE);
+ processResponse(request.getRequestId(), response);
+ }
+ });
+ }
+
+ /**
+ * Returns a prepopulated PageControl based on the provided DSRequest. This will set sort fields,
+ * pagination, but *not* filter fields.
+ *
+ * @param request the request to turn into a page control
+ * @return the page control for passing to criteria and other queries
+ */
+ protected PageControl getPageControl(DSRequest request) {
+ // Initialize paging.
+ PageControl pageControl = new PageControl(0, getDataPageSize());
+
+ // Initialize sorting.
+ String sortBy = request.getAttribute("sortBy");
+ if (sortBy != null) {
+ String[] sorts = sortBy.split(",");
+ for (String sort : sorts) {
+ PageOrdering ordering = (sort.startsWith("-")) ? PageOrdering.DESC : PageOrdering.ASC;
+ String columnName = (ordering == PageOrdering.DESC) ? sort.substring(1) : sort;
+ pageControl.addDefaultOrderingField(columnName, ordering);
+ }
+ }
+
+ return pageControl;
+ }
+
+ @Override
+ public Server copyValues(Record from) {
+ throw new UnsupportedOperationException("ServerDatasource.copyValues(Record from)");
+ }
+
+ @Override
+ public ListGridRecord copyValues(Server from) {
+ ListGridRecord record = new ListGridRecord();
+ record.setAttribute(FIELD_ID.propertyName(), from.getId());
+ record.setAttribute(FIELD_NAME.propertyName(), from.getName());
+ record.setAttribute(FIELD_OPERATION_MODE.propertyName(), from.getOperationMode());
+ record.setAttribute(FIELD_ADDRESS.propertyName(), from.getAddress());
+ record.setAttribute(FIELD_PORT.propertyName(), from.getPort());
+ record.setAttribute(FIELD_SECURE_PORT.propertyName(), from.getSecurePort());
+ record.setAttribute(FIELD_MTIME.propertyName(), from.getMtime());
+ record.setAttribute(FIELD_AFFINITY_GROUP.propertyName(), from.getAffinityGroup() == null ? "" : from
+ .getAffinityGroup().getName());
+ record.setAttribute(FIELD_AFFINITY_GROUP_ID.propertyName(), from.getAffinityGroup() == null ? "" : from
+ .getAffinityGroup().getId());
+ return record;
+ }
+
+ @Override
+ protected Criteria getFetchCriteria(DSRequest request) {
+ // we don't use criteria for this datasource, just return null
+ return null;
+ }
}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDatasourceField.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDatasourceField.java
new file mode 100644
index 0000000..18754c5
--- /dev/null
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDatasourceField.java
@@ -0,0 +1,87 @@
+/*
+ * RHQ Management Platform
+ * Copyright (C) 2005-2012 Red Hat, Inc.
+ * All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation version 2 of the License.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+package org.rhq.enterprise.gui.coregui.client.admin.topology;
+
+import com.smartgwt.client.widgets.grid.ListGridField;
+
+import org.rhq.enterprise.gui.coregui.client.CoreGUI;
+
+/**
+ * @author Jirka Kremser
+ *
+ */
+public enum ServerDatasourceField {
+
+ FIELD_ID("id", CoreGUI.getMessages().common_title_id()),
+
+ FIELD_ORDINAL("ordinal", "poradi"),
+
+ FIELD_NAME("name", CoreGUI.getMessages().common_title_name()),
+
+ FIELD_OPERATION_MODE("operationMode", CoreGUI.getMessages().view_adminTopology_server_mode()),
+
+ FIELD_ADDRESS("address", CoreGUI.getMessages().view_adminTopology_server_endpointAddress()),
+
+ FIELD_PORT("port", CoreGUI.getMessages().view_adminTopology_server_nonSecurePort()),
+
+ FIELD_SECURE_PORT("securePort", CoreGUI.getMessages().view_adminTopology_server_securePort()),
+
+ FIELD_CTIME("ctime", CoreGUI.getMessages().view_adminTopology_serverDetail_installationDate()),
+
+ FIELD_MTIME("mtime", CoreGUI.getMessages().view_adminTopology_server_lastUpdateTime()),
+
+ FIELD_AFFINITY_GROUP("affinityGroup", CoreGUI.getMessages().view_adminTopology_server_affinityGroup()),
+
+ FIELD_AFFINITY_GROUP_ID("affinityGroupId", "affinityGroupId"),
+
+ FIELD_AGENT_COUNT("agentCount", CoreGUI.getMessages().view_adminTopology_server_agentCount());
+
+ /**
+ * Corresponds to a property name of Server (e.g. operationMode).
+ */
+ private String propertyName;
+
+ /**
+ * The table header for the field or property (e.g. Mode).
+ */
+ private String title;
+
+ private ServerDatasourceField(String propertyName, String title) {
+ this.propertyName = propertyName;
+ this.title = title;
+ }
+
+ public String propertyName() {
+ return propertyName;
+ }
+
+ public String title() {
+ return title;
+ }
+
+ public ListGridField getListGridField() {
+ return new ListGridField(propertyName, title);
+ }
+
+ public ListGridField getListGridField(String width) {
+ ListGridField field = new ListGridField(propertyName, title);
+ field.setWidth(width);
+ return field;
+ }
+}
\ No newline at end of file
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDetailView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDetailView.java
index 5f18d19..efeb9b7 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDetailView.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDetailView.java
@@ -19,14 +19,14 @@
package org.rhq.enterprise.gui.coregui.client.admin.topology;
-import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerWithAgentCountDatasourceField.FIELD_ADDRESS;
-import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerWithAgentCountDatasourceField.FIELD_AFFINITY_GROUP;
-import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerWithAgentCountDatasourceField.FIELD_CTIME;
-import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerWithAgentCountDatasourceField.FIELD_MTIME;
-import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerWithAgentCountDatasourceField.FIELD_NAME;
-import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerWithAgentCountDatasourceField.FIELD_OPERATION_MODE;
-import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerWithAgentCountDatasourceField.FIELD_PORT;
-import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerWithAgentCountDatasourceField.FIELD_SECURE_PORT;
+import static org.rhq.enterprise.gui.coregui.client.admin.topology.AgentNodeDatasourceField.FIELD_AFFINITY_GROUP;
+import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerDatasourceField.FIELD_ADDRESS;
+import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerDatasourceField.FIELD_CTIME;
+import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerDatasourceField.FIELD_MTIME;
+import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerDatasourceField.FIELD_NAME;
+import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerDatasourceField.FIELD_OPERATION_MODE;
+import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerDatasourceField.FIELD_PORT;
+import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerDatasourceField.FIELD_SECURE_PORT;
import com.google.gwt.user.client.Timer;
import com.google.gwt.user.client.rpc.AsyncCallback;
@@ -43,15 +43,18 @@ import com.smartgwt.client.widgets.form.fields.events.ClickHandler;
import com.smartgwt.client.widgets.layout.SectionStack;
import com.smartgwt.client.widgets.layout.SectionStackSection;
+import org.rhq.core.domain.cloud.AffinityGroup;
import org.rhq.core.domain.cloud.Server;
import org.rhq.enterprise.gui.coregui.client.BookmarkableView;
import org.rhq.enterprise.gui.coregui.client.ViewPath;
import org.rhq.enterprise.gui.coregui.client.components.table.TimestampCellFormatter;
import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup;
import org.rhq.enterprise.gui.coregui.client.util.Log;
+import org.rhq.enterprise.gui.coregui.client.util.StringUtility;
import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableDynamicForm;
import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableSectionStack;
import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableVLayout;
+import org.rhq.enterprise.gui.coregui.client.util.selenium.SeleniumUtility;
/**
* Shows details of a server.
@@ -91,16 +94,16 @@ public class ServerDetailView extends LocatableVLayout implements BookmarkableVi
public void onSuccess(final Server server) {
prepareDetailsSection(sectionStack, server);
prepareAgentSection(sectionStack, server);
-// GWTServiceLookup.getCloudService().getAgentsByServerName(server.getName(),
-// new AsyncCallback<List<Agent>>() {
-// public void onSuccess(List<Agent> agents) {
-// prepareAgentSection(sectionStack, server, agents);
-// };
-//
-// public void onFailure(Throwable caught) {
-// //TODO: CoreGUI.getErrorHandler().handleError(MSG.view_admin_plugins_loadFailure(), caught);
-// }
-// });
+ // GWTServiceLookup.getCloudService().getAgentsByServerName(server.getName(),
+ // new AsyncCallback<List<Agent>>() {
+ // public void onSuccess(List<Agent> agents) {
+ // prepareAgentSection(sectionStack, server, agents);
+ // };
+ //
+ // public void onFailure(Throwable caught) {
+ // //TODO: CoreGUI.getErrorHandler().handleError(MSG.view_admin_plugins_loadFailure(), caught);
+ // }
+ // });
}
public void onFailure(Throwable caught) {
@@ -150,7 +153,8 @@ public class ServerDetailView extends LocatableVLayout implements BookmarkableVi
private void prepareAgentSection(SectionStack stack, Server server) {
SectionStackSection section = new SectionStackSection(MSG.view_adminTopology_serverDetail_connectedAgents());
section.setExpanded(true);
- AgentTableView agentsTable = new AgentTableView(extendLocatorId(AgentTableView.VIEW_ID.getName()), null, serverId);
+ AgentTableView agentsTable = new AgentTableView(extendLocatorId(AgentTableView.VIEW_ID.getName()), null,
+ serverId);
section.setItems(agentsTable);
agentSection = section;
@@ -182,10 +186,17 @@ public class ServerDetailView extends LocatableVLayout implements BookmarkableVi
operationModeItem.setValueMap("NORMAL", "MAINTENANCE");
operationModeItem.setValue(server.getOperationMode());
- // TODO: make clickable link
+ // make clickable link for affinity group
StaticTextItem affinityGroupItem = new StaticTextItem(FIELD_AFFINITY_GROUP.propertyName(),
FIELD_AFFINITY_GROUP.title());
- affinityGroupItem.setValue(server.getAffinityGroup() == null ? "" : server.getAffinityGroup().getName());
+ String affinityGroupItemText = "";
+ AffinityGroup ag = server.getAffinityGroup();
+ if (ag != null && ag.getName() != null && !ag.getName().isEmpty()) {
+ String detailsUrl = "#" + AffinityGroupTableView.VIEW_PATH + "/" + ag.getId();
+ String formattedValue = StringUtility.escapeHtml(ag.getName());
+ affinityGroupItemText = SeleniumUtility.getLocatableHref(detailsUrl, formattedValue, null);
+ }
+ affinityGroupItem.setValue(affinityGroupItemText);
StaticTextItem installationDateItem = new StaticTextItem(FIELD_CTIME.propertyName(), FIELD_CTIME.title());
installationDateItem.setValue(TimestampCellFormatter.format(Long.valueOf(server.getCtime()),
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerTableView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerTableView.java
index 08a1c8f..da44c9c 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerTableView.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerTableView.java
@@ -18,7 +18,9 @@
*/
package org.rhq.enterprise.gui.coregui.client.admin.topology;
-import static org.rhq.enterprise.gui.coregui.client.admin.topology.FailoverListItemDatasourceField.FIELD_ORDINAL;
+import static org.rhq.enterprise.gui.coregui.client.admin.topology.AgentNodeDatasourceField.FIELD_AFFINITY_GROUP;
+import static org.rhq.enterprise.gui.coregui.client.admin.topology.AgentNodeDatasourceField.FIELD_AFFINITY_GROUP_ID;
+import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerDatasourceField.FIELD_ORDINAL;
import java.io.Serializable;
import java.util.ArrayList;
@@ -54,7 +56,8 @@ import org.rhq.enterprise.gui.coregui.client.util.selenium.SeleniumUtility;
* @author Jiri Kremser
*
*/
-public class ServerTableView extends TableSection<ServerDatasource<? extends Serializable, Criteria>> implements HasViewName {
+public class ServerTableView extends TableSection<AbstractServerNodeDatasource<? extends Serializable, Criteria>>
+ implements HasViewName {
public static final ViewName VIEW_ID = new ViewName("Servers(GWT)", MSG.view_adminTopology_servers() + "(GWT)",
IconEnum.SERVERS);
@@ -64,12 +67,24 @@ public class ServerTableView extends TableSection<ServerDatasource<? extends Ser
private final boolean showActions;
- public ServerTableView(String locatorId, String tableTitle, Integer agentId) {
+ private final boolean isAffinityGroupId;
+
+ public ServerTableView(String locatorId, String tableTitle, Integer id, boolean isAffinityGroupId) {
super(locatorId, tableTitle);
- this.showActions = agentId == null;
+ this.showActions = id == null && !isAffinityGroupId;
+ this.isAffinityGroupId = isAffinityGroupId;
setHeight100();
setWidth100();
- setDataSource(showActions ? new ServerWithAgentCountDatasource() : new FailoverListItemDatasource(agentId));
+ if (isAffinityGroupId) {
+ setDataSource(new ServerDatasource(id));
+ } else {
+ setDataSource(showActions ? new ServerWithAgentCountDatasource() : new FailoverListItemDatasource(id));
+ }
+
+ }
+
+ public ServerTableView(String locatorId, String tableTitle, Integer id) {
+ this(locatorId, tableTitle, id, false);
}
@Override
@@ -80,9 +95,12 @@ public class ServerTableView extends TableSection<ServerDatasource<? extends Ser
listGrid.setFields(fields.toArray(new ListGridField[fields.size()]));
if (showActions) {
listGrid.sort(FIELD_NAME, SortDirection.ASCENDING);
- showActions();
+ showCommonActions();
+ } else if (isAffinityGroupId) {
+ // displayed from AffinityGroupDetailView
+ showUpdateMembersAction();
} else {
- // sorting by order field
+ // sorting by order field (displayed from AgentDetailView)
listGrid.sort(FIELD_ORDINAL.propertyName(), SortDirection.ASCENDING);
}
for (ListGridField field : fields) {
@@ -100,8 +118,21 @@ public class ServerTableView extends TableSection<ServerDatasource<? extends Ser
}
});
+ } else if (field.getName() == FIELD_AFFINITY_GROUP.propertyName()) {
+ // adding the cell formatter for affinity group field (clickable link)
+ field.setCellFormatter(new CellFormatter() {
+ @Override
+ public String format(Object value, ListGridRecord record, int rowNum, int colNum) {
+ if (value == null || value.toString().isEmpty()) {
+ return "";
+ }
+ String detailsUrl = "#" + AffinityGroupTableView.VIEW_PATH + "/"
+ + record.getAttributeAsString(FIELD_AFFINITY_GROUP_ID.propertyName());
+ String formattedValue = StringUtility.escapeHtml(value.toString());
+ return SeleniumUtility.getLocatableHref(detailsUrl, formattedValue, null);
+ }
+ });
}
- // TODO: adding the cell formatter for affinity group (clickable link)
}
}
@@ -110,7 +141,7 @@ public class ServerTableView extends TableSection<ServerDatasource<? extends Ser
return new ServerDetailView(extendLocatorId("detailsView"), id);
}
- private void showActions() {
+ private void showCommonActions() {
addTableAction(extendLocatorId("setNormal"), MSG.view_adminTopology_server_setNormal(),
MSG.common_msg_areYouSure(), new AuthorizedTableAction(this, TableActionEnablement.ANY,
Permission.MANAGE_SETTINGS) {
@@ -228,6 +259,15 @@ public class ServerTableView extends TableSection<ServerDatasource<? extends Ser
}
});
}
+
+ private void showUpdateMembersAction() {
+ addTableAction(extendLocatorId("foo"), "olala", new AuthorizedTableAction(this, TableActionEnablement.ANY,
+ Permission.MANAGE_SETTINGS) {
+ public void executeAction(final ListGridRecord[] selections, Object actionValue) {
+ SC.say("fooparek");
+ }
+ });
+ }
private int[] getSelectedIds(ListGridRecord[] selections) {
if (selections == null) {
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerWithAgentCountDatasource.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerWithAgentCountDatasource.java
index a9f9613..5b9c314 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerWithAgentCountDatasource.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerWithAgentCountDatasource.java
@@ -18,17 +18,8 @@
*/
package org.rhq.enterprise.gui.coregui.client.admin.topology;
-import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerWithAgentCountDatasourceField.FIELD_ADDRESS;
-import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerWithAgentCountDatasourceField.FIELD_AFFINITY_GROUP;
-import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerWithAgentCountDatasourceField.FIELD_AGENT_COUNT;
-import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerWithAgentCountDatasourceField.FIELD_ID;
-import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerWithAgentCountDatasourceField.FIELD_MTIME;
-import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerWithAgentCountDatasourceField.FIELD_NAME;
-import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerWithAgentCountDatasourceField.FIELD_OPERATION_MODE;
-import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerWithAgentCountDatasourceField.FIELD_PORT;
-import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerWithAgentCountDatasourceField.FIELD_SECURE_PORT;
+import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerDatasourceField.FIELD_AGENT_COUNT;
-import java.util.ArrayList;
import java.util.List;
import com.google.gwt.user.client.rpc.AsyncCallback;
@@ -36,60 +27,36 @@ import com.smartgwt.client.data.DSRequest;
import com.smartgwt.client.data.DSResponse;
import com.smartgwt.client.data.DataSourceField;
import com.smartgwt.client.data.Record;
-import com.smartgwt.client.data.fields.DataSourceIntegerField;
import com.smartgwt.client.widgets.grid.ListGridField;
import com.smartgwt.client.widgets.grid.ListGridRecord;
import org.rhq.core.domain.cloud.composite.ServerWithAgentCountComposite;
import org.rhq.core.domain.criteria.Criteria;
import org.rhq.core.domain.util.PageControl;
-import org.rhq.core.domain.util.PageOrdering;
-import org.rhq.enterprise.gui.coregui.client.components.table.TimestampCellFormatter;
import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup;
/**
* @author Jirka Kremser
*
*/
-public class ServerWithAgentCountDatasource extends ServerDatasource<ServerWithAgentCountComposite, Criteria> {
+public class ServerWithAgentCountDatasource extends AbstractServerNodeDatasource<ServerWithAgentCountComposite, Criteria> {
+
+ private final ServerDatasource serverDatasource;
public ServerWithAgentCountDatasource() {
super();
+ serverDatasource = new ServerDatasource(null);
List<DataSourceField> fields = addDataSourceFields();
addFields(fields);
}
@Override
protected List<DataSourceField> addDataSourceFields() {
- List<DataSourceField> fields = super.addDataSourceFields();
- DataSourceField idField = new DataSourceIntegerField(FIELD_ID.propertyName(), FIELD_ID.title(), 50);
- idField.setPrimaryKey(true);
- idField.setHidden(true);
- fields.add(idField);
- return fields;
+ return serverDatasource.addDataSourceFields();
}
public List<ListGridField> getListGridFields() {
- List<ListGridField> fields = new ArrayList<ListGridField>();
-
- ListGridField idField = FIELD_ID.getListGridField();
- idField.setHidden(true);
- fields.add(idField);
-
- fields.add(FIELD_NAME.getListGridField("*"));
- fields.add(FIELD_OPERATION_MODE.getListGridField("90"));
- fields.add(FIELD_ADDRESS.getListGridField("110"));
- fields.add(FIELD_PORT.getListGridField("90"));
- fields.add(FIELD_SECURE_PORT.getListGridField("75"));
-
- ListGridField lastUpdateTimeField = FIELD_MTIME.getListGridField("120");
- TimestampCellFormatter.prepareDateField(lastUpdateTimeField);
- fields.add(lastUpdateTimeField);
-
- fields.add(FIELD_AFFINITY_GROUP.getListGridField("80"));
- fields.add(FIELD_AGENT_COUNT.getListGridField("75"));
-
- return fields;
+ return serverDatasource.getListGridFields();
}
@Override
@@ -120,21 +87,7 @@ public class ServerWithAgentCountDatasource extends ServerDatasource<ServerWithA
* @return the page control for passing to criteria and other queries
*/
protected PageControl getPageControl(DSRequest request) {
- // Initialize paging.
- PageControl pageControl = new PageControl(0, getDataPageSize());
-
- // Initialize sorting.
- String sortBy = request.getAttribute("sortBy");
- if (sortBy != null) {
- String[] sorts = sortBy.split(",");
- for (String sort : sorts) {
- PageOrdering ordering = (sort.startsWith("-")) ? PageOrdering.DESC : PageOrdering.ASC;
- String columnName = (ordering == PageOrdering.DESC) ? sort.substring(1) : sort;
- pageControl.addDefaultOrderingField(columnName, ordering);
- }
- }
-
- return pageControl;
+ return serverDatasource.getPageControl(request);
}
@Override
@@ -145,15 +98,10 @@ public class ServerWithAgentCountDatasource extends ServerDatasource<ServerWithA
@Override
public ListGridRecord copyValues(ServerWithAgentCountComposite from) {
ListGridRecord record = new ListGridRecord();
- record.setAttribute(FIELD_ID.propertyName(), from.getServer().getId());
- record.setAttribute(FIELD_NAME.propertyName(), from.getServer().getName());
- record.setAttribute(FIELD_OPERATION_MODE.propertyName(), from.getServer().getOperationMode());
- record.setAttribute(FIELD_ADDRESS.propertyName(), from.getServer().getAddress());
- record.setAttribute(FIELD_PORT.propertyName(), from.getServer().getPort());
- record.setAttribute(FIELD_SECURE_PORT.propertyName(), from.getServer().getSecurePort());
- record.setAttribute(FIELD_MTIME.propertyName(), from.getServer().getMtime());
- record.setAttribute(FIELD_AFFINITY_GROUP.propertyName(), from.getServer().getAffinityGroup() == null ? ""
- : from.getServer().getAffinityGroup().getName());
+ if (from == null || from.getServer() == null) {
+ return record;
+ }
+ record = serverDatasource.copyValues(from.getServer());
record.setAttribute(FIELD_AGENT_COUNT.propertyName(), from.getAgentCount());
return record;
}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerWithAgentCountDatasourceField.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerWithAgentCountDatasourceField.java
deleted file mode 100644
index f393288..0000000
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerWithAgentCountDatasourceField.java
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- * RHQ Management Platform
- * Copyright (C) 2005-2012 Red Hat, Inc.
- * All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation version 2 of the License.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-package org.rhq.enterprise.gui.coregui.client.admin.topology;
-
-import com.smartgwt.client.widgets.grid.ListGridField;
-
-import org.rhq.enterprise.gui.coregui.client.CoreGUI;
-
-/**
- * @author Jirka Kremser
- *
- */
-public enum ServerWithAgentCountDatasourceField {
-
- FIELD_ID("id", CoreGUI.getMessages().common_title_id()),
-
- FIELD_NAME("name", CoreGUI.getMessages().common_title_name()),
-
- FIELD_OPERATION_MODE("operationMode", CoreGUI.getMessages().view_adminTopology_server_mode()),
-
- FIELD_ADDRESS("address", CoreGUI.getMessages().view_adminTopology_server_endpointAddress()),
-
- FIELD_PORT("port", CoreGUI.getMessages().view_adminTopology_server_nonSecurePort()),
-
- FIELD_SECURE_PORT("securePort", CoreGUI.getMessages().view_adminTopology_server_securePort()),
-
- FIELD_CTIME("ctime", CoreGUI.getMessages().view_adminTopology_serverDetail_installationDate()),
-
- FIELD_MTIME("mtime", CoreGUI.getMessages().view_adminTopology_server_lastUpdateTime()),
-
- FIELD_AFFINITY_GROUP("affinityGroup", CoreGUI.getMessages().view_adminTopology_server_affinityGroup()),
-
- FIELD_AGENT_COUNT("agentCount", CoreGUI.getMessages().view_adminTopology_server_agentCount());
-
- /**
- * Corresponds to a property name of Server (e.g. operationMode).
- */
- private String propertyName;
-
- /**
- * The table header for the field or property (e.g. Mode).
- */
- private String title;
-
- private ServerWithAgentCountDatasourceField(String propertyName, String title) {
- this.propertyName = propertyName;
- this.title = title;
- }
-
- public String propertyName() {
- return propertyName;
- }
-
- public String title() {
- return title;
- }
-
- public ListGridField getListGridField() {
- return new ListGridField(propertyName, title);
- }
-
- public ListGridField getListGridField(String width) {
- ListGridField field = new ListGridField(propertyName, title);
- field.setWidth(width);
- return field;
- }
-}
\ No newline at end of file
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/CloudGWTService.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/CloudGWTService.java
index 7f08b95..8f79df4 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/CloudGWTService.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/CloudGWTService.java
@@ -76,4 +76,14 @@ public interface CloudGWTService extends RemoteService {
int deleteAffinityGroups(int[] affinityGroupIds) throws RuntimeException;
int createAffinityGroup(AffinityGroup affinityGroup) throws RuntimeException;
+
+ PageList<Server> getServerMembersByAffinityGroupId(int affinityGroupId, PageControl pageControl) throws RuntimeException;
+
+ PageList<Server> getServerNonMembersByAffinityGroupId(int affinityGroupId, PageControl pageControl) throws RuntimeException;
+
+ PageList<Agent> getAgentMembersByAffinityGroupId(int affinityGroupId, PageControl pageControl) throws RuntimeException;
+
+ PageList<Agent> getAgentNonMembersByAffinityGroupId(int affinityGroupId, PageControl pageControl) throws RuntimeException;
+
+ AffinityGroup getAffinityGroupById(int affinityGroupId) throws RuntimeException;
}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/CloudGWTServiceImpl.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/CloudGWTServiceImpl.java
index 44b2a44..8a2e806 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/CloudGWTServiceImpl.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/CloudGWTServiceImpl.java
@@ -200,4 +200,62 @@ public class CloudGWTServiceImpl extends AbstractGWTServiceImpl implements Cloud
}
}
+ @Override
+ public PageList<Server> getServerMembersByAffinityGroupId(int affinityGroupId, PageControl pageControl)
+ throws RuntimeException {
+ try {
+ return SerialUtility.prepare(
+ affinityGroupManager.getServerMembers(getSessionSubject(), affinityGroupId, pageControl),
+ "CloudGWTServiceImpl.getServerMembersByAffinityGroupId");
+ } catch (Throwable t) {
+ throw getExceptionToThrowToClient(t);
+ }
+ }
+
+ @Override
+ public PageList<Server> getServerNonMembersByAffinityGroupId(int affinityGroupId, PageControl pageControl)
+ throws RuntimeException {
+ try {
+ return SerialUtility.prepare(
+ affinityGroupManager.getServerNonMembers(getSessionSubject(), affinityGroupId, pageControl),
+ "CloudGWTServiceImpl.getServerNonMembersByAffinityGroupId");
+ } catch (Throwable t) {
+ throw getExceptionToThrowToClient(t);
+ }
+ }
+
+ @Override
+ public PageList<Agent> getAgentMembersByAffinityGroupId(int affinityGroupId, PageControl pageControl)
+ throws RuntimeException {
+ try {
+ return SerialUtility.prepare(
+ affinityGroupManager.getAgentMembers(getSessionSubject(), affinityGroupId, pageControl),
+ "CloudGWTServiceImpl.getAgentMembersByAffinityGroupId");
+ } catch (Throwable t) {
+ throw getExceptionToThrowToClient(t);
+ }
+ }
+
+ @Override
+ public PageList<Agent> getAgentNonMembersByAffinityGroupId(int affinityGroupId, PageControl pageControl)
+ throws RuntimeException {
+ try {
+ return SerialUtility.prepare(
+ affinityGroupManager.getAgentNonMembers(getSessionSubject(), affinityGroupId, pageControl),
+ "CloudGWTServiceImpl.getAgentNonMembersByAffinityGroupId");
+ } catch (Throwable t) {
+ throw getExceptionToThrowToClient(t);
+ }
+ }
+
+ @Override
+ public AffinityGroup getAffinityGroupById(int affinityGroupId) throws RuntimeException {
+ try {
+ return SerialUtility.prepare(affinityGroupManager.getById(getSessionSubject(), affinityGroupId),
+ "CloudGWTServiceImpl.getAffinityGroupById");
+ } catch (Throwable t) {
+ throw getExceptionToThrowToClient(t);
+ }
+ }
+
}
commit d53ba327f6a208601c86d0d7d233be48fba6e170
Author: Jirka Kremser <jkremser(a)redhat.com>
Date: Wed Dec 5 19:05:18 2012 +0100
Affinity Groups view has been added, creating and deleting the groups is working
diff --git a/modules/core/domain/src/main/java/org/rhq/core/domain/cloud/composite/AffinityGroupCountComposite.java b/modules/core/domain/src/main/java/org/rhq/core/domain/cloud/composite/AffinityGroupCountComposite.java
index b0d557d..2936cac 100644
--- a/modules/core/domain/src/main/java/org/rhq/core/domain/cloud/composite/AffinityGroupCountComposite.java
+++ b/modules/core/domain/src/main/java/org/rhq/core/domain/cloud/composite/AffinityGroupCountComposite.java
@@ -22,15 +22,23 @@
*/
package org.rhq.core.domain.cloud.composite;
+import java.io.Serializable;
+
import org.rhq.core.domain.cloud.AffinityGroup;
/**
* @author Joseph Marques
*/
-public class AffinityGroupCountComposite {
- private final AffinityGroup affinityGroup;
- private final int agentCount;
- private final int serverCount;
+public class AffinityGroupCountComposite implements Serializable {
+ private static final long serialVersionUID = 282382551474550639L;
+
+ private AffinityGroup affinityGroup;
+ private int agentCount;
+ private int serverCount;
+
+ public AffinityGroupCountComposite() {
+ // GWT needs it
+ }
public AffinityGroupCountComposite(AffinityGroup affinityGroup, Number agentCount, Number serverCount) {
super();
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/AdministrationView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/AdministrationView.java
index 5c18d1f..e749f61 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/AdministrationView.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/AdministrationView.java
@@ -19,6 +19,7 @@
package org.rhq.enterprise.gui.coregui.client.admin;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.List;
import com.smartgwt.client.widgets.Canvas;
@@ -34,6 +35,7 @@ import org.rhq.enterprise.gui.coregui.client.admin.roles.RolesView;
import org.rhq.enterprise.gui.coregui.client.admin.templates.AlertDefinitionTemplateTypeView;
import org.rhq.enterprise.gui.coregui.client.admin.templates.DriftDefinitionTemplateTypeView;
import org.rhq.enterprise.gui.coregui.client.admin.templates.MetricTemplateTypeView;
+import org.rhq.enterprise.gui.coregui.client.admin.topology.AffinityGroupTableView;
import org.rhq.enterprise.gui.coregui.client.admin.topology.AgentTableView;
import org.rhq.enterprise.gui.coregui.client.admin.topology.PartitionEventTableView;
import org.rhq.enterprise.gui.coregui.client.admin.topology.ServerTableView;
@@ -64,8 +66,10 @@ public class AdministrationView extends AbstractSectionedLeftNavigationView {
public static final ViewName SECTION_CONTENT_VIEW_ID = new ViewName("Content", MSG.view_admin_content());
// TODO these iframe page view ids should go away in favor of the gwt view page view_id, when available
- private static final ViewName PAGE_SERVERS_VIEW_ID = new ViewName("Servers", MSG.view_adminTopology_servers(), IconEnum.SERVERS);
- private static final ViewName PAGE_AGENTS_VIEW_ID = new ViewName("Agents", MSG.view_adminTopology_agents(),IconEnum.AGENT);
+ private static final ViewName PAGE_SERVERS_VIEW_ID = new ViewName("Servers", MSG.view_adminTopology_servers(),
+ IconEnum.SERVERS);
+ private static final ViewName PAGE_AGENTS_VIEW_ID = new ViewName("Agents", MSG.view_adminTopology_agents(),
+ IconEnum.AGENT);
private static final ViewName PAGE_AFFINITY_GROUPS_VIEW_ID = new ViewName("AffinityGroups",
MSG.view_adminTopology_affinityGroups(), IconEnum.ALL_GROUPS);
private static final ViewName PAGE_PARTITION_EVENTS_VIEW_ID = new ViewName("PartitionEvents",
@@ -74,7 +78,8 @@ public class AdministrationView extends AbstractSectionedLeftNavigationView {
// TODO these iframe page view ids should go away in favor of the gwt view page view_id, when available
private static final ViewName PAGE_CONTENT_SOURCES_VIEW_ID = new ViewName("ContentSources",
MSG.view_adminContent_contentSources(), IconEnum.CONTENT);
- private static final ViewName PAGE_REPOS_VIEW_ID = new ViewName("Repositories", MSG.common_title_repositories(), IconEnum.CONTENT);
+ private static final ViewName PAGE_REPOS_VIEW_ID = new ViewName("Repositories", MSG.common_title_repositories(),
+ IconEnum.CONTENT);
public AdministrationView() {
// This is a top level view, so our locator id can simply be our view id.
@@ -105,7 +110,7 @@ public class AdministrationView extends AbstractSectionedLeftNavigationView {
vLayout.setWidth100();
// TODO: Admin icon.
- TitleBar titleBar = new TitleBar (this, MSG.view_admin_administration(), IconEnum.ADMIN.getIcon24x24Path());
+ TitleBar titleBar = new TitleBar(this, MSG.view_admin_administration(), IconEnum.ADMIN.getIcon24x24Path());
vLayout.addMember(titleBar);
ProductInfo productInfo = CoreGUI.get().getProductInfo();
@@ -118,17 +123,17 @@ public class AdministrationView extends AbstractSectionedLeftNavigationView {
}
private NavigationSection buildSecuritySection() {
- NavigationItem usersItem = new NavigationItem(UsersView.VIEW_ID, new ViewFactory() {
+ NavigationItem usersItem = new NavigationItem(UsersView.VIEW_ID, new ViewFactory() {
public Canvas createView() {
- return new UsersView(extendLocatorId("Users"),
- getGlobalPermissions().contains(Permission.MANAGE_SECURITY));
+ return new UsersView(extendLocatorId("Users"), getGlobalPermissions().contains(
+ Permission.MANAGE_SECURITY));
}
});
NavigationItem rolesItem = new NavigationItem(RolesView.VIEW_ID, new ViewFactory() {
public Canvas createView() {
- return new RolesView(extendLocatorId("Roles"),
- getGlobalPermissions().contains(Permission.MANAGE_SECURITY));
+ return new RolesView(extendLocatorId("Roles"), getGlobalPermissions().contains(
+ Permission.MANAGE_SECURITY));
}
});
@@ -179,46 +184,51 @@ public class AdministrationView extends AbstractSectionedLeftNavigationView {
NavigationItem serversItemGwt = new NavigationItem(ServerTableView.VIEW_ID, new ViewFactory() {
public Canvas createView() {
return new ServerTableView(extendLocatorId(ServerTableView.VIEW_ID.getName()),
- MSG.view_adminTopology_servers() + " (GWT)", null);
+ ServerTableView.VIEW_ID.getTitle(), null);
}
}, getGlobalPermissions().contains(Permission.MANAGE_INVENTORY));
NavigationItem agentsItemGwt = new NavigationItem(AgentTableView.VIEW_ID, new ViewFactory() {
public Canvas createView() {
return new AgentTableView(extendLocatorId(AgentTableView.VIEW_ID.getName()),
- MSG.view_adminTopology_agents() + " (GWT)", null);
+ AgentTableView.VIEW_ID.getTitle(), null);
+ }
+ }, getGlobalPermissions().contains(Permission.MANAGE_INVENTORY));
+
+ NavigationItem affinityGroupsItemGwt = new NavigationItem(AffinityGroupTableView.VIEW_ID, new ViewFactory() {
+ public Canvas createView() {
+ return new AffinityGroupTableView(extendLocatorId(AffinityGroupTableView.VIEW_ID.getName()),
+ AffinityGroupTableView.VIEW_ID.getTitle());
}
}, getGlobalPermissions().contains(Permission.MANAGE_INVENTORY));
NavigationItem partitionEventsGwt = new NavigationItem(PartitionEventTableView.VIEW_ID, new ViewFactory() {
public Canvas createView() {
return new PartitionEventTableView(extendLocatorId(PartitionEventTableView.VIEW_ID.getName()),
- MSG.view_adminTopology_partitionEvents() + " (GWT)");
+ PartitionEventTableView.VIEW_ID.getTitle());
}
}, getGlobalPermissions().contains(Permission.MANAGE_INVENTORY));
- NavigationSection topologyRegion = null;
+ // Arrays.asList returns a list with a fixed size, therefore there is the wrapping ArrayList
+ List<NavigationItem> navigationItems = new ArrayList<NavigationItem>(Arrays.asList(serversItem, agentsItem,
+ affinityGroupsItem, partitionEventsItem, serversItemGwt, agentsItemGwt, affinityGroupsItemGwt, partitionEventsGwt));
if (isRHQ) {
- topologyRegion = new NavigationSection(SECTION_TOPOLOGY_VIEW_ID, serversItem, agentsItem,
- affinityGroupsItem, partitionEventsItem, serversItemGwt, agentsItemGwt, partitionEventsGwt, remoteAgentInstallItem);
- } else {
- topologyRegion = new NavigationSection(SECTION_TOPOLOGY_VIEW_ID, serversItem, partitionEventsGwt, agentsItem,
- affinityGroupsItem, partitionEventsItem, serversItemGwt, agentsItemGwt);
+ navigationItems.add(remoteAgentInstallItem);
}
+ NavigationSection topologyRegion = new NavigationSection(SECTION_TOPOLOGY_VIEW_ID, navigationItems.toArray(new NavigationItem[]{}));
return topologyRegion;
}
private NavigationSection buildConfigurationSection() {
- NavigationItem systemSettingsItem = new NavigationItem(SystemSettingsView.VIEW_ID,
- new ViewFactory() {
- public Canvas createView() {
- return new SystemSettingsView(extendLocatorId(SystemSettingsView.VIEW_ID.getName()));
- }
- }, getGlobalPermissions().contains(Permission.MANAGE_SETTINGS));
+ NavigationItem systemSettingsItem = new NavigationItem(SystemSettingsView.VIEW_ID, new ViewFactory() {
+ public Canvas createView() {
+ return new SystemSettingsView(extendLocatorId(SystemSettingsView.VIEW_ID.getName()));
+ }
+ }, getGlobalPermissions().contains(Permission.MANAGE_SETTINGS));
systemSettingsItem.setRefreshRequired(true); // refresh so it always reloads the latest settings
NavigationItem alertTemplatesItem = new NavigationItem(AlertDefinitionTemplateTypeView.VIEW_ID,
- new ViewFactory() {
+ new ViewFactory() {
public Canvas createView() {
return new AlertDefinitionTemplateTypeView(
extendLocatorId(AlertDefinitionTemplateTypeView.VIEW_ID.getName()));
@@ -227,7 +237,7 @@ public class AdministrationView extends AbstractSectionedLeftNavigationView {
alertTemplatesItem.setRefreshRequired(true); // we always need a new page
NavigationItem driftTemplatesItem = new NavigationItem(DriftDefinitionTemplateTypeView.VIEW_ID,
- new ViewFactory() {
+ new ViewFactory() {
public Canvas createView() {
return new DriftDefinitionTemplateTypeView(
extendLocatorId(DriftDefinitionTemplateTypeView.VIEW_ID.getName()));
@@ -235,55 +245,49 @@ public class AdministrationView extends AbstractSectionedLeftNavigationView {
});
driftTemplatesItem.setRefreshRequired(true); // we always need a new page
- NavigationItem metricTemplatesItem = new NavigationItem(MetricTemplateTypeView.VIEW_ID,
- new ViewFactory() {
- public Canvas createView() {
- return new MetricTemplateTypeView(extendLocatorId(MetricTemplateTypeView.VIEW_ID.getName()));
- }
- });
+ NavigationItem metricTemplatesItem = new NavigationItem(MetricTemplateTypeView.VIEW_ID, new ViewFactory() {
+ public Canvas createView() {
+ return new MetricTemplateTypeView(extendLocatorId(MetricTemplateTypeView.VIEW_ID.getName()));
+ }
+ });
metricTemplatesItem.setRefreshRequired(true); // we always need a new page
- NavigationItem downloadsItem = new NavigationItem(DownloadsView.VIEW_ID,
- new ViewFactory() {
- public Canvas createView() {
- return new DownloadsView(extendLocatorId(DownloadsView.VIEW_ID.getName()));
- }
- });
+ NavigationItem downloadsItem = new NavigationItem(DownloadsView.VIEW_ID, new ViewFactory() {
+ public Canvas createView() {
+ return new DownloadsView(extendLocatorId(DownloadsView.VIEW_ID.getName()));
+ }
+ });
- NavigationItem agentPluginsItem = new NavigationItem(AgentPluginTableView.VIEW_ID,
- new ViewFactory() {
- public Canvas createView() {
- return new AgentPluginTableView(extendLocatorId(AgentPluginTableView.VIEW_ID.getName()));
- }
- }, getGlobalPermissions().contains(Permission.MANAGE_SETTINGS));
+ NavigationItem agentPluginsItem = new NavigationItem(AgentPluginTableView.VIEW_ID, new ViewFactory() {
+ public Canvas createView() {
+ return new AgentPluginTableView(extendLocatorId(AgentPluginTableView.VIEW_ID.getName()));
+ }
+ }, getGlobalPermissions().contains(Permission.MANAGE_SETTINGS));
- NavigationItem serverPluginsItem = new NavigationItem(ServerPluginTableView.VIEW_ID,
- new ViewFactory() {
- public Canvas createView() {
- return new ServerPluginTableView(extendLocatorId(ServerPluginTableView.VIEW_ID.getName()));
- }
- }, getGlobalPermissions().contains(Permission.MANAGE_SETTINGS));
+ NavigationItem serverPluginsItem = new NavigationItem(ServerPluginTableView.VIEW_ID, new ViewFactory() {
+ public Canvas createView() {
+ return new ServerPluginTableView(extendLocatorId(ServerPluginTableView.VIEW_ID.getName()));
+ }
+ }, getGlobalPermissions().contains(Permission.MANAGE_SETTINGS));
return new NavigationSection(SECTION_CONFIGURATION_VIEW_ID, systemSettingsItem, alertTemplatesItem,
driftTemplatesItem, metricTemplatesItem, downloadsItem, agentPluginsItem, serverPluginsItem);
}
private NavigationSection buildContentSection() {
- NavigationItem contentSourcesItem = new NavigationItem(PAGE_CONTENT_SOURCES_VIEW_ID,
- new ViewFactory() {
- public Canvas createView() {
- return new FullHTMLPane(extendLocatorId(PAGE_CONTENT_SOURCES_VIEW_ID.getName()),
- "/rhq/content/listContentProviders-plain.xhtml");
- }
- }, getGlobalPermissions().contains(Permission.MANAGE_REPOSITORIES));
+ NavigationItem contentSourcesItem = new NavigationItem(PAGE_CONTENT_SOURCES_VIEW_ID, new ViewFactory() {
+ public Canvas createView() {
+ return new FullHTMLPane(extendLocatorId(PAGE_CONTENT_SOURCES_VIEW_ID.getName()),
+ "/rhq/content/listContentProviders-plain.xhtml");
+ }
+ }, getGlobalPermissions().contains(Permission.MANAGE_REPOSITORIES));
- NavigationItem reposItem = new NavigationItem(PAGE_REPOS_VIEW_ID,
- new ViewFactory() {
- public Canvas createView() {
- return new FullHTMLPane(extendLocatorId(PAGE_REPOS_VIEW_ID.getName()),
- "/rhq/content/listRepos-plain.xhtml");
- }
- });
+ NavigationItem reposItem = new NavigationItem(PAGE_REPOS_VIEW_ID, new ViewFactory() {
+ public Canvas createView() {
+ return new FullHTMLPane(extendLocatorId(PAGE_REPOS_VIEW_ID.getName()),
+ "/rhq/content/listRepos-plain.xhtml");
+ }
+ });
return new NavigationSection(SECTION_CONTENT_VIEW_ID, contentSourcesItem, reposItem);
}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupTableView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupTableView.java
new file mode 100644
index 0000000..d14fe57
--- /dev/null
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupTableView.java
@@ -0,0 +1,266 @@
+/*
+ * RHQ Management Platform
+ * Copyright (C) 2005-2012 Red Hat, Inc.
+ * All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation version 2 of the License.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+package org.rhq.enterprise.gui.coregui.client.admin.topology;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import com.google.gwt.user.client.rpc.AsyncCallback;
+import com.smartgwt.client.types.Alignment;
+import com.smartgwt.client.types.LayoutPolicy;
+import com.smartgwt.client.types.Overflow;
+import com.smartgwt.client.util.BooleanCallback;
+import com.smartgwt.client.util.SC;
+import com.smartgwt.client.widgets.Canvas;
+import com.smartgwt.client.widgets.IButton;
+import com.smartgwt.client.widgets.Window;
+import com.smartgwt.client.widgets.events.ClickEvent;
+import com.smartgwt.client.widgets.events.ClickHandler;
+import com.smartgwt.client.widgets.form.DynamicForm;
+import com.smartgwt.client.widgets.form.fields.TextItem;
+import com.smartgwt.client.widgets.form.validator.LengthRangeValidator;
+import com.smartgwt.client.widgets.grid.ListGrid;
+import com.smartgwt.client.widgets.grid.ListGridField;
+import com.smartgwt.client.widgets.grid.ListGridRecord;
+import com.smartgwt.client.widgets.layout.HLayout;
+import com.smartgwt.client.widgets.layout.VLayout;
+
+import org.rhq.core.domain.authz.Permission;
+import org.rhq.core.domain.cloud.AffinityGroup;
+import org.rhq.enterprise.gui.coregui.client.CoreGUI;
+import org.rhq.enterprise.gui.coregui.client.IconEnum;
+import org.rhq.enterprise.gui.coregui.client.admin.AdministrationView;
+import org.rhq.enterprise.gui.coregui.client.components.table.AuthorizedTableAction;
+import org.rhq.enterprise.gui.coregui.client.components.table.TableActionEnablement;
+import org.rhq.enterprise.gui.coregui.client.components.table.TableSection;
+import org.rhq.enterprise.gui.coregui.client.components.view.HasViewName;
+import org.rhq.enterprise.gui.coregui.client.components.view.ViewName;
+import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup;
+import org.rhq.enterprise.gui.coregui.client.util.message.Message;
+import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableIButton;
+
+/**
+ * @author Jiri Kremser
+ *
+ */
+public class AffinityGroupTableView extends TableSection<AffinityGroupWithCountsDatasource> implements HasViewName {
+
+ public static final ViewName VIEW_ID = new ViewName("AffinityGroups(GWT)", MSG.view_adminTopology_affinityGroups()
+ + "(GWT)", IconEnum.ALL_GROUPS);
+
+ public static final String VIEW_PATH = AdministrationView.VIEW_ID + "/"
+ + AdministrationView.SECTION_TOPOLOGY_VIEW_ID + "/" + VIEW_ID;
+
+ public AffinityGroupTableView(String locatorId, String tableTitle) {
+ super(locatorId, tableTitle);
+ setHeight100();
+ setWidth100();
+ setDataSource(new AffinityGroupWithCountsDatasource());
+ }
+
+ @Override
+ protected void configureTable() {
+ List<ListGridField> fields = getDataSource().getListGridFields();
+ ListGrid listGrid = getListGrid();
+ listGrid.setFields(fields.toArray(new ListGridField[fields.size()]));
+ showActions();
+ super.configureTable();
+
+ // for (ListGridField field : fields) {
+ // // adding the cell formatter for name field (clickable link)
+ // if (field.getName() == FIELD_NAME) {
+ // field.setCellFormatter(new CellFormatter() {
+ // @Override
+ // public String format(Object value, ListGridRecord record, int rowNum, int colNum) {
+ // if (value == null) {
+ // return "";
+ // }
+ // String detailsUrl = "#" + VIEW_PATH + "/" + getId(record);
+ // String formattedValue = StringUtility.escapeHtml(value.toString());
+ // return SeleniumUtility.getLocatableHref(detailsUrl, formattedValue, null);
+ //
+ // }
+ // });
+ // }
+ // // TODO: adding the cell formatter for affinity group (clickable link)
+ // }
+ }
+
+ @Override
+ public Canvas getDetailsView(Integer id) {
+ return new ServerDetailView(extendLocatorId("detailsView"), id);
+ }
+
+ private void showActions() {
+ addTableAction(extendLocatorId("createNew"), MSG.view_adminTopology_affinityGroups_createNew(),
+ new AuthorizedTableAction(this, TableActionEnablement.ALWAYS, Permission.MANAGE_SETTINGS) {
+ public void executeAction(final ListGridRecord[] selections, Object actionValue) {
+ showCreateAffinityGroupWindow();
+ }
+ });
+
+ addTableAction(extendLocatorId("removeSelected"), MSG.view_adminTopology_server_removeSelected(),
+ MSG.common_msg_areYouSure(), new AuthorizedTableAction(this, TableActionEnablement.ANY,
+ Permission.MANAGE_SETTINGS) {
+ public void executeAction(final ListGridRecord[] selections, Object actionValue) {
+ List<String> selectedNames = getSelectedNames(selections);
+ String message = "Really? Delete? For all I've done for you? " + selectedNames;
+ SC.ask(message, new BooleanCallback() {
+ public void execute(Boolean confirmed) {
+ if (confirmed) {
+ int[] selectedIds = getSelectedIds(selections);
+ SC.say("setting servers to maintenance mode, ids: " + selectedIds);
+ GWTServiceLookup.getCloudService().deleteAffinityGroups(selectedIds,
+ new AsyncCallback<Integer>() {
+ public void onSuccess(Integer count) {
+ // TODO: msg with count
+ Message msg = new Message(MSG
+ .view_admin_plugins_disabledServerPlugins("sdf"), Message.Severity.Info);
+ CoreGUI.getMessageCenter().notify(msg);
+ refresh();
+ }
+
+ public void onFailure(Throwable caught) {
+ // TODO: msg
+ CoreGUI.getErrorHandler().handleError(
+ MSG.view_admin_plugins_disabledServerPluginsFailure() + " "
+ + caught.getMessage(), caught);
+ refreshTableInfo();
+ }
+
+ });
+ } else {
+ refreshTableInfo();
+ }
+ }
+ });
+ }
+ });
+ }
+
+ private int[] getSelectedIds(ListGridRecord[] selections) {
+ if (selections == null) {
+ return new int[0];
+ }
+ int[] ids = new int[selections.length];
+ int i = 0;
+ for (ListGridRecord selection : selections) {
+ ids[i++] = selection.getAttributeAsInt(FIELD_ID);
+ }
+ return ids;
+ }
+
+ private List<String> getSelectedNames(ListGridRecord[] selections) {
+ if (selections == null) {
+ return new ArrayList<String>(0);
+ }
+ List<String> ids = new ArrayList<String>(selections.length);
+ for (ListGridRecord selection : selections) {
+ ids.add(selection.getAttributeAsString(FIELD_NAME));
+ }
+ return ids;
+ }
+
+ private void showCreateAffinityGroupWindow() {
+ final Window modalWindow = new Window();
+ modalWindow.setTitle(MSG.view_adminTopology_affinityGroups() + ": "
+ + MSG.view_adminTopology_affinityGroups_createNew());
+ modalWindow.setOverflow(Overflow.VISIBLE);
+ modalWindow.setMinWidth(400);
+ modalWindow.setMinHeight(400);
+ modalWindow.setAutoSize(true);
+ modalWindow.setAutoCenter(true);
+ modalWindow.setCanDragResize(true);
+ modalWindow.setCanDragReposition(true);
+
+ VLayout layout = new VLayout();
+ layout.setWidth100();
+ layout.setHeight100();
+ layout.setPadding(15);
+ layout.setLayoutMargin(20);
+ layout.setVPolicy(LayoutPolicy.FILL);
+
+ final DynamicForm form = new DynamicForm();
+ form.setMargin(10);
+ form.setWidth100();
+ form.setWrapItemTitles(false);
+ form.setNumCols(2);
+ final TextItem name = new TextItem(FIELD_NAME, MSG.common_title_name());
+ name.setRequired(true);
+ LengthRangeValidator nameLengthValidator = new LengthRangeValidator();
+ nameLengthValidator.setMin(3);
+ nameLengthValidator.setMax(100);
+ name.setValidators(nameLengthValidator);
+ form.setFields(name);
+ layout.addMember(form);
+
+ VLayout spacer = new VLayout();
+ spacer.setHeight(10);
+ layout.addMember(spacer);
+
+ IButton cancel = new LocatableIButton(this.extendLocatorId("Cancel"), MSG.common_button_cancel());
+ cancel.addClickHandler(new ClickHandler() {
+ public void onClick(ClickEvent clickEvent) {
+ modalWindow.destroy();
+ }
+ });
+ IButton save = new LocatableIButton(this.extendLocatorId("Create"),
+ MSG.view_adminTopology_affinityGroups_createNew());
+ save.addClickHandler(new ClickHandler() {
+ public void onClick(ClickEvent clickEvent) {
+ if (form.validate()) {
+ String name = form.getValueAsString(FIELD_NAME);
+ AffinityGroup affinityGroup = new AffinityGroup(name);
+ GWTServiceLookup.getCloudService().createAffinityGroup(affinityGroup, new AsyncCallback<Integer>() {
+ public void onSuccess(Integer result) {
+ Map<String, String> errors = new HashMap<String, String>();
+ errors.put(FIELD_NAME, result + "");
+ form.setErrors(errors, true);
+ // todo: hide dialog and open the detail window
+ }
+
+ public void onFailure(Throwable caught) {
+ Map<String, String> errors = new HashMap<String, String>();
+ errors.put(FIELD_NAME, caught.getMessage());
+ form.setErrors(errors, true);
+ }
+ });
+ }
+ }
+ });
+
+ HLayout buttons = new HLayout(10);
+ buttons.setLayoutAlign(Alignment.CENTER);
+ buttons.addMember(cancel);
+ buttons.addMember(save);
+ layout.addMember(buttons);
+
+ modalWindow.addItem(layout);
+ modalWindow.show();
+
+ }
+
+ @Override
+ public ViewName getViewName() {
+ return VIEW_ID;
+ }
+
+}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupWithCountsDatasource.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupWithCountsDatasource.java
new file mode 100644
index 0000000..aa05e06
--- /dev/null
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AffinityGroupWithCountsDatasource.java
@@ -0,0 +1,187 @@
+/*
+ * RHQ Management Platform
+ * Copyright (C) 2005-2012 Red Hat, Inc.
+ * All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation version 2 of the License.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+package org.rhq.enterprise.gui.coregui.client.admin.topology;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import com.google.gwt.user.client.rpc.AsyncCallback;
+import com.smartgwt.client.data.DSRequest;
+import com.smartgwt.client.data.DSResponse;
+import com.smartgwt.client.data.DataSourceField;
+import com.smartgwt.client.data.Record;
+import com.smartgwt.client.data.fields.DataSourceIntegerField;
+import com.smartgwt.client.widgets.grid.ListGridField;
+import com.smartgwt.client.widgets.grid.ListGridRecord;
+
+import org.rhq.core.domain.cloud.composite.AffinityGroupCountComposite;
+import org.rhq.core.domain.criteria.Criteria;
+import org.rhq.core.domain.util.PageControl;
+import org.rhq.core.domain.util.PageList;
+import org.rhq.core.domain.util.PageOrdering;
+import org.rhq.enterprise.gui.coregui.client.CoreGUI;
+import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup;
+import org.rhq.enterprise.gui.coregui.client.util.RPCDataSource;
+
+/**
+ * @author Jirka Kremser
+ *
+ */
+public class AffinityGroupWithCountsDatasource extends RPCDataSource<AffinityGroupCountComposite, Criteria> {
+
+ public enum Fields {
+
+ FIELD_ID("id", CoreGUI.getMessages().common_title_id()),
+
+ FIELD_NAME("name", CoreGUI.getMessages().common_title_name()),
+
+ FIELD_AGENT_COUNT("serverCount", CoreGUI.getMessages().view_adminTopology_affinityGroups_agentCount()),
+
+ FIELD_SERVER_COUNT("serverCount", CoreGUI.getMessages().view_adminTopology_affinityGroups_serverCount());
+
+ /**
+ * Corresponds to a property name of Server (e.g. operationMode).
+ */
+ private String propertyName;
+
+ /**
+ * The table header for the field or property (e.g. Mode).
+ */
+ private String title;
+
+ private Fields(String propertyName, String title) {
+ this.propertyName = propertyName;
+ this.title = title;
+ }
+
+ public String propertyName() {
+ return propertyName;
+ }
+
+ public String title() {
+ return title;
+ }
+
+ public ListGridField getListGridField() {
+ return new ListGridField(propertyName, title);
+ }
+
+ public ListGridField getListGridField(String width) {
+ ListGridField field = new ListGridField(propertyName, title);
+ field.setWidth(width);
+ return field;
+ }
+ }
+
+ public AffinityGroupWithCountsDatasource() {
+ super();
+ List<DataSourceField> fields = addDataSourceFields();
+ addFields(fields);
+ }
+
+ @Override
+ protected List<DataSourceField> addDataSourceFields() {
+ List<DataSourceField> fields = super.addDataSourceFields();
+ DataSourceField idField = new DataSourceIntegerField(Fields.FIELD_ID.propertyName(), Fields.FIELD_ID.title(),
+ 50);
+ idField.setPrimaryKey(true);
+ idField.setHidden(true);
+ fields.add(idField);
+ return fields;
+ }
+
+ public List<ListGridField> getListGridFields() {
+ List<ListGridField> fields = new ArrayList<ListGridField>();
+
+ ListGridField idField = Fields.FIELD_ID.getListGridField();
+ idField.setHidden(true);
+ fields.add(idField);
+ fields.add(Fields.FIELD_NAME.getListGridField("*"));
+ fields.add(Fields.FIELD_AGENT_COUNT.getListGridField("200"));
+ fields.add(Fields.FIELD_SERVER_COUNT.getListGridField("200"));
+
+ return fields;
+ }
+
+ @Override
+ protected void executeFetch(final DSRequest request, final DSResponse response, Criteria criteria) {
+ final PageControl pc = getPageControl(request);
+
+ GWTServiceLookup.getCloudService().getAffinityGroupCountComposites(pc,
+ new AsyncCallback<PageList<AffinityGroupCountComposite>>() {
+ public void onSuccess(PageList<AffinityGroupCountComposite> result) {
+ response.setData(buildRecords(result));
+ response.setTotalRows(result.size());
+ processResponse(request.getRequestId(), response);
+ }
+
+ public void onFailure(Throwable caught) {
+ //todo: CoreGUI.getErrorHandler().handleError(MSG.view_admin_plugins_loadFailure(), t);
+ response.setStatus(DSResponse.STATUS_FAILURE);
+ processResponse(request.getRequestId(), response);
+ }
+ });
+ }
+
+ /**
+ * Returns a prepopulated PageControl based on the provided DSRequest. This will set sort fields,
+ * pagination, but *not* filter fields.
+ *
+ * @param request the request to turn into a page control
+ * @return the page control for passing to criteria and other queries
+ */
+ protected PageControl getPageControl(DSRequest request) {
+ // Initialize paging.
+ PageControl pageControl = new PageControl(0, getDataPageSize());
+
+ // Initialize sorting.
+ String sortBy = request.getAttribute("sortBy");
+ if (sortBy != null) {
+ String[] sorts = sortBy.split(",");
+ for (String sort : sorts) {
+ PageOrdering ordering = (sort.startsWith("-")) ? PageOrdering.DESC : PageOrdering.ASC;
+ String columnName = (ordering == PageOrdering.DESC) ? sort.substring(1) : sort;
+ pageControl.addDefaultOrderingField(columnName, ordering);
+ }
+ }
+
+ return pageControl;
+ }
+
+ @Override
+ public AffinityGroupCountComposite copyValues(Record from) {
+ throw new UnsupportedOperationException("AffinityGroupWithCountsDatasource.copyValues(Record from)");
+ }
+
+ @Override
+ public ListGridRecord copyValues(AffinityGroupCountComposite from) {
+ ListGridRecord record = new ListGridRecord();
+ record.setAttribute(Fields.FIELD_ID.propertyName(), from.getAffinityGroup().getId());
+ record.setAttribute(Fields.FIELD_NAME.propertyName(), from.getAffinityGroup().getName());
+ record.setAttribute(Fields.FIELD_AGENT_COUNT.propertyName(), from.getAgentCount());
+ record.setAttribute(Fields.FIELD_SERVER_COUNT.propertyName(), from.getServerCount());
+ return record;
+ }
+
+ @Override
+ protected Criteria getFetchCriteria(DSRequest request) {
+ // we don't use criteria for this datasource, just return null
+ return null;
+ }
+}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentTableView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentTableView.java
index f2ef76e..fe06e65 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentTableView.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentTableView.java
@@ -41,10 +41,10 @@ import org.rhq.enterprise.gui.coregui.client.util.selenium.SeleniumUtility;
/**
* @author Jiri Kremser
*/
-public class AgentTableView extends TableSection<AffinityGroupWithCountsDatasource> implements HasViewName {
+public class AgentTableView extends TableSection<AgentNodeDatasource> implements HasViewName {
public static final ViewName VIEW_ID = new ViewName("Agents(GWT)", MSG.view_adminTopology_agents() + "(GWT)",
- IconEnum.SERVERS);
+ IconEnum.AGENT);
public static final String VIEW_PATH = AdministrationView.VIEW_ID + "/"
+ AdministrationView.SECTION_TOPOLOGY_VIEW_ID + "/" + VIEW_ID;
@@ -53,7 +53,7 @@ public class AgentTableView extends TableSection<AffinityGroupWithCountsDatasour
super(locatorId, tableTitle);
setHeight100();
setWidth100();
- setDataSource(new AffinityGroupWithCountsDatasource(serverId));
+ setDataSource(new AgentNodeDatasource(serverId));
}
@Override
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventDatasource.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventDatasource.java
index 67a8ab9..be374b6 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventDatasource.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventDatasource.java
@@ -86,7 +86,7 @@ public class PartitionEventDatasource extends RPCDataSource<PartitionEvent, Part
TimestampCellFormatter.prepareDateField(executionTimeField);
fields.add(executionTimeField);
fields.add(FIELD_EVENT_TYPE.getListGridField("190"));
- fields.add(FIELD_EVENT_DETAIL.getListGridField("220"));
+ fields.add(FIELD_EVENT_DETAIL.getListGridField("*"));
fields.add(FIELD_SUBJECT_NAME.getListGridField("90"));
fields.add(FIELD_EXECUTION_STATUS.getListGridField("90"));
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/CloudGWTService.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/CloudGWTService.java
index f42ce80..7f08b95 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/CloudGWTService.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/CloudGWTService.java
@@ -26,6 +26,7 @@ import java.util.List;
import com.google.gwt.user.client.rpc.RemoteService;
+import org.rhq.core.domain.cloud.AffinityGroup;
import org.rhq.core.domain.cloud.FailoverListDetails;
import org.rhq.core.domain.cloud.PartitionEvent;
import org.rhq.core.domain.cloud.PartitionEventDetails;
@@ -70,5 +71,9 @@ public interface CloudGWTService extends RemoteService {
PageList<PartitionEventDetails> getPartitionEventDetails(int partitionEventId,
PageControl pageControl) throws RuntimeException;
- PageList<AffinityGroupCountComposite> getComposites(PageControl pageControl) throws RuntimeException;
+ PageList<AffinityGroupCountComposite> getAffinityGroupCountComposites(PageControl pageControl) throws RuntimeException;
+
+ int deleteAffinityGroups(int[] affinityGroupIds) throws RuntimeException;
+
+ int createAffinityGroup(AffinityGroup affinityGroup) throws RuntimeException;
}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/CloudGWTServiceImpl.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/CloudGWTServiceImpl.java
index f71160a..44b2a44 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/CloudGWTServiceImpl.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/CloudGWTServiceImpl.java
@@ -27,6 +27,7 @@ import java.util.List;
import org.apache.commons.lang.ArrayUtils;
+import org.rhq.core.domain.cloud.AffinityGroup;
import org.rhq.core.domain.cloud.FailoverListDetails;
import org.rhq.core.domain.cloud.PartitionEvent;
import org.rhq.core.domain.cloud.PartitionEventDetails;
@@ -56,7 +57,7 @@ public class CloudGWTServiceImpl extends AbstractGWTServiceImpl implements Cloud
private CloudManagerLocal cloudManager = LookupUtil.getCloudManager();
private PartitionEventManagerLocal partitionEventManager = LookupUtil.getPartitionEventManager();
-
+
private AffinityGroupManagerLocal affinityGroupManager = LookupUtil.getAffinityGroupManager();
@Override
@@ -171,11 +172,29 @@ public class CloudGWTServiceImpl extends AbstractGWTServiceImpl implements Cloud
}
@Override
- public PageList<AffinityGroupCountComposite> getComposites(PageControl pageControl) throws RuntimeException {
+ public PageList<AffinityGroupCountComposite> getAffinityGroupCountComposites(PageControl pageControl)
+ throws RuntimeException {
try {
- return SerialUtility.prepare(
- affinityGroupManager.getComposites(getSessionSubject(), pageControl),
- "CloudGWTServiceImpl.getComposites");
+ return SerialUtility.prepare(affinityGroupManager.getComposites(getSessionSubject(), pageControl),
+ "CloudGWTServiceImpl.getAffinityGroupCountComposites");
+ } catch (Throwable t) {
+ throw getExceptionToThrowToClient(t);
+ }
+ }
+
+ @Override
+ public int deleteAffinityGroups(int[] affinityGroupIds) throws RuntimeException {
+ try {
+ return affinityGroupManager.delete(getSessionSubject(), ArrayUtils.toObject(affinityGroupIds));
+ } catch (Throwable t) {
+ throw getExceptionToThrowToClient(t);
+ }
+ }
+
+ @Override
+ public int createAffinityGroup(AffinityGroup affinityGroup) throws RuntimeException {
+ try {
+ return affinityGroupManager.create(getSessionSubject(), affinityGroup);
} catch (Throwable t) {
throw getExceptionToThrowToClient(t);
}
commit c1ec009268ff9aa4257adbee22b6eff941b06d24
Author: Jirka Kremser <jkremser(a)redhat.com>
Date: Wed Dec 5 15:00:26 2012 +0100
Partition Event detail view with the list of agent-server assignments has been added
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentDetailView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentDetailView.java
index 1c0d1de..9c32758 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentDetailView.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentDetailView.java
@@ -163,7 +163,7 @@ public class AgentDetailView extends LocatableVLayout {
StaticTextItem lastAvailabilityItem = new StaticTextItem(FIELD_LAST_AVAILABILITY_REPORT.propertyName(),
FIELD_LAST_AVAILABILITY_REPORT.title());
String lastReport = agent.getLastAvailabilityReport() == null ? "unknown" : TimestampCellFormatter.format(
- Long.valueOf(agent.getLastAvailabilityReport()), TimestampCellFormatter.DATE_TIME_FORMAT_MEDIUM);
+ Long.valueOf(agent.getLastAvailabilityReport()), TimestampCellFormatter.DATE_TIME_FORMAT_LONG);
lastAvailabilityItem.setValue(lastReport);
// TODO: make clickable link
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentTableView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentTableView.java
index b93303b..f2ef76e 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentTableView.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentTableView.java
@@ -41,7 +41,7 @@ import org.rhq.enterprise.gui.coregui.client.util.selenium.SeleniumUtility;
/**
* @author Jiri Kremser
*/
-public class AgentTableView extends TableSection<AgentNodeDatasource> implements HasViewName {
+public class AgentTableView extends TableSection<AffinityGroupWithCountsDatasource> implements HasViewName {
public static final ViewName VIEW_ID = new ViewName("Agents(GWT)", MSG.view_adminTopology_agents() + "(GWT)",
IconEnum.SERVERS);
@@ -53,7 +53,7 @@ public class AgentTableView extends TableSection<AgentNodeDatasource> implements
super(locatorId, tableTitle);
setHeight100();
setWidth100();
- setDataSource(new AgentNodeDatasource(serverId));
+ setDataSource(new AffinityGroupWithCountsDatasource(serverId));
}
@Override
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventDatasource.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventDatasource.java
index 357abd6..67a8ab9 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventDatasource.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventDatasource.java
@@ -85,8 +85,8 @@ public class PartitionEventDatasource extends RPCDataSource<PartitionEvent, Part
ListGridField executionTimeField = FIELD_CTIME.getListGridField("120");
TimestampCellFormatter.prepareDateField(executionTimeField);
fields.add(executionTimeField);
- fields.add(FIELD_EVENT_TYPE.getListGridField("170"));
- fields.add(FIELD_EVENT_DETAIL.getListGridField("200"));
+ fields.add(FIELD_EVENT_TYPE.getListGridField("190"));
+ fields.add(FIELD_EVENT_DETAIL.getListGridField("220"));
fields.add(FIELD_SUBJECT_NAME.getListGridField("90"));
fields.add(FIELD_EXECUTION_STATUS.getListGridField("90"));
@@ -97,7 +97,6 @@ public class PartitionEventDatasource extends RPCDataSource<PartitionEvent, Part
protected void executeFetch(final DSRequest request, final DSResponse response, PartitionEventCriteria criteria) {
// final PageControl pc = getPageControl(request);
- // TODO: call find by criteria method on PartitionEventManagerBean
GWTServiceLookup.getCloudService().findPartitionEventsByCriteria(criteria,
new AsyncCallback<PageList<PartitionEvent>>() {
public void onSuccess(PageList<PartitionEvent> result) {
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventDetailView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventDetailView.java
new file mode 100644
index 0000000..b555f2d
--- /dev/null
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventDetailView.java
@@ -0,0 +1,225 @@
+/*
+ * RHQ Management Platform
+ * Copyright (C) 2005-2012 Red Hat, Inc.
+ * All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation version 2 of the License.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+package org.rhq.enterprise.gui.coregui.client.admin.topology;
+
+import static org.rhq.enterprise.gui.coregui.client.admin.topology.PartitionEventDatasourceField.FIELD_CTIME;
+import static org.rhq.enterprise.gui.coregui.client.admin.topology.PartitionEventDatasourceField.FIELD_EVENT_DETAIL;
+import static org.rhq.enterprise.gui.coregui.client.admin.topology.PartitionEventDatasourceField.FIELD_EVENT_TYPE;
+import static org.rhq.enterprise.gui.coregui.client.admin.topology.PartitionEventDatasourceField.FIELD_EXECUTION_STATUS;
+import static org.rhq.enterprise.gui.coregui.client.admin.topology.PartitionEventDatasourceField.FIELD_SUBJECT_NAME;
+
+import com.google.gwt.user.client.Timer;
+import com.google.gwt.user.client.rpc.AsyncCallback;
+import com.smartgwt.client.types.Overflow;
+import com.smartgwt.client.types.VisibilityMode;
+import com.smartgwt.client.util.SC;
+import com.smartgwt.client.widgets.Label;
+import com.smartgwt.client.widgets.form.fields.StaticTextItem;
+import com.smartgwt.client.widgets.grid.ListGrid;
+import com.smartgwt.client.widgets.grid.ListGridField;
+import com.smartgwt.client.widgets.grid.ListGridRecord;
+import com.smartgwt.client.widgets.layout.SectionStack;
+import com.smartgwt.client.widgets.layout.SectionStackSection;
+
+import org.rhq.core.domain.cloud.PartitionEvent;
+import org.rhq.core.domain.cloud.PartitionEventDetails;
+import org.rhq.core.domain.criteria.PartitionEventCriteria;
+import org.rhq.core.domain.util.PageControl;
+import org.rhq.core.domain.util.PageList;
+import org.rhq.enterprise.gui.coregui.client.BookmarkableView;
+import org.rhq.enterprise.gui.coregui.client.ViewPath;
+import org.rhq.enterprise.gui.coregui.client.components.table.TimestampCellFormatter;
+import org.rhq.enterprise.gui.coregui.client.gwt.CloudGWTServiceAsync;
+import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup;
+import org.rhq.enterprise.gui.coregui.client.util.Log;
+import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableDynamicForm;
+import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableSectionStack;
+import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableVLayout;
+
+/**
+ * Shows details of a partition event.
+ *
+ * @author Jiri Kremser
+ */
+public class PartitionEventDetailView extends LocatableVLayout implements BookmarkableView {
+
+ private final int partitionEventId;
+
+ private final LocatableSectionStack sectionStack;
+ private SectionStackSection detailsSection = null;
+ private SectionStackSection agentSection = null;
+
+ private volatile int initSectionCount = 0;
+
+ public PartitionEventDetailView(String locatorId, int partitionEventId) {
+ super(locatorId);
+ this.partitionEventId = partitionEventId;
+ setHeight100();
+ setWidth100();
+ setOverflow(Overflow.AUTO);
+
+ sectionStack = new LocatableSectionStack(extendLocatorId("stack"));
+ sectionStack.setVisibilityMode(VisibilityMode.MULTIPLE);
+ sectionStack.setWidth100();
+ sectionStack.setHeight100();
+ sectionStack.setMargin(5);
+ sectionStack.setOverflow(Overflow.VISIBLE);
+ }
+
+ @Override
+ protected void onInit() {
+ super.onInit();
+ PartitionEventCriteria criteria = new PartitionEventCriteria();
+ criteria.addFilterId(partitionEventId);
+ final CloudGWTServiceAsync service = GWTServiceLookup.getCloudService();
+ service.findPartitionEventsByCriteria(criteria,
+ new AsyncCallback<PageList<PartitionEvent>>() {
+ public void onSuccess(final PageList<PartitionEvent> events) {
+ if (events == null || events.size() != 1) {
+ //TODO: notify user in msg center
+ return;
+ }
+ prepareDetailsSection(sectionStack, events.get(0));
+ service.getPartitionEventDetails(partitionEventId,
+ PageControl.getUnlimitedInstance(), new AsyncCallback<PageList<PartitionEventDetails>>() {
+ public void onSuccess(PageList<PartitionEventDetails> result) {
+ prepareAssignmentsSection(sectionStack, result);
+ }
+ public void onFailure(Throwable caught) {
+ SC.say("er2:" + caught);
+ //TODO: CoreGUI.getErrorHandler().handleError(MSG.view_admin_plugins_loadFailure(), caught);
+ }
+ });
+
+ }
+
+ public void onFailure(Throwable caught) {
+ SC.say("er1:" + caught);
+ //TODO: CoreGUI.getErrorHandler().handleError(MSG.view_admin_plugins_loadFailure(), caught);
+ }
+ });
+ }
+
+ public boolean isInitialized() {
+ return initSectionCount >= 2;
+ }
+
+ @Override
+ protected void onDraw() {
+ super.onDraw();
+
+ // wait until we have all of the sections before we show them. We don't use InitializableView because,
+ // it seems they are not supported (in the applicable renderView()) at this level.
+ new Timer() {
+ final long startTime = System.currentTimeMillis();
+
+ public void run() {
+ if (isInitialized()) {
+ if (null != detailsSection) {
+ sectionStack.addSection(detailsSection);
+ }
+ if (null != agentSection) {
+ sectionStack.addSection(agentSection);
+ }
+
+ addMember(sectionStack);
+ markForRedraw();
+
+ } else {
+ // don't wait forever, give up after 20s and show what we have
+ long elapsedMillis = System.currentTimeMillis() - startTime;
+ if (elapsedMillis > 20000) {
+ initSectionCount = 2;
+ }
+ schedule(100); // Reschedule the timer.
+ }
+ }
+ }.run(); // fire the timer immediately
+ }
+
+ private void prepareAssignmentsSection(SectionStack stack, PageList<PartitionEventDetails> eventDetails) {
+ SectionStackSection section = new SectionStackSection(
+ MSG.view_adminTopology_partitionEventsDetail_agentAssignments());
+ section.setExpanded(true);
+ if (eventDetails == null || eventDetails.size() == 0) {
+ section.setItems(new Label(MSG.view_adminTopology_partitionEventsDetail_agentAssignments_nothing()));
+ } else {
+ // there is no need for datasource, it is a simple table with two columns
+ ListGrid assignments = new ListGrid();
+ ListGridField agentName = new ListGridField("agentName", MSG.view_adminTopology_agent_agentName());
+ ListGridField serverName = new ListGridField("serverName", MSG.view_admin_systemSettings_serverDetails_serverName());
+ assignments.setFields(agentName, serverName);
+ ListGridRecord[] records = new ListGridRecord[eventDetails.size()];
+ for (int i = 0; i < eventDetails.size(); i++) {
+ records[i] = new ListGridRecord();
+ records[i].setAttribute("agentName", eventDetails.get(i).getAgentName());
+ records[i].setAttribute("serverName", eventDetails.get(i).getServerName());
+ }
+ assignments.setData(records);
+ section.setItems(assignments);
+ }
+
+ agentSection = section;
+ initSectionCount++;
+ }
+
+ private void prepareDetailsSection(SectionStack stack, PartitionEvent partitionEvent) {
+ final LocatableDynamicForm form = new LocatableDynamicForm(extendLocatorId("detailsForm"));
+ form.setMargin(10);
+ form.setWidth100();
+ form.setWrapItemTitles(false);
+ form.setNumCols(2);
+
+ StaticTextItem ctimeItem = new StaticTextItem(FIELD_CTIME.propertyName(),
+ MSG.view_adminTopology_partitionEventsDetail_eventExecutionTime());
+ ctimeItem.setValue(TimestampCellFormatter.format(Long.valueOf(partitionEvent.getCtime()),
+ TimestampCellFormatter.DATE_TIME_FORMAT_LONG));
+
+ StaticTextItem addressItem = new StaticTextItem(FIELD_EVENT_TYPE.propertyName(),
+ MSG.view_adminTopology_partitionEventsDetail_eventType());
+ addressItem.setValue(partitionEvent.getEventType());
+
+ StaticTextItem eventDetailItem = new StaticTextItem(FIELD_EVENT_DETAIL.propertyName(),
+ MSG.view_adminTopology_partitionEventsDetail_eventDetails());
+ eventDetailItem.setValue(partitionEvent.getEventDetail());
+
+ StaticTextItem subjectPortItem = new StaticTextItem(FIELD_SUBJECT_NAME.propertyName(),
+ FIELD_SUBJECT_NAME.title());
+ subjectPortItem.setValue(partitionEvent.getSubjectName());
+
+ StaticTextItem execStatusItem = new StaticTextItem(FIELD_EXECUTION_STATUS.propertyName(),
+ FIELD_EXECUTION_STATUS.title());
+ execStatusItem.setValue(partitionEvent.getExecutionStatus());
+
+ form.setItems(ctimeItem, addressItem, eventDetailItem, subjectPortItem, execStatusItem);
+
+ SectionStackSection section = new SectionStackSection(MSG.view_adminTopology_partitionEvents_details());
+ section.setExpanded(true);
+ section.setItems(form);
+
+ detailsSection = section;
+ initSectionCount++;
+ }
+
+ @Override
+ public void renderView(ViewPath viewPath) {
+ Log.debug("PartitionEventDetailView: " + viewPath);
+ }
+}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventTableView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventTableView.java
index e4d88ee..41d1b8a 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventTableView.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventTableView.java
@@ -27,10 +27,7 @@ import com.smartgwt.client.types.SortDirection;
import com.smartgwt.client.util.BooleanCallback;
import com.smartgwt.client.util.SC;
import com.smartgwt.client.widgets.Canvas;
-import com.smartgwt.client.widgets.form.fields.ButtonItem;
import com.smartgwt.client.widgets.form.fields.TextItem;
-import com.smartgwt.client.widgets.form.fields.events.ClickEvent;
-import com.smartgwt.client.widgets.form.fields.events.ClickHandler;
import com.smartgwt.client.widgets.grid.CellFormatter;
import com.smartgwt.client.widgets.grid.ListGrid;
import com.smartgwt.client.widgets.grid.ListGridField;
@@ -66,7 +63,6 @@ public class PartitionEventTableView extends TableSection<PartitionEventDatasour
public static final String VIEW_PATH = AdministrationView.VIEW_ID + "/"
+ AdministrationView.SECTION_TOPOLOGY_VIEW_ID + "/" + VIEW_ID;
- private final boolean showActions = true;
private static final Criteria INITIAL_CRITERIA = new Criteria();
@@ -84,13 +80,6 @@ public class PartitionEventTableView extends TableSection<PartitionEventDatasour
}
@Override
- protected void onInit() {
- setFlexRowDisplay(false);
-
- super.onInit();
- }
-
- @Override
protected void configureTableFilters() {
final EnumSelectItem statusFilter = new EnumSelectItem(PartitionEventDatasource.FILTER_EXECUTION_STATUS,
MSG.view_adminTopology_partitionEvents_execStatusFilter(), ExecutionStatus.class, null, null);
@@ -107,17 +96,18 @@ public class PartitionEventTableView extends TableSection<PartitionEventDatasour
// SpacerItem spacerItem = new SpacerItem();
// spacerItem.setColSpan(1);
- final ButtonItem showAll = new ButtonItem("showAll", "Show All");
- showAll.addClickHandler(new ClickHandler() {
- public void onClick(ClickEvent event) {
- statusFilter.init(ExecutionStatus.class, null, null);
- typeFilter.init(PartitionEventType.class, null, null);
- detail.setValue("");
- }
- });
+// final ButtonItem showAll = new ButtonItem("showAll", "Show All");
+// showAll.addClickHandler(new ClickHandler() {
+// public void onClick(ClickEvent event) {
+// statusFilter.init(ExecutionStatus.class, null, null);
+// typeFilter.init(PartitionEventType.class, null, null);
+// detail.setValue("");
+// refresh();
+// }
+// });
if (isShowFilterForm()) {
- setFilterFormItems(statusFilter, detail, typeFilter, showAll);
+ setFilterFormItems(statusFilter, detail, typeFilter);
}
}
@@ -127,9 +117,8 @@ public class PartitionEventTableView extends TableSection<PartitionEventDatasour
List<ListGridField> fields = getDataSource().getListGridFields();
ListGrid listGrid = getListGrid();
listGrid.setFields(fields.toArray(new ListGridField[fields.size()]));
- if (showActions) {
- showActions();
- }
+ showActions();
+
for (ListGridField field : fields) {
// adding the cell formatter for name field (clickable link)
if (field.getName() == PartitionEventDatasourceField.FIELD_EVENT_TYPE.propertyName()) {
@@ -142,7 +131,6 @@ public class PartitionEventTableView extends TableSection<PartitionEventDatasour
String detailsUrl = "#" + VIEW_PATH + "/" + getId(record);
String formattedValue = StringUtility.escapeHtml(value.toString());
return SeleniumUtility.getLocatableHref(detailsUrl, formattedValue, null);
-
}
});
}
@@ -167,11 +155,10 @@ public class PartitionEventTableView extends TableSection<PartitionEventDatasour
@Override
public Canvas getDetailsView(Integer id) {
- return new ServerDetailView(extendLocatorId("detailsView"), id);
+ return new PartitionEventDetailView(extendLocatorId("detailsView"), id);
}
private void showActions() {
-
addTableAction(extendLocatorId("removeSelected"), MSG.view_adminTopology_server_removeSelected(),
MSG.common_msg_areYouSure(), new AuthorizedTableAction(this, TableActionEnablement.ANY,
Permission.MANAGE_SETTINGS) {
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDetailView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDetailView.java
index 95cb869..5f18d19 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDetailView.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDetailView.java
@@ -189,11 +189,11 @@ public class ServerDetailView extends LocatableVLayout implements BookmarkableVi
StaticTextItem installationDateItem = new StaticTextItem(FIELD_CTIME.propertyName(), FIELD_CTIME.title());
installationDateItem.setValue(TimestampCellFormatter.format(Long.valueOf(server.getCtime()),
- TimestampCellFormatter.DATE_TIME_FORMAT_MEDIUM));
+ TimestampCellFormatter.DATE_TIME_FORMAT_LONG));
StaticTextItem lastUpdatetem = new StaticTextItem(FIELD_MTIME.propertyName(), FIELD_MTIME.title());
lastUpdatetem.setValue(TimestampCellFormatter.format(Long.valueOf(server.getMtime()),
- TimestampCellFormatter.DATE_TIME_FORMAT_MEDIUM));
+ TimestampCellFormatter.DATE_TIME_FORMAT_LONG));
ButtonItem saveButton = new ButtonItem();
saveButton.setOverflow(Overflow.VISIBLE);
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/CloudGWTService.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/CloudGWTService.java
index 6ff748f..f42ce80 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/CloudGWTService.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/CloudGWTService.java
@@ -28,7 +28,9 @@ import com.google.gwt.user.client.rpc.RemoteService;
import org.rhq.core.domain.cloud.FailoverListDetails;
import org.rhq.core.domain.cloud.PartitionEvent;
+import org.rhq.core.domain.cloud.PartitionEventDetails;
import org.rhq.core.domain.cloud.Server;
+import org.rhq.core.domain.cloud.composite.AffinityGroupCountComposite;
import org.rhq.core.domain.cloud.composite.ServerWithAgentCountComposite;
import org.rhq.core.domain.criteria.PartitionEventCriteria;
import org.rhq.core.domain.resource.Agent;
@@ -54,14 +56,19 @@ public interface CloudGWTService extends RemoteService {
void deleteServers(int[] serverIds) throws RuntimeException;
void updateServerMode(int[] serverIds, Server.OperationMode mode) throws RuntimeException;
-
+
List<FailoverListDetails> getFailoverListDetailsByAgentId(int agentId, PageControl pc) throws RuntimeException;;
-
+
PageList<PartitionEvent> findPartitionEventsByCriteria(PartitionEventCriteria criteria) throws RuntimeException;
-
+
void cloudPartitionEventRequest() throws RuntimeException;
-
+
void purgeAllEvents() throws RuntimeException;
+
+ void deletePartitionEvents(int[] eventIds) throws RuntimeException;
+
+ PageList<PartitionEventDetails> getPartitionEventDetails(int partitionEventId,
+ PageControl pageControl) throws RuntimeException;
- void deletePartitionEvents(int[] eventIds) throws RuntimeException;
+ PageList<AffinityGroupCountComposite> getComposites(PageControl pageControl) throws RuntimeException;
}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/CloudGWTServiceImpl.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/CloudGWTServiceImpl.java
index e3165ad..f71160a 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/CloudGWTServiceImpl.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/CloudGWTServiceImpl.java
@@ -29,9 +29,11 @@ import org.apache.commons.lang.ArrayUtils;
import org.rhq.core.domain.cloud.FailoverListDetails;
import org.rhq.core.domain.cloud.PartitionEvent;
+import org.rhq.core.domain.cloud.PartitionEventDetails;
import org.rhq.core.domain.cloud.PartitionEventType;
import org.rhq.core.domain.cloud.Server;
import org.rhq.core.domain.cloud.Server.OperationMode;
+import org.rhq.core.domain.cloud.composite.AffinityGroupCountComposite;
import org.rhq.core.domain.cloud.composite.ServerWithAgentCountComposite;
import org.rhq.core.domain.criteria.PartitionEventCriteria;
import org.rhq.core.domain.resource.Agent;
@@ -39,6 +41,7 @@ import org.rhq.core.domain.util.PageControl;
import org.rhq.core.domain.util.PageList;
import org.rhq.enterprise.gui.coregui.client.gwt.CloudGWTService;
import org.rhq.enterprise.gui.coregui.server.util.SerialUtility;
+import org.rhq.enterprise.server.cloud.AffinityGroupManagerLocal;
import org.rhq.enterprise.server.cloud.CloudManagerLocal;
import org.rhq.enterprise.server.cloud.PartitionEventManagerLocal;
import org.rhq.enterprise.server.util.LookupUtil;
@@ -53,6 +56,8 @@ public class CloudGWTServiceImpl extends AbstractGWTServiceImpl implements Cloud
private CloudManagerLocal cloudManager = LookupUtil.getCloudManager();
private PartitionEventManagerLocal partitionEventManager = LookupUtil.getPartitionEventManager();
+
+ private AffinityGroupManagerLocal affinityGroupManager = LookupUtil.getAffinityGroupManager();
@Override
public PageList<ServerWithAgentCountComposite> getServers(PageControl pc) throws RuntimeException {
@@ -153,4 +158,27 @@ public class CloudGWTServiceImpl extends AbstractGWTServiceImpl implements Cloud
}
}
+ @Override
+ public PageList<PartitionEventDetails> getPartitionEventDetails(int partitionEventId, PageControl pageControl)
+ throws RuntimeException {
+ try {
+ return SerialUtility.prepare(
+ partitionEventManager.getPartitionEventDetails(getSessionSubject(), partitionEventId, pageControl),
+ "CloudGWTServiceImpl.getPartitionEventDetails");
+ } catch (Throwable t) {
+ throw getExceptionToThrowToClient(t);
+ }
+ }
+
+ @Override
+ public PageList<AffinityGroupCountComposite> getComposites(PageControl pageControl) throws RuntimeException {
+ try {
+ return SerialUtility.prepare(
+ affinityGroupManager.getComposites(getSessionSubject(), pageControl),
+ "CloudGWTServiceImpl.getComposites");
+ } catch (Throwable t) {
+ throw getExceptionToThrowToClient(t);
+ }
+ }
+
}
commit e310199bf4d266e34aac311648608ed142578dbb
Author: Jirka Kremser <jkremser(a)redhat.com>
Date: Tue Dec 4 18:59:19 2012 +0100
criteria based finding is now fully working for Partition Event entities
diff --git a/modules/core/domain/src/main/java/org/rhq/core/domain/criteria/PartitionEventCriteria.java b/modules/core/domain/src/main/java/org/rhq/core/domain/criteria/PartitionEventCriteria.java
index 813d2b8..13ad211 100644
--- a/modules/core/domain/src/main/java/org/rhq/core/domain/criteria/PartitionEventCriteria.java
+++ b/modules/core/domain/src/main/java/org/rhq/core/domain/criteria/PartitionEventCriteria.java
@@ -19,10 +19,15 @@
package org.rhq.core.domain.criteria;
+import java.util.Arrays;
+import java.util.List;
+
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import org.rhq.core.domain.cloud.PartitionEvent;
+import org.rhq.core.domain.cloud.PartitionEvent.ExecutionStatus;
+import org.rhq.core.domain.cloud.PartitionEventType;
import org.rhq.core.domain.util.PageOrdering;
/**
@@ -39,17 +44,15 @@ public class PartitionEventCriteria extends Criteria {
public static final String SORT_FIELD_CTIME = "ctime";
private Integer filterId;
- private String filterEventType;
- private String filterExecutionStatus;
+ private List<PartitionEventType> filterEventType; // requires override
+ private List<ExecutionStatus> filterExecutionStatus; // requires override
private String filterEventDetail;
private PageOrdering sortCtime;
public PartitionEventCriteria() {
- // filterOverrides.put("packageTypeId", "packageType.id = ? ");
- // filterOverrides.put("repoId", "id IN (" +
- // "SELECT rpv.packageVersion.generalPackage.id FROM RepoPackageVersion rpv WHERE rpv.repo.id = ?" +
- // ")");
+ filterOverrides.put("eventType", "eventType IN ( ? )");
+ filterOverrides.put("executionStatus", "executionStatus IN ( ? )");
}
public Class<?> getPersistentClass() {
@@ -60,12 +63,16 @@ public class PartitionEventCriteria extends Criteria {
this.filterId = id;
}
- public void addFilterEventType(String eventType) {
- this.filterEventType = eventType;
+ public void addFilterEventType(PartitionEventType... filterEventType) {
+ if (filterEventType != null && filterEventType.length > 0) {
+ this.filterEventType = Arrays.asList(filterEventType);
+ }
}
- public void addFilterExecutionStatus(String executionStatus) {
- this.filterExecutionStatus = executionStatus;
+ public void addFilterExecutionStatus(ExecutionStatus... filterExecutionStatus) {
+ if (filterExecutionStatus != null && filterExecutionStatus.length > 0) {
+ this.filterExecutionStatus = Arrays.asList(filterExecutionStatus);
+ }
}
public void addFilterEventDetail(String eventDetail) {
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentTableView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentTableView.java
index 41d32be..b93303b 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentTableView.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentTableView.java
@@ -73,7 +73,7 @@ public class AgentTableView extends TableSection<AgentNodeDatasource> implements
if (value == null) {
return "";
}
- String detailsUrl = "#" + VIEW_PATH + "/" + record.getAttributeAsString(FIELD_ID);
+ String detailsUrl = "#" + VIEW_PATH + "/" + getId(record);
String formattedValue = StringUtility.escapeHtml(value.toString());
return SeleniumUtility.getLocatableHref(detailsUrl, formattedValue, null);
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventDatasource.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventDatasource.java
index 048f071..357abd6 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventDatasource.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventDatasource.java
@@ -27,6 +27,7 @@ import static org.rhq.enterprise.gui.coregui.client.admin.topology.PartitionEven
import java.util.ArrayList;
import java.util.List;
+import java.util.Map;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.smartgwt.client.data.DSRequest;
@@ -38,6 +39,8 @@ import com.smartgwt.client.widgets.grid.ListGridField;
import com.smartgwt.client.widgets.grid.ListGridRecord;
import org.rhq.core.domain.cloud.PartitionEvent;
+import org.rhq.core.domain.cloud.PartitionEvent.ExecutionStatus;
+import org.rhq.core.domain.cloud.PartitionEventType;
import org.rhq.core.domain.criteria.PartitionEventCriteria;
import org.rhq.core.domain.util.PageControl;
import org.rhq.core.domain.util.PageList;
@@ -82,8 +85,8 @@ public class PartitionEventDatasource extends RPCDataSource<PartitionEvent, Part
ListGridField executionTimeField = FIELD_CTIME.getListGridField("120");
TimestampCellFormatter.prepareDateField(executionTimeField);
fields.add(executionTimeField);
- fields.add(FIELD_EVENT_TYPE.getListGridField("140"));
- fields.add(FIELD_EVENT_DETAIL.getListGridField("165"));
+ fields.add(FIELD_EVENT_TYPE.getListGridField("170"));
+ fields.add(FIELD_EVENT_DETAIL.getListGridField("200"));
fields.add(FIELD_SUBJECT_NAME.getListGridField("90"));
fields.add(FIELD_EXECUTION_STATUS.getListGridField("90"));
@@ -147,16 +150,45 @@ public class PartitionEventDatasource extends RPCDataSource<PartitionEvent, Part
ListGridRecord record = new ListGridRecord();
record.setAttribute(FIELD_ID.propertyName(), from.getId());
record.setAttribute(FIELD_CTIME.propertyName(), from.getCtime());
- record.setAttribute(FIELD_EVENT_TYPE.propertyName(), from.getEventType());
- record.setAttribute(FIELD_EVENT_DETAIL.propertyName(), from.getEventDetail());
- record.setAttribute(FIELD_SUBJECT_NAME.propertyName(), from.getSubjectName());
- record.setAttribute(FIELD_EXECUTION_STATUS.propertyName(), from.getExecutionStatus());
+ record.setAttribute(FIELD_EVENT_TYPE.propertyName(), from.getEventType() == null ? "" : from.getEventType());
+ record.setAttribute(FIELD_EVENT_DETAIL.propertyName(), from.getEventDetail() == null ? "" : from.getEventDetail());
+ record.setAttribute(FIELD_SUBJECT_NAME.propertyName(), from.getSubjectName() == null ? "" : from.getSubjectName());
+ record.setAttribute(FIELD_EXECUTION_STATUS.propertyName(), from.getExecutionStatus() == null ? "" : from.getExecutionStatus());
return record;
}
@Override
protected PartitionEventCriteria getFetchCriteria(DSRequest request) {
- // we don't use criteria for this datasource, just return null
- return new PartitionEventCriteria();
+ ExecutionStatus[] statuses = getArrayFilter(request, FILTER_EXECUTION_STATUS, ExecutionStatus.class);
+ PartitionEventType[] types = getArrayFilter(request, FILTER_EVENT_TYPE, PartitionEventType.class);
+ if (types == null || types.length == 0 || statuses == null || statuses.length == 0) {
+ return null; // user didn't select any type or status - return null to indicate no data should be displayed
+ }
+
+ PartitionEventCriteria criteria = new PartitionEventCriteria();
+ // This code is unlikely to be necessary as the encompassing view should be using an initial
+ // sort specifier. But just in case, make sure we set the initial sort. Note that we have to
+ // manipulate the PageControl directly as per the restrictions on getFetchCriteria() (see jdoc).
+ PageControl pageControl = getPageControl(request);
+ if (pageControl.getOrderingFields().isEmpty()) {
+ pageControl.initDefaultOrderingField(FIELD_CTIME.propertyName(), PageOrdering.DESC);
+ }
+
+ // TODO: This call is broken in 2.2, http://code.google.com/p/smartgwt/issues/detail?id=490
+ // when using AdvancedCriteria
+ Map<String, Object> criteriaMap = request.getCriteria().getValues();
+ criteria.addFilterEventDetail((String) criteriaMap.get(FILTER_EVENT_DETAIL));
+
+ // There's no need to add a exec. status filter to the criteria if the user specified all exec. statuses.
+ if (statuses.length != ExecutionStatus.values().length) {
+ criteria.addFilterExecutionStatus(statuses);
+ }
+
+ // There's no need to add a event type filter to the criteria if the user specified all event types.
+ if (types.length != PartitionEventType.values().length) {
+ criteria.addFilterEventType(types);
+ }
+
+ return criteria;
}
}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventDatasourceField.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventDatasourceField.java
index c8fc5c5..939478f 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventDatasourceField.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventDatasourceField.java
@@ -30,15 +30,16 @@ public enum PartitionEventDatasourceField {
FIELD_ID("id", CoreGUI.getMessages().common_title_id()),
- FIELD_CTIME("ctime", "i18n ex time"),
-
- FIELD_EVENT_TYPE("eventType", "i18n ev type"),
+ FIELD_CTIME("ctime", CoreGUI.getMessages().view_adminTopology_partitionEvents_execTime()),
- FIELD_EVENT_DETAIL("eventDetail", "i18n ev detail"),
+ FIELD_EVENT_TYPE("eventType", CoreGUI.getMessages().view_adminTopology_partitionEvents_type()),
- FIELD_SUBJECT_NAME("subjectName", "i18n by"),
+ FIELD_EVENT_DETAIL("eventDetail", CoreGUI.getMessages().view_adminTopology_partitionEvents_details()),
- FIELD_EXECUTION_STATUS("executionStatus", "i18n ex status");
+ FIELD_SUBJECT_NAME("subjectName", CoreGUI.getMessages().view_adminTopology_partitionEvents_initiatedBy()),
+
+ FIELD_EXECUTION_STATUS("executionStatus", CoreGUI.getMessages()
+ .view_adminTopology_partitionEvents_executionStatus());
/**
* Corresponds to a property name of Server (e.g. operationMode).
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventTableView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventTableView.java
index 0144603..e4d88ee 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventTableView.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventTableView.java
@@ -18,7 +18,6 @@
*/
package org.rhq.enterprise.gui.coregui.client.admin.topology;
-import java.util.ArrayList;
import java.util.List;
import com.google.gwt.user.client.rpc.AsyncCallback;
@@ -28,14 +27,18 @@ import com.smartgwt.client.types.SortDirection;
import com.smartgwt.client.util.BooleanCallback;
import com.smartgwt.client.util.SC;
import com.smartgwt.client.widgets.Canvas;
-import com.smartgwt.client.widgets.form.fields.SpacerItem;
+import com.smartgwt.client.widgets.form.fields.ButtonItem;
import com.smartgwt.client.widgets.form.fields.TextItem;
+import com.smartgwt.client.widgets.form.fields.events.ClickEvent;
+import com.smartgwt.client.widgets.form.fields.events.ClickHandler;
+import com.smartgwt.client.widgets.grid.CellFormatter;
import com.smartgwt.client.widgets.grid.ListGrid;
import com.smartgwt.client.widgets.grid.ListGridField;
import com.smartgwt.client.widgets.grid.ListGridRecord;
import org.rhq.core.domain.authz.Permission;
-import org.rhq.core.domain.cloud.PartitionEvent;
+import org.rhq.core.domain.cloud.PartitionEvent.ExecutionStatus;
+import org.rhq.core.domain.cloud.PartitionEventType;
import org.rhq.core.domain.criteria.PartitionEventCriteria;
import org.rhq.enterprise.gui.coregui.client.CoreGUI;
import org.rhq.enterprise.gui.coregui.client.IconEnum;
@@ -47,7 +50,9 @@ import org.rhq.enterprise.gui.coregui.client.components.table.TableSection;
import org.rhq.enterprise.gui.coregui.client.components.view.HasViewName;
import org.rhq.enterprise.gui.coregui.client.components.view.ViewName;
import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup;
+import org.rhq.enterprise.gui.coregui.client.util.StringUtility;
import org.rhq.enterprise.gui.coregui.client.util.message.Message;
+import org.rhq.enterprise.gui.coregui.client.util.selenium.SeleniumUtility;
/**
* @author Jiri Kremser
@@ -55,8 +60,8 @@ import org.rhq.enterprise.gui.coregui.client.util.message.Message;
*/
public class PartitionEventTableView extends TableSection<PartitionEventDatasource> implements HasViewName {
- public static final ViewName VIEW_ID = new ViewName("PartitionEvents(GWT)", "Partition Events(GWT)",
- IconEnum.EVENTS);
+ public static final ViewName VIEW_ID = new ViewName("PartitionEvents(GWT)",
+ MSG.view_adminTopology_partitionEvents() + "(GWT)", IconEnum.EVENTS);
public static final String VIEW_PATH = AdministrationView.VIEW_ID + "/"
+ AdministrationView.SECTION_TOPOLOGY_VIEW_ID + "/" + VIEW_ID;
@@ -70,6 +75,7 @@ public class PartitionEventTableView extends TableSection<PartitionEventDatasour
public PartitionEventTableView(String locatorId, String tableTitle) {
super(locatorId, tableTitle, INITIAL_CRITERIA, new SortSpecifier[] { DEFAULT_SORT_SPECIFIER });
+
setHeight100();
setWidth100();
@@ -78,23 +84,40 @@ public class PartitionEventTableView extends TableSection<PartitionEventDatasour
}
@Override
+ protected void onInit() {
+ setFlexRowDisplay(false);
+
+ super.onInit();
+ }
+
+ @Override
protected void configureTableFilters() {
final EnumSelectItem statusFilter = new EnumSelectItem(PartitionEventDatasource.FILTER_EXECUTION_STATUS,
- "i18n Execution Status", PartitionEvent.ExecutionStatus.class, null, null);
+ MSG.view_adminTopology_partitionEvents_execStatusFilter(), ExecutionStatus.class, null, null);
- final EnumSelectItem typeFilter = new EnumSelectItem(PartitionEventDatasource.FILTER_EVENT_TYPE, "i18n Type",
- PartitionEvent.ExecutionStatus.class, null, null);
+ final EnumSelectItem typeFilter = new EnumSelectItem(PartitionEventDatasource.FILTER_EVENT_TYPE,
+ MSG.view_adminTopology_partitionEvents_typeFilter(), PartitionEventType.class, null, null);
- final TextItem detail = new TextItem(PartitionEventDatasource.FILTER_EVENT_DETAIL, "i18n Details Filter");
+ final TextItem detail = new TextItem(PartitionEventDatasource.FILTER_EVENT_DETAIL,
+ MSG.view_adminTopology_partitionEvents_detailsFilter());
+ // detail.setValue("");
// startDateFilter = new DateFilterItem(DateFilterItem.START_DATE_FILTER, MSG.filter_from_date());
// endDateFilter = new DateFilterItem(DateFilterItem.END_DATE_FILTER, MSG.filter_to_date());
- SpacerItem spacerItem = new SpacerItem();
- spacerItem.setColSpan(2);
+// SpacerItem spacerItem = new SpacerItem();
+// spacerItem.setColSpan(1);
+ final ButtonItem showAll = new ButtonItem("showAll", "Show All");
+ showAll.addClickHandler(new ClickHandler() {
+ public void onClick(ClickEvent event) {
+ statusFilter.init(ExecutionStatus.class, null, null);
+ typeFilter.init(PartitionEventType.class, null, null);
+ detail.setValue("");
+ }
+ });
if (isShowFilterForm()) {
- setFilterFormItems(statusFilter, detail, typeFilter);
+ setFilterFormItems(statusFilter, detail, typeFilter, showAll);
}
}
@@ -105,11 +128,43 @@ public class PartitionEventTableView extends TableSection<PartitionEventDatasour
ListGrid listGrid = getListGrid();
listGrid.setFields(fields.toArray(new ListGridField[fields.size()]));
if (showActions) {
- // listGrid.sort(FIELD_NAME, SortDirection.ASCENDING);
showActions();
}
+ for (ListGridField field : fields) {
+ // adding the cell formatter for name field (clickable link)
+ if (field.getName() == PartitionEventDatasourceField.FIELD_EVENT_TYPE.propertyName()) {
+ field.setCellFormatter(new CellFormatter() {
+ @Override
+ public String format(Object value, ListGridRecord record, int rowNum, int colNum) {
+ if (value == null) {
+ return "";
+ }
+ String detailsUrl = "#" + VIEW_PATH + "/" + getId(record);
+ String formattedValue = StringUtility.escapeHtml(value.toString());
+ return SeleniumUtility.getLocatableHref(detailsUrl, formattedValue, null);
+
+ }
+ });
+ }
+ }
}
+ // @Override
+ // protected String getDetailsLinkColumnName() {
+ // return PartitionEventDatasourceField.FIELD_EVENT_TYPE.propertyName();
+ // }
+ //
+ // @Override
+ // protected CellFormatter getDetailsLinkColumnCellFormatter() {
+ // return new CellFormatter() {
+ // public String format(Object value, ListGridRecord record, int rowNum, int colNum) {
+ // Integer recordId = getId(record);
+ // String detailsUrl = "#" + VIEW_PATH + "/" + recordId;
+ // return SeleniumUtility.getLocatableHref(detailsUrl, detailsUrl, null);
+ // }
+ // };
+ // }
+
@Override
public Canvas getDetailsView(Integer id) {
return new ServerDetailView(extendLocatorId("detailsView"), id);
@@ -121,8 +176,7 @@ public class PartitionEventTableView extends TableSection<PartitionEventDatasour
MSG.common_msg_areYouSure(), new AuthorizedTableAction(this, TableActionEnablement.ANY,
Permission.MANAGE_SETTINGS) {
public void executeAction(final ListGridRecord[] selections, Object actionValue) {
- List<String> selectedNames = getSelectedNames(selections);
- String message = "Really? Delete? For all I've done for you? " + selectedNames;
+ String message = "Really? Delete? For all I've done for you? ";
SC.ask(message, new BooleanCallback() {
public void execute(Boolean confirmed) {
if (confirmed) {
@@ -155,37 +209,36 @@ public class PartitionEventTableView extends TableSection<PartitionEventDatasour
}
});
- addTableAction(extendLocatorId("purgeAll"), "i18n purge all",
- MSG.common_msg_areYouSure(), new AuthorizedTableAction(this, TableActionEnablement.ANY,
+ addTableAction(extendLocatorId("purgeAll"), MSG.view_adminTopology_partitionEvents_purgeAll(),
+ MSG.common_msg_areYouSure(), new AuthorizedTableAction(this, TableActionEnablement.ALWAYS,
Permission.MANAGE_SETTINGS) {
public void executeAction(final ListGridRecord[] selections, Object actionValue) {
- List<String> selectedNames = getSelectedNames(selections);
// TODO: msg
// String message = MSG.view_admin_plugins_serverDisableConfirm(selectedNames.toString());
- String message = "Really? Normal? For all I've done for you? " + selectedNames;
+ String message = "Really? Normal? For all I've done for you? ";
SC.ask(message, new BooleanCallback() {
public void execute(Boolean confirmed) {
if (confirmed) {
int[] selectedIds = getSelectedIds(selections);
SC.say("setting servers to maintenance mode, ids: " + selectedIds);
GWTServiceLookup.getCloudService().purgeAllEvents(new AsyncCallback<Void>() {
- public void onSuccess(Void arg0) {
- // TODO: msg
- Message msg = new Message(MSG
- .view_admin_plugins_disabledServerPlugins("sdf"), Message.Severity.Info);
- CoreGUI.getMessageCenter().notify(msg);
- refresh();
- }
-
- public void onFailure(Throwable caught) {
- // TODO: msg
- CoreGUI.getErrorHandler().handleError(
- MSG.view_admin_plugins_disabledServerPluginsFailure() + " "
- + caught.getMessage(), caught);
- refreshTableInfo();
- }
-
- });
+ public void onSuccess(Void arg0) {
+ // TODO: msg
+ Message msg = new Message(MSG.view_admin_plugins_disabledServerPlugins("sdf"),
+ Message.Severity.Info);
+ CoreGUI.getMessageCenter().notify(msg);
+ refresh();
+ }
+
+ public void onFailure(Throwable caught) {
+ // TODO: msg
+ CoreGUI.getErrorHandler().handleError(
+ MSG.view_admin_plugins_disabledServerPluginsFailure() + " "
+ + caught.getMessage(), caught);
+ refreshTableInfo();
+ }
+
+ });
} else {
refreshTableInfo();
}
@@ -194,18 +247,19 @@ public class PartitionEventTableView extends TableSection<PartitionEventDatasour
}
});
- addTableAction(extendLocatorId("forceRepartition"), MSG.view_adminTopology_server_setMaintenance(),
- new AuthorizedTableAction(this, TableActionEnablement.ANY, Permission.MANAGE_SETTINGS) {
+ addTableAction(extendLocatorId("forceRepartition"), MSG.view_adminTopology_partitionEvents_forceRepartition(),
+ new AuthorizedTableAction(this, TableActionEnablement.ALWAYS, Permission.MANAGE_SETTINGS) {
public void executeAction(final ListGridRecord[] selections, Object actionValue) {
- List<String> selectedNames = getSelectedNames(selections);
+ // List<String> selectedNames = getSelectedNames(selections);
// TODO: msg
// String message = MSG.view_admin_plugins_serverDisableConfirm(selectedNames.toString());
- String message = "Really? Repartition? For all I've done for you? " + selectedNames;
+ String message = "Really? Repartition? For all I've done for you? ";// + selectedNames;
SC.ask(message, new BooleanCallback() {
public void execute(Boolean confirmed) {
if (confirmed) {
SC.say("repartition is now forced");
- GWTServiceLookup.getCloudService().cloudPartitionEventRequest(new AsyncCallback<Void>() {
+ GWTServiceLookup.getCloudService().cloudPartitionEventRequest(
+ new AsyncCallback<Void>() {
public void onSuccess(Void arg0) {
// TODO: msg
Message msg = new Message(MSG
@@ -244,16 +298,16 @@ public class PartitionEventTableView extends TableSection<PartitionEventDatasour
return ids;
}
- private List<String> getSelectedNames(ListGridRecord[] selections) {
- if (selections == null) {
- return new ArrayList<String>(0);
- }
- List<String> ids = new ArrayList<String>(selections.length);
- for (ListGridRecord selection : selections) {
- ids.add(selection.getAttributeAsString(FIELD_NAME));
- }
- return ids;
- }
+ // private List<String> getSelectedNames(ListGridRecord[] selections) {
+ // if (selections == null) {
+ // return new ArrayList<String>(0);
+ // }
+ // List<String> ids = new ArrayList<String>(selections.length);
+ // for (ListGridRecord selection : selections) {
+ // ids.add(selection.getAttributeAsString(FIELD_NAME));
+ // }
+ // return ids;
+ // }
@Override
public ViewName getViewName() {
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerTableView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerTableView.java
index bcf2f49..08a1c8f 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerTableView.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerTableView.java
@@ -94,7 +94,7 @@ public class ServerTableView extends TableSection<ServerDatasource<? extends Ser
if (value == null) {
return "";
}
- String detailsUrl = "#" + VIEW_PATH + "/" + record.getAttributeAsString(FIELD_ID);
+ String detailsUrl = "#" + VIEW_PATH + "/" + getId(record);
String formattedValue = StringUtility.escapeHtml(value.toString());
return SeleniumUtility.getLocatableHref(detailsUrl, formattedValue, null);
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/form/EnumSelectItem.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/form/EnumSelectItem.java
index eb1fe76..114b323 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/form/EnumSelectItem.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/form/EnumSelectItem.java
@@ -73,7 +73,7 @@ public class EnumSelectItem extends SelectItem {
for (Object o : EnumSet.allOf(e)) {
Enum v = (Enum) o;
String name = v.name();
- if (!valueMap.containsKey(name)) {
+ if (!map.containsKey(name)) {
map.put(name, v.toString());
}
}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/RPCDataSource.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/RPCDataSource.java
index 2f0ad01..bf6d10a 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/RPCDataSource.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/RPCDataSource.java
@@ -49,6 +49,8 @@ import com.smartgwt.client.widgets.form.validator.LengthRangeValidator;
import com.smartgwt.client.widgets.grid.ListGridRecord;
import org.rhq.core.domain.alert.AlertPriority;
+import org.rhq.core.domain.cloud.PartitionEvent.ExecutionStatus;
+import org.rhq.core.domain.cloud.PartitionEventType;
import org.rhq.core.domain.criteria.BaseCriteria;
import org.rhq.core.domain.drift.DriftCategory;
import org.rhq.core.domain.event.EventSeverity;
@@ -599,6 +601,10 @@ public abstract class RPCDataSource<T, C extends BaseCriteria> extends DataSourc
return (S[]) new ResourceCategory[size];
} else if (genericEnumType == DriftCategory.class) {
return (S[]) new DriftCategory[size];
+ } else if (genericEnumType == ExecutionStatus.class) {
+ return (S[]) new ExecutionStatus[size];
+ } else if (genericEnumType == PartitionEventType.class) {
+ return (S[]) new PartitionEventType[size];
} else {
throw new IllegalArgumentException(MSG.dataSource_rpc_error_unsupportedEnumType(genericEnumType.getName()));
}
commit ce71644a64af4a5d9aae5559e6975d8ad4dc5969
Author: Jirka Kremser <jkremser(a)redhat.com>
Date: Tue Dec 4 14:28:09 2012 +0100
i18n for Partition Events
diff --git a/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages.properties b/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages.properties
index a4157bc..47611e8 100644
--- a/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages.properties
+++ b/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages.properties
@@ -553,6 +553,21 @@ view_adminTopology_agentDetail_agentFailoverList = Agent Failover List
view_adminTopology_agentDetail_currentServer = Current Server
view_adminTopology_agentDetail_token = Token
view_adminTopology_partitionEvents = Partition Events
+view_adminTopology_partitionEvents_details = Details
+view_adminTopology_partitionEvents_detailsFilter = Details Filter
+view_adminTopology_partitionEvents_execStatusFilter = Execution Status Filter
+view_adminTopology_partitionEvents_execTime = Execution Time
+view_adminTopology_partitionEvents_executionStatus = Execution Status
+view_adminTopology_partitionEvents_forceRepartition = Force Repartition
+view_adminTopology_partitionEvents_initiatedBy = Initiated By
+view_adminTopology_partitionEvents_purgeAll = Purge All
+view_adminTopology_partitionEvents_type = Type
+view_adminTopology_partitionEvents_typeFilter = Type Filter
+view_adminTopology_partitionEventsDetail_agentAssignments = Agent Assignments
+view_adminTopology_partitionEventsDetail_agentAssignments_nothing = No agents were reassigned as a result of this partition event
+view_adminTopology_partitionEventsDetail_eventDetails = Event Details
+view_adminTopology_partitionEventsDetail_eventExecutionTime = Event Execution Time
+view_adminTopology_partitionEventsDetail_eventType = Event Type
view_adminTopology_remoteAgentInstall = Remote Agent Install
view_adminTopology_server_affinityGroup = Affinity Group
view_adminTopology_server_agentCount = Agent Count
diff --git a/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_cs.properties b/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_cs.properties
index 86c261b..35b7b46 100644
--- a/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_cs.properties
+++ b/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_cs.properties
@@ -572,6 +572,21 @@ view_adminTopology_agentDetail_agentFailoverList = Agentův failover list
view_adminTopology_agentDetail_currentServer = Současný server
view_adminTopology_agentDetail_token = Token
view_adminTopology_partitionEvents = Události o clusteru
+view_adminTopology_partitionEvents_details = Detaily
+view_adminTopology_partitionEvents_detailsFilter = Filtrovat podle detailu
+view_adminTopology_partitionEvents_execStatusFilter = Filtrovat podle stavu provedení
+view_adminTopology_partitionEvents_execTime = Doba provedení
+view_adminTopology_partitionEvents_executionStatus = Stav provedení
+view_adminTopology_partitionEvents_forceRepartition = Vynutit přerozdělení (repartition)
+view_adminTopology_partitionEvents_initiatedBy = Iniciováno kým
+view_adminTopology_partitionEvents_purgeAll = Smazat všechny
+view_adminTopology_partitionEvents_type = Typ
+view_adminTopology_partitionEvents_typeFilter = Filtrovat podle typu
+view_adminTopology_partitionEventsDetail_agentAssignments = Přiřazení agenta
+view_adminTopology_partitionEventsDetail_agentAssignments_nothing = Tato událost nezpůsobila přiřazení žádného agenta
+view_adminTopology_partitionEventsDetail_eventDetails = Detaily události
+view_adminTopology_partitionEventsDetail_eventExecutionTime = Doba provedení události
+view_adminTopology_partitionEventsDetail_eventType = Typ události
view_adminTopology_remoteAgentInstall = Nainstalovat vzdáleně agenta
view_adminTopology_server_affinityGroup = Afinitní skupina
view_adminTopology_server_agentCount = Počet agentů
diff --git a/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_de.properties b/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_de.properties
index 30a816c..6c2cc91 100644
--- a/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_de.properties
+++ b/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_de.properties
@@ -520,6 +520,21 @@ view_adminTopology_agents = Agenten
##view_adminTopology_agentDetail_currentServer = Current Server
##view_adminTopology_agentDetail_token = Token
view_adminTopology_partitionEvents = Partitionierungs-Ereignisse
+##view_adminTopology_partitionEvents_details = Details
+##view_adminTopology_partitionEvents_detailsFilter = Details Filter
+##view_adminTopology_partitionEvents_execStatusFilter = Execution Status Filter
+##view_adminTopology_partitionEvents_execTime = Execution Time
+##view_adminTopology_partitionEvents_executionStatus = Execution Status
+##view_adminTopology_partitionEvents_forceRepartition = Force Repartition
+##view_adminTopology_partitionEvents_initiatedBy = Initiated By
+##view_adminTopology_partitionEvents_purgeAll = Purge All
+##view_adminTopology_partitionEvents_type = Type
+##view_adminTopology_partitionEvents_typeFilter = Type Filter
+##view_adminTopology_partitionEventsDetail_agentAssignments = Agent Assignments
+##view_adminTopology_partitionEventsDetail_agentAssignments_nothing = No agents were reassigned as a result of this partition event
+##view_adminTopology_partitionEventsDetail_eventDetails = Event Details
+##view_adminTopology_partitionEventsDetail_eventExecutionTime = Event Execution Time
+##view_adminTopology_partitionEventsDetail_eventType = Event Type
view_adminTopology_remoteAgentInstall = Installation entfernter Agenten
##view_adminTopology_server_affinityGroup = Affinity Group
##view_adminTopology_server_agentCount = Agent Count
diff --git a/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_ja.properties b/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_ja.properties
index 657cb3c..2b74e1b 100644
--- a/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_ja.properties
+++ b/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_ja.properties
@@ -551,6 +551,21 @@ view_adminTopology_agents = エージェント
##view_adminTopology_agentDetail_currentServer = Current Server
##view_adminTopology_agentDetail_token = Token
view_adminTopology_partitionEvents = イベントの分類
+##view_adminTopology_partitionEvents_details = Details
+##view_adminTopology_partitionEvents_detailsFilter = Details Filter
+##view_adminTopology_partitionEvents_execStatusFilter = Execution Status Filter
+##view_adminTopology_partitionEvents_execTime = Execution Time
+##view_adminTopology_partitionEvents_executionStatus = Execution Status
+##view_adminTopology_partitionEvents_forceRepartition = Force Repartition
+##view_adminTopology_partitionEvents_initiatedBy = Initiated By
+##view_adminTopology_partitionEvents_purgeAll = Purge All
+##view_adminTopology_partitionEvents_type = Type
+##view_adminTopology_partitionEvents_typeFilter = Type Filter
+##view_adminTopology_partitionEventsDetail_agentAssignments = Agent Assignments
+##view_adminTopology_partitionEventsDetail_agentAssignments_nothing = No agents were reassigned as a result of this partition event
+##view_adminTopology_partitionEventsDetail_eventDetails = Event Details
+##view_adminTopology_partitionEventsDetail_eventExecutionTime = Event Execution Time
+##view_adminTopology_partitionEventsDetail_eventType = Event Type
view_adminTopology_remoteAgentInstall = リモートエージェントのインストール
##view_adminTopology_server_affinityGroup = Affinity Group
##view_adminTopology_server_agentCount = Agent Count
diff --git a/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_pt.properties b/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_pt.properties
index 00efcf3..ceb89bd 100644
--- a/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_pt.properties
+++ b/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_pt.properties
@@ -556,6 +556,21 @@ view_adminTopology_agents = Agentes
##view_adminTopology_agentDetail_currentServer = Current Server
##view_adminTopology_agentDetail_token = Token
view_adminTopology_partitionEvents = Eventos na Parti\u00E7\u00E3o
+##view_adminTopology_partitionEvents_details = Details
+##view_adminTopology_partitionEvents_detailsFilter = Details Filter
+##view_adminTopology_partitionEvents_execStatusFilter = Execution Status Filter
+##view_adminTopology_partitionEvents_execTime = Execution Time
+##view_adminTopology_partitionEvents_executionStatus = Execution Status
+##view_adminTopology_partitionEvents_forceRepartition = Force Repartition
+##view_adminTopology_partitionEvents_initiatedBy = Initiated By
+##view_adminTopology_partitionEvents_purgeAll = Purge All
+##view_adminTopology_partitionEvents_type = Type
+##view_adminTopology_partitionEvents_typeFilter = Type Filter
+##view_adminTopology_partitionEventsDetail_agentAssignments = Agent Assignments
+##view_adminTopology_partitionEventsDetail_agentAssignments_nothing = No agents were reassigned as a result of this partition event
+##view_adminTopology_partitionEventsDetail_eventDetails = Event Details
+##view_adminTopology_partitionEventsDetail_eventExecutionTime = Event Execution Time
+##view_adminTopology_partitionEventsDetail_eventType = Event Type
view_adminTopology_remoteAgentInstall = Instala\u00E7\u00E3o Remota de Agentes
##view_adminTopology_server_affinityGroup = Affinity Group
##view_adminTopology_server_agentCount = Agent Count
diff --git a/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_ru.properties b/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_ru.properties
index 6fa67b0..86c16cb 100644
--- a/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_ru.properties
+++ b/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_ru.properties
@@ -543,6 +543,21 @@
#view_adminTopology_agentDetail_currentServer = Current Server
#view_adminTopology_agentDetail_token = Token
#view_adminTopology_partitionEvents = Partition Events
+##view_adminTopology_partitionEvents_details = Details
+##view_adminTopology_partitionEvents_detailsFilter = Details Filter
+##view_adminTopology_partitionEvents_execStatusFilter = Execution Status Filter
+##view_adminTopology_partitionEvents_execTime = Execution Time
+##view_adminTopology_partitionEvents_executionStatus = Execution Status
+##view_adminTopology_partitionEvents_forceRepartition = Force Repartition
+##view_adminTopology_partitionEvents_initiatedBy = Initiated By
+##view_adminTopology_partitionEvents_purgeAll = Purge All
+##view_adminTopology_partitionEvents_type = Type
+##view_adminTopology_partitionEvents_typeFilter = Type Filter
+##view_adminTopology_partitionEventsDetail_agentAssignments = Agent Assignments
+##view_adminTopology_partitionEventsDetail_agentAssignments_nothing = No agents were reassigned as a result of this partition event
+##view_adminTopology_partitionEventsDetail_eventDetails = Event Details
+##view_adminTopology_partitionEventsDetail_eventExecutionTime = Event Execution Time
+##view_adminTopology_partitionEventsDetail_eventType = Event Type
#view_adminTopology_remoteAgentInstall = Remote Agent Install
#view_adminTopology_server_affinityGroup = Affinity Group
#view_adminTopology_server_agentCount = Agent Count
diff --git a/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_zh.properties b/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_zh.properties
index 29132f3..2c649de 100644
--- a/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_zh.properties
+++ b/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_zh.properties
@@ -543,6 +543,21 @@ view_adminTopology_agents = \u4ee3\u7406
##view_adminTopology_agentDetail_currentServer = Current Server
##view_adminTopology_agentDetail_token = Token
view_adminTopology_partitionEvents = Partition\u4e8b\u4ef6
+##view_adminTopology_partitionEvents_details = Details
+##view_adminTopology_partitionEvents_detailsFilter = Details Filter
+##view_adminTopology_partitionEvents_execStatusFilter = Execution Status Filter
+##view_adminTopology_partitionEvents_execTime = Execution Time
+##view_adminTopology_partitionEvents_executionStatus = Execution Status
+##view_adminTopology_partitionEvents_forceRepartition = Force Repartition
+##view_adminTopology_partitionEvents_initiatedBy = Initiated By
+##view_adminTopology_partitionEvents_purgeAll = Purge All
+##view_adminTopology_partitionEvents_type = Type
+##view_adminTopology_partitionEvents_typeFilter = Type Filter
+##view_adminTopology_partitionEventsDetail_agentAssignments = Agent Assignments
+##view_adminTopology_partitionEventsDetail_agentAssignments_nothing = No agents were reassigned as a result of this partition event
+##view_adminTopology_partitionEventsDetail_eventDetails = Event Details
+##view_adminTopology_partitionEventsDetail_eventExecutionTime = Event Execution Time
+##view_adminTopology_partitionEventsDetail_eventType = Event Type
view_adminTopology_remoteAgentInstall = \u8fdc\u7a0b\u4ee3\u7406\u5b89\u88c5
##view_adminTopology_server_affinityGroup = Affinity Group
##view_adminTopology_server_agentCount = Agent Count
commit a87579ed9c520b3661ac443a4efbc58c8d8da3ca
Author: Jirka Kremser <jkremser(a)redhat.com>
Date: Tue Dec 4 11:58:26 2012 +0100
new methods for EventPartition table, UI imporovements for event partition view
diff --git a/modules/core/domain/src/main/java/org/rhq/core/domain/criteria/PartitionEventCriteria.java b/modules/core/domain/src/main/java/org/rhq/core/domain/criteria/PartitionEventCriteria.java
index dd9910e..813d2b8 100644
--- a/modules/core/domain/src/main/java/org/rhq/core/domain/criteria/PartitionEventCriteria.java
+++ b/modules/core/domain/src/main/java/org/rhq/core/domain/criteria/PartitionEventCriteria.java
@@ -23,7 +23,6 @@ import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import org.rhq.core.domain.cloud.PartitionEvent;
-import org.rhq.core.domain.content.Package;
import org.rhq.core.domain.util.PageOrdering;
/**
@@ -36,6 +35,8 @@ import org.rhq.core.domain.util.PageOrdering;
public class PartitionEventCriteria extends Criteria {
private static final long serialVersionUID = 1L;
+
+ public static final String SORT_FIELD_CTIME = "ctime";
private Integer filterId;
private String filterEventType;
@@ -52,7 +53,7 @@ public class PartitionEventCriteria extends Criteria {
}
public Class<?> getPersistentClass() {
- return Package.class;
+ return PartitionEvent.class;
}
public void addFilterId(Integer id) {
@@ -72,7 +73,7 @@ public class PartitionEventCriteria extends Criteria {
}
public void addSortCtime(PageOrdering sort) {
- addSortField("ctime");
+ addSortField(SORT_FIELD_CTIME);
this.sortCtime = sort;
}
}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/AdministrationView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/AdministrationView.java
index e969a70..5c18d1f 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/AdministrationView.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/AdministrationView.java
@@ -35,6 +35,7 @@ import org.rhq.enterprise.gui.coregui.client.admin.templates.AlertDefinitionTemp
import org.rhq.enterprise.gui.coregui.client.admin.templates.DriftDefinitionTemplateTypeView;
import org.rhq.enterprise.gui.coregui.client.admin.templates.MetricTemplateTypeView;
import org.rhq.enterprise.gui.coregui.client.admin.topology.AgentTableView;
+import org.rhq.enterprise.gui.coregui.client.admin.topology.PartitionEventTableView;
import org.rhq.enterprise.gui.coregui.client.admin.topology.ServerTableView;
import org.rhq.enterprise.gui.coregui.client.admin.users.UsersView;
import org.rhq.enterprise.gui.coregui.client.components.FullHTMLPane;
@@ -189,10 +190,10 @@ public class AdministrationView extends AbstractSectionedLeftNavigationView {
}
}, getGlobalPermissions().contains(Permission.MANAGE_INVENTORY));
- NavigationItem partitionEventsGwt = new NavigationItem(ServerTableView.VIEW_ID, new ViewFactory() {
+ NavigationItem partitionEventsGwt = new NavigationItem(PartitionEventTableView.VIEW_ID, new ViewFactory() {
public Canvas createView() {
- return new ServerTableView(extendLocatorId(ServerTableView.VIEW_ID.getName()),
- MSG.view_adminTopology_servers() + " (GWT)", null);
+ return new PartitionEventTableView(extendLocatorId(PartitionEventTableView.VIEW_ID.getName()),
+ MSG.view_adminTopology_partitionEvents() + " (GWT)");
}
}, getGlobalPermissions().contains(Permission.MANAGE_INVENTORY));
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventDatasource.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventDatasource.java
index 96f06c6..048f071 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventDatasource.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventDatasource.java
@@ -52,6 +52,11 @@ import org.rhq.enterprise.gui.coregui.client.util.RPCDataSource;
*/
public class PartitionEventDatasource extends RPCDataSource<PartitionEvent, PartitionEventCriteria> {
+ // filters
+ public static final String FILTER_EVENT_DETAIL = "eventDetail";
+ public static final String FILTER_EXECUTION_STATUS = "executionStatus";
+ public static final String FILTER_EVENT_TYPE = "eventType";
+
public PartitionEventDatasource() {
super();
List<DataSourceField> fields = addDataSourceFields();
@@ -87,23 +92,24 @@ public class PartitionEventDatasource extends RPCDataSource<PartitionEvent, Part
@Override
protected void executeFetch(final DSRequest request, final DSResponse response, PartitionEventCriteria criteria) {
- final PageControl pc = getPageControl(request);
+ // final PageControl pc = getPageControl(request);
// TODO: call find by criteria method on PartitionEventManagerBean
- GWTServiceLookup.getCloudService().findPartitionEventsByCriteria(criteria, new AsyncCallback<PageList<PartitionEvent>>() {
- public void onSuccess(PageList<PartitionEvent> result) {
-// response.setData(buildRecords(result));
- response.setTotalRows(result.size());
- processResponse(request.getRequestId(), response);
- }
-
- @Override
- public void onFailure(Throwable t) {
- //todo: CoreGUI.getErrorHandler().handleError(MSG.view_admin_plugins_loadFailure(), t);
- response.setStatus(DSResponse.STATUS_FAILURE);
- processResponse(request.getRequestId(), response);
- }
- });
+ GWTServiceLookup.getCloudService().findPartitionEventsByCriteria(criteria,
+ new AsyncCallback<PageList<PartitionEvent>>() {
+ public void onSuccess(PageList<PartitionEvent> result) {
+ response.setData(buildRecords(result));
+ response.setTotalRows(result.size());
+ processResponse(request.getRequestId(), response);
+ }
+
+ @Override
+ public void onFailure(Throwable t) {
+ //todo: CoreGUI.getErrorHandler().handleError(MSG.view_admin_plugins_loadFailure(), t);
+ response.setStatus(DSResponse.STATUS_FAILURE);
+ processResponse(request.getRequestId(), response);
+ }
+ });
}
/**
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventTableView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventTableView.java
index 3e7a05d..0144603 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventTableView.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventTableView.java
@@ -18,35 +18,36 @@
*/
package org.rhq.enterprise.gui.coregui.client.admin.topology;
-import static org.rhq.enterprise.gui.coregui.client.admin.topology.FailoverListItemDatasourceField.FIELD_ORDINAL;
-
import java.util.ArrayList;
import java.util.List;
import com.google.gwt.user.client.rpc.AsyncCallback;
+import com.smartgwt.client.data.Criteria;
+import com.smartgwt.client.data.SortSpecifier;
import com.smartgwt.client.types.SortDirection;
import com.smartgwt.client.util.BooleanCallback;
import com.smartgwt.client.util.SC;
import com.smartgwt.client.widgets.Canvas;
-import com.smartgwt.client.widgets.grid.CellFormatter;
+import com.smartgwt.client.widgets.form.fields.SpacerItem;
+import com.smartgwt.client.widgets.form.fields.TextItem;
import com.smartgwt.client.widgets.grid.ListGrid;
import com.smartgwt.client.widgets.grid.ListGridField;
import com.smartgwt.client.widgets.grid.ListGridRecord;
import org.rhq.core.domain.authz.Permission;
-import org.rhq.core.domain.cloud.Server;
+import org.rhq.core.domain.cloud.PartitionEvent;
+import org.rhq.core.domain.criteria.PartitionEventCriteria;
import org.rhq.enterprise.gui.coregui.client.CoreGUI;
import org.rhq.enterprise.gui.coregui.client.IconEnum;
import org.rhq.enterprise.gui.coregui.client.admin.AdministrationView;
+import org.rhq.enterprise.gui.coregui.client.components.form.EnumSelectItem;
import org.rhq.enterprise.gui.coregui.client.components.table.AuthorizedTableAction;
import org.rhq.enterprise.gui.coregui.client.components.table.TableActionEnablement;
import org.rhq.enterprise.gui.coregui.client.components.table.TableSection;
import org.rhq.enterprise.gui.coregui.client.components.view.HasViewName;
import org.rhq.enterprise.gui.coregui.client.components.view.ViewName;
import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup;
-import org.rhq.enterprise.gui.coregui.client.util.StringUtility;
import org.rhq.enterprise.gui.coregui.client.util.message.Message;
-import org.rhq.enterprise.gui.coregui.client.util.selenium.SeleniumUtility;
/**
* @author Jiri Kremser
@@ -55,50 +56,57 @@ import org.rhq.enterprise.gui.coregui.client.util.selenium.SeleniumUtility;
public class PartitionEventTableView extends TableSection<PartitionEventDatasource> implements HasViewName {
public static final ViewName VIEW_ID = new ViewName("PartitionEvents(GWT)", "Partition Events(GWT)",
- IconEnum.SERVERS);
+ IconEnum.EVENTS);
public static final String VIEW_PATH = AdministrationView.VIEW_ID + "/"
+ AdministrationView.SECTION_TOPOLOGY_VIEW_ID + "/" + VIEW_ID;
private final boolean showActions = true;
+ private static final Criteria INITIAL_CRITERIA = new Criteria();
+
+ private static SortSpecifier DEFAULT_SORT_SPECIFIER = new SortSpecifier(PartitionEventCriteria.SORT_FIELD_CTIME,
+ SortDirection.DESCENDING);
+
public PartitionEventTableView(String locatorId, String tableTitle) {
- super(locatorId, tableTitle);
+ super(locatorId, tableTitle, INITIAL_CRITERIA, new SortSpecifier[] { DEFAULT_SORT_SPECIFIER });
setHeight100();
setWidth100();
+
+ setInitialCriteriaFixed(false);
setDataSource(new PartitionEventDatasource());
}
@Override
+ protected void configureTableFilters() {
+ final EnumSelectItem statusFilter = new EnumSelectItem(PartitionEventDatasource.FILTER_EXECUTION_STATUS,
+ "i18n Execution Status", PartitionEvent.ExecutionStatus.class, null, null);
+
+ final EnumSelectItem typeFilter = new EnumSelectItem(PartitionEventDatasource.FILTER_EVENT_TYPE, "i18n Type",
+ PartitionEvent.ExecutionStatus.class, null, null);
+
+ final TextItem detail = new TextItem(PartitionEventDatasource.FILTER_EVENT_DETAIL, "i18n Details Filter");
+
+ // startDateFilter = new DateFilterItem(DateFilterItem.START_DATE_FILTER, MSG.filter_from_date());
+ // endDateFilter = new DateFilterItem(DateFilterItem.END_DATE_FILTER, MSG.filter_to_date());
+
+ SpacerItem spacerItem = new SpacerItem();
+ spacerItem.setColSpan(2);
+
+ if (isShowFilterForm()) {
+ setFilterFormItems(statusFilter, detail, typeFilter);
+ }
+ }
+
+ @Override
protected void configureTable() {
super.configureTable();
List<ListGridField> fields = getDataSource().getListGridFields();
ListGrid listGrid = getListGrid();
listGrid.setFields(fields.toArray(new ListGridField[fields.size()]));
if (showActions) {
- listGrid.sort(FIELD_NAME, SortDirection.ASCENDING);
+ // listGrid.sort(FIELD_NAME, SortDirection.ASCENDING);
showActions();
- } else {
- // sorting by order field
- listGrid.sort(FIELD_ORDINAL.propertyName(), SortDirection.ASCENDING);
- }
- for (ListGridField field : fields) {
- // adding the cell formatter for name field (clickable link)
- if (field.getName() == FIELD_NAME) {
- field.setCellFormatter(new CellFormatter() {
- @Override
- public String format(Object value, ListGridRecord record, int rowNum, int colNum) {
- if (value == null) {
- return "";
- }
- String detailsUrl = "#" + VIEW_PATH + "/" + record.getAttributeAsString(FIELD_ID);
- String formattedValue = StringUtility.escapeHtml(value.toString());
- return SeleniumUtility.getLocatableHref(detailsUrl, formattedValue, null);
-
- }
- });
- }
- // TODO: adding the cell formatter for affinity group (clickable link)
}
}
@@ -108,21 +116,20 @@ public class PartitionEventTableView extends TableSection<PartitionEventDatasour
}
private void showActions() {
- addTableAction(extendLocatorId("setNormal"), MSG.view_adminTopology_server_setNormal(),
+
+ addTableAction(extendLocatorId("removeSelected"), MSG.view_adminTopology_server_removeSelected(),
MSG.common_msg_areYouSure(), new AuthorizedTableAction(this, TableActionEnablement.ANY,
Permission.MANAGE_SETTINGS) {
public void executeAction(final ListGridRecord[] selections, Object actionValue) {
List<String> selectedNames = getSelectedNames(selections);
- // TODO: msg
- // String message = MSG.view_admin_plugins_serverDisableConfirm(selectedNames.toString());
- String message = "Really? Normal? For all I've done for you? " + selectedNames;
+ String message = "Really? Delete? For all I've done for you? " + selectedNames;
SC.ask(message, new BooleanCallback() {
public void execute(Boolean confirmed) {
if (confirmed) {
int[] selectedIds = getSelectedIds(selections);
SC.say("setting servers to maintenance mode, ids: " + selectedIds);
- GWTServiceLookup.getCloudService().updateServerMode(selectedIds,
- Server.OperationMode.NORMAL, new AsyncCallback<Void>() {
+ GWTServiceLookup.getCloudService().deletePartitionEvents(selectedIds,
+ new AsyncCallback<Void>() {
public void onSuccess(Void arg0) {
// TODO: msg
Message msg = new Message(MSG
@@ -148,20 +155,20 @@ public class PartitionEventTableView extends TableSection<PartitionEventDatasour
}
});
- addTableAction(extendLocatorId("setMaintenance"), MSG.view_adminTopology_server_setMaintenance(),
- new AuthorizedTableAction(this, TableActionEnablement.ANY, Permission.MANAGE_SETTINGS) {
+ addTableAction(extendLocatorId("purgeAll"), "i18n purge all",
+ MSG.common_msg_areYouSure(), new AuthorizedTableAction(this, TableActionEnablement.ANY,
+ Permission.MANAGE_SETTINGS) {
public void executeAction(final ListGridRecord[] selections, Object actionValue) {
List<String> selectedNames = getSelectedNames(selections);
// TODO: msg
- // String message = MSG.view_admin_plugins_serverDisableConfirm(selectedNames.toString());
- String message = "Really? Maitenance? For all I've done for you? " + selectedNames;
+ // String message = MSG.view_admin_plugins_serverDisableConfirm(selectedNames.toString());
+ String message = "Really? Normal? For all I've done for you? " + selectedNames;
SC.ask(message, new BooleanCallback() {
public void execute(Boolean confirmed) {
if (confirmed) {
int[] selectedIds = getSelectedIds(selections);
SC.say("setting servers to maintenance mode, ids: " + selectedIds);
- GWTServiceLookup.getCloudService().updateServerMode(selectedIds,
- Server.OperationMode.MAINTENANCE, new AsyncCallback<Void>() {
+ GWTServiceLookup.getCloudService().purgeAllEvents(new AsyncCallback<Void>() {
public void onSuccess(Void arg0) {
// TODO: msg
Message msg = new Message(MSG
@@ -187,19 +194,18 @@ public class PartitionEventTableView extends TableSection<PartitionEventDatasour
}
});
- addTableAction(extendLocatorId("removeSelected"), MSG.view_adminTopology_server_removeSelected(),
- MSG.common_msg_areYouSure(), new AuthorizedTableAction(this, TableActionEnablement.ANY,
- Permission.MANAGE_SETTINGS) {
+ addTableAction(extendLocatorId("forceRepartition"), MSG.view_adminTopology_server_setMaintenance(),
+ new AuthorizedTableAction(this, TableActionEnablement.ANY, Permission.MANAGE_SETTINGS) {
public void executeAction(final ListGridRecord[] selections, Object actionValue) {
List<String> selectedNames = getSelectedNames(selections);
- String message = "Really? Delete? For all I've done for you? " + selectedNames;
+ // TODO: msg
+ // String message = MSG.view_admin_plugins_serverDisableConfirm(selectedNames.toString());
+ String message = "Really? Repartition? For all I've done for you? " + selectedNames;
SC.ask(message, new BooleanCallback() {
public void execute(Boolean confirmed) {
if (confirmed) {
- int[] selectedIds = getSelectedIds(selections);
- SC.say("setting servers to maintenance mode, ids: " + selectedIds);
- GWTServiceLookup.getCloudService().deleteServers(selectedIds,
- new AsyncCallback<Void>() {
+ SC.say("repartition is now forced");
+ GWTServiceLookup.getCloudService().cloudPartitionEventRequest(new AsyncCallback<Void>() {
public void onSuccess(Void arg0) {
// TODO: msg
Message msg = new Message(MSG
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/CloudGWTService.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/CloudGWTService.java
index dbfbfbf..6ff748f 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/CloudGWTService.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/CloudGWTService.java
@@ -58,5 +58,10 @@ public interface CloudGWTService extends RemoteService {
List<FailoverListDetails> getFailoverListDetailsByAgentId(int agentId, PageControl pc) throws RuntimeException;;
PageList<PartitionEvent> findPartitionEventsByCriteria(PartitionEventCriteria criteria) throws RuntimeException;
-
+
+ void cloudPartitionEventRequest() throws RuntimeException;
+
+ void purgeAllEvents() throws RuntimeException;
+
+ void deletePartitionEvents(int[] eventIds) throws RuntimeException;
}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/CloudGWTServiceImpl.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/CloudGWTServiceImpl.java
index 84a87b8..e3165ad 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/CloudGWTServiceImpl.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/CloudGWTServiceImpl.java
@@ -29,6 +29,7 @@ import org.apache.commons.lang.ArrayUtils;
import org.rhq.core.domain.cloud.FailoverListDetails;
import org.rhq.core.domain.cloud.PartitionEvent;
+import org.rhq.core.domain.cloud.PartitionEventType;
import org.rhq.core.domain.cloud.Server;
import org.rhq.core.domain.cloud.Server.OperationMode;
import org.rhq.core.domain.cloud.composite.ServerWithAgentCountComposite;
@@ -50,7 +51,7 @@ public class CloudGWTServiceImpl extends AbstractGWTServiceImpl implements Cloud
private static final long serialVersionUID = 1L;
private CloudManagerLocal cloudManager = LookupUtil.getCloudManager();
-
+
private PartitionEventManagerLocal partitionEventManager = LookupUtil.getPartitionEventManager();
@Override
@@ -102,7 +103,8 @@ public class CloudGWTServiceImpl extends AbstractGWTServiceImpl implements Cloud
}
@Override
- public List<FailoverListDetails> getFailoverListDetailsByAgentId(int agentId, PageControl pc) throws RuntimeException {
+ public List<FailoverListDetails> getFailoverListDetailsByAgentId(int agentId, PageControl pc)
+ throws RuntimeException {
try {
return SerialUtility.prepare(cloudManager.getFailoverListDetailsByAgentId(agentId, pc),
"CloudGWTServiceImpl.getFailoverListDetailsByAgentId");
@@ -112,13 +114,43 @@ public class CloudGWTServiceImpl extends AbstractGWTServiceImpl implements Cloud
}
@Override
- public PageList<PartitionEvent> findPartitionEventsByCriteria(PartitionEventCriteria criteria) throws RuntimeException {
- try {
- return SerialUtility.prepare(partitionEventManager.findPartitionEventsByCriteria(getSessionSubject(), criteria),
- "CloudGWTServiceImpl.findPartitionEventsByCriteria");
- } catch (Throwable t) {
- throw getExceptionToThrowToClient(t);
+ public PageList<PartitionEvent> findPartitionEventsByCriteria(PartitionEventCriteria criteria)
+ throws RuntimeException {
+ try {
+ return SerialUtility.prepare(
+ partitionEventManager.findPartitionEventsByCriteria(getSessionSubject(), criteria),
+ "CloudGWTServiceImpl.findPartitionEventsByCriteria");
+ } catch (Throwable t) {
+ throw getExceptionToThrowToClient(t);
+ }
+ }
+
+ @Override
+ public void cloudPartitionEventRequest() throws RuntimeException {
+ try {
+ partitionEventManager.cloudPartitionEventRequest(getSessionSubject(),
+ PartitionEventType.ADMIN_INITIATED_PARTITION, "");
+ } catch (Throwable t) {
+ throw getExceptionToThrowToClient(t);
+ }
+ }
+
+ @Override
+ public void purgeAllEvents() throws RuntimeException {
+ try {
+ partitionEventManager.purgeAllEvents(getSessionSubject());
+ } catch (Throwable t) {
+ throw getExceptionToThrowToClient(t);
+ }
}
+
+ @Override
+ public void deletePartitionEvents(int[] eventIds) throws RuntimeException {
+ try {
+ partitionEventManager.deletePartitionEvents(getSessionSubject(), ArrayUtils.toObject(eventIds));
+ } catch (Throwable t) {
+ throw getExceptionToThrowToClient(t);
+ }
}
-
+
}
commit b455504ebe90993681390a9109016c7811e88fa1
Merge: ac812c4 943cc78
Author: Jirka Kremser <jkremser(a)redhat.com>
Date: Sat Dec 1 01:20:57 2012 +0100
Merge branch 'master' into jkremser/ha-jsf-to-gwt-rewrite
diff --cc modules/enterprise/gui/coregui/src/main/webapp/WEB-INF/web.xml
index b32c98c,b6c1909..124c979
--- a/modules/enterprise/gui/coregui/src/main/webapp/WEB-INF/web.xml
+++ b/modules/enterprise/gui/coregui/src/main/webapp/WEB-INF/web.xml
@@@ -189,18 -197,6 +197,10 @@@
<servlet-name>org.rhq.enterprise.gui.coregui.CoreGUI PlatformUtilizationGWTService</servlet-name>
<servlet-class>org.rhq.enterprise.gui.coregui.server.gwt.PlatformUtilizationGWTServiceImpl</servlet-class>
</servlet>
+ <servlet>
+ <servlet-name>org.rhq.enterprise.gui.coregui.CoreGUI CloudGWTService</servlet-name>
+ <servlet-class>org.rhq.enterprise.gui.coregui.server.gwt.CloudGWTServiceImpl</servlet-class>
+ </servlet>
- <servlet>
- <servlet-name>ReportExporter</servlet-name>
- <servlet-class>org.rhq.enterprise.gui.coregui.server.reports.ReportExportServlet</servlet-class>
- </servlet>
<servlet>
<servlet-name>Resteasy</servlet-name>
@@@ -373,18 -369,6 +373,10 @@@
<servlet-name>org.rhq.enterprise.gui.coregui.CoreGUI PlatformUtilizationGWTService</servlet-name>
<url-pattern>/org.rhq.enterprise.gui.coregui.CoreGUI/PlatformUtilizationGWTService</url-pattern>
</servlet-mapping>
+ <servlet-mapping>
+ <servlet-name>org.rhq.enterprise.gui.coregui.CoreGUI CloudGWTService</servlet-name>
+ <url-pattern>/org.rhq.enterprise.gui.coregui.CoreGUI/CloudGWTService</url-pattern>
+ </servlet-mapping>
- <servlet-mapping>
- <servlet-name>ReportExporter</servlet-name>
- <url-pattern>/ReportExporter</url-pattern>
- </servlet-mapping>
<servlet-mapping>
<servlet-name>Resteasy</servlet-name>
commit ac812c4cc41e7aa7f5e2882c853c2e77859054a5
Author: Jirka Kremser <jkremser(a)redhat.com>
Date: Fri Nov 30 13:53:45 2012 +0100
partition event table, datasource and finder for PartitionEvent by criteria have been added
diff --git a/modules/core/domain/src/main/java/org/rhq/core/domain/criteria/PartitionEventCriteria.java b/modules/core/domain/src/main/java/org/rhq/core/domain/criteria/PartitionEventCriteria.java
new file mode 100644
index 0000000..dd9910e
--- /dev/null
+++ b/modules/core/domain/src/main/java/org/rhq/core/domain/criteria/PartitionEventCriteria.java
@@ -0,0 +1,78 @@
+/*
+ * RHQ Management Platform
+ * Copyright (C) 2005-2012 Red Hat, Inc.
+ * All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation version 2 of the License.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+package org.rhq.core.domain.criteria;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+
+import org.rhq.core.domain.cloud.PartitionEvent;
+import org.rhq.core.domain.content.Package;
+import org.rhq.core.domain.util.PageOrdering;
+
+/**
+ * Criteria object for querying {@link PartitionEvent}s.
+ *
+ * @author Jiri Kremser
+ */
+(a)XmlAccessorType(XmlAccessType.FIELD)
+@SuppressWarnings("unused")
+public class PartitionEventCriteria extends Criteria {
+
+ private static final long serialVersionUID = 1L;
+
+ private Integer filterId;
+ private String filterEventType;
+ private String filterExecutionStatus;
+ private String filterEventDetail;
+
+ private PageOrdering sortCtime;
+
+ public PartitionEventCriteria() {
+ // filterOverrides.put("packageTypeId", "packageType.id = ? ");
+ // filterOverrides.put("repoId", "id IN (" +
+ // "SELECT rpv.packageVersion.generalPackage.id FROM RepoPackageVersion rpv WHERE rpv.repo.id = ?" +
+ // ")");
+ }
+
+ public Class<?> getPersistentClass() {
+ return Package.class;
+ }
+
+ public void addFilterId(Integer id) {
+ this.filterId = id;
+ }
+
+ public void addFilterEventType(String eventType) {
+ this.filterEventType = eventType;
+ }
+
+ public void addFilterExecutionStatus(String executionStatus) {
+ this.filterExecutionStatus = executionStatus;
+ }
+
+ public void addFilterEventDetail(String eventDetail) {
+ this.filterEventDetail = eventDetail;
+ }
+
+ public void addSortCtime(PageOrdering sort) {
+ addSortField("ctime");
+ this.sortCtime = sort;
+ }
+}
diff --git a/modules/core/domain/src/main/java/org/rhq/core/domain/resource/Agent.java b/modules/core/domain/src/main/java/org/rhq/core/domain/resource/Agent.java
index e96e1d3..1cf41b6 100644
--- a/modules/core/domain/src/main/java/org/rhq/core/domain/resource/Agent.java
+++ b/modules/core/domain/src/main/java/org/rhq/core/domain/resource/Agent.java
@@ -222,7 +222,7 @@ public class Agent implements Serializable {
/**
* Creates a new instance of Agent
*/
- protected Agent() {
+ public Agent() {
}
/**
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/AdministrationView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/AdministrationView.java
index 189da3f..e969a70 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/AdministrationView.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/AdministrationView.java
@@ -188,13 +188,20 @@ public class AdministrationView extends AbstractSectionedLeftNavigationView {
MSG.view_adminTopology_agents() + " (GWT)", null);
}
}, getGlobalPermissions().contains(Permission.MANAGE_INVENTORY));
+
+ NavigationItem partitionEventsGwt = new NavigationItem(ServerTableView.VIEW_ID, new ViewFactory() {
+ public Canvas createView() {
+ return new ServerTableView(extendLocatorId(ServerTableView.VIEW_ID.getName()),
+ MSG.view_adminTopology_servers() + " (GWT)", null);
+ }
+ }, getGlobalPermissions().contains(Permission.MANAGE_INVENTORY));
NavigationSection topologyRegion = null;
if (isRHQ) {
topologyRegion = new NavigationSection(SECTION_TOPOLOGY_VIEW_ID, serversItem, agentsItem,
- affinityGroupsItem, partitionEventsItem, serversItemGwt, agentsItemGwt, remoteAgentInstallItem);
+ affinityGroupsItem, partitionEventsItem, serversItemGwt, agentsItemGwt, partitionEventsGwt, remoteAgentInstallItem);
} else {
- topologyRegion = new NavigationSection(SECTION_TOPOLOGY_VIEW_ID, serversItem, agentsItem,
+ topologyRegion = new NavigationSection(SECTION_TOPOLOGY_VIEW_ID, serversItem, partitionEventsGwt, agentsItem,
affinityGroupsItem, partitionEventsItem, serversItemGwt, agentsItemGwt);
}
return topologyRegion;
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentNodeDatasource.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentNodeDatasource.java
index d4e758a..96bce3c 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentNodeDatasource.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentNodeDatasource.java
@@ -144,7 +144,7 @@ public class AgentNodeDatasource extends RPCDataSource<Agent, Criteria> {
@Override
public Agent copyValues(Record from) {
- throw new UnsupportedOperationException("ServerTableView.CloudDataSourcepublic Server copyValues(Record from)");
+ throw new UnsupportedOperationException("AgentNodeDatasource.copyValues(Record from)");
}
@Override
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/FailoverListItemDatasource.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/FailoverListItemDatasource.java
index 0e21356..fc5f3a5 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/FailoverListItemDatasource.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/FailoverListItemDatasource.java
@@ -82,7 +82,7 @@ public class FailoverListItemDatasource extends ServerDatasource<FailoverListDet
fields.add(FIELD_ORDINAL.getListGridField("55"));
fields.add(FIELD_NAME.getListGridField("*"));
fields.add(FIELD_OPERATION_MODE.getListGridField("90"));
- fields.add(FIELD_ADDRESS.getListGridField("110"));
+ fields.add(FIELD_ADDRESS.getListGridField("120"));
fields.add(FIELD_PORT.getListGridField("90"));
fields.add(FIELD_SECURE_PORT.getListGridField("75"));
@@ -142,7 +142,7 @@ public class FailoverListItemDatasource extends ServerDatasource<FailoverListDet
@Override
public FailoverListDetails copyValues(Record from) {
- throw new UnsupportedOperationException("ServerTableView.CloudDataSourcepublic Server copyValues(Record from)");
+ throw new UnsupportedOperationException("FailoverListItemDatasource.copyValues(Record from)");
}
@Override
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventDatasource.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventDatasource.java
new file mode 100644
index 0000000..96f06c6
--- /dev/null
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventDatasource.java
@@ -0,0 +1,156 @@
+/*
+ * RHQ Management Platform
+ * Copyright (C) 2005-2012 Red Hat, Inc.
+ * All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation version 2 of the License.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+package org.rhq.enterprise.gui.coregui.client.admin.topology;
+
+import static org.rhq.enterprise.gui.coregui.client.admin.topology.PartitionEventDatasourceField.FIELD_CTIME;
+import static org.rhq.enterprise.gui.coregui.client.admin.topology.PartitionEventDatasourceField.FIELD_EVENT_DETAIL;
+import static org.rhq.enterprise.gui.coregui.client.admin.topology.PartitionEventDatasourceField.FIELD_EVENT_TYPE;
+import static org.rhq.enterprise.gui.coregui.client.admin.topology.PartitionEventDatasourceField.FIELD_EXECUTION_STATUS;
+import static org.rhq.enterprise.gui.coregui.client.admin.topology.PartitionEventDatasourceField.FIELD_ID;
+import static org.rhq.enterprise.gui.coregui.client.admin.topology.PartitionEventDatasourceField.FIELD_SUBJECT_NAME;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import com.google.gwt.user.client.rpc.AsyncCallback;
+import com.smartgwt.client.data.DSRequest;
+import com.smartgwt.client.data.DSResponse;
+import com.smartgwt.client.data.DataSourceField;
+import com.smartgwt.client.data.Record;
+import com.smartgwt.client.data.fields.DataSourceIntegerField;
+import com.smartgwt.client.widgets.grid.ListGridField;
+import com.smartgwt.client.widgets.grid.ListGridRecord;
+
+import org.rhq.core.domain.cloud.PartitionEvent;
+import org.rhq.core.domain.criteria.PartitionEventCriteria;
+import org.rhq.core.domain.util.PageControl;
+import org.rhq.core.domain.util.PageList;
+import org.rhq.core.domain.util.PageOrdering;
+import org.rhq.enterprise.gui.coregui.client.components.table.TimestampCellFormatter;
+import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup;
+import org.rhq.enterprise.gui.coregui.client.util.RPCDataSource;
+
+/**
+ * @author Jirka Kremser
+ *
+ */
+public class PartitionEventDatasource extends RPCDataSource<PartitionEvent, PartitionEventCriteria> {
+
+ public PartitionEventDatasource() {
+ super();
+ List<DataSourceField> fields = addDataSourceFields();
+ addFields(fields);
+ }
+
+ @Override
+ protected List<DataSourceField> addDataSourceFields() {
+ List<DataSourceField> fields = super.addDataSourceFields();
+ DataSourceField idField = new DataSourceIntegerField(FIELD_ID.propertyName(), FIELD_ID.title(), 50);
+ idField.setPrimaryKey(true);
+ idField.setHidden(true);
+ fields.add(idField);
+ return fields;
+ }
+
+ public List<ListGridField> getListGridFields() {
+ List<ListGridField> fields = new ArrayList<ListGridField>();
+
+ ListGridField idField = FIELD_ID.getListGridField();
+ idField.setHidden(true);
+ fields.add(idField);
+ ListGridField executionTimeField = FIELD_CTIME.getListGridField("120");
+ TimestampCellFormatter.prepareDateField(executionTimeField);
+ fields.add(executionTimeField);
+ fields.add(FIELD_EVENT_TYPE.getListGridField("140"));
+ fields.add(FIELD_EVENT_DETAIL.getListGridField("165"));
+ fields.add(FIELD_SUBJECT_NAME.getListGridField("90"));
+ fields.add(FIELD_EXECUTION_STATUS.getListGridField("90"));
+
+ return fields;
+ }
+
+ @Override
+ protected void executeFetch(final DSRequest request, final DSResponse response, PartitionEventCriteria criteria) {
+ final PageControl pc = getPageControl(request);
+
+ // TODO: call find by criteria method on PartitionEventManagerBean
+ GWTServiceLookup.getCloudService().findPartitionEventsByCriteria(criteria, new AsyncCallback<PageList<PartitionEvent>>() {
+ public void onSuccess(PageList<PartitionEvent> result) {
+// response.setData(buildRecords(result));
+ response.setTotalRows(result.size());
+ processResponse(request.getRequestId(), response);
+ }
+
+ @Override
+ public void onFailure(Throwable t) {
+ //todo: CoreGUI.getErrorHandler().handleError(MSG.view_admin_plugins_loadFailure(), t);
+ response.setStatus(DSResponse.STATUS_FAILURE);
+ processResponse(request.getRequestId(), response);
+ }
+ });
+ }
+
+ /**
+ * Returns a prepopulated PageControl based on the provided DSRequest. This will set sort fields,
+ * pagination, but *not* filter fields.
+ *
+ * @param request the request to turn into a page control
+ * @return the page control for passing to criteria and other queries
+ */
+ protected PageControl getPageControl(DSRequest request) {
+ // Initialize paging.
+ PageControl pageControl = new PageControl(0, getDataPageSize());
+
+ // Initialize sorting.
+ String sortBy = request.getAttribute("sortBy");
+ if (sortBy != null) {
+ String[] sorts = sortBy.split(",");
+ for (String sort : sorts) {
+ PageOrdering ordering = (sort.startsWith("-")) ? PageOrdering.DESC : PageOrdering.ASC;
+ String columnName = (ordering == PageOrdering.DESC) ? sort.substring(1) : sort;
+ pageControl.addDefaultOrderingField(columnName, ordering);
+ }
+ }
+
+ return pageControl;
+ }
+
+ @Override
+ public PartitionEvent copyValues(Record from) {
+ throw new UnsupportedOperationException("PartitionEventDatasource.copyValues(Record from)");
+ }
+
+ @Override
+ public ListGridRecord copyValues(PartitionEvent from) {
+ ListGridRecord record = new ListGridRecord();
+ record.setAttribute(FIELD_ID.propertyName(), from.getId());
+ record.setAttribute(FIELD_CTIME.propertyName(), from.getCtime());
+ record.setAttribute(FIELD_EVENT_TYPE.propertyName(), from.getEventType());
+ record.setAttribute(FIELD_EVENT_DETAIL.propertyName(), from.getEventDetail());
+ record.setAttribute(FIELD_SUBJECT_NAME.propertyName(), from.getSubjectName());
+ record.setAttribute(FIELD_EXECUTION_STATUS.propertyName(), from.getExecutionStatus());
+ return record;
+ }
+
+ @Override
+ protected PartitionEventCriteria getFetchCriteria(DSRequest request) {
+ // we don't use criteria for this datasource, just return null
+ return new PartitionEventCriteria();
+ }
+}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventDatasourceField.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventDatasourceField.java
new file mode 100644
index 0000000..c8fc5c5
--- /dev/null
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventDatasourceField.java
@@ -0,0 +1,75 @@
+/*
+ * RHQ Management Platform
+ * Copyright (C) 2005-2012 Red Hat, Inc.
+ * All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation version 2 of the License.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+package org.rhq.enterprise.gui.coregui.client.admin.topology;
+
+import com.smartgwt.client.widgets.grid.ListGridField;
+
+import org.rhq.enterprise.gui.coregui.client.CoreGUI;
+
+/**
+ * @author Jirka Kremser
+ *
+ */
+public enum PartitionEventDatasourceField {
+
+ FIELD_ID("id", CoreGUI.getMessages().common_title_id()),
+
+ FIELD_CTIME("ctime", "i18n ex time"),
+
+ FIELD_EVENT_TYPE("eventType", "i18n ev type"),
+
+ FIELD_EVENT_DETAIL("eventDetail", "i18n ev detail"),
+
+ FIELD_SUBJECT_NAME("subjectName", "i18n by"),
+
+ FIELD_EXECUTION_STATUS("executionStatus", "i18n ex status");
+
+ /**
+ * Corresponds to a property name of Server (e.g. operationMode).
+ */
+ private String propertyName;
+
+ /**
+ * The table header for the field or property (e.g. Mode).
+ */
+ private String title;
+
+ private PartitionEventDatasourceField(String propertyName, String title) {
+ this.propertyName = propertyName;
+ this.title = title;
+ }
+
+ public String propertyName() {
+ return propertyName;
+ }
+
+ public String title() {
+ return title;
+ }
+
+ public ListGridField getListGridField() {
+ return new ListGridField(propertyName, title);
+ }
+
+ public ListGridField getListGridField(String width) {
+ ListGridField field = new ListGridField(propertyName, title);
+ field.setWidth(width);
+ return field;
+ }
+}
\ No newline at end of file
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventTableView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventTableView.java
new file mode 100644
index 0000000..3e7a05d
--- /dev/null
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/PartitionEventTableView.java
@@ -0,0 +1,257 @@
+/*
+ * RHQ Management Platform
+ * Copyright (C) 2005-2012 Red Hat, Inc.
+ * All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation version 2 of the License.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+package org.rhq.enterprise.gui.coregui.client.admin.topology;
+
+import static org.rhq.enterprise.gui.coregui.client.admin.topology.FailoverListItemDatasourceField.FIELD_ORDINAL;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import com.google.gwt.user.client.rpc.AsyncCallback;
+import com.smartgwt.client.types.SortDirection;
+import com.smartgwt.client.util.BooleanCallback;
+import com.smartgwt.client.util.SC;
+import com.smartgwt.client.widgets.Canvas;
+import com.smartgwt.client.widgets.grid.CellFormatter;
+import com.smartgwt.client.widgets.grid.ListGrid;
+import com.smartgwt.client.widgets.grid.ListGridField;
+import com.smartgwt.client.widgets.grid.ListGridRecord;
+
+import org.rhq.core.domain.authz.Permission;
+import org.rhq.core.domain.cloud.Server;
+import org.rhq.enterprise.gui.coregui.client.CoreGUI;
+import org.rhq.enterprise.gui.coregui.client.IconEnum;
+import org.rhq.enterprise.gui.coregui.client.admin.AdministrationView;
+import org.rhq.enterprise.gui.coregui.client.components.table.AuthorizedTableAction;
+import org.rhq.enterprise.gui.coregui.client.components.table.TableActionEnablement;
+import org.rhq.enterprise.gui.coregui.client.components.table.TableSection;
+import org.rhq.enterprise.gui.coregui.client.components.view.HasViewName;
+import org.rhq.enterprise.gui.coregui.client.components.view.ViewName;
+import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup;
+import org.rhq.enterprise.gui.coregui.client.util.StringUtility;
+import org.rhq.enterprise.gui.coregui.client.util.message.Message;
+import org.rhq.enterprise.gui.coregui.client.util.selenium.SeleniumUtility;
+
+/**
+ * @author Jiri Kremser
+ *
+ */
+public class PartitionEventTableView extends TableSection<PartitionEventDatasource> implements HasViewName {
+
+ public static final ViewName VIEW_ID = new ViewName("PartitionEvents(GWT)", "Partition Events(GWT)",
+ IconEnum.SERVERS);
+
+ public static final String VIEW_PATH = AdministrationView.VIEW_ID + "/"
+ + AdministrationView.SECTION_TOPOLOGY_VIEW_ID + "/" + VIEW_ID;
+
+ private final boolean showActions = true;
+
+ public PartitionEventTableView(String locatorId, String tableTitle) {
+ super(locatorId, tableTitle);
+ setHeight100();
+ setWidth100();
+ setDataSource(new PartitionEventDatasource());
+ }
+
+ @Override
+ protected void configureTable() {
+ super.configureTable();
+ List<ListGridField> fields = getDataSource().getListGridFields();
+ ListGrid listGrid = getListGrid();
+ listGrid.setFields(fields.toArray(new ListGridField[fields.size()]));
+ if (showActions) {
+ listGrid.sort(FIELD_NAME, SortDirection.ASCENDING);
+ showActions();
+ } else {
+ // sorting by order field
+ listGrid.sort(FIELD_ORDINAL.propertyName(), SortDirection.ASCENDING);
+ }
+ for (ListGridField field : fields) {
+ // adding the cell formatter for name field (clickable link)
+ if (field.getName() == FIELD_NAME) {
+ field.setCellFormatter(new CellFormatter() {
+ @Override
+ public String format(Object value, ListGridRecord record, int rowNum, int colNum) {
+ if (value == null) {
+ return "";
+ }
+ String detailsUrl = "#" + VIEW_PATH + "/" + record.getAttributeAsString(FIELD_ID);
+ String formattedValue = StringUtility.escapeHtml(value.toString());
+ return SeleniumUtility.getLocatableHref(detailsUrl, formattedValue, null);
+
+ }
+ });
+ }
+ // TODO: adding the cell formatter for affinity group (clickable link)
+ }
+ }
+
+ @Override
+ public Canvas getDetailsView(Integer id) {
+ return new ServerDetailView(extendLocatorId("detailsView"), id);
+ }
+
+ private void showActions() {
+ addTableAction(extendLocatorId("setNormal"), MSG.view_adminTopology_server_setNormal(),
+ MSG.common_msg_areYouSure(), new AuthorizedTableAction(this, TableActionEnablement.ANY,
+ Permission.MANAGE_SETTINGS) {
+ public void executeAction(final ListGridRecord[] selections, Object actionValue) {
+ List<String> selectedNames = getSelectedNames(selections);
+ // TODO: msg
+ // String message = MSG.view_admin_plugins_serverDisableConfirm(selectedNames.toString());
+ String message = "Really? Normal? For all I've done for you? " + selectedNames;
+ SC.ask(message, new BooleanCallback() {
+ public void execute(Boolean confirmed) {
+ if (confirmed) {
+ int[] selectedIds = getSelectedIds(selections);
+ SC.say("setting servers to maintenance mode, ids: " + selectedIds);
+ GWTServiceLookup.getCloudService().updateServerMode(selectedIds,
+ Server.OperationMode.NORMAL, new AsyncCallback<Void>() {
+ public void onSuccess(Void arg0) {
+ // TODO: msg
+ Message msg = new Message(MSG
+ .view_admin_plugins_disabledServerPlugins("sdf"), Message.Severity.Info);
+ CoreGUI.getMessageCenter().notify(msg);
+ refresh();
+ }
+
+ public void onFailure(Throwable caught) {
+ // TODO: msg
+ CoreGUI.getErrorHandler().handleError(
+ MSG.view_admin_plugins_disabledServerPluginsFailure() + " "
+ + caught.getMessage(), caught);
+ refreshTableInfo();
+ }
+
+ });
+ } else {
+ refreshTableInfo();
+ }
+ }
+ });
+ }
+ });
+
+ addTableAction(extendLocatorId("setMaintenance"), MSG.view_adminTopology_server_setMaintenance(),
+ new AuthorizedTableAction(this, TableActionEnablement.ANY, Permission.MANAGE_SETTINGS) {
+ public void executeAction(final ListGridRecord[] selections, Object actionValue) {
+ List<String> selectedNames = getSelectedNames(selections);
+ // TODO: msg
+ // String message = MSG.view_admin_plugins_serverDisableConfirm(selectedNames.toString());
+ String message = "Really? Maitenance? For all I've done for you? " + selectedNames;
+ SC.ask(message, new BooleanCallback() {
+ public void execute(Boolean confirmed) {
+ if (confirmed) {
+ int[] selectedIds = getSelectedIds(selections);
+ SC.say("setting servers to maintenance mode, ids: " + selectedIds);
+ GWTServiceLookup.getCloudService().updateServerMode(selectedIds,
+ Server.OperationMode.MAINTENANCE, new AsyncCallback<Void>() {
+ public void onSuccess(Void arg0) {
+ // TODO: msg
+ Message msg = new Message(MSG
+ .view_admin_plugins_disabledServerPlugins("sdf"), Message.Severity.Info);
+ CoreGUI.getMessageCenter().notify(msg);
+ refresh();
+ }
+
+ public void onFailure(Throwable caught) {
+ // TODO: msg
+ CoreGUI.getErrorHandler().handleError(
+ MSG.view_admin_plugins_disabledServerPluginsFailure() + " "
+ + caught.getMessage(), caught);
+ refreshTableInfo();
+ }
+
+ });
+ } else {
+ refreshTableInfo();
+ }
+ }
+ });
+ }
+ });
+
+ addTableAction(extendLocatorId("removeSelected"), MSG.view_adminTopology_server_removeSelected(),
+ MSG.common_msg_areYouSure(), new AuthorizedTableAction(this, TableActionEnablement.ANY,
+ Permission.MANAGE_SETTINGS) {
+ public void executeAction(final ListGridRecord[] selections, Object actionValue) {
+ List<String> selectedNames = getSelectedNames(selections);
+ String message = "Really? Delete? For all I've done for you? " + selectedNames;
+ SC.ask(message, new BooleanCallback() {
+ public void execute(Boolean confirmed) {
+ if (confirmed) {
+ int[] selectedIds = getSelectedIds(selections);
+ SC.say("setting servers to maintenance mode, ids: " + selectedIds);
+ GWTServiceLookup.getCloudService().deleteServers(selectedIds,
+ new AsyncCallback<Void>() {
+ public void onSuccess(Void arg0) {
+ // TODO: msg
+ Message msg = new Message(MSG
+ .view_admin_plugins_disabledServerPlugins("sdf"), Message.Severity.Info);
+ CoreGUI.getMessageCenter().notify(msg);
+ refresh();
+ }
+
+ public void onFailure(Throwable caught) {
+ // TODO: msg
+ CoreGUI.getErrorHandler().handleError(
+ MSG.view_admin_plugins_disabledServerPluginsFailure() + " "
+ + caught.getMessage(), caught);
+ refreshTableInfo();
+ }
+
+ });
+ } else {
+ refreshTableInfo();
+ }
+ }
+ });
+ }
+ });
+ }
+
+ private int[] getSelectedIds(ListGridRecord[] selections) {
+ if (selections == null) {
+ return new int[0];
+ }
+ int[] ids = new int[selections.length];
+ int i = 0;
+ for (ListGridRecord selection : selections) {
+ ids[i++] = selection.getAttributeAsInt(FIELD_ID);
+ }
+ return ids;
+ }
+
+ private List<String> getSelectedNames(ListGridRecord[] selections) {
+ if (selections == null) {
+ return new ArrayList<String>(0);
+ }
+ List<String> ids = new ArrayList<String>(selections.length);
+ for (ListGridRecord selection : selections) {
+ ids.add(selection.getAttributeAsString(FIELD_NAME));
+ }
+ return ids;
+ }
+
+ @Override
+ public ViewName getViewName() {
+ return VIEW_ID;
+ }
+
+}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerWithAgentCountDatasource.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerWithAgentCountDatasource.java
index 916f891..a9f9613 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerWithAgentCountDatasource.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerWithAgentCountDatasource.java
@@ -82,7 +82,7 @@ public class ServerWithAgentCountDatasource extends ServerDatasource<ServerWithA
fields.add(FIELD_PORT.getListGridField("90"));
fields.add(FIELD_SECURE_PORT.getListGridField("75"));
- ListGridField lastUpdateTimeField = FIELD_MTIME.getListGridField("110");
+ ListGridField lastUpdateTimeField = FIELD_MTIME.getListGridField("120");
TimestampCellFormatter.prepareDateField(lastUpdateTimeField);
fields.add(lastUpdateTimeField);
@@ -139,7 +139,7 @@ public class ServerWithAgentCountDatasource extends ServerDatasource<ServerWithA
@Override
public ServerWithAgentCountComposite copyValues(Record from) {
- throw new UnsupportedOperationException("ServerTableView.CloudDataSourcepublic Server copyValues(Record from)");
+ throw new UnsupportedOperationException("ServerWithAgentCountDatasource.copyValues(Record from)");
}
@Override
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/CloudGWTService.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/CloudGWTService.java
index e1c695b..dbfbfbf 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/CloudGWTService.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/CloudGWTService.java
@@ -27,10 +27,13 @@ import java.util.List;
import com.google.gwt.user.client.rpc.RemoteService;
import org.rhq.core.domain.cloud.FailoverListDetails;
+import org.rhq.core.domain.cloud.PartitionEvent;
import org.rhq.core.domain.cloud.Server;
import org.rhq.core.domain.cloud.composite.ServerWithAgentCountComposite;
+import org.rhq.core.domain.criteria.PartitionEventCriteria;
import org.rhq.core.domain.resource.Agent;
import org.rhq.core.domain.util.PageControl;
+import org.rhq.core.domain.util.PageList;
/**
* @author Jiri Kremser
@@ -52,6 +55,8 @@ public interface CloudGWTService extends RemoteService {
void updateServerMode(int[] serverIds, Server.OperationMode mode) throws RuntimeException;
- List<FailoverListDetails> getFailoverListDetailsByAgentId(int agentId, PageControl pc);
+ List<FailoverListDetails> getFailoverListDetailsByAgentId(int agentId, PageControl pc) throws RuntimeException;;
+
+ PageList<PartitionEvent> findPartitionEventsByCriteria(PartitionEventCriteria criteria) throws RuntimeException;
}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/CloudGWTServiceImpl.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/CloudGWTServiceImpl.java
index 0e5fd88..84a87b8 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/CloudGWTServiceImpl.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/CloudGWTServiceImpl.java
@@ -28,15 +28,18 @@ import java.util.List;
import org.apache.commons.lang.ArrayUtils;
import org.rhq.core.domain.cloud.FailoverListDetails;
+import org.rhq.core.domain.cloud.PartitionEvent;
import org.rhq.core.domain.cloud.Server;
import org.rhq.core.domain.cloud.Server.OperationMode;
import org.rhq.core.domain.cloud.composite.ServerWithAgentCountComposite;
+import org.rhq.core.domain.criteria.PartitionEventCriteria;
import org.rhq.core.domain.resource.Agent;
import org.rhq.core.domain.util.PageControl;
import org.rhq.core.domain.util.PageList;
import org.rhq.enterprise.gui.coregui.client.gwt.CloudGWTService;
import org.rhq.enterprise.gui.coregui.server.util.SerialUtility;
import org.rhq.enterprise.server.cloud.CloudManagerLocal;
+import org.rhq.enterprise.server.cloud.PartitionEventManagerLocal;
import org.rhq.enterprise.server.util.LookupUtil;
/**
@@ -47,6 +50,8 @@ public class CloudGWTServiceImpl extends AbstractGWTServiceImpl implements Cloud
private static final long serialVersionUID = 1L;
private CloudManagerLocal cloudManager = LookupUtil.getCloudManager();
+
+ private PartitionEventManagerLocal partitionEventManager = LookupUtil.getPartitionEventManager();
@Override
public PageList<ServerWithAgentCountComposite> getServers(PageControl pc) throws RuntimeException {
@@ -97,7 +102,7 @@ public class CloudGWTServiceImpl extends AbstractGWTServiceImpl implements Cloud
}
@Override
- public List<FailoverListDetails> getFailoverListDetailsByAgentId(int agentId, PageControl pc) {
+ public List<FailoverListDetails> getFailoverListDetailsByAgentId(int agentId, PageControl pc) throws RuntimeException {
try {
return SerialUtility.prepare(cloudManager.getFailoverListDetailsByAgentId(agentId, pc),
"CloudGWTServiceImpl.getFailoverListDetailsByAgentId");
@@ -106,4 +111,14 @@ public class CloudGWTServiceImpl extends AbstractGWTServiceImpl implements Cloud
}
}
+ @Override
+ public PageList<PartitionEvent> findPartitionEventsByCriteria(PartitionEventCriteria criteria) throws RuntimeException {
+ try {
+ return SerialUtility.prepare(partitionEventManager.findPartitionEventsByCriteria(getSessionSubject(), criteria),
+ "CloudGWTServiceImpl.findPartitionEventsByCriteria");
+ } catch (Throwable t) {
+ throw getExceptionToThrowToClient(t);
+ }
+ }
+
}
diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/PartitionEventManagerBean.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/PartitionEventManagerBean.java
index 147dbc0..24fc0c7 100644
--- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/PartitionEventManagerBean.java
+++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/PartitionEventManagerBean.java
@@ -38,10 +38,11 @@ import org.rhq.core.domain.auth.Subject;
import org.rhq.core.domain.authz.Permission;
import org.rhq.core.domain.cloud.FailoverList;
import org.rhq.core.domain.cloud.PartitionEvent;
+import org.rhq.core.domain.cloud.PartitionEvent.ExecutionStatus;
import org.rhq.core.domain.cloud.PartitionEventDetails;
import org.rhq.core.domain.cloud.PartitionEventType;
-import org.rhq.core.domain.cloud.PartitionEvent.ExecutionStatus;
import org.rhq.core.domain.cloud.composite.FailoverListComposite;
+import org.rhq.core.domain.criteria.PartitionEventCriteria;
import org.rhq.core.domain.resource.Agent;
import org.rhq.core.domain.server.PersistenceUtility;
import org.rhq.core.domain.util.PageControl;
@@ -50,6 +51,8 @@ import org.rhq.core.domain.util.PageOrdering;
import org.rhq.enterprise.server.RHQConstants;
import org.rhq.enterprise.server.authz.RequiredPermission;
import org.rhq.enterprise.server.core.AgentManagerLocal;
+import org.rhq.enterprise.server.util.CriteriaQueryGenerator;
+import org.rhq.enterprise.server.util.CriteriaQueryRunner;
import org.rhq.enterprise.server.util.QueryUtility;
/**
@@ -247,4 +250,11 @@ public class PartitionEventManagerBean implements PartitionEventManagerLocal {
return new PageList<PartitionEventDetails>(detailsList, (int) count, pageControl);
}
+
+ @RequiredPermission(Permission.MANAGE_INVENTORY)
+ public PageList<PartitionEvent> findPartitionEventsByCriteria(Subject subject, PartitionEventCriteria criteria) {
+ CriteriaQueryGenerator generator = new CriteriaQueryGenerator(subject, criteria);
+ CriteriaQueryRunner<PartitionEvent> runner = new CriteriaQueryRunner<PartitionEvent>(criteria, generator, entityManager);
+ return runner.execute();
+ }
}
diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/PartitionEventManagerLocal.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/PartitionEventManagerLocal.java
index a86d82d..f0a1bf2 100644
--- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/PartitionEventManagerLocal.java
+++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/PartitionEventManagerLocal.java
@@ -24,10 +24,11 @@ import javax.ejb.Local;
import org.rhq.core.domain.auth.Subject;
import org.rhq.core.domain.cloud.PartitionEvent;
+import org.rhq.core.domain.cloud.PartitionEvent.ExecutionStatus;
import org.rhq.core.domain.cloud.PartitionEventDetails;
import org.rhq.core.domain.cloud.PartitionEventType;
-import org.rhq.core.domain.cloud.PartitionEvent.ExecutionStatus;
import org.rhq.core.domain.cloud.composite.FailoverListComposite;
+import org.rhq.core.domain.criteria.PartitionEventCriteria;
import org.rhq.core.domain.resource.Agent;
import org.rhq.core.domain.util.PageControl;
import org.rhq.core.domain.util.PageList;
@@ -94,4 +95,13 @@ public interface PartitionEventManagerLocal {
PageList<PartitionEventDetails> getPartitionEventDetails(Subject subject, int partitionEventId,
PageControl pageControl);
+
+ /**
+ * the subject needs to have MANAGE_INVENTORY permission.
+ *
+ * @param subject
+ * @param criteria
+ * @return list with partition events
+ */
+ PageList<PartitionEvent> findPartitionEventsByCriteria(Subject subject, PartitionEventCriteria criteria);
}
commit 44101900b1e89c46571859092d1c79cba23f81a7
Author: Jirka Kremser <jkremser(a)redhat.com>
Date: Tue Nov 27 16:40:44 2012 +0100
hyperlinks across table data and detail information rendered on detail pages are now working
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentDetailView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentDetailView.java
index 187eac9..1c0d1de 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentDetailView.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentDetailView.java
@@ -39,9 +39,11 @@ import com.smartgwt.client.widgets.layout.SectionStackSection;
import org.rhq.core.domain.resource.Agent;
import org.rhq.enterprise.gui.coregui.client.components.table.TimestampCellFormatter;
import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup;
+import org.rhq.enterprise.gui.coregui.client.util.StringUtility;
import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableDynamicForm;
import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableSectionStack;
import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableVLayout;
+import org.rhq.enterprise.gui.coregui.client.util.selenium.SeleniumUtility;
/**
* Shows details of a server.
@@ -147,7 +149,7 @@ public class AgentDetailView extends LocatableVLayout {
form.setNumCols(2);
StaticTextItem nameItem = new StaticTextItem(FIELD_NAME.propertyName(), FIELD_NAME.title());
- nameItem.setValue(agent.getName());
+ nameItem.setValue("<b>" + agent.getName() + "</b>");
StaticTextItem addressItem = new StaticTextItem(FIELD_ADDRESS.propertyName(), FIELD_ADDRESS.title());
addressItem.setValue(agent.getAddress());
@@ -164,13 +166,22 @@ public class AgentDetailView extends LocatableVLayout {
Long.valueOf(agent.getLastAvailabilityReport()), TimestampCellFormatter.DATE_TIME_FORMAT_MEDIUM);
lastAvailabilityItem.setValue(lastReport);
+ // TODO: make clickable link
StaticTextItem affinityGroupItem = new StaticTextItem(FIELD_AFFINITY_GROUP.propertyName(),
FIELD_AFFINITY_GROUP.title());
affinityGroupItem.setValue(agent.getAffinityGroup() == null ? "" : agent.getAffinityGroup().getName());
- // TODO: create clickable link
StaticTextItem currentServerItem = new StaticTextItem(FIELD_SERVER.propertyName(), FIELD_SERVER.title());
- currentServerItem.setValue(agent.getServer() == null ? "none" : agent.getServer().getName());
+ String serverValue = null;
+ if (agent.getServer() == null) {
+ serverValue = "";
+ } else {
+ String detailsUrl = "#" + ServerTableView.VIEW_PATH + "/" + agent.getServer().getId();
+ String formattedValue = StringUtility.escapeHtml(agent.getServer().getName());
+ serverValue = SeleniumUtility.getLocatableHref(detailsUrl, formattedValue, null);
+ }
+ currentServerItem.setValue(serverValue);
+
// ButtonItem saveButton = new ButtonItem();
// saveButton.setOverflow(Overflow.VISIBLE);
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentNodeDatasource.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentNodeDatasource.java
index 3bb0280..d4e758a 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentNodeDatasource.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentNodeDatasource.java
@@ -25,6 +25,7 @@ import static org.rhq.enterprise.gui.coregui.client.admin.topology.AgentNodeData
import static org.rhq.enterprise.gui.coregui.client.admin.topology.AgentNodeDatasourceField.FIELD_NAME;
import static org.rhq.enterprise.gui.coregui.client.admin.topology.AgentNodeDatasourceField.FIELD_PORT;
import static org.rhq.enterprise.gui.coregui.client.admin.topology.AgentNodeDatasourceField.FIELD_SERVER;
+import static org.rhq.enterprise.gui.coregui.client.admin.topology.AgentNodeDatasourceField.FIELD_SERVER_ID;
import java.util.ArrayList;
import java.util.List;
@@ -52,8 +53,8 @@ import org.rhq.enterprise.gui.coregui.client.util.RPCDataSource;
*
*/
public class AgentNodeDatasource extends RPCDataSource<Agent, Criteria> {
-
- private final Integer serverId;
+
+ private final Integer serverId;
public AgentNodeDatasource(Integer serverId) {
super();
@@ -78,12 +79,15 @@ public class AgentNodeDatasource extends RPCDataSource<Agent, Criteria> {
ListGridField idField = FIELD_ID.getListGridField();
idField.setHidden(true);
fields.add(idField);
-
fields.add(FIELD_NAME.getListGridField("*"));
fields.add(FIELD_SERVER.getListGridField("120"));
fields.add(FIELD_ADDRESS.getListGridField("110"));
+
+ ListGridField serverIdField = FIELD_SERVER_ID.getListGridField();
+ serverIdField.setHidden(true);
+ fields.add(serverIdField);
+
fields.add(FIELD_PORT.getListGridField("90"));
-
ListGridField lastAvailabilityReportField = FIELD_LAST_AVAILABILITY_REPORT.getListGridField("120");
TimestampCellFormatter.prepareDateField(lastAvailabilityReportField);
fields.add(lastAvailabilityReportField);
@@ -150,7 +154,8 @@ public class AgentNodeDatasource extends RPCDataSource<Agent, Criteria> {
record.setAttribute(FIELD_NAME.propertyName(), from.getName());
record.setAttribute(FIELD_ADDRESS.propertyName(), from.getAddress());
record.setAttribute(FIELD_PORT.propertyName(), from.getPort());
- record.setAttribute(FIELD_SERVER.propertyName(), from.getServer() == null ? "none" : from.getServer().getName());
+ record.setAttribute(FIELD_SERVER.propertyName(), from.getServer() == null ? "" : from.getServer().getName());
+ record.setAttribute(FIELD_SERVER_ID.propertyName(), from.getServer() == null ? "" : from.getServer().getId());
record.setAttribute(FIELD_LAST_AVAILABILITY_REPORT.propertyName(), from.getLastAvailabilityReport());
record.setAttribute(FIELD_AFFINITY_GROUP.propertyName(), from.getAffinityGroup() == null ? "" : from
.getAffinityGroup().getName());
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentNodeDatasourceField.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentNodeDatasourceField.java
index 6872204..5873ab3 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentNodeDatasourceField.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentNodeDatasourceField.java
@@ -33,6 +33,8 @@ public enum AgentNodeDatasourceField {
FIELD_NAME("name", CoreGUI.getMessages().common_title_name()),
FIELD_SERVER("server", CoreGUI.getMessages().view_adminTopology_agent_connectedServer()),
+
+ FIELD_SERVER_ID("serverId", "serverId"),
FIELD_ADDRESS("address", CoreGUI.getMessages().view_adminTopology_agent_agentBindAddress()),
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentTableView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentTableView.java
index ae4dc50..41d32be 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentTableView.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentTableView.java
@@ -18,27 +18,36 @@
*/
package org.rhq.enterprise.gui.coregui.client.admin.topology;
+import static org.rhq.enterprise.gui.coregui.client.admin.topology.AgentNodeDatasourceField.FIELD_SERVER;
+import static org.rhq.enterprise.gui.coregui.client.admin.topology.AgentNodeDatasourceField.FIELD_SERVER_ID;
+
import java.util.List;
import com.smartgwt.client.types.SortDirection;
import com.smartgwt.client.widgets.Canvas;
+import com.smartgwt.client.widgets.grid.CellFormatter;
import com.smartgwt.client.widgets.grid.ListGrid;
import com.smartgwt.client.widgets.grid.ListGridField;
+import com.smartgwt.client.widgets.grid.ListGridRecord;
import org.rhq.enterprise.gui.coregui.client.IconEnum;
import org.rhq.enterprise.gui.coregui.client.admin.AdministrationView;
import org.rhq.enterprise.gui.coregui.client.components.table.TableSection;
+import org.rhq.enterprise.gui.coregui.client.components.view.HasViewName;
import org.rhq.enterprise.gui.coregui.client.components.view.ViewName;
+import org.rhq.enterprise.gui.coregui.client.util.StringUtility;
+import org.rhq.enterprise.gui.coregui.client.util.selenium.SeleniumUtility;
/**
* @author Jiri Kremser
*/
-public class AgentTableView extends TableSection<AgentNodeDatasource> {
+public class AgentTableView extends TableSection<AgentNodeDatasource> implements HasViewName {
public static final ViewName VIEW_ID = new ViewName("Agents(GWT)", MSG.view_adminTopology_agents() + "(GWT)",
IconEnum.SERVERS);
+
public static final String VIEW_PATH = AdministrationView.VIEW_ID + "/"
- + AdministrationView.SECTION_CONFIGURATION_VIEW_ID + "/" + VIEW_ID;
+ + AdministrationView.SECTION_TOPOLOGY_VIEW_ID + "/" + VIEW_ID;
public AgentTableView(String locatorId, String tableTitle, Integer serverId) {
super(locatorId, tableTitle);
@@ -49,12 +58,47 @@ public class AgentTableView extends TableSection<AgentNodeDatasource> {
@Override
protected void configureTable() {
+ super.configureTable();
List<ListGridField> fields = getDataSource().getListGridFields();
ListGrid listGrid = getListGrid();
listGrid.setFields(fields.toArray(new ListGridField[fields.size()]));
listGrid.sort(FIELD_NAME, SortDirection.ASCENDING);
+
+ for (ListGridField field : fields) {
+ // adding the cell formatter for name field (clickable link)
+ if (field.getName() == FIELD_NAME) {
+ field.setCellFormatter(new CellFormatter() {
+ @Override
+ public String format(Object value, ListGridRecord record, int rowNum, int colNum) {
+ if (value == null) {
+ return "";
+ }
+ String detailsUrl = "#" + VIEW_PATH + "/" + record.getAttributeAsString(FIELD_ID);
+ String formattedValue = StringUtility.escapeHtml(value.toString());
+ return SeleniumUtility.getLocatableHref(detailsUrl, formattedValue, null);
- super.configureTable();
+ }
+ });
+ } else if (field.getName() == FIELD_SERVER.propertyName()) {
+ field.setCellFormatter(new CellFormatter() {
+ @Override
+ public String format(Object value, ListGridRecord record, int rowNum, int colNum) {
+ if (value == null || value.toString().isEmpty()) {
+ return "";
+ }
+ String detailsUrl = "#" + ServerTableView.VIEW_PATH + "/"
+ + record.getAttributeAsString(FIELD_SERVER_ID.propertyName());
+ String formattedValue = StringUtility.escapeHtml(value.toString());
+ return SeleniumUtility.getLocatableHref(detailsUrl, formattedValue, null);
+
+ }
+ });
+ }
+ // TODO: adding the cell formatter for affinity group (clickable link)
+
+ }
+
+
}
@Override
@@ -62,27 +106,9 @@ public class AgentTableView extends TableSection<AgentNodeDatasource> {
return new AgentDetailView(extendLocatorId("detailsView"), id);
}
-// private int[] getSelectedIds(ListGridRecord[] selections) {
-// if (selections == null) {
-// return new int[0];
-// }
-// int[] ids = new int[selections.length];
-// int i = 0;
-// for (ListGridRecord selection : selections) {
-// ids[i++] = selection.getAttributeAsInt(FIELD_ID);
-// }
-// return ids;
-// }
-//
-// private ArrayList<String> getSelectedNames(ListGridRecord[] selections) {
-// if (selections == null) {
-// return new ArrayList<String>(0);
-// }
-// ArrayList<String> ids = new ArrayList<String>(selections.length);
-// for (ListGridRecord selection : selections) {
-// ids.add(selection.getAttributeAsString(FIELD_NAME));
-// }
-// return ids;
-// }
+ @Override
+ public ViewName getViewName() {
+ return VIEW_ID;
+ }
}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDetailView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDetailView.java
index 1d9dc46..95cb869 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDetailView.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDetailView.java
@@ -44,8 +44,11 @@ import com.smartgwt.client.widgets.layout.SectionStack;
import com.smartgwt.client.widgets.layout.SectionStackSection;
import org.rhq.core.domain.cloud.Server;
+import org.rhq.enterprise.gui.coregui.client.BookmarkableView;
+import org.rhq.enterprise.gui.coregui.client.ViewPath;
import org.rhq.enterprise.gui.coregui.client.components.table.TimestampCellFormatter;
import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup;
+import org.rhq.enterprise.gui.coregui.client.util.Log;
import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableDynamicForm;
import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableSectionStack;
import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableVLayout;
@@ -55,7 +58,7 @@ import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableVLayout;
*
* @author Jiri Kremser
*/
-public class ServerDetailView extends LocatableVLayout {
+public class ServerDetailView extends LocatableVLayout implements BookmarkableView {
// private final CloudGWTServiceAsync cloudManager = GWTServiceLookup.getCloudService();
private final int serverId;
@@ -151,7 +154,7 @@ public class ServerDetailView extends LocatableVLayout {
section.setItems(agentsTable);
agentSection = section;
- ++initSectionCount;
+ initSectionCount++;
return;
}
@@ -163,7 +166,7 @@ public class ServerDetailView extends LocatableVLayout {
form.setNumCols(2);
StaticTextItem nameItem = new StaticTextItem(FIELD_NAME.propertyName(), FIELD_NAME.title());
- nameItem.setValue(server.getName());
+ nameItem.setValue("<b>" + server.getName() + "</b>");
TextItem addressItem = new TextItem(FIELD_ADDRESS.propertyName(), FIELD_ADDRESS.title());
addressItem.setValue(server.getAddress());
@@ -179,9 +182,10 @@ public class ServerDetailView extends LocatableVLayout {
operationModeItem.setValueMap("NORMAL", "MAINTENANCE");
operationModeItem.setValue(server.getOperationMode());
+ // TODO: make clickable link
StaticTextItem affinityGroupItem = new StaticTextItem(FIELD_AFFINITY_GROUP.propertyName(),
FIELD_AFFINITY_GROUP.title());
- affinityGroupItem.setValue(server.getAffinityGroup());
+ affinityGroupItem.setValue(server.getAffinityGroup() == null ? "" : server.getAffinityGroup().getName());
StaticTextItem installationDateItem = new StaticTextItem(FIELD_CTIME.propertyName(), FIELD_CTIME.title());
installationDateItem.setValue(TimestampCellFormatter.format(Long.valueOf(server.getCtime()),
@@ -209,6 +213,11 @@ public class ServerDetailView extends LocatableVLayout {
section.setItems(form);
detailsSection = section;
- ++initSectionCount;
+ initSectionCount++;
+ }
+
+ @Override
+ public void renderView(ViewPath viewPath) {
+ Log.debug("ServerDetailView: " + viewPath);
}
}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerTableView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerTableView.java
index 36c77ab..bcf2f49 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerTableView.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerTableView.java
@@ -20,6 +20,7 @@ package org.rhq.enterprise.gui.coregui.client.admin.topology;
import static org.rhq.enterprise.gui.coregui.client.admin.topology.FailoverListItemDatasourceField.FIELD_ORDINAL;
+import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
@@ -28,32 +29,39 @@ import com.smartgwt.client.types.SortDirection;
import com.smartgwt.client.util.BooleanCallback;
import com.smartgwt.client.util.SC;
import com.smartgwt.client.widgets.Canvas;
+import com.smartgwt.client.widgets.grid.CellFormatter;
import com.smartgwt.client.widgets.grid.ListGrid;
import com.smartgwt.client.widgets.grid.ListGridField;
import com.smartgwt.client.widgets.grid.ListGridRecord;
import org.rhq.core.domain.authz.Permission;
import org.rhq.core.domain.cloud.Server;
+import org.rhq.core.domain.criteria.Criteria;
import org.rhq.enterprise.gui.coregui.client.CoreGUI;
import org.rhq.enterprise.gui.coregui.client.IconEnum;
import org.rhq.enterprise.gui.coregui.client.admin.AdministrationView;
import org.rhq.enterprise.gui.coregui.client.components.table.AuthorizedTableAction;
import org.rhq.enterprise.gui.coregui.client.components.table.TableActionEnablement;
import org.rhq.enterprise.gui.coregui.client.components.table.TableSection;
+import org.rhq.enterprise.gui.coregui.client.components.view.HasViewName;
import org.rhq.enterprise.gui.coregui.client.components.view.ViewName;
import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup;
+import org.rhq.enterprise.gui.coregui.client.util.StringUtility;
import org.rhq.enterprise.gui.coregui.client.util.message.Message;
+import org.rhq.enterprise.gui.coregui.client.util.selenium.SeleniumUtility;
/**
* @author Jiri Kremser
+ *
*/
-public class ServerTableView extends TableSection<ServerDatasource> {
+public class ServerTableView extends TableSection<ServerDatasource<? extends Serializable, Criteria>> implements HasViewName {
public static final ViewName VIEW_ID = new ViewName("Servers(GWT)", MSG.view_adminTopology_servers() + "(GWT)",
IconEnum.SERVERS);
+
public static final String VIEW_PATH = AdministrationView.VIEW_ID + "/"
- + AdministrationView.SECTION_CONFIGURATION_VIEW_ID + "/" + VIEW_ID;
-
+ + AdministrationView.SECTION_TOPOLOGY_VIEW_ID + "/" + VIEW_ID;
+
private final boolean showActions;
public ServerTableView(String locatorId, String tableTitle, Integer agentId) {
@@ -66,6 +74,7 @@ public class ServerTableView extends TableSection<ServerDatasource> {
@Override
protected void configureTable() {
+ super.configureTable();
List<ListGridField> fields = getDataSource().getListGridFields();
ListGrid listGrid = getListGrid();
listGrid.setFields(fields.toArray(new ListGridField[fields.size()]));
@@ -73,16 +82,34 @@ public class ServerTableView extends TableSection<ServerDatasource> {
listGrid.sort(FIELD_NAME, SortDirection.ASCENDING);
showActions();
} else {
+ // sorting by order field
listGrid.sort(FIELD_ORDINAL.propertyName(), SortDirection.ASCENDING);
}
- super.configureTable();
+ for (ListGridField field : fields) {
+ // adding the cell formatter for name field (clickable link)
+ if (field.getName() == FIELD_NAME) {
+ field.setCellFormatter(new CellFormatter() {
+ @Override
+ public String format(Object value, ListGridRecord record, int rowNum, int colNum) {
+ if (value == null) {
+ return "";
+ }
+ String detailsUrl = "#" + VIEW_PATH + "/" + record.getAttributeAsString(FIELD_ID);
+ String formattedValue = StringUtility.escapeHtml(value.toString());
+ return SeleniumUtility.getLocatableHref(detailsUrl, formattedValue, null);
+
+ }
+ });
+ }
+ // TODO: adding the cell formatter for affinity group (clickable link)
+ }
}
@Override
public Canvas getDetailsView(Integer id) {
return new ServerDetailView(extendLocatorId("detailsView"), id);
}
-
+
private void showActions() {
addTableAction(extendLocatorId("setNormal"), MSG.view_adminTopology_server_setNormal(),
MSG.common_msg_areYouSure(), new AuthorizedTableAction(this, TableActionEnablement.ANY,
@@ -97,8 +124,8 @@ public class ServerTableView extends TableSection<ServerDatasource> {
if (confirmed) {
int[] selectedIds = getSelectedIds(selections);
SC.say("setting servers to maintenance mode, ids: " + selectedIds);
- GWTServiceLookup.getCloudService().updateServerMode(selectedIds, Server.OperationMode.NORMAL,
- new AsyncCallback<Void>() {
+ GWTServiceLookup.getCloudService().updateServerMode(selectedIds,
+ Server.OperationMode.NORMAL, new AsyncCallback<Void>() {
public void onSuccess(Void arg0) {
// TODO: msg
Message msg = new Message(MSG
@@ -136,8 +163,8 @@ public class ServerTableView extends TableSection<ServerDatasource> {
if (confirmed) {
int[] selectedIds = getSelectedIds(selections);
SC.say("setting servers to maintenance mode, ids: " + selectedIds);
- GWTServiceLookup.getCloudService().updateServerMode(selectedIds, Server.OperationMode.MAINTENANCE,
- new AsyncCallback<Void>() {
+ GWTServiceLookup.getCloudService().updateServerMode(selectedIds,
+ Server.OperationMode.MAINTENANCE, new AsyncCallback<Void>() {
public void onSuccess(Void arg0) {
// TODO: msg
Message msg = new Message(MSG
@@ -214,15 +241,20 @@ public class ServerTableView extends TableSection<ServerDatasource> {
return ids;
}
- private ArrayList<String> getSelectedNames(ListGridRecord[] selections) {
+ private List<String> getSelectedNames(ListGridRecord[] selections) {
if (selections == null) {
return new ArrayList<String>(0);
}
- ArrayList<String> ids = new ArrayList<String>(selections.length);
+ List<String> ids = new ArrayList<String>(selections.length);
for (ListGridRecord selection : selections) {
ids.add(selection.getAttributeAsString(FIELD_NAME));
}
return ids;
}
+ @Override
+ public ViewName getViewName() {
+ return VIEW_ID;
+ }
+
}
commit 080f519cf5fad164aabe667558f9518aa72a686d
Author: Jirka Kremser <jkremser(a)redhat.com>
Date: Mon Nov 26 21:15:49 2012 +0100
ServerNodeDatasource has been split into two separate, AgentDetailView added, some refactoring of existing code
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/AdministrationView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/AdministrationView.java
index 894c833..189da3f 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/AdministrationView.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/AdministrationView.java
@@ -178,7 +178,7 @@ public class AdministrationView extends AbstractSectionedLeftNavigationView {
NavigationItem serversItemGwt = new NavigationItem(ServerTableView.VIEW_ID, new ViewFactory() {
public Canvas createView() {
return new ServerTableView(extendLocatorId(ServerTableView.VIEW_ID.getName()),
- MSG.view_adminTopology_servers() + " (GWT)");
+ MSG.view_adminTopology_servers() + " (GWT)", null);
}
}, getGlobalPermissions().contains(Permission.MANAGE_INVENTORY));
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentDetailView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentDetailView.java
new file mode 100644
index 0000000..187eac9
--- /dev/null
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentDetailView.java
@@ -0,0 +1,195 @@
+/*
+ * RHQ Management Platform
+ * Copyright (C) 2005-2012 Red Hat, Inc.
+ * All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation version 2 of the License.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+package org.rhq.enterprise.gui.coregui.client.admin.topology;
+
+import static org.rhq.enterprise.gui.coregui.client.admin.topology.AgentNodeDatasourceField.FIELD_ADDRESS;
+import static org.rhq.enterprise.gui.coregui.client.admin.topology.AgentNodeDatasourceField.FIELD_AFFINITY_GROUP;
+import static org.rhq.enterprise.gui.coregui.client.admin.topology.AgentNodeDatasourceField.FIELD_AGENT_TOKEN;
+import static org.rhq.enterprise.gui.coregui.client.admin.topology.AgentNodeDatasourceField.FIELD_LAST_AVAILABILITY_REPORT;
+import static org.rhq.enterprise.gui.coregui.client.admin.topology.AgentNodeDatasourceField.FIELD_NAME;
+import static org.rhq.enterprise.gui.coregui.client.admin.topology.AgentNodeDatasourceField.FIELD_PORT;
+import static org.rhq.enterprise.gui.coregui.client.admin.topology.AgentNodeDatasourceField.FIELD_SERVER;
+
+import com.google.gwt.user.client.Timer;
+import com.google.gwt.user.client.rpc.AsyncCallback;
+import com.smartgwt.client.types.Overflow;
+import com.smartgwt.client.types.VisibilityMode;
+import com.smartgwt.client.util.SC;
+import com.smartgwt.client.widgets.form.fields.StaticTextItem;
+import com.smartgwt.client.widgets.layout.SectionStack;
+import com.smartgwt.client.widgets.layout.SectionStackSection;
+
+import org.rhq.core.domain.resource.Agent;
+import org.rhq.enterprise.gui.coregui.client.components.table.TimestampCellFormatter;
+import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup;
+import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableDynamicForm;
+import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableSectionStack;
+import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableVLayout;
+
+/**
+ * Shows details of a server.
+ *
+ * @author Jiri Kremser
+ */
+public class AgentDetailView extends LocatableVLayout {
+
+ // private final CloudGWTServiceAsync cloudManager = GWTServiceLookup.getCloudService();
+ private final int agentId;
+
+ private final LocatableSectionStack sectionStack;
+ private SectionStackSection detailsSection = null;
+ private SectionStackSection failoverListSection = null;
+
+ private volatile int initSectionCount = 0;
+
+ public AgentDetailView(String locatorId, int agentId) {
+ super(locatorId);
+ this.agentId = agentId;
+ setHeight100();
+ setWidth100();
+ setOverflow(Overflow.AUTO);
+
+ sectionStack = new LocatableSectionStack(extendLocatorId("stack"));
+ sectionStack.setVisibilityMode(VisibilityMode.MULTIPLE);
+ sectionStack.setWidth100();
+ sectionStack.setHeight100();
+ sectionStack.setMargin(5);
+ sectionStack.setOverflow(Overflow.VISIBLE);
+ }
+
+ @Override
+ protected void onInit() {
+ super.onInit();
+ GWTServiceLookup.getAgentService().getAgentByID(this.agentId, new AsyncCallback<Agent>() {
+ public void onSuccess(final Agent agent) {
+ prepareDetailsSection(sectionStack, agent);
+ prepareFailoverListSection(sectionStack, agent);
+ }
+
+ public void onFailure(Throwable caught) {
+ SC.say("er1:" + caught);
+ //TODO: CoreGUI.getErrorHandler().handleError(MSG.view_admin_plugins_loadFailure(), caught);
+ }
+ });
+ }
+
+ public boolean isInitialized() {
+ return initSectionCount >= 2;
+ }
+
+ @Override
+ protected void onDraw() {
+ super.onDraw();
+
+ // wait until we have all of the sections before we show them. We don't use InitializableView because,
+ // it seems they are not supported (in the applicable renderView()) at this level.
+ new Timer() {
+ final long startTime = System.currentTimeMillis();
+
+ public void run() {
+ if (isInitialized()) {
+ if (null != detailsSection) {
+ sectionStack.addSection(detailsSection);
+ }
+ if (null != failoverListSection) {
+ sectionStack.addSection(failoverListSection);
+ }
+
+ addMember(sectionStack);
+ markForRedraw();
+
+ } else {
+ // don't wait forever, give up after 20s and show what we have
+ long elapsedMillis = System.currentTimeMillis() - startTime;
+ if (elapsedMillis > 20000) {
+ initSectionCount = 2;
+ }
+ schedule(100); // Reschedule the timer.
+ }
+ }
+ }.run(); // fire the timer immediately
+ }
+
+ private void prepareFailoverListSection(SectionStack stack, Agent agent) {
+ SectionStackSection section = new SectionStackSection(MSG.view_adminTopology_agentDetail_agentFailoverList());
+ section.setExpanded(true);
+ ServerTableView agentsTable = new ServerTableView(extendLocatorId(ServerTableView.VIEW_ID.getName()), null,
+ agent.getId());
+ section.setItems(agentsTable);
+
+ failoverListSection = section;
+ ++initSectionCount;
+ return;
+ }
+
+ private void prepareDetailsSection(SectionStack stack, Agent agent) {
+ final LocatableDynamicForm form = new LocatableDynamicForm(extendLocatorId("detailsForm"));
+ form.setMargin(10);
+ form.setWidth100();
+ form.setWrapItemTitles(false);
+ form.setNumCols(2);
+
+ StaticTextItem nameItem = new StaticTextItem(FIELD_NAME.propertyName(), FIELD_NAME.title());
+ nameItem.setValue(agent.getName());
+
+ StaticTextItem addressItem = new StaticTextItem(FIELD_ADDRESS.propertyName(), FIELD_ADDRESS.title());
+ addressItem.setValue(agent.getAddress());
+
+ StaticTextItem portItem = new StaticTextItem(FIELD_PORT.propertyName(), FIELD_PORT.title());
+ portItem.setValue(agent.getPort());
+
+ StaticTextItem tokenItem = new StaticTextItem(FIELD_AGENT_TOKEN.propertyName(), FIELD_AGENT_TOKEN.title());
+ tokenItem.setValue(agent.getAgentToken());
+
+ StaticTextItem lastAvailabilityItem = new StaticTextItem(FIELD_LAST_AVAILABILITY_REPORT.propertyName(),
+ FIELD_LAST_AVAILABILITY_REPORT.title());
+ String lastReport = agent.getLastAvailabilityReport() == null ? "unknown" : TimestampCellFormatter.format(
+ Long.valueOf(agent.getLastAvailabilityReport()), TimestampCellFormatter.DATE_TIME_FORMAT_MEDIUM);
+ lastAvailabilityItem.setValue(lastReport);
+
+ StaticTextItem affinityGroupItem = new StaticTextItem(FIELD_AFFINITY_GROUP.propertyName(),
+ FIELD_AFFINITY_GROUP.title());
+ affinityGroupItem.setValue(agent.getAffinityGroup() == null ? "" : agent.getAffinityGroup().getName());
+
+ // TODO: create clickable link
+ StaticTextItem currentServerItem = new StaticTextItem(FIELD_SERVER.propertyName(), FIELD_SERVER.title());
+ currentServerItem.setValue(agent.getServer() == null ? "none" : agent.getServer().getName());
+
+ // ButtonItem saveButton = new ButtonItem();
+ // saveButton.setOverflow(Overflow.VISIBLE);
+ // saveButton.setTitle(MSG.common_button_save());
+ // saveButton.addClickHandler(new ClickHandler() {
+ // public void onClick(ClickEvent event) {
+ // RecordList list = form.getRecordList();
+ // SC.say("name is " + list.get(0).getAttribute("name"));
+ // }
+ // });
+
+ form.setItems(nameItem, addressItem, portItem, tokenItem, lastAvailabilityItem, affinityGroupItem,
+ currentServerItem);
+
+ SectionStackSection section = new SectionStackSection(MSG.common_title_details());
+ section.setExpanded(true);
+ section.setItems(form);
+
+ detailsSection = section;
+ ++initSectionCount;
+ }
+}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentNodeDatasource.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentNodeDatasource.java
index 0792373..3bb0280 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentNodeDatasource.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentNodeDatasource.java
@@ -81,10 +81,10 @@ public class AgentNodeDatasource extends RPCDataSource<Agent, Criteria> {
fields.add(FIELD_NAME.getListGridField("*"));
fields.add(FIELD_SERVER.getListGridField("120"));
- fields.add(FIELD_ADDRESS.getListGridField("105"));
+ fields.add(FIELD_ADDRESS.getListGridField("110"));
fields.add(FIELD_PORT.getListGridField("90"));
- ListGridField lastAvailabilityReportField = FIELD_LAST_AVAILABILITY_REPORT.getListGridField("90");
+ ListGridField lastAvailabilityReportField = FIELD_LAST_AVAILABILITY_REPORT.getListGridField("120");
TimestampCellFormatter.prepareDateField(lastAvailabilityReportField);
fields.add(lastAvailabilityReportField);
@@ -97,7 +97,6 @@ public class AgentNodeDatasource extends RPCDataSource<Agent, Criteria> {
protected void executeFetch(final DSRequest request, final DSResponse response, Criteria criteria) {
final PageControl pc = getPageControl(request);
- // TODO: null is for all agents -> change to particular server id
GWTServiceLookup.getAgentService().getAgentsByServer(serverId, pc, new AsyncCallback<PageList<Agent>>() {
public void onSuccess(PageList<Agent> result) {
response.setData(buildRecords(result));
@@ -151,9 +150,10 @@ public class AgentNodeDatasource extends RPCDataSource<Agent, Criteria> {
record.setAttribute(FIELD_NAME.propertyName(), from.getName());
record.setAttribute(FIELD_ADDRESS.propertyName(), from.getAddress());
record.setAttribute(FIELD_PORT.propertyName(), from.getPort());
- record.setAttribute(FIELD_SERVER.propertyName(), from.getServer().getName());
+ record.setAttribute(FIELD_SERVER.propertyName(), from.getServer() == null ? "none" : from.getServer().getName());
record.setAttribute(FIELD_LAST_AVAILABILITY_REPORT.propertyName(), from.getLastAvailabilityReport());
- record.setAttribute(FIELD_AFFINITY_GROUP.propertyName(), from.getAffinityGroup());
+ record.setAttribute(FIELD_AFFINITY_GROUP.propertyName(), from.getAffinityGroup() == null ? "" : from
+ .getAffinityGroup().getName());
return record;
}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentTableView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentTableView.java
index d0948f4..ae4dc50 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentTableView.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentTableView.java
@@ -18,14 +18,12 @@
*/
package org.rhq.enterprise.gui.coregui.client.admin.topology;
-import java.util.ArrayList;
import java.util.List;
import com.smartgwt.client.types.SortDirection;
import com.smartgwt.client.widgets.Canvas;
import com.smartgwt.client.widgets.grid.ListGrid;
import com.smartgwt.client.widgets.grid.ListGridField;
-import com.smartgwt.client.widgets.grid.ListGridRecord;
import org.rhq.enterprise.gui.coregui.client.IconEnum;
import org.rhq.enterprise.gui.coregui.client.admin.AdministrationView;
@@ -61,30 +59,30 @@ public class AgentTableView extends TableSection<AgentNodeDatasource> {
@Override
public Canvas getDetailsView(Integer id) {
- return new ServerDetailView(extendLocatorId("detailsView"), id);
+ return new AgentDetailView(extendLocatorId("detailsView"), id);
}
- private int[] getSelectedIds(ListGridRecord[] selections) {
- if (selections == null) {
- return new int[0];
- }
- int[] ids = new int[selections.length];
- int i = 0;
- for (ListGridRecord selection : selections) {
- ids[i++] = selection.getAttributeAsInt(FIELD_ID);
- }
- return ids;
- }
-
- private ArrayList<String> getSelectedNames(ListGridRecord[] selections) {
- if (selections == null) {
- return new ArrayList<String>(0);
- }
- ArrayList<String> ids = new ArrayList<String>(selections.length);
- for (ListGridRecord selection : selections) {
- ids.add(selection.getAttributeAsString(FIELD_NAME));
- }
- return ids;
- }
+// private int[] getSelectedIds(ListGridRecord[] selections) {
+// if (selections == null) {
+// return new int[0];
+// }
+// int[] ids = new int[selections.length];
+// int i = 0;
+// for (ListGridRecord selection : selections) {
+// ids[i++] = selection.getAttributeAsInt(FIELD_ID);
+// }
+// return ids;
+// }
+//
+// private ArrayList<String> getSelectedNames(ListGridRecord[] selections) {
+// if (selections == null) {
+// return new ArrayList<String>(0);
+// }
+// ArrayList<String> ids = new ArrayList<String>(selections.length);
+// for (ListGridRecord selection : selections) {
+// ids.add(selection.getAttributeAsString(FIELD_NAME));
+// }
+// return ids;
+// }
}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/FailoverListItemDatasource.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/FailoverListItemDatasource.java
new file mode 100644
index 0000000..0e21356
--- /dev/null
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/FailoverListItemDatasource.java
@@ -0,0 +1,169 @@
+/*
+ * RHQ Management Platform
+ * Copyright (C) 2005-2012 Red Hat, Inc.
+ * All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation version 2 of the License.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+package org.rhq.enterprise.gui.coregui.client.admin.topology;
+
+import static org.rhq.enterprise.gui.coregui.client.admin.topology.FailoverListItemDatasourceField.FIELD_ADDRESS;
+import static org.rhq.enterprise.gui.coregui.client.admin.topology.FailoverListItemDatasourceField.FIELD_AFFINITY_GROUP;
+import static org.rhq.enterprise.gui.coregui.client.admin.topology.FailoverListItemDatasourceField.FIELD_ID;
+import static org.rhq.enterprise.gui.coregui.client.admin.topology.FailoverListItemDatasourceField.FIELD_MTIME;
+import static org.rhq.enterprise.gui.coregui.client.admin.topology.FailoverListItemDatasourceField.FIELD_NAME;
+import static org.rhq.enterprise.gui.coregui.client.admin.topology.FailoverListItemDatasourceField.FIELD_OPERATION_MODE;
+import static org.rhq.enterprise.gui.coregui.client.admin.topology.FailoverListItemDatasourceField.FIELD_ORDINAL;
+import static org.rhq.enterprise.gui.coregui.client.admin.topology.FailoverListItemDatasourceField.FIELD_PORT;
+import static org.rhq.enterprise.gui.coregui.client.admin.topology.FailoverListItemDatasourceField.FIELD_SECURE_PORT;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import com.google.gwt.user.client.rpc.AsyncCallback;
+import com.smartgwt.client.data.DSRequest;
+import com.smartgwt.client.data.DSResponse;
+import com.smartgwt.client.data.DataSourceField;
+import com.smartgwt.client.data.Record;
+import com.smartgwt.client.data.fields.DataSourceIntegerField;
+import com.smartgwt.client.widgets.grid.ListGridField;
+import com.smartgwt.client.widgets.grid.ListGridRecord;
+
+import org.rhq.core.domain.cloud.FailoverListDetails;
+import org.rhq.core.domain.criteria.Criteria;
+import org.rhq.core.domain.util.PageControl;
+import org.rhq.core.domain.util.PageOrdering;
+import org.rhq.enterprise.gui.coregui.client.components.table.TimestampCellFormatter;
+import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup;
+
+/**
+ * @author Jirka Kremser
+ *
+ */
+public class FailoverListItemDatasource extends ServerDatasource<FailoverListDetails, Criteria> {
+
+ private final int agentId;
+
+ public FailoverListItemDatasource(int agentId) {
+ super();
+ this.agentId = agentId;
+ List<DataSourceField> fields = addDataSourceFields();
+ addFields(fields);
+ }
+
+ @Override
+ protected List<DataSourceField> addDataSourceFields() {
+ List<DataSourceField> fields = super.addDataSourceFields();
+ DataSourceField idField = new DataSourceIntegerField(FIELD_ID.propertyName(), FIELD_ID.title(), 50);
+ idField.setPrimaryKey(true);
+ idField.setHidden(true);
+ fields.add(idField);
+ return fields;
+ }
+
+ @Override
+ public List<ListGridField> getListGridFields() {
+ List<ListGridField> fields = new ArrayList<ListGridField>();
+
+ ListGridField idField = FIELD_ID.getListGridField();
+ idField.setHidden(true);
+ fields.add(idField);
+ fields.add(FIELD_ORDINAL.getListGridField("55"));
+ fields.add(FIELD_NAME.getListGridField("*"));
+ fields.add(FIELD_OPERATION_MODE.getListGridField("90"));
+ fields.add(FIELD_ADDRESS.getListGridField("110"));
+ fields.add(FIELD_PORT.getListGridField("90"));
+ fields.add(FIELD_SECURE_PORT.getListGridField("75"));
+
+ ListGridField lastUpdateTimeField = FIELD_MTIME.getListGridField("110");
+ TimestampCellFormatter.prepareDateField(lastUpdateTimeField);
+ fields.add(lastUpdateTimeField);
+
+ fields.add(FIELD_AFFINITY_GROUP.getListGridField("80"));
+
+ return fields;
+ }
+
+ @Override
+ protected void executeFetch(final DSRequest request, final DSResponse response, Criteria criteria) {
+ final PageControl pc = getPageControl(request);
+
+ GWTServiceLookup.getCloudService().getFailoverListDetailsByAgentId(agentId, pc, new AsyncCallback<List<FailoverListDetails>>() {
+ public void onSuccess(List<FailoverListDetails> result) {
+ response.setData(buildRecords(result));
+ response.setTotalRows(result.size());
+ processResponse(request.getRequestId(), response);
+ }
+
+ @Override
+ public void onFailure(Throwable t) {
+ //todo: CoreGUI.getErrorHandler().handleError(MSG.view_admin_plugins_loadFailure(), t);
+ response.setStatus(DSResponse.STATUS_FAILURE);
+ processResponse(request.getRequestId(), response);
+ }
+ });
+ }
+
+ /**
+ * Returns a prepopulated PageControl based on the provided DSRequest. This will set sort fields,
+ * pagination, but *not* filter fields.
+ *
+ * @param request the request to turn into a page control
+ * @return the page control for passing to criteria and other queries
+ */
+ protected PageControl getPageControl(DSRequest request) {
+ // Initialize paging.
+ PageControl pageControl = new PageControl(0, getDataPageSize());
+
+ // Initialize sorting.
+ String sortBy = request.getAttribute("sortBy");
+ if (sortBy != null) {
+ String[] sorts = sortBy.split(",");
+ for (String sort : sorts) {
+ PageOrdering ordering = (sort.startsWith("-")) ? PageOrdering.DESC : PageOrdering.ASC;
+ String columnName = (ordering == PageOrdering.DESC) ? sort.substring(1) : sort;
+ pageControl.addDefaultOrderingField(columnName, ordering);
+ }
+ }
+
+ return pageControl;
+ }
+
+ @Override
+ public FailoverListDetails copyValues(Record from) {
+ throw new UnsupportedOperationException("ServerTableView.CloudDataSourcepublic Server copyValues(Record from)");
+ }
+
+ @Override
+ public ListGridRecord copyValues(FailoverListDetails from) {
+ ListGridRecord record = new ListGridRecord();
+ record.setAttribute(FIELD_ID.propertyName(), from.getServer().getId());
+ record.setAttribute(FIELD_ORDINAL.propertyName(), from.getOrdinal());
+ record.setAttribute(FIELD_NAME.propertyName(), from.getServer().getName());
+ record.setAttribute(FIELD_OPERATION_MODE.propertyName(), from.getServer().getOperationMode());
+ record.setAttribute(FIELD_ADDRESS.propertyName(), from.getServer().getAddress());
+ record.setAttribute(FIELD_PORT.propertyName(), from.getServer().getPort());
+ record.setAttribute(FIELD_SECURE_PORT.propertyName(), from.getServer().getSecurePort());
+ record.setAttribute(FIELD_MTIME.propertyName(), from.getServer().getMtime());
+ record.setAttribute(FIELD_AFFINITY_GROUP.propertyName(), from.getServer().getAffinityGroup() == null ? ""
+ : from.getServer().getAffinityGroup().getName());
+ return record;
+ }
+
+ @Override
+ protected Criteria getFetchCriteria(DSRequest request) {
+ // we don't use criteria for this datasource, just return null
+ return null;
+ }
+}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/FailoverListItemDatasourceField.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/FailoverListItemDatasourceField.java
new file mode 100644
index 0000000..4c380fd
--- /dev/null
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/FailoverListItemDatasourceField.java
@@ -0,0 +1,83 @@
+/*
+ * RHQ Management Platform
+ * Copyright (C) 2005-2012 Red Hat, Inc.
+ * All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation version 2 of the License.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+package org.rhq.enterprise.gui.coregui.client.admin.topology;
+
+import com.smartgwt.client.widgets.grid.ListGridField;
+
+import org.rhq.enterprise.gui.coregui.client.CoreGUI;
+
+/**
+ * @author Jirka Kremser
+ *
+ */
+public enum FailoverListItemDatasourceField {
+
+ FIELD_ID("id", CoreGUI.getMessages().common_title_id()),
+
+ FIELD_ORDINAL("ordinal", "poradi"),
+
+ FIELD_NAME("name", CoreGUI.getMessages().common_title_name()),
+
+ FIELD_OPERATION_MODE("operationMode", CoreGUI.getMessages().view_adminTopology_server_mode()),
+
+ FIELD_ADDRESS("address", CoreGUI.getMessages().view_adminTopology_server_endpointAddress()),
+
+ FIELD_PORT("port", CoreGUI.getMessages().view_adminTopology_server_nonSecurePort()),
+
+ FIELD_SECURE_PORT("securePort", CoreGUI.getMessages().view_adminTopology_server_securePort()),
+
+ FIELD_MTIME("mtime", CoreGUI.getMessages().view_adminTopology_server_lastUpdateTime()),
+
+ FIELD_AFFINITY_GROUP("affinityGroup", CoreGUI.getMessages().view_adminTopology_server_affinityGroup()),
+
+ FIELD_AGENT_COUNT("agentCount", CoreGUI.getMessages().view_adminTopology_server_agentCount());
+
+ /**
+ * Corresponds to a property name of Server (e.g. operationMode).
+ */
+ private String propertyName;
+
+ /**
+ * The table header for the field or property (e.g. Mode).
+ */
+ private String title;
+
+ private FailoverListItemDatasourceField(String propertyName, String title) {
+ this.propertyName = propertyName;
+ this.title = title;
+ }
+
+ public String propertyName() {
+ return propertyName;
+ }
+
+ public String title() {
+ return title;
+ }
+
+ public ListGridField getListGridField() {
+ return new ListGridField(propertyName, title);
+ }
+
+ public ListGridField getListGridField(String width) {
+ ListGridField field = new ListGridField(propertyName, title);
+ field.setWidth(width);
+ return field;
+ }
+}
\ No newline at end of file
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDatasource.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDatasource.java
new file mode 100644
index 0000000..619821d
--- /dev/null
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDatasource.java
@@ -0,0 +1,33 @@
+/*
+ * RHQ Management Platform
+ * Copyright (C) 2005-2012 Red Hat, Inc.
+ * All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation version 2 of the License.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+package org.rhq.enterprise.gui.coregui.client.admin.topology;
+
+import java.util.List;
+
+import com.smartgwt.client.widgets.grid.ListGridField;
+
+import org.rhq.core.domain.criteria.BaseCriteria;
+import org.rhq.enterprise.gui.coregui.client.util.RPCDataSource;
+
+/**
+ * @author Jirka Kremser
+ */
+public abstract class ServerDatasource<T, C extends BaseCriteria> extends RPCDataSource<T, C> {
+ protected abstract List<ListGridField> getListGridFields();
+}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDetailView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDetailView.java
index 1d5ae15..1d9dc46 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDetailView.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDetailView.java
@@ -19,16 +19,14 @@
package org.rhq.enterprise.gui.coregui.client.admin.topology;
-import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerNodeDatasourceField.FIELD_ADDRESS;
-import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerNodeDatasourceField.FIELD_AFFINITY_GROUP;
-import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerNodeDatasourceField.FIELD_CTIME;
-import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerNodeDatasourceField.FIELD_MTIME;
-import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerNodeDatasourceField.FIELD_NAME;
-import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerNodeDatasourceField.FIELD_OPERATION_MODE;
-import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerNodeDatasourceField.FIELD_PORT;
-import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerNodeDatasourceField.FIELD_SECURE_PORT;
-
-import java.util.List;
+import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerWithAgentCountDatasourceField.FIELD_ADDRESS;
+import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerWithAgentCountDatasourceField.FIELD_AFFINITY_GROUP;
+import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerWithAgentCountDatasourceField.FIELD_CTIME;
+import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerWithAgentCountDatasourceField.FIELD_MTIME;
+import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerWithAgentCountDatasourceField.FIELD_NAME;
+import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerWithAgentCountDatasourceField.FIELD_OPERATION_MODE;
+import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerWithAgentCountDatasourceField.FIELD_PORT;
+import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerWithAgentCountDatasourceField.FIELD_SECURE_PORT;
import com.google.gwt.user.client.Timer;
import com.google.gwt.user.client.rpc.AsyncCallback;
@@ -46,7 +44,6 @@ import com.smartgwt.client.widgets.layout.SectionStack;
import com.smartgwt.client.widgets.layout.SectionStackSection;
import org.rhq.core.domain.cloud.Server;
-import org.rhq.core.domain.resource.Agent;
import org.rhq.enterprise.gui.coregui.client.components.table.TimestampCellFormatter;
import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup;
import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableDynamicForm;
@@ -90,16 +87,17 @@ public class ServerDetailView extends LocatableVLayout {
GWTServiceLookup.getCloudService().getServerById(this.serverId, new AsyncCallback<Server>() {
public void onSuccess(final Server server) {
prepareDetailsSection(sectionStack, server);
- GWTServiceLookup.getCloudService().getAgentsByServerName(server.getName(),
- new AsyncCallback<List<Agent>>() {
- public void onSuccess(List<Agent> agents) {
- prepareAgentSection(sectionStack, server, agents);
- };
-
- public void onFailure(Throwable caught) {
- //TODO: CoreGUI.getErrorHandler().handleError(MSG.view_admin_plugins_loadFailure(), caught);
- }
- });
+ prepareAgentSection(sectionStack, server);
+// GWTServiceLookup.getCloudService().getAgentsByServerName(server.getName(),
+// new AsyncCallback<List<Agent>>() {
+// public void onSuccess(List<Agent> agents) {
+// prepareAgentSection(sectionStack, server, agents);
+// };
+//
+// public void onFailure(Throwable caught) {
+// //TODO: CoreGUI.getErrorHandler().handleError(MSG.view_admin_plugins_loadFailure(), caught);
+// }
+// });
}
public void onFailure(Throwable caught) {
@@ -146,7 +144,7 @@ public class ServerDetailView extends LocatableVLayout {
}.run(); // fire the timer immediately
}
- private void prepareAgentSection(SectionStack stack, Server server, List<Agent> agents) {
+ private void prepareAgentSection(SectionStack stack, Server server) {
SectionStackSection section = new SectionStackSection(MSG.view_adminTopology_serverDetail_connectedAgents());
section.setExpanded(true);
AgentTableView agentsTable = new AgentTableView(extendLocatorId(AgentTableView.VIEW_ID.getName()), null, serverId);
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerNodeDatasource.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerNodeDatasource.java
deleted file mode 100644
index de6cf21..0000000
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerNodeDatasource.java
+++ /dev/null
@@ -1,166 +0,0 @@
-/*
- * RHQ Management Platform
- * Copyright (C) 2005-2012 Red Hat, Inc.
- * All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation version 2 of the License.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-package org.rhq.enterprise.gui.coregui.client.admin.topology;
-
-import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerNodeDatasourceField.FIELD_ADDRESS;
-import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerNodeDatasourceField.FIELD_AFFINITY_GROUP;
-import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerNodeDatasourceField.FIELD_AGENT_COUNT;
-import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerNodeDatasourceField.FIELD_ID;
-import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerNodeDatasourceField.FIELD_MTIME;
-import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerNodeDatasourceField.FIELD_NAME;
-import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerNodeDatasourceField.FIELD_OPERATION_MODE;
-import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerNodeDatasourceField.FIELD_PORT;
-import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerNodeDatasourceField.FIELD_SECURE_PORT;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import com.google.gwt.user.client.rpc.AsyncCallback;
-import com.smartgwt.client.data.DSRequest;
-import com.smartgwt.client.data.DSResponse;
-import com.smartgwt.client.data.DataSourceField;
-import com.smartgwt.client.data.Record;
-import com.smartgwt.client.data.fields.DataSourceIntegerField;
-import com.smartgwt.client.widgets.grid.ListGridField;
-import com.smartgwt.client.widgets.grid.ListGridRecord;
-
-import org.rhq.core.domain.cloud.composite.ServerWithAgentCountComposite;
-import org.rhq.core.domain.criteria.Criteria;
-import org.rhq.core.domain.util.PageControl;
-import org.rhq.core.domain.util.PageOrdering;
-import org.rhq.enterprise.gui.coregui.client.components.table.TimestampCellFormatter;
-import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup;
-import org.rhq.enterprise.gui.coregui.client.util.RPCDataSource;
-
-/**
- * @author Jirka Kremser
- *
- */
-public class ServerNodeDatasource extends RPCDataSource<ServerWithAgentCountComposite, Criteria> {
-
- public ServerNodeDatasource() {
- super();
- List<DataSourceField> fields = addDataSourceFields();
- addFields(fields);
- }
-
- @Override
- protected List<DataSourceField> addDataSourceFields() {
- List<DataSourceField> fields = super.addDataSourceFields();
- DataSourceField idField = new DataSourceIntegerField(FIELD_ID.propertyName(), FIELD_ID.title(), 50);
- idField.setPrimaryKey(true);
- idField.setHidden(true);
- fields.add(idField);
- return fields;
- }
-
- public List<ListGridField> getListGridFields() {
- List<ListGridField> fields = new ArrayList<ListGridField>();
-
- ListGridField idField = FIELD_ID.getListGridField();
- idField.setHidden(true);
- fields.add(idField);
-
- fields.add(FIELD_NAME.getListGridField("*"));
- fields.add(FIELD_OPERATION_MODE.getListGridField("90"));
- fields.add(FIELD_ADDRESS.getListGridField("20%"));
- fields.add(FIELD_PORT.getListGridField("90"));
- fields.add(FIELD_SECURE_PORT.getListGridField("75"));
-
- ListGridField lastUpdateTimeField = FIELD_MTIME.getListGridField("20%");
- TimestampCellFormatter.prepareDateField(lastUpdateTimeField);
- fields.add(lastUpdateTimeField);
-
- fields.add(FIELD_AFFINITY_GROUP.getListGridField("80"));
- fields.add(FIELD_AGENT_COUNT.getListGridField("75"));
-
- return fields;
- }
-
- @Override
- protected void executeFetch(final DSRequest request, final DSResponse response, Criteria criteria) {
- final PageControl pc = getPageControl(request);
-
- GWTServiceLookup.getCloudService().getServers(pc, new AsyncCallback<List<ServerWithAgentCountComposite>>() {
- public void onSuccess(List<ServerWithAgentCountComposite> result) {
- response.setData(buildRecords(result));
- response.setTotalRows(result.size());
- processResponse(request.getRequestId(), response);
- }
-
- @Override
- public void onFailure(Throwable t) {
- //todo: CoreGUI.getErrorHandler().handleError(MSG.view_admin_plugins_loadFailure(), t);
- response.setStatus(DSResponse.STATUS_FAILURE);
- processResponse(request.getRequestId(), response);
- }
- });
- }
-
- /**
- * Returns a prepopulated PageControl based on the provided DSRequest. This will set sort fields,
- * pagination, but *not* filter fields.
- *
- * @param request the request to turn into a page control
- * @return the page control for passing to criteria and other queries
- */
- protected PageControl getPageControl(DSRequest request) {
- // Initialize paging.
- PageControl pageControl = new PageControl(0, getDataPageSize());
-
- // Initialize sorting.
- String sortBy = request.getAttribute("sortBy");
- if (sortBy != null) {
- String[] sorts = sortBy.split(",");
- for (String sort : sorts) {
- PageOrdering ordering = (sort.startsWith("-")) ? PageOrdering.DESC : PageOrdering.ASC;
- String columnName = (ordering == PageOrdering.DESC) ? sort.substring(1) : sort;
- pageControl.addDefaultOrderingField(columnName, ordering);
- }
- }
-
- return pageControl;
- }
-
- @Override
- public ServerWithAgentCountComposite copyValues(Record from) {
- throw new UnsupportedOperationException("ServerTableView.CloudDataSourcepublic Server copyValues(Record from)");
- }
-
- @Override
- public ListGridRecord copyValues(ServerWithAgentCountComposite from) {
- ListGridRecord record = new ListGridRecord();
- record.setAttribute(FIELD_ID.propertyName(), from.getServer().getId());
- record.setAttribute(FIELD_NAME.propertyName(), from.getServer().getName());
- record.setAttribute(FIELD_OPERATION_MODE.propertyName(), from.getServer().getOperationMode());
- record.setAttribute(FIELD_ADDRESS.propertyName(), from.getServer().getAddress());
- record.setAttribute(FIELD_PORT.propertyName(), from.getServer().getPort());
- record.setAttribute(FIELD_SECURE_PORT.propertyName(), from.getServer().getSecurePort());
- record.setAttribute(FIELD_MTIME.propertyName(), from.getServer().getMtime());
- record.setAttribute(FIELD_AFFINITY_GROUP.propertyName(), from.getServer().getAffinityGroup());
- record.setAttribute(FIELD_AGENT_COUNT.propertyName(), from.getAgentCount());
- return record;
- }
-
- @Override
- protected Criteria getFetchCriteria(DSRequest request) {
- // we don't use criteria for this datasource, just return null
- return null;
- }
-}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerNodeDatasourceField.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerNodeDatasourceField.java
deleted file mode 100644
index 1e88e4d..0000000
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerNodeDatasourceField.java
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- * RHQ Management Platform
- * Copyright (C) 2005-2012 Red Hat, Inc.
- * All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation version 2 of the License.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-package org.rhq.enterprise.gui.coregui.client.admin.topology;
-
-import com.smartgwt.client.widgets.grid.ListGridField;
-
-import org.rhq.enterprise.gui.coregui.client.CoreGUI;
-
-/**
- * @author Jirka Kremser
- *
- */
-public enum ServerNodeDatasourceField {
-
- FIELD_ID("id", CoreGUI.getMessages().common_title_id()),
-
- FIELD_NAME("name", CoreGUI.getMessages().common_title_name()),
-
- FIELD_OPERATION_MODE("operationMode", CoreGUI.getMessages().view_adminTopology_server_mode()),
-
- FIELD_ADDRESS("address", CoreGUI.getMessages().view_adminTopology_server_endpointAddress()),
-
- FIELD_PORT("port", CoreGUI.getMessages().view_adminTopology_server_nonSecurePort()),
-
- FIELD_SECURE_PORT("securePort", CoreGUI.getMessages().view_adminTopology_server_securePort()),
-
- FIELD_CTIME("ctime", CoreGUI.getMessages().view_adminTopology_serverDetail_installationDate()),
-
- FIELD_MTIME("mtime", CoreGUI.getMessages().view_adminTopology_server_lastUpdateTime()),
-
- FIELD_AFFINITY_GROUP("affinityGroup", CoreGUI.getMessages().view_adminTopology_server_affinityGroup()),
-
- FIELD_AGENT_COUNT("agentCount", CoreGUI.getMessages().view_adminTopology_server_agentCount());
-
- /**
- * Corresponds to a property name of Server (e.g. operationMode).
- */
- private String propertyName;
-
- /**
- * The table header for the field or property (e.g. Mode).
- */
- private String title;
-
- private ServerNodeDatasourceField(String propertyName, String title) {
- this.propertyName = propertyName;
- this.title = title;
- }
-
- public String propertyName() {
- return propertyName;
- }
-
- public String title() {
- return title;
- }
-
- public ListGridField getListGridField() {
- return new ListGridField(propertyName, title);
- }
-
- public ListGridField getListGridField(String width) {
- ListGridField field = new ListGridField(propertyName, title);
- field.setWidth(width);
- return field;
- }
-}
\ No newline at end of file
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerTableView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerTableView.java
index 6817fdf..36c77ab 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerTableView.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerTableView.java
@@ -18,6 +18,8 @@
*/
package org.rhq.enterprise.gui.coregui.client.admin.topology;
+import static org.rhq.enterprise.gui.coregui.client.admin.topology.FailoverListItemDatasourceField.FIELD_ORDINAL;
+
import java.util.ArrayList;
import java.util.List;
@@ -45,18 +47,21 @@ import org.rhq.enterprise.gui.coregui.client.util.message.Message;
/**
* @author Jiri Kremser
*/
-public class ServerTableView extends TableSection<ServerNodeDatasource> {
+public class ServerTableView extends TableSection<ServerDatasource> {
public static final ViewName VIEW_ID = new ViewName("Servers(GWT)", MSG.view_adminTopology_servers() + "(GWT)",
IconEnum.SERVERS);
public static final String VIEW_PATH = AdministrationView.VIEW_ID + "/"
+ AdministrationView.SECTION_CONFIGURATION_VIEW_ID + "/" + VIEW_ID;
+
+ private final boolean showActions;
- public ServerTableView(String locatorId, String tableTitle) {
+ public ServerTableView(String locatorId, String tableTitle, Integer agentId) {
super(locatorId, tableTitle);
+ this.showActions = agentId == null;
setHeight100();
setWidth100();
- setDataSource(new ServerNodeDatasource());
+ setDataSource(showActions ? new ServerWithAgentCountDatasource() : new FailoverListItemDatasource(agentId));
}
@Override
@@ -64,8 +69,21 @@ public class ServerTableView extends TableSection<ServerNodeDatasource> {
List<ListGridField> fields = getDataSource().getListGridFields();
ListGrid listGrid = getListGrid();
listGrid.setFields(fields.toArray(new ListGridField[fields.size()]));
- listGrid.sort(FIELD_NAME, SortDirection.ASCENDING);
+ if (showActions) {
+ listGrid.sort(FIELD_NAME, SortDirection.ASCENDING);
+ showActions();
+ } else {
+ listGrid.sort(FIELD_ORDINAL.propertyName(), SortDirection.ASCENDING);
+ }
+ super.configureTable();
+ }
+ @Override
+ public Canvas getDetailsView(Integer id) {
+ return new ServerDetailView(extendLocatorId("detailsView"), id);
+ }
+
+ private void showActions() {
addTableAction(extendLocatorId("setNormal"), MSG.view_adminTopology_server_setNormal(),
MSG.common_msg_areYouSure(), new AuthorizedTableAction(this, TableActionEnablement.ANY,
Permission.MANAGE_SETTINGS) {
@@ -182,13 +200,6 @@ public class ServerTableView extends TableSection<ServerNodeDatasource> {
});
}
});
-
- super.configureTable();
- }
-
- @Override
- public Canvas getDetailsView(Integer id) {
- return new ServerDetailView(extendLocatorId("detailsView"), id);
}
private int[] getSelectedIds(ListGridRecord[] selections) {
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerWithAgentCountDatasource.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerWithAgentCountDatasource.java
new file mode 100644
index 0000000..916f891
--- /dev/null
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerWithAgentCountDatasource.java
@@ -0,0 +1,166 @@
+/*
+ * RHQ Management Platform
+ * Copyright (C) 2005-2012 Red Hat, Inc.
+ * All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation version 2 of the License.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+package org.rhq.enterprise.gui.coregui.client.admin.topology;
+
+import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerWithAgentCountDatasourceField.FIELD_ADDRESS;
+import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerWithAgentCountDatasourceField.FIELD_AFFINITY_GROUP;
+import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerWithAgentCountDatasourceField.FIELD_AGENT_COUNT;
+import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerWithAgentCountDatasourceField.FIELD_ID;
+import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerWithAgentCountDatasourceField.FIELD_MTIME;
+import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerWithAgentCountDatasourceField.FIELD_NAME;
+import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerWithAgentCountDatasourceField.FIELD_OPERATION_MODE;
+import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerWithAgentCountDatasourceField.FIELD_PORT;
+import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerWithAgentCountDatasourceField.FIELD_SECURE_PORT;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import com.google.gwt.user.client.rpc.AsyncCallback;
+import com.smartgwt.client.data.DSRequest;
+import com.smartgwt.client.data.DSResponse;
+import com.smartgwt.client.data.DataSourceField;
+import com.smartgwt.client.data.Record;
+import com.smartgwt.client.data.fields.DataSourceIntegerField;
+import com.smartgwt.client.widgets.grid.ListGridField;
+import com.smartgwt.client.widgets.grid.ListGridRecord;
+
+import org.rhq.core.domain.cloud.composite.ServerWithAgentCountComposite;
+import org.rhq.core.domain.criteria.Criteria;
+import org.rhq.core.domain.util.PageControl;
+import org.rhq.core.domain.util.PageOrdering;
+import org.rhq.enterprise.gui.coregui.client.components.table.TimestampCellFormatter;
+import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup;
+
+/**
+ * @author Jirka Kremser
+ *
+ */
+public class ServerWithAgentCountDatasource extends ServerDatasource<ServerWithAgentCountComposite, Criteria> {
+
+ public ServerWithAgentCountDatasource() {
+ super();
+ List<DataSourceField> fields = addDataSourceFields();
+ addFields(fields);
+ }
+
+ @Override
+ protected List<DataSourceField> addDataSourceFields() {
+ List<DataSourceField> fields = super.addDataSourceFields();
+ DataSourceField idField = new DataSourceIntegerField(FIELD_ID.propertyName(), FIELD_ID.title(), 50);
+ idField.setPrimaryKey(true);
+ idField.setHidden(true);
+ fields.add(idField);
+ return fields;
+ }
+
+ public List<ListGridField> getListGridFields() {
+ List<ListGridField> fields = new ArrayList<ListGridField>();
+
+ ListGridField idField = FIELD_ID.getListGridField();
+ idField.setHidden(true);
+ fields.add(idField);
+
+ fields.add(FIELD_NAME.getListGridField("*"));
+ fields.add(FIELD_OPERATION_MODE.getListGridField("90"));
+ fields.add(FIELD_ADDRESS.getListGridField("110"));
+ fields.add(FIELD_PORT.getListGridField("90"));
+ fields.add(FIELD_SECURE_PORT.getListGridField("75"));
+
+ ListGridField lastUpdateTimeField = FIELD_MTIME.getListGridField("110");
+ TimestampCellFormatter.prepareDateField(lastUpdateTimeField);
+ fields.add(lastUpdateTimeField);
+
+ fields.add(FIELD_AFFINITY_GROUP.getListGridField("80"));
+ fields.add(FIELD_AGENT_COUNT.getListGridField("75"));
+
+ return fields;
+ }
+
+ @Override
+ protected void executeFetch(final DSRequest request, final DSResponse response, Criteria criteria) {
+ final PageControl pc = getPageControl(request);
+
+ GWTServiceLookup.getCloudService().getServers(pc, new AsyncCallback<List<ServerWithAgentCountComposite>>() {
+ public void onSuccess(List<ServerWithAgentCountComposite> result) {
+ response.setData(buildRecords(result));
+ response.setTotalRows(result.size());
+ processResponse(request.getRequestId(), response);
+ }
+
+ @Override
+ public void onFailure(Throwable t) {
+ //todo: CoreGUI.getErrorHandler().handleError(MSG.view_admin_plugins_loadFailure(), t);
+ response.setStatus(DSResponse.STATUS_FAILURE);
+ processResponse(request.getRequestId(), response);
+ }
+ });
+ }
+
+ /**
+ * Returns a prepopulated PageControl based on the provided DSRequest. This will set sort fields,
+ * pagination, but *not* filter fields.
+ *
+ * @param request the request to turn into a page control
+ * @return the page control for passing to criteria and other queries
+ */
+ protected PageControl getPageControl(DSRequest request) {
+ // Initialize paging.
+ PageControl pageControl = new PageControl(0, getDataPageSize());
+
+ // Initialize sorting.
+ String sortBy = request.getAttribute("sortBy");
+ if (sortBy != null) {
+ String[] sorts = sortBy.split(",");
+ for (String sort : sorts) {
+ PageOrdering ordering = (sort.startsWith("-")) ? PageOrdering.DESC : PageOrdering.ASC;
+ String columnName = (ordering == PageOrdering.DESC) ? sort.substring(1) : sort;
+ pageControl.addDefaultOrderingField(columnName, ordering);
+ }
+ }
+
+ return pageControl;
+ }
+
+ @Override
+ public ServerWithAgentCountComposite copyValues(Record from) {
+ throw new UnsupportedOperationException("ServerTableView.CloudDataSourcepublic Server copyValues(Record from)");
+ }
+
+ @Override
+ public ListGridRecord copyValues(ServerWithAgentCountComposite from) {
+ ListGridRecord record = new ListGridRecord();
+ record.setAttribute(FIELD_ID.propertyName(), from.getServer().getId());
+ record.setAttribute(FIELD_NAME.propertyName(), from.getServer().getName());
+ record.setAttribute(FIELD_OPERATION_MODE.propertyName(), from.getServer().getOperationMode());
+ record.setAttribute(FIELD_ADDRESS.propertyName(), from.getServer().getAddress());
+ record.setAttribute(FIELD_PORT.propertyName(), from.getServer().getPort());
+ record.setAttribute(FIELD_SECURE_PORT.propertyName(), from.getServer().getSecurePort());
+ record.setAttribute(FIELD_MTIME.propertyName(), from.getServer().getMtime());
+ record.setAttribute(FIELD_AFFINITY_GROUP.propertyName(), from.getServer().getAffinityGroup() == null ? ""
+ : from.getServer().getAffinityGroup().getName());
+ record.setAttribute(FIELD_AGENT_COUNT.propertyName(), from.getAgentCount());
+ return record;
+ }
+
+ @Override
+ protected Criteria getFetchCriteria(DSRequest request) {
+ // we don't use criteria for this datasource, just return null
+ return null;
+ }
+}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerWithAgentCountDatasourceField.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerWithAgentCountDatasourceField.java
new file mode 100644
index 0000000..f393288
--- /dev/null
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerWithAgentCountDatasourceField.java
@@ -0,0 +1,83 @@
+/*
+ * RHQ Management Platform
+ * Copyright (C) 2005-2012 Red Hat, Inc.
+ * All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation version 2 of the License.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+package org.rhq.enterprise.gui.coregui.client.admin.topology;
+
+import com.smartgwt.client.widgets.grid.ListGridField;
+
+import org.rhq.enterprise.gui.coregui.client.CoreGUI;
+
+/**
+ * @author Jirka Kremser
+ *
+ */
+public enum ServerWithAgentCountDatasourceField {
+
+ FIELD_ID("id", CoreGUI.getMessages().common_title_id()),
+
+ FIELD_NAME("name", CoreGUI.getMessages().common_title_name()),
+
+ FIELD_OPERATION_MODE("operationMode", CoreGUI.getMessages().view_adminTopology_server_mode()),
+
+ FIELD_ADDRESS("address", CoreGUI.getMessages().view_adminTopology_server_endpointAddress()),
+
+ FIELD_PORT("port", CoreGUI.getMessages().view_adminTopology_server_nonSecurePort()),
+
+ FIELD_SECURE_PORT("securePort", CoreGUI.getMessages().view_adminTopology_server_securePort()),
+
+ FIELD_CTIME("ctime", CoreGUI.getMessages().view_adminTopology_serverDetail_installationDate()),
+
+ FIELD_MTIME("mtime", CoreGUI.getMessages().view_adminTopology_server_lastUpdateTime()),
+
+ FIELD_AFFINITY_GROUP("affinityGroup", CoreGUI.getMessages().view_adminTopology_server_affinityGroup()),
+
+ FIELD_AGENT_COUNT("agentCount", CoreGUI.getMessages().view_adminTopology_server_agentCount());
+
+ /**
+ * Corresponds to a property name of Server (e.g. operationMode).
+ */
+ private String propertyName;
+
+ /**
+ * The table header for the field or property (e.g. Mode).
+ */
+ private String title;
+
+ private ServerWithAgentCountDatasourceField(String propertyName, String title) {
+ this.propertyName = propertyName;
+ this.title = title;
+ }
+
+ public String propertyName() {
+ return propertyName;
+ }
+
+ public String title() {
+ return title;
+ }
+
+ public ListGridField getListGridField() {
+ return new ListGridField(propertyName, title);
+ }
+
+ public ListGridField getListGridField(String width) {
+ ListGridField field = new ListGridField(propertyName, title);
+ field.setWidth(width);
+ return field;
+ }
+}
\ No newline at end of file
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/AgentGWTService.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/AgentGWTService.java
index e7c162a..89ac705 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/AgentGWTService.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/AgentGWTService.java
@@ -38,5 +38,7 @@ public interface AgentGWTService extends RemoteService {
Boolean pingAgentForResource(int resourceId) throws RuntimeException;
List<Agent> getAllAgents() throws RuntimeException;
+
+ Agent getAgentByID(int agentId) throws RuntimeException;
}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/CloudGWTService.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/CloudGWTService.java
index 44a285a..e1c695b 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/CloudGWTService.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/CloudGWTService.java
@@ -26,6 +26,7 @@ import java.util.List;
import com.google.gwt.user.client.rpc.RemoteService;
+import org.rhq.core.domain.cloud.FailoverListDetails;
import org.rhq.core.domain.cloud.Server;
import org.rhq.core.domain.cloud.composite.ServerWithAgentCountComposite;
import org.rhq.core.domain.resource.Agent;
@@ -50,5 +51,7 @@ public interface CloudGWTService extends RemoteService {
void deleteServers(int[] serverIds) throws RuntimeException;
void updateServerMode(int[] serverIds, Server.OperationMode mode) throws RuntimeException;
+
+ List<FailoverListDetails> getFailoverListDetailsByAgentId(int agentId, PageControl pc);
}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/AgentGWTServiceImpl.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/AgentGWTServiceImpl.java
index 5e2d50f..7a85d92 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/AgentGWTServiceImpl.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/AgentGWTServiceImpl.java
@@ -73,8 +73,18 @@ public class AgentGWTServiceImpl extends AbstractGWTServiceImpl implements Agent
@Override
public PageList<Agent> getAgentsByServer(Integer serverId, PageControl pc) throws RuntimeException {
try {
- //security handled in AgentManagerBean. requires View_Resource.
- return SerialUtility.prepare(agentManager.getAgentsByServer(getSessionSubject(), serverId, pc), "AgentService.getAgentsByServer");
+ //TODO: security handled in AgentManagerBean. requires View_Resource.
+ return SerialUtility.prepare(agentManager.getAgentsByServer(getSessionSubject(), serverId, pc),
+ "AgentService.getAgentsByServer");
+ } catch (Throwable t) {
+ throw getExceptionToThrowToClient(t);
+ }
+ }
+
+ @Override
+ public Agent getAgentByID(int agentId) throws RuntimeException {
+ try {
+ return SerialUtility.prepare(agentManager.getAgentByID(agentId), "AgentService.getAgentByID");
} catch (Throwable t) {
throw getExceptionToThrowToClient(t);
}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/CloudGWTServiceImpl.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/CloudGWTServiceImpl.java
index 118005f..0e5fd88 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/CloudGWTServiceImpl.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/CloudGWTServiceImpl.java
@@ -27,6 +27,7 @@ import java.util.List;
import org.apache.commons.lang.ArrayUtils;
+import org.rhq.core.domain.cloud.FailoverListDetails;
import org.rhq.core.domain.cloud.Server;
import org.rhq.core.domain.cloud.Server.OperationMode;
import org.rhq.core.domain.cloud.composite.ServerWithAgentCountComposite;
@@ -50,7 +51,8 @@ public class CloudGWTServiceImpl extends AbstractGWTServiceImpl implements Cloud
@Override
public PageList<ServerWithAgentCountComposite> getServers(PageControl pc) throws RuntimeException {
try {
- return SerialUtility.prepare(cloudManager.getServerComposites(getSessionSubject(), pc), "CloudGWTServiceImpl.getServers");
+ return SerialUtility.prepare(cloudManager.getServerComposites(getSessionSubject(), pc),
+ "CloudGWTServiceImpl.getServers");
} catch (Throwable t) {
throw getExceptionToThrowToClient(t);
}
@@ -68,14 +70,14 @@ public class CloudGWTServiceImpl extends AbstractGWTServiceImpl implements Cloud
@Override
public List<Agent> getAgentsByServerName(String serverName) throws RuntimeException {
try {
- List <Agent> persistentBag = SerialUtility.prepare(cloudManager.getAgentsByServerName(serverName), "CloudGWTServiceImpl.getAgentsByServerName");
+ List<Agent> persistentBag = SerialUtility.prepare(cloudManager.getAgentsByServerName(serverName),
+ "CloudGWTServiceImpl.getAgentsByServerName");
return new ArrayList<Agent>(persistentBag);
} catch (Throwable t) {
throw getExceptionToThrowToClient(t);
}
}
-
@Override
public void deleteServers(int[] serverIds) throws RuntimeException {
try {
@@ -85,7 +87,6 @@ public class CloudGWTServiceImpl extends AbstractGWTServiceImpl implements Cloud
}
}
-
@Override
public void updateServerMode(int[] serverIds, OperationMode mode) throws RuntimeException {
try {
@@ -95,4 +96,14 @@ public class CloudGWTServiceImpl extends AbstractGWTServiceImpl implements Cloud
}
}
+ @Override
+ public List<FailoverListDetails> getFailoverListDetailsByAgentId(int agentId, PageControl pc) {
+ try {
+ return SerialUtility.prepare(cloudManager.getFailoverListDetailsByAgentId(agentId, pc),
+ "CloudGWTServiceImpl.getFailoverListDetailsByAgentId");
+ } catch (Throwable t) {
+ throw getExceptionToThrowToClient(t);
+ }
+ }
+
}
commit 41d2e549663587ce3d6e81a962ffe6808a0fc1e6
Author: Jirka Kremser <jkremser(a)redhat.com>
Date: Sat Nov 24 13:42:24 2012 +0100
Detail of server is now fully functional, it also displays the list of connected agents
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/AdministrationView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/AdministrationView.java
index 963fee3..894c833 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/AdministrationView.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/AdministrationView.java
@@ -185,7 +185,7 @@ public class AdministrationView extends AbstractSectionedLeftNavigationView {
NavigationItem agentsItemGwt = new NavigationItem(AgentTableView.VIEW_ID, new ViewFactory() {
public Canvas createView() {
return new AgentTableView(extendLocatorId(AgentTableView.VIEW_ID.getName()),
- MSG.view_adminTopology_agents() + " (GWT)");
+ MSG.view_adminTopology_agents() + " (GWT)", null);
}
}, getGlobalPermissions().contains(Permission.MANAGE_INVENTORY));
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentNodeDatasource.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentNodeDatasource.java
index aaf6cc8..0792373 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentNodeDatasource.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentNodeDatasource.java
@@ -41,6 +41,7 @@ import com.smartgwt.client.widgets.grid.ListGridRecord;
import org.rhq.core.domain.criteria.Criteria;
import org.rhq.core.domain.resource.Agent;
import org.rhq.core.domain.util.PageControl;
+import org.rhq.core.domain.util.PageList;
import org.rhq.core.domain.util.PageOrdering;
import org.rhq.enterprise.gui.coregui.client.components.table.TimestampCellFormatter;
import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup;
@@ -51,9 +52,12 @@ import org.rhq.enterprise.gui.coregui.client.util.RPCDataSource;
*
*/
public class AgentNodeDatasource extends RPCDataSource<Agent, Criteria> {
+
+ private final Integer serverId;
- public AgentNodeDatasource() {
+ public AgentNodeDatasource(Integer serverId) {
super();
+ this.serverId = serverId;
List<DataSourceField> fields = addDataSourceFields();
addFields(fields);
}
@@ -76,15 +80,15 @@ public class AgentNodeDatasource extends RPCDataSource<Agent, Criteria> {
fields.add(idField);
fields.add(FIELD_NAME.getListGridField("*"));
- fields.add(FIELD_SERVER.getListGridField("90"));
- fields.add(FIELD_ADDRESS.getListGridField("90"));
+ fields.add(FIELD_SERVER.getListGridField("120"));
+ fields.add(FIELD_ADDRESS.getListGridField("105"));
fields.add(FIELD_PORT.getListGridField("90"));
ListGridField lastAvailabilityReportField = FIELD_LAST_AVAILABILITY_REPORT.getListGridField("90");
TimestampCellFormatter.prepareDateField(lastAvailabilityReportField);
fields.add(lastAvailabilityReportField);
- fields.add(FIELD_AFFINITY_GROUP.getListGridField("80"));
+ fields.add(FIELD_AFFINITY_GROUP.getListGridField("100"));
return fields;
}
@@ -93,9 +97,9 @@ public class AgentNodeDatasource extends RPCDataSource<Agent, Criteria> {
protected void executeFetch(final DSRequest request, final DSResponse response, Criteria criteria) {
final PageControl pc = getPageControl(request);
- // TODO: getAllAgents -> agentManager.getAgentsByServer(subject, null, pc);
- GWTServiceLookup.getAgentService().getAllAgents(new AsyncCallback<List<Agent>>() {
- public void onSuccess(List<Agent> result) {
+ // TODO: null is for all agents -> change to particular server id
+ GWTServiceLookup.getAgentService().getAgentsByServer(serverId, pc, new AsyncCallback<PageList<Agent>>() {
+ public void onSuccess(PageList<Agent> result) {
response.setData(buildRecords(result));
response.setTotalRows(result.size());
processResponse(request.getRequestId(), response);
@@ -147,7 +151,7 @@ public class AgentNodeDatasource extends RPCDataSource<Agent, Criteria> {
record.setAttribute(FIELD_NAME.propertyName(), from.getName());
record.setAttribute(FIELD_ADDRESS.propertyName(), from.getAddress());
record.setAttribute(FIELD_PORT.propertyName(), from.getPort());
- record.setAttribute(FIELD_SERVER.propertyName(), from.getServer());
+ record.setAttribute(FIELD_SERVER.propertyName(), from.getServer().getName());
record.setAttribute(FIELD_LAST_AVAILABILITY_REPORT.propertyName(), from.getLastAvailabilityReport());
record.setAttribute(FIELD_AFFINITY_GROUP.propertyName(), from.getAffinityGroup());
return record;
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentTableView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentTableView.java
index 36137d2..d0948f4 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentTableView.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentTableView.java
@@ -42,11 +42,11 @@ public class AgentTableView extends TableSection<AgentNodeDatasource> {
public static final String VIEW_PATH = AdministrationView.VIEW_ID + "/"
+ AdministrationView.SECTION_CONFIGURATION_VIEW_ID + "/" + VIEW_ID;
- public AgentTableView(String locatorId, String tableTitle) {
+ public AgentTableView(String locatorId, String tableTitle, Integer serverId) {
super(locatorId, tableTitle);
setHeight100();
setWidth100();
- setDataSource(new AgentNodeDatasource());
+ setDataSource(new AgentNodeDatasource(serverId));
}
@Override
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDetailView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDetailView.java
index e02bf56..1d5ae15 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDetailView.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDetailView.java
@@ -36,7 +36,6 @@ import com.smartgwt.client.data.RecordList;
import com.smartgwt.client.types.Overflow;
import com.smartgwt.client.types.VisibilityMode;
import com.smartgwt.client.util.SC;
-import com.smartgwt.client.widgets.Label;
import com.smartgwt.client.widgets.form.fields.ButtonItem;
import com.smartgwt.client.widgets.form.fields.SelectItem;
import com.smartgwt.client.widgets.form.fields.StaticTextItem;
@@ -68,7 +67,7 @@ public class ServerDetailView extends LocatableVLayout {
private SectionStackSection detailsSection = null;
private SectionStackSection agentSection = null;
- private int initSectionCount = 0;
+ private volatile int initSectionCount = 0;
public ServerDetailView(String locatorId, int serverId) {
super(locatorId);
@@ -94,7 +93,7 @@ public class ServerDetailView extends LocatableVLayout {
GWTServiceLookup.getCloudService().getAgentsByServerName(server.getName(),
new AsyncCallback<List<Agent>>() {
public void onSuccess(List<Agent> agents) {
- preparAgentSection(sectionStack, server, agents);
+ prepareAgentSection(sectionStack, server, agents);
};
public void onFailure(Throwable caught) {
@@ -104,14 +103,14 @@ public class ServerDetailView extends LocatableVLayout {
}
public void onFailure(Throwable caught) {
- //TODO: CoreGUI.getErrorHandler().handleError(MSG.view_admin_plugins_loadFailure(), caught);
+ SC.say("er1:" + caught);
+ //TODO: CoreGUI.getErrorHandler().handleError(MSG.view_admin_plugins_loadFailure(), caught);
}
});
}
public boolean isInitialized() {
- // return initSectionCount >= 5;
- return true;
+ return initSectionCount >= 2;
}
@Override
@@ -139,7 +138,7 @@ public class ServerDetailView extends LocatableVLayout {
// don't wait forever, give up after 20s and show what we have
long elapsedMillis = System.currentTimeMillis() - startTime;
if (elapsedMillis > 20000) {
- initSectionCount = 5;
+ initSectionCount = 2;
}
schedule(100); // Reschedule the timer.
}
@@ -147,14 +146,12 @@ public class ServerDetailView extends LocatableVLayout {
}.run(); // fire the timer immediately
}
- private void preparAgentSection(SectionStack stack, Server server, List<Agent> agents) {
+ private void prepareAgentSection(SectionStack stack, Server server, List<Agent> agents) {
SectionStackSection section = new SectionStackSection(MSG.view_adminTopology_serverDetail_connectedAgents());
section.setExpanded(true);
- Label help = new Label("agents grid..");
- section.setItems(help);
- // TODO: once the AgentTableView is done, instanciate it here
+ AgentTableView agentsTable = new AgentTableView(extendLocatorId(AgentTableView.VIEW_ID.getName()), null, serverId);
+ section.setItems(agentsTable);
- stack.addSection(section);
agentSection = section;
++initSectionCount;
return;
@@ -213,10 +210,7 @@ public class ServerDetailView extends LocatableVLayout {
section.setExpanded(true);
section.setItems(form);
- stack.addSection(section);
detailsSection = section;
++initSectionCount;
-
- return;
}
}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/AgentGWTService.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/AgentGWTService.java
index eecbe1a..e7c162a 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/AgentGWTService.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/AgentGWTService.java
@@ -23,6 +23,8 @@ import java.util.List;
import com.google.gwt.user.client.rpc.RemoteService;
import org.rhq.core.domain.resource.Agent;
+import org.rhq.core.domain.util.PageControl;
+import org.rhq.core.domain.util.PageList;
/**
* @author Simeon Pinder
@@ -30,6 +32,8 @@ import org.rhq.core.domain.resource.Agent;
public interface AgentGWTService extends RemoteService {
Agent getAgentForResource(int resourceId) throws RuntimeException;
+
+ PageList<Agent> getAgentsByServer(Integer serverId, PageControl pageControl) throws RuntimeException;
Boolean pingAgentForResource(int resourceId) throws RuntimeException;
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/AgentGWTServiceImpl.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/AgentGWTServiceImpl.java
index cf4143b..5e2d50f 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/AgentGWTServiceImpl.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/AgentGWTServiceImpl.java
@@ -21,6 +21,8 @@ package org.rhq.enterprise.gui.coregui.server.gwt;
import java.util.List;
import org.rhq.core.domain.resource.Agent;
+import org.rhq.core.domain.util.PageControl;
+import org.rhq.core.domain.util.PageList;
import org.rhq.enterprise.gui.coregui.client.gwt.AgentGWTService;
import org.rhq.enterprise.gui.coregui.server.util.SerialUtility;
import org.rhq.enterprise.server.core.AgentManagerLocal;
@@ -68,6 +70,16 @@ public class AgentGWTServiceImpl extends AbstractGWTServiceImpl implements Agent
}
}
+ @Override
+ public PageList<Agent> getAgentsByServer(Integer serverId, PageControl pc) throws RuntimeException {
+ try {
+ //security handled in AgentManagerBean. requires View_Resource.
+ return SerialUtility.prepare(agentManager.getAgentsByServer(getSessionSubject(), serverId, pc), "AgentService.getAgentsByServer");
+ } catch (Throwable t) {
+ throw getExceptionToThrowToClient(t);
+ }
+ }
+
// public PageList<Availability> findAvailabilityForResource(int resourceId, PageControl pc) {
// try {
// return SerialUtility.prepare(availabilityManager.findAvailabilityForResource(getSessionSubject(),
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/CloudGWTServiceImpl.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/CloudGWTServiceImpl.java
index 0daa97d..118005f 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/CloudGWTServiceImpl.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/CloudGWTServiceImpl.java
@@ -22,6 +22,7 @@
*/
package org.rhq.enterprise.gui.coregui.server.gwt;
+import java.util.ArrayList;
import java.util.List;
import org.apache.commons.lang.ArrayUtils;
@@ -67,7 +68,8 @@ public class CloudGWTServiceImpl extends AbstractGWTServiceImpl implements Cloud
@Override
public List<Agent> getAgentsByServerName(String serverName) throws RuntimeException {
try {
- return SerialUtility.prepare(cloudManager.getAgentsByServerName(serverName), "CloudGWTServiceImpl.getAgentsByServerName");
+ List <Agent> persistentBag = SerialUtility.prepare(cloudManager.getAgentsByServerName(serverName), "CloudGWTServiceImpl.getAgentsByServerName");
+ return new ArrayList<Agent>(persistentBag);
} catch (Throwable t) {
throw getExceptionToThrowToClient(t);
}
commit 68cbb519dda07244ac05da6e03b65535887651ca
Author: Jirka Kremser <jkremser(a)redhat.com>
Date: Sat Nov 24 01:52:23 2012 +0100
AgentTableView class added including the data fetching via datasource
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/AdministrationView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/AdministrationView.java
index 88b957c..963fee3 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/AdministrationView.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/AdministrationView.java
@@ -34,6 +34,7 @@ import org.rhq.enterprise.gui.coregui.client.admin.roles.RolesView;
import org.rhq.enterprise.gui.coregui.client.admin.templates.AlertDefinitionTemplateTypeView;
import org.rhq.enterprise.gui.coregui.client.admin.templates.DriftDefinitionTemplateTypeView;
import org.rhq.enterprise.gui.coregui.client.admin.templates.MetricTemplateTypeView;
+import org.rhq.enterprise.gui.coregui.client.admin.topology.AgentTableView;
import org.rhq.enterprise.gui.coregui.client.admin.topology.ServerTableView;
import org.rhq.enterprise.gui.coregui.client.admin.users.UsersView;
import org.rhq.enterprise.gui.coregui.client.components.FullHTMLPane;
@@ -173,21 +174,28 @@ public class AdministrationView extends AbstractSectionedLeftNavigationView {
return new RemoteAgentInstallView(extendLocatorId("RemoteAgentInstall"));
}
}, getGlobalPermissions().contains(Permission.MANAGE_INVENTORY));
+
+ NavigationItem serversItemGwt = new NavigationItem(ServerTableView.VIEW_ID, new ViewFactory() {
+ public Canvas createView() {
+ return new ServerTableView(extendLocatorId(ServerTableView.VIEW_ID.getName()),
+ MSG.view_adminTopology_servers() + " (GWT)");
+ }
+ }, getGlobalPermissions().contains(Permission.MANAGE_INVENTORY));
- NavigationItem serversItemGwt = new NavigationItem(ServerTableView.VIEW_ID,
- new ViewFactory() {
- public Canvas createView() {
- return new ServerTableView(extendLocatorId(ServerTableView.VIEW_ID.getName()));
- }
- }, getGlobalPermissions().contains(Permission.MANAGE_INVENTORY));
+ NavigationItem agentsItemGwt = new NavigationItem(AgentTableView.VIEW_ID, new ViewFactory() {
+ public Canvas createView() {
+ return new AgentTableView(extendLocatorId(AgentTableView.VIEW_ID.getName()),
+ MSG.view_adminTopology_agents() + " (GWT)");
+ }
+ }, getGlobalPermissions().contains(Permission.MANAGE_INVENTORY));
NavigationSection topologyRegion = null;
if (isRHQ) {
topologyRegion = new NavigationSection(SECTION_TOPOLOGY_VIEW_ID, serversItem, agentsItem,
- affinityGroupsItem, partitionEventsItem, serversItemGwt, remoteAgentInstallItem);
+ affinityGroupsItem, partitionEventsItem, serversItemGwt, agentsItemGwt, remoteAgentInstallItem);
} else {
topologyRegion = new NavigationSection(SECTION_TOPOLOGY_VIEW_ID, serversItem, agentsItem,
- affinityGroupsItem, partitionEventsItem, serversItemGwt);
+ affinityGroupsItem, partitionEventsItem, serversItemGwt, agentsItemGwt);
}
return topologyRegion;
}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentNodeDatasource.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentNodeDatasource.java
new file mode 100644
index 0000000..aaf6cc8
--- /dev/null
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentNodeDatasource.java
@@ -0,0 +1,161 @@
+/*
+ * RHQ Management Platform
+ * Copyright (C) 2005-2012 Red Hat, Inc.
+ * All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation version 2 of the License.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+package org.rhq.enterprise.gui.coregui.client.admin.topology;
+
+import static org.rhq.enterprise.gui.coregui.client.admin.topology.AgentNodeDatasourceField.FIELD_ADDRESS;
+import static org.rhq.enterprise.gui.coregui.client.admin.topology.AgentNodeDatasourceField.FIELD_AFFINITY_GROUP;
+import static org.rhq.enterprise.gui.coregui.client.admin.topology.AgentNodeDatasourceField.FIELD_ID;
+import static org.rhq.enterprise.gui.coregui.client.admin.topology.AgentNodeDatasourceField.FIELD_LAST_AVAILABILITY_REPORT;
+import static org.rhq.enterprise.gui.coregui.client.admin.topology.AgentNodeDatasourceField.FIELD_NAME;
+import static org.rhq.enterprise.gui.coregui.client.admin.topology.AgentNodeDatasourceField.FIELD_PORT;
+import static org.rhq.enterprise.gui.coregui.client.admin.topology.AgentNodeDatasourceField.FIELD_SERVER;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import com.google.gwt.user.client.rpc.AsyncCallback;
+import com.smartgwt.client.data.DSRequest;
+import com.smartgwt.client.data.DSResponse;
+import com.smartgwt.client.data.DataSourceField;
+import com.smartgwt.client.data.Record;
+import com.smartgwt.client.data.fields.DataSourceIntegerField;
+import com.smartgwt.client.widgets.grid.ListGridField;
+import com.smartgwt.client.widgets.grid.ListGridRecord;
+
+import org.rhq.core.domain.criteria.Criteria;
+import org.rhq.core.domain.resource.Agent;
+import org.rhq.core.domain.util.PageControl;
+import org.rhq.core.domain.util.PageOrdering;
+import org.rhq.enterprise.gui.coregui.client.components.table.TimestampCellFormatter;
+import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup;
+import org.rhq.enterprise.gui.coregui.client.util.RPCDataSource;
+
+/**
+ * @author Jirka Kremser
+ *
+ */
+public class AgentNodeDatasource extends RPCDataSource<Agent, Criteria> {
+
+ public AgentNodeDatasource() {
+ super();
+ List<DataSourceField> fields = addDataSourceFields();
+ addFields(fields);
+ }
+
+ @Override
+ protected List<DataSourceField> addDataSourceFields() {
+ List<DataSourceField> fields = super.addDataSourceFields();
+ DataSourceField idField = new DataSourceIntegerField(FIELD_ID.propertyName(), FIELD_ID.title(), 50);
+ idField.setPrimaryKey(true);
+ idField.setHidden(true);
+ fields.add(idField);
+ return fields;
+ }
+
+ public List<ListGridField> getListGridFields() {
+ List<ListGridField> fields = new ArrayList<ListGridField>();
+
+ ListGridField idField = FIELD_ID.getListGridField();
+ idField.setHidden(true);
+ fields.add(idField);
+
+ fields.add(FIELD_NAME.getListGridField("*"));
+ fields.add(FIELD_SERVER.getListGridField("90"));
+ fields.add(FIELD_ADDRESS.getListGridField("90"));
+ fields.add(FIELD_PORT.getListGridField("90"));
+
+ ListGridField lastAvailabilityReportField = FIELD_LAST_AVAILABILITY_REPORT.getListGridField("90");
+ TimestampCellFormatter.prepareDateField(lastAvailabilityReportField);
+ fields.add(lastAvailabilityReportField);
+
+ fields.add(FIELD_AFFINITY_GROUP.getListGridField("80"));
+
+ return fields;
+ }
+
+ @Override
+ protected void executeFetch(final DSRequest request, final DSResponse response, Criteria criteria) {
+ final PageControl pc = getPageControl(request);
+
+ // TODO: getAllAgents -> agentManager.getAgentsByServer(subject, null, pc);
+ GWTServiceLookup.getAgentService().getAllAgents(new AsyncCallback<List<Agent>>() {
+ public void onSuccess(List<Agent> result) {
+ response.setData(buildRecords(result));
+ response.setTotalRows(result.size());
+ processResponse(request.getRequestId(), response);
+ }
+
+ @Override
+ public void onFailure(Throwable t) {
+ //todo: CoreGUI.getErrorHandler().handleError(MSG.view_admin_plugins_loadFailure(), t);
+ response.setStatus(DSResponse.STATUS_FAILURE);
+ processResponse(request.getRequestId(), response);
+ }
+ });
+ }
+
+ /**
+ * Returns a prepopulated PageControl based on the provided DSRequest. This will set sort fields,
+ * pagination, but *not* filter fields.
+ *
+ * @param request the request to turn into a page control
+ * @return the page control for passing to criteria and other queries
+ */
+ protected PageControl getPageControl(DSRequest request) {
+ // Initialize paging.
+ PageControl pageControl = new PageControl(0, getDataPageSize());
+
+ // Initialize sorting.
+ String sortBy = request.getAttribute("sortBy");
+ if (sortBy != null) {
+ String[] sorts = sortBy.split(",");
+ for (String sort : sorts) {
+ PageOrdering ordering = (sort.startsWith("-")) ? PageOrdering.DESC : PageOrdering.ASC;
+ String columnName = (ordering == PageOrdering.DESC) ? sort.substring(1) : sort;
+ pageControl.addDefaultOrderingField(columnName, ordering);
+ }
+ }
+
+ return pageControl;
+ }
+
+ @Override
+ public Agent copyValues(Record from) {
+ throw new UnsupportedOperationException("ServerTableView.CloudDataSourcepublic Server copyValues(Record from)");
+ }
+
+ @Override
+ public ListGridRecord copyValues(Agent from) {
+ ListGridRecord record = new ListGridRecord();
+ record.setAttribute(FIELD_ID.propertyName(), from.getId());
+ record.setAttribute(FIELD_NAME.propertyName(), from.getName());
+ record.setAttribute(FIELD_ADDRESS.propertyName(), from.getAddress());
+ record.setAttribute(FIELD_PORT.propertyName(), from.getPort());
+ record.setAttribute(FIELD_SERVER.propertyName(), from.getServer());
+ record.setAttribute(FIELD_LAST_AVAILABILITY_REPORT.propertyName(), from.getLastAvailabilityReport());
+ record.setAttribute(FIELD_AFFINITY_GROUP.propertyName(), from.getAffinityGroup());
+ return record;
+ }
+
+ @Override
+ protected Criteria getFetchCriteria(DSRequest request) {
+ // we don't use criteria for this datasource, just return null
+ return null;
+ }
+}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentNodeDatasourceField.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentNodeDatasourceField.java
new file mode 100644
index 0000000..6872204
--- /dev/null
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentNodeDatasourceField.java
@@ -0,0 +1,79 @@
+/*
+ * RHQ Management Platform
+ * Copyright (C) 2005-2012 Red Hat, Inc.
+ * All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation version 2 of the License.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+package org.rhq.enterprise.gui.coregui.client.admin.topology;
+
+import com.smartgwt.client.widgets.grid.ListGridField;
+
+import org.rhq.enterprise.gui.coregui.client.CoreGUI;
+
+/**
+ * @author Jirka Kremser
+ *
+ */
+public enum AgentNodeDatasourceField {
+
+ FIELD_ID("id", CoreGUI.getMessages().common_title_id()),
+
+ FIELD_NAME("name", CoreGUI.getMessages().common_title_name()),
+
+ FIELD_SERVER("server", CoreGUI.getMessages().view_adminTopology_agent_connectedServer()),
+
+ FIELD_ADDRESS("address", CoreGUI.getMessages().view_adminTopology_agent_agentBindAddress()),
+
+ FIELD_PORT("port", CoreGUI.getMessages().view_adminTopology_agent_agentBindPort()),
+
+ FIELD_LAST_AVAILABILITY_REPORT("lastAvailabilityReport", CoreGUI.getMessages().view_adminTopology_agent_lastAvailabilityReport()),
+
+ FIELD_AGENT_TOKEN("agentToken", CoreGUI.getMessages().view_adminTopology_agentDetail_token()),
+
+ FIELD_AFFINITY_GROUP("affinityGroup", CoreGUI.getMessages().view_adminTopology_server_affinityGroup());
+
+ /**
+ * Corresponds to a property name of Server (e.g. operationMode).
+ */
+ private String propertyName;
+
+ /**
+ * The table header for the field or property (e.g. Mode).
+ */
+ private String title;
+
+ private AgentNodeDatasourceField(String propertyName, String title) {
+ this.propertyName = propertyName;
+ this.title = title;
+ }
+
+ public String propertyName() {
+ return propertyName;
+ }
+
+ public String title() {
+ return title;
+ }
+
+ public ListGridField getListGridField() {
+ return new ListGridField(propertyName, title);
+ }
+
+ public ListGridField getListGridField(String width) {
+ ListGridField field = new ListGridField(propertyName, title);
+ field.setWidth(width);
+ return field;
+ }
+}
\ No newline at end of file
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentTableView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentTableView.java
new file mode 100644
index 0000000..36137d2
--- /dev/null
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/AgentTableView.java
@@ -0,0 +1,90 @@
+/*
+ * RHQ Management Platform
+ * Copyright (C) 2005-2012 Red Hat, Inc.
+ * All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation version 2 of the License.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+package org.rhq.enterprise.gui.coregui.client.admin.topology;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import com.smartgwt.client.types.SortDirection;
+import com.smartgwt.client.widgets.Canvas;
+import com.smartgwt.client.widgets.grid.ListGrid;
+import com.smartgwt.client.widgets.grid.ListGridField;
+import com.smartgwt.client.widgets.grid.ListGridRecord;
+
+import org.rhq.enterprise.gui.coregui.client.IconEnum;
+import org.rhq.enterprise.gui.coregui.client.admin.AdministrationView;
+import org.rhq.enterprise.gui.coregui.client.components.table.TableSection;
+import org.rhq.enterprise.gui.coregui.client.components.view.ViewName;
+
+/**
+ * @author Jiri Kremser
+ */
+public class AgentTableView extends TableSection<AgentNodeDatasource> {
+
+ public static final ViewName VIEW_ID = new ViewName("Agents(GWT)", MSG.view_adminTopology_agents() + "(GWT)",
+ IconEnum.SERVERS);
+ public static final String VIEW_PATH = AdministrationView.VIEW_ID + "/"
+ + AdministrationView.SECTION_CONFIGURATION_VIEW_ID + "/" + VIEW_ID;
+
+ public AgentTableView(String locatorId, String tableTitle) {
+ super(locatorId, tableTitle);
+ setHeight100();
+ setWidth100();
+ setDataSource(new AgentNodeDatasource());
+ }
+
+ @Override
+ protected void configureTable() {
+ List<ListGridField> fields = getDataSource().getListGridFields();
+ ListGrid listGrid = getListGrid();
+ listGrid.setFields(fields.toArray(new ListGridField[fields.size()]));
+ listGrid.sort(FIELD_NAME, SortDirection.ASCENDING);
+
+ super.configureTable();
+ }
+
+ @Override
+ public Canvas getDetailsView(Integer id) {
+ return new ServerDetailView(extendLocatorId("detailsView"), id);
+ }
+
+ private int[] getSelectedIds(ListGridRecord[] selections) {
+ if (selections == null) {
+ return new int[0];
+ }
+ int[] ids = new int[selections.length];
+ int i = 0;
+ for (ListGridRecord selection : selections) {
+ ids[i++] = selection.getAttributeAsInt(FIELD_ID);
+ }
+ return ids;
+ }
+
+ private ArrayList<String> getSelectedNames(ListGridRecord[] selections) {
+ if (selections == null) {
+ return new ArrayList<String>(0);
+ }
+ ArrayList<String> ids = new ArrayList<String>(selections.length);
+ for (ListGridRecord selection : selections) {
+ ids.add(selection.getAttributeAsString(FIELD_NAME));
+ }
+ return ids;
+ }
+
+}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDetailView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDetailView.java
index 3cfac98..e02bf56 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDetailView.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDetailView.java
@@ -19,14 +19,16 @@
package org.rhq.enterprise.gui.coregui.client.admin.topology;
-import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerNodeDataourceField.FIELD_ADDRESS;
-import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerNodeDataourceField.FIELD_AFFINITY_GROUP;
-import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerNodeDataourceField.FIELD_CTIME;
-import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerNodeDataourceField.FIELD_MTIME;
-import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerNodeDataourceField.FIELD_NAME;
-import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerNodeDataourceField.FIELD_OPERATION_MODE;
-import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerNodeDataourceField.FIELD_PORT;
-import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerNodeDataourceField.FIELD_SECURE_PORT;
+import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerNodeDatasourceField.FIELD_ADDRESS;
+import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerNodeDatasourceField.FIELD_AFFINITY_GROUP;
+import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerNodeDatasourceField.FIELD_CTIME;
+import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerNodeDatasourceField.FIELD_MTIME;
+import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerNodeDatasourceField.FIELD_NAME;
+import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerNodeDatasourceField.FIELD_OPERATION_MODE;
+import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerNodeDatasourceField.FIELD_PORT;
+import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerNodeDatasourceField.FIELD_SECURE_PORT;
+
+import java.util.List;
import com.google.gwt.user.client.Timer;
import com.google.gwt.user.client.rpc.AsyncCallback;
@@ -41,12 +43,11 @@ import com.smartgwt.client.widgets.form.fields.StaticTextItem;
import com.smartgwt.client.widgets.form.fields.TextItem;
import com.smartgwt.client.widgets.form.fields.events.ClickEvent;
import com.smartgwt.client.widgets.form.fields.events.ClickHandler;
-import com.smartgwt.client.widgets.grid.ListGrid;
import com.smartgwt.client.widgets.layout.SectionStack;
import com.smartgwt.client.widgets.layout.SectionStackSection;
import org.rhq.core.domain.cloud.Server;
-import org.rhq.enterprise.gui.coregui.client.CoreGUI;
+import org.rhq.core.domain.resource.Agent;
import org.rhq.enterprise.gui.coregui.client.components.table.TimestampCellFormatter;
import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup;
import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableDynamicForm;
@@ -87,21 +88,29 @@ public class ServerDetailView extends LocatableVLayout {
@Override
protected void onInit() {
super.onInit();
-
GWTServiceLookup.getCloudService().getServerById(this.serverId, new AsyncCallback<Server>() {
- public void onSuccess(Server server) {
+ public void onSuccess(final Server server) {
prepareDetailsSection(sectionStack, server);
- preparAgentSection(sectionStack, server);
+ GWTServiceLookup.getCloudService().getAgentsByServerName(server.getName(),
+ new AsyncCallback<List<Agent>>() {
+ public void onSuccess(List<Agent> agents) {
+ preparAgentSection(sectionStack, server, agents);
+ };
+
+ public void onFailure(Throwable caught) {
+ //TODO: CoreGUI.getErrorHandler().handleError(MSG.view_admin_plugins_loadFailure(), caught);
+ }
+ });
}
public void onFailure(Throwable caught) {
- CoreGUI.getErrorHandler().handleError(MSG.view_admin_plugins_loadFailure(), caught);
+ //TODO: CoreGUI.getErrorHandler().handleError(MSG.view_admin_plugins_loadFailure(), caught);
}
});
}
public boolean isInitialized() {
-// return initSectionCount >= 5;
+ // return initSectionCount >= 5;
return true;
}
@@ -138,13 +147,13 @@ public class ServerDetailView extends LocatableVLayout {
}.run(); // fire the timer immediately
}
- private void preparAgentSection(SectionStack stack, Server server) {
+ private void preparAgentSection(SectionStack stack, Server server, List<Agent> agents) {
SectionStackSection section = new SectionStackSection(MSG.view_adminTopology_serverDetail_connectedAgents());
section.setExpanded(true);
Label help = new Label("agents grid..");
section.setItems(help);
- ListGrid agentGrid = new ListGrid();
-
+ // TODO: once the AgentTableView is done, instanciate it here
+
stack.addSection(section);
agentSection = section;
++initSectionCount;
@@ -186,20 +195,19 @@ public class ServerDetailView extends LocatableVLayout {
StaticTextItem lastUpdatetem = new StaticTextItem(FIELD_MTIME.propertyName(), FIELD_MTIME.title());
lastUpdatetem.setValue(TimestampCellFormatter.format(Long.valueOf(server.getMtime()),
TimestampCellFormatter.DATE_TIME_FORMAT_MEDIUM));
-
+
ButtonItem saveButton = new ButtonItem();
saveButton.setOverflow(Overflow.VISIBLE);
- saveButton.setTitle(MSG.common_button_save());
- saveButton.addClickHandler(new ClickHandler() {
- public void onClick(ClickEvent event) {
+ saveButton.setTitle(MSG.common_button_save());
+ saveButton.addClickHandler(new ClickHandler() {
+ public void onClick(ClickEvent event) {
RecordList list = form.getRecordList();
SC.say("name is " + list.get(0).getAttribute("name"));
- }
+ }
});
form.setItems(nameItem, addressItem, portItem, securePortItem, operationModeItem, affinityGroupItem,
installationDateItem, lastUpdatetem, saveButton);
-
SectionStackSection section = new SectionStackSection(MSG.common_title_details());
section.setExpanded(true);
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerNodeDataourceField.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerNodeDataourceField.java
deleted file mode 100644
index 5e57aa0..0000000
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerNodeDataourceField.java
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- * RHQ Management Platform
- * Copyright (C) 2005-2012 Red Hat, Inc.
- * All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation version 2 of the License.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-package org.rhq.enterprise.gui.coregui.client.admin.topology;
-
-import com.smartgwt.client.widgets.grid.ListGridField;
-
-import org.rhq.enterprise.gui.coregui.client.CoreGUI;
-
-/**
- * @author Jirka Kremser
- *
- */
-public enum ServerNodeDataourceField {
-
- FIELD_ID("id", CoreGUI.getMessages().common_title_id()),
-
- FIELD_NAME("name", CoreGUI.getMessages().common_title_name()),
-
- FIELD_OPERATION_MODE("operationMode", CoreGUI.getMessages().view_adminTopology_server_mode()),
-
- FIELD_ADDRESS("address", CoreGUI.getMessages().view_adminTopology_server_endpointAddress()),
-
- FIELD_PORT("port", CoreGUI.getMessages().view_adminTopology_server_nonSecurePort()),
-
- FIELD_SECURE_PORT("securePort", CoreGUI.getMessages().view_adminTopology_server_securePort()),
-
- FIELD_CTIME("ctime", CoreGUI.getMessages().view_adminTopology_serverDetail_installationDate()),
-
- FIELD_MTIME("mtime", CoreGUI.getMessages().view_adminTopology_server_lastUpdateTime()),
-
- FIELD_AFFINITY_GROUP("affinityGroup", CoreGUI.getMessages().view_adminTopology_server_affinityGroup()),
-
- FIELD_AGENT_COUNT("agentCount", CoreGUI.getMessages().view_adminTopology_server_agentCount());
-
- /**
- * Corresponds to a property name of Server (e.g. operationMode).
- */
- private String propertyName;
-
- /**
- * The table header for the field or property (e.g. Mode).
- */
- private String title;
-
- private ServerNodeDataourceField(String propertyName, String title) {
- this.propertyName = propertyName;
- this.title = title;
- }
-
- public String propertyName() {
- return propertyName;
- }
-
- public String title() {
- return title;
- }
-
- public ListGridField getListGridField() {
- return new ListGridField(propertyName, title);
- }
-
- public ListGridField getListGridField(String width) {
- ListGridField field = new ListGridField(propertyName, title);
- field.setWidth(width);
- return field;
- }
-}
\ No newline at end of file
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerNodeDatasource.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerNodeDatasource.java
index 25ada4e..de6cf21 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerNodeDatasource.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerNodeDatasource.java
@@ -18,15 +18,15 @@
*/
package org.rhq.enterprise.gui.coregui.client.admin.topology;
-import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerNodeDataourceField.FIELD_ADDRESS;
-import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerNodeDataourceField.FIELD_AFFINITY_GROUP;
-import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerNodeDataourceField.FIELD_AGENT_COUNT;
-import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerNodeDataourceField.FIELD_ID;
-import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerNodeDataourceField.FIELD_MTIME;
-import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerNodeDataourceField.FIELD_NAME;
-import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerNodeDataourceField.FIELD_OPERATION_MODE;
-import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerNodeDataourceField.FIELD_PORT;
-import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerNodeDataourceField.FIELD_SECURE_PORT;
+import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerNodeDatasourceField.FIELD_ADDRESS;
+import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerNodeDatasourceField.FIELD_AFFINITY_GROUP;
+import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerNodeDatasourceField.FIELD_AGENT_COUNT;
+import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerNodeDatasourceField.FIELD_ID;
+import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerNodeDatasourceField.FIELD_MTIME;
+import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerNodeDatasourceField.FIELD_NAME;
+import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerNodeDatasourceField.FIELD_OPERATION_MODE;
+import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerNodeDatasourceField.FIELD_PORT;
+import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerNodeDatasourceField.FIELD_SECURE_PORT;
import java.util.ArrayList;
import java.util.List;
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerNodeDatasourceField.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerNodeDatasourceField.java
new file mode 100644
index 0000000..1e88e4d
--- /dev/null
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerNodeDatasourceField.java
@@ -0,0 +1,83 @@
+/*
+ * RHQ Management Platform
+ * Copyright (C) 2005-2012 Red Hat, Inc.
+ * All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation version 2 of the License.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+package org.rhq.enterprise.gui.coregui.client.admin.topology;
+
+import com.smartgwt.client.widgets.grid.ListGridField;
+
+import org.rhq.enterprise.gui.coregui.client.CoreGUI;
+
+/**
+ * @author Jirka Kremser
+ *
+ */
+public enum ServerNodeDatasourceField {
+
+ FIELD_ID("id", CoreGUI.getMessages().common_title_id()),
+
+ FIELD_NAME("name", CoreGUI.getMessages().common_title_name()),
+
+ FIELD_OPERATION_MODE("operationMode", CoreGUI.getMessages().view_adminTopology_server_mode()),
+
+ FIELD_ADDRESS("address", CoreGUI.getMessages().view_adminTopology_server_endpointAddress()),
+
+ FIELD_PORT("port", CoreGUI.getMessages().view_adminTopology_server_nonSecurePort()),
+
+ FIELD_SECURE_PORT("securePort", CoreGUI.getMessages().view_adminTopology_server_securePort()),
+
+ FIELD_CTIME("ctime", CoreGUI.getMessages().view_adminTopology_serverDetail_installationDate()),
+
+ FIELD_MTIME("mtime", CoreGUI.getMessages().view_adminTopology_server_lastUpdateTime()),
+
+ FIELD_AFFINITY_GROUP("affinityGroup", CoreGUI.getMessages().view_adminTopology_server_affinityGroup()),
+
+ FIELD_AGENT_COUNT("agentCount", CoreGUI.getMessages().view_adminTopology_server_agentCount());
+
+ /**
+ * Corresponds to a property name of Server (e.g. operationMode).
+ */
+ private String propertyName;
+
+ /**
+ * The table header for the field or property (e.g. Mode).
+ */
+ private String title;
+
+ private ServerNodeDatasourceField(String propertyName, String title) {
+ this.propertyName = propertyName;
+ this.title = title;
+ }
+
+ public String propertyName() {
+ return propertyName;
+ }
+
+ public String title() {
+ return title;
+ }
+
+ public ListGridField getListGridField() {
+ return new ListGridField(propertyName, title);
+ }
+
+ public ListGridField getListGridField(String width) {
+ ListGridField field = new ListGridField(propertyName, title);
+ field.setWidth(width);
+ return field;
+ }
+}
\ No newline at end of file
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerTableView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerTableView.java
index e5bbbaf..6817fdf 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerTableView.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerTableView.java
@@ -21,6 +21,7 @@ package org.rhq.enterprise.gui.coregui.client.admin.topology;
import java.util.ArrayList;
import java.util.List;
+import com.google.gwt.user.client.rpc.AsyncCallback;
import com.smartgwt.client.types.SortDirection;
import com.smartgwt.client.util.BooleanCallback;
import com.smartgwt.client.util.SC;
@@ -30,26 +31,29 @@ import com.smartgwt.client.widgets.grid.ListGridField;
import com.smartgwt.client.widgets.grid.ListGridRecord;
import org.rhq.core.domain.authz.Permission;
+import org.rhq.core.domain.cloud.Server;
+import org.rhq.enterprise.gui.coregui.client.CoreGUI;
import org.rhq.enterprise.gui.coregui.client.IconEnum;
import org.rhq.enterprise.gui.coregui.client.admin.AdministrationView;
import org.rhq.enterprise.gui.coregui.client.components.table.AuthorizedTableAction;
import org.rhq.enterprise.gui.coregui.client.components.table.TableActionEnablement;
import org.rhq.enterprise.gui.coregui.client.components.table.TableSection;
import org.rhq.enterprise.gui.coregui.client.components.view.ViewName;
+import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup;
+import org.rhq.enterprise.gui.coregui.client.util.message.Message;
/**
* @author Jiri Kremser
*/
public class ServerTableView extends TableSection<ServerNodeDatasource> {
- public static final ViewName VIEW_ID = new ViewName("Servers(GWT)", MSG.view_adminTopology_servers()+"(GWT)", IconEnum.SERVERS);
+ public static final ViewName VIEW_ID = new ViewName("Servers(GWT)", MSG.view_adminTopology_servers() + "(GWT)",
+ IconEnum.SERVERS);
public static final String VIEW_PATH = AdministrationView.VIEW_ID + "/"
+ AdministrationView.SECTION_CONFIGURATION_VIEW_ID + "/" + VIEW_ID;
-// private boolean showUndeployed = false;
-
- public ServerTableView(String locatorId) {
- super(locatorId, MSG.view_adminTopology_servers()+"(GWT)");
+ public ServerTableView(String locatorId, String tableTitle) {
+ super(locatorId, tableTitle);
setHeight100();
setWidth100();
setDataSource(new ServerNodeDatasource());
@@ -60,153 +64,125 @@ public class ServerTableView extends TableSection<ServerNodeDatasource> {
List<ListGridField> fields = getDataSource().getListGridFields();
ListGrid listGrid = getListGrid();
listGrid.setFields(fields.toArray(new ListGridField[fields.size()]));
- listGrid.sort(ServerNodeDataourceField.FIELD_NAME.propertyName(), SortDirection.ASCENDING);
+ listGrid.sort(FIELD_NAME, SortDirection.ASCENDING);
+
+ addTableAction(extendLocatorId("setNormal"), MSG.view_adminTopology_server_setNormal(),
+ MSG.common_msg_areYouSure(), new AuthorizedTableAction(this, TableActionEnablement.ANY,
+ Permission.MANAGE_SETTINGS) {
+ public void executeAction(final ListGridRecord[] selections, Object actionValue) {
+ List<String> selectedNames = getSelectedNames(selections);
+ // TODO: msg
+ // String message = MSG.view_admin_plugins_serverDisableConfirm(selectedNames.toString());
+ String message = "Really? Normal? For all I've done for you? " + selectedNames;
+ SC.ask(message, new BooleanCallback() {
+ public void execute(Boolean confirmed) {
+ if (confirmed) {
+ int[] selectedIds = getSelectedIds(selections);
+ SC.say("setting servers to maintenance mode, ids: " + selectedIds);
+ GWTServiceLookup.getCloudService().updateServerMode(selectedIds, Server.OperationMode.NORMAL,
+ new AsyncCallback<Void>() {
+ public void onSuccess(Void arg0) {
+ // TODO: msg
+ Message msg = new Message(MSG
+ .view_admin_plugins_disabledServerPlugins("sdf"), Message.Severity.Info);
+ CoreGUI.getMessageCenter().notify(msg);
+ refresh();
+ }
+
+ public void onFailure(Throwable caught) {
+ // TODO: msg
+ CoreGUI.getErrorHandler().handleError(
+ MSG.view_admin_plugins_disabledServerPluginsFailure() + " "
+ + caught.getMessage(), caught);
+ refreshTableInfo();
+ }
+
+ });
+ } else {
+ refreshTableInfo();
+ }
+ }
+ });
+ }
+ });
- addTableAction(extendLocatorId("setNormal"), MSG.view_adminTopology_server_setNormal(), MSG.common_msg_areYouSure(),
+ addTableAction(extendLocatorId("setMaintenance"), MSG.view_adminTopology_server_setMaintenance(),
new AuthorizedTableAction(this, TableActionEnablement.ANY, Permission.MANAGE_SETTINGS) {
- public void executeAction(ListGridRecord[] selections, Object actionValue) {
- int[] selectedIds = getSelectedIds(selections);
- SC.say("setting servers to normal mode, ids: " + selectedIds);
-// GWTServiceLookup.getPluginService().enableServerPlugins(selectedIds,
-// new AsyncCallback<ArrayList<String>>() {
-// @Override
-// public void onSuccess(ArrayList<String> result) {
-// Message msg = new Message(
-// MSG.view_admin_plugins_enabledServerPlugins(result.toString()), Severity.Info);
-// CoreGUI.getMessageCenter().notify(msg);
-// refresh();
-// }
-//
-// @Override
-// public void onFailure(Throwable caught) {
-// CoreGUI.getErrorHandler().handleError(
-// MSG.view_admin_plugins_enabledServerPluginsFailure() + " " + caught.getMessage(),
-// caught);
-// refreshTableInfo();
-// }
-// });
+ public void executeAction(final ListGridRecord[] selections, Object actionValue) {
+ List<String> selectedNames = getSelectedNames(selections);
+ // TODO: msg
+ // String message = MSG.view_admin_plugins_serverDisableConfirm(selectedNames.toString());
+ String message = "Really? Maitenance? For all I've done for you? " + selectedNames;
+ SC.ask(message, new BooleanCallback() {
+ public void execute(Boolean confirmed) {
+ if (confirmed) {
+ int[] selectedIds = getSelectedIds(selections);
+ SC.say("setting servers to maintenance mode, ids: " + selectedIds);
+ GWTServiceLookup.getCloudService().updateServerMode(selectedIds, Server.OperationMode.MAINTENANCE,
+ new AsyncCallback<Void>() {
+ public void onSuccess(Void arg0) {
+ // TODO: msg
+ Message msg = new Message(MSG
+ .view_admin_plugins_disabledServerPlugins("sdf"), Message.Severity.Info);
+ CoreGUI.getMessageCenter().notify(msg);
+ refresh();
+ }
+
+ public void onFailure(Throwable caught) {
+ // TODO: msg
+ CoreGUI.getErrorHandler().handleError(
+ MSG.view_admin_plugins_disabledServerPluginsFailure() + " "
+ + caught.getMessage(), caught);
+ refreshTableInfo();
+ }
+
+ });
+ } else {
+ refreshTableInfo();
+ }
+ }
+ });
}
});
- addTableAction(extendLocatorId("setMaintenance"), MSG.view_adminTopology_server_setMaintenance(), new AuthorizedTableAction(this,
- TableActionEnablement.ANY, Permission.MANAGE_SETTINGS) {
- public void executeAction(final ListGridRecord[] selections, Object actionValue) {
- ArrayList<String> selectedNames = getSelectedNames(selections);
- String message = MSG.view_admin_plugins_serverDisableConfirm(selectedNames.toString());
- SC.ask(message, new BooleanCallback() {
- public void execute(Boolean confirmed) {
- if (confirmed) {
- int[] selectedIds = getSelectedIds(selections);
- SC.say("setting servers to maintenance mode, ids: " + selectedIds);
-// GWTServiceLookup.getPluginService().disableServerPlugins(selectedIds,
-// new AsyncCallback<ArrayList<String>>() {
-// @Override
-// public void onSuccess(ArrayList<String> result) {
-// Message msg = new Message(MSG.view_admin_plugins_disabledServerPlugins(result
-// .toString()), Severity.Info);
-// CoreGUI.getMessageCenter().notify(msg);
-// refresh();
-// }
-//
-// @Override
-// public void onFailure(Throwable caught) {
-// CoreGUI.getErrorHandler().handleError(
-// MSG.view_admin_plugins_disabledServerPluginsFailure() + " "
-// + caught.getMessage(), caught);
-// refreshTableInfo();
-// }
-// });
- } else {
- refreshTableInfo();
+ addTableAction(extendLocatorId("removeSelected"), MSG.view_adminTopology_server_removeSelected(),
+ MSG.common_msg_areYouSure(), new AuthorizedTableAction(this, TableActionEnablement.ANY,
+ Permission.MANAGE_SETTINGS) {
+ public void executeAction(final ListGridRecord[] selections, Object actionValue) {
+ List<String> selectedNames = getSelectedNames(selections);
+ String message = "Really? Delete? For all I've done for you? " + selectedNames;
+ SC.ask(message, new BooleanCallback() {
+ public void execute(Boolean confirmed) {
+ if (confirmed) {
+ int[] selectedIds = getSelectedIds(selections);
+ SC.say("setting servers to maintenance mode, ids: " + selectedIds);
+ GWTServiceLookup.getCloudService().deleteServers(selectedIds,
+ new AsyncCallback<Void>() {
+ public void onSuccess(Void arg0) {
+ // TODO: msg
+ Message msg = new Message(MSG
+ .view_admin_plugins_disabledServerPlugins("sdf"), Message.Severity.Info);
+ CoreGUI.getMessageCenter().notify(msg);
+ refresh();
+ }
+
+ public void onFailure(Throwable caught) {
+ // TODO: msg
+ CoreGUI.getErrorHandler().handleError(
+ MSG.view_admin_plugins_disabledServerPluginsFailure() + " "
+ + caught.getMessage(), caught);
+ refreshTableInfo();
+ }
+
+ });
+ } else {
+ refreshTableInfo();
+ }
}
- }
- });
- }
- });
-
-
- addTableAction(extendLocatorId("removeSelected"), MSG.view_adminTopology_server_removeSelected(), MSG.common_msg_areYouSure(),
- new AuthorizedTableAction(this, TableActionEnablement.ANY, Permission.MANAGE_SETTINGS) {
- public void executeAction(ListGridRecord[] selections, Object actionValue) {
- int[] selectedIds = getSelectedIds(selections);
- SC.say("removing servers with ids: " + selectedIds);
-// GWTServiceLookup.getCloudService().purgeServerPlugins(selectedIds,
-// new AsyncCallback<ArrayList<String>>() {
-// @Override
-// public void onSuccess(ArrayList<String> result) {
-// Message msg = new Message(
-// MSG.view_admin_plugins_purgedServerPlugins(result.toString()), Severity.Info);
-// CoreGUI.getMessageCenter().notify(msg);
-// refresh();
-// }
-//
-// @Override
-// public void onFailure(Throwable caught) {
-// CoreGUI.getErrorHandler().handleError(
-// MSG.view_admin_plugins_purgedServerPluginsFailure() + " " + caught.getMessage(),
-// caught);
-// refreshTableInfo();
-// }
-// });
+ });
}
});
-// IButton scanForUpdatesButton = new LocatableIButton(extendLocatorId("scanButton"),
-// MSG.view_admin_plugins_scan());
-// scanForUpdatesButton.setAutoFit(true);
-// scanForUpdatesButton.addClickHandler(new ClickHandler() {
-// public void onClick(ClickEvent event) {
-// GWTServiceLookup.getPluginService().scanAndRegister(new AsyncCallback<Void>() {
-// @Override
-// public void onSuccess(Void result) {
-// Message msg = new Message(MSG.view_admin_plugins_scanComplete(), Severity.Info);
-// CoreGUI.getMessageCenter().notify(msg);
-// refresh();
-// }
-//
-// @Override
-// public void onFailure(Throwable caught) {
-// CoreGUI.getErrorHandler().handleError(
-// MSG.view_admin_plugins_scanFailure() + " " + caught.getMessage(), caught);
-// refreshTableInfo();
-// }
-// });
-// }
-// });
-
-// IButton restartMasterPCButton = new LocatableIButton(extendLocatorId("restartMasterPCButton"),
-// MSG.view_admin_plugins_restartMasterPC());
-// restartMasterPCButton.setAutoFit(true);
-// restartMasterPCButton.addClickHandler(new ClickHandler() {
-// public void onClick(ClickEvent event) {
-// Message msg = new Message(MSG.view_admin_plugins_restartMasterPCStarted(), Severity.Info);
-// CoreGUI.getMessageCenter().notify(msg);
-//
-// GWTServiceLookup.getPluginService().restartMasterPluginContainer(new AsyncCallback<Void>() {
-// @Override
-// public void onSuccess(Void result) {
-// Message msg = new Message(MSG.view_admin_plugins_restartMasterPCComplete(), Severity.Info);
-// CoreGUI.getMessageCenter().notify(msg);
-// refresh();
-// }
-//
-// @Override
-// public void onFailure(Throwable caught) {
-// CoreGUI.getErrorHandler().handleError(
-// MSG.view_admin_plugins_restartMasterPCFailure() + " " + caught.getMessage(), caught);
-// refreshTableInfo();
-// }
-// });
-// }
-// });
-
-// PluginFileUploadForm pluginUploadForm = new PluginFileUploadForm(extendLocatorId("upload"),
-// MSG.view_admin_plugins_upload(), true);
-
-// addExtraWidget(scanForUpdatesButton, true);
-// addExtraWidget(restartMasterPCButton, true);
-// addExtraWidget(pluginUploadForm, true);
-
super.configureTable();
}
@@ -238,6 +214,4 @@ public class ServerTableView extends TableSection<ServerNodeDatasource> {
return ids;
}
-
-
}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/AgentGWTService.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/AgentGWTService.java
index 6cecb62..eecbe1a 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/AgentGWTService.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/AgentGWTService.java
@@ -18,6 +18,8 @@
*/
package org.rhq.enterprise.gui.coregui.client.gwt;
+import java.util.List;
+
import com.google.gwt.user.client.rpc.RemoteService;
import org.rhq.core.domain.resource.Agent;
@@ -30,5 +32,7 @@ public interface AgentGWTService extends RemoteService {
Agent getAgentForResource(int resourceId) throws RuntimeException;
Boolean pingAgentForResource(int resourceId) throws RuntimeException;
+
+ List<Agent> getAllAgents() throws RuntimeException;
}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/CloudGWTService.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/CloudGWTService.java
index 84477f2..44a285a 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/CloudGWTService.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/CloudGWTService.java
@@ -42,9 +42,13 @@ public interface CloudGWTService extends RemoteService {
* @throws RuntimeException
*/
List<ServerWithAgentCountComposite> getServers(PageControl pc) throws RuntimeException;
-
+
Server getServerById(int serverId) throws RuntimeException;
-
+
List<Agent> getAgentsByServerName(String serverName) throws RuntimeException;
+ void deleteServers(int[] serverIds) throws RuntimeException;
+
+ void updateServerMode(int[] serverIds, Server.OperationMode mode) throws RuntimeException;
+
}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/AgentGWTServiceImpl.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/AgentGWTServiceImpl.java
index ddd9fda..cf4143b 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/AgentGWTServiceImpl.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/AgentGWTServiceImpl.java
@@ -18,6 +18,8 @@
*/
package org.rhq.enterprise.gui.coregui.server.gwt;
+import java.util.List;
+
import org.rhq.core.domain.resource.Agent;
import org.rhq.enterprise.gui.coregui.client.gwt.AgentGWTService;
import org.rhq.enterprise.gui.coregui.server.util.SerialUtility;
@@ -26,6 +28,7 @@ import org.rhq.enterprise.server.util.LookupUtil;
/**
* @author Simeon Pinder
+ * @author Jirka Kremser
*/
public class AgentGWTServiceImpl extends AbstractGWTServiceImpl implements AgentGWTService {
@@ -55,6 +58,16 @@ public class AgentGWTServiceImpl extends AbstractGWTServiceImpl implements Agent
}
}
+ @Override
+ public List<Agent> getAllAgents() throws RuntimeException {
+ try {
+ //security handled in AgentManagerBean. requires View_Resource.
+ return SerialUtility.prepare(agentManager.getAllAgents(), "AgentService.getAllAgents");
+ } catch (Throwable t) {
+ throw getExceptionToThrowToClient(t);
+ }
+ }
+
// public PageList<Availability> findAvailabilityForResource(int resourceId, PageControl pc) {
// try {
// return SerialUtility.prepare(availabilityManager.findAvailabilityForResource(getSessionSubject(),
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/CloudGWTServiceImpl.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/CloudGWTServiceImpl.java
index 5265288..0daa97d 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/CloudGWTServiceImpl.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/CloudGWTServiceImpl.java
@@ -24,7 +24,10 @@ package org.rhq.enterprise.gui.coregui.server.gwt;
import java.util.List;
+import org.apache.commons.lang.ArrayUtils;
+
import org.rhq.core.domain.cloud.Server;
+import org.rhq.core.domain.cloud.Server.OperationMode;
import org.rhq.core.domain.cloud.composite.ServerWithAgentCountComposite;
import org.rhq.core.domain.resource.Agent;
import org.rhq.core.domain.util.PageControl;
@@ -70,4 +73,24 @@ public class CloudGWTServiceImpl extends AbstractGWTServiceImpl implements Cloud
}
}
+
+ @Override
+ public void deleteServers(int[] serverIds) throws RuntimeException {
+ try {
+ cloudManager.deleteServers(ArrayUtils.toObject(serverIds));
+ } catch (Throwable t) {
+ throw getExceptionToThrowToClient(t);
+ }
+ }
+
+
+ @Override
+ public void updateServerMode(int[] serverIds, OperationMode mode) throws RuntimeException {
+ try {
+ cloudManager.updateServerMode(ArrayUtils.toObject(serverIds), mode);
+ } catch (Throwable t) {
+ throw getExceptionToThrowToClient(t);
+ }
+ }
+
}
commit 5784d52e88e5246631f854757b25b88312e5766f
Merge: f9b6131 a819562
Author: Jirka Kremser <jkremser(a)redhat.com>
Date: Fri Nov 23 21:26:22 2012 +0100
Merge branch 'master' into jkremser/ha-jsf-to-gwt-rewrite
commit f9b6131fb7cc0208feb1d4410be5c82a6233e6f2
Author: Jirka Kremser <jkremser(a)redhat.com>
Date: Fri Nov 23 21:25:52 2012 +0100
detail view for server node, also the datasource is now a standalone class
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/AdministrationView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/AdministrationView.java
index 668a49f..88b957c 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/AdministrationView.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/AdministrationView.java
@@ -34,6 +34,7 @@ import org.rhq.enterprise.gui.coregui.client.admin.roles.RolesView;
import org.rhq.enterprise.gui.coregui.client.admin.templates.AlertDefinitionTemplateTypeView;
import org.rhq.enterprise.gui.coregui.client.admin.templates.DriftDefinitionTemplateTypeView;
import org.rhq.enterprise.gui.coregui.client.admin.templates.MetricTemplateTypeView;
+import org.rhq.enterprise.gui.coregui.client.admin.topology.ServerTableView;
import org.rhq.enterprise.gui.coregui.client.admin.users.UsersView;
import org.rhq.enterprise.gui.coregui.client.components.FullHTMLPane;
import org.rhq.enterprise.gui.coregui.client.components.TitleBar;
@@ -61,6 +62,7 @@ public class AdministrationView extends AbstractSectionedLeftNavigationView {
public static final ViewName SECTION_CONTENT_VIEW_ID = new ViewName("Content", MSG.view_admin_content());
// TODO these iframe page view ids should go away in favor of the gwt view page view_id, when available
+ private static final ViewName PAGE_SERVERS_VIEW_ID = new ViewName("Servers", MSG.view_adminTopology_servers(), IconEnum.SERVERS);
private static final ViewName PAGE_AGENTS_VIEW_ID = new ViewName("Agents", MSG.view_adminTopology_agents(),IconEnum.AGENT);
private static final ViewName PAGE_AFFINITY_GROUPS_VIEW_ID = new ViewName("AffinityGroups",
MSG.view_adminTopology_affinityGroups(), IconEnum.ALL_GROUPS);
@@ -135,12 +137,12 @@ public class AdministrationView extends AbstractSectionedLeftNavigationView {
ProductInfo productInfo = CoreGUI.get().getProductInfo();
boolean isRHQ = (productInfo != null) && "RHQ".equals(productInfo.getShortName());
- NavigationItem serversItem = new NavigationItem(ServerTableView.VIEW_ID,
- new ViewFactory() {
- public Canvas createView() {
- return new ServerTableView(extendLocatorId(ServerTableView.VIEW_ID.getName()));
- }
- }, getGlobalPermissions().contains(Permission.MANAGE_INVENTORY));
+ NavigationItem serversItem = new NavigationItem(PAGE_SERVERS_VIEW_ID, new ViewFactory() {
+ public Canvas createView() {
+ return new FullHTMLPane(extendLocatorId(PAGE_SERVERS_VIEW_ID.getName()),
+ "/rhq/ha/listServers-plain.xhtml?nomenu=true");
+ }
+ }, getGlobalPermissions().contains(Permission.MANAGE_INVENTORY));
NavigationItem agentsItem = new NavigationItem(PAGE_AGENTS_VIEW_ID, new ViewFactory() {
public Canvas createView() {
@@ -171,14 +173,21 @@ public class AdministrationView extends AbstractSectionedLeftNavigationView {
return new RemoteAgentInstallView(extendLocatorId("RemoteAgentInstall"));
}
}, getGlobalPermissions().contains(Permission.MANAGE_INVENTORY));
+
+ NavigationItem serversItemGwt = new NavigationItem(ServerTableView.VIEW_ID,
+ new ViewFactory() {
+ public Canvas createView() {
+ return new ServerTableView(extendLocatorId(ServerTableView.VIEW_ID.getName()));
+ }
+ }, getGlobalPermissions().contains(Permission.MANAGE_INVENTORY));
NavigationSection topologyRegion = null;
if (isRHQ) {
topologyRegion = new NavigationSection(SECTION_TOPOLOGY_VIEW_ID, serversItem, agentsItem,
- affinityGroupsItem, partitionEventsItem, remoteAgentInstallItem);
+ affinityGroupsItem, partitionEventsItem, serversItemGwt, remoteAgentInstallItem);
} else {
topologyRegion = new NavigationSection(SECTION_TOPOLOGY_VIEW_ID, serversItem, agentsItem,
- affinityGroupsItem, partitionEventsItem);
+ affinityGroupsItem, partitionEventsItem, serversItemGwt);
}
return topologyRegion;
}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/ServerDetailView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/ServerDetailView.java
deleted file mode 100644
index 44bcb26..0000000
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/ServerDetailView.java
+++ /dev/null
@@ -1,415 +0,0 @@
-/*
- * RHQ Management Platform
- * Copyright (C) 2005-2012 Red Hat, Inc.
- * All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation version 2 of the License.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-package org.rhq.enterprise.gui.coregui.client.admin;
-
-import com.google.gwt.user.client.Timer;
-import com.google.gwt.user.client.rpc.AsyncCallback;
-import com.smartgwt.client.types.Overflow;
-import com.smartgwt.client.types.VisibilityMode;
-import com.smartgwt.client.widgets.Img;
-import com.smartgwt.client.widgets.Label;
-import com.smartgwt.client.widgets.form.fields.CanvasItem;
-import com.smartgwt.client.widgets.form.fields.StaticTextItem;
-import com.smartgwt.client.widgets.layout.SectionStack;
-import com.smartgwt.client.widgets.layout.SectionStackSection;
-
-import org.rhq.core.domain.cloud.Server;
-import org.rhq.core.domain.plugin.PluginKey;
-import org.rhq.core.domain.plugin.ServerPlugin;
-import org.rhq.enterprise.gui.coregui.client.CoreGUI;
-import org.rhq.enterprise.gui.coregui.client.ImageManager;
-import org.rhq.enterprise.gui.coregui.client.components.table.TimestampCellFormatter;
-import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup;
-import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableDynamicForm;
-import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableSectionStack;
-import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableVLayout;
-
-/**
- * Shows details of a server.
- *
- * @author Jiri Kremser
- */
-public class ServerDetailView extends LocatableVLayout {
-
-// private final CloudGWTServiceAsync cloudManager = GWTServiceLookup.getCloudService();
- private final int serverId;
-
- private final LocatableSectionStack sectionStack;
- private SectionStackSection detailsSection = null;
- private SectionStackSection helpSection = null;
- private SectionStackSection controlsSection = null;
- private SectionStackSection pluginConfigSection = null;
- private SectionStackSection scheduledJobsSection = null;
- private int initSectionCount = 0;
-
- public ServerDetailView(String locatorId, int serverId) {
- super(locatorId);
- this.serverId = serverId;
- setHeight100();
- setWidth100();
- setOverflow(Overflow.AUTO);
-
- sectionStack = new LocatableSectionStack(extendLocatorId("stack"));
- sectionStack.setVisibilityMode(VisibilityMode.MULTIPLE);
- sectionStack.setWidth100();
- sectionStack.setHeight100();
- sectionStack.setMargin(5);
- sectionStack.setOverflow(Overflow.VISIBLE);
- }
-
- @Override
- protected void onInit() {
- super.onInit();
-
- GWTServiceLookup.getCloudService().getServerById(this.serverId, new AsyncCallback<Server>() {
- public void onSuccess(Server server) {
-// prepareDetailsSection(sectionStack, server);
-// prepareHelpSection(sectionStack, server);
-// prepareControlsSection(sectionStack, server);
-// preparePluginConfigurationSection(sectionStack, server);
-// prepareScheduledJobsSection(sectionStack, server);
- }
-
- public void onFailure(Throwable caught) {
- CoreGUI.getErrorHandler().handleError(MSG.view_admin_plugins_loadFailure(), caught);
- }
- });
- }
-
- public boolean isInitialized() {
- return initSectionCount >= 5;
- }
-
- @Override
- protected void onDraw() {
- super.onDraw();
-
- // wait until we have all of the sections before we show them. We don't use InitializableView because,
- // it seems they are not supported (in the applicable renderView()) at this level.
- new Timer() {
- final long startTime = System.currentTimeMillis();
-
- public void run() {
- if (isInitialized()) {
- if (null != detailsSection) {
- sectionStack.addSection(detailsSection);
- }
- if (null != helpSection) {
- sectionStack.addSection(helpSection);
- }
- if (null != controlsSection) {
- sectionStack.addSection(controlsSection);
- }
- if (null != pluginConfigSection) {
- sectionStack.addSection(pluginConfigSection);
- }
- if (null != scheduledJobsSection) {
- sectionStack.addSection(scheduledJobsSection);
- }
-
- addMember(sectionStack);
- markForRedraw();
-
- } else {
- // don't wait forever, give up after 20s and show what we have
- long elapsedMillis = System.currentTimeMillis() - startTime;
- if (elapsedMillis > 20000) {
- initSectionCount = 5;
- }
- schedule(100); // Reschedule the timer.
- }
- }
- }.run(); // fire the timer immediately
- }
-
- private void prepareControlsSection(final SectionStack stack, final ServerPlugin plugin) {
- PluginKey pluginKey = PluginKey.createServerPluginKey(plugin.getType(), plugin.getName());
-
-// pluginManager.getServerPluginControlDefinitions(pluginKey,
-// new AsyncCallback<ArrayList<ServerPluginControlDefinition>>() {
-// public void onSuccess(ArrayList<ServerPluginControlDefinition> result) {
-// if (result != null && !result.isEmpty()) {
-// SectionStackSection section = new SectionStackSection(MSG.view_admin_plugins_serverControls());
-// section.setExpanded(false);
-// section.addItem(new ServerPluginControlView(extendLocatorId("controlView"), plugin, result));
-//
-// controlsSection = section;
-// }
-// ++initSectionCount;
-// }
-//
-// public void onFailure(Throwable caught) {
-// CoreGUI.getErrorHandler().handleError(MSG.view_admin_plugins_loadFailure(), caught);
-// }
-// });
- }
-
- private void preparePluginConfigurationSection(final SectionStack stack, final ServerPlugin plugin) {
- final PluginKey pluginKey = PluginKey.createServerPluginKey(plugin.getType(), plugin.getName());
-
-// pluginManager.getServerPluginConfigurationDefinition(pluginKey, new AsyncCallback<ConfigurationDefinition>() {
-// public void onSuccess(ConfigurationDefinition def) {
-// if (def != null) {
-// LocatableVLayout layout = new LocatableVLayout(extendLocatorId("pcEditorLayout"));
-//
-// ToolStrip buttons = new ToolStrip();
-// buttons.setWidth100();
-// buttons.setExtraSpace(10);
-// buttons.setMembersMargin(5);
-// buttons.setLayoutMargin(5);
-//
-// final IButton saveButtonPC = new LocatableIButton(extendLocatorId("pcSave"), MSG
-// .common_button_save());
-//
-// final IButton resetButtonPC = new LocatableIButton(extendLocatorId("pcRest"), MSG
-// .common_button_reset());
-//
-// Configuration config = plugin.getPluginConfiguration();
-// final ConfigurationEditor editorPC = new ConfigurationEditor(extendLocatorId("pcEdit"), def, config);
-// editorPC.setOverflow(Overflow.AUTO);
-// editorPC.addPropertyValueChangeListener(new PropertyValueChangeListener() {
-// public void propertyValueChanged(PropertyValueChangeEvent event) {
-// if (event.isInvalidPropertySetChanged()) {
-// Map<String, String> invalidPropertyNames = event.getInvalidPropertyNames();
-// if (invalidPropertyNames.isEmpty()) {
-// saveButtonPC.enable();
-// } else {
-// saveButtonPC.disable();
-// }
-// }
-// }
-// });
-//
-// resetButtonPC.addClickHandler(new ClickHandler() {
-// public void onClick(ClickEvent event) {
-// editorPC.reset();
-// }
-// });
-//
-// saveButtonPC.addClickHandler(new ClickHandler() {
-// public void onClick(ClickEvent event) {
-// if (!editorPC.validate()) {
-// Message msg = new Message(MSG.view_admin_plugins_serverConfig_badSettings(),
-// Severity.Warning, EnumSet.of(Message.Option.Transient));
-// CoreGUI.getMessageCenter().notify(msg);
-// return;
-// }
-//// pluginManager.updateServerPluginConfiguration(pluginKey, editorPC.getConfiguration(),
-//// new AsyncCallback<Void>() {
-//// public void onSuccess(Void result) {
-//// Message m = new Message(MSG.view_admin_plugins_serverConfig_settingsSaved());
-//// CoreGUI.getMessageCenter().notify(m);
-//// }
-////
-//// public void onFailure(Throwable caught) {
-//// CoreGUI.getErrorHandler().handleError(
-//// MSG.view_admin_plugins_serverConfig_saveFailed(), caught);
-//// }
-//// });
-// }
-// });
-//
-// buttons.addMember(saveButtonPC);
-// buttons.addMember(resetButtonPC);
-// layout.addMember(buttons);
-// layout.addMember(editorPC);
-//
-// SectionStackSection section = new SectionStackSection(MSG.view_admin_plugins_serverConfig());
-// section.setExpanded(false);
-// section.setItems(layout);
-//
-// pluginConfigSection = section;
-// }
-//
-// ++initSectionCount;
-// }
-//
-// @Override
-// public void onFailure(Throwable caught) {
-// CoreGUI.getErrorHandler().handleError(MSG.view_admin_plugins_loadFailure(), caught);
-// }
-// });
- return;
- }
-
- private void prepareScheduledJobsSection(final SectionStack stack, final ServerPlugin plugin) {
- final PluginKey pluginKey = PluginKey.createServerPluginKey(plugin.getType(), plugin.getName());
-
-// pluginManager.getServerPluginScheduledJobsDefinition(pluginKey, new AsyncCallback<ConfigurationDefinition>() {
-// public void onSuccess(ConfigurationDefinition def) {
-// if (def != null) {
-// LocatableVLayout layout = new LocatableVLayout(extendLocatorId("sjEditorLayout"));
-//
-// ToolStrip buttons = new ToolStrip();
-// buttons.setWidth100();
-// buttons.setExtraSpace(10);
-// buttons.setMembersMargin(5);
-// buttons.setLayoutMargin(5);
-//
-// final IButton saveButtonSJ = new LocatableIButton(extendLocatorId("sjSave"), MSG
-// .common_button_save());
-// buttons.addMember(saveButtonSJ);
-//
-// final IButton resetButtonSJ = new LocatableIButton(extendLocatorId("sjRest"), MSG
-// .common_button_reset());
-// buttons.addMember(resetButtonSJ);
-//
-// Configuration config = plugin.getScheduledJobsConfiguration();
-// final ConfigurationEditor editorSJ = new ConfigurationEditor(extendLocatorId("sjEdit"), def, config);
-// editorSJ.setOverflow(Overflow.AUTO);
-// editorSJ.addPropertyValueChangeListener(new PropertyValueChangeListener() {
-// public void propertyValueChanged(PropertyValueChangeEvent event) {
-// if (event.isInvalidPropertySetChanged()) {
-// Map<String, String> invalidPropertyNames = event.getInvalidPropertyNames();
-// if (invalidPropertyNames.isEmpty()) {
-// saveButtonSJ.enable();
-// } else {
-// saveButtonSJ.disable();
-// }
-// }
-// }
-// });
-//
-// resetButtonSJ.addClickHandler(new ClickHandler() {
-// public void onClick(ClickEvent event) {
-// editorSJ.reset();
-// }
-// });
-//
-// saveButtonSJ.addClickHandler(new ClickHandler() {
-// public void onClick(ClickEvent event) {
-// if (!editorSJ.validate()) {
-// Message msg = new Message(MSG.view_admin_plugins_serverConfig_badSettings(),
-// Severity.Warning, EnumSet.of(Message.Option.Transient));
-// CoreGUI.getMessageCenter().notify(msg);
-// return;
-// }
-//// pluginManager.updateServerPluginScheduledJobs(pluginKey, editorSJ.getConfiguration(),
-//// new AsyncCallback<Void>() {
-//// public void onSuccess(Void result) {
-//// Message m = new Message(MSG.view_admin_plugins_serverConfig_settingsSaved());
-//// CoreGUI.getMessageCenter().notify(m);
-//// }
-////
-//// public void onFailure(Throwable caught) {
-//// CoreGUI.getErrorHandler().handleError(
-//// MSG.view_admin_plugins_serverConfig_saveFailed(), caught);
-//// }
-//// });
-// }
-// });
-//
-// layout.addMember(buttons);
-// layout.addMember(editorSJ);
-//
-// SectionStackSection section = new SectionStackSection(MSG.view_admin_plugins_serverScheduleJobs());
-// section.setExpanded(false);
-// section.setItems(layout);
-//
-// scheduledJobsSection = section;
-// }
-//
-// ++initSectionCount;
-// }
-//
-// @Override
-// public void onFailure(Throwable caught) {
-// CoreGUI.getErrorHandler().handleError(MSG.view_admin_plugins_loadFailure(), caught);
-// }
-// });
- return;
- }
-
- private void prepareHelpSection(SectionStack stack, ServerPlugin plugin) {
- if (plugin.getHelp() != null && plugin.getHelp().length() > 0) {
- SectionStackSection section = new SectionStackSection(MSG.common_title_help());
- section.setExpanded(true);
- Label help = new Label(plugin.getHelp());
- section.setItems(help);
-
- helpSection = section;
- }
-
- ++initSectionCount;
- return;
- }
-
- private void prepareDetailsSection(SectionStack stack, ServerPlugin plugin) {
- LocatableDynamicForm form = new LocatableDynamicForm(extendLocatorId("detailsForm"));
- form.setMargin(10);
- form.setWidth100();
- form.setWrapItemTitles(false);
- form.setNumCols(4);
-
- StaticTextItem nameItem = new StaticTextItem("name", MSG.common_title_name());
- nameItem.setValue(plugin.getName());
-
- StaticTextItem displayNameItem = new StaticTextItem("displayName", MSG.common_title_display_name());
- displayNameItem.setValue(plugin.getDisplayName());
-
- StaticTextItem versionItem = new StaticTextItem("version", MSG.common_title_version());
- versionItem.setValue(plugin.getVersion());
-
- StaticTextItem md5Item = new StaticTextItem("MD5", "MD5");
- md5Item.setValue(plugin.getMD5());
-
- StaticTextItem pathItem = new StaticTextItem("path", MSG.common_title_path());
- pathItem.setValue(plugin.getPath());
-
- StaticTextItem ampsItem = new StaticTextItem("ampsVersion", "AMPS " + MSG.common_title_version());
- ampsItem.setValue(plugin.getAmpsVersion());
-
- StaticTextItem descItem = new StaticTextItem("desc", MSG.common_title_description());
- descItem.setValue(plugin.getDescription());
-
- StaticTextItem mtimeItem = new StaticTextItem("mtime", MSG.common_title_lastUpdated());
- mtimeItem.setValue(TimestampCellFormatter.format(Long.valueOf(plugin.getMtime()),
- TimestampCellFormatter.DATE_TIME_FORMAT_MEDIUM));
-
- StaticTextItem kindItem = new StaticTextItem("kind", MSG.common_title_kind());
- switch (plugin.getDeployment()) {
- case AGENT:
- kindItem.setValue(MSG.view_admin_plugins_agent());
- break;
- case SERVER:
- kindItem.setValue(MSG.view_admin_plugins_server());
- break;
- }
-
- CanvasItem enabledItem = new CanvasItem("enabled", MSG.common_title_enabled());
- Img img = new Img(ImageManager.getAvailabilityIcon(plugin.isEnabled()), 16, 16);
- enabledItem.setCanvas(img);
-
- StaticTextItem typeItem = new StaticTextItem("type", MSG.common_title_type());
- typeItem.setValue(plugin.getType());
-
- form.setItems(displayNameItem, nameItem, versionItem, ampsItem, md5Item, kindItem, descItem, pathItem,
- mtimeItem, enabledItem, typeItem);
-
- SectionStackSection section = new SectionStackSection(MSG.common_title_details());
- section.setExpanded(true);
- section.setItems(form);
-
- detailsSection = section;
- ++initSectionCount;
-
- return;
- }
-}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/ServerTableView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/ServerTableView.java
deleted file mode 100644
index 57b6d1c..0000000
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/ServerTableView.java
+++ /dev/null
@@ -1,410 +0,0 @@
-/*
- * RHQ Management Platform
- * Copyright (C) 2005-2012 Red Hat, Inc.
- * All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation version 2 of the License.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-package org.rhq.enterprise.gui.coregui.client.admin;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import com.google.gwt.user.client.rpc.AsyncCallback;
-import com.smartgwt.client.data.DSRequest;
-import com.smartgwt.client.data.DSResponse;
-import com.smartgwt.client.data.DataSourceField;
-import com.smartgwt.client.data.Record;
-import com.smartgwt.client.data.fields.DataSourceIntegerField;
-import com.smartgwt.client.types.SortDirection;
-import com.smartgwt.client.util.BooleanCallback;
-import com.smartgwt.client.util.SC;
-import com.smartgwt.client.widgets.Canvas;
-import com.smartgwt.client.widgets.grid.ListGrid;
-import com.smartgwt.client.widgets.grid.ListGridField;
-import com.smartgwt.client.widgets.grid.ListGridRecord;
-
-import org.rhq.core.domain.authz.Permission;
-import org.rhq.core.domain.cloud.composite.ServerWithAgentCountComposite;
-import org.rhq.core.domain.criteria.Criteria;
-import org.rhq.core.domain.util.PageControl;
-import org.rhq.core.domain.util.PageOrdering;
-import org.rhq.enterprise.gui.coregui.client.IconEnum;
-import org.rhq.enterprise.gui.coregui.client.admin.ServerTableView.CloudDataSource;
-import org.rhq.enterprise.gui.coregui.client.components.table.AuthorizedTableAction;
-import org.rhq.enterprise.gui.coregui.client.components.table.TableActionEnablement;
-import org.rhq.enterprise.gui.coregui.client.components.table.TableSection;
-import org.rhq.enterprise.gui.coregui.client.components.table.TimestampCellFormatter;
-import org.rhq.enterprise.gui.coregui.client.components.view.ViewName;
-import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup;
-import org.rhq.enterprise.gui.coregui.client.util.RPCDataSource;
-
-/**
- * @author Jiri Kremser
- */
-public class ServerTableView extends TableSection<CloudDataSource> {
-
- public static final ViewName VIEW_ID = new ViewName("Servers", MSG.view_adminTopology_servers(), IconEnum.SERVERS);
- public static final String VIEW_PATH = AdministrationView.VIEW_ID + "/"
- + AdministrationView.SECTION_CONFIGURATION_VIEW_ID + "/" + VIEW_ID;
-
- private static final String FIELD_ID = "id";
- private static final String FIELD_NAME = "name";
- private static final String FIELD_MODE = "operationMode";
- private static final String FIELD_ENDPOINT_ADDRESS = "address";
- private static final String FIELD_NONSECURE_PORT = "port";
- private static final String FIELD_SECURE_PORT = "securePort";
- private static final String FIELD_LAST_UPDATE_TIME = "mtime";
- private static final String FIELD_AFFINITY_GROUP = "affinityGroup";
- private static final String FIELD_AGENT_COUNT = "agentCount";
-
-// private boolean showUndeployed = false;
-
- public ServerTableView(String locatorId) {
- super(locatorId, null);
- setHeight100();
- setWidth100();
- setDataSource(new CloudDataSource());
- }
-
- @Override
- protected void configureTable() {
- List<ListGridField> fields = getDataSource().getListGridFields();
- ListGrid listGrid = getListGrid();
- listGrid.setFields(fields.toArray(new ListGridField[fields.size()]));
- listGrid.sort(FIELD_NAME, SortDirection.ASCENDING);
-
- addTableAction(extendLocatorId("setNormal"), MSG.view_adminTopology_server_setNormal(), MSG.common_msg_areYouSure(),
- new AuthorizedTableAction(this, TableActionEnablement.ANY, Permission.MANAGE_SETTINGS) {
- public void executeAction(ListGridRecord[] selections, Object actionValue) {
- int[] selectedIds = getSelectedIds(selections);
- SC.say("setting servers to normal mode, ids: " + selectedIds);
-// GWTServiceLookup.getPluginService().enableServerPlugins(selectedIds,
-// new AsyncCallback<ArrayList<String>>() {
-// @Override
-// public void onSuccess(ArrayList<String> result) {
-// Message msg = new Message(
-// MSG.view_admin_plugins_enabledServerPlugins(result.toString()), Severity.Info);
-// CoreGUI.getMessageCenter().notify(msg);
-// refresh();
-// }
-//
-// @Override
-// public void onFailure(Throwable caught) {
-// CoreGUI.getErrorHandler().handleError(
-// MSG.view_admin_plugins_enabledServerPluginsFailure() + " " + caught.getMessage(),
-// caught);
-// refreshTableInfo();
-// }
-// });
- }
- });
-
- addTableAction(extendLocatorId("setMaintenance"), MSG.view_adminTopology_server_setMaintenance(), new AuthorizedTableAction(this,
- TableActionEnablement.ANY, Permission.MANAGE_SETTINGS) {
- public void executeAction(final ListGridRecord[] selections, Object actionValue) {
- ArrayList<String> selectedNames = getSelectedNames(selections);
- String message = MSG.view_admin_plugins_serverDisableConfirm(selectedNames.toString());
- SC.ask(message, new BooleanCallback() {
- public void execute(Boolean confirmed) {
- if (confirmed) {
- int[] selectedIds = getSelectedIds(selections);
- SC.say("setting servers to maintenance mode, ids: " + selectedIds);
-// GWTServiceLookup.getPluginService().disableServerPlugins(selectedIds,
-// new AsyncCallback<ArrayList<String>>() {
-// @Override
-// public void onSuccess(ArrayList<String> result) {
-// Message msg = new Message(MSG.view_admin_plugins_disabledServerPlugins(result
-// .toString()), Severity.Info);
-// CoreGUI.getMessageCenter().notify(msg);
-// refresh();
-// }
-//
-// @Override
-// public void onFailure(Throwable caught) {
-// CoreGUI.getErrorHandler().handleError(
-// MSG.view_admin_plugins_disabledServerPluginsFailure() + " "
-// + caught.getMessage(), caught);
-// refreshTableInfo();
-// }
-// });
- } else {
- refreshTableInfo();
- }
- }
- });
- }
- });
-
-
- addTableAction(extendLocatorId("removeSelected"), MSG.view_adminTopology_server_removeSelected(), MSG.common_msg_areYouSure(),
- new AuthorizedTableAction(this, TableActionEnablement.ANY, Permission.MANAGE_SETTINGS) {
- public void executeAction(ListGridRecord[] selections, Object actionValue) {
- int[] selectedIds = getSelectedIds(selections);
- SC.say("removing servers with ids: " + selectedIds);
-// GWTServiceLookup.getCloudService().purgeServerPlugins(selectedIds,
-// new AsyncCallback<ArrayList<String>>() {
-// @Override
-// public void onSuccess(ArrayList<String> result) {
-// Message msg = new Message(
-// MSG.view_admin_plugins_purgedServerPlugins(result.toString()), Severity.Info);
-// CoreGUI.getMessageCenter().notify(msg);
-// refresh();
-// }
-//
-// @Override
-// public void onFailure(Throwable caught) {
-// CoreGUI.getErrorHandler().handleError(
-// MSG.view_admin_plugins_purgedServerPluginsFailure() + " " + caught.getMessage(),
-// caught);
-// refreshTableInfo();
-// }
-// });
- }
- });
-
-// IButton scanForUpdatesButton = new LocatableIButton(extendLocatorId("scanButton"),
-// MSG.view_admin_plugins_scan());
-// scanForUpdatesButton.setAutoFit(true);
-// scanForUpdatesButton.addClickHandler(new ClickHandler() {
-// public void onClick(ClickEvent event) {
-// GWTServiceLookup.getPluginService().scanAndRegister(new AsyncCallback<Void>() {
-// @Override
-// public void onSuccess(Void result) {
-// Message msg = new Message(MSG.view_admin_plugins_scanComplete(), Severity.Info);
-// CoreGUI.getMessageCenter().notify(msg);
-// refresh();
-// }
-//
-// @Override
-// public void onFailure(Throwable caught) {
-// CoreGUI.getErrorHandler().handleError(
-// MSG.view_admin_plugins_scanFailure() + " " + caught.getMessage(), caught);
-// refreshTableInfo();
-// }
-// });
-// }
-// });
-
-// IButton restartMasterPCButton = new LocatableIButton(extendLocatorId("restartMasterPCButton"),
-// MSG.view_admin_plugins_restartMasterPC());
-// restartMasterPCButton.setAutoFit(true);
-// restartMasterPCButton.addClickHandler(new ClickHandler() {
-// public void onClick(ClickEvent event) {
-// Message msg = new Message(MSG.view_admin_plugins_restartMasterPCStarted(), Severity.Info);
-// CoreGUI.getMessageCenter().notify(msg);
-//
-// GWTServiceLookup.getPluginService().restartMasterPluginContainer(new AsyncCallback<Void>() {
-// @Override
-// public void onSuccess(Void result) {
-// Message msg = new Message(MSG.view_admin_plugins_restartMasterPCComplete(), Severity.Info);
-// CoreGUI.getMessageCenter().notify(msg);
-// refresh();
-// }
-//
-// @Override
-// public void onFailure(Throwable caught) {
-// CoreGUI.getErrorHandler().handleError(
-// MSG.view_admin_plugins_restartMasterPCFailure() + " " + caught.getMessage(), caught);
-// refreshTableInfo();
-// }
-// });
-// }
-// });
-
-// PluginFileUploadForm pluginUploadForm = new PluginFileUploadForm(extendLocatorId("upload"),
-// MSG.view_admin_plugins_upload(), true);
-
-// addExtraWidget(scanForUpdatesButton, true);
-// addExtraWidget(restartMasterPCButton, true);
-// addExtraWidget(pluginUploadForm, true);
-
- super.configureTable();
- }
-
- @Override
- public Canvas getDetailsView(Integer id) {
- return new ServerDetailView(extendLocatorId("detailsView"), id);
- }
-
- private int[] getSelectedIds(ListGridRecord[] selections) {
- if (selections == null) {
- return new int[0];
- }
- int[] ids = new int[selections.length];
- int i = 0;
- for (ListGridRecord selection : selections) {
- ids[i++] = selection.getAttributeAsInt(FIELD_ID);
- }
- return ids;
- }
-
- private ArrayList<String> getSelectedNames(ListGridRecord[] selections) {
- if (selections == null) {
- return new ArrayList<String>(0);
- }
- ArrayList<String> ids = new ArrayList<String>(selections.length);
- for (ListGridRecord selection : selections) {
- ids.add(selection.getAttributeAsString(FIELD_NAME));
- }
- return ids;
- }
-
- public class CloudDataSource extends RPCDataSource<ServerWithAgentCountComposite, Criteria> {
-
- public CloudDataSource() {
- super();
- List<DataSourceField> fields = addDataSourceFields();
- addFields(fields);
- }
-
- @Override
- protected List<DataSourceField> addDataSourceFields() {
- List<DataSourceField> fields = super.addDataSourceFields();
- DataSourceField idField = new DataSourceIntegerField(FIELD_ID, MSG.common_title_id(), 50);
- idField.setPrimaryKey(true);
- idField.setHidden(true);
- fields.add(idField);
- return fields;
- }
-
- public List<ListGridField> getListGridFields() {
- List<ListGridField> fields = new ArrayList<ListGridField>();
-
- ListGridField idField = new ListGridField(FIELD_ID, MSG.common_title_id());
- idField.setHidden(true);
- fields.add(idField);
-
- ListGridField nameField = new ListGridField(FIELD_NAME, MSG.common_title_name());
- fields.add(nameField);
-
- ListGridField modeField = new ListGridField(FIELD_MODE, MSG.view_adminTopology_server_mode());
- fields.add(modeField);
-
- ListGridField endpointAddressField = new ListGridField(FIELD_ENDPOINT_ADDRESS,
- MSG.view_adminTopology_server_endpointAddress());
- // TimestampCellFormatter.prepareDateField(endpointAddressField);
- fields.add(endpointAddressField);
-
- ListGridField nonsecurePortField = new ListGridField(FIELD_NONSECURE_PORT,
- MSG.view_adminTopology_server_nonSecurePort());
- // enabledField.setType(ListGridFieldType.IMAGE);
- // enabledField.setAlign(Alignment.CENTER);
- fields.add(nonsecurePortField);
-
- ListGridField securedPortField = new ListGridField(FIELD_SECURE_PORT,
- MSG.view_adminTopology_server_securePort());
- // deployedField.setType(ListGridFieldType.IMAGE);
- // deployedField.setAlign(Alignment.CENTER);
- // deployedField.setHidden(true);
- fields.add(securedPortField);
-
- ListGridField lastUpdateTimeField = new ListGridField(FIELD_LAST_UPDATE_TIME,
- MSG.view_adminTopology_server_lastUpdateTime());
- TimestampCellFormatter.prepareDateField(lastUpdateTimeField);
- fields.add(lastUpdateTimeField);
-
- ListGridField affinityGroupField = new ListGridField(FIELD_AFFINITY_GROUP,
- MSG.view_adminTopology_server_affinityGroup());
- fields.add(affinityGroupField);
-
- ListGridField agentCountField = new ListGridField(FIELD_AGENT_COUNT,
- MSG.view_adminTopology_server_agentCount());
- fields.add(agentCountField);
-
- idField.setWidth(100);
- nameField.setWidth("30%");
- modeField.setWidth("*");
- endpointAddressField.setWidth("20%");
- nonsecurePortField.setWidth(65);
- securedPortField.setWidth(75);
- lastUpdateTimeField.setWidth(100);
-
- return fields;
- }
-
- @Override
- protected void executeFetch(final DSRequest request, final DSResponse response, Criteria criteria) {
- final PageControl pc = getPageControl(request);
-
- GWTServiceLookup.getCloudService().getServers(pc, new AsyncCallback<List<ServerWithAgentCountComposite>>() {
- public void onSuccess(List<ServerWithAgentCountComposite> result) {
- response.setData(buildRecords(result));
- response.setTotalRows(result.size());
- processResponse(request.getRequestId(), response);
- }
-
- @Override
- public void onFailure(Throwable t) {
- //todo: CoreGUI.getErrorHandler().handleError(MSG.view_admin_plugins_loadFailure(), t);
- response.setStatus(DSResponse.STATUS_FAILURE);
- processResponse(request.getRequestId(), response);
- }
- });
- }
-
- /**
- * Returns a prepopulated PageControl based on the provided DSRequest. This will set sort fields,
- * pagination, but *not* filter fields.
- *
- * @param request the request to turn into a page control
- * @return the page control for passing to criteria and other queries
- */
- protected PageControl getPageControl(DSRequest request) {
- // Initialize paging.
- PageControl pageControl = new PageControl(0, getDataPageSize());
-
- // Initialize sorting.
- String sortBy = request.getAttribute("sortBy");
- if (sortBy != null) {
- String[] sorts = sortBy.split(",");
- for (String sort : sorts) {
- PageOrdering ordering = (sort.startsWith("-")) ? PageOrdering.DESC : PageOrdering.ASC;
- String columnName = (ordering == PageOrdering.DESC) ? sort.substring(1) : sort;
- pageControl.addDefaultOrderingField(columnName, ordering);
- }
- }
-
- return pageControl;
- }
-
- @Override
- public ServerWithAgentCountComposite copyValues(Record from) {
- throw new UnsupportedOperationException(
- "ServerTableView.CloudDataSourcepublic Server copyValues(Record from)");
- }
-
- @Override
- public ListGridRecord copyValues(ServerWithAgentCountComposite from) {
- ListGridRecord record = new ListGridRecord();
- record.setAttribute(FIELD_ID, from.getServer().getId());
- record.setAttribute(FIELD_NAME, from.getServer().getName());
- record.setAttribute(FIELD_MODE, from.getServer().getOperationMode());
- record.setAttribute(FIELD_ENDPOINT_ADDRESS, from.getServer().getAddress());
- record.setAttribute(FIELD_NONSECURE_PORT, from.getServer().getPort());
- record.setAttribute(FIELD_SECURE_PORT, from.getServer().getSecurePort());
- record.setAttribute(FIELD_LAST_UPDATE_TIME, from.getServer().getMtime());
- record.setAttribute(FIELD_AFFINITY_GROUP, from.getServer().getAffinityGroup());
- record.setAttribute(FIELD_AGENT_COUNT, from.getAgentCount());
- return record;
- }
-
- @Override
- protected Criteria getFetchCriteria(DSRequest request) {
- // we don't use criteria for this datasource, just return null
- return null;
- }
- }
-
-}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDetailView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDetailView.java
new file mode 100644
index 0000000..3cfac98
--- /dev/null
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerDetailView.java
@@ -0,0 +1,214 @@
+/*
+ * RHQ Management Platform
+ * Copyright (C) 2005-2012 Red Hat, Inc.
+ * All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation version 2 of the License.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+package org.rhq.enterprise.gui.coregui.client.admin.topology;
+
+import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerNodeDataourceField.FIELD_ADDRESS;
+import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerNodeDataourceField.FIELD_AFFINITY_GROUP;
+import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerNodeDataourceField.FIELD_CTIME;
+import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerNodeDataourceField.FIELD_MTIME;
+import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerNodeDataourceField.FIELD_NAME;
+import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerNodeDataourceField.FIELD_OPERATION_MODE;
+import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerNodeDataourceField.FIELD_PORT;
+import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerNodeDataourceField.FIELD_SECURE_PORT;
+
+import com.google.gwt.user.client.Timer;
+import com.google.gwt.user.client.rpc.AsyncCallback;
+import com.smartgwt.client.data.RecordList;
+import com.smartgwt.client.types.Overflow;
+import com.smartgwt.client.types.VisibilityMode;
+import com.smartgwt.client.util.SC;
+import com.smartgwt.client.widgets.Label;
+import com.smartgwt.client.widgets.form.fields.ButtonItem;
+import com.smartgwt.client.widgets.form.fields.SelectItem;
+import com.smartgwt.client.widgets.form.fields.StaticTextItem;
+import com.smartgwt.client.widgets.form.fields.TextItem;
+import com.smartgwt.client.widgets.form.fields.events.ClickEvent;
+import com.smartgwt.client.widgets.form.fields.events.ClickHandler;
+import com.smartgwt.client.widgets.grid.ListGrid;
+import com.smartgwt.client.widgets.layout.SectionStack;
+import com.smartgwt.client.widgets.layout.SectionStackSection;
+
+import org.rhq.core.domain.cloud.Server;
+import org.rhq.enterprise.gui.coregui.client.CoreGUI;
+import org.rhq.enterprise.gui.coregui.client.components.table.TimestampCellFormatter;
+import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup;
+import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableDynamicForm;
+import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableSectionStack;
+import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableVLayout;
+
+/**
+ * Shows details of a server.
+ *
+ * @author Jiri Kremser
+ */
+public class ServerDetailView extends LocatableVLayout {
+
+ // private final CloudGWTServiceAsync cloudManager = GWTServiceLookup.getCloudService();
+ private final int serverId;
+
+ private final LocatableSectionStack sectionStack;
+ private SectionStackSection detailsSection = null;
+ private SectionStackSection agentSection = null;
+
+ private int initSectionCount = 0;
+
+ public ServerDetailView(String locatorId, int serverId) {
+ super(locatorId);
+ this.serverId = serverId;
+ setHeight100();
+ setWidth100();
+ setOverflow(Overflow.AUTO);
+
+ sectionStack = new LocatableSectionStack(extendLocatorId("stack"));
+ sectionStack.setVisibilityMode(VisibilityMode.MULTIPLE);
+ sectionStack.setWidth100();
+ sectionStack.setHeight100();
+ sectionStack.setMargin(5);
+ sectionStack.setOverflow(Overflow.VISIBLE);
+ }
+
+ @Override
+ protected void onInit() {
+ super.onInit();
+
+ GWTServiceLookup.getCloudService().getServerById(this.serverId, new AsyncCallback<Server>() {
+ public void onSuccess(Server server) {
+ prepareDetailsSection(sectionStack, server);
+ preparAgentSection(sectionStack, server);
+ }
+
+ public void onFailure(Throwable caught) {
+ CoreGUI.getErrorHandler().handleError(MSG.view_admin_plugins_loadFailure(), caught);
+ }
+ });
+ }
+
+ public boolean isInitialized() {
+// return initSectionCount >= 5;
+ return true;
+ }
+
+ @Override
+ protected void onDraw() {
+ super.onDraw();
+
+ // wait until we have all of the sections before we show them. We don't use InitializableView because,
+ // it seems they are not supported (in the applicable renderView()) at this level.
+ new Timer() {
+ final long startTime = System.currentTimeMillis();
+
+ public void run() {
+ if (isInitialized()) {
+ if (null != detailsSection) {
+ sectionStack.addSection(detailsSection);
+ }
+ if (null != agentSection) {
+ sectionStack.addSection(agentSection);
+ }
+
+ addMember(sectionStack);
+ markForRedraw();
+
+ } else {
+ // don't wait forever, give up after 20s and show what we have
+ long elapsedMillis = System.currentTimeMillis() - startTime;
+ if (elapsedMillis > 20000) {
+ initSectionCount = 5;
+ }
+ schedule(100); // Reschedule the timer.
+ }
+ }
+ }.run(); // fire the timer immediately
+ }
+
+ private void preparAgentSection(SectionStack stack, Server server) {
+ SectionStackSection section = new SectionStackSection(MSG.view_adminTopology_serverDetail_connectedAgents());
+ section.setExpanded(true);
+ Label help = new Label("agents grid..");
+ section.setItems(help);
+ ListGrid agentGrid = new ListGrid();
+
+ stack.addSection(section);
+ agentSection = section;
+ ++initSectionCount;
+ return;
+ }
+
+ private void prepareDetailsSection(SectionStack stack, Server server) {
+ final LocatableDynamicForm form = new LocatableDynamicForm(extendLocatorId("detailsForm"));
+ form.setMargin(10);
+ form.setWidth100();
+ form.setWrapItemTitles(false);
+ form.setNumCols(2);
+
+ StaticTextItem nameItem = new StaticTextItem(FIELD_NAME.propertyName(), FIELD_NAME.title());
+ nameItem.setValue(server.getName());
+
+ TextItem addressItem = new TextItem(FIELD_ADDRESS.propertyName(), FIELD_ADDRESS.title());
+ addressItem.setValue(server.getAddress());
+
+ TextItem portItem = new TextItem(FIELD_PORT.propertyName(), FIELD_PORT.title());
+ portItem.setValue(server.getPort());
+
+ TextItem securePortItem = new TextItem(FIELD_SECURE_PORT.propertyName(), FIELD_SECURE_PORT.title());
+ securePortItem.setValue(server.getSecurePort());
+
+ SelectItem operationModeItem = new SelectItem(FIELD_OPERATION_MODE.propertyName(),
+ MSG.view_adminTopology_serverDetail_operationMode());
+ operationModeItem.setValueMap("NORMAL", "MAINTENANCE");
+ operationModeItem.setValue(server.getOperationMode());
+
+ StaticTextItem affinityGroupItem = new StaticTextItem(FIELD_AFFINITY_GROUP.propertyName(),
+ FIELD_AFFINITY_GROUP.title());
+ affinityGroupItem.setValue(server.getAffinityGroup());
+
+ StaticTextItem installationDateItem = new StaticTextItem(FIELD_CTIME.propertyName(), FIELD_CTIME.title());
+ installationDateItem.setValue(TimestampCellFormatter.format(Long.valueOf(server.getCtime()),
+ TimestampCellFormatter.DATE_TIME_FORMAT_MEDIUM));
+
+ StaticTextItem lastUpdatetem = new StaticTextItem(FIELD_MTIME.propertyName(), FIELD_MTIME.title());
+ lastUpdatetem.setValue(TimestampCellFormatter.format(Long.valueOf(server.getMtime()),
+ TimestampCellFormatter.DATE_TIME_FORMAT_MEDIUM));
+
+ ButtonItem saveButton = new ButtonItem();
+ saveButton.setOverflow(Overflow.VISIBLE);
+ saveButton.setTitle(MSG.common_button_save());
+ saveButton.addClickHandler(new ClickHandler() {
+ public void onClick(ClickEvent event) {
+ RecordList list = form.getRecordList();
+ SC.say("name is " + list.get(0).getAttribute("name"));
+ }
+ });
+
+ form.setItems(nameItem, addressItem, portItem, securePortItem, operationModeItem, affinityGroupItem,
+ installationDateItem, lastUpdatetem, saveButton);
+
+
+ SectionStackSection section = new SectionStackSection(MSG.common_title_details());
+ section.setExpanded(true);
+ section.setItems(form);
+
+ stack.addSection(section);
+ detailsSection = section;
+ ++initSectionCount;
+
+ return;
+ }
+}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerNodeDataourceField.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerNodeDataourceField.java
new file mode 100644
index 0000000..5e57aa0
--- /dev/null
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerNodeDataourceField.java
@@ -0,0 +1,83 @@
+/*
+ * RHQ Management Platform
+ * Copyright (C) 2005-2012 Red Hat, Inc.
+ * All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation version 2 of the License.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+package org.rhq.enterprise.gui.coregui.client.admin.topology;
+
+import com.smartgwt.client.widgets.grid.ListGridField;
+
+import org.rhq.enterprise.gui.coregui.client.CoreGUI;
+
+/**
+ * @author Jirka Kremser
+ *
+ */
+public enum ServerNodeDataourceField {
+
+ FIELD_ID("id", CoreGUI.getMessages().common_title_id()),
+
+ FIELD_NAME("name", CoreGUI.getMessages().common_title_name()),
+
+ FIELD_OPERATION_MODE("operationMode", CoreGUI.getMessages().view_adminTopology_server_mode()),
+
+ FIELD_ADDRESS("address", CoreGUI.getMessages().view_adminTopology_server_endpointAddress()),
+
+ FIELD_PORT("port", CoreGUI.getMessages().view_adminTopology_server_nonSecurePort()),
+
+ FIELD_SECURE_PORT("securePort", CoreGUI.getMessages().view_adminTopology_server_securePort()),
+
+ FIELD_CTIME("ctime", CoreGUI.getMessages().view_adminTopology_serverDetail_installationDate()),
+
+ FIELD_MTIME("mtime", CoreGUI.getMessages().view_adminTopology_server_lastUpdateTime()),
+
+ FIELD_AFFINITY_GROUP("affinityGroup", CoreGUI.getMessages().view_adminTopology_server_affinityGroup()),
+
+ FIELD_AGENT_COUNT("agentCount", CoreGUI.getMessages().view_adminTopology_server_agentCount());
+
+ /**
+ * Corresponds to a property name of Server (e.g. operationMode).
+ */
+ private String propertyName;
+
+ /**
+ * The table header for the field or property (e.g. Mode).
+ */
+ private String title;
+
+ private ServerNodeDataourceField(String propertyName, String title) {
+ this.propertyName = propertyName;
+ this.title = title;
+ }
+
+ public String propertyName() {
+ return propertyName;
+ }
+
+ public String title() {
+ return title;
+ }
+
+ public ListGridField getListGridField() {
+ return new ListGridField(propertyName, title);
+ }
+
+ public ListGridField getListGridField(String width) {
+ ListGridField field = new ListGridField(propertyName, title);
+ field.setWidth(width);
+ return field;
+ }
+}
\ No newline at end of file
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerNodeDatasource.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerNodeDatasource.java
new file mode 100644
index 0000000..25ada4e
--- /dev/null
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerNodeDatasource.java
@@ -0,0 +1,166 @@
+/*
+ * RHQ Management Platform
+ * Copyright (C) 2005-2012 Red Hat, Inc.
+ * All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation version 2 of the License.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+package org.rhq.enterprise.gui.coregui.client.admin.topology;
+
+import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerNodeDataourceField.FIELD_ADDRESS;
+import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerNodeDataourceField.FIELD_AFFINITY_GROUP;
+import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerNodeDataourceField.FIELD_AGENT_COUNT;
+import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerNodeDataourceField.FIELD_ID;
+import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerNodeDataourceField.FIELD_MTIME;
+import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerNodeDataourceField.FIELD_NAME;
+import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerNodeDataourceField.FIELD_OPERATION_MODE;
+import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerNodeDataourceField.FIELD_PORT;
+import static org.rhq.enterprise.gui.coregui.client.admin.topology.ServerNodeDataourceField.FIELD_SECURE_PORT;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import com.google.gwt.user.client.rpc.AsyncCallback;
+import com.smartgwt.client.data.DSRequest;
+import com.smartgwt.client.data.DSResponse;
+import com.smartgwt.client.data.DataSourceField;
+import com.smartgwt.client.data.Record;
+import com.smartgwt.client.data.fields.DataSourceIntegerField;
+import com.smartgwt.client.widgets.grid.ListGridField;
+import com.smartgwt.client.widgets.grid.ListGridRecord;
+
+import org.rhq.core.domain.cloud.composite.ServerWithAgentCountComposite;
+import org.rhq.core.domain.criteria.Criteria;
+import org.rhq.core.domain.util.PageControl;
+import org.rhq.core.domain.util.PageOrdering;
+import org.rhq.enterprise.gui.coregui.client.components.table.TimestampCellFormatter;
+import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup;
+import org.rhq.enterprise.gui.coregui.client.util.RPCDataSource;
+
+/**
+ * @author Jirka Kremser
+ *
+ */
+public class ServerNodeDatasource extends RPCDataSource<ServerWithAgentCountComposite, Criteria> {
+
+ public ServerNodeDatasource() {
+ super();
+ List<DataSourceField> fields = addDataSourceFields();
+ addFields(fields);
+ }
+
+ @Override
+ protected List<DataSourceField> addDataSourceFields() {
+ List<DataSourceField> fields = super.addDataSourceFields();
+ DataSourceField idField = new DataSourceIntegerField(FIELD_ID.propertyName(), FIELD_ID.title(), 50);
+ idField.setPrimaryKey(true);
+ idField.setHidden(true);
+ fields.add(idField);
+ return fields;
+ }
+
+ public List<ListGridField> getListGridFields() {
+ List<ListGridField> fields = new ArrayList<ListGridField>();
+
+ ListGridField idField = FIELD_ID.getListGridField();
+ idField.setHidden(true);
+ fields.add(idField);
+
+ fields.add(FIELD_NAME.getListGridField("*"));
+ fields.add(FIELD_OPERATION_MODE.getListGridField("90"));
+ fields.add(FIELD_ADDRESS.getListGridField("20%"));
+ fields.add(FIELD_PORT.getListGridField("90"));
+ fields.add(FIELD_SECURE_PORT.getListGridField("75"));
+
+ ListGridField lastUpdateTimeField = FIELD_MTIME.getListGridField("20%");
+ TimestampCellFormatter.prepareDateField(lastUpdateTimeField);
+ fields.add(lastUpdateTimeField);
+
+ fields.add(FIELD_AFFINITY_GROUP.getListGridField("80"));
+ fields.add(FIELD_AGENT_COUNT.getListGridField("75"));
+
+ return fields;
+ }
+
+ @Override
+ protected void executeFetch(final DSRequest request, final DSResponse response, Criteria criteria) {
+ final PageControl pc = getPageControl(request);
+
+ GWTServiceLookup.getCloudService().getServers(pc, new AsyncCallback<List<ServerWithAgentCountComposite>>() {
+ public void onSuccess(List<ServerWithAgentCountComposite> result) {
+ response.setData(buildRecords(result));
+ response.setTotalRows(result.size());
+ processResponse(request.getRequestId(), response);
+ }
+
+ @Override
+ public void onFailure(Throwable t) {
+ //todo: CoreGUI.getErrorHandler().handleError(MSG.view_admin_plugins_loadFailure(), t);
+ response.setStatus(DSResponse.STATUS_FAILURE);
+ processResponse(request.getRequestId(), response);
+ }
+ });
+ }
+
+ /**
+ * Returns a prepopulated PageControl based on the provided DSRequest. This will set sort fields,
+ * pagination, but *not* filter fields.
+ *
+ * @param request the request to turn into a page control
+ * @return the page control for passing to criteria and other queries
+ */
+ protected PageControl getPageControl(DSRequest request) {
+ // Initialize paging.
+ PageControl pageControl = new PageControl(0, getDataPageSize());
+
+ // Initialize sorting.
+ String sortBy = request.getAttribute("sortBy");
+ if (sortBy != null) {
+ String[] sorts = sortBy.split(",");
+ for (String sort : sorts) {
+ PageOrdering ordering = (sort.startsWith("-")) ? PageOrdering.DESC : PageOrdering.ASC;
+ String columnName = (ordering == PageOrdering.DESC) ? sort.substring(1) : sort;
+ pageControl.addDefaultOrderingField(columnName, ordering);
+ }
+ }
+
+ return pageControl;
+ }
+
+ @Override
+ public ServerWithAgentCountComposite copyValues(Record from) {
+ throw new UnsupportedOperationException("ServerTableView.CloudDataSourcepublic Server copyValues(Record from)");
+ }
+
+ @Override
+ public ListGridRecord copyValues(ServerWithAgentCountComposite from) {
+ ListGridRecord record = new ListGridRecord();
+ record.setAttribute(FIELD_ID.propertyName(), from.getServer().getId());
+ record.setAttribute(FIELD_NAME.propertyName(), from.getServer().getName());
+ record.setAttribute(FIELD_OPERATION_MODE.propertyName(), from.getServer().getOperationMode());
+ record.setAttribute(FIELD_ADDRESS.propertyName(), from.getServer().getAddress());
+ record.setAttribute(FIELD_PORT.propertyName(), from.getServer().getPort());
+ record.setAttribute(FIELD_SECURE_PORT.propertyName(), from.getServer().getSecurePort());
+ record.setAttribute(FIELD_MTIME.propertyName(), from.getServer().getMtime());
+ record.setAttribute(FIELD_AFFINITY_GROUP.propertyName(), from.getServer().getAffinityGroup());
+ record.setAttribute(FIELD_AGENT_COUNT.propertyName(), from.getAgentCount());
+ return record;
+ }
+
+ @Override
+ protected Criteria getFetchCriteria(DSRequest request) {
+ // we don't use criteria for this datasource, just return null
+ return null;
+ }
+}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerTableView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerTableView.java
new file mode 100644
index 0000000..e5bbbaf
--- /dev/null
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/topology/ServerTableView.java
@@ -0,0 +1,243 @@
+/*
+ * RHQ Management Platform
+ * Copyright (C) 2005-2012 Red Hat, Inc.
+ * All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation version 2 of the License.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+package org.rhq.enterprise.gui.coregui.client.admin.topology;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import com.smartgwt.client.types.SortDirection;
+import com.smartgwt.client.util.BooleanCallback;
+import com.smartgwt.client.util.SC;
+import com.smartgwt.client.widgets.Canvas;
+import com.smartgwt.client.widgets.grid.ListGrid;
+import com.smartgwt.client.widgets.grid.ListGridField;
+import com.smartgwt.client.widgets.grid.ListGridRecord;
+
+import org.rhq.core.domain.authz.Permission;
+import org.rhq.enterprise.gui.coregui.client.IconEnum;
+import org.rhq.enterprise.gui.coregui.client.admin.AdministrationView;
+import org.rhq.enterprise.gui.coregui.client.components.table.AuthorizedTableAction;
+import org.rhq.enterprise.gui.coregui.client.components.table.TableActionEnablement;
+import org.rhq.enterprise.gui.coregui.client.components.table.TableSection;
+import org.rhq.enterprise.gui.coregui.client.components.view.ViewName;
+
+/**
+ * @author Jiri Kremser
+ */
+public class ServerTableView extends TableSection<ServerNodeDatasource> {
+
+ public static final ViewName VIEW_ID = new ViewName("Servers(GWT)", MSG.view_adminTopology_servers()+"(GWT)", IconEnum.SERVERS);
+ public static final String VIEW_PATH = AdministrationView.VIEW_ID + "/"
+ + AdministrationView.SECTION_CONFIGURATION_VIEW_ID + "/" + VIEW_ID;
+
+// private boolean showUndeployed = false;
+
+ public ServerTableView(String locatorId) {
+ super(locatorId, MSG.view_adminTopology_servers()+"(GWT)");
+ setHeight100();
+ setWidth100();
+ setDataSource(new ServerNodeDatasource());
+ }
+
+ @Override
+ protected void configureTable() {
+ List<ListGridField> fields = getDataSource().getListGridFields();
+ ListGrid listGrid = getListGrid();
+ listGrid.setFields(fields.toArray(new ListGridField[fields.size()]));
+ listGrid.sort(ServerNodeDataourceField.FIELD_NAME.propertyName(), SortDirection.ASCENDING);
+
+ addTableAction(extendLocatorId("setNormal"), MSG.view_adminTopology_server_setNormal(), MSG.common_msg_areYouSure(),
+ new AuthorizedTableAction(this, TableActionEnablement.ANY, Permission.MANAGE_SETTINGS) {
+ public void executeAction(ListGridRecord[] selections, Object actionValue) {
+ int[] selectedIds = getSelectedIds(selections);
+ SC.say("setting servers to normal mode, ids: " + selectedIds);
+// GWTServiceLookup.getPluginService().enableServerPlugins(selectedIds,
+// new AsyncCallback<ArrayList<String>>() {
+// @Override
+// public void onSuccess(ArrayList<String> result) {
+// Message msg = new Message(
+// MSG.view_admin_plugins_enabledServerPlugins(result.toString()), Severity.Info);
+// CoreGUI.getMessageCenter().notify(msg);
+// refresh();
+// }
+//
+// @Override
+// public void onFailure(Throwable caught) {
+// CoreGUI.getErrorHandler().handleError(
+// MSG.view_admin_plugins_enabledServerPluginsFailure() + " " + caught.getMessage(),
+// caught);
+// refreshTableInfo();
+// }
+// });
+ }
+ });
+
+ addTableAction(extendLocatorId("setMaintenance"), MSG.view_adminTopology_server_setMaintenance(), new AuthorizedTableAction(this,
+ TableActionEnablement.ANY, Permission.MANAGE_SETTINGS) {
+ public void executeAction(final ListGridRecord[] selections, Object actionValue) {
+ ArrayList<String> selectedNames = getSelectedNames(selections);
+ String message = MSG.view_admin_plugins_serverDisableConfirm(selectedNames.toString());
+ SC.ask(message, new BooleanCallback() {
+ public void execute(Boolean confirmed) {
+ if (confirmed) {
+ int[] selectedIds = getSelectedIds(selections);
+ SC.say("setting servers to maintenance mode, ids: " + selectedIds);
+// GWTServiceLookup.getPluginService().disableServerPlugins(selectedIds,
+// new AsyncCallback<ArrayList<String>>() {
+// @Override
+// public void onSuccess(ArrayList<String> result) {
+// Message msg = new Message(MSG.view_admin_plugins_disabledServerPlugins(result
+// .toString()), Severity.Info);
+// CoreGUI.getMessageCenter().notify(msg);
+// refresh();
+// }
+//
+// @Override
+// public void onFailure(Throwable caught) {
+// CoreGUI.getErrorHandler().handleError(
+// MSG.view_admin_plugins_disabledServerPluginsFailure() + " "
+// + caught.getMessage(), caught);
+// refreshTableInfo();
+// }
+// });
+ } else {
+ refreshTableInfo();
+ }
+ }
+ });
+ }
+ });
+
+
+ addTableAction(extendLocatorId("removeSelected"), MSG.view_adminTopology_server_removeSelected(), MSG.common_msg_areYouSure(),
+ new AuthorizedTableAction(this, TableActionEnablement.ANY, Permission.MANAGE_SETTINGS) {
+ public void executeAction(ListGridRecord[] selections, Object actionValue) {
+ int[] selectedIds = getSelectedIds(selections);
+ SC.say("removing servers with ids: " + selectedIds);
+// GWTServiceLookup.getCloudService().purgeServerPlugins(selectedIds,
+// new AsyncCallback<ArrayList<String>>() {
+// @Override
+// public void onSuccess(ArrayList<String> result) {
+// Message msg = new Message(
+// MSG.view_admin_plugins_purgedServerPlugins(result.toString()), Severity.Info);
+// CoreGUI.getMessageCenter().notify(msg);
+// refresh();
+// }
+//
+// @Override
+// public void onFailure(Throwable caught) {
+// CoreGUI.getErrorHandler().handleError(
+// MSG.view_admin_plugins_purgedServerPluginsFailure() + " " + caught.getMessage(),
+// caught);
+// refreshTableInfo();
+// }
+// });
+ }
+ });
+
+// IButton scanForUpdatesButton = new LocatableIButton(extendLocatorId("scanButton"),
+// MSG.view_admin_plugins_scan());
+// scanForUpdatesButton.setAutoFit(true);
+// scanForUpdatesButton.addClickHandler(new ClickHandler() {
+// public void onClick(ClickEvent event) {
+// GWTServiceLookup.getPluginService().scanAndRegister(new AsyncCallback<Void>() {
+// @Override
+// public void onSuccess(Void result) {
+// Message msg = new Message(MSG.view_admin_plugins_scanComplete(), Severity.Info);
+// CoreGUI.getMessageCenter().notify(msg);
+// refresh();
+// }
+//
+// @Override
+// public void onFailure(Throwable caught) {
+// CoreGUI.getErrorHandler().handleError(
+// MSG.view_admin_plugins_scanFailure() + " " + caught.getMessage(), caught);
+// refreshTableInfo();
+// }
+// });
+// }
+// });
+
+// IButton restartMasterPCButton = new LocatableIButton(extendLocatorId("restartMasterPCButton"),
+// MSG.view_admin_plugins_restartMasterPC());
+// restartMasterPCButton.setAutoFit(true);
+// restartMasterPCButton.addClickHandler(new ClickHandler() {
+// public void onClick(ClickEvent event) {
+// Message msg = new Message(MSG.view_admin_plugins_restartMasterPCStarted(), Severity.Info);
+// CoreGUI.getMessageCenter().notify(msg);
+//
+// GWTServiceLookup.getPluginService().restartMasterPluginContainer(new AsyncCallback<Void>() {
+// @Override
+// public void onSuccess(Void result) {
+// Message msg = new Message(MSG.view_admin_plugins_restartMasterPCComplete(), Severity.Info);
+// CoreGUI.getMessageCenter().notify(msg);
+// refresh();
+// }
+//
+// @Override
+// public void onFailure(Throwable caught) {
+// CoreGUI.getErrorHandler().handleError(
+// MSG.view_admin_plugins_restartMasterPCFailure() + " " + caught.getMessage(), caught);
+// refreshTableInfo();
+// }
+// });
+// }
+// });
+
+// PluginFileUploadForm pluginUploadForm = new PluginFileUploadForm(extendLocatorId("upload"),
+// MSG.view_admin_plugins_upload(), true);
+
+// addExtraWidget(scanForUpdatesButton, true);
+// addExtraWidget(restartMasterPCButton, true);
+// addExtraWidget(pluginUploadForm, true);
+
+ super.configureTable();
+ }
+
+ @Override
+ public Canvas getDetailsView(Integer id) {
+ return new ServerDetailView(extendLocatorId("detailsView"), id);
+ }
+
+ private int[] getSelectedIds(ListGridRecord[] selections) {
+ if (selections == null) {
+ return new int[0];
+ }
+ int[] ids = new int[selections.length];
+ int i = 0;
+ for (ListGridRecord selection : selections) {
+ ids[i++] = selection.getAttributeAsInt(FIELD_ID);
+ }
+ return ids;
+ }
+
+ private ArrayList<String> getSelectedNames(ListGridRecord[] selections) {
+ if (selections == null) {
+ return new ArrayList<String>(0);
+ }
+ ArrayList<String> ids = new ArrayList<String>(selections.length);
+ for (ListGridRecord selection : selections) {
+ ids.add(selection.getAttributeAsString(FIELD_NAME));
+ }
+ return ids;
+ }
+
+
+
+}
commit 60c1d42fa5750ef5d1829e97b6b15323501bc3f2
Author: Jirka Kremser <jkremser(a)redhat.com>
Date: Mon Nov 19 10:05:01 2012 +0100
exposing the CloudManagerBean via CLI
diff --git a/modules/enterprise/binding/src/main/java/org/rhq/bindings/client/RhqManager.java b/modules/enterprise/binding/src/main/java/org/rhq/bindings/client/RhqManager.java
index 1dd79f1..caa25e1 100644
--- a/modules/enterprise/binding/src/main/java/org/rhq/bindings/client/RhqManager.java
+++ b/modules/enterprise/binding/src/main/java/org/rhq/bindings/client/RhqManager.java
@@ -24,6 +24,7 @@ import org.rhq.enterprise.server.alert.AlertManagerRemote;
import org.rhq.enterprise.server.auth.SubjectManagerRemote;
import org.rhq.enterprise.server.authz.RoleManagerRemote;
import org.rhq.enterprise.server.bundle.BundleManagerRemote;
+import org.rhq.enterprise.server.cloud.CloudManagerRemote;
import org.rhq.enterprise.server.configuration.ConfigurationManagerRemote;
import org.rhq.enterprise.server.content.ContentManagerRemote;
import org.rhq.enterprise.server.content.RepoManagerRemote;
@@ -63,6 +64,7 @@ public enum RhqManager {
BundleManager(BundleManagerRemote.class, "${BundleManager}"), //
CallTimeDataManager(CallTimeDataManagerRemote.class, "${CallTimeDataManager}"), //
RepoManager(RepoManagerRemote.class, "${RepoManager}"), //
+ CloudManager(CloudManagerRemote.class, "${CloudManager}"), //
ConfigurationManager(ConfigurationManagerRemote.class, "${ConfigurationManager}"), //
ContentManager(ContentManagerRemote.class, "${ContentManager}"), //
DataAccessManager(DataAccessManagerRemote.class, "${DataAccessManager}"), //
diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/CloudManagerBean.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/CloudManagerBean.java
index 01faa80..20cc694 100644
--- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/CloudManagerBean.java
+++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/CloudManagerBean.java
@@ -56,7 +56,7 @@ import org.rhq.enterprise.server.util.LookupUtil;
* @author Joseph Marques
*/
@Stateless
-public class CloudManagerBean implements CloudManagerLocal {
+public class CloudManagerBean implements CloudManagerLocal, CloudManagerRemote {
private final Log log = LogFactory.getLog(CloudManagerBean.class);
// A time sufficient to determine whether a server is down. Can be based on the initial delay set for the server instance
diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/CloudManagerRemote.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/CloudManagerRemote.java
new file mode 100644
index 0000000..1f97b99
--- /dev/null
+++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/cloud/CloudManagerRemote.java
@@ -0,0 +1,90 @@
+/*
+ * RHQ Management Platform
+ * Copyright (C) 2005-2012 Red Hat, Inc.
+ * All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation version 2 of the License.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+package org.rhq.enterprise.server.cloud;
+
+import java.util.List;
+
+import javax.ejb.Remote;
+
+import org.rhq.core.domain.auth.Subject;
+import org.rhq.core.domain.cloud.Server;
+import org.rhq.core.domain.cloud.composite.ServerWithAgentCountComposite;
+import org.rhq.core.domain.util.PageControl;
+import org.rhq.core.domain.util.PageList;
+
+/**
+ * @author Jiri Kremser
+ */
+@Remote
+public interface CloudManagerRemote {
+
+// void deleteServers(Integer[] serverIds) throws CloudManagerException;
+//
+// void deleteServer(Integer serverId) throws CloudManagerException;
+//
+// List<Agent> getAgentsByServerName(String serverName);
+//
+// Server getServerById(int serverId);
+//
+// Server getServerByName(String serverName);
+//
+// /**
+// * Return every server registered in the database considered part of the active cloud. This will exclude, for example,
+// * servers in INSTALLED mode or any other mode that should not be included when performing cloud operations such as partitioning.
+// * @return All servers available to the cloud.
+// */
+// List<Server> getAllCloudServers();
+//
+ /**
+ * Return every server registered in the database.
+ * @return All servers, regardless of operation mode.
+ */
+ List<Server> getAllServers();
+
+ PageList<ServerWithAgentCountComposite> getServerComposites(Subject subject, PageControl pc);
+//
+// /**
+// * Returns the number of servers that are part of the "server cloud", which excludes
+// * servers that have been installed but not associated with the cloud.
+// * The returned count will include those servers that are down or in maintenance mode,
+// * in addition to those servers that are currently running in a normal state.
+// *
+// * @return count of servers in the cloud
+// */
+// int getServerCount();
+//
+// /**
+// * Returns the number of servers that are part of the "server cloud" that are currently
+// * running in "normal" mode.
+// *
+// * This excludes all other servers such as those servers that have been installed but
+// * not associated with the cloud, servers that are down or in maintenance mode.
+// *
+// * @return count of servers in the cloud that are in a normal running state
+// */
+// int getNormalServerCount();
+//
+// void updateServerMode(Integer[] serverIds, Server.OperationMode mode);
+//
+// Server updateServer(Subject subject, Server server);
+//
+// PageList<FailoverListDetails> getFailoverListDetailsByAgentId(int agentId, PageControl pc);
+//
+// void markStaleServersDown(Subject subject);
+}
diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/util/RemoteAPIValidator.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/util/RemoteAPIValidator.java
index ec0e4f7..d1f74bc 100644
--- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/util/RemoteAPIValidator.java
+++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/util/RemoteAPIValidator.java
@@ -37,6 +37,7 @@ import org.rhq.enterprise.server.alert.AlertDefinitionManagerBean;
import org.rhq.enterprise.server.alert.AlertManagerBean;
import org.rhq.enterprise.server.auth.SubjectManagerBean;
import org.rhq.enterprise.server.authz.RoleManagerBean;
+import org.rhq.enterprise.server.cloud.CloudManagerBean;
import org.rhq.enterprise.server.configuration.ConfigurationManagerBean;
import org.rhq.enterprise.server.content.AdvisoryManagerBean;
import org.rhq.enterprise.server.content.ContentManagerBean;
@@ -71,6 +72,7 @@ public class RemoteAPIValidator {
AvailabilityManagerBean.class,//
CallTimeDataManagerBean.class, //
RepoManagerBean.class,//
+ CloudManagerBean.class,//
ConfigurationManagerBean.class, //
ContentManagerBean.class, //
//ContentSourceManagerBean.class, //
commit c66d7848a05f3dd6e5338b76f96b87de57f13e96
Author: Jirka Kremser <jkremser(a)redhat.com>
Date: Mon Nov 19 10:04:21 2012 +0100
new GWT service for CRUD operations with RHQ server
diff --git a/modules/core/domain/src/main/java/org/rhq/core/domain/cloud/composite/ServerWithAgentCountComposite.java b/modules/core/domain/src/main/java/org/rhq/core/domain/cloud/composite/ServerWithAgentCountComposite.java
index 6fff481..1732a3f 100644
--- a/modules/core/domain/src/main/java/org/rhq/core/domain/cloud/composite/ServerWithAgentCountComposite.java
+++ b/modules/core/domain/src/main/java/org/rhq/core/domain/cloud/composite/ServerWithAgentCountComposite.java
@@ -22,14 +22,22 @@
*/
package org.rhq.core.domain.cloud.composite;
+import java.io.Serializable;
+
import org.rhq.core.domain.cloud.Server;
/**
* @author Joseph Marques
*/
-public class ServerWithAgentCountComposite {
- private final Server server;
- private final int agentCount;
+public class ServerWithAgentCountComposite implements Serializable {
+
+ private static final long serialVersionUID = -7553274660445454259L;
+ private Server server;
+ private int agentCount;
+
+ public ServerWithAgentCountComposite() {
+ // GWT needs this
+ }
public ServerWithAgentCountComposite(Server server, Number agentCount) {
super();
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/ServerDetailView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/ServerDetailView.java
new file mode 100644
index 0000000..44bcb26
--- /dev/null
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/ServerDetailView.java
@@ -0,0 +1,415 @@
+/*
+ * RHQ Management Platform
+ * Copyright (C) 2005-2012 Red Hat, Inc.
+ * All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation version 2 of the License.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+package org.rhq.enterprise.gui.coregui.client.admin;
+
+import com.google.gwt.user.client.Timer;
+import com.google.gwt.user.client.rpc.AsyncCallback;
+import com.smartgwt.client.types.Overflow;
+import com.smartgwt.client.types.VisibilityMode;
+import com.smartgwt.client.widgets.Img;
+import com.smartgwt.client.widgets.Label;
+import com.smartgwt.client.widgets.form.fields.CanvasItem;
+import com.smartgwt.client.widgets.form.fields.StaticTextItem;
+import com.smartgwt.client.widgets.layout.SectionStack;
+import com.smartgwt.client.widgets.layout.SectionStackSection;
+
+import org.rhq.core.domain.cloud.Server;
+import org.rhq.core.domain.plugin.PluginKey;
+import org.rhq.core.domain.plugin.ServerPlugin;
+import org.rhq.enterprise.gui.coregui.client.CoreGUI;
+import org.rhq.enterprise.gui.coregui.client.ImageManager;
+import org.rhq.enterprise.gui.coregui.client.components.table.TimestampCellFormatter;
+import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup;
+import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableDynamicForm;
+import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableSectionStack;
+import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableVLayout;
+
+/**
+ * Shows details of a server.
+ *
+ * @author Jiri Kremser
+ */
+public class ServerDetailView extends LocatableVLayout {
+
+// private final CloudGWTServiceAsync cloudManager = GWTServiceLookup.getCloudService();
+ private final int serverId;
+
+ private final LocatableSectionStack sectionStack;
+ private SectionStackSection detailsSection = null;
+ private SectionStackSection helpSection = null;
+ private SectionStackSection controlsSection = null;
+ private SectionStackSection pluginConfigSection = null;
+ private SectionStackSection scheduledJobsSection = null;
+ private int initSectionCount = 0;
+
+ public ServerDetailView(String locatorId, int serverId) {
+ super(locatorId);
+ this.serverId = serverId;
+ setHeight100();
+ setWidth100();
+ setOverflow(Overflow.AUTO);
+
+ sectionStack = new LocatableSectionStack(extendLocatorId("stack"));
+ sectionStack.setVisibilityMode(VisibilityMode.MULTIPLE);
+ sectionStack.setWidth100();
+ sectionStack.setHeight100();
+ sectionStack.setMargin(5);
+ sectionStack.setOverflow(Overflow.VISIBLE);
+ }
+
+ @Override
+ protected void onInit() {
+ super.onInit();
+
+ GWTServiceLookup.getCloudService().getServerById(this.serverId, new AsyncCallback<Server>() {
+ public void onSuccess(Server server) {
+// prepareDetailsSection(sectionStack, server);
+// prepareHelpSection(sectionStack, server);
+// prepareControlsSection(sectionStack, server);
+// preparePluginConfigurationSection(sectionStack, server);
+// prepareScheduledJobsSection(sectionStack, server);
+ }
+
+ public void onFailure(Throwable caught) {
+ CoreGUI.getErrorHandler().handleError(MSG.view_admin_plugins_loadFailure(), caught);
+ }
+ });
+ }
+
+ public boolean isInitialized() {
+ return initSectionCount >= 5;
+ }
+
+ @Override
+ protected void onDraw() {
+ super.onDraw();
+
+ // wait until we have all of the sections before we show them. We don't use InitializableView because,
+ // it seems they are not supported (in the applicable renderView()) at this level.
+ new Timer() {
+ final long startTime = System.currentTimeMillis();
+
+ public void run() {
+ if (isInitialized()) {
+ if (null != detailsSection) {
+ sectionStack.addSection(detailsSection);
+ }
+ if (null != helpSection) {
+ sectionStack.addSection(helpSection);
+ }
+ if (null != controlsSection) {
+ sectionStack.addSection(controlsSection);
+ }
+ if (null != pluginConfigSection) {
+ sectionStack.addSection(pluginConfigSection);
+ }
+ if (null != scheduledJobsSection) {
+ sectionStack.addSection(scheduledJobsSection);
+ }
+
+ addMember(sectionStack);
+ markForRedraw();
+
+ } else {
+ // don't wait forever, give up after 20s and show what we have
+ long elapsedMillis = System.currentTimeMillis() - startTime;
+ if (elapsedMillis > 20000) {
+ initSectionCount = 5;
+ }
+ schedule(100); // Reschedule the timer.
+ }
+ }
+ }.run(); // fire the timer immediately
+ }
+
+ private void prepareControlsSection(final SectionStack stack, final ServerPlugin plugin) {
+ PluginKey pluginKey = PluginKey.createServerPluginKey(plugin.getType(), plugin.getName());
+
+// pluginManager.getServerPluginControlDefinitions(pluginKey,
+// new AsyncCallback<ArrayList<ServerPluginControlDefinition>>() {
+// public void onSuccess(ArrayList<ServerPluginControlDefinition> result) {
+// if (result != null && !result.isEmpty()) {
+// SectionStackSection section = new SectionStackSection(MSG.view_admin_plugins_serverControls());
+// section.setExpanded(false);
+// section.addItem(new ServerPluginControlView(extendLocatorId("controlView"), plugin, result));
+//
+// controlsSection = section;
+// }
+// ++initSectionCount;
+// }
+//
+// public void onFailure(Throwable caught) {
+// CoreGUI.getErrorHandler().handleError(MSG.view_admin_plugins_loadFailure(), caught);
+// }
+// });
+ }
+
+ private void preparePluginConfigurationSection(final SectionStack stack, final ServerPlugin plugin) {
+ final PluginKey pluginKey = PluginKey.createServerPluginKey(plugin.getType(), plugin.getName());
+
+// pluginManager.getServerPluginConfigurationDefinition(pluginKey, new AsyncCallback<ConfigurationDefinition>() {
+// public void onSuccess(ConfigurationDefinition def) {
+// if (def != null) {
+// LocatableVLayout layout = new LocatableVLayout(extendLocatorId("pcEditorLayout"));
+//
+// ToolStrip buttons = new ToolStrip();
+// buttons.setWidth100();
+// buttons.setExtraSpace(10);
+// buttons.setMembersMargin(5);
+// buttons.setLayoutMargin(5);
+//
+// final IButton saveButtonPC = new LocatableIButton(extendLocatorId("pcSave"), MSG
+// .common_button_save());
+//
+// final IButton resetButtonPC = new LocatableIButton(extendLocatorId("pcRest"), MSG
+// .common_button_reset());
+//
+// Configuration config = plugin.getPluginConfiguration();
+// final ConfigurationEditor editorPC = new ConfigurationEditor(extendLocatorId("pcEdit"), def, config);
+// editorPC.setOverflow(Overflow.AUTO);
+// editorPC.addPropertyValueChangeListener(new PropertyValueChangeListener() {
+// public void propertyValueChanged(PropertyValueChangeEvent event) {
+// if (event.isInvalidPropertySetChanged()) {
+// Map<String, String> invalidPropertyNames = event.getInvalidPropertyNames();
+// if (invalidPropertyNames.isEmpty()) {
+// saveButtonPC.enable();
+// } else {
+// saveButtonPC.disable();
+// }
+// }
+// }
+// });
+//
+// resetButtonPC.addClickHandler(new ClickHandler() {
+// public void onClick(ClickEvent event) {
+// editorPC.reset();
+// }
+// });
+//
+// saveButtonPC.addClickHandler(new ClickHandler() {
+// public void onClick(ClickEvent event) {
+// if (!editorPC.validate()) {
+// Message msg = new Message(MSG.view_admin_plugins_serverConfig_badSettings(),
+// Severity.Warning, EnumSet.of(Message.Option.Transient));
+// CoreGUI.getMessageCenter().notify(msg);
+// return;
+// }
+//// pluginManager.updateServerPluginConfiguration(pluginKey, editorPC.getConfiguration(),
+//// new AsyncCallback<Void>() {
+//// public void onSuccess(Void result) {
+//// Message m = new Message(MSG.view_admin_plugins_serverConfig_settingsSaved());
+//// CoreGUI.getMessageCenter().notify(m);
+//// }
+////
+//// public void onFailure(Throwable caught) {
+//// CoreGUI.getErrorHandler().handleError(
+//// MSG.view_admin_plugins_serverConfig_saveFailed(), caught);
+//// }
+//// });
+// }
+// });
+//
+// buttons.addMember(saveButtonPC);
+// buttons.addMember(resetButtonPC);
+// layout.addMember(buttons);
+// layout.addMember(editorPC);
+//
+// SectionStackSection section = new SectionStackSection(MSG.view_admin_plugins_serverConfig());
+// section.setExpanded(false);
+// section.setItems(layout);
+//
+// pluginConfigSection = section;
+// }
+//
+// ++initSectionCount;
+// }
+//
+// @Override
+// public void onFailure(Throwable caught) {
+// CoreGUI.getErrorHandler().handleError(MSG.view_admin_plugins_loadFailure(), caught);
+// }
+// });
+ return;
+ }
+
+ private void prepareScheduledJobsSection(final SectionStack stack, final ServerPlugin plugin) {
+ final PluginKey pluginKey = PluginKey.createServerPluginKey(plugin.getType(), plugin.getName());
+
+// pluginManager.getServerPluginScheduledJobsDefinition(pluginKey, new AsyncCallback<ConfigurationDefinition>() {
+// public void onSuccess(ConfigurationDefinition def) {
+// if (def != null) {
+// LocatableVLayout layout = new LocatableVLayout(extendLocatorId("sjEditorLayout"));
+//
+// ToolStrip buttons = new ToolStrip();
+// buttons.setWidth100();
+// buttons.setExtraSpace(10);
+// buttons.setMembersMargin(5);
+// buttons.setLayoutMargin(5);
+//
+// final IButton saveButtonSJ = new LocatableIButton(extendLocatorId("sjSave"), MSG
+// .common_button_save());
+// buttons.addMember(saveButtonSJ);
+//
+// final IButton resetButtonSJ = new LocatableIButton(extendLocatorId("sjRest"), MSG
+// .common_button_reset());
+// buttons.addMember(resetButtonSJ);
+//
+// Configuration config = plugin.getScheduledJobsConfiguration();
+// final ConfigurationEditor editorSJ = new ConfigurationEditor(extendLocatorId("sjEdit"), def, config);
+// editorSJ.setOverflow(Overflow.AUTO);
+// editorSJ.addPropertyValueChangeListener(new PropertyValueChangeListener() {
+// public void propertyValueChanged(PropertyValueChangeEvent event) {
+// if (event.isInvalidPropertySetChanged()) {
+// Map<String, String> invalidPropertyNames = event.getInvalidPropertyNames();
+// if (invalidPropertyNames.isEmpty()) {
+// saveButtonSJ.enable();
+// } else {
+// saveButtonSJ.disable();
+// }
+// }
+// }
+// });
+//
+// resetButtonSJ.addClickHandler(new ClickHandler() {
+// public void onClick(ClickEvent event) {
+// editorSJ.reset();
+// }
+// });
+//
+// saveButtonSJ.addClickHandler(new ClickHandler() {
+// public void onClick(ClickEvent event) {
+// if (!editorSJ.validate()) {
+// Message msg = new Message(MSG.view_admin_plugins_serverConfig_badSettings(),
+// Severity.Warning, EnumSet.of(Message.Option.Transient));
+// CoreGUI.getMessageCenter().notify(msg);
+// return;
+// }
+//// pluginManager.updateServerPluginScheduledJobs(pluginKey, editorSJ.getConfiguration(),
+//// new AsyncCallback<Void>() {
+//// public void onSuccess(Void result) {
+//// Message m = new Message(MSG.view_admin_plugins_serverConfig_settingsSaved());
+//// CoreGUI.getMessageCenter().notify(m);
+//// }
+////
+//// public void onFailure(Throwable caught) {
+//// CoreGUI.getErrorHandler().handleError(
+//// MSG.view_admin_plugins_serverConfig_saveFailed(), caught);
+//// }
+//// });
+// }
+// });
+//
+// layout.addMember(buttons);
+// layout.addMember(editorSJ);
+//
+// SectionStackSection section = new SectionStackSection(MSG.view_admin_plugins_serverScheduleJobs());
+// section.setExpanded(false);
+// section.setItems(layout);
+//
+// scheduledJobsSection = section;
+// }
+//
+// ++initSectionCount;
+// }
+//
+// @Override
+// public void onFailure(Throwable caught) {
+// CoreGUI.getErrorHandler().handleError(MSG.view_admin_plugins_loadFailure(), caught);
+// }
+// });
+ return;
+ }
+
+ private void prepareHelpSection(SectionStack stack, ServerPlugin plugin) {
+ if (plugin.getHelp() != null && plugin.getHelp().length() > 0) {
+ SectionStackSection section = new SectionStackSection(MSG.common_title_help());
+ section.setExpanded(true);
+ Label help = new Label(plugin.getHelp());
+ section.setItems(help);
+
+ helpSection = section;
+ }
+
+ ++initSectionCount;
+ return;
+ }
+
+ private void prepareDetailsSection(SectionStack stack, ServerPlugin plugin) {
+ LocatableDynamicForm form = new LocatableDynamicForm(extendLocatorId("detailsForm"));
+ form.setMargin(10);
+ form.setWidth100();
+ form.setWrapItemTitles(false);
+ form.setNumCols(4);
+
+ StaticTextItem nameItem = new StaticTextItem("name", MSG.common_title_name());
+ nameItem.setValue(plugin.getName());
+
+ StaticTextItem displayNameItem = new StaticTextItem("displayName", MSG.common_title_display_name());
+ displayNameItem.setValue(plugin.getDisplayName());
+
+ StaticTextItem versionItem = new StaticTextItem("version", MSG.common_title_version());
+ versionItem.setValue(plugin.getVersion());
+
+ StaticTextItem md5Item = new StaticTextItem("MD5", "MD5");
+ md5Item.setValue(plugin.getMD5());
+
+ StaticTextItem pathItem = new StaticTextItem("path", MSG.common_title_path());
+ pathItem.setValue(plugin.getPath());
+
+ StaticTextItem ampsItem = new StaticTextItem("ampsVersion", "AMPS " + MSG.common_title_version());
+ ampsItem.setValue(plugin.getAmpsVersion());
+
+ StaticTextItem descItem = new StaticTextItem("desc", MSG.common_title_description());
+ descItem.setValue(plugin.getDescription());
+
+ StaticTextItem mtimeItem = new StaticTextItem("mtime", MSG.common_title_lastUpdated());
+ mtimeItem.setValue(TimestampCellFormatter.format(Long.valueOf(plugin.getMtime()),
+ TimestampCellFormatter.DATE_TIME_FORMAT_MEDIUM));
+
+ StaticTextItem kindItem = new StaticTextItem("kind", MSG.common_title_kind());
+ switch (plugin.getDeployment()) {
+ case AGENT:
+ kindItem.setValue(MSG.view_admin_plugins_agent());
+ break;
+ case SERVER:
+ kindItem.setValue(MSG.view_admin_plugins_server());
+ break;
+ }
+
+ CanvasItem enabledItem = new CanvasItem("enabled", MSG.common_title_enabled());
+ Img img = new Img(ImageManager.getAvailabilityIcon(plugin.isEnabled()), 16, 16);
+ enabledItem.setCanvas(img);
+
+ StaticTextItem typeItem = new StaticTextItem("type", MSG.common_title_type());
+ typeItem.setValue(plugin.getType());
+
+ form.setItems(displayNameItem, nameItem, versionItem, ampsItem, md5Item, kindItem, descItem, pathItem,
+ mtimeItem, enabledItem, typeItem);
+
+ SectionStackSection section = new SectionStackSection(MSG.common_title_details());
+ section.setExpanded(true);
+ section.setItems(form);
+
+ detailsSection = section;
+ ++initSectionCount;
+
+ return;
+ }
+}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/ServerTableView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/ServerTableView.java
index e99efbe..57b6d1c 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/ServerTableView.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/ServerTableView.java
@@ -31,30 +31,24 @@ import com.smartgwt.client.types.SortDirection;
import com.smartgwt.client.util.BooleanCallback;
import com.smartgwt.client.util.SC;
import com.smartgwt.client.widgets.Canvas;
-import com.smartgwt.client.widgets.IButton;
-import com.smartgwt.client.widgets.events.ClickEvent;
-import com.smartgwt.client.widgets.events.ClickHandler;
import com.smartgwt.client.widgets.grid.ListGrid;
import com.smartgwt.client.widgets.grid.ListGridField;
import com.smartgwt.client.widgets.grid.ListGridRecord;
import org.rhq.core.domain.authz.Permission;
-import org.rhq.core.domain.cloud.Server;
+import org.rhq.core.domain.cloud.composite.ServerWithAgentCountComposite;
import org.rhq.core.domain.criteria.Criteria;
-import org.rhq.enterprise.gui.coregui.client.CoreGUI;
+import org.rhq.core.domain.util.PageControl;
+import org.rhq.core.domain.util.PageOrdering;
import org.rhq.enterprise.gui.coregui.client.IconEnum;
import org.rhq.enterprise.gui.coregui.client.admin.ServerTableView.CloudDataSource;
import org.rhq.enterprise.gui.coregui.client.components.table.AuthorizedTableAction;
import org.rhq.enterprise.gui.coregui.client.components.table.TableActionEnablement;
import org.rhq.enterprise.gui.coregui.client.components.table.TableSection;
import org.rhq.enterprise.gui.coregui.client.components.table.TimestampCellFormatter;
-import org.rhq.enterprise.gui.coregui.client.components.upload.PluginFileUploadForm;
import org.rhq.enterprise.gui.coregui.client.components.view.ViewName;
import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup;
import org.rhq.enterprise.gui.coregui.client.util.RPCDataSource;
-import org.rhq.enterprise.gui.coregui.client.util.message.Message;
-import org.rhq.enterprise.gui.coregui.client.util.message.Message.Severity;
-import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableIButton;
/**
* @author Jiri Kremser
@@ -67,15 +61,15 @@ public class ServerTableView extends TableSection<CloudDataSource> {
private static final String FIELD_ID = "id";
private static final String FIELD_NAME = "name";
- private static final String FIELD_MODE = "mode";
- private static final String FIELD_ENDPOINT_ADDRESS = "endpointAddress";
- private static final String FIELD_NONSECURE_PORT = "nonsecurePort";
+ private static final String FIELD_MODE = "operationMode";
+ private static final String FIELD_ENDPOINT_ADDRESS = "address";
+ private static final String FIELD_NONSECURE_PORT = "port";
private static final String FIELD_SECURE_PORT = "securePort";
- private static final String FIELD_LAST_UPDATE_TIME = "lastUpdateTime";
+ private static final String FIELD_LAST_UPDATE_TIME = "mtime";
private static final String FIELD_AFFINITY_GROUP = "affinityGroup";
private static final String FIELD_AGENT_COUNT = "agentCount";
- private boolean showUndeployed = false;
+// private boolean showUndeployed = false;
public ServerTableView(String locatorId) {
super(locatorId, null);
@@ -91,32 +85,33 @@ public class ServerTableView extends TableSection<CloudDataSource> {
listGrid.setFields(fields.toArray(new ListGridField[fields.size()]));
listGrid.sort(FIELD_NAME, SortDirection.ASCENDING);
- addTableAction(extendLocatorId("enable"), MSG.common_button_enable(), MSG.common_msg_areYouSure(),
+ addTableAction(extendLocatorId("setNormal"), MSG.view_adminTopology_server_setNormal(), MSG.common_msg_areYouSure(),
new AuthorizedTableAction(this, TableActionEnablement.ANY, Permission.MANAGE_SETTINGS) {
public void executeAction(ListGridRecord[] selections, Object actionValue) {
int[] selectedIds = getSelectedIds(selections);
- GWTServiceLookup.getPluginService().enableServerPlugins(selectedIds,
- new AsyncCallback<ArrayList<String>>() {
- @Override
- public void onSuccess(ArrayList<String> result) {
- Message msg = new Message(
- MSG.view_admin_plugins_enabledServerPlugins(result.toString()), Severity.Info);
- CoreGUI.getMessageCenter().notify(msg);
- refresh();
- }
-
- @Override
- public void onFailure(Throwable caught) {
- CoreGUI.getErrorHandler().handleError(
- MSG.view_admin_plugins_enabledServerPluginsFailure() + " " + caught.getMessage(),
- caught);
- refreshTableInfo();
- }
- });
+ SC.say("setting servers to normal mode, ids: " + selectedIds);
+// GWTServiceLookup.getPluginService().enableServerPlugins(selectedIds,
+// new AsyncCallback<ArrayList<String>>() {
+// @Override
+// public void onSuccess(ArrayList<String> result) {
+// Message msg = new Message(
+// MSG.view_admin_plugins_enabledServerPlugins(result.toString()), Severity.Info);
+// CoreGUI.getMessageCenter().notify(msg);
+// refresh();
+// }
+//
+// @Override
+// public void onFailure(Throwable caught) {
+// CoreGUI.getErrorHandler().handleError(
+// MSG.view_admin_plugins_enabledServerPluginsFailure() + " " + caught.getMessage(),
+// caught);
+// refreshTableInfo();
+// }
+// });
}
});
- addTableAction(extendLocatorId("disable"), MSG.common_button_disable(), new AuthorizedTableAction(this,
+ addTableAction(extendLocatorId("setMaintenance"), MSG.view_adminTopology_server_setMaintenance(), new AuthorizedTableAction(this,
TableActionEnablement.ANY, Permission.MANAGE_SETTINGS) {
public void executeAction(final ListGridRecord[] selections, Object actionValue) {
ArrayList<String> selectedNames = getSelectedNames(selections);
@@ -125,59 +120,25 @@ public class ServerTableView extends TableSection<CloudDataSource> {
public void execute(Boolean confirmed) {
if (confirmed) {
int[] selectedIds = getSelectedIds(selections);
- GWTServiceLookup.getPluginService().disableServerPlugins(selectedIds,
- new AsyncCallback<ArrayList<String>>() {
- @Override
- public void onSuccess(ArrayList<String> result) {
- Message msg = new Message(MSG.view_admin_plugins_disabledServerPlugins(result
- .toString()), Severity.Info);
- CoreGUI.getMessageCenter().notify(msg);
- refresh();
- }
-
- @Override
- public void onFailure(Throwable caught) {
- CoreGUI.getErrorHandler().handleError(
- MSG.view_admin_plugins_disabledServerPluginsFailure() + " "
- + caught.getMessage(), caught);
- refreshTableInfo();
- }
- });
- } else {
- refreshTableInfo();
- }
- }
- });
- }
- });
-
- addTableAction(extendLocatorId("undeploy"), MSG.view_admin_plugins_undeploy(), new AuthorizedTableAction(this,
- TableActionEnablement.ANY, Permission.MANAGE_SETTINGS) {
- public void executeAction(final ListGridRecord[] selections, Object actionValue) {
- ArrayList<String> selectedNames = getSelectedNames(selections);
- String message = MSG.view_admin_plugins_serverUndeployConfirm(selectedNames.toString());
- SC.ask(message, new BooleanCallback() {
- public void execute(Boolean confirmed) {
- if (confirmed) {
- int[] selectedIds = getSelectedIds(selections);
- GWTServiceLookup.getPluginService().undeployServerPlugins(selectedIds,
- new AsyncCallback<ArrayList<String>>() {
- @Override
- public void onSuccess(ArrayList<String> result) {
- Message msg = new Message(MSG.view_admin_plugins_undeployedServerPlugins(result
- .toString()), Severity.Info);
- CoreGUI.getMessageCenter().notify(msg);
- refresh();
- }
-
- @Override
- public void onFailure(Throwable caught) {
- CoreGUI.getErrorHandler().handleError(
- MSG.view_admin_plugins_undeployedServerPluginsFailure() + " "
- + caught.getMessage(), caught);
- refreshTableInfo();
- }
- });
+ SC.say("setting servers to maintenance mode, ids: " + selectedIds);
+// GWTServiceLookup.getPluginService().disableServerPlugins(selectedIds,
+// new AsyncCallback<ArrayList<String>>() {
+// @Override
+// public void onSuccess(ArrayList<String> result) {
+// Message msg = new Message(MSG.view_admin_plugins_disabledServerPlugins(result
+// .toString()), Severity.Info);
+// CoreGUI.getMessageCenter().notify(msg);
+// refresh();
+// }
+//
+// @Override
+// public void onFailure(Throwable caught) {
+// CoreGUI.getErrorHandler().handleError(
+// MSG.view_admin_plugins_disabledServerPluginsFailure() + " "
+// + caught.getMessage(), caught);
+// refreshTableInfo();
+// }
+// });
} else {
refreshTableInfo();
}
@@ -186,102 +147,95 @@ public class ServerTableView extends TableSection<CloudDataSource> {
}
});
- addTableAction(extendLocatorId("purge"), MSG.common_button_purge(), MSG.common_msg_areYouSure(),
+
+ addTableAction(extendLocatorId("removeSelected"), MSG.view_adminTopology_server_removeSelected(), MSG.common_msg_areYouSure(),
new AuthorizedTableAction(this, TableActionEnablement.ANY, Permission.MANAGE_SETTINGS) {
- public boolean isEnabled(ListGridRecord[] selection) {
- if (showUndeployed) {
- return super.isEnabled(selection);
- } else {
- return false; // we aren't showing undeployed plugins, so there is no plugin shown that can be purged anyway
- }
- }
-
public void executeAction(ListGridRecord[] selections, Object actionValue) {
int[] selectedIds = getSelectedIds(selections);
- GWTServiceLookup.getPluginService().purgeServerPlugins(selectedIds,
- new AsyncCallback<ArrayList<String>>() {
- @Override
- public void onSuccess(ArrayList<String> result) {
- Message msg = new Message(
- MSG.view_admin_plugins_purgedServerPlugins(result.toString()), Severity.Info);
- CoreGUI.getMessageCenter().notify(msg);
- refresh();
- }
-
- @Override
- public void onFailure(Throwable caught) {
- CoreGUI.getErrorHandler().handleError(
- MSG.view_admin_plugins_purgedServerPluginsFailure() + " " + caught.getMessage(),
- caught);
- refreshTableInfo();
- }
- });
+ SC.say("removing servers with ids: " + selectedIds);
+// GWTServiceLookup.getCloudService().purgeServerPlugins(selectedIds,
+// new AsyncCallback<ArrayList<String>>() {
+// @Override
+// public void onSuccess(ArrayList<String> result) {
+// Message msg = new Message(
+// MSG.view_admin_plugins_purgedServerPlugins(result.toString()), Severity.Info);
+// CoreGUI.getMessageCenter().notify(msg);
+// refresh();
+// }
+//
+// @Override
+// public void onFailure(Throwable caught) {
+// CoreGUI.getErrorHandler().handleError(
+// MSG.view_admin_plugins_purgedServerPluginsFailure() + " " + caught.getMessage(),
+// caught);
+// refreshTableInfo();
+// }
+// });
}
});
- IButton scanForUpdatesButton = new LocatableIButton(extendLocatorId("scanButton"),
- MSG.view_admin_plugins_scan());
- scanForUpdatesButton.setAutoFit(true);
- scanForUpdatesButton.addClickHandler(new ClickHandler() {
- public void onClick(ClickEvent event) {
- GWTServiceLookup.getPluginService().scanAndRegister(new AsyncCallback<Void>() {
- @Override
- public void onSuccess(Void result) {
- Message msg = new Message(MSG.view_admin_plugins_scanComplete(), Severity.Info);
- CoreGUI.getMessageCenter().notify(msg);
- refresh();
- }
-
- @Override
- public void onFailure(Throwable caught) {
- CoreGUI.getErrorHandler().handleError(
- MSG.view_admin_plugins_scanFailure() + " " + caught.getMessage(), caught);
- refreshTableInfo();
- }
- });
- }
- });
-
- IButton restartMasterPCButton = new LocatableIButton(extendLocatorId("restartMasterPCButton"),
- MSG.view_admin_plugins_restartMasterPC());
- restartMasterPCButton.setAutoFit(true);
- restartMasterPCButton.addClickHandler(new ClickHandler() {
- public void onClick(ClickEvent event) {
- Message msg = new Message(MSG.view_admin_plugins_restartMasterPCStarted(), Severity.Info);
- CoreGUI.getMessageCenter().notify(msg);
-
- GWTServiceLookup.getPluginService().restartMasterPluginContainer(new AsyncCallback<Void>() {
- @Override
- public void onSuccess(Void result) {
- Message msg = new Message(MSG.view_admin_plugins_restartMasterPCComplete(), Severity.Info);
- CoreGUI.getMessageCenter().notify(msg);
- refresh();
- }
-
- @Override
- public void onFailure(Throwable caught) {
- CoreGUI.getErrorHandler().handleError(
- MSG.view_admin_plugins_restartMasterPCFailure() + " " + caught.getMessage(), caught);
- refreshTableInfo();
- }
- });
- }
- });
-
+// IButton scanForUpdatesButton = new LocatableIButton(extendLocatorId("scanButton"),
+// MSG.view_admin_plugins_scan());
+// scanForUpdatesButton.setAutoFit(true);
+// scanForUpdatesButton.addClickHandler(new ClickHandler() {
+// public void onClick(ClickEvent event) {
+// GWTServiceLookup.getPluginService().scanAndRegister(new AsyncCallback<Void>() {
+// @Override
+// public void onSuccess(Void result) {
+// Message msg = new Message(MSG.view_admin_plugins_scanComplete(), Severity.Info);
+// CoreGUI.getMessageCenter().notify(msg);
+// refresh();
+// }
+//
+// @Override
+// public void onFailure(Throwable caught) {
+// CoreGUI.getErrorHandler().handleError(
+// MSG.view_admin_plugins_scanFailure() + " " + caught.getMessage(), caught);
+// refreshTableInfo();
+// }
+// });
+// }
+// });
+
+// IButton restartMasterPCButton = new LocatableIButton(extendLocatorId("restartMasterPCButton"),
+// MSG.view_admin_plugins_restartMasterPC());
+// restartMasterPCButton.setAutoFit(true);
+// restartMasterPCButton.addClickHandler(new ClickHandler() {
+// public void onClick(ClickEvent event) {
+// Message msg = new Message(MSG.view_admin_plugins_restartMasterPCStarted(), Severity.Info);
+// CoreGUI.getMessageCenter().notify(msg);
+//
+// GWTServiceLookup.getPluginService().restartMasterPluginContainer(new AsyncCallback<Void>() {
+// @Override
+// public void onSuccess(Void result) {
+// Message msg = new Message(MSG.view_admin_plugins_restartMasterPCComplete(), Severity.Info);
+// CoreGUI.getMessageCenter().notify(msg);
+// refresh();
+// }
+//
+// @Override
+// public void onFailure(Throwable caught) {
+// CoreGUI.getErrorHandler().handleError(
+// MSG.view_admin_plugins_restartMasterPCFailure() + " " + caught.getMessage(), caught);
+// refreshTableInfo();
+// }
+// });
+// }
+// });
- PluginFileUploadForm pluginUploadForm = new PluginFileUploadForm(extendLocatorId("upload"),
- MSG.view_admin_plugins_upload(), true);
+// PluginFileUploadForm pluginUploadForm = new PluginFileUploadForm(extendLocatorId("upload"),
+// MSG.view_admin_plugins_upload(), true);
- addExtraWidget(scanForUpdatesButton, true);
- addExtraWidget(restartMasterPCButton, true);
- addExtraWidget(pluginUploadForm, true);
+// addExtraWidget(scanForUpdatesButton, true);
+// addExtraWidget(restartMasterPCButton, true);
+// addExtraWidget(pluginUploadForm, true);
super.configureTable();
}
@Override
public Canvas getDetailsView(Integer id) {
- return new ServerPluginDetailView(extendLocatorId("detailsView"), id);
+ return new ServerDetailView(extendLocatorId("detailsView"), id);
}
private int[] getSelectedIds(ListGridRecord[] selections) {
@@ -307,7 +261,7 @@ public class ServerTableView extends TableSection<CloudDataSource> {
return ids;
}
- public class CloudDataSource extends RPCDataSource<Server, Criteria> {
+ public class CloudDataSource extends RPCDataSource<ServerWithAgentCountComposite, Criteria> {
public CloudDataSource() {
super();
@@ -338,29 +292,35 @@ public class ServerTableView extends TableSection<CloudDataSource> {
ListGridField modeField = new ListGridField(FIELD_MODE, MSG.view_adminTopology_server_mode());
fields.add(modeField);
- ListGridField endpointAddressField = new ListGridField(FIELD_ENDPOINT_ADDRESS, MSG.view_adminTopology_server_endpointAddress());
-// TimestampCellFormatter.prepareDateField(endpointAddressField);
+ ListGridField endpointAddressField = new ListGridField(FIELD_ENDPOINT_ADDRESS,
+ MSG.view_adminTopology_server_endpointAddress());
+ // TimestampCellFormatter.prepareDateField(endpointAddressField);
fields.add(endpointAddressField);
- ListGridField nonsecurePortField = new ListGridField(FIELD_NONSECURE_PORT, MSG.view_adminTopology_server_nonSecurePort());
-// enabledField.setType(ListGridFieldType.IMAGE);
-// enabledField.setAlign(Alignment.CENTER);
+ ListGridField nonsecurePortField = new ListGridField(FIELD_NONSECURE_PORT,
+ MSG.view_adminTopology_server_nonSecurePort());
+ // enabledField.setType(ListGridFieldType.IMAGE);
+ // enabledField.setAlign(Alignment.CENTER);
fields.add(nonsecurePortField);
- ListGridField securedPortField = new ListGridField(FIELD_SECURE_PORT, MSG.view_adminTopology_server_securePort());
-// deployedField.setType(ListGridFieldType.IMAGE);
-// deployedField.setAlign(Alignment.CENTER);
-// deployedField.setHidden(true);
+ ListGridField securedPortField = new ListGridField(FIELD_SECURE_PORT,
+ MSG.view_adminTopology_server_securePort());
+ // deployedField.setType(ListGridFieldType.IMAGE);
+ // deployedField.setAlign(Alignment.CENTER);
+ // deployedField.setHidden(true);
fields.add(securedPortField);
- ListGridField lastUpdateTimeField = new ListGridField(FIELD_LAST_UPDATE_TIME, MSG.view_adminTopology_server_lastUpdateTime());
- TimestampCellFormatter.prepareDateField(endpointAddressField);
+ ListGridField lastUpdateTimeField = new ListGridField(FIELD_LAST_UPDATE_TIME,
+ MSG.view_adminTopology_server_lastUpdateTime());
+ TimestampCellFormatter.prepareDateField(lastUpdateTimeField);
fields.add(lastUpdateTimeField);
-
- ListGridField affinityGroupField = new ListGridField(FIELD_AFFINITY_GROUP, MSG.view_adminTopology_server_affinityGroup());
+
+ ListGridField affinityGroupField = new ListGridField(FIELD_AFFINITY_GROUP,
+ MSG.view_adminTopology_server_affinityGroup());
fields.add(affinityGroupField);
-
- ListGridField agentCountField = new ListGridField(FIELD_AGENT_COUNT, MSG.view_adminTopology_server_agentCount());
+
+ ListGridField agentCountField = new ListGridField(FIELD_AGENT_COUNT,
+ MSG.view_adminTopology_server_agentCount());
fields.add(agentCountField);
idField.setWidth(100);
@@ -376,39 +336,66 @@ public class ServerTableView extends TableSection<CloudDataSource> {
@Override
protected void executeFetch(final DSRequest request, final DSResponse response, Criteria criteria) {
-// GWTServiceLookup.getPluginService().getServerPlugins(showUndeployed,
-// new AsyncCallback<ArrayList<Server>>() {
-// public void onSuccess(ArrayList<Server> result) {
-// response.setData(buildRecords(result));
-// response.setTotalRows(result.size());
-// processResponse(request.getRequestId(), response);
-// }
-//
-// @Override
-// public void onFailure(Throwable t) {
-// CoreGUI.getErrorHandler().handleError(MSG.view_admin_plugins_loadFailure(), t);
-// response.setStatus(DSResponse.STATUS_FAILURE);
-// processResponse(request.getRequestId(), response);
-// }
-// });
+ final PageControl pc = getPageControl(request);
+
+ GWTServiceLookup.getCloudService().getServers(pc, new AsyncCallback<List<ServerWithAgentCountComposite>>() {
+ public void onSuccess(List<ServerWithAgentCountComposite> result) {
+ response.setData(buildRecords(result));
+ response.setTotalRows(result.size());
+ processResponse(request.getRequestId(), response);
+ }
+
+ @Override
+ public void onFailure(Throwable t) {
+ //todo: CoreGUI.getErrorHandler().handleError(MSG.view_admin_plugins_loadFailure(), t);
+ response.setStatus(DSResponse.STATUS_FAILURE);
+ processResponse(request.getRequestId(), response);
+ }
+ });
+ }
+
+ /**
+ * Returns a prepopulated PageControl based on the provided DSRequest. This will set sort fields,
+ * pagination, but *not* filter fields.
+ *
+ * @param request the request to turn into a page control
+ * @return the page control for passing to criteria and other queries
+ */
+ protected PageControl getPageControl(DSRequest request) {
+ // Initialize paging.
+ PageControl pageControl = new PageControl(0, getDataPageSize());
+
+ // Initialize sorting.
+ String sortBy = request.getAttribute("sortBy");
+ if (sortBy != null) {
+ String[] sorts = sortBy.split(",");
+ for (String sort : sorts) {
+ PageOrdering ordering = (sort.startsWith("-")) ? PageOrdering.DESC : PageOrdering.ASC;
+ String columnName = (ordering == PageOrdering.DESC) ? sort.substring(1) : sort;
+ pageControl.addDefaultOrderingField(columnName, ordering);
+ }
+ }
+
+ return pageControl;
}
@Override
- public Server copyValues(Record from) {
- throw new UnsupportedOperationException("ServerTableView.CloudDataSourcepublic Server copyValues(Record from)");
+ public ServerWithAgentCountComposite copyValues(Record from) {
+ throw new UnsupportedOperationException(
+ "ServerTableView.CloudDataSourcepublic Server copyValues(Record from)");
}
@Override
- public ListGridRecord copyValues(Server from) {
+ public ListGridRecord copyValues(ServerWithAgentCountComposite from) {
ListGridRecord record = new ListGridRecord();
- record.setAttribute(FIELD_ID, from.getId());
- record.setAttribute(FIELD_NAME, from.getName());
- record.setAttribute(FIELD_MODE, from.getOperationMode());
- record.setAttribute(FIELD_ENDPOINT_ADDRESS, from.getAddress());
- record.setAttribute(FIELD_NONSECURE_PORT, from.getPort());
- record.setAttribute(FIELD_SECURE_PORT, from.getSecurePort());
- record.setAttribute(FIELD_LAST_UPDATE_TIME, from.getMtime());
- record.setAttribute(FIELD_AFFINITY_GROUP, from.getAffinityGroup());
+ record.setAttribute(FIELD_ID, from.getServer().getId());
+ record.setAttribute(FIELD_NAME, from.getServer().getName());
+ record.setAttribute(FIELD_MODE, from.getServer().getOperationMode());
+ record.setAttribute(FIELD_ENDPOINT_ADDRESS, from.getServer().getAddress());
+ record.setAttribute(FIELD_NONSECURE_PORT, from.getServer().getPort());
+ record.setAttribute(FIELD_SECURE_PORT, from.getServer().getSecurePort());
+ record.setAttribute(FIELD_LAST_UPDATE_TIME, from.getServer().getMtime());
+ record.setAttribute(FIELD_AFFINITY_GROUP, from.getServer().getAffinityGroup());
record.setAttribute(FIELD_AGENT_COUNT, from.getAgentCount());
return record;
}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/CloudGWTService.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/CloudGWTService.java
new file mode 100644
index 0000000..84477f2
--- /dev/null
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/CloudGWTService.java
@@ -0,0 +1,50 @@
+/*
+ * RHQ Management Platform
+ * Copyright (C) 2005-2012 Red Hat, Inc.
+ * All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License, version 2, as
+ * published by the Free Software Foundation, and/or the GNU Lesser
+ * General Public License, version 2.1, also as published by the Free
+ * Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License and the GNU Lesser General Public License
+ * for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * and the GNU Lesser General Public License along with this program;
+ * if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+package org.rhq.enterprise.gui.coregui.client.gwt;
+
+import java.util.List;
+
+import com.google.gwt.user.client.rpc.RemoteService;
+
+import org.rhq.core.domain.cloud.Server;
+import org.rhq.core.domain.cloud.composite.ServerWithAgentCountComposite;
+import org.rhq.core.domain.resource.Agent;
+import org.rhq.core.domain.util.PageControl;
+
+/**
+ * @author Jiri Kremser
+ */
+public interface CloudGWTService extends RemoteService {
+
+ /**
+ *
+ * @return a list of all available servers (the servers in MAINTENANCE mode are included as well)
+ * @throws RuntimeException
+ */
+ List<ServerWithAgentCountComposite> getServers(PageControl pc) throws RuntimeException;
+
+ Server getServerById(int serverId) throws RuntimeException;
+
+ List<Agent> getAgentsByServerName(String serverName) throws RuntimeException;
+
+}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/GWTServiceLookup.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/GWTServiceLookup.java
index b1289e4..54e2a30 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/GWTServiceLookup.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/GWTServiceLookup.java
@@ -205,6 +205,10 @@ public class GWTServiceLookup {
public static PlatformUtilizationGWTServiceAsync getPlatformUtilizationService() {
return secure(PlatformUtilizationGWTServiceAsync.Util.getInstance());
}
+
+ public static CloudGWTServiceAsync getCloudService() {
+ return secure(CloudGWTServiceAsync.Util.getInstance());
+ }
@SuppressWarnings("unchecked")
private static <T> T secure(Object sdt) {
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/CloudGWTServiceImpl.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/CloudGWTServiceImpl.java
new file mode 100644
index 0000000..5265288
--- /dev/null
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/CloudGWTServiceImpl.java
@@ -0,0 +1,73 @@
+/*
+ * RHQ Management Platform
+ * Copyright (C) 2005-2012 Red Hat, Inc.
+ * All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License, version 2, as
+ * published by the Free Software Foundation, and/or the GNU Lesser
+ * General Public License, version 2.1, also as published by the Free
+ * Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License and the GNU Lesser General Public License
+ * for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * and the GNU Lesser General Public License along with this program;
+ * if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+package org.rhq.enterprise.gui.coregui.server.gwt;
+
+import java.util.List;
+
+import org.rhq.core.domain.cloud.Server;
+import org.rhq.core.domain.cloud.composite.ServerWithAgentCountComposite;
+import org.rhq.core.domain.resource.Agent;
+import org.rhq.core.domain.util.PageControl;
+import org.rhq.core.domain.util.PageList;
+import org.rhq.enterprise.gui.coregui.client.gwt.CloudGWTService;
+import org.rhq.enterprise.gui.coregui.server.util.SerialUtility;
+import org.rhq.enterprise.server.cloud.CloudManagerLocal;
+import org.rhq.enterprise.server.util.LookupUtil;
+
+/**
+ * @author Jiri Kremser
+ */
+public class CloudGWTServiceImpl extends AbstractGWTServiceImpl implements CloudGWTService {
+
+ private static final long serialVersionUID = 1L;
+
+ private CloudManagerLocal cloudManager = LookupUtil.getCloudManager();
+
+ @Override
+ public PageList<ServerWithAgentCountComposite> getServers(PageControl pc) throws RuntimeException {
+ try {
+ return SerialUtility.prepare(cloudManager.getServerComposites(getSessionSubject(), pc), "CloudGWTServiceImpl.getServers");
+ } catch (Throwable t) {
+ throw getExceptionToThrowToClient(t);
+ }
+ }
+
+ @Override
+ public Server getServerById(int serverId) throws RuntimeException {
+ try {
+ return SerialUtility.prepare(cloudManager.getServerById(serverId), "CloudGWTServiceImpl.getServerById");
+ } catch (Throwable t) {
+ throw getExceptionToThrowToClient(t);
+ }
+ }
+
+ @Override
+ public List<Agent> getAgentsByServerName(String serverName) throws RuntimeException {
+ try {
+ return SerialUtility.prepare(cloudManager.getAgentsByServerName(serverName), "CloudGWTServiceImpl.getAgentsByServerName");
+ } catch (Throwable t) {
+ throw getExceptionToThrowToClient(t);
+ }
+ }
+
+}
diff --git a/modules/enterprise/gui/coregui/src/main/webapp/WEB-INF/web.xml b/modules/enterprise/gui/coregui/src/main/webapp/WEB-INF/web.xml
index 418e37b..b32c98c 100644
--- a/modules/enterprise/gui/coregui/src/main/webapp/WEB-INF/web.xml
+++ b/modules/enterprise/gui/coregui/src/main/webapp/WEB-INF/web.xml
@@ -194,6 +194,10 @@
<servlet-class>org.rhq.enterprise.gui.coregui.server.gwt.PlatformUtilizationGWTServiceImpl</servlet-class>
</servlet>
<servlet>
+ <servlet-name>org.rhq.enterprise.gui.coregui.CoreGUI CloudGWTService</servlet-name>
+ <servlet-class>org.rhq.enterprise.gui.coregui.server.gwt.CloudGWTServiceImpl</servlet-class>
+ </servlet>
+ <servlet>
<servlet-name>ReportExporter</servlet-name>
<servlet-class>org.rhq.enterprise.gui.coregui.server.reports.ReportExportServlet</servlet-class>
</servlet>
@@ -374,6 +378,10 @@
<url-pattern>/org.rhq.enterprise.gui.coregui.CoreGUI/PlatformUtilizationGWTService</url-pattern>
</servlet-mapping>
<servlet-mapping>
+ <servlet-name>org.rhq.enterprise.gui.coregui.CoreGUI CloudGWTService</servlet-name>
+ <url-pattern>/org.rhq.enterprise.gui.coregui.CoreGUI/CloudGWTService</url-pattern>
+ </servlet-mapping>
+ <servlet-mapping>
<servlet-name>ReportExporter</servlet-name>
<url-pattern>/ReportExporter</url-pattern>
</servlet-mapping>
commit 898a3136bc10259d71d85e693ed59481c43ca691
Author: Jirka Kremser <jkremser(a)redhat.com>
Date: Thu Nov 15 19:55:26 2012 +0100
skeleton implementation for server view in High Availability Administration Console including the inner class -- datasource for the Server entity
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/AdministrationView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/AdministrationView.java
index a44b90c..668a49f 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/AdministrationView.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/AdministrationView.java
@@ -61,7 +61,6 @@ public class AdministrationView extends AbstractSectionedLeftNavigationView {
public static final ViewName SECTION_CONTENT_VIEW_ID = new ViewName("Content", MSG.view_admin_content());
// TODO these iframe page view ids should go away in favor of the gwt view page view_id, when available
- private static final ViewName PAGE_SERVERS_VIEW_ID = new ViewName("Servers", MSG.view_adminTopology_servers(), IconEnum.SERVERS);
private static final ViewName PAGE_AGENTS_VIEW_ID = new ViewName("Agents", MSG.view_adminTopology_agents(),IconEnum.AGENT);
private static final ViewName PAGE_AFFINITY_GROUPS_VIEW_ID = new ViewName("AffinityGroups",
MSG.view_adminTopology_affinityGroups(), IconEnum.ALL_GROUPS);
@@ -136,11 +135,10 @@ public class AdministrationView extends AbstractSectionedLeftNavigationView {
ProductInfo productInfo = CoreGUI.get().getProductInfo();
boolean isRHQ = (productInfo != null) && "RHQ".equals(productInfo.getShortName());
- NavigationItem serversItem = new NavigationItem(PAGE_SERVERS_VIEW_ID,
+ NavigationItem serversItem = new NavigationItem(ServerTableView.VIEW_ID,
new ViewFactory() {
public Canvas createView() {
- return new FullHTMLPane(extendLocatorId(PAGE_SERVERS_VIEW_ID.getName()),
- "/rhq/ha/listServers-plain.xhtml?nomenu=true");
+ return new ServerTableView(extendLocatorId(ServerTableView.VIEW_ID.getName()));
}
}, getGlobalPermissions().contains(Permission.MANAGE_INVENTORY));
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/ServerTableView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/ServerTableView.java
new file mode 100644
index 0000000..e99efbe
--- /dev/null
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/ServerTableView.java
@@ -0,0 +1,423 @@
+/*
+ * RHQ Management Platform
+ * Copyright (C) 2005-2012 Red Hat, Inc.
+ * All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation version 2 of the License.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+package org.rhq.enterprise.gui.coregui.client.admin;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import com.google.gwt.user.client.rpc.AsyncCallback;
+import com.smartgwt.client.data.DSRequest;
+import com.smartgwt.client.data.DSResponse;
+import com.smartgwt.client.data.DataSourceField;
+import com.smartgwt.client.data.Record;
+import com.smartgwt.client.data.fields.DataSourceIntegerField;
+import com.smartgwt.client.types.SortDirection;
+import com.smartgwt.client.util.BooleanCallback;
+import com.smartgwt.client.util.SC;
+import com.smartgwt.client.widgets.Canvas;
+import com.smartgwt.client.widgets.IButton;
+import com.smartgwt.client.widgets.events.ClickEvent;
+import com.smartgwt.client.widgets.events.ClickHandler;
+import com.smartgwt.client.widgets.grid.ListGrid;
+import com.smartgwt.client.widgets.grid.ListGridField;
+import com.smartgwt.client.widgets.grid.ListGridRecord;
+
+import org.rhq.core.domain.authz.Permission;
+import org.rhq.core.domain.cloud.Server;
+import org.rhq.core.domain.criteria.Criteria;
+import org.rhq.enterprise.gui.coregui.client.CoreGUI;
+import org.rhq.enterprise.gui.coregui.client.IconEnum;
+import org.rhq.enterprise.gui.coregui.client.admin.ServerTableView.CloudDataSource;
+import org.rhq.enterprise.gui.coregui.client.components.table.AuthorizedTableAction;
+import org.rhq.enterprise.gui.coregui.client.components.table.TableActionEnablement;
+import org.rhq.enterprise.gui.coregui.client.components.table.TableSection;
+import org.rhq.enterprise.gui.coregui.client.components.table.TimestampCellFormatter;
+import org.rhq.enterprise.gui.coregui.client.components.upload.PluginFileUploadForm;
+import org.rhq.enterprise.gui.coregui.client.components.view.ViewName;
+import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup;
+import org.rhq.enterprise.gui.coregui.client.util.RPCDataSource;
+import org.rhq.enterprise.gui.coregui.client.util.message.Message;
+import org.rhq.enterprise.gui.coregui.client.util.message.Message.Severity;
+import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableIButton;
+
+/**
+ * @author Jiri Kremser
+ */
+public class ServerTableView extends TableSection<CloudDataSource> {
+
+ public static final ViewName VIEW_ID = new ViewName("Servers", MSG.view_adminTopology_servers(), IconEnum.SERVERS);
+ public static final String VIEW_PATH = AdministrationView.VIEW_ID + "/"
+ + AdministrationView.SECTION_CONFIGURATION_VIEW_ID + "/" + VIEW_ID;
+
+ private static final String FIELD_ID = "id";
+ private static final String FIELD_NAME = "name";
+ private static final String FIELD_MODE = "mode";
+ private static final String FIELD_ENDPOINT_ADDRESS = "endpointAddress";
+ private static final String FIELD_NONSECURE_PORT = "nonsecurePort";
+ private static final String FIELD_SECURE_PORT = "securePort";
+ private static final String FIELD_LAST_UPDATE_TIME = "lastUpdateTime";
+ private static final String FIELD_AFFINITY_GROUP = "affinityGroup";
+ private static final String FIELD_AGENT_COUNT = "agentCount";
+
+ private boolean showUndeployed = false;
+
+ public ServerTableView(String locatorId) {
+ super(locatorId, null);
+ setHeight100();
+ setWidth100();
+ setDataSource(new CloudDataSource());
+ }
+
+ @Override
+ protected void configureTable() {
+ List<ListGridField> fields = getDataSource().getListGridFields();
+ ListGrid listGrid = getListGrid();
+ listGrid.setFields(fields.toArray(new ListGridField[fields.size()]));
+ listGrid.sort(FIELD_NAME, SortDirection.ASCENDING);
+
+ addTableAction(extendLocatorId("enable"), MSG.common_button_enable(), MSG.common_msg_areYouSure(),
+ new AuthorizedTableAction(this, TableActionEnablement.ANY, Permission.MANAGE_SETTINGS) {
+ public void executeAction(ListGridRecord[] selections, Object actionValue) {
+ int[] selectedIds = getSelectedIds(selections);
+ GWTServiceLookup.getPluginService().enableServerPlugins(selectedIds,
+ new AsyncCallback<ArrayList<String>>() {
+ @Override
+ public void onSuccess(ArrayList<String> result) {
+ Message msg = new Message(
+ MSG.view_admin_plugins_enabledServerPlugins(result.toString()), Severity.Info);
+ CoreGUI.getMessageCenter().notify(msg);
+ refresh();
+ }
+
+ @Override
+ public void onFailure(Throwable caught) {
+ CoreGUI.getErrorHandler().handleError(
+ MSG.view_admin_plugins_enabledServerPluginsFailure() + " " + caught.getMessage(),
+ caught);
+ refreshTableInfo();
+ }
+ });
+ }
+ });
+
+ addTableAction(extendLocatorId("disable"), MSG.common_button_disable(), new AuthorizedTableAction(this,
+ TableActionEnablement.ANY, Permission.MANAGE_SETTINGS) {
+ public void executeAction(final ListGridRecord[] selections, Object actionValue) {
+ ArrayList<String> selectedNames = getSelectedNames(selections);
+ String message = MSG.view_admin_plugins_serverDisableConfirm(selectedNames.toString());
+ SC.ask(message, new BooleanCallback() {
+ public void execute(Boolean confirmed) {
+ if (confirmed) {
+ int[] selectedIds = getSelectedIds(selections);
+ GWTServiceLookup.getPluginService().disableServerPlugins(selectedIds,
+ new AsyncCallback<ArrayList<String>>() {
+ @Override
+ public void onSuccess(ArrayList<String> result) {
+ Message msg = new Message(MSG.view_admin_plugins_disabledServerPlugins(result
+ .toString()), Severity.Info);
+ CoreGUI.getMessageCenter().notify(msg);
+ refresh();
+ }
+
+ @Override
+ public void onFailure(Throwable caught) {
+ CoreGUI.getErrorHandler().handleError(
+ MSG.view_admin_plugins_disabledServerPluginsFailure() + " "
+ + caught.getMessage(), caught);
+ refreshTableInfo();
+ }
+ });
+ } else {
+ refreshTableInfo();
+ }
+ }
+ });
+ }
+ });
+
+ addTableAction(extendLocatorId("undeploy"), MSG.view_admin_plugins_undeploy(), new AuthorizedTableAction(this,
+ TableActionEnablement.ANY, Permission.MANAGE_SETTINGS) {
+ public void executeAction(final ListGridRecord[] selections, Object actionValue) {
+ ArrayList<String> selectedNames = getSelectedNames(selections);
+ String message = MSG.view_admin_plugins_serverUndeployConfirm(selectedNames.toString());
+ SC.ask(message, new BooleanCallback() {
+ public void execute(Boolean confirmed) {
+ if (confirmed) {
+ int[] selectedIds = getSelectedIds(selections);
+ GWTServiceLookup.getPluginService().undeployServerPlugins(selectedIds,
+ new AsyncCallback<ArrayList<String>>() {
+ @Override
+ public void onSuccess(ArrayList<String> result) {
+ Message msg = new Message(MSG.view_admin_plugins_undeployedServerPlugins(result
+ .toString()), Severity.Info);
+ CoreGUI.getMessageCenter().notify(msg);
+ refresh();
+ }
+
+ @Override
+ public void onFailure(Throwable caught) {
+ CoreGUI.getErrorHandler().handleError(
+ MSG.view_admin_plugins_undeployedServerPluginsFailure() + " "
+ + caught.getMessage(), caught);
+ refreshTableInfo();
+ }
+ });
+ } else {
+ refreshTableInfo();
+ }
+ }
+ });
+ }
+ });
+
+ addTableAction(extendLocatorId("purge"), MSG.common_button_purge(), MSG.common_msg_areYouSure(),
+ new AuthorizedTableAction(this, TableActionEnablement.ANY, Permission.MANAGE_SETTINGS) {
+ public boolean isEnabled(ListGridRecord[] selection) {
+ if (showUndeployed) {
+ return super.isEnabled(selection);
+ } else {
+ return false; // we aren't showing undeployed plugins, so there is no plugin shown that can be purged anyway
+ }
+ }
+
+ public void executeAction(ListGridRecord[] selections, Object actionValue) {
+ int[] selectedIds = getSelectedIds(selections);
+ GWTServiceLookup.getPluginService().purgeServerPlugins(selectedIds,
+ new AsyncCallback<ArrayList<String>>() {
+ @Override
+ public void onSuccess(ArrayList<String> result) {
+ Message msg = new Message(
+ MSG.view_admin_plugins_purgedServerPlugins(result.toString()), Severity.Info);
+ CoreGUI.getMessageCenter().notify(msg);
+ refresh();
+ }
+
+ @Override
+ public void onFailure(Throwable caught) {
+ CoreGUI.getErrorHandler().handleError(
+ MSG.view_admin_plugins_purgedServerPluginsFailure() + " " + caught.getMessage(),
+ caught);
+ refreshTableInfo();
+ }
+ });
+ }
+ });
+
+ IButton scanForUpdatesButton = new LocatableIButton(extendLocatorId("scanButton"),
+ MSG.view_admin_plugins_scan());
+ scanForUpdatesButton.setAutoFit(true);
+ scanForUpdatesButton.addClickHandler(new ClickHandler() {
+ public void onClick(ClickEvent event) {
+ GWTServiceLookup.getPluginService().scanAndRegister(new AsyncCallback<Void>() {
+ @Override
+ public void onSuccess(Void result) {
+ Message msg = new Message(MSG.view_admin_plugins_scanComplete(), Severity.Info);
+ CoreGUI.getMessageCenter().notify(msg);
+ refresh();
+ }
+
+ @Override
+ public void onFailure(Throwable caught) {
+ CoreGUI.getErrorHandler().handleError(
+ MSG.view_admin_plugins_scanFailure() + " " + caught.getMessage(), caught);
+ refreshTableInfo();
+ }
+ });
+ }
+ });
+
+ IButton restartMasterPCButton = new LocatableIButton(extendLocatorId("restartMasterPCButton"),
+ MSG.view_admin_plugins_restartMasterPC());
+ restartMasterPCButton.setAutoFit(true);
+ restartMasterPCButton.addClickHandler(new ClickHandler() {
+ public void onClick(ClickEvent event) {
+ Message msg = new Message(MSG.view_admin_plugins_restartMasterPCStarted(), Severity.Info);
+ CoreGUI.getMessageCenter().notify(msg);
+
+ GWTServiceLookup.getPluginService().restartMasterPluginContainer(new AsyncCallback<Void>() {
+ @Override
+ public void onSuccess(Void result) {
+ Message msg = new Message(MSG.view_admin_plugins_restartMasterPCComplete(), Severity.Info);
+ CoreGUI.getMessageCenter().notify(msg);
+ refresh();
+ }
+
+ @Override
+ public void onFailure(Throwable caught) {
+ CoreGUI.getErrorHandler().handleError(
+ MSG.view_admin_plugins_restartMasterPCFailure() + " " + caught.getMessage(), caught);
+ refreshTableInfo();
+ }
+ });
+ }
+ });
+
+
+ PluginFileUploadForm pluginUploadForm = new PluginFileUploadForm(extendLocatorId("upload"),
+ MSG.view_admin_plugins_upload(), true);
+
+ addExtraWidget(scanForUpdatesButton, true);
+ addExtraWidget(restartMasterPCButton, true);
+ addExtraWidget(pluginUploadForm, true);
+
+ super.configureTable();
+ }
+
+ @Override
+ public Canvas getDetailsView(Integer id) {
+ return new ServerPluginDetailView(extendLocatorId("detailsView"), id);
+ }
+
+ private int[] getSelectedIds(ListGridRecord[] selections) {
+ if (selections == null) {
+ return new int[0];
+ }
+ int[] ids = new int[selections.length];
+ int i = 0;
+ for (ListGridRecord selection : selections) {
+ ids[i++] = selection.getAttributeAsInt(FIELD_ID);
+ }
+ return ids;
+ }
+
+ private ArrayList<String> getSelectedNames(ListGridRecord[] selections) {
+ if (selections == null) {
+ return new ArrayList<String>(0);
+ }
+ ArrayList<String> ids = new ArrayList<String>(selections.length);
+ for (ListGridRecord selection : selections) {
+ ids.add(selection.getAttributeAsString(FIELD_NAME));
+ }
+ return ids;
+ }
+
+ public class CloudDataSource extends RPCDataSource<Server, Criteria> {
+
+ public CloudDataSource() {
+ super();
+ List<DataSourceField> fields = addDataSourceFields();
+ addFields(fields);
+ }
+
+ @Override
+ protected List<DataSourceField> addDataSourceFields() {
+ List<DataSourceField> fields = super.addDataSourceFields();
+ DataSourceField idField = new DataSourceIntegerField(FIELD_ID, MSG.common_title_id(), 50);
+ idField.setPrimaryKey(true);
+ idField.setHidden(true);
+ fields.add(idField);
+ return fields;
+ }
+
+ public List<ListGridField> getListGridFields() {
+ List<ListGridField> fields = new ArrayList<ListGridField>();
+
+ ListGridField idField = new ListGridField(FIELD_ID, MSG.common_title_id());
+ idField.setHidden(true);
+ fields.add(idField);
+
+ ListGridField nameField = new ListGridField(FIELD_NAME, MSG.common_title_name());
+ fields.add(nameField);
+
+ ListGridField modeField = new ListGridField(FIELD_MODE, MSG.view_adminTopology_server_mode());
+ fields.add(modeField);
+
+ ListGridField endpointAddressField = new ListGridField(FIELD_ENDPOINT_ADDRESS, MSG.view_adminTopology_server_endpointAddress());
+// TimestampCellFormatter.prepareDateField(endpointAddressField);
+ fields.add(endpointAddressField);
+
+ ListGridField nonsecurePortField = new ListGridField(FIELD_NONSECURE_PORT, MSG.view_adminTopology_server_nonSecurePort());
+// enabledField.setType(ListGridFieldType.IMAGE);
+// enabledField.setAlign(Alignment.CENTER);
+ fields.add(nonsecurePortField);
+
+ ListGridField securedPortField = new ListGridField(FIELD_SECURE_PORT, MSG.view_adminTopology_server_securePort());
+// deployedField.setType(ListGridFieldType.IMAGE);
+// deployedField.setAlign(Alignment.CENTER);
+// deployedField.setHidden(true);
+ fields.add(securedPortField);
+
+ ListGridField lastUpdateTimeField = new ListGridField(FIELD_LAST_UPDATE_TIME, MSG.view_adminTopology_server_lastUpdateTime());
+ TimestampCellFormatter.prepareDateField(endpointAddressField);
+ fields.add(lastUpdateTimeField);
+
+ ListGridField affinityGroupField = new ListGridField(FIELD_AFFINITY_GROUP, MSG.view_adminTopology_server_affinityGroup());
+ fields.add(affinityGroupField);
+
+ ListGridField agentCountField = new ListGridField(FIELD_AGENT_COUNT, MSG.view_adminTopology_server_agentCount());
+ fields.add(agentCountField);
+
+ idField.setWidth(100);
+ nameField.setWidth("30%");
+ modeField.setWidth("*");
+ endpointAddressField.setWidth("20%");
+ nonsecurePortField.setWidth(65);
+ securedPortField.setWidth(75);
+ lastUpdateTimeField.setWidth(100);
+
+ return fields;
+ }
+
+ @Override
+ protected void executeFetch(final DSRequest request, final DSResponse response, Criteria criteria) {
+// GWTServiceLookup.getPluginService().getServerPlugins(showUndeployed,
+// new AsyncCallback<ArrayList<Server>>() {
+// public void onSuccess(ArrayList<Server> result) {
+// response.setData(buildRecords(result));
+// response.setTotalRows(result.size());
+// processResponse(request.getRequestId(), response);
+// }
+//
+// @Override
+// public void onFailure(Throwable t) {
+// CoreGUI.getErrorHandler().handleError(MSG.view_admin_plugins_loadFailure(), t);
+// response.setStatus(DSResponse.STATUS_FAILURE);
+// processResponse(request.getRequestId(), response);
+// }
+// });
+ }
+
+ @Override
+ public Server copyValues(Record from) {
+ throw new UnsupportedOperationException("ServerTableView.CloudDataSourcepublic Server copyValues(Record from)");
+ }
+
+ @Override
+ public ListGridRecord copyValues(Server from) {
+ ListGridRecord record = new ListGridRecord();
+ record.setAttribute(FIELD_ID, from.getId());
+ record.setAttribute(FIELD_NAME, from.getName());
+ record.setAttribute(FIELD_MODE, from.getOperationMode());
+ record.setAttribute(FIELD_ENDPOINT_ADDRESS, from.getAddress());
+ record.setAttribute(FIELD_NONSECURE_PORT, from.getPort());
+ record.setAttribute(FIELD_SECURE_PORT, from.getSecurePort());
+ record.setAttribute(FIELD_LAST_UPDATE_TIME, from.getMtime());
+ record.setAttribute(FIELD_AFFINITY_GROUP, from.getAffinityGroup());
+ record.setAttribute(FIELD_AGENT_COUNT, from.getAgentCount());
+ return record;
+ }
+
+ @Override
+ protected Criteria getFetchCriteria(DSRequest request) {
+ // we don't use criteria for this datasource, just return null
+ return null;
+ }
+ }
+
+}
commit 57046c78299c5b348b547aad9ac6a9610fc7787b
Author: Jirka Kremser <jkremser(a)redhat.com>
Date: Thu Nov 15 19:53:47 2012 +0100
i18n for the new gwt HAAC
diff --git a/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages.properties b/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages.properties
index 20fada6..8aad726 100644
--- a/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages.properties
+++ b/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages.properties
@@ -529,13 +529,44 @@ view_adminTemplates_pluginTemplates = Plugin Templates
view_adminTemplates_prompt_disabledAlertTemplates = Number of alert templates that are created but disabled on this resource type
view_adminTemplates_prompt_disabledMetricTemplates = Number of metric schedules that are disabled by default on this resource type
view_adminTemplates_prompt_enabledAlertTemplates = Number of alert templates that are enabled on this resource type
-view_adminTemplates_prompt_enabledMetricTemplates = Number of metric schedules that are enabled by default on this resource type
+view_adminTemplates_prompt_enabledMetricTemplates = Number bf metric schedules that are enabled by default on this resource type
view_adminTemplates_servers = Servers
view_adminTemplates_userTemplates = User Templates
view_adminTopology_affinityGroups = Affinity Groups
+view_adminTopology_affinityGroups_agentCount = Agent Count
+view_adminTopology_affinityGroups_agetnMembers = Agent Members
+view_adminTopology_affinityGroups_agentsInThisGroup = Agents in This Group
+view_adminTopology_affinityGroups_agentsNotPartOfAnAffinityGroup = Agents not Part of an Affinity Group
+view_adminTopology_affinityGroups_createNew = Create New
+view_adminTopology_affinityGroups_details = Affinity Group Details
+view_adminTopology_affinityGroups_removeSelected = Remove Selected
+view_adminTopology_affinityGroups_serverCount = Server Count
+view_adminTopology_affinityGroups_serverMembers = Server Members
view_adminTopology_agents = Agents
+view_adminTopology_agent_agentBindAddress = Agent Bind Address
+view_adminTopology_agent_agentBindPort = Agent Bind Port
+view_adminTopology_agent_agentName = Agent Name
+view_adminTopology_agent_connectedServer = Connected Server
+view_adminTopology_agent_lastAvailabilityReport = Last Availability Report
+view_adminTopology_agentDetail_address = Address
+view_adminTopology_agentDetail_agentFailoverList = Agent Failover List
+view_adminTopology_agentDetail_currentServer = Current Server
+view_adminTopology_agentDetail_token = Token
view_adminTopology_partitionEvents = Partition Events
view_adminTopology_remoteAgentInstall = Remote Agent Install
+view_adminTopology_server_affinityGroup = Affinity Group
+view_adminTopology_server_agentCount = Agent Count
+view_adminTopology_server_endpointAddress = Endpoint Address
+view_adminTopology_server_lastUpdateTime = Last Update Time
+view_adminTopology_server_mode = Mode
+view_adminTopology_server_nonSecurePort = Nonsecure Port
+view_adminTopology_server_removeSelected = Remove Selected
+view_adminTopology_server_securePort = Secure Port
+view_adminTopology_server_setMaintenance = Set Maintenance
+view_adminTopology_server_setNormal = Set Normal
+view_adminTopology_serverDetail_connectedAgents = Connected Agents
+view_adminTopology_serverDetail_installationDate = Installation Date
+view_adminTopology_serverDetail_operationMode = Operation Mode
view_adminTopology_servers = Servers
view_adminUsersDetails_dataTypeName = user
view_adminUsers_failCreateUserWithExistingName = Failed to create user with existing name [{0}]. Please use another name.
diff --git a/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_cs.properties b/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_cs.properties
index f90e510..12ff6e5 100644
--- a/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_cs.properties
+++ b/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_cs.properties
@@ -552,9 +552,40 @@ view_adminTemplates_prompt_enabledMetricTemplates = Počet šablon rozvrhů sbě
view_adminTemplates_servers = Servery
view_adminTemplates_userTemplates = Uživatelské šablony
view_adminTopology_affinityGroups = Afinitní skupiny
+view_adminTopology_affinityGroups_agentCount = Počet agentů
+view_adminTopology_affinityGroups_agetnMembers = Členští agenti
+view_adminTopology_affinityGroups_agentsInThisGroup = Agenti této skupiny
+view_adminTopology_affinityGroups_agentsNotPartOfAnAffinityGroup = Agenti mimo tuto skupinu
+view_adminTopology_affinityGroups_createNew = Vytvořit novou
+view_adminTopology_affinityGroups_details = Detaily afinitní skupiny
+view_adminTopology_affinityGroups_removeSelected = Odstanit vybrané
+view_adminTopology_affinityGroups_serverCount = Počet serverů
+view_adminTopology_affinityGroups_serverMembers = Členské servery
view_adminTopology_agents = Agenti
-view_adminTopology_partitionEvents = Události rozdělení
-view_adminTopology_remoteAgentInstall = Instalace vzdáleného agenta
+view_adminTopology_agent_agentBindAddress = Adresa agenta
+view_adminTopology_agent_agentBindPort = Port agenta
+view_adminTopology_agent_agentName = Jméno agenta
+view_adminTopology_agent_connectedServer = Připojený server
+view_adminTopology_agent_lastAvailabilityReport = Poslední report dostupnosti
+view_adminTopology_agentDetail_address = Adresa
+view_adminTopology_agentDetail_agentFailoverList = Agentův failover list
+view_adminTopology_agentDetail_currentServer = Současný server
+view_adminTopology_agentDetail_token = Token
+view_adminTopology_partitionEvents = Události o clusteru
+view_adminTopology_remoteAgentInstall = Nainstalovat vzdáleně agenta
+view_adminTopology_server_affinityGroup = Afinitní skupina
+view_adminTopology_server_agentCount = Počet agentů
+view_adminTopology_server_endpointAddress = Adresa koncového bodu
+view_adminTopology_server_lastUpdateTime = Čas poslední aktualizace
+view_adminTopology_server_mode = Mód
+view_adminTopology_server_nonSecurePort = Nezabezpečený port
+view_adminTopology_server_removeSelected = Odstanit vybrané
+view_adminTopology_server_securePort = Zabezpečený port
+view_adminTopology_server_setMaintenance = Nastavit údržbu
+view_adminTopology_server_setNormal = Nastavit do normálu
+view_adminTopology_serverDetail_connectedAgents = Připojení agenti
+view_adminTopology_serverDetail_installationDate = Datum instalace
+view_adminTopology_serverDetail_operationMode = Mód provozu
view_adminTopology_servers = Servery
view_adminUsersDetails_dataTypeName = uživatel
view_adminUsers_failCreateUserWithExistingName = Nepodařilo se vytvořit uživatele s existujícím jménem [{0}]. Použíjte prosím jiné jméno.
diff --git a/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_de.properties b/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_de.properties
index 08c11c8..aaceef0 100644
--- a/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_de.properties
+++ b/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_de.properties
@@ -500,9 +500,40 @@ view_adminTemplates_pluginTemplates = Vorlagen für Plugins Plugins
view_adminTemplates_servers = Server
view_adminTemplates_userTemplates = Nutzers-spezifische Vorlagen
view_adminTopology_affinityGroups = Affinitätsgruppen
+##view_adminTopology_affinityGroups_agentCount = Agent Count
+##view_adminTopology_affinityGroups_agetnMembers = Agent Members
+##view_adminTopology_affinityGroups_agentsInThisGroup = Agents in This Group
+##view_adminTopology_affinityGroups_agentsNotPartOfAnAffinityGroup = Agents not Part of an Affinity Group
+##view_adminTopology_affinityGroups_createNew = Create New
+##view_adminTopology_affinityGroups_details = Affinity Group Details
+##view_adminTopology_affinityGroups_removeSelected = Remove Selected
+##view_adminTopology_affinityGroups_serverCount = Server Count
+##view_adminTopology_affinityGroups_serverMembers = Server Members
view_adminTopology_agents = Agenten
+##view_adminTopology_agent_agentBindAddress = Agent Bind Address
+##view_adminTopology_agent_agentBindPort = Agent Bind Port
+##view_adminTopology_agent_agentName = Agent Name
+##view_adminTopology_agent_connectedServer = Connected Server
+##view_adminTopology_agent_lastAvailabilityReport = Last Availability Report
+##view_adminTopology_agentDetail_address = Address
+##view_adminTopology_agentDetail_agentFailoverList = Agent Failover List
+##view_adminTopology_agentDetail_currentServer = Current Server
+##view_adminTopology_agentDetail_token = Token
view_adminTopology_partitionEvents = Partitionierungs-Ereignisse
view_adminTopology_remoteAgentInstall = Installation entfernter Agenten
+##view_adminTopology_server_affinityGroup = Affinity Group
+##view_adminTopology_server_agentCount = Agent Count
+##view_adminTopology_server_endpointAddress = Endpoint Address
+##view_adminTopology_server_lastUpdateTime = Last Update Time
+##view_adminTopology_server_mode = Mode
+##view_adminTopology_server_nonSecurePort = Nonsecure Port
+##view_adminTopology_server_removeSelected = Remove Selected
+##view_adminTopology_server_securePort = Secure Port
+##view_adminTopology_server_setMaintenance = Set Maintenance
+##view_adminTopology_server_setNormal = Set Normal
+##view_adminTopology_serverDetail_connectedAgents = Connected Agents
+##view_adminTopology_serverDetail_installationDate = Installation Date
+##view_adminTopology_serverDetail_operationMode = Operation Mode
view_adminTopology_servers = Server
view_adminUsersDetails_dataTypeName = Benutzer
##view_adminUsers_failCreateUserWithExistingName = Failed to create user with existing name [{0}]. Please use another name.
diff --git a/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_ja.properties b/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_ja.properties
index b10c816..0bd15f6 100644
--- a/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_ja.properties
+++ b/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_ja.properties
@@ -531,9 +531,40 @@ view_adminTemplates_prompt_enabledMetricTemplates = このリソースタイプ
view_adminTemplates_servers = サービス
view_adminTemplates_userTemplates = ユーザーテンプレート
view_adminTopology_affinityGroups = アフィニティグループ
+##view_adminTopology_affinityGroups_agentCount = Agent Count
+##view_adminTopology_affinityGroups_agetnMembers = Agent Members
+##view_adminTopology_affinityGroups_agentsInThisGroup = Agents in This Group
+##view_adminTopology_affinityGroups_agentsNotPartOfAnAffinityGroup = Agents not Part of an Affinity Group
+##view_adminTopology_affinityGroups_createNew = Create New
+##view_adminTopology_affinityGroups_details = Affinity Group Details
+##view_adminTopology_affinityGroups_removeSelected = Remove Selected
+##view_adminTopology_affinityGroups_serverCount = Server Count
+##view_adminTopology_affinityGroups_serverMembers = Server Members
view_adminTopology_agents = エージェント
+##view_adminTopology_agent_agentBindAddress = Agent Bind Address
+##view_adminTopology_agent_agentBindPort = Agent Bind Port
+##view_adminTopology_agent_agentName = Agent Name
+##view_adminTopology_agent_connectedServer = Connected Server
+##view_adminTopology_agent_lastAvailabilityReport = Last Availability Report
+##view_adminTopology_agentDetail_address = Address
+##view_adminTopology_agentDetail_agentFailoverList = Agent Failover List
+##view_adminTopology_agentDetail_currentServer = Current Server
+##view_adminTopology_agentDetail_token = Token
view_adminTopology_partitionEvents = イベントの分類
view_adminTopology_remoteAgentInstall = リモートエージェントのインストール
+##view_adminTopology_server_affinityGroup = Affinity Group
+##view_adminTopology_server_agentCount = Agent Count
+##view_adminTopology_server_endpointAddress = Endpoint Address
+##view_adminTopology_server_lastUpdateTime = Last Update Time
+##view_adminTopology_server_mode = Mode
+##view_adminTopology_server_nonSecurePort = Nonsecure Port
+##view_adminTopology_server_removeSelected = Remove Selected
+##view_adminTopology_server_securePort = Secure Port
+##view_adminTopology_server_setMaintenance = Set Maintenance
+##view_adminTopology_server_setNormal = Set Normal
+##view_adminTopology_serverDetail_connectedAgents = Connected Agents
+##view_adminTopology_serverDetail_installationDate = Installation Date
+##view_adminTopology_serverDetail_operationMode = Operation Mode
view_adminTopology_servers = サーバー
view_adminUsersDetails_dataTypeName = ユーザー
##view_adminUsers_failCreateUserWithExistingName = Failed to create user with existing name [{0}]. Please use another name.
diff --git a/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_pt.properties b/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_pt.properties
index e7462f3..8105704 100644
--- a/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_pt.properties
+++ b/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_pt.properties
@@ -536,9 +536,40 @@ view_adminTemplates_prompt_enabledMetricTemplates = N\u00FAmero de coletas habil
view_adminTemplates_servers = Servidores
##view_adminTemplates_userTemplates = User Templates
view_adminTopology_affinityGroups = Grupos de Afinidade
+##view_adminTopology_affinityGroups_agentCount = Agent Count
+##view_adminTopology_affinityGroups_agetnMembers = Agent Members
+##view_adminTopology_affinityGroups_agentsInThisGroup = Agents in This Group
+##view_adminTopology_affinityGroups_agentsNotPartOfAnAffinityGroup = Agents not Part of an Affinity Group
+##view_adminTopology_affinityGroups_createNew = Create New
+##view_adminTopology_affinityGroups_details = Affinity Group Details
+##view_adminTopology_affinityGroups_removeSelected = Remove Selected
+##view_adminTopology_affinityGroups_serverCount = Server Count
+##view_adminTopology_affinityGroups_serverMembers = Server Members
view_adminTopology_agents = Agentes
+##view_adminTopology_agent_agentBindAddress = Agent Bind Address
+##view_adminTopology_agent_agentBindPort = Agent Bind Port
+##view_adminTopology_agent_agentName = Agent Name
+##view_adminTopology_agent_connectedServer = Connected Server
+##view_adminTopology_agent_lastAvailabilityReport = Last Availability Report
+##view_adminTopology_agentDetail_address = Address
+##view_adminTopology_agentDetail_agentFailoverList = Agent Failover List
+##view_adminTopology_agentDetail_currentServer = Current Server
+##view_adminTopology_agentDetail_token = Token
view_adminTopology_partitionEvents = Eventos na Parti\u00E7\u00E3o
view_adminTopology_remoteAgentInstall = Instala\u00E7\u00E3o Remota de Agentes
+##view_adminTopology_server_affinityGroup = Affinity Group
+##view_adminTopology_server_agentCount = Agent Count
+##view_adminTopology_server_endpointAddress = Endpoint Address
+##view_adminTopology_server_lastUpdateTime = Last Update Time
+##view_adminTopology_server_mode = Mode
+##view_adminTopology_server_nonSecurePort = Nonsecure Port
+##view_adminTopology_server_removeSelected = Remove Selected
+##view_adminTopology_server_securePort = Secure Port
+##view_adminTopology_server_setMaintenance = Set Maintenance
+##view_adminTopology_server_setNormal = Set Normal
+##view_adminTopology_serverDetail_connectedAgents = Connected Agents
+##view_adminTopology_serverDetail_installationDate = Installation Date
+##view_adminTopology_serverDetail_operationMode = Operation Mode
view_adminTopology_servers = Servidores
view_adminUsersDetails_dataTypeName = usu\u00E1rio
##view_adminUsers_failCreateUserWithExistingName = Failed to create user with existing name [{0}]. Please use another name.
diff --git a/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_ru.properties b/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_ru.properties
index 3bb95c0..90a3d4c 100644
--- a/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_ru.properties
+++ b/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_ru.properties
@@ -523,9 +523,40 @@
#view_adminTemplates_servers = Servers
#view_adminTemplates_userTemplates = User Templates
#view_adminTopology_affinityGroups = Affinity Groups
+#view_adminTopology_affinityGroups_agentCount = Agent Count
+#view_adminTopology_affinityGroups_agetnMembers = Agent Members
+#view_adminTopology_affinityGroups_agentsInThisGroup = Agents in This Group
+#view_adminTopology_affinityGroups_agentsNotPartOfAnAffinityGroup = Agents not Part of an Affinity Group
+#view_adminTopology_affinityGroups_createNew = Create New
+#view_adminTopology_affinityGroups_details = Affinity Group Details
+#view_adminTopology_affinityGroups_removeSelected = Remove Selected
+#view_adminTopology_affinityGroups_serverCount = Server Count
+#view_adminTopology_affinityGroups_serverMembers = Server Members
#view_adminTopology_agents = Agents
+#view_adminTopology_agent_agentBindAddress = Agent Bind Address
+#view_adminTopology_agent_agentBindPort = Agent Bind Port
+#view_adminTopology_agent_agentName = Agent Name
+#view_adminTopology_agent_connectedServer = Connected Server
+#view_adminTopology_agent_lastAvailabilityReport = Last Availability Report
+#view_adminTopology_agentDetail_address = Address
+#view_adminTopology_agentDetail_agentFailoverList = Agent Failover List
+#view_adminTopology_agentDetail_currentServer = Current Server
+#view_adminTopology_agentDetail_token = Token
#view_adminTopology_partitionEvents = Partition Events
#view_adminTopology_remoteAgentInstall = Remote Agent Install
+#view_adminTopology_server_affinityGroup = Affinity Group
+#view_adminTopology_server_agentCount = Agent Count
+#view_adminTopology_server_endpointAddress = Endpoint Address
+#view_adminTopology_server_lastUpdateTime = Last Update Time
+#view_adminTopology_server_mode = Mode
+#view_adminTopology_server_nonSecurePort = Nonsecure Port
+#view_adminTopology_server_removeSelected = Remove Selected
+#view_adminTopology_server_securePort = Secure Port
+#view_adminTopology_server_setMaintenance = Set Maintenance
+#view_adminTopology_server_setNormal = Set Normal
+#view_adminTopology_serverDetail_connectedAgents = Connected Agents
+#view_adminTopology_serverDetail_installationDate = Installation Date
+#view_adminTopology_serverDetail_operationMode = Operation Mode
#view_adminTopology_servers = Servers
#view_adminUsersDetails_dataTypeName = user
##view_adminUsers_failCreateUserWithExistingName = Failed to create user with existing name [{0}]. Please use another name.
diff --git a/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_zh.properties b/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_zh.properties
index 69c9081..ad55392 100644
--- a/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_zh.properties
+++ b/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_zh.properties
@@ -523,9 +523,40 @@ view_adminTemplates_prompt_enabledMetricTemplates = \u8fd9\u4e2a\u7c7b\u578b\u76
view_adminTemplates_servers = \u670d\u52a1\u5668
##view_adminTemplates_userTemplates = User Templates
view_adminTopology_affinityGroups = \u76f8\u5173\u7ec4
+##view_adminTopology_affinityGroups_agentCount = Agent Count
+##view_adminTopology_affinityGroups_agetnMembers = Agent Members
+##view_adminTopology_affinityGroups_agentsInThisGroup = Agents in This Group
+##view_adminTopology_affinityGroups_agentsNotPartOfAnAffinityGroup = Agents not Part of an Affinity Group
+##view_adminTopology_affinityGroups_createNew = Create New
+##view_adminTopology_affinityGroups_details = Affinity Group Details
+##view_adminTopology_affinityGroups_removeSelected = Remove Selected
+##view_adminTopology_affinityGroups_serverCount = Server Count
+##view_adminTopology_affinityGroups_serverMembers = Server Members
view_adminTopology_agents = \u4ee3\u7406
+##view_adminTopology_agent_agentBindAddress = Agent Bind Address
+##view_adminTopology_agent_agentBindPort = Agent Bind Port
+##view_adminTopology_agent_agentName = Agent Name
+##view_adminTopology_agent_connectedServer = Connected Server
+##view_adminTopology_agent_lastAvailabilityReport = Last Availability Report
+##view_adminTopology_agentDetail_address = Address
+##view_adminTopology_agentDetail_agentFailoverList = Agent Failover List
+##view_adminTopology_agentDetail_currentServer = Current Server
+##view_adminTopology_agentDetail_token = Token
view_adminTopology_partitionEvents = Partition\u4e8b\u4ef6
view_adminTopology_remoteAgentInstall = \u8fdc\u7a0b\u4ee3\u7406\u5b89\u88c5
+##view_adminTopology_server_affinityGroup = Affinity Group
+##view_adminTopology_server_agentCount = Agent Count
+##view_adminTopology_server_endpointAddress = Endpoint Address
+##view_adminTopology_server_lastUpdateTime = Last Update Time
+##view_adminTopology_server_mode = Mode
+##view_adminTopology_server_nonSecurePort = Nonsecure Port
+##view_adminTopology_server_removeSelected = Remove Selected
+##view_adminTopology_server_securePort = Secure Port
+##view_adminTopology_server_setMaintenance = Set Maintenance
+##view_adminTopology_server_setNormal = Set Normal
+##view_adminTopology_serverDetail_connectedAgents = Connected Agents
+##view_adminTopology_serverDetail_installationDate = Installation Date
+##view_adminTopology_serverDetail_operationMode = Operation Mode
view_adminTopology_servers = \u670d\u52a1\u5668
view_adminUsersDetails_dataTypeName = user
##view_adminUsers_failCreateUserWithExistingName = Failed to create user with existing name [{0}]. Please use another name.
11 years, 4 months