modules/enterprise/server/plugins/alert-operations/src/main/java/org/rhq/enterprise/server/plugins/alertOperations/AlertTokenReplacer.java
| 8 +
modules/enterprise/server/plugins/alert-operations/src/main/java/org/rhq/enterprise/server/plugins/alertOperations/OperationsSender.java
| 41 ++++++----
modules/enterprise/server/plugins/alert-operations/src/main/java/org/rhq/enterprise/server/plugins/alertOperations/Token.java
| 4
modules/enterprise/server/plugins/alert-operations/src/test/java/org/rhq/enterprise/server/plugins/alertOperations/TokenReplacementTest.java
| 3
4 files changed, 40 insertions(+), 16 deletions(-)
New commits:
commit 8addeee897707dc3bddd898218ec1bea2b8ad7f1
Author: Heiko W. Rupp <hwr(a)redhat.com>
Date: Tue Mar 2 21:40:50 2010 +0100
Don't clone, but deepCopy without the ids.
diff --git
a/modules/enterprise/server/plugins/alert-operations/src/main/java/org/rhq/enterprise/server/plugins/alertOperations/OperationsSender.java
b/modules/enterprise/server/plugins/alert-operations/src/main/java/org/rhq/enterprise/server/plugins/alertOperations/OperationsSender.java
index e355292..95217a2 100644
---
a/modules/enterprise/server/plugins/alert-operations/src/main/java/org/rhq/enterprise/server/plugins/alertOperations/OperationsSender.java
+++
b/modules/enterprise/server/plugins/alert-operations/src/main/java/org/rhq/enterprise/server/plugins/alertOperations/OperationsSender.java
@@ -116,7 +116,7 @@ public class OperationsSender extends AlertSender {
if (parameters!=null && tokenMode.equals(INTERPRETED)) {
// We must not pass the original Config object, as this would mean
// our tokens get wiped out.
- theParameters = parameters.clone();
+ theParameters = parameters.deepCopy(false);
Map<String,PropertySimple> propsMap =
theParameters.getSimpleProperties();
if (!propsMap.isEmpty()) {
ResourceManagerLocal resMgr = LookupUtil.getResourceManager();
commit 7cd1b3fac0ae4525f78bad4e8269768408d5f156
Author: Heiko W. Rupp <hwr(a)redhat.com>
Date: Tue Mar 2 21:27:36 2010 +0100
Allow for camelCase in tokens. Actually use the provided target resource.
diff --git
a/modules/enterprise/server/plugins/alert-operations/src/main/java/org/rhq/enterprise/server/plugins/alertOperations/AlertTokenReplacer.java
b/modules/enterprise/server/plugins/alert-operations/src/main/java/org/rhq/enterprise/server/plugins/alertOperations/AlertTokenReplacer.java
index e8c61dd..4966f22 100644
---
a/modules/enterprise/server/plugins/alert-operations/src/main/java/org/rhq/enterprise/server/plugins/alertOperations/AlertTokenReplacer.java
+++
b/modules/enterprise/server/plugins/alert-operations/src/main/java/org/rhq/enterprise/server/plugins/alertOperations/AlertTokenReplacer.java
@@ -50,7 +50,8 @@ public class AlertTokenReplacer {
public AlertTokenReplacer(Alert alert, OperationDefinition operationDefinition,
Resource targetResource) {
this.alert = alert;
this.operationDefinition = operationDefinition;
- pattern = Pattern.compile("<%\\s*([a-z]+\\.[a-z0-9]+)\\s*%>");
+ this.targetResource = targetResource;
+ pattern =
Pattern.compile("<%\\s*([a-zA-Z]+\\.[a-zA-Z0-9]+)\\s*%>");
}
/**
@@ -136,6 +137,9 @@ public class AlertTokenReplacer {
case TEST_FIX:
ret = THE_QUICK_BROWN_FOX_JUMPS_OVER_THE_LAZY_DOG;
break;
+ case TEST_CAMEL:
+ ret ="camel";
+ break;
default:
ret = NOT_YET_IMPLEMENTED;
}
@@ -181,6 +185,8 @@ public class AlertTokenReplacer {
Subject overlord = LookupUtil.getSubjectManager().getOverlord();
Resource parent;
Resource platform = mgr.getPlaformOfResource(overlord,resource.getId());
+ if (platform==null)
+ platform=resource;
switch (token) {
case RESOURCE_ID:
diff --git
a/modules/enterprise/server/plugins/alert-operations/src/main/java/org/rhq/enterprise/server/plugins/alertOperations/Token.java
b/modules/enterprise/server/plugins/alert-operations/src/main/java/org/rhq/enterprise/server/plugins/alertOperations/Token.java
index 2d810f0..4b90bc1 100644
---
a/modules/enterprise/server/plugins/alert-operations/src/main/java/org/rhq/enterprise/server/plugins/alertOperations/Token.java
+++
b/modules/enterprise/server/plugins/alert-operations/src/main/java/org/rhq/enterprise/server/plugins/alertOperations/Token.java
@@ -70,8 +70,10 @@ public enum Token {
// only for testing
TEST_ECHO(TokenClass.TEST,"echo", "Echo the input"),
- TEST_FIX(TokenClass.TEST,"fix", "Return a fixed string");
+ TEST_FIX(TokenClass.TEST,"fix", "Return a fixed string"),
+ TEST_CAMEL(TokenClass.TEST,"camelCase","Test matching of
camels")
+ ;
private TokenClass tc;
private String name;
diff --git
a/modules/enterprise/server/plugins/alert-operations/src/test/java/org/rhq/enterprise/server/plugins/alertOperations/TokenReplacementTest.java
b/modules/enterprise/server/plugins/alert-operations/src/test/java/org/rhq/enterprise/server/plugins/alertOperations/TokenReplacementTest.java
index cf6c48d..45b03d6 100644
---
a/modules/enterprise/server/plugins/alert-operations/src/test/java/org/rhq/enterprise/server/plugins/alertOperations/TokenReplacementTest.java
+++
b/modules/enterprise/server/plugins/alert-operations/src/test/java/org/rhq/enterprise/server/plugins/alertOperations/TokenReplacementTest.java
@@ -56,6 +56,9 @@ public class TokenReplacementTest {
assert res != null;
assert res.equals(TEST_ECHO);
+ res = tr.replaceToken("test.camelCase");
+ assert res != null;
+ assert res.equals("camel");
/*
res = tr.replaceToken("alert.id");
assert res != null;
commit e09ef2624024f30c26e77a3220aff300db39d67d
Author: Heiko W. Rupp <hwr(a)redhat.com>
Date: Tue Mar 2 15:20:12 2010 +0100
Clone the parameters before replacing tokens. Also pass the target resource to the
replacer.
diff --git
a/modules/enterprise/server/plugins/alert-operations/src/main/java/org/rhq/enterprise/server/plugins/alertOperations/OperationsSender.java
b/modules/enterprise/server/plugins/alert-operations/src/main/java/org/rhq/enterprise/server/plugins/alertOperations/OperationsSender.java
index 635085a..e355292 100644
---
a/modules/enterprise/server/plugins/alert-operations/src/main/java/org/rhq/enterprise/server/plugins/alertOperations/OperationsSender.java
+++
b/modules/enterprise/server/plugins/alert-operations/src/main/java/org/rhq/enterprise/server/plugins/alertOperations/OperationsSender.java
@@ -34,11 +34,13 @@ 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.operation.OperationDefinition;
+import org.rhq.core.domain.resource.Resource;
import org.rhq.enterprise.server.configuration.ConfigurationManagerLocal;
import org.rhq.enterprise.server.exception.ScheduleException;
import org.rhq.enterprise.server.operation.OperationManagerLocal;
import org.rhq.enterprise.server.operation.ResourceOperationSchedule;
import org.rhq.enterprise.server.plugin.pc.alert.AlertSender;
+import org.rhq.enterprise.server.resource.ResourceManagerLocal;
import org.rhq.enterprise.server.util.LookupUtil;
/**
@@ -75,7 +77,7 @@ public class OperationsSender extends AlertSender {
String opName = null;
OperationManagerLocal opMgr = LookupUtil.getOperationManager();
- Subject subject = LookupUtil.getSubjectManager().getOverlord(); // TODO get real
subject
+ Subject subject = LookupUtil.getSubjectManager().getOverlord(); // TODO get real
subject?
List<OperationDefinition> opdefs =
opMgr.findSupportedResourceOperations(subject,resourceId,false);
OperationDefinition opDef = null;
@@ -109,26 +111,37 @@ public class OperationsSender extends AlertSender {
* If we have parameters and the user wants tokens to be interpreted, then loop
* over the parameters and do token replacement.
*/
- if (parameters!=null && tokenMode.equals(INTERPRETED)) {
- Map<String,PropertySimple> propsMap =
parameters.getSimpleProperties();
- if (!propsMap.isEmpty()) {
- AlertTokenReplacer tr = new AlertTokenReplacer(alert, opDef, null);
- for (PropertySimple prop : propsMap.values()) {
- String tmp = prop.getStringValue();
- tmp = tr.replaceTokens(tmp);
- prop.setStringValue(tmp);
+ Configuration theParameters = null;
+ try {
+ if (parameters!=null && tokenMode.equals(INTERPRETED)) {
+ // We must not pass the original Config object, as this would mean
+ // our tokens get wiped out.
+ theParameters = parameters.clone();
+ Map<String,PropertySimple> propsMap =
theParameters.getSimpleProperties();
+ if (!propsMap.isEmpty()) {
+ ResourceManagerLocal resMgr = LookupUtil.getResourceManager();
+ Resource targetResource = resMgr.getResource(subject,resourceId);
+ AlertTokenReplacer tr = new AlertTokenReplacer(alert, opDef,
targetResource);
+ for (PropertySimple prop : propsMap.values()) {
+ String tmp = prop.getStringValue();
+ tmp = tr.replaceTokens(tmp);
+ prop.setStringValue(tmp);
+ }
}
}
+ else {
+ theParameters = parameters;
+ }
+ } catch (Exception e) {
+ e.printStackTrace(); // TODO: Customise this generated block
}
-
-
/*
- * Now fire off the operation with no delay and no repetition.
- */
+ * Now fire off the operation with no delay and no repetition.
+ */
ResourceOperationSchedule sched;
try {
- sched = opMgr.scheduleResourceOperation(subject, resourceId, opName, 0, 0, 0,
0, parameters,
+ sched = opMgr.scheduleResourceOperation(subject, resourceId, opName, 0, 0, 0,
0, theParameters,
"Alert operation for " +
alert.getAlertDefinition().getName());
} catch (ScheduleException e) {
return new SenderResult(ResultState.FAILURE, "Scheduling of operation
" + opName + " on resource " + resourceId + " failed: " +
e.getMessage());