.classpath | 2 modules/core/dbutils/pom.xml | 2 modules/core/dbutils/src/main/scripts/dbsetup-build.xml | 2 modules/core/dbutils/src/main/scripts/dbsetup/auth-schema.xml | 19 modules/core/dbutils/src/main/scripts/dbsetup/authz-schema.xml | 19 modules/core/dbutils/src/main/scripts/dbsetup/inventory-schema.xml | 5 modules/core/dbutils/src/main/scripts/dbupgrade/db-upgrade.xml | 16 modules/core/domain/src/main/java/org/rhq/core/domain/auth/Subject.java | 16 modules/core/domain/src/main/java/org/rhq/core/domain/configuration/definition/PropertyDefinitionSimple.java | 15 modules/core/domain/src/main/java/org/rhq/core/domain/criteria/ResourceGroupCriteria.java | 23 modules/core/domain/src/main/java/org/rhq/core/domain/resource/composite/ResourceLineageComposite.java | 51 + modules/core/domain/src/main/java/org/rhq/core/domain/resource/group/ResourceGroup.java | 26 modules/enterprise/gui/coregui/pom.xml | 6 modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/CoreGUI.gwt.xml | 44 + modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/CoreGUI.java | 34 - modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/DemoCanvas.java | 2 modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/LoginView.java | 2 modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/SearchGUI.java | 2 modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/UserSessionManager.java | 33 - modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/AlertDataSource.java | 4 modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/AlertPortletDataSource.java | 2 modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/AbstractNotificationSenderForm.java | 102 +++ modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/NewNotificationEditor.java | 80 ++ modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/NotificationsAlertDefinitionForm.java | 6 modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/SimpleNotificationSenderForm.java | 75 ++ modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/BundleTopView.java | 2 modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/list/BundleView.java | 3 modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/FullHTMLPane.java | 2 modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/configuration/ConfigurationEditor.java | 157 ++++- modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/configuration/ListGridConfigurationEditor.java | 6 modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/table/PropertyGrid.java | 11 modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/table/Table.java | 19 modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/DashboardView.java | 2 modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/DashboardsView.java | 2 modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/PortalLayout.java | 2 modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/AlertDefinitionGWTService.java | 3 modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/ResourceGWTService.java | 5 modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/ResourceGroupGWTService.java | 8 modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/AbstractMeasurementDataTraitDataSource.java | 2 modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/AbstractMeasurementScheduleDataSource.java | 2 modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/detail/AbstractTwoLevelTabSetView.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/groups/detail/ResourceGroupTreeView.java | 6 modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/monitoring/schedules/SchedulesDataSource.java | 24 modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/ResourceSearchView.java | 2 modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/CustomResourceTreeGrid.java | 17 modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/NewResourceTreeDataSource.java | 6 modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/NewResourceTreeView.java | 2 modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/ResourceTreeDatasource.java | 57 - modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/ResourceTreeView.java | 175 +++-- modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/inventory/PluginConfigurationEditView.java | 3 modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/operation/create/OperationCreateWizard.java | 2 modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/type/ResourceTypeRepository.java | 8 modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/menu/DropDownMenuBarView.java | 2 modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/menu/SearchBarPane.java | 2 modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/search/SearchBar.java | 2 modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/test/TestConfigurationFactory.java | 293 ++++++++++ modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/test/TestConfigurationView.java | 129 ++++ modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/RPCDataSource.java | 10 modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/TreeUtility.java | 2 modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/WidgetUtility.java | 2 modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/message/Message.java | 10 modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/message/MessageBar.java | 4 modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/message/MessageCenterView.java | 22 modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/rpc/MonitoringRequestCallback.java | 2 modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/rpc/RPCManager.java | 2 modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/AlertDefinitionGWTServiceImpl.java | 12 modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/AlertGWTServiceImpl.java | 21 modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/AuthorizationGWTServiceImpl.java | 44 + modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/AvailabilityGWTServiceImpl.java | 15 modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ClusterGWTServiceImpl.java | 22 modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ConfigurationGWTServiceImpl.java | 107 ++- modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ContentGWTServiceImpl.java | 12 modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/DashboardGWTServiceImpl.java | 28 modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/EventGWTServiceImpl.java | 54 + modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/MeasurementDataGWTServiceImpl.java | 132 +++- modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ObjectFilter.java | 17 modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/OperationGWTServiceImpl.java | 65 +- modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/RepoGWTServiceImpl.java | 11 modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ResourceBossGWTServiceImpl.java | 9 modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ResourceGWTServiceImpl.java | 147 +++-- modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ResourceGroupGWTServiceImpl.java | 11 modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ResourceTypeGWTServiceImpl.java | 19 modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/RoleGWTServiceImpl.java | 47 + modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/SearchGWTServiceImpl.java | 49 + modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/SubjectGWTServiceImpl.java | 47 + modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/SystemGWTServiceImpl.java | 10 modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/TagGWTServiceImpl.java | 66 +- modules/enterprise/server/jar/pom.xml | 7 modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/auth/SubjectManagerBean.java | 26 modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/authz/AuthorizationManagerBean.java | 36 + modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/configuration/metadata/ConfigurationDefinitionUpdateReport.java | 17 modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/configuration/metadata/ConfigurationMetadataManagerBean.java | 8 modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/ResourceManagerBean.java | 80 ++ modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/ResourceManagerLocal.java | 9 modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/group/ResourceGroupManagerBean.java | 77 +- modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/group/ResourceGroupManagerLocal.java | 27 modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/metadata/ResourceMetadataManagerBean.java | 19 modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/configuration/metadata/ConfigurationMetadataManagerBeanTest.java | 199 +++--- modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/configuration/metadata/PluginDescriptorUtil.java | 70 ++ modules/enterprise/server/jar/src/test/resources/org/rhq/enterprise/server/configuration/metadata/configuration_metadata_manager_bean_test_v1.xml | 29 modules/enterprise/server/jar/src/test/resources/org/rhq/enterprise/server/configuration/metadata/configuration_metadata_manager_bean_test_v2.xml | 45 + 102 files changed, 2484 insertions(+), 725 deletions(-)
New commits: commit 65c3b23735a092f9675cb2e878b79039b5ab9c93 Merge: e7fb6ed... ebd4ec6... Author: Lukas Krejci lkrejci@redhat.com Date: Mon Oct 4 18:37:55 2010 +0200
Merge branch 'master' into resource-upgrade
diff --cc modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ResourceGWTServiceImpl.java index 150a692,4e14b75..a004680 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ResourceGWTServiceImpl.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ResourceGWTServiceImpl.java @@@ -238,11 -274,11 +275,15 @@@ public class ResourceGWTServiceImpl ext }
public void unignoreResources(Integer[] resourceIds) { - discoveryBoss.unignoreResources(getSessionSubject(), resourceIds); + try { + discoveryBoss.unignoreResources(getSessionSubject(), resourceIds); + } catch (Exception e) { + throw new RuntimeException(ThrowableUtil.getAllMessages(e)); + } } - -} + + public List<ResourceError> findResourceErrors(int resourceId) { + return SerialUtility.prepare(resourceManager.findResourceErrors(getSessionSubject(), resourceId), + "ResourceService.getResourceErrors"); + } +}
commit ebd4ec6f3c0ec9232970ee6c58ebdecf16b5b4a2 Author: John Mazzitelli mazz@redhat.com Date: Sat Oct 2 21:59:28 2010 -0400
be able to resize the new notif dialog
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/NotificationsAlertDefinitionForm.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/NotificationsAlertDefinitionForm.java index f707dc1..117fcb0 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/NotificationsAlertDefinitionForm.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/NotificationsAlertDefinitionForm.java @@ -284,8 +284,8 @@ public class NotificationsAlertDefinitionForm extends LocatableVLayout implement winModal.setShowModalMask(true); winModal.setAutoSize(true); winModal.setAutoCenter(true); - //winModal.setShowResizer(true); - //winModal.setCanDragResize(true); + winModal.setShowResizer(true); + winModal.setCanDragResize(true); winModal.centerInPage(); winModal.addCloseClickHandler(new CloseClickHandler() { @Override
commit f0b0a15a1804d4606a03af3fb89ccfc0fb5bff91 Author: John Mazzitelli mazz@redhat.com Date: Sat Oct 2 21:32:53 2010 -0400
add gwt-log to eclipse classpath
diff --git a/.classpath b/.classpath index 0a567d7..1a1236c 100644 --- a/.classpath +++ b/.classpath @@ -252,6 +252,7 @@ <classpathentry exported="true" kind="var" path="M2_REPO/com/google/gwt/gwt-user/2.0.3/gwt-user-2.0.3.jar"/> <classpathentry exported="true" kind="var" path="M2_REPO/com/google/gwt/gwt-dev/2.0.3/gwt-dev-2.0.3.jar"/> <classpathentry exported="true" kind="var" path="M2_REPO/com/smartgwt/smartgwt/2.2/smartgwt-2.2.jar"/> + <classpathentry exported="true" kind="var" path="M2_REPO/com/google/code/gwt-log/gwt-log/3.0.3/gwt-log-3.0.3.jar"/> <classpathentry exported="true" kind="var" path="M2_REPO/ca/nanometrics/gflot/1.0.0/gflot-1.0.0.jar"/> <classpathentry exported="true" kind="var" path="M2_REPO/com/jcraft/jsch/0.1.29/jsch-0.1.29.jar"/> <classpathentry exported="true" kind="var" path="M2_REPO/commons-jxpath/commons-jxpath/1.3/commons-jxpath-1.3.jar"/>
commit 9325dbcc42782c4a89be13acb7243dc08b618ec2 Author: Ian Springer ian.springer@redhat.com Date: Fri Oct 1 21:15:08 2010 -0400
work on completing impl of map-of-simples in ConfigurationEditor
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/configuration/ConfigurationEditor.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/configuration/ConfigurationEditor.java index 343a709..fdc2d9c 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/configuration/ConfigurationEditor.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/configuration/ConfigurationEditor.java @@ -39,6 +39,7 @@ import com.smartgwt.client.types.TreeModelType; import com.smartgwt.client.types.VisibilityMode; import com.smartgwt.client.util.BooleanCallback; import com.smartgwt.client.util.SC; +import com.smartgwt.client.util.ValueCallback; import com.smartgwt.client.widgets.Canvas; import com.smartgwt.client.widgets.IButton; import com.smartgwt.client.widgets.Label; @@ -73,6 +74,8 @@ import com.smartgwt.client.widgets.form.validator.Validator; import com.smartgwt.client.widgets.grid.ListGrid; import com.smartgwt.client.widgets.grid.ListGridField; import com.smartgwt.client.widgets.grid.ListGridRecord; +import com.smartgwt.client.widgets.grid.events.CellSavedEvent; +import com.smartgwt.client.widgets.grid.events.CellSavedHandler; import com.smartgwt.client.widgets.grid.events.RecordClickEvent; import com.smartgwt.client.widgets.grid.events.RecordClickHandler; import com.smartgwt.client.widgets.grid.events.SelectionChangedHandler; @@ -115,11 +118,13 @@ import org.rhq.core.domain.configuration.definition.constraint.FloatRangeConstra import org.rhq.core.domain.configuration.definition.constraint.IntegerRangeConstraint; import org.rhq.core.domain.configuration.definition.constraint.RegexConstraint; import org.rhq.core.domain.resource.ResourceType; +import org.rhq.enterprise.gui.coregui.client.CoreGUI; import org.rhq.enterprise.gui.coregui.client.components.table.PropertyGrid; import org.rhq.enterprise.gui.coregui.client.gwt.ConfigurationGWTServiceAsync; import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup; import org.rhq.enterprise.gui.coregui.client.inventory.resource.type.ResourceTypeRepository; import org.rhq.enterprise.gui.coregui.client.util.CanvasUtility; +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.LocatableHLayout; import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableIButton; @@ -561,12 +566,12 @@ public class ConfigurationEditor extends LocatableVLayout { }
private void buildMapsField(ArrayList<FormItem> fields, PropertyDefinitionMap propertyDefinitionMap, - PropertyMap propertyMap) { + final PropertyMap propertyMap) { // create the property grid - PropertyGrid propertyGrid = new PropertyGrid(); + final PropertyGrid propertyGrid = new PropertyGrid(); propertyGrid.getNameField().setName("Name"); propertyGrid.getValuesField().setName("Value"); - + // create the editors Map<String, FormItem> editorsMap = new HashMap<String, FormItem>(); TextItem textEditor = new TextItem(); @@ -575,29 +580,123 @@ public class ConfigurationEditor extends LocatableVLayout { // set the editors and attribute name where to find the record type propertyGrid.setEditorsMap("fieldType", editorsMap);
- if (propertyMap != null) { - ListGridRecord[] records = new ListGridRecord[propertyMap.getMap().size()]; + if (propertyDefinitionMap != null) { + ListGridRecord[] records = new ListGridRecord[propertyDefinitionMap.getPropertyDefinitions().size()]; int i = 0; - for (Property property : propertyMap.getMap().values()) { + // TODO (ips): For open maps, create the records based on props, not propDefs. + // TODO (ips): Render unset checkboxes amd descriptions for member props, just as we would for top-level simples. + for (PropertyDefinition propDef : propertyDefinitionMap.getPropertyDefinitions().values()) { ListGridRecord record = new ListGridRecord(); - record.setAttribute("Name", property.getName()); - record.setAttribute("Value", ((PropertySimple) property).getStringValue()); + String propertyName = propDef.getName(); + record.setAttribute("Name", propertyName); + PropertySimple prop = propertyMap.getSimple(propertyName); + String value = (prop != null) ? prop.getStringValue() : null; + record.setAttribute("Value", value); record.setAttribute("fieldType", "simpleText"); + record.setAttribute("readOnly", propDef.isReadOnly()); records[i++] = record; } propertyGrid.setData(records); }
- propertyGrid.draw(); + VLayout canvas = new VLayout(); + + canvas.addMember(propertyGrid); + + // Footer + ToolStrip footer = new ToolStrip(); + footer.setPadding(5); + footer.setWidth100(); + footer.setMembersMargin(15); + canvas.addMember(footer); + + // Properties can only be added to or deleted from non-read-only "open" maps. + if (propertyDefinitionMap.getPropertyDefinitions().isEmpty() && !propertyDefinitionMap.isReadOnly()) { + final IButton deleteButton = new LocatableIButton(extendLocatorId(propertyMap.getName()), "Delete"); + deleteButton.setDisabled(true); + deleteButton.addClickHandler(new com.smartgwt.client.widgets.events.ClickHandler() { + public void onClick(ClickEvent clickEvent) { + final ListGridRecord[] selectedRecords = propertyGrid.getSelection(); + String noun = (selectedRecords.length == 1) ? "property" : "properties"; + String message = "Are you sure you want to delete the selected" + noun + "?"; + SC.ask(message, new BooleanCallback() { + public void execute(Boolean confirmed) { + if (confirmed) { + for (ListGridRecord selectedRecord : selectedRecords) { + propertyGrid.removeData(selectedRecord); + String propertyName = selectedRecord.getAttribute("Name"); + propertyMap.getMap().remove(propertyName); + } + } + } + }); + } + }); + footer.addMember(deleteButton);
- CanvasItem item = new CanvasItem(); - item.setCanvas(propertyGrid); - // item.setHeight(500); - item.setColSpan(3); - item.setEndRow(true); - item.setShowTitle(false); - fields.add(item); + propertyGrid.addSelectionChangedHandler(new SelectionChangedHandler() { + public void onSelectionChanged(SelectionEvent selectionEvent) { + int count = propertyGrid.getSelection().length; + deleteButton.setDisabled(count < 1); + } + }); + + final IButton newButton = new LocatableIButton(extendLocatorId(propertyMap.getName()), "New"); + newButton.addClickHandler(new com.smartgwt.client.widgets.events.ClickHandler() { + public void onClick(ClickEvent clickEvent) { + SC.askforValue("Enter the name of the property to be added.", new ValueCallback() { + @Override + public void execute(String propertyName) { + if (propertyMap.get(propertyName) != null) { + CoreGUI.getMessageCenter().notify( + new Message("Cannot add property named '" + propertyName + + "', because the set already contains a property with that name.", + Message.Severity.Error, EnumSet.of(Message.Option.Transient))); + } else { + propertyMap.put(new PropertySimple(propertyName, null)); + + ListGridRecord record = new ListGridRecord(); + record.setAttribute("Name", propertyName); + record.setAttribute("Value", ""); + record.setAttribute("fieldType", "simpleText"); + + propertyGrid.addData(record); + propertyGrid.focus(); + propertyGrid.enableSpecificEditor(record); + + CoreGUI.getMessageCenter().notify(new Message("Added property to the set.", EnumSet.of( + Message.Option.Transient))); + } + } + }); + } + }); + footer.addMember(newButton); + }
+ propertyGrid.addCellSavedHandler(new CellSavedHandler() { + @Override + public void onCellSaved(CellSavedEvent cellSavedEvent) { + Record record = cellSavedEvent.getRecord(); + String propertyName = record.getAttribute("Name"); + PropertySimple prop = propertyMap.getSimple(propertyName); + if (prop == null) { + prop = new PropertySimple(propertyName, null); + } + String value = record.getAttribute("Value"); + prop.setStringValue(value); + } + }); + + propertyGrid.draw(); + + CanvasItem canvasItem = new CanvasItem(); + canvasItem.setCanvas(canvas); + // item.setHeight(500); + canvasItem.setColSpan(3); + canvasItem.setEndRow(true); + canvasItem.setShowTitle(false); + fields.add(canvasItem); }
private void buildListOfMapsField(final String locatorId, ArrayList<FormItem> fields, diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/table/PropertyGrid.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/table/PropertyGrid.java index ee6b7d7..73340fa 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/table/PropertyGrid.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/table/PropertyGrid.java @@ -38,7 +38,6 @@ import com.smartgwt.client.widgets.grid.events.RecordClickHandler; * @author Dan Mihai Ile */ public class PropertyGrid extends ListGrid { - /** * Map to hold the editors */ @@ -56,7 +55,7 @@ public class PropertyGrid extends ListGrid { */ public PropertyGrid() {
- // create the 2 fields, one for names, other for values + // Create the 2 fields - one for names, other for values. ListGridField nameField = new ListGridField(); nameField.setCanEdit(false); ListGridField valueField = new ListGridField(); @@ -100,7 +99,7 @@ public class PropertyGrid extends ListGrid {
/** * Set the name of the attribute from where the row will get the editor name - * to be used on the {@link Map} from where the rows will get it's editors + * to be used on the {@link Map} from where the rows will get its editors * <p/> * When an edit starts the {@link PropertyGrid} will retrieve the key of the * editor form the row's attributes and use that key on the map to get the @@ -120,8 +119,9 @@ public class PropertyGrid extends ListGrid { * * @param record the record */ - private void enableSpecificEditor(Record record) { - if (editorsMap != null) { + public void enableSpecificEditor(Record record) { + boolean readOnly = record.getAttributeAsBoolean("readOnly"); + if (editorsMap != null && !readOnly) { String attribute = record.getAttribute(valueFieldAttribute); if (editorsMap.containsKey(attribute)) { FormItem formItem = editorsMap.get(attribute); @@ -129,5 +129,4 @@ public class PropertyGrid extends ListGrid { } } } - } \ No newline at end of file diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/message/Message.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/message/Message.java index 429ef36..3a0b464 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/message/Message.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/message/Message.java @@ -39,6 +39,10 @@ public class Message { public enum Severity { Info, Warning, Error, Fatal }; public enum Option { Transient, Sticky, BackgroundJobResult };
+ public Message(String conciseMessage) { + this(conciseMessage, (Severity)null); + } + public Message(String conciseMessage, Severity severity) { this(conciseMessage, null, severity); } @@ -46,7 +50,11 @@ public class Message { public Message(String conciseMessage, String detailedMessage) { this(conciseMessage, detailedMessage, null); } - + + public Message(String conciseMessage, EnumSet<Option> options) { + this(conciseMessage, null, options); + } + public Message(String conciseMessage, String detailedMessage, Severity severity) { this(conciseMessage, detailedMessage, severity, null); }
commit 614e969e489795a4408f23e474507f174c95fdf2 Author: Jay Shaughnessy jshaughn@redhat.com Date: Fri Oct 1 18:00:25 2010 -0400
Reverting a change made in 6415ed10e3b0d967b712a7be0aa0a3fcf4ce95cb, it breaks rendering of single-element paths (like "#Bundles or #Reports). The BookmarkableView's renderView needs to be invoked.
I didn't see any ill effect of adding this back in, so I'm not sure of the intent of the original change. May need more work.
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/CoreGUI.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/CoreGUI.java index e9b7788..cf9e470 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/CoreGUI.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/CoreGUI.java @@ -304,12 +304,19 @@ public class CoreGUI implements EntryPoint, ValueChangeHandler<String> { }
if (this.currentCanvas instanceof BookmarkableView) { - viewPath.next(); - if (!viewPath.isEnd()) { - ((BookmarkableView) this.currentCanvas).renderView(viewPath); - } + ((BookmarkableView) this.currentCanvas).renderView(viewPath.next()); }
+ // reverting this is as it breaks rendering of single-element paths (like "#Bundles or + // #Reports. the BookmarkableView's renderView needs to be invoked. + // + //if (this.currentCanvas instanceof BookmarkableView) { + // viewPath.next(); + // if (!viewPath.isEnd()) { + // ((BookmarkableView) this.currentCanvas).renderView(viewPath); + // } + //} + refreshBreadCrumbTrail(); } } diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/list/BundleView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/list/BundleView.java index fb382fa..4dc2182 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/list/BundleView.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/list/BundleView.java @@ -45,6 +45,7 @@ import org.rhq.enterprise.gui.coregui.client.Breadcrumb; import org.rhq.enterprise.gui.coregui.client.CoreGUI; import org.rhq.enterprise.gui.coregui.client.ViewId; import org.rhq.enterprise.gui.coregui.client.ViewPath; +import org.rhq.enterprise.gui.coregui.client.bundle.BundleTopView; import org.rhq.enterprise.gui.coregui.client.bundle.deploy.BundleDeployWizard; import org.rhq.enterprise.gui.coregui.client.bundle.deployment.BundleDeploymentView; import org.rhq.enterprise.gui.coregui.client.bundle.destination.BundleDestinationListView; @@ -98,7 +99,7 @@ public class BundleView extends LocatableVLayout implements BookmarkableView {
this.bundle = bundle;
- addMember(new BackButton(extendLocatorId("BackButton"), "Back to All Bundles", "Bundles")); + addMember(new BackButton(extendLocatorId("BackButton"), "Back to All Bundles", BundleTopView.VIEW_ID));
headerLabel = new HeaderLabel("subsystems/bundle/Bundle_24.png", bundle.getName());
commit 53a86e032a7df9e9c35bb50c9bde6fca72c722aa Author: Jay Shaughnessy jshaughn@redhat.com Date: Fri Oct 1 09:57:45 2010 -0400
ResourceTree Authz work - support for locked nodes - support for autogroups for non-inventory managers. Now that AGs are backed by compat groups it's necessary for non-inv-managers to be able to create and access the private groups that they own. Private groups (aka subject-owned groups) are new, they are basically groups that are tagged with the creating subjectId. Those groups can be created (via a new slsb call) and fetched (via a new ResourceGroupCriteria filter) w/o inventory manager perms. - note: i had to move rhq_subject to auth-schema from authz-schema and slightly change the dbsetup order to make it ok for rhq_resource_group to reference rhq_subject. - schema spec bumped to 2.97 - added ResourceLineageComposite to combine Resource and locked/viewable info.
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/ResourceTreeView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/ResourceTreeView.java index c06c636..d6cfdba 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/ResourceTreeView.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/ResourceTreeView.java @@ -628,6 +628,7 @@ public class ResourceTreeView extends LocatableVLayout { }
if (!root.equals(ResourceTreeView.this.rootResource)) { + if (treeGrid != null) { treeGrid.destroy(); }
commit 4d9fbbc3af633a1e59f5148edcb6bab040d618c0 Author: John Mazzitelli mazz@redhat.com Date: Fri Oct 1 18:59:21 2010 -0400
create the catch-all simple notif sender config editor
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/AbstractNotificationSenderForm.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/AbstractNotificationSenderForm.java index 357943f..5b8b0b4 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/AbstractNotificationSenderForm.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/AbstractNotificationSenderForm.java @@ -37,9 +37,41 @@ public abstract class AbstractNotificationSenderForm extends LocatableVLayout {
private Configuration configuration; private Configuration extraConfiguration; + private final String sender;
- public AbstractNotificationSenderForm(String locatorId) { + public AbstractNotificationSenderForm(String locatorId, AlertNotification notif, String sender) { super(locatorId); + + this.sender = sender; + + if (notif != null) { + // make our own deep copies of the configs so we can throw them away without + // affecting the actual notif in case the user clicks cancel + Configuration notifConfig = notif.getConfiguration(); + Configuration notifExtraConfig = notif.getExtraConfiguration(); + + if (notifConfig != null) { + configuration = notifConfig.deepCopy(true); + } else { + configuration = new Configuration(); // must not be null + } + if (notifExtraConfig != null) { + extraConfiguration = notifExtraConfig.deepCopy(true); + } else { + extraConfiguration = null; // allowed to be null + } + } else { + configuration = new Configuration(); + extraConfiguration = null; + } + } + + /** + * The name of the alert sender that is to be configured. + * @return the sender name + */ + public String getSender() { + return sender; }
/** diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/NewNotificationEditor.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/NewNotificationEditor.java index 92d8f75..390357c 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/NewNotificationEditor.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/NewNotificationEditor.java @@ -197,11 +197,33 @@ public class NewNotificationEditor extends LocatableDynamicForm { if (oldCanvas != null) { oldCanvas.markForDestroy(); } - - // TODO: need to create different forms for different types of senders - SimpleNotificationSenderForm newCanvas = new SimpleNotificationSenderForm(extendLocatorId(newAlertSender)); + AbstractNotificationSenderForm newCanvas = createNotificationSenderForm(newAlertSender); senderCanvasItem.setCanvas(newCanvas); - markForRedraw(); } + + private AbstractNotificationSenderForm createNotificationSenderForm(String sender) { + String newLocatorId = extendLocatorId(sender); + AbstractNotificationSenderForm newCanvas; + + // NOTE: today there is no way for an alert server plugin developer + // to be able to provide us with a custom UI component to render (like we used to be able + // to do when the ui was implemented in JSF and the server plugin can give us a JSF snippet). + // We have to hard code the names of the "special" plugins that require special UIs which + // are necessary to build the sender configuration for these special alert senders. + // For those that want to write their own custom alert plugins, you are restricted to + // using configuration definitions as the only way to configure the sender. + if ("System Users".equals(sender)) { + newCanvas = null; // TODO + } else if ("System Roles".equals(sender)) { + newCanvas = null; // TODO + } else if ("Resource Operations".equals(sender)) { + newCanvas = null; // TODO + } else { + // catch all - all other senders are assumed to just have simple configuration definition + // that can be used by our configuration editor UI component to ask for config values. + newCanvas = new SimpleNotificationSenderForm(newLocatorId, notificationToEdit, sender); + } + return newCanvas; + } } diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/SimpleNotificationSenderForm.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/SimpleNotificationSenderForm.java index a70bd82..4a16380 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/SimpleNotificationSenderForm.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/SimpleNotificationSenderForm.java @@ -23,8 +23,15 @@
package org.rhq.enterprise.gui.coregui.client.alert.definitions;
+import com.google.gwt.user.client.rpc.AsyncCallback; import com.smartgwt.client.widgets.Label;
+import org.rhq.core.domain.alert.notification.AlertNotification; +import org.rhq.core.domain.configuration.definition.ConfigurationDefinition; +import org.rhq.enterprise.gui.coregui.client.CoreGUI; +import org.rhq.enterprise.gui.coregui.client.components.configuration.ConfigurationEditor; +import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup; + /** * This notification form will be used for most alert senders since most alert senders * only need to be given a simple set of configuration properties where the user @@ -34,14 +41,35 @@ import com.smartgwt.client.widgets.Label; */ public class SimpleNotificationSenderForm extends AbstractNotificationSenderForm {
- public SimpleNotificationSenderForm(String locatorId) { - super(locatorId); + public SimpleNotificationSenderForm(String locatorId, AlertNotification notif, String sender) { + super(locatorId, notif, sender); }
@Override - protected void onInit() { - super.onInit(); - // TODO add config editor - addMember(new Label("simple form : " + getLocatorId())); + protected void onDraw() { + super.onDraw(); + + GWTServiceLookup.getAlertDefinitionService().getConfigurationDefinitionForSender(getSender(), + new AsyncCallback<ConfigurationDefinition>() { + @Override + public void onSuccess(ConfigurationDefinition configDef) { + ConfigurationEditor configEditor = new ConfigurationEditor(extendLocatorId("configEditor"), + configDef, getConfiguration()); + configEditor.setHeight(500); + configEditor.setWidth(500); + addMember(configEditor); + markForRedraw(); + } + + @Override + public void onFailure(Throwable caught) { + String errMsg = "Cannot get alert sender configuration definition"; + CoreGUI.getErrorHandler().handleError(errMsg, caught); + Label label = new Label(errMsg); + label.setIcon("[SKIN]/Dialog/error.png"); + addMember(label); + markForRedraw(); + } + }); } } diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/AlertDefinitionGWTService.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/AlertDefinitionGWTService.java index ee93aed..ceb427e 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/AlertDefinitionGWTService.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/AlertDefinitionGWTService.java @@ -22,6 +22,7 @@ import com.google.gwt.user.client.rpc.RemoteService;
import org.rhq.core.domain.alert.AlertDefinition; import org.rhq.core.domain.alert.notification.AlertNotification; +import org.rhq.core.domain.configuration.definition.ConfigurationDefinition; import org.rhq.core.domain.criteria.AlertDefinitionCriteria; import org.rhq.core.domain.util.PageList;
@@ -43,4 +44,6 @@ public interface AlertDefinitionGWTService extends RemoteService { String[] getAlertNotificationConfigurationPreview(AlertNotification[] notifs) throws Exception;
String[] getAllAlertSenders() throws Exception; + + ConfigurationDefinition getConfigurationDefinitionForSender(String sender) throws Exception; } \ No newline at end of file diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/AlertDefinitionGWTServiceImpl.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/AlertDefinitionGWTServiceImpl.java index b906473..ada48ab 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/AlertDefinitionGWTServiceImpl.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/AlertDefinitionGWTServiceImpl.java @@ -22,6 +22,7 @@ import java.util.List;
import org.rhq.core.domain.alert.AlertDefinition; import org.rhq.core.domain.alert.notification.AlertNotification; +import org.rhq.core.domain.configuration.definition.ConfigurationDefinition; import org.rhq.core.domain.criteria.AlertDefinitionCriteria; import org.rhq.core.domain.util.PageList; import org.rhq.core.util.exception.ThrowableUtil; @@ -122,4 +123,15 @@ public class AlertDefinitionGWTServiceImpl extends AbstractGWTServiceImpl implem throw new RuntimeException(ThrowableUtil.getAllMessages(e)); } } + + @Override + public ConfigurationDefinition getConfigurationDefinitionForSender(String sender) throws Exception { + try { + ConfigurationDefinition results = alertNotifManager.getConfigurationDefinitionForSender(sender); + return SerialUtility.prepare(results, "getConfigurationDefinitionForSender"); + } catch (Exception e) { + throw new RuntimeException(ThrowableUtil.getAllMessages(e)); + } + } + } \ No newline at end of file
commit 54400ac63137b081d50b7bdac7419b44e9ab2dbc Merge: 9cfec33... cd224c2... Author: John Sanda jsanda@redhat.com Date: Thu Sep 30 16:48:03 2010 -0400
Merge branch 'master' of ssh://git.fedorahosted.org/git/rhq/rhq
commit cd224c2d8b3c2a2ed53d5b66ec4bbdb66b404a41 Author: John Mazzitelli mazz@redhat.com Date: Fri Oct 1 14:33:01 2010 -0400
start building framework for the different forms needed for the different senders
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/AbstractNotificationSenderForm.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/AbstractNotificationSenderForm.java new file mode 100644 index 0000000..357943f --- /dev/null +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/AbstractNotificationSenderForm.java @@ -0,0 +1,70 @@ +/* + * RHQ Management Platform + * Copyright (C) 2005-2010 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.alert.definitions; + +import org.rhq.core.domain.alert.notification.AlertNotification; +import org.rhq.core.domain.configuration.Configuration; +import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableVLayout; + +/** + * Superclass to all alert senders' forms. Instances of this class + * are displayed when switching the drop-down option menu selecting + * a specific sender. + * + * @author John Mazzitelli + */ +public abstract class AbstractNotificationSenderForm extends LocatableVLayout { + + private Configuration configuration; + private Configuration extraConfiguration; + + public AbstractNotificationSenderForm(String locatorId) { + super(locatorId); + } + + /** + * The {@link AlertNotification#getConfiguration()} for the new alert definition notification. + * + * @return the configuration + */ + public Configuration getConfiguration() { + return configuration; + } + + public void setConfiguration(Configuration configuration) { + this.configuration = configuration; + } + + /** + * The {@link AlertNotification#getExtraConfiguration()} for the new alert definition notification. + * + * @return the extra configuration + */ + public Configuration getExtraConfiguration() { + return extraConfiguration; + } + + public void setExtraConfiguration(Configuration extraConfiguration) { + this.extraConfiguration = extraConfiguration; + } +} diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/NewNotificationEditor.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/NewNotificationEditor.java index 5da3c43..92d8f75 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/NewNotificationEditor.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/NewNotificationEditor.java @@ -28,12 +28,14 @@ import java.util.LinkedHashMap;
import com.google.gwt.user.client.rpc.AsyncCallback; import com.smartgwt.client.types.Alignment; -import com.smartgwt.client.widgets.form.DynamicForm; -import com.smartgwt.client.widgets.form.FormItemIfFunction; +import com.smartgwt.client.widgets.Canvas; import com.smartgwt.client.widgets.form.fields.ButtonItem; +import com.smartgwt.client.widgets.form.fields.CanvasItem; import com.smartgwt.client.widgets.form.fields.FormItem; import com.smartgwt.client.widgets.form.fields.SelectItem; import com.smartgwt.client.widgets.form.fields.SpacerItem; +import com.smartgwt.client.widgets.form.fields.events.ChangedEvent; +import com.smartgwt.client.widgets.form.fields.events.ChangedHandler; import com.smartgwt.client.widgets.form.fields.events.ClickEvent; import com.smartgwt.client.widgets.form.fields.events.ClickHandler;
@@ -54,6 +56,7 @@ public class NewNotificationEditor extends LocatableDynamicForm { private final Runnable closeFunction; // this is called after a button is pressed and the editor should close
private SelectItem notificationSenderSelectItem; + private CanvasItem senderCanvasItem;
public NewNotificationEditor(String locatorId, AlertDefinition alertDefinition, ArrayList<AlertNotification> notifs, AlertNotification notifToEdit, Runnable closeFunc) { @@ -71,17 +74,30 @@ public class NewNotificationEditor extends LocatableDynamicForm {
setMargin(20);
+ // this is the container that will house the sender-specific form components + senderCanvasItem = new CanvasItem(); + senderCanvasItem.setShowTitle(false); + senderCanvasItem.setColSpan(2); + notificationSenderSelectItem = new SelectItem("notificationSender", "Notification Sender"); + notificationSenderSelectItem.setDefaultToFirstOption(true); + notificationSenderSelectItem.setWrapTitle(false); + notificationSenderSelectItem.setRedrawOnChange(true); + notificationSenderSelectItem.setWidth("*");
if (notificationToEdit != null) { // we were given a notification to edit, you can't change the sender type, its the only option notificationSenderSelectItem.setDisabled(true); + String senderName = notificationToEdit.getSenderName(); LinkedHashMap<String, String> senders = new LinkedHashMap<String, String>(1); - senders.put(notificationToEdit.getSenderName(), notificationToEdit.getSenderName()); + senders.put(senderName, senderName); notificationSenderSelectItem.setValueMap(senders); + switchToAlertSender(senderName); + senderCanvasItem.setVisible(true); } else { notificationSenderSelectItem.setValueMap("Loading..."); notificationSenderSelectItem.setDisabled(true); + senderCanvasItem.setVisible(false); // don't show it yet, until we determine what senders exist // we are creating a new notification, need to provide all senders as options GWTServiceLookup.getAlertDefinitionService().getAllAlertSenders(new AsyncCallback<String[]>() { @Override @@ -94,6 +110,8 @@ public class NewNotificationEditor extends LocatableDynamicForm { notificationSenderSelectItem.setValueMap(senders); notificationSenderSelectItem.setDisabled(false); notificationSenderSelectItem.redraw(); + switchToAlertSender(result[0]); + senderCanvasItem.show(); } else { CoreGUI.getErrorHandler().handleError("No alert senders available"); } @@ -106,10 +124,13 @@ public class NewNotificationEditor extends LocatableDynamicForm { }); }
- notificationSenderSelectItem.setDefaultToFirstOption(true); - notificationSenderSelectItem.setWrapTitle(false); - notificationSenderSelectItem.setRedrawOnChange(true); - notificationSenderSelectItem.setWidth("*"); + notificationSenderSelectItem.addChangedHandler(new ChangedHandler() { + @Override + public void onChanged(ChangedEvent event) { + String newAlertSender = event.getValue().toString(); + switchToAlertSender(newAlertSender); + } + });
SpacerItem spacer1 = new SpacerItem(); spacer1.setColSpan(2); @@ -145,7 +166,7 @@ public class NewNotificationEditor extends LocatableDynamicForm { ArrayList<FormItem> formItems = new ArrayList<FormItem>(); formItems.add(notificationSenderSelectItem); formItems.add(spacer1); - // TODO put config editor here + formItems.add(senderCanvasItem); formItems.add(spacer2); formItems.add(ok); formItems.add(cancel); @@ -166,20 +187,21 @@ public class NewNotificationEditor extends LocatableDynamicForm { notif = notificationToEdit; }
- // notif.setConfiguration(configuration); - // notif.setExtraConfiguration(extraConfiguration); + AbstractNotificationSenderForm senderForm = (AbstractNotificationSenderForm) senderCanvasItem.getCanvas(); + notif.setConfiguration(senderForm.getConfiguration()); + notif.setExtraConfiguration(senderForm.getExtraConfiguration()); }
- private class ShowIfSenderFunction implements FormItemIfFunction { - private final String senderName; - - public ShowIfSenderFunction(String senderName) { - this.senderName = senderName; + private void switchToAlertSender(String newAlertSender) { + Canvas oldCanvas = senderCanvasItem.getCanvas(); + if (oldCanvas != null) { + oldCanvas.markForDestroy(); }
- public boolean execute(FormItem item, Object value, DynamicForm form) { - String selectedSenderString = form.getValue("notificationSender").toString(); - return senderName.equals(selectedSenderString); - } + // TODO: need to create different forms for different types of senders + SimpleNotificationSenderForm newCanvas = new SimpleNotificationSenderForm(extendLocatorId(newAlertSender)); + senderCanvasItem.setCanvas(newCanvas); + + markForRedraw(); } } diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/NotificationsAlertDefinitionForm.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/NotificationsAlertDefinitionForm.java index bc585ac..f707dc1 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/NotificationsAlertDefinitionForm.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/NotificationsAlertDefinitionForm.java @@ -237,7 +237,7 @@ public class NotificationsAlertDefinitionForm extends LocatableVLayout implement configField.setWidth("75%"); getListGrid().setFields(senderField, configField);
- getListGrid().addDoubleClickHandler(new DoubleClickHandler() { + setListGridDoubleClickHandler(new DoubleClickHandler() { @Override public void onDoubleClick(DoubleClickEvent event) { ListGrid listGrid = (ListGrid) event.getSource(); diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/SimpleNotificationSenderForm.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/SimpleNotificationSenderForm.java new file mode 100644 index 0000000..a70bd82 --- /dev/null +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/SimpleNotificationSenderForm.java @@ -0,0 +1,47 @@ +/* + * RHQ Management Platform + * Copyright (C) 2005-2010 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.alert.definitions; + +import com.smartgwt.client.widgets.Label; + +/** + * This notification form will be used for most alert senders since most alert senders + * only need to be given a simple set of configuration properties where the user + * provides values via the normal configuration editor. + * + * @author John Mazzitelli + */ +public class SimpleNotificationSenderForm extends AbstractNotificationSenderForm { + + public SimpleNotificationSenderForm(String locatorId) { + super(locatorId); + } + + @Override + protected void onInit() { + super.onInit(); + // TODO add config editor + addMember(new Label("simple form : " + getLocatorId())); + } +}
commit 7101d3d1535d107523615a2a7f7d4d56ec1f537e Author: John Mazzitelli mazz@redhat.com Date: Fri Oct 1 14:32:00 2010 -0400
provide a way to add a double-click handler to the Table API
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 c933047..f5c9a40 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 @@ -35,6 +35,8 @@ import com.smartgwt.client.widgets.Img; import com.smartgwt.client.widgets.Label; import com.smartgwt.client.widgets.events.ClickEvent; import com.smartgwt.client.widgets.events.ClickHandler; +import com.smartgwt.client.widgets.events.DoubleClickEvent; +import com.smartgwt.client.widgets.events.DoubleClickHandler; import com.smartgwt.client.widgets.form.DynamicForm; import com.smartgwt.client.widgets.form.fields.FormItem; import com.smartgwt.client.widgets.form.fields.SelectItem; @@ -122,6 +124,7 @@ public class Table extends LocatableHLayout {
;
+ private DoubleClickHandler doubleClickHandler; private List<TableActionInfo> tableActions = new ArrayList<TableActionInfo>(); private boolean tableActionDisableOverride = false; protected List<Canvas> extraWidgets = new ArrayList<Canvas>(); @@ -259,6 +262,15 @@ public class Table extends LocatableHLayout { // Now give subclasses a chance to configure the table configureTable();
+ listGrid.addDoubleClickHandler(new DoubleClickHandler() { + @Override + public void onDoubleClick(DoubleClickEvent event) { + if (doubleClickHandler != null && !getTableActionDisableOverride()) { + doubleClickHandler.onDoubleClick(event); + } + } + }); + setTableInfo(new Label("Total: " + listGrid.getTotalRows()));
// NOTE: It is essential that we wait to hide any excluded fields until after super.onDraw() is called, since @@ -480,6 +492,10 @@ public class Table extends LocatableHLayout { tableActions.add(info); }
+ public void setListGridDoubleClickHandler(DoubleClickHandler handler) { + doubleClickHandler = handler; + } + public void addExtraWidget(Canvas canvas) { this.extraWidgets.add(canvas); } @@ -502,6 +518,9 @@ public class Table extends LocatableHLayout { * buttons regardless of which rows are selected. This method let's * you set this override-disable flag. * + * Note: this also effects the double-click handler - if this disable override + * is on, the double-click handler is not called. + * * @param disabled if true, all table action buttons will be disabled * if false, table action buttons will be enabled based on their predefined * selection enablement rule.
commit ef62478885fcdd851184b31e9d5a94ebad5f7d29 Author: Ian Springer ian.springer@redhat.com Date: Fri Oct 1 14:51:33 2010 -0400
integrate gwt-log and convert over all System.out.println's to logging; add test config view (#TestConfig) for testing config editor
diff --git a/modules/enterprise/gui/coregui/pom.xml b/modules/enterprise/gui/coregui/pom.xml index c8dce21..21dd681 100644 --- a/modules/enterprise/gui/coregui/pom.xml +++ b/modules/enterprise/gui/coregui/pom.xml @@ -107,6 +107,12 @@ <version>1.0.0</version> </dependency>
+ <dependency> + <groupId>com.google.code.gwt-log</groupId> + <artifactId>gwt-log</artifactId> + <version>3.0.3</version> + </dependency> + <!-- for file uploads --> <dependency> <groupId>commons-fileupload</groupId> diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/CoreGUI.gwt.xml b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/CoreGUI.gwt.xml index 8db747c..ed2ce42 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/CoreGUI.gwt.xml +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/CoreGUI.gwt.xml @@ -1,5 +1,5 @@ -<!DOCTYPE module PUBLIC "-//Google Inc.//DTD Google Web Toolkit 1.6//EN" - "http://google-web-toolkit.googlecode.com/svn/releases/1.6/distro-source/core/src/gwt-module.dtd"> +<!DOCTYPE module PUBLIC "-//Google Inc.//DTD Google Web Toolkit 2.0//EN" + "http://google-web-toolkit.googlecode.com/svn/releases/2.0/distro-source/core/src/gwt-module.dtd">
<module>
@@ -11,20 +11,45 @@ <inherits name="com.smartgwt.tools.SmartGwtTools"/>
<inherits name='com.google.gwt.user.theme.standard.Standard'/> -<!-- - <inherits name="com.smartclient.theme.graphite.Graphite"/> ---> + <!-- + <inherits name="com.smartclient.theme.graphite.Graphite"/> + -->
<inherits name='ca.nanometrics.gflot.GFlot'/>
<!-- - <inherits name='com.google.gwt.widgetideas.WidgetIdeas'/> + <inherits name='com.google.gwt.widgetideas.WidgetIdeas'/> -->
-<!-- <generate-with class="org.rhq.core.rebind.RecordBuilderGenerator"> + <!-- ============================ gwt-log ============================= --> + + <!-- For development, a default of 'DEBUG' is recommended. --> + <inherits name="com.allen_sauer.gwt.log.gwt-log-DEBUG" /> + + <!-- For production, most teams prefer to set the default log level to 'OFF'. --> + <!--<inherits name="com.allen_sauer.gwt.log.gwt-log-OFF" />--> + + <!-- + Enable experimental WindowLogger, which logs messages to a separate + popup window. There are currently a couple of restrictions: + + 1. When Firefox is configured to open new Windows as new tabs, + WindowLogger does not work + 2. In hosted mode, the windows are not automatically closed, + although you can easily close them manually in the usual way + --> + <set-property name="log_WindowLogger" value="ENABLED" /> + + <!-- + You probably will want to disable the default `DivLogger` as well: + --> + <set-property name="log_DivLogger" value="DISABLED" /> + + <!-- + <generate-with class="org.rhq.core.rebind.RecordBuilderGenerator"> <when-type-assignable class="org.rhq.core.domain.util.Recordizable"/> - </generate-with>--> - + </generate-with> + -->
<replace-with class="org.rhq.enterprise.gui.coregui.client.components.upload.DynamicCallbackFormImpl"> <when-type-is class="org.rhq.enterprise.gui.coregui.client.components.upload.DynamicCallbackFormImpl"/> @@ -47,6 +72,7 @@ <entry-point class='org.rhq.enterprise.gui.coregui.client.CoreGUI'/> <entry-point class='org.rhq.enterprise.gui.coregui.client.SearchGUI'/>
+ <servlet path="/AlertGWTService" class="org.rhq.enterprise.gui.coregui.server.gwt.AlertGWTServiceImpl"/> <servlet path="/AlertDefinitionGWTService" class="org.rhq.enterprise.gui.coregui.server.gwt.AlertDefinitionGWTServiceImpl"/> <servlet path="/AuthorizationGWTService" class="org.rhq.enterprise.gui.coregui.server.gwt.AuthorizationGWTServiceImpl"/> diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/CoreGUI.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/CoreGUI.java index 34cf23e..e9b7788 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/CoreGUI.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/CoreGUI.java @@ -18,6 +18,7 @@ */ package org.rhq.enterprise.gui.coregui.client;
+import com.allen_sauer.gwt.log.client.Log; import com.google.gwt.core.client.EntryPoint; import com.google.gwt.core.client.GWT; import com.google.gwt.dom.client.Element; @@ -45,6 +46,7 @@ import org.rhq.enterprise.gui.coregui.client.inventory.resource.detail.ResourceT import org.rhq.enterprise.gui.coregui.client.menu.MenuBarView; import org.rhq.enterprise.gui.coregui.client.report.ReportTopView; import org.rhq.enterprise.gui.coregui.client.report.tag.TaggedView; +import org.rhq.enterprise.gui.coregui.client.test.TestConfigurationView; import org.rhq.enterprise.gui.coregui.client.util.ErrorHandler; import org.rhq.enterprise.gui.coregui.client.util.WidgetUtility; import org.rhq.enterprise.gui.coregui.client.util.message.MessageBar; @@ -84,7 +86,7 @@ public class CoreGUI implements EntryPoint, ValueChangeHandler<String> { public void onModuleLoad() { String hostPageBaseURL = GWT.getHostPageBaseURL(); if (hostPageBaseURL.indexOf("/coregui/") == -1) { - System.out.println("Suppressing load of CoreGUI module"); + Log.info("Suppressing load of CoreGUI module"); return; // suppress loading this module if not using the new GWT app }
@@ -165,7 +167,7 @@ public class CoreGUI implements EntryPoint, ValueChangeHandler<String> {
public void onValueChange(ValueChangeEvent<String> stringValueChangeEvent) { String event = URL.decodeComponent(stringValueChangeEvent.getValue()); - //System.out.println("Handling history event: " + event); + com.allen_sauer.gwt.log.client.Log.debug("Handling history event: " + event); currentPath = event;
currentViewPath = new ViewPath(event); @@ -208,6 +210,8 @@ public class CoreGUI implements EntryPoint, ValueChangeHandler<String> { canvas = new AlertsView("Alert"); } else if (breadcrumbName.equals(ReportTopView.VIEW_ID)) { canvas = new ReportTopView("Report"); + } else if (breadcrumbName.equals(TestConfigurationView.VIEW_ID)) { + canvas = new TestConfigurationView("TestConfig"); } else { canvas = null; } diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/DemoCanvas.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/DemoCanvas.java index bd0aabe..d252fb8 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/DemoCanvas.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/DemoCanvas.java @@ -89,7 +89,7 @@ public class DemoCanvas extends Canvas { configSelectMenu.addItemClickHandler(new ItemClickHandler() { public void onItemClick(ItemClickEvent itemClickEvent) { int x = configSelectMenu.getItemNum(itemClickEvent.getItem()); - System.out.println("Loading: " + x); + com.allen_sauer.gwt.log.client.Log.info("Loading: " + x); topTabSet.removeTab(configTab); switch (x) { case 0: diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/LoginView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/LoginView.java index 24ef812..3d79afd 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/LoginView.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/LoginView.java @@ -178,7 +178,7 @@ public class LoginView extends Canvas { ResourceTypeRepository.Cache.getInstance().getResourceTypes((Integer[]) null, EnumSet.allOf(ResourceTypeRepository.MetadataType.class), new ResourceTypeRepository.TypesLoadedCallback() { public void onTypesLoaded(Map<Integer, ResourceType> types) { - System.out.println("Preloaded [" + types.size() + "] resource types"); + com.allen_sauer.gwt.log.client.Log.info("Preloaded [" + types.size() + "] resource types"); } }); } diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/SearchGUI.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/SearchGUI.java index 2266993..55588e9 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/SearchGUI.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/SearchGUI.java @@ -41,7 +41,7 @@ public class SearchGUI implements EntryPoint {
public void onModuleLoad() { if (SearchBar.existsOnPage() == false) { - System.out.println("Suppressing load of SearchGUI module"); + com.allen_sauer.gwt.log.client.Log.info("Suppressing load of SearchGUI module"); return; }
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/UserSessionManager.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/UserSessionManager.java index 5219213..ecbd719 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/UserSessionManager.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/UserSessionManager.java @@ -22,6 +22,7 @@ */ package org.rhq.enterprise.gui.coregui.client;
+import com.allen_sauer.gwt.log.client.Log; import com.google.gwt.http.client.Request; import com.google.gwt.http.client.RequestBuilder; import com.google.gwt.http.client.RequestCallback; @@ -30,7 +31,6 @@ import com.google.gwt.http.client.Response; import com.google.gwt.user.client.Cookies; import com.google.gwt.user.client.Timer; import com.google.gwt.user.client.rpc.AsyncCallback; -import com.smartgwt.client.util.SC;
import org.rhq.core.domain.auth.Subject; import org.rhq.core.domain.criteria.SubjectCriteria; @@ -66,7 +66,7 @@ public class UserSessionManager { private static Timer sessionTimer = new Timer() { @Override public void run() { - System.out.println("Session Timer Expired"); + Log.info("Session timer expired."); new LoginView().showLoginDialog(); // log user out, show login dialog } }; @@ -88,7 +88,7 @@ public class UserSessionManager { try { b.setCallback(new RequestCallback() { public void onResponseReceived(final Request request, final Response response) { - System.out.println("response text = " + response.getText()); + com.allen_sauer.gwt.log.client.Log.info("response text = " + response.getText()); String sessionIdString = response.getText(); if (sessionIdString != null && sessionIdString.length() > 0) {
@@ -96,20 +96,20 @@ public class UserSessionManager { final int subjectId = Integer.parseInt(parts[0]); final String sessionId = parts[1]; // not null final long lastAccess = Long.parseLong(parts[2]); - System.out.println("sessionAccess-subjectId: " + subjectId); - System.out.println("sessionAccess-sessionId: " + sessionId); - System.out.println("sessionAccess-lastAccess: " + lastAccess); + com.allen_sauer.gwt.log.client.Log.info("sessionAccess-subjectId: " + subjectId); + com.allen_sauer.gwt.log.client.Log.info("sessionAccess-sessionId: " + sessionId); + com.allen_sauer.gwt.log.client.Log.info("sessionAccess-lastAccess: " + lastAccess);
String previousSessionId = getPreviousSessionId(); // may be null - System.out.println("sessionAccess-previousSessionId: " + previousSessionId); + com.allen_sauer.gwt.log.client.Log.info("sessionAccess-previousSessionId: " + previousSessionId); if (previousSessionId == null || previousSessionId.equals(sessionId) == false) {
// persist sessionId if different from previously saved sessionId - System.out.println("sessionAccess-savingSessionId: " + sessionId); + com.allen_sauer.gwt.log.client.Log.info("sessionAccess-savingSessionId: " + sessionId); saveSessionId(sessionId);
// new sessions get the full 29 minutes to expire - System.out.println("sessionAccess-schedulingSessionTimeout: " + SESSION_TIMEOUT); + com.allen_sauer.gwt.log.client.Log.info("sessionAccess-schedulingSessionTimeout: " + SESSION_TIMEOUT); sessionTimer.schedule(SESSION_TIMEOUT); } else {
@@ -124,7 +124,7 @@ public class UserSessionManager { expiryMillis = SESSION_TIMEOUT; // guarantees maximum is 29 minutes }
- System.out.println("sessionAccess-reschedulingSessionTimeout: " + expiryMillis); + com.allen_sauer.gwt.log.client.Log.info("sessionAccess-reschedulingSessionTimeout: " + expiryMillis); sessionTimer.schedule((int) expiryMillis); }
@@ -143,13 +143,13 @@ public class UserSessionManager { public void onFailure(Throwable caught) { CoreGUI.getErrorHandler().handleError( "UserSessionManager: Failed to load user's subject", caught); - System.out.println("Failed to load user's subject"); + com.allen_sauer.gwt.log.client.Log.info("Failed to load user's subject"); new LoginView().showLoginDialog(); }
public void onSuccess(PageList<Subject> result) { - System.out.println("Found subject"); Subject subject = result.get(0); + Log.debug("Found subject [" + subject + "]."); subject.setSessionId(Integer.valueOf(sessionId));
// reset the session subject to the latest, for wrapping in user preferences @@ -187,7 +187,7 @@ public class UserSessionManager {
@Override public void onFailure(Throwable caught) { - SC.say("Unable to determine login status, check server status"); + Log.error("Unable to determine login status - check Server status."); } }); } @@ -213,7 +213,7 @@ public class UserSessionManager {
// now continue with the rest of the login logic loggedIn = true; - System.out.println("Refreshing Session Timer"); + Log.info("Refreshing session timer..."); sessionTimer.schedule(millis); }
@@ -223,7 +223,7 @@ public class UserSessionManager { }
loggedIn = false; - System.out.println("Destroying Session Timer"); + Log.info("Destroying session timer..."); sessionTimer.cancel();
// log out the web session on the server-side in a delayed fashion, @@ -250,7 +250,7 @@ public class UserSessionManager { }
public static boolean isLoggedIn() { - //System.out.println("isLoggedIn = " + loggedIn); + Log.trace("isLoggedIn = " + loggedIn); return loggedIn; }
@@ -272,5 +272,4 @@ public class UserSessionManager { public static UserPreferences getUserPreferences() { return userPreferences; } - } diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/AlertDataSource.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/AlertDataSource.java index 61b58b7..a950c34 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/AlertDataSource.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/AlertDataSource.java @@ -153,7 +153,7 @@ public class AlertDataSource extends RPCDataSource<Alert> {
public void onSuccess(PageList<Alert> result) { long fetchTime = System.currentTimeMillis() - start; - System.out.println(result.size() + " alerts fetched in: " + fetchTime + "ms"); + com.allen_sauer.gwt.log.client.Log.info(result.size() + " alerts fetched in: " + fetchTime + "ms"); response.setData(buildRecords(result)); // For paging to work, we have to specify size of full result set. response.setTotalRows(result.getTotalSize()); @@ -284,7 +284,7 @@ public class AlertDataSource extends RPCDataSource<Alert> { CoreGUI.getMessageCenter().notify( new Message("Acknowledged [" + alertIds.length + "] alerts", Message.Severity.Info));
- System.out.println("Acknowledged Alerts with id's: " + Arrays.toString(alertIds) + "."); + com.allen_sauer.gwt.log.client.Log.info("Acknowledged Alerts with id's: " + Arrays.toString(alertIds) + "."); alertsView.refresh(); }
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/AlertPortletDataSource.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/AlertPortletDataSource.java index d21ab76..ad825a9 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/AlertPortletDataSource.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/AlertPortletDataSource.java @@ -96,7 +96,7 @@ public class AlertPortletDataSource extends AlertDataSource {
public void onSuccess(PageList<Alert> result) { long fetchTime = System.currentTimeMillis() - start; - System.out.println(result.size() + " alerts fetched in: " + fetchTime + "ms"); + com.allen_sauer.gwt.log.client.Log.info(result.size() + " alerts fetched in: " + fetchTime + "ms"); response.setData(buildRecords(result)); response.setTotalRows(result.size()); processResponse(request.getRequestId(), response); diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/BundleTopView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/BundleTopView.java index 7da68cd..fa823e3 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/BundleTopView.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/BundleTopView.java @@ -106,7 +106,7 @@ public class BundleTopView extends LocatableHLayout implements BookmarkableView if (viewPath.isEnd()) { if (currentNextPath == null && bundlesListView != null) { // refresh - System.out.println("Refreshing BundleTopView"); + com.allen_sauer.gwt.log.client.Log.info("Refreshing BundleTopView");
bundlesListView.refresh(); } else { diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/FullHTMLPane.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/FullHTMLPane.java index c90ca57..bc296cc 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/FullHTMLPane.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/FullHTMLPane.java @@ -33,7 +33,7 @@ public class FullHTMLPane extends HTMLPane {
public FullHTMLPane(String url) { this(); - //System.out.println("Creating IFrame pane with URL [" + url + "]..."); + com.allen_sauer.gwt.log.client.Log.debug("Creating IFrame pane with URL [" + url + "]..."); setContentsURL(url); } } diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/configuration/ConfigurationEditor.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/configuration/ConfigurationEditor.java index eb1e2d2..343a709 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/configuration/ConfigurationEditor.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/configuration/ConfigurationEditor.java @@ -241,7 +241,7 @@ public class ConfigurationEditor extends LocatableVLayout {
public void onSuccess(Configuration result) { configuration = result; - System.out.println("Config retreived in: " + (System.currentTimeMillis() - start)); + com.allen_sauer.gwt.log.client.Log.info("Config retreived in: " + (System.currentTimeMillis() - start)); reload(); } }); @@ -250,7 +250,7 @@ public class ConfigurationEditor extends LocatableVLayout { EnumSet.of(ResourceTypeRepository.MetadataType.resourceConfigurationDefinition), new ResourceTypeRepository.TypesLoadedCallback() { public void onTypesLoaded(Map<Integer, ResourceType> types) { - //System.out.println("ConfigDef retreived in: " + (System.currentTimeMillis() - start)); + com.allen_sauer.gwt.log.client.Log.debug("ConfigDef retreived in: " + (System.currentTimeMillis() - start)); definition = types.get(resourceTypeId).getResourceConfigurationDefinition(); if (definition == null) { loadingLabel.hide(); @@ -276,7 +276,7 @@ public class ConfigurationEditor extends LocatableVLayout { EnumSet.of(ResourceTypeRepository.MetadataType.pluginConfigurationDefinition), new ResourceTypeRepository.TypesLoadedCallback() { public void onTypesLoaded(Map<Integer, ResourceType> types) { - //System.out.println("ConfigDef retreived in: " + (System.currentTimeMillis() - start)); + com.allen_sauer.gwt.log.client.Log.debug("ConfigDef retreived in: " + (System.currentTimeMillis() - start)); definition = types.get(resourceTypeId).getPluginConfigurationDefinition(); if (definition == null) { showError("Connection settings are not supported by this Resource."); @@ -302,7 +302,7 @@ public class ConfigurationEditor extends LocatableVLayout {
if (definition.getConfigurationFormat() == ConfigurationFormat.RAW || definition.getConfigurationFormat() == ConfigurationFormat.STRUCTURED_AND_RAW) { - System.out.println("Loading files view..."); + com.allen_sauer.gwt.log.client.Log.info("Loading files view..."); Tab tab = new LocatableTab("Files", "Files"); tab.setPane(buildRawPane()); tabSet.addTab(tab); @@ -310,7 +310,7 @@ public class ConfigurationEditor extends LocatableVLayout {
if (definition.getConfigurationFormat() == ConfigurationFormat.STRUCTURED || definition.getConfigurationFormat() == ConfigurationFormat.STRUCTURED_AND_RAW) { - System.out.println("Loading properties view..."); + com.allen_sauer.gwt.log.client.Log.info("Loading properties view..."); Tab tab = new LocatableTab("Properties", "Properties"); tab.setPane(buildStructuredPane()); tabSet.addTab(tab); @@ -358,10 +358,10 @@ public class ConfigurationEditor extends LocatableVLayout { fileTree.addSelectionChangedHandler(new SelectionChangedHandler() { public void onSelectionChanged(SelectionEvent selectionEvent) { String path = selectionEvent.getRecord().getAttribute("name"); - System.out.println("Getting Path: " + path); + com.allen_sauer.gwt.log.client.Log.info("Getting Path: " + path); rawEditor.setValue(filesMap.get(path).getContents()); rawEditor.redraw(); - System.out.println("Data: " + filesMap.get(path).getContents()); + com.allen_sauer.gwt.log.client.Log.info("Data: " + filesMap.get(path).getContents()); } });
@@ -391,7 +391,7 @@ public class ConfigurationEditor extends LocatableVLayout { }
for (PropertyGroupDefinition definition : definitions) { - // System.out.println("building: " + definition.getDisplayName()); + // com.allen_sauer.gwt.log.client.Log.info("building: " + definition.getDisplayName()); sectionStack.addSection(buildGroupSection(layout.extendLocatorId(definition.getName()), definition)); }
@@ -656,7 +656,7 @@ public class ConfigurationEditor extends LocatableVLayout { editField.setCanHide(false); editField.addRecordClickHandler(new RecordClickHandler() { public void onRecordClick(RecordClickEvent recordClickEvent) { - System.out.println("You want to edit: " + recordClickEvent.getRecord()); + com.allen_sauer.gwt.log.client.Log.info("You want to edit: " + recordClickEvent.getRecord()); displayMapEditor(locatorId + "_MapEdit", summaryTable, recordClickEvent.getRecord(), propertyDefinition, propertyList, (PropertyMap) recordClickEvent.getRecord().getAttributeAsObject( "_RHQ_PROPERTY")); @@ -678,7 +678,7 @@ public class ConfigurationEditor extends LocatableVLayout {
removeField.addRecordClickHandler(new RecordClickHandler() { public void onRecordClick(final RecordClickEvent recordClickEvent) { - System.out.println("You want to delete: " + recordClickEvent.getRecordNum()); + com.allen_sauer.gwt.log.client.Log.info("You want to delete: " + recordClickEvent.getRecordNum()); SC.confirm("Are you sure you want to delete this row?", new BooleanCallback() { public void execute(Boolean aBoolean) { if (aBoolean) { @@ -865,7 +865,7 @@ public class ConfigurationEditor extends LocatableVLayout { Click handlers seem to be turned off for disabled fields... need an alternative valueItem.addClickHandler(new com.smartgwt.client.widgets.form.fields.events.ClickHandler() { public void onClick(ClickEvent clickEvent) { - System.out.println("Click in value field"); + com.allen_sauer.gwt.log.client.Log.info("Click in value field"); clickEvent.getItem().setDisabled(false); unsetItem.setValue(false);
@@ -1000,10 +1000,10 @@ public class ConfigurationEditor extends LocatableVLayout { list.add(finalMap); ListGridRecord record = buildSummaryRecord(definitions, finalMap);
- System.out.println("here"); + com.allen_sauer.gwt.log.client.Log.info("here"); try { summaryTable.addData(record); - System.out.println("there"); + com.allen_sauer.gwt.log.client.Log.info("there"); } catch (Exception e) { e.printStackTrace(); } diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/configuration/ListGridConfigurationEditor.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/configuration/ListGridConfigurationEditor.java index 9e0e480..7136199 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/configuration/ListGridConfigurationEditor.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/configuration/ListGridConfigurationEditor.java @@ -73,7 +73,7 @@ public class ListGridConfigurationEditor extends VLayout {
public void onSuccess(Configuration result) { configuration = result; - System.out.println("Got config"); + com.allen_sauer.gwt.log.client.Log.info("Got config"); reload(); } }); @@ -85,7 +85,7 @@ public class ListGridConfigurationEditor extends VLayout {
public void onSuccess(ConfigurationDefinition result) { definition = result; - System.out.println("Got def"); + com.allen_sauer.gwt.log.client.Log.info("Got def"); reload(); }
@@ -108,7 +108,7 @@ public class ListGridConfigurationEditor extends VLayout { sectionStack.setOverflow(Overflow.VISIBLE);
for (PropertyGroupDefinition definition : definitions) { - System.out.println("building: " + definition.getDisplayName()); + com.allen_sauer.gwt.log.client.Log.info("building: " + definition.getDisplayName()); sectionStack.addSection(buildGroupSection(definition)); }
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/DashboardView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/DashboardView.java index f4b3cad..ca5a929 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/DashboardView.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/DashboardView.java @@ -198,7 +198,7 @@ public class DashboardView extends LocatableVLayout { picker.addChangedHandler(new ChangedHandler() { public void onChanged(ChangedEvent changedEvent) { Object v = changedEvent.getValue(); - System.out.println("color chagned to " + v); + com.allen_sauer.gwt.log.client.Log.info("color chagned to " + v); setBackgroundColor(String.valueOf(v)); storedDashboard.getConfiguration().put(new PropertySimple(Dashboard.CFG_BACKGROUND, String.valueOf(v))); save(); diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/DashboardsView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/DashboardsView.java index 7e0fb8e..422c244 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/DashboardsView.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/DashboardsView.java @@ -314,7 +314,7 @@ public class DashboardsView extends LocatableVLayout implements BookmarkableView } } } else { - System.out.println("WARN: While rendering DashboardsView tabSet is null."); + com.allen_sauer.gwt.log.client.Log.info("WARN: While rendering DashboardsView tabSet is null."); } } } diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/PortalLayout.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/PortalLayout.java index 8a3d355..aad543c 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/PortalLayout.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/PortalLayout.java @@ -81,7 +81,7 @@ public class PortalLayout extends LocatableHLayout { colNum++; } save(); - System.out.println("Rearranged column indexes"); + com.allen_sauer.gwt.log.client.Log.info("Rearranged column indexes"); } }); } diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/AbstractMeasurementDataTraitDataSource.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/AbstractMeasurementDataTraitDataSource.java index a21e4f5..b30714f 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/AbstractMeasurementDataTraitDataSource.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/AbstractMeasurementDataTraitDataSource.java @@ -96,7 +96,7 @@ public abstract class AbstractMeasurementDataTraitDataSource extends RPCDataSour
public void onSuccess(PageList<MeasurementDataTrait> result) { long fetchDuration = System.currentTimeMillis() - startTime; - System.out.println(result.size() + " traits fetched in: " + fetchDuration + "ms"); + com.allen_sauer.gwt.log.client.Log.info(result.size() + " traits fetched in: " + fetchDuration + "ms");
response.setData(buildRecords(result)); // For paging to work, we have to specify size of full result set. diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/AbstractMeasurementScheduleDataSource.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/AbstractMeasurementScheduleDataSource.java index 08f3473..e1181ab 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/AbstractMeasurementScheduleDataSource.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/AbstractMeasurementScheduleDataSource.java @@ -105,7 +105,7 @@ public abstract class AbstractMeasurementScheduleDataSource extends RPCDataSourc
public void onSuccess(PageList<MeasurementSchedule> result) { long fetchDuration = System.currentTimeMillis() - startTime; - System.out.println(result.size() + " measurement schedules fetched in: " + fetchDuration + "ms"); + com.allen_sauer.gwt.log.client.Log.info(result.size() + " measurement schedules fetched in: " + fetchDuration + "ms");
response.setData(buildRecords(result)); // For paging to work, we have to specify size of full result set. diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/ResourceGroupTreeView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/ResourceGroupTreeView.java index 6c9127b..9e2442b 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/ResourceGroupTreeView.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/ResourceGroupTreeView.java @@ -110,7 +110,7 @@ public class ResourceGroupTreeView extends LocatableVLayout implements Bookmarka public void onSelectionChanged(SelectionEvent selectionEvent) { if (selectionEvent.getState()) { Record selectedNode = selectionEvent.getRecord(); - System.out.println("Node selected in tree: " + selectedNode); + com.allen_sauer.gwt.log.client.Log.info("Node selected in tree: " + selectedNode); ResourceType type = (ResourceType) selectedNode.getAttributeAsObject("resourceType"); if (type != null) { // It's a cluster group node, not a subcategory node or an autoTypeGroup node. @@ -118,14 +118,14 @@ public class ResourceGroupTreeView extends LocatableVLayout implements Bookmarka if (key == null) { // The root group was selected. String groupId = selectedNode.getAttribute("id"); - //System.out.println("Selecting group [" + groupId + "]..."); + com.allen_sauer.gwt.log.client.Log.debug("Selecting group [" + groupId + "]..."); String viewPath = ResourceGroupTopView.VIEW_ID + "/" + groupId; String currentViewPath = History.getToken(); if (!currentViewPath.startsWith(viewPath)) { CoreGUI.goToView(viewPath); } } else { - //System.out.println("Selecting cluster group [" + key + "]..."); + com.allen_sauer.gwt.log.client.Log.debug("Selecting cluster group [" + key + "]..."); selectClusterGroup(key); } } diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/monitoring/schedules/SchedulesDataSource.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/monitoring/schedules/SchedulesDataSource.java index ccf8ee3..7bf4903 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/monitoring/schedules/SchedulesDataSource.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/monitoring/schedules/SchedulesDataSource.java @@ -65,19 +65,21 @@ public class SchedulesDataSource extends AbstractMeasurementScheduleDataSource {
@Override protected void enableSchedules(AbstractMeasurementScheduleListView measurementScheduleListView, - int[] measurementDefinitionIds, final List<String> measurementDefinitionDisplayNames) { - this.measurementService.enableSchedulesForCompatibleGroup(this.resourceGroupId, measurementDefinitionIds, + final int[] measurementDefinitionIds, final List<String> measurementDefinitionDisplayNames) { + final String s = (measurementDefinitionIds.length > 1) ? "s" : ""; + this.measurementService.enableSchedulesForCompatibleGroup(this.resourceGroupId, measurementDefinitionIds, new AsyncCallback<Void>() { @Override public void onFailure(Throwable throwable) { - CoreGUI.getErrorHandler().handleError("Failed to enable collection of metrics " + CoreGUI.getErrorHandler().handleError("Failed to enable collection of metric" + s + " " + measurementDefinitionDisplayNames + " for Resource group with id [" + resourceGroupId + "].", throwable); }
@Override public void onSuccess(Void aVoid) { - CoreGUI.getMessageCenter().notify(new Message("Enabled collection of metrics " + CoreGUI.getMessageCenter().notify(new Message("Enabled collection of selected metric" + s + ".", + "Enabled collection of metric" + s + " " + measurementDefinitionDisplayNames + " for Resource group with id [" + resourceGroupId + "].", Message.Severity.Info));
@@ -87,18 +89,20 @@ public class SchedulesDataSource extends AbstractMeasurementScheduleDataSource {
@Override protected void disableSchedules(AbstractMeasurementScheduleListView measurementScheduleListView, int[] measurementDefinitionIds, final List<String> measurementDefinitionDisplayNames) { - this.measurementService.disableSchedulesForCompatibleGroup(this.resourceGroupId, measurementDefinitionIds, + final String s = (measurementDefinitionIds.length > 1) ? "s" : ""; + this.measurementService.disableSchedulesForCompatibleGroup(this.resourceGroupId, measurementDefinitionIds, new AsyncCallback<Void>() { @Override public void onFailure(Throwable throwable) { - CoreGUI.getErrorHandler().handleError("Failed to disable collection of metrics " + CoreGUI.getErrorHandler().handleError("Failed to disable collection of metric" + s + " " + measurementDefinitionDisplayNames + " for Resource group with id [" + resourceGroupId + "].", throwable); }
@Override public void onSuccess(Void aVoid) { - CoreGUI.getMessageCenter().notify(new Message("Disabled collection of metrics " + CoreGUI.getMessageCenter().notify(new Message("Disabled collection of selected metric" + s + ".", + "Disabled collection of metric" + s + " " + measurementDefinitionDisplayNames + " for Resource group with id [" + resourceGroupId + "].", Message.Severity.Info));
@@ -109,19 +113,21 @@ public class SchedulesDataSource extends AbstractMeasurementScheduleDataSource { @Override protected void updateSchedules(AbstractMeasurementScheduleListView measurementScheduleListView, int[] measurementDefinitionIds, final List<String> measurementDefinitionDisplayNames, final long collectionInterval) { + final String s = (measurementDefinitionIds.length > 1) ? "s" : ""; this.measurementService.updateSchedulesForCompatibleGroup(this.resourceGroupId, measurementDefinitionIds, collectionInterval, new AsyncCallback<Void>() { @Override public void onFailure(Throwable throwable) { CoreGUI.getErrorHandler().handleError("Failed to set collection interval to " + (collectionInterval / 1000) - + " seconds for metrics " + measurementDefinitionDisplayNames + " for Resource group with id [" + + " seconds for metric" + s + " " + measurementDefinitionDisplayNames + " for Resource group with id [" + resourceGroupId + "].", throwable); }
@Override public void onSuccess(Void aVoid) { - CoreGUI.getMessageCenter().notify(new Message("Collection interval for metrics " + CoreGUI.getMessageCenter().notify(new Message("Updated collection intervals of selected metric" + s + ".", + "Collection interval for metric" + s + " " + measurementDefinitionDisplayNames + " for Resource group with id [" + resourceGroupId + "] set to " + (collectionInterval / 1000) + " seconds.", Message.Severity.Info));
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/ResourceSearchView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/ResourceSearchView.java index e1bed72..6382fcb 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/ResourceSearchView.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/ResourceSearchView.java @@ -165,7 +165,7 @@ public class ResourceSearchView extends Table {
long start = System.currentTimeMillis(); getListGrid().fetchData(c); - System.out.println("Loaded in: " + (System.currentTimeMillis() - start)); + com.allen_sauer.gwt.log.client.Log.info("Loaded in: " + (System.currentTimeMillis() - start)); } } });*/ diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/NewResourceTreeDataSource.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/NewResourceTreeDataSource.java index bccf8c5..35eb2d6 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/NewResourceTreeDataSource.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/NewResourceTreeDataSource.java @@ -133,12 +133,12 @@ public class NewResourceTreeDataSource extends DataSource { ResourceCriteria criteria = new ResourceCriteria();
if (p == null) { - System.out.println("DataSourceTree: Loading initial data"); + com.allen_sauer.gwt.log.client.Log.info("DataSourceTree: Loading initial data");
criteria.addFilterId(rootId);
} else { - System.out.println("DataSourceTree: Loading " + p); + com.allen_sauer.gwt.log.client.Log.info("DataSourceTree: Loading " + p);
criteria.addFilterParentResourceId(Integer.parseInt(p)); } @@ -319,7 +319,7 @@ public class NewResourceTreeDataSource extends DataSource { String parentId = resource.getParentResource() == null ? null : (resource.getParentResource().getId() + "_" + resource.getResourceType().getName());
- // System.out.println(id + " / " + parentId); + // com.allen_sauer.gwt.log.client.Log.info(id + " / " + parentId);
setID(id); setParentID(parentId); diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/NewResourceTreeView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/NewResourceTreeView.java index bad1ada..da08c04 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/NewResourceTreeView.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/NewResourceTreeView.java @@ -124,7 +124,7 @@ public class NewResourceTreeView extends LocatableVLayout { if (treeGrid.getSelectedRecord() instanceof ResourceTreeDatasource.ResourceTreeNode) { ResourceTreeDatasource.ResourceTreeNode node = (ResourceTreeDatasource.ResourceTreeNode) treeGrid .getSelectedRecord(); - System.out.println("Resource selected in tree: " + node.getResource()); + com.allen_sauer.gwt.log.client.Log.info("Resource selected in tree: " + node.getResource());
String newToken = "Resource/" + node.getResource().getId(); String currentToken = History.getToken(); diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/ResourceTreeDatasource.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/ResourceTreeDatasource.java index 1c73198..d577c4d 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/ResourceTreeDatasource.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/ResourceTreeDatasource.java @@ -107,7 +107,6 @@ public class ResourceTreeDatasource extends DataSource { case UPDATE: //executeAdd(lstRec, false); break; - default: break; } @@ -119,12 +118,12 @@ public class ResourceTreeDatasource extends DataSource { //final long start = System.currentTimeMillis();
String parentResourceId = request.getCriteria().getAttribute("parentId"); - // System.out.println("All attributes: " + Arrays.toString(request.getCriteria().getAttributes())); + // com.allen_sauer.gwt.log.client.Log.info("All attributes: " + Arrays.toString(request.getCriteria().getAttributes()));
ResourceCriteria criteria = new ResourceCriteria();
if (parentResourceId == null) { - System.out.println("ResourceTreeDatasource: Loading initial data..."); + com.allen_sauer.gwt.log.client.Log.info("ResourceTreeDatasource: Loading initial data...");
// criteria.addFilterId(rootId);
@@ -133,7 +132,7 @@ public class ResourceTreeDatasource extends DataSource { return;
} else { - System.out.println("ResourceTreeDatasource: Loading Resource [" + parentResourceId + "]..."); + com.allen_sauer.gwt.log.client.Log.info("ResourceTreeDatasource: Loading Resource [" + parentResourceId + "]...");
criteria.addFilterParentResourceId(Integer.parseInt(parentResourceId)); } @@ -205,14 +204,14 @@ public class ResourceTreeDatasource extends DataSource { Resource parentResource = resource.getParentResource(); ResourceSubCategory subcategory = type.getSubCategory(); if (subcategory != null) { - //System.out.println("Processing " + subcategory + "..."); + com.allen_sauer.gwt.log.client.Log.debug("Processing " + subcategory + "..."); do { String subcategoryNodeId = SubCategoryTreeNode.idOf(subcategory, parentResource); if (!subcategoryNodes.containsKey(subcategoryNodeId)) { SubCategoryTreeNode subcategoryNode = new SubCategoryTreeNode(subcategory, parentResource); subcategoryNodes.put(subcategoryNode.getID(), subcategoryNode); - //System.out.println("Adding " + subcategoryNode + " to tree..."); + com.allen_sauer.gwt.log.client.Log.debug("Adding " + subcategoryNode + " to tree..."); updatedNodes.add(subcategoryNode); } } while ((subcategory = subcategory.getParentSubCategory()) != null); @@ -221,7 +220,7 @@ public class ResourceTreeDatasource extends DataSource { if (!type.isSingleton()) { AutoGroupTreeNode autogroupNode = new AutoGroupTreeNode(resource); autogroupNodes.put(autogroupNodeId, autogroupNode); - //System.out.println("Adding " + autogroupNode + " to tree..."); + com.allen_sauer.gwt.log.client.Log.debug("Adding " + autogroupNode + " to tree..."); updatedNodes.add(autogroupNode); } } diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/ResourceTreeView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/ResourceTreeView.java index 4cea21b..c06c636 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/ResourceTreeView.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/ResourceTreeView.java @@ -159,7 +159,7 @@ public class ResourceTreeView extends LocatableVLayout { treeGrid.deselectAllRecords(); } } else if (selectedRecord instanceof AutoGroupTreeNode) { - System.out.println("AutoGroup Node selected in tree: " + selectedRecord); + com.allen_sauer.gwt.log.client.Log.info("AutoGroup Node selected in tree: " + selectedRecord);
AutoGroupTreeNode agNode = (AutoGroupTreeNode) selectedRecord; selectedNodeId = agNode.getID(); @@ -173,7 +173,7 @@ public class ResourceTreeView extends LocatableVLayout { } }); } else { - System.out.println("Unhandled Node selected in tree: " + selectedRecord); + com.allen_sauer.gwt.log.client.Log.info("Unhandled Node selected in tree: " + selectedRecord); } } } @@ -628,7 +628,6 @@ public class ResourceTreeView extends LocatableVLayout { }
if (!root.equals(ResourceTreeView.this.rootResource)) { - if (treeGrid != null) { treeGrid.destroy(); } diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/inventory/PluginConfigurationEditView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/inventory/PluginConfigurationEditView.java index 4556da0..116e1ad 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/inventory/PluginConfigurationEditView.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/inventory/PluginConfigurationEditView.java @@ -118,8 +118,7 @@ public class PluginConfigurationEditView extends LocatableVLayout implements Pro public void onSuccess(PluginConfigurationUpdate result) { CoreGUI.getMessageCenter().notify( new Message("Connection settings updated.", - "Connection settings updated for Resource [" + resource.getName() + "].", - Message.Severity.Info)); + "Connection settings updated for Resource [" + resource.getName() + "].")); reloadConfiguration(); } }); diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/operation/create/OperationCreateWizard.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/operation/create/OperationCreateWizard.java index 5d0be9d..e76e2ca 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/operation/create/OperationCreateWizard.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/operation/create/OperationCreateWizard.java @@ -113,7 +113,7 @@ public class OperationCreateWizard extends AbstractWizard { }
private void execute() { - System.out.println("TODO Executed operation!!"); + com.allen_sauer.gwt.log.client.Log.info("TODO Executed operation!!");
OperationGWTServiceAsync operationService = GWTServiceLookup.getOperationService();
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/type/ResourceTypeRepository.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/type/ResourceTypeRepository.java index cfa51bf..1c01176 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/type/ResourceTypeRepository.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/type/ResourceTypeRepository.java @@ -109,7 +109,7 @@ public class ResourceTypeRepository { } });
- // System.out.println("Loaded types from cache in " + (System.currentTimeMillis() - start)); + // com.allen_sauer.gwt.log.client.Log.info("Loaded types from cache in " + (System.currentTimeMillis() - start)); }
public void loadResourceTypes(final PageList<ResourceGroup> groups, final ResourceTypeLoadedInGroupCallback callback) { @@ -142,7 +142,7 @@ public class ResourceTypeRepository { } });
- // System.out.println("Loaded types from cache in " + (System.currentTimeMillis() - start)); + // com.allen_sauer.gwt.log.client.Log.info("Loaded types from cache in " + (System.currentTimeMillis() - start)); }
public void getResourceTypes(Integer[] resourceTypeIds, final TypesLoadedCallback callback) { @@ -234,7 +234,7 @@ public class ResourceTypeRepository {
criteria.setPageControl(PageControl.getUnlimitedInstance());
- System.out.println("Loading " + typesNeeded.size() + com.allen_sauer.gwt.log.client.Log.info("Loading " + typesNeeded.size() + ((metadataTypes != null) ? (" types: " + metadataTypes) : ""));
resourceTypeService.findResourceTypesByCriteria(criteria, new AsyncCallback<PageList<ResourceType>>() { @@ -313,7 +313,7 @@ public class ResourceTypeRepository { public void preloadAll() { getResourceTypes((Integer[]) null, EnumSet.allOf(MetadataType.class), new TypesLoadedCallback() { public void onTypesLoaded(Map<Integer, ResourceType> types) { - System.out.println("Preloaded [" + types.size() + "] Resource types."); + com.allen_sauer.gwt.log.client.Log.info("Preloaded [" + types.size() + "] Resource types."); } }); } diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/menu/DropDownMenuBarView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/menu/DropDownMenuBarView.java index da5b92e..f6e1730 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/menu/DropDownMenuBarView.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/menu/DropDownMenuBarView.java @@ -119,7 +119,7 @@ public class DropDownMenuBarView extends LocatableVLayout { resourcesMenu.addItem(favoritesMenu); menu.addClickHandler(new ClickHandler() { public void onClick(ClickEvent clickEvent) { - System.out.println("over here"); + com.allen_sauer.gwt.log.client.Log.info("over here"); favoritesMenu.refresh(); } }); diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/menu/SearchBarPane.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/menu/SearchBarPane.java index 657c4d3..5e6d943 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/menu/SearchBarPane.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/menu/SearchBarPane.java @@ -165,7 +165,7 @@ public class SearchBarPane extends LocatableHLayout {
comboBox.addChangedHandler(new ChangedHandler() { public void onChanged(ChangedEvent changedEvent) { - //System.out.println("ChangedEvent: " + changedEvent.getValue()); + com.allen_sauer.gwt.log.client.Log.debug("ChangedEvent: " + changedEvent.getValue());
Object intermediate = changedEvent.getValue(); if (!(intermediate instanceof Integer)) { diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/search/SearchBar.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/search/SearchBar.java index 47dcded..42c830b 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/search/SearchBar.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/search/SearchBar.java @@ -140,7 +140,7 @@ public class SearchBar extends SimplePanel { }
public SearchBar() { - System.out.println("Loading SearchBar..."); + com.allen_sauer.gwt.log.client.Log.info("Loading SearchBar...");
// in the future, will be instantiated directly from a higher-level widget if (existsOnPage()) { diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/test/TestConfigurationFactory.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/test/TestConfigurationFactory.java new file mode 100644 index 0000000..bfcb322 --- /dev/null +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/test/TestConfigurationFactory.java @@ -0,0 +1,293 @@ +/* + * RHQ Management Platform + * Copyright 2010, Red Hat Middleware LLC, and individual contributors + * as indicated by the @author tags. See the copyright.txt file in the + * distribution for a full listing of individual contributors. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ +package org.rhq.enterprise.gui.coregui.client.test; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Map; + +import org.rhq.core.domain.configuration.Configuration; +import org.rhq.core.domain.configuration.PropertyList; +import org.rhq.core.domain.configuration.PropertyMap; +import org.rhq.core.domain.configuration.PropertySimple; +import org.rhq.core.domain.configuration.definition.ConfigurationDefinition; +import org.rhq.core.domain.configuration.definition.PropertyDefinition; +import org.rhq.core.domain.configuration.definition.PropertyDefinitionEnumeration; +import org.rhq.core.domain.configuration.definition.PropertyDefinitionList; +import org.rhq.core.domain.configuration.definition.PropertyDefinitionMap; +import org.rhq.core.domain.configuration.definition.PropertyDefinitionSimple; +import org.rhq.core.domain.configuration.definition.PropertyGroupDefinition; +import org.rhq.core.domain.configuration.definition.PropertySimpleType; + +/** + * A utility class that provides methods for creating a test {@link ConfigurationDefinition} and a + * {@link Configuration} that conforms to that definition. + * + * @author Ian Springer + */ +public abstract class TestConfigurationFactory { + public static ConfigurationDefinition createConfigurationDefinition() { + ConfigurationDefinition configurationDefinition = new ConfigurationDefinition("TestConfig", "a test config"); + Map<String, PropertyDefinition> propertyDefinitions = new HashMap<String, PropertyDefinition>(); + configurationDefinition.setPropertyDefinitions(propertyDefinitions); + + PropertyDefinitionSimple simplePropDef; + + simplePropDef = createStringPropDef1(); + propertyDefinitions.put(simplePropDef.getName(), simplePropDef); + + simplePropDef = createStringPropDef2(); + propertyDefinitions.put(simplePropDef.getName(), simplePropDef); + + simplePropDef = new PropertyDefinitionSimple("LongString", "a Long String simple prop", false, + PropertySimpleType.LONG_STRING); + simplePropDef.setDisplayName(simplePropDef.getName()); + propertyDefinitions.put(simplePropDef.getName(), simplePropDef); + + simplePropDef = new PropertyDefinitionSimple("Password", "a Password simple prop", false, + PropertySimpleType.PASSWORD); + simplePropDef.setDisplayName(simplePropDef.getName()); + propertyDefinitions.put(simplePropDef.getName(), simplePropDef); + + simplePropDef = new PropertyDefinitionSimple("Boolean", "a required Boolean simple prop", true, + PropertySimpleType.BOOLEAN); + simplePropDef.setDisplayName(simplePropDef.getName()); + propertyDefinitions.put(simplePropDef.getName(), simplePropDef); + simplePropDef.setRequired(true); + + simplePropDef = createIntegerPropDef(); + propertyDefinitions.put(simplePropDef.getName(), simplePropDef); + + simplePropDef = new PropertyDefinitionSimple("Float", "a Float simple prop", false, PropertySimpleType.FLOAT); + simplePropDef.setDisplayName(simplePropDef.getName()); + propertyDefinitions.put(simplePropDef.getName(), simplePropDef); + + simplePropDef = new PropertyDefinitionSimple("StringEnum1", + "a String enum prop with <=5 items - should be rendered as radio buttons", false, + PropertySimpleType.STRING); + simplePropDef.setDisplayName(simplePropDef.getName()); + ArrayList<PropertyDefinitionEnumeration> propDefEnums = new ArrayList<PropertyDefinitionEnumeration>(); + propDefEnums.add(new PropertyDefinitionEnumeration("NY", "NY")); + propDefEnums.add(new PropertyDefinitionEnumeration("NJ", "NJ", true)); + propDefEnums.add(new PropertyDefinitionEnumeration("PA", "PA")); + simplePropDef.setEnumeratedValues(propDefEnums, false); + propertyDefinitions.put(simplePropDef.getName(), simplePropDef); + + simplePropDef = new PropertyDefinitionSimple("StringEnum2", + "a String enum prop with >5 items - should be rendered as a popup menu", false, PropertySimpleType.STRING); + simplePropDef.setDisplayName(simplePropDef.getName()); + propDefEnums = new ArrayList<PropertyDefinitionEnumeration>(); + propDefEnums.add(new PropertyDefinitionEnumeration("red", "red")); + propDefEnums.add(new PropertyDefinitionEnumeration("orange", "orange", true)); + propDefEnums.add(new PropertyDefinitionEnumeration("yellow", "yellow")); + propDefEnums.add(new PropertyDefinitionEnumeration("green", "green")); + propDefEnums.add(new PropertyDefinitionEnumeration("blue", "blue")); + propDefEnums.add(new PropertyDefinitionEnumeration("purple", "purple")); + simplePropDef.setEnumeratedValues(propDefEnums, false); + propertyDefinitions.put(simplePropDef.getName(), simplePropDef); + + PropertyDefinitionMap mapPropDef = new PropertyDefinitionMap("MapOfSimples", "a map of simples", false); + mapPropDef.put(createStringPropDef1()); + mapPropDef.put(createStringPropDef2()); + mapPropDef.put(createIntegerPropDef()); + mapPropDef.setDisplayName(mapPropDef.getName()); + propertyDefinitions.put(mapPropDef.getName(), mapPropDef); + + PropertyDefinitionMap openMapPropDef = new PropertyDefinitionMap("OpenMapOfSimples", "an open map of simples", + false); + openMapPropDef.setDisplayName(openMapPropDef.getName()); + propertyDefinitions.put(openMapPropDef.getName(), openMapPropDef); + + PropertyDefinitionMap readOnlyOpenMapPropDef = new PropertyDefinitionMap("ReadOnlyOpenMapOfSimples", + "a read-only open map of simples", false); + readOnlyOpenMapPropDef.setDisplayName(readOnlyOpenMapPropDef.getName()); + readOnlyOpenMapPropDef.setReadOnly(true); + propertyDefinitions.put(readOnlyOpenMapPropDef.getName(), readOnlyOpenMapPropDef); + + PropertyDefinitionList listOfSimplesPropDef = new PropertyDefinitionList("ListOfStrings", + "another list of Strings", true, new PropertyDefinitionSimple("note", "a note", false, + PropertySimpleType.STRING)); + listOfSimplesPropDef.setDisplayName(listOfSimplesPropDef.getName()); + propertyDefinitions.put(listOfSimplesPropDef.getName(), listOfSimplesPropDef); + + PropertyDefinitionMap mapInListPropDef = + new PropertyDefinitionMap("MapOfSimplesInList", "a map of simples in a list", false); + mapInListPropDef.put(createStringPropDef1()); + mapInListPropDef.put(createStringPropDef2()); + mapInListPropDef.put(createIntegerPropDef()); + mapInListPropDef.setDisplayName(mapInListPropDef.getName()); + + PropertyDefinitionList listPropDef = new PropertyDefinitionList("ListOfMaps", "a list of maps", true, + mapInListPropDef); + listPropDef.setDisplayName(listPropDef.getName()); + propertyDefinitions.put(listPropDef.getName(), listPropDef); + + PropertyDefinitionMap mapInReadOnlyListPropDef = + new PropertyDefinitionMap("MapOfSimplesInReadOnlyList", "a map of simples in a list", false); + mapInReadOnlyListPropDef.put(createStringPropDef1()); + mapInReadOnlyListPropDef.put(createStringPropDef2()); + mapInReadOnlyListPropDef.put(createIntegerPropDef()); + mapInReadOnlyListPropDef.setDisplayName(mapInReadOnlyListPropDef.getName()); + + PropertyDefinitionList readOnlyListPropDef = new PropertyDefinitionList("ReadOnlyListOfMaps", + "a read-only list of maps", true, mapInReadOnlyListPropDef); + readOnlyListPropDef.setDisplayName(readOnlyListPropDef.getName()); + readOnlyListPropDef.setReadOnly(true); + propertyDefinitions.put(readOnlyListPropDef.getName(), readOnlyListPropDef); + + PropertyGroupDefinition propertyGroupDefinition = new PropertyGroupDefinition("myGroup"); + propertyGroupDefinition.setDisplayName(propertyGroupDefinition.getName()); + propertyGroupDefinition.setDescription("this is an example group"); + + PropertyDefinitionSimple myString = new PropertyDefinitionSimple("myString1", "my little string", true, + PropertySimpleType.STRING); + myString.setDisplayName(myString.getName()); + myString.setSummary(true); + propertyDefinitions.put(myString.getName(), myString); + myString.setPropertyGroupDefinition(propertyGroupDefinition); + + PropertyDefinitionSimple myString2 = new PropertyDefinitionSimple("myString2", "my other little string", true, + PropertySimpleType.STRING); + myString2.setDisplayName(myString2.getName()); + myString2.setSummary(true); + propertyDefinitions.put(myString2.getName(), myString2); + myString2.setPropertyGroupDefinition(propertyGroupDefinition); + + PropertyGroupDefinition propertyGroupDefinition2 = new PropertyGroupDefinition("myGroup2"); + propertyGroupDefinition2.setDisplayName(propertyGroupDefinition2.getName()); + propertyGroupDefinition2.setDescription("this is another example group"); + + PropertyDefinitionSimple myString3 = new PropertyDefinitionSimple("myString3", "my third string", true, + PropertySimpleType.STRING); + myString3.setDisplayName((myString3.getName())); + myString3.setSummary(true); + propertyDefinitions.put(myString3.getName(), myString3); + myString3.setPropertyGroupDefinition(propertyGroupDefinition2); + + PropertyDefinitionSimple enumExample = new PropertyDefinitionSimple("myEnum", + "a grouped enum prop with <=5 items", false, PropertySimpleType.STRING); + enumExample.setDisplayName(enumExample.getName()); + ArrayList<PropertyDefinitionEnumeration> myEnums = new ArrayList<PropertyDefinitionEnumeration>(); + myEnums.add(new PropertyDefinitionEnumeration("Burlington", "Burlington")); + myEnums.add(new PropertyDefinitionEnumeration("Camden", "Camden", true)); + myEnums.add(new PropertyDefinitionEnumeration("Gloucester", "Gloucester")); + enumExample.setEnumeratedValues(myEnums, false); + propertyDefinitions.put(enumExample.getName(), enumExample); + enumExample.setPropertyGroupDefinition(propertyGroupDefinition2); + + return configurationDefinition; + } + + public static Configuration createConfiguration() { + Configuration configuration = new Configuration(); + configuration.setNotes("a test config"); + configuration.setVersion(1); + + configuration.put(new PropertySimple("String1", "blah")); + configuration.put(new PropertySimple("String2", + "a really, really, really, really, really long value that won't fit in the text input box")); + configuration.put(new PropertySimple("LongString", "blah blah blah\nblah blah blah")); + configuration.put(new PropertySimple("Password", null)); + configuration.put(new PropertySimple("Boolean", false)); + configuration.put(new PropertySimple("Integer", 666)); + configuration.put(new PropertySimple("Float", Math.PI)); + + configuration.put(new PropertySimple("StringEnum1", "PA")); + configuration.put(new PropertySimple("StringEnum2", "blue")); + + PropertyMap propMap1 = new PropertyMap("MapOfSimples"); + propMap1.put(new PropertySimple("String1", "One")); + propMap1.put(new PropertySimple("String2", "Two")); + propMap1.put(new PropertySimple("Integer", 11)); + configuration.put(propMap1); + + PropertyMap openPropMap1 = new PropertyMap("OpenMapOfSimples"); + openPropMap1.put(new PropertySimple("PROCESSOR_ARCHITECTURE", "x86")); + openPropMap1.put(new PropertySimple("PROCESSOR_IDENTIFIER", "x86 Family 6 Model 15 Stepping 6, GenuineIntel")); + openPropMap1.put(new PropertySimple("PROCESSOR_LEVEL", "6")); + openPropMap1.put(new PropertySimple("PROCESSOR_REVISION", "0f06")); + configuration.put(openPropMap1); + + PropertyMap openPropMap2 = new PropertyMap("ReadOnlyOpenMapOfSimples"); + openPropMap2.put(new PropertySimple("ANT_HOME", "C:\opt\ant-1.6.5")); + openPropMap2.put(new PropertySimple("ANT_OPTS", "-Xms128M -Xmx256M")); + configuration.put(openPropMap2); + + configuration.put(new PropertyList("ListOfStrings", new PropertySimple("note", "Do"), new PropertySimple( + "note", "Re"), new PropertySimple("note", "Mi"), new PropertySimple("note", "Fa"), new PropertySimple( + "note", "So"), new PropertySimple("note", "La"), new PropertySimple("note", "Ti"))); + + PropertyMap propMap2 = new PropertyMap("MapOfSimples"); + propMap2.put(new PropertySimple("String1", "Uno")); + propMap2.put(new PropertySimple("String2", "Dos")); + propMap2.put(new PropertySimple("Integer", Integer.MIN_VALUE)); + PropertyMap propMap3 = new PropertyMap("MapOfSimples"); + propMap3.put(new PropertySimple("String1", "Un")); + propMap3.put(new PropertySimple("String2", "Deux")); + propMap3.put(new PropertySimple("Integer", Integer.MAX_VALUE)); + configuration.put(new PropertyList("ListOfMaps", propMap2, propMap3)); + + PropertyMap propMap4 = new PropertyMap("MapOfSimples"); + propMap4.put(new PropertySimple("String1", "A")); + propMap4.put(new PropertySimple("String2", "B")); + propMap4.put(new PropertySimple("Integer", 999)); + PropertyMap propMap5 = new PropertyMap("MapOfSimples"); + propMap5.put(new PropertySimple("String1", "a")); + propMap5.put(new PropertySimple("String2", "b")); + propMap5.put(new PropertySimple("Integer", 0)); + configuration.put(new PropertyList("ReadOnlyListOfMaps", propMap4, propMap5)); + + configuration.put(new PropertySimple("myString1", "grouped String 1")); + configuration.put(new PropertySimple("myString2", "grouped String 2")); + configuration.put(new PropertySimple("myString3", "strings are cool")); + configuration.put(new PropertySimple("myEnum", "Burlington")); + + return configuration; + } + + private static PropertyDefinitionSimple createStringPropDef1() { + PropertyDefinitionSimple stringPropDef1; + stringPropDef1 = new PropertyDefinitionSimple("String1", + "an optional String simple prop", false, PropertySimpleType.STRING); + stringPropDef1.setDisplayName(stringPropDef1.getName()); + return stringPropDef1; + } + + private static PropertyDefinitionSimple createStringPropDef2() { + PropertyDefinitionSimple stringPropDef2; + stringPropDef2 = new PropertyDefinitionSimple("String2", + "a read-only String simple prop", false, PropertySimpleType.STRING); + stringPropDef2.setDisplayName(stringPropDef2.getName()); + stringPropDef2.setReadOnly(true); + return stringPropDef2; + } + + private static PropertyDefinitionSimple createIntegerPropDef() { + PropertyDefinitionSimple integerPropDef; + integerPropDef = new PropertyDefinitionSimple("Integer", + "a required summary Integer simple prop", true, PropertySimpleType.INTEGER); + integerPropDef.setDisplayName(integerPropDef.getName()); + integerPropDef.setSummary(true); + return integerPropDef; + } + + private TestConfigurationFactory() { + } +} diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/test/TestConfigurationView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/test/TestConfigurationView.java new file mode 100644 index 0000000..0349718 --- /dev/null +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/test/TestConfigurationView.java @@ -0,0 +1,129 @@ +/* + * RHQ Management Platform + * Copyright 2010, Red Hat Middleware LLC, and individual contributors + * as indicated by the @author tags. See the copyright.txt file in the + * distribution for a full listing of individual contributors. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ +package org.rhq.enterprise.gui.coregui.client.test; + +import java.util.EnumSet; + +import com.smartgwt.client.types.Overflow; +import com.smartgwt.client.widgets.events.ClickEvent; +import com.smartgwt.client.widgets.events.ClickHandler; +import com.smartgwt.client.widgets.layout.LayoutSpacer; +import com.smartgwt.client.widgets.toolbar.ToolStrip; + +import org.rhq.core.domain.configuration.Configuration; +import org.rhq.core.domain.configuration.definition.ConfigurationDefinition; +import org.rhq.enterprise.gui.coregui.client.CoreGUI; +import org.rhq.enterprise.gui.coregui.client.components.configuration.ConfigurationEditor; +import org.rhq.enterprise.gui.coregui.client.components.configuration.PropertyValueChangeEvent; +import org.rhq.enterprise.gui.coregui.client.components.configuration.PropertyValueChangeListener; +import org.rhq.enterprise.gui.coregui.client.util.message.Message; +import org.rhq.enterprise.gui.coregui.client.util.message.MessageCenter; +import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableIButton; +import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableVLayout; + +/** + * @author Ian Springer + */ +public class TestConfigurationView + extends LocatableVLayout implements PropertyValueChangeListener { + public static final String VIEW_ID = "TestConfig"; + + private ConfigurationEditor editor; + private LocatableIButton saveButton; + private ConfigurationDefinition configurationDefinition; + private Configuration configuration; + + public TestConfigurationView(String locatorId) { + super(locatorId); + } + + @Override + protected void onDraw() { + super.onDraw(); + build(); + } + + public void build() { + setWidth100(); + setHeight100(); + + ToolStrip toolStrip = new ToolStrip(); + toolStrip.setWidth100(); + + toolStrip.addMember(new LayoutSpacer()); + + this.saveButton = new LocatableIButton(this.extendLocatorId("Save"), "Save"); + this.saveButton.addClickHandler(new ClickHandler() { + public void onClick(ClickEvent clickEvent) { + save(); + } + }); + this.saveButton.disable(); + toolStrip.addMember(this.saveButton); + + addMember(toolStrip); + + this.configurationDefinition = TestConfigurationFactory.createConfigurationDefinition(); + this.configuration = TestConfigurationFactory.createConfiguration(); + + reloadConfiguration(); + } + + private void reloadConfiguration() { + this.saveButton.disable(); + if (editor != null) { + editor.destroy(); + removeMember(editor); + } + + editor = new ConfigurationEditor(extendLocatorId("Editor"), this.configurationDefinition, this.configuration); + editor.setOverflow(Overflow.AUTO); + editor.addValidationStateChangeListener(this); + addMember(editor); + } + + private void save() { + CoreGUI.getMessageCenter().notify( + new Message("Configuration updated.", "Test configuration updated.")); + } + + @Override + public void propertyValueChanged(PropertyValueChangeEvent event) { + MessageCenter messageCenter = CoreGUI.getMessageCenter(); + Message message; + if (event.isValidationStateChanged()) { + if (event.getInvalidPropertyNames().isEmpty()) { + this.saveButton.enable(); + message = new Message("All properties now have valid values, so the configuration can now be saved.", + Message.Severity.Info, EnumSet.of(Message.Option.Transient)); + } + else { + this.saveButton.disable(); + message = new Message( + "One or more properties have invalid values. The values must be corrected before the configuration can be saved.", + Message.Severity.Error, EnumSet.of(Message.Option.Transient, Message.Option.Sticky)); + } + messageCenter.notify(message); + } + else { + this.saveButton.enable(); + } + } +} diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/RPCDataSource.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/RPCDataSource.java index a717108..2640674 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/RPCDataSource.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/RPCDataSource.java @@ -56,7 +56,7 @@ public abstract class RPCDataSource<T> extends DataSource {
public RPCDataSource(String name) { if (name != null) { - System.out.println("Trying to build DS: " + name); + com.allen_sauer.gwt.log.client.Log.info("Trying to build DS: " + name); setID(name); } // TODO until http://code.google.com/p/smartgwt/issues/detail?id=490 is fixed always go to the server for data @@ -245,7 +245,7 @@ public abstract class RPCDataSource<T> extends DataSource {
@SuppressWarnings("unchecked") public static <S> S[] getArrayFilter(DSRequest request, String paramName, Class<S> type) { - //System.out.println("Fetching array " + paramName + " (" + type + ")"); + com.allen_sauer.gwt.log.client.Log.debug("Fetching array " + paramName + " (" + type + ")"); Criteria criteria = request.getCriteria(); Map<String, Object> criteriaMap = criteria.getValues();
@@ -272,14 +272,14 @@ public abstract class RPCDataSource<T> extends DataSource { throw new IllegalArgumentException("No support for passing array filters of type " + type); }
- //System.out.println("Result array = " + resultArray); + com.allen_sauer.gwt.log.client.Log.debug("Result array = " + resultArray);
return resultArray; }
@SuppressWarnings("unchecked") public static <S> S getFilter(DSRequest request, String paramName, Class<S> type) { - //System.out.println("Fetching " + paramName + " (" + type + ")"); + com.allen_sauer.gwt.log.client.Log.debug("Fetching " + paramName + " (" + type + ")"); Criteria criteria = request.getCriteria(); Map<String, Object> criteriaMap = criteria.getValues();
@@ -301,7 +301,7 @@ public abstract class RPCDataSource<T> extends DataSource { } }
- //System.out.println("Result = " + result); + com.allen_sauer.gwt.log.client.Log.debug("Result = " + result);
return result; } diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/TreeUtility.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/TreeUtility.java index 360fd86..17049a8 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/TreeUtility.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/TreeUtility.java @@ -38,7 +38,7 @@ public class TreeUtility { for (int i = 0; i < level; i++) { System.out.print(" "); } - System.out.println("* " + toString(node)); + com.allen_sauer.gwt.log.client.Log.info("* " + toString(node)); TreeNode[] childNodes = tree.getChildren(node); for (TreeNode childNode : childNodes) { printTreeNode(tree, childNode); diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/WidgetUtility.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/WidgetUtility.java index 5790c70..5714634 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/WidgetUtility.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/WidgetUtility.java @@ -165,7 +165,7 @@ public class WidgetUtility { indent.append(" "); }
- System.out.println(indent + simpleClassName + "[id=" + id + ", title=" + title + ", flags=[" + flags + "]]"); + com.allen_sauer.gwt.log.client.Log.info(indent + simpleClassName + "[id=" + id + ", title=" + title + ", flags=[" + flags + "]]"); }
private static List<Widget> getChildren(Widget widget) { diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/message/MessageBar.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/message/MessageBar.java index 8da5ef0..6b356ae 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/message/MessageBar.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/message/MessageBar.java @@ -120,6 +120,10 @@ public class MessageBar extends LocatableHLayout implements MessageCenter.Messag
label.setWidth(400);
+ // TODO: Create some custom edge images in greed, yellow, red, etc. so we can add nice rounded corners to the + // label. + //label.setShowEdges(true); + String icon = (contents != null) ? SEVERITY_TO_ICON_MAP.get(message.getSeverity()) : null; label.setIcon(icon);
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/message/MessageCenterView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/message/MessageCenterView.java index d51bc47..1a6968d 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/message/MessageCenterView.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/message/MessageCenterView.java @@ -20,6 +20,7 @@ package org.rhq.enterprise.gui.coregui.client.util.message;
import java.util.List;
+import com.allen_sauer.gwt.log.client.Log; import com.google.gwt.user.client.Timer; import com.smartgwt.client.types.Alignment; import com.smartgwt.client.types.AnimationEffect; @@ -158,6 +159,8 @@ public class MessageCenterView extends LocatableHLayout implements MessageCenter
public void onMessage(final Message message) { if (!message.isTransient()) { + logMessage(message); + final Label label = new Label(message.conciseMessage); label.setMargin(5); label.setAutoFit(true); @@ -193,6 +196,25 @@ public class MessageCenterView extends LocatableHLayout implements MessageCenter } }
+ private void logMessage(Message message) { + // TODO: Format the message better. + String logMessage = message.toString(); + switch (message.getSeverity()) { + case Info: + Log.info(logMessage); + break; + case Warning: + Log.warn(logMessage); + break; + case Error: + Log.error(logMessage); + break; + case Fatal: + Log.fatal(logMessage); + break; + } + } + private String getSeverityIcon(Message.Severity severity) { String iconSrc = null; switch (severity) { diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/rpc/MonitoringRequestCallback.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/rpc/MonitoringRequestCallback.java index 2064f63..8ae0364 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/rpc/MonitoringRequestCallback.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/rpc/MonitoringRequestCallback.java @@ -55,7 +55,7 @@ public class MonitoringRequestCallback implements RequestCallback { if (STATUS_CODE_OK == response.getStatusCode()) { RPCManager.getInstance().succeedCall(this); callback.onResponseReceived(request, response); - //System.out.println("MonitoringRequestCallback: OK"); + com.allen_sauer.gwt.log.client.Log.debug("MonitoringRequestCallback: OK"); } else { RPCManager.getInstance().failCall(this); callback.onResponseReceived(request, response); diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/rpc/RPCManager.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/rpc/RPCManager.java index 10213f4..3e2e007 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/rpc/RPCManager.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/rpc/RPCManager.java @@ -62,7 +62,7 @@ public class RPCManager { }
public void succeedCall(MonitoringRequestCallback callback) { - //System.out.println("RPC [" + callback.getName() + "] succeeded in [" + callback.age() + "] ms."); + com.allen_sauer.gwt.log.client.Log.debug("RPC [" + callback.getName() + "] succeeded in [" + callback.age() + "] ms."); inProgress.remove(callback); refresh(); } diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ConfigurationGWTServiceImpl.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ConfigurationGWTServiceImpl.java index 63b71a0..08d8046 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ConfigurationGWTServiceImpl.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ConfigurationGWTServiceImpl.java @@ -102,7 +102,7 @@ public class ConfigurationGWTServiceImpl extends AbstractGWTServiceImpl implemen }
public RawConfiguration dummy(RawConfiguration config) { - System.out.println(config.getPath()); + com.allen_sauer.gwt.log.client.Log.info(config.getPath()); return new RawConfiguration(); // Dummy method for gwt compiler } diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ObjectFilter.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ObjectFilter.java index 7c3acfb..e090640 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ObjectFilter.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ObjectFilter.java @@ -25,6 +25,8 @@ import java.lang.reflect.Modifier; import java.util.Collection; import java.util.Set;
+import com.allen_sauer.gwt.log.client.Log; + import org.rhq.core.domain.resource.Resource;
/** @@ -37,7 +39,7 @@ public class ObjectFilter { for (Object object : collection) { filterFields(object, goodFields); } - System.out.println("Object filtered from size [" + sizeOfBefore + "] to [" + sizeOf(collection) + "]"); + com.allen_sauer.gwt.log.client.Log.info("Object filtered from size [" + sizeOfBefore + "] to [" + sizeOf(collection) + "]");
return collection; } @@ -51,11 +53,11 @@ public class ObjectFilter { // Only clearing objects, no point in clearing primitives as it // doesn't save any space on the stream if (!f.getType().isPrimitive()) { - // System.out.println("clearing " + f.getName()); + Log.debug("Clearing " + f.getName() + "..."); f.setAccessible(true); f.set(object, null); } else { - // System.out.println("Can't do " + f.getType()); + Log.debug("Can't do " + f.getType()); } } } diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ResourceGWTServiceImpl.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ResourceGWTServiceImpl.java index 14c6f8d..4e14b75 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ResourceGWTServiceImpl.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ResourceGWTServiceImpl.java @@ -111,7 +111,7 @@ public class ResourceGWTServiceImpl extends AbstractGWTServiceImpl implements Re @Override public void init(ServletConfig config) throws ServletException { super.init(config); - System.out.println("Loading GWT RPC Services"); + com.allen_sauer.gwt.log.client.Log.info("Loading GWT RPC Services"); }
public ResourceGWTServiceImpl() { diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ResourceTypeGWTServiceImpl.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ResourceTypeGWTServiceImpl.java index c74aa3c..4d6706c 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ResourceTypeGWTServiceImpl.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ResourceTypeGWTServiceImpl.java @@ -26,7 +26,7 @@ public class ResourceTypeGWTServiceImpl extends AbstractGWTServiceImpl implement }
public RawConfiguration dummy(RawConfiguration config) { - System.out.println(config.getPath()); + com.allen_sauer.gwt.log.client.Log.info(config.getPath()); return new RawConfiguration(); } } \ No newline at end of file
commit 198bfdca2ff0c5f150e2f98a20655a5bde66d247 Author: Joseph Marques joseph@redhat.com Date: Fri Oct 1 13:48:22 2010 -0400
add jxpath to eclipse .classpath
diff --git a/.classpath b/.classpath index c13d973..0a567d7 100644 --- a/.classpath +++ b/.classpath @@ -254,5 +254,6 @@ <classpathentry exported="true" kind="var" path="M2_REPO/com/smartgwt/smartgwt/2.2/smartgwt-2.2.jar"/> <classpathentry exported="true" kind="var" path="M2_REPO/ca/nanometrics/gflot/1.0.0/gflot-1.0.0.jar"/> <classpathentry exported="true" kind="var" path="M2_REPO/com/jcraft/jsch/0.1.29/jsch-0.1.29.jar"/> + <classpathentry exported="true" kind="var" path="M2_REPO/commons-jxpath/commons-jxpath/1.3/commons-jxpath-1.3.jar"/> <classpathentry kind="output" path="eclipse-classes"/> </classpath>
commit 374f578bc10335cd4cd93a8800b264ee5dcd5ee2 Author: Joseph Marques joseph@redhat.com Date: Fri Oct 1 13:18:06 2010 -0400
fix all current gwt services to wrap exceptions that are gwt-serializable
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/AlertGWTServiceImpl.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/AlertGWTServiceImpl.java index a1f47c9..dc7497f 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/AlertGWTServiceImpl.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/AlertGWTServiceImpl.java @@ -21,6 +21,7 @@ package org.rhq.enterprise.gui.coregui.server.gwt; import org.rhq.core.domain.alert.Alert; import org.rhq.core.domain.criteria.AlertCriteria; import org.rhq.core.domain.util.PageList; +import org.rhq.core.util.exception.ThrowableUtil; import org.rhq.enterprise.gui.coregui.client.gwt.AlertGWTService; import org.rhq.enterprise.gui.coregui.server.util.SerialUtility; import org.rhq.enterprise.server.alert.AlertManagerLocal; @@ -35,15 +36,27 @@ public class AlertGWTServiceImpl extends AbstractGWTServiceImpl implements Alert private AlertManagerLocal alertManager = LookupUtil.getAlertManager();
public PageList<Alert> findAlertsByCriteria(AlertCriteria criteria) { - return SerialUtility.prepare(this.alertManager.findAlertsByCriteria(getSessionSubject(), criteria), - "AlertService.findAlertsByCriteria"); + try { + return SerialUtility.prepare(this.alertManager.findAlertsByCriteria(getSessionSubject(), criteria), + "AlertService.findAlertsByCriteria"); + } catch (Exception e) { + throw new RuntimeException(ThrowableUtil.getAllMessages(e)); + } }
public void deleteResourceAlerts(Integer[] alertIds) { - this.alertManager.deleteResourceAlerts(getSessionSubject(), alertIds); + try { + this.alertManager.deleteResourceAlerts(getSessionSubject(), alertIds); + } catch (Exception e) { + throw new RuntimeException(ThrowableUtil.getAllMessages(e)); + } }
public void acknowledgeResourceAlerts(Integer[] alertIds) { - this.alertManager.acknowledgeAlerts(getSessionSubject(), alertIds); + try { + this.alertManager.acknowledgeAlerts(getSessionSubject(), alertIds); + } catch (Exception e) { + throw new RuntimeException(ThrowableUtil.getAllMessages(e)); + } } } \ No newline at end of file diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/AuthorizationGWTServiceImpl.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/AuthorizationGWTServiceImpl.java index 7218061..4b8d73f 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/AuthorizationGWTServiceImpl.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/AuthorizationGWTServiceImpl.java @@ -22,6 +22,7 @@ import java.util.HashSet; import java.util.Set;
import org.rhq.core.domain.authz.Permission; +import org.rhq.core.util.exception.ThrowableUtil; import org.rhq.enterprise.gui.coregui.client.gwt.AuthorizationGWTService; import org.rhq.enterprise.gui.coregui.server.util.SerialUtility; import org.rhq.enterprise.server.authz.AuthorizationManagerLocal; @@ -32,30 +33,53 @@ import org.rhq.enterprise.server.util.LookupUtil; */ public class AuthorizationGWTServiceImpl extends AbstractGWTServiceImpl implements AuthorizationGWTService {
+ private static final long serialVersionUID = 1L; + private AuthorizationManagerLocal authorizationManager = LookupUtil.getAuthorizationManager();
public Set<Permission> getExplicitResourcePermissions(int resourceId) { - return SerialUtility.prepare(new HashSet<Permission>(authorizationManager.getExplicitResourcePermissions( - getSessionSubject(), resourceId)), "AuthorizationManager.getExplicitResourcePermissions"); + try { + return SerialUtility.prepare(new HashSet<Permission>(authorizationManager.getExplicitResourcePermissions( + getSessionSubject(), resourceId)), "AuthorizationManager.getExplicitResourcePermissions"); + } catch (Exception e) { + throw new RuntimeException(ThrowableUtil.getAllMessages(e)); + } }
public Set<Permission> getImplicitResourcePermissions(int resourceId) { - return SerialUtility.prepare(new HashSet<Permission>(authorizationManager.getImplicitResourcePermissions( - getSessionSubject(), resourceId)), "AuthorizationManager.getImplicitResourcePermissions"); + try { + return SerialUtility.prepare(new HashSet<Permission>(authorizationManager.getImplicitResourcePermissions( + getSessionSubject(), resourceId)), "AuthorizationManager.getImplicitResourcePermissions"); + } catch (Exception e) { + throw new RuntimeException(ThrowableUtil.getAllMessages(e)); + } }
public Set<Permission> getExplicitGroupPermissions(int groupId) { - return SerialUtility.prepare(new HashSet<Permission>(authorizationManager.getExplicitGroupPermissions( - getSessionSubject(), groupId)), "AuthorizationManager.getExplicitGroupPermissions"); + try { + return SerialUtility.prepare(new HashSet<Permission>(authorizationManager.getExplicitGroupPermissions( + getSessionSubject(), groupId)), "AuthorizationManager.getExplicitGroupPermissions"); + } catch (Exception e) { + throw new RuntimeException(ThrowableUtil.getAllMessages(e)); + } }
public Set<Permission> getImplicitGroupPermissions(int groupId) { - return SerialUtility.prepare(new HashSet<Permission>(authorizationManager.getImplicitGroupPermissions( - getSessionSubject(), groupId)), "AuthorizationManager.getImplicitGroupPermissions"); + try { + return SerialUtility.prepare(new HashSet<Permission>(authorizationManager.getImplicitGroupPermissions( + getSessionSubject(), groupId)), "AuthorizationManager.getImplicitGroupPermissions"); + } catch (Exception e) { + throw new RuntimeException(ThrowableUtil.getAllMessages(e)); + } }
public Set<Permission> getExplicitGlobalPermissions() { - return SerialUtility.prepare(new HashSet<Permission>(authorizationManager - .getExplicitGlobalPermissions(getSessionSubject())), "AuthorizationManager.getExplicitGlobalPermissions"); + try { + return SerialUtility.prepare(new HashSet<Permission>(authorizationManager + .getExplicitGlobalPermissions(getSessionSubject())), + "AuthorizationManager.getExplicitGlobalPermissions"); + } catch (Exception e) { + throw new RuntimeException(ThrowableUtil.getAllMessages(e)); + } } } diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/AvailabilityGWTServiceImpl.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/AvailabilityGWTServiceImpl.java index cbf72c7..4b636f0 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/AvailabilityGWTServiceImpl.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/AvailabilityGWTServiceImpl.java @@ -18,10 +18,10 @@ */ package org.rhq.enterprise.gui.coregui.server.gwt;
-import org.rhq.core.domain.auth.Subject; import org.rhq.core.domain.measurement.Availability; import org.rhq.core.domain.util.PageControl; import org.rhq.core.domain.util.PageList; +import org.rhq.core.util.exception.ThrowableUtil; import org.rhq.enterprise.gui.coregui.client.gwt.AvailabilityGWTService; import org.rhq.enterprise.gui.coregui.server.util.SerialUtility; import org.rhq.enterprise.server.measurement.AvailabilityManagerLocal; @@ -32,15 +32,16 @@ import org.rhq.enterprise.server.util.LookupUtil; */ public class AvailabilityGWTServiceImpl extends AbstractGWTServiceImpl implements AvailabilityGWTService {
+ private static final long serialVersionUID = 1L;
private AvailabilityManagerLocal availabilityManager = LookupUtil.getAvailabilityManager();
public PageList<Availability> findAvailabilityForResource(int resourceId, PageControl pc) { - - return SerialUtility.prepare( - availabilityManager.findAvailabilityForResource(getSessionSubject(), resourceId, pc), - "AvailabilityService.findAvailabilityForResource" - ); - + try { + return SerialUtility.prepare(availabilityManager.findAvailabilityForResource(getSessionSubject(), + resourceId, pc), "AvailabilityService.findAvailabilityForResource"); + } catch (Exception e) { + throw new RuntimeException(ThrowableUtil.getAllMessages(e)); + } } } diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ClusterGWTServiceImpl.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ClusterGWTServiceImpl.java index f3f8323..211735d 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ClusterGWTServiceImpl.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ClusterGWTServiceImpl.java @@ -38,32 +38,28 @@ import org.rhq.enterprise.server.util.LookupUtil; */ public class ClusterGWTServiceImpl extends AbstractGWTServiceImpl implements ClusterGWTService {
+ private static final long serialVersionUID = 1L;
private ClusterManagerLocal clusterManager = LookupUtil.getClusterManager();
- public ResourceGroup createAutoClusterBackingGroup(ClusterKey clusterKey, boolean addResources) { - return SerialUtility.prepare( - clusterManager.createAutoClusterBackingGroup(getSessionSubject(), clusterKey, addResources), - "ClusterGWTServiceImpl.createAutoClusterBackingGroup"); + return SerialUtility.prepare(clusterManager.createAutoClusterBackingGroup(getSessionSubject(), clusterKey, + addResources), "ClusterGWTServiceImpl.createAutoClusterBackingGroup"); }
public ResourceGroup getAutoClusterBackingGroup(ClusterKey clusterKey) { - return SerialUtility.prepare( - clusterManager.getAutoClusterBackingGroup(getSessionSubject(), clusterKey), - "ClusterGWTServiceImpl.getAutoClusterBackingGroup"); + return SerialUtility.prepare(clusterManager.getAutoClusterBackingGroup(getSessionSubject(), clusterKey), + "ClusterGWTServiceImpl.getAutoClusterBackingGroup"); }
public List<Resource> getAutoClusterResources(ClusterKey clusterKey) { - return SerialUtility.prepare( - clusterManager.getAutoClusterResources(getSessionSubject(), clusterKey), - "ClusterGWTServiceImpl.getAutoClusterResources"); + return SerialUtility.prepare(clusterManager.getAutoClusterResources(getSessionSubject(), clusterKey), + "ClusterGWTServiceImpl.getAutoClusterResources"); }
public ClusterFlyweight getClusterTree(int groupId) { - return SerialUtility.prepare( - clusterManager.getClusterTree(getSessionSubject(), groupId), - "ClusterGWTServiceImpl.getClusterTree"); + return SerialUtility.prepare(clusterManager.getClusterTree(getSessionSubject(), groupId), + "ClusterGWTServiceImpl.getClusterTree");
} } diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ConfigurationGWTServiceImpl.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ConfigurationGWTServiceImpl.java index 487b167..63b71a0 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ConfigurationGWTServiceImpl.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ConfigurationGWTServiceImpl.java @@ -1,6 +1,5 @@ package org.rhq.enterprise.gui.coregui.server.gwt;
-import org.rhq.core.domain.auth.Subject; import org.rhq.core.domain.configuration.Configuration; import org.rhq.core.domain.configuration.PluginConfigurationUpdate; import org.rhq.core.domain.configuration.RawConfiguration; @@ -9,79 +8,97 @@ import org.rhq.core.domain.configuration.definition.ConfigurationDefinition; import org.rhq.core.domain.criteria.ResourceConfigurationUpdateCriteria; import org.rhq.core.domain.util.PageControl; import org.rhq.core.domain.util.PageList; -import org.rhq.core.domain.util.PageOrdering; +import org.rhq.core.util.exception.ThrowableUtil; import org.rhq.enterprise.gui.coregui.client.gwt.ConfigurationGWTService; import org.rhq.enterprise.gui.coregui.server.util.SerialUtility; import org.rhq.enterprise.server.configuration.ConfigurationManagerLocal; -import org.rhq.enterprise.server.configuration.ConfigurationUpdateStillInProgressException; import org.rhq.enterprise.server.util.LookupUtil;
-import com.google.gwt.user.server.rpc.RemoteServiceServlet; - public class ConfigurationGWTServiceImpl extends AbstractGWTServiceImpl implements ConfigurationGWTService {
+ private static final long serialVersionUID = 1L;
private ConfigurationManagerLocal configurationManager = LookupUtil.getConfigurationManager();
public Configuration getPluginConfiguration(int resourceId) { - - - Configuration configuration = configurationManager.getPluginConfiguration(getSessionSubject(), resourceId); - - return SerialUtility.prepare(configuration, "PluginConfiguration"); + try { + Configuration configuration = configurationManager.getPluginConfiguration(getSessionSubject(), resourceId); + return SerialUtility.prepare(configuration, "PluginConfiguration"); + } catch (Exception e) { + throw new RuntimeException(ThrowableUtil.getAllMessages(e)); + } }
public ConfigurationDefinition getPluginConfigurationDefinition(int resourceTypeId) { - - ConfigurationDefinition definition = configurationManager.getPluginConfigurationDefinitionForResourceType(getSessionSubject(), resourceTypeId); - return SerialUtility.prepare(definition, "PluginDefinition"); + try { + ConfigurationDefinition definition = configurationManager.getPluginConfigurationDefinitionForResourceType( + getSessionSubject(), resourceTypeId); + return SerialUtility.prepare(definition, "PluginDefinition"); + } catch (Exception e) { + throw new RuntimeException(ThrowableUtil.getAllMessages(e)); + } }
- public Configuration getResourceConfiguration(int resourceId) { - - Configuration configuration = configurationManager.getResourceConfiguration(getSessionSubject(), resourceId); - return SerialUtility.prepare(configuration, "ResourceConfiguration"); + try { + Configuration configuration = configurationManager + .getResourceConfiguration(getSessionSubject(), resourceId); + return SerialUtility.prepare(configuration, "ResourceConfiguration"); + } catch (Exception e) { + throw new RuntimeException(ThrowableUtil.getAllMessages(e)); + } }
public ConfigurationDefinition getResourceConfigurationDefinition(int resourceTypeId) { - - ConfigurationDefinition definition = configurationManager.getResourceConfigurationDefinitionWithTemplatesForResourceType(getSessionSubject(), resourceTypeId); - return SerialUtility.prepare(definition, "ResourceDefinition"); + try { + ConfigurationDefinition definition = configurationManager + .getResourceConfigurationDefinitionWithTemplatesForResourceType(getSessionSubject(), resourceTypeId); + return SerialUtility.prepare(definition, "ResourceDefinition"); + } catch (Exception e) { + throw new RuntimeException(ThrowableUtil.getAllMessages(e)); + } }
- public PageList<ResourceConfigurationUpdate> findResourceConfigurationUpdates( - Integer resourceId, Long beginDate, Long endDate, boolean suppressOldest, PageControl pc) { - - PageList<ResourceConfigurationUpdate> result = - configurationManager.findResourceConfigurationUpdates( - getSessionSubject(), resourceId, beginDate, endDate, suppressOldest, pc); - - return SerialUtility.prepare(result, "ConfigurationService.findResourceConfigurationUpdates"); + public PageList<ResourceConfigurationUpdate> findResourceConfigurationUpdates(Integer resourceId, Long beginDate, + Long endDate, boolean suppressOldest, PageControl pc) { + try { + PageList<ResourceConfigurationUpdate> result = configurationManager.findResourceConfigurationUpdates( + getSessionSubject(), resourceId, beginDate, endDate, suppressOldest, pc); + return SerialUtility.prepare(result, "ConfigurationService.findResourceConfigurationUpdates"); + } catch (Exception e) { + throw new RuntimeException(ThrowableUtil.getAllMessages(e)); + } }
- public ResourceConfigurationUpdate updateResourceConfiguration(int resourceId, Configuration configuration) { - ResourceConfigurationUpdate update = - configurationManager.updateResourceConfiguration(getSessionSubject(), resourceId, configuration); - - return SerialUtility.prepare(update, "ConfigurationService.updateResourceConfiguration"); + try { + ResourceConfigurationUpdate update = configurationManager.updateResourceConfiguration(getSessionSubject(), + resourceId, configuration); + return SerialUtility.prepare(update, "ConfigurationService.updateResourceConfiguration"); + } catch (Exception e) { + throw new RuntimeException(ThrowableUtil.getAllMessages(e)); + } }
public PluginConfigurationUpdate updatePluginConfiguration(int resourceId, Configuration configuration) { - PluginConfigurationUpdate update = - configurationManager.updatePluginConfiguration(getSessionSubject(), resourceId, configuration); - - return SerialUtility.prepare(update, "ConfigurationService.updatePluginConfiguration"); + try { + PluginConfigurationUpdate update = configurationManager.updatePluginConfiguration(getSessionSubject(), + resourceId, configuration); + return SerialUtility.prepare(update, "ConfigurationService.updatePluginConfiguration"); + } catch (Exception e) { + throw new RuntimeException(ThrowableUtil.getAllMessages(e)); + } }
- public PageList<ResourceConfigurationUpdate> findResourceConfigurationUpdatesByCriteria(ResourceConfigurationUpdateCriteria criteria) { - PageList<ResourceConfigurationUpdate> updates = - configurationManager.findResourceConfigurationUpdatesByCriteria( - getSessionSubject(), criteria - ); - - return SerialUtility.prepare(updates, "ConfigurationService.findResourceConfigurationUpdatesByCriteria"); + public PageList<ResourceConfigurationUpdate> findResourceConfigurationUpdatesByCriteria( + ResourceConfigurationUpdateCriteria criteria) { + try { + PageList<ResourceConfigurationUpdate> updates = configurationManager + .findResourceConfigurationUpdatesByCriteria(getSessionSubject(), criteria); + return SerialUtility.prepare(updates, "ConfigurationService.findResourceConfigurationUpdatesByCriteria"); + } catch (Exception e) { + throw new RuntimeException(ThrowableUtil.getAllMessages(e)); + } }
public RawConfiguration dummy(RawConfiguration config) { diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ContentGWTServiceImpl.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ContentGWTServiceImpl.java index 91c45f8..2d112fb 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ContentGWTServiceImpl.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ContentGWTServiceImpl.java @@ -25,6 +25,7 @@ package org.rhq.enterprise.gui.coregui.server.gwt; import org.rhq.core.domain.content.PackageVersion; import org.rhq.core.domain.criteria.PackageVersionCriteria; import org.rhq.core.domain.util.PageList; +import org.rhq.core.util.exception.ThrowableUtil; import org.rhq.enterprise.gui.coregui.client.gwt.ContentGWTService; import org.rhq.enterprise.gui.coregui.server.util.SerialUtility; import org.rhq.enterprise.server.content.ContentManagerLocal; @@ -35,16 +36,17 @@ import org.rhq.enterprise.server.util.LookupUtil; */ public class ContentGWTServiceImpl extends AbstractGWTServiceImpl implements ContentGWTService {
+ private static final long serialVersionUID = 1L;
private ContentManagerLocal contentManager = LookupUtil.getContentManager();
- - public PageList<PackageVersion> findPackageVersionsByCriteria(PackageVersionCriteria criteria) { - return SerialUtility.prepare(contentManager.findPackageVersionsByCriteria(getSessionSubject(), criteria), + try { + return SerialUtility.prepare(contentManager.findPackageVersionsByCriteria(getSessionSubject(), criteria), "ContentService.findPackageVersionsByCriteria"); - + } catch (Exception e) { + throw new RuntimeException(ThrowableUtil.getAllMessages(e)); + } }
- } diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/DashboardGWTServiceImpl.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/DashboardGWTServiceImpl.java index 1d28f7d..742c68e 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/DashboardGWTServiceImpl.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/DashboardGWTServiceImpl.java @@ -25,6 +25,7 @@ package org.rhq.enterprise.gui.coregui.server.gwt; import java.util.List;
import org.rhq.core.domain.dashboard.Dashboard; +import org.rhq.core.util.exception.ThrowableUtil; import org.rhq.enterprise.gui.coregui.client.gwt.DashboardGWTService; import org.rhq.enterprise.gui.coregui.server.util.SerialUtility; import org.rhq.enterprise.server.dashboard.DashboardManagerLocal; @@ -35,25 +36,42 @@ import org.rhq.enterprise.server.util.LookupUtil; */ public class DashboardGWTServiceImpl extends AbstractGWTServiceImpl implements DashboardGWTService {
- private DashboardManagerLocal dashboardManager = LookupUtil.getDashboardManagerLocal(); + private static final long serialVersionUID = 1L;
+ private DashboardManagerLocal dashboardManager = LookupUtil.getDashboardManagerLocal();
public List<Dashboard> findDashboardsForSubject() { - return SerialUtility.prepare(dashboardManager.findDashboardsForSubject(getSessionSubject()), + try { + return SerialUtility.prepare(dashboardManager.findDashboardsForSubject(getSessionSubject()), "DashboardManager.findDashboardsForSubject"); + } catch (Exception e) { + throw new RuntimeException(ThrowableUtil.getAllMessages(e)); + } }
public List<Dashboard> findSharedDashboards() { - return SerialUtility.prepare(dashboardManager.findSharedDashboards(getSessionSubject()), + try { + return SerialUtility.prepare(dashboardManager.findSharedDashboards(getSessionSubject()), "DashboardManager.findSharedDashboards"); + } catch (Exception e) { + throw new RuntimeException(ThrowableUtil.getAllMessages(e)); + } }
public Dashboard storeDashboard(Dashboard dashboard) { - return SerialUtility.prepare(dashboardManager.storeDashboard(getSessionSubject(),dashboard), + try { + return SerialUtility.prepare(dashboardManager.storeDashboard(getSessionSubject(), dashboard), "DashboardManager.storeDashboard"); + } catch (Exception e) { + throw new RuntimeException(ThrowableUtil.getAllMessages(e)); + } }
public void removeDashboard(int dashboardId) { - dashboardManager.removeDashboard(getSessionSubject(), dashboardId); + try { + dashboardManager.removeDashboard(getSessionSubject(), dashboardId); + } catch (Exception e) { + throw new RuntimeException(ThrowableUtil.getAllMessages(e)); + } } } diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/EventGWTServiceImpl.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/EventGWTServiceImpl.java index 665f370..3dbae8e 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/EventGWTServiceImpl.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/EventGWTServiceImpl.java @@ -30,6 +30,7 @@ import org.rhq.core.domain.event.Event; import org.rhq.core.domain.event.EventSeverity; import org.rhq.core.domain.event.composite.EventComposite; import org.rhq.core.domain.util.PageList; +import org.rhq.core.util.exception.ThrowableUtil; import org.rhq.enterprise.gui.coregui.client.gwt.EventGWTService; import org.rhq.enterprise.gui.coregui.server.util.SerialUtility; import org.rhq.enterprise.server.event.EventManagerLocal; @@ -46,37 +47,66 @@ public class EventGWTServiceImpl extends AbstractGWTServiceImpl implements Event private EventManagerLocal eventManager = LookupUtil.getEventManager();
public EventSeverity[] getSeverityBuckets(int resourceId, long begin, long end, int numBuckets) { - return SerialUtility.prepare(eventManager.getSeverityBuckets(getSessionSubject(), resourceId, begin, end, - numBuckets), "EventService.getSeverityBuckets"); + try { + return SerialUtility.prepare(eventManager.getSeverityBuckets(getSessionSubject(), resourceId, begin, end, + numBuckets), "EventService.getSeverityBuckets"); + } catch (Exception e) { + throw new RuntimeException(ThrowableUtil.getAllMessages(e)); + } }
public EventSeverity[] getSeverityBucketsForAutoGroup(int parentResourceId, int resourceTypeId, long begin, long end, int numBuckets) { - return SerialUtility.prepare(eventManager.getSeverityBucketsForAutoGroup(getSessionSubject(), parentResourceId, - resourceTypeId, begin, end, numBuckets), "EventService.getSeverityBucketsForAutoGroup"); + try { + return SerialUtility.prepare(eventManager.getSeverityBucketsForAutoGroup(getSessionSubject(), + parentResourceId, resourceTypeId, begin, end, numBuckets), + "EventService.getSeverityBucketsForAutoGroup"); + } catch (Exception e) { + throw new RuntimeException(ThrowableUtil.getAllMessages(e)); + } }
public EventSeverity[] getSeverityBucketsForCompGroup(int resourceGroupId, long begin, long end, int numBuckets) { - return SerialUtility.prepare(eventManager.getSeverityBucketsForCompGroup(getSessionSubject(), resourceGroupId, - begin, end, numBuckets), "EventService.getSeverityBucketsForCompGroup"); + try { + return SerialUtility.prepare(eventManager.getSeverityBucketsForCompGroup(getSessionSubject(), + resourceGroupId, begin, end, numBuckets), "EventService.getSeverityBucketsForCompGroup"); + } catch (Exception e) { + throw new RuntimeException(ThrowableUtil.getAllMessages(e)); + } }
public PageList<Event> findEventsByCriteria(EventCriteria criteria) { - return SerialUtility.prepare(eventManager.findEventsByCriteria(getSessionSubject(), criteria), - "EventService.findEventsByCriteria"); + try { + return SerialUtility.prepare(eventManager.findEventsByCriteria(getSessionSubject(), criteria), + "EventService.findEventsByCriteria"); + } catch (Exception e) { + throw new RuntimeException(ThrowableUtil.getAllMessages(e)); + } }
public PageList<EventComposite> findEventCompositesByCriteria(EventCriteria criteria) { - return SerialUtility.prepare(eventManager.findEventCompositesByCriteria(getSessionSubject(), criteria), - "EventService.findEventsByCriteria"); + try { + return SerialUtility.prepare(eventManager.findEventCompositesByCriteria(getSessionSubject(), criteria), + "EventService.findEventsByCriteria"); + } catch (Exception e) { + throw new RuntimeException(ThrowableUtil.getAllMessages(e)); + } }
public int deleteEventsForContext(EntityContext context, List<Integer> eventIds) { - return eventManager.deleteEventsForContext(getSessionSubject(), context, eventIds); + try { + return eventManager.deleteEventsForContext(getSessionSubject(), context, eventIds); + } catch (Exception e) { + throw new RuntimeException(ThrowableUtil.getAllMessages(e)); + } }
public int purgeEventsForContext(EntityContext context) { - return eventManager.purgeEventsForContext(getSessionSubject(), context); + try { + return eventManager.purgeEventsForContext(getSessionSubject(), context); + } catch (Exception e) { + throw new RuntimeException(ThrowableUtil.getAllMessages(e)); + } }
} diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/MeasurementDataGWTServiceImpl.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/MeasurementDataGWTServiceImpl.java index 78232b6..1cc9170 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/MeasurementDataGWTServiceImpl.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/MeasurementDataGWTServiceImpl.java @@ -34,6 +34,7 @@ import org.rhq.core.domain.measurement.composite.MeasurementDataNumericHighLowCo import org.rhq.core.domain.measurement.composite.MeasurementOOBComposite; import org.rhq.core.domain.util.PageControl; import org.rhq.core.domain.util.PageList; +import org.rhq.core.util.exception.ThrowableUtil; import org.rhq.enterprise.gui.coregui.client.gwt.MeasurementDataGWTService; import org.rhq.enterprise.gui.coregui.server.util.SerialUtility; import org.rhq.enterprise.server.measurement.CallTimeDataManagerLocal; @@ -58,89 +59,140 @@ public class MeasurementDataGWTServiceImpl extends AbstractGWTServiceImpl implem private MeasurementDefinitionManagerLocal definitionManager = LookupUtil.getMeasurementDefinitionManager();
public List<MeasurementDataTrait> findCurrentTraitsForResource(int resourceId, DisplayType displayType) { - return SerialUtility.prepare(dataManager.findCurrentTraitsForResource(getSessionSubject(), resourceId, - displayType), "MeasurementDataService.findCurrentTraitsForResource"); + try { + return SerialUtility.prepare(dataManager.findCurrentTraitsForResource(getSessionSubject(), resourceId, + displayType), "MeasurementDataService.findCurrentTraitsForResource"); + } catch (Exception e) { + throw new RuntimeException(ThrowableUtil.getAllMessages(e)); + } }
public Set<MeasurementData> findLiveData(int resourceId, int[] definitionIds) { - return SerialUtility.prepare(dataManager.findLiveData(getSessionSubject(), resourceId, definitionIds), - "MeasurementDataService.findLiveData"); + try { + return SerialUtility.prepare(dataManager.findLiveData(getSessionSubject(), resourceId, definitionIds), + "MeasurementDataService.findLiveData"); + } catch (Exception e) { + throw new RuntimeException(ThrowableUtil.getAllMessages(e)); + } }
public List<List<MeasurementDataNumericHighLowComposite>> findDataForResource(int resourceId, int[] definitionIds, long beginTime, long endTime, int numPoints) { - return SerialUtility.prepare(dataManager.findDataForResource(getSessionSubject(), resourceId, definitionIds, - beginTime, endTime, numPoints), "MeasurementDataService.findDataForResource"); + try { + return SerialUtility.prepare(dataManager.findDataForResource(getSessionSubject(), resourceId, + definitionIds, beginTime, endTime, numPoints), "MeasurementDataService.findDataForResource"); + } catch (Exception e) { + throw new RuntimeException(ThrowableUtil.getAllMessages(e)); + } }
public PageList<CallTimeDataComposite> findCallTimeDataForResource(int scheduleId, long start, long end, PageControl pageControl) { - return SerialUtility.prepare(callTimeDataManager.findCallTimeDataForResource(getSessionSubject(), scheduleId, - start, end, pageControl), "MeasurementDataService.findCallTimeDataForResource"); + try { + return SerialUtility.prepare(callTimeDataManager.findCallTimeDataForResource(getSessionSubject(), + scheduleId, start, end, pageControl), "MeasurementDataService.findCallTimeDataForResource"); + } catch (Exception e) { + throw new RuntimeException(ThrowableUtil.getAllMessages(e)); + } }
public PageList<MeasurementDefinition> findMeasurementDefinitionsByCriteria(MeasurementDefinitionCriteria criteria) { - return SerialUtility.prepare(definitionManager.findMeasurementDefinitionsByCriteria(getSessionSubject(), - criteria), "MeasurementDataService.findMeasurementDefinintionsByCriteria"); + try { + return SerialUtility.prepare(definitionManager.findMeasurementDefinitionsByCriteria(getSessionSubject(), + criteria), "MeasurementDataService.findMeasurementDefinintionsByCriteria"); + } catch (Exception e) { + throw new RuntimeException(ThrowableUtil.getAllMessages(e)); + } }
public PageList<MeasurementSchedule> findMeasurementSchedulesByCriteria(MeasurementScheduleCriteria criteria) { - return SerialUtility.prepare(scheduleManager.findSchedulesByCriteria(getSessionSubject(), criteria), - "MeasurementDataService.findMeasurementSchedulesByCriteria"); + try { + return SerialUtility.prepare(scheduleManager.findSchedulesByCriteria(getSessionSubject(), criteria), + "MeasurementDataService.findMeasurementSchedulesByCriteria"); + } catch (Exception e) { + throw new RuntimeException(ThrowableUtil.getAllMessages(e)); + } }
- - public PageList<MeasurementOOBComposite> getSchedulesWithOOBs(String metricNameFilter, String resourceNameFilter, String parentNameFilter, PageControl pc) { - return SerialUtility.prepare( - measurementOOBManager.getSchedulesWithOOBs( - getSessionSubject(), - metricNameFilter, - resourceNameFilter, - parentNameFilter, - pc), + public PageList<MeasurementOOBComposite> getSchedulesWithOOBs(String metricNameFilter, String resourceNameFilter, + String parentNameFilter, PageControl pc) { + try { + return SerialUtility.prepare(measurementOOBManager.getSchedulesWithOOBs(getSessionSubject(), + metricNameFilter, resourceNameFilter, parentNameFilter, pc), "MeasurementDataService.getSchedulesWithOOBs"); + } catch (Exception e) { + throw new RuntimeException(ThrowableUtil.getAllMessages(e)); + } }
public PageList<MeasurementOOBComposite> getHighestNOOBsForResource(int resourceId, int n) { - return SerialUtility.prepare( - measurementOOBManager.getHighestNOOBsForResource( - getSessionSubject(), - resourceId, - n), - "MeasurementDataService.getHighestNOOBsForResource"); + try { + return SerialUtility.prepare(measurementOOBManager.getHighestNOOBsForResource(getSessionSubject(), + resourceId, n), "MeasurementDataService.getHighestNOOBsForResource"); + } catch (Exception e) { + throw new RuntimeException(ThrowableUtil.getAllMessages(e)); + } }
public void enableSchedulesForResource(int resourceId, int[] measurementDefinitionIds) { - scheduleManager.enableSchedulesForResource(getSessionSubject(), resourceId, measurementDefinitionIds); + try { + scheduleManager.enableSchedulesForResource(getSessionSubject(), resourceId, measurementDefinitionIds); + } catch (Exception e) { + throw new RuntimeException(ThrowableUtil.getAllMessages(e)); + } }
public void disableSchedulesForResource(int resourceId, int[] measurementDefinitionIds) { - scheduleManager.disableSchedulesForResource(getSessionSubject(), resourceId, measurementDefinitionIds); + try { + scheduleManager.disableSchedulesForResource(getSessionSubject(), resourceId, measurementDefinitionIds); + } catch (Exception e) { + throw new RuntimeException(ThrowableUtil.getAllMessages(e)); + } }
public void updateSchedulesForResource(int resourceId, int[] measurementDefinitionIds, long collectionInterval) { - scheduleManager.updateSchedulesForResource(getSessionSubject(), resourceId, measurementDefinitionIds, + try { + scheduleManager.updateSchedulesForResource(getSessionSubject(), resourceId, measurementDefinitionIds, collectionInterval); + } catch (Exception e) { + throw new RuntimeException(ThrowableUtil.getAllMessages(e)); + } }
public void enableSchedulesForCompatibleGroup(int resourceGroupId, int[] measurementDefinitionIds) { - scheduleManager.enableSchedulesForCompatibleGroup(getSessionSubject(), resourceGroupId, measurementDefinitionIds); + try { + scheduleManager.enableSchedulesForCompatibleGroup(getSessionSubject(), resourceGroupId, + measurementDefinitionIds); + } catch (Exception e) { + throw new RuntimeException(ThrowableUtil.getAllMessages(e)); + } }
public void disableSchedulesForCompatibleGroup(int resourceGroupId, int[] measurementDefinitionIds) { - scheduleManager.disableSchedulesForCompatibleGroup(getSessionSubject(), resourceGroupId, measurementDefinitionIds); + try { + scheduleManager.disableSchedulesForCompatibleGroup(getSessionSubject(), resourceGroupId, + measurementDefinitionIds); + } catch (Exception e) { + throw new RuntimeException(ThrowableUtil.getAllMessages(e)); + } }
public void updateSchedulesForCompatibleGroup(int resourceGroupId, int[] measurementDefinitionIds, - long collectionInterval) { - scheduleManager.updateSchedulesForCompatibleGroup(getSessionSubject(), resourceGroupId, measurementDefinitionIds, - collectionInterval); - } + long collectionInterval) { + try { + scheduleManager.updateSchedulesForCompatibleGroup(getSessionSubject(), resourceGroupId, + measurementDefinitionIds, collectionInterval); + } catch (Exception e) { + throw new RuntimeException(ThrowableUtil.getAllMessages(e)); + } + }
public PageList<MeasurementDataTrait> findTraitsByCriteria(MeasurementDataTraitCriteria criteria) { - return SerialUtility.prepare(dataManager.findTraitsByCriteria(getSessionSubject(), criteria), - "MeasurementDataService.findTraitsByCriteria"); + try { + return SerialUtility.prepare(dataManager.findTraitsByCriteria(getSessionSubject(), criteria), + "MeasurementDataService.findTraitsByCriteria"); + } catch (Exception e) { + throw new RuntimeException(ThrowableUtil.getAllMessages(e)); + } } } - - diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ObjectFilter.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ObjectFilter.java index 62dc79b..7c3acfb 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ObjectFilter.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ObjectFilter.java @@ -18,22 +18,20 @@ */ package org.rhq.enterprise.gui.coregui.server.gwt;
-import org.rhq.core.domain.resource.Resource; - import java.io.ByteArrayOutputStream; import java.io.ObjectOutputStream; import java.lang.reflect.Field; import java.lang.reflect.Modifier; import java.util.Collection; -import java.util.List; import java.util.Set;
+import org.rhq.core.domain.resource.Resource; + /** * @author Greg Hinkle */ public class ObjectFilter {
- public static <T extends Collection<?>> T filterFieldsInCollection(T collection, Set<String> goodFields) { long sizeOfBefore = sizeOf(collection); for (Object object : collection) { @@ -45,7 +43,6 @@ public class ObjectFilter { }
public static <T> T filterFields(T object, Set<String> goodFields) { - try { Field[] fields = Resource.class.getDeclaredFields(); for (Field f : fields) { @@ -54,11 +51,11 @@ public class ObjectFilter { // Only clearing objects, no point in clearing primitives as it // doesn't save any space on the stream if (!f.getType().isPrimitive()) { -// System.out.println("clearing " + f.getName()); + // System.out.println("clearing " + f.getName()); f.setAccessible(true); f.set(object, null); } else { -// System.out.println("Can't do " + f.getType()); + // System.out.println("Can't do " + f.getType()); } } } @@ -67,11 +64,9 @@ public class ObjectFilter { e.printStackTrace(); }
- return object; }
- private static int sizeOf(Object object) { try { ByteArrayOutputStream baos = new ByteArrayOutputStream(50000); 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 a7f72ed..4519e00 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 @@ -33,6 +33,7 @@ import org.rhq.core.domain.resource.composite.DisambiguationReport; import org.rhq.core.domain.util.PageControl; import org.rhq.core.domain.util.PageList; import org.rhq.core.util.IntExtractor; +import org.rhq.core.util.exception.ThrowableUtil; import org.rhq.enterprise.gui.coregui.client.gwt.OperationGWTService; import org.rhq.enterprise.gui.coregui.client.inventory.resource.detail.operation.create.ExecutionSchedule; import org.rhq.enterprise.gui.coregui.server.util.SerialUtility; @@ -52,29 +53,33 @@ public class OperationGWTServiceImpl extends AbstractGWTServiceImpl implements O
public PageList<ResourceOperationHistory> findResourceOperationHistoriesByCriteria( ResourceOperationHistoryCriteria criteria) { - return SerialUtility.prepare(operationManager.findResourceOperationHistoriesByCriteria(getSessionSubject(), - criteria), "OperationService.findResourceOperationHistoriesByCriteria"); - + try { + return SerialUtility.prepare(operationManager.findResourceOperationHistoriesByCriteria(getSessionSubject(), + criteria), "OperationService.findResourceOperationHistoriesByCriteria"); + } catch (Exception e) { + throw new RuntimeException(ThrowableUtil.getAllMessages(e)); + } }
public PageList<GroupOperationHistory> findGroupOperationHistoriesByCriteria(GroupOperationHistoryCriteria criteria) { - return SerialUtility.prepare(operationManager.findGroupOperationHistoriesByCriteria(getSessionSubject(), - criteria), "OperationService.findGroupOperationHistoriesByCriteria"); + try { + return SerialUtility.prepare(operationManager.findGroupOperationHistoriesByCriteria(getSessionSubject(), + criteria), "OperationService.findGroupOperationHistoriesByCriteria"); + } catch (Exception e) { + throw new RuntimeException(ThrowableUtil.getAllMessages(e)); + } }
public void scheduleResourceOperation(int resourceId, String operationName, Configuration parameters, ExecutionSchedule schedule, String description, int timeout) throws RuntimeException { - ResourceOperationSchedule opSchedule; try { - + ResourceOperationSchedule opSchedule; if (schedule.getStart() == ExecutionSchedule.Start.Immediately) { opSchedule = operationManager.scheduleResourceOperation(getSessionSubject(), resourceId, operationName, 0, 0, 0, 0, parameters, description); } else { - CronTrigger ct = new CronTrigger("resource " + resourceId + "_" + operationName, "group", schedule .getCronString()); - opSchedule = operationManager.scheduleResourceOperation(getSessionSubject(), resourceId, operationName, parameters, ct, description); } @@ -88,34 +93,40 @@ public class OperationGWTServiceImpl extends AbstractGWTServiceImpl implements O */ public List<DisambiguationReport<ResourceOperationLastCompletedComposite>> findRecentCompletedOperations( int pageSize) { + try { + PageControl pageControl = new PageControl(0, pageSize); + PageList<ResourceOperationLastCompletedComposite> lastCompletedResourceOps = operationManager + .findRecentlyCompletedResourceOperations(getSessionSubject(), null, pageControl);
- PageControl pageControl = new PageControl(0, pageSize); - PageList<ResourceOperationLastCompletedComposite> lastCompletedResourceOps = operationManager - .findRecentlyCompletedResourceOperations(getSessionSubject(), null, pageControl); - - //translate the returned problem resources to disambiguated links - List<DisambiguationReport<ResourceOperationLastCompletedComposite>> disambiguatedLastCompletedResourceOps = resourceManager - .disambiguate(lastCompletedResourceOps, RESOURCE_OPERATION_RESOURCE_ID_EXTRACTOR, - DefaultDisambiguationUpdateStrategies.getDefault()); + //translate the returned problem resources to disambiguated links + List<DisambiguationReport<ResourceOperationLastCompletedComposite>> disambiguatedLastCompletedResourceOps = resourceManager + .disambiguate(lastCompletedResourceOps, RESOURCE_OPERATION_RESOURCE_ID_EXTRACTOR, + DefaultDisambiguationUpdateStrategies.getDefault());
- return disambiguatedLastCompletedResourceOps; + return disambiguatedLastCompletedResourceOps; + } catch (Exception e) { + throw new RuntimeException(ThrowableUtil.getAllMessages(e)); + } }
/** Find scheduled operations, disambiguate them and return that list. * */ public List<DisambiguationReport<ResourceOperationScheduleComposite>> findScheduledOperations(int pageSize) { + try { + PageControl pageControl = new PageControl(0, pageSize); + PageList<ResourceOperationScheduleComposite> scheduledResourceOps = operationManager + .findCurrentlyScheduledResourceOperations(getSessionSubject(), pageControl);
- PageControl pageControl = new PageControl(0, pageSize); - PageList<ResourceOperationScheduleComposite> scheduledResourceOps = operationManager - .findCurrentlyScheduledResourceOperations(getSessionSubject(), pageControl); - - //translate the returned problem resources to disambiguated links - List<DisambiguationReport<ResourceOperationScheduleComposite>> disambiguatedNextScheduledResourceOps = resourceManager - .disambiguate(scheduledResourceOps, RESOURCE_OPERATION_SCHEDULE_RESOURCE_ID_EXTRACTOR, - DefaultDisambiguationUpdateStrategies.getDefault()); + //translate the returned problem resources to disambiguated links + List<DisambiguationReport<ResourceOperationScheduleComposite>> disambiguatedNextScheduledResourceOps = resourceManager + .disambiguate(scheduledResourceOps, RESOURCE_OPERATION_SCHEDULE_RESOURCE_ID_EXTRACTOR, + DefaultDisambiguationUpdateStrategies.getDefault());
- return disambiguatedNextScheduledResourceOps; + return disambiguatedNextScheduledResourceOps; + } catch (Exception e) { + throw new RuntimeException(ThrowableUtil.getAllMessages(e)); + } }
private static final IntExtractor<ResourceOperationLastCompletedComposite> RESOURCE_OPERATION_RESOURCE_ID_EXTRACTOR = new IntExtractor<ResourceOperationLastCompletedComposite>() { diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/RepoGWTServiceImpl.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/RepoGWTServiceImpl.java index 45c2c5e..073a6f7 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/RepoGWTServiceImpl.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/RepoGWTServiceImpl.java @@ -25,6 +25,7 @@ package org.rhq.enterprise.gui.coregui.server.gwt; import org.rhq.core.domain.content.Repo; import org.rhq.core.domain.criteria.RepoCriteria; import org.rhq.core.domain.util.PageList; +import org.rhq.core.util.exception.ThrowableUtil; import org.rhq.enterprise.gui.coregui.client.gwt.RepoGWTService; import org.rhq.enterprise.gui.coregui.server.util.SerialUtility; import org.rhq.enterprise.server.content.RepoManagerLocal; @@ -35,13 +36,17 @@ import org.rhq.enterprise.server.util.LookupUtil; */ public class RepoGWTServiceImpl extends AbstractGWTServiceImpl implements RepoGWTService {
+ private static final long serialVersionUID = 1L; + private RepoManagerLocal repoManager = LookupUtil.getRepoManagerLocal();
public PageList<Repo> findReposByCriteria(RepoCriteria criteria) { - return SerialUtility.prepare( - repoManager.findReposByCriteria(getSessionSubject(), criteria), + try { + return SerialUtility.prepare(repoManager.findReposByCriteria(getSessionSubject(), criteria), "ContentService.findReposByCriteria"); + } catch (Exception e) { + throw new RuntimeException(ThrowableUtil.getAllMessages(e)); + } }
- } diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ResourceBossGWTServiceImpl.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ResourceBossGWTServiceImpl.java index 5ac22b5..fb00c3a 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ResourceBossGWTServiceImpl.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ResourceBossGWTServiceImpl.java @@ -25,6 +25,7 @@ package org.rhq.enterprise.gui.coregui.server.gwt;
import org.rhq.core.domain.auth.Subject; import org.rhq.core.domain.resource.InventorySummary; +import org.rhq.core.util.exception.ThrowableUtil; import org.rhq.enterprise.gui.coregui.client.gwt.ResourceBossGWTService; import org.rhq.enterprise.server.resource.ResourceBossLocal; import org.rhq.enterprise.server.util.LookupUtil; @@ -34,6 +35,8 @@ import org.rhq.enterprise.server.util.LookupUtil; */ public class ResourceBossGWTServiceImpl extends AbstractGWTServiceImpl implements ResourceBossGWTService {
+ private static final long serialVersionUID = 1L; + private ResourceBossLocal resourceBoss = LookupUtil.getResourceBoss();
public InventorySummary getInventorySummaryForLoggedInUser() { @@ -42,6 +45,10 @@ public class ResourceBossGWTServiceImpl extends AbstractGWTServiceImpl implement }
public InventorySummary getInventorySummary(Subject user) { - return resourceBoss.getInventorySummary(user); + try { + return resourceBoss.getInventorySummary(user); + } catch (Exception e) { + throw new RuntimeException(ThrowableUtil.getAllMessages(e)); + } } } diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ResourceGWTServiceImpl.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ResourceGWTServiceImpl.java index 2e2f6d6..14c6f8d 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ResourceGWTServiceImpl.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ResourceGWTServiceImpl.java @@ -43,6 +43,7 @@ import org.rhq.core.domain.resource.composite.ResourceLineageComposite; import org.rhq.core.domain.util.PageControl; import org.rhq.core.domain.util.PageList; import org.rhq.core.util.IntExtractor; +import org.rhq.core.util.exception.ThrowableUtil; import org.rhq.enterprise.gui.coregui.client.gwt.ResourceGWTService; import org.rhq.enterprise.gui.coregui.server.util.SerialUtility; import org.rhq.enterprise.server.discovery.DiscoveryBossLocal; @@ -57,6 +58,8 @@ import org.rhq.enterprise.server.util.LookupUtil; */ public class ResourceGWTServiceImpl extends AbstractGWTServiceImpl implements ResourceGWTService {
+ private static final long serialVersionUID = 1L; + private ResourceManagerLocal resourceManager = LookupUtil.getResourceManager(); private ResourceFactoryManagerLocal resourceFactoryManager = LookupUtil.getResourceFactoryManager(); private DiscoveryBossLocal discoveryBoss = LookupUtil.getDiscoveryBoss(); @@ -122,8 +125,7 @@ public class ResourceGWTServiceImpl extends AbstractGWTServiceImpl implements Re
return SerialUtility.prepare(result, "ResourceService.findResourcesByCriteria"); } catch (Exception e) { - e.printStackTrace(); - throw new RuntimeException(e); + throw new RuntimeException(ThrowableUtil.getAllMessages(e)); } }
@@ -139,8 +141,7 @@ public class ResourceGWTServiceImpl extends AbstractGWTServiceImpl implements Re
return SerialUtility.prepare(result, "ResourceService.findResourceCompositesByCriteria"); } catch (Exception e) { - e.printStackTrace(); - throw new RuntimeException(e); + throw new RuntimeException(ThrowableUtil.getAllMessages(e)); } }
@@ -148,18 +149,21 @@ public class ResourceGWTServiceImpl extends AbstractGWTServiceImpl implements Re * Criteria passed in not currently used. */ public List<DisambiguationReport<ProblemResourceComposite>> findProblemResources(long ctime, int maxItems) { + try { + List<ProblemResourceComposite> located = new ArrayList<ProblemResourceComposite>(); + MeasurementProblemManagerLocal problemManager = LookupUtil.getMeasurementProblemManager(); + ResourceManagerLocal resourceManager = LookupUtil.getResourceManager();
- List<ProblemResourceComposite> located = new ArrayList<ProblemResourceComposite>(); - MeasurementProblemManagerLocal problemManager = LookupUtil.getMeasurementProblemManager(); - ResourceManagerLocal resourceManager = LookupUtil.getResourceManager(); - - //retrieve list of discovered problem resources. Grab all, live scrolling data - located = problemManager.findProblemResources(getSessionSubject(), ctime, new PageControl(0, maxItems)); + //retrieve list of discovered problem resources. Grab all, live scrolling data + located = problemManager.findProblemResources(getSessionSubject(), ctime, new PageControl(0, maxItems));
- //translate the returned problem resources to disambiguated links - List<DisambiguationReport<ProblemResourceComposite>> translated = resourceManager.disambiguate(located, - RESOURCE_ID_EXTRACTOR, DefaultDisambiguationUpdateStrategies.getDefault()); - return translated; + //translate the returned problem resources to disambiguated links + List<DisambiguationReport<ProblemResourceComposite>> translated = resourceManager.disambiguate(located, + RESOURCE_ID_EXTRACTOR, DefaultDisambiguationUpdateStrategies.getDefault()); + return translated; + } catch (Exception e) { + throw new RuntimeException(ThrowableUtil.getAllMessages(e)); + } }
private static final IntExtractor<ProblemResourceComposite> RESOURCE_ID_EXTRACTOR = new IntExtractor<ProblemResourceComposite>() { @@ -169,71 +173,112 @@ public class ResourceGWTServiceImpl extends AbstractGWTServiceImpl implements Re };
public List<ResourceLineageComposite> getResourceLineageAndSiblings(int resourceId) { - return SerialUtility.prepare(resourceManager.getResourceLineageAndSiblings(getSessionSubject(), resourceId), - "ResourceService.getResourceLineageAndSiblings"); + try { + return SerialUtility.prepare( + resourceManager.getResourceLineageAndSiblings(getSessionSubject(), resourceId), + "ResourceService.getResourceLineageAndSiblings"); + } catch (Exception e) { + throw new RuntimeException(ThrowableUtil.getAllMessages(e)); + } }
public Resource getPlatformForResource(int resourceId) { - return SerialUtility.prepare(resourceManager.getRootResourceForResource(resourceId), - "ResourceService.getPlatformForResource"); + try { + return SerialUtility.prepare(resourceManager.getRootResourceForResource(resourceId), + "ResourceService.getPlatformForResource"); + } catch (Exception e) { + throw new RuntimeException(ThrowableUtil.getAllMessages(e)); + } }
public List<RecentlyAddedResourceComposite> findRecentlyAddedResources(long ctime, int maxItems) { - List<RecentlyAddedResourceComposite> platforms = resourceManager.findRecentlyAddedPlatforms( - getSessionSubject(), ctime, maxItems); + try { + List<RecentlyAddedResourceComposite> platforms = resourceManager.findRecentlyAddedPlatforms( + getSessionSubject(), ctime, maxItems);
- for (RecentlyAddedResourceComposite platform : platforms) { - List<RecentlyAddedResourceComposite> servers = resourceManager.findRecentlyAddedServers( - getSessionSubject(), ctime, platform.getId()); - platform.setChildren(servers); - } + for (RecentlyAddedResourceComposite platform : platforms) { + List<RecentlyAddedResourceComposite> servers = resourceManager.findRecentlyAddedServers( + getSessionSubject(), ctime, platform.getId()); + platform.setChildren(servers); + }
- return platforms; + return platforms; + } catch (Exception e) { + throw new RuntimeException(ThrowableUtil.getAllMessages(e)); + } }
public List<Integer> uninventoryResources(int[] resourceIds) { - return SerialUtility.prepare(resourceManager.uninventoryResources(getSessionSubject(), resourceIds), - "ResourceService.uninventoryResources"); + try { + return SerialUtility.prepare(resourceManager.uninventoryResources(getSessionSubject(), resourceIds), + "ResourceService.uninventoryResources"); + } catch (Exception e) { + throw new RuntimeException(ThrowableUtil.getAllMessages(e)); + } }
public void updateResource(Resource resource) { - resourceManager.updateResource(getSessionSubject(), resource); + try { + resourceManager.updateResource(getSessionSubject(), resource); + } catch (Exception e) { + throw new RuntimeException(ThrowableUtil.getAllMessages(e)); + } }
public void createResource(int parentResourceId, int newResourceTypeId, String newResourceName, Configuration newResourceConfiguration) { + try {
- ConfigurationDefinition pluginConfigDefinition = LookupUtil.getConfigurationManager() - .getPluginConfigurationDefinitionForResourceType(getSessionSubject(), newResourceTypeId); - Configuration pluginConfig = null; - if (pluginConfigDefinition != null) { - ConfigurationTemplate pluginConfigTemplate = pluginConfigDefinition.getDefaultTemplate(); - pluginConfig = (pluginConfigTemplate != null) ? pluginConfigTemplate.createConfiguration() - : new Configuration(); + ConfigurationDefinition pluginConfigDefinition = LookupUtil.getConfigurationManager() + .getPluginConfigurationDefinitionForResourceType(getSessionSubject(), newResourceTypeId); + Configuration pluginConfig = null; + if (pluginConfigDefinition != null) { + ConfigurationTemplate pluginConfigTemplate = pluginConfigDefinition.getDefaultTemplate(); + pluginConfig = (pluginConfigTemplate != null) ? pluginConfigTemplate.createConfiguration() + : new Configuration();
- // TODO GH: Is this still necessary now that we don't blow up on non-normalized configs - // ConfigurationUtility.normalizeConfiguration(pluginConfig, pluginConfigDefinition); - } + // TODO GH: Is this still necessary now that we don't blow up on non-normalized configs + // ConfigurationUtility.normalizeConfiguration(pluginConfig, pluginConfigDefinition); + }
- resourceFactoryManager.createResource(getSessionSubject(), parentResourceId, newResourceTypeId, - newResourceName, pluginConfig, newResourceConfiguration); + resourceFactoryManager.createResource(getSessionSubject(), parentResourceId, newResourceTypeId, + newResourceName, pluginConfig, newResourceConfiguration); + } catch (Exception e) { + throw new RuntimeException(ThrowableUtil.getAllMessages(e)); + } }
public Map<Resource, List<Resource>> getQueuedPlatformsAndServers(HashSet<InventoryStatus> statuses, PageControl pc) { - return SerialUtility.prepare(discoveryBoss.getQueuedPlatformsAndServers(getSessionSubject(), EnumSet - .copyOf(statuses), pc), "ResourceService.getQueuedPlatformsAndServers"); + try { + return SerialUtility.prepare(discoveryBoss.getQueuedPlatformsAndServers(getSessionSubject(), EnumSet + .copyOf(statuses), pc), "ResourceService.getQueuedPlatformsAndServers"); + } catch (Exception e) { + throw new RuntimeException(ThrowableUtil.getAllMessages(e)); + } }
public void importResources(Integer[] resourceIds) { - discoveryBoss.importResources(getSessionSubject(), resourceIds); + try { + discoveryBoss.importResources(getSessionSubject(), resourceIds); + } catch (Exception e) { + throw new RuntimeException(ThrowableUtil.getAllMessages(e)); + } }
public void ignoreResources(Integer[] resourceIds) { - discoveryBoss.ignoreResources(getSessionSubject(), resourceIds); + try { + discoveryBoss.ignoreResources(getSessionSubject(), resourceIds); + } catch (Exception e) { + throw new RuntimeException(ThrowableUtil.getAllMessages(e)); + } }
public void unignoreResources(Integer[] resourceIds) { - discoveryBoss.unignoreResources(getSessionSubject(), resourceIds); + try { + discoveryBoss.unignoreResources(getSessionSubject(), resourceIds); + } catch (Exception e) { + throw new RuntimeException(ThrowableUtil.getAllMessages(e)); + } }
} \ No newline at end of file diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ResourceTypeGWTServiceImpl.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ResourceTypeGWTServiceImpl.java index 6ff33b3..c74aa3c 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ResourceTypeGWTServiceImpl.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ResourceTypeGWTServiceImpl.java @@ -1,25 +1,28 @@ package org.rhq.enterprise.gui.coregui.server.gwt;
-import com.google.gwt.user.server.rpc.RemoteServiceServlet; - -import org.rhq.core.domain.auth.Subject; import org.rhq.core.domain.configuration.RawConfiguration; import org.rhq.core.domain.criteria.ResourceTypeCriteria; import org.rhq.core.domain.resource.ResourceType; import org.rhq.core.domain.util.PageList; +import org.rhq.core.util.exception.ThrowableUtil; import org.rhq.enterprise.gui.coregui.client.gwt.ResourceTypeGWTService; import org.rhq.enterprise.gui.coregui.server.util.SerialUtility; -import org.rhq.enterprise.server.auth.SubjectManagerLocal; import org.rhq.enterprise.server.resource.ResourceTypeManagerLocal; import org.rhq.enterprise.server.util.LookupUtil;
public class ResourceTypeGWTServiceImpl extends AbstractGWTServiceImpl implements ResourceTypeGWTService {
- public PageList<ResourceType> findResourceTypesByCriteria(ResourceTypeCriteria criteria) { + private static final long serialVersionUID = 1L;
- ResourceTypeManagerLocal typeManager = LookupUtil.getResourceTypeManager(); + public PageList<ResourceType> findResourceTypesByCriteria(ResourceTypeCriteria criteria) { + try { + ResourceTypeManagerLocal typeManager = LookupUtil.getResourceTypeManager();
- return SerialUtility.prepare(typeManager.findResourceTypesByCriteria(getSessionSubject(), criteria), "ResourceTypes.findResourceTypesByCriteria"); + return SerialUtility.prepare(typeManager.findResourceTypesByCriteria(getSessionSubject(), criteria), + "ResourceTypes.findResourceTypesByCriteria"); + } catch (Exception e) { + throw new RuntimeException(ThrowableUtil.getAllMessages(e)); + } }
public RawConfiguration dummy(RawConfiguration config) { diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/RoleGWTServiceImpl.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/RoleGWTServiceImpl.java index 7b278e1..ed7e50d 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/RoleGWTServiceImpl.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/RoleGWTServiceImpl.java @@ -21,6 +21,7 @@ package org.rhq.enterprise.gui.coregui.server.gwt; import org.rhq.core.domain.authz.Role; import org.rhq.core.domain.criteria.RoleCriteria; import org.rhq.core.domain.util.PageList; +import org.rhq.core.util.exception.ThrowableUtil; import org.rhq.enterprise.gui.coregui.client.gwt.RoleGWTService; import org.rhq.enterprise.gui.coregui.server.util.SerialUtility; import org.rhq.enterprise.server.authz.RoleManagerLocal; @@ -31,34 +32,64 @@ import org.rhq.enterprise.server.util.LookupUtil; */ public class RoleGWTServiceImpl extends AbstractGWTServiceImpl implements RoleGWTService {
+ private static final long serialVersionUID = 1L; + private RoleManagerLocal roleManager = LookupUtil.getRoleManager();
public PageList<Role> findRolesByCriteria(RoleCriteria criteria) { - return SerialUtility.prepare(roleManager.findRolesByCriteria(getSessionSubject(), criteria), - "RoleService.findRolesByCriteria"); + try { + return SerialUtility.prepare(roleManager.findRolesByCriteria(getSessionSubject(), criteria), + "RoleService.findRolesByCriteria"); + } catch (Exception e) { + throw new RuntimeException(ThrowableUtil.getAllMessages(e)); + } }
public Role createRole(Role role) { - return SerialUtility.prepare(roleManager.createRole(getSessionSubject(), role), "RoleService.createRole"); + try { + return SerialUtility.prepare(roleManager.createRole(getSessionSubject(), role), "RoleService.createRole"); + } catch (Exception e) { + throw new RuntimeException(ThrowableUtil.getAllMessages(e)); + } }
public Role updateRole(Role role) { - return SerialUtility.prepare(roleManager.updateRole(getSessionSubject(), role), "RoleService.updateRole"); + try { + return SerialUtility.prepare(roleManager.updateRole(getSessionSubject(), role), "RoleService.updateRole"); + } catch (Exception e) { + throw new RuntimeException(ThrowableUtil.getAllMessages(e)); + } }
public void removeRoles(Integer[] roleIds) { - roleManager.deleteRoles(getSessionSubject(), roleIds); + try { + roleManager.deleteRoles(getSessionSubject(), roleIds); + } catch (Exception e) { + throw new RuntimeException(ThrowableUtil.getAllMessages(e)); + } }
public void setAssignedResourceGroups(int roleId, int[] resourceGroupIds) { - roleManager.setAssignedResourceGroups(getSessionSubject(), roleId, resourceGroupIds); + try { + roleManager.setAssignedResourceGroups(getSessionSubject(), roleId, resourceGroupIds); + } catch (Exception e) { + throw new RuntimeException(ThrowableUtil.getAllMessages(e)); + } }
public void setAssignedSubjects(int roleId, int[] subjectIds) { - roleManager.setAssignedSubjects(getSessionSubject(), roleId, subjectIds); + try { + roleManager.setAssignedSubjects(getSessionSubject(), roleId, subjectIds); + } catch (Exception e) { + throw new RuntimeException(ThrowableUtil.getAllMessages(e)); + } }
public void setAssignedRolesForSubject(int subjectId, int[] roleIds) { - roleManager.setAssignedSubjectRoles(getSessionSubject(), subjectId, roleIds); + try { + roleManager.setAssignedSubjectRoles(getSessionSubject(), subjectId, roleIds); + } catch (Exception e) { + throw new RuntimeException(ThrowableUtil.getAllMessages(e)); + } } } \ No newline at end of file diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/SearchGWTServiceImpl.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/SearchGWTServiceImpl.java index cff798c..ae72b4c 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/SearchGWTServiceImpl.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/SearchGWTServiceImpl.java @@ -24,6 +24,7 @@ import org.rhq.core.domain.criteria.SavedSearchCriteria; import org.rhq.core.domain.search.SavedSearch; import org.rhq.core.domain.search.SearchSubsystem; import org.rhq.core.domain.search.SearchSuggestion; +import org.rhq.core.util.exception.ThrowableUtil; import org.rhq.enterprise.gui.coregui.client.gwt.SearchGWTService; import org.rhq.enterprise.gui.coregui.server.util.SerialUtility; import org.rhq.enterprise.server.search.SavedSearchManagerLocal; @@ -35,36 +36,62 @@ import org.rhq.enterprise.server.util.LookupUtil; */ public class SearchGWTServiceImpl extends AbstractGWTServiceImpl implements SearchGWTService {
+ private static final long serialVersionUID = 1L; + private SavedSearchManagerLocal savedSearchManager = LookupUtil.getSavedSearchManager();
public List<SearchSuggestion> getTabAwareSuggestions(SearchSubsystem searchSubsystem, String expression, int caretPosition, String tab) { - SearchAssistManager searchAssistManager = new SearchAssistManager(getSessionSubject(), searchSubsystem); - List<SearchSuggestion> results = searchAssistManager.getTabAwareSuggestions(expression, caretPosition, tab); - return results; + try { + SearchAssistManager searchAssistManager = new SearchAssistManager(getSessionSubject(), searchSubsystem); + List<SearchSuggestion> results = searchAssistManager.getTabAwareSuggestions(expression, caretPosition, tab); + return results; + } catch (Exception e) { + throw new RuntimeException(ThrowableUtil.getAllMessages(e)); + } }
public List<SearchSuggestion> getSuggestions(SearchSubsystem searchSubsystem, String expression, int caretPosition) { - SearchAssistManager searchAssistManager = new SearchAssistManager(getSessionSubject(), searchSubsystem); - List<SearchSuggestion> results = searchAssistManager.getSuggestions(expression, caretPosition); - return results; + try { + SearchAssistManager searchAssistManager = new SearchAssistManager(getSessionSubject(), searchSubsystem); + List<SearchSuggestion> results = searchAssistManager.getSuggestions(expression, caretPosition); + return results; + } catch (Exception e) { + throw new RuntimeException(ThrowableUtil.getAllMessages(e)); + } }
public int createSavedSearch(SavedSearch savedSearch) { - return savedSearchManager.createSavedSearch(getSessionSubject(), savedSearch); + try { + return savedSearchManager.createSavedSearch(getSessionSubject(), savedSearch); + } catch (Exception e) { + throw new RuntimeException(ThrowableUtil.getAllMessages(e)); + } }
public void updateSavedSearch(SavedSearch savedSearch) { - savedSearchManager.updateSavedSearch(getSessionSubject(), savedSearch); + try { + savedSearchManager.updateSavedSearch(getSessionSubject(), savedSearch); + } catch (Exception e) { + throw new RuntimeException(ThrowableUtil.getAllMessages(e)); + } }
public void deleteSavedSearch(int savedSearchId) { - savedSearchManager.deleteSavedSearch(getSessionSubject(), savedSearchId); + try { + savedSearchManager.deleteSavedSearch(getSessionSubject(), savedSearchId); + } catch (Exception e) { + throw new RuntimeException(ThrowableUtil.getAllMessages(e)); + } }
public List<SavedSearch> findSavedSearchesByCriteria(SavedSearchCriteria criteria) { - return SerialUtility.prepare(savedSearchManager.findSavedSearchesByCriteria(getSessionSubject(), criteria), - "SearchService.findRolesByCriteria"); + try { + return SerialUtility.prepare(savedSearchManager.findSavedSearchesByCriteria(getSessionSubject(), criteria), + "SearchService.findRolesByCriteria"); + } catch (Exception e) { + throw new RuntimeException(ThrowableUtil.getAllMessages(e)); + } }
} \ No newline at end of file diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/SubjectGWTServiceImpl.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/SubjectGWTServiceImpl.java index 32e1d2c..6f86e45 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/SubjectGWTServiceImpl.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/SubjectGWTServiceImpl.java @@ -21,35 +21,53 @@ package org.rhq.enterprise.gui.coregui.server.gwt; import org.rhq.core.domain.auth.Subject; import org.rhq.core.domain.criteria.SubjectCriteria; import org.rhq.core.domain.util.PageList; +import org.rhq.core.util.exception.ThrowableUtil; import org.rhq.enterprise.gui.coregui.client.gwt.SubjectGWTService; import org.rhq.enterprise.gui.coregui.server.util.SerialUtility; import org.rhq.enterprise.server.auth.SubjectManagerLocal; import org.rhq.enterprise.server.exception.LoginException; import org.rhq.enterprise.server.util.LookupUtil;
- /** * @author Greg Hinkle */ public class SubjectGWTServiceImpl extends AbstractGWTServiceImpl implements SubjectGWTService {
+ private static final long serialVersionUID = 1L; + private SubjectManagerLocal subjectManager = LookupUtil.getSubjectManager();
public void changePassword(String username, String password) { - subjectManager.changePassword(getSessionSubject(), username, password); + try { + subjectManager.changePassword(getSessionSubject(), username, password); + } catch (Exception e) { + throw new RuntimeException(ThrowableUtil.getAllMessages(e)); + } }
public void createPrincipal(String username, String password) { - subjectManager.createPrincipal(getSessionSubject(), username, password); + try { + subjectManager.createPrincipal(getSessionSubject(), username, password); + } catch (Exception e) { + throw new RuntimeException(ThrowableUtil.getAllMessages(e)); + } }
public Subject createSubject(Subject subjectToCreate) { - return SerialUtility.prepare(subjectManager.createSubject(getSessionSubject(), subjectToCreate), + try { + return SerialUtility.prepare(subjectManager.createSubject(getSessionSubject(), subjectToCreate), "SubjectManager.createSubject"); + } catch (Exception e) { + throw new RuntimeException(ThrowableUtil.getAllMessages(e)); + } }
public void deleteSubjects(int[] subjectIds) { - subjectManager.deleteSubjects(getSessionSubject(),subjectIds); + try { + subjectManager.deleteSubjects(getSessionSubject(), subjectIds); + } catch (Exception e) { + throw new RuntimeException(ThrowableUtil.getAllMessages(e)); + } }
public Subject login(String username, String password) { @@ -61,15 +79,28 @@ public class SubjectGWTServiceImpl extends AbstractGWTServiceImpl implements Sub }
public void logout(Subject subject) { - subjectManager.logout(subject.getSessionId()); + try { + subjectManager.logout(subject.getSessionId()); + } catch (Exception e) { + throw new RuntimeException(ThrowableUtil.getAllMessages(e)); + } }
public Subject updateSubject(Subject subjectToModify) { - return SerialUtility.prepare(subjectManager.updateSubject(getSessionSubject(), subjectToModify), + try { + return SerialUtility.prepare(subjectManager.updateSubject(getSessionSubject(), subjectToModify), "SubjectManager.updateSubject"); + } catch (Exception e) { + throw new RuntimeException(ThrowableUtil.getAllMessages(e)); + } }
public PageList<Subject> findSubjectsByCriteria(SubjectCriteria criteria) { - return SerialUtility.prepare(subjectManager.findSubjectsByCriteria(getSessionSubject(), criteria), "SubjectManager.findSubjectsByCriteria"); + try { + return SerialUtility.prepare(subjectManager.findSubjectsByCriteria(getSessionSubject(), criteria), + "SubjectManager.findSubjectsByCriteria"); + } catch (Exception e) { + throw new RuntimeException(ThrowableUtil.getAllMessages(e)); + } } } diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/SystemGWTServiceImpl.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/SystemGWTServiceImpl.java index af12a6a..43431c7 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/SystemGWTServiceImpl.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/SystemGWTServiceImpl.java @@ -19,6 +19,7 @@ package org.rhq.enterprise.gui.coregui.server.gwt;
import org.rhq.core.domain.common.ProductInfo; +import org.rhq.core.util.exception.ThrowableUtil; import org.rhq.enterprise.gui.coregui.client.gwt.SystemGWTService; import org.rhq.enterprise.server.system.SystemManagerLocal; import org.rhq.enterprise.server.util.LookupUtil; @@ -27,9 +28,16 @@ import org.rhq.enterprise.server.util.LookupUtil; * @author Ian Springer */ public class SystemGWTServiceImpl extends AbstractGWTServiceImpl implements SystemGWTService { + + private static final long serialVersionUID = 1L; + private SystemManagerLocal systemManager = LookupUtil.getSystemManager();
public ProductInfo getProductInfo() { - return this.systemManager.getProductInfo(getSessionSubject()); + try { + return this.systemManager.getProductInfo(getSessionSubject()); + } catch (Exception e) { + throw new RuntimeException(ThrowableUtil.getAllMessages(e)); + } } } \ No newline at end of file diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/TagGWTServiceImpl.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/TagGWTServiceImpl.java index 20add85..7ab6941 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/TagGWTServiceImpl.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/TagGWTServiceImpl.java @@ -28,6 +28,7 @@ import org.rhq.core.domain.criteria.TagCriteria; import org.rhq.core.domain.tagging.Tag; import org.rhq.core.domain.tagging.compsite.TagReportComposite; import org.rhq.core.domain.util.PageList; +import org.rhq.core.util.exception.ThrowableUtil; import org.rhq.enterprise.gui.coregui.client.gwt.TagGWTService; import org.rhq.enterprise.gui.coregui.server.util.SerialUtility; import org.rhq.enterprise.server.tagging.TagManagerLocal; @@ -38,49 +39,90 @@ import org.rhq.enterprise.server.util.LookupUtil; */ public class TagGWTServiceImpl extends AbstractGWTServiceImpl implements TagGWTService {
+ private static final long serialVersionUID = 1L; + private TagManagerLocal tagManager = LookupUtil.getTagManager();
public PageList<Tag> findTagsByCriteria(TagCriteria tagCriteria) { - return SerialUtility.prepare(tagManager.findTagsByCriteria(getSessionSubject(), tagCriteria), + try { + return SerialUtility.prepare(tagManager.findTagsByCriteria(getSessionSubject(), tagCriteria), "TagService.findTagsByCriteria"); + } catch (Exception e) { + throw new RuntimeException(ThrowableUtil.getAllMessages(e)); + } }
public Set<Tag> addTags(Set<Tag> tags) { - return SerialUtility.prepare( - tagManager.addTags(getSessionSubject(), tags), - "TagService.addTags"); + try { + return SerialUtility.prepare(tagManager.addTags(getSessionSubject(), tags), "TagService.addTags"); + } catch (Exception e) { + throw new RuntimeException(ThrowableUtil.getAllMessages(e)); + } }
public void removeTags(Set<Tag> tags) { - tagManager.removeTags(getSessionSubject(), tags); + try { + tagManager.removeTags(getSessionSubject(), tags); + } catch (Exception e) { + throw new RuntimeException(ThrowableUtil.getAllMessages(e)); + } }
public void updateResourceTags(int resourceId, Set<Tag> tags) { - tagManager.updateResourceTags(getSessionSubject(), resourceId, tags); + try { + tagManager.updateResourceTags(getSessionSubject(), resourceId, tags); + } catch (Exception e) { + throw new RuntimeException(ThrowableUtil.getAllMessages(e)); + } }
public void updateResourceGroupTags(int resourceGroupId, Set<Tag> tags) { - tagManager.updateResourceGroupTags(getSessionSubject(), resourceGroupId, tags); + try { + tagManager.updateResourceGroupTags(getSessionSubject(), resourceGroupId, tags); + } catch (Exception e) { + throw new RuntimeException(ThrowableUtil.getAllMessages(e)); + } }
public void updateBundleTags(int bundleId, Set<Tag> tags) { - tagManager.updateBundleTags(getSessionSubject(), bundleId, tags); + try { + tagManager.updateBundleTags(getSessionSubject(), bundleId, tags); + } catch (Exception e) { + throw new RuntimeException(ThrowableUtil.getAllMessages(e)); + } }
public void updateBundleVersionTags(int bundleVersionId, Set<Tag> tags) { - tagManager.updateBundleVersionTags(getSessionSubject(), bundleVersionId, tags); + try { + tagManager.updateBundleVersionTags(getSessionSubject(), bundleVersionId, tags); + } catch (Exception e) { + throw new RuntimeException(ThrowableUtil.getAllMessages(e)); + } }
public void updateBundleDeploymentTags(int bundleDeploymentId, Set<Tag> tags) { - tagManager.updateBundleDeploymentTags(getSessionSubject(), bundleDeploymentId, tags); + try { + tagManager.updateBundleDeploymentTags(getSessionSubject(), bundleDeploymentId, tags); + } catch (Exception e) { + throw new RuntimeException(ThrowableUtil.getAllMessages(e)); + } }
public void updateBundleDestinationTags(int bundleDestinationId, Set<Tag> tags) { - tagManager.updateBundleDestinationTags(getSessionSubject(), bundleDestinationId, tags); + try { + tagManager.updateBundleDestinationTags(getSessionSubject(), bundleDestinationId, tags); + } catch (Exception e) { + throw new RuntimeException(ThrowableUtil.getAllMessages(e)); + } }
public PageList<TagReportComposite> findTagReportCompositesByCriteria(TagCriteria tagCriteria) { - return SerialUtility.prepare(tagManager.findTagReportCompositesByCriteria(getSessionSubject(), tagCriteria), + try { + return SerialUtility.prepare( + tagManager.findTagReportCompositesByCriteria(getSessionSubject(), tagCriteria), "TagService.findTagReportCompositesByCriteria"); + } catch (Exception e) { + throw new RuntimeException(ThrowableUtil.getAllMessages(e)); + } } }
commit 4027a3a94c8399ce08485df9043a4386f668cf2b Author: Jay Shaughnessy jshaughn@redhat.com Date: Fri Oct 1 09:57:45 2010 -0400
ResourceTree Authz work - support for locked nodes - support for autogroups for non-inventory managers. Now that AGs are backed by compat groups it's necessary for non-inv-managers to be able to create and access the private groups that they own. Private groups (aka subject-owned groups) are new, they are basically groups that are tagged with the creating subjectId. Those groups can be created (via a new slsb call) and fetched (via a new ResourceGroupCriteria filter) w/o inventory manager perms. - note: i had to move rhq_subject to auth-schema from authz-schema and slightly change the dbsetup order to make it ok for rhq_resource_group to reference rhq_subject. - schema spec bumped to 2.97 - added ResourceLineageComposite to combine Resource and locked/viewable info.
diff --git a/modules/core/dbutils/pom.xml b/modules/core/dbutils/pom.xml index 02aa606..4035ed5 100644 --- a/modules/core/dbutils/pom.xml +++ b/modules/core/dbutils/pom.xml @@ -22,7 +22,7 @@
<properties> <scm.module.path>modules/core/dbutils/</scm.module.path> - <db.schema.version>2.96</db.schema.version> + <db.schema.version>2.97</db.schema.version> </properties>
<dependencies> diff --git a/modules/core/dbutils/src/main/scripts/dbsetup-build.xml b/modules/core/dbutils/src/main/scripts/dbsetup-build.xml index f4993e5..b0ee520 100644 --- a/modules/core/dbutils/src/main/scripts/dbsetup-build.xml +++ b/modules/core/dbutils/src/main/scripts/dbsetup-build.xml @@ -39,7 +39,7 @@ To run the default target, you must set one of the following properties to true: <property name="dbsetup.scripts.dir" value="${basedir}/src/main/scripts/dbsetup" /> <property name="dbsetup.output.dir" value="${basedir}/target/dbsetup" /> <!-- away from classes so it doesn't go into the jar --> <!-- define the setup creation processing order. note, removals are done in the reverse order --> - <property name="dbsetup.subsystems" value="config,cluster,inventory,auth,authz,search,dashboard,operation,event,alert,sysconfig,scheduler,amps,measurement,content,resource-request,jms,obsolete"/> + <property name="dbsetup.subsystems" value="config,cluster,auth,inventory,authz,search,dashboard,operation,event,alert,sysconfig,scheduler,amps,measurement,content,resource-request,jms,obsolete"/> <property name="dbsetup.combined.schema" value="${dbsetup.output.dir}/all-schema.xml" /> <property name="dbsetup.combined.data" value="${dbsetup.output.dir}/all-data.xml" /> <property name="dbsetup.tstamp.file" value="${dbsetup.output.dir}/dbsetup-combine.tstamp" /> diff --git a/modules/core/dbutils/src/main/scripts/dbsetup/auth-schema.xml b/modules/core/dbutils/src/main/scripts/dbsetup/auth-schema.xml index d24b386..9b77256 100644 --- a/modules/core/dbutils/src/main/scripts/dbsetup/auth-schema.xml +++ b/modules/core/dbutils/src/main/scripts/dbsetup/auth-schema.xml @@ -16,5 +16,24 @@ </index>
</table> + + <table name="RHQ_SUBJECT"> + <column name="ID" default="sequence-only" initial="10001" + primarykey="true" required="true" type="INTEGER"/> + <column name="NAME" required="true" size="100" type="VARCHAR2"/> + <column name="CONFIGURATION_ID" type="INTEGER" references="RHQ_CONFIG"/> + <column name="FIRST_NAME" required="false" size="100" type="VARCHAR2"/> + <column name="LAST_NAME" required="false" size="100" type="VARCHAR2"/> + <column name="EMAIL_ADDRESS" size="100" type="VARCHAR2"/> + <column name="SMS_ADDRESS" size="100" type="VARCHAR2"/> + <column name="PHONE_NUMBER" size="100" type="VARCHAR2"/> + <column name="DEPARTMENT" size="100" type="VARCHAR2"/> + <column name="FACTIVE" required="true" type="BOOLEAN" default="true"/> + <column name="FSYSTEM" required="true" type="BOOLEAN" default="false"/> + + <index name="RHQ_SUBJECT_AUTH_KEY" unique="true"> + <field ref="NAME"/> + </index> + </table>
</dbsetup> diff --git a/modules/core/dbutils/src/main/scripts/dbsetup/authz-schema.xml b/modules/core/dbutils/src/main/scripts/dbsetup/authz-schema.xml index 8d9f738..b1385e9 100644 --- a/modules/core/dbutils/src/main/scripts/dbsetup/authz-schema.xml +++ b/modules/core/dbutils/src/main/scripts/dbsetup/authz-schema.xml @@ -50,25 +50,6 @@ </constraint> </table>
- <table name="RHQ_SUBJECT"> - <column name="ID" default="sequence-only" initial="10001" - primarykey="true" required="true" type="INTEGER"/> - <column name="NAME" required="true" size="100" type="VARCHAR2"/> - <column name="CONFIGURATION_ID" type="INTEGER" references="RHQ_CONFIG"/> - <column name="FIRST_NAME" required="false" size="100" type="VARCHAR2"/> - <column name="LAST_NAME" required="false" size="100" type="VARCHAR2"/> - <column name="EMAIL_ADDRESS" size="100" type="VARCHAR2"/> - <column name="SMS_ADDRESS" size="100" type="VARCHAR2"/> - <column name="PHONE_NUMBER" size="100" type="VARCHAR2"/> - <column name="DEPARTMENT" size="100" type="VARCHAR2"/> - <column name="FACTIVE" required="true" type="BOOLEAN" default="true"/> - <column name="FSYSTEM" required="true" type="BOOLEAN" default="false"/> - - <index name="RHQ_SUBJECT_AUTH_KEY" unique="true"> - <field ref="NAME"/> - </index> - </table> - <table name="RHQ_SUBJECT_ROLE_MAP"> <column name="SUBJECT_ID" required="true" type="INTEGER" references="RHQ_SUBJECT"/> <column name="ROLE_ID" required="true" type="INTEGER" references="RHQ_ROLE"/> diff --git a/modules/core/dbutils/src/main/scripts/dbsetup/inventory-schema.xml b/modules/core/dbutils/src/main/scripts/dbsetup/inventory-schema.xml index 6246880..5d89c2d 100644 --- a/modules/core/dbutils/src/main/scripts/dbsetup/inventory-schema.xml +++ b/modules/core/dbutils/src/main/scripts/dbsetup/inventory-schema.xml @@ -168,11 +168,14 @@
<column name="CATEGORY" type="VARCHAR2" size="20" required="true"/>
+ <!-- This is only set if this is a subject-owned group (like an autogroup) --> + <column name="SUBJECT_ID" type="INTEGER" references="RHQ_SUBJECT"/> + <!-- These two only set if this is a backing group for a resource auto-cluster --> <column name="CLUSTER_KEY" type="VARCHAR2" size="4000" required="false"/> <column name="CLUSTER_RESOURCE_GROUP_ID" type="INTEGER" references="RHQ_RESOURCE_GROUP"/>
- <!-- This only set if this is a backing group for a resource auto-group --> + <!-- This is only set if this is a backing group for a resource auto-group --> <column name="AUTO_GROUP_PARENT_RESOURCE_ID" type="INTEGER" references="RHQ_RESOURCE"/>
<column name="VISIBLE" type="BOOLEAN"/> diff --git a/modules/core/dbutils/src/main/scripts/dbupgrade/db-upgrade.xml b/modules/core/dbutils/src/main/scripts/dbupgrade/db-upgrade.xml index f0940ab..b477b09 100644 --- a/modules/core/dbutils/src/main/scripts/dbupgrade/db-upgrade.xml +++ b/modules/core/dbutils/src/main/scripts/dbupgrade/db-upgrade.xml @@ -3226,9 +3226,21 @@ REFERENCES RHQ_RESOURCE (ID) </statement> </schema-directSQL> - </schemaSpec> - + + <schemaSpec version="2.97"> + <!-- Support subject-owned groups (e.g. autogroups) --> + <schema-addColumn table="RHQ_RESOURCE_GROUP" column="SUBJECT_ID" columnType="INTEGER" /> + <schema-directSQL> + <statement desc="Creating RHQ_RESOURCE_GROUP foreign key relation to RHQ_SUBJECT for owned groups"> + ALTER TABLE RHQ_RESOURCE_GROUP + ADD CONSTRAINT RHQ_RG_SUBJECT_ID_FK + FOREIGN KEY (SUBJECT_ID) + REFERENCES RHQ_SUBJECT (ID) + </statement> + </schema-directSQL> + </schemaSpec> + </dbupgrade> </target> </project> diff --git a/modules/core/domain/src/main/java/org/rhq/core/domain/auth/Subject.java b/modules/core/domain/src/main/java/org/rhq/core/domain/auth/Subject.java index 477a128..4a93c1f 100644 --- a/modules/core/domain/src/main/java/org/rhq/core/domain/auth/Subject.java +++ b/modules/core/domain/src/main/java/org/rhq/core/domain/auth/Subject.java @@ -24,11 +24,13 @@ package org.rhq.core.domain.auth;
import java.io.Serializable; import java.util.HashSet; +import java.util.List; import java.util.Set;
import javax.persistence.CascadeType; import javax.persistence.Column; import javax.persistence.Entity; +import javax.persistence.FetchType; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; @@ -37,6 +39,7 @@ import javax.persistence.JoinTable; import javax.persistence.ManyToMany; import javax.persistence.NamedQueries; import javax.persistence.NamedQuery; +import javax.persistence.OneToMany; import javax.persistence.OneToOne; import javax.persistence.QueryHint; import javax.persistence.SequenceGenerator; @@ -47,6 +50,7 @@ import org.jetbrains.annotations.NotNull;
import org.rhq.core.domain.authz.Role; import org.rhq.core.domain.configuration.Configuration; +import org.rhq.core.domain.resource.group.ResourceGroup; import org.rhq.core.domain.util.Recordizable;
/** @@ -271,6 +275,10 @@ public class Subject implements Serializable, Recordizable { @ManyToMany private java.util.Set<Role> ldapRoles;
+ // When a subject is removed any owned groups should also be removed + @OneToMany(mappedBy = "subject", fetch = FetchType.LAZY) + private List<ResourceGroup> ownedGroups = null; + @Transient private Integer sessionId = null;
@@ -448,6 +456,14 @@ public class Subject implements Serializable, Recordizable { getLdapRoles().remove(role); }
+ public List<ResourceGroup> getOwnedGroups() { + return ownedGroups; + } + + public void setOwnedGroups(List<ResourceGroup> ownedGroups) { + this.ownedGroups = ownedGroups; + } + @Override public String toString() { return "org.rhq.core.domain.auth.Subject[id=" + id + ",name=" + name + "]"; diff --git a/modules/core/domain/src/main/java/org/rhq/core/domain/criteria/ResourceGroupCriteria.java b/modules/core/domain/src/main/java/org/rhq/core/domain/criteria/ResourceGroupCriteria.java index 2278c7f..835821a 100644 --- a/modules/core/domain/src/main/java/org/rhq/core/domain/criteria/ResourceGroupCriteria.java +++ b/modules/core/domain/src/main/java/org/rhq/core/domain/criteria/ResourceGroupCriteria.java @@ -46,6 +46,7 @@ public class ResourceGroupCriteria extends TaggedCriteria { private Boolean filterRecursive; private Integer filterResourceTypeId; // requires overrides private String filterResourceTypeName; // requires overrides + private Integer filterSubjectId; // requires overrides private Integer filterAutoGroupParentResourceId; // requires overrides private String filterPluginName; // requires overrides private GroupCategory filterGroupCategory; @@ -56,6 +57,7 @@ public class ResourceGroupCriteria extends TaggedCriteria { private Integer filterExplicitResourceTypeId; // requires overrides private String filterExplicitResourceTypeName; // requires overrides private Integer filterGroupDefinitionId; // requires overrides + private Boolean filterPrivate; /* if true, show only private groups for the calling user */ private Boolean filterVisible = true; /* only show visible groups by default */
private boolean fetchExplicitResources; @@ -74,6 +76,7 @@ public class ResourceGroupCriteria extends TaggedCriteria { filterOverrides.put("resourceTypeId", "resourceType.id = ?"); filterOverrides.put("resourceTypeName", "resourceType.name like ?"); filterOverrides.put("autoGroupParentResourceId", "autoGroupParentResource.id = ?"); + filterOverrides.put("subjectId", "subject.id = ?"); filterOverrides.put("pluginName", "resourceType.plugin like ?"); filterOverrides.put("downMemberCount", "" // + "id IN ( SELECT implicitGroup.id " // @@ -148,6 +151,14 @@ public class ResourceGroupCriteria extends TaggedCriteria { this.filterResourceTypeName = filterResourceTypeName; }
+ /** + * Requires MANAGE_INVENTORY. Use addFilterPrivate(true) to filter on the caller's private groups. + * @param filterSubjectId. + */ + public void addFilterSubjectId(Integer filterSubjectId) { + this.filterSubjectId = filterSubjectId; + } + public void addFilterAutoGroupParentResourceId(Integer filterAutoGroupParentResourceId) { this.filterAutoGroupParentResourceId = filterAutoGroupParentResourceId; } @@ -199,6 +210,14 @@ public class ResourceGroupCriteria extends TaggedCriteria { this.filterGroupDefinitionId = filterGroupDefinitionId; }
+ public void addFilterPrivate(Boolean filterPrivate) { + this.filterPrivate = filterPrivate; + } + + public boolean isFilterPrivate() { + return (Boolean.TRUE.equals(this.filterPrivate)); + } + public void addFilterVisible(Boolean filterVisible) { this.filterVisible = filterVisible; } @@ -258,8 +277,8 @@ public class ResourceGroupCriteria extends TaggedCriteria {
@Override public boolean isInventoryManagerRequired() { - // presently only inventory managers can view/manage group definitions - return this.filterGroupDefinitionId != null; + // presently only inventory managers can view/manage group definitions or see other user's private groups + return this.filterGroupDefinitionId != null || this.filterSubjectId != null; }
} diff --git a/modules/core/domain/src/main/java/org/rhq/core/domain/resource/composite/ResourceLineageComposite.java b/modules/core/domain/src/main/java/org/rhq/core/domain/resource/composite/ResourceLineageComposite.java new file mode 100644 index 0000000..713a558 --- /dev/null +++ b/modules/core/domain/src/main/java/org/rhq/core/domain/resource/composite/ResourceLineageComposite.java @@ -0,0 +1,51 @@ +/* + * RHQ Management Platform + * Copyright (C) 2005-2010 Red Hat, Inc. + * All rights reserved. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ +package org.rhq.core.domain.resource.composite; + +import java.io.Serializable; + +import org.rhq.core.domain.resource.Resource; + +/** + * @author jay shaughnessy + */ +public class ResourceLineageComposite implements Serializable { + private static final long serialVersionUID = 1L; + + private Resource resource; + private boolean isLocked; + + // for gwt serialization + @SuppressWarnings("unused") + private ResourceLineageComposite() { + } + + public ResourceLineageComposite(Resource resource, boolean isLocked) { + this.resource = resource; + this.isLocked = isLocked; + } + + public Resource getResource() { + return resource; + } + + public boolean isLocked() { + return isLocked; + } +} \ No newline at end of file diff --git a/modules/core/domain/src/main/java/org/rhq/core/domain/resource/group/ResourceGroup.java b/modules/core/domain/src/main/java/org/rhq/core/domain/resource/group/ResourceGroup.java index 46d6bcb..5250c11 100644 --- a/modules/core/domain/src/main/java/org/rhq/core/domain/resource/group/ResourceGroup.java +++ b/modules/core/domain/src/main/java/org/rhq/core/domain/resource/group/ResourceGroup.java @@ -55,6 +55,7 @@ import javax.xml.bind.annotation.XmlAccessorType; import org.jetbrains.annotations.NotNull;
import org.rhq.core.domain.alert.AlertDefinition; +import org.rhq.core.domain.auth.Subject; import org.rhq.core.domain.authz.Role; import org.rhq.core.domain.bundle.BundleDestination; import org.rhq.core.domain.configuration.group.AbstractGroupConfigurationUpdate; @@ -432,6 +433,12 @@ public class ResourceGroup extends Group { @ManyToOne private ResourceType resourceType; // if non-null, it implies a compatible group
+ // The group owner. Certain groups (like autogroups) are not associated with Roles. Instead, they + // are bound to specific owners. Subject-Owned groups defer to member-level authorization as needed. + @JoinColumn(name = "SUBJECT_ID", referencedColumnName = "ID", nullable = true) + @ManyToOne + private Subject subject = null; + @Column(name = "CLUSTER_KEY", nullable = true) private String clusterKey;
@@ -612,6 +619,25 @@ public class ResourceGroup extends Group { } }
+ public Subject getSubject() { + return subject; + } + + public void setSubject(Subject subject) { + if (this.id > 0 && null != this.subject) { + throw new IllegalStateException("The group owner can not be changed after the group is created."); + } + + this.subject = subject; + } + + /** + * @return true if this is a subject-owned group, private to the set subject + */ + public boolean isPrivateGroup() { + return (null != this.subject); + } + public String getClusterKey() { return clusterKey; } diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/ResourceGWTService.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/ResourceGWTService.java index b282e41..7ad683a 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/ResourceGWTService.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/ResourceGWTService.java @@ -32,6 +32,7 @@ import org.rhq.core.domain.resource.composite.DisambiguationReport; import org.rhq.core.domain.resource.composite.ProblemResourceComposite; import org.rhq.core.domain.resource.composite.RecentlyAddedResourceComposite; import org.rhq.core.domain.resource.composite.ResourceComposite; +import org.rhq.core.domain.resource.composite.ResourceLineageComposite; import org.rhq.core.domain.util.PageControl; import org.rhq.core.domain.util.PageList;
@@ -44,9 +45,7 @@ public interface ResourceGWTService extends RemoteService {
PageList<ResourceComposite> findResourceCompositesByCriteria(ResourceCriteria criteria);
- List<Resource> getResourceLineage(int resourceId); - - List<Resource> getResourceLineageAndSiblings(int resourceId); + List<ResourceLineageComposite> getResourceLineageAndSiblings(int resourceId);
List<RecentlyAddedResourceComposite> findRecentlyAddedResources(long ctime, int maxItems);
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/ResourceGroupGWTService.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/ResourceGroupGWTService.java index d968e19..f48fd96 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/ResourceGroupGWTService.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/ResourceGroupGWTService.java @@ -37,6 +37,14 @@ public interface ResourceGroupGWTService extends RemoteService {
GroupDefinition createGroupDefinition(GroupDefinition groupDefinition);
+ /** + * The owner will be set to the session subject. + * @param group + * @param resourceIds initial members + * @return + */ + ResourceGroup createPrivateResourceGroup(ResourceGroup group, int[] resourceIds); + ResourceGroup createResourceGroup(ResourceGroup group, int[] resourceIds);
void deleteGroupDefinitions(int[] groupDefinitionIds); diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/detail/AbstractTwoLevelTabSetView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/detail/AbstractTwoLevelTabSetView.java index 50700f2..33b22e9 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/detail/AbstractTwoLevelTabSetView.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/detail/AbstractTwoLevelTabSetView.java @@ -243,4 +243,9 @@ public abstract class AbstractTwoLevelTabSetView<T, U extends Layout> extends Lo public String getSubTabName() { return subTabName; } + + public String getBaseViewPath() { + return baseViewPath; + } + } 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 be66cb9..8d8db75 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 @@ -270,7 +270,12 @@ public class ResourceGroupDetailView extends AbstractTwoLevelTabSetView<Resource
ResourceGroupCriteria criteria = new ResourceGroupCriteria(); criteria.addFilterId(groupId); - criteria.addFilterVisible(null); + + // for autogroups we need to add more criteria + if (AUTO_GROUP_VIEW_PATH.equals(getBaseViewPath())) { + criteria.addFilterVisible(null); + criteria.addFilterPrivate(true); + }
GWTServiceLookup.getResourceGroupService().findResourceGroupCompositesByCriteria(criteria, new AsyncCallback<PageList<ResourceGroupComposite>>() { @@ -280,6 +285,11 @@ public class ResourceGroupDetailView extends AbstractTwoLevelTabSetView<Resource }
public void onSuccess(PageList<ResourceGroupComposite> result) { + if (result.isEmpty()) { + CoreGUI.getErrorHandler().handleError( + "Failed to load group composite for group with id " + groupId); + } + groupComposite = result.get(0); loadResourceType(groupComposite, viewPath, globalPermissions); } diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/CustomResourceTreeGrid.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/CustomResourceTreeGrid.java index 71e6c61..f1dad07 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/CustomResourceTreeGrid.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/CustomResourceTreeGrid.java @@ -23,6 +23,7 @@ import com.smartgwt.client.widgets.tree.TreeNode;
import org.rhq.core.domain.measurement.AvailabilityType; import org.rhq.core.domain.resource.Resource; +import org.rhq.enterprise.gui.coregui.client.inventory.resource.detail.ResourceTreeDatasource.ResourceTreeNode; import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableTreeGrid;
/** @@ -40,15 +41,19 @@ public class CustomResourceTreeGrid extends LocatableTreeGrid { if (record instanceof TreeNode) { boolean open = getTree().isOpen((TreeNode) record);
- if (record instanceof ResourceTreeDatasource.ResourceTreeNode) { - Resource resource = ((ResourceTreeDatasource.ResourceTreeNode) record).getResource(); + if (record instanceof ResourceTreeNode) { + ResourceTreeNode node = (ResourceTreeNode) record;
- boolean up = resource.getCurrentAvailability().getAvailabilityType() == AvailabilityType.UP; + if (node.isLocked()) { + return "global/Locked_16.png";
- String category = resource.getResourceType().getCategory().getDisplayName(); - - return "types/" + category + "_" + (up ? "up" : "down") + "_16.png"; + } else { + Resource resource = ((ResourceTreeDatasource.ResourceTreeNode) record).getResource(); + String category = resource.getResourceType().getCategory().getDisplayName(); + boolean up = resource.getCurrentAvailability().getAvailabilityType() == AvailabilityType.UP;
+ return "types/" + category + "_" + (up ? "up" : "down") + "_16.png"; + } } else { return "resources/folder_group_" + (open ? "opened" : "closed") + ".png"; } diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/ResourceTreeDatasource.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/ResourceTreeDatasource.java index e577491..1c73198 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/ResourceTreeDatasource.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/ResourceTreeDatasource.java @@ -30,7 +30,6 @@ import com.smartgwt.client.data.DSRequest; import com.smartgwt.client.data.DSResponse; import com.smartgwt.client.data.DataSource; import com.smartgwt.client.data.DataSourceField; -import com.smartgwt.client.data.fields.DataSourceImageField; import com.smartgwt.client.data.fields.DataSourceTextField; import com.smartgwt.client.rpc.RPCResponse; import com.smartgwt.client.types.DSDataFormat; @@ -38,8 +37,6 @@ import com.smartgwt.client.types.DSProtocol; import com.smartgwt.client.widgets.tree.TreeNode;
import org.rhq.core.domain.criteria.ResourceCriteria; -import org.rhq.core.domain.measurement.AvailabilityType; -import org.rhq.core.domain.measurement.ResourceAvailability; import org.rhq.core.domain.resource.Resource; import org.rhq.core.domain.resource.ResourceCategory; import org.rhq.core.domain.resource.ResourceSubCategory; @@ -61,15 +58,17 @@ import org.rhq.enterprise.gui.coregui.client.util.StringUtility; */ public class ResourceTreeDatasource extends DataSource { private List<Resource> initialData; + private List<Resource> lockedData;
private ResourceGWTServiceAsync resourceService = GWTServiceLookup.getResourceService();
- public ResourceTreeDatasource(List<Resource> initialData) { + public ResourceTreeDatasource(List<Resource> initialData, List<Resource> lockedData) { setClientOnly(false); setDataProtocol(DSProtocol.CLIENTCUSTOM); setDataFormat(DSDataFormat.CUSTOM);
this.initialData = initialData; + this.lockedData = (null != lockedData) ? lockedData : new ArrayList<Resource>();
DataSourceField idDataField = new DataSourceTextField("id", "ID"); idDataField.setPrimaryKey(true); @@ -80,22 +79,12 @@ public class ResourceTreeDatasource extends DataSource { DataSourceTextField descriptionDataField = new DataSourceTextField("description", "Description"); descriptionDataField.setCanEdit(false);
- DataSourceImageField availabilityDataField = new DataSourceImageField("currentAvailability", "Availability"); - descriptionDataField.setCanEdit(false); - DataSourceTextField parentIdField = new DataSourceTextField("parentId", "Parent ID"); parentIdField.setForeignKey("id"); - // parentIdField.setRootValue(rootId); - - // DataSourceTextField parentKeyField = new DataSourceTextField("parentKey", "Parent KEY"); - // parentKeyField.setForeignKey("id"); - // parentKeyField.setRootValue(rootId); - - // nameDataField.setType(FieldType.);
setDropExtraFields(false);
- setFields(idDataField, nameDataField, descriptionDataField, availabilityDataField); + setFields(idDataField, nameDataField, descriptionDataField); }
@Override @@ -127,7 +116,7 @@ public class ResourceTreeDatasource extends DataSource { }
public void executeFetch(final String requestId, final DSRequest request, final DSResponse response) { - final long start = System.currentTimeMillis(); + //final long start = System.currentTimeMillis();
String parentResourceId = request.getCriteria().getAttribute("parentId"); // System.out.println("All attributes: " + Arrays.toString(request.getCriteria().getAttributes())); @@ -173,7 +162,7 @@ public class ResourceTreeDatasource extends DataSource { ResourceTypeRepository.MetadataType.subCategory), new ResourceTypeRepository.ResourceTypeLoadedCallback() { public void onResourceTypeLoaded(List<Resource> result) { - TreeNode[] treeNodes = buildNodes(result); + TreeNode[] treeNodes = buildNodes(result, lockedData); response.setData(treeNodes); processResponse(requestId, response); response.setStatus(DSResponse.STATUS_SUCCESS); @@ -187,11 +176,11 @@ public class ResourceTreeDatasource extends DataSource { * @param resources * @return */ - public static TreeNode[] buildNodes(List<Resource> resources) { + public static TreeNode[] buildNodes(List<Resource> resources, List<Resource> lockedData) { ResourceTreeNode[] nodes = new ResourceTreeNode[resources.size()]; for (int i = 0; i < resources.size(); i++) { Resource resource = resources.get(i); - ResourceTreeNode node = new ResourceTreeNode(resource); + ResourceTreeNode node = new ResourceTreeNode(resource, lockedData.contains(resource)); nodes[i] = node; }
@@ -352,9 +341,11 @@ public class ResourceTreeDatasource extends DataSource {
public static class ResourceTreeNode extends EnhancedTreeNode { private Resource resource; + private boolean isLocked;
- private ResourceTreeNode(Resource resource) { + private ResourceTreeNode(Resource resource, boolean isLocked) { this.resource = resource; + this.isLocked = isLocked;
String id = idOf(resource); setID(id); @@ -371,21 +362,12 @@ public class ResourceTreeDatasource extends DataSource { setParentID(parentId); setAttribute(Attributes.PARENT_ID, parentId);
- // System.out.println(id + " / " + parentId); - // setAttribute("parentKey", resource.getParentResource() == null ? 0 : (resource.getParentResource().getId() + resource.getResourceType().getName())); - String name = resource.getName(); setName(name); setAttribute(Attributes.NAME, name);
setAttribute(Attributes.DESCRIPTION, resource.getDescription());
- ResourceAvailability currentAvail = resource.getCurrentAvailability(); - setAttribute( - "currentAvailability", - (null != currentAvail && currentAvail.getAvailabilityType() == AvailabilityType.UP) ? "/images/icons/availability_green_16.png" - : "/images/icons/availability_red_16.png"); - Set<ResourceType> childTypes = resource.getResourceType().getChildResourceTypes(); setIsFolder((childTypes != null && !childTypes.isEmpty())); } @@ -394,6 +376,10 @@ public class ResourceTreeDatasource extends DataSource { return this.resource; }
+ public boolean isLocked() { + return isLocked; + } + public static String idOf(Resource resource) { return idOf(resource.getId()); } diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/ResourceTreeView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/ResourceTreeView.java index 0d16bea..4cea21b 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/ResourceTreeView.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/ResourceTreeView.java @@ -63,6 +63,7 @@ import org.rhq.core.domain.operation.OperationDefinition; 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.ResourceLineageComposite; import org.rhq.core.domain.resource.group.ResourceGroup; import org.rhq.core.domain.util.PageList; import org.rhq.enterprise.gui.coregui.client.Breadcrumb; @@ -142,14 +143,20 @@ public class ResourceTreeView extends LocatableVLayout { if (!selectionEvent.isRightButtonDown() && selectionEvent.getState()) { ListGridRecord selectedRecord = treeGrid.getSelectedRecord(); if (selectedRecord instanceof ResourceTreeNode) { - System.out.println("AutoGroup Node selected in tree: " + selectedRecord); - ResourceTreeNode resourceNode = (ResourceTreeNode) selectedRecord; - selectedNodeId = resourceNode.getID(); - String viewPath = "Resource/" + resourceNode.getResource().getId(); - String currentViewPath = History.getToken(); - if (!currentViewPath.startsWith(viewPath)) { - CoreGUI.goToView(viewPath); + + if (!resourceNode.isLocked()) { + System.out.println("Resource Node selected in tree: " + selectedRecord); + + selectedNodeId = resourceNode.getID(); + String viewPath = "Resource/" + resourceNode.getResource().getId(); + String currentViewPath = History.getToken(); + if (!currentViewPath.startsWith(viewPath)) { + CoreGUI.goToView(viewPath); + } + } else { + // TODO: Can we select the previous node? Or do we need a "Locked" hover etc... + treeGrid.deselectAllRecords(); } } else if (selectedRecord instanceof AutoGroupTreeNode) { System.out.println("AutoGroup Node selected in tree: " + selectedRecord); @@ -183,7 +190,9 @@ public class ResourceTreeView extends LocatableVLayout { if (event.getNode() instanceof AutoGroupTreeNode) { showContextMenu((AutoGroupTreeNode) event.getNode()); } else if (event.getNode() instanceof ResourceTreeNode) { - showContextMenu((ResourceTreeNode) event.getNode()); + if (!((ResourceTreeNode) event.getNode()).isLocked()) { + showContextMenu((ResourceTreeNode) event.getNode()); + } } } }); @@ -207,6 +216,7 @@ public class ResourceTreeView extends LocatableVLayout {
// get the backing group if it exists, otherwise create the group ResourceGroupCriteria criteria = new ResourceGroupCriteria(); + criteria.addFilterPrivate(true); criteria.addFilterResourceTypeId(agNode.getResourceType().getId()); criteria.addFilterAutoGroupParentResourceId(agNode.getParentResource().getId()); criteria.addFilterVisible(false); @@ -224,8 +234,7 @@ public class ResourceTreeView extends LocatableVLayout { backingGroup.setAutoGroupParentResource(agNode.getParentResource()); backingGroup.setResourceType(agNode.getResourceType()); backingGroup.setVisible(false); - backingGroup.setRecursive(false); - resourceGroupService.createResourceGroup(backingGroup, childIds, + resourceGroupService.createPrivateResourceGroup(backingGroup, childIds, new AsyncCallback<ResourceGroup>() { public void onFailure(Throwable caught) { CoreGUI.getErrorHandler().handleError("Failed to create resource autogroup", caught); @@ -596,65 +605,79 @@ public class ResourceTreeView extends LocatableVLayout { selectedNodeId = ResourceTreeNode.idOf(selectedResourceId);
final ResourceGWTServiceAsync resourceService = GWTServiceLookup.getResourceService(); - // This is an expensive call, but loads all nodes that are visible in the tree given a selected resource - resourceService.getResourceLineageAndSiblings(selectedResourceId, new AsyncCallback<List<Resource>>() { - public void onFailure(Throwable caught) { - CoreGUI.getErrorHandler().handleError("Failed to lookup platform for tree", caught); - }
- public void onSuccess(List<Resource> result) { - Resource root = result.get(0); + // This is an expensive call, but loads all nodes that are visible in the tree given a selected resource + resourceService.getResourceLineageAndSiblings(selectedResourceId, + new AsyncCallback<List<ResourceLineageComposite>>() {
- if (!root.equals(ResourceTreeView.this.rootResource)) { + public void onFailure(Throwable caught) { + CoreGUI.getErrorHandler().handleError("Failed to lookup platform for tree", caught); + }
- if (treeGrid != null) { - treeGrid.destroy(); - } - buildTree(); + public void onSuccess(List<ResourceLineageComposite> result) { + Resource root = result.get(0).getResource();
- setRootResource(root); + final List<Resource> lineage = new ArrayList<Resource>(result.size()); + final List<Resource> lockedData = new ArrayList<Resource>();
- // seed datasource with initial resource list - ResourceTreeDatasource dataSource = new ResourceTreeDatasource(result); - treeGrid.setDataSource(dataSource); + for (ResourceLineageComposite r : result) { + lineage.add(r.getResource()); + if (r.isLocked()) { + lockedData.add(r.getResource()); + } + }
- addMember(treeGrid); + if (!root.equals(ResourceTreeView.this.rootResource)) {
- treeGrid.fetchData(treeGrid.getCriteria(), new DSCallback() { - public void execute(DSResponse response, Object rawData, DSRequest request) { - System.out.println("Done fetching data for tree."); - updateSelection(); + if (treeGrid != null) { + treeGrid.destroy(); } - }); + buildTree();
- updateSelection(); + setRootResource(root);
- } else { - ResourceTypeRepository.Cache.getInstance().loadResourceTypes( - result, - EnumSet.of(ResourceTypeRepository.MetadataType.operations, - ResourceTypeRepository.MetadataType.children, - ResourceTypeRepository.MetadataType.subCategory), - new ResourceTypeRepository.ResourceTypeLoadedCallback() { - public void onResourceTypeLoaded(List<Resource> result) { - treeGrid.getTree().linkNodes(ResourceTreeDatasource.buildNodes(result)); - - TreeNode selectedNode = treeGrid.getTree().findById(selectedNodeId); - if (selectedNode != null) { - updateSelection(); - - } else { - CoreGUI.getMessageCenter().notify( - new Message("Failed to select Resource [" + selectedResourceId + "] in tree.", - Message.Severity.Warning)); - } + // seed datasource with initial resource list and which ancestor resources are locked + ResourceTreeDatasource dataSource = new ResourceTreeDatasource(lineage, lockedData); + treeGrid.setDataSource(dataSource);
+ addMember(treeGrid); + + treeGrid.fetchData(treeGrid.getCriteria(), new DSCallback() { + public void execute(DSResponse response, Object rawData, DSRequest request) { + System.out.println("Done fetching data for tree."); + updateSelection(); } });
+ updateSelection(); + + } else { + ResourceTypeRepository.Cache.getInstance().loadResourceTypes( + lineage, + EnumSet.of(ResourceTypeRepository.MetadataType.operations, + ResourceTypeRepository.MetadataType.children, + ResourceTypeRepository.MetadataType.subCategory), + new ResourceTypeRepository.ResourceTypeLoadedCallback() { + public void onResourceTypeLoaded(List<Resource> result) { + treeGrid.getTree() + .linkNodes(ResourceTreeDatasource.buildNodes(lineage, lockedData)); + + TreeNode selectedNode = treeGrid.getTree().findById(selectedNodeId); + if (selectedNode != null) { + updateSelection(); + + } else { + CoreGUI.getMessageCenter().notify( + new Message("Failed to select Resource [" + selectedResourceId + + "] in tree.", Message.Severity.Warning)); + } + + } + }); + + } } - } - }); + }); }
public void setSelectedAutoGroup(final Integer selectedAutoGroupId) { diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ResourceGWTServiceImpl.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ResourceGWTServiceImpl.java index 66a25be..2e2f6d6 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ResourceGWTServiceImpl.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ResourceGWTServiceImpl.java @@ -39,6 +39,7 @@ import org.rhq.core.domain.resource.composite.DisambiguationReport; import org.rhq.core.domain.resource.composite.ProblemResourceComposite; import org.rhq.core.domain.resource.composite.RecentlyAddedResourceComposite; import org.rhq.core.domain.resource.composite.ResourceComposite; +import org.rhq.core.domain.resource.composite.ResourceLineageComposite; import org.rhq.core.domain.util.PageControl; import org.rhq.core.domain.util.PageList; import org.rhq.core.util.IntExtractor; @@ -167,13 +168,8 @@ public class ResourceGWTServiceImpl extends AbstractGWTServiceImpl implements Re } };
- public List<Resource> getResourceLineage(int resourceId) { - return SerialUtility.prepare(resourceManager.getResourceLineage(resourceId), - "ResourceService.getResourceLineage"); - } - - public List<Resource> getResourceLineageAndSiblings(int resourceId) { - return SerialUtility.prepare(resourceManager.getResourceLineageAndSiblings(resourceId), + public List<ResourceLineageComposite> getResourceLineageAndSiblings(int resourceId) { + return SerialUtility.prepare(resourceManager.getResourceLineageAndSiblings(getSessionSubject(), resourceId), "ResourceService.getResourceLineageAndSiblings"); }
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ResourceGroupGWTServiceImpl.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ResourceGroupGWTServiceImpl.java index 1ddecc3..2015091 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ResourceGroupGWTServiceImpl.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ResourceGroupGWTServiceImpl.java @@ -87,6 +87,17 @@ public class ResourceGroupGWTServiceImpl extends AbstractGWTServiceImpl implemen } }
+ public ResourceGroup createPrivateResourceGroup(ResourceGroup group, int[] resourceIds) { + try { + Subject user = getSessionSubject(); + group = groupManager.createPrivateResourceGroup(user, group); + groupManager.setAssignedResources(user, group.getId(), resourceIds, true); + return SerialUtility.prepare(group, "ResourceGroupService.createResourceGroup"); + } catch (Throwable t) { + throw new RuntimeException(ThrowableUtil.getAllMessages(t)); + } + } + public ResourceGroup createResourceGroup(ResourceGroup group, int[] resourceIds) { try { Subject user = getSessionSubject(); diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/auth/SubjectManagerBean.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/auth/SubjectManagerBean.java index 4e1a53d..37ec2c9 100644 --- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/auth/SubjectManagerBean.java +++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/auth/SubjectManagerBean.java @@ -48,6 +48,7 @@ import org.rhq.core.domain.authz.Permission; import org.rhq.core.domain.authz.Role; import org.rhq.core.domain.configuration.Configuration; import org.rhq.core.domain.criteria.SubjectCriteria; +import org.rhq.core.domain.resource.group.ResourceGroup; import org.rhq.core.domain.util.PageControl; import org.rhq.core.domain.util.PageList; import org.rhq.core.server.PersistenceUtility; @@ -58,6 +59,7 @@ import org.rhq.enterprise.server.authz.PermissionException; import org.rhq.enterprise.server.authz.RequiredPermission; import org.rhq.enterprise.server.core.CustomJaasDeploymentServiceMBean; import org.rhq.enterprise.server.exception.LoginException; +import org.rhq.enterprise.server.resource.group.ResourceGroupManagerLocal; import org.rhq.enterprise.server.system.SystemManagerLocal; import org.rhq.enterprise.server.util.CriteriaQueryGenerator; import org.rhq.enterprise.server.util.CriteriaQueryRunner; @@ -69,7 +71,6 @@ import org.rhq.enterprise.server.util.CriteriaQueryRunner; */ @Stateless public class SubjectManagerBean implements SubjectManagerLocal, SubjectManagerRemote { - @SuppressWarnings("unused") private final Log log = LogFactory.getLog(SubjectManagerBean.class);
@PersistenceContext(unitName = RHQConstants.PERSISTENCE_UNIT_NAME) @@ -79,6 +80,10 @@ public class SubjectManagerBean implements SubjectManagerLocal, SubjectManagerRe private AuthorizationManagerLocal authorizationManager;
@EJB + @IgnoreDependency + private ResourceGroupManagerLocal resourceGroupManager; + + @EJB private SystemManagerLocal systemManager;
@EJB @@ -508,6 +513,25 @@ public class SubjectManagerBean implements SubjectManagerLocal, SubjectManagerRe deletePrincipal(subject, doomedSubject); }
+ // one more thing, delete any owned groups + List<ResourceGroup> ownedGroups = doomedSubject.getOwnedGroups(); + if (!ownedGroups.isEmpty()) { + int size = ownedGroups.size(); + int[] ownedGroupIds = new int[size]; + for (int i = 0; (i < size); ++i) { + ownedGroupIds[i] = ownedGroups.get(i).getId(); + } + try { + resourceGroupManager.deleteResourceGroups(subject, ownedGroupIds); + } catch (Throwable t) { + if (log.isDebugEnabled()) { + log.error("Error deleting owned group " + ownedGroupIds, t); + } else { + log.error("Error deleting owned group " + ownedGroupIds + ": " + t.getMessage()); + } + } + } + deleteSubject(subject, doomedSubject); }
diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/authz/AuthorizationManagerBean.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/authz/AuthorizationManagerBean.java index d675177..1a14a56 100644 --- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/authz/AuthorizationManagerBean.java +++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/authz/AuthorizationManagerBean.java @@ -18,6 +18,7 @@ */ package org.rhq.enterprise.server.authz;
+import java.util.ArrayList; import java.util.Collection; import java.util.EnumSet; import java.util.List; @@ -32,6 +33,8 @@ import javax.persistence.Query; import org.rhq.core.domain.auth.Subject; import org.rhq.core.domain.authz.Permission; import org.rhq.core.domain.authz.Permission.Target; +import org.rhq.core.domain.resource.Resource; +import org.rhq.core.domain.resource.group.ResourceGroup; import org.rhq.enterprise.server.RHQConstants;
/** @@ -117,12 +120,33 @@ public class AuthorizationManagerBean implements AuthorizationManagerLocal { return true; }
- Query query = entityManager.createNamedQuery(Subject.QUERY_HAS_GROUP_PERMISSION); - query.setParameter("subject", subject); - query.setParameter("permission", permission); - query.setParameter("groupId", groupId); - long count = (Long) query.getSingleResult(); - return (count != 0); + ResourceGroup group = entityManager.find(ResourceGroup.class, groupId); + Subject owner = group.getSubject(); + + if (null == owner) { + // role-owned group + Query query = entityManager.createNamedQuery(Subject.QUERY_HAS_GROUP_PERMISSION); + query.setParameter("subject", subject); + query.setParameter("permission", permission); + query.setParameter("groupId", groupId); + long count = (Long) query.getSingleResult(); + return (count != 0); + + } else { + // don't let a user other than the owner do anything with this group + if (!subject.equals(owner)) { + return false; + } + + // subject-owned group, requires perm check against each group member + Set<Resource> members = group.getExplicitResources(); + List<Integer> memberIds = new ArrayList<Integer>(members.size()); + for (Resource member : members) { + memberIds.add(member.getId()); + } + + return hasResourcePermission(owner, permission, memberIds); + } }
public boolean hasResourcePermission(Subject subject, Permission permission, int resourceId) { 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 0528b06..bf213c0 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 @@ -94,6 +94,7 @@ import org.rhq.core.domain.resource.composite.ResourceComposite; import org.rhq.core.domain.resource.composite.ResourceHealthComposite; import org.rhq.core.domain.resource.composite.ResourceIdFlyWeight; import org.rhq.core.domain.resource.composite.ResourceInstallCount; +import org.rhq.core.domain.resource.composite.ResourceLineageComposite; import org.rhq.core.domain.resource.composite.ResourcePermission; import org.rhq.core.domain.resource.composite.ResourceWithAvailability; import org.rhq.core.domain.resource.flyweight.FlyweightCache; @@ -721,27 +722,68 @@ public class ResourceManagerBean implements ResourceManagerLocal, ResourceManage return resourceLineage; }
- public List<Resource> getResourceLineageAndSiblings(int resourceId) { - List<Resource> resourceLineage = getResourceLineage(resourceId); - List<Resource> result = new LinkedList<Resource>(); + public List<ResourceLineageComposite> getResourceLineageAndSiblings(Subject subject, int resourceId) { + boolean isInventoryManager = authorizationManager.isInventoryManager(subject);
- Resource platform = resourceLineage.get(0); - result.add(platform); - for (Resource resource : resourceLineage) { - if (resource.getParentResource() != null) { - // This ensures Hibernate actually fetches the parent Resource. - resource.getParentResource().getId(); - } - Set<Resource> childResources = resource.getChildResources(); - result.addAll(childResources); - for (Resource childResource : childResources) { - // This ensures Hibernate actually fetches the parent Resource. - childResource.getParentResource().getId(); - Set<Resource> grandchildResources = childResource.getChildResources(); - result.addAll(grandchildResources); - for (Resource grandchildResource : grandchildResources) { + // get the raw resource lineage up to the platform. We'll check the auth below + List<Resource> rawResourceLineage = getResourceLineage(resourceId); + int depth = rawResourceLineage.size(); + Resource parent = (depth > 1) ? rawResourceLineage.get(depth - 2) : null; + + // record which of the raw ancestry is locked from view + List<ResourceLineageComposite> resourceLineage = new ArrayList<ResourceLineageComposite>(rawResourceLineage + .size()); + for (Resource resource : rawResourceLineage) { + resourceLineage.add(new ResourceLineageComposite(resource, !authorizationManager.canViewResource(subject, + resource.getId()))); + } + + // fill out the tree, including only the direct ancestors and all viewable relations + List<ResourceLineageComposite> result = new LinkedList<ResourceLineageComposite>(); + + for (ResourceLineageComposite ancestor : resourceLineage) { + // always include a direct ancestor + result.add(ancestor); + + // if the ancestor is not locked, include relevant children. Also, always show viewable + // siblings of the target resource. + if (!ancestor.isLocked() || ancestor.getResource() == parent) { + + // get children + Set<Resource> children = ancestor.getResource().getChildResources(); + // only add the viewable children + List<Resource> viewableChildren = new ArrayList<Resource>(children.size()); + for (Resource child : children) { + boolean isCommitted = (child.getInventoryStatus() == InventoryStatus.COMMITTED); + boolean isViewable = (isInventoryManager || authorizationManager.canViewResource(subject, child + .getId())); + if (isCommitted && isViewable) { + // if not a direct ancestor add to the list (direct ancestors already added by default) + if (!rawResourceLineage.contains(child)) { + child.getParentResource().getId(); + result.add(new ResourceLineageComposite(child, false)); + } + viewableChildren.add(child); + } + } + + // get grandchildren + for (Resource child : viewableChildren) { // This ensures Hibernate actually fetches the parent Resource. - grandchildResource.getParentResource().getId(); + child.getParentResource().getId(); + Set<Resource> grandChildren = child.getChildResources(); + for (Resource grandChild : grandChildren) { + boolean isCommitted = (grandChild.getInventoryStatus() == InventoryStatus.COMMITTED); + boolean isViewable = (isInventoryManager || authorizationManager.canViewResource(subject, + grandChild.getId())); + if (isCommitted && isViewable) { + // if not a direct ancestor add to the list (direct ancestors already added by default) + if (!rawResourceLineage.contains(grandChild)) { + grandChild.getParentResource().getId(); + result.add(new ResourceLineageComposite(grandChild, false)); + } + } + } } } } diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/ResourceManagerLocal.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/ResourceManagerLocal.java index 78ece78..6f2ae41 100644 --- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/ResourceManagerLocal.java +++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/ResourceManagerLocal.java @@ -43,6 +43,7 @@ import org.rhq.core.domain.resource.composite.ResourceComposite; import org.rhq.core.domain.resource.composite.ResourceHealthComposite; import org.rhq.core.domain.resource.composite.ResourceIdFlyWeight; import org.rhq.core.domain.resource.composite.ResourceInstallCount; +import org.rhq.core.domain.resource.composite.ResourceLineageComposite; import org.rhq.core.domain.resource.composite.ResourceWithAvailability; import org.rhq.core.domain.resource.flyweight.ResourceFlyweight; import org.rhq.core.domain.resource.group.ResourceGroup; @@ -156,11 +157,13 @@ public interface ResourceManagerLocal {
/** * Returns the lineage of a resource plus all the siblings of the resources in the lineage. This is - * useful for prepopulating all the resources visible in an expanded tree. + * useful for prepopulating all the resources visible in an expanded tree. Composites are returned + * that indicate whether the resource is viewable or should be locked in the tree. + * * @param resourceId id of resource - * @return resoure lineage and siblings + * @return resource lineage and siblings */ - List<Resource> getResourceLineageAndSiblings(int resourceId); + List<ResourceLineageComposite> getResourceLineageAndSiblings(Subject subject, int resourceId);
/** * Looks up the root of a subtree in the inventory. This will generally find the platform on which diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/group/ResourceGroupManagerBean.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/group/ResourceGroupManagerBean.java index 0e7500f..f75d32d 100644 --- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/group/ResourceGroupManagerBean.java +++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/group/ResourceGroupManagerBean.java @@ -146,6 +146,15 @@ public class ResourceGroupManagerBean implements ResourceGroupManagerLocal, Reso } }
+ public ResourceGroup createPrivateResourceGroup(Subject subject, // + @XmlJavaTypeAdapter(ResourceGroupAdapter.class) ResourceGroup group) { + + group.setSubject(subject); + group.setRecursive(false); + + return resourceGroupManager.createResourceGroup(subjectManager.getOverlord(), group); + } + @RequiredPermission(Permission.MANAGE_INVENTORY) public ResourceGroup createResourceGroup(Subject user, // @XmlJavaTypeAdapter(ResourceGroupAdapter.class) ResourceGroup group) { @@ -1017,8 +1026,9 @@ public class ResourceGroupManagerBean implements ResourceGroupManagerLocal, Reso */ public PageList<ResourceGroupComposite> findResourceGroupCompositesByCriteria(Subject subject, ResourceGroupCriteria criteria) { - CriteriaQueryGenerator generator = new CriteriaQueryGenerator(subject, criteria); - ; + + CriteriaQueryGenerator generator = getCriteriaQueryGenerator(subject, criteria); + String replacementSelectList = "" + " new org.rhq.core.domain.resource.group.composite.ResourceGroupComposite( " + " ( SELECT COUNT(avail) FROM resourcegroup.explicitResources res JOIN res.currentAvailability avail ) AS explicitCount," @@ -1028,17 +1038,6 @@ public class ResourceGroupManagerBean implements ResourceGroupManagerLocal, Reso + " resourcegroup ) "; generator.alterProjection(replacementSelectList);
- if (criteria.isSecurityManagerRequired() - && !authorizationManager.hasGlobalPermission(subject, Permission.MANAGE_SECURITY)) { - throw new PermissionException("Subject [" + subject.getName() - + "] requires SecurityManager permission for requested query criteria."); - } - - if (authorizationManager.isInventoryManager(subject) == false) { - generator.setAuthorizationResourceFragment(CriteriaQueryGenerator.AuthorizationTokenType.GROUP, null, - subject.getId()); - } - CriteriaQueryRunner<ResourceGroupComposite> queryRunner = new CriteriaQueryRunner<ResourceGroupComposite>( criteria, generator, entityManager); PageList<ResourceGroupComposite> results = queryRunner.execute(); @@ -1299,18 +1298,35 @@ public class ResourceGroupManagerBean implements ResourceGroupManagerLocal, Reso public void setAssignedResources(Subject subject, int groupId, int[] resourceIds, boolean setType) throws ResourceGroupDeleteException {
+ ResourceGroup group = entityManager.find(ResourceGroup.class, groupId); + if (group.isPrivateGroup()) { + List<Integer> ids = new ArrayList<Integer>(resourceIds.length); + for (int id : resourceIds) { + ids.add(id); + } + if (!authorizationManager.canViewResources(subject, ids)) { + throw new PermissionException("Subject [" + subject.getName() + + "] does not have VIEW permission for all specified resources."); + } + } else { + if (!authorizationManager.isInventoryManager(subject)) { + throw new PermissionException("Subject [" + subject.getName() + + "] is not authorized for [ MANAGE_INVENTORY ]. Required for changing group membership "); + } + } + List<Integer> currentMembers = resourceManager.findExplicitResourceIdsByResourceGroup(groupId);
List<Integer> newMembers = ArrayUtils.wrapInList(resourceIds); // members needing addition newMembers.removeAll(currentMembers); if (newMembers.size() > 0) { - addResourcesToGroup(subject, groupId, ArrayUtils.unwrapCollection(newMembers)); + addResourcesToGroup(subjectManager.getOverlord(), groupId, ArrayUtils.unwrapCollection(newMembers)); }
List<Integer> extraMembers = new ArrayList<Integer>(currentMembers); // members needing removal extraMembers.removeAll(ArrayUtils.wrapInList(resourceIds)); if (extraMembers.size() > 0) { - removeResourcesFromGroup(subject, groupId, ArrayUtils.unwrapCollection(extraMembers)); + removeResourcesFromGroup(subjectManager.getOverlord(), groupId, ArrayUtils.unwrapCollection(extraMembers)); }
// As a result of the membership change ensure that the group type is set correctly. @@ -1461,28 +1477,45 @@ public class ResourceGroupManagerBean implements ResourceGroupManagerLocal, Reso
@SuppressWarnings("unchecked") public PageList<ResourceGroup> findResourceGroupsByCriteria(Subject subject, ResourceGroupCriteria criteria) { - CriteriaQueryGenerator generator = new CriteriaQueryGenerator(subject, criteria); - ;
+ CriteriaQueryGenerator generator = getCriteriaQueryGenerator(subject, criteria); + + CriteriaQueryRunner<ResourceGroup> queryRunner = new CriteriaQueryRunner(criteria, generator, entityManager); + PageList<ResourceGroup> result = queryRunner.execute(); + return result; + } + + private CriteriaQueryGenerator getCriteriaQueryGenerator(Subject subject, ResourceGroupCriteria criteria) { if (criteria.isSecurityManagerRequired() && !authorizationManager.hasGlobalPermission(subject, Permission.MANAGE_SECURITY)) { throw new PermissionException("Subject [" + subject.getName() + "] requires SecurityManager permission for requested query criteria."); }
- if (criteria.isInventoryManagerRequired() - && !authorizationManager.hasGlobalPermission(subject, Permission.MANAGE_INVENTORY)) { + boolean isInventoryManager = authorizationManager.isInventoryManager(subject); + boolean groupAuthzRequired = (!(criteria.isFilterPrivate() || isInventoryManager)); + + if (criteria.isInventoryManagerRequired() && !isInventoryManager) { throw new PermissionException("Subject [" + subject.getName() + "] requires InventoryManager permission for requested query criteria."); }
- if (authorizationManager.isInventoryManager(subject) == false) { + // if we're searching for private groups set the subject filter to the current user's subjectId + // setting it here prevents the caller from spoofing a different user. This is why the subject and + // private filters are different. The suject filter can specifiy any use and therefore requires + // inventory manager. + if (criteria.isFilterPrivate()) { + criteria.addFilterPrivate(null); + criteria.addFilterSubjectId(subject.getId()); + } + + CriteriaQueryGenerator generator = new CriteriaQueryGenerator(subject, criteria); + if (groupAuthzRequired) { generator.setAuthorizationResourceFragment(CriteriaQueryGenerator.AuthorizationTokenType.GROUP, null, subject.getId()); }
- CriteriaQueryRunner<ResourceGroup> queryRunner = new CriteriaQueryRunner(criteria, generator, entityManager); - return queryRunner.execute(); + return generator; }
@TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED) diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/group/ResourceGroupManagerLocal.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/group/ResourceGroupManagerLocal.java index de96dbf..a0481b1 100644 --- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/group/ResourceGroupManagerLocal.java +++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/group/ResourceGroupManagerLocal.java @@ -42,6 +42,28 @@ import org.rhq.core.domain.util.PageList; @Local public interface ResourceGroupManagerLocal {
+ /** + * NOTE: This is only used to support AutoGroups currently but the idea may be expanded in the future. + * + * Creates a private, "user-owned" (aka "subject-owned") resource group. This group differs from a role-owned + * group in that it can not be assigned to a role, instead it is owned by the user that creates it. It comprises + * only a set of resources for which the user has, minimally, view permission. Since a user's view permissions + * can change, membership and authz checking must be performed as needed when taking any action on the group. + * <br/><br/> + * A user does not need MANAGE_INVENTORY to create a sub-group because it is private to his view. + * <br/><br/> + * This call does not populate the group with members, it only creates the group. The group is automatically set + * to be non-recursive. + * <br/><br/> + * All user-owned groups are deleted if the the user is deleted. + * + * @param user The user for which the group will be created. + * @param group The group characteristics. Any membership defined here is ignored. The recursivity setting is + * ignored. + * @return The new group. + */ + ResourceGroup createPrivateResourceGroup(Subject user, ResourceGroup group); + ResourceGroup getResourceGroupById(Subject user, int id, GroupCategory category) throws ResourceGroupNotFoundException;
@@ -108,7 +130,10 @@ public interface ResourceGroupManagerLocal { /** * This method ensures that the explicit group membership is set to the specified resources. Members * will be added or removed as necessary. Make sure you pass the correct value for the <setType> - * parameter. + * parameter. + * <br/><br/> + * For global groups requires MANAGE_INVENTORY. For private groups requires VIEW permission on all specified + * resources. * * @param subject * @param groupId
commit dd657e98f4d906e6bb6b58b3948d1b7d7282b4ec Author: Jay Shaughnessy jshaughn@redhat.com Date: Tue Sep 28 12:35:44 2010 -0400
AutoGroup/ResourceTree work - Fix up breadcrumbs for AutoGroup selections and also fix up some path - issues that were happening when selecting AG resources.
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/CoreGUI.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/CoreGUI.java index bb39f2d..34cf23e 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/CoreGUI.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/CoreGUI.java @@ -254,10 +254,13 @@ public class CoreGUI implements EntryPoint, ValueChangeHandler<String> { if (viewPath.matches("(" + ResourceTopView.VIEW_ID + "|" + ResourceGroupTopView.VIEW_ID + ")/[^/]*")) { // e.g. "Resource/10001" if (!currentViewPath.startsWith(viewPath)) { - // The Resource that was selected is not the same Resource that was previously selected - - // grab the end portion of the previous history URL and append it to the new history URL, - // so the same tab is selected for the new Resource. - String suffix = currentViewPath.replaceFirst("^[^/]*/[^/]*", ""); + // The Node that was selected is not the same Node that was previously selected - it + // may not even be the same node type. For example, the user could have moved from a + // resource to an autogroup in the same tree. Try to keep the tab selection sticky as best as + // possible while moving from one view to another by grabbing the end portion of the previous + // history URL and append it to the new history URL. The suffix is assumed to follow the + // ID (numeric) portion of the currentViewPath. + String suffix = currentViewPath.replaceFirst("\D*[^/]*", ""); viewPath += suffix; } } diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/ResourceTreeView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/ResourceTreeView.java index 6a7cba9..0d16bea 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/ResourceTreeView.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/ResourceTreeView.java @@ -236,7 +236,6 @@ public class ResourceTreeView extends LocatableVLayout { // get back to this node given the id of the backing group (from the viewpath) autoGroupNodeMap.put(result.getId(), agNode); callback.onSuccess(result); - //renderAutoGroup(result); } }); } else { @@ -302,6 +301,23 @@ public class ResourceTreeView extends LocatableVLayout { } }
+ private void adjustBreadcrumb(TreeNode node, ViewId viewId) { + if (node instanceof ResourceTreeNode) { + Resource nr = ((ResourceTreeNode) node).getResource(); + String display = node.getName() + " <span class="subtitle">" + nr.getResourceType().getName() + "</span>"; + String icon = "types/" + nr.getResourceType().getCategory().getDisplayName() + "_up_16.png"; + + viewId.getBreadcrumbs().add(new Breadcrumb(node.getAttribute("id"), display, icon, true)); + + } else if (node instanceof AutoGroupTreeNode) { + String name = ((AutoGroupTreeNode) node).getBackingGroupName(); + String display = node.getName() + " <span class="subtitle">" + name + "</span>"; + String icon = "types/" + ((AutoGroupTreeNode) node).getResourceType().getCategory() + "_up_16.png"; + + viewId.getBreadcrumbs().add(new Breadcrumb(node.getAttribute("id"), display, icon, true)); + } + } + private void showContextMenu(AutoGroupTreeNode agNode) { getAutoGroupBackingGroup(agNode, new AsyncCallback<ResourceGroup>() { public void onFailure(Throwable caught) { @@ -680,23 +696,6 @@ public class ResourceTreeView extends LocatableVLayout { } }
- private void adjustBreadcrumb(TreeNode node, ViewId viewId) { - if (node instanceof ResourceTreeNode) { - - Resource nr = ((ResourceTreeNode) node).getResource(); - String display = node.getName() + " <span class="subtitle">" + nr.getResourceType().getName() + "</span>"; - String icon = "types/" + nr.getResourceType().getCategory().getDisplayName() + "_up_16.png"; - - viewId.getBreadcrumbs().add(new Breadcrumb(node.getAttribute("id"), display, icon, true)); - - } else { - - // if (node.getName() != null) { - // viewId.getBreadcrumbs().add(new Breadcrumb(node.getAttribute("id"), node.getName(), null, true)); - // } - } - } - /*private List<Resource> preload(final List<Resource> lineage) {
final ArrayList<Resource> list = new ArrayList<Resource>(lineage); @@ -730,8 +729,9 @@ public class ResourceTreeView extends LocatableVLayout { currentViewId = viewPath.getCurrent(); String currentViewIdPath = currentViewId.getPath(); if ("AutoGroup".equals(currentViewIdPath)) { - ViewId nextViewId = viewPath.getNext(); - Integer autoGroupId = Integer.parseInt(nextViewId.getPath()); + // Move the currentViewId to the ID portion to play better with other code + currentViewId = viewPath.getNext(); + Integer autoGroupId = Integer.parseInt(currentViewId.getPath()); setSelectedAutoGroup(autoGroupId); } else { Integer resourceId = Integer.parseInt(currentViewId.getPath());
commit 9cfec33df4ca3f5975a2a6ba72c6b6a5ddc09cdd Author: John Sanda jsanda@redhat.com Date: Thu Sep 30 16:47:49 2010 -0400
Updating tests
diff --git a/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/configuration/metadata/ConfigurationMetadataManagerBeanTest.java b/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/configuration/metadata/ConfigurationMetadataManagerBeanTest.java index bc0d6c5..5e2913b 100644 --- a/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/configuration/metadata/ConfigurationMetadataManagerBeanTest.java +++ b/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/configuration/metadata/ConfigurationMetadataManagerBeanTest.java @@ -24,11 +24,13 @@ package org.rhq.enterprise.server.configuration.metadata;
import javax.persistence.EntityManager; +import javax.transaction.SystemException;
import org.testng.annotations.BeforeClass; import org.testng.annotations.Test;
import org.rhq.core.clientapi.descriptor.plugin.PluginDescriptor; +import org.rhq.core.clientapi.descriptor.plugin.ServerDescriptor; import org.rhq.core.domain.configuration.definition.ConfigurationDefinition; import org.rhq.core.domain.configuration.definition.PropertyDefinitionSimple; import org.rhq.core.domain.configuration.definition.PropertyGroupDefinition; @@ -91,6 +93,20 @@ public class ConfigurationMetadataManagerBeanTest extends AbstractEJB3Test { "not change", expected, actual); }
+ // This test fails with, + // + // PersistentObjectException: detached entity passed to persist + // + // I get the exception with both PropertyGroupDefinition and PropertyDefinitionSimple when I have tried various + // approaches to get past the exception. + @Test(enabled = false) + public void addNewGroup() { + initConfigDefs("servers[name='GroupTests']", "GroupTests"); + + assertNotNull("The new property should be added to the configuration definition", + findGroup("newGroup", originalConfigDef)); + } + // void assertGroupDefinitionExists() { // for (PropertyGroupDefinition groupDef : originalConfigurationDef.getGroupDefinitions()) { // if (groupDef.getName().equals("groupToBeRemoved")) { @@ -107,17 +123,24 @@ public class ConfigurationMetadataManagerBeanTest extends AbstractEJB3Test {
private void loadAndPersistConfigDefs(String path, String configName) { originalConfigDef = loadPluginConfigDefFor(originalDescriptor, path, configName); + assertNotNull(originalConfigDef); updatedConfigDef = loadPluginConfigDefFor(updatedDescriptor, path, configName); + assertNotNull(updatedConfigDef);
try { getTransactionManager().begin();
EntityManager entityMgr = getEntityManager(); entityMgr.persist(originalConfigDef); - entityMgr.persist(updatedConfigDef); + //entityMgr.persist(updatedConfigDef);
getTransactionManager().commit(); } catch (Exception e) { + try { + getTransactionManager().rollback(); + } catch (SystemException e1) { + throw new RuntimeException(e1); + } throw new RuntimeException(e); } } @@ -131,6 +154,11 @@ public class ConfigurationMetadataManagerBeanTest extends AbstractEJB3Test {
getTransactionManager().commit(); } catch (Exception e) { + try { + getTransactionManager().rollback(); + } catch (SystemException e1) { + throw new RuntimeException(e1); + } throw new RuntimeException(e); } } @@ -139,6 +167,15 @@ public class ConfigurationMetadataManagerBeanTest extends AbstractEJB3Test { return "/" + getClass().getPackage().getName().replace('.', '/') + "/"; }
+ private PropertyGroupDefinition findGroup(String name, ConfigurationDefinition configDef) { + for (PropertyGroupDefinition groupDef : configDef.getGroupDefinitions()) { + if (groupDef.getName().equals(name)) { + return groupDef; + } + } + return null; + } + void assertPropertyDefinitionMatches(String msg, PropertyDefinitionSimple expected, PropertyDefinitionSimple actual) { AssertUtils.assertPropertiesMatch(msg, expected, actual, "id", "configurationDefinition"); diff --git a/modules/enterprise/server/jar/src/test/resources/org/rhq/enterprise/server/configuration/metadata/configuration_metadata_manager_bean_test_v1.xml b/modules/enterprise/server/jar/src/test/resources/org/rhq/enterprise/server/configuration/metadata/configuration_metadata_manager_bean_test_v1.xml index 131cff7..dd8fcfa 100644 --- a/modules/enterprise/server/jar/src/test/resources/org/rhq/enterprise/server/configuration/metadata/configuration_metadata_manager_bean_test_v1.xml +++ b/modules/enterprise/server/jar/src/test/resources/org/rhq/enterprise/server/configuration/metadata/configuration_metadata_manager_bean_test_v1.xml @@ -18,4 +18,12 @@ description="This property exists only in version 1 of the plugin"/> </plugin-configuration> </server> + + <server name="GroupTests"> + <plugin-configuration> + <c:group name="existingGroup"> + <c:simple-property name="existingGroupProperty"/> + </c:group> + </plugin-configuration> + </server> </plugin> diff --git a/modules/enterprise/server/jar/src/test/resources/org/rhq/enterprise/server/configuration/metadata/configuration_metadata_manager_bean_test_v2.xml b/modules/enterprise/server/jar/src/test/resources/org/rhq/enterprise/server/configuration/metadata/configuration_metadata_manager_bean_test_v2.xml index 2c94f72..d090e76 100644 --- a/modules/enterprise/server/jar/src/test/resources/org/rhq/enterprise/server/configuration/metadata/configuration_metadata_manager_bean_test_v2.xml +++ b/modules/enterprise/server/jar/src/test/resources/org/rhq/enterprise/server/configuration/metadata/configuration_metadata_manager_bean_test_v2.xml @@ -25,4 +25,21 @@ summary="false"/> </plugin-configuration> </server> + + <server name="GroupTests"> + <plugin-configuration> + <c:group name="existingGroup"> + <c:simple-property name="existingGroupProperty"/> + </c:group> + + <c:group name="newGroup"> + <c:simple-property name="newGroupProperty" + description="A new, grouped property" + activationPolicy="immediate" + default="new grouped property" + displayName="New Group Property" + readOnly="true"/> + </c:group> + </plugin-configuration> + </server> </plugin>
commit 7f0ee950e729a69708326e6ad7b5c8df7ebd749f Author: John Sanda jsanda@redhat.com Date: Thu Sep 30 11:01:51 2010 -0400
Adding more tests
diff --git a/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/configuration/metadata/ConfigurationMetadataManagerBeanTest.java b/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/configuration/metadata/ConfigurationMetadataManagerBeanTest.java index 1658e18..bc0d6c5 100644 --- a/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/configuration/metadata/ConfigurationMetadataManagerBeanTest.java +++ b/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/configuration/metadata/ConfigurationMetadataManagerBeanTest.java @@ -24,8 +24,6 @@ package org.rhq.enterprise.server.configuration.metadata;
import javax.persistence.EntityManager; -import javax.transaction.NotSupportedException; -import javax.transaction.SystemException;
import org.testng.annotations.BeforeClass; import org.testng.annotations.Test; @@ -38,12 +36,11 @@ import org.rhq.enterprise.server.test.AbstractEJB3Test; import org.rhq.enterprise.server.util.LookupUtil; import org.rhq.test.AssertUtils;
-import static org.rhq.enterprise.server.configuration.metadata.PluginDescriptorUtil.*; +import static org.rhq.enterprise.server.configuration.metadata.PluginDescriptorUtil.loadPluginConfigDefFor; +import static org.rhq.enterprise.server.configuration.metadata.PluginDescriptorUtil.loadPluginDescriptor;
public class ConfigurationMetadataManagerBeanTest extends AbstractEJB3Test {
- EntityManager entityMgr; - PluginDescriptor originalDescriptor;
PluginDescriptor updatedDescriptor; @@ -63,16 +60,37 @@ public class ConfigurationMetadataManagerBeanTest extends AbstractEJB3Test { }
@Test - public void newUngroupedPropertyDefsShouldBeAddedToConfigurationDef() throws Exception { + public void addNewUngroupedPropertyDef() { initConfigDefs("servers[name='MyServer1']", "test");
- PropertyDefinitionSimple expected = updatedConfigDef.getPropertyDefinitionSimple("bar"); - PropertyDefinitionSimple actual = originalConfigDef.getPropertyDefinitionSimple("bar"); + String propertyName = "newUngroupedProperty"; + PropertyDefinitionSimple expected = updatedConfigDef.getPropertyDefinitionSimple(propertyName); + PropertyDefinitionSimple actual = originalConfigDef.getPropertyDefinitionSimple(propertyName);
assertPropertyDefinitionMatches("New ungrouped property defs should be added to the configuration definition", expected, actual); }
+ @Test + public void removePropertyDefThatIsNotInNewDescriptor() { + initConfigDefs("servers[name='MyServer1']", "test"); + + assertNull("The property exists in version 1 but not in version 2 of the plugin; therefore, it should be " + + "removed the configuration definition", originalConfigDef.get("v1OnlyProperty")); + } + + @Test + public void doNotModifyExistingPropertyDefThatIsNotModifiedInUpgrade() { + initConfigDefs("servers[name='MyServer1']", "test"); + + String propertyName = "myExistingProperty"; + PropertyDefinitionSimple expected = updatedConfigDef.getPropertyDefinitionSimple(propertyName); + PropertyDefinitionSimple actual = originalConfigDef.getPropertyDefinitionSimple(propertyName); + + assertPropertyDefinitionMatches("Existing property that is not changed in new version of pluign should " + + "not change", expected, actual); + } + // void assertGroupDefinitionExists() { // for (PropertyGroupDefinition groupDef : originalConfigurationDef.getGroupDefinitions()) { // if (groupDef.getName().equals("groupToBeRemoved")) { diff --git a/modules/enterprise/server/jar/src/test/resources/org/rhq/enterprise/server/configuration/metadata/configuration_metadata_manager_bean_test_v1.xml b/modules/enterprise/server/jar/src/test/resources/org/rhq/enterprise/server/configuration/metadata/configuration_metadata_manager_bean_test_v1.xml index 0c7d362..131cff7 100644 --- a/modules/enterprise/server/jar/src/test/resources/org/rhq/enterprise/server/configuration/metadata/configuration_metadata_manager_bean_test_v1.xml +++ b/modules/enterprise/server/jar/src/test/resources/org/rhq/enterprise/server/configuration/metadata/configuration_metadata_manager_bean_test_v1.xml @@ -7,7 +7,15 @@
<server name="MyServer1"> <plugin-configuration> - <c:simple-property name="myProperty1"/> + <c:simple-property name="myExistingProperty" + type="integer" + units="megabytes" + default="256" + required="true" + description="My Existing Property"/> + + <c:simple-property name="v1OnlyProperty" + description="This property exists only in version 1 of the plugin"/> </plugin-configuration> </server> </plugin> diff --git a/modules/enterprise/server/jar/src/test/resources/org/rhq/enterprise/server/configuration/metadata/configuration_metadata_manager_bean_test_v2.xml b/modules/enterprise/server/jar/src/test/resources/org/rhq/enterprise/server/configuration/metadata/configuration_metadata_manager_bean_test_v2.xml index 8997f8f..2c94f72 100644 --- a/modules/enterprise/server/jar/src/test/resources/org/rhq/enterprise/server/configuration/metadata/configuration_metadata_manager_bean_test_v2.xml +++ b/modules/enterprise/server/jar/src/test/resources/org/rhq/enterprise/server/configuration/metadata/configuration_metadata_manager_bean_test_v2.xml @@ -7,8 +7,22 @@
<server name="MyServer1"> <plugin-configuration> - <c:simple-property name="myProperty1"/> - <c:simple-property name="bar" description="bar property"/> + <c:simple-property name="myExistingProperty" + type="integer" + units="megabytes" + default="256" + required="true" + description="My Existing Property"/> + + <c:simple-property name="newUngroupedProperty" + description="A new, ungrouped property" + activationPolicy="immediate" + default="new property" + required="true" + displayName="My New Ungrouped Property" + readOnly="true" + type="longString" + summary="false"/> </plugin-configuration> </server> </plugin>
commit 423bfa5e3c976746bd61d917464eff8da2cbac46 Author: John Sanda jsanda@redhat.com Date: Thu Sep 30 09:52:34 2010 -0400
Guarding against hibernate exception that can occur when using delete-orphan
While adding/updating tests I was running into,
HibernateException: A collection with cascade="all-delete-orphan" was no longer referenced by the owning entity instance
The solution is to make sure that the managed collection references do not change
diff --git a/modules/core/domain/src/main/java/org/rhq/core/domain/configuration/definition/PropertyDefinitionSimple.java b/modules/core/domain/src/main/java/org/rhq/core/domain/configuration/definition/PropertyDefinitionSimple.java index 101d894..782dc99 100644 --- a/modules/core/domain/src/main/java/org/rhq/core/domain/configuration/definition/PropertyDefinitionSimple.java +++ b/modules/core/domain/src/main/java/org/rhq/core/domain/configuration/definition/PropertyDefinitionSimple.java @@ -78,7 +78,7 @@ public class PropertyDefinitionSimple extends PropertyDefinition { @Cascade( { org.hibernate.annotations.CascadeType.ALL, org.hibernate.annotations.CascadeType.DELETE_ORPHAN }) @IndexColumn(name = "order_index") @OneToMany(mappedBy = "propertyDefinitionSimple", fetch = FetchType.EAGER) - private List<PropertyDefinitionEnumeration> enumeratedValues; + private List<PropertyDefinitionEnumeration> enumeratedValues = new ArrayList<PropertyDefinitionEnumeration>();
/** * This property's default value. This field should have a non-null value for properties whose @@ -122,10 +122,6 @@ public class PropertyDefinitionSimple extends PropertyDefinition { */ @NotNull public Set<Constraint> getConstraints() { - if (this.constraints == null) { - this.constraints = new LinkedHashSet<Constraint>(); - } - return this.constraints; }
@@ -148,15 +144,11 @@ public class PropertyDefinitionSimple extends PropertyDefinition { */ @NotNull public List<PropertyDefinitionEnumeration> getEnumeratedValues() { - if (this.enumeratedValues == null) { - this.enumeratedValues = new ArrayList<PropertyDefinitionEnumeration>(); - } - return this.enumeratedValues; }
public void setEnumeratedValues(List<PropertyDefinitionEnumeration> enumeratedValues, boolean allowCustomEnumValue) { - this.enumeratedValues = enumeratedValues; + addEnumeratedValues(enumeratedValues.toArray(new PropertyDefinitionEnumeration[enumeratedValues.size()])); this.allowCustomEnumeratedValue = allowCustomEnumValue; ensureOrdering(); }
commit d6f69c80499f3e959825ab50b613ad45cd472404 Merge: b56a7c0... 3c5a00e... Author: John Sanda jsanda@redhat.com Date: Thu Sep 30 09:21:43 2010 -0400
Merge branch 'master' of ssh://git.fedorahosted.org/git/rhq/rhq
commit b56a7c0af0071ebee3b350ac1769a52e8a8b3a75 Author: John Sanda jsanda@redhat.com Date: Thu Sep 30 09:17:01 2010 -0400
Getting infrastructure in place for testing plugin upgrade code
Trying to clean up and get tests in ConfigurationMetadataManagerBean in a working, maintainable state.
diff --git a/modules/core/domain/src/main/java/org/rhq/core/domain/configuration/definition/PropertyDefinitionSimple.java b/modules/core/domain/src/main/java/org/rhq/core/domain/configuration/definition/PropertyDefinitionSimple.java index a27b677..101d894 100644 --- a/modules/core/domain/src/main/java/org/rhq/core/domain/configuration/definition/PropertyDefinitionSimple.java +++ b/modules/core/domain/src/main/java/org/rhq/core/domain/configuration/definition/PropertyDefinitionSimple.java @@ -23,6 +23,7 @@ package org.rhq.core.domain.configuration.definition;
import java.util.ArrayList; +import java.util.HashSet; import java.util.LinkedHashSet; import java.util.List; import java.util.Set; @@ -69,7 +70,7 @@ public class PropertyDefinitionSimple extends PropertyDefinition {
@Cascade( { org.hibernate.annotations.CascadeType.ALL, org.hibernate.annotations.CascadeType.DELETE_ORPHAN }) @OneToMany(mappedBy = "propertyDefinitionSimple", cascade = { CascadeType.ALL }, fetch = FetchType.EAGER) - private Set<Constraint> constraints; + private Set<Constraint> constraints = new HashSet<Constraint>();
/** * The <options> within <property-options> for a <simple-property> diff --git a/modules/enterprise/server/jar/pom.xml b/modules/enterprise/server/jar/pom.xml index 4c4e9a5..b54dfd8 100644 --- a/modules/enterprise/server/jar/pom.xml +++ b/modules/enterprise/server/jar/pom.xml @@ -400,6 +400,13 @@ <version>1.8</version> <scope>test</scope> </dependency> + + <dependency> + <groupId>commons-jxpath</groupId> + <artifactId>commons-jxpath</artifactId> + <version>1.3</version> + <scope>test</scope> + </dependency>
</dependencies>
diff --git a/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/configuration/metadata/ConfigurationMetadataManagerBeanTest.java b/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/configuration/metadata/ConfigurationMetadataManagerBeanTest.java index 87d254a..1658e18 100644 --- a/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/configuration/metadata/ConfigurationMetadataManagerBeanTest.java +++ b/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/configuration/metadata/ConfigurationMetadataManagerBeanTest.java @@ -23,113 +23,102 @@
package org.rhq.enterprise.server.configuration.metadata;
-import org.rhq.core.clientapi.agent.metadata.ConfigurationMetadataParser; -import org.rhq.core.clientapi.descriptor.DescriptorPackages; -import org.rhq.core.clientapi.descriptor.configuration.ConfigurationDescriptor; +import javax.persistence.EntityManager; +import javax.transaction.NotSupportedException; +import javax.transaction.SystemException; + +import org.testng.annotations.BeforeClass; +import org.testng.annotations.Test; + import org.rhq.core.clientapi.descriptor.plugin.PluginDescriptor; import org.rhq.core.domain.configuration.definition.ConfigurationDefinition; import org.rhq.core.domain.configuration.definition.PropertyDefinitionSimple; import org.rhq.core.domain.configuration.definition.PropertyGroupDefinition; -import org.rhq.core.domain.resource.ResourceType; -import org.rhq.enterprise.server.resource.metadata.test.UpdateSubsytemTestBase; import org.rhq.enterprise.server.test.AbstractEJB3Test; import org.rhq.enterprise.server.util.LookupUtil; import org.rhq.test.AssertUtils; -import org.testng.annotations.AfterClass; -import org.testng.annotations.AfterMethod; -import org.testng.annotations.BeforeClass; -import org.testng.annotations.BeforeMethod; -import org.testng.annotations.Test;
-import javax.persistence.EntityManager; -import javax.transaction.TransactionManager; -import javax.xml.XMLConstants; -import javax.xml.bind.JAXBContext; -import javax.xml.bind.Unmarshaller; -import javax.xml.bind.util.ValidationEventCollector; -import javax.xml.validation.Schema; -import javax.xml.validation.SchemaFactory; -import java.io.FileNotFoundException; -import java.net.URL; +import static org.rhq.enterprise.server.configuration.metadata.PluginDescriptorUtil.*;
public class ConfigurationMetadataManagerBeanTest extends AbstractEJB3Test {
- ConfigurationMetadataManagerLocal configurationMetadataMgr; - EntityManager entityMgr;
- ConfigurationDefinition originalConfigurationDef; + PluginDescriptor originalDescriptor; + + PluginDescriptor updatedDescriptor;
- ConfigurationDefinition newConfigurationDef; + ConfigurationDefinition originalConfigDef;
- @BeforeClass(enabled = false) - public void setupClass() throws Exception { + ConfigurationDefinition updatedConfigDef; + + @BeforeClass + public void setupClass() { String pluginFileBaseName = "configuration_metadata_manager_bean_test"; String version1 = pluginFileBaseName + "_v1.xml"; String version2 = pluginFileBaseName + "_v2.xml";
- getTransactionManager().begin(); - entityMgr = getEntityManager(); + originalDescriptor = loadPluginDescriptor(getPackagePath() + version1); + updatedDescriptor = loadPluginDescriptor(getPackagePath() + version2); + }
- configurationMetadataMgr = LookupUtil.getConfigurationMetadataManager(); + @Test + public void newUngroupedPropertyDefsShouldBeAddedToConfigurationDef() throws Exception { + initConfigDefs("servers[name='MyServer1']", "test");
- originalConfigurationDef = createAndSaveConfigurationDef(version1); - newConfigurationDef = loadPluginConfigurationFromFile(version2); + PropertyDefinitionSimple expected = updatedConfigDef.getPropertyDefinitionSimple("bar"); + PropertyDefinitionSimple actual = originalConfigDef.getPropertyDefinitionSimple("bar");
- assertGroupDefinitionExists(); + assertPropertyDefinitionMatches("New ungrouped property defs should be added to the configuration definition", + expected, actual); + }
- originalConfigurationDef = entityMgr.getReference(ConfigurationDefinition.class, - originalConfigurationDef.getId()); +// void assertGroupDefinitionExists() { +// for (PropertyGroupDefinition groupDef : originalConfigurationDef.getGroupDefinitions()) { +// if (groupDef.getName().equals("groupToBeRemoved")) { +// assertTrue(groupDef.getId() != 0); +// assertNotNull(entityMgr.find(PropertyGroupDefinition.class, groupDef.getId())); +// } +// } +// } + + private void initConfigDefs(String path, String configName) { + loadAndPersistConfigDefs(path, configName); + updateConfigDef(); + }
- configurationMetadataMgr.updateConfigurationDefinition(newConfigurationDef, originalConfigurationDef); + private void loadAndPersistConfigDefs(String path, String configName) { + originalConfigDef = loadPluginConfigDefFor(originalDescriptor, path, configName); + updatedConfigDef = loadPluginConfigDefFor(updatedDescriptor, path, configName);
- originalConfigurationDef = entityMgr.find(ConfigurationDefinition.class, originalConfigurationDef.getId()); + try { + getTransactionManager().begin();
- assertNotNull(originalConfigurationDef); - } + EntityManager entityMgr = getEntityManager(); + entityMgr.persist(originalConfigDef); + entityMgr.persist(updatedConfigDef);
- void assertGroupDefinitionExists() { - for (PropertyGroupDefinition groupDef : originalConfigurationDef.getGroupDefinitions()) { - if (groupDef.getName().equals("groupToBeRemoved")) { - assertTrue(groupDef.getId() != 0); - assertNotNull(entityMgr.find(PropertyGroupDefinition.class, groupDef.getId())); - } + getTransactionManager().commit(); + } catch (Exception e) { + throw new RuntimeException(e); } }
- @AfterClass(enabled = false) - public void tearDownClass() throws Exception { - getTransactionManager().rollback(); - } - - private ConfigurationDefinition createAndSaveConfigurationDef(String file) throws Exception { - ConfigurationDefinition configurationDef = loadPluginConfigurationFromFile(file); - entityMgr.persist(configurationDef); - return configurationDef; - } + private void updateConfigDef() { + try { + getTransactionManager().begin();
- private ConfigurationDefinition loadPluginConfigurationFromFile(String file) throws Exception { - PluginDescriptor pluginDescriptor = loadPluginDescriptor(file); - ConfigurationDescriptor configurationDescriptor = pluginDescriptor.getServers().get(0).getPluginConfiguration(); - return ConfigurationMetadataParser.parse("test", configurationDescriptor); - } + ConfigurationMetadataManagerLocal configMetadataMgr = LookupUtil.getConfigurationMetadataManager(); + configMetadataMgr.updateConfigurationDefinition(updatedConfigDef, originalConfigDef);
- private PluginDescriptor loadPluginDescriptor(String file) throws Exception { - URL pluginDescriptorURL = getClass().getResource(file); - if (pluginDescriptorURL == null) { - throw new FileNotFoundException("File " + file + " not found"); + getTransactionManager().commit(); + } catch (Exception e) { + throw new RuntimeException(e); } + }
- JAXBContext jaxbContext = JAXBContext.newInstance(DescriptorPackages.PC_PLUGIN); - URL pluginSchemaURL = this.getClass().getClassLoader().getResource("rhq-plugin.xsd"); - Schema pluginSchema = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI).newSchema(pluginSchemaURL); - - Unmarshaller unmarshaller = jaxbContext.createUnmarshaller(); - ValidationEventCollector vec = new ValidationEventCollector(); - unmarshaller.setEventHandler(vec); - unmarshaller.setSchema(pluginSchema); - - return (PluginDescriptor) unmarshaller.unmarshal(pluginDescriptorURL.openStream()); + private String getPackagePath() { + return "/" + getClass().getPackage().getName().replace('.', '/') + "/"; }
void assertPropertyDefinitionMatches(String msg, PropertyDefinitionSimple expected, @@ -138,18 +127,9 @@ public class ConfigurationMetadataManagerBeanTest extends AbstractEJB3Test { }
@Test(enabled = false) - public void newUngroupedPropertyDefsShouldBeAddedToConfigurationDef() throws Exception { - PropertyDefinitionSimple expected = newConfigurationDef.getPropertyDefinitionSimple("bar"); - PropertyDefinitionSimple actual = originalConfigurationDef.getPropertyDefinitionSimple("bar"); - - assertPropertyDefinitionMatches("New ungrouped property defs shoould be added to the configuration definition", - expected, actual); - } - - @Test(enabled = false) public void existingUngroupedPropertyDefShouldBeUpdated() throws Exception { - PropertyDefinitionSimple expected = newConfigurationDef.getPropertyDefinitionSimple("foo"); - PropertyDefinitionSimple actual = originalConfigurationDef.getPropertyDefinitionSimple("foo"); + PropertyDefinitionSimple expected = updatedConfigDef.getPropertyDefinitionSimple("foo"); + PropertyDefinitionSimple actual = originalConfigDef.getPropertyDefinitionSimple("foo");
assertPropertyDefinitionMatches("Existing ungrouped property defs should be updated", expected, actual); } @@ -158,13 +138,13 @@ public class ConfigurationMetadataManagerBeanTest extends AbstractEJB3Test { public void propertyDefNotInNewConfigurationDefShouldBeRemoved() throws Exception { assertNull( "A property def in the original configuration def that is removed in the new configuration def should be deleted", - originalConfigurationDef.getPropertyDefinitionSimple("propertyToBeRemoved") + originalConfigDef.getPropertyDefinitionSimple("propertyToBeRemoved") ); }
@Test(enabled = false) public void propertyGroupDefNotInNewConfigurationDefShouldBeRemoved() throws Exception { - for (PropertyGroupDefinition def : originalConfigurationDef.getGroupDefinitions()) { + for (PropertyGroupDefinition def : originalConfigDef.getGroupDefinitions()) { if (def.getName().equals("groupToBeRemoved")) { fail("Expected property group 'groupToBeRemoved' to be deleted since it is not in the new configuration def."); } diff --git a/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/configuration/metadata/PluginDescriptorUtil.java b/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/configuration/metadata/PluginDescriptorUtil.java new file mode 100644 index 0000000..8eb4632 --- /dev/null +++ b/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/configuration/metadata/PluginDescriptorUtil.java @@ -0,0 +1,70 @@ +package org.rhq.enterprise.server.configuration.metadata; + +import java.io.FileNotFoundException; +import java.net.URL; + +import javax.xml.XMLConstants; +import javax.xml.bind.JAXBContext; +import javax.xml.bind.Unmarshaller; +import javax.xml.bind.util.ValidationEventCollector; +import javax.xml.validation.Schema; +import javax.xml.validation.SchemaFactory; + +import org.apache.commons.jxpath.JXPathContext; + +import org.rhq.core.clientapi.agent.metadata.ConfigurationMetadataParser; +import org.rhq.core.clientapi.descriptor.DescriptorPackages; +import org.rhq.core.clientapi.descriptor.plugin.PluginDescriptor; +import org.rhq.core.clientapi.descriptor.plugin.ResourceDescriptor; +import org.rhq.core.domain.configuration.definition.ConfigurationDefinition; + +public class PluginDescriptorUtil { + + public static PluginDescriptor loadPluginDescriptor(String file) { + try { + URL pluginDescriptorURL = PluginDescriptorUtil.class.getResource(file); + if (pluginDescriptorURL == null) { + throw new FileNotFoundException("File " + file + " not found"); + } + + JAXBContext jaxbContext = JAXBContext.newInstance(DescriptorPackages.PC_PLUGIN); + URL pluginSchemaURL = PluginDescriptorUtil.class.getClassLoader().getResource("rhq-plugin.xsd"); + Schema pluginSchema = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI).newSchema( + pluginSchemaURL); + Unmarshaller unmarshaller = jaxbContext.createUnmarshaller(); + ValidationEventCollector vec = new ValidationEventCollector(); + unmarshaller.setEventHandler(vec); + unmarshaller.setSchema(pluginSchema); + + return (PluginDescriptor) unmarshaller.unmarshal(pluginDescriptorURL.openStream()); + } catch (Exception e) { + throw new RuntimeException(e); + } + } + + public static Object find(PluginDescriptor descriptor, String path) { + JXPathContext context = JXPathContext.newContext(descriptor); + return context.getValue(path); + } + + public static ConfigurationDefinition loadPluginConfigDefFor(PluginDescriptor descriptor, String path, + String configName) { + try { + ResourceDescriptor resourceDescriptor = (ResourceDescriptor) find(descriptor, path); + return ConfigurationMetadataParser.parse(configName, resourceDescriptor.getPluginConfiguration()); + } catch (Exception e) { + throw new RuntimeException(e); + } + } + + public static ConfigurationDefinition loadResourceConfigDefFor(PluginDescriptor descriptor, String path, + String configName) { + try { + ResourceDescriptor resourceDescriptor = (ResourceDescriptor) find(descriptor, path); + return ConfigurationMetadataParser.parse(configName, resourceDescriptor.getResourceConfiguration()); + } catch (Exception e) { + throw new RuntimeException(e); + } + } + +} diff --git a/modules/enterprise/server/jar/src/test/resources/org/rhq/enterprise/server/configuration/metadata/configuration_metadata_manager_bean_test_v1.xml b/modules/enterprise/server/jar/src/test/resources/org/rhq/enterprise/server/configuration/metadata/configuration_metadata_manager_bean_test_v1.xml new file mode 100644 index 0000000..0c7d362 --- /dev/null +++ b/modules/enterprise/server/jar/src/test/resources/org/rhq/enterprise/server/configuration/metadata/configuration_metadata_manager_bean_test_v1.xml @@ -0,0 +1,13 @@ +<plugin name="ConfigurationMetadataManagerBeanTest" + package="org.rhq.enterprise.server.confiuguration.metadata" + version="2.0" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xmlns="urn:xmlns:rhq-plugin" + xmlns:c="urn:xmlns:rhq-configuration"> + + <server name="MyServer1"> + <plugin-configuration> + <c:simple-property name="myProperty1"/> + </plugin-configuration> + </server> +</plugin> diff --git a/modules/enterprise/server/jar/src/test/resources/org/rhq/enterprise/server/configuration/metadata/configuration_metadata_manager_bean_test_v2.xml b/modules/enterprise/server/jar/src/test/resources/org/rhq/enterprise/server/configuration/metadata/configuration_metadata_manager_bean_test_v2.xml new file mode 100644 index 0000000..8997f8f --- /dev/null +++ b/modules/enterprise/server/jar/src/test/resources/org/rhq/enterprise/server/configuration/metadata/configuration_metadata_manager_bean_test_v2.xml @@ -0,0 +1,14 @@ +<plugin name="ConfigurationMetadataManagerBeanTest" + package="org.rhq.enterprise.server.confiuguration.metadata" + version="2.0" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xmlns="urn:xmlns:rhq-plugin" + xmlns:c="urn:xmlns:rhq-configuration"> + + <server name="MyServer1"> + <plugin-configuration> + <c:simple-property name="myProperty1"/> + <c:simple-property name="bar" description="bar property"/> + </plugin-configuration> + </server> +</plugin>
commit f0fffb5636ef2cdf89f6a1a1b1808e5d2fd98b6c Author: John Sanda jsanda@redhat.com Date: Tue Sep 28 17:15:48 2010 -0400
[BZ 619781] Handling more scenarios for settting connection properties to default values
Adding logic to handle three additional scenarios each of which involves connection properties that are required and specify a default value:
1) A new property is added to a new group 2) An existing property not part of a group added to an existing group 3) A property previously in a group moved outside of a group
There were also some scenarios when properties were moved into or out of a group and the group reference was not getting set or unset. ConfigurationMetadataManagerBean has been modifed to update these references.
diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/configuration/metadata/ConfigurationDefinitionUpdateReport.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/configuration/metadata/ConfigurationDefinitionUpdateReport.java index ad0c84b..ecad316 100644 --- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/configuration/metadata/ConfigurationDefinitionUpdateReport.java +++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/configuration/metadata/ConfigurationDefinitionUpdateReport.java @@ -25,6 +25,7 @@ package org.rhq.enterprise.server.configuration.metadata;
import org.rhq.core.domain.configuration.definition.ConfigurationDefinition; import org.rhq.core.domain.configuration.definition.PropertyDefinition; +import org.rhq.core.domain.configuration.definition.PropertyDefinitionSimple;
import java.util.HashSet; import java.util.Set; @@ -35,6 +36,8 @@ public class ConfigurationDefinitionUpdateReport {
private Set<PropertyDefinition> newPropertyDefs = new HashSet<PropertyDefinition>();
+ private Set<PropertyDefinition> updatedPropertyDefs = new HashSet<PropertyDefinition>(); + public ConfigurationDefinitionUpdateReport(ConfigurationDefinition configurationDefinition) { configurationDef = configurationDefinition; } @@ -44,11 +47,23 @@ public class ConfigurationDefinitionUpdateReport { }
public void addNewPropertyDefinition(PropertyDefinition propertyDef) { - newPropertyDefs.add(propertyDef); + if (propertyDef instanceof PropertyDefinitionSimple) { + newPropertyDefs.add(propertyDef); + } }
public Set<PropertyDefinition> getNewPropertyDefinitions() { return newPropertyDefs; }
+ public void addUpdatedPropertyDefinition(PropertyDefinition propertyDef) { + if (propertyDef instanceof PropertyDefinitionSimple) { + updatedPropertyDefs.add(propertyDef); + } + } + + public Set<PropertyDefinition> getUpdatedPropertyDefinitions() { + return updatedPropertyDefs; + } + } diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/configuration/metadata/ConfigurationMetadataManagerBean.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/configuration/metadata/ConfigurationMetadataManagerBean.java index 8427c8b..04a3995 100644 --- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/configuration/metadata/ConfigurationMetadataManagerBean.java +++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/configuration/metadata/ConfigurationMetadataManagerBean.java @@ -74,6 +74,7 @@ public class ConfigurationMetadataManagerBean implements ConfigurationMetadataMa PropertyDefinition existingProp = existingDefinition.get(newProperty.getName()); if (existingProp != null) { updatePropertyDefinition(existingProp, newProperty); + updateReport.addUpdatedPropertyDefinition(newProperty); } else { existingDefinition.put(newProperty); updateReport.addNewPropertyDefinition(newProperty); @@ -130,6 +131,7 @@ public class ConfigurationMetadataManagerBean implements ConfigurationMetadataMa PropertyDefinition existingProperty = existingDefinition.getPropertyDefinitions().get(nDef.getName()); if (existingProperty != null) { updatePropertyDefinition(existingProperty, nDef); + updateReport.addUpdatedPropertyDefinition(nDef); } else { existingDefinition.put(nDef); updateReport.addNewPropertyDefinition(nDef); @@ -157,6 +159,11 @@ public class ConfigurationMetadataManagerBean implements ConfigurationMetadataMa entityManager.persist(def); def.setPropertyGroupDefinition(group); def.setConfigurationDefinition(existingDefinition); + + if (!exPDefs.containsKey(def.getName())) { + updateReport.addNewPropertyDefinition(def); + } + exPDefs.put(def.getName(), def); } } @@ -309,6 +316,7 @@ public class ConfigurationMetadataManagerBean implements ConfigurationMetadataMa existingProperty.setRequired(newProperty.isRequired()); existingProperty.setReadOnly(newProperty.isReadOnly()); existingProperty.setSummary(newProperty.isSummary()); + existingProperty.setPropertyGroupDefinition(newProperty.getPropertyGroupDefinition());
/* * After the general things have been set, go through the subtypes of PropertyDefinition. If the new type is the diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/metadata/ResourceMetadataManagerBean.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/metadata/ResourceMetadataManagerBean.java index a136561..ff81a6e 100644 --- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/metadata/ResourceMetadataManagerBean.java +++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/metadata/ResourceMetadataManagerBean.java @@ -969,7 +969,8 @@ public class ResourceMetadataManagerBean implements ResourceMetadataManagerLocal .updateConfigurationDefinition(resourceType.getPluginConfigurationDefinition(), existingConfigurationDefinition);
- if (updateReport.getNewPropertyDefinitions().size() > 0) { + if (updateReport.getNewPropertyDefinitions().size() > 0 || + updateReport.getUpdatedPropertyDefinitions().size() > 0) { Subject overlord = subjectManager.getOverlord(); ResourceCriteria criteria = new ResourceCriteria(); criteria.addFilterResourceTypeId(existingType.getId()); @@ -991,6 +992,7 @@ public class ResourceMetadataManagerBean implements ResourceMetadataManagerLocal
private void updateResourcePluginConfiguration(Resource resource, ConfigurationDefinitionUpdateReport updateReport) { Configuration pluginConfiguration = resource.getPluginConfiguration(); + boolean modified = false; int numberOfProperties = pluginConfiguration.getProperties().size(); ConfigurationTemplate template = updateReport.getConfigurationDefinition().getDefaultTemplate(); Configuration templateConfiguration = template.getConfiguration(); @@ -999,10 +1001,23 @@ public class ResourceMetadataManagerBean implements ResourceMetadataManagerLocal if (propertyDef.isRequired()) { Property templateProperty = templateConfiguration.get(propertyDef.getName()); pluginConfiguration.put(templateProperty.deepCopy(false)); + modified = true; } }
- if (pluginConfiguration.getProperties().size() > numberOfProperties) { + for (PropertyDefinition propertyDef : updateReport.getUpdatedPropertyDefinitions()) { + if (propertyDef.isRequired()) { + String propertyValue = pluginConfiguration.getSimpleValue(propertyDef.getName(), null); + if (propertyValue == null) { + Property templateProperty = templateConfiguration.get(propertyDef.getName()); + pluginConfiguration.put(templateProperty.deepCopy(false)); + modified = true; + } + } + } + +// if (pluginConfiguration.getProperties().size() > numberOfProperties) { + if (modified) { resource.setMtime(new Date().getTime()); } }