modules/core/plugin-container/src/main/java/org/rhq/core/pc/operation/OperationManager.java
| 7 +-
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/form/EnhancedDynamicForm.java
| 3 -
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/table/Table.java
| 4 +
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/detail/operation/schedule/AbstractOperationScheduleDataSource.java
| 13 +++--
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/detail/operation/schedule/AbstractOperationScheduleDetailsView.java
| 26 +++++++++-
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/detail/operation/schedule/AbstractOperationScheduleListView.java
| 5 +
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/ResourceGroupDetailView.java
| 12 ++--
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/ResourceDetailView.java
| 14 ++---
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/OperationGWTServiceImpl.java
| 4 -
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/operation/OperationManagerBean.java
| 22 +++++---
10 files changed, 75 insertions(+), 35 deletions(-)
New commits:
commit dcf43f0221b12d24fc31c5e7d2fad3e7664baa71
Author: Ian Springer <ian.springer(a)redhat.com>
Date: Mon Jan 31 13:13:27 2011 -0500
make several changes to ops GUI recommended by UXD; fix bug where recurring op
schedules did not work
diff --git
a/modules/core/plugin-container/src/main/java/org/rhq/core/pc/operation/OperationManager.java
b/modules/core/plugin-container/src/main/java/org/rhq/core/pc/operation/OperationManager.java
index ec1817c..d87f5c1 100644
---
a/modules/core/plugin-container/src/main/java/org/rhq/core/pc/operation/OperationManager.java
+++
b/modules/core/plugin-container/src/main/java/org/rhq/core/pc/operation/OperationManager.java
@@ -232,8 +232,11 @@ public class OperationManager extends AgentService implements
OperationAgentServ
PropertySimple timeoutProperty =
paramConfig.getSimple(OperationDefinition.TIMEOUT_PARAM_NAME);
if (timeoutProperty != null) {
try {
- paramConfig.remove(timeoutProperty.getName()); // we have to remove
it since resources are not expecting it
- return timeoutProperty.getLongValue().longValue() * 1000L;
+ paramConfig.remove(timeoutProperty.getName()); // we have to remove
it since ResourceComponents are not expecting it
+ Long timeout = timeoutProperty.getLongValue();
+ if (timeout != null) {
+ return timeout * 1000L;
+ }
} catch (Exception e) {
throw new PluginContainerException("The timeout specified in the
configuration was invalid: "
+ timeoutProperty);
diff --git
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/form/EnhancedDynamicForm.java
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/form/EnhancedDynamicForm.java
index 199ca19..e846a1d 100644
---
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/form/EnhancedDynamicForm.java
+++
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/form/EnhancedDynamicForm.java
@@ -66,7 +66,8 @@ public class EnhancedDynamicForm extends LocatableDynamicForm {
// Layout Settings
//setWidth(640);
//setWidth100();
- //setPadding(13);
+ setCellPadding(3);
+
// Default to 4 columns, i.e.: itemOneTitle | itemOneValue | itemTwoTitle |
itemTwoValue
setNumCols(4);
setColWidths(75, 200, 75, 200);
diff --git
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/table/Table.java
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/table/Table.java
index 071bff3..b1541d0 100644
---
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/table/Table.java
+++
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/table/Table.java
@@ -574,7 +574,9 @@ public class Table<DS extends RPCDataSource> extends
LocatableHLayout implements
ListGridField[] newFields = new ListGridField[fields.length +
dataSourceFieldNamesSet.size()];
int destIndex = 0;
if (dataSourceFieldNamesSet.contains(FIELD_ID)) {
- listGridIdField = new ListGridField(FIELD_ID, MSG.common_title_id(),
55);
+ String datasourceFieldTitle =
this.dataSource.getField(FIELD_ID).getTitle();
+ String listGridFieldTitle = (datasourceFieldTitle != null) ?
datasourceFieldTitle : MSG.common_title_id();
+ listGridIdField = new ListGridField(FIELD_ID, listGridFieldTitle, 55);
// Override the DataSource id field metadata for consistent display
across all Tables.
listGridIdField.setType(ListGridFieldType.INTEGER);
listGridIdField.setCanEdit(false);
diff --git
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/detail/operation/schedule/AbstractOperationScheduleDataSource.java
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/detail/operation/schedule/AbstractOperationScheduleDataSource.java
index 20b84fa..56e7d52 100644
---
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/detail/operation/schedule/AbstractOperationScheduleDataSource.java
+++
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/detail/operation/schedule/AbstractOperationScheduleDataSource.java
@@ -84,7 +84,7 @@ public abstract class AbstractOperationScheduleDataSource<T extends
OperationSch
protected List<DataSourceField> addDataSourceFields() {
List<DataSourceField> fields = super.addDataSourceFields();
- DataSourceIntegerField idField = new DataSourceIntegerField(Field.ID,
"ID");
+ DataSourceIntegerField idField = new DataSourceIntegerField(Field.ID,
"Schedule ID");
idField.setPrimaryKey(true);
idField.setCanEdit(false);
fields.add(idField);
@@ -134,15 +134,18 @@ public abstract class AbstractOperationScheduleDataSource<T
extends OperationSch
SubjectRecord subjectRecord = (SubjectRecord)
from.getAttributeAsRecord(Field.SUBJECT);
to.setSubject(subjectRecord.toSubject());
Configuration parameters = (Configuration)
from.getAttributeAsObject(Field.PARAMETERS);
+ Integer timeout = from.getAttributeAsInt(Field.TIMEOUT);
+ if (timeout != null) {
+ if (parameters == null) {
+ parameters = new Configuration();
+ }
+ parameters.put(new PropertySimple(OperationDefinition.TIMEOUT_PARAM_NAME,
timeout));
+ }
to.setParameters(parameters);
to.setOperationName(from.getAttribute(Field.OPERATION_NAME));
to.setOperationDisplayName(from.getAttribute(Field.OPERATION_DISPLAY_NAME));
to.setDescription(from.getAttribute(Field.DESCRIPTION));
to.setNextFireTime(from.getAttributeAsDate(Field.NEXT_FIRE_TIME));
- if (parameters != null) {
- parameters.put(new PropertySimple(OperationDefinition.TIMEOUT_PARAM_NAME,
from.getAttributeAsInt(Field.TIMEOUT)));
- }
-
to.setJobTrigger(createJobTrigger(from.getAttributeAsRecord("jobTrigger")));
return to;
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 2195d35..c938f18 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
@@ -39,6 +39,7 @@ import com.smartgwt.client.widgets.form.fields.events.ChangedEvent;
import com.smartgwt.client.widgets.form.fields.events.ChangedHandler;
import com.smartgwt.client.widgets.grid.ListGridRecord;
+import com.smartgwt.client.widgets.layout.VLayout;
import org.rhq.core.domain.auth.Subject;
import org.rhq.core.domain.configuration.Configuration;
import org.rhq.core.domain.configuration.definition.ConfigurationDefinition;
@@ -95,9 +96,24 @@ public abstract class AbstractOperationScheduleDetailsView extends
AbstractRecor
}
@Override
+ protected EnhancedDynamicForm buildForm() {
+ EnhancedDynamicForm form = super.buildForm();
+
+ form.setNumCols(2);
+ form.setColWidths("165", "*");
+
+ return form;
+ }
+
+ @Override
protected List<FormItem> createFormItems(EnhancedDynamicForm form) {
List<FormItem> items = new ArrayList<FormItem>();
+ if (!isNewRecord()) {
+ StaticTextItem idItem = new
StaticTextItem(ResourceOperationScheduleDataSource.Field.ID);
+ items.add(idItem);
+ }
+
SelectItem operationNameItem = new
SelectItem(ResourceOperationScheduleDataSource.Field.OPERATION_NAME);
items.add(operationNameItem);
operationNameItem.addChangedHandler(new ChangedHandler() {
@@ -141,7 +157,7 @@ public abstract class AbstractOperationScheduleDetailsView extends
AbstractRecor
List<FormItem> notesFields = new ArrayList<FormItem>();
if (!isNewRecord()) {
- StaticTextItem nextFireTimeItem = new
StaticTextItem(AbstractOperationScheduleDataSource.Field.NEXT_FIRE_TIME);
+ StaticTextItem nextFireTimeItem = new
StaticTextItem(AbstractOperationScheduleDataSource.Field.NEXT_FIRE_TIME, "Next Fire
Time");
notesFields.add(nextFireTimeItem);
}
@@ -151,7 +167,7 @@ public abstract class AbstractOperationScheduleDetailsView extends
AbstractRecor
TextAreaItem notesItem = new
TextAreaItem(ResourceOperationScheduleDataSource.Field.DESCRIPTION, "Notes");
notesItem.setWidth(450);
- notesItem.setHeight(120);
+ notesItem.setHeight(60);
FormUtility.addContextualHelp(notesItem, "an optional description of this
scheduled operation (e.g. \"nightly maintenance app server restart\")");
notesFields.add(notesItem);
@@ -266,6 +282,12 @@ public abstract class AbstractOperationScheduleDetailsView extends
AbstractRecor
for (Canvas child :
this.operationParametersConfigurationHolder.getChildren()) {
child.destroy();
}
+
+ // Add spacer so params are indented.
+ VLayout horizontalSpacer = new VLayout();
+ horizontalSpacer.setWidth(165);
+ this.operationParametersConfigurationHolder.addMember(horizontalSpacer);
+
Configuration defaultConfiguration =
(parametersDefinition.getDefaultTemplate() != null) ?
parametersDefinition.getDefaultTemplate().createConfiguration() : new
Configuration();
ConfigurationEditor configurationEditor = new
ConfigurationEditor("ParametersEditor", parametersDefinition,
diff --git
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/detail/operation/schedule/AbstractOperationScheduleListView.java
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/detail/operation/schedule/AbstractOperationScheduleListView.java
index 3819b4a..59f58e6 100644
---
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/detail/operation/schedule/AbstractOperationScheduleListView.java
+++
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/detail/operation/schedule/AbstractOperationScheduleListView.java
@@ -39,10 +39,13 @@ public abstract class AbstractOperationScheduleListView extends
TableSection<Abs
protected abstract boolean hasControlPermission();
+
@Override
protected void configureTable() {
super.configureTable();
+ ListGridField idField = new
ListGridField(AbstractOperationScheduleDataSource.Field.ID, 70);
+
ListGridField operationField = new
ListGridField(AbstractOperationScheduleDataSource.Field.OPERATION_DISPLAY_NAME, 180);
ListGridField subjectField = new
ListGridField(AbstractOperationScheduleDataSource.Field.SUBJECT, 110);
@@ -55,7 +58,7 @@ public abstract class AbstractOperationScheduleListView extends
TableSection<Abs
ListGridField descriptionField = new
ListGridField(AbstractOperationScheduleDataSource.Field.DESCRIPTION);
- setListGridFields(operationField, subjectField, nextFireTimeField,
descriptionField);
+ setListGridFields(true, idField, operationField, subjectField, nextFireTimeField,
descriptionField);
addTableAction(extendLocatorId("New"), MSG.common_button_new(), new
TableAction() {
public boolean isEnabled(ListGridRecord[] selection) {
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 3105aab..d46a5f4 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
@@ -96,7 +96,7 @@ public class ResourceGroupDetailView extends
AbstractTwoLevelTabSetView<Resource
private SubTab inventoryConn;
private SubTab inventoryConnHistory;
private SubTab operationsHistory;
- private SubTab operationsSchedule;
+ private SubTab operationsSchedules;
private SubTab alertHistory;
private SubTab alertDef;
private SubTab configCurrent;
@@ -199,11 +199,11 @@ public class ResourceGroupDetailView extends
AbstractTwoLevelTabSetView<Resource
operationsTab = new
TwoLevelTab(getTabSet().extendLocatorId("Operations"), new
ViewName("Operations", MSG
.view_tabs_common_operations()),
"/images/icons/Operation_grey_16.png");
- this.operationsSchedule = new
SubTab(operationsTab.extendLocatorId("Schedule"), new
ViewName("Schedule", MSG
- .view_tabs_common_schedule()), null);
+ this.operationsSchedules = new
SubTab(operationsTab.extendLocatorId("Schedules"), new
ViewName("Schedules", MSG
+ .view_tabs_common_schedules()), null);
this.operationsHistory = new
SubTab(operationsTab.extendLocatorId("History"), new
ViewName("History", MSG
.view_tabs_common_history()), null);
- operationsTab.registerSubTabs(this.operationsSchedule, this.operationsHistory);
+ operationsTab.registerSubTabs(this.operationsSchedules, this.operationsHistory);
tabs.add(operationsTab);
configurationTab = new
TwoLevelTab(getTabSet().extendLocatorId("Configuration"), new
ViewName("Configuration",
@@ -297,8 +297,8 @@ public class ResourceGroupDetailView extends
AbstractTwoLevelTabSetView<Resource
private void updateOperationsTab(GroupCategory groupCategory,
Set<ResourceTypeFacet> facets) {
if (updateTab(this.operationsTab, groupCategory == GroupCategory.COMPATIBLE
&& facets.contains(ResourceTypeFacet.OPERATION), true)) {
- updateSubTab(this.operationsTab, this.operationsSchedule,
- new
GroupOperationScheduleListView(this.operationsSchedule.extendLocatorId("View"),
+ updateSubTab(this.operationsTab, this.operationsSchedules,
+ new
GroupOperationScheduleListView(this.operationsSchedules.extendLocatorId("View"),
this.groupComposite), true, true);
updateSubTab(this.operationsTab, this.operationsHistory, new
GroupOperationHistoryListView(
this.operationsHistory.extendLocatorId("View"),
this.groupComposite), true, true);
diff --git
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/ResourceDetailView.java
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/ResourceDetailView.java
index 7fcf561..a4a5172 100644
---
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/ResourceDetailView.java
+++
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/ResourceDetailView.java
@@ -106,7 +106,7 @@ public class ResourceDetailView extends
AbstractTwoLevelTabSetView<ResourceCompo
private SubTab inventoryGroups;
private SubTab inventoryAgent;
private SubTab operationsHistory;
- private SubTab operationsSchedule;
+ private SubTab operationsSchedules;
private SubTab alertHistory;
private SubTab alertDef;
private SubTab configCurrent;
@@ -188,11 +188,11 @@ public class ResourceDetailView extends
AbstractTwoLevelTabSetView<ResourceCompo
operationsTab = new
TwoLevelTab(getTabSet().extendLocatorId("Operations"), new
ViewName("Operations", MSG
.view_tabs_common_operations()),
"/images/icons/Operation_grey_16.png");
- this.operationsSchedule = new
SubTab(operationsTab.extendLocatorId("Schedule"), new
ViewName("Schedule", MSG
- .view_tabs_common_schedule()), null);
+ this.operationsSchedules = new
SubTab(operationsTab.extendLocatorId("Schedules"), new
ViewName("Schedules", MSG
+ .view_tabs_common_schedules()), 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.operationsSchedules, this.operationsHistory);
tabs.add(operationsTab);
configurationTab = new
TwoLevelTab(getTabSet().extendLocatorId("Configuration"), new
ViewName("Configuration",
@@ -344,11 +344,11 @@ public class ResourceDetailView extends
AbstractTwoLevelTabSetView<ResourceCompo
// 4) user can navigate to the group operation that spawned this resource
operation history, if appropriate
// note: enabled operation execution/schedules from left-nav, if it
doesn't already exist
+ updateSubTab(this.operationsTab, this.operationsSchedules, new
ResourceOperationScheduleListView(
+ operationsTab.extendLocatorId("SchedulesView"),
this.resourceComposite), true, true);
+
updateSubTab(this.operationsTab, this.operationsHistory, new
ResourceOperationHistoryListView(operationsTab
.extendLocatorId("HistoryView"), this.resourceComposite), true,
true);
-
- updateSubTab(this.operationsTab, this.operationsSchedule, new
ResourceOperationScheduleListView(
- operationsTab.extendLocatorId("SchedulesView"),
this.resourceComposite), true, true);
}
}
diff --git
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/OperationGWTServiceImpl.java
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/OperationGWTServiceImpl.java
index 7a9b1a9..d194adf 100644
---
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/OperationGWTServiceImpl.java
+++
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/OperationGWTServiceImpl.java
@@ -93,9 +93,9 @@ public class OperationGWTServiceImpl extends AbstractGWTServiceImpl
implements O
public void scheduleResourceOperation(int resourceId, String operationName,
Configuration parameters,
String description, int timeout, String cronString) throws RuntimeException {
try {
- CronTrigger ct = new CronTrigger("resource " + resourceId +
"_" + operationName, "group", cronString);
+ CronTrigger cronTrigger = new CronTrigger("resource " + resourceId
+ "_" + operationName, "group", cronString);
ResourceOperationSchedule opSchedule =
operationManager.scheduleResourceOperation(getSessionSubject(),
- resourceId, operationName, parameters, ct, description);
+ resourceId, operationName, parameters, cronTrigger, description);
} catch (Throwable t) {
throw new RuntimeException(ThrowableUtil.getAllMessages(t));
}
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 1623dd1..8248b21 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
@@ -2001,16 +2001,22 @@ public class OperationManagerBean implements
OperationManagerLocal, OperationMan
SimpleTrigger simpleTrigger = new SimpleTrigger();
Date startTime = null;
switch (jobTrigger.getStartType()) {
- case NOW:
- startTime = new Date();
- break;
- case DATETIME:
- startTime = jobTrigger.getStartDate();
- break;
+ case NOW:
+ startTime = new Date();
+ break;
+ case DATETIME:
+ startTime = jobTrigger.getStartDate();
+ break;
}
simpleTrigger.setStartTime(startTime);
-
- // TODO (ips): Finish implementing this.
+ if (jobTrigger.getRecurrenceType() ==
JobTrigger.RecurrenceType.REPEAT_INTERVAL) {
+ simpleTrigger.setRepeatInterval(jobTrigger.getRepeatInterval());
+ if (jobTrigger.getEndType() == JobTrigger.EndType.DATETIME) {
+ simpleTrigger.setEndTime(jobTrigger.getEndDate());
+ } else if (jobTrigger.getEndType() == JobTrigger.EndType.REPEAT_COUNT) {
+ simpleTrigger.setRepeatCount(jobTrigger.getRepeatCount());
+ }
+ }
trigger = simpleTrigger;
}