[rhq] Branch 'gwt' - 10 commits - modules/core modules/enterprise
by Greg Hinkle
modules/core/domain/src/main/java/org/rhq/core/domain/bundle/BundleType.java | 2
modules/core/domain/src/main/java/org/rhq/core/domain/measurement/MeasurementData.java | 7
modules/core/domain/src/main/java/org/rhq/core/domain/measurement/MeasurementDataNumeric.java | 8
modules/core/domain/src/main/java/org/rhq/core/domain/measurement/MeasurementDefinition.java | 5
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/CoreGUI.java | 23 -
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/LoginView.java | 135 ++++++
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/ViewPath.java | 8
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/AdministrationView.java | 4
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/roles/RoleEditView.java | 59 ++
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/roles/RoleResourceGroupSelector.java | 45 ++
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/BundleTopView.java | 63 ++-
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/list/BundleView.java | 206 ++++++----
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/list/BundlesListView.java | 26 -
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/tree/BundleTreeDataSource.java | 188 +++++++++
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/tree/BundleTreeView.java | 91 ++++
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/version/BundleVersionView.java | 199 +++++++++
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/version/file/FileListView.java | 84 ++++
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/DashboardView.java | 5
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/DashboardsView.java | 9
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/PortletFactory.java | 9
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/inventory/resource/graph/GraphPortlet.java | 5
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/store/StoredPortlet.java | 5
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/footer/FavoritesButton.java | 6
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/ResourceGroupGWTService.java | 2
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/RoleGWTService.java | 4
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/ResourceGroupsDataSource.java | 2
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/ResourceTreeView.java | 11
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/monitoring/SmallGraphView.java | 16
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/selection/AbstractSelector.java | 15
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/selection/ResourceGroupSelector.java | 8
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/selection/ResourceSelector.java | 4
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/RPCDataSource.java | 4
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ResourceGroupGWTServiceImpl.java | 7
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/RoleGWTServiceImpl.java | 16
modules/enterprise/gui/coregui/src/main/webapp/images/subsystems/bundle/BundleDeployment_16.png |binary
modules/enterprise/gui/coregui/src/main/webapp/images/subsystems/bundle/BundleDeployment_24.png |binary
modules/enterprise/gui/coregui/src/main/webapp/images/subsystems/bundle/BundleVersion_16.png |binary
modules/enterprise/gui/coregui/src/main/webapp/images/subsystems/bundle/BundleVersion_24.png |binary
modules/enterprise/gui/coregui/src/main/webapp/images/subsystems/bundle/Bundle_16.png |binary
modules/enterprise/gui/coregui/src/main/webapp/images/subsystems/bundle/Bundle_24.png |binary
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/authz/RoleManagerBean.java | 74 ++-
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/authz/RoleManagerLocal.java | 7
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/authz/RoleManagerRemote.java | 5
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/webservices/WebservicesManagerBean.java | 4
44 files changed, 1220 insertions(+), 151 deletions(-)
New commits:
commit 13f0733ccb8ca2b2bead6d9057ebbffe17cd4eff
Author: Greg Hinkle <ghinkle(a)redhat.com>
Date: Fri Apr 30 17:20:32 2010 -0400
icons for the bundle area
diff --git a/modules/enterprise/gui/coregui/src/main/webapp/images/subsystems/bundle/BundleDeployment_16.png b/modules/enterprise/gui/coregui/src/main/webapp/images/subsystems/bundle/BundleDeployment_16.png
new file mode 100644
index 0000000..78a92d9
Binary files /dev/null and b/modules/enterprise/gui/coregui/src/main/webapp/images/subsystems/bundle/BundleDeployment_16.png differ
diff --git a/modules/enterprise/gui/coregui/src/main/webapp/images/subsystems/bundle/BundleDeployment_24.png b/modules/enterprise/gui/coregui/src/main/webapp/images/subsystems/bundle/BundleDeployment_24.png
new file mode 100644
index 0000000..b2ef100
Binary files /dev/null and b/modules/enterprise/gui/coregui/src/main/webapp/images/subsystems/bundle/BundleDeployment_24.png differ
diff --git a/modules/enterprise/gui/coregui/src/main/webapp/images/subsystems/bundle/BundleVersion_16.png b/modules/enterprise/gui/coregui/src/main/webapp/images/subsystems/bundle/BundleVersion_16.png
new file mode 100644
index 0000000..6b34692
Binary files /dev/null and b/modules/enterprise/gui/coregui/src/main/webapp/images/subsystems/bundle/BundleVersion_16.png differ
diff --git a/modules/enterprise/gui/coregui/src/main/webapp/images/subsystems/bundle/BundleVersion_24.png b/modules/enterprise/gui/coregui/src/main/webapp/images/subsystems/bundle/BundleVersion_24.png
new file mode 100644
index 0000000..442f70b
Binary files /dev/null and b/modules/enterprise/gui/coregui/src/main/webapp/images/subsystems/bundle/BundleVersion_24.png differ
diff --git a/modules/enterprise/gui/coregui/src/main/webapp/images/subsystems/bundle/Bundle_16.png b/modules/enterprise/gui/coregui/src/main/webapp/images/subsystems/bundle/Bundle_16.png
new file mode 100644
index 0000000..78f3f34
Binary files /dev/null and b/modules/enterprise/gui/coregui/src/main/webapp/images/subsystems/bundle/Bundle_16.png differ
diff --git a/modules/enterprise/gui/coregui/src/main/webapp/images/subsystems/bundle/Bundle_24.png b/modules/enterprise/gui/coregui/src/main/webapp/images/subsystems/bundle/Bundle_24.png
new file mode 100644
index 0000000..6605abb
Binary files /dev/null and b/modules/enterprise/gui/coregui/src/main/webapp/images/subsystems/bundle/Bundle_24.png differ
commit cc3a928d78a8dccfdec4df1a653ac7f0af1e0305
Author: Greg Hinkle <ghinkle(a)redhat.com>
Date: Fri Apr 30 17:18:25 2010 -0400
First version of the bundle tree
updated bundle and bundle version screens
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/ViewPath.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/ViewPath.java
index c3d82b8..8ad5d1f 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/ViewPath.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/ViewPath.java
@@ -72,4 +72,12 @@ public class ViewPath {
public boolean isNext(ViewId providedViewId) {
return ((index + 1) < viewPath.size() && providedViewId != null && getNext().equals(providedViewId));
}
+
+ public boolean isNextEnd() {
+ return viewPath.size() <= index+1;
+ }
+
+ public int viewsLeft() {
+ return viewPath.size() - index - 1;
+ }
}
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 4741f56..e2907b5 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
@@ -19,16 +19,30 @@
package org.rhq.enterprise.gui.coregui.client.bundle;
import com.smartgwt.client.types.VisibilityMode;
+import com.smartgwt.client.widgets.Canvas;
import com.smartgwt.client.widgets.layout.HLayout;
import com.smartgwt.client.widgets.layout.SectionStack;
import com.smartgwt.client.widgets.layout.SectionStackSection;
+import com.smartgwt.client.widgets.tree.TreeNode;
+import org.rhq.core.domain.bundle.BundleVersion;
+import org.rhq.enterprise.gui.coregui.client.BookmarkableView;
+import org.rhq.enterprise.gui.coregui.client.ViewId;
+import org.rhq.enterprise.gui.coregui.client.ViewPath;
+import org.rhq.enterprise.gui.coregui.client.bundle.list.BundleView;
import org.rhq.enterprise.gui.coregui.client.bundle.list.BundlesListView;
+import org.rhq.enterprise.gui.coregui.client.bundle.tree.BundleTreeView;
/**
* @author Greg Hinkle
*/
-public class BundleTopView extends HLayout {
+public class BundleTopView extends HLayout implements BookmarkableView {
+ private BundleTreeView bundleTreeView;
+
+ private Canvas contentCanvas;
+
+ private ViewId currentNextPath;
+ private BundleView bundleView;
public BundleTopView() {
setWidth100();
@@ -45,12 +59,51 @@ public class BundleTopView extends HLayout {
sectionStack.setWidth(250);
sectionStack.setHeight100();
- sectionStack.addSection(new SectionStackSection("Bundles"));
- sectionStack.addSection(new SectionStackSection("Repositories"));
- sectionStack.addSection(new SectionStackSection("Providers"));
+ SectionStackSection bundlesSection = new SectionStackSection("Bundles");
+ bundleTreeView = new BundleTreeView();
+ bundlesSection.addItem(bundleTreeView);
+ sectionStack.addSection(bundlesSection);
+
+ SectionStackSection repositoriesSection = new SectionStackSection("Repositories");
+ sectionStack.addSection(repositoriesSection);
+
+ SectionStackSection providersSection = new SectionStackSection("Providers");
+ sectionStack.addSection(providersSection);
addMember(sectionStack);
- addMember(new BundlesListView());
+ contentCanvas = new Canvas();
+ contentCanvas.setWidth100();
+ contentCanvas.setHeight100();
+ addMember(contentCanvas);
+
+ }
+
+ public void setContent(Canvas newContent) {
+ if (contentCanvas.getChildren().length > 0)
+ contentCanvas.getChildren()[0].destroy();
+ contentCanvas.addChild(newContent);
+ contentCanvas.markForRedraw();
+ }
+
+
+ public void renderView(ViewPath viewPath) {
+
+ bundleTreeView.selectPath(viewPath);
+
+
+ if (viewPath.isEnd()) {
+ currentNextPath = null;
+ setContent(new BundlesListView());
+ } else if (viewPath.getCurrent().getPath().equals("Bundle")) {
+ if (!viewPath.getNext().equals(currentNextPath)) {
+ currentNextPath = viewPath.getNext();
+ bundleView = new BundleView();
+ setContent(bundleView);
+ bundleView.renderView(viewPath.next());
+ } else {
+ bundleView.renderView(viewPath.next());
+ }
+ }
}
}
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 be0e415..cd23e12 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
@@ -18,36 +18,52 @@
*/
package org.rhq.enterprise.gui.coregui.client.bundle.list;
-import com.smartgwt.client.data.Record;
-import com.smartgwt.client.types.Alignment;
+import java.util.HashSet;
+
+import com.google.gwt.user.client.rpc.AsyncCallback;
import com.smartgwt.client.types.Overflow;
import com.smartgwt.client.types.SelectionAppearance;
import com.smartgwt.client.types.SelectionStyle;
import com.smartgwt.client.widgets.Canvas;
-import com.smartgwt.client.widgets.Label;
import com.smartgwt.client.widgets.form.DynamicForm;
import com.smartgwt.client.widgets.form.fields.StaticTextItem;
+import com.smartgwt.client.widgets.grid.CellFormatter;
+import com.smartgwt.client.widgets.grid.ListGridRecord;
+import com.smartgwt.client.widgets.layout.HLayout;
import com.smartgwt.client.widgets.layout.VLayout;
import com.smartgwt.client.widgets.tab.Tab;
import com.smartgwt.client.widgets.tab.TabSet;
-import org.rhq.core.domain.bundle.composite.BundleWithLatestVersionComposite;
+import org.rhq.core.domain.bundle.Bundle;
+import org.rhq.core.domain.criteria.BundleCriteria;
+import org.rhq.core.domain.tagging.Tag;
+import org.rhq.core.domain.util.PageList;
+import org.rhq.enterprise.gui.coregui.client.BookmarkableView;
+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.version.BundleVersionView;
import org.rhq.enterprise.gui.coregui.client.components.HeaderLabel;
import org.rhq.enterprise.gui.coregui.client.components.table.Table;
+import org.rhq.enterprise.gui.coregui.client.components.tagging.TagEditorView;
+import org.rhq.enterprise.gui.coregui.client.components.tagging.TagsChangedCallback;
+import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup;
+import org.rhq.enterprise.gui.coregui.client.util.message.Message;
-public class BundleView extends VLayout {
+public class BundleView extends VLayout implements BookmarkableView {
private int bundleBeingViewed = 0;
- private Label message = new Label("Select a bundle...");
- private VLayout canvas;
private HeaderLabel headerLabel;
- private StaticTextItem descriptionItem;
- private StaticTextItem latestVersionItem;
+ DynamicForm form;
private Table bundleVersionsTable;
+ private Bundle bundle;
+
public BundleView() {
super();
+ setWidth100();
+ setHeight100();
setPadding(10);
setOverflow(Overflow.AUTO);
}
@@ -55,15 +71,14 @@ public class BundleView extends VLayout {
@Override
protected void onInit() {
super.onInit();
- addMember(message);
- addMember(buildCanvas());
- canvas.hide();
+
}
- private Canvas buildCanvas() {
- canvas = new VLayout();
+ public void viewBundle(Bundle bundle, ViewId nextViewId) {
+ this.bundle = bundle;
+
+ headerLabel = new HeaderLabel("<img src=\"" + Canvas.getImgURL("subsystems/bundle/Bundle_24.png") + "\"/> " + bundle.getName());
- headerLabel = new HeaderLabel("<bundle name>");
TabSet tabs = new TabSet();
Tab summaryTab = createSummaryTab();
@@ -75,9 +90,18 @@ public class BundleView extends VLayout {
Tab deploymentsTab = createDeploymentsTab();
tabs.addTab(deploymentsTab);
- canvas.addMember(headerLabel);
- canvas.addMember(tabs);
- return canvas;
+ addMember(headerLabel);
+ addMember(tabs);
+
+ if (nextViewId != null) {
+ if (nextViewId.getPath().equals("versions")) {
+ tabs.selectTab(versionsTab);
+ } else if (nextViewId.getPath().equals("deployments")) {
+ tabs.selectTab(deploymentsTab);
+ }
+ }
+
+ markForRedraw();
}
private Tab createDeploymentsTab() {
@@ -96,6 +120,12 @@ public class BundleView extends VLayout {
bundleVersionsTable.getListGrid().getField("id").setWidth("60");
bundleVersionsTable.getListGrid().getField("name").setWidth("25%");
+ bundleVersionsTable.getListGrid().getField("name").setCellFormatter(new CellFormatter() {
+ public String format(Object o, ListGridRecord listGridRecord, int i, int i1) {
+ return "<a href=\"#Bundles/Bundle/" + bundle.getId() + "/versions/" + listGridRecord.getAttribute("id") + "\">" + o + "</a>";
+ }
+ });
+
bundleVersionsTable.getListGrid().getField("version").setWidth("10%");
bundleVersionsTable.getListGrid().getField("fileCount").setWidth("10%");
bundleVersionsTable.getListGrid().getField("description").setWidth("*");
@@ -104,73 +134,117 @@ public class BundleView extends VLayout {
bundleVersionsTable.getListGrid().setSelectionAppearance(SelectionAppearance.ROW_STYLE);
versionsTab.setPane(bundleVersionsTable);
+
+ // versions tab
+ BundleVersionDataSource bvDataSource;
+ bvDataSource = (BundleVersionDataSource) bundleVersionsTable.getDataSource();
+ bvDataSource.setBundleId(bundleBeingViewed);
+ bvDataSource.fetchData();
+ bundleVersionsTable.getListGrid().invalidateCache(); // TODO: is there a better way to refresh?
+
return versionsTab;
}
private Tab createSummaryTab() {
Tab summaryTab = new Tab("Summary");
- DynamicForm form = new DynamicForm();
+ form = new DynamicForm();
+ form.setWidth("50%");
+ form.setWrapItemTitles(false);
form.setPadding(10);
- descriptionItem = new StaticTextItem("description", "Description");
- descriptionItem.setTitleAlign(Alignment.LEFT);
- descriptionItem.setAlign(Alignment.LEFT);
+ StaticTextItem descriptionItem = new StaticTextItem("description", "Description");
descriptionItem.setWrap(false);
- descriptionItem.setValue("");
- latestVersionItem = new StaticTextItem("latestVersion", "Latest Version");
- latestVersionItem.setTitleAlign(Alignment.LEFT);
- latestVersionItem.setAlign(Alignment.LEFT);
+ StaticTextItem versionCountItem = new StaticTextItem("versionCount", "Version Count");
+
+
+ StaticTextItem latestVersionItem = new StaticTextItem("latestVersion", "Latest Version");
latestVersionItem.setWrap(false);
- latestVersionItem.setValue("");
- form.setFields(descriptionItem, latestVersionItem);
- summaryTab.setPane(form);
+
+ StaticTextItem liveDeployments = new StaticTextItem("liveDeployments", "Live Deployments");
+
+
+ form.setFields(descriptionItem, versionCountItem, latestVersionItem, liveDeployments);
+
+
+ form.setValue("description", bundle.getDescription());
+ form.setValue("versionCount", bundle.getBundleVersions() != null ? bundle.getBundleVersions().size() : 0);
+
+
+ HLayout layout = new HLayout();
+ layout.setWidth100();
+
+ layout.addMember(form);
+
+ TagEditorView tagEditor = new TagEditorView(bundle.getTags(), false, new TagsChangedCallback() {
+ public void tagsChanged(HashSet<Tag> tags) {
+ GWTServiceLookup.getTagService().updateBundleTags(bundleBeingViewed, tags, new AsyncCallback<Void>() {
+ public void onFailure(Throwable caught) {
+ CoreGUI.getErrorHandler().handleError("Failed to update bundle's tags", caught);
+ }
+
+ public void onSuccess(Void result) {
+ CoreGUI.getMessageCenter().notify(new Message("Bundle tags updated", Message.Severity.Info));
+ }
+ });
+ }
+ });
+ layout.addMember(tagEditor);
+
+
+ summaryTab.setPane(layout);
+
return summaryTab;
}
- public void viewRecord(Record record) {
- if (record == null) {
- viewNone();
- } else {
- final BundleWithLatestVersionComposite object;
- object = (BundleWithLatestVersionComposite) record.getAttributeAsObject("object");
-
- if (object == null) {
- viewNone();
- } else {
- if (bundleBeingViewed != object.getBundleId()) {
- bundleBeingViewed = object.getBundleId();
-
- // summary tab
- headerLabel.setContents(object.getBundleName());
- latestVersionItem.setValue(object.getLatestVersion());
- descriptionItem.setValue(object.getBundleDescription());
-
- // versions tab
- BundleVersionDataSource bvDataSource;
- bvDataSource = (BundleVersionDataSource) bundleVersionsTable.getDataSource();
- bvDataSource.setBundleId(bundleBeingViewed);
- bvDataSource.fetchData();
- bundleVersionsTable.getListGrid().invalidateCache(); // TODO: is there a better way to refresh?
- }
- try {
- message.hide();
- canvas.show();
- markForRedraw();
- } catch (Throwable t) {
- CoreGUI.getErrorHandler().handleError("Cannot view bundle record", t);
+
+ public void renderView(final ViewPath viewPath) {
+ int bundleId = Integer.parseInt(viewPath.getCurrent().getPath());
+
+ final ViewId viewId = viewPath.getCurrent();
+
+ viewPath.next();
+ if (viewPath.isEnd() || viewPath.isNextEnd()) {
+
+ if (bundleBeingViewed != bundleId) {
+ bundleBeingViewed = bundleId;
+
+ BundleCriteria criteria = new BundleCriteria();
+ criteria.addFilterId(bundleId);
+ criteria.fetchBundleVersions(true);
+ criteria.fetchTags(true);
+
+ GWTServiceLookup.getBundleService().findBundlesByCriteria(criteria,
+ new AsyncCallback<PageList<Bundle>>() {
+ public void onFailure(Throwable caught) {
+ CoreGUI.getErrorHandler().handleError("Failed to load bundle", caught);
+ }
+
+ public void onSuccess(PageList<Bundle> result) {
+ Bundle bundle = result.get(0);
+ viewBundle(bundle, viewPath.getCurrent());
+ viewId.getBreadcrumbs().add(new Breadcrumb(String.valueOf(bundle.getId()), bundle.getName()));
+ CoreGUI.refreshBreadCrumbTrail();
+ }
+ });
+ }
+ } else {
+ if (viewPath.getCurrent().getPath().equals("versions")) {
+ if (viewPath.isEnd()) {
+
+ // versions list screen
+ } else {
+ // one version
+ removeMembers(getMembers());
+ BundleVersionView view = new BundleVersionView();
+ addMember(view);
+ view.renderView(viewPath.next());
}
}
}
}
-
- public void viewNone() {
- message.show();
- canvas.hide();
- markForRedraw();
- }
}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/list/BundlesListView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/list/BundlesListView.java
index 21b04bf..2d49a44 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/list/BundlesListView.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/list/BundlesListView.java
@@ -22,6 +22,7 @@ import com.google.gwt.user.client.rpc.AsyncCallback;
import com.smartgwt.client.types.Overflow;
import com.smartgwt.client.types.SelectionAppearance;
import com.smartgwt.client.types.SelectionStyle;
+import com.smartgwt.client.widgets.grid.CellFormatter;
import com.smartgwt.client.widgets.grid.ListGridRecord;
import com.smartgwt.client.widgets.grid.events.RecordClickEvent;
import com.smartgwt.client.widgets.grid.events.RecordClickHandler;
@@ -49,19 +50,29 @@ import org.rhq.enterprise.gui.coregui.client.util.message.Message.Severity;
*/
public class BundlesListView extends VLayout {
+ public BundlesListView() {
+ setWidth100();
+ setHeight100();
+ }
+
@Override
protected void onDraw() {
super.onDraw();
final Table table = new Table("Bundles");
- table.setHeight("50%");
- table.setShowResizeBar(true);
- table.setResizeBarTarget("next");
table.setDataSource(new BundlesWithLatestVersionDataSource());
table.getListGrid().getField("id").setWidth("60");
table.getListGrid().getField("name").setWidth("25%");
+ table.getListGrid().getField("name").setCellFormatter(new CellFormatter() {
+ public String format(Object o, ListGridRecord listGridRecord, int i, int i1) {
+ return "<a href=\"#Bundles/Bundle/" + listGridRecord.getAttribute("id") + "\">" + o + "</a>";
+ }
+ });
+
+
+
table.getListGrid().getField("description").setWidth("25%");
table.getListGrid().getField("latestVersion").setWidth("25%");
table.getListGrid().getField("versionsCount").setWidth("*");
@@ -154,14 +165,5 @@ public class BundlesListView extends VLayout {
addMember(table);
- final BundleView bundleView = new BundleView();
- bundleView.setOverflow(Overflow.AUTO);
- addMember(bundleView);
-
- table.getListGrid().addRecordClickHandler(new RecordClickHandler() {
- public void onRecordClick(RecordClickEvent event) {
- bundleView.viewRecord(event.getRecord());
- }
- });
}
}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/tree/BundleTreeDataSource.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/tree/BundleTreeDataSource.java
new file mode 100644
index 0000000..e20dc58
--- /dev/null
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/tree/BundleTreeDataSource.java
@@ -0,0 +1,188 @@
+/*
+ * 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.bundle.tree;
+
+import java.util.ArrayList;
+import java.util.Collection;
+
+import com.google.gwt.user.client.rpc.AsyncCallback;
+import com.smartgwt.client.data.DSRequest;
+import com.smartgwt.client.data.DSResponse;
+import com.smartgwt.client.data.DataSourceField;
+import com.smartgwt.client.data.fields.DataSourceImageField;
+import com.smartgwt.client.data.fields.DataSourceTextField;
+import com.smartgwt.client.widgets.grid.ListGridRecord;
+import com.smartgwt.client.widgets.tree.TreeNode;
+
+import org.rhq.core.domain.bundle.Bundle;
+import org.rhq.core.domain.bundle.BundleDeployment;
+import org.rhq.core.domain.bundle.BundleVersion;
+import org.rhq.core.domain.criteria.BundleCriteria;
+import org.rhq.core.domain.criteria.BundleVersionCriteria;
+import org.rhq.core.domain.util.PageList;
+import org.rhq.enterprise.gui.coregui.client.CoreGUI;
+import org.rhq.enterprise.gui.coregui.client.gwt.BundleGWTServiceAsync;
+import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup;
+import org.rhq.enterprise.gui.coregui.client.util.RPCDataSource;
+
+/**
+ * @author Greg Hinkle
+ */
+public class BundleTreeDataSource extends RPCDataSource {
+
+ private BundleGWTServiceAsync bundleService = GWTServiceLookup.getBundleService();
+
+
+
+ public BundleTreeDataSource() {
+ DataSourceField idDataField = new DataSourceTextField("id", "ID");
+ idDataField.setPrimaryKey(true);
+
+ DataSourceTextField nameDataField = new DataSourceTextField("name", "Name");
+ nameDataField.setCanEdit(false);
+
+ DataSourceTextField descriptionDataField = new DataSourceTextField("description", "Description");
+ descriptionDataField.setCanEdit(false);
+
+ DataSourceTextField parentIdField = new DataSourceTextField("parentId", "Parent ID");
+ parentIdField.setForeignKey("id");
+
+
+ setFields(idDataField, nameDataField, parentIdField);
+ }
+
+ @Override
+ protected void executeFetch(final DSRequest request, final DSResponse response) {
+
+ String p = request.getCriteria().getAttribute("parentId");
+ // load the bundles
+
+ if (p == null) {
+
+ BundleCriteria criteria = new BundleCriteria();
+ criteria.setPageControl(getPageControl(request));
+
+ bundleService.findBundlesByCriteria(criteria, new AsyncCallback<PageList<Bundle>>() {
+ public void onFailure(Throwable caught) {
+ CoreGUI.getErrorHandler().handleError("Failed to load bundle data", caught);
+ response.setStatus(DSResponse.STATUS_FAILURE);
+ processResponse(request.getRequestId(), response);
+ }
+
+ public void onSuccess(PageList<Bundle> result) {
+ response.setData(buildRecords(result));
+ response.setTotalRows(result.getTotalSize());
+ processResponse(request.getRequestId(), response);
+ }
+ });
+ } else {
+ if (p.endsWith(":versions")) {
+ int bundleId = Integer.parseInt(p.substring(0, p.indexOf(":")));
+ BundleVersionCriteria criteria = new BundleVersionCriteria();
+ criteria.addFilterBundleId(bundleId);
+ bundleService.findBundleVersionsByCriteria(criteria, new AsyncCallback<PageList<BundleVersion>>() {
+ public void onFailure(Throwable caught) {
+ CoreGUI.getErrorHandler().handleError("Failed to load bundle data", caught);
+ response.setStatus(DSResponse.STATUS_FAILURE);
+ processResponse(request.getRequestId(), response);
+ }
+
+ public void onSuccess(PageList<BundleVersion> result) {
+ response.setData(buildRecords(result));
+ response.setTotalRows(result.getTotalSize());
+ processResponse(request.getRequestId(), response);
+ }
+ });
+ }
+ }
+
+
+ }
+
+ @Override
+ public Object copyValues(ListGridRecord from) {
+ return null; // TODO: Implement this method.
+ }
+
+ @Override
+ public ListGridRecord[] buildRecords(Collection list) {
+ if (list == null) {
+ return null;
+ }
+
+ ArrayList<ListGridRecord> records = new ArrayList<ListGridRecord>();
+
+ int i = 0;
+ for (Object item : list) {
+ records.add(copyValues(item));
+ if (item instanceof Bundle) {
+ Bundle bundle = (Bundle) item;
+
+ TreeNode versionNode = new TreeNode("Versions");
+ versionNode.setID(bundle.getId() + ":versions");
+ versionNode.setParentID(String.valueOf(bundle.getId()));
+ versionNode.setName("Versions");
+ versionNode.setAttribute("name", "Versions");
+ records.add(versionNode);
+
+ TreeNode deploymentsNode = new TreeNode("Deployments");
+ deploymentsNode.setID(bundle.getId() + ":deployments");
+ deploymentsNode.setParentID(String.valueOf(bundle.getId()));
+ deploymentsNode.setName("Deployments");
+ records.add(deploymentsNode);
+
+ }
+
+ }
+ return records.toArray(new ListGridRecord[records.size()]);
+ }
+
+
+ @Override
+ public ListGridRecord copyValues(Object from) {
+ TreeNode node = new TreeNode();
+ if (from instanceof Bundle) {
+ Bundle bundle = (Bundle) from;
+ node.setID(String.valueOf(bundle.getId()));
+ node.setName(bundle.getName());
+ node.setIcon("subsystems/bundle/Bundle_16.png");
+
+ } else if (from instanceof BundleVersion) {
+ BundleVersion version = (BundleVersion) from;
+ node.setName(version.getName() + " (" + version.getVersion() + ")");
+ node.setID(version.getBundle().getId() + ":versions:" + version.getId());
+ node.setParentID(version.getBundle().getId() + ":versions");
+ node.setIsFolder(false);
+ node.setIcon("subsystems/bundle/BundleVersion_16.png");
+
+ } else if (from instanceof BundleDeployment) {
+ BundleDeployment deployment = (BundleDeployment) from;
+ node.setName(deployment.getName() + " (" + deployment.getBundleVersion().getVersion() + ")");
+ node.setParentID(deployment.getBundleVersion().getBundle().getId() + ":deployments:" + deployment.getId());
+ node.setParentID(deployment.getBundleVersion().getBundle().getId() + ":deployments");
+ node.setIsFolder(false);
+ node.setIcon("subsystems/bundle/BundleDeployment_16.png");
+ }
+ return node;
+ }
+}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/tree/BundleTreeView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/tree/BundleTreeView.java
new file mode 100644
index 0000000..effd488
--- /dev/null
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/tree/BundleTreeView.java
@@ -0,0 +1,91 @@
+/*
+ * 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.bundle.tree;
+
+import com.google.gwt.user.client.History;
+import com.smartgwt.client.types.SelectionStyle;
+import com.smartgwt.client.widgets.grid.events.SelectionChangedHandler;
+import com.smartgwt.client.widgets.grid.events.SelectionEvent;
+import com.smartgwt.client.widgets.layout.VLayout;
+import com.smartgwt.client.widgets.tree.TreeGrid;
+import com.smartgwt.client.widgets.tree.TreeNode;
+import com.smartgwt.client.widgets.tree.events.NodeClickEvent;
+import com.smartgwt.client.widgets.tree.events.NodeClickHandler;
+
+import org.rhq.enterprise.gui.coregui.client.ViewId;
+import org.rhq.enterprise.gui.coregui.client.ViewPath;
+
+/**
+ * @author Greg Hinkle
+ */
+public class BundleTreeView extends TreeGrid {
+
+ public BundleTreeView() {
+
+ setWidth100();
+ setHeight100();
+
+ setWidth100();
+ setHeight100();
+ setShowRoot(true);
+ setAutoFetchData(true);
+ setAnimateFolders(false);
+ setSelectionType(SelectionStyle.SINGLE);
+ setShowRollOver(false);
+ setSortField("name");
+ setShowHeader(false);
+
+ setDataSource(new BundleTreeDataSource());
+
+ addNodeClickHandler(new NodeClickHandler() {
+ public void onNodeClick(NodeClickEvent event) {
+ String path = event.getNode().getAttribute("id").replaceAll(":", "/");
+ History.newItem("Bundles/Bundle/" + path);
+ }
+ });
+ }
+
+ public void selectPath(ViewPath viewPath) {
+
+ if (viewPath.viewsLeft() > 0) {
+ String key = "";
+ for (ViewId view : viewPath.getViewPath().subList(2, viewPath.getViewPath().size())) {
+ if (key.length() > 0)
+ key += ":";
+
+ key += view.getPath();
+ }
+
+ TreeNode node = getTree().findById(key);
+ if (node != null) {
+ deselectAllRecords();
+ selectRecord(node);
+ }
+ } else {
+ deselectAllRecords();
+ selectRecord(0);
+ }
+
+
+ }
+}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/version/BundleVersionView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/version/BundleVersionView.java
new file mode 100644
index 0000000..6a9aa6a
--- /dev/null
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/version/BundleVersionView.java
@@ -0,0 +1,199 @@
+/*
+ * 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.bundle.version;
+
+import java.util.HashSet;
+
+import com.google.gwt.user.client.rpc.AsyncCallback;
+import com.smartgwt.client.types.TitleOrientation;
+import com.smartgwt.client.widgets.Canvas;
+import com.smartgwt.client.widgets.form.DynamicForm;
+import com.smartgwt.client.widgets.form.fields.CanvasItem;
+import com.smartgwt.client.widgets.form.fields.StaticTextItem;
+import com.smartgwt.client.widgets.form.fields.TextAreaItem;
+import com.smartgwt.client.widgets.layout.VLayout;
+import com.smartgwt.client.widgets.tab.Tab;
+import com.smartgwt.client.widgets.tab.TabSet;
+
+import org.rhq.core.domain.bundle.BundleVersion;
+import org.rhq.core.domain.criteria.BundleVersionCriteria;
+import org.rhq.core.domain.tagging.Tag;
+import org.rhq.core.domain.util.PageList;
+import org.rhq.enterprise.gui.coregui.client.BookmarkableView;
+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.version.file.FileListView;
+import org.rhq.enterprise.gui.coregui.client.components.HeaderLabel;
+import org.rhq.enterprise.gui.coregui.client.components.tagging.TagEditorView;
+import org.rhq.enterprise.gui.coregui.client.components.tagging.TagsChangedCallback;
+import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup;
+import org.rhq.enterprise.gui.coregui.client.util.message.Message;
+
+/**
+ * @author Greg Hinkle
+ */
+public class BundleVersionView extends VLayout implements BookmarkableView {
+
+ private BundleVersion version;
+
+ public BundleVersionView() {
+ setWidth100();
+ setHeight100();
+ }
+
+ public void viewBundleVersion(BundleVersion version, ViewId nextViewId) {
+ this.version = version;
+
+
+ TabSet tabs = new TabSet();
+ tabs.addTab(createSummaryTab());
+
+ tabs.addTab(createLiveDeploymentsTab());
+
+ tabs.addTab(createFilesTab());
+
+ tabs.addTab(createUpdateHistoryTab());
+
+
+ addMember(new HeaderLabel("<img src=\"" + Canvas.getImgURL("subsystems/bundle/BundleVersion_24.png") + "\"/> " + version.getName()));
+ addMember(tabs);
+
+ if (nextViewId != null) {
+ if (nextViewId.getPath().equals("deployments")) {
+ tabs.selectTab(1);
+ } else if (nextViewId.getPath().equals("files")) {
+ tabs.selectTab(2);
+ } else if (nextViewId.getPath().equals("history")) {
+ tabs.selectTab(3);
+ }
+ }
+
+ markForRedraw();
+ }
+
+
+ private Tab createSummaryTab() {
+ Tab tab = new Tab("Summary");
+
+ DynamicForm form = new DynamicForm();
+ form.setWidth100();
+ form.setNumCols(4);
+
+ StaticTextItem versionItem = new StaticTextItem("version","Version");
+ versionItem.setValue(version.getVersion());
+
+ CanvasItem tagItem = new CanvasItem("tag");
+ tagItem.setShowTitle(false);
+ TagEditorView tagEditor = new TagEditorView(version.getTags(), false, new TagsChangedCallback() {
+ public void tagsChanged(HashSet<Tag> tags) {
+ GWTServiceLookup.getTagService().updateBundleVersionTags(version.getId(), tags, new AsyncCallback<Void>() {
+ public void onFailure(Throwable caught) {
+ CoreGUI.getErrorHandler().handleError("Failed to update bundle version's tags", caught);
+ }
+
+ public void onSuccess(Void result) {
+ CoreGUI.getMessageCenter().notify(new Message("Bundle Version tags updated", Message.Severity.Info));
+ }
+ });
+ }
+ });
+ tagItem.setCanvas(tagEditor);
+ tagItem.setRowSpan(4);
+
+ StaticTextItem descriptionItem = new StaticTextItem("description","Description");
+ descriptionItem.setValue(version.getDescription());
+
+ StaticTextItem liveDeploymentsItem = new StaticTextItem("deployments","Deployments");
+ liveDeploymentsItem.setValue(version.getBundleDeployments().size());
+
+ StaticTextItem filesItems = new StaticTextItem("files","Files");
+ filesItems.setValue(version.getBundleFiles().size());
+
+
+
+
+ TextAreaItem recipeItem = new TextAreaItem("recipe","Recipe");
+ recipeItem.setTitleOrientation(TitleOrientation.TOP);
+ recipeItem.setColSpan(4);
+ recipeItem.setWidth("100%");
+ recipeItem.setValue(version.getRecipe());
+
+
+ form.setFields(versionItem,tagItem, descriptionItem, liveDeploymentsItem, filesItems, recipeItem);
+
+ tab.setPane(form);
+
+ return tab;
+ }
+
+ private Tab createLiveDeploymentsTab() {
+ Tab tab = new Tab("Live Deployments");
+
+ return tab;
+ }
+
+ private Tab createFilesTab() {
+ Tab tab = new Tab("Files");
+
+ FileListView filesView = new FileListView(version.getBundleFiles());
+
+ tab.setPane(filesView);
+
+ return tab;
+ }
+
+ private Tab createUpdateHistoryTab() {
+ Tab tab = new Tab("Update History");
+
+ return tab;
+ }
+
+
+
+
+ public void renderView(final ViewPath viewPath) {
+ int bundleVersionId = Integer.parseInt(viewPath.getCurrent().getPath());
+
+
+ BundleVersionCriteria criteria = new BundleVersionCriteria();
+ criteria.addFilterId(bundleVersionId);
+ criteria.fetchBundle(true);
+ criteria.fetchBundleFiles(true);
+ criteria.fetchBundleDeployments(true);
+ criteria.fetchConfigurationDefinition(true);
+
+ GWTServiceLookup.getBundleService().findBundleVersionsByCriteria(criteria,
+ new AsyncCallback<PageList<BundleVersion>>() {
+ public void onFailure(Throwable caught) {
+ CoreGUI.getErrorHandler().handleError("Failed to load budle version", caught);
+ }
+
+ public void onSuccess(PageList<BundleVersion> result) {
+ viewBundleVersion(result.get(0), viewPath.getCurrent());
+ }
+ });
+
+
+ }
+}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/version/file/FileListView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/version/file/FileListView.java
new file mode 100644
index 0000000..0d5f02e
--- /dev/null
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/version/file/FileListView.java
@@ -0,0 +1,84 @@
+/*
+ * 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.bundle.version.file;
+
+import java.util.List;
+
+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.layout.VLayout;
+
+import org.rhq.core.domain.bundle.BundleFile;
+import org.rhq.core.domain.bundle.BundleVersion;
+import org.rhq.enterprise.gui.coregui.client.components.table.Table;
+
+/**
+ * @author Greg Hinkle
+ */
+public class FileListView extends VLayout {
+
+ private List<BundleFile> files;
+
+ public FileListView(List<BundleFile> files) {
+ this.files = files;
+ }
+
+ @Override
+ protected void onDraw() {
+ super.onDraw();
+
+ Table table = new Table("Bundle Files");
+
+ ListGrid listGrid = table.getListGrid();
+
+ ListGridField id = new ListGridField("id", "Id");
+ id.setWidth("20%");
+
+ ListGridField name = new ListGridField("name", "Name");
+ name.setWidth("80%");
+
+ listGrid.setFields(id,name);
+
+ listGrid.setData(buildRecords(files));
+
+ addMember(listGrid);
+
+ }
+
+
+
+ private ListGridRecord[] buildRecords(List<BundleFile> files) {
+ ListGridRecord[] records = new ListGridRecord[files.size()];
+
+ int i = 0;
+ for (BundleFile file : files) {
+ ListGridRecord record = new ListGridRecord();
+ record.setAttribute("id",file.getId());
+ record.setAttribute("name", file.getPackageVersion().getFileName());
+ records[i++] = record;
+ }
+ return records;
+ }
+
+}
commit 8b73d728df3c1d81b467daa0714f2ae72882c38a
Author: Greg Hinkle <ghinkle(a)redhat.com>
Date: Fri Apr 30 16:51:21 2010 -0400
added missing method for webservices
diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/webservices/WebservicesManagerBean.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/webservices/WebservicesManagerBean.java
index 6e952ef..c3fb229 100644
--- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/webservices/WebservicesManagerBean.java
+++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/webservices/WebservicesManagerBean.java
@@ -1080,6 +1080,10 @@ public class WebservicesManagerBean implements WebservicesRemote {
roleManager.removeSubjectsFromRole(subject, roleId, subjectIds);
}
+ public void setAssignedResourceGroups(Subject subject, int roleId, int[] groupIds) {
+ roleManager.setAssignedResourceGroups(subject, roleId, groupIds);
+ }
+
//ROLEMANAGER: END ----------------------------------
//SUBJECT MANAGER: BEGIN ---------------------------------------
commit c8239a68740a082cd77c6d53e9eb360306b7f38a
Author: Greg Hinkle <ghinkle(a)redhat.com>
Date: Thu Apr 29 16:47:57 2010 -0400
Start to login screen, test dashboard tweaks
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 995d19b..60b4b4b 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
@@ -64,7 +64,10 @@ public class CoreGUI implements EntryPoint, ValueChangeHandler<String> {
private static ViewPath currentViewPath;
+ private static CoreGUI coreGUI;
+
public void onModuleLoad() {
+ coreGUI = this;
if (!GWT.isScript()) {
KeyIdentifier debugKey = new KeyIdentifier();
@@ -83,6 +86,9 @@ public class CoreGUI implements EntryPoint, ValueChangeHandler<String> {
}
});
+ messageCenter = new MessageCenter();
+
+
RequestBuilder b = new RequestBuilder(RequestBuilder.GET,
"/j_security_check.do?j_username=rhqadmin&j_password=rhqadmin");
try {
@@ -100,7 +106,6 @@ public class CoreGUI implements EntryPoint, ValueChangeHandler<String> {
e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates.
}
- messageCenter = new MessageCenter();
SubjectGWTServiceAsync subjectService = SubjectGWTServiceAsync.Util.getInstance();
@@ -115,18 +120,6 @@ public class CoreGUI implements EntryPoint, ValueChangeHandler<String> {
System.out.println("Logged in: " + result.getSessionId());
setSessionSubject(result);
userPreferences = new UserPreferences(result);
-
- buildCoreUI();
-
- /* We can cache all metadata right here
- ResourceTypeRepository.Cache.getInstance().getResourceTypes(
- (Integer[]) null, EnumSet.allOf(ResourceTypeRepository.MetadataType.class), new ResourceTypeRepository.TypesLoadedCallback() {
- public void onTypesLoaded(HashMap<Integer, ResourceType> types) {
- System.out.println("Preloaded [" + types.size() + "] resource types");
- buildCoreUI();
- }
- });
- */
}
});
}
@@ -195,6 +188,8 @@ public class CoreGUI implements EntryPoint, ValueChangeHandler<String> {
canvas = new DashboardsView();
} else if (breadcrumbName.equals("Bundles")) {
canvas = new BundleTopView();
+ } else if (breadcrumbName.equals("LogOut")) {
+ canvas = new LoginView();
} else {
canvas = null;
}
@@ -229,6 +224,8 @@ public class CoreGUI implements EntryPoint, ValueChangeHandler<String> {
// Subject s = new Subject(subject.getName(),subject.getFactive(), subject.getFsystem());
// s.setSessionId(subject.getSessionId());
CoreGUI.sessionSubject = subject;
+ CoreGUI.userPreferences = new UserPreferences(subject);
+ coreGUI.buildCoreUI();
}
public static void setContent(Canvas newContent) {
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
new file mode 100644
index 0000000..8f5e35a
--- /dev/null
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/LoginView.java
@@ -0,0 +1,135 @@
+/*
+ * 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;
+
+import com.google.gwt.http.client.Request;
+import com.google.gwt.http.client.RequestBuilder;
+import com.google.gwt.http.client.RequestCallback;
+import com.google.gwt.http.client.RequestException;
+import com.google.gwt.http.client.Response;
+import com.google.gwt.user.client.rpc.AsyncCallback;
+import com.smartgwt.client.types.Alignment;
+import com.smartgwt.client.widgets.Label;
+import com.smartgwt.client.widgets.Window;
+import com.smartgwt.client.widgets.form.DynamicForm;
+import com.smartgwt.client.widgets.form.fields.PasswordItem;
+import com.smartgwt.client.widgets.form.fields.SubmitItem;
+import com.smartgwt.client.widgets.form.fields.TextItem;
+import com.smartgwt.client.widgets.form.fields.events.ClickEvent;
+import com.smartgwt.client.widgets.form.fields.events.ClickHandler;
+import com.smartgwt.client.widgets.layout.VLayout;
+
+import org.rhq.core.domain.auth.Subject;
+import org.rhq.enterprise.gui.coregui.client.gwt.SubjectGWTServiceAsync;
+
+/**
+ * @author Greg Hinkle
+ */
+public class LoginView extends VLayout {
+
+
+ public LoginView() {
+ setWidth100();
+ setHeight100();
+ }
+
+ @Override
+ protected void onDraw() {
+ super.onDraw();
+
+
+ final DynamicForm form = new DynamicForm();
+
+ TextItem user = new TextItem("user","User");
+ PasswordItem password = new PasswordItem("password","Password");
+
+ final SubmitItem login = new SubmitItem("login","Login");
+ login.setAlign(Alignment.CENTER);
+ login.setColSpan(2);
+
+ form.setFields(user,password,login);
+
+ Window graphPopup = new Window();
+ graphPopup.setTitle("RHQ Login");
+ graphPopup.setWidth(400);
+ graphPopup.setHeight(400);
+ graphPopup.setIsModal(true);
+ graphPopup.setShowModalMask(true);
+ graphPopup.setCanDragResize(true);
+ graphPopup.centerInPage();
+ graphPopup.addItem(form);
+ graphPopup.show();
+
+ login.addClickHandler(new ClickHandler() {
+ public void onClick(ClickEvent clickEvent) {
+ login(form.getValueAsString("user"), form.getValueAsString("password"));
+ }
+ });
+
+ }
+
+ private void login(String user, String password) {
+ RequestBuilder b = new RequestBuilder(RequestBuilder.GET,
+ "/j_security_check.do?j_username=" + user + "&j_password=" + password );
+ try {
+ b.setCallback(new RequestCallback() {
+ public void onResponseReceived(Request request, Response response) {
+ System.out.println("Portal-War logged in");
+ }
+
+ public void onError(Request request, Throwable exception) {
+ System.out.println("Portal-War login failed");
+ }
+ });
+ b.send();
+ } catch (RequestException e) {
+ e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates.
+ }
+
+
+ SubjectGWTServiceAsync subjectService = SubjectGWTServiceAsync.Util.getInstance();
+
+ subjectService.login(user, password, new AsyncCallback<Subject>() {
+ public void onFailure(Throwable caught) {
+ System.out.println("Failed to login - cause: " + caught);
+ Label loginFailed = new Label("Failed to login - cause: " + caught);
+ loginFailed.draw();
+ }
+
+ public void onSuccess(Subject result) {
+ System.out.println("Logged in: " + result.getSessionId());
+ CoreGUI.setSessionSubject(result);
+
+ /* We can cache all metadata right here
+ ResourceTypeRepository.Cache.getInstance().getResourceTypes(
+ (Integer[]) null, EnumSet.allOf(ResourceTypeRepository.MetadataType.class), new ResourceTypeRepository.TypesLoadedCallback() {
+ public void onTypesLoaded(HashMap<Integer, ResourceType> types) {
+ System.out.println("Preloaded [" + types.size() + "] resource types");
+ buildCoreUI();
+ }
+ });
+ */
+ }
+ });
+ }
+}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/AdministrationView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/AdministrationView.java
index 5c31020..20ebafc 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/AdministrationView.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/AdministrationView.java
@@ -174,8 +174,6 @@ public class AdministrationView extends HLayout implements BookmarkableView {
final TreeNode manageDownloads = new TreeNode("Downloads");
final TreeNode manageLicense = new TreeNode("License");
final TreeNode managePlugins = new TreeNode("Plugins");
- FullHTMLPane pane = new FullHTMLPane("/rhq/admin/plugin/plugin-list.xhtml");
-
tree.setRoot(new TreeNode("System Configuration",
manageSettings, manageTemplates, manageDownloads, manageLicense, managePlugins));
@@ -252,6 +250,8 @@ public class AdministrationView extends HLayout implements BookmarkableView {
url = "/rhq/admin/downloads-body.xhtml";
} else if ("License".equals(page)) {
url = "/admin/license/LicenseAdmin.do?mode=view";
+ } else if ("Plugins".equals(page)) {
+ url = "/rhq/admin/plugin/plugin-list.xhtml";
}
url = addQueryStringParam(url, "nomenu=true");
content = new FullHTMLPane(url);
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/roles/RoleResourceGroupSelector.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/roles/RoleResourceGroupSelector.java
index 73bf032..8b7288f 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/roles/RoleResourceGroupSelector.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/roles/RoleResourceGroupSelector.java
@@ -23,12 +23,10 @@
package org.rhq.enterprise.gui.coregui.client.admin.roles;
import java.util.Collection;
-import java.util.List;
import com.smartgwt.client.widgets.grid.ListGridRecord;
import org.rhq.core.domain.resource.group.ResourceGroup;
-import org.rhq.core.domain.util.PageList;
import org.rhq.enterprise.gui.coregui.client.inventory.groups.ResourceGroupsDataSource;
import org.rhq.enterprise.gui.coregui.client.inventory.resource.selection.ResourceGroupSelector;
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/monitoring/SmallGraphView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/monitoring/SmallGraphView.java
index db4fbf8..f3dee98 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/monitoring/SmallGraphView.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/monitoring/SmallGraphView.java
@@ -116,6 +116,22 @@ public class SmallGraphView extends VLayout {
return "PlotHoverListener";
}
+ public int getResourceId() {
+ return resourceId;
+ }
+
+ public void setResourceId(int resourceId) {
+ this.resourceId = resourceId;
+ }
+
+ public int getDefinitionId() {
+ return definitionId;
+ }
+
+ public void setDefinitionId(int definitionId) {
+ this.definitionId = definitionId;
+ }
+
@Override
protected void onDraw() {
super.onDraw();
commit 2aabed546fc64f64356ca49231846aa30d8864ae
Author: Greg Hinkle <ghinkle(a)redhat.com>
Date: Thu Apr 29 16:47:16 2010 -0400
Group member mgmt gwt exposed
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 d0cc937..1915ec6 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
@@ -39,4 +39,6 @@ public interface ResourceGroupGWTService extends RemoteService {
PageList<ResourceGroup> findResourceGroupsByCriteria(ResourceGroupCriteria criteria);
PageList<GroupDefinition> findGroupDefinitionsByCriteria(ResourceGroupDefinitionCriteria criteria);
+
+ void ensureMembershipMatches(int groupId, int[] resourceIds);
}
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 867de6e..e154f45 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
@@ -18,8 +18,6 @@
*/
package org.rhq.enterprise.gui.coregui.server.gwt;
-import com.google.gwt.user.server.rpc.RemoteServiceServlet;
-
import org.rhq.core.domain.criteria.ResourceGroupCriteria;
import org.rhq.core.domain.criteria.ResourceGroupDefinitionCriteria;
import org.rhq.core.domain.resource.group.GroupDefinition;
@@ -27,7 +25,6 @@ import org.rhq.core.domain.resource.group.ResourceGroup;
import org.rhq.core.domain.util.PageList;
import org.rhq.enterprise.gui.coregui.client.gwt.ResourceGroupGWTService;
import org.rhq.enterprise.gui.coregui.server.util.SerialUtility;
-import org.rhq.enterprise.server.resource.group.ResourceGroupManagerBean;
import org.rhq.enterprise.server.resource.group.ResourceGroupManagerLocal;
import org.rhq.enterprise.server.resource.group.definition.GroupDefinitionManagerLocal;
import org.rhq.enterprise.server.util.LookupUtil;
@@ -54,4 +51,8 @@ public class ResourceGroupGWTServiceImpl extends AbstractGWTServiceImpl implemen
"ResourceGroupService.findGroupDefinitionsByCriteria");
}
+ public void ensureMembershipMatches(int groupId, int[] resourceIds) {
+ groupManager.ensureMembershipMatches(getSessionSubject(), groupId, resourceIds);
+ }
+
}
\ No newline at end of file
commit 4a405ebb6341bb94e7820c84ff798d58f03cde59
Author: Greg Hinkle <ghinkle(a)redhat.com>
Date: Thu Apr 29 16:46:52 2010 -0400
type in the breadcrumbs
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 898b56a..92b63ce 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
@@ -80,7 +80,7 @@ public class ResourceTreeView extends VLayout {
super();
this.selectedResource = selectedResource;
- setWidth("30%");
+ setWidth("250");
setHeight100();
setShowResizeBar(true);
@@ -317,7 +317,8 @@ public class ResourceTreeView extends VLayout {
for (int i = parents.length - 1; i >= 0; i--) {
TreeNode n = parents[i];
if (n instanceof ResourceTreeDatasource.ResourceTreeNode) {
- viewId.getBreadcrumbs().add(new Breadcrumb(n.getAttribute("id"), n.getName(), true));
+ viewId.getBreadcrumbs().add(new Breadcrumb(n.getAttribute("id"),
+ n.getName() + " (" + ((ResourceTreeDatasource.ResourceTreeNode)n).getResourceType().getName() + ")", true));
}
}
viewId.getBreadcrumbs().add(new Breadcrumb(node.getAttribute("id"), node.getName(), true));
@@ -372,7 +373,8 @@ public class ResourceTreeView extends VLayout {
for (int i = parents.length - 1; i >= 0; i--) {
TreeNode n = parents[i];
if (n instanceof ResourceTreeDatasource.ResourceTreeNode) {
- viewId.getBreadcrumbs().add(new Breadcrumb(n.getAttribute("id"), n.getName(), true));
+ viewId.getBreadcrumbs().add(new Breadcrumb(n.getAttribute("id"),
+ n.getName() + " (" + ((ResourceTreeDatasource.ResourceTreeNode)n).getResourceType().getName() + ")", true));
}
}
viewId.getBreadcrumbs().add(new Breadcrumb(selectedNode.getAttribute("id"), selectedNode.getName(), true));
@@ -433,7 +435,8 @@ public class ResourceTreeView extends VLayout {
for (int i = parents.length - 1; i >= 0; i--) {
TreeNode n = parents[i];
if (n instanceof ResourceTreeDatasource.ResourceTreeNode) {
- viewId.getBreadcrumbs().add(new Breadcrumb(n.getAttribute("id"), n.getName(), true));
+ viewId.getBreadcrumbs().add(new Breadcrumb(n.getAttribute("id"),
+ n.getName() + " (" + ((ResourceTreeDatasource.ResourceTreeNode)n).getResourceType().getName() + ")", true));
}
}
viewId.getBreadcrumbs().add(new Breadcrumb(selectedNode.getAttribute("id"), selectedNode.getName(), true));
commit 55b8817da82e76b677a4609c9e34b51f11ffa07f
Author: Greg Hinkle <ghinkle(a)redhat.com>
Date: Thu Apr 29 15:50:03 2010 -0400
Dashboard prototype tweaks
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 9f3a1c5..34e0028 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
@@ -187,7 +187,7 @@ public class DashboardView extends VLayout {
for (ArrayList<StoredPortlet> column : storedDashboard.getPortlets()) {
for (StoredPortlet storedPortlet : column) {
- Canvas portalCanvas = PortletFactory.buildPortlet(storedPortlet.getPortletKey());
+ Canvas portalCanvas = PortletFactory.buildPortlet(storedPortlet);
final Portlet portlet = new Portlet(editMode);
portlet.addItem(portalCanvas);
@@ -212,7 +212,8 @@ public class DashboardView extends VLayout {
private void addPortlet(String portletName) {
final Portlet newPortlet = new Portlet(true);
- Canvas canvas = PortletFactory.buildPortlet(portletName);
+ StoredPortlet storedPortlet = new StoredPortlet(portletName, portletName, 250);
+ Canvas canvas = PortletFactory.buildPortlet(storedPortlet);
newPortlet.setTitle(portletName);
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 944a612..ac4e968 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
@@ -98,8 +98,17 @@ public class DashboardsView extends VLayout {
col1.add(summary);
StoredPortlet graph = new StoredPortlet("ghinkle (MAC OS X) CPU", GraphPortlet.KEY, 250);
+ graph.setProperty("resourceId","10001");
+ graph.setProperty("definitionId","10139");
col1.add(graph);
+ StoredPortlet graphTwo = new StoredPortlet("JBoss AS Txn / Min", GraphPortlet.KEY, 250);
+ graphTwo.setProperty("resourceId","10003");
+ graphTwo.setProperty("definitionId","10971");
+ col1.add(graphTwo);
+
+
+
// Experimental
// StoredPortlet platformSummary = new StoredPortlet("Platform Summary", PlatformPortletView.KEY, 300);
// col2.add(platformSummary);
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/PortletFactory.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/PortletFactory.java
index e46aaa6..df9037f 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/PortletFactory.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/PortletFactory.java
@@ -33,6 +33,7 @@ import org.rhq.enterprise.gui.coregui.client.dashboard.portlets.recent.alerts.Re
import org.rhq.enterprise.gui.coregui.client.dashboard.portlets.recent.imported.RecentlyAddedView;
import org.rhq.enterprise.gui.coregui.client.dashboard.portlets.platform.PlatformPortletView;
import org.rhq.enterprise.gui.coregui.client.dashboard.portlets.summary.InventorySummaryView;
+import org.rhq.enterprise.gui.coregui.client.dashboard.store.StoredPortlet;
/**
* @author Greg Hinkle
@@ -58,13 +59,15 @@ public class PortletFactory {
}
- public static Canvas buildPortlet(String portletKey) {
+ public static Canvas buildPortlet(StoredPortlet storedPortlet) {
- PortletViewFactory viewFactory = registeredPortlets.get(portletKey);
+ PortletViewFactory viewFactory = registeredPortlets.get(storedPortlet.getPortletKey());
Canvas canvas = null;
- canvas = (Canvas) viewFactory.getInstance();
+ PortletView view = viewFactory.getInstance();
+ view.configure(storedPortlet);
+ canvas = (Canvas) view;
return canvas;
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/inventory/resource/graph/GraphPortlet.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/inventory/resource/graph/GraphPortlet.java
index ccba4e8..425cd42 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/inventory/resource/graph/GraphPortlet.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/inventory/resource/graph/GraphPortlet.java
@@ -34,11 +34,12 @@ public class GraphPortlet extends SmallGraphView implements PortletView {
public static final String KEY = "Resource Graph";
public GraphPortlet() {
- super(10001, 10100);
+
}
public void configure(StoredPortlet storedPortlet) {
- // TODO: Implement this method.
+ setResourceId(Integer.parseInt(storedPortlet.getProperties().get("resourceId")));
+ setDefinitionId(Integer.parseInt(storedPortlet.getProperties().get("definitionId")));
}
public Canvas getHelpCanvas() {
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/store/StoredPortlet.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/store/StoredPortlet.java
index 2ac35c4..e684f42 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/store/StoredPortlet.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/store/StoredPortlet.java
@@ -101,4 +101,9 @@ public class StoredPortlet {
public void setHeight(int height) {
this.height = height;
}
+
+ public void setProperty(String name, String value) {
+ properties.put(name, value);
+ }
+
}
commit e198490d4aac0eb3dc5b852287af099b9373442d
Author: Greg Hinkle <ghinkle(a)redhat.com>
Date: Thu Apr 29 15:49:24 2010 -0400
Add resource icon to the favorites popup
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/footer/FavoritesButton.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/footer/FavoritesButton.java
index 72eb936..6ae4186 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/footer/FavoritesButton.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/footer/FavoritesButton.java
@@ -90,6 +90,12 @@ public class FavoritesButton extends IMenuButton {
// TODO: Ideally, we should use ResourceManagerLocal.disambiguate() here to obtain
// disambiguated Resource names.
item.setTitle(resource.getName());
+
+ String category = resource.getResourceType().getCategory().getDisplayName();
+
+ String avail = (resource.getCurrentAvailability() != null && resource.getCurrentAvailability().getAvailabilityType() != null)
+ ? (resource.getCurrentAvailability().getAvailabilityType().name().toLowerCase()) : "down";
+ item.setIcon("types/" + category + "_" + avail + "_16.png");
}
favoritesMenu.setItems(items);
favoritesMenu.showContextMenu();
commit 5aa82f1e3cc3423e1048cd418d8fbbc4ce149e5d
Author: Greg Hinkle <ghinkle(a)redhat.com>
Date: Thu Apr 29 15:46:36 2010 -0400
Support the selector having initially selected records (to update a current selection of groups to deploy to or for role assignments)
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/roles/RoleEditView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/roles/RoleEditView.java
index 8d4025e..523c822 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/roles/RoleEditView.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/roles/RoleEditView.java
@@ -22,8 +22,15 @@ import org.rhq.core.domain.authz.Permission;
import org.rhq.core.domain.authz.Role;
import org.rhq.core.domain.resource.group.ResourceGroup;
import org.rhq.core.domain.util.PageList;
+import org.rhq.enterprise.gui.coregui.client.CoreGUI;
import org.rhq.enterprise.gui.coregui.client.components.HeaderLabel;
+import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup;
+import org.rhq.enterprise.gui.coregui.client.inventory.resource.selection.ResourceGroupSelector;
+import com.google.gwt.user.client.rpc.AsyncCallback;
+import com.smartgwt.client.data.DSCallback;
+import com.smartgwt.client.data.DSRequest;
+import com.smartgwt.client.data.DSResponse;
import com.smartgwt.client.data.Record;
import com.smartgwt.client.types.DSOperationType;
import com.smartgwt.client.types.Overflow;
@@ -32,6 +39,7 @@ import com.smartgwt.client.widgets.Label;
import com.smartgwt.client.widgets.form.DynamicForm;
import com.smartgwt.client.widgets.form.events.SubmitValuesEvent;
import com.smartgwt.client.widgets.form.events.SubmitValuesHandler;
+import com.smartgwt.client.widgets.form.fields.CanvasItem;
import com.smartgwt.client.widgets.form.fields.ResetItem;
import com.smartgwt.client.widgets.form.fields.SubmitItem;
import com.smartgwt.client.widgets.form.fields.TextItem;
@@ -40,6 +48,8 @@ import com.smartgwt.client.widgets.form.fields.events.ClickHandler;
import com.smartgwt.client.widgets.grid.ListGridRecord;
import com.smartgwt.client.widgets.layout.VLayout;
+import java.util.Collection;
+import java.util.HashSet;
import java.util.Set;
/**
@@ -57,7 +67,8 @@ public class RoleEditView extends VLayout {
private HeaderLabel editLabel;
private DynamicForm form;
private PermissionEditorView permissionEditorItem;
- private RoleGroupsEditorItem assignedGroupEditorItem;
+ private CanvasItem selectorItem;
+ private ResourceGroupSelector groupSelector;
public RoleEditView() {
super();
@@ -97,10 +108,10 @@ public class RoleEditView extends VLayout {
permissionEditorItem.setShowTitle(false);
permissionEditorItem.setColSpan(2);
+ selectorItem = new CanvasItem("groupSelectionCanvas");
- assignedGroupEditorItem = new RoleGroupsEditorItem("assignedGroups", "Assigned Groups");
- assignedGroupEditorItem.setShowTitle(false);
- assignedGroupEditorItem.setColSpan(2);
+ selectorItem.setShowTitle(false);
+ selectorItem.setColSpan(2);
SubmitItem saveButton = new SubmitItem("save", "Save");
@@ -123,7 +134,7 @@ public class RoleEditView extends VLayout {
idItem,
nameItem,
permissionEditorItem,
- assignedGroupEditorItem,
+ selectorItem,
saveButton, new ResetItem("reset", "Reset"));
editCanvas.addMember(form);
@@ -140,7 +151,10 @@ public class RoleEditView extends VLayout {
form.editRecord(record);
permissionEditorItem.setParentForm(form);
permissionEditorItem.setPermissions((Set<Permission>) record.getAttributeAsObject("permissions"));
- assignedGroupEditorItem.setGroups((PageList<ResourceGroup>) record.getAttributeAsObject("assignedGroups"));
+
+ groupSelector = new RoleResourceGroupSelector((Collection<ResourceGroup>) record.getAttributeAsObject("resourceGroups"));
+ selectorItem.setCanvas(groupSelector);
+
} catch (Throwable t) {
t.printStackTrace();
}
@@ -164,8 +178,39 @@ public class RoleEditView extends VLayout {
public void save() {
+
System.out.println("Saving role");
- form.saveData();
+ form.saveData(new DSCallback() {
+ public void execute(DSResponse dsResponse, Object o, DSRequest dsRequest) {
+ HashSet<Integer> selection = groupSelector.getSelection();
+ int[] groupIds = new int[selection.size()];
+ int i = 0;
+ for (Integer id : selection) {
+ groupIds[i++] = id;
+ }
+
+ int roleId;
+ if (roleBeingEdited != null) {
+ roleId = roleBeingEdited.getId();
+ } else {
+ // new role
+ roleId = Integer.parseInt(new ListGridRecord(dsRequest.getData()).getAttribute("id"));
+ }
+
+
+ GWTServiceLookup.getRoleService().setAssignedResourceGroups(
+ roleId, groupIds,
+ new AsyncCallback<Void>() {
+ public void onFailure(Throwable caught) {
+ CoreGUI.getErrorHandler().handleError("Failed to update role's assigned groups",caught);
+ }
+
+ public void onSuccess(Void result) {
+ // TODO: Implement this method.
+ }
+ });
+ }
+ });
}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/roles/RoleResourceGroupSelector.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/roles/RoleResourceGroupSelector.java
new file mode 100644
index 0000000..73bf032
--- /dev/null
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/roles/RoleResourceGroupSelector.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.admin.roles;
+
+import java.util.Collection;
+import java.util.List;
+
+import com.smartgwt.client.widgets.grid.ListGridRecord;
+
+import org.rhq.core.domain.resource.group.ResourceGroup;
+import org.rhq.core.domain.util.PageList;
+import org.rhq.enterprise.gui.coregui.client.inventory.groups.ResourceGroupsDataSource;
+import org.rhq.enterprise.gui.coregui.client.inventory.resource.selection.ResourceGroupSelector;
+
+/**
+ * @author Greg Hinkle
+ */
+public class RoleResourceGroupSelector extends ResourceGroupSelector {
+
+ public RoleResourceGroupSelector(Collection<ResourceGroup> groups) {
+ super();
+ if (groups != null) {
+ ListGridRecord[] data = (new ResourceGroupsDataSource()).buildRecords(groups);
+ setAssigned(data);
+ }
+ }
+}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/RoleGWTService.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/RoleGWTService.java
index 230dbdc..768b8f4 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/RoleGWTService.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/RoleGWTService.java
@@ -37,4 +37,8 @@ public interface RoleGWTService extends RemoteService {
Role updateRole(Role role);
void removeRoles(Integer[] roleIds);
+
+ void setAssignedResourceGroups(int roleId, int[] resourceGroupIds);
+
+ void setAssignedSubjects(int roleId, int[] subjectIds);
}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/ResourceGroupsDataSource.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/ResourceGroupsDataSource.java
index 7499f0b..5738bd4 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/ResourceGroupsDataSource.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/ResourceGroupsDataSource.java
@@ -55,7 +55,7 @@ public class ResourceGroupsDataSource extends RPCDataSource<ResourceGroup> {
}
public ResourceGroupsDataSource() {
- super("ResourceGroups");
+// super("ResourceGroups");
DataSourceField idDataField = new DataSourceIntegerField("id", "ID", 20);
idDataField.setPrimaryKey(true);
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/selection/AbstractSelector.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/selection/AbstractSelector.java
index 06c322c..b1fbcb2 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/selection/AbstractSelector.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/selection/AbstractSelector.java
@@ -53,10 +53,12 @@ import org.rhq.enterprise.gui.coregui.client.util.RPCDataSource;
/**
* @author Greg Hinkle
*/
-public abstract class AbstractSelector extends HLayout {
+public abstract class AbstractSelector<T> extends HLayout {
protected HashSet<Integer> selection = new HashSet<Integer>();
+ protected ListGridRecord[] initialSelection;
+
protected ListGrid availableGrid;
protected ListGrid assignedGrid;
@@ -72,13 +74,17 @@ public abstract class AbstractSelector extends HLayout {
setHeight(380);
}
+ public void setAssigned(ListGridRecord[] assignedRecords) {
+ initialSelection = assignedRecords;
+ }
+
public HashSet<Integer> getSelection() {
return selection;
}
protected abstract DynamicForm getAvailableFilterForm();
- protected abstract RPCDataSource<?> getDataSource();
+ protected abstract RPCDataSource<T> getDataSource();
protected abstract Criteria getLatestCriteria(DynamicForm availableFilterForm);
@@ -219,6 +225,11 @@ public abstract class AbstractSelector extends HLayout {
select(recordDropEvent.getDropRecords());
}
});
+
+ if (initialSelection != null) {
+ assignedGrid.setData(initialSelection);
+ select(initialSelection);
+ }
}
protected void updateButtons() {
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/selection/ResourceGroupSelector.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/selection/ResourceGroupSelector.java
index 06f6e4b..e4d9a5b 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/selection/ResourceGroupSelector.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/selection/ResourceGroupSelector.java
@@ -18,6 +18,8 @@
*/
package org.rhq.enterprise.gui.coregui.client.inventory.resource.selection;
+import java.util.Collection;
+
import com.smartgwt.client.data.Criteria;
import com.smartgwt.client.widgets.form.DynamicForm;
import com.smartgwt.client.widgets.form.fields.SelectItem;
@@ -32,7 +34,7 @@ import org.rhq.enterprise.gui.coregui.client.util.RPCDataSource;
/**
* @author Greg Hinkle
*/
-public class ResourceGroupSelector extends AbstractSelector {
+public class ResourceGroupSelector extends AbstractSelector<ResourceGroup> {
public ResourceGroupSelector() {
super();
@@ -51,7 +53,7 @@ public class ResourceGroupSelector extends AbstractSelector {
return availableFilterForm;
}
- protected RPCDataSource<?> getDataSource() {
+ protected RPCDataSource<ResourceGroup> getDataSource() {
return new SelectedResourceGroupsDataSource();
}
@@ -68,7 +70,7 @@ public class ResourceGroupSelector extends AbstractSelector {
private class SelectedResourceGroupsDataSource extends ResourceGroupsDataSource {
@Override
- public ListGridRecord[] buildRecords(PageList<ResourceGroup> resourceGroups) {
+ public ListGridRecord[] buildRecords(Collection<ResourceGroup> resourceGroups) {
ListGridRecord[] records = super.buildRecords(resourceGroups);
for (ListGridRecord record : records) {
if (selection.contains(record.getAttributeAsInt("id"))) {
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/selection/ResourceSelector.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/selection/ResourceSelector.java
index ea092d5..2ed234f 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/selection/ResourceSelector.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/selection/ResourceSelector.java
@@ -18,6 +18,8 @@
*/
package org.rhq.enterprise.gui.coregui.client.inventory.resource.selection;
+import java.util.Collection;
+
import com.smartgwt.client.data.Criteria;
import com.smartgwt.client.widgets.form.DynamicForm;
import com.smartgwt.client.widgets.form.fields.IPickTreeItem;
@@ -75,7 +77,7 @@ public class ResourceSelector extends AbstractSelector {
private class SelectedResourceDataSource extends ResourceDatasource {
@Override
- public ListGridRecord[] buildRecords(PageList<Resource> resources) {
+ public ListGridRecord[] buildRecords(Collection<Resource> resources) {
ListGridRecord[] records = super.buildRecords(resources);
for (ListGridRecord record : records) {
if (selection.contains(record.getAttributeAsInt("id"))) {
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 0774160..a288517 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
@@ -18,6 +18,8 @@
*/
package org.rhq.enterprise.gui.coregui.client.util;
+import java.util.Collection;
+
import org.rhq.core.domain.util.PageControl;
import org.rhq.core.domain.util.PageList;
import org.rhq.core.domain.util.PageOrdering;
@@ -111,7 +113,7 @@ public abstract class RPCDataSource<T> extends DataSource {
}
- public ListGridRecord[] buildRecords(PageList<T> list) {
+ public ListGridRecord[] buildRecords(Collection<T> list) {
if (list == null) {
return null;
}
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 373322f..1414025 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
@@ -18,23 +18,14 @@
*/
package org.rhq.enterprise.gui.coregui.server.gwt;
-import org.rhq.core.domain.auth.Subject;
import org.rhq.core.domain.authz.Role;
import org.rhq.core.domain.criteria.RoleCriteria;
-import org.rhq.core.domain.criteria.SubjectCriteria;
import org.rhq.core.domain.util.PageList;
import org.rhq.enterprise.gui.coregui.client.gwt.RoleGWTService;
-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.authz.RoleManagerLocal;
-import org.rhq.enterprise.server.exception.LoginException;
import org.rhq.enterprise.server.util.LookupUtil;
-import com.google.gwt.user.server.rpc.RemoteServiceServlet;
-
-import javax.jws.WebParam;
-
/**
* @author Greg Hinkle
*/
@@ -62,4 +53,11 @@ public class RoleGWTServiceImpl extends AbstractGWTServiceImpl implements RoleGW
roleManager.deleteRoles(getSessionSubject(), roleIds);
}
+ public void setAssignedResourceGroups(int roleId, int[] resourceGroupIds) {
+ roleManager.setAssignedResourceGroups(getSessionSubject(), roleId, resourceGroupIds);
+ }
+
+ public void setAssignedSubjects(int roleId, int[] subjectIds) {
+ roleManager.setAssignedSubjects(getSessionSubject(), roleId, subjectIds);
+ }
}
\ No newline at end of file
diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/authz/RoleManagerBean.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/authz/RoleManagerBean.java
index 00d4c31..0bbfff8 100644
--- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/authz/RoleManagerBean.java
+++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/authz/RoleManagerBean.java
@@ -27,6 +27,7 @@ import java.util.Set;
import javax.ejb.EJB;
import javax.ejb.Stateless;
import javax.interceptor.ExcludeDefaultInterceptors;
+import javax.jws.WebParam;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
@@ -42,6 +43,7 @@ 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;
+import org.rhq.core.util.collection.ArrayUtils;
import org.rhq.enterprise.server.RHQConstants;
import org.rhq.enterprise.server.auth.SubjectManagerLocal;
import org.rhq.enterprise.server.util.CriteriaQueryGenerator;
@@ -179,7 +181,7 @@ public class RoleManagerBean implements RoleManagerLocal, RoleManagerRemote {
if (subjectToModify.getFsystem() || (authorizationManager.isSystemSuperuser(subjectToModify))) {
throw new PermissionException("You cannot assign roles to user [" + subjectToModify.getName()
- + "] - roles are fixed for this user");
+ + "] - roles are fixed for this user");
}
subjectToModify.getRoles().size();
@@ -188,7 +190,7 @@ public class RoleManagerBean implements RoleManagerLocal, RoleManagerRemote {
Role role = entityManager.find(Role.class, roleId);
if (role == null) {
throw new IllegalArgumentException("Tried to add role[" + roleId + "] to subject[" + subjectId
- + "], but role was not found");
+ + "], but role was not found");
}
role.addSubject(subjectToModify);
if (isLdap) {
@@ -213,12 +215,12 @@ public class RoleManagerBean implements RoleManagerLocal, RoleManagerRemote {
Subject newSubject = entityManager.find(Subject.class, subjectId);
if (newSubject == null) {
throw new IllegalArgumentException("Tried to add subject[" + subjectId + "] to role[" + roleId
- + "], but subject was not found");
+ + "], but subject was not found");
}
if (newSubject.getFsystem() || (authorizationManager.isSystemSuperuser(newSubject))) {
throw new PermissionException("You cannot alter the roles for user [" + newSubject.getName()
- + "] - roles are fixed for this user");
+ + "] - roles are fixed for this user");
}
role.addSubject(newSubject);
@@ -239,7 +241,7 @@ public class RoleManagerBean implements RoleManagerLocal, RoleManagerRemote {
if (subjectToModify.getFsystem() || (authorizationManager.isSystemSuperuser(subjectToModify))) {
throw new PermissionException("You cannot remove roles from user [" + subjectToModify.getName()
- + "] - roles are fixed for this user");
+ + "] - roles are fixed for this user");
}
for (Integer roleId : roleIds) {
@@ -353,7 +355,7 @@ public class RoleManagerBean implements RoleManagerLocal, RoleManagerRemote {
@RequiredPermission(Permission.MANAGE_SECURITY)
@SuppressWarnings("unchecked")
public PageList<Role> findAvailableRolesForSubject(Subject subject, Integer subjectId, Integer[] pendingRoleIds,
- PageControl pc) {
+ PageControl pc) {
pc.initDefaultOrderingField("r.name");
String queryName;
@@ -408,7 +410,7 @@ public class RoleManagerBean implements RoleManagerLocal, RoleManagerRemote {
ResourceGroup group = entityManager.find(ResourceGroup.class, groupId);
if (role == null) {
throw new IllegalArgumentException("Tried to add resourceGroup[" + groupId + "] to role[" + roleId
- + "], but resourceGroup was not found");
+ + "], but resourceGroup was not found");
}
role.addResourceGroup(group);
}
@@ -433,13 +435,37 @@ public class RoleManagerBean implements RoleManagerLocal, RoleManagerRemote {
ResourceGroup doomedGroup = entityManager.find(ResourceGroup.class, groupId);
if (doomedGroup == null) {
throw new IllegalArgumentException("Tried to remove doomedGroup[" + groupId + "] from role["
- + roleId + "], but subject was not found");
+ + roleId + "], but subject was not found");
}
role.removeResourceGroup(doomedGroup);
}
}
}
+ @RequiredPermission(Permission.MANAGE_SECURITY)
+ public void setAssignedResourceGroups(Subject subject, int roleId, int[] groupIds) {
+
+ Role role = getRole(subject, roleId);
+ List<Integer> currentMembers = new ArrayList<Integer>();
+ for (ResourceGroup group : role.getResourceGroups()) {
+ currentMembers.add(group.getId());
+ }
+
+
+ List<Integer> newMembers = ArrayUtils.wrapInList(groupIds); // members needing addition
+ newMembers.removeAll(currentMembers);
+ if (newMembers.size() > 0) {
+ addResourceGroupsToRole(subject, roleId, groupIds);
+ }
+
+ List<Integer> extraMembers = new ArrayList<Integer>(currentMembers); // members needing removal
+ extraMembers.removeAll(ArrayUtils.wrapInList(groupIds));
+ if (extraMembers.size() > 0) {
+ removeResourceGroupsFromRole(subject, roleId, groupIds);
+ }
+ }
+
+
private void processDependentPermissions(Role role) {
/*
* if you can control user/roles, then you can give yourself permissions, too; so we might as well
@@ -468,7 +494,7 @@ public class RoleManagerBean implements RoleManagerLocal, RoleManagerRemote {
Subject doomedSubject = entityManager.find(Subject.class, subjectId);
if (doomedSubject == null) {
throw new IllegalArgumentException("Tried to remove subject[" + subjectId + "] from role[" + roleId
- + "], but subject was not found");
+ + "], but subject was not found");
}
role.removeSubject(doomedSubject);
}
@@ -476,6 +502,28 @@ public class RoleManagerBean implements RoleManagerLocal, RoleManagerRemote {
}
@RequiredPermission(Permission.MANAGE_SECURITY)
+ public void setAssignedSubjects(Subject subject, int roleId, int[] subjectIds) {
+ Role role = getRole(subject, roleId);
+ List<Integer> currentMembers = new ArrayList<Integer>();
+ for (ResourceGroup group : role.getResourceGroups()) {
+ currentMembers.add(group.getId());
+ }
+
+
+ List<Integer> newMembers = ArrayUtils.wrapInList(subjectIds); // members needing addition
+ newMembers.removeAll(currentMembers);
+ if (newMembers.size() > 0) {
+ addSubjectsToRole(subject, roleId, subjectIds); }
+
+ List<Integer> extraMembers = new ArrayList<Integer>(currentMembers); // members needing removal
+ extraMembers.removeAll(ArrayUtils.wrapInList(subjectIds));
+ if (extraMembers.size() > 0) {
+ removeSubjectsFromRole(subject, roleId, subjectIds);
+ }
+ }
+
+
+ @RequiredPermission(Permission.MANAGE_SECURITY)
public void removeRolesFromResourceGroup(Subject subject, int groupId, int[] roleIds) {
if ((roleIds != null) && (roleIds.length > 0)) {
ResourceGroup group = entityManager.find(ResourceGroup.class, groupId);
@@ -488,7 +536,7 @@ public class RoleManagerBean implements RoleManagerLocal, RoleManagerRemote {
Role doomedRole = entityManager.find(Role.class, roleId);
if (doomedRole == null) {
throw new IllegalArgumentException("Tried to remove role[" + roleId + "] from resourceGroup["
- + groupId + "], but role was not found");
+ + groupId + "], but role was not found");
}
group.removeRole(doomedRole);
}
@@ -514,7 +562,7 @@ public class RoleManagerBean implements RoleManagerLocal, RoleManagerRemote {
Role role = entityManager.find(Role.class, roleId);
if (role == null) {
throw new IllegalArgumentException("Tried to add role[" + roleId + "] to resourceGroup[" + groupId
- + "], but role was not found");
+ + "], but role was not found");
}
group.addRole(role);
}
@@ -527,9 +575,9 @@ public class RoleManagerBean implements RoleManagerLocal, RoleManagerRemote {
public PageList<Role> findRolesByCriteria(Subject subject, RoleCriteria criteria) {
if (criteria.isSecurityManagerRequired()
- && !authorizationManager.hasGlobalPermission(subject, Permission.MANAGE_SECURITY)) {
+ && !authorizationManager.hasGlobalPermission(subject, Permission.MANAGE_SECURITY)) {
throw new PermissionException("Subject [" + subject.getName()
- + "] requires SecurityManager permission for requested query criteria.");
+ + "] requires SecurityManager permission for requested query criteria.");
}
CriteriaQueryGenerator generator = new CriteriaQueryGenerator(criteria);
diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/authz/RoleManagerLocal.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/authz/RoleManagerLocal.java
index 58f962a..3b6e6e2 100644
--- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/authz/RoleManagerLocal.java
+++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/authz/RoleManagerLocal.java
@@ -21,6 +21,7 @@ package org.rhq.enterprise.server.authz;
import java.util.Set;
import javax.ejb.Local;
+import javax.jws.WebParam;
import org.rhq.core.domain.auth.Subject;
import org.rhq.core.domain.authz.Permission;
@@ -187,6 +188,8 @@ public interface RoleManagerLocal {
void removeSubjectsFromRole(Subject subject, int roleId, int[] subjectIds);
+ void setAssignedSubjects(Subject sessionSubject, int roleId, int[] subjectIds);
+
/**
* Adds the given resource groups to the given role.
*
@@ -198,6 +201,10 @@ public interface RoleManagerLocal {
void addRolesToResourceGroup(Subject subject, int groupId, int[] roleIds);
+ void setAssignedResourceGroups(Subject subject, int roleId, int[] groupIds);
+
+
+
/**
* Removes the given resource groups from the given role.
*
diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/authz/RoleManagerRemote.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/authz/RoleManagerRemote.java
index 55da160..e0008cc 100644
--- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/authz/RoleManagerRemote.java
+++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/authz/RoleManagerRemote.java
@@ -184,6 +184,11 @@ public interface RoleManagerRemote {
@WebParam(name = "groupId") int groupId, //
@WebParam(name = "roleIds") int[] roleIds);
+ void setAssignedResourceGroups(
+ @WebParam(name = "subject") Subject subject, //
+ @WebParam(name = "roleId") int roleId, //
+ @WebParam(name = "groupIds") int[] groupIds);
+
/**
* Removes the given resource groups from the given role.
*
commit ddc67fa913b8f7cf21aa5a6f45d2b2fc518e852a
Author: Greg Hinkle <ghinkle(a)redhat.com>
Date: Thu Apr 29 14:37:40 2010 -0400
Some jaxb binding fixes for webservices
diff --git a/modules/core/domain/src/main/java/org/rhq/core/domain/bundle/BundleType.java b/modules/core/domain/src/main/java/org/rhq/core/domain/bundle/BundleType.java
index 72605e0..8e766ae 100644
--- a/modules/core/domain/src/main/java/org/rhq/core/domain/bundle/BundleType.java
+++ b/modules/core/domain/src/main/java/org/rhq/core/domain/bundle/BundleType.java
@@ -38,6 +38,7 @@ import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlTransient;
import org.rhq.core.domain.resource.ResourceType;
@@ -70,6 +71,7 @@ public class BundleType implements Serializable {
@JoinColumn(name = "RESOURCE_TYPE_ID", referencedColumnName = "ID", nullable = false)
@OneToOne(fetch = FetchType.LAZY, optional = false)
+ @XmlTransient
private ResourceType resourceType;
public BundleType() {
diff --git a/modules/core/domain/src/main/java/org/rhq/core/domain/measurement/MeasurementData.java b/modules/core/domain/src/main/java/org/rhq/core/domain/measurement/MeasurementData.java
index 6d0be7f..7fefa3e 100644
--- a/modules/core/domain/src/main/java/org/rhq/core/domain/measurement/MeasurementData.java
+++ b/modules/core/domain/src/main/java/org/rhq/core/domain/measurement/MeasurementData.java
@@ -32,12 +32,17 @@ import javax.persistence.InheritanceType;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Transient;
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlRootElement;
-/**
+ /**
* Represents data that was collected either due to a schedule or an on-demand, live collection.
*/
@Entity
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
+(a)XmlAccessorType(XmlAccessType.FIELD)
+@XmlRootElement
public abstract class MeasurementData implements Serializable {
@EmbeddedId
diff --git a/modules/core/domain/src/main/java/org/rhq/core/domain/measurement/MeasurementDataNumeric.java b/modules/core/domain/src/main/java/org/rhq/core/domain/measurement/MeasurementDataNumeric.java
index d2f81dc..4e82c43 100644
--- a/modules/core/domain/src/main/java/org/rhq/core/domain/measurement/MeasurementDataNumeric.java
+++ b/modules/core/domain/src/main/java/org/rhq/core/domain/measurement/MeasurementDataNumeric.java
@@ -24,11 +24,17 @@ package org.rhq.core.domain.measurement;
import java.io.Serializable;
-/**
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlRootElement;
+
+ /**
* Subclass for numerical measurement data
*
* @author Heiko W. Rupp
*/
+ @XmlAccessorType(XmlAccessType.FIELD)
+ @XmlRootElement
public class MeasurementDataNumeric extends MeasurementData implements Serializable {
private static final long serialVersionUID = 1L;
diff --git a/modules/core/domain/src/main/java/org/rhq/core/domain/measurement/MeasurementDefinition.java b/modules/core/domain/src/main/java/org/rhq/core/domain/measurement/MeasurementDefinition.java
index 48a682d..2d20882 100644
--- a/modules/core/domain/src/main/java/org/rhq/core/domain/measurement/MeasurementDefinition.java
+++ b/modules/core/domain/src/main/java/org/rhq/core/domain/measurement/MeasurementDefinition.java
@@ -43,6 +43,9 @@ import javax.persistence.OneToMany;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import javax.persistence.Version;
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlRootElement;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -73,6 +76,8 @@ import org.rhq.core.domain.resource.ResourceType;
+ " SET md.defaultOn = false") })
@SequenceGenerator(name = "id", sequenceName = "RHQ_MEASUREMENT_DEF_ID_SEQ")
@Table(name = "RHQ_MEASUREMENT_DEF")
+(a)XmlAccessorType(XmlAccessType.FIELD)
+@XmlRootElement
public class MeasurementDefinition implements Serializable {
public static final String QUERY_NATIVE_UPDATE_DEFAULT_ON_BY_IDS = "" //
13 years, 7 months
[rhq] Branch 'gwt' - modules/cli-tests modules/common
by Jay Shaughnessy
modules/cli-tests/src/test/resources/cli-test-bundle-zip.zip |binary
modules/cli-tests/src/test/script/org/rhq/enterprise/remoting/cli/test_bundleManagerZip.js | 8 +++-----
modules/common/filetemplate-bundle/src/test/java/org/rhq/bundle/filetemplate/recipe/RecipeParserTest.java | 6 +++---
3 files changed, 6 insertions(+), 8 deletions(-)
New commits:
commit 9a824f3a4901eb40209f3650a35b9169117d7beb
Author: Jay Shaughnessy <jshaughn(a)redhat.com>
Date: Fri Apr 30 17:13:49 2010 -0400
Fix vars in recipe to the new format and also make use of the new
rhq.deploy.dir property.
diff --git a/modules/cli-tests/src/test/resources/cli-test-bundle-zip.zip b/modules/cli-tests/src/test/resources/cli-test-bundle-zip.zip
index 7e0e7b1..a431142 100644
Binary files a/modules/cli-tests/src/test/resources/cli-test-bundle-zip.zip and b/modules/cli-tests/src/test/resources/cli-test-bundle-zip.zip differ
diff --git a/modules/cli-tests/src/test/script/org/rhq/enterprise/remoting/cli/test_bundleManagerZip.js b/modules/cli-tests/src/test/script/org/rhq/enterprise/remoting/cli/test_bundleManagerZip.js
index a77983d..4ceed3b 100644
--- a/modules/cli-tests/src/test/script/org/rhq/enterprise/remoting/cli/test_bundleManagerZip.js
+++ b/modules/cli-tests/src/test/script/org/rhq/enterprise/remoting/cli/test_bundleManagerZip.js
@@ -58,12 +58,10 @@ function testGroupDeployment() {
// create the config, setting the required properties from the recipe
var config = new Configuration();
- var property = new PropertySimple("dummy.deployHome", "/tmp/bundle-test");
+ var property = new PropertySimple("dummy.name", "NAME REPLACED HERE!!!");
+ config.put( property );
+ var property = new PropertySimple("dummy.description", "FLOPPY!!!");
config.put( property );
- var property2 = new PropertySimple("dummy.name", "NAME REPLACED HERE!!!");
- config.put( property2 );
- var property3 = new PropertySimple("dummy.description", "FLOPPY!!!");
- config.put( property3 );
// create a deployment using the above config
var testDeployment = BundleManager.createBundleDeployment(testBundleVersion.getId(), "Deployment Test", "Deployment Test of dummy ZIP", "/tmp/bundle-test", config);
diff --git a/modules/common/filetemplate-bundle/src/test/java/org/rhq/bundle/filetemplate/recipe/RecipeParserTest.java b/modules/common/filetemplate-bundle/src/test/java/org/rhq/bundle/filetemplate/recipe/RecipeParserTest.java
index dda85f4..16054e0 100644
--- a/modules/common/filetemplate-bundle/src/test/java/org/rhq/bundle/filetemplate/recipe/RecipeParserTest.java
+++ b/modules/common/filetemplate-bundle/src/test/java/org/rhq/bundle/filetemplate/recipe/RecipeParserTest.java
@@ -260,11 +260,11 @@ public class RecipeParserTest {
RecipeContext context = new RecipeContext(getRecipe());
parser.parseRecipe(context);
Map<String, String> files = context.getDeployFiles();
- assert files.get("jboss1.tar").equals(System.getProperty("java.io.tmpdir")) : files;
- assert files.get("jboss2.tar").equals(System.getProperty("file.separator")) : files;
+ assert files.get("jboss1.tar").equals(System.getProperty("java.io.tmpdir").replace('\\', '/')) : files;
+ assert files.get("jboss2.tar").equals(System.getProperty("file.separator").replace('\\', '/')) : files;
//assert files.get("jboss3.tar").equals(System.getProperty("line.separator")) : files;
assert files.get("jboss4.tar").equals(System.getProperty("path.separator")) : files;
- assert files.get("jboss5.tar").equals(System.getProperty("java.home")) : files;
+ assert files.get("jboss5.tar").equals(System.getProperty("java.home").replace('\\', '/')) : files;
assert files.get("jboss6.tar").equals(System.getProperty("java.version")) : files;
//assert files.get("jboss7.tar").equals(System.getProperty("user.timezone")) : files;
//assert files.get("jboss8.tar").equals(System.getProperty("user.region")) : files;
13 years, 7 months
[rhq] modules/enterprise
by Joseph Marques
modules/enterprise/gui/portal-war/src/main/java/org/rhq/enterprise/gui/startup/StartupServlet.java | 14 +++++++---
1 file changed, 11 insertions(+), 3 deletions(-)
New commits:
commit 56eb99b9dfc6029e54e887fd1d670af4377e65ef
Author: Joseph Marques <joseph(a)redhat.com>
Date: Fri Apr 30 16:56:41 2010 -0400
BA-587754: remove references to deprecated job 'org.rhq.enterprise.server.scheduler.jobs.ClusterManagerJob' upon server startup
diff --git a/modules/enterprise/gui/portal-war/src/main/java/org/rhq/enterprise/gui/startup/StartupServlet.java b/modules/enterprise/gui/portal-war/src/main/java/org/rhq/enterprise/gui/startup/StartupServlet.java
index 51107b2..996f11c 100644
--- a/modules/enterprise/gui/portal-war/src/main/java/org/rhq/enterprise/gui/startup/StartupServlet.java
+++ b/modules/enterprise/gui/portal-war/src/main/java/org/rhq/enterprise/gui/startup/StartupServlet.java
@@ -59,7 +59,6 @@ import org.rhq.enterprise.server.plugin.pc.ServerPluginServiceManagement;
import org.rhq.enterprise.server.resource.ResourceTypeManagerLocal;
import org.rhq.enterprise.server.scheduler.SchedulerLocal;
import org.rhq.enterprise.server.scheduler.jobs.AsyncResourceDeleteJob;
-import org.rhq.enterprise.server.scheduler.jobs.SavedSearchResultCountRecalculationJob;
import org.rhq.enterprise.server.scheduler.jobs.CheckForSuspectedAgentsJob;
import org.rhq.enterprise.server.scheduler.jobs.CheckForTimedOutConfigUpdatesJob;
import org.rhq.enterprise.server.scheduler.jobs.CheckForTimedOutContentRequestsJob;
@@ -67,6 +66,7 @@ import org.rhq.enterprise.server.scheduler.jobs.CheckForTimedOutOperationsJob;
import org.rhq.enterprise.server.scheduler.jobs.CloudManagerJob;
import org.rhq.enterprise.server.scheduler.jobs.DataPurgeJob;
import org.rhq.enterprise.server.scheduler.jobs.DynaGroupAutoRecalculationJob;
+import org.rhq.enterprise.server.scheduler.jobs.SavedSearchResultCountRecalculationJob;
import org.rhq.enterprise.server.util.LookupUtil;
import org.rhq.enterprise.server.util.concurrent.AlertSerializer;
import org.rhq.enterprise.server.util.concurrent.AvailabilityReportSerializer;
@@ -329,8 +329,8 @@ public class StartupServlet extends HttpServlet {
// Do not check until we are up at least 1 min, and every minute thereafter.
final long initialDelay = 1000L * 60;
final long interval = 1000L * 60;
- scheduler.scheduleSimpleRepeatingJob(SavedSearchResultCountRecalculationJob.class, true, false, initialDelay,
- interval);
+ scheduler.scheduleSimpleRepeatingJob(SavedSearchResultCountRecalculationJob.class, true, false,
+ initialDelay, interval);
} catch (Exception e) {
log("Cannot schedule asynchronous resource deletion job: " + e.getMessage());
}
@@ -357,6 +357,14 @@ public class StartupServlet extends HttpServlet {
// Cluster Manager Job
try {
+ String oldJobName = "org.rhq.enterprise.server.scheduler.jobs.ClusterManagerJob";
+ boolean foundAndDeleted = scheduler.deleteJob(oldJobName, oldJobName);
+ if (foundAndDeleted) {
+ log("Unscheduling deprecated job references for " + oldJobName);
+ } else {
+ log("No deprecated job references found for " + oldJobName);
+ }
+
// Wait long enough to allow the Server instance jobs to start executing first.
final long initialDelay = 1000L * 60 * 2; // 2 mins
final long interval = 1000L * 30; // 30 secs
13 years, 7 months
[rhq] modules/core
by Joseph Marques
modules/core/domain/src/main/java/org/rhq/core/domain/resource/flyweight/AutoGroupCompositeFlyweight.java | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
New commits:
commit 6911fdf8b0318106ea8b5ca8598836643986bd97
Author: Joseph Marques <joseph(a)redhat.com>
Date: Fri Apr 30 16:45:36 2010 -0400
fix build errors:
* core/domain can not reference JDK6-only classes
* use simple string concatenation to replace String.format()
diff --git a/modules/core/domain/src/main/java/org/rhq/core/domain/resource/flyweight/AutoGroupCompositeFlyweight.java b/modules/core/domain/src/main/java/org/rhq/core/domain/resource/flyweight/AutoGroupCompositeFlyweight.java
index b779a63..46af2db 100644
--- a/modules/core/domain/src/main/java/org/rhq/core/domain/resource/flyweight/AutoGroupCompositeFlyweight.java
+++ b/modules/core/domain/src/main/java/org/rhq/core/domain/resource/flyweight/AutoGroupCompositeFlyweight.java
@@ -82,7 +82,7 @@ public class AutoGroupCompositeFlyweight implements Serializable {
this.resourceType = resourceType;
this.memberCount = memberCount;
if (isDuplicateResourceTypeName) {
- this.name = String.format("%s (%s plugin)", this.resourceType.getName(), this.resourceType.getPlugin());
+ this.name = this.resourceType.getName() + " (" + this.resourceType.getPlugin() + " plugin)";
} else {
this.name = this.resourceType.getName();
}
13 years, 7 months
[rhq] modules/core
by Joseph Marques
modules/core/domain/src/main/java/org/rhq/core/domain/resource/Agent.java | 5 +----
1 file changed, 1 insertion(+), 4 deletions(-)
New commits:
commit 789f1c10a9e4d633316680dde52f982d043f7c1a
Author: Joseph Marques <joseph(a)redhat.com>
Date: Fri Apr 30 16:37:59 2010 -0400
fix gwt-compile errors:
* core/domain can not reference core/util because it is not a gwt module
* core/domain can not use apache commons logging because it is not a gwt module
diff --git a/modules/core/domain/src/main/java/org/rhq/core/domain/resource/Agent.java b/modules/core/domain/src/main/java/org/rhq/core/domain/resource/Agent.java
index 0274eec..95b4a42 100644
--- a/modules/core/domain/src/main/java/org/rhq/core/domain/resource/Agent.java
+++ b/modules/core/domain/src/main/java/org/rhq/core/domain/resource/Agent.java
@@ -40,12 +40,10 @@ import javax.persistence.PreUpdate;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
-import org.apache.commons.logging.LogFactory;
import org.jetbrains.annotations.NotNull;
import org.rhq.core.domain.cloud.AffinityGroup;
import org.rhq.core.domain.cloud.Server;
-import org.rhq.core.util.exception.ThrowableUtil;
/**
* A JON agent.
@@ -484,8 +482,7 @@ public class Agent implements Serializable {
try {
new IllegalArgumentException(message);
} catch (IllegalArgumentException iae) {
- String stackTrace = ThrowableUtil.getStackAsString(iae);
- LogFactory.getLog("HighAvailabilityLogic").fatal(stackTrace);
+ iae.printStackTrace(System.out);
}
}
13 years, 7 months
[rhq] Branch 'gwt' - 2 commits - modules/cli-tests
by Jay Shaughnessy
dev/null |binary
modules/cli-tests/src/test/resources/cli-test-bundle-zip.zip |binary
modules/cli-tests/src/test/resources/cli-test-bundle.zip |binary
modules/cli-tests/src/test/script/org/rhq/enterprise/remoting/cli/test_bundleManager.js | 2
modules/cli-tests/src/test/script/org/rhq/enterprise/remoting/cli/test_bundleManagerZip.js | 37 +++-------
5 files changed, 15 insertions(+), 24 deletions(-)
New commits:
commit 66a4b127bbfcdca8b2f1196af2bed4a22be12421
Merge: 27534d0... 2ec54df...
Author: Jay Shaughnessy <jshaughn(a)redhat.com>
Date: Fri Apr 30 16:20:33 2010 -0400
Merge branch 'gwt' into gwt-jay
commit 27534d07483c02820e8adca6bd9647b4635d5de3
Author: Jay Shaughnessy <jshaughn(a)redhat.com>
Date: Fri Apr 30 16:09:42 2010 -0400
update bundle creation scripts to use distros
diff --git a/modules/cli-tests/src/test/resources/cli-test-bundle-zip.zip b/modules/cli-tests/src/test/resources/cli-test-bundle-zip.zip
new file mode 100644
index 0000000..7e0e7b1
Binary files /dev/null and b/modules/cli-tests/src/test/resources/cli-test-bundle-zip.zip differ
diff --git a/modules/cli-tests/src/test/resources/cli-test-bundle.zip b/modules/cli-tests/src/test/resources/cli-test-bundle.zip
index 9c46339..9469e02 100644
Binary files a/modules/cli-tests/src/test/resources/cli-test-bundle.zip and b/modules/cli-tests/src/test/resources/cli-test-bundle.zip differ
diff --git a/modules/cli-tests/src/test/resources/dummy.zip b/modules/cli-tests/src/test/resources/dummy.zip
deleted file mode 100644
index 933fa1a..0000000
Binary files a/modules/cli-tests/src/test/resources/dummy.zip and /dev/null differ
diff --git a/modules/cli-tests/src/test/script/org/rhq/enterprise/remoting/cli/test_bundleManager.js b/modules/cli-tests/src/test/script/org/rhq/enterprise/remoting/cli/test_bundleManager.js
index 98832c5..42b8225 100644
--- a/modules/cli-tests/src/test/script/org/rhq/enterprise/remoting/cli/test_bundleManager.js
+++ b/modules/cli-tests/src/test/script/org/rhq/enterprise/remoting/cli/test_bundleManager.js
@@ -28,7 +28,7 @@
var TestsEnabled = true;
-var bundleName = 'testScriptBundle';
+var bundleName = 'test-cli-bundle';
// note, super-user, will not test any security constraints
var subject = rhq.login('rhqadmin', 'rhqadmin');
diff --git a/modules/cli-tests/src/test/script/org/rhq/enterprise/remoting/cli/test_bundleManagerZip.js b/modules/cli-tests/src/test/script/org/rhq/enterprise/remoting/cli/test_bundleManagerZip.js
index 1719659..a77983d 100644
--- a/modules/cli-tests/src/test/script/org/rhq/enterprise/remoting/cli/test_bundleManagerZip.js
+++ b/modules/cli-tests/src/test/script/org/rhq/enterprise/remoting/cli/test_bundleManagerZip.js
@@ -28,7 +28,7 @@
var TestsEnabled = true;
-var bundleName = 'testScriptBundleZip';
+var bundleName = 'test-cli-bundle-zip';
// note, super-user, will not test any security constraints
var subject = rhq.login('rhqadmin', 'rhqadmin');
@@ -37,7 +37,7 @@ executeAllTests();
rhq.logout();
-function testDeployment() {
+function testGroupDeployment() {
if ( !TestsEnabled ) {
return;
}
@@ -51,21 +51,10 @@ function testDeployment() {
BundleManager.deleteBundle( bundles.get(0).getId() );
}
- // create the test bundle
- var testBundle = BundleManager.createBundle( bundleName, getBundleType() );
-
- // define the recipe for bundleVersion 1.0
- var recipe = "deploy -f dummy.zip -d @@dummy.deployHome@(a)\n"
- + "realize -f @@dummy.deployHome@(a)/dummy/README.txt\n"
- + "realize -f @@dummy.deployHome@(a)/dummy/subdirectory/file.txt";
-
// create bundleVersion 1.0
- var testBundleVersion = BundleManager.createBundleVersion( testBundle.getId(), bundleName, null, recipe);
-
- // add the single bundleFile, the test war file
- var fileBytes = scriptUtil.getFileBytes("./src/test/resources/dummy.zip");
- var bundleFile = BundleManager.addBundleFileViaByteArray(testBundleVersion.getId(), "dummy.zip",
- "1.0", null, fileBytes);
+ var distributionFile = new java.io.File("./src/test/resources/cli-test-bundle-zip.zip");
+ distributionFile = new java.io.File(distributionFile.getAbsolutePath());
+ var testBundleVersion = BundleManager.createBundleVersionViaFile( distributionFile );
// create the config, setting the required properties from the recipe
var config = new Configuration();
@@ -77,15 +66,17 @@ function testDeployment() {
config.put( property3 );
// create a deployment using the above config
- var testDeployment = BundleManager.createBundleDeployment(testBundleVersion.getId(), "Deployment Test", "Deployment Test of dummy ZIP", config);
+ var testDeployment = BundleManager.createBundleDeployment(testBundleVersion.getId(), "Deployment Test", "Deployment Test of dummy ZIP", "/tmp/bundle-test", config);
- // Find a target platform
- var rc = new ResourceCriteria();
- rc.addFilterResourceTypeName("in"); // wINdows, lINux
- var winPlatforms = ResourceManager.findResourcesByCriteria(rc);
- var platformId = winPlatforms.get(0).getId();
+ // Find a target platform group
+ var rgc = new ResourceGroupCriteria();
+ rgc.addFilterName("platforms");
+ var groups = ResourceGroupManager.findResourceGroupsByCriteria(rgc);
+ Assert.assertTrue( groups.size() > 0 );
+ var groupId = groups.get(0).getId();
- var bundleScheduleResponse = BundleManager.scheduleBundleResourceDeployment(testDeployment.getId(), platformId);
+ var bgd = BundleManager.scheduleBundleGroupDeployment(testDeployment.getId(), groupId);
+ Assert.assertNotNull( bgd );
}
function getBundleType() {
13 years, 7 months
[rhq] Branch 'gwt' - modules/common modules/core
by mazz
modules/common/filetemplate-bundle/src/main/java/org/rhq/bundle/filetemplate/recipe/RecipeParser.java | 2 +
modules/common/filetemplate-bundle/src/test/java/org/rhq/bundle/filetemplate/recipe/RecipeParserTest.java | 16 ++++++++++
modules/core/util/src/main/java/org/rhq/core/template/TemplateEngine.java | 15 ++++-----
modules/core/util/src/test/java/org/rhq/core/template/TemplateEngineTest.java | 4 +-
4 files changed, 28 insertions(+), 9 deletions(-)
New commits:
commit 2ec54df504a1dea687c489c41e001d78f98bbdd9
Author: John Mazzitelli <mazz(a)redhat.com>
Date: Fri Apr 30 16:18:11 2010 -0400
add some more tests to template engine/recipe parser; make sure we better support windows paths
diff --git a/modules/common/filetemplate-bundle/src/main/java/org/rhq/bundle/filetemplate/recipe/RecipeParser.java b/modules/common/filetemplate-bundle/src/main/java/org/rhq/bundle/filetemplate/recipe/RecipeParser.java
index a871e91..54ae226 100644
--- a/modules/common/filetemplate-bundle/src/main/java/org/rhq/bundle/filetemplate/recipe/RecipeParser.java
+++ b/modules/common/filetemplate-bundle/src/main/java/org/rhq/bundle/filetemplate/recipe/RecipeParser.java
@@ -199,6 +199,8 @@ public class RecipeParser {
}
protected String[] splitCommandLine(String cmdLine) {
+ cmdLine = cmdLine.replace('\\', '/');
+
ByteArrayInputStream in = new ByteArrayInputStream(cmdLine.getBytes());
StreamTokenizer strtok = new StreamTokenizer(new InputStreamReader(in));
List<String> args = new ArrayList<String>();
diff --git a/modules/common/filetemplate-bundle/src/test/java/org/rhq/bundle/filetemplate/recipe/RecipeParserTest.java b/modules/common/filetemplate-bundle/src/test/java/org/rhq/bundle/filetemplate/recipe/RecipeParserTest.java
index fc9acd3..dda85f4 100644
--- a/modules/common/filetemplate-bundle/src/test/java/org/rhq/bundle/filetemplate/recipe/RecipeParserTest.java
+++ b/modules/common/filetemplate-bundle/src/test/java/org/rhq/bundle/filetemplate/recipe/RecipeParserTest.java
@@ -311,6 +311,22 @@ public class RecipeParserTest {
assert files.get("tomcat.tar").equals("/opt/tomcat") : files;
}
+ public void testSimpleRecipeWithBackslashes() throws Exception {
+ addRecipeCommand("deploy -f jboss1.zip -d \"C:\\opt\\jboss1\"");
+ addRecipeCommand("deploy -f tomcat.tar \"--directory=C:\\Documents and Settings\\user\\\"");
+ addRecipeCommand("deploy -f jboss2.zip -d C:\\opt\\jboss1");
+ RecipeParser parser = new RecipeParser();
+ RecipeContext context = new RecipeContext(getRecipe());
+ parser.parseRecipe(context);
+ Map<String, String> files = context.getDeployFiles();
+ assert files.containsKey("jboss1.zip") : files;
+ assert files.get("jboss1.zip").equals("C:/opt/jboss1") : files;
+ assert files.containsKey("tomcat.tar") : files;
+ assert files.get("tomcat.tar").equals("C:/Documents and Settings/user/") : files;
+ assert files.containsKey("jboss2.zip") : files;
+ assert files.get("jboss2.zip").equals("C:/opt/jboss1") : files;
+ }
+
public void testSimpleRecipeError() throws Exception {
addRecipeCommand("deploy -f jboss.tar");
RecipeParser parser = new RecipeParser();
diff --git a/modules/core/util/src/main/java/org/rhq/core/template/TemplateEngine.java b/modules/core/util/src/main/java/org/rhq/core/template/TemplateEngine.java
index 78e56e1..52deb7e 100644
--- a/modules/core/util/src/main/java/org/rhq/core/template/TemplateEngine.java
+++ b/modules/core/util/src/main/java/org/rhq/core/template/TemplateEngine.java
@@ -37,12 +37,7 @@ public class TemplateEngine implements Serializable {
}
public String replaceTokens(String input) {
-
- // since our replacement strings may include \ and $ characters avoid the use of
- // matcher.appendReplacement and like methods when doing this work.
-
- String result = input;
-
+ StringBuffer buffer = new StringBuffer();
Matcher matcher = tokenPattern.matcher(input);
while (matcher.find()) {
String next = matcher.group();
@@ -51,10 +46,14 @@ public class TemplateEngine implements Serializable {
String key = keyMatcher.group();
String value = tokens.get(key);
if (value != null) {
- result = result.replace(next, value);
+ next = value;
}
}
+
+ // If we didn't find a replacement for the key, leave the original value unchanged
+ matcher.appendReplacement(buffer, Matcher.quoteReplacement(next));
}
- return result;
+ matcher.appendTail(buffer);
+ return buffer.toString();
}
}
diff --git a/modules/core/util/src/test/java/org/rhq/core/template/TemplateEngineTest.java b/modules/core/util/src/test/java/org/rhq/core/template/TemplateEngineTest.java
index 4402c6c..e215545 100644
--- a/modules/core/util/src/test/java/org/rhq/core/template/TemplateEngineTest.java
+++ b/modules/core/util/src/test/java/org/rhq/core/template/TemplateEngineTest.java
@@ -10,7 +10,7 @@ import org.testng.annotations.Test;
public class TemplateEngineTest extends TestCase {
private static final String IPADDR = "192.168.22.153";
private static final String SUCCESSTOKEN1 = "successtoken1";
- private static final String WINTEMPDIR = "C:\\Users\\JSHAUG~1\\AppData\\Local\\Temp\\";
+ private static final String WINTEMPDIR = "C:\\Users\\JSHAUG~1\\Documents and Settings\\Local\\Temp\\";
String noTokens = "This string should come through unchanged";
String justOneToken = "@@rhq.token1(a)@";
String oneTokenWhiteSpace = "@@ rhq.token1 @@";
@@ -46,6 +46,8 @@ public class TemplateEngineTest extends TestCase {
public void testWinToken() {
assertEquals(WINTEMPDIR, templateEngine.replaceTokens("@@rhq.system.sysprop.java.io.tmpdir(a)@"));
+ assertEquals(WINTEMPDIR + "-" + WINTEMPDIR, templateEngine
+ .replaceTokens("@@rhq.system.sysprop.java.io.tmpdir@@-(a)@ rhq.system.sysprop.java.io.tmpdir @@"));
}
public void testOneTokenWhiteSpace() {
13 years, 7 months
[rhq] Branch 'gwt' - modules/plugins
by mazz
modules/plugins/filetemplate-bundle/src/main/java/org/rhq/plugins/filetemplate/FileTemplateBundlePluginServerComponent.java | 8 ++++++++
1 file changed, 8 insertions(+)
New commits:
commit d6a37dfca8597f255f24b2c1def76fd0b75b291d
Author: John Mazzitelli <mazz(a)redhat.com>
Date: Fri Apr 30 16:02:39 2010 -0400
give the script the properties we should always have available
diff --git a/modules/plugins/filetemplate-bundle/src/main/java/org/rhq/plugins/filetemplate/FileTemplateBundlePluginServerComponent.java b/modules/plugins/filetemplate-bundle/src/main/java/org/rhq/plugins/filetemplate/FileTemplateBundlePluginServerComponent.java
index 334cc5c..e683613 100644
--- a/modules/plugins/filetemplate-bundle/src/main/java/org/rhq/plugins/filetemplate/FileTemplateBundlePluginServerComponent.java
+++ b/modules/plugins/filetemplate-bundle/src/main/java/org/rhq/plugins/filetemplate/FileTemplateBundlePluginServerComponent.java
@@ -39,6 +39,12 @@ import org.rhq.core.pluginapi.inventory.ResourceContext;
@SuppressWarnings("unchecked")
public class FileTemplateBundlePluginServerComponent implements ResourceComponent, BundleFacet {
+ /** property that should always be available to scripts - it's the location where the deployment should be installed */
+ private static final String DEPLOY_DIR = "rhq.deploy.dir";
+
+ /** property that should always be available to scripts - it's the ID of the bundle deployment */
+ private static final String DEPLOY_ID = "rhq.deploy.id";
+
private final Log log = LogFactory.getLog(FileTemplateBundlePluginServerComponent.class);
private ResourceContext resourceContext;
@@ -75,6 +81,8 @@ public class FileTemplateBundlePluginServerComponent implements ResourceComponen
"setting replacement variable values using [" + bundleDeployment.getConfiguration().toString(true)
+ "]");
recipeContext.setReplacementVariableValues(bundleDeployment.getConfiguration());
+ recipeContext.addReplacementVariableValue(DEPLOY_DIR, bundleDeployment.getInstallDir());
+ recipeContext.addReplacementVariableValue(DEPLOY_ID, Integer.toString(bundleDeployment.getId()));
parser.setReplaceReplacementVariables(true);
13 years, 7 months
[rhq] Branch 'gwt' - 2 commits - modules/common modules/core
by Jay Shaughnessy
modules/common/filetemplate-bundle/src/main/java/org/rhq/bundle/filetemplate/recipe/RecipeParser.java | 15 +++++-----
modules/common/filetemplate-bundle/src/test/java/org/rhq/bundle/filetemplate/recipe/RecipeParserTest.java | 2 -
modules/core/util/src/main/java/org/rhq/core/template/TemplateEngine.java | 15 +++++-----
modules/core/util/src/test/java/org/rhq/core/template/TemplateEngineTest.java | 6 ++++
4 files changed, 23 insertions(+), 15 deletions(-)
New commits:
commit a2fc2209301043dd47e29a13851e2571595d85a2
Merge: bab83b6... 6d1d6ca...
Author: Jay Shaughnessy <jshaughn(a)redhat.com>
Date: Fri Apr 30 15:07:13 2010 -0400
Merge branch 'gwt' into gwt-jay
commit bab83b63fc4a393be3d4673e67322e7f7443ec58
Author: Jay Shaughnessy <jshaughn(a)redhat.com>
Date: Fri Apr 30 15:05:31 2010 -0400
Fix some isues with replacement variable logic.
File Template recipe parsing still has an issue dealing with
quoted replacement vars, or arguments, (typically for spaces in the value)
including escape backslash characters. They are replaced with the
single char, so we probably need do double escape inside of those
quoted tokens (see RecipeParser.splitCommandLine)
diff --git a/modules/common/filetemplate-bundle/src/main/java/org/rhq/bundle/filetemplate/recipe/RecipeParser.java b/modules/common/filetemplate-bundle/src/main/java/org/rhq/bundle/filetemplate/recipe/RecipeParser.java
index 0ffe9d9..a871e91 100644
--- a/modules/common/filetemplate-bundle/src/main/java/org/rhq/bundle/filetemplate/recipe/RecipeParser.java
+++ b/modules/common/filetemplate-bundle/src/main/java/org/rhq/bundle/filetemplate/recipe/RecipeParser.java
@@ -168,9 +168,13 @@ public class RecipeParser {
public String replaceReplacementVariables(RecipeContext context, String input) {
+ // since our replacement strings may include \ and $ characters avoid the use of
+ // matcher.appendReplacement and like methods when doing this work.
+
+ String result = input;
Configuration replacementValues = context.getReplacementVariableValues();
TemplateEngine templateEngine = null;
- StringBuffer buffer = new StringBuffer();
+
Matcher matcher = this.replacementVariableDeclarationPattern.matcher(input);
while (matcher.find()) {
String next = matcher.group();
@@ -186,15 +190,12 @@ public class RecipeParser {
value = templateEngine.replaceTokens(next);
}
if (value != null) {
- next = value;
+ result = result.replace(next, value);
}
}
-
- // If we didn't find a replacement for the key then leave the original value unchanged
- matcher.appendReplacement(buffer, Matcher.quoteReplacement(next));
}
- matcher.appendTail(buffer);
- return buffer.toString();
+
+ return result;
}
protected String[] splitCommandLine(String cmdLine) {
diff --git a/modules/common/filetemplate-bundle/src/test/java/org/rhq/bundle/filetemplate/recipe/RecipeParserTest.java b/modules/common/filetemplate-bundle/src/test/java/org/rhq/bundle/filetemplate/recipe/RecipeParserTest.java
index c0cd84b..ba49656 100644
--- a/modules/common/filetemplate-bundle/src/test/java/org/rhq/bundle/filetemplate/recipe/RecipeParserTest.java
+++ b/modules/common/filetemplate-bundle/src/test/java/org/rhq/bundle/filetemplate/recipe/RecipeParserTest.java
@@ -215,7 +215,7 @@ public class RecipeParserTest {
addRecipeCommand("deploy -f jboss2.tar -d @@rhq.system.sysprop.file.separator(a)@");
//addRecipeCommand("deploy -f jboss3.tar -d @@rhq.system.sysprop.line.separator(a)@"); // can't test this here
addRecipeCommand("deploy -f jboss4.tar -d @@rhq.system.sysprop.path.separator(a)@");
- addRecipeCommand("deploy -f jboss5.tar -d @@rhq.system.sysprop.java.home(a)@");
+ addRecipeCommand("deploy -f jboss5.tar -d \"@@rhq.system.sysprop.java.home@(a)\"");
addRecipeCommand("deploy -f jboss6.tar -d @@rhq.system.sysprop.java.version(a)@");
//addRecipeCommand("deploy -f jboss7.tar -d @@rhq.system.sysprop.user.timezone(a)@"); // sometimes this is empty
//addRecipeCommand("deploy -f jboss8.tar -d @@rhq.system.sysprop.user.region(a)@"); // sometimes this doesn't exist
diff --git a/modules/core/util/src/main/java/org/rhq/core/template/TemplateEngine.java b/modules/core/util/src/main/java/org/rhq/core/template/TemplateEngine.java
index b6f39d1..78e56e1 100644
--- a/modules/core/util/src/main/java/org/rhq/core/template/TemplateEngine.java
+++ b/modules/core/util/src/main/java/org/rhq/core/template/TemplateEngine.java
@@ -37,7 +37,12 @@ public class TemplateEngine implements Serializable {
}
public String replaceTokens(String input) {
- StringBuffer buffer = new StringBuffer();
+
+ // since our replacement strings may include \ and $ characters avoid the use of
+ // matcher.appendReplacement and like methods when doing this work.
+
+ String result = input;
+
Matcher matcher = tokenPattern.matcher(input);
while (matcher.find()) {
String next = matcher.group();
@@ -46,14 +51,10 @@ public class TemplateEngine implements Serializable {
String key = keyMatcher.group();
String value = tokens.get(key);
if (value != null) {
- next = value;
+ result = result.replace(next, value);
}
}
- //If we didn't find a replacement for the key
- //We leave the original value unchanged
- matcher.appendReplacement(buffer, next);
}
- matcher.appendTail(buffer);
- return buffer.toString();
+ return result;
}
}
diff --git a/modules/core/util/src/test/java/org/rhq/core/template/TemplateEngineTest.java b/modules/core/util/src/test/java/org/rhq/core/template/TemplateEngineTest.java
index b68b9df..4402c6c 100644
--- a/modules/core/util/src/test/java/org/rhq/core/template/TemplateEngineTest.java
+++ b/modules/core/util/src/test/java/org/rhq/core/template/TemplateEngineTest.java
@@ -10,6 +10,7 @@ import org.testng.annotations.Test;
public class TemplateEngineTest extends TestCase {
private static final String IPADDR = "192.168.22.153";
private static final String SUCCESSTOKEN1 = "successtoken1";
+ private static final String WINTEMPDIR = "C:\\Users\\JSHAUG~1\\AppData\\Local\\Temp\\";
String noTokens = "This string should come through unchanged";
String justOneToken = "@@rhq.token1(a)@";
String oneTokenWhiteSpace = "@@ rhq.token1 @@";
@@ -25,6 +26,7 @@ public class TemplateEngineTest extends TestCase {
tokens = new TreeMap<String, String>();
tokens.put("rhq.token1", SUCCESSTOKEN1);
tokens.put("rhq.platform.ethers.eth1.ipaddress", IPADDR);
+ tokens.put("rhq.system.sysprop.java.io.tmpdir", WINTEMPDIR);
}
return tokens;
}
@@ -42,6 +44,10 @@ public class TemplateEngineTest extends TestCase {
assertEquals(SUCCESSTOKEN1, templateEngine.replaceTokens(justOneToken));
}
+ public void testWinToken() {
+ assertEquals(WINTEMPDIR, templateEngine.replaceTokens("@@rhq.system.sysprop.java.io.tmpdir(a)@"));
+ }
+
public void testOneTokenWhiteSpace() {
assertEquals(SUCCESSTOKEN1, templateEngine.replaceTokens(oneTokenWhiteSpace));
}
13 years, 7 months
[rhq] Branch 'gwt' - modules/enterprise
by mazz
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/BundleDistributionFileUploadServlet.java | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
New commits:
commit 6d1d6ca28c58808c9d61b1837f5d03dea944125c
Author: John Mazzitelli <mazz(a)redhat.com>
Date: Fri Apr 30 13:05:08 2010 -0400
go thru the local interface
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/BundleDistributionFileUploadServlet.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/BundleDistributionFileUploadServlet.java
index e14ce9c..9067171 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/BundleDistributionFileUploadServlet.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/BundleDistributionFileUploadServlet.java
@@ -51,7 +51,7 @@ public class BundleDistributionFileUploadServlet extends FileUploadServlet {
File file = files.values().iterator().next();
BundleManagerLocal bundleManager = LookupUtil.getBundleManager();
- BundleVersion bundleVersion = bundleManager.createBundleVersionViaURL(subject, file.toURI().toURL());
+ BundleVersion bundleVersion = bundleManager.createBundleVersionViaFile(subject, file);
successMsg = "success [" + bundleVersion.getId() + "]";
} catch (Exception e) {
writeExceptionResponse(response, "Failed to upload bundle distribution file", e); // clients will look for this string!
13 years, 7 months