modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/trigger/JobTriggerEditor.java
| 34 ++--------
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/detail/operation/schedule/AbstractOperationScheduleDetailsView.java
| 9 +-
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/ResourceGroupDetailView.java
| 2
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/operation/schedule/GroupOperationScheduleDataSource.java
| 26 +++++++
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/operation/schedule/GroupOperationScheduleDetailsView.java
| 11 ++-
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/FormUtility.java
| 15 ++++
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/operation/OperationManagerBean.java
| 5 +
7 files changed, 69 insertions(+), 33 deletions(-)
New commits:
commit be699782d80642062a34b850c9431c53fc2a5634
Author: Ian Springer <ian.springer(a)redhat.com>
Date: Fri Jan 28 13:16:38 2011 -0500
various improvements to operation scheduling GUI
diff --git
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/trigger/JobTriggerEditor.java
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/trigger/JobTriggerEditor.java
index efcf37e..b5182e9 100644
---
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/trigger/JobTriggerEditor.java
+++
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/trigger/JobTriggerEditor.java
@@ -48,6 +48,7 @@ import com.smartgwt.client.widgets.tab.Tab;
import com.smartgwt.client.widgets.tab.TabSet;
import org.rhq.core.domain.common.JobTrigger;
import org.rhq.enterprise.gui.coregui.client.CoreGUI;
+import org.rhq.enterprise.gui.coregui.client.util.FormUtility;
import org.rhq.enterprise.gui.coregui.client.util.message.Message;
import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableDynamicForm;
import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableVLayout;
@@ -544,15 +545,8 @@ public class JobTriggerEditor extends LocatableVLayout {
TextItem repeatIntervalItem = new TextItem(FIELD_REPEAT_INTERVAL, "Run now
and every");
repeatIntervalItem.setRequired(true);
- // Configure context-sensitive help.
- FormItemIcon helpIcon = new FormItemIcon();
- helpIcon.setSrc("[SKIN]/actions/help.png");
- repeatIntervalItem.setIcons(helpIcon);
- repeatIntervalItem.addIconClickHandler(new IconClickHandler() {
- public void onIconClick(IconClickEvent event) {
- SC.say("N UNITS (where N is a positive integer and UNITS is
\"seconds\", \"minutes\", \"hours\", \"days\",
\"weeks\", \"months\", \"quarters\", or \"years\",
e.g. \"30 seconds\" or \"6 weeks\")");
- }
- });
+ FormUtility.addContextualHelp(repeatIntervalItem,
+ "N UNITS (where N is a positive integer and UNITS is
\"seconds\", \"minutes\", \"hours\", \"days\",
\"weeks\", \"months\", \"quarters\", or \"years\",
e.g. \"30 seconds\" or \"6 weeks\")");
// Configure validation.
RegExpValidator repeatIntervalValidator = new RegExpValidator("[1-9][0-9]*[
]*(seconds|s|minutes|m|hours|h|days|d|weeks|w|months|M|quarters|q|years|y)");
@@ -572,15 +566,8 @@ public class JobTriggerEditor extends LocatableVLayout {
repeatDurationItem.setShowTitle(false);
repeatDurationItem.setVisible(false);
- // Configure context-sensitive help.
- helpIcon = new FormItemIcon();
- helpIcon.setSrc("[SKIN]/actions/help.png");
- repeatDurationItem.setIcons(helpIcon);
- repeatDurationItem.addIconClickHandler(new IconClickHandler() {
- public void onIconClick(IconClickEvent event) {
- SC.say("N UNITS (where N is a positive integer and UNITS is
\"times\", \"seconds\", \"minutes\", \"hours\",
\"days\", \"weeks\", \"months\", \"quarters\", or
\"years\", e.g. \"30 seconds\" or \"5
repetitions\")");
- }
- });
+ FormUtility.addContextualHelp(repeatDurationItem,
+ "N UNITS (where N is a positive integer and UNITS is
\"times\", \"seconds\", \"minutes\", \"hours\",
\"days\", \"weeks\", \"months\", \"quarters\", or
\"years\", e.g. \"30 seconds\" or \"5
repetitions\")");
// Configure validation.
RegExpValidator repeatDurationValidator = new RegExpValidator("[1-9][0-9]*[
]*(times|repetitions|seconds|s|minutes|m|hours|h|days|d|weeks|w|months|M|quarters|q|years|y)");
@@ -646,15 +633,8 @@ public class JobTriggerEditor extends LocatableVLayout {
startDelayItem.setShowTitle(false);
startDelayItem.setVisible(false);
- // Configure context-sensitive help.
- FormItemIcon icon = new FormItemIcon();
- icon.setSrc("[SKIN]/actions/help.png");
- startDelayItem.setIcons(icon);
- startDelayItem.addIconClickHandler(new IconClickHandler() {
- public void onIconClick(IconClickEvent event) {
- SC.say("N UNITS (where N is a positive integer and UNITS is
\"seconds\", \"minutes\", \"hours\", \"days\",
\"weeks\", \"months\", \"quarters\", or \"years\",
e.g. \"30 seconds\" or \"6 weeks\")");
- }
- });
+ FormUtility.addContextualHelp(startDelayItem,
+ "N UNITS (where N is a positive integer and UNITS is
\"seconds\", \"minutes\", \"hours\", \"days\",
\"weeks\", \"months\", \"quarters\", or \"years\",
e.g. \"30 seconds\" or \"6 weeks\")");
// Configure validation.
RegExpValidator startDelayValidator = new RegExpValidator("[1-9][0-9]*([
]+(seconds|minutes|hours|days|weeks|months|quarters|years)|(s|m|h|d|w|M|q|y))");
diff --git
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/detail/operation/schedule/AbstractOperationScheduleDetailsView.java
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/detail/operation/schedule/AbstractOperationScheduleDetailsView.java
index bc27926..2195d35 100644
---
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/detail/operation/schedule/AbstractOperationScheduleDetailsView.java
+++
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/detail/operation/schedule/AbstractOperationScheduleDetailsView.java
@@ -51,6 +51,7 @@ import
org.rhq.enterprise.gui.coregui.client.components.form.AbstractRecordEdito
import org.rhq.enterprise.gui.coregui.client.components.form.EnhancedDynamicForm;
import org.rhq.enterprise.gui.coregui.client.components.trigger.JobTriggerEditor;
import
org.rhq.enterprise.gui.coregui.client.inventory.resource.detail.operation.schedule.ResourceOperationScheduleDataSource;
+import org.rhq.enterprise.gui.coregui.client.util.FormUtility;
import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableHLayout;
import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableVLayout;
@@ -145,11 +146,13 @@ public abstract class AbstractOperationScheduleDetailsView extends
AbstractRecor
}
TextItem timeoutItem = new
TextItem(AbstractOperationScheduleDataSource.Field.TIMEOUT, "Timeout (in
seconds)");
+ FormUtility.addContextualHelp(timeoutItem, "a time duration in seconds; if
specified, if the duration elapses before a scheduled operation execution has completed,
the RHQ Server will timeout the operation and consider it to have failed; note, it is
usually not possible to abort the underlying managed resource operation if it was
initiated");
notesFields.add(timeoutItem);
TextAreaItem notesItem = new
TextAreaItem(ResourceOperationScheduleDataSource.Field.DESCRIPTION, "Notes");
notesItem.setWidth(450);
- notesItem.setHeight(150);
+ notesItem.setHeight(120);
+ FormUtility.addContextualHelp(notesItem, "an optional description of this
scheduled operation (e.g. \"nightly maintenance app server restart\")");
notesFields.add(notesItem);
this.notesForm.setFields(notesFields.toArray(new FormItem[notesFields.size()]));
@@ -236,7 +239,7 @@ public abstract class AbstractOperationScheduleDetailsView extends
AbstractRecor
String operationName = getSelectedOperationName();
String value;
if (operationName == null) {
- value = "<i>Select an operation.</i>";
+ value = "<i>Select an operation to see its
description.</i>";
} else {
value = this.operationNameToDescriptionMap.get(operationName);
}
@@ -247,7 +250,7 @@ public abstract class AbstractOperationScheduleDetailsView extends
AbstractRecor
String operationName = getSelectedOperationName();
String value;
if (operationName == null) {
- value = "<i>Select an operation.</i>";
+ value = "<i>Select an operation to see its
parameters.</i>";
} else {
ConfigurationDefinition parametersDefinition =
this.operationNameToParametersDefinitionMap.get(operationName);
if (parametersDefinition == null ||
parametersDefinition.getPropertyDefinitions().isEmpty()) {
diff --git
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/ResourceGroupDetailView.java
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/ResourceGroupDetailView.java
index cca83f5..3105aab 100644
---
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/ResourceGroupDetailView.java
+++
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/ResourceGroupDetailView.java
@@ -203,7 +203,7 @@ public class ResourceGroupDetailView extends
AbstractTwoLevelTabSetView<Resource
.view_tabs_common_schedule()), null);
this.operationsHistory = new
SubTab(operationsTab.extendLocatorId("History"), new
ViewName("History", MSG
.view_tabs_common_history()), null);
- operationsTab.registerSubTabs(this.operationsHistory, this.operationsSchedule);
+ operationsTab.registerSubTabs(this.operationsSchedule, this.operationsHistory);
tabs.add(operationsTab);
configurationTab = new
TwoLevelTab(getTabSet().extendLocatorId("Configuration"), new
ViewName("Configuration",
diff --git
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/operation/schedule/GroupOperationScheduleDataSource.java
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/operation/schedule/GroupOperationScheduleDataSource.java
index 7603a45..188a892 100644
---
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/operation/schedule/GroupOperationScheduleDataSource.java
+++
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/operation/schedule/GroupOperationScheduleDataSource.java
@@ -23,6 +23,7 @@ import com.google.gwt.user.client.rpc.AsyncCallback;
import com.smartgwt.client.data.DSRequest;
import com.smartgwt.client.data.DSResponse;
import com.smartgwt.client.data.Record;
+import com.smartgwt.client.widgets.grid.ListGridRecord;
import org.rhq.core.domain.configuration.Configuration;
import org.rhq.core.domain.operation.bean.GroupOperationSchedule;
import org.rhq.core.domain.resource.group.composite.ResourceGroupComposite;
@@ -38,6 +39,11 @@ import java.util.List;
*/
public class GroupOperationScheduleDataSource extends
AbstractOperationScheduleDataSource<GroupOperationSchedule> {
+ public static abstract class Field extends AbstractOperationScheduleDataSource.Field
{
+ public static final String HALT_ON_FAILURE = "haltOnFailure";
+ public static final String EXECUTION_ORDER = "executionOrder";
+ }
+
private ResourceGroupComposite groupComposite;
public GroupOperationScheduleDataSource(ResourceGroupComposite groupComposite) {
@@ -102,4 +108,24 @@ public class GroupOperationScheduleDataSource extends
AbstractOperationScheduleD
});
}
+ @Override
+ public ListGridRecord copyValues(GroupOperationSchedule from) {
+ ListGridRecord record = super.copyValues(from);
+
+ record.setAttribute(Field.HALT_ON_FAILURE, from.getHaltOnFailure());
+ // TODO: set executionOrder field
+
+ return record;
+ }
+
+ @Override
+ public GroupOperationSchedule copyValues(Record from) {
+ GroupOperationSchedule groupOperationSchedule = super.copyValues(from);
+
+
groupOperationSchedule.setHaltOnFailure(from.getAttributeAsBoolean(Field.HALT_ON_FAILURE));
+ // TODO: set executionOrder field
+
+ return groupOperationSchedule;
+ }
+
}
diff --git
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/operation/schedule/GroupOperationScheduleDetailsView.java
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/operation/schedule/GroupOperationScheduleDetailsView.java
index 59cb90c..8bb7f38 100644
---
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/operation/schedule/GroupOperationScheduleDetailsView.java
+++
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/operation/schedule/GroupOperationScheduleDetailsView.java
@@ -29,6 +29,7 @@ public class GroupOperationScheduleDetailsView extends
AbstractOperationSchedule
private ResourceGroupComposite groupComposite;
private ListGridRecord[] memberResourceRecords;
+ private DynamicForm executionModeForm;
public GroupOperationScheduleDetailsView(String locatorId, ResourceGroupComposite
groupComposite, int scheduleId) {
super(locatorId, new GroupOperationScheduleDataSource(groupComposite),
@@ -67,7 +68,7 @@ public class GroupOperationScheduleDetailsView extends
AbstractOperationSchedule
HTMLFlow hr = new HTMLFlow("<p/><hr/><p/>");
contentPane.addMember(hr);
- DynamicForm executionModeForm = new DynamicForm();
+ this.executionModeForm = new DynamicForm();
executionModeForm.setColWidths("250", "*");
RadioGroupItem executionModeItem = new RadioGroupItem("executionMode",
"Member Resource Execution Order");
@@ -104,4 +105,12 @@ public class GroupOperationScheduleDetailsView extends
AbstractOperationSchedule
return contentPane;
}
+
+ @Override
+ protected void save(DSRequest requestProperties) {
+ Boolean haltOnFailure = (Boolean)
this.executionModeForm.getValue(GroupOperationScheduleDataSource.Field.HALT_ON_FAILURE);
+ getForm().setValue(GroupOperationScheduleDataSource.Field.HALT_ON_FAILURE,
haltOnFailure);
+
+ super.save(requestProperties);
+ }
}
diff --git
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/FormUtility.java
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/FormUtility.java
index 26e67a8..50455b4 100644
---
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/FormUtility.java
+++
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/FormUtility.java
@@ -18,8 +18,12 @@
*/
package org.rhq.enterprise.gui.coregui.client.util;
+import com.smartgwt.client.util.SC;
import com.smartgwt.client.widgets.form.DynamicForm;
import com.smartgwt.client.widgets.form.fields.FormItem;
+import com.smartgwt.client.widgets.form.fields.FormItemIcon;
+import com.smartgwt.client.widgets.form.fields.events.IconClickEvent;
+import com.smartgwt.client.widgets.form.fields.events.IconClickHandler;
/**
* A collection of utility methods for working with SmartGWT {@link DynamicForm}s.
@@ -44,4 +48,15 @@ public class FormUtility {
}
}
+ public static void addContextualHelp(FormItem item, final String helpText) {
+ FormItemIcon helpIcon = new FormItemIcon();
+ helpIcon.setSrc("[SKIN]/actions/help.png");
+ item.setIcons(helpIcon);
+ item.addIconClickHandler(new IconClickHandler() {
+ public void onIconClick(IconClickEvent event) {
+ SC.say(helpText);
+ }
+ });
+ }
+
}
diff --git
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/operation/OperationManagerBean.java
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/operation/OperationManagerBean.java
index efe8cc4..1623dd1 100644
---
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/operation/OperationManagerBean.java
+++
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/operation/OperationManagerBean.java
@@ -582,6 +582,8 @@ public class OperationManagerBean implements OperationManagerLocal,
OperationMan
}
}
+ boolean haltOnFailure =
jobDataMap.getBooleanValueFromString(GroupOperationJob.DATAMAP_BOOL_HALT_ON_FAILURE);
+
Integer entityId = getOperationScheduleEntityId(jobDetail);
GroupOperationSchedule sched = new GroupOperationSchedule();
@@ -595,10 +597,11 @@ public class OperationManagerBean implements OperationManagerLocal,
OperationMan
sched.setParameters(parameters);
sched.setExecutionOrder(executionOrder);
sched.setDescription(description);
-
sched.setHaltOnFailure(jobDataMap.getBooleanValueFromString(GroupOperationJob.DATAMAP_BOOL_HALT_ON_FAILURE));
+ sched.setHaltOnFailure(haltOnFailure);
Trigger trigger = getTriggerOfJob(jobDetail);
JobTrigger jobTrigger = convertToJobTrigger(trigger);
sched.setJobTrigger(jobTrigger);
+ sched.setNextFireTime(trigger.getNextFireTime());
return sched;
}