[rhq] Branch 'feature/cassandra-backend' - modules/common modules/enterprise
by John Sanda
modules/common/cassandra-installer/src/main/java/org/rhq/cassandra/installer/CassandraInstaller.java | 33 +++++++---
modules/enterprise/server/ear/pom.xml | 5 +
2 files changed, 29 insertions(+), 9 deletions(-)
New commits:
commit 7ca4e46c88998511802c8ced6e2134420a20e5ff
Author: John Sanda <jsanda(a)redhat.com>
Date: Fri Mar 22 14:08:55 2013 -0400
include cassandra plugin in ear and make installer dir checking more robust
diff --git a/modules/common/cassandra-installer/src/main/java/org/rhq/cassandra/installer/CassandraInstaller.java b/modules/common/cassandra-installer/src/main/java/org/rhq/cassandra/installer/CassandraInstaller.java
index fe0ebff..7c75fb5 100644
--- a/modules/common/cassandra-installer/src/main/java/org/rhq/cassandra/installer/CassandraInstaller.java
+++ b/modules/common/cassandra-installer/src/main/java/org/rhq/cassandra/installer/CassandraInstaller.java
@@ -198,9 +198,13 @@ public class CassandraInstaller {
String seeds = hostname;
deploymentOptions.setSeeds(seeds);
- deploymentOptions.setCommitLogDir(cmdLine.getOptionValue("commitlog", commitLogDir));
- deploymentOptions.setDataDir(cmdLine.getOptionValue("data", dataDir));
- deploymentOptions.setSavedCachesDir(cmdLine.getOptionValue("saved-caches", savedCachesDir));
+ commitLogDir = cmdLine.getOptionValue("commitlog", commitLogDir);
+ dataDir = cmdLine.getOptionValue("data", dataDir);
+ savedCachesDir = cmdLine.getOptionValue("saved-caches", savedCachesDir);
+
+ deploymentOptions.setCommitLogDir(cmdLine.getOptionValue(commitLogDir));
+ deploymentOptions.setDataDir(dataDir);
+ deploymentOptions.setSavedCachesDir(savedCachesDir);
deploymentOptions.setLogDir(logDir.getAbsolutePath());
deploymentOptions.setLoggingLevel("INFO");
deploymentOptions.setRpcPort(rpcPort);
@@ -257,15 +261,26 @@ public class CassandraInstaller {
private void checkPerms(Option option, String path) {
File dir = new File(path);
- if (!dir.isDirectory()) {
- log.warn(path + " is not a directory. Use the --" + option.getLongOpt() + " to change this value.");
+ if (dir.exists()) {
+ if (dir.isFile()) {
+ log.warn(path + " is not a directory. Use the --" + option.getLongOpt() + " to change this value.");
+ }
+ } else {
+ File parent = findParentDir(new File(path));
+ if (!parent.canWrite()) {
+ log.warn("The user running this installer does not appear to have write permissions to " + parent +
+ ". Either make sure that the user running the storage node has write permissions or use the --" +
+ option.getLongOpt() + " to change this value.");
+ }
}
+ }
- if (!dir.canWrite()) {
- log.warn("The user running this installer does not appear to have write permissions to " + path +
- ". Either make sure that the user running the storage node has write permissions or use the --" +
- option.getLongOpt() + " to change this value.");
+ private File findParentDir(File path) {
+ File dir = path;
+ while (!dir.exists()) {
+ dir = dir.getParentFile();
}
+ return dir;
}
private PropertiesFileUpdate getServerProperties() {
diff --git a/modules/enterprise/server/ear/pom.xml b/modules/enterprise/server/ear/pom.xml
index d6a38d8..a02c12e 100644
--- a/modules/enterprise/server/ear/pom.xml
+++ b/modules/enterprise/server/ear/pom.xml
@@ -405,6 +405,11 @@
<artifactId>rhq-filetemplate-bundle-plugin</artifactId>
<version>${project.version}</version>
</artifactItem>
+ <artifactItem>
+ <groupId>${project.groupId}</groupId>
+ <artifactId>rhq-cassandra-plugin</artifactId>
+ <version>${project.version}</version>
+ </artifactItem>
</artifactItems>
<outputDirectory>${earDirectory}/rhq-downloads/rhq-plugins</outputDirectory>
</configuration>
11 years, 2 months
[rhq] modules/core pom.xml
by snegrea
modules/core/domain/pom.xml | 14 --------------
pom.xml | 12 +++++++++++-
2 files changed, 11 insertions(+), 15 deletions(-)
New commits:
commit 896e6c6a922e7d7bbe3feebee64dd868b81d3644
Author: Stefan Negrea <snegrea(a)redhat.com>
Date: Fri Mar 22 12:51:14 2013 -0500
[BZ 923458] Fixing build errors due to bad scope added in root pom, dependency management section.
diff --git a/modules/core/domain/pom.xml b/modules/core/domain/pom.xml
index f14157e..91e83ff 100644
--- a/modules/core/domain/pom.xml
+++ b/modules/core/domain/pom.xml
@@ -100,13 +100,6 @@
<scope>test</scope>
</dependency>
- <dependency>
- <groupId>net.sourceforge.jtds</groupId>
- <artifactId>jtds</artifactId>
- <!-- NOTE: The version is defined in the root POM's dependencyManagement section. -->
- <scope>test</scope>
- </dependency>
-
<dependency>
<groupId>org.jboss.spec</groupId>
<artifactId>jboss-javaee-6.0</artifactId>
@@ -182,13 +175,6 @@
</dependency>
<dependency>
- <groupId>trove</groupId>
- <artifactId>trove</artifactId>
- <version>1.0.2</version>
- <scope>test</scope>
- </dependency>
-
- <dependency>
<groupId>xerces</groupId>
<artifactId>xercesImpl</artifactId>
<scope>test</scope>
diff --git a/pom.xml b/pom.xml
index b849d13..136cd73 100644
--- a/pom.xml
+++ b/pom.xml
@@ -667,7 +667,6 @@
<artifactId>jboss-javaee-6.0</artifactId>
<version>${jboss.javaee6.spec.version}</version>
<type>pom</type>
- <scope>import,provided</scope>
</dependency>
<!-- We want the shrinkwrap dependency resolver to be newer than that included in the Arquillian BOM.
@@ -679,6 +678,11 @@
<scope>import</scope>
<type>pom</type>
</dependency>
+ <dependency>
+ <groupId>org.jboss.shrinkwrap.resolver</groupId>
+ <artifactId>shrinkwrap-resolver-depchain</artifactId>
+ <version>${shrinkwrap-resolver.version}</version>
+ </dependency>
<!-- This will pull in the compatible versions of shrinkwrap deps too. Note that we want to use an explicit
version for the shrinkwrap resolver, which revs more often and has bugfixes. -->
<dependency>
@@ -690,6 +694,12 @@
</dependency>
<dependency>
+ <groupId>org.jboss.arquillian.testng</groupId>
+ <artifactId>arquillian-testng-container</artifactId>
+ <version>${arquillian.version}</version>
+ </dependency>
+
+ <dependency>
<groupId>org.jboss.arquillian.extension</groupId>
<artifactId>arquillian-jacoco</artifactId>
<version>${jacoco-arquillian-extension.version}</version>
11 years, 2 months
[rhq] modules/enterprise modules/integration-tests
by Heiko W. Rupp
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/ResourceFactoryManagerBean.java | 9
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/ResourceManagerBean.java | 12
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/rest/AbstractRestBean.java | 36 +
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/rest/ContentHandlerBean.java | 169 +++++
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/rest/OperationsHandlerBean.java | 6
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/rest/ResourceHandlerBean.java | 212 +++++-
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/rest/ResourceTypeHandlerBean.java | 97 ++
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/rest/domain/AvailabilitySummary.java | 221 ++++++
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/rest/domain/CreateCBRresourceRequest.java | 56 +
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/rest/domain/ResourceTypeRest.java | 98 ++
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/rest/helper/LinkSerializer.java | 5
modules/integration-tests/rest-api/src/test/java/org/rhq/modules/integrationTests/restApi/AbstractBase.java | 4
modules/integration-tests/rest-api/src/test/java/org/rhq/modules/integrationTests/restApi/AlertTest.java | 13
modules/integration-tests/rest-api/src/test/java/org/rhq/modules/integrationTests/restApi/ContentTest.java | 333 ++++++++++
modules/integration-tests/rest-api/src/test/java/org/rhq/modules/integrationTests/restApi/ResourcesTest.java | 218 +++++-
modules/integration-tests/rest-api/src/test/java/org/rhq/modules/integrationTests/restApi/d/CreateCBRRequest.java | 49 +
modules/integration-tests/rest-api/src/test/resources/test-simple.war |binary
17 files changed, 1457 insertions(+), 81 deletions(-)
New commits:
commit ed813bd93929d0f5b81b0a877b3d0b17b10786ab
Author: Heiko W. Rupp <hwr(a)redhat.com>
Date: Fri Mar 22 17:38:12 2013 +0100
More work on the rest-api. It is now possible to create content-based resources.
diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/ResourceFactoryManagerBean.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/ResourceFactoryManagerBean.java
index ba5fd3d..b1d0f3a 100644
--- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/ResourceFactoryManagerBean.java
+++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/ResourceFactoryManagerBean.java
@@ -76,6 +76,7 @@ import org.rhq.enterprise.server.authz.PermissionException;
import org.rhq.enterprise.server.content.ContentManagerHelper;
import org.rhq.enterprise.server.content.ContentManagerLocal;
import org.rhq.enterprise.server.core.AgentManagerLocal;
+import org.rhq.enterprise.server.rest.ResourceHandlerBean;
/**
* Bean to handle interaction with the resource factory subsystem of the plugin container. !! Warning, the factory
@@ -684,9 +685,11 @@ public class ResourceFactoryManagerBean implements ResourceFactoryManagerLocal,
DeleteResourceRequest request = new DeleteResourceRequest(persistedHistory.getId(), resourceId);
try {
- AgentClient agentClient = agentManager.getAgentClient(agent);
- ResourceFactoryAgentService resourceFactoryAgentService = agentClient.getResourceFactoryAgentService();
- resourceFactoryAgentService.deleteResource(request);
+ if (!agent.getName().startsWith(ResourceHandlerBean.DUMMY_AGENT_NAME_PREFIX)) { // synthetic agent? We can't do anything at the moment
+ AgentClient agentClient = agentManager.getAgentClient(agent);
+ ResourceFactoryAgentService resourceFactoryAgentService = agentClient.getResourceFactoryAgentService();
+ resourceFactoryAgentService.deleteResource(request);
+ }
return persistedHistory;
} catch (CannotConnectException e) {
diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/ResourceManagerBean.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/ResourceManagerBean.java
index 6c46172..d375b16 100644
--- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/ResourceManagerBean.java
+++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/ResourceManagerBean.java
@@ -127,6 +127,7 @@ import org.rhq.enterprise.server.resource.disambiguation.DisambiguationUpdateStr
import org.rhq.enterprise.server.resource.disambiguation.Disambiguator;
import org.rhq.enterprise.server.resource.group.ResourceGroupDeleteException;
import org.rhq.enterprise.server.resource.group.ResourceGroupManagerLocal;
+import org.rhq.enterprise.server.rest.ResourceHandlerBean;
import org.rhq.enterprise.server.util.CriteriaQueryGenerator;
import org.rhq.enterprise.server.util.CriteriaQueryRunner;
import org.rhq.enterprise.server.util.QueryUtility;
@@ -333,7 +334,7 @@ public class ResourceManagerBean implements ResourceManagerLocal, ResourceManage
+ "]. Unable to inform agent of inventory removal (this may be ok): " + t);
}
- // since we delete the resource asynchronously, make sure we remove things that would cause system
+ // since we delete the resource asynchronously, make sure we remove things that would cause system
// side effects after markForDeletion completed but before the resource is actually removed from the DB
// delete the resource and all its children
@@ -362,7 +363,7 @@ public class ResourceManagerBean implements ResourceManagerLocal, ResourceManage
log.debug("== Bounds " + i + ", " + j);
}
- // refresh overlord session for each batch to avoid session timeout
+ // refresh overlord session for each batch to avoid session timeout
overlord = subjectManager.getOverlord();
boolean hasErrors = uninventoryResourcesBulkDelete(overlord, idsToDelete);
if (hasErrors) {
@@ -400,7 +401,10 @@ public class ResourceManagerBean implements ResourceManagerLocal, ResourceManage
}
// still need to tell the agent about the removed resources so it stops avail reports
- if (agentClient != null) {
+ // but not if this is a synthetic agent that was created in the REST-api
+ // See org.rhq.enterprise.server.rest.ResourceHandlerBean.createPlatformInternal()
+ // See also https://docs.jboss.org/author/display/RHQ/Virtual+platforms+and+synthetic...
+ if (agentClient != null && !agentClient.getAgent().getName().startsWith(ResourceHandlerBean.DUMMY_AGENT_NAME_PREFIX)) { // don't do that on "REST-agents"
try {
agentClient.getDiscoveryAgentService().uninventoryResource(resourceId);
} catch (Exception e) {
@@ -2692,7 +2696,7 @@ public class ResourceManagerBean implements ResourceManagerLocal, ResourceManage
List<Integer> disableResourceIds = new ArrayList<Integer>();
- // one report for each agent, keyed by agent name
+ // one report for each agent, keyed by agent name
Map<Agent, AvailabilityReport> reports = resourceManager.getDisableResourcesReportInNewTransaction(subject,
resourceIds, disableResourceIds);
diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/rest/AbstractRestBean.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/rest/AbstractRestBean.java
index 0e337a7..2746823 100644
--- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/rest/AbstractRestBean.java
+++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/rest/AbstractRestBean.java
@@ -35,13 +35,14 @@ import java.util.Set;
import javax.annotation.PostConstruct;
import javax.ejb.EJB;
+import javax.ws.rs.core.CacheControl;
+import javax.ws.rs.core.Response;
import javax.ws.rs.core.UriBuilder;
import javax.ws.rs.core.UriInfo;
import freemarker.cache.ClassTemplateLoader;
import freemarker.cache.MultiTemplateLoader;
import freemarker.cache.TemplateLoader;
-import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.TemplateException;
@@ -51,6 +52,8 @@ import org.infinispan.Cache;
import org.infinispan.manager.CacheContainer;
import org.rhq.core.domain.auth.Subject;
+import org.rhq.core.domain.configuration.Configuration;
+import org.rhq.core.domain.configuration.PropertySimple;
import org.rhq.core.domain.measurement.DataType;
import org.rhq.core.domain.measurement.MeasurementDefinition;
import org.rhq.core.domain.measurement.MeasurementSchedule;
@@ -110,7 +113,7 @@ public class AbstractRestBean {
*/
protected String renderTemplate(String templateName, Object objectToRender) {
try {
- freemarker.template.Configuration config = new Configuration();
+ freemarker.template.Configuration config = new freemarker.template.Configuration();
// XXX fall-over to ClassTL after failure in FTL seems not to work
// FileTemplateLoader ftl = new FileTemplateLoader(new File("src/main/resources"));
@@ -379,6 +382,10 @@ public class AbstractRestBean {
uriBuilder.path("/resource/{id}/children");
uri = uriBuilder.build(res.getId());
link = new Link("children", uri.toString());
+ uriBuilder = uriInfo.getBaseUriBuilder();
+ uriBuilder.path("/resource/{id}/alerts");
+ uri = uriBuilder.build(res.getId());
+ link = new Link("alerts", uri.toString());
rwt.addLink(link);
if (parent != null) {
uriBuilder = uriInfo.getBaseUriBuilder();
@@ -519,6 +526,31 @@ public class AbstractRestBean {
return ms;
}
+ Configuration mapToConfiguration(Map<String,Object> in) {
+ Configuration config = new Configuration();
+ for (Map.Entry<String,Object> entry : in.entrySet()) {
+ config.put(new PropertySimple(entry.getKey(),entry.getValue())); // TODO honor more types
+ }
+
+ return config;
+
+ }
+
+ /**
+ * Set the caching header on the response
+ * @param builder Response builder to put the caching header on
+ * @param maxAgeSecs Max retention time on the client. Only set if the value is > 0
+ */
+ protected void setCachingHeader(Response.ResponseBuilder builder, int maxAgeSecs) {
+ CacheControl cc = new CacheControl();
+ cc.setPrivate(false);
+ cc.setNoCache(false);
+ cc.setNoStore(false);
+ if (maxAgeSecs>-1)
+ cc.setMaxAge(maxAgeSecs);
+ builder.cacheControl(cc);
+ }
+
protected static class CacheKey {
private String namespace;
private int id;
diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/rest/ContentHandlerBean.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/rest/ContentHandlerBean.java
new file mode 100644
index 0000000..5a0c13a
--- /dev/null
+++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/rest/ContentHandlerBean.java
@@ -0,0 +1,169 @@
+/*
+ * RHQ Management Platform
+ * Copyright (C) 2005-2013 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.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+package org.rhq.enterprise.server.rest;
+
+import java.io.BufferedInputStream;
+import java.io.BufferedOutputStream;
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URI;
+
+import javax.ejb.Stateless;
+import javax.interceptor.Interceptors;
+import javax.ws.rs.Consumes;
+import javax.ws.rs.DELETE;
+import javax.ws.rs.GET;
+import javax.ws.rs.POST;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.Produces;
+import javax.ws.rs.QueryParam;
+import javax.ws.rs.core.Context;
+import javax.ws.rs.core.HttpHeaders;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+import javax.ws.rs.core.UriBuilder;
+import javax.ws.rs.core.UriInfo;
+
+import com.wordnik.swagger.annotations.Api;
+import com.wordnik.swagger.annotations.ApiOperation;
+
+import org.rhq.enterprise.server.rest.domain.IntegerValue;
+import org.rhq.enterprise.server.rest.domain.StringValue;
+
+/**
+ * Deal with content
+ * @author Heiko W. Rupp
+ */
+@Path("/content")
+@Api(value="Resource related", description = "This endpoint deals with individual resources, not resource groups")
+(a)Produces({MediaType.APPLICATION_JSON,MediaType.APPLICATION_XML})
+(a)Interceptors(SetCallerInterceptor.class)
+@Stateless
+public class ContentHandlerBean extends AbstractRestBean {
+
+
+ @POST
+ @Path("/fresh")
+ @Consumes(MediaType.APPLICATION_OCTET_STREAM)
+ @Produces({MediaType.APPLICATION_XML,MediaType.APPLICATION_JSON})
+ @ApiOperation("Upload content to the server. This will return a handle that can be used later to retrieve the content")
+ public Response uploadContent(
+ InputStream contentStream,
+ @Context HttpHeaders headers,
+ @Context UriInfo uriInfo) throws IOException
+ {
+
+ String tmpDirName = System.getProperty("java.io.tmpdir");
+
+ File tmpDir = new File(tmpDirName);
+ File outFile = File.createTempFile("rhq-rest-",".bin",tmpDir);
+
+ FileOutputStream fos = new FileOutputStream(outFile);
+ BufferedOutputStream bos = new BufferedOutputStream(fos);
+
+ BufferedInputStream bis = new BufferedInputStream(contentStream);
+
+ byte[] buf = new byte[32768]; // 32k
+
+ int data;
+ int off=0;
+ while ((data=bis.read(buf))!=-1) {
+ bos.write(buf,off,data);
+ off+=data;
+ }
+
+ bos.flush();
+ bos.close();
+ bis.close();
+
+ String fileHandle = outFile.getName();
+ StringValue sv = new StringValue(fileHandle);
+
+ System.out.println("Uploaded content to " + outFile.getAbsolutePath());
+
+ UriBuilder uriBuilder = uriInfo.getBaseUriBuilder();
+ uriBuilder.path("/content/{handle}");
+ URI uri = uriBuilder.build(fileHandle);
+
+
+ MediaType mediaType = headers.getAcceptableMediaTypes().get(0);
+
+ Response.ResponseBuilder builder = Response.created(uri);
+ builder.entity(sv);
+ builder.type(mediaType);
+
+ return builder.build();
+ }
+
+ @GET
+ @Path("/{handle}/info")
+ public IntegerValue getInfo(
+ @PathParam("handle") String handle
+ )
+ {
+
+ File content = getFileForHandle(handle);
+
+ if (!content.exists() || !content.canRead())
+ throw new StuffNotFoundException("Content with handle " + handle);
+
+ long len = content.length();
+
+ IntegerValue iv = new IntegerValue((int)len); // TODO
+
+ return iv;
+ }
+
+
+ @DELETE
+ @Path("/{handle}")
+ public Response removeUploadedContent(
+ @PathParam("handle") String handle
+ )
+ {
+ File content = getFileForHandle(handle);
+
+ Response.ResponseBuilder builder;
+ if (!content.exists())
+ builder = Response.noContent();
+
+ else {
+ boolean deleted = content.delete();
+ if (deleted)
+ builder = Response.noContent();
+ else {
+ builder = Response.serverError();
+ System.err.println("Deletion of " + content.getAbsolutePath() + " failed");
+ }
+ }
+ return builder.build();
+ }
+
+ private File getFileForHandle(String handle) {
+ String tmpDirName = System.getProperty("java.io.tmpdir");
+
+ File tmpDir = new File(tmpDirName);
+ return new File(tmpDir,handle);
+ }
+
+}
diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/rest/OperationsHandlerBean.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/rest/OperationsHandlerBean.java
index a94b81c..ccfed9f 100644
--- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/rest/OperationsHandlerBean.java
+++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/rest/OperationsHandlerBean.java
@@ -289,10 +289,8 @@ public class OperationsHandlerBean extends AbstractRestBean {
// submit
- Configuration parameters = new Configuration();
- for (Map.Entry<String,Object> entry : operation.getParams().entrySet()) {
- parameters.put(new PropertySimple(entry.getKey(),entry.getValue())); // TODO honor more types
- }
+ Configuration parameters = mapToConfiguration(operation.getParams());
+
ResourceOperationSchedule sched = opsManager.scheduleResourceOperation(caller,operation.getResourceId(),operation.getName(),0,0,0,-1,
parameters,"Test");
JobId jobId = new JobId(sched.getJobName(),sched.getJobGroup());
diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/rest/ResourceHandlerBean.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/rest/ResourceHandlerBean.java
index 88a585f..1c2b516 100644
--- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/rest/ResourceHandlerBean.java
+++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/rest/ResourceHandlerBean.java
@@ -22,6 +22,10 @@
*/
package org.rhq.enterprise.server.rest;
+import java.io.BufferedInputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
import java.net.URI;
import java.util.ArrayList;
import java.util.Date;
@@ -30,11 +34,13 @@ import java.util.Set;
import java.util.UUID;
import javax.ejb.EJB;
+import javax.ejb.EJBTransactionRolledbackException;
import javax.ejb.Stateless;
import javax.ejb.TransactionAttribute;
import javax.ejb.TransactionAttributeType;
import javax.interceptor.Interceptors;
import javax.persistence.EntityManager;
+import javax.persistence.NoResultException;
import javax.persistence.PersistenceContext;
import javax.ws.rs.DELETE;
import javax.ws.rs.DefaultValue;
@@ -66,6 +72,7 @@ import org.jboss.resteasy.links.AddLinks;
import org.jboss.resteasy.links.LinkResource;
import org.rhq.core.domain.alert.Alert;
+import org.rhq.core.domain.configuration.Configuration;
import org.rhq.core.domain.criteria.AlertCriteria;
import org.rhq.core.domain.criteria.AvailabilityCriteria;
import org.rhq.core.domain.criteria.ResourceCriteria;
@@ -76,10 +83,13 @@ import org.rhq.core.domain.measurement.DataType;
import org.rhq.core.domain.measurement.MeasurementDefinition;
import org.rhq.core.domain.measurement.MeasurementSchedule;
import org.rhq.core.domain.resource.Agent;
+import org.rhq.core.domain.resource.CreateResourceHistory;
+import org.rhq.core.domain.resource.CreateResourceStatus;
import org.rhq.core.domain.resource.InventoryStatus;
import org.rhq.core.domain.resource.Resource;
import org.rhq.core.domain.resource.ResourceCategory;
import org.rhq.core.domain.resource.ResourceType;
+import org.rhq.core.domain.resource.composite.ResourceAvailabilitySummary;
import org.rhq.core.domain.util.PageControl;
import org.rhq.core.domain.util.PageList;
import org.rhq.core.domain.util.PageOrdering;
@@ -87,10 +97,12 @@ import org.rhq.enterprise.server.RHQConstants;
import org.rhq.enterprise.server.alert.AlertManagerLocal;
import org.rhq.enterprise.server.core.AgentManagerLocal;
import org.rhq.enterprise.server.measurement.AvailabilityManagerLocal;
-import org.rhq.enterprise.server.measurement.MeasurementScheduleManagerLocal;
import org.rhq.enterprise.server.resource.ResourceAlreadyExistsException;
+import org.rhq.enterprise.server.resource.ResourceFactoryManagerLocal;
import org.rhq.enterprise.server.resource.ResourceTypeManagerLocal;
import org.rhq.enterprise.server.rest.domain.AvailabilityRest;
+import org.rhq.enterprise.server.rest.domain.AvailabilitySummary;
+import org.rhq.enterprise.server.rest.domain.CreateCBRresourceRequest;
import org.rhq.enterprise.server.rest.domain.Link;
import org.rhq.enterprise.server.rest.domain.MetricSchedule;
import org.rhq.enterprise.server.rest.domain.ResourceWithChildren;
@@ -109,17 +121,21 @@ import org.rhq.enterprise.server.rest.domain.StringValue;
public class ResourceHandlerBean extends AbstractRestBean {
private static final String NO_RESOURCE_FOR_ID = "If no resource with the passed id exists";
+ private static final String DEFAULT_PACKAGE = "default.rest.package";
+
+ // Name prefix for synthetic/dummy agents created with the rest api. See #createPlatformInternal
+ public static final String DUMMY_AGENT_NAME_PREFIX = "dummy-agent:name";
@EJB
AvailabilityManagerLocal availMgr;
@EJB
- MeasurementScheduleManagerLocal scheduleManager;
- @EJB
AlertManagerLocal alertManager;
@EJB
ResourceTypeManagerLocal resourceTypeManager;
@EJB
AgentManagerLocal agentMgr;
+ @EJB
+ ResourceFactoryManagerLocal resourceFactory;
@PersistenceContext(unitName = RHQConstants.PERSISTENCE_UNIT_NAME)
private EntityManager entityManager;
@@ -209,7 +225,7 @@ public class ResourceHandlerBean extends AbstractRestBean {
* @param uriInfo Uri from the request
* @param resources List of resources
* @param page Page of pageSize. If null, paging is ignored
- * @param pageSize numer of elements on a page
+ * @param pageSize number of elements on a page
* @return An initialized ResponseBuilder
*/
private Response.ResponseBuilder getResponseBuilderForResourceList(HttpHeaders headers, UriInfo uriInfo,
@@ -332,7 +348,7 @@ public class ResourceHandlerBean extends AbstractRestBean {
criteria.addFilterResourceId(resourceId);
criteria.addSortStartTime(PageOrdering.DESC);
- List<Availability> points = availMgr.findAvailabilityByCriteria(caller,criteria);
+ List<Availability> points = availMgr.findAvailabilityByCriteria(caller, criteria);
List<AvailabilityRest> ret = new ArrayList<AvailabilityRest>(points.size());
for (Availability avail : points) {
AvailabilityRest availabilityRest;
@@ -360,6 +376,26 @@ public class ResourceHandlerBean extends AbstractRestBean {
}
+ @GET
+ @Path("/{id}/availability/summary")
+ @ApiError(code = 404, reason = NO_RESOURCE_FOR_ID)
+ @ApiOperation(value = "Return the availability history for the passed resource", responseClass = "AvailabilitySummary", multiValueResponse = false)
+ public Response getAvailabilitySummary(
+ @ApiParam("Id of the resource to query") @PathParam("id") int resourceId,
+ @Context HttpHeaders headers) {
+
+ fetchResource(resourceId);
+ ResourceAvailabilitySummary summary = resMgr.getAvailabilitySummary(caller,resourceId);
+ AvailabilitySummary as = new AvailabilitySummary(resourceId,summary);
+
+ Response.ResponseBuilder builder = Response.ok(as);
+
+ MediaType type = headers.getAcceptableMediaTypes().get(0);
+ builder.type(type);
+
+ return builder.build();
+
+ }
@PUT
@Path("/{id}/availability")
@@ -487,7 +523,7 @@ public class ResourceHandlerBean extends AbstractRestBean {
}
private Resource obtainResource(int resourceId) {
- Resource resource = resMgr.getResource(caller,resourceId);
+ Resource resource = resMgr.getResource(caller, resourceId);
if (resource == null) {
resource = resMgr.getResource(caller, resourceId);
if (resource != null)
@@ -546,7 +582,7 @@ public class ResourceHandlerBean extends AbstractRestBean {
String typeName = resource.getTypeName();
String resourceName = resource.getResourceName();
- return createPlatformInternal(resourceName,typeName,uriInfo);
+ return createPlatformInternal(resourceName, typeName, uriInfo);
}
@@ -575,8 +611,9 @@ public class ResourceHandlerBean extends AbstractRestBean {
}
// Create a dummy agent per platform - otherwise we can't delete the platform later
+ // See also https://docs.jboss.org/author/display/RHQ/Virtual+platforms+and+synthetic...
Agent agent ;
- agent = new Agent("dummy-agent:name"+name,"-dummy-p:"+name,12345,"http://foo.com/p:name/"+name,"abc-"+name);
+ agent = new Agent(DUMMY_AGENT_NAME_PREFIX +name,"-dummy-p:"+name,12345,"http://foo.com/p:name/"+name,"abc-"+name);
agentMgr.createAgent(agent);
Resource platform = new Resource(resourceKey,name,type);
@@ -627,12 +664,19 @@ public class ResourceHandlerBean extends AbstractRestBean {
@POST
@Path("/")
- @ApiOperation("Create a new resource as a child of an existing resource<A1>")
+ @ApiOperation("Create a new resource as a child of an existing resource. If a handle is given, a content based resource is created.")
public Response createResource(
- @ApiParam("The info about the resource. You need to supply resource name, resource type name, plugin name, id of the parent") ResourceWithType resource,
- @Context UriInfo uriInfo)
+ @ApiParam("The info about the resource. You need to supply resource name, resource type name, plugin name, id of the parent") CreateCBRresourceRequest resource,
+ @Context HttpHeaders headers,
+ @QueryParam("handle") String handle,
+ @Context UriInfo uriInfo) throws IOException
{
- return createResourceInternal(resource.getResourceName(),resource.getPluginName(),resource.getParentId(),resource.getTypeName(),uriInfo);
+
+ if (handle!=null) {
+ return createContentBackedResource(resource,handle,headers,uriInfo);
+ } else {
+ return createResourceInternal(resource.getResourceName(),resource.getPluginName(),resource.getParentId(),resource.getTypeName(),uriInfo);
+ }
}
private Response createResourceInternal(String name, String plugin, int parentId, String typeName,
@@ -687,14 +731,154 @@ public class ResourceHandlerBean extends AbstractRestBean {
}
}
+ private Response createContentBackedResource(CreateCBRresourceRequest request, String handle, HttpHeaders headers, UriInfo uriInfo) throws IOException
+ {
+ int parentId = request.getParentId();
+ String typeName = request.getTypeName();
+ String plugin = request.getPluginName();
+ String name = request.getResourceName();
+
+ String tmpDirName = System.getProperty("java.io.tmpdir");
+
+ File tmpDir = new File(tmpDirName);
+ File content = new File(tmpDir,handle);
+
+ if (!content.exists() || !content.canRead())
+ throw new StuffNotFoundException("Content for handle " + handle);
+
+ BufferedInputStream resourceBits = new BufferedInputStream(new FileInputStream(content));
+
+ // Check for valid parent
+ fetchResource(parentId);
+
+ ResourceType resType = resourceTypeManager.getResourceTypeByNameAndPlugin(typeName,plugin);
+ if (resType==null)
+ throw new StuffNotFoundException("ResourceType with name [" + typeName + "] and plugin [" + plugin + "]");
+
+ Configuration pluginConfig = mapToConfiguration(request.getPluginConfig());
+ Configuration deployConfig = mapToConfiguration(request.getResourceConfig());
+
+ String packageName = DEFAULT_PACKAGE;
+
+ CreateResourceHistory history = resourceFactory.createResource(caller,parentId, resType.getId(),name,pluginConfig,
+ packageName, null,null,deployConfig,resourceBits);
+
+ CreateResourceStatus status = history.getStatus();
+
+
+ MediaType mediaType = headers.getAcceptableMediaTypes().get(0);
+
+ Response.ResponseBuilder builder;
+
+ if ( status == CreateResourceStatus.SUCCESS) {
+
+ ResourceWithType rwt = findCreatedResource(history.getParentResource().getId(),history.getCreatedResourceName(),uriInfo);
+
+ builder = Response.ok();
+ builder.entity(rwt);
+ }
+ else if (status==CreateResourceStatus.IN_PROGRESS) {
+
+ try {
+ Thread.sleep(2000L); // give the agent time to do the work
+ } catch (InterruptedException e) {
+ ; // nothing
+ }
+
+ UriBuilder uriBuilder = uriInfo.getBaseUriBuilder();
+ uriBuilder.path("/resource/creationStatus/{id}");
+ URI uri = uriBuilder.build(history.getId());
+ builder = Response.status(302);
+ builder.location(uri); // redirect to self
+
+ }
+ else { // All kinds of failures
+ builder = Response.serverError();
+ builder.entity(new StringValue(history.getErrorMessage()));
+ }
+ builder.type(mediaType);
+
+ return builder.build();
+
+
+ }
+
+ @GET
+ @Path("/creationStatus/{id}")
+ @ApiOperation("Get the status of a resource creation for content based resources.")
+ public Response getHistoryItem(@PathParam("id") int historyId, @Context HttpHeaders headers, @Context UriInfo uriInfo) {
+
+ CreateResourceHistory history;
+ try {
+ history = resourceFactory.getCreateHistoryItem(historyId);
+ } catch (EJBTransactionRolledbackException e) {
+ if (e.getCause() instanceof NoResultException)
+ throw new StuffNotFoundException("Resource creation status with id " + historyId);
+ else
+ return Response.serverError().entity(e.getMessage()).build();
+ }
+
+ CreateResourceStatus status = history.getStatus();
+
+ Response.ResponseBuilder builder;
+ try {
+ Thread.sleep(2000L); // give the agent time to do the work
+ } catch (InterruptedException e) {
+ ; // nothing
+ }
+ if (status== CreateResourceStatus.SUCCESS) {
+
+ ResourceWithType rwt = findCreatedResource(history.getParentResource().getId(),history.getCreatedResourceName(),uriInfo);
+
+ builder = Response.ok();
+ setCachingHeader(builder, 600);
+ builder.entity(rwt);
+
+ }
+ else if (status==CreateResourceStatus.IN_PROGRESS) {
+
+
+ UriBuilder uriBuilder = uriInfo.getRequestUriBuilder();
+ URI uri = uriBuilder.build();
+ builder = Response.status(302);
+ builder.location(uri); // redirect to self
+ }
+ else {
+ builder = Response.serverError();
+ }
+
+ MediaType mediaType = headers.getAcceptableMediaTypes().get(0);
+ builder.type(mediaType);
+
+ return builder.build();
+
+ }
+
+ private ResourceWithType findCreatedResource(int parentId, String name, UriInfo uriInfo) {
+ ResourceCriteria criteria = new ResourceCriteria();
+ criteria.setStrict(true);
+ criteria.addFilterParentResourceId(parentId);
+ criteria.addFilterName(name);
+ criteria.addFilterInventoryStatus(InventoryStatus.COMMITTED);
+ List<Resource> resources = resMgr.findResourcesByCriteria(caller,criteria);
+ Resource res = resources.get(0);
+ return fillRWT(res,uriInfo);
+ }
+
+
@DELETE
@Path("/{id}")
@ApiOperation("Remove a resource from inventory")
public Response uninventoryOrDeleteResource(
@PathParam("id") int resourceId
- /*,@DefaultValue("false") @QueryParam("physical") boolean delete*/) {
+ ,@DefaultValue("false") @QueryParam("physical") boolean delete) {
- resMgr.uninventoryResource(caller,resourceId);
+ if (delete==false) {
+ resMgr.uninventoryResource(caller,resourceId);
+ }
+ else {
+ resourceFactory.deleteResource(caller,resourceId);
+ }
return Response.status(Response.Status.NO_CONTENT).build();
diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/rest/ResourceTypeHandlerBean.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/rest/ResourceTypeHandlerBean.java
new file mode 100644
index 0000000..ad1fc3e
--- /dev/null
+++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/rest/ResourceTypeHandlerBean.java
@@ -0,0 +1,97 @@
+/*
+ * RHQ Management Platform
+ * Copyright (C) 2005-2013 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.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+package org.rhq.enterprise.server.rest;
+
+import javax.ejb.EJB;
+import javax.ejb.Stateless;
+import javax.interceptor.Interceptors;
+import javax.ws.rs.GET;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.Produces;
+import javax.ws.rs.core.Context;
+import javax.ws.rs.core.HttpHeaders;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+import javax.ws.rs.core.UriInfo;
+
+import com.wordnik.swagger.annotations.Api;
+import com.wordnik.swagger.annotations.ApiError;
+import com.wordnik.swagger.annotations.ApiOperation;
+
+import org.jboss.resteasy.annotations.cache.Cache;
+
+import org.rhq.core.domain.resource.ResourceType;
+import org.rhq.enterprise.server.resource.ResourceTypeManagerLocal;
+import org.rhq.enterprise.server.resource.ResourceTypeNotFoundException;
+import org.rhq.enterprise.server.rest.domain.ResourceTypeRest;
+
+/**
+ * Deal with resource types
+ * @author Heiko W. Rupp
+ */
+(a)Produces({MediaType.APPLICATION_JSON,MediaType.APPLICATION_XML})
+@Path("/resource/type")
+@Api(value="Resource type related", description = "This endpoint deals with resource types")
+(a)Interceptors(SetCallerInterceptor.class)
+@Stateless
+
+public class ResourceTypeHandlerBean extends AbstractRestBean {
+
+
+ @EJB
+ ResourceTypeManagerLocal typeManager;
+
+
+ @Cache(maxAge = 600)
+ @GET
+ @Path("{id}")
+ @ApiOperation(value = "Return information about the resource type with the passed id",responseClass = "ResourceTypeRest")
+ @ApiError(code = 404, reason = "There is no type with the passed id")
+ public Response getTypeById(
+ @PathParam("id") int resourceTypeId,
+ @Context HttpHeaders headers,
+ @Context UriInfo uriInfo) {
+
+
+ ResourceType type;
+ try {
+ type = typeManager.getResourceTypeById(caller,resourceTypeId);
+ } catch (ResourceTypeNotFoundException e) {
+ throw new StuffNotFoundException("Resource type with id " + resourceTypeId);
+ }
+
+ ResourceTypeRest rtr = new ResourceTypeRest();
+ rtr.setId(resourceTypeId);
+ rtr.setName(type.getName());
+ rtr.setPluginName(type.getPlugin());
+ rtr.setCreatePolicy(type.getCreateDeletePolicy());
+ rtr.setDataType(type.getCreationDataType());
+
+ MediaType mediaType = headers.getAcceptableMediaTypes().get(0);
+
+ Response.ResponseBuilder builder = Response.ok();
+ builder.type(mediaType);
+ builder.entity(rtr);
+ return builder.build();
+
+ }
+
+}
diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/rest/domain/AvailabilitySummary.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/rest/domain/AvailabilitySummary.java
new file mode 100644
index 0000000..deb4f4d
--- /dev/null
+++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/rest/domain/AvailabilitySummary.java
@@ -0,0 +1,221 @@
+/*
+ * RHQ Management Platform
+ * Copyright (C) 2005-2013 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.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+package org.rhq.enterprise.server.rest.domain;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.xml.bind.annotation.XmlRootElement;
+
+import com.wordnik.swagger.annotations.ApiClass;
+
+import org.rhq.core.domain.measurement.AvailabilityType;
+import org.rhq.core.domain.resource.composite.ResourceAvailabilitySummary;
+
+/**
+ * Reports the summary of the availability for a resource
+ * @author Heiko W. Rupp
+ */
+@ApiClass("Describes the availability summary for a resource")
+@XmlRootElement
+public class AvailabilitySummary {
+
+ private long currentTime; // set to the current time when this object was created
+ private long upTime;
+ private long downTime;
+ private long disabledTime;
+ private long unknownTime;
+ private int failures;
+ private int disabled;
+ private long lastChange;
+ private AvailabilityType current;
+ private int resourceId;
+ private double disabledPercentage;
+ private double upPercentage;
+ private long knownTime;
+ private long mtbf;
+ private long mttr;
+ private double downPercentage;
+
+
+ List<Link> links = new ArrayList<Link>();
+
+ public AvailabilitySummary() {
+
+ }
+
+ public AvailabilitySummary(int resourceId, ResourceAvailabilitySummary ras) {
+
+ this.resourceId = resourceId;
+ currentTime = ras.getCurrentTime();
+ upTime = ras.getUpTime();
+ downTime = ras.getDownTime();
+ disabledTime = ras.getDisabledTime();
+ unknownTime = ras.getUnknownTime();
+ failures = ras.getFailures();
+ disabled = ras.getDisabled();
+ lastChange = ras.getLastChange().getTime();
+ current = ras.getCurrent();
+
+ disabledPercentage = ras.getDisabledPercentage();
+ downPercentage = ras.getDownPercentage();
+ upPercentage = ras.getUpPercentage();
+ knownTime = ras.getKnownTime();
+ unknownTime = ras.getUnknownTime();
+ mtbf = ras.getMTBF();
+ mttr = ras.getMTTR();
+ }
+
+ public AvailabilityType getCurrent() {
+ return current;
+ }
+
+ public void setCurrent(AvailabilityType current) {
+ this.current = current;
+ }
+
+ public int getDisabled() {
+ return disabled;
+ }
+
+ public void setDisabled(int disabled) {
+ this.disabled = disabled;
+ }
+
+ public long getDisabledTime() {
+ return disabledTime;
+ }
+
+ public void setDisabledTime(long disabledTime) {
+ this.disabledTime = disabledTime;
+ }
+
+ public long getDownTime() {
+ return downTime;
+ }
+
+ public void setDownTime(long downTime) {
+ this.downTime = downTime;
+ }
+
+ public int getFailures() {
+ return failures;
+ }
+
+ public void setFailures(int failures) {
+ this.failures = failures;
+ }
+
+ public long getLastChange() {
+ return lastChange;
+ }
+
+ public void setLastChange(long lastChange) {
+ this.lastChange = lastChange;
+ }
+
+ public List<Link> getLinks() {
+ return links;
+ }
+
+ public void setLinks(List<Link> links) {
+ this.links = links;
+ }
+
+ public long getCurrentTime() {
+ return currentTime;
+ }
+
+ public void setCurrentTime(long currentTime) {
+ this.currentTime = currentTime;
+ }
+
+ public int getResourceId() {
+ return resourceId;
+ }
+
+ public void setResourceId(int resourceId) {
+ this.resourceId = resourceId;
+ }
+
+ public long getUnknownTime() {
+ return unknownTime;
+ }
+
+ public void setUnknownTime(long unknownTime) {
+ this.unknownTime = unknownTime;
+ }
+
+ public long getUpTime() {
+ return upTime;
+ }
+
+ public void setUpTime(long upTime) {
+ this.upTime = upTime;
+ }
+
+ public double getDisabledPercentage() {
+ return disabledPercentage;
+ }
+
+ public void setDisabledPercentage(double disabledPercentage) {
+ this.disabledPercentage = disabledPercentage;
+ }
+
+ public double getDownPercentage() {
+ return downPercentage;
+ }
+
+ public void setDownPercentage(double downPercentage) {
+ this.downPercentage = downPercentage;
+ }
+
+ public long getKnownTime() {
+ return knownTime;
+ }
+
+ public void setKnownTime(long knownTime) {
+ this.knownTime = knownTime;
+ }
+
+ public long getMtbf() {
+ return mtbf;
+ }
+
+ public void setMtbf(long mtbf) {
+ this.mtbf = mtbf;
+ }
+
+ public long getMttr() {
+ return mttr;
+ }
+
+ public void setMttr(long mttr) {
+ this.mttr = mttr;
+ }
+
+ public double getUpPercentage() {
+ return upPercentage;
+ }
+
+ public void setUpPercentage(double upPercentage) {
+ this.upPercentage = upPercentage;
+ }
+}
diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/rest/domain/CreateCBRresourceRequest.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/rest/domain/CreateCBRresourceRequest.java
new file mode 100644
index 0000000..aa1679a
--- /dev/null
+++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/rest/domain/CreateCBRresourceRequest.java
@@ -0,0 +1,56 @@
+/*
+ * RHQ Management Platform
+ * Copyright (C) 2005-2013 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.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+package org.rhq.enterprise.server.rest.domain;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import com.wordnik.swagger.annotations.ApiClass;
+import com.wordnik.swagger.annotations.ApiProperty;
+
+/**
+ * Request to create a content based resource
+ * @author Heiko W. Rupp
+ */
+@ApiClass("A request to create a content-based resource. For this to work, it is required that the content to be deployed is already uploaded to the server.")
+public class CreateCBRresourceRequest extends ResourceWithType {
+
+ Map<String,Object> pluginConfig = new HashMap<String, Object>();
+ Map<String,Object> resourceConfig = new HashMap<String, Object>();
+
+ @ApiProperty("The configuration of the connection properties")
+ public Map<String, Object> getPluginConfig() {
+ return pluginConfig;
+ }
+
+ public void setPluginConfig(Map<String, Object> pluginConfig) {
+ this.pluginConfig = pluginConfig;
+ }
+
+ @ApiProperty("The configuration of the resource to be created")
+ public Map<String, Object> getResourceConfig() {
+ return resourceConfig;
+ }
+
+ public void setResourceConfig(Map<String, Object> resourceConfig) {
+ this.resourceConfig = resourceConfig;
+ }
+
+}
diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/rest/domain/ResourceTypeRest.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/rest/domain/ResourceTypeRest.java
new file mode 100644
index 0000000..88988a0
--- /dev/null
+++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/rest/domain/ResourceTypeRest.java
@@ -0,0 +1,98 @@
+/*
+ * RHQ Management Platform
+ * Copyright (C) 2005-2013 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.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+package org.rhq.enterprise.server.rest.domain;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.xml.bind.annotation.XmlRootElement;
+
+import com.wordnik.swagger.annotations.ApiClass;
+
+import org.rhq.core.domain.resource.CreateDeletePolicy;
+import org.rhq.core.domain.resource.ResourceCreationDataType;
+
+/**
+ * A resource type
+ * @author Heiko W. Rupp
+ */
+@ApiClass("A resource type")
+@XmlRootElement(name = "resourceType")
+public class ResourceTypeRest {
+
+ int id;
+ String name;
+ String pluginName;
+ CreateDeletePolicy createPolicy;
+ ResourceCreationDataType dataType;
+
+ List<Link> links = new ArrayList<Link>();
+
+ public ResourceTypeRest() {
+ }
+
+ public CreateDeletePolicy getCreatePolicy() {
+ return createPolicy;
+ }
+
+ public void setCreatePolicy(CreateDeletePolicy createPolicy) {
+ this.createPolicy = createPolicy;
+ }
+
+ public ResourceCreationDataType getDataType() {
+ return dataType;
+ }
+
+ public void setDataType(ResourceCreationDataType dataType) {
+ this.dataType = dataType;
+ }
+
+ public int getId() {
+ return id;
+ }
+
+ public void setId(int id) {
+ this.id = id;
+ }
+
+ public List<Link> getLinks() {
+ return links;
+ }
+
+ public void setLinks(List<Link> links) {
+ this.links = links;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public String getPluginName() {
+ return pluginName;
+ }
+
+ public void setPluginName(String pluginName) {
+ this.pluginName = pluginName;
+ }
+}
diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/rest/helper/LinkSerializer.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/rest/helper/LinkSerializer.java
index 2863745..a58efd3 100644
--- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/rest/helper/LinkSerializer.java
+++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/rest/helper/LinkSerializer.java
@@ -51,9 +51,4 @@ public class LinkSerializer extends JsonSerializer<Link> {
jsonGenerator.writeEndObject();
}
-
- @Override
- public Class<Link> handledType() {
- return Link.class;
- }
}
diff --git a/modules/integration-tests/rest-api/src/test/java/org/rhq/modules/integrationTests/restApi/AbstractBase.java b/modules/integration-tests/rest-api/src/test/java/org/rhq/modules/integrationTests/restApi/AbstractBase.java
index 6a0c0a1..9f6a02b 100644
--- a/modules/integration-tests/rest-api/src/test/java/org/rhq/modules/integrationTests/restApi/AbstractBase.java
+++ b/modules/integration-tests/rest-api/src/test/java/org/rhq/modules/integrationTests/restApi/AbstractBase.java
@@ -23,19 +23,15 @@ import java.util.Map;
import com.jayway.restassured.RestAssured;
import com.jayway.restassured.http.ContentType;
-import com.jayway.restassured.mapper.factory.DefaultJackson1ObjectMapperFactory;
import com.jayway.restassured.response.Header;
-import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
-import org.junit.BeforeClass;
import org.rhq.modules.integrationTests.restApi.d.Resource;
import static com.jayway.restassured.RestAssured.basic;
import static com.jayway.restassured.RestAssured.given;
-import static com.jayway.restassured.RestAssured.objectMapper;
/**
* Common setup for the tests
diff --git a/modules/integration-tests/rest-api/src/test/java/org/rhq/modules/integrationTests/restApi/AlertTest.java b/modules/integration-tests/rest-api/src/test/java/org/rhq/modules/integrationTests/restApi/AlertTest.java
index 96935f1..3d9f735 100644
--- a/modules/integration-tests/rest-api/src/test/java/org/rhq/modules/integrationTests/restApi/AlertTest.java
+++ b/modules/integration-tests/rest-api/src/test/java/org/rhq/modules/integrationTests/restApi/AlertTest.java
@@ -34,7 +34,9 @@ import org.rhq.modules.integrationTests.restApi.d.Group;
import static com.jayway.restassured.RestAssured.delete;
import static com.jayway.restassured.RestAssured.expect;
import static com.jayway.restassured.RestAssured.given;
+import static org.hamcrest.CoreMatchers.not;
import static org.hamcrest.Matchers.contains;
+import static org.hamcrest.Matchers.emptyIterable;
import static org.hamcrest.Matchers.instanceOf;
import static org.hamcrest.Matchers.is;
import static org.hamcrest.Matchers.iterableWithSize;
@@ -1473,6 +1475,17 @@ public class AlertTest extends AbstractBase {
.get("/alert/{id}/notifications");
+ // See if the resource has an alert recorded
+ given()
+ .header(acceptJson)
+ .pathParam("resourceId",_platformId)
+ .expect()
+ .statusCode(200)
+ .log().ifError()
+ .body("",not(emptyIterable()))
+ .when()
+ .get("/resource/{resourceId}/alerts");
+
}
finally {
diff --git a/modules/integration-tests/rest-api/src/test/java/org/rhq/modules/integrationTests/restApi/ContentTest.java b/modules/integration-tests/rest-api/src/test/java/org/rhq/modules/integrationTests/restApi/ContentTest.java
new file mode 100644
index 0000000..5532b13
--- /dev/null
+++ b/modules/integration-tests/rest-api/src/test/java/org/rhq/modules/integrationTests/restApi/ContentTest.java
@@ -0,0 +1,333 @@
+/*
+ * RHQ Management Platform
+ * Copyright (C) 2005-2013 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.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+package org.rhq.modules.integrationTests.restApi;
+
+import java.io.ByteArrayOutputStream;
+import java.io.InputStream;
+import java.util.List;
+import java.util.Map;
+
+import com.jayway.restassured.http.ContentType;
+import com.jayway.restassured.response.Response;
+
+import org.junit.Test;
+
+import org.rhq.modules.integrationTests.restApi.d.CreateCBRRequest;
+
+import static com.jayway.restassured.RestAssured.given;
+import static org.hamcrest.Matchers.*;
+import static org.hamcrest.Matchers.isOneOf;
+
+/**
+ * Test content upload and creation of content based resources
+ * @author Heiko W. Rupp
+ */
+public class ContentTest extends AbstractBase {
+
+ @Test
+ public void testUpload() throws Exception {
+
+ InputStream in =
+ getClass().getClassLoader().getResourceAsStream("test-simple.war");
+
+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
+
+ int data;
+ while ((data = in.read())!=-1) {
+ baos.write(data);
+ }
+
+ byte[] bytes = baos.toByteArray();
+
+ given()
+ .auth().preemptive().basic("rhqadmin", "rhqadmin")
+ .body(bytes)
+ .contentType(ContentType.BINARY)
+ .header(acceptJson)
+ .log().everything()
+ .expect()
+ .statusCode(isOneOf(200, 201))
+ .body("value", startsWith("rhq-rest-"))
+ .body("value",endsWith(".bin"))
+ .log().ifError()
+ .when()
+ .post("/content/fresh");
+
+
+ }
+ @Test
+ public void testUploadAndDelete() throws Exception {
+
+ InputStream in =
+ getClass().getClassLoader().getResourceAsStream("test-simple.war");
+
+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
+
+ int data;
+ while ((data = in.read())!=-1) {
+ baos.write(data);
+ }
+
+ byte[] bytes = baos.toByteArray();
+ int size = bytes.length;
+
+ String handle =
+ given()
+ .auth().preemptive().basic("rhqadmin", "rhqadmin")
+ .body(bytes)
+ .contentType(ContentType.BINARY)
+ .header(acceptJson)
+ .expect()
+ .body("value", startsWith("rhq-rest-"))
+ .body("value", endsWith(".bin"))
+ .statusCode(isOneOf(200, 201))
+ .when()
+ .post("/content/fresh")
+ .jsonPath()
+ .getString("value");
+
+ Integer uploadedSize =
+ given()
+ .pathParam("handle", handle)
+ .header(acceptJson)
+ .expect()
+ .statusCode(200)
+ .when()
+ .get("/content/{handle}/info")
+ .jsonPath().getInt("value");
+
+ assert uploadedSize!=null;
+ assert uploadedSize==size;
+
+ given()
+ .pathParam("handle",handle)
+ .header(acceptJson)
+ .expect()
+ .statusCode(204)
+ .log().ifError()
+ .when()
+ .delete("/content/{handle}");
+
+ }
+
+ @Test
+ public void testDeleteUnknownContent() throws Exception {
+
+ given()
+ .pathParam("handle","Frobnitz")
+ .header(acceptJson)
+ .expect()
+ .statusCode(204)
+ .log().ifError()
+ .when()
+ .delete("/content/{handle}");
+
+ }
+
+ @Test
+ public void testCreatePackageBasedResource() throws Exception {
+
+ InputStream in =
+ getClass().getClassLoader().getResourceAsStream("test-simple.war");
+
+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
+
+ int data;
+ while ((data = in.read())!=-1) {
+ baos.write(data);
+ }
+
+ byte[] bytes = baos.toByteArray();
+
+ // Upload content
+ String handle =
+ given()
+ .auth().preemptive().basic("rhqadmin", "rhqadmin")
+ .body(bytes)
+ .contentType(ContentType.BINARY)
+ .header(acceptJson)
+ .expect()
+ .body("value",startsWith("rhq-rest-"))
+ .body("value",endsWith(".bin"))
+ .statusCode(isOneOf(200, 201))
+ .when()
+ .post("/content/fresh")
+ .jsonPath()
+ .getString("value");
+
+ // Find an EAP 6 server
+ List<Map<String,Object>> resources =
+ given()
+ .header(acceptJson)
+ .queryParam("q","EAP (127.0.0.1:9990)") // TODO fragile -- better search for it?
+ .queryParam("category","SERVER")
+ .expect()
+ .statusCode(200)
+ .log().ifError()
+ .when()
+ .get("/resource")
+ .jsonPath().getList("$");
+
+ assert resources.size()>0;
+
+ int as7Id = Integer.valueOf((String)resources.get(0).get("resourceId"));
+
+ // create child of eap6 as deployment
+ try {
+ CreateCBRRequest resource = new CreateCBRRequest();
+ resource.setParentId(as7Id);
+ resource.setResourceName("test-simple.war");
+
+
+ // type of the new resource
+ resource.setTypeName("Deployment");
+ resource.setPluginName("JBossAS7");
+
+ // set plugin config (path) and deploy config (runtime-name)
+ resource.getPluginConfig().put("path","deployment");
+ resource.getResourceConfig().put("runtimeName","test-simple.war");
+
+ Response response =
+ given()
+ .body(resource) // Type of new resource
+ .queryParam("handle", handle)
+ .contentType(ContentType.JSON)
+ .header(acceptJson)
+ .log().everything()
+ .expect()
+ .statusCode(isOneOf(200, 201, 302))
+ .log().everything()
+ .when()
+ .post("/resource");
+
+ System.out.println("after post");
+ System.out.flush();
+
+ int status = response.getStatusCode();
+ String location = response.getHeader("Location");
+
+ System.out.println("Location " + location + "\n\n");
+ assert location!=null;
+
+ // We need to check what we got. A 302 means the deploy is still
+ // in progress, so we need to wait a little longer
+ while (status==302) {
+
+ status =
+ given()
+ .header(acceptJson)
+ .log().everything()
+ .expect()
+ .statusCode(isOneOf(200,201,302))
+ .log().everything()
+ .when()
+ .get(location)
+ .getStatusCode();
+ }
+
+ } finally {
+
+ // Remove the uploaded content
+ given()
+ .pathParam("handle",handle)
+ .header(acceptJson)
+ .expect()
+ .statusCode(204)
+ .log().ifError()
+ .when()
+ .delete("/content/{handle}");
+
+
+ // try to remove the created resource
+ Response response =
+ given()
+ .queryParam("q", "test-simple.war")
+ .header(acceptJson)
+ .expect()
+ .log().everything()
+ .when()
+ .get("/resource");
+
+ List links = response.body().jsonPath().getList("links");
+
+ System.out.println(links);
+ assert links!=null;
+
+ if (links.size()>0) {
+
+ String link = null;
+ @SuppressWarnings("unchecked")
+ List<Map<String,Map<String,String>>> listOfMaps = (List<Map<String, Map<String, String>>>) links.get(0);
+
+ for (Map<String,Map<String,String>> map : listOfMaps) {
+ if (map.containsKey("self")) {
+ link = map.get("self").get("href");
+ break;
+ }
+ }
+
+ assert link != null;
+
+ System.out.println("Link: " + link);
+
+ given()
+ .header(acceptJson)
+ .queryParam("physical","true") // Also remove target on the EAP instance
+ .expect()
+ .log().everything()
+ .when()
+ .delete(link);
+ }
+
+ }
+
+ }
+
+ @Test
+ public void testCreateCBRBadHandle() throws Exception {
+
+ CreateCBRRequest resource = new CreateCBRRequest();
+ resource.setParentId(123);
+ resource.setResourceName("test-simple.war");
+
+
+ // type of the new resource
+ resource.setTypeName("Deployment");
+ resource.setPluginName("JBossAS7");
+
+ // set plugin config (path) and deploy config (runtime-name)
+ resource.getPluginConfig().put("path","deployment");
+ resource.getResourceConfig().put("runtimeName","test-simple.war");
+
+ Response response =
+ given()
+ .body(resource) // Type of new resource
+ .queryParam("handle", "This is a joke")
+ .contentType(ContentType.JSON)
+ .header(acceptJson)
+ .log().everything()
+ .expect()
+ .statusCode(404)
+ .log().everything()
+ .when()
+ .post("/resource");
+
+ }
+}
diff --git a/modules/integration-tests/rest-api/src/test/java/org/rhq/modules/integrationTests/restApi/ResourcesTest.java b/modules/integration-tests/rest-api/src/test/java/org/rhq/modules/integrationTests/restApi/ResourcesTest.java
index 40bf342..1dee0f1 100644
--- a/modules/integration-tests/rest-api/src/test/java/org/rhq/modules/integrationTests/restApi/ResourcesTest.java
+++ b/modules/integration-tests/rest-api/src/test/java/org/rhq/modules/integrationTests/restApi/ResourcesTest.java
@@ -23,8 +23,6 @@
package org.rhq.modules.integrationTests.restApi;
-import java.util.List;
-import java.util.Map;
import com.jayway.restassured.http.ContentType;
import com.jayway.restassured.path.json.JsonPath;
@@ -33,7 +31,6 @@ import com.jayway.restassured.path.xml.element.Node;
import com.jayway.restassured.response.Response;
import org.apache.http.HttpStatus;
-import org.hamcrest.CoreMatchers;
import org.junit.Test;
import org.rhq.modules.integrationTests.restApi.d.Availability;
@@ -44,8 +41,8 @@ import static com.jayway.restassured.RestAssured.get;
import static com.jayway.restassured.RestAssured.given;
import static com.jayway.restassured.RestAssured.with;
import static org.hamcrest.CoreMatchers.containsString;
-import static org.hamcrest.CoreMatchers.hasItem;
-import static org.hamcrest.CoreMatchers.not;
+import static org.hamcrest.CoreMatchers.instanceOf;
+import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.CoreMatchers.notNullValue;
/**
@@ -80,6 +77,40 @@ public class ResourcesTest extends AbstractBase {
}
@Test
+ public void testGetPlatformAndTypeJson() {
+
+ Integer typeId =
+ given()
+ .header("Accept","application/json")
+ .pathParam("id",_platformId)
+ .expect()
+ .statusCode(200)
+ .contentType(ContentType.JSON)
+ .log().ifError()
+ .body("links.self", notNullValue())
+ .when()
+ .get("/resource/{id}")
+ .jsonPath().getInt("typeId");
+
+ assert typeId!=null;
+ assert typeId>0;
+
+ given()
+ .header(acceptJson)
+ .pathParam("typeId",typeId)
+ .log().everything()
+ .expect()
+ .statusCode(200)
+ .body("id",is(typeId))
+ .body("name",is("Linux"))
+ .body("pluginName",is("Platforms"))
+ .log().everything()
+ .when()
+ .get("/resource/type/{typeId}");
+
+ }
+
+ @Test
public void testGetPlatformUILink() {
Response response =
@@ -163,7 +194,7 @@ public class ResourcesTest extends AbstractBase {
given()
.header("Accept", "application/xml")
- .pathParam("id",_platformId)
+ .pathParam("id", _platformId)
.expect()
.statusCode(200)
.contentType(ContentType.XML)
@@ -224,6 +255,25 @@ public class ResourcesTest extends AbstractBase {
}
@Test
+ public void testCreatePlatformWithBadType() throws Exception {
+
+ Resource resource = new Resource();
+ resource.setResourceName("dummy-test");
+ resource.setTypeName("myGreatestOS");
+
+ given()
+ .header(acceptXml)
+ .contentType(ContentType.JSON)
+ .body(resource)
+ .expect()
+ .statusCode(404)
+ .log().ifError()
+ .when()
+ .post("/resource/platforms");
+
+ }
+
+ @Test
public void testCreatePlatformAndRemove() throws Exception {
Resource resource = new Resource();
@@ -339,17 +389,16 @@ public class ResourcesTest extends AbstractBase {
String platformId = response.jsonPath().getString("resourceId");
try {
- Response child =
- with().body("{\"value\":\"CPU\"}") // Type of new resource
- .header("Content-Type", "application/json")
- .header("Accept", "application/json")
- .pathParam("name", "test")
- .queryParam("plugin", "Platforms")
- .queryParam("parentId", platformId)
- .expect()
- .statusCode(201)
- .log().ifError()
- .when().post("/resource/{name}").andReturn();
+ with().body("{\"value\":\"CPU\"}") // Type of new resource
+ .header("Content-Type", "application/json")
+ .header("Accept", "application/json")
+ .pathParam("name", "test")
+ .queryParam("plugin", "Platforms")
+ .queryParam("parentId", platformId)
+ .expect()
+ .statusCode(201)
+ .log().ifError()
+ .when().post("/resource/{name}").andReturn();
}
finally {
given().pathParam("id",platformId)
@@ -419,29 +468,27 @@ public class ResourcesTest extends AbstractBase {
String platformId = response.jsonPath().getString("resourceId");
try {
- Response child =
- with().body("{\"value\":\"CPU\"}") // Type of new resource
- .header("Content-Type", "application/json")
- .header("Accept", "application/json")
- .pathParam("name", "test")
- .queryParam("plugin", "Platforms")
- .queryParam("parentId", platformId)
- .expect()
- .statusCode(201)
- .log().ifError()
- .when().post("/resource/{name}").andReturn();
-
- child =
- with().body("{\"value\":\"CPU\"}") // Type of new resource
- .header("Content-Type", "application/json")
- .header("Accept", "application/json")
- .pathParam("name", "test")
- .queryParam("plugin", "Platforms")
- .queryParam("parentId", platformId)
- .expect()
- .statusCode(201)
- .log().ifError()
- .when().post("/resource/{name}").andReturn();
+ with().body("{\"value\":\"CPU\"}") // Type of new resource
+ .header("Content-Type", "application/json")
+ .header("Accept", "application/json")
+ .pathParam("name", "test")
+ .queryParam("plugin", "Platforms")
+ .queryParam("parentId", platformId)
+ .expect()
+ .statusCode(201)
+ .log().ifError()
+ .when().post("/resource/{name}");
+
+ with().body("{\"value\":\"CPU\"}") // Type of new resource
+ .header("Content-Type", "application/json")
+ .header("Accept", "application/json")
+ .pathParam("name", "test")
+ .queryParam("plugin", "Platforms")
+ .queryParam("parentId", platformId)
+ .expect()
+ .statusCode(201)
+ .log().ifError()
+ .when().post("/resource/{name}");
}
finally {
given().pathParam("id",platformId)
@@ -474,9 +521,9 @@ public class ResourcesTest extends AbstractBase {
}
@Test
- public void testAvailabilityForResource() throws Exception {
+ public void testAvailabilityForResourceJson() throws Exception {
given()
- .header("Accept", "application/json")
+ .header(acceptJson)
.pathParam("id", _platformId)
.expect()
.statusCode(200)
@@ -485,9 +532,20 @@ public class ResourcesTest extends AbstractBase {
}
@Test
- public void testAvailabilityHistoryForResource() throws Exception {
+ public void testAvailabilityForResourceXml() throws Exception {
given()
- .header("Accept", "application/json")
+ .header(acceptXml)
+ .pathParam("id", _platformId)
+ .expect()
+ .statusCode(200)
+ .when()
+ .get("/resource/{id}/availability");
+ }
+
+ @Test
+ public void testAvailabilityHistoryForResourceJson() throws Exception {
+ given()
+ .header(acceptJson)
.pathParam("id", _platformId)
.expect()
.statusCode(200)
@@ -496,6 +554,48 @@ public class ResourcesTest extends AbstractBase {
}
@Test
+ public void testAvailabilityHistoryForResourceXml() throws Exception {
+ given()
+ .header(acceptXml)
+ .pathParam("id", _platformId)
+ .expect()
+ .statusCode(200)
+ .when()
+ .get("/resource/{id}/availability/history");
+ }
+
+ @Test
+ public void testAvailabilitySummaryForResourceJson() throws Exception {
+ given()
+ .header(acceptJson)
+ .pathParam("id", _platformId)
+ .expect()
+ .statusCode(200)
+ .log().everything()
+ .body("currentTime", instanceOf(Long.class))
+ .body("failures", instanceOf(Integer.class))
+ .body("current", containsString("UNKNOWN"))
+ .body("upPercentage", instanceOf(Float.class))
+ .when()
+ .get("/resource/{id}/availability/summary");
+ }
+
+ @Test
+ public void testAvailabilitySummaryForResourceXml() throws Exception {
+
+ given()
+ .header(acceptXml)
+ .pathParam("id", _platformId)
+ .expect()
+ .statusCode(200)
+ .log().ifError()
+ .body("availabilitySummary.current", containsString("UNKNOWN"))
+ .when()
+ .get("/resource/{id}/availability/summary");
+
+ }
+
+ @Test
public void testUpdateAvailability() throws Exception {
Response response =
@@ -552,7 +652,7 @@ public class ResourcesTest extends AbstractBase {
@Test
public void testNoDisabledForPlatforms() throws Exception {
- // Platforms should not be set to DISABLED according ot JSHAUGHN
+ // Platforms should not be set to DISABLED according to JSHAUGHN
long now = System.currentTimeMillis()-100;
Availability avail = new Availability(_platformId,now,"DISABLED");
@@ -569,4 +669,32 @@ public class ResourcesTest extends AbstractBase {
.put("/resource/{id}/availability");
}
+
+ @Test
+ public void testGetUnknownType() throws Exception {
+
+
+ given()
+ .header(acceptJson)
+ .pathParam("typeId",123)
+ .expect()
+ .statusCode(404)
+ .log().ifError()
+ .when()
+ .get("/resource/type/{typeId}");
+
+ }
+
+ @Test
+ public void testUnknownCreateResourceStatusId() throws Exception {
+
+ given()
+ .pathParam("id",123)
+ .expect()
+ .statusCode(404)
+ .when()
+ .get("/resource/creationStatus/{id}");
+
+
+ }
}
diff --git a/modules/integration-tests/rest-api/src/test/java/org/rhq/modules/integrationTests/restApi/d/CreateCBRRequest.java b/modules/integration-tests/rest-api/src/test/java/org/rhq/modules/integrationTests/restApi/d/CreateCBRRequest.java
new file mode 100644
index 0000000..2b26025
--- /dev/null
+++ b/modules/integration-tests/rest-api/src/test/java/org/rhq/modules/integrationTests/restApi/d/CreateCBRRequest.java
@@ -0,0 +1,49 @@
+/*
+ * RHQ Management Platform
+ * Copyright (C) 2005-2013 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.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+package org.rhq.modules.integrationTests.restApi.d;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * A request to create a content based resource via REST api
+ * @author Heiko W. Rupp
+ */
+public class CreateCBRRequest extends Resource {
+
+ Map<String,Object> pluginConfig = new HashMap<String, Object>();
+ Map<String,Object> resourceConfig = new HashMap<String, Object>();
+
+ public Map<String, Object> getPluginConfig() {
+ return pluginConfig;
+ }
+
+ public void setPluginConfig(Map<String, Object> pluginConfig) {
+ this.pluginConfig = pluginConfig;
+ }
+
+ public Map<String, Object> getResourceConfig() {
+ return resourceConfig;
+ }
+
+ public void setResourceConfig(Map<String, Object> resourceConfig) {
+ this.resourceConfig = resourceConfig;
+ }
+}
diff --git a/modules/integration-tests/rest-api/src/test/resources/test-simple.war b/modules/integration-tests/rest-api/src/test/resources/test-simple.war
new file mode 100644
index 0000000..bd427b1
Binary files /dev/null and b/modules/integration-tests/rest-api/src/test/resources/test-simple.war differ
11 years, 2 months
[rhq] Branch 'feature/cassandra-backend' - modules/plugins
by John Sanda
modules/plugins/jmx/src/main/java/org/rhq/plugins/jmx/JMXDiscoveryComponent.java | 8 +++++---
modules/plugins/pom.xml | 1 +
2 files changed, 6 insertions(+), 3 deletions(-)
New commits:
commit b0644d511af35079ed484303e177c2afcbebb53d
Author: John Sanda <jsanda(a)redhat.com>
Date: Fri Mar 22 09:51:27 2013 -0400
put cassandra plugin back in build and tell jmx plugin to ignore cassandra
diff --git a/modules/plugins/jmx/src/main/java/org/rhq/plugins/jmx/JMXDiscoveryComponent.java b/modules/plugins/jmx/src/main/java/org/rhq/plugins/jmx/JMXDiscoveryComponent.java
index 1068bb5..3dcaa28 100644
--- a/modules/plugins/jmx/src/main/java/org/rhq/plugins/jmx/JMXDiscoveryComponent.java
+++ b/modules/plugins/jmx/src/main/java/org/rhq/plugins/jmx/JMXDiscoveryComponent.java
@@ -112,9 +112,11 @@ public class JMXDiscoveryComponent implements ResourceDiscoveryComponent, Manual
* Tomcat processes configured for JMX management.
*/
private static final String[] DEFAULT_PROCESS_EXCLUDES = new String[] {
- "org.rhq.enterprise.agent.AgentMain", // RHQ Agent
- "org.jboss.Main", // JBoss AS 3.x-6.x
- "catalina.startup.Bootstrap" // Tomcat
+ "org.rhq.enterprise.agent.AgentMain", // RHQ Agent
+ "org.jboss.Main", // JBoss AS 3.x-6.x
+ "catalina.startup.Bootstrap", // Tomcat
+ "org.apache.cassandra.thrift.CassandraDaemon", // Cassnadra 1.1.x
+ "org.apache.cassandra.service.CassandraDaemon" // Cassandra 1.2.x
};
@Override
diff --git a/modules/plugins/pom.xml b/modules/plugins/pom.xml
index 9af3938..9df6d8c 100644
--- a/modules/plugins/pom.xml
+++ b/modules/plugins/pom.xml
@@ -143,6 +143,7 @@
<module>postgres</module>
<module>script</module>
<module>iis</module>
+ <module>cassandra</module>
</modules>
</profile>
11 years, 2 months
[rhq] Branch 'feature/cassandra-backend' - modules/common
by John Sanda
modules/common/cassandra-installer/src/main/java/org/rhq/cassandra/installer/CassandraInstaller.java | 23 +++++++---
1 file changed, 18 insertions(+), 5 deletions(-)
New commits:
commit 842efa59b7834d43957dc07393c02fe12b0e36df
Author: John Sanda <jsanda(a)redhat.com>
Date: Fri Mar 22 07:09:42 2013 -0400
log warning messages if user does not have write perms to data directories
diff --git a/modules/common/cassandra-installer/src/main/java/org/rhq/cassandra/installer/CassandraInstaller.java b/modules/common/cassandra-installer/src/main/java/org/rhq/cassandra/installer/CassandraInstaller.java
index aaefa09..fe0ebff 100644
--- a/modules/common/cassandra-installer/src/main/java/org/rhq/cassandra/installer/CassandraInstaller.java
+++ b/modules/common/cassandra-installer/src/main/java/org/rhq/cassandra/installer/CassandraInstaller.java
@@ -112,10 +112,6 @@ public class CassandraInstaller {
"requests. If not specified, defaults to the value returned by InetAddress.getLocalHost().getHostName().");
hostname.setArgName("HOSTNAME");
- Option dir = new Option("d", "dir", true, "The directory in which to install the RHQ Storage Node. Defaults " +
- "to " + defaultDir);
- dir.setArgName("INSTALL_DIR");
-
Option seeds = new Option("s", "seeds", true, "A comma-delimited list of hostnames or IP addresses that " +
"serve as contact points. Nodes use this list to find each other and to learn the cluster topology. " +
"It does not need to specify all nodes in the cluster. Defaults to this node's hostname.");
@@ -160,7 +156,6 @@ public class CassandraInstaller {
options = new Options()
.addOption(new Option("h", "help", false, "Show this message."))
.addOption(hostname)
- .addOption(dir)
//.addOption(seeds)
.addOption(jmxPortOption)
.addOption(startOption)
@@ -215,6 +210,10 @@ public class CassandraInstaller {
deploymentOptions.setSslStoragePort(getPort(cmdLine, "ssl-storage-port", sslStoragePort));
deploymentOptions.load();
+ checkPerms(options.getOption("saved-caches"), savedCachesDir);
+ checkPerms(options.getOption("commitlog"), commitLogDir);
+ checkPerms(options.getOption("data"), dataDir);
+
UnmanagedDeployer deployer = new UnmanagedDeployer();
deployer.unpackBundle();
deployer.deploy(deploymentOptions, 1);
@@ -255,6 +254,20 @@ public class CassandraInstaller {
return Integer.parseInt(cmdLine.getOptionValue(option, Integer.toString(defaultValue)));
}
+ private void checkPerms(Option option, String path) {
+ File dir = new File(path);
+
+ if (!dir.isDirectory()) {
+ log.warn(path + " is not a directory. Use the --" + option.getLongOpt() + " to change this value.");
+ }
+
+ if (!dir.canWrite()) {
+ log.warn("The user running this installer does not appear to have write permissions to " + path +
+ ". Either make sure that the user running the storage node has write permissions or use the --" +
+ option.getLongOpt() + " to change this value.");
+ }
+ }
+
private PropertiesFileUpdate getServerProperties() {
String sysprop = System.getProperty("rhq.server.properties-file");
if (sysprop == null) {
11 years, 2 months
[rhq] Branch 'feature/cassandra-backend' - modules/plugins
by John Sanda
modules/plugins/cassandra/src/main/resources/META-INF/rhq-plugin.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
New commits:
commit 9162bea05e4f273a7a2d6b973cdfbb115f4c8203
Author: John Sanda <jsanda(a)redhat.com>
Date: Thu Mar 21 22:32:45 2013 -0400
update plugin to discover C* 1.2.x nodes
diff --git a/modules/plugins/cassandra/src/main/resources/META-INF/rhq-plugin.xml b/modules/plugins/cassandra/src/main/resources/META-INF/rhq-plugin.xml
index e7feef4..3377d65 100644
--- a/modules/plugins/cassandra/src/main/resources/META-INF/rhq-plugin.xml
+++ b/modules/plugins/cassandra/src/main/resources/META-INF/rhq-plugin.xml
@@ -5,7 +5,6 @@
code base of Cassandra which comes from the cassandra-1.1 branch of the Cassandra git repo. The plugin will not
yet work with 1.2.x Cassandra builds which come out of its trunk (i.e., master) branch."
package="org.rhq.plugins.cassandra"
- version="5.0.3"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="urn:xmlns:rhq-plugin"
xmlns:c="urn:xmlns:rhq-configuration">
@@ -49,6 +48,7 @@
</plugin-configuration>
<process-scan name="CassandraDaemon" query="process|basename|match=^java.*,arg|org.apache.cassandra.thrift.CassandraDaemon|match=.*"/>
+ <process-scan name="CassandraDaemon1.2" query="process|basename|match=^java.*,arg|org.apache.cassandra.service.CassandraDaemon|match=.*"/>
<operation name="shutdown" description="Shuts down the Cassandra daemon">
<results>
11 years, 2 months
[rhq] modules/enterprise
by Jay Shaughnessy
modules/enterprise/server/itests-2/src/test/java/org/rhq/enterprise/server/resource/group/definition/framework/test/ExpressionEvaluatorTest.java | 10 ++++++++++
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/group/definition/framework/ExpressionEvaluator.java | 1 +
2 files changed, 11 insertions(+)
New commits:
commit 6e6361c5425a245bc6afe6030afb6351d6604d30
Author: Jay Shaughnessy <jshaughn(a)redhat.com>
Date: Thu Mar 21 22:25:51 2013 -0400
Bug 832398
RFE: Enable DynaGroups to be created based on the contents of another group
Add a test and small fix for detecting duplicate memberof expressions.
diff --git a/modules/enterprise/server/itests-2/src/test/java/org/rhq/enterprise/server/resource/group/definition/framework/test/ExpressionEvaluatorTest.java b/modules/enterprise/server/itests-2/src/test/java/org/rhq/enterprise/server/resource/group/definition/framework/test/ExpressionEvaluatorTest.java
index 92919c5..3745d16 100644
--- a/modules/enterprise/server/itests-2/src/test/java/org/rhq/enterprise/server/resource/group/definition/framework/test/ExpressionEvaluatorTest.java
+++ b/modules/enterprise/server/itests-2/src/test/java/org/rhq/enterprise/server/resource/group/definition/framework/test/ExpressionEvaluatorTest.java
@@ -801,6 +801,16 @@ public class ExpressionEvaluatorTest extends AbstractEJB3Test {
});
}
+ @Test(expectedExceptions = InvalidExpressionException.class, expectedExceptionsMessageRegExp = "Redundant.*")
+ public void doNotAllowDuplicateMemberOfExpressions() throws Exception {
+ evaluateExpressions(new ExpressionGenerator() {
+ @Override
+ public String[] getExpressions() {
+ return new String[] { "memberof = foo", "memberof = foo" };
+ }
+ });
+ }
+
private String cleanUp(String result) {
return result.replaceAll("\\s+", " ").trim();
}
diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/group/definition/framework/ExpressionEvaluator.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/group/definition/framework/ExpressionEvaluator.java
index 363a663..2c2c4c2 100644
--- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/group/definition/framework/ExpressionEvaluator.java
+++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/group/definition/framework/ExpressionEvaluator.java
@@ -1271,6 +1271,7 @@ public class ExpressionEvaluator implements Iterable<ExpressionEvaluator.Result>
throw new InvalidExpressionException("Redundant 'memberof' expression[" + normalizedSubExpression
+ "] - these expressions must be unique");
}
+ memberSubExpressions.add(normalizedSubExpression);
} else {
if (groupedSubExpressions.contains(normalizedSubExpression)) {
throw new InvalidExpressionException(
11 years, 2 months
[rhq] etc/augeas-utils modules/cli-tests modules/common modules/core modules/enterprise modules/helpers modules/integration-tests modules/plugins modules/test-utils pom.xml
by snegrea
etc/augeas-utils/pom.xml | 5
modules/cli-tests/pom.xml | 3
modules/common/ant-bundle/pom.xml | 3
modules/common/drift/pom.xml | 1
modules/common/jboss-as/pom.xml | 2
modules/core/arquillian-integration/container/pom.xml | 3
modules/core/client-api/pom.xml | 1
modules/core/dbutils/pom.xml | 3
modules/core/domain/pom.xml | 5
modules/core/gui/pom.xml | 1
modules/core/native-system/pom.xml | 1
modules/core/plugin-api/pom.xml | 2
modules/core/plugin-container/pom.xml | 1
modules/core/plugin-test-api/pom.xml | 2
modules/core/plugin-test-util/pom.xml | 1
modules/core/plugin-validator/pom.xml | 1
modules/core/plugindoc/pom.xml | 2
modules/core/util/pom.xml | 1
modules/enterprise/agent/pom.xml | 3
modules/enterprise/agentupdate/pom.xml | 2
modules/enterprise/binding/pom.xml | 4
modules/enterprise/comm/pom.xml | 1
modules/enterprise/gui/content_http-war/pom.xml | 13
modules/enterprise/gui/portal-war/pom.xml | 7
modules/enterprise/gui/remoting-war/pom.xml | 1
modules/enterprise/gui/rest-examples-war/pom.xml | 1
modules/enterprise/gui/rest-war/pom.xml | 1
modules/enterprise/remoting/cli/pom.xml | 1
modules/enterprise/remoting/client-api/pom.xml | 2
modules/enterprise/remoting/client-deps/pom.xml | 47 +-
modules/enterprise/scripting/api/pom.xml | 1
modules/enterprise/scripting/javascript/pom.xml | 1
modules/enterprise/scripting/python/pom.xml | 1
modules/enterprise/server/appserver/pom.xml | 1
modules/enterprise/server/client-api/pom.xml | 2
modules/enterprise/server/ear/pom.xml | 1
modules/enterprise/server/installer/pom.xml | 1
modules/enterprise/server/itests-2/pom.xml | 4
modules/enterprise/server/jar/pom.xml | 11
modules/enterprise/server/plugins/alert-operations/pom.xml | 1
modules/enterprise/server/plugins/ant-bundle/pom.xml | 2
modules/enterprise/server/plugins/disk/pom.xml | 2
modules/enterprise/server/plugins/drift-mongodb/pom.xml | 1
modules/enterprise/server/plugins/groovy-script/pom.xml | 14
modules/enterprise/server/plugins/jboss-software/pom.xml | 2
modules/enterprise/server/plugins/url/pom.xml | 1
modules/enterprise/server/sars/agent-sar/pom.xml | 4
modules/enterprise/server/sars/services-sar/pom.xml | 19
modules/enterprise/server/xml-schemas/pom.xml | 1
modules/helpers/bundleGen/pom.xml | 2
modules/helpers/inventory-serializer/pom.xml | 1
modules/helpers/perftest-support/pom.xml | 2
modules/helpers/pluginGen/pom.xml | 2
modules/helpers/rest-docs-generator/pom.xml | 1
modules/helpers/rtfilter/pom.xml | 1
modules/integration-tests/jndi-access/jndi-access-test/pom.xml | 1
modules/integration-tests/jndi-access/remote-server/pom.xml | 1
modules/integration-tests/mod_cluster-plugin-test/pom.xml | 1
modules/integration-tests/rest-api/pom.xml | 1
modules/plugins/aliases/pom.xml | 1
modules/plugins/ant-bundle/pom.xml | 2
modules/plugins/apache/pom.xml | 2
modules/plugins/augeas/pom.xml | 3
modules/plugins/cassandra/pom.xml | 1
modules/plugins/cobbler/pom.xml | 3
modules/plugins/cron/pom.xml | 1
modules/plugins/grub/pom.xml | 1
modules/plugins/hadoop/pom.xml | 1
modules/plugins/hosts/pom.xml | 1
modules/plugins/irc/pom.xml | 1
modules/plugins/jboss-as-5/pom.xml | 4
modules/plugins/jboss-as-5/testsuite/pom.xml | 1
modules/plugins/jboss-as-7/pom.xml | 2
modules/plugins/jboss-as/pom.xml | 4
modules/plugins/mod-cluster/pom.xml | 1
modules/plugins/netservices/pom.xml | 3
modules/plugins/pattern-generator/pom.xml | 1
modules/plugins/perftest/pom.xml | 1
modules/plugins/postfix/pom.xml | 1
modules/plugins/raw-config-test/pom.xml | 9
modules/plugins/samba/pom.xml | 1
modules/plugins/snmptrapd/pom.xml | 1
modules/plugins/sshd/pom.xml | 1
modules/plugins/sudoers/pom.xml | 1
modules/plugins/tomcat/pom.xml | 2
modules/plugins/twitter/pom.xml | 1
modules/test-utils/pom.xml | 3
pom.xml | 196 ++++++++--
88 files changed, 200 insertions(+), 254 deletions(-)
New commits:
commit 28cdcb1c56aeb7f66d608d300d74152e510c3249
Author: Stefan Negrea <snegrea(a)redhat.com>
Date: Thu Mar 21 15:26:52 2013 -0500
[BZ 923458] Maven dependency version cleanup.
(cherry picked from commit 98a076a4b1ab258efbf3e367a2f4fe65b9d5bc7a)
(cherry picked from commit fb84b4e89772479851ce4c6403d7cce6a170d761)
(cherry picked from commit 1308cc9399c63b7f68c89c62619e9f91014c8ed8)
(cherry picked from commit 6dd80cae4df923b2118936951d6fdbb0006b8294)
diff --git a/etc/augeas-utils/pom.xml b/etc/augeas-utils/pom.xml
index 8355748..ca5c540 100644
--- a/etc/augeas-utils/pom.xml
+++ b/etc/augeas-utils/pom.xml
@@ -28,10 +28,9 @@
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
- <version>2.0.2</version>
+ <version>2.3.2</version>
<configuration>
- <source>1.5</source>
- <target>1.5</target>
+ <source>1.6</source>
</configuration>
</plugin>
</plugins>
diff --git a/modules/cli-tests/pom.xml b/modules/cli-tests/pom.xml
index 394dc13..c4dadc9 100644
--- a/modules/cli-tests/pom.xml
+++ b/modules/cli-tests/pom.xml
@@ -31,19 +31,16 @@
<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
- <version>${testng.version}</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
- <version>1.4</version>
</dependency>
<dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
- <version>2.4</version>
</dependency>
<dependency>
diff --git a/modules/common/ant-bundle/pom.xml b/modules/common/ant-bundle/pom.xml
index 111b6f0..4cf6703 100644
--- a/modules/common/ant-bundle/pom.xml
+++ b/modules/common/ant-bundle/pom.xml
@@ -48,7 +48,6 @@
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
- <version>1.1.0.jboss</version>
</dependency>
<dependency>
@@ -73,7 +72,6 @@
<dependency>
<groupId>ant-contrib</groupId>
<artifactId>ant-contrib</artifactId>
- <version>1.0b3</version>
<scope>runtime</scope> <!-- needs to be runtime otherwise it will not be included by assembly plugin -->
<exclusions>
<exclusion>
@@ -86,7 +84,6 @@
<dependency>
<groupId>org.liquibase</groupId>
<artifactId>liquibase-core</artifactId>
- <version>1.9.5</version>
</dependency>
</dependencies>
diff --git a/modules/common/drift/pom.xml b/modules/common/drift/pom.xml
index 190bc89..9d7a132 100644
--- a/modules/common/drift/pom.xml
+++ b/modules/common/drift/pom.xml
@@ -24,7 +24,6 @@
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
- <version>1.4</version>
</dependency>
</dependencies>
diff --git a/modules/common/jboss-as/pom.xml b/modules/common/jboss-as/pom.xml
index 17e5433..d3bf151 100644
--- a/modules/common/jboss-as/pom.xml
+++ b/modules/common/jboss-as/pom.xml
@@ -23,7 +23,6 @@
<dependency>
<groupId>jboss</groupId>
<artifactId>jbpm</artifactId>
- <version>3.1.1</version>
</dependency>
<dependency>
@@ -72,7 +71,6 @@
<artifactItem>
<groupId>jboss</groupId>
<artifactId>jbpm</artifactId>
- <version>3.1.1</version>
</artifactItem>
</artifactItems>
<outputDirectory>${project.build.outputDirectory}/lib</outputDirectory>
diff --git a/modules/core/arquillian-integration/container/pom.xml b/modules/core/arquillian-integration/container/pom.xml
index 50e0fed..9dc7a99 100644
--- a/modules/core/arquillian-integration/container/pom.xml
+++ b/modules/core/arquillian-integration/container/pom.xml
@@ -112,13 +112,11 @@
<dependency>
<groupId>org.powermock</groupId>
<artifactId>powermock-module-testng</artifactId>
- <version>${powermock.version}</version>
</dependency>
<dependency>
<groupId>org.powermock</groupId>
<artifactId>powermock-api-mockito</artifactId>
- <version>${powermock.version}</version>
</dependency>
<!-- test -->
@@ -133,7 +131,6 @@
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
- <version>4.8.1</version>
<scope>test</scope>
</dependency>
diff --git a/modules/core/client-api/pom.xml b/modules/core/client-api/pom.xml
index a4f4b9e..c03f268 100644
--- a/modules/core/client-api/pom.xml
+++ b/modules/core/client-api/pom.xml
@@ -60,7 +60,6 @@
<plugin>
<groupId>com.sun.tools.xjc.maven2</groupId>
<artifactId>maven-jaxb-plugin</artifactId>
- <version>1.1</version>
<executions>
<execution>
<goals>
diff --git a/modules/core/dbutils/pom.xml b/modules/core/dbutils/pom.xml
index a48f2a4..41351ed 100644
--- a/modules/core/dbutils/pom.xml
+++ b/modules/core/dbutils/pom.xml
@@ -55,7 +55,6 @@
<dependency>
<groupId>i18nlog</groupId>
<artifactId>i18nlog</artifactId>
- <version>${i18nlog.version}</version>
</dependency>
<dependency>
<groupId>postgresql</groupId>
@@ -80,7 +79,6 @@
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
- <version>1.2</version>
<dependencies>
<dependency>
<groupId>postgresql</groupId>
@@ -452,7 +450,6 @@
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
- <version>1.2</version>
</plugin>
</plugins>
</build>
diff --git a/modules/core/domain/pom.xml b/modules/core/domain/pom.xml
index ef7c906..f14157e 100644
--- a/modules/core/domain/pom.xml
+++ b/modules/core/domain/pom.xml
@@ -152,21 +152,18 @@
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
- <version>1.4</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>commons-collections</groupId>
<artifactId>commons-collections</artifactId>
- <version>3.2</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
- <version>${commons-codec.version}</version>
<scope>test</scope>
</dependency>
@@ -194,7 +191,6 @@
<dependency>
<groupId>xerces</groupId>
<artifactId>xercesImpl</artifactId>
- <version>${xercesImpl.version}</version>
<scope>test</scope>
</dependency>
</dependencies>
@@ -472,7 +468,6 @@
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
- <version>2.1.2</version>
<executions>
<execution>
<id>attach-sources</id>
diff --git a/modules/core/gui/pom.xml b/modules/core/gui/pom.xml
index 9f1b724..365535a 100644
--- a/modules/core/gui/pom.xml
+++ b/modules/core/gui/pom.xml
@@ -57,7 +57,6 @@
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
- <version>2.4</version>
<scope>provided</scope>
<!-- by JBossAS -->
<!-- transitive dependency needed for JspC -->
diff --git a/modules/core/native-system/pom.xml b/modules/core/native-system/pom.xml
index 21f1c48..04be12b 100644
--- a/modules/core/native-system/pom.xml
+++ b/modules/core/native-system/pom.xml
@@ -47,7 +47,6 @@
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-core</artifactId>
- <version>1.9.0</version>
<scope>test</scope>
</dependency>
diff --git a/modules/core/plugin-api/pom.xml b/modules/core/plugin-api/pom.xml
index 4b828f7..a24c330 100644
--- a/modules/core/plugin-api/pom.xml
+++ b/modules/core/plugin-api/pom.xml
@@ -46,14 +46,12 @@
<dependency>
<groupId>org.powermock</groupId>
<artifactId>powermock-module-testng</artifactId>
- <version>${powermock.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.powermock</groupId>
<artifactId>powermock-api-mockito</artifactId>
- <version>${powermock.version}</version>
<scope>test</scope>
</dependency>
diff --git a/modules/core/plugin-container/pom.xml b/modules/core/plugin-container/pom.xml
index 8bff199..06395a2 100644
--- a/modules/core/plugin-container/pom.xml
+++ b/modules/core/plugin-container/pom.xml
@@ -82,7 +82,6 @@
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
- <version>1.4</version>
</dependency>
</dependencies>
diff --git a/modules/core/plugin-test-api/pom.xml b/modules/core/plugin-test-api/pom.xml
index f7abec9..9c91bc0 100644
--- a/modules/core/plugin-test-api/pom.xml
+++ b/modules/core/plugin-test-api/pom.xml
@@ -39,13 +39,11 @@
<dependency>
<groupId>org.powermock</groupId>
<artifactId>powermock-module-testng</artifactId>
- <version>${powermock.version}</version>
</dependency>
<dependency>
<groupId>org.powermock</groupId>
<artifactId>powermock-api-mockito</artifactId>
- <version>${powermock.version}</version>
</dependency>
<dependency>
diff --git a/modules/core/plugin-test-util/pom.xml b/modules/core/plugin-test-util/pom.xml
index dbb97fe..c75dcbc 100644
--- a/modules/core/plugin-test-util/pom.xml
+++ b/modules/core/plugin-test-util/pom.xml
@@ -24,7 +24,6 @@
<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
- <version>${testng.version}</version>
</dependency>
<dependency>
diff --git a/modules/core/plugin-validator/pom.xml b/modules/core/plugin-validator/pom.xml
index fc8ff80..d05b721 100644
--- a/modules/core/plugin-validator/pom.xml
+++ b/modules/core/plugin-validator/pom.xml
@@ -36,7 +36,6 @@
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
- <version>${commons-logging.version}</version>
</dependency>
<dependency>
diff --git a/modules/core/plugindoc/pom.xml b/modules/core/plugindoc/pom.xml
index 4528810..c3c7175 100644
--- a/modules/core/plugindoc/pom.xml
+++ b/modules/core/plugindoc/pom.xml
@@ -48,7 +48,6 @@
<dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
- <version>2.4</version>
</dependency>
<dependency>
@@ -119,7 +118,6 @@
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
- <version>1.5</version>
<executions>
<execution>
<id>attach-installed-file-for-deployment</id>
diff --git a/modules/core/util/pom.xml b/modules/core/util/pom.xml
index ff2a247..b799891 100644
--- a/modules/core/util/pom.xml
+++ b/modules/core/util/pom.xml
@@ -42,7 +42,6 @@
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
- <version>1.4</version>
<scope>test</scope>
</dependency>
diff --git a/modules/enterprise/agent/pom.xml b/modules/enterprise/agent/pom.xml
index 8e7d819..d1200f6 100644
--- a/modules/enterprise/agent/pom.xml
+++ b/modules/enterprise/agent/pom.xml
@@ -224,7 +224,6 @@ Build-Number=${buildNumber}
<plugin>
<artifactId>maven-surefire-report-plugin</artifactId>
- <version>2.6</version>
</plugin>
</plugins>
@@ -243,7 +242,6 @@ Build-Number=${buildNumber}
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
- <version>1.5</version>
<executions>
<execution>
<id>attach-installed-file-for-deployment</id>
@@ -285,7 +283,6 @@ Build-Number=${buildNumber}
<plugin>
<artifactId>maven-surefire-report-plugin</artifactId>
- <version>2.6</version>
</plugin>
</plugins>
diff --git a/modules/enterprise/agentupdate/pom.xml b/modules/enterprise/agentupdate/pom.xml
index ba0d852..3b66b92 100644
--- a/modules/enterprise/agentupdate/pom.xml
+++ b/modules/enterprise/agentupdate/pom.xml
@@ -135,7 +135,6 @@ rhq-agent.latest.build-number=${buildNumber}
<plugin>
<artifactId>maven-surefire-report-plugin</artifactId>
- <version>2.6</version>
</plugin>
</plugins>
@@ -204,7 +203,6 @@ rhq-agent.latest.build-number=${buildNumber}
<plugin>
<artifactId>maven-surefire-report-plugin</artifactId>
- <version>2.6</version>
</plugin>
</plugins>
diff --git a/modules/enterprise/binding/pom.xml b/modules/enterprise/binding/pom.xml
index a0cab6f..a41fb6c 100644
--- a/modules/enterprise/binding/pom.xml
+++ b/modules/enterprise/binding/pom.xml
@@ -182,14 +182,12 @@
<dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
- <version>2.4</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
- <version>${testng.version}</version>
<scope>test</scope>
</dependency>
@@ -206,14 +204,12 @@
<dependency>
<groupId>org.powermock</groupId>
<artifactId>powermock-module-testng</artifactId>
- <version>${powermock.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.powermock</groupId>
<artifactId>powermock-api-mockito</artifactId>
- <version>${powermock.version}</version>
<scope>test</scope>
</dependency>
diff --git a/modules/enterprise/comm/pom.xml b/modules/enterprise/comm/pom.xml
index 4adb84e..822d405 100644
--- a/modules/enterprise/comm/pom.xml
+++ b/modules/enterprise/comm/pom.xml
@@ -156,7 +156,6 @@
<plugins>
<plugin>
<artifactId>maven-surefire-report-plugin</artifactId>
- <version>2.6</version>
</plugin>
</plugins>
</reporting>
diff --git a/modules/enterprise/gui/content_http-war/pom.xml b/modules/enterprise/gui/content_http-war/pom.xml
index 61abd3a..19208e8 100644
--- a/modules/enterprise/gui/content_http-war/pom.xml
+++ b/modules/enterprise/gui/content_http-war/pom.xml
@@ -54,20 +54,11 @@
<artifactId>hibernate-entitymanager</artifactId>
<scope>provided</scope>
</dependency>
-
- <!--
- <dependency>
- <groupId>javax.servlet</groupId>
- <artifactId>jstl</artifactId>
- <version>1.1.2</version>
- </dependency>
- -->
<!-- adding to pick up javax.servlet.http.HttpServlet -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
- <version>2.4</version>
<scope>provided</scope> <!-- by JBossAS -->
</dependency>
@@ -84,7 +75,6 @@
<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
- <version>1.4</version>
</dependency>
<dependency>
@@ -96,7 +86,6 @@
<dependency>
<groupId>commons-httpclient</groupId>
<artifactId>commons-httpclient</artifactId>
- <version>${commons-httpclient.version}</version>
<scope>provided</scope> <!-- by JBossAS -->
</dependency>
@@ -109,7 +98,6 @@
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
- <version>1.0.4</version>
<scope>provided</scope> <!-- by JBossAS -->
</dependency>
@@ -122,7 +110,6 @@
<dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
- <version>2.4</version>
</dependency>
</dependencies>
diff --git a/modules/enterprise/gui/portal-war/pom.xml b/modules/enterprise/gui/portal-war/pom.xml
index 9795f49..6c12259 100644
--- a/modules/enterprise/gui/portal-war/pom.xml
+++ b/modules/enterprise/gui/portal-war/pom.xml
@@ -70,7 +70,6 @@
<dependency>
<groupId>commons-collections</groupId>
<artifactId>commons-collections</artifactId>
- <version>3.2</version>
</dependency>
<dependency>
@@ -94,7 +93,6 @@
<dependency>
<groupId>commons-httpclient</groupId>
<artifactId>commons-httpclient</artifactId>
- <version>${commons-httpclient.version}</version>
<scope>provided</scope> <!-- by JBossAS -->
</dependency>
@@ -107,14 +105,12 @@
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
- <version>1.0.4</version>
<scope>provided</scope> <!-- by JBossAS -->
</dependency>
<dependency>
<groupId>commons-validator</groupId>
<artifactId>commons-validator</artifactId>
- <version>1.1.4</version>
</dependency>
<!-- used by a test JSP -->
@@ -141,7 +137,6 @@
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
- <version>2.4</version>
<scope>provided</scope> <!-- by JBossAS -->
</dependency>
@@ -186,7 +181,6 @@
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
- <version>3.8.2</version>
</dependency>
<dependency>
@@ -282,7 +276,6 @@
<dependency>
<groupId>xerces</groupId>
<artifactId>xercesImpl</artifactId>
- <version>${xercesImpl.version}</version>
<scope>provided</scope> <!-- by JBossAS -->
</dependency>
diff --git a/modules/enterprise/gui/remoting-war/pom.xml b/modules/enterprise/gui/remoting-war/pom.xml
index c4b63bf..9570336 100644
--- a/modules/enterprise/gui/remoting-war/pom.xml
+++ b/modules/enterprise/gui/remoting-war/pom.xml
@@ -39,7 +39,6 @@
<plugins>
<plugin>
<artifactId>maven-war-plugin</artifactId>
- <version>2.1-alpha-1</version>
<configuration>
<archive>
<manifest>
diff --git a/modules/enterprise/gui/rest-examples-war/pom.xml b/modules/enterprise/gui/rest-examples-war/pom.xml
index 87354d1..2a5091c 100644
--- a/modules/enterprise/gui/rest-examples-war/pom.xml
+++ b/modules/enterprise/gui/rest-examples-war/pom.xml
@@ -23,7 +23,6 @@
<plugin>
<artifactId>maven-war-plugin</artifactId>
- <version>2.1-alpha-1</version>
<configuration>
<archive>
<manifest>
diff --git a/modules/enterprise/gui/rest-war/pom.xml b/modules/enterprise/gui/rest-war/pom.xml
index 1b5349c..0797145 100644
--- a/modules/enterprise/gui/rest-war/pom.xml
+++ b/modules/enterprise/gui/rest-war/pom.xml
@@ -59,7 +59,6 @@
<plugin>
<artifactId>maven-war-plugin</artifactId>
- <version>2.1-alpha-1</version>
<configuration>
<archive>
<manifest>
diff --git a/modules/enterprise/remoting/cli/pom.xml b/modules/enterprise/remoting/cli/pom.xml
index ee672e2..fc164c9 100644
--- a/modules/enterprise/remoting/cli/pom.xml
+++ b/modules/enterprise/remoting/cli/pom.xml
@@ -77,7 +77,6 @@
<dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
- <version>2.4</version>
<scope>test</scope>
</dependency>
</dependencies>
diff --git a/modules/enterprise/remoting/client-api/pom.xml b/modules/enterprise/remoting/client-api/pom.xml
index f5fbe0c..2c7b6f9 100644
--- a/modules/enterprise/remoting/client-api/pom.xml
+++ b/modules/enterprise/remoting/client-api/pom.xml
@@ -90,14 +90,12 @@
<dependency>
<groupId>org.powermock</groupId>
<artifactId>powermock-module-testng</artifactId>
- <version>${powermock.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.powermock</groupId>
<artifactId>powermock-api-mockito</artifactId>
- <version>${powermock.version}</version>
<scope>test</scope>
</dependency>
diff --git a/modules/enterprise/remoting/client-deps/pom.xml b/modules/enterprise/remoting/client-deps/pom.xml
index 006a9a6..61b7c19 100644
--- a/modules/enterprise/remoting/client-deps/pom.xml
+++ b/modules/enterprise/remoting/client-deps/pom.xml
@@ -18,19 +18,19 @@
<groupId>${project.groupId}</groupId>
<artifactId>rhq-remoting-client-api</artifactId>
<version>${project.version}</version>
- <exclusions>
+ <exclusions>
<exclusion>
- <groupId>com.google.gwt</groupId>
- <artifactId>gwt-user</artifactId>
- </exclusion>
+ <groupId>com.google.gwt</groupId>
+ <artifactId>gwt-user</artifactId>
+ </exclusion>
<exclusion>
- <groupId>javax.xml.bind</groupId>
- <artifactId>jaxb-api</artifactId>
- </exclusion>
+ <groupId>javax.xml.bind</groupId>
+ <artifactId>jaxb-api</artifactId>
+ </exclusion>
<exclusion>
<groupId>antlr</groupId>
<artifactId>antlr</artifactId>
- </exclusion>
+ </exclusion>
<exclusion>
<groupId>org.antlr</groupId>
<artifactId>antlr</artifactId>
@@ -50,21 +50,20 @@
<artifactId>concurrent</artifactId>
<version>1.3.4-jboss-update1</version>
</dependency>
- <dependency>
- <groupId>i18nlog</groupId>
- <artifactId>i18nlog</artifactId>
- <version>1.0.10</version>
- </dependency>
- <dependency>
- <groupId>commons-logging</groupId>
- <artifactId>commons-logging</artifactId>
- <version>1.1.0.jboss</version>
- </dependency>
- <dependency>
- <groupId>log4j</groupId>
- <artifactId>log4j</artifactId>
- <version>1.2.14</version>
- </dependency>
- </dependencies>
+ <dependency>
+ <groupId>i18nlog</groupId>
+ <artifactId>i18nlog</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>commons-logging</groupId>
+ <artifactId>commons-logging</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>log4j</groupId>
+ <artifactId>log4j</artifactId>
+ </dependency>
+ </dependencies>
</project>
diff --git a/modules/enterprise/scripting/api/pom.xml b/modules/enterprise/scripting/api/pom.xml
index 5fdffe3..07768cd 100644
--- a/modules/enterprise/scripting/api/pom.xml
+++ b/modules/enterprise/scripting/api/pom.xml
@@ -41,7 +41,6 @@
<plugin>
<artifactId>maven-antrun-plugin</artifactId>
- <version>1.1</version>
<executions>
<execution>
diff --git a/modules/enterprise/scripting/javascript/pom.xml b/modules/enterprise/scripting/javascript/pom.xml
index 208076a..b1d6553 100644
--- a/modules/enterprise/scripting/javascript/pom.xml
+++ b/modules/enterprise/scripting/javascript/pom.xml
@@ -87,7 +87,6 @@
<plugin>
<artifactId>maven-antrun-plugin</artifactId>
- <version>1.1</version>
<executions>
<execution>
diff --git a/modules/enterprise/scripting/python/pom.xml b/modules/enterprise/scripting/python/pom.xml
index ab12edf..8e7ff39 100644
--- a/modules/enterprise/scripting/python/pom.xml
+++ b/modules/enterprise/scripting/python/pom.xml
@@ -86,7 +86,6 @@
<plugin>
<artifactId>maven-antrun-plugin</artifactId>
- <version>1.1</version>
<executions>
<execution>
diff --git a/modules/enterprise/server/appserver/pom.xml b/modules/enterprise/server/appserver/pom.xml
index 2ffdc7c..dc6bbb3 100644
--- a/modules/enterprise/server/appserver/pom.xml
+++ b/modules/enterprise/server/appserver/pom.xml
@@ -67,7 +67,6 @@
<dependency>
<groupId>org.codehaus.groovy</groupId>
<artifactId>groovy-all</artifactId>
- <version>1.7.3</version>
</dependency>
</dependencies>
diff --git a/modules/enterprise/server/client-api/pom.xml b/modules/enterprise/server/client-api/pom.xml
index ac92aec..c645073 100644
--- a/modules/enterprise/server/client-api/pom.xml
+++ b/modules/enterprise/server/client-api/pom.xml
@@ -53,14 +53,12 @@
<dependency>
<groupId>org.powermock</groupId>
<artifactId>powermock-module-testng</artifactId>
- <version>${powermock.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.powermock</groupId>
<artifactId>powermock-api-mockito</artifactId>
- <version>${powermock.version}</version>
<scope>test</scope>
</dependency>
diff --git a/modules/enterprise/server/ear/pom.xml b/modules/enterprise/server/ear/pom.xml
index a6cc2c7..939f107 100644
--- a/modules/enterprise/server/ear/pom.xml
+++ b/modules/enterprise/server/ear/pom.xml
@@ -169,7 +169,6 @@
<dependency>
<groupId>org.opensymphony.quartz</groupId>
<artifactId>quartz</artifactId>
- <version>${quartz.version}</version>
</dependency>
<dependency>
diff --git a/modules/enterprise/server/installer/pom.xml b/modules/enterprise/server/installer/pom.xml
index 83b8977..5e5cdd1 100644
--- a/modules/enterprise/server/installer/pom.xml
+++ b/modules/enterprise/server/installer/pom.xml
@@ -83,7 +83,6 @@
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-core</artifactId>
- <version>1.9.0</version>
<scope>test</scope>
</dependency>
diff --git a/modules/enterprise/server/itests-2/pom.xml b/modules/enterprise/server/itests-2/pom.xml
index cf6aa8d..24fb17b 100644
--- a/modules/enterprise/server/itests-2/pom.xml
+++ b/modules/enterprise/server/itests-2/pom.xml
@@ -559,7 +559,6 @@
<dependency>
<groupId>org.jboss.spec</groupId>
<artifactId>jboss-javaee-6.0</artifactId>
- <version>${jboss.javaee6.spec.version}</version>
<scope>provided</scope>
<type>pom</type>
</dependency>
@@ -567,7 +566,6 @@
<dependency>
<groupId>org.jboss.as</groupId>
<artifactId>jboss-as-arquillian-container-managed</artifactId>
- <version>${jboss.version}</version>
<scope>test</scope>
</dependency>
@@ -677,14 +675,12 @@
<dependency>
<groupId>org.powermock</groupId>
<artifactId>powermock-module-testng</artifactId>
- <version>${powermock.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.powermock</groupId>
<artifactId>powermock-api-mockito</artifactId>
- <version>${powermock.version}</version>
<scope>test</scope>
</dependency>
diff --git a/modules/enterprise/server/jar/pom.xml b/modules/enterprise/server/jar/pom.xml
index b7621c5..b86af52 100644
--- a/modules/enterprise/server/jar/pom.xml
+++ b/modules/enterprise/server/jar/pom.xml
@@ -123,7 +123,6 @@
<dependency>
<groupId>org.jboss.spec</groupId>
<artifactId>jboss-javaee-6.0</artifactId>
- <version>${jboss.javaee6.spec.version}</version>
<scope>provided</scope>
<type>pom</type>
</dependency>
@@ -169,7 +168,6 @@
<dependency>
<groupId>org.infinispan</groupId>
<artifactId>infinispan-core</artifactId>
- <version>${infinispan.version}</version>
<scope>provided</scope>
</dependency>
@@ -185,26 +183,22 @@
<dependency>
<groupId>commons-collections</groupId>
<artifactId>commons-collections</artifactId>
- <version>3.2</version>
</dependency>
<dependency>
<groupId>commons-httpclient</groupId>
<artifactId>commons-httpclient</artifactId>
- <version>${commons-httpclient.version}</version>
</dependency>
<dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
- <version>2.4</version>
</dependency>
<!-- Required by a couple APL classes - TODO: Remove this once APL has been removed. -->
<dependency>
<groupId>commons-validator</groupId>
<artifactId>commons-validator</artifactId>
- <version>1.1.4</version>
</dependency>
<dependency>
@@ -279,7 +273,6 @@
<dependency>
<groupId>org.jboss.jbossts</groupId>
<artifactId>jbossjts</artifactId>
- <version>${jboss-jts.version}</version>
<scope>provided</scope>
</dependency>
@@ -407,14 +400,12 @@
<dependency>
<groupId>org.powermock</groupId>
<artifactId>powermock-module-testng</artifactId>
- <version>${powermock.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.powermock</groupId>
<artifactId>powermock-api-mockito</artifactId>
- <version>${powermock.version}</version>
<scope>test</scope>
</dependency>
@@ -449,7 +440,6 @@
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-ejb-plugin</artifactId>
- <version>2.3</version>
<configuration>
<ejbVersion>3.0</ejbVersion>
<generateClient>true</generateClient>
@@ -574,7 +564,6 @@
<plugin>
<groupId>org.antlr</groupId>
<artifactId>antlr3-maven-plugin</artifactId>
- <version>3.2</version>
<executions>
<execution>
<phase>generate-sources</phase>
diff --git a/modules/enterprise/server/plugins/alert-operations/pom.xml b/modules/enterprise/server/plugins/alert-operations/pom.xml
index 3b08f01..24813ad 100644
--- a/modules/enterprise/server/plugins/alert-operations/pom.xml
+++ b/modules/enterprise/server/plugins/alert-operations/pom.xml
@@ -29,7 +29,6 @@
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
- <version>1.1</version>
<executions>
<execution>
<!-- Generate tokens.xml file -->
diff --git a/modules/enterprise/server/plugins/ant-bundle/pom.xml b/modules/enterprise/server/plugins/ant-bundle/pom.xml
index 6f636d5..4226e21 100644
--- a/modules/enterprise/server/plugins/ant-bundle/pom.xml
+++ b/modules/enterprise/server/plugins/ant-bundle/pom.xml
@@ -94,13 +94,11 @@
<artifactItem>
<groupId>ant-contrib</groupId>
<artifactId>ant-contrib</artifactId>
- <version>1.0b3</version>
</artifactItem>
<artifactItem>
<groupId>org.liquibase</groupId>
<artifactId>liquibase-core</artifactId>
- <version>1.9.5</version>
</artifactItem>
</artifactItems>
diff --git a/modules/enterprise/server/plugins/disk/pom.xml b/modules/enterprise/server/plugins/disk/pom.xml
index 5ecb7a9..c111bcc 100644
--- a/modules/enterprise/server/plugins/disk/pom.xml
+++ b/modules/enterprise/server/plugins/disk/pom.xml
@@ -27,14 +27,12 @@
<dependency>
<groupId>org.powermock</groupId>
<artifactId>powermock-module-testng</artifactId>
- <version>${powermock.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.powermock</groupId>
<artifactId>powermock-api-mockito</artifactId>
- <version>${powermock.version}</version>
<scope>test</scope>
</dependency>
diff --git a/modules/enterprise/server/plugins/drift-mongodb/pom.xml b/modules/enterprise/server/plugins/drift-mongodb/pom.xml
index ed72fd0..39d7127 100644
--- a/modules/enterprise/server/plugins/drift-mongodb/pom.xml
+++ b/modules/enterprise/server/plugins/drift-mongodb/pom.xml
@@ -74,7 +74,6 @@
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
- <version>1.4</version>
<scope>test</scope>
</dependency>
</dependencies>
diff --git a/modules/enterprise/server/plugins/groovy-script/pom.xml b/modules/enterprise/server/plugins/groovy-script/pom.xml
index e844a56..ea20099 100644
--- a/modules/enterprise/server/plugins/groovy-script/pom.xml
+++ b/modules/enterprise/server/plugins/groovy-script/pom.xml
@@ -4,14 +4,14 @@
<parent>
<groupId>org.rhq</groupId>
<artifactId>rhq-enterprise-server-plugins-parent</artifactId>
- <version>4.5.0-SNAPSHOT</version>
+ <version>4.7.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<groupId>org.rhq</groupId>
<artifactId>groovy-script-server-plugin</artifactId>
- <version>4.5.0-SNAPSHOT</version>
+ <version>4.7.0-SNAPSHOT</version>
<name>RHQ Enterprise Server Groovy Script Plugin</name>
@@ -19,7 +19,6 @@
<dependency>
<groupId>org.codehaus.groovy</groupId>
<artifactId>groovy-all</artifactId>
- <version>1.7.3</version>
</dependency>
<dependency>
<groupId>org.apache.ant</groupId>
@@ -27,9 +26,8 @@
<version>1.7.1</version>
</dependency>
<dependency>
- <groupId>quartz</groupId>
+ <groupId>org.opensymphony.quartz</groupId>
<artifactId>quartz</artifactId>
- <version>1.5.2</version>
<scope>test</scope>
</dependency>
<dependency>
@@ -54,6 +52,10 @@
<artifactId>reflections</artifactId>
<version>0.9.5-RC2</version>
</dependency>
+ <dependency>
+ <groupId>org.hibernate</groupId>
+ <artifactId>hibernate-core</artifactId>
+ </dependency>
</dependencies>
<build>
@@ -97,7 +99,6 @@
<artifactItem>
<groupId>org.javassist</groupId>
<artifactId>javassist</artifactId>
- <version>${javassist.version}</version>
</artifactItem>
</artifactItems>
<outputDirectory>${project.build.outputDirectory}/lib</outputDirectory>
@@ -109,7 +110,6 @@
<plugin>
<groupId>org.codehaus.groovy.maven</groupId>
<artifactId>gmaven-plugin</artifactId>
- <version>1.0</version>
<executions>
<execution>
<goals>
diff --git a/modules/enterprise/server/plugins/jboss-software/pom.xml b/modules/enterprise/server/plugins/jboss-software/pom.xml
index 3d31342..33a11a1 100644
--- a/modules/enterprise/server/plugins/jboss-software/pom.xml
+++ b/modules/enterprise/server/plugins/jboss-software/pom.xml
@@ -26,7 +26,6 @@
<dependency>
<groupId>commons-httpclient</groupId>
<artifactId>commons-httpclient</artifactId>
- <version>${commons-httpclient.version}</version>
<scope>provided</scope>
</dependency>
@@ -40,7 +39,6 @@
<dependency>
<groupId>xerces</groupId>
<artifactId>xercesImpl</artifactId>
- <version>${xercesImpl.version}</version>
<scope>provided</scope>
</dependency>
diff --git a/modules/enterprise/server/plugins/url/pom.xml b/modules/enterprise/server/plugins/url/pom.xml
index f677d6a..5660473 100644
--- a/modules/enterprise/server/plugins/url/pom.xml
+++ b/modules/enterprise/server/plugins/url/pom.xml
@@ -43,7 +43,6 @@
<dependency>
<groupId>xerces</groupId>
<artifactId>xercesImpl</artifactId>
- <version>${xercesImpl.version}</version>
<scope>provided</scope>
</dependency>
diff --git a/modules/enterprise/server/sars/agent-sar/pom.xml b/modules/enterprise/server/sars/agent-sar/pom.xml
index 05cd715..6f2cc2e 100644
--- a/modules/enterprise/server/sars/agent-sar/pom.xml
+++ b/modules/enterprise/server/sars/agent-sar/pom.xml
@@ -31,21 +31,17 @@
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<!-- make sure you match that which is used by standalone agent! -->
- <version>1.1.0.jboss</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<!-- make sure you match that which is used by standalone agent! -->
- <version>1.2.14</version>
</dependency>
<dependency>
<groupId>commons-httpclient</groupId>
<artifactId>commons-httpclient</artifactId>
- <!-- make sure you match that which is used by standalone agent! -->
- <version>2.0.2</version>
</dependency>
</dependencies>
diff --git a/modules/enterprise/server/sars/services-sar/pom.xml b/modules/enterprise/server/sars/services-sar/pom.xml
index 413c681..4586a8b 100644
--- a/modules/enterprise/server/sars/services-sar/pom.xml
+++ b/modules/enterprise/server/sars/services-sar/pom.xml
@@ -21,25 +21,6 @@
<build>
<finalName>rhq-enterprise-server-services-sar</finalName>
-
- <!-- we don't need this right now - only if we need deps stored in the sar META-INF/lib/ will we need this -->
- <!-- NOTE: extensions=true below allows Maven to grok the jboss-sar packaging type -->
- <!--
- <plugins>
-
- <plugin>
- <groupId>org.codehaus.mojo</groupId>
- <artifactId>jboss-packaging-maven-plugin</artifactId>
- <version>1.9.99</version>
- <extensions>true</extensions>
- <configuration>
- <libDirectory>${sarDirectory}/META-INF/lib</libDirectory>
- </configuration>
- </plugin>
-
- </plugins>
- -->
-
<resources>
<resource>
<directory>src/main/resources</directory>
diff --git a/modules/enterprise/server/xml-schemas/pom.xml b/modules/enterprise/server/xml-schemas/pom.xml
index 9c1bfdd..98783f1 100644
--- a/modules/enterprise/server/xml-schemas/pom.xml
+++ b/modules/enterprise/server/xml-schemas/pom.xml
@@ -44,7 +44,6 @@
<plugin>
<groupId>com.sun.tools.xjc.maven2</groupId>
<artifactId>maven-jaxb-plugin</artifactId>
- <version>1.1</version>
<executions>
<execution>
<goals>
diff --git a/modules/helpers/bundleGen/pom.xml b/modules/helpers/bundleGen/pom.xml
index 1c570fc..82fabfc 100644
--- a/modules/helpers/bundleGen/pom.xml
+++ b/modules/helpers/bundleGen/pom.xml
@@ -17,7 +17,6 @@
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
- <version>2.2</version>
<configuration>
<archive>
<manifest>
@@ -58,7 +57,6 @@
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
- <version>${commons-logging.version}</version>
</dependency>
<dependency>
diff --git a/modules/helpers/inventory-serializer/pom.xml b/modules/helpers/inventory-serializer/pom.xml
index a42effa..993250b 100644
--- a/modules/helpers/inventory-serializer/pom.xml
+++ b/modules/helpers/inventory-serializer/pom.xml
@@ -36,7 +36,6 @@
<dependency>
<groupId>commons-collections</groupId>
<artifactId>commons-collections</artifactId>
- <version>3.2.1</version>
<scope>runtime</scope>
</dependency>
<dependency>
diff --git a/modules/helpers/perftest-support/pom.xml b/modules/helpers/perftest-support/pom.xml
index ceb5377..4136b47 100644
--- a/modules/helpers/perftest-support/pom.xml
+++ b/modules/helpers/perftest-support/pom.xml
@@ -42,12 +42,10 @@
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
- <version>${commons-logging.version}</version>
</dependency>
<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
- <version>${testng.version}</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
diff --git a/modules/helpers/pluginGen/pom.xml b/modules/helpers/pluginGen/pom.xml
index f7f04ba..372c627 100644
--- a/modules/helpers/pluginGen/pom.xml
+++ b/modules/helpers/pluginGen/pom.xml
@@ -24,7 +24,6 @@
<plugin>
<artifactId>maven-jar-plugin</artifactId>
- <version>2.2</version>
<configuration>
<archive>
<manifest>
@@ -72,7 +71,6 @@
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
- <version>1.1.0.jboss</version>
</dependency>
<dependency>
<groupId>org.freemarker</groupId>
diff --git a/modules/helpers/rest-docs-generator/pom.xml b/modules/helpers/rest-docs-generator/pom.xml
index 0996c3b..208d40b 100644
--- a/modules/helpers/rest-docs-generator/pom.xml
+++ b/modules/helpers/rest-docs-generator/pom.xml
@@ -147,7 +147,6 @@
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
- <version>${commons-logging.version}</version>
<scope>compile</scope>
</dependency>
</dependencies>
diff --git a/modules/helpers/rtfilter/pom.xml b/modules/helpers/rtfilter/pom.xml
index 98b8667..da9cf66 100644
--- a/modules/helpers/rtfilter/pom.xml
+++ b/modules/helpers/rtfilter/pom.xml
@@ -25,7 +25,6 @@
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
- <version>2.3</version>
<scope>provided</scope> <!-- by servlet container -->
</dependency>
diff --git a/modules/integration-tests/jndi-access/jndi-access-test/pom.xml b/modules/integration-tests/jndi-access/jndi-access-test/pom.xml
index e574631..9469947 100644
--- a/modules/integration-tests/jndi-access/jndi-access-test/pom.xml
+++ b/modules/integration-tests/jndi-access/jndi-access-test/pom.xml
@@ -181,7 +181,6 @@
<dependency>
<groupId>org.jboss.spec</groupId>
<artifactId>jboss-javaee-6.0</artifactId>
- <version>1.0.0.Final</version>
<type>pom</type>
<scope>provided</scope>
</dependency>
diff --git a/modules/integration-tests/jndi-access/remote-server/pom.xml b/modules/integration-tests/jndi-access/remote-server/pom.xml
index fd7e312..b28b9bf 100644
--- a/modules/integration-tests/jndi-access/remote-server/pom.xml
+++ b/modules/integration-tests/jndi-access/remote-server/pom.xml
@@ -38,7 +38,6 @@
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
- <version>1.2.14</version>
</dependency>
</dependencies>
diff --git a/modules/integration-tests/mod_cluster-plugin-test/pom.xml b/modules/integration-tests/mod_cluster-plugin-test/pom.xml
index ad8df87..b3370a3 100644
--- a/modules/integration-tests/mod_cluster-plugin-test/pom.xml
+++ b/modules/integration-tests/mod_cluster-plugin-test/pom.xml
@@ -75,7 +75,6 @@
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
- <version>1.2.14</version>
<scope>provided</scope>
</dependency>
diff --git a/modules/integration-tests/rest-api/pom.xml b/modules/integration-tests/rest-api/pom.xml
index cea2a5c..6061752 100644
--- a/modules/integration-tests/rest-api/pom.xml
+++ b/modules/integration-tests/rest-api/pom.xml
@@ -50,7 +50,6 @@
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
- <version>4.8.2</version>
<scope>test</scope>
</dependency>
<dependency>
diff --git a/modules/plugins/aliases/pom.xml b/modules/plugins/aliases/pom.xml
index a7a4469..14874eb 100644
--- a/modules/plugins/aliases/pom.xml
+++ b/modules/plugins/aliases/pom.xml
@@ -26,7 +26,6 @@
<dependency>
<groupId>ant-contrib</groupId>
<artifactId>ant-contrib</artifactId>
- <version>${ant.contrib.version}</version>
<scope>provided</scope>
</dependency>
diff --git a/modules/plugins/ant-bundle/pom.xml b/modules/plugins/ant-bundle/pom.xml
index 5390fcc..0c750b6 100644
--- a/modules/plugins/ant-bundle/pom.xml
+++ b/modules/plugins/ant-bundle/pom.xml
@@ -66,13 +66,11 @@
<artifactItem>
<groupId>ant-contrib</groupId>
<artifactId>ant-contrib</artifactId>
- <version>1.0b3</version>
</artifactItem>
<artifactItem>
<groupId>org.liquibase</groupId>
<artifactId>liquibase-core</artifactId>
- <version>1.9.5</version>
</artifactItem>
</artifactItems>
diff --git a/modules/plugins/apache/pom.xml b/modules/plugins/apache/pom.xml
index 2ca9086..3f6bca5 100644
--- a/modules/plugins/apache/pom.xml
+++ b/modules/plugins/apache/pom.xml
@@ -24,7 +24,6 @@
<dependency>
<groupId>ant-contrib</groupId>
<artifactId>ant-contrib</artifactId>
- <version>${ant.contrib.version}</version>
<scope>provided</scope>
</dependency>
@@ -63,7 +62,6 @@
<dependency>
<groupId>xerces</groupId>
<artifactId>xercesImpl</artifactId>
- <version>${xercesImpl.version}</version>
<scope>test</scope>
</dependency>
diff --git a/modules/plugins/augeas/pom.xml b/modules/plugins/augeas/pom.xml
index 9a8acb4..4e663e6 100644
--- a/modules/plugins/augeas/pom.xml
+++ b/modules/plugins/augeas/pom.xml
@@ -39,13 +39,11 @@
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
- <version>1.4</version>
</dependency>
<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
- <version>${testng.version}</version>
</dependency>
<dependency>
@@ -196,7 +194,6 @@
<artifactItem>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
- <version>1.4</version>
</artifactItem>
</artifactItems>
<outputDirectory>${project.build.outputDirectory}/lib</outputDirectory>
diff --git a/modules/plugins/cassandra/pom.xml b/modules/plugins/cassandra/pom.xml
index ac3d8ff..9888aa0 100644
--- a/modules/plugins/cassandra/pom.xml
+++ b/modules/plugins/cassandra/pom.xml
@@ -17,7 +17,6 @@
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
- <version>${commons-logging.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
diff --git a/modules/plugins/cobbler/pom.xml b/modules/plugins/cobbler/pom.xml
index 8321f4e..c01634b 100644
--- a/modules/plugins/cobbler/pom.xml
+++ b/modules/plugins/cobbler/pom.xml
@@ -25,7 +25,6 @@
<dependency>
<groupId>ant-contrib</groupId>
<artifactId>ant-contrib</artifactId>
- <version>${ant.contrib.version}</version>
<scope>provided</scope>
</dependency>
@@ -38,7 +37,6 @@
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
- <version>1.4</version>
</dependency>
</dependencies>
@@ -271,7 +269,6 @@
<artifactItem>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
- <version>1.4</version>
</artifactItem>
</artifactItems>
<outputDirectory>${project.build.outputDirectory}/lib</outputDirectory>
diff --git a/modules/plugins/cron/pom.xml b/modules/plugins/cron/pom.xml
index 6ed701b..27f290b 100644
--- a/modules/plugins/cron/pom.xml
+++ b/modules/plugins/cron/pom.xml
@@ -24,7 +24,6 @@
<dependency>
<groupId>ant-contrib</groupId>
<artifactId>ant-contrib</artifactId>
- <version>${ant.contrib.version}</version>
<scope>provided</scope>
</dependency>
diff --git a/modules/plugins/grub/pom.xml b/modules/plugins/grub/pom.xml
index d77acf5..4a3ad1d 100644
--- a/modules/plugins/grub/pom.xml
+++ b/modules/plugins/grub/pom.xml
@@ -24,7 +24,6 @@
<dependency>
<groupId>ant-contrib</groupId>
<artifactId>ant-contrib</artifactId>
- <version>${ant.contrib.version}</version>
<scope>provided</scope>
</dependency>
diff --git a/modules/plugins/hadoop/pom.xml b/modules/plugins/hadoop/pom.xml
index 1a6c591..dd99a37 100644
--- a/modules/plugins/hadoop/pom.xml
+++ b/modules/plugins/hadoop/pom.xml
@@ -110,7 +110,6 @@
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
- <version>${commons-logging.version}</version>
</dependency>
<dependency>
<groupId>org.rhq</groupId>
diff --git a/modules/plugins/hosts/pom.xml b/modules/plugins/hosts/pom.xml
index 467397e..9ca39d3 100644
--- a/modules/plugins/hosts/pom.xml
+++ b/modules/plugins/hosts/pom.xml
@@ -26,7 +26,6 @@
<dependency>
<groupId>ant-contrib</groupId>
<artifactId>ant-contrib</artifactId>
- <version>${ant.contrib.version}</version>
<scope>provided</scope>
</dependency>
diff --git a/modules/plugins/irc/pom.xml b/modules/plugins/irc/pom.xml
index fc69a41..875e82f 100644
--- a/modules/plugins/irc/pom.xml
+++ b/modules/plugins/irc/pom.xml
@@ -128,7 +128,6 @@
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
- <version>${commons-logging.version}</version>
</dependency>
<dependency>
<groupId>org.rhq</groupId>
diff --git a/modules/plugins/jboss-as-5/pom.xml b/modules/plugins/jboss-as-5/pom.xml
index f2a81a1..3eb65a7 100644
--- a/modules/plugins/jboss-as-5/pom.xml
+++ b/modules/plugins/jboss-as-5/pom.xml
@@ -64,7 +64,6 @@
<dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
- <version>2.4</version>
</dependency>
<dependency>
@@ -144,14 +143,12 @@
<dependency>
<groupId>org.powermock</groupId>
<artifactId>powermock-module-testng</artifactId>
- <version>${powermock.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.powermock</groupId>
<artifactId>powermock-api-mockito</artifactId>
- <version>${powermock.version}</version>
<scope>test</scope>
</dependency>
@@ -188,7 +185,6 @@
<artifactItem>
<groupId>jboss</groupId>
<artifactId>jbpm</artifactId>
- <version>3.1.1</version>
</artifactItem>
<artifactItem>
<groupId>ant</groupId>
diff --git a/modules/plugins/jboss-as-5/testsuite/pom.xml b/modules/plugins/jboss-as-5/testsuite/pom.xml
index dd1949e..ca6399a 100644
--- a/modules/plugins/jboss-as-5/testsuite/pom.xml
+++ b/modules/plugins/jboss-as-5/testsuite/pom.xml
@@ -74,7 +74,6 @@
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
- <version>2.4</version>
<scope>provided</scope>
<!-- by JBossAS -->
</dependency>
diff --git a/modules/plugins/jboss-as-7/pom.xml b/modules/plugins/jboss-as-7/pom.xml
index 1f63c91..1a5f119 100644
--- a/modules/plugins/jboss-as-7/pom.xml
+++ b/modules/plugins/jboss-as-7/pom.xml
@@ -71,7 +71,6 @@
<dependency>
<groupId>commons-httpclient</groupId>
<artifactId>commons-httpclient</artifactId>
- <version>${commons-httpclient.version}</version>
<exclusions>
<exclusion>
<groupId>commons-codec</groupId>
@@ -83,7 +82,6 @@
<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
- <version>${commons-codec.version}</version>
</dependency>
<!-- === Test Deps === -->
diff --git a/modules/plugins/jboss-as/pom.xml b/modules/plugins/jboss-as/pom.xml
index d1f4c74..8a5b6c9 100644
--- a/modules/plugins/jboss-as/pom.xml
+++ b/modules/plugins/jboss-as/pom.xml
@@ -74,14 +74,12 @@
<dependency>
<groupId>org.powermock</groupId>
<artifactId>powermock-module-testng</artifactId>
- <version>${powermock.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.powermock</groupId>
<artifactId>powermock-api-mockito</artifactId>
- <version>${powermock.version}</version>
<scope>test</scope>
</dependency>
@@ -124,7 +122,6 @@
<artifactItem>
<groupId>jboss</groupId>
<artifactId>jbpm</artifactId>
- <version>3.1.1</version>
</artifactItem>
<artifactItem>
<groupId>ant</groupId>
@@ -152,7 +149,6 @@
<artifactItem>
<groupId>jboss</groupId>
<artifactId>jbpm</artifactId>
- <version>3.1.1</version>
</artifactItem>
<artifactItem>
<groupId>ant</groupId>
diff --git a/modules/plugins/mod-cluster/pom.xml b/modules/plugins/mod-cluster/pom.xml
index 804b04a..62ffc81 100644
--- a/modules/plugins/mod-cluster/pom.xml
+++ b/modules/plugins/mod-cluster/pom.xml
@@ -40,7 +40,6 @@
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
- <version>1.2.14</version>
<scope>provided</scope>
</dependency>
diff --git a/modules/plugins/netservices/pom.xml b/modules/plugins/netservices/pom.xml
index 03a4cbd..22db736 100644
--- a/modules/plugins/netservices/pom.xml
+++ b/modules/plugins/netservices/pom.xml
@@ -25,12 +25,10 @@
<dependency>
<groupId>commons-httpclient</groupId>
<artifactId>commons-httpclient</artifactId>
- <version>${commons-httpclient.version}</version>
</dependency>
<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
- <version>${commons-codec.version}</version>
</dependency>
<!-- Test dependencies -->
@@ -141,7 +139,6 @@
<artifactItem>
<groupId>commons-httpclient</groupId>
<artifactId>commons-httpclient</artifactId>
- <version>${commons-httpclient.version}</version>
</artifactItem>
<artifactItem>
<groupId>commons-codec</groupId>
diff --git a/modules/plugins/pattern-generator/pom.xml b/modules/plugins/pattern-generator/pom.xml
index 7fe46e5..1d40834 100644
--- a/modules/plugins/pattern-generator/pom.xml
+++ b/modules/plugins/pattern-generator/pom.xml
@@ -122,7 +122,6 @@
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
- <version>${commons-logging.version}</version>
</dependency>
<dependency>
<groupId>${rhq.groupId}</groupId>
diff --git a/modules/plugins/perftest/pom.xml b/modules/plugins/perftest/pom.xml
index 7ccffa7..593a70b 100644
--- a/modules/plugins/perftest/pom.xml
+++ b/modules/plugins/perftest/pom.xml
@@ -33,7 +33,6 @@
<plugin>
<groupId>com.sun.tools.xjc.maven2</groupId>
<artifactId>maven-jaxb-plugin</artifactId>
- <version>1.1</version>
<executions>
<execution>
<goals>
diff --git a/modules/plugins/postfix/pom.xml b/modules/plugins/postfix/pom.xml
index 69a3b7d..6ee7474 100644
--- a/modules/plugins/postfix/pom.xml
+++ b/modules/plugins/postfix/pom.xml
@@ -24,7 +24,6 @@
<dependency>
<groupId>ant-contrib</groupId>
<artifactId>ant-contrib</artifactId>
- <version>${ant.contrib.version}</version>
<scope>provided</scope>
</dependency>
diff --git a/modules/plugins/raw-config-test/pom.xml b/modules/plugins/raw-config-test/pom.xml
index 80bf531..c615a39 100644
--- a/modules/plugins/raw-config-test/pom.xml
+++ b/modules/plugins/raw-config-test/pom.xml
@@ -6,7 +6,7 @@
<parent>
<artifactId>rhq-plugins-parent</artifactId>
<groupId>org.rhq</groupId>
- <version>4.3.0-SNAPSHOT</version>
+ <version>4.7.0-SNAPSHOT</version>
</parent>
<groupId>org.rhq.plugins</groupId>
@@ -28,13 +28,11 @@
<dependency>
<groupId>org.codehaus.groovy</groupId>
<artifactId>groovy-all</artifactId>
- <version>1.7.0</version>
</dependency>
<dependency>
<groupId>commons-configuration</groupId>
<artifactId>commons-configuration</artifactId>
- <version>1.6</version>
</dependency>
</dependencies>
@@ -43,7 +41,6 @@
<plugin>
<groupId>org.codehaus.groovy.maven</groupId>
<artifactId>gmaven-plugin</artifactId>
- <version>1.0</version>
<executions>
<execution>
<goals>
@@ -68,7 +65,6 @@
<artifactItem>
<groupId>org.codehaus.groovy</groupId>
<artifactId>groovy-all</artifactId>
- <version>1.7.0</version>
</artifactItem>
<artifactItem>
<groupId>org.apache.ant</groupId>
@@ -83,17 +79,14 @@
<artifactItem>
<groupId>commons-configuration</groupId>
<artifactId>commons-configuration</artifactId>
- <version>1.6</version>
</artifactItem>
<artifactItem>
<groupId>commons-collections</groupId>
<artifactId>commons-collections</artifactId>
- <version>3.2.1</version>
</artifactItem>
<artifactItem>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
- <version>2.4</version>
</artifactItem>
<artifactItem>
<groupId>commons-logging</groupId>
diff --git a/modules/plugins/samba/pom.xml b/modules/plugins/samba/pom.xml
index a392c58..23dadb6 100644
--- a/modules/plugins/samba/pom.xml
+++ b/modules/plugins/samba/pom.xml
@@ -24,7 +24,6 @@
<dependency>
<groupId>ant-contrib</groupId>
<artifactId>ant-contrib</artifactId>
- <version>${ant.contrib.version}</version>
<scope>provided</scope>
</dependency>
diff --git a/modules/plugins/snmptrapd/pom.xml b/modules/plugins/snmptrapd/pom.xml
index 4805c8f..ae92638 100644
--- a/modules/plugins/snmptrapd/pom.xml
+++ b/modules/plugins/snmptrapd/pom.xml
@@ -164,7 +164,6 @@
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
- <version>${commons-logging.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
diff --git a/modules/plugins/sshd/pom.xml b/modules/plugins/sshd/pom.xml
index 92e76ef..93856c9 100644
--- a/modules/plugins/sshd/pom.xml
+++ b/modules/plugins/sshd/pom.xml
@@ -24,7 +24,6 @@
<dependency>
<groupId>ant-contrib</groupId>
<artifactId>ant-contrib</artifactId>
- <version>${ant.contrib.version}</version>
<scope>provided</scope>
</dependency>
diff --git a/modules/plugins/sudoers/pom.xml b/modules/plugins/sudoers/pom.xml
index 053fac0..d10ef73 100644
--- a/modules/plugins/sudoers/pom.xml
+++ b/modules/plugins/sudoers/pom.xml
@@ -24,7 +24,6 @@
<dependency>
<groupId>ant-contrib</groupId>
<artifactId>ant-contrib</artifactId>
- <version>${ant.contrib.version}</version>
<scope>provided</scope>
</dependency>
diff --git a/modules/plugins/tomcat/pom.xml b/modules/plugins/tomcat/pom.xml
index 9ded2f5..8cdd836 100644
--- a/modules/plugins/tomcat/pom.xml
+++ b/modules/plugins/tomcat/pom.xml
@@ -27,14 +27,12 @@
<dependency>
<groupId>org.powermock</groupId>
<artifactId>powermock-module-testng</artifactId>
- <version>${powermock.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.powermock</groupId>
<artifactId>powermock-api-mockito</artifactId>
- <version>${powermock.version}</version>
<scope>test</scope>
</dependency>
diff --git a/modules/plugins/twitter/pom.xml b/modules/plugins/twitter/pom.xml
index 6f00f3f..52e155c 100644
--- a/modules/plugins/twitter/pom.xml
+++ b/modules/plugins/twitter/pom.xml
@@ -120,7 +120,6 @@
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
- <version>${commons-logging.version}</version>
</dependency>
<dependency>
<groupId>org.rhq</groupId>
diff --git a/modules/test-utils/pom.xml b/modules/test-utils/pom.xml
index ee5bbfd..07e3aa1 100644
--- a/modules/test-utils/pom.xml
+++ b/modules/test-utils/pom.xml
@@ -27,7 +27,6 @@
<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
- <version>${testng.version}</version>
<scope>compile</scope>
</dependency>
<dependency>
@@ -84,7 +83,7 @@
<dependency>
<groupId>org.unitils</groupId>
<artifactId>unitils-testng</artifactId>
- <version>3.1</version>
+ <version>3.1</version>
<exclusions>
<exclusion>
<groupId>org.testng</groupId>
diff --git a/pom.xml b/pom.xml
index 9510607..b849d13 100644
--- a/pom.xml
+++ b/pom.xml
@@ -69,7 +69,7 @@
<!-- Start: JBoss AS Dependency Versions
The dependency versions below are declared together as the versions of each are dependent on the
overall JBoss AS Server version. Meaning, the AS provides these libs. When the Server
- version is changed the versions of each of these should be validated and updated as needed.
+ version is changed the versions of each of these should be validated and updated as needed.
-->
<jboss.version>7.1.1.Final</jboss.version>
<jboss.javaee6.spec.version>3.0.0.Final</jboss.javaee6.spec.version>
@@ -78,7 +78,7 @@
<antlr.version>2.7.7</antlr.version>
<hibernate.version>4.0.1.Final</hibernate.version>
<hibernate-annotations.version>3.5.6-Final</hibernate-annotations.version>
- <hibernate-jpa-2.0-api.version>1.0.1.Final</hibernate-jpa-2.0-api.version>
+ <hibernate-jpa-2.0-api.version>1.0.1.Final</hibernate-jpa-2.0-api.version>
<infinispan.version>5.1.2.FINAL</infinispan.version>
<javax.annotation.api.version>1.0.1.Final</javax.annotation.api.version>
<javax.ejb.api.version>1.0.2.Final</javax.ejb.api.version>
@@ -95,23 +95,23 @@
<jboss-remotingjmx.version>1.0.2.Final</jboss-remotingjmx.version>
<jboss-transaction-api.version>1.0.0.Final</jboss-transaction-api.version>
<picketbox.version>4.0.7.Final</picketbox.version>
- <resteasy.version>2.3.4.Final</resteasy.version>
+ <resteasy.version>2.3.4.Final</resteasy.version>
<jboss-staxmapper.version>1.1.0.Final</jboss-staxmapper.version>
<jboss-modules.version>1.1.1.GA</jboss-modules.version>
<jboss-dmr.version>1.1.1.Final</jboss-dmr.version>
<jboss-msc.version>1.0.2.GA</jboss-msc.version>
<!-- Not Provided - some of these are needed by the agent -->
- <jboss-annotations.version>4.2.3.GA</jboss-annotations.version>
+ <jboss-annotations.version>4.2.3.GA</jboss-annotations.version>
<jboss-cache.version>1.4.1.SP9</jboss-cache.version>
- <jboss-jmx.version>4.2.3.GA</jboss-jmx.version>
- <jboss-common.version>1.2.1.GA</jboss-common.version> <!-- note this is the old commons we used, not the newer commons-core -->
+ <jboss-jmx.version>4.2.3.GA</jboss-jmx.version>
+ <jboss-common.version>1.2.1.GA</jboss-common.version> <!-- note this is the old commons we used, not the newer commons-core -->
<jboss-remoting.version>2.5.4.SP4</jboss-remoting.version>
<jboss-serialization.version>1.0.3.GA</jboss-serialization.version>
- <jboss-system.version>4.2.3.GA</jboss-system.version>
+ <jboss-system.version>4.2.3.GA</jboss-system.version>
<jbosssx.version>4.2.3.GA</jbosssx.version>
-
-
+
+
<!-- End: JBoss AS Dependency Versions -->
<commons-logging.version>1.1.0.jboss</commons-logging.version>
@@ -121,7 +121,7 @@
<i18nlog.version>1.0.10</i18nlog.version>
<jsf-api.version>1.2_14</jsf-api.version>
<jsf-impl.version>1.2_14</jsf-impl.version>
- <log4j.version>1.2.16</log4j.version>
+ <log4j.version>1.2.14</log4j.version>
<ojdbc6.version>11.2.0.3.0</ojdbc6.version>
<ems.version>1.3</ems.version>
<postgresql.version>9.2-1002.jdbc4</postgresql.version>
@@ -148,9 +148,22 @@
<arquillian.jboss.container.version>7.1.1.Final</arquillian.jboss.container.version>
<shrinkwrap-resolver.version>2.0.0-alpha-7</shrinkwrap-resolver.version>
<xercesImpl.version>2.9.1-jbossas-2</xercesImpl.version> <!-- see BZ-820629 and CVE-2009-2625 -->
- <opencsv.version>1.8</opencsv.version>
+ <opencsv.version>1.8</opencsv.version>
<commons-httpclient.version>3.0.1</commons-httpclient.version>
-
+ <commons-io.version>1.4</commons-io.version>
+ <commons-lang.version>2.4</commons-lang.version>
+ <commons-codec.version>1.4</commons-codec.version>
+ <commons-validator.version>1.1.4</commons-validator.version>
+ <commons-collections.version>3.2.1</commons-collections.version>
+ <commons-configuration.version>1.6</commons-configuration.version>
+
+ <junit.version>4.8.2</junit.version>
+ <liquibase-core.version>1.9.5</liquibase-core.version>
+ <jbpm.version>3.1.1</jbpm.version>
+ <servlet-api.version>2.4</servlet-api.version>
+
+ <mockito-core.version>1.9.0</mockito-core.version>
+
<rhq.db.admin.username>rhqadmin</rhq.db.admin.username>
<rhq.db.admin.password>rhqadmin</rhq.db.admin.password>
@@ -233,7 +246,7 @@
<jacoco.version>0.6.0.201210061924</jacoco.version>
<jacoco-arquillian-extension.version>1.0.0.Alpha5</jacoco-arquillian-extension.version>
</properties>
-
+
<dependencyManagement>
@@ -243,7 +256,7 @@
The dependencies below are declared together as the versions of each are dependent on the
overall JBoss AS Server version. Meaning, the AS provides these libs. When the Server
version is changed the versions of each of these should be validated and updated as needed. -->
-
+
<dependency>
<groupId>org.jboss.as</groupId>
<artifactId>jboss-as-dist</artifactId>
@@ -275,18 +288,18 @@
<version>${javax.annotation.api.version}</version>
</dependency>
- <dependency>
+ <dependency>
<groupId>org.jboss.spec.javax.ejb</groupId>
<artifactId>jboss-ejb-api_3.1_spec</artifactId>
<version>${javax.ejb.api.version}</version>
</dependency>
- <dependency>
+ <dependency>
<groupId>org.jboss.spec.javax.jms</groupId>
<artifactId>jboss-jms-api_1.1_spec</artifactId>
<version>${javax.jms.api.version}</version>
</dependency>
-
+
<dependency>
<groupId>org.javassist</groupId>
<artifactId>javassist</artifactId>
@@ -371,6 +384,12 @@
<version>${jboss-msc.version}</version>
</dependency>
+ <dependency>
+ <groupId>jboss</groupId>
+ <artifactId>jbpm</artifactId>
+ <version>${jbpm.version}</version>
+ </dependency>
+
<!-- see BZ-820629 and CVE-2009-2625 for why this is needed -->
<dependency>
<groupId>xerces</groupId>
@@ -386,6 +405,48 @@
<version>${commons-logging.version}</version>
</dependency>
+ <dependency>
+ <groupId>commons-lang</groupId>
+ <artifactId>commons-lang</artifactId>
+ <version>${commons-lang.version}</version>
+ </dependency>
+
+ <dependency>
+ <groupId>commons-io</groupId>
+ <artifactId>commons-io</artifactId>
+ <version>${commons-io.version}</version>
+ </dependency>
+
+ <dependency>
+ <groupId>commons-codec</groupId>
+ <artifactId>commons-codec</artifactId>
+ <version>${commons-codec.version}</version>
+ </dependency>
+
+ <dependency>
+ <groupId>commons-validator</groupId>
+ <artifactId>commons-validator</artifactId>
+ <version>${commons-validator.version}</version>
+ </dependency>
+
+ <dependency>
+ <groupId>commons-collections</groupId>
+ <artifactId>commons-collections</artifactId>
+ <version>${commons-collections.version}</version>
+ </dependency>
+
+ <dependency>
+ <groupId>commons-configuration</groupId>
+ <artifactId>commons-configuration</artifactId>
+ <version>${commons-configuration.version}</version>
+ </dependency>
+
+ <dependency>
+ <groupId>commons-httpclient</groupId>
+ <artifactId>commons-httpclient</artifactId>
+ <version>${commons-httpclient.version}</version>
+ </dependency>
+
<!-- GNU GetOpt (any modules that need to do command-line argument parsing should use this) -->
<dependency>
<groupId>gnu-getopt</groupId>
@@ -606,7 +667,7 @@
<artifactId>jboss-javaee-6.0</artifactId>
<version>${jboss.javaee6.spec.version}</version>
<type>pom</type>
- <scope>import</scope>
+ <scope>import,provided</scope>
</dependency>
<!-- We want the shrinkwrap dependency resolver to be newer than that included in the Arquillian BOM.
@@ -617,7 +678,7 @@
<version>${shrinkwrap-resolver.version}</version>
<scope>import</scope>
<type>pom</type>
- </dependency>
+ </dependency>
<!-- This will pull in the compatible versions of shrinkwrap deps too. Note that we want to use an explicit
version for the shrinkwrap resolver, which revs more often and has bugfixes. -->
<dependency>
@@ -645,6 +706,54 @@
<artifactId>org.jacoco.core</artifactId>
<version>${jacoco.version}</version>
</dependency>
+
+ <dependency>
+ <groupId>org.liquibase</groupId>
+ <artifactId>liquibase-core</artifactId>
+ <version>${liquibase-core.version}</version>
+ </dependency>
+
+ <dependency>
+ <groupId>org.mockito</groupId>
+ <artifactId>mockito-core</artifactId>
+ <version>${mockito-core.version}</version>
+ </dependency>
+
+ <dependency>
+ <groupId>org.powermock</groupId>
+ <artifactId>powermock-module-testng</artifactId>
+ <version>${powermock.version}</version>
+ </dependency>
+
+ <dependency>
+ <groupId>org.powermock</groupId>
+ <artifactId>powermock-api-mockito</artifactId>
+ <version>${powermock.version}</version>
+ </dependency>
+
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <version>${junit.version}</version>
+ </dependency>
+
+ <dependency>
+ <groupId>javax.servlet</groupId>
+ <artifactId>servlet-api</artifactId>
+ <version>${servlet-api.version}</version>
+ </dependency>
+
+ <dependency>
+ <groupId>org.testng</groupId>
+ <artifactId>testng</artifactId>
+ <version>${testng.version}</version>
+ </dependency>
+
+ <dependency>
+ <groupId>log4j</groupId>
+ <artifactId>log4j</artifactId>
+ <version>${log4j.version}</version>
+ </dependency>
</dependencies>
</dependencyManagement>
@@ -705,7 +814,7 @@
<dependency>
<groupId>ant-contrib</groupId>
<artifactId>ant-contrib</artifactId>
- <version>1.0b3</version>
+ <version>${ant.contrib.version}</version>
<exclusions>
<exclusion>
<groupId>ant</groupId>
@@ -821,7 +930,11 @@
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>2.1</version>
- </plugin>
+ </plugin>
+ <plugin>
+ <artifactId>maven-surefire-report-plugin</artifactId>
+ <version>2.6</version>
+ </plugin>
<!-- === Codehaus Mojo Plugins === -->
<plugin>
@@ -839,7 +952,7 @@
<artifactId>exec-maven-plugin</artifactId>
<!-- NOTE: Version 1.2 of this plugin appears to be broken, so do not
upgrade to that version. -->
- <version>1.1</version>
+ <version>1.2.1</version>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
@@ -867,11 +980,17 @@
<version>${clirr.version}</version>
</plugin>
<plugin>
- <groupId>org.codehaus.mojo</groupId>
+ <groupId>org.codehaus.mojo</groupId>
<artifactId>xml-maven-plugin</artifactId>
<version>1.0</version>
</plugin>
-
+
+ <plugin>
+ <groupId>org.codehaus.groovy.maven</groupId>
+ <artifactId>gmaven-plugin</artifactId>
+ <version>1.0</version>
+ </plugin>
+
<plugin>
<groupId>com.googlecode.maven-overview-plugin</groupId>
<artifactId>maven-overview-plugin</artifactId>
@@ -898,7 +1017,19 @@
<artifactId>jacoco-maven-plugin</artifactId>
<version>${jacoco.version}</version>
</plugin>
- </plugins>
+
+ <plugin>
+ <groupId>com.sun.tools.xjc.maven2</groupId>
+ <artifactId>maven-jaxb-plugin</artifactId>
+ <version>1.1</version>
+ </plugin>
+
+ <plugin>
+ <groupId>org.antlr</groupId>
+ <artifactId>antlr3-maven-plugin</artifactId>
+ <version>3.2</version>
+ </plugin>
+ </plugins>
</pluginManagement>
@@ -1353,21 +1484,21 @@
<name>code-coverage</name>
</property>
</activation>
-
+
<dependencies>
<dependency>
<groupId>org.jboss.arquillian.extension</groupId>
<artifactId>arquillian-jacoco</artifactId>
<scope>test</scope>
</dependency>
-
+
<dependency>
<groupId>org.jacoco</groupId>
<artifactId>org.jacoco.core</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
-
+
<build>
<plugins>
<!-- This definition creates the 2 independent coverage reports -
@@ -1786,8 +1917,13 @@
<reportSets>
<reportSet>
</reportSet>
- </reportSets>
- </plugin>
+ </reportSets>
+ </plugin>
+
+ <plugin>
+ <artifactId>maven-surefire-report-plugin</artifactId>
+ <version>2.6</version>
+ </plugin>
<!--
<plugin>
11 years, 2 months
[rhq] Branch 'bug/rhq-1' - 3 commits - modules/core modules/enterprise
by mazz
modules/core/util/src/main/java/org/rhq/core/util/preferences/FilePreferencesFactory.java | 4
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/deploy/selection/SingleCompatibleResourceGroupSelector.java | 2
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/selector/SingleResourceGroupSelectorItem.java | 85 +
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/definitions/GroupDefinitionExpressionBuilder.java | 213 +++-
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/selection/SingleResourceGroupSelector.java | 2
modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages.properties | 2
modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_cs.properties | 2
modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_de.properties | 3
modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_ja.properties | 4
modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_ko.properties | 5
modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_pt.properties | 2
modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_ru.properties | 4
modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_zh.properties | 2
modules/enterprise/server/itests-2/src/test/java/org/rhq/enterprise/server/resource/group/definition/framework/test/ExpressionEvaluatorTest.java | 443 +++-------
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/group/definition/framework/ExpressionEvaluator.java | 87 +
15 files changed, 467 insertions(+), 393 deletions(-)
New commits:
commit 88f63f2f302037d4d310e78b29366cebdd86807b
Merge: 2b5f6f6 438c805
Author: John Mazzitelli <mazz(a)redhat.com>
Date: Thu Mar 21 16:27:54 2013 -0400
Merge remote-tracking branch 'origin/master' into bug/rhq-1
commit 438c80560c8faeff638f2640cd8278aa4c214aaf
Author: Jay Shaughnessy <jshaughn(a)redhat.com>
Date: Thu Mar 21 16:12:26 2013 -0400
Bug 832398
RFE: Enable DynaGroups to be created based on the contents of another group
Introduce 'memberof = GroupName' expression into the group definition
language. memberof will restrict the dynagroup members to be a subset
of the specified resource group. Specifying multiple memberof
conditions will restrict the dynagroup members to be a subset of the
union of members of the specified groups.
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/deploy/selection/SingleCompatibleResourceGroupSelector.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/deploy/selection/SingleCompatibleResourceGroupSelector.java
index d370861..7e31550 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/deploy/selection/SingleCompatibleResourceGroupSelector.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/deploy/selection/SingleCompatibleResourceGroupSelector.java
@@ -31,6 +31,8 @@ import org.rhq.core.domain.criteria.ResourceGroupCriteria;
import org.rhq.enterprise.gui.coregui.client.CoreGUI;
import org.rhq.enterprise.gui.coregui.client.inventory.groups.ResourceGroupsDataSource;
+@Deprecated
+// could use SingleResourceGroupSelectorItem seeded with addFilterBundleTargetableOnly(true);
public class SingleCompatibleResourceGroupSelector extends ComboBoxItem {
public SingleCompatibleResourceGroupSelector(String name, String title) {
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/selector/SingleResourceGroupSelectorItem.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/selector/SingleResourceGroupSelectorItem.java
new file mode 100644
index 0000000..027cafc
--- /dev/null
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/selector/SingleResourceGroupSelectorItem.java
@@ -0,0 +1,85 @@
+/*
+ * RHQ Management Platform
+ * Copyright (C) 2005-2013 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.components.selector;
+
+import com.smartgwt.client.data.DSRequest;
+import com.smartgwt.client.types.TextMatchStyle;
+import com.smartgwt.client.widgets.form.fields.ComboBoxItem;
+import com.smartgwt.client.widgets.grid.ListGridField;
+
+import org.rhq.core.domain.criteria.ResourceGroupCriteria;
+import org.rhq.enterprise.gui.coregui.client.CoreGUI;
+import org.rhq.enterprise.gui.coregui.client.inventory.groups.ResourceGroupsDataSource;
+
+public class SingleResourceGroupSelectorItem extends ComboBoxItem {
+
+ private ResourceGroupCriteria criteria;
+
+ /**
+ * @param name
+ * @param title
+ * @param criteria initial values for filterId and filterName may be edited in the drop down but will be applied to
+ * the initial fetch.
+ */
+ public SingleResourceGroupSelectorItem(String name, String title, ResourceGroupCriteria criteria) {
+ super(name, title);
+
+ ListGridField nameField = new ListGridField("name");
+ ListGridField descriptionField = new ListGridField("description");
+
+ setOptionDataSource(new CompatibleResourceGroupsDataSource());
+
+ setWidth(240);
+ setTitle(CoreGUI.getMessages().common_title_resource_group());
+
+ setValueField("id");
+ setDisplayField("name");
+ setPickListWidth(450);
+ setPickListFields(nameField, descriptionField);
+ setTextMatchStyle(TextMatchStyle.SUBSTRING);
+
+ this.criteria = (null == criteria) ? new ResourceGroupCriteria() : criteria;
+ }
+
+ protected class CompatibleResourceGroupsDataSource extends ResourceGroupsDataSource {
+
+ @Override
+ protected ResourceGroupCriteria getFetchCriteria(final DSRequest request) {
+ // We don't want to use the superclass's getFetchCriteria because our selected value
+ // is either a Integer (when a real group has been selected) or a String (when a partial search string is selected).
+ // So, here we create our own criteria. See BZ 802528.
+ ResourceGroupCriteria result = criteria;
+ String filterString = getFilter(request, "id", String.class);
+ if (filterString != null) {
+ try {
+ Integer id = new Integer(filterString);
+ result.addFilterId(id);
+ } catch (Exception e) {
+ result.addFilterName(filterString);
+ }
+ }
+
+ return result;
+ }
+ }
+}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/definitions/GroupDefinitionExpressionBuilder.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/definitions/GroupDefinitionExpressionBuilder.java
index e7e6181..bb49a93 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/definitions/GroupDefinitionExpressionBuilder.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/definitions/GroupDefinitionExpressionBuilder.java
@@ -54,6 +54,7 @@ import org.rhq.core.domain.util.PageList;
import org.rhq.enterprise.gui.coregui.client.CoreGUI;
import org.rhq.enterprise.gui.coregui.client.Messages;
import org.rhq.enterprise.gui.coregui.client.components.form.SortedSelectItem;
+import org.rhq.enterprise.gui.coregui.client.components.selector.SingleResourceGroupSelectorItem;
import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup;
import org.rhq.enterprise.gui.coregui.client.gwt.GroupDefinitionExpressionBuilderGWTServiceAsync;
import org.rhq.enterprise.gui.coregui.client.util.enhanced.EnhancedVLayout;
@@ -78,6 +79,8 @@ public class GroupDefinitionExpressionBuilder extends Window {
private SelectItem expressionTypeItem;
private SelectItem resourceItem;
private RadioGroupItem groupByItem;
+ private RadioGroupItem memberOfItem;
+ private SingleResourceGroupSelectorItem memberOfGroupItem;
private TextAreaItem expressionItem;
private ArrayList<String> plugins = new ArrayList<String>();
@@ -276,6 +279,33 @@ public class GroupDefinitionExpressionBuilder extends Window {
}
});
+ this.memberOfItem = new RadioGroupItem("memberOf", MSG.view_dynagroup_exprBuilder_memberOf());
+ this.memberOfItem.setTooltip(MSG.view_dynagroup_exprBuilder_memberOf_tooltip());
+ this.memberOfItem.setHoverWidth(250);
+ this.memberOfItem.setDefaultValue(MSG.common_val_no());
+ this.memberOfItem.setValueMap(MSG.common_val_yes(), MSG.common_val_no());
+ this.memberOfItem.setVertical(false);
+ this.memberOfItem.addChangedHandler(new ChangedHandler() {
+ @Override
+ public void onChanged(ChangedEvent event) {
+ enableDisableComponents();
+ buildExpressionValue();
+ }
+ });
+
+ this.memberOfGroupItem = new SingleResourceGroupSelectorItem("memberOfGroup", MSG.common_title_group(), null);
+ this.memberOfGroupItem.setTooltip(MSG.view_dynagroup_exprBuilder_groupBy_tooltip());
+ this.memberOfGroupItem.setHoverWidth(250);
+ this.memberOfGroupItem.setRedrawOnChange(true);
+ this.memberOfGroupItem.setWidth("*");
+ this.memberOfGroupItem.setDefaultToFirstOption(true);
+ this.memberOfGroupItem.addChangedHandler(new ChangedHandler() {
+ @Override
+ public void onChanged(ChangedEvent event) {
+ buildExpressionValue();
+ }
+ });
+
this.groupByItem = new RadioGroupItem("groupBy", MSG.view_dynagroup_exprBuilder_groupBy());
this.groupByItem.setTooltip(MSG.view_dynagroup_exprBuilder_groupBy_tooltip());
this.groupByItem.setHoverWidth(250);
@@ -332,9 +362,9 @@ public class GroupDefinitionExpressionBuilder extends Window {
form.setAutoWidth();
form.setAutoHeight();
form.setCellPadding(5);
- form.setFields(this.expressionItem, this.groupByItem, this.resourceItem, this.expressionTypeItem,
- this.pluginItem, this.resourceTypeItem, this.propertyNameItem, this.unsetItem, this.compareTypeItem,
- this.valueItem, addButton, closeButton);
+ form.setFields(this.expressionItem, this.memberOfItem, this.memberOfGroupItem, this.groupByItem,
+ this.resourceItem, this.expressionTypeItem, this.pluginItem, this.resourceTypeItem, this.propertyNameItem,
+ this.unsetItem, this.compareTypeItem, this.valueItem, addButton, closeButton);
EnhancedVLayout layout = new EnhancedVLayout();
layout.setLayoutMargin(5);
@@ -369,56 +399,87 @@ public class GroupDefinitionExpressionBuilder extends Window {
public void addExpression(String newExpression);
}
+ private boolean shouldMemberOfGroupBeDisabled() {
+ String expressionType = this.expressionTypeItem.getValueAsString();
+
+ if (MSG.common_val_no().equals(this.memberOfItem.getValueAsString())) {
+ return true;
+ }
+ return false; // they are enabled otherwise
+ }
+
+ private boolean shouldResourceAndExpressionTypeBeDisabled() {
+ String expressionType = this.expressionTypeItem.getValueAsString();
+
+ if (MSG.common_val_yes().equals(this.memberOfItem.getValueAsString())) {
+ return true;
+ }
+ return false; // they are enabled otherwise
+ }
+
private boolean shouldPluginAndResourceTypeBeDisabled() {
String expressionType = this.expressionTypeItem.getValueAsString();
+ if (MSG.common_val_yes().equals(this.memberOfItem.getValueAsString())) {
+ return true;
+ }
if (MSG.view_dynagroup_exprBuilder_expressionType_resource().equals(expressionType)) {
return true;
- } else if (MSG.view_dynagroup_exprBuilder_expressionType_resourceCategory().equals(expressionType)) {
+ }
+ if (MSG.view_dynagroup_exprBuilder_expressionType_resourceCategory().equals(expressionType)) {
return true;
- } else if ((MSG.view_dynagroup_exprBuilder_expressionType_resourceType().equals(expressionType))
+ }
+ if ((MSG.view_dynagroup_exprBuilder_expressionType_resourceType().equals(expressionType))
&& (MSG.common_val_yes().equals(groupByItem.getValueAsString()))) {
return true;
}
+
return false; // they are enabled otherwise
}
private boolean shouldComparisonTypeAndValueBeDisabled() {
+ boolean memberOf = MSG.common_val_yes().equals(this.memberOfItem.getValueAsString());
boolean groupBy = MSG.common_val_yes().equals(this.groupByItem.getValueAsString());
boolean unset = MSG.common_val_yes().equals(this.unsetItem.getValueAsString());
String expressionType = this.expressionTypeItem.getValueAsString();
- if (groupBy) {
+ if (groupBy || memberOf || unset) {
return true;
- } else if (unset) {
- return true;
- } else if (MSG.view_dynagroup_exprBuilder_expressionType_resourceType().equals(expressionType)) {
+ }
+ if (MSG.view_dynagroup_exprBuilder_expressionType_resourceType().equals(expressionType)) {
return true;
}
+
return false; // they are enabled otherwise
}
private boolean shouldGroupByBeDisabled() {
+ boolean memberOf = MSG.common_val_yes().equals(this.memberOfItem.getValueAsString());
boolean unset = MSG.common_val_yes().equals(this.unsetItem.getValueAsString());
- if (unset) {
+ if (memberOf || unset) {
return true;
}
return false; // enabled otherwise
}
private boolean shouldUnsetBeDisabled() {
+ boolean memberOf = MSG.common_val_yes().equals(this.memberOfItem.getValueAsString());
boolean groupBy = MSG.common_val_yes().equals(this.groupByItem.getValueAsString());
- if (groupBy) {
+ if (groupBy || memberOf) {
return true;
}
return false; // enabled otherwise
}
private boolean shouldPropertyNameBeDisabled() {
+ boolean memberOf = MSG.common_val_yes().equals(this.memberOfItem.getValueAsString());
String expressionType = this.expressionTypeItem.getValueAsString();
+ if (memberOf) {
+ return true;
+ }
if (MSG.view_dynagroup_exprBuilder_expressionType_resourceType().equals(expressionType)) {
return true;
} else if (MSG.view_dynagroup_exprBuilder_expressionType_resourceCategory().equals(expressionType)) {
@@ -546,12 +607,17 @@ public class GroupDefinitionExpressionBuilder extends Window {
}
private void enableDisableComponents() {
+ boolean memberOfGroupDisabled = shouldMemberOfGroupBeDisabled();
+ boolean resourceAndExpressionTypeDisabled = shouldResourceAndExpressionTypeBeDisabled();
boolean pluginAndResourceTypeDisabled = shouldPluginAndResourceTypeBeDisabled();
boolean comparisonTypeAndValueDisabled = shouldComparisonTypeAndValueBeDisabled();
boolean groupByDisabled = shouldGroupByBeDisabled();
boolean unsetDisabled = shouldUnsetBeDisabled();
boolean propertyNameDisabled = shouldPropertyNameBeDisabled();
+ this.memberOfGroupItem.setDisabled(memberOfGroupDisabled);
+ this.resourceItem.setDisabled(resourceAndExpressionTypeDisabled);
+ this.expressionTypeItem.setDisabled(resourceAndExpressionTypeDisabled);
this.pluginItem.setDisabled(pluginAndResourceTypeDisabled);
this.resourceTypeItem.setDisabled(pluginAndResourceTypeDisabled);
this.compareTypeItem.setDisabled(comparisonTypeAndValueDisabled);
@@ -565,83 +631,90 @@ public class GroupDefinitionExpressionBuilder extends Window {
private void buildExpressionValue() {
+ boolean memberOf = MSG.common_val_yes().equals(this.memberOfItem.getValueAsString());
boolean groupBy = MSG.common_val_yes().equals(groupByItem.getValueAsString());
boolean unset = MSG.common_val_yes().equals(unsetItem.getValueAsString());
StringBuilder buf = new StringBuilder();
- if (groupBy) {
- buf.append("groupby ");
- }
- if (unset) {
- buf.append("empty ");
- }
+ if (memberOf) {
+ buf.append("memberof = " + memberOfGroupItem.getDisplayValue());
- buf.append("resource.");
-
- String resourceLevel = resourceItem.getValueAsString();
- if (MSG.view_dynagroup_exprBuilder_resource_resource().equals(resourceLevel)) {
- // do nothing
- } else if (MSG.view_dynagroup_exprBuilder_resource_child().equals(resourceLevel)) {
- buf.append("child.");
- } else if (MSG.view_dynagroup_exprBuilder_resource_parent().equals(resourceLevel)) {
- buf.append("parent.");
- } else if (MSG.view_dynagroup_exprBuilder_resource_grandparent().equals(resourceLevel)) {
- buf.append("grandParent.");
- } else if (MSG.view_dynagroup_exprBuilder_resource_greatGrandparent().equals(resourceLevel)) {
- buf.append("greatGrandParent.");
- } else if (MSG.view_dynagroup_exprBuilder_resource_greatGreatGrandparent().equals(resourceLevel)) {
- buf.append("greatGreatGrandParent.");
- }
+ } else {
- String eType = expressionTypeItem.getValueAsString();
- if (MSG.view_dynagroup_exprBuilder_expressionType_resource().equals(eType)) {
- buf.append(propertyNameItem.getValueAsString());
- } else if (MSG.view_dynagroup_exprBuilder_expressionType_resourceType().equals(eType)) {
- buf.append("type.plugin");
- } else if (MSG.view_dynagroup_exprBuilder_expressionType_resourceCategory().equals(eType)) {
- buf.append("type.category");
- } else if (MSG.view_dynagroup_exprBuilder_expressionType_trait().equals(eType)) {
- buf.append("trait[" + propertyNameItem.getValueAsString() + "]");
- } else if (MSG.view_dynagroup_exprBuilder_expressionType_pluginConfig().equals(eType)) {
- buf.append("pluginConfiguration[" + propertyNameItem.getValueAsString() + "]");
- } else if (MSG.view_dynagroup_exprBuilder_expressionType_resourceConfig().equals(eType)) {
- buf.append("resourceConfiguration[" + propertyNameItem.getValueAsString() + "]");
- }
+ if (groupBy) {
+ buf.append("groupby ");
+ }
+ if (unset) {
+ buf.append("empty ");
+ }
- if (!groupBy && !unset) {
+ buf.append("resource.");
- String selectedComparison = compareTypeItem.getValueAsString();
- if (MSG.view_dynagroup_exprBuilder_comparisonType_equals().equals(selectedComparison)) {
+ String resourceLevel = resourceItem.getValueAsString();
+ if (MSG.view_dynagroup_exprBuilder_resource_resource().equals(resourceLevel)) {
// do nothing
- } else if (MSG.view_dynagroup_exprBuilder_comparisonType_contains().equals(selectedComparison)) {
- buf.append(".contains");
- } else if (MSG.view_dynagroup_exprBuilder_comparisonType_startsWith().equals(selectedComparison)) {
- buf.append(".startsWith");
- } else if (MSG.view_dynagroup_exprBuilder_comparisonType_endsWith().equals(selectedComparison)) {
- buf.append(".endsWith");
+ } else if (MSG.view_dynagroup_exprBuilder_resource_child().equals(resourceLevel)) {
+ buf.append("child.");
+ } else if (MSG.view_dynagroup_exprBuilder_resource_parent().equals(resourceLevel)) {
+ buf.append("parent.");
+ } else if (MSG.view_dynagroup_exprBuilder_resource_grandparent().equals(resourceLevel)) {
+ buf.append("grandParent.");
+ } else if (MSG.view_dynagroup_exprBuilder_resource_greatGrandparent().equals(resourceLevel)) {
+ buf.append("greatGrandParent.");
+ } else if (MSG.view_dynagroup_exprBuilder_resource_greatGreatGrandparent().equals(resourceLevel)) {
+ buf.append("greatGreatGrandParent.");
+ }
+
+ String eType = expressionTypeItem.getValueAsString();
+ if (MSG.view_dynagroup_exprBuilder_expressionType_resource().equals(eType)) {
+ buf.append(propertyNameItem.getValueAsString());
+ } else if (MSG.view_dynagroup_exprBuilder_expressionType_resourceType().equals(eType)) {
+ buf.append("type.plugin");
+ } else if (MSG.view_dynagroup_exprBuilder_expressionType_resourceCategory().equals(eType)) {
+ buf.append("type.category");
+ } else if (MSG.view_dynagroup_exprBuilder_expressionType_trait().equals(eType)) {
+ buf.append("trait[" + propertyNameItem.getValueAsString() + "]");
+ } else if (MSG.view_dynagroup_exprBuilder_expressionType_pluginConfig().equals(eType)) {
+ buf.append("pluginConfiguration[" + propertyNameItem.getValueAsString() + "]");
+ } else if (MSG.view_dynagroup_exprBuilder_expressionType_resourceConfig().equals(eType)) {
+ buf.append("resourceConfiguration[" + propertyNameItem.getValueAsString() + "]");
}
- buf.append(" = ");
+ if (!groupBy && !unset) {
+
+ String selectedComparison = compareTypeItem.getValueAsString();
+ if (MSG.view_dynagroup_exprBuilder_comparisonType_equals().equals(selectedComparison)) {
+ // do nothing
+ } else if (MSG.view_dynagroup_exprBuilder_comparisonType_contains().equals(selectedComparison)) {
+ buf.append(".contains");
+ } else if (MSG.view_dynagroup_exprBuilder_comparisonType_startsWith().equals(selectedComparison)) {
+ buf.append(".startsWith");
+ } else if (MSG.view_dynagroup_exprBuilder_comparisonType_endsWith().equals(selectedComparison)) {
+ buf.append(".endsWith");
+ }
- if (MSG.view_dynagroup_exprBuilder_expressionType_resource().equals(eType)
- || MSG.view_dynagroup_exprBuilder_expressionType_resourceCategory().equals(eType)) {
- buf.append(valueItem.getValueAsString());
+ buf.append(" = ");
+
+ if (MSG.view_dynagroup_exprBuilder_expressionType_resource().equals(eType)
+ || MSG.view_dynagroup_exprBuilder_expressionType_resourceCategory().equals(eType)) {
+ buf.append(valueItem.getValueAsString());
+ } else if (MSG.view_dynagroup_exprBuilder_expressionType_resourceType().equals(eType)) {
+ String d = buf.toString();
+ buf.append(pluginItem.getValueAsString());
+ buf.append("\n");
+ buf.append(d.replaceAll("plugin", "name"));
+ buf.append(resourceTypeItem.getValueAsString());
+ } else if (MSG.view_dynagroup_exprBuilder_expressionType_trait().equals(eType)
+ || MSG.view_dynagroup_exprBuilder_expressionType_pluginConfig().equals(eType)
+ || MSG.view_dynagroup_exprBuilder_expressionType_resourceConfig().equals(eType)) {
+ buf.append(valueItem.getValueAsString());
+ }
} else if (MSG.view_dynagroup_exprBuilder_expressionType_resourceType().equals(eType)) {
String d = buf.toString();
- buf.append(pluginItem.getValueAsString());
buf.append("\n");
buf.append(d.replaceAll("plugin", "name"));
- buf.append(resourceTypeItem.getValueAsString());
- } else if (MSG.view_dynagroup_exprBuilder_expressionType_trait().equals(eType)
- || MSG.view_dynagroup_exprBuilder_expressionType_pluginConfig().equals(eType)
- || MSG.view_dynagroup_exprBuilder_expressionType_resourceConfig().equals(eType)) {
- buf.append(valueItem.getValueAsString());
}
- } else if (MSG.view_dynagroup_exprBuilder_expressionType_resourceType().equals(eType)) {
- String d = buf.toString();
- buf.append("\n");
- buf.append(d.replaceAll("plugin", "name"));
}
String expressionValueString = buf.toString();
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/selection/SingleResourceGroupSelector.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/selection/SingleResourceGroupSelector.java
index 8928066..fc9bda9 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/selection/SingleResourceGroupSelector.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/selection/SingleResourceGroupSelector.java
@@ -24,7 +24,7 @@ import com.smartgwt.client.types.SelectionStyle;
import org.rhq.core.domain.resource.group.GroupCategory;
/**
- * This forces the user to only be able to select a single resource.
+ * This forces the user to only be able to select a single resource group.
*
* @author Jay Shaughnessy
*/
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 1f2e209..0d731ab 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
@@ -1472,6 +1472,8 @@ view_dynagroup_exprBuilder_expressionType_trait = Trait
view_dynagroup_exprBuilder_expression_tooltip = This is the full expression that is represented by the selections in the form below. This text will be added to your group definition expression text when you click the "Add Expression" button.
view_dynagroup_exprBuilder_groupBy = Group by
view_dynagroup_exprBuilder_groupBy_tooltip = GroupBy will cause the system to pivot on the values from the entered expressions creating a separate group for each value. For example, GroupBy on the cluster name to create a group for each cluster with all cluster members in it.
+view_dynagroup_exprBuilder_memberOf = Member of
+view_dynagroup_exprBuilder_memberOf_tooltip = memberof will restrict the dynagroup members to be a subset of the specified resource group. Specifying multiple memberof conditions will restrict the dynagroup members to be a subset of the union of members of the specified groups.
view_dynagroup_exprBuilder_noPlugins = --No plugins--
view_dynagroup_exprBuilder_noProperties = --No properties--
view_dynagroup_exprBuilder_noResourceTypes = --No resource types--
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 255391f..b4ba1e4 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
@@ -1486,6 +1486,8 @@ view_dynagroup_exprBuilder_expressionType_trait = Vlastnost (trait)
##view_dynagroup_exprBuilder_expression_tooltip = This is the full expression that is represented by the selections in the form below. This text will be added to your group definition expression text when you click the "Add Expression" button.
view_dynagroup_exprBuilder_groupBy = Seskupit podle
##view_dynagroup_exprBuilder_groupBy_tooltip = GroupBy will cause the system to pivot on the values from the entered expressions creating a separate group for each value. For example, GroupBy on the cluster name to create a group for each cluster with all cluster members in it.
+##view_dynagroup_exprBuilder_memberOf = Member of
+##view_dynagroup_exprBuilder_memberOf_tooltip = memberof will restrict the dynagroup members to be a subset of the specified resource group. Specifying multiple memberof conditions will restrict the dynagroup members to be a subset of the union of members of the specified groups.
view_dynagroup_exprBuilder_noPlugins = --Žádné zásuvné moduly--
view_dynagroup_exprBuilder_noProperties = --Žádné vlastnosti--
view_dynagroup_exprBuilder_noResourceTypes = --Žádné typy zdrojů--
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 6f6743c..016b160 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
@@ -1330,6 +1330,9 @@ view_dynagroup_exprBuilder_expressionType_resourceConfig = Ressourcen-Konfigurat
view_dynagroup_exprBuilder_expressionType_resourceType = Ressourcen-Typ
view_dynagroup_exprBuilder_expressionType_trait = Trait
view_dynagroup_exprBuilder_groupBy = Gruppieren nach
+##view_dynagroup_exprBuilder_groupBy_tooltip = groupby will cause the system to pivot on the values from the entered expressions creating a separate group for each value. For example, groupby on the cluster name to create a group for each cluster with all cluster members in it.
+##view_dynagroup_exprBuilder_memberOf = Member of
+##view_dynagroup_exprBuilder_memberOf_tooltip = memberof will restrict the dynagroup members to be a subset of the specified resource group. Specifying multiple memberof conditions will restrict the dynagroup members to be a subset of the union of members of the specified groups.
view_dynagroup_exprBuilder_noPlugins = --Keine Plugins--
view_dynagroup_exprBuilder_noProperties = --Keine Eigenschaften--
view_dynagroup_exprBuilder_noResourceTypes = --Keine Ressourcen-Typen--
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 09579ae..1f24034 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
@@ -1457,8 +1457,10 @@ view_dynagroup_exprBuilder_expressionType_resourceType = リソースタイプ
view_dynagroup_exprBuilder_expressionType_tooltip = この式のプロパティは以下のものに切り替わります。<br/> <b>リソース</b>: 名前やバージョンといったリソースプロパティ<br/> <b>リソースタイプ</b>: 特定タイプのリソースの検索<br/> <b>リソースカテゴリ</b>: プラットフォーム、サーバー、サービスといったカテゴリによるリソース検索<br/> <b>トレイト</b>: モニタされたトレイトのために選択された値を持つリソース<br/> <b>プラグイン構成</b>: コンポーネントのプラグインコンポーネント構成設定による検索<br/> <b>リソース構成</b>: 管理リソースの構成設定による検索
view_dynagroup_exprBuilder_expressionType_trait = トレイト
view_dynagroup_exprBuilder_expression_tooltip = これは以下のフォーム内の選択によって表現される完全な式です。このテキストは、"式の追加"ボタンをクリックすると、グループ定義式のテキストに追加されます。
-view_dynagroup_exprBuilder_groupBy = Group by
+##view_dynagroup_exprBuilder_groupBy = Group by
view_dynagroup_exprBuilder_groupBy_tooltip = GroupByはシステムが入力式からの値についてピボット解析ができるようにします。例えば、クラスター名によるGroupByによって、すべてのクラスターメンバーをその中に含むようなクラスタのグループを作成します。
+##view_dynagroup_exprBuilder_memberOf = Member of
+##view_dynagroup_exprBuilder_memberOf_tooltip = memberof will restrict the dynagroup members to be a subset of the specified resource group. Specifying multiple memberof conditions will restrict the dynagroup members to be a subset of the union of members of the specified groups.
view_dynagroup_exprBuilder_noPlugins = --プラグインなし--
view_dynagroup_exprBuilder_noProperties = --プラグインなし--
view_dynagroup_exprBuilder_noResourceTypes = --リソースタイプなし--
diff --git a/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_ko.properties b/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_ko.properties
index 84e024a..f832c7d 100644
--- a/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_ko.properties
+++ b/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_ko.properties
@@ -1218,7 +1218,10 @@ view_dynagroup_exprBuilder_expressionType_pluginConfig = 플러그인 설정
view_dynagroup_exprBuilder_expressionType_resource = 리소스
view_dynagroup_exprBuilder_expressionType_resourceConfig = 리소스 설정
view_dynagroup_exprBuilder_expressionType_trait = 특성
-view_dynagroup_exprBuilder_groupBy = Group by
+##view_dynagroup_exprBuilder_groupBy = Group by
+##view_dynagroup_exprBuilder_groupBy_tooltip = groupby will cause the system to pivot on the values from the entered expressions creating a separate group for each value. For example, groupby on the cluster name to create a group for each cluster with all cluster members in it.
+##view_dynagroup_exprBuilder_memberOf = Member of
+##view_dynagroup_exprBuilder_memberOf_tooltip = memberof will restrict the dynagroup members to be a subset of the specified resource group. Specifying multiple memberof conditions will restrict the dynagroup members to be a subset of the union of members of the specified groups.
view_dynagroup_exprBuilder_noPlugins = --플러그인 없이--
view_dynagroup_exprBuilder_noProperties = --속성 없이--
view_dynagroup_exprBuilder_pluginLoadFailure = 플러그인 목록을 가져올 수 없습니다
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 262c3c4..bb7d48b 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
@@ -1481,6 +1481,8 @@ view_dynagroup_exprBuilder_expressionType_trait = Caracter�stica
view_dynagroup_exprBuilder_expression_tooltip = Esta � a express�o completa com base nas defini��es do formul�rio abaixo. Este texto ser� adicionado ao campo de express�o da defini��o do grupo quando voc� clicar o bot�o "Adicionar Express�o"
view_dynagroup_exprBuilder_groupBy = Agrupado por
view_dynagroup_exprBuilder_groupBy_tooltip = GroupBy far� com que o resultado da busca seja agrupado de acordo com os valores informados na express�o. Por exemplo, usando GroupBy para o nome de um cluster JBossAS, o resultado criar� um grupo para cada cluster e seus membros.
+##view_dynagroup_exprBuilder_memberOf = Member of
+##view_dynagroup_exprBuilder_memberOf_tooltip = memberof will restrict the dynagroup members to be a subset of the specified resource group. Specifying multiple memberof conditions will restrict the dynagroup members to be a subset of the union of members of the specified groups.
view_dynagroup_exprBuilder_noPlugins = --Sem plugins--
view_dynagroup_exprBuilder_noProperties = --Sem propriedades--
view_dynagroup_exprBuilder_noResourceTypes = --Nehum tipo de recurso--
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 d96d127..f354bd8 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
@@ -2654,6 +2654,10 @@ view_admin_systemSettings_LDAPBindPW_name = Пароль
##view_configEdit_unset = Unset?
##view_configEdit_value = Value
##view_dashboardsManager_message_title_details = <h1>Welcome to {0}</h1>\n<p>This dashboard can be edited by clicking the (Edit Mode) button above.</p>\n<p>What would you like to do?</p>\n<p> <a href=\"{1}\">Import newly discovered resources.</a></p>\n<p> <a href=\"{2}\">Search for resources.</a></p>\n<p> <a href=\"{3}\">See help and documentation.</a></p>
+##view_dynagroup_exprBuilder_groupBy = Group by
+##view_dynagroup_exprBuilder_groupBy_tooltip = groupby will cause the system to pivot on the values from the entered expressions creating a separate group for each value. For example, groupby on the cluster name to create a group for each cluster with all cluster members in it.
+##view_dynagroup_exprBuilder_memberOf = Member of
+##view_dynagroup_exprBuilder_memberOf_tooltip = memberof will restrict the dynagroup members to be a subset of the specified resource group. Specifying multiple memberof conditions will restrict the dynagroup members to be a subset of the union of members of the specified groups.
##view_group_common_emptyGroup = An empty group is always considered as mixed.
##view_group_detail_explicitAvail = Group availability for explicit members (does not include recursive members).
##view_group_detail_failLoad = Failed to load group for group with ID [{0}]
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 9159a53..e19f5f2 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
@@ -1459,6 +1459,8 @@ view_dynagroup_exprBuilder_expressionType_trait = \u7279\u5f81
view_dynagroup_exprBuilder_expression_tooltip = This is the full expression that is represented by the selections in the form below. This text will be added to your group definition expression text when you click the "Add Expression" button.
view_dynagroup_exprBuilder_groupBy = \u5206\u7ec4
view_dynagroup_exprBuilder_groupBy_tooltip = GroupBy will cause the system to pivot on the values from the entered expressions creating a separate group for each value. For example, GroupBy on the cluster name to create a group for each cluster with all cluster members in it.
+##view_dynagroup_exprBuilder_memberOf = Member of
+##view_dynagroup_exprBuilder_memberOf_tooltip = memberof will restrict the dynagroup members to be a subset of the specified resource group. Specifying multiple memberof conditions will restrict the dynagroup members to be a subset of the union of members of the specified groups.
view_dynagroup_exprBuilder_noPlugins = --\u65e0\u63d2\u4ef6--
view_dynagroup_exprBuilder_noProperties = -\u65e0\u5c5e\u6027--
view_dynagroup_exprBuilder_noResourceTypes = --\u65e0\u8d44\u6e90\u7c7b\u578b--
diff --git a/modules/enterprise/server/itests-2/src/test/java/org/rhq/enterprise/server/resource/group/definition/framework/test/ExpressionEvaluatorTest.java b/modules/enterprise/server/itests-2/src/test/java/org/rhq/enterprise/server/resource/group/definition/framework/test/ExpressionEvaluatorTest.java
index a1c8a65..92919c5 100644
--- a/modules/enterprise/server/itests-2/src/test/java/org/rhq/enterprise/server/resource/group/definition/framework/test/ExpressionEvaluatorTest.java
+++ b/modules/enterprise/server/itests-2/src/test/java/org/rhq/enterprise/server/resource/group/definition/framework/test/ExpressionEvaluatorTest.java
@@ -25,8 +25,8 @@ import java.util.List;
import org.testng.annotations.Test;
import org.rhq.core.domain.resource.group.DuplicateExpressionTypeException;
-import org.rhq.enterprise.server.resource.group.definition.framework.ExpressionEvaluator;
import org.rhq.core.domain.resource.group.InvalidExpressionException;
+import org.rhq.enterprise.server.resource.group.definition.framework.ExpressionEvaluator;
import org.rhq.enterprise.server.test.AbstractEJB3Test;
import org.rhq.enterprise.server.util.QueryUtility;
@@ -154,7 +154,15 @@ public class ExpressionEvaluatorTest extends AbstractEJB3Test {
" AND simple.stringValue IS NULL " + //
" AND simple.configuration = pluginConf " + //
" AND simpleDef.configurationDefinition = pluginConfDef " + //
- " AND simple.name = simpleDef.name AND simpleDef.type != 'PASSWORD' " }, };
+ " AND simple.name = simpleDef.name AND simpleDef.type != 'PASSWORD' " },
+
+ { "resource.name = joseph; " + //
+ "memberof = Group Name",
+
+ "SELECT res.id FROM Resource res " + //
+ "JOIN res.implicitGroups implicitGroup " + //
+ "WHERE res.name = :arg1 " + //
+ " AND implicitGroup.name IN ('Group Name') " }, };
}
@Test(groups = "integration.session")
@@ -220,12 +228,14 @@ public class ExpressionEvaluatorTest extends AbstractEJB3Test {
String[] input = { "resource.child.name", //
"resource.pluginConfiguration[partition]", //
"resource.pluginConfiguration[partition].contains", //
- "resource.pluginConfiguration[partition.name].contains" };
+ "resource.pluginConfiguration[partition.name].contains", //
+ "memberof = GroupName" };
String[][] expectedOutput = { { "resource", "child", "name" }, //
{ "resource", "pluginConfiguration[partition]" }, //
{ "resource", "pluginConfiguration[partition]", "contains" }, //
- { "resource", "pluginConfiguration[partition.name]", "contains" } };
+ { "resource", "pluginConfiguration[partition.name]", "contains" }, //
+ { "memberof" } };
ExpressionEvaluator evaluator = new ExpressionEvaluator();
evaluator.setTestMode(true); // to prevent actual query from happening
@@ -274,686 +284,519 @@ public class ExpressionEvaluatorTest extends AbstractEJB3Test {
}
}
- @Test(expectedExceptions = DuplicateExpressionTypeException.class,
- expectedExceptionsMessageRegExp = "You cannot specify multiple.*")
+ @Test(expectedExceptions = DuplicateExpressionTypeException.class, expectedExceptionsMessageRegExp = "You cannot specify multiple.*")
public void doNotAllowMultipleResourceTraitExpressions() throws Exception {
evaluateExpressions(new ExpressionGenerator() {
@Override
public String[] getExpressions() {
- return new String[] {
- "resource.trait[agentHomeDirectory] = /var/rhq-agent",
- "resource.trait[reasonForLastRestart] = OOMError"
- };
+ return new String[] { "resource.trait[agentHomeDirectory] = /var/rhq-agent",
+ "resource.trait[reasonForLastRestart] = OOMError" };
}
});
}
- @Test(expectedExceptions = DuplicateExpressionTypeException.class,
- expectedExceptionsMessageRegExp = "You cannot specify multiple.*")
+ @Test(expectedExceptions = DuplicateExpressionTypeException.class, expectedExceptionsMessageRegExp = "You cannot specify multiple.*")
public void doNotAllowMultipleChildResourceTraitExpressions() throws Exception {
evaluateExpressions(new ExpressionGenerator() {
@Override
public String[] getExpressions() {
- return new String[] {
- "resource.child.trait[agentHomeDirectory] = /var/rhq-agent",
- "resource.child.trait[reasonForLastRestart] = OOMError"
- };
+ return new String[] { "resource.child.trait[agentHomeDirectory] = /var/rhq-agent",
+ "resource.child.trait[reasonForLastRestart] = OOMError" };
}
});
}
- @Test(expectedExceptions = DuplicateExpressionTypeException.class,
- expectedExceptionsMessageRegExp = "You cannot specify multiple.*")
+ @Test(expectedExceptions = DuplicateExpressionTypeException.class, expectedExceptionsMessageRegExp = "You cannot specify multiple.*")
public void doNotAllowMultipleParentResourceTraitExpressions() throws Exception {
evaluateExpressions(new ExpressionGenerator() {
@Override
public String[] getExpressions() {
- return new String[] {
- "resource.parent.trait[agentHomeDirectory] = /var/rhq-agent",
- "resource.parent.trait[reasonForLastRestart] = OOMError"
- };
+ return new String[] { "resource.parent.trait[agentHomeDirectory] = /var/rhq-agent",
+ "resource.parent.trait[reasonForLastRestart] = OOMError" };
}
});
}
- @Test(expectedExceptions = DuplicateExpressionTypeException.class,
- expectedExceptionsMessageRegExp = "You cannot specify multiple.*")
+ @Test(expectedExceptions = DuplicateExpressionTypeException.class, expectedExceptionsMessageRegExp = "You cannot specify multiple.*")
public void doNotAllowMultipleGrandParentResourceTraitExpressions() throws Exception {
evaluateExpressions(new ExpressionGenerator() {
@Override
public String[] getExpressions() {
- return new String[] {
- "resource.grandParent.trait[agentHomeDirectory] = /var/rhq-agent",
- "resource.grandParent.trait[reasonForLastRestart] = OOMError"
- };
+ return new String[] { "resource.grandParent.trait[agentHomeDirectory] = /var/rhq-agent",
+ "resource.grandParent.trait[reasonForLastRestart] = OOMError" };
}
});
}
- @Test(expectedExceptions = DuplicateExpressionTypeException.class,
- expectedExceptionsMessageRegExp = "You cannot specify multiple.*")
+ @Test(expectedExceptions = DuplicateExpressionTypeException.class, expectedExceptionsMessageRegExp = "You cannot specify multiple.*")
public void doNotAllowMultipleGreatGrandParentResourceTraitExpressions() throws Exception {
evaluateExpressions(new ExpressionGenerator() {
@Override
public String[] getExpressions() {
- return new String[] {
- "resource.greatGrandParent.trait[agentHomeDirectory] = /var/rhq-agent",
- "resource.greatGrandParent.trait[reasonForLastRestart] = OOMError"
- };
+ return new String[] { "resource.greatGrandParent.trait[agentHomeDirectory] = /var/rhq-agent",
+ "resource.greatGrandParent.trait[reasonForLastRestart] = OOMError" };
}
});
}
- @Test(expectedExceptions = DuplicateExpressionTypeException.class,
- expectedExceptionsMessageRegExp = "You cannot specify multiple.*")
+ @Test(expectedExceptions = DuplicateExpressionTypeException.class, expectedExceptionsMessageRegExp = "You cannot specify multiple.*")
public void doNotAllowMultipleGreatGreatGrandParentResourceTraitExpressions() throws Exception {
evaluateExpressions(new ExpressionGenerator() {
@Override
public String[] getExpressions() {
- return new String[] {
- "resource.greatGreatGrandParent.trait[agentHomeDirectory] = /var/rhq-agent",
- "resource.greatGreatGrandParent.trait[reasonForLastRestart] = OOMError"
- };
+ return new String[] { "resource.greatGreatGrandParent.trait[agentHomeDirectory] = /var/rhq-agent",
+ "resource.greatGreatGrandParent.trait[reasonForLastRestart] = OOMError" };
}
});
}
- @Test(expectedExceptions = DuplicateExpressionTypeException.class,
- expectedExceptionsMessageRegExp = "You cannot specify multiple.*")
+ @Test(expectedExceptions = DuplicateExpressionTypeException.class, expectedExceptionsMessageRegExp = "You cannot specify multiple.*")
public void doNotAllowMultipleResourceIdExpressions() throws Exception {
evaluateExpressions(new ExpressionGenerator() {
@Override
public String[] getExpressions() {
- return new String[] {
- "resource.id = 5",
- "resource.id = 6"
- };
+ return new String[] { "resource.id = 5", "resource.id = 6" };
}
});
}
- @Test(expectedExceptions = DuplicateExpressionTypeException.class,
- expectedExceptionsMessageRegExp = "You cannot specify multiple.*")
+ @Test(expectedExceptions = DuplicateExpressionTypeException.class, expectedExceptionsMessageRegExp = "You cannot specify multiple.*")
public void doNotAllowMultipleChildResourceIdExpressions() throws Exception {
evaluateExpressions(new ExpressionGenerator() {
@Override
public String[] getExpressions() {
- return new String[]{
- "resource.child.id = 5",
- "resource.child.id = 6"
- };
+ return new String[] { "resource.child.id = 5", "resource.child.id = 6" };
}
});
}
- @Test(expectedExceptions = DuplicateExpressionTypeException.class,
- expectedExceptionsMessageRegExp = "You cannot specify multiple.*")
+ @Test(expectedExceptions = DuplicateExpressionTypeException.class, expectedExceptionsMessageRegExp = "You cannot specify multiple.*")
public void doNotAllowMultipleParentResourceIdExpressions() throws Exception {
evaluateExpressions(new ExpressionGenerator() {
@Override
public String[] getExpressions() {
- return new String[]{
- "resource.parent.id = 5",
- "resource.parent.id = 6"
- };
+ return new String[] { "resource.parent.id = 5", "resource.parent.id = 6" };
}
});
}
- @Test(expectedExceptions = InvalidExpressionException.class,
- expectedExceptionsMessageRegExp = "You cannot specify multiple.*")
+ @Test(expectedExceptions = InvalidExpressionException.class, expectedExceptionsMessageRegExp = "You cannot specify multiple.*")
public void doNotAllowMultipleGrandParentResourceIdExpressions() throws Exception {
evaluateExpressions(new ExpressionGenerator() {
@Override
public String[] getExpressions() {
- return new String[] {
- "resource.grandParent.id = 5",
- "resource.grandParent.id = 6"
- };
+ return new String[] { "resource.grandParent.id = 5", "resource.grandParent.id = 6" };
}
});
}
- @Test(expectedExceptions = DuplicateExpressionTypeException.class,
- expectedExceptionsMessageRegExp = "You cannot specify multiple.*")
+ @Test(expectedExceptions = DuplicateExpressionTypeException.class, expectedExceptionsMessageRegExp = "You cannot specify multiple.*")
public void doNotAllowMultipleGreatGrandParentResourceIdExpressions() throws Exception {
evaluateExpressions(new ExpressionGenerator() {
@Override
public String[] getExpressions() {
- return new String[]{
- "resource.greatGrandParent.id = 5",
- "resource.greatGrandParent.id = 6"
- };
+ return new String[] { "resource.greatGrandParent.id = 5", "resource.greatGrandParent.id = 6" };
}
});
}
- @Test(expectedExceptions = DuplicateExpressionTypeException.class,
- expectedExceptionsMessageRegExp = "You cannot specify multiple.*")
+ @Test(expectedExceptions = DuplicateExpressionTypeException.class, expectedExceptionsMessageRegExp = "You cannot specify multiple.*")
public void doNotAllowMultipleGreatGreatGrandParentResourceIdExpressions() throws Exception {
evaluateExpressions(new ExpressionGenerator() {
@Override
public String[] getExpressions() {
- return new String[]{
- "resource.greatGreatGrandParent.id = 5",
- "resource.greatGreatGrandParent.id = 6"
- };
+ return new String[] { "resource.greatGreatGrandParent.id = 5", "resource.greatGreatGrandParent.id = 6" };
}
});
}
- @Test(expectedExceptions = DuplicateExpressionTypeException.class,
- expectedExceptionsMessageRegExp = "You cannot specify multiple.*")
+ @Test(expectedExceptions = DuplicateExpressionTypeException.class, expectedExceptionsMessageRegExp = "You cannot specify multiple.*")
public void doNotAllowMultipleResourceNameExpressions() throws Exception {
evaluateExpressions(new ExpressionGenerator() {
@Override
public String[] getExpressions() {
- return new String[]{
- "resource.name = foo",
- "resource.name = bar"
- };
+ return new String[] { "resource.name = foo", "resource.name = bar" };
}
});
}
- @Test(expectedExceptions = DuplicateExpressionTypeException.class,
- expectedExceptionsMessageRegExp = "You cannot specify multiple.*")
+ @Test(expectedExceptions = DuplicateExpressionTypeException.class, expectedExceptionsMessageRegExp = "You cannot specify multiple.*")
public void doNotAllowMultipleChildResourceNameExpressions() throws Exception {
evaluateExpressions(new ExpressionGenerator() {
@Override
public String[] getExpressions() {
- return new String[]{
- "resource.child.name = foo",
- "resource.child.name = bar"
- };
+ return new String[] { "resource.child.name = foo", "resource.child.name = bar" };
}
});
}
- @Test(expectedExceptions = DuplicateExpressionTypeException.class,
- expectedExceptionsMessageRegExp = "You cannot specify multiple.*")
+ @Test(expectedExceptions = DuplicateExpressionTypeException.class, expectedExceptionsMessageRegExp = "You cannot specify multiple.*")
public void doNotAllowMultipleParentResourceNameExpressions() throws Exception {
evaluateExpressions(new ExpressionGenerator() {
@Override
public String[] getExpressions() {
- return new String[]{
- "resource.parent.name = foo",
- "resource.parent.name = bar"
- };
+ return new String[] { "resource.parent.name = foo", "resource.parent.name = bar" };
}
});
}
- @Test(expectedExceptions = DuplicateExpressionTypeException.class,
- expectedExceptionsMessageRegExp = "You cannot specify multiple.*")
+ @Test(expectedExceptions = DuplicateExpressionTypeException.class, expectedExceptionsMessageRegExp = "You cannot specify multiple.*")
public void doNotAllowMultipleGrandParentResourceNameExpressions() throws Exception {
evaluateExpressions(new ExpressionGenerator() {
@Override
public String[] getExpressions() {
- return new String[]{
- "resource.grandParent.name = foo",
- "resource.grandParent.name = bar"
- };
+ return new String[] { "resource.grandParent.name = foo", "resource.grandParent.name = bar" };
}
});
}
- @Test(expectedExceptions = DuplicateExpressionTypeException.class,
- expectedExceptionsMessageRegExp = "You cannot specify multiple.*")
+ @Test(expectedExceptions = DuplicateExpressionTypeException.class, expectedExceptionsMessageRegExp = "You cannot specify multiple.*")
public void doNotAllowMultipleGreatGrandParentResourceNameExpressions() throws Exception {
evaluateExpressions(new ExpressionGenerator() {
@Override
public String[] getExpressions() {
- return new String[]{
- "resource.greatGrandParent.name = foo",
- "resource.greatGrandParent.name = bar"
- };
+ return new String[] { "resource.greatGrandParent.name = foo", "resource.greatGrandParent.name = bar" };
}
});
}
- @Test(expectedExceptions = DuplicateExpressionTypeException.class,
- expectedExceptionsMessageRegExp = "You cannot specify multiple.*")
+ @Test(expectedExceptions = DuplicateExpressionTypeException.class, expectedExceptionsMessageRegExp = "You cannot specify multiple.*")
public void doNotAllowMultipleGreatGreatGrandParentResourceNameExpressions() throws Exception {
evaluateExpressions(new ExpressionGenerator() {
@Override
public String[] getExpressions() {
- return new String[]{
- "resource.greatGreatGrandParent.name = foo",
- "resource.greatGreatGrandParent.name = bar"
- };
+ return new String[] { "resource.greatGreatGrandParent.name = foo",
+ "resource.greatGreatGrandParent.name = bar" };
}
});
}
- @Test(expectedExceptions = DuplicateExpressionTypeException.class,
- expectedExceptionsMessageRegExp = "You cannot specify multiple.*")
+ @Test(expectedExceptions = DuplicateExpressionTypeException.class, expectedExceptionsMessageRegExp = "You cannot specify multiple.*")
public void doNotAllowMultipleResourceTypeExpressions() throws Exception {
evaluateExpressions(new ExpressionGenerator() {
@Override
public String[] getExpressions() {
- return new String[] {
- "resource.type.plugin = rhq-agent",
- "resource.type.name = RHQ Agent",
- "resource.type.plugin = rhq-server",
- "resource.type.name = RHQ Server"
- };
+ return new String[] { "resource.type.plugin = rhq-agent", "resource.type.name = RHQ Agent",
+ "resource.type.plugin = rhq-server", "resource.type.name = RHQ Server" };
}
});
}
- @Test(expectedExceptions = DuplicateExpressionTypeException.class,
- expectedExceptionsMessageRegExp = "You cannot specify multiple.*")
+ @Test(expectedExceptions = DuplicateExpressionTypeException.class, expectedExceptionsMessageRegExp = "You cannot specify multiple.*")
public void doNotAllowMultipleChildResourceTypeExpressions() throws Exception {
evaluateExpressions(new ExpressionGenerator() {
@Override
public String[] getExpressions() {
- return new String[] {
- "resource.child.type.plugin = rhq-agent",
- "resource.child.type.name = RHQ Agent",
- "resource.child.type.plugin = rhq-server",
- "resource.child.type.name = RHQ Server"
- };
+ return new String[] { "resource.child.type.plugin = rhq-agent", "resource.child.type.name = RHQ Agent",
+ "resource.child.type.plugin = rhq-server", "resource.child.type.name = RHQ Server" };
}
});
}
- @Test(expectedExceptions = DuplicateExpressionTypeException.class,
- expectedExceptionsMessageRegExp = "You cannot specify multiple.*")
+ @Test(expectedExceptions = DuplicateExpressionTypeException.class, expectedExceptionsMessageRegExp = "You cannot specify multiple.*")
public void doNotAllowMultipleParentResourceTypeExpressions() throws Exception {
evaluateExpressions(new ExpressionGenerator() {
@Override
public String[] getExpressions() {
- return new String[]{
- "resource.parent.type.plugin = rhq-agent",
- "resource.parent.type.name = RHQ Agent",
- "resource.parent.type.plugin = rhq-server",
- "resource.parent.type.name = RHQ Server"
- };
+ return new String[] { "resource.parent.type.plugin = rhq-agent",
+ "resource.parent.type.name = RHQ Agent", "resource.parent.type.plugin = rhq-server",
+ "resource.parent.type.name = RHQ Server" };
}
});
}
- @Test(expectedExceptions = DuplicateExpressionTypeException.class,
- expectedExceptionsMessageRegExp = "You cannot specify multiple.*")
+ @Test(expectedExceptions = DuplicateExpressionTypeException.class, expectedExceptionsMessageRegExp = "You cannot specify multiple.*")
public void doNotAllowMultipleGrandParentResourceTypeExpressions() throws Exception {
evaluateExpressions(new ExpressionGenerator() {
@Override
public String[] getExpressions() {
- return new String[] {
- "resource.grandParent.type.plugin = rhq-agent",
- "resource.grandParent.type.name = RHQ Agent",
- "resource.grandParent.type.plugin = rhq-server",
- "resource.grandParent.type.name = RHQ Server"
- };
+ return new String[] { "resource.grandParent.type.plugin = rhq-agent",
+ "resource.grandParent.type.name = RHQ Agent", "resource.grandParent.type.plugin = rhq-server",
+ "resource.grandParent.type.name = RHQ Server" };
}
});
}
- @Test(expectedExceptions = DuplicateExpressionTypeException.class,
- expectedExceptionsMessageRegExp = "You cannot specify multiple.*")
+ @Test(expectedExceptions = DuplicateExpressionTypeException.class, expectedExceptionsMessageRegExp = "You cannot specify multiple.*")
public void doNotAllowMultipleGreatGrandParentResourceTypeExpressions() throws Exception {
evaluateExpressions(new ExpressionGenerator() {
@Override
public String[] getExpressions() {
- return new String[] {
- "resource.greatGrandParent.type.plugin = rhq-agent",
+ return new String[] { "resource.greatGrandParent.type.plugin = rhq-agent",
"resource.greatGrandParent.type.name = RHQ Agent",
"resource.greatGrandParent.type.plugin = rhq-server",
- "resource.greatGrandParent.type.name = RHQ Server"
- };
+ "resource.greatGrandParent.type.name = RHQ Server" };
}
});
}
- @Test(expectedExceptions = DuplicateExpressionTypeException.class,
- expectedExceptionsMessageRegExp = "You cannot specify multiple.*")
+ @Test(expectedExceptions = DuplicateExpressionTypeException.class, expectedExceptionsMessageRegExp = "You cannot specify multiple.*")
public void doNotAllowMultipleGreatGreatGrandParentResourceTypeExpressions() throws Exception {
evaluateExpressions(new ExpressionGenerator() {
@Override
public String[] getExpressions() {
- return new String[] {
- "resource.greatGreatGrandParent.type.plugin = rhq-agent",
+ return new String[] { "resource.greatGreatGrandParent.type.plugin = rhq-agent",
"resource.greatGreatGrandParent.type.name = RHQ Agent",
"resource.greatGreatGrandParent.type.plugin = rhq-server",
- "resource.greatGreatGrandParent.type.name = RHQ Server"
- };
+ "resource.greatGreatGrandParent.type.name = RHQ Server" };
}
});
}
- @Test(expectedExceptions = DuplicateExpressionTypeException.class,
- expectedExceptionsMessageRegExp = "You cannot specify multiple.*")
+ @Test(expectedExceptions = DuplicateExpressionTypeException.class, expectedExceptionsMessageRegExp = "You cannot specify multiple.*")
public void doNotAllowMultipleResourceCategoryExpressions() throws Exception {
evaluateExpressions(new ExpressionGenerator() {
@Override
public String[] getExpressions() {
- return new String[]{
- "resource.type.category = PLATFORM",
- "resource.type.category = SERVER"
- };
+ return new String[] { "resource.type.category = PLATFORM", "resource.type.category = SERVER" };
}
});
}
- @Test(expectedExceptions = DuplicateExpressionTypeException.class,
- expectedExceptionsMessageRegExp = "You cannot specify multiple.*")
+ @Test(expectedExceptions = DuplicateExpressionTypeException.class, expectedExceptionsMessageRegExp = "You cannot specify multiple.*")
public void doNotAllowMultipleChildResourceCategoryExpressions() throws Exception {
evaluateExpressions(new ExpressionGenerator() {
@Override
public String[] getExpressions() {
- return new String[]{
- "resource.child.type.category = PLATFORM",
- "resource.child.type.category = SERVER"
- };
+ return new String[] { "resource.child.type.category = PLATFORM",
+ "resource.child.type.category = SERVER" };
}
});
}
- @Test(expectedExceptions = DuplicateExpressionTypeException.class,
- expectedExceptionsMessageRegExp = "You cannot specify multiple.*")
+ @Test(expectedExceptions = DuplicateExpressionTypeException.class, expectedExceptionsMessageRegExp = "You cannot specify multiple.*")
public void doNotAllowMultipleParentResourceCategoryExpressions() throws Exception {
evaluateExpressions(new ExpressionGenerator() {
@Override
public String[] getExpressions() {
- return new String[]{
- "resource.parent.type.category = PLATFORM",
- "resource.parent.type.category = SERVER"
- };
+ return new String[] { "resource.parent.type.category = PLATFORM",
+ "resource.parent.type.category = SERVER" };
}
});
}
- @Test(expectedExceptions = DuplicateExpressionTypeException.class,
- expectedExceptionsMessageRegExp = "You cannot specify multiple.*")
+ @Test(expectedExceptions = DuplicateExpressionTypeException.class, expectedExceptionsMessageRegExp = "You cannot specify multiple.*")
public void doNotAllowMultipleGrandParentResourceCategoryExpressions() throws Exception {
evaluateExpressions(new ExpressionGenerator() {
@Override
public String[] getExpressions() {
- return new String[]{
- "resource.grandParent.type.category = PLATFORM",
- "resource.grandParent.type.category = SERVER"
- };
+ return new String[] { "resource.grandParent.type.category = PLATFORM",
+ "resource.grandParent.type.category = SERVER" };
}
});
}
- @Test(expectedExceptions = DuplicateExpressionTypeException.class,
- expectedExceptionsMessageRegExp = "You cannot specify multiple.*")
+ @Test(expectedExceptions = DuplicateExpressionTypeException.class, expectedExceptionsMessageRegExp = "You cannot specify multiple.*")
public void doNotAllowMultipleGreatGrandParentResourceCategoryExpressions() throws Exception {
evaluateExpressions(new ExpressionGenerator() {
@Override
public String[] getExpressions() {
- return new String[]{
- "resource.greatGrandParent.type.category = PLATFORM",
- "resource.greatGrandParent.type.category = SERVER"
- };
+ return new String[] { "resource.greatGrandParent.type.category = PLATFORM",
+ "resource.greatGrandParent.type.category = SERVER" };
}
});
}
- @Test(expectedExceptions = DuplicateExpressionTypeException.class,
- expectedExceptionsMessageRegExp = "You cannot specify multiple.*")
+ @Test(expectedExceptions = DuplicateExpressionTypeException.class, expectedExceptionsMessageRegExp = "You cannot specify multiple.*")
public void doNotAllowMultipleGreatGreatGrandParentResourceCategoryExpressions() throws Exception {
evaluateExpressions(new ExpressionGenerator() {
@Override
public String[] getExpressions() {
- return new String[] {
- "resource.greatGreatGrandParent.type.category = PLATFORM",
- "resource.greatGreatGrandParent.type.category = SERVER"
- };
+ return new String[] { "resource.greatGreatGrandParent.type.category = PLATFORM",
+ "resource.greatGreatGrandParent.type.category = SERVER" };
}
});
}
- @Test(expectedExceptions = DuplicateExpressionTypeException.class,
- expectedExceptionsMessageRegExp = "You cannot specify multiple.*")
+ @Test(expectedExceptions = DuplicateExpressionTypeException.class, expectedExceptionsMessageRegExp = "You cannot specify multiple.*")
public void doNotAllowMultipleResourceAvailabilityExpressions() throws Exception {
evaluateExpressions(new ExpressionGenerator() {
@Override
public String[] getExpressions() {
- return new String[] {
- "resource.availability = UP",
- "resource.availability = UNKNOWN"
- };
+ return new String[] { "resource.availability = UP", "resource.availability = UNKNOWN" };
}
});
}
- @Test(expectedExceptions = DuplicateExpressionTypeException.class,
- expectedExceptionsMessageRegExp = "You cannot specify multiple.*")
+ @Test(expectedExceptions = DuplicateExpressionTypeException.class, expectedExceptionsMessageRegExp = "You cannot specify multiple.*")
public void doNotAllowMultipleChildResourceAvailabilityExpressions() throws Exception {
evaluateExpressions(new ExpressionGenerator() {
@Override
public String[] getExpressions() {
- return new String[] {
- "resource.child.availability = UP",
- "resource.child.availability = UNKNOWN"
- };
+ return new String[] { "resource.child.availability = UP", "resource.child.availability = UNKNOWN" };
}
});
}
- @Test(expectedExceptions = DuplicateExpressionTypeException.class,
- expectedExceptionsMessageRegExp = "You cannot specify multiple.*")
+ @Test(expectedExceptions = DuplicateExpressionTypeException.class, expectedExceptionsMessageRegExp = "You cannot specify multiple.*")
public void doNotAllowMultipleParentResourceAvailabilityExpressions() throws Exception {
evaluateExpressions(new ExpressionGenerator() {
@Override
public String[] getExpressions() {
- return new String[] {
- "resource.parent.availability = UP",
- "resource.parent.availability = UNKNOWN"
- };
+ return new String[] { "resource.parent.availability = UP", "resource.parent.availability = UNKNOWN" };
}
});
}
- @Test(expectedExceptions = DuplicateExpressionTypeException.class,
- expectedExceptionsMessageRegExp = "You cannot specify multiple.*")
+ @Test(expectedExceptions = DuplicateExpressionTypeException.class, expectedExceptionsMessageRegExp = "You cannot specify multiple.*")
public void doNotAllowMultipleGrandParentResourceAvailabilityExpressions() throws Exception {
evaluateExpressions(new ExpressionGenerator() {
@Override
public String[] getExpressions() {
- return new String[] {
- "resource.grandParent.availability = UP",
- "resource.grandParent.availability = UNKNOWN"
- };
+ return new String[] { "resource.grandParent.availability = UP",
+ "resource.grandParent.availability = UNKNOWN" };
}
});
}
- @Test(expectedExceptions = DuplicateExpressionTypeException.class,
- expectedExceptionsMessageRegExp = "You cannot specify multiple.*")
+ @Test(expectedExceptions = DuplicateExpressionTypeException.class, expectedExceptionsMessageRegExp = "You cannot specify multiple.*")
public void doNotAllowMultipleGreatGrandParentResourceAvailabilityExpressions() throws Exception {
evaluateExpressions(new ExpressionGenerator() {
@Override
public String[] getExpressions() {
- return new String[] {
- "resource.greatGrandParent.availability = UP",
- "resource.greatGrandParent.availability = UNKNOWN"
- };
+ return new String[] { "resource.greatGrandParent.availability = UP",
+ "resource.greatGrandParent.availability = UNKNOWN" };
}
});
}
- @Test(expectedExceptions = DuplicateExpressionTypeException.class,
- expectedExceptionsMessageRegExp = "You cannot specify multiple.*")
+ @Test(expectedExceptions = DuplicateExpressionTypeException.class, expectedExceptionsMessageRegExp = "You cannot specify multiple.*")
public void doNotAllowMultipleGreatGreatGrandParentResourceAvailabilityExpressions() throws Exception {
evaluateExpressions(new ExpressionGenerator() {
@Override
public String[] getExpressions() {
- return new String[] {
- "resource.greatGreatGrandParent.availability = UP",
- "resource.greatGreatGrandParent.availability = UNKNOWN"
- };
+ return new String[] { "resource.greatGreatGrandParent.availability = UP",
+ "resource.greatGreatGrandParent.availability = UNKNOWN" };
}
});
}
- @Test(expectedExceptions = DuplicateExpressionTypeException.class,
- expectedExceptionsMessageRegExp = "You cannot specify multiple.*")
+ @Test(expectedExceptions = DuplicateExpressionTypeException.class, expectedExceptionsMessageRegExp = "You cannot specify multiple.*")
public void doNotAllowMultipleResourcePluginConfigExpressions() throws Exception {
evaluateExpressions(new ExpressionGenerator() {
@Override
public String[] getExpressions() {
- return new String[]{
- "resource.pluginConfiguration[x] = 1",
- "resource.pluginConfiguration[y] = 2"
- };
+ return new String[] { "resource.pluginConfiguration[x] = 1", "resource.pluginConfiguration[y] = 2" };
}
});
}
- @Test(expectedExceptions = DuplicateExpressionTypeException.class,
- expectedExceptionsMessageRegExp = "You cannot specify multiple.*")
+ @Test(expectedExceptions = DuplicateExpressionTypeException.class, expectedExceptionsMessageRegExp = "You cannot specify multiple.*")
public void doNotAllowMultipleChildResourcePluginConfigExpressions() throws Exception {
evaluateExpressions(new ExpressionGenerator() {
@Override
public String[] getExpressions() {
- return new String[]{
- "resource.child.pluginConfiguration[x] = 1",
- "resource.child.pluginConfiguration[y] = 2"
- };
+ return new String[] { "resource.child.pluginConfiguration[x] = 1",
+ "resource.child.pluginConfiguration[y] = 2" };
}
});
}
- @Test(expectedExceptions = DuplicateExpressionTypeException.class,
- expectedExceptionsMessageRegExp = "You cannot specify multiple.*")
+ @Test(expectedExceptions = DuplicateExpressionTypeException.class, expectedExceptionsMessageRegExp = "You cannot specify multiple.*")
public void doNotAllowMultipleParentResourcePluginConfigExpressions() throws Exception {
evaluateExpressions(new ExpressionGenerator() {
@Override
public String[] getExpressions() {
- return new String[]{
- "resource.parent.pluginConfiguration[x] = 1",
- "resource.parent.pluginConfiguration[y] = 2"
- };
+ return new String[] { "resource.parent.pluginConfiguration[x] = 1",
+ "resource.parent.pluginConfiguration[y] = 2" };
}
});
}
- @Test(expectedExceptions = DuplicateExpressionTypeException.class,
- expectedExceptionsMessageRegExp = "You cannot specify multiple.*")
+ @Test(expectedExceptions = DuplicateExpressionTypeException.class, expectedExceptionsMessageRegExp = "You cannot specify multiple.*")
public void doNotAllowMultipleGrandParentResourcePluginConfigExpressions() throws Exception {
evaluateExpressions(new ExpressionGenerator() {
@Override
public String[] getExpressions() {
- return new String[]{
- "resource.grandParent.pluginConfiguration[x] = 1",
- "resource.grandParent.pluginConfiguration[y] = 2"
- };
+ return new String[] { "resource.grandParent.pluginConfiguration[x] = 1",
+ "resource.grandParent.pluginConfiguration[y] = 2" };
}
});
}
- @Test(expectedExceptions = DuplicateExpressionTypeException.class,
- expectedExceptionsMessageRegExp = "You cannot specify multiple.*")
+ @Test(expectedExceptions = DuplicateExpressionTypeException.class, expectedExceptionsMessageRegExp = "You cannot specify multiple.*")
public void doNotAllowMultipleGreatGrandParentResourcePluginConfigExpressions() throws Exception {
evaluateExpressions(new ExpressionGenerator() {
@Override
public String[] getExpressions() {
- return new String[]{
- "resource.greatGrandParent.pluginConfiguration[x] = 1",
- "resource.greatGrandParent.pluginConfiguration[y] = 2"
- };
+ return new String[] { "resource.greatGrandParent.pluginConfiguration[x] = 1",
+ "resource.greatGrandParent.pluginConfiguration[y] = 2" };
}
});
}
- @Test(expectedExceptions = DuplicateExpressionTypeException.class,
- expectedExceptionsMessageRegExp = "You cannot specify multiple.*")
+ @Test(expectedExceptions = DuplicateExpressionTypeException.class, expectedExceptionsMessageRegExp = "You cannot specify multiple.*")
public void doNotAllowMultipleGreatGreatGrandParentResourcePluginConfigExpressions() throws Exception {
evaluateExpressions(new ExpressionGenerator() {
@Override
public String[] getExpressions() {
- return new String[]{
- "resource.greatGreatGrandParent.pluginConfiguration[x] = 1",
- "resource.greatGreatGrandParent.pluginConfiguration[y] = 2"
- };
+ return new String[] { "resource.greatGreatGrandParent.pluginConfiguration[x] = 1",
+ "resource.greatGreatGrandParent.pluginConfiguration[y] = 2" };
}
});
}
- @Test(expectedExceptions = DuplicateExpressionTypeException.class,
- expectedExceptionsMessageRegExp = "You cannot specify multiple.*")
+ @Test(expectedExceptions = DuplicateExpressionTypeException.class, expectedExceptionsMessageRegExp = "You cannot specify multiple.*")
public void doNotAllowMultipleResourceConfigExpressions() throws Exception {
evaluateExpressions(new ExpressionGenerator() {
@Override
public String[] getExpressions() {
- return new String[]{
- "resource.resourceConfiguration[x] = 1",
- "resource.resourceConfiguration[y] = 2"
- };
+ return new String[] { "resource.resourceConfiguration[x] = 1", "resource.resourceConfiguration[y] = 2" };
}
});
}
- @Test(expectedExceptions = DuplicateExpressionTypeException.class,
- expectedExceptionsMessageRegExp = "You cannot specify multiple.*")
+ @Test(expectedExceptions = DuplicateExpressionTypeException.class, expectedExceptionsMessageRegExp = "You cannot specify multiple.*")
public void doNotAllowMultipleChildResourceConfigExpressions() throws Exception {
evaluateExpressions(new ExpressionGenerator() {
@Override
public String[] getExpressions() {
- return new String[]{
- "resource.child.resourceConfiguration[x] = 1",
- "resource.child.resourceConfiguration[y] = 2"
- };
+ return new String[] { "resource.child.resourceConfiguration[x] = 1",
+ "resource.child.resourceConfiguration[y] = 2" };
}
});
}
- @Test(expectedExceptions = DuplicateExpressionTypeException.class,
- expectedExceptionsMessageRegExp = "You cannot specify multiple.*")
+ @Test(expectedExceptions = DuplicateExpressionTypeException.class, expectedExceptionsMessageRegExp = "You cannot specify multiple.*")
public void doNotAllowMultipleParentResourceConfigExpressions() throws Exception {
evaluateExpressions(new ExpressionGenerator() {
@Override
public String[] getExpressions() {
- return new String[]{
- "resource.parent.resourceConfiguration[x] = 1",
- "resource.parent.resourceConfiguration[y] = 2"
- };
+ return new String[] { "resource.parent.resourceConfiguration[x] = 1",
+ "resource.parent.resourceConfiguration[y] = 2" };
}
});
}
- @Test(expectedExceptions = DuplicateExpressionTypeException.class,
- expectedExceptionsMessageRegExp = "You cannot specify multiple.*")
+ @Test(expectedExceptions = DuplicateExpressionTypeException.class, expectedExceptionsMessageRegExp = "You cannot specify multiple.*")
public void doNotAllowMultipleGrandParentResourceConfigExpressions() throws Exception {
evaluateExpressions(new ExpressionGenerator() {
@Override
public String[] getExpressions() {
- return new String[]{
- "resource.grandParent.resourceConfiguration[x] = 1",
- "resource.grandParent.resourceConfiguration[y] = 2"
- };
+ return new String[] { "resource.grandParent.resourceConfiguration[x] = 1",
+ "resource.grandParent.resourceConfiguration[y] = 2" };
}
});
}
- @Test(expectedExceptions = DuplicateExpressionTypeException.class,
- expectedExceptionsMessageRegExp = "You cannot specify multiple.*")
+ @Test(expectedExceptions = DuplicateExpressionTypeException.class, expectedExceptionsMessageRegExp = "You cannot specify multiple.*")
public void doNotAllowMultipleGreatGrandParentResourceConfigExpressions() throws Exception {
evaluateExpressions(new ExpressionGenerator() {
@Override
public String[] getExpressions() {
- return new String[]{
- "resource.greatGrandParent.resourceConfiguration[x] = 1",
- "resource.greatGrandParent.resourceConfiguration[y] = 2"
- };
+ return new String[] { "resource.greatGrandParent.resourceConfiguration[x] = 1",
+ "resource.greatGrandParent.resourceConfiguration[y] = 2" };
}
});
}
- @Test(expectedExceptions = DuplicateExpressionTypeException.class,
- expectedExceptionsMessageRegExp = "You cannot specify multiple.*")
+ @Test(expectedExceptions = DuplicateExpressionTypeException.class, expectedExceptionsMessageRegExp = "You cannot specify multiple.*")
public void doNotAllowMultipleGreatGreatGrandParentResourceConfigExpressions() throws Exception {
evaluateExpressions(new ExpressionGenerator() {
@Override
public String[] getExpressions() {
- return new String[]{
- "resource.greatGreatGrandParent.resourceConfiguration[x] = 1",
- "resource.greatGreatGrandParent.resourceConfiguration[y] = 2"
- };
+ return new String[] { "resource.greatGreatGrandParent.resourceConfiguration[x] = 1",
+ "resource.greatGreatGrandParent.resourceConfiguration[y] = 2" };
}
});
}
diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/group/definition/framework/ExpressionEvaluator.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/group/definition/framework/ExpressionEvaluator.java
index 7f42f55..363a663 100644
--- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/group/definition/framework/ExpressionEvaluator.java
+++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/group/definition/framework/ExpressionEvaluator.java
@@ -50,7 +50,7 @@ public class ExpressionEvaluator implements Iterable<ExpressionEvaluator.Result>
private final Log log = LogFactory.getLog(ExpressionEvaluator.class);
private static final String INVALID_EXPRESSION_FORM_MSG = "Expression must be in one of the follow forms: " + //
- "'groupBy condition', 'condition = value', 'empty condition', 'not empty condition";
+ "'groupby condition', 'memberof = groupname', 'condition = value', 'empty condition', 'not empty condition";
private static final String PROP_SIMPLE_ALIAS = "simple";
private static final String PROP_SIMPLE_DEF_ALIAS = "simpleDef";
@@ -81,9 +81,11 @@ public class ExpressionEvaluator implements Iterable<ExpressionEvaluator.Result>
private Map<String, Class<?>> whereReplacementTypes;
private Set<String> whereStatics;
private List<String> groupByElements;
+ private List<String> memberOfElements;
private List<String> simpleSubExpressions;
private List<String> groupedSubExpressions;
+ private List<String> memberSubExpressions;
private int expressionCount;
private boolean isInvalid;
@@ -112,9 +114,11 @@ public class ExpressionEvaluator implements Iterable<ExpressionEvaluator.Result>
whereReplacementTypes = new HashMap<String, Class<?>>();
whereStatics = new LinkedHashSet<String>();
groupByElements = new ArrayList<String>();
+ memberOfElements = new ArrayList<String>();
simpleSubExpressions = new ArrayList<String>();
groupedSubExpressions = new ArrayList<String>();
+ memberSubExpressions = new ArrayList<String>();
expressionCount = 0;
isInvalid = false;
@@ -143,8 +147,8 @@ public class ExpressionEvaluator implements Iterable<ExpressionEvaluator.Result>
resourceExpressions.put("res.parentResource.name", "resource name");
resourceExpressions.put("res.parentResource.parentResource.name", "resource name");
resourceExpressions.put("res.parentResource.parentResource.parentResource.name", "resource name");
- resourceExpressions.put("res.parentResource.parentResource.parentResource.parentResource.name",
- "resource name");
+ resourceExpressions
+ .put("res.parentResource.parentResource.parentResource.parentResource.name", "resource name");
resourceExpressions.put("res.version", "resource version");
resourceExpressions.put("child.version", "resource version");
@@ -162,8 +166,8 @@ public class ExpressionEvaluator implements Iterable<ExpressionEvaluator.Result>
resourceExpressions.put("res.parentResource.resourceType.name", "resource type");
resourceExpressions.put("res.parentResource.parentResource.resourceType.plugin", "resource type");
resourceExpressions.put("res.parentResource.parentResource.resourceType.name", "resource type");
- resourceExpressions.put("res.parentResource.parentResource.parentResource.resourceType.plugin",
- "resource type");
+ resourceExpressions
+ .put("res.parentResource.parentResource.parentResource.resourceType.plugin", "resource type");
resourceExpressions.put("res.parentResource.parentResource.parentResource.resourceType.name", "resource type");
resourceExpressions.put("res.parentResource.parentResource.parentResource.parentResource.resourceType.plugin",
"resource type");
@@ -176,7 +180,8 @@ public class ExpressionEvaluator implements Iterable<ExpressionEvaluator.Result>
resourceExpressions.put("res.parentResource.parentResource.resourceType.category", "resource category");
resourceExpressions.put("res.parentResource.parentResource.parentResource.resourceType.category",
"resource category");
- resourceExpressions.put("res.parentResource.parentResource.parentResource.parentResource.resourceType.category",
+ resourceExpressions.put(
+ "res.parentResource.parentResource.parentResource.parentResource.resourceType.category",
"resource category");
resourceExpressions.put("avail.availabilityType", "availability");
@@ -185,8 +190,8 @@ public class ExpressionEvaluator implements Iterable<ExpressionEvaluator.Result>
resourceExpressions.put("res.parentResource.parentResource.avail.availabilityType", "availability");
resourceExpressions.put("res.parentResource.parentResource.parentResource.avail.availabilityType",
"availability");
- resourceExpressions.put("res.parentResource.parentResource.parentResource.parentResource.avail.availabilityType",
- "availability");
+ resourceExpressions.put(
+ "res.parentResource.parentResource.parentResource.parentResource.avail.availabilityType", "availability");
resourceExpressions.put("trait.value", "trait");
resourceExpressions.put("child.trait.value", "trait");
@@ -299,8 +304,9 @@ public class ExpressionEvaluator implements Iterable<ExpressionEvaluator.Result>
Availability(true), //
Trait(true), //
Configuration(true), // includes 'pluginConfiguration' and 'resourceConfiguration'
- StringMatch(true), //
- END(true);
+ StringMatch(true), //
+ END(true), //
+ Membership(true);
private boolean canTerminateExpression;
@@ -337,6 +343,7 @@ public class ExpressionEvaluator implements Iterable<ExpressionEvaluator.Result>
private ParseSubContext subcontext = null;
private int parseIndex = 0;
private boolean isGroupBy = false;
+ private boolean isMemberOf = false;
private ComparisonType comparisonType = null;
private Class<?> expressionType;
@@ -418,6 +425,8 @@ public class ExpressionEvaluator implements Iterable<ExpressionEvaluator.Result>
// do not add modifiers to the normalized expression
if (subExpressionToken.equals("groupby")) {
continue;
+ } else if (subExpressionToken.equals("memberof")) {
+ continue;
} else if (subExpressionToken.equals("not")) {
continue;
} else if (subExpressionToken.equals("empty")) {
@@ -440,6 +449,7 @@ public class ExpressionEvaluator implements Iterable<ExpressionEvaluator.Result>
subcontext = null;
parseIndex = 0;
isGroupBy = false; // this needs to be reset each time a new expression is added
+ isMemberOf = false; // this needs to be reset each time a new expression is added
comparisonType = ComparisonType.EQUALS; // assume equals, unless "(not) empty" found during the parse
deepestResourceContext = null;
@@ -452,17 +462,34 @@ public class ExpressionEvaluator implements Iterable<ExpressionEvaluator.Result>
if (nextToken.equals("resource")) {
context = ParseContext.Resource;
deepestResourceContext = context;
+
+ } else if (nextToken.equals("memberof")) {
+ context = ParseContext.Membership; // ensure proper expression termination
+ String groupName = value;
+
+ if (null == groupName || groupName.isEmpty() || "=".equals(groupName)) {
+ throw new InvalidExpressionException(INVALID_EXPRESSION_FORM_MSG);
+ }
+
+ validateSubExpressionAgainstPreviouslySeen(groupName, false, true);
+ isMemberOf = true;
+ populatePredicateCollections(null, groupName);
+
} else if (nextToken.equals("groupby")) {
context = ParseContext.Modifier;
subcontext = ParseSubContext.Pivot;
+
} else if (nextToken.equals("not")) {
+
context = ParseContext.Modifier;
subcontext = ParseSubContext.Negated;
// 'not' must be followed by 'empty' today, but we won't know until next parse iteration
// furthermore, we may support other forms of negated expressions in the future
+
} else if (nextToken.equals("empty")) {
context = ParseContext.Modifier;
subcontext = ParseSubContext.Empty;
+
} else {
throw new InvalidExpressionException(
"Expression must either start with 'resource', 'groupby', 'empty', or 'not empty' tokens");
@@ -488,7 +515,7 @@ public class ExpressionEvaluator implements Iterable<ExpressionEvaluator.Result>
// then perform individual processing based on current subcontext
if (subcontext == ParseSubContext.Pivot) {
// validates the uniqueness of the subexpression after checking for INVALID_EXPRESSION_FORM_MSG
- validateSubExpressionAgainstPreviouslySeen(normalizedSubExpression, true);
+ validateSubExpressionAgainstPreviouslySeen(normalizedSubExpression, true, false);
isGroupBy = true;
comparisonType = ComparisonType.NONE;
} else if (subcontext == ParseSubContext.NotEmpty) {
@@ -514,7 +541,7 @@ public class ExpressionEvaluator implements Iterable<ExpressionEvaluator.Result>
// EQUALS filter expressions must HAVE "= <value>" part
throw new InvalidExpressionException(INVALID_EXPRESSION_FORM_MSG);
}
- validateSubExpressionAgainstPreviouslySeen(normalizedSubExpression, false);
+ validateSubExpressionAgainstPreviouslySeen(normalizedSubExpression, false, false);
}
if (nextToken.equals("parent")) {
@@ -578,7 +605,7 @@ public class ExpressionEvaluator implements Iterable<ExpressionEvaluator.Result>
// (SELECT max(mdt.id.timestamp) FROM MeasurementDataTrait mdt WHERE sched.id = mdt.schedule.id)
String traitName = parseTraitName(originalTokens);
addJoinCondition(JoinCondition.SCHEDULES);
- populatePredicateCollections(METRIC_DEF_ALIAS + ".name", "%" + traitName + "%", false);
+ populatePredicateCollections(METRIC_DEF_ALIAS + ".name", "%" + traitName + "%", false, false);
populatePredicateCollections(TRAIT_ALIAS + ".value", value);
whereStatics.add(TRAIT_ALIAS + ".schedule = " + JoinCondition.SCHEDULES.alias);
whereStatics.add(TRAIT_ALIAS
@@ -616,7 +643,7 @@ public class ExpressionEvaluator implements Iterable<ExpressionEvaluator.Result>
addJoinCondition(joinCondition);
addJoinCondition(definitionJoinCondition);
- populatePredicateCollections(PROP_SIMPLE_ALIAS + ".name", "%" + propertyName + "%", false);
+ populatePredicateCollections(PROP_SIMPLE_ALIAS + ".name", "%" + propertyName + "%", false, false);
populatePredicateCollections(PROP_SIMPLE_ALIAS + ".stringValue", value);
whereStatics.add(PROP_SIMPLE_ALIAS + ".configuration = " + joinCondition.alias);
@@ -757,13 +784,15 @@ public class ExpressionEvaluator implements Iterable<ExpressionEvaluator.Result>
* isGroupBy field or the explicitly overriding groupBy 3rd argument
*/
private void populatePredicateCollections(String predicateName, Object value) throws InvalidExpressionException {
- populatePredicateCollections(predicateName, value, isGroupBy);
+ populatePredicateCollections(predicateName, value, isGroupBy, isMemberOf);
}
- private void populatePredicateCollections(String predicateName, Object value, boolean groupBy)
+ private void populatePredicateCollections(String predicateName, Object value, boolean groupBy, boolean memberOf)
throws InvalidExpressionException {
if (groupBy) {
groupByElements.add(predicateName);
+ } else if (memberOf) {
+ memberOfElements.add((String) value); // this is the group name in this situation
} else {
String argumentName = getNextArgumentName();
@@ -1089,6 +1118,11 @@ public class ExpressionEvaluator implements Iterable<ExpressionEvaluator.Result>
}
}
+ // finally, if we are narrowing by group membership, add the join on implicit groups
+ if (!memberOfElements.isEmpty()) {
+ result += " JOIN res.implicitGroups implicitGroup";
+ }
+
return result;
}
@@ -1152,6 +1186,17 @@ public class ExpressionEvaluator implements Iterable<ExpressionEvaluator.Result>
}
}
+ // finally, if we are narrowing by group membership, add the implicit groups condition
+ if (!memberOfElements.isEmpty()) {
+ result += " AND implicitGroup.name IN (";
+ String separator = "";
+ for (String groupName : memberOfElements) {
+ result += (separator + "'" + groupName + "'");
+ separator = ", ";
+ }
+ result += ")";
+ }
+
return result;
}
@@ -1206,8 +1251,8 @@ public class ExpressionEvaluator implements Iterable<ExpressionEvaluator.Result>
return suffix.substring(1, suffix.length() - 1);
}
- private void validateSubExpressionAgainstPreviouslySeen(String normalizedSubExpression, boolean grouped)
- throws InvalidExpressionException {
+ private void validateSubExpressionAgainstPreviouslySeen(String normalizedSubExpression, boolean grouped,
+ boolean membership) throws InvalidExpressionException {
normalizedSubExpression = stripFunctionSuffix(normalizedSubExpression);
if (grouped) {
if (groupedSubExpressions.contains(normalizedSubExpression)) {
@@ -1220,6 +1265,12 @@ public class ExpressionEvaluator implements Iterable<ExpressionEvaluator.Result>
+ "]");
}
groupedSubExpressions.add(normalizedSubExpression);
+
+ } else if (membership) {
+ if (memberSubExpressions.contains(normalizedSubExpression)) {
+ throw new InvalidExpressionException("Redundant 'memberof' expression[" + normalizedSubExpression
+ + "] - these expressions must be unique");
+ }
} else {
if (groupedSubExpressions.contains(normalizedSubExpression)) {
throw new InvalidExpressionException(
commit 9b525e0d1655d0e28ba086604391e5ac07bfc7b7
Author: Jay Shaughnessy <jshaughn(a)redhat.com>
Date: Thu Mar 21 15:40:29 2013 -0400
Bug 824010
Have agent store configuration on filesystem instead of Java preferences
Rename the file name property to be more succinct:
Was: org.rhq.core.util.preferences.FilePreferencesFactory.file
Now: rhq.preferences.file
diff --git a/modules/core/util/src/main/java/org/rhq/core/util/preferences/FilePreferencesFactory.java b/modules/core/util/src/main/java/org/rhq/core/util/preferences/FilePreferencesFactory.java
index 69f36da..f28aa46 100644
--- a/modules/core/util/src/main/java/org/rhq/core/util/preferences/FilePreferencesFactory.java
+++ b/modules/core/util/src/main/java/org/rhq/core/util/preferences/FilePreferencesFactory.java
@@ -17,7 +17,7 @@ import org.apache.commons.logging.LogFactory;
* property <tt>-Djava.util.prefs.PreferencesFactory=org.rhq.core.util.preferences.FilePreferencesFactory</tt>.
* <p/>
* The file defaults to ${user.home}/.fileprefs, but may be overridden with the system property
- * <tt>org.rhq.core.util.preferences.FilePreferencesFactory.file</tt>
+ * <tt>rhq.preferences.file</tt>
* <p/>
* Both the system root and user root default to the user.home system property by default.
* <p/>
@@ -30,7 +30,7 @@ import org.apache.commons.logging.LogFactory;
public class FilePreferencesFactory implements PreferencesFactory {
private static final Log log = LogFactory.getLog(FilePreferencesFactory.class);
- public static final String SYSTEM_PROPERTY_FILE = "org.rhq.core.util.preferences.FilePreferencesFactory.file";
+ public static final String SYSTEM_PROPERTY_FILE = "rhq.preferences.file";
private static File preferencesFile;
11 years, 2 months
[rhq] 2 commits - modules/core modules/enterprise
by Jay Shaughnessy
modules/core/util/src/main/java/org/rhq/core/util/preferences/FilePreferencesFactory.java | 4
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/deploy/selection/SingleCompatibleResourceGroupSelector.java | 2
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/selector/SingleResourceGroupSelectorItem.java | 85 +
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/definitions/GroupDefinitionExpressionBuilder.java | 213 +++-
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/selection/SingleResourceGroupSelector.java | 2
modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages.properties | 2
modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_cs.properties | 2
modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_de.properties | 3
modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_ja.properties | 4
modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_ko.properties | 5
modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_pt.properties | 2
modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_ru.properties | 4
modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_zh.properties | 2
modules/enterprise/server/itests-2/src/test/java/org/rhq/enterprise/server/resource/group/definition/framework/test/ExpressionEvaluatorTest.java | 443 +++-------
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/group/definition/framework/ExpressionEvaluator.java | 87 +
15 files changed, 467 insertions(+), 393 deletions(-)
New commits:
commit 438c80560c8faeff638f2640cd8278aa4c214aaf
Author: Jay Shaughnessy <jshaughn(a)redhat.com>
Date: Thu Mar 21 16:12:26 2013 -0400
Bug 832398
RFE: Enable DynaGroups to be created based on the contents of another group
Introduce 'memberof = GroupName' expression into the group definition
language. memberof will restrict the dynagroup members to be a subset
of the specified resource group. Specifying multiple memberof
conditions will restrict the dynagroup members to be a subset of the
union of members of the specified groups.
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/deploy/selection/SingleCompatibleResourceGroupSelector.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/deploy/selection/SingleCompatibleResourceGroupSelector.java
index d370861..7e31550 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/deploy/selection/SingleCompatibleResourceGroupSelector.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/deploy/selection/SingleCompatibleResourceGroupSelector.java
@@ -31,6 +31,8 @@ import org.rhq.core.domain.criteria.ResourceGroupCriteria;
import org.rhq.enterprise.gui.coregui.client.CoreGUI;
import org.rhq.enterprise.gui.coregui.client.inventory.groups.ResourceGroupsDataSource;
+@Deprecated
+// could use SingleResourceGroupSelectorItem seeded with addFilterBundleTargetableOnly(true);
public class SingleCompatibleResourceGroupSelector extends ComboBoxItem {
public SingleCompatibleResourceGroupSelector(String name, String title) {
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/selector/SingleResourceGroupSelectorItem.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/selector/SingleResourceGroupSelectorItem.java
new file mode 100644
index 0000000..027cafc
--- /dev/null
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/selector/SingleResourceGroupSelectorItem.java
@@ -0,0 +1,85 @@
+/*
+ * RHQ Management Platform
+ * Copyright (C) 2005-2013 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.components.selector;
+
+import com.smartgwt.client.data.DSRequest;
+import com.smartgwt.client.types.TextMatchStyle;
+import com.smartgwt.client.widgets.form.fields.ComboBoxItem;
+import com.smartgwt.client.widgets.grid.ListGridField;
+
+import org.rhq.core.domain.criteria.ResourceGroupCriteria;
+import org.rhq.enterprise.gui.coregui.client.CoreGUI;
+import org.rhq.enterprise.gui.coregui.client.inventory.groups.ResourceGroupsDataSource;
+
+public class SingleResourceGroupSelectorItem extends ComboBoxItem {
+
+ private ResourceGroupCriteria criteria;
+
+ /**
+ * @param name
+ * @param title
+ * @param criteria initial values for filterId and filterName may be edited in the drop down but will be applied to
+ * the initial fetch.
+ */
+ public SingleResourceGroupSelectorItem(String name, String title, ResourceGroupCriteria criteria) {
+ super(name, title);
+
+ ListGridField nameField = new ListGridField("name");
+ ListGridField descriptionField = new ListGridField("description");
+
+ setOptionDataSource(new CompatibleResourceGroupsDataSource());
+
+ setWidth(240);
+ setTitle(CoreGUI.getMessages().common_title_resource_group());
+
+ setValueField("id");
+ setDisplayField("name");
+ setPickListWidth(450);
+ setPickListFields(nameField, descriptionField);
+ setTextMatchStyle(TextMatchStyle.SUBSTRING);
+
+ this.criteria = (null == criteria) ? new ResourceGroupCriteria() : criteria;
+ }
+
+ protected class CompatibleResourceGroupsDataSource extends ResourceGroupsDataSource {
+
+ @Override
+ protected ResourceGroupCriteria getFetchCriteria(final DSRequest request) {
+ // We don't want to use the superclass's getFetchCriteria because our selected value
+ // is either a Integer (when a real group has been selected) or a String (when a partial search string is selected).
+ // So, here we create our own criteria. See BZ 802528.
+ ResourceGroupCriteria result = criteria;
+ String filterString = getFilter(request, "id", String.class);
+ if (filterString != null) {
+ try {
+ Integer id = new Integer(filterString);
+ result.addFilterId(id);
+ } catch (Exception e) {
+ result.addFilterName(filterString);
+ }
+ }
+
+ return result;
+ }
+ }
+}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/definitions/GroupDefinitionExpressionBuilder.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/definitions/GroupDefinitionExpressionBuilder.java
index e7e6181..bb49a93 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/definitions/GroupDefinitionExpressionBuilder.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/definitions/GroupDefinitionExpressionBuilder.java
@@ -54,6 +54,7 @@ import org.rhq.core.domain.util.PageList;
import org.rhq.enterprise.gui.coregui.client.CoreGUI;
import org.rhq.enterprise.gui.coregui.client.Messages;
import org.rhq.enterprise.gui.coregui.client.components.form.SortedSelectItem;
+import org.rhq.enterprise.gui.coregui.client.components.selector.SingleResourceGroupSelectorItem;
import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup;
import org.rhq.enterprise.gui.coregui.client.gwt.GroupDefinitionExpressionBuilderGWTServiceAsync;
import org.rhq.enterprise.gui.coregui.client.util.enhanced.EnhancedVLayout;
@@ -78,6 +79,8 @@ public class GroupDefinitionExpressionBuilder extends Window {
private SelectItem expressionTypeItem;
private SelectItem resourceItem;
private RadioGroupItem groupByItem;
+ private RadioGroupItem memberOfItem;
+ private SingleResourceGroupSelectorItem memberOfGroupItem;
private TextAreaItem expressionItem;
private ArrayList<String> plugins = new ArrayList<String>();
@@ -276,6 +279,33 @@ public class GroupDefinitionExpressionBuilder extends Window {
}
});
+ this.memberOfItem = new RadioGroupItem("memberOf", MSG.view_dynagroup_exprBuilder_memberOf());
+ this.memberOfItem.setTooltip(MSG.view_dynagroup_exprBuilder_memberOf_tooltip());
+ this.memberOfItem.setHoverWidth(250);
+ this.memberOfItem.setDefaultValue(MSG.common_val_no());
+ this.memberOfItem.setValueMap(MSG.common_val_yes(), MSG.common_val_no());
+ this.memberOfItem.setVertical(false);
+ this.memberOfItem.addChangedHandler(new ChangedHandler() {
+ @Override
+ public void onChanged(ChangedEvent event) {
+ enableDisableComponents();
+ buildExpressionValue();
+ }
+ });
+
+ this.memberOfGroupItem = new SingleResourceGroupSelectorItem("memberOfGroup", MSG.common_title_group(), null);
+ this.memberOfGroupItem.setTooltip(MSG.view_dynagroup_exprBuilder_groupBy_tooltip());
+ this.memberOfGroupItem.setHoverWidth(250);
+ this.memberOfGroupItem.setRedrawOnChange(true);
+ this.memberOfGroupItem.setWidth("*");
+ this.memberOfGroupItem.setDefaultToFirstOption(true);
+ this.memberOfGroupItem.addChangedHandler(new ChangedHandler() {
+ @Override
+ public void onChanged(ChangedEvent event) {
+ buildExpressionValue();
+ }
+ });
+
this.groupByItem = new RadioGroupItem("groupBy", MSG.view_dynagroup_exprBuilder_groupBy());
this.groupByItem.setTooltip(MSG.view_dynagroup_exprBuilder_groupBy_tooltip());
this.groupByItem.setHoverWidth(250);
@@ -332,9 +362,9 @@ public class GroupDefinitionExpressionBuilder extends Window {
form.setAutoWidth();
form.setAutoHeight();
form.setCellPadding(5);
- form.setFields(this.expressionItem, this.groupByItem, this.resourceItem, this.expressionTypeItem,
- this.pluginItem, this.resourceTypeItem, this.propertyNameItem, this.unsetItem, this.compareTypeItem,
- this.valueItem, addButton, closeButton);
+ form.setFields(this.expressionItem, this.memberOfItem, this.memberOfGroupItem, this.groupByItem,
+ this.resourceItem, this.expressionTypeItem, this.pluginItem, this.resourceTypeItem, this.propertyNameItem,
+ this.unsetItem, this.compareTypeItem, this.valueItem, addButton, closeButton);
EnhancedVLayout layout = new EnhancedVLayout();
layout.setLayoutMargin(5);
@@ -369,56 +399,87 @@ public class GroupDefinitionExpressionBuilder extends Window {
public void addExpression(String newExpression);
}
+ private boolean shouldMemberOfGroupBeDisabled() {
+ String expressionType = this.expressionTypeItem.getValueAsString();
+
+ if (MSG.common_val_no().equals(this.memberOfItem.getValueAsString())) {
+ return true;
+ }
+ return false; // they are enabled otherwise
+ }
+
+ private boolean shouldResourceAndExpressionTypeBeDisabled() {
+ String expressionType = this.expressionTypeItem.getValueAsString();
+
+ if (MSG.common_val_yes().equals(this.memberOfItem.getValueAsString())) {
+ return true;
+ }
+ return false; // they are enabled otherwise
+ }
+
private boolean shouldPluginAndResourceTypeBeDisabled() {
String expressionType = this.expressionTypeItem.getValueAsString();
+ if (MSG.common_val_yes().equals(this.memberOfItem.getValueAsString())) {
+ return true;
+ }
if (MSG.view_dynagroup_exprBuilder_expressionType_resource().equals(expressionType)) {
return true;
- } else if (MSG.view_dynagroup_exprBuilder_expressionType_resourceCategory().equals(expressionType)) {
+ }
+ if (MSG.view_dynagroup_exprBuilder_expressionType_resourceCategory().equals(expressionType)) {
return true;
- } else if ((MSG.view_dynagroup_exprBuilder_expressionType_resourceType().equals(expressionType))
+ }
+ if ((MSG.view_dynagroup_exprBuilder_expressionType_resourceType().equals(expressionType))
&& (MSG.common_val_yes().equals(groupByItem.getValueAsString()))) {
return true;
}
+
return false; // they are enabled otherwise
}
private boolean shouldComparisonTypeAndValueBeDisabled() {
+ boolean memberOf = MSG.common_val_yes().equals(this.memberOfItem.getValueAsString());
boolean groupBy = MSG.common_val_yes().equals(this.groupByItem.getValueAsString());
boolean unset = MSG.common_val_yes().equals(this.unsetItem.getValueAsString());
String expressionType = this.expressionTypeItem.getValueAsString();
- if (groupBy) {
+ if (groupBy || memberOf || unset) {
return true;
- } else if (unset) {
- return true;
- } else if (MSG.view_dynagroup_exprBuilder_expressionType_resourceType().equals(expressionType)) {
+ }
+ if (MSG.view_dynagroup_exprBuilder_expressionType_resourceType().equals(expressionType)) {
return true;
}
+
return false; // they are enabled otherwise
}
private boolean shouldGroupByBeDisabled() {
+ boolean memberOf = MSG.common_val_yes().equals(this.memberOfItem.getValueAsString());
boolean unset = MSG.common_val_yes().equals(this.unsetItem.getValueAsString());
- if (unset) {
+ if (memberOf || unset) {
return true;
}
return false; // enabled otherwise
}
private boolean shouldUnsetBeDisabled() {
+ boolean memberOf = MSG.common_val_yes().equals(this.memberOfItem.getValueAsString());
boolean groupBy = MSG.common_val_yes().equals(this.groupByItem.getValueAsString());
- if (groupBy) {
+ if (groupBy || memberOf) {
return true;
}
return false; // enabled otherwise
}
private boolean shouldPropertyNameBeDisabled() {
+ boolean memberOf = MSG.common_val_yes().equals(this.memberOfItem.getValueAsString());
String expressionType = this.expressionTypeItem.getValueAsString();
+ if (memberOf) {
+ return true;
+ }
if (MSG.view_dynagroup_exprBuilder_expressionType_resourceType().equals(expressionType)) {
return true;
} else if (MSG.view_dynagroup_exprBuilder_expressionType_resourceCategory().equals(expressionType)) {
@@ -546,12 +607,17 @@ public class GroupDefinitionExpressionBuilder extends Window {
}
private void enableDisableComponents() {
+ boolean memberOfGroupDisabled = shouldMemberOfGroupBeDisabled();
+ boolean resourceAndExpressionTypeDisabled = shouldResourceAndExpressionTypeBeDisabled();
boolean pluginAndResourceTypeDisabled = shouldPluginAndResourceTypeBeDisabled();
boolean comparisonTypeAndValueDisabled = shouldComparisonTypeAndValueBeDisabled();
boolean groupByDisabled = shouldGroupByBeDisabled();
boolean unsetDisabled = shouldUnsetBeDisabled();
boolean propertyNameDisabled = shouldPropertyNameBeDisabled();
+ this.memberOfGroupItem.setDisabled(memberOfGroupDisabled);
+ this.resourceItem.setDisabled(resourceAndExpressionTypeDisabled);
+ this.expressionTypeItem.setDisabled(resourceAndExpressionTypeDisabled);
this.pluginItem.setDisabled(pluginAndResourceTypeDisabled);
this.resourceTypeItem.setDisabled(pluginAndResourceTypeDisabled);
this.compareTypeItem.setDisabled(comparisonTypeAndValueDisabled);
@@ -565,83 +631,90 @@ public class GroupDefinitionExpressionBuilder extends Window {
private void buildExpressionValue() {
+ boolean memberOf = MSG.common_val_yes().equals(this.memberOfItem.getValueAsString());
boolean groupBy = MSG.common_val_yes().equals(groupByItem.getValueAsString());
boolean unset = MSG.common_val_yes().equals(unsetItem.getValueAsString());
StringBuilder buf = new StringBuilder();
- if (groupBy) {
- buf.append("groupby ");
- }
- if (unset) {
- buf.append("empty ");
- }
+ if (memberOf) {
+ buf.append("memberof = " + memberOfGroupItem.getDisplayValue());
- buf.append("resource.");
-
- String resourceLevel = resourceItem.getValueAsString();
- if (MSG.view_dynagroup_exprBuilder_resource_resource().equals(resourceLevel)) {
- // do nothing
- } else if (MSG.view_dynagroup_exprBuilder_resource_child().equals(resourceLevel)) {
- buf.append("child.");
- } else if (MSG.view_dynagroup_exprBuilder_resource_parent().equals(resourceLevel)) {
- buf.append("parent.");
- } else if (MSG.view_dynagroup_exprBuilder_resource_grandparent().equals(resourceLevel)) {
- buf.append("grandParent.");
- } else if (MSG.view_dynagroup_exprBuilder_resource_greatGrandparent().equals(resourceLevel)) {
- buf.append("greatGrandParent.");
- } else if (MSG.view_dynagroup_exprBuilder_resource_greatGreatGrandparent().equals(resourceLevel)) {
- buf.append("greatGreatGrandParent.");
- }
+ } else {
- String eType = expressionTypeItem.getValueAsString();
- if (MSG.view_dynagroup_exprBuilder_expressionType_resource().equals(eType)) {
- buf.append(propertyNameItem.getValueAsString());
- } else if (MSG.view_dynagroup_exprBuilder_expressionType_resourceType().equals(eType)) {
- buf.append("type.plugin");
- } else if (MSG.view_dynagroup_exprBuilder_expressionType_resourceCategory().equals(eType)) {
- buf.append("type.category");
- } else if (MSG.view_dynagroup_exprBuilder_expressionType_trait().equals(eType)) {
- buf.append("trait[" + propertyNameItem.getValueAsString() + "]");
- } else if (MSG.view_dynagroup_exprBuilder_expressionType_pluginConfig().equals(eType)) {
- buf.append("pluginConfiguration[" + propertyNameItem.getValueAsString() + "]");
- } else if (MSG.view_dynagroup_exprBuilder_expressionType_resourceConfig().equals(eType)) {
- buf.append("resourceConfiguration[" + propertyNameItem.getValueAsString() + "]");
- }
+ if (groupBy) {
+ buf.append("groupby ");
+ }
+ if (unset) {
+ buf.append("empty ");
+ }
- if (!groupBy && !unset) {
+ buf.append("resource.");
- String selectedComparison = compareTypeItem.getValueAsString();
- if (MSG.view_dynagroup_exprBuilder_comparisonType_equals().equals(selectedComparison)) {
+ String resourceLevel = resourceItem.getValueAsString();
+ if (MSG.view_dynagroup_exprBuilder_resource_resource().equals(resourceLevel)) {
// do nothing
- } else if (MSG.view_dynagroup_exprBuilder_comparisonType_contains().equals(selectedComparison)) {
- buf.append(".contains");
- } else if (MSG.view_dynagroup_exprBuilder_comparisonType_startsWith().equals(selectedComparison)) {
- buf.append(".startsWith");
- } else if (MSG.view_dynagroup_exprBuilder_comparisonType_endsWith().equals(selectedComparison)) {
- buf.append(".endsWith");
+ } else if (MSG.view_dynagroup_exprBuilder_resource_child().equals(resourceLevel)) {
+ buf.append("child.");
+ } else if (MSG.view_dynagroup_exprBuilder_resource_parent().equals(resourceLevel)) {
+ buf.append("parent.");
+ } else if (MSG.view_dynagroup_exprBuilder_resource_grandparent().equals(resourceLevel)) {
+ buf.append("grandParent.");
+ } else if (MSG.view_dynagroup_exprBuilder_resource_greatGrandparent().equals(resourceLevel)) {
+ buf.append("greatGrandParent.");
+ } else if (MSG.view_dynagroup_exprBuilder_resource_greatGreatGrandparent().equals(resourceLevel)) {
+ buf.append("greatGreatGrandParent.");
+ }
+
+ String eType = expressionTypeItem.getValueAsString();
+ if (MSG.view_dynagroup_exprBuilder_expressionType_resource().equals(eType)) {
+ buf.append(propertyNameItem.getValueAsString());
+ } else if (MSG.view_dynagroup_exprBuilder_expressionType_resourceType().equals(eType)) {
+ buf.append("type.plugin");
+ } else if (MSG.view_dynagroup_exprBuilder_expressionType_resourceCategory().equals(eType)) {
+ buf.append("type.category");
+ } else if (MSG.view_dynagroup_exprBuilder_expressionType_trait().equals(eType)) {
+ buf.append("trait[" + propertyNameItem.getValueAsString() + "]");
+ } else if (MSG.view_dynagroup_exprBuilder_expressionType_pluginConfig().equals(eType)) {
+ buf.append("pluginConfiguration[" + propertyNameItem.getValueAsString() + "]");
+ } else if (MSG.view_dynagroup_exprBuilder_expressionType_resourceConfig().equals(eType)) {
+ buf.append("resourceConfiguration[" + propertyNameItem.getValueAsString() + "]");
}
- buf.append(" = ");
+ if (!groupBy && !unset) {
+
+ String selectedComparison = compareTypeItem.getValueAsString();
+ if (MSG.view_dynagroup_exprBuilder_comparisonType_equals().equals(selectedComparison)) {
+ // do nothing
+ } else if (MSG.view_dynagroup_exprBuilder_comparisonType_contains().equals(selectedComparison)) {
+ buf.append(".contains");
+ } else if (MSG.view_dynagroup_exprBuilder_comparisonType_startsWith().equals(selectedComparison)) {
+ buf.append(".startsWith");
+ } else if (MSG.view_dynagroup_exprBuilder_comparisonType_endsWith().equals(selectedComparison)) {
+ buf.append(".endsWith");
+ }
- if (MSG.view_dynagroup_exprBuilder_expressionType_resource().equals(eType)
- || MSG.view_dynagroup_exprBuilder_expressionType_resourceCategory().equals(eType)) {
- buf.append(valueItem.getValueAsString());
+ buf.append(" = ");
+
+ if (MSG.view_dynagroup_exprBuilder_expressionType_resource().equals(eType)
+ || MSG.view_dynagroup_exprBuilder_expressionType_resourceCategory().equals(eType)) {
+ buf.append(valueItem.getValueAsString());
+ } else if (MSG.view_dynagroup_exprBuilder_expressionType_resourceType().equals(eType)) {
+ String d = buf.toString();
+ buf.append(pluginItem.getValueAsString());
+ buf.append("\n");
+ buf.append(d.replaceAll("plugin", "name"));
+ buf.append(resourceTypeItem.getValueAsString());
+ } else if (MSG.view_dynagroup_exprBuilder_expressionType_trait().equals(eType)
+ || MSG.view_dynagroup_exprBuilder_expressionType_pluginConfig().equals(eType)
+ || MSG.view_dynagroup_exprBuilder_expressionType_resourceConfig().equals(eType)) {
+ buf.append(valueItem.getValueAsString());
+ }
} else if (MSG.view_dynagroup_exprBuilder_expressionType_resourceType().equals(eType)) {
String d = buf.toString();
- buf.append(pluginItem.getValueAsString());
buf.append("\n");
buf.append(d.replaceAll("plugin", "name"));
- buf.append(resourceTypeItem.getValueAsString());
- } else if (MSG.view_dynagroup_exprBuilder_expressionType_trait().equals(eType)
- || MSG.view_dynagroup_exprBuilder_expressionType_pluginConfig().equals(eType)
- || MSG.view_dynagroup_exprBuilder_expressionType_resourceConfig().equals(eType)) {
- buf.append(valueItem.getValueAsString());
}
- } else if (MSG.view_dynagroup_exprBuilder_expressionType_resourceType().equals(eType)) {
- String d = buf.toString();
- buf.append("\n");
- buf.append(d.replaceAll("plugin", "name"));
}
String expressionValueString = buf.toString();
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/selection/SingleResourceGroupSelector.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/selection/SingleResourceGroupSelector.java
index 8928066..fc9bda9 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/selection/SingleResourceGroupSelector.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/selection/SingleResourceGroupSelector.java
@@ -24,7 +24,7 @@ import com.smartgwt.client.types.SelectionStyle;
import org.rhq.core.domain.resource.group.GroupCategory;
/**
- * This forces the user to only be able to select a single resource.
+ * This forces the user to only be able to select a single resource group.
*
* @author Jay Shaughnessy
*/
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 1f2e209..0d731ab 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
@@ -1472,6 +1472,8 @@ view_dynagroup_exprBuilder_expressionType_trait = Trait
view_dynagroup_exprBuilder_expression_tooltip = This is the full expression that is represented by the selections in the form below. This text will be added to your group definition expression text when you click the "Add Expression" button.
view_dynagroup_exprBuilder_groupBy = Group by
view_dynagroup_exprBuilder_groupBy_tooltip = GroupBy will cause the system to pivot on the values from the entered expressions creating a separate group for each value. For example, GroupBy on the cluster name to create a group for each cluster with all cluster members in it.
+view_dynagroup_exprBuilder_memberOf = Member of
+view_dynagroup_exprBuilder_memberOf_tooltip = memberof will restrict the dynagroup members to be a subset of the specified resource group. Specifying multiple memberof conditions will restrict the dynagroup members to be a subset of the union of members of the specified groups.
view_dynagroup_exprBuilder_noPlugins = --No plugins--
view_dynagroup_exprBuilder_noProperties = --No properties--
view_dynagroup_exprBuilder_noResourceTypes = --No resource types--
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 255391f..b4ba1e4 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
@@ -1486,6 +1486,8 @@ view_dynagroup_exprBuilder_expressionType_trait = Vlastnost (trait)
##view_dynagroup_exprBuilder_expression_tooltip = This is the full expression that is represented by the selections in the form below. This text will be added to your group definition expression text when you click the "Add Expression" button.
view_dynagroup_exprBuilder_groupBy = Seskupit podle
##view_dynagroup_exprBuilder_groupBy_tooltip = GroupBy will cause the system to pivot on the values from the entered expressions creating a separate group for each value. For example, GroupBy on the cluster name to create a group for each cluster with all cluster members in it.
+##view_dynagroup_exprBuilder_memberOf = Member of
+##view_dynagroup_exprBuilder_memberOf_tooltip = memberof will restrict the dynagroup members to be a subset of the specified resource group. Specifying multiple memberof conditions will restrict the dynagroup members to be a subset of the union of members of the specified groups.
view_dynagroup_exprBuilder_noPlugins = --Žádné zásuvné moduly--
view_dynagroup_exprBuilder_noProperties = --Žádné vlastnosti--
view_dynagroup_exprBuilder_noResourceTypes = --Žádné typy zdrojů--
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 6f6743c..016b160 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
@@ -1330,6 +1330,9 @@ view_dynagroup_exprBuilder_expressionType_resourceConfig = Ressourcen-Konfigurat
view_dynagroup_exprBuilder_expressionType_resourceType = Ressourcen-Typ
view_dynagroup_exprBuilder_expressionType_trait = Trait
view_dynagroup_exprBuilder_groupBy = Gruppieren nach
+##view_dynagroup_exprBuilder_groupBy_tooltip = groupby will cause the system to pivot on the values from the entered expressions creating a separate group for each value. For example, groupby on the cluster name to create a group for each cluster with all cluster members in it.
+##view_dynagroup_exprBuilder_memberOf = Member of
+##view_dynagroup_exprBuilder_memberOf_tooltip = memberof will restrict the dynagroup members to be a subset of the specified resource group. Specifying multiple memberof conditions will restrict the dynagroup members to be a subset of the union of members of the specified groups.
view_dynagroup_exprBuilder_noPlugins = --Keine Plugins--
view_dynagroup_exprBuilder_noProperties = --Keine Eigenschaften--
view_dynagroup_exprBuilder_noResourceTypes = --Keine Ressourcen-Typen--
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 09579ae..1f24034 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
@@ -1457,8 +1457,10 @@ view_dynagroup_exprBuilder_expressionType_resourceType = リソースタイプ
view_dynagroup_exprBuilder_expressionType_tooltip = この式のプロパティは以下のものに切り替わります。<br/> <b>リソース</b>: 名前やバージョンといったリソースプロパティ<br/> <b>リソースタイプ</b>: 特定タイプのリソースの検索<br/> <b>リソースカテゴリ</b>: プラットフォーム、サーバー、サービスといったカテゴリによるリソース検索<br/> <b>トレイト</b>: モニタされたトレイトのために選択された値を持つリソース<br/> <b>プラグイン構成</b>: コンポーネントのプラグインコンポーネント構成設定による検索<br/> <b>リソース構成</b>: 管理リソースの構成設定による検索
view_dynagroup_exprBuilder_expressionType_trait = トレイト
view_dynagroup_exprBuilder_expression_tooltip = これは以下のフォーム内の選択によって表現される完全な式です。このテキストは、"式の追加"ボタンをクリックすると、グループ定義式のテキストに追加されます。
-view_dynagroup_exprBuilder_groupBy = Group by
+##view_dynagroup_exprBuilder_groupBy = Group by
view_dynagroup_exprBuilder_groupBy_tooltip = GroupByはシステムが入力式からの値についてピボット解析ができるようにします。例えば、クラスター名によるGroupByによって、すべてのクラスターメンバーをその中に含むようなクラスタのグループを作成します。
+##view_dynagroup_exprBuilder_memberOf = Member of
+##view_dynagroup_exprBuilder_memberOf_tooltip = memberof will restrict the dynagroup members to be a subset of the specified resource group. Specifying multiple memberof conditions will restrict the dynagroup members to be a subset of the union of members of the specified groups.
view_dynagroup_exprBuilder_noPlugins = --プラグインなし--
view_dynagroup_exprBuilder_noProperties = --プラグインなし--
view_dynagroup_exprBuilder_noResourceTypes = --リソースタイプなし--
diff --git a/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_ko.properties b/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_ko.properties
index 84e024a..f832c7d 100644
--- a/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_ko.properties
+++ b/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages_ko.properties
@@ -1218,7 +1218,10 @@ view_dynagroup_exprBuilder_expressionType_pluginConfig = 플러그인 설정
view_dynagroup_exprBuilder_expressionType_resource = 리소스
view_dynagroup_exprBuilder_expressionType_resourceConfig = 리소스 설정
view_dynagroup_exprBuilder_expressionType_trait = 특성
-view_dynagroup_exprBuilder_groupBy = Group by
+##view_dynagroup_exprBuilder_groupBy = Group by
+##view_dynagroup_exprBuilder_groupBy_tooltip = groupby will cause the system to pivot on the values from the entered expressions creating a separate group for each value. For example, groupby on the cluster name to create a group for each cluster with all cluster members in it.
+##view_dynagroup_exprBuilder_memberOf = Member of
+##view_dynagroup_exprBuilder_memberOf_tooltip = memberof will restrict the dynagroup members to be a subset of the specified resource group. Specifying multiple memberof conditions will restrict the dynagroup members to be a subset of the union of members of the specified groups.
view_dynagroup_exprBuilder_noPlugins = --플러그인 없이--
view_dynagroup_exprBuilder_noProperties = --속성 없이--
view_dynagroup_exprBuilder_pluginLoadFailure = 플러그인 목록을 가져올 수 없습니다
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 262c3c4..bb7d48b 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
@@ -1481,6 +1481,8 @@ view_dynagroup_exprBuilder_expressionType_trait = Caracter�stica
view_dynagroup_exprBuilder_expression_tooltip = Esta � a express�o completa com base nas defini��es do formul�rio abaixo. Este texto ser� adicionado ao campo de express�o da defini��o do grupo quando voc� clicar o bot�o "Adicionar Express�o"
view_dynagroup_exprBuilder_groupBy = Agrupado por
view_dynagroup_exprBuilder_groupBy_tooltip = GroupBy far� com que o resultado da busca seja agrupado de acordo com os valores informados na express�o. Por exemplo, usando GroupBy para o nome de um cluster JBossAS, o resultado criar� um grupo para cada cluster e seus membros.
+##view_dynagroup_exprBuilder_memberOf = Member of
+##view_dynagroup_exprBuilder_memberOf_tooltip = memberof will restrict the dynagroup members to be a subset of the specified resource group. Specifying multiple memberof conditions will restrict the dynagroup members to be a subset of the union of members of the specified groups.
view_dynagroup_exprBuilder_noPlugins = --Sem plugins--
view_dynagroup_exprBuilder_noProperties = --Sem propriedades--
view_dynagroup_exprBuilder_noResourceTypes = --Nehum tipo de recurso--
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 d96d127..f354bd8 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
@@ -2654,6 +2654,10 @@ view_admin_systemSettings_LDAPBindPW_name = Пароль
##view_configEdit_unset = Unset?
##view_configEdit_value = Value
##view_dashboardsManager_message_title_details = <h1>Welcome to {0}</h1>\n<p>This dashboard can be edited by clicking the (Edit Mode) button above.</p>\n<p>What would you like to do?</p>\n<p> <a href=\"{1}\">Import newly discovered resources.</a></p>\n<p> <a href=\"{2}\">Search for resources.</a></p>\n<p> <a href=\"{3}\">See help and documentation.</a></p>
+##view_dynagroup_exprBuilder_groupBy = Group by
+##view_dynagroup_exprBuilder_groupBy_tooltip = groupby will cause the system to pivot on the values from the entered expressions creating a separate group for each value. For example, groupby on the cluster name to create a group for each cluster with all cluster members in it.
+##view_dynagroup_exprBuilder_memberOf = Member of
+##view_dynagroup_exprBuilder_memberOf_tooltip = memberof will restrict the dynagroup members to be a subset of the specified resource group. Specifying multiple memberof conditions will restrict the dynagroup members to be a subset of the union of members of the specified groups.
##view_group_common_emptyGroup = An empty group is always considered as mixed.
##view_group_detail_explicitAvail = Group availability for explicit members (does not include recursive members).
##view_group_detail_failLoad = Failed to load group for group with ID [{0}]
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 9159a53..e19f5f2 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
@@ -1459,6 +1459,8 @@ view_dynagroup_exprBuilder_expressionType_trait = \u7279\u5f81
view_dynagroup_exprBuilder_expression_tooltip = This is the full expression that is represented by the selections in the form below. This text will be added to your group definition expression text when you click the "Add Expression" button.
view_dynagroup_exprBuilder_groupBy = \u5206\u7ec4
view_dynagroup_exprBuilder_groupBy_tooltip = GroupBy will cause the system to pivot on the values from the entered expressions creating a separate group for each value. For example, GroupBy on the cluster name to create a group for each cluster with all cluster members in it.
+##view_dynagroup_exprBuilder_memberOf = Member of
+##view_dynagroup_exprBuilder_memberOf_tooltip = memberof will restrict the dynagroup members to be a subset of the specified resource group. Specifying multiple memberof conditions will restrict the dynagroup members to be a subset of the union of members of the specified groups.
view_dynagroup_exprBuilder_noPlugins = --\u65e0\u63d2\u4ef6--
view_dynagroup_exprBuilder_noProperties = -\u65e0\u5c5e\u6027--
view_dynagroup_exprBuilder_noResourceTypes = --\u65e0\u8d44\u6e90\u7c7b\u578b--
diff --git a/modules/enterprise/server/itests-2/src/test/java/org/rhq/enterprise/server/resource/group/definition/framework/test/ExpressionEvaluatorTest.java b/modules/enterprise/server/itests-2/src/test/java/org/rhq/enterprise/server/resource/group/definition/framework/test/ExpressionEvaluatorTest.java
index a1c8a65..92919c5 100644
--- a/modules/enterprise/server/itests-2/src/test/java/org/rhq/enterprise/server/resource/group/definition/framework/test/ExpressionEvaluatorTest.java
+++ b/modules/enterprise/server/itests-2/src/test/java/org/rhq/enterprise/server/resource/group/definition/framework/test/ExpressionEvaluatorTest.java
@@ -25,8 +25,8 @@ import java.util.List;
import org.testng.annotations.Test;
import org.rhq.core.domain.resource.group.DuplicateExpressionTypeException;
-import org.rhq.enterprise.server.resource.group.definition.framework.ExpressionEvaluator;
import org.rhq.core.domain.resource.group.InvalidExpressionException;
+import org.rhq.enterprise.server.resource.group.definition.framework.ExpressionEvaluator;
import org.rhq.enterprise.server.test.AbstractEJB3Test;
import org.rhq.enterprise.server.util.QueryUtility;
@@ -154,7 +154,15 @@ public class ExpressionEvaluatorTest extends AbstractEJB3Test {
" AND simple.stringValue IS NULL " + //
" AND simple.configuration = pluginConf " + //
" AND simpleDef.configurationDefinition = pluginConfDef " + //
- " AND simple.name = simpleDef.name AND simpleDef.type != 'PASSWORD' " }, };
+ " AND simple.name = simpleDef.name AND simpleDef.type != 'PASSWORD' " },
+
+ { "resource.name = joseph; " + //
+ "memberof = Group Name",
+
+ "SELECT res.id FROM Resource res " + //
+ "JOIN res.implicitGroups implicitGroup " + //
+ "WHERE res.name = :arg1 " + //
+ " AND implicitGroup.name IN ('Group Name') " }, };
}
@Test(groups = "integration.session")
@@ -220,12 +228,14 @@ public class ExpressionEvaluatorTest extends AbstractEJB3Test {
String[] input = { "resource.child.name", //
"resource.pluginConfiguration[partition]", //
"resource.pluginConfiguration[partition].contains", //
- "resource.pluginConfiguration[partition.name].contains" };
+ "resource.pluginConfiguration[partition.name].contains", //
+ "memberof = GroupName" };
String[][] expectedOutput = { { "resource", "child", "name" }, //
{ "resource", "pluginConfiguration[partition]" }, //
{ "resource", "pluginConfiguration[partition]", "contains" }, //
- { "resource", "pluginConfiguration[partition.name]", "contains" } };
+ { "resource", "pluginConfiguration[partition.name]", "contains" }, //
+ { "memberof" } };
ExpressionEvaluator evaluator = new ExpressionEvaluator();
evaluator.setTestMode(true); // to prevent actual query from happening
@@ -274,686 +284,519 @@ public class ExpressionEvaluatorTest extends AbstractEJB3Test {
}
}
- @Test(expectedExceptions = DuplicateExpressionTypeException.class,
- expectedExceptionsMessageRegExp = "You cannot specify multiple.*")
+ @Test(expectedExceptions = DuplicateExpressionTypeException.class, expectedExceptionsMessageRegExp = "You cannot specify multiple.*")
public void doNotAllowMultipleResourceTraitExpressions() throws Exception {
evaluateExpressions(new ExpressionGenerator() {
@Override
public String[] getExpressions() {
- return new String[] {
- "resource.trait[agentHomeDirectory] = /var/rhq-agent",
- "resource.trait[reasonForLastRestart] = OOMError"
- };
+ return new String[] { "resource.trait[agentHomeDirectory] = /var/rhq-agent",
+ "resource.trait[reasonForLastRestart] = OOMError" };
}
});
}
- @Test(expectedExceptions = DuplicateExpressionTypeException.class,
- expectedExceptionsMessageRegExp = "You cannot specify multiple.*")
+ @Test(expectedExceptions = DuplicateExpressionTypeException.class, expectedExceptionsMessageRegExp = "You cannot specify multiple.*")
public void doNotAllowMultipleChildResourceTraitExpressions() throws Exception {
evaluateExpressions(new ExpressionGenerator() {
@Override
public String[] getExpressions() {
- return new String[] {
- "resource.child.trait[agentHomeDirectory] = /var/rhq-agent",
- "resource.child.trait[reasonForLastRestart] = OOMError"
- };
+ return new String[] { "resource.child.trait[agentHomeDirectory] = /var/rhq-agent",
+ "resource.child.trait[reasonForLastRestart] = OOMError" };
}
});
}
- @Test(expectedExceptions = DuplicateExpressionTypeException.class,
- expectedExceptionsMessageRegExp = "You cannot specify multiple.*")
+ @Test(expectedExceptions = DuplicateExpressionTypeException.class, expectedExceptionsMessageRegExp = "You cannot specify multiple.*")
public void doNotAllowMultipleParentResourceTraitExpressions() throws Exception {
evaluateExpressions(new ExpressionGenerator() {
@Override
public String[] getExpressions() {
- return new String[] {
- "resource.parent.trait[agentHomeDirectory] = /var/rhq-agent",
- "resource.parent.trait[reasonForLastRestart] = OOMError"
- };
+ return new String[] { "resource.parent.trait[agentHomeDirectory] = /var/rhq-agent",
+ "resource.parent.trait[reasonForLastRestart] = OOMError" };
}
});
}
- @Test(expectedExceptions = DuplicateExpressionTypeException.class,
- expectedExceptionsMessageRegExp = "You cannot specify multiple.*")
+ @Test(expectedExceptions = DuplicateExpressionTypeException.class, expectedExceptionsMessageRegExp = "You cannot specify multiple.*")
public void doNotAllowMultipleGrandParentResourceTraitExpressions() throws Exception {
evaluateExpressions(new ExpressionGenerator() {
@Override
public String[] getExpressions() {
- return new String[] {
- "resource.grandParent.trait[agentHomeDirectory] = /var/rhq-agent",
- "resource.grandParent.trait[reasonForLastRestart] = OOMError"
- };
+ return new String[] { "resource.grandParent.trait[agentHomeDirectory] = /var/rhq-agent",
+ "resource.grandParent.trait[reasonForLastRestart] = OOMError" };
}
});
}
- @Test(expectedExceptions = DuplicateExpressionTypeException.class,
- expectedExceptionsMessageRegExp = "You cannot specify multiple.*")
+ @Test(expectedExceptions = DuplicateExpressionTypeException.class, expectedExceptionsMessageRegExp = "You cannot specify multiple.*")
public void doNotAllowMultipleGreatGrandParentResourceTraitExpressions() throws Exception {
evaluateExpressions(new ExpressionGenerator() {
@Override
public String[] getExpressions() {
- return new String[] {
- "resource.greatGrandParent.trait[agentHomeDirectory] = /var/rhq-agent",
- "resource.greatGrandParent.trait[reasonForLastRestart] = OOMError"
- };
+ return new String[] { "resource.greatGrandParent.trait[agentHomeDirectory] = /var/rhq-agent",
+ "resource.greatGrandParent.trait[reasonForLastRestart] = OOMError" };
}
});
}
- @Test(expectedExceptions = DuplicateExpressionTypeException.class,
- expectedExceptionsMessageRegExp = "You cannot specify multiple.*")
+ @Test(expectedExceptions = DuplicateExpressionTypeException.class, expectedExceptionsMessageRegExp = "You cannot specify multiple.*")
public void doNotAllowMultipleGreatGreatGrandParentResourceTraitExpressions() throws Exception {
evaluateExpressions(new ExpressionGenerator() {
@Override
public String[] getExpressions() {
- return new String[] {
- "resource.greatGreatGrandParent.trait[agentHomeDirectory] = /var/rhq-agent",
- "resource.greatGreatGrandParent.trait[reasonForLastRestart] = OOMError"
- };
+ return new String[] { "resource.greatGreatGrandParent.trait[agentHomeDirectory] = /var/rhq-agent",
+ "resource.greatGreatGrandParent.trait[reasonForLastRestart] = OOMError" };
}
});
}
- @Test(expectedExceptions = DuplicateExpressionTypeException.class,
- expectedExceptionsMessageRegExp = "You cannot specify multiple.*")
+ @Test(expectedExceptions = DuplicateExpressionTypeException.class, expectedExceptionsMessageRegExp = "You cannot specify multiple.*")
public void doNotAllowMultipleResourceIdExpressions() throws Exception {
evaluateExpressions(new ExpressionGenerator() {
@Override
public String[] getExpressions() {
- return new String[] {
- "resource.id = 5",
- "resource.id = 6"
- };
+ return new String[] { "resource.id = 5", "resource.id = 6" };
}
});
}
- @Test(expectedExceptions = DuplicateExpressionTypeException.class,
- expectedExceptionsMessageRegExp = "You cannot specify multiple.*")
+ @Test(expectedExceptions = DuplicateExpressionTypeException.class, expectedExceptionsMessageRegExp = "You cannot specify multiple.*")
public void doNotAllowMultipleChildResourceIdExpressions() throws Exception {
evaluateExpressions(new ExpressionGenerator() {
@Override
public String[] getExpressions() {
- return new String[]{
- "resource.child.id = 5",
- "resource.child.id = 6"
- };
+ return new String[] { "resource.child.id = 5", "resource.child.id = 6" };
}
});
}
- @Test(expectedExceptions = DuplicateExpressionTypeException.class,
- expectedExceptionsMessageRegExp = "You cannot specify multiple.*")
+ @Test(expectedExceptions = DuplicateExpressionTypeException.class, expectedExceptionsMessageRegExp = "You cannot specify multiple.*")
public void doNotAllowMultipleParentResourceIdExpressions() throws Exception {
evaluateExpressions(new ExpressionGenerator() {
@Override
public String[] getExpressions() {
- return new String[]{
- "resource.parent.id = 5",
- "resource.parent.id = 6"
- };
+ return new String[] { "resource.parent.id = 5", "resource.parent.id = 6" };
}
});
}
- @Test(expectedExceptions = InvalidExpressionException.class,
- expectedExceptionsMessageRegExp = "You cannot specify multiple.*")
+ @Test(expectedExceptions = InvalidExpressionException.class, expectedExceptionsMessageRegExp = "You cannot specify multiple.*")
public void doNotAllowMultipleGrandParentResourceIdExpressions() throws Exception {
evaluateExpressions(new ExpressionGenerator() {
@Override
public String[] getExpressions() {
- return new String[] {
- "resource.grandParent.id = 5",
- "resource.grandParent.id = 6"
- };
+ return new String[] { "resource.grandParent.id = 5", "resource.grandParent.id = 6" };
}
});
}
- @Test(expectedExceptions = DuplicateExpressionTypeException.class,
- expectedExceptionsMessageRegExp = "You cannot specify multiple.*")
+ @Test(expectedExceptions = DuplicateExpressionTypeException.class, expectedExceptionsMessageRegExp = "You cannot specify multiple.*")
public void doNotAllowMultipleGreatGrandParentResourceIdExpressions() throws Exception {
evaluateExpressions(new ExpressionGenerator() {
@Override
public String[] getExpressions() {
- return new String[]{
- "resource.greatGrandParent.id = 5",
- "resource.greatGrandParent.id = 6"
- };
+ return new String[] { "resource.greatGrandParent.id = 5", "resource.greatGrandParent.id = 6" };
}
});
}
- @Test(expectedExceptions = DuplicateExpressionTypeException.class,
- expectedExceptionsMessageRegExp = "You cannot specify multiple.*")
+ @Test(expectedExceptions = DuplicateExpressionTypeException.class, expectedExceptionsMessageRegExp = "You cannot specify multiple.*")
public void doNotAllowMultipleGreatGreatGrandParentResourceIdExpressions() throws Exception {
evaluateExpressions(new ExpressionGenerator() {
@Override
public String[] getExpressions() {
- return new String[]{
- "resource.greatGreatGrandParent.id = 5",
- "resource.greatGreatGrandParent.id = 6"
- };
+ return new String[] { "resource.greatGreatGrandParent.id = 5", "resource.greatGreatGrandParent.id = 6" };
}
});
}
- @Test(expectedExceptions = DuplicateExpressionTypeException.class,
- expectedExceptionsMessageRegExp = "You cannot specify multiple.*")
+ @Test(expectedExceptions = DuplicateExpressionTypeException.class, expectedExceptionsMessageRegExp = "You cannot specify multiple.*")
public void doNotAllowMultipleResourceNameExpressions() throws Exception {
evaluateExpressions(new ExpressionGenerator() {
@Override
public String[] getExpressions() {
- return new String[]{
- "resource.name = foo",
- "resource.name = bar"
- };
+ return new String[] { "resource.name = foo", "resource.name = bar" };
}
});
}
- @Test(expectedExceptions = DuplicateExpressionTypeException.class,
- expectedExceptionsMessageRegExp = "You cannot specify multiple.*")
+ @Test(expectedExceptions = DuplicateExpressionTypeException.class, expectedExceptionsMessageRegExp = "You cannot specify multiple.*")
public void doNotAllowMultipleChildResourceNameExpressions() throws Exception {
evaluateExpressions(new ExpressionGenerator() {
@Override
public String[] getExpressions() {
- return new String[]{
- "resource.child.name = foo",
- "resource.child.name = bar"
- };
+ return new String[] { "resource.child.name = foo", "resource.child.name = bar" };
}
});
}
- @Test(expectedExceptions = DuplicateExpressionTypeException.class,
- expectedExceptionsMessageRegExp = "You cannot specify multiple.*")
+ @Test(expectedExceptions = DuplicateExpressionTypeException.class, expectedExceptionsMessageRegExp = "You cannot specify multiple.*")
public void doNotAllowMultipleParentResourceNameExpressions() throws Exception {
evaluateExpressions(new ExpressionGenerator() {
@Override
public String[] getExpressions() {
- return new String[]{
- "resource.parent.name = foo",
- "resource.parent.name = bar"
- };
+ return new String[] { "resource.parent.name = foo", "resource.parent.name = bar" };
}
});
}
- @Test(expectedExceptions = DuplicateExpressionTypeException.class,
- expectedExceptionsMessageRegExp = "You cannot specify multiple.*")
+ @Test(expectedExceptions = DuplicateExpressionTypeException.class, expectedExceptionsMessageRegExp = "You cannot specify multiple.*")
public void doNotAllowMultipleGrandParentResourceNameExpressions() throws Exception {
evaluateExpressions(new ExpressionGenerator() {
@Override
public String[] getExpressions() {
- return new String[]{
- "resource.grandParent.name = foo",
- "resource.grandParent.name = bar"
- };
+ return new String[] { "resource.grandParent.name = foo", "resource.grandParent.name = bar" };
}
});
}
- @Test(expectedExceptions = DuplicateExpressionTypeException.class,
- expectedExceptionsMessageRegExp = "You cannot specify multiple.*")
+ @Test(expectedExceptions = DuplicateExpressionTypeException.class, expectedExceptionsMessageRegExp = "You cannot specify multiple.*")
public void doNotAllowMultipleGreatGrandParentResourceNameExpressions() throws Exception {
evaluateExpressions(new ExpressionGenerator() {
@Override
public String[] getExpressions() {
- return new String[]{
- "resource.greatGrandParent.name = foo",
- "resource.greatGrandParent.name = bar"
- };
+ return new String[] { "resource.greatGrandParent.name = foo", "resource.greatGrandParent.name = bar" };
}
});
}
- @Test(expectedExceptions = DuplicateExpressionTypeException.class,
- expectedExceptionsMessageRegExp = "You cannot specify multiple.*")
+ @Test(expectedExceptions = DuplicateExpressionTypeException.class, expectedExceptionsMessageRegExp = "You cannot specify multiple.*")
public void doNotAllowMultipleGreatGreatGrandParentResourceNameExpressions() throws Exception {
evaluateExpressions(new ExpressionGenerator() {
@Override
public String[] getExpressions() {
- return new String[]{
- "resource.greatGreatGrandParent.name = foo",
- "resource.greatGreatGrandParent.name = bar"
- };
+ return new String[] { "resource.greatGreatGrandParent.name = foo",
+ "resource.greatGreatGrandParent.name = bar" };
}
});
}
- @Test(expectedExceptions = DuplicateExpressionTypeException.class,
- expectedExceptionsMessageRegExp = "You cannot specify multiple.*")
+ @Test(expectedExceptions = DuplicateExpressionTypeException.class, expectedExceptionsMessageRegExp = "You cannot specify multiple.*")
public void doNotAllowMultipleResourceTypeExpressions() throws Exception {
evaluateExpressions(new ExpressionGenerator() {
@Override
public String[] getExpressions() {
- return new String[] {
- "resource.type.plugin = rhq-agent",
- "resource.type.name = RHQ Agent",
- "resource.type.plugin = rhq-server",
- "resource.type.name = RHQ Server"
- };
+ return new String[] { "resource.type.plugin = rhq-agent", "resource.type.name = RHQ Agent",
+ "resource.type.plugin = rhq-server", "resource.type.name = RHQ Server" };
}
});
}
- @Test(expectedExceptions = DuplicateExpressionTypeException.class,
- expectedExceptionsMessageRegExp = "You cannot specify multiple.*")
+ @Test(expectedExceptions = DuplicateExpressionTypeException.class, expectedExceptionsMessageRegExp = "You cannot specify multiple.*")
public void doNotAllowMultipleChildResourceTypeExpressions() throws Exception {
evaluateExpressions(new ExpressionGenerator() {
@Override
public String[] getExpressions() {
- return new String[] {
- "resource.child.type.plugin = rhq-agent",
- "resource.child.type.name = RHQ Agent",
- "resource.child.type.plugin = rhq-server",
- "resource.child.type.name = RHQ Server"
- };
+ return new String[] { "resource.child.type.plugin = rhq-agent", "resource.child.type.name = RHQ Agent",
+ "resource.child.type.plugin = rhq-server", "resource.child.type.name = RHQ Server" };
}
});
}
- @Test(expectedExceptions = DuplicateExpressionTypeException.class,
- expectedExceptionsMessageRegExp = "You cannot specify multiple.*")
+ @Test(expectedExceptions = DuplicateExpressionTypeException.class, expectedExceptionsMessageRegExp = "You cannot specify multiple.*")
public void doNotAllowMultipleParentResourceTypeExpressions() throws Exception {
evaluateExpressions(new ExpressionGenerator() {
@Override
public String[] getExpressions() {
- return new String[]{
- "resource.parent.type.plugin = rhq-agent",
- "resource.parent.type.name = RHQ Agent",
- "resource.parent.type.plugin = rhq-server",
- "resource.parent.type.name = RHQ Server"
- };
+ return new String[] { "resource.parent.type.plugin = rhq-agent",
+ "resource.parent.type.name = RHQ Agent", "resource.parent.type.plugin = rhq-server",
+ "resource.parent.type.name = RHQ Server" };
}
});
}
- @Test(expectedExceptions = DuplicateExpressionTypeException.class,
- expectedExceptionsMessageRegExp = "You cannot specify multiple.*")
+ @Test(expectedExceptions = DuplicateExpressionTypeException.class, expectedExceptionsMessageRegExp = "You cannot specify multiple.*")
public void doNotAllowMultipleGrandParentResourceTypeExpressions() throws Exception {
evaluateExpressions(new ExpressionGenerator() {
@Override
public String[] getExpressions() {
- return new String[] {
- "resource.grandParent.type.plugin = rhq-agent",
- "resource.grandParent.type.name = RHQ Agent",
- "resource.grandParent.type.plugin = rhq-server",
- "resource.grandParent.type.name = RHQ Server"
- };
+ return new String[] { "resource.grandParent.type.plugin = rhq-agent",
+ "resource.grandParent.type.name = RHQ Agent", "resource.grandParent.type.plugin = rhq-server",
+ "resource.grandParent.type.name = RHQ Server" };
}
});
}
- @Test(expectedExceptions = DuplicateExpressionTypeException.class,
- expectedExceptionsMessageRegExp = "You cannot specify multiple.*")
+ @Test(expectedExceptions = DuplicateExpressionTypeException.class, expectedExceptionsMessageRegExp = "You cannot specify multiple.*")
public void doNotAllowMultipleGreatGrandParentResourceTypeExpressions() throws Exception {
evaluateExpressions(new ExpressionGenerator() {
@Override
public String[] getExpressions() {
- return new String[] {
- "resource.greatGrandParent.type.plugin = rhq-agent",
+ return new String[] { "resource.greatGrandParent.type.plugin = rhq-agent",
"resource.greatGrandParent.type.name = RHQ Agent",
"resource.greatGrandParent.type.plugin = rhq-server",
- "resource.greatGrandParent.type.name = RHQ Server"
- };
+ "resource.greatGrandParent.type.name = RHQ Server" };
}
});
}
- @Test(expectedExceptions = DuplicateExpressionTypeException.class,
- expectedExceptionsMessageRegExp = "You cannot specify multiple.*")
+ @Test(expectedExceptions = DuplicateExpressionTypeException.class, expectedExceptionsMessageRegExp = "You cannot specify multiple.*")
public void doNotAllowMultipleGreatGreatGrandParentResourceTypeExpressions() throws Exception {
evaluateExpressions(new ExpressionGenerator() {
@Override
public String[] getExpressions() {
- return new String[] {
- "resource.greatGreatGrandParent.type.plugin = rhq-agent",
+ return new String[] { "resource.greatGreatGrandParent.type.plugin = rhq-agent",
"resource.greatGreatGrandParent.type.name = RHQ Agent",
"resource.greatGreatGrandParent.type.plugin = rhq-server",
- "resource.greatGreatGrandParent.type.name = RHQ Server"
- };
+ "resource.greatGreatGrandParent.type.name = RHQ Server" };
}
});
}
- @Test(expectedExceptions = DuplicateExpressionTypeException.class,
- expectedExceptionsMessageRegExp = "You cannot specify multiple.*")
+ @Test(expectedExceptions = DuplicateExpressionTypeException.class, expectedExceptionsMessageRegExp = "You cannot specify multiple.*")
public void doNotAllowMultipleResourceCategoryExpressions() throws Exception {
evaluateExpressions(new ExpressionGenerator() {
@Override
public String[] getExpressions() {
- return new String[]{
- "resource.type.category = PLATFORM",
- "resource.type.category = SERVER"
- };
+ return new String[] { "resource.type.category = PLATFORM", "resource.type.category = SERVER" };
}
});
}
- @Test(expectedExceptions = DuplicateExpressionTypeException.class,
- expectedExceptionsMessageRegExp = "You cannot specify multiple.*")
+ @Test(expectedExceptions = DuplicateExpressionTypeException.class, expectedExceptionsMessageRegExp = "You cannot specify multiple.*")
public void doNotAllowMultipleChildResourceCategoryExpressions() throws Exception {
evaluateExpressions(new ExpressionGenerator() {
@Override
public String[] getExpressions() {
- return new String[]{
- "resource.child.type.category = PLATFORM",
- "resource.child.type.category = SERVER"
- };
+ return new String[] { "resource.child.type.category = PLATFORM",
+ "resource.child.type.category = SERVER" };
}
});
}
- @Test(expectedExceptions = DuplicateExpressionTypeException.class,
- expectedExceptionsMessageRegExp = "You cannot specify multiple.*")
+ @Test(expectedExceptions = DuplicateExpressionTypeException.class, expectedExceptionsMessageRegExp = "You cannot specify multiple.*")
public void doNotAllowMultipleParentResourceCategoryExpressions() throws Exception {
evaluateExpressions(new ExpressionGenerator() {
@Override
public String[] getExpressions() {
- return new String[]{
- "resource.parent.type.category = PLATFORM",
- "resource.parent.type.category = SERVER"
- };
+ return new String[] { "resource.parent.type.category = PLATFORM",
+ "resource.parent.type.category = SERVER" };
}
});
}
- @Test(expectedExceptions = DuplicateExpressionTypeException.class,
- expectedExceptionsMessageRegExp = "You cannot specify multiple.*")
+ @Test(expectedExceptions = DuplicateExpressionTypeException.class, expectedExceptionsMessageRegExp = "You cannot specify multiple.*")
public void doNotAllowMultipleGrandParentResourceCategoryExpressions() throws Exception {
evaluateExpressions(new ExpressionGenerator() {
@Override
public String[] getExpressions() {
- return new String[]{
- "resource.grandParent.type.category = PLATFORM",
- "resource.grandParent.type.category = SERVER"
- };
+ return new String[] { "resource.grandParent.type.category = PLATFORM",
+ "resource.grandParent.type.category = SERVER" };
}
});
}
- @Test(expectedExceptions = DuplicateExpressionTypeException.class,
- expectedExceptionsMessageRegExp = "You cannot specify multiple.*")
+ @Test(expectedExceptions = DuplicateExpressionTypeException.class, expectedExceptionsMessageRegExp = "You cannot specify multiple.*")
public void doNotAllowMultipleGreatGrandParentResourceCategoryExpressions() throws Exception {
evaluateExpressions(new ExpressionGenerator() {
@Override
public String[] getExpressions() {
- return new String[]{
- "resource.greatGrandParent.type.category = PLATFORM",
- "resource.greatGrandParent.type.category = SERVER"
- };
+ return new String[] { "resource.greatGrandParent.type.category = PLATFORM",
+ "resource.greatGrandParent.type.category = SERVER" };
}
});
}
- @Test(expectedExceptions = DuplicateExpressionTypeException.class,
- expectedExceptionsMessageRegExp = "You cannot specify multiple.*")
+ @Test(expectedExceptions = DuplicateExpressionTypeException.class, expectedExceptionsMessageRegExp = "You cannot specify multiple.*")
public void doNotAllowMultipleGreatGreatGrandParentResourceCategoryExpressions() throws Exception {
evaluateExpressions(new ExpressionGenerator() {
@Override
public String[] getExpressions() {
- return new String[] {
- "resource.greatGreatGrandParent.type.category = PLATFORM",
- "resource.greatGreatGrandParent.type.category = SERVER"
- };
+ return new String[] { "resource.greatGreatGrandParent.type.category = PLATFORM",
+ "resource.greatGreatGrandParent.type.category = SERVER" };
}
});
}
- @Test(expectedExceptions = DuplicateExpressionTypeException.class,
- expectedExceptionsMessageRegExp = "You cannot specify multiple.*")
+ @Test(expectedExceptions = DuplicateExpressionTypeException.class, expectedExceptionsMessageRegExp = "You cannot specify multiple.*")
public void doNotAllowMultipleResourceAvailabilityExpressions() throws Exception {
evaluateExpressions(new ExpressionGenerator() {
@Override
public String[] getExpressions() {
- return new String[] {
- "resource.availability = UP",
- "resource.availability = UNKNOWN"
- };
+ return new String[] { "resource.availability = UP", "resource.availability = UNKNOWN" };
}
});
}
- @Test(expectedExceptions = DuplicateExpressionTypeException.class,
- expectedExceptionsMessageRegExp = "You cannot specify multiple.*")
+ @Test(expectedExceptions = DuplicateExpressionTypeException.class, expectedExceptionsMessageRegExp = "You cannot specify multiple.*")
public void doNotAllowMultipleChildResourceAvailabilityExpressions() throws Exception {
evaluateExpressions(new ExpressionGenerator() {
@Override
public String[] getExpressions() {
- return new String[] {
- "resource.child.availability = UP",
- "resource.child.availability = UNKNOWN"
- };
+ return new String[] { "resource.child.availability = UP", "resource.child.availability = UNKNOWN" };
}
});
}
- @Test(expectedExceptions = DuplicateExpressionTypeException.class,
- expectedExceptionsMessageRegExp = "You cannot specify multiple.*")
+ @Test(expectedExceptions = DuplicateExpressionTypeException.class, expectedExceptionsMessageRegExp = "You cannot specify multiple.*")
public void doNotAllowMultipleParentResourceAvailabilityExpressions() throws Exception {
evaluateExpressions(new ExpressionGenerator() {
@Override
public String[] getExpressions() {
- return new String[] {
- "resource.parent.availability = UP",
- "resource.parent.availability = UNKNOWN"
- };
+ return new String[] { "resource.parent.availability = UP", "resource.parent.availability = UNKNOWN" };
}
});
}
- @Test(expectedExceptions = DuplicateExpressionTypeException.class,
- expectedExceptionsMessageRegExp = "You cannot specify multiple.*")
+ @Test(expectedExceptions = DuplicateExpressionTypeException.class, expectedExceptionsMessageRegExp = "You cannot specify multiple.*")
public void doNotAllowMultipleGrandParentResourceAvailabilityExpressions() throws Exception {
evaluateExpressions(new ExpressionGenerator() {
@Override
public String[] getExpressions() {
- return new String[] {
- "resource.grandParent.availability = UP",
- "resource.grandParent.availability = UNKNOWN"
- };
+ return new String[] { "resource.grandParent.availability = UP",
+ "resource.grandParent.availability = UNKNOWN" };
}
});
}
- @Test(expectedExceptions = DuplicateExpressionTypeException.class,
- expectedExceptionsMessageRegExp = "You cannot specify multiple.*")
+ @Test(expectedExceptions = DuplicateExpressionTypeException.class, expectedExceptionsMessageRegExp = "You cannot specify multiple.*")
public void doNotAllowMultipleGreatGrandParentResourceAvailabilityExpressions() throws Exception {
evaluateExpressions(new ExpressionGenerator() {
@Override
public String[] getExpressions() {
- return new String[] {
- "resource.greatGrandParent.availability = UP",
- "resource.greatGrandParent.availability = UNKNOWN"
- };
+ return new String[] { "resource.greatGrandParent.availability = UP",
+ "resource.greatGrandParent.availability = UNKNOWN" };
}
});
}
- @Test(expectedExceptions = DuplicateExpressionTypeException.class,
- expectedExceptionsMessageRegExp = "You cannot specify multiple.*")
+ @Test(expectedExceptions = DuplicateExpressionTypeException.class, expectedExceptionsMessageRegExp = "You cannot specify multiple.*")
public void doNotAllowMultipleGreatGreatGrandParentResourceAvailabilityExpressions() throws Exception {
evaluateExpressions(new ExpressionGenerator() {
@Override
public String[] getExpressions() {
- return new String[] {
- "resource.greatGreatGrandParent.availability = UP",
- "resource.greatGreatGrandParent.availability = UNKNOWN"
- };
+ return new String[] { "resource.greatGreatGrandParent.availability = UP",
+ "resource.greatGreatGrandParent.availability = UNKNOWN" };
}
});
}
- @Test(expectedExceptions = DuplicateExpressionTypeException.class,
- expectedExceptionsMessageRegExp = "You cannot specify multiple.*")
+ @Test(expectedExceptions = DuplicateExpressionTypeException.class, expectedExceptionsMessageRegExp = "You cannot specify multiple.*")
public void doNotAllowMultipleResourcePluginConfigExpressions() throws Exception {
evaluateExpressions(new ExpressionGenerator() {
@Override
public String[] getExpressions() {
- return new String[]{
- "resource.pluginConfiguration[x] = 1",
- "resource.pluginConfiguration[y] = 2"
- };
+ return new String[] { "resource.pluginConfiguration[x] = 1", "resource.pluginConfiguration[y] = 2" };
}
});
}
- @Test(expectedExceptions = DuplicateExpressionTypeException.class,
- expectedExceptionsMessageRegExp = "You cannot specify multiple.*")
+ @Test(expectedExceptions = DuplicateExpressionTypeException.class, expectedExceptionsMessageRegExp = "You cannot specify multiple.*")
public void doNotAllowMultipleChildResourcePluginConfigExpressions() throws Exception {
evaluateExpressions(new ExpressionGenerator() {
@Override
public String[] getExpressions() {
- return new String[]{
- "resource.child.pluginConfiguration[x] = 1",
- "resource.child.pluginConfiguration[y] = 2"
- };
+ return new String[] { "resource.child.pluginConfiguration[x] = 1",
+ "resource.child.pluginConfiguration[y] = 2" };
}
});
}
- @Test(expectedExceptions = DuplicateExpressionTypeException.class,
- expectedExceptionsMessageRegExp = "You cannot specify multiple.*")
+ @Test(expectedExceptions = DuplicateExpressionTypeException.class, expectedExceptionsMessageRegExp = "You cannot specify multiple.*")
public void doNotAllowMultipleParentResourcePluginConfigExpressions() throws Exception {
evaluateExpressions(new ExpressionGenerator() {
@Override
public String[] getExpressions() {
- return new String[]{
- "resource.parent.pluginConfiguration[x] = 1",
- "resource.parent.pluginConfiguration[y] = 2"
- };
+ return new String[] { "resource.parent.pluginConfiguration[x] = 1",
+ "resource.parent.pluginConfiguration[y] = 2" };
}
});
}
- @Test(expectedExceptions = DuplicateExpressionTypeException.class,
- expectedExceptionsMessageRegExp = "You cannot specify multiple.*")
+ @Test(expectedExceptions = DuplicateExpressionTypeException.class, expectedExceptionsMessageRegExp = "You cannot specify multiple.*")
public void doNotAllowMultipleGrandParentResourcePluginConfigExpressions() throws Exception {
evaluateExpressions(new ExpressionGenerator() {
@Override
public String[] getExpressions() {
- return new String[]{
- "resource.grandParent.pluginConfiguration[x] = 1",
- "resource.grandParent.pluginConfiguration[y] = 2"
- };
+ return new String[] { "resource.grandParent.pluginConfiguration[x] = 1",
+ "resource.grandParent.pluginConfiguration[y] = 2" };
}
});
}
- @Test(expectedExceptions = DuplicateExpressionTypeException.class,
- expectedExceptionsMessageRegExp = "You cannot specify multiple.*")
+ @Test(expectedExceptions = DuplicateExpressionTypeException.class, expectedExceptionsMessageRegExp = "You cannot specify multiple.*")
public void doNotAllowMultipleGreatGrandParentResourcePluginConfigExpressions() throws Exception {
evaluateExpressions(new ExpressionGenerator() {
@Override
public String[] getExpressions() {
- return new String[]{
- "resource.greatGrandParent.pluginConfiguration[x] = 1",
- "resource.greatGrandParent.pluginConfiguration[y] = 2"
- };
+ return new String[] { "resource.greatGrandParent.pluginConfiguration[x] = 1",
+ "resource.greatGrandParent.pluginConfiguration[y] = 2" };
}
});
}
- @Test(expectedExceptions = DuplicateExpressionTypeException.class,
- expectedExceptionsMessageRegExp = "You cannot specify multiple.*")
+ @Test(expectedExceptions = DuplicateExpressionTypeException.class, expectedExceptionsMessageRegExp = "You cannot specify multiple.*")
public void doNotAllowMultipleGreatGreatGrandParentResourcePluginConfigExpressions() throws Exception {
evaluateExpressions(new ExpressionGenerator() {
@Override
public String[] getExpressions() {
- return new String[]{
- "resource.greatGreatGrandParent.pluginConfiguration[x] = 1",
- "resource.greatGreatGrandParent.pluginConfiguration[y] = 2"
- };
+ return new String[] { "resource.greatGreatGrandParent.pluginConfiguration[x] = 1",
+ "resource.greatGreatGrandParent.pluginConfiguration[y] = 2" };
}
});
}
- @Test(expectedExceptions = DuplicateExpressionTypeException.class,
- expectedExceptionsMessageRegExp = "You cannot specify multiple.*")
+ @Test(expectedExceptions = DuplicateExpressionTypeException.class, expectedExceptionsMessageRegExp = "You cannot specify multiple.*")
public void doNotAllowMultipleResourceConfigExpressions() throws Exception {
evaluateExpressions(new ExpressionGenerator() {
@Override
public String[] getExpressions() {
- return new String[]{
- "resource.resourceConfiguration[x] = 1",
- "resource.resourceConfiguration[y] = 2"
- };
+ return new String[] { "resource.resourceConfiguration[x] = 1", "resource.resourceConfiguration[y] = 2" };
}
});
}
- @Test(expectedExceptions = DuplicateExpressionTypeException.class,
- expectedExceptionsMessageRegExp = "You cannot specify multiple.*")
+ @Test(expectedExceptions = DuplicateExpressionTypeException.class, expectedExceptionsMessageRegExp = "You cannot specify multiple.*")
public void doNotAllowMultipleChildResourceConfigExpressions() throws Exception {
evaluateExpressions(new ExpressionGenerator() {
@Override
public String[] getExpressions() {
- return new String[]{
- "resource.child.resourceConfiguration[x] = 1",
- "resource.child.resourceConfiguration[y] = 2"
- };
+ return new String[] { "resource.child.resourceConfiguration[x] = 1",
+ "resource.child.resourceConfiguration[y] = 2" };
}
});
}
- @Test(expectedExceptions = DuplicateExpressionTypeException.class,
- expectedExceptionsMessageRegExp = "You cannot specify multiple.*")
+ @Test(expectedExceptions = DuplicateExpressionTypeException.class, expectedExceptionsMessageRegExp = "You cannot specify multiple.*")
public void doNotAllowMultipleParentResourceConfigExpressions() throws Exception {
evaluateExpressions(new ExpressionGenerator() {
@Override
public String[] getExpressions() {
- return new String[]{
- "resource.parent.resourceConfiguration[x] = 1",
- "resource.parent.resourceConfiguration[y] = 2"
- };
+ return new String[] { "resource.parent.resourceConfiguration[x] = 1",
+ "resource.parent.resourceConfiguration[y] = 2" };
}
});
}
- @Test(expectedExceptions = DuplicateExpressionTypeException.class,
- expectedExceptionsMessageRegExp = "You cannot specify multiple.*")
+ @Test(expectedExceptions = DuplicateExpressionTypeException.class, expectedExceptionsMessageRegExp = "You cannot specify multiple.*")
public void doNotAllowMultipleGrandParentResourceConfigExpressions() throws Exception {
evaluateExpressions(new ExpressionGenerator() {
@Override
public String[] getExpressions() {
- return new String[]{
- "resource.grandParent.resourceConfiguration[x] = 1",
- "resource.grandParent.resourceConfiguration[y] = 2"
- };
+ return new String[] { "resource.grandParent.resourceConfiguration[x] = 1",
+ "resource.grandParent.resourceConfiguration[y] = 2" };
}
});
}
- @Test(expectedExceptions = DuplicateExpressionTypeException.class,
- expectedExceptionsMessageRegExp = "You cannot specify multiple.*")
+ @Test(expectedExceptions = DuplicateExpressionTypeException.class, expectedExceptionsMessageRegExp = "You cannot specify multiple.*")
public void doNotAllowMultipleGreatGrandParentResourceConfigExpressions() throws Exception {
evaluateExpressions(new ExpressionGenerator() {
@Override
public String[] getExpressions() {
- return new String[]{
- "resource.greatGrandParent.resourceConfiguration[x] = 1",
- "resource.greatGrandParent.resourceConfiguration[y] = 2"
- };
+ return new String[] { "resource.greatGrandParent.resourceConfiguration[x] = 1",
+ "resource.greatGrandParent.resourceConfiguration[y] = 2" };
}
});
}
- @Test(expectedExceptions = DuplicateExpressionTypeException.class,
- expectedExceptionsMessageRegExp = "You cannot specify multiple.*")
+ @Test(expectedExceptions = DuplicateExpressionTypeException.class, expectedExceptionsMessageRegExp = "You cannot specify multiple.*")
public void doNotAllowMultipleGreatGreatGrandParentResourceConfigExpressions() throws Exception {
evaluateExpressions(new ExpressionGenerator() {
@Override
public String[] getExpressions() {
- return new String[]{
- "resource.greatGreatGrandParent.resourceConfiguration[x] = 1",
- "resource.greatGreatGrandParent.resourceConfiguration[y] = 2"
- };
+ return new String[] { "resource.greatGreatGrandParent.resourceConfiguration[x] = 1",
+ "resource.greatGreatGrandParent.resourceConfiguration[y] = 2" };
}
});
}
diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/group/definition/framework/ExpressionEvaluator.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/group/definition/framework/ExpressionEvaluator.java
index 7f42f55..363a663 100644
--- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/group/definition/framework/ExpressionEvaluator.java
+++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/group/definition/framework/ExpressionEvaluator.java
@@ -50,7 +50,7 @@ public class ExpressionEvaluator implements Iterable<ExpressionEvaluator.Result>
private final Log log = LogFactory.getLog(ExpressionEvaluator.class);
private static final String INVALID_EXPRESSION_FORM_MSG = "Expression must be in one of the follow forms: " + //
- "'groupBy condition', 'condition = value', 'empty condition', 'not empty condition";
+ "'groupby condition', 'memberof = groupname', 'condition = value', 'empty condition', 'not empty condition";
private static final String PROP_SIMPLE_ALIAS = "simple";
private static final String PROP_SIMPLE_DEF_ALIAS = "simpleDef";
@@ -81,9 +81,11 @@ public class ExpressionEvaluator implements Iterable<ExpressionEvaluator.Result>
private Map<String, Class<?>> whereReplacementTypes;
private Set<String> whereStatics;
private List<String> groupByElements;
+ private List<String> memberOfElements;
private List<String> simpleSubExpressions;
private List<String> groupedSubExpressions;
+ private List<String> memberSubExpressions;
private int expressionCount;
private boolean isInvalid;
@@ -112,9 +114,11 @@ public class ExpressionEvaluator implements Iterable<ExpressionEvaluator.Result>
whereReplacementTypes = new HashMap<String, Class<?>>();
whereStatics = new LinkedHashSet<String>();
groupByElements = new ArrayList<String>();
+ memberOfElements = new ArrayList<String>();
simpleSubExpressions = new ArrayList<String>();
groupedSubExpressions = new ArrayList<String>();
+ memberSubExpressions = new ArrayList<String>();
expressionCount = 0;
isInvalid = false;
@@ -143,8 +147,8 @@ public class ExpressionEvaluator implements Iterable<ExpressionEvaluator.Result>
resourceExpressions.put("res.parentResource.name", "resource name");
resourceExpressions.put("res.parentResource.parentResource.name", "resource name");
resourceExpressions.put("res.parentResource.parentResource.parentResource.name", "resource name");
- resourceExpressions.put("res.parentResource.parentResource.parentResource.parentResource.name",
- "resource name");
+ resourceExpressions
+ .put("res.parentResource.parentResource.parentResource.parentResource.name", "resource name");
resourceExpressions.put("res.version", "resource version");
resourceExpressions.put("child.version", "resource version");
@@ -162,8 +166,8 @@ public class ExpressionEvaluator implements Iterable<ExpressionEvaluator.Result>
resourceExpressions.put("res.parentResource.resourceType.name", "resource type");
resourceExpressions.put("res.parentResource.parentResource.resourceType.plugin", "resource type");
resourceExpressions.put("res.parentResource.parentResource.resourceType.name", "resource type");
- resourceExpressions.put("res.parentResource.parentResource.parentResource.resourceType.plugin",
- "resource type");
+ resourceExpressions
+ .put("res.parentResource.parentResource.parentResource.resourceType.plugin", "resource type");
resourceExpressions.put("res.parentResource.parentResource.parentResource.resourceType.name", "resource type");
resourceExpressions.put("res.parentResource.parentResource.parentResource.parentResource.resourceType.plugin",
"resource type");
@@ -176,7 +180,8 @@ public class ExpressionEvaluator implements Iterable<ExpressionEvaluator.Result>
resourceExpressions.put("res.parentResource.parentResource.resourceType.category", "resource category");
resourceExpressions.put("res.parentResource.parentResource.parentResource.resourceType.category",
"resource category");
- resourceExpressions.put("res.parentResource.parentResource.parentResource.parentResource.resourceType.category",
+ resourceExpressions.put(
+ "res.parentResource.parentResource.parentResource.parentResource.resourceType.category",
"resource category");
resourceExpressions.put("avail.availabilityType", "availability");
@@ -185,8 +190,8 @@ public class ExpressionEvaluator implements Iterable<ExpressionEvaluator.Result>
resourceExpressions.put("res.parentResource.parentResource.avail.availabilityType", "availability");
resourceExpressions.put("res.parentResource.parentResource.parentResource.avail.availabilityType",
"availability");
- resourceExpressions.put("res.parentResource.parentResource.parentResource.parentResource.avail.availabilityType",
- "availability");
+ resourceExpressions.put(
+ "res.parentResource.parentResource.parentResource.parentResource.avail.availabilityType", "availability");
resourceExpressions.put("trait.value", "trait");
resourceExpressions.put("child.trait.value", "trait");
@@ -299,8 +304,9 @@ public class ExpressionEvaluator implements Iterable<ExpressionEvaluator.Result>
Availability(true), //
Trait(true), //
Configuration(true), // includes 'pluginConfiguration' and 'resourceConfiguration'
- StringMatch(true), //
- END(true);
+ StringMatch(true), //
+ END(true), //
+ Membership(true);
private boolean canTerminateExpression;
@@ -337,6 +343,7 @@ public class ExpressionEvaluator implements Iterable<ExpressionEvaluator.Result>
private ParseSubContext subcontext = null;
private int parseIndex = 0;
private boolean isGroupBy = false;
+ private boolean isMemberOf = false;
private ComparisonType comparisonType = null;
private Class<?> expressionType;
@@ -418,6 +425,8 @@ public class ExpressionEvaluator implements Iterable<ExpressionEvaluator.Result>
// do not add modifiers to the normalized expression
if (subExpressionToken.equals("groupby")) {
continue;
+ } else if (subExpressionToken.equals("memberof")) {
+ continue;
} else if (subExpressionToken.equals("not")) {
continue;
} else if (subExpressionToken.equals("empty")) {
@@ -440,6 +449,7 @@ public class ExpressionEvaluator implements Iterable<ExpressionEvaluator.Result>
subcontext = null;
parseIndex = 0;
isGroupBy = false; // this needs to be reset each time a new expression is added
+ isMemberOf = false; // this needs to be reset each time a new expression is added
comparisonType = ComparisonType.EQUALS; // assume equals, unless "(not) empty" found during the parse
deepestResourceContext = null;
@@ -452,17 +462,34 @@ public class ExpressionEvaluator implements Iterable<ExpressionEvaluator.Result>
if (nextToken.equals("resource")) {
context = ParseContext.Resource;
deepestResourceContext = context;
+
+ } else if (nextToken.equals("memberof")) {
+ context = ParseContext.Membership; // ensure proper expression termination
+ String groupName = value;
+
+ if (null == groupName || groupName.isEmpty() || "=".equals(groupName)) {
+ throw new InvalidExpressionException(INVALID_EXPRESSION_FORM_MSG);
+ }
+
+ validateSubExpressionAgainstPreviouslySeen(groupName, false, true);
+ isMemberOf = true;
+ populatePredicateCollections(null, groupName);
+
} else if (nextToken.equals("groupby")) {
context = ParseContext.Modifier;
subcontext = ParseSubContext.Pivot;
+
} else if (nextToken.equals("not")) {
+
context = ParseContext.Modifier;
subcontext = ParseSubContext.Negated;
// 'not' must be followed by 'empty' today, but we won't know until next parse iteration
// furthermore, we may support other forms of negated expressions in the future
+
} else if (nextToken.equals("empty")) {
context = ParseContext.Modifier;
subcontext = ParseSubContext.Empty;
+
} else {
throw new InvalidExpressionException(
"Expression must either start with 'resource', 'groupby', 'empty', or 'not empty' tokens");
@@ -488,7 +515,7 @@ public class ExpressionEvaluator implements Iterable<ExpressionEvaluator.Result>
// then perform individual processing based on current subcontext
if (subcontext == ParseSubContext.Pivot) {
// validates the uniqueness of the subexpression after checking for INVALID_EXPRESSION_FORM_MSG
- validateSubExpressionAgainstPreviouslySeen(normalizedSubExpression, true);
+ validateSubExpressionAgainstPreviouslySeen(normalizedSubExpression, true, false);
isGroupBy = true;
comparisonType = ComparisonType.NONE;
} else if (subcontext == ParseSubContext.NotEmpty) {
@@ -514,7 +541,7 @@ public class ExpressionEvaluator implements Iterable<ExpressionEvaluator.Result>
// EQUALS filter expressions must HAVE "= <value>" part
throw new InvalidExpressionException(INVALID_EXPRESSION_FORM_MSG);
}
- validateSubExpressionAgainstPreviouslySeen(normalizedSubExpression, false);
+ validateSubExpressionAgainstPreviouslySeen(normalizedSubExpression, false, false);
}
if (nextToken.equals("parent")) {
@@ -578,7 +605,7 @@ public class ExpressionEvaluator implements Iterable<ExpressionEvaluator.Result>
// (SELECT max(mdt.id.timestamp) FROM MeasurementDataTrait mdt WHERE sched.id = mdt.schedule.id)
String traitName = parseTraitName(originalTokens);
addJoinCondition(JoinCondition.SCHEDULES);
- populatePredicateCollections(METRIC_DEF_ALIAS + ".name", "%" + traitName + "%", false);
+ populatePredicateCollections(METRIC_DEF_ALIAS + ".name", "%" + traitName + "%", false, false);
populatePredicateCollections(TRAIT_ALIAS + ".value", value);
whereStatics.add(TRAIT_ALIAS + ".schedule = " + JoinCondition.SCHEDULES.alias);
whereStatics.add(TRAIT_ALIAS
@@ -616,7 +643,7 @@ public class ExpressionEvaluator implements Iterable<ExpressionEvaluator.Result>
addJoinCondition(joinCondition);
addJoinCondition(definitionJoinCondition);
- populatePredicateCollections(PROP_SIMPLE_ALIAS + ".name", "%" + propertyName + "%", false);
+ populatePredicateCollections(PROP_SIMPLE_ALIAS + ".name", "%" + propertyName + "%", false, false);
populatePredicateCollections(PROP_SIMPLE_ALIAS + ".stringValue", value);
whereStatics.add(PROP_SIMPLE_ALIAS + ".configuration = " + joinCondition.alias);
@@ -757,13 +784,15 @@ public class ExpressionEvaluator implements Iterable<ExpressionEvaluator.Result>
* isGroupBy field or the explicitly overriding groupBy 3rd argument
*/
private void populatePredicateCollections(String predicateName, Object value) throws InvalidExpressionException {
- populatePredicateCollections(predicateName, value, isGroupBy);
+ populatePredicateCollections(predicateName, value, isGroupBy, isMemberOf);
}
- private void populatePredicateCollections(String predicateName, Object value, boolean groupBy)
+ private void populatePredicateCollections(String predicateName, Object value, boolean groupBy, boolean memberOf)
throws InvalidExpressionException {
if (groupBy) {
groupByElements.add(predicateName);
+ } else if (memberOf) {
+ memberOfElements.add((String) value); // this is the group name in this situation
} else {
String argumentName = getNextArgumentName();
@@ -1089,6 +1118,11 @@ public class ExpressionEvaluator implements Iterable<ExpressionEvaluator.Result>
}
}
+ // finally, if we are narrowing by group membership, add the join on implicit groups
+ if (!memberOfElements.isEmpty()) {
+ result += " JOIN res.implicitGroups implicitGroup";
+ }
+
return result;
}
@@ -1152,6 +1186,17 @@ public class ExpressionEvaluator implements Iterable<ExpressionEvaluator.Result>
}
}
+ // finally, if we are narrowing by group membership, add the implicit groups condition
+ if (!memberOfElements.isEmpty()) {
+ result += " AND implicitGroup.name IN (";
+ String separator = "";
+ for (String groupName : memberOfElements) {
+ result += (separator + "'" + groupName + "'");
+ separator = ", ";
+ }
+ result += ")";
+ }
+
return result;
}
@@ -1206,8 +1251,8 @@ public class ExpressionEvaluator implements Iterable<ExpressionEvaluator.Result>
return suffix.substring(1, suffix.length() - 1);
}
- private void validateSubExpressionAgainstPreviouslySeen(String normalizedSubExpression, boolean grouped)
- throws InvalidExpressionException {
+ private void validateSubExpressionAgainstPreviouslySeen(String normalizedSubExpression, boolean grouped,
+ boolean membership) throws InvalidExpressionException {
normalizedSubExpression = stripFunctionSuffix(normalizedSubExpression);
if (grouped) {
if (groupedSubExpressions.contains(normalizedSubExpression)) {
@@ -1220,6 +1265,12 @@ public class ExpressionEvaluator implements Iterable<ExpressionEvaluator.Result>
+ "]");
}
groupedSubExpressions.add(normalizedSubExpression);
+
+ } else if (membership) {
+ if (memberSubExpressions.contains(normalizedSubExpression)) {
+ throw new InvalidExpressionException("Redundant 'memberof' expression[" + normalizedSubExpression
+ + "] - these expressions must be unique");
+ }
} else {
if (groupedSubExpressions.contains(normalizedSubExpression)) {
throw new InvalidExpressionException(
commit 9b525e0d1655d0e28ba086604391e5ac07bfc7b7
Author: Jay Shaughnessy <jshaughn(a)redhat.com>
Date: Thu Mar 21 15:40:29 2013 -0400
Bug 824010
Have agent store configuration on filesystem instead of Java preferences
Rename the file name property to be more succinct:
Was: org.rhq.core.util.preferences.FilePreferencesFactory.file
Now: rhq.preferences.file
diff --git a/modules/core/util/src/main/java/org/rhq/core/util/preferences/FilePreferencesFactory.java b/modules/core/util/src/main/java/org/rhq/core/util/preferences/FilePreferencesFactory.java
index 69f36da..f28aa46 100644
--- a/modules/core/util/src/main/java/org/rhq/core/util/preferences/FilePreferencesFactory.java
+++ b/modules/core/util/src/main/java/org/rhq/core/util/preferences/FilePreferencesFactory.java
@@ -17,7 +17,7 @@ import org.apache.commons.logging.LogFactory;
* property <tt>-Djava.util.prefs.PreferencesFactory=org.rhq.core.util.preferences.FilePreferencesFactory</tt>.
* <p/>
* The file defaults to ${user.home}/.fileprefs, but may be overridden with the system property
- * <tt>org.rhq.core.util.preferences.FilePreferencesFactory.file</tt>
+ * <tt>rhq.preferences.file</tt>
* <p/>
* Both the system root and user root default to the user.home system property by default.
* <p/>
@@ -30,7 +30,7 @@ import org.apache.commons.logging.LogFactory;
public class FilePreferencesFactory implements PreferencesFactory {
private static final Log log = LogFactory.getLog(FilePreferencesFactory.class);
- public static final String SYSTEM_PROPERTY_FILE = "org.rhq.core.util.preferences.FilePreferencesFactory.file";
+ public static final String SYSTEM_PROPERTY_FILE = "rhq.preferences.file";
private static File preferencesFile;
11 years, 2 months