modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/deployment/BundleDeploymentListView.java
| 26 +
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/destination/BundleDestinationView.java
| 1
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/list/BundleView.java
| 3
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/version/BundleVersionView.java
| 135 +++++-----
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/version/file/FileListView.java
| 58 +++-
modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages.properties
| 2
6 files changed, 139 insertions(+), 86 deletions(-)
New commits:
commit 61056623da28a88d5055a2ca6bf4261de018f1fd
Author: John Mazzitelli <mazz(a)redhat.com>
Date: Fri Dec 17 11:28:30 2010 -0500
refactor the bundle version view. add authz checks.
diff --git
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/deployment/BundleDeploymentListView.java
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/deployment/BundleDeploymentListView.java
index a2412d5..a0658b0 100644
---
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/deployment/BundleDeploymentListView.java
+++
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/deployment/BundleDeploymentListView.java
@@ -115,18 +115,20 @@ public class BundleDeploymentListView extends
Table<RPCDataSource<BundleDeployme
setListGridFields(idField, nameField, descriptionField, bundleVersionField,
deployTimeField, statusField);
- setListGridDoubleClickHandler(new DoubleClickHandler() {
- @Override
- public void onDoubleClick(DoubleClickEvent event) {
- ListGrid listGrid = (ListGrid) event.getSource();
- ListGridRecord[] selectedRows = listGrid.getSelection();
- if (selectedRows != null && selectedRows.length == 1) {
- String selectedId =
selectedRows[0].getAttribute(BundleVersionDataSource.FIELD_BUNDLE_ID);
- String selectedVersionId =
selectedRows[0].getAttribute(BundleVersionDataSource.FIELD_ID);
-
CoreGUI.goToView(LinkManager.getBundleDeploymentLink(Integer.valueOf(selectedId), Integer
- .valueOf(selectedVersionId)));
+ if (canManageBundles) {
+ setListGridDoubleClickHandler(new DoubleClickHandler() {
+ @Override
+ public void onDoubleClick(DoubleClickEvent event) {
+ ListGrid listGrid = (ListGrid) event.getSource();
+ ListGridRecord[] selectedRows = listGrid.getSelection();
+ if (selectedRows != null && selectedRows.length == 1) {
+ String selectedId =
selectedRows[0].getAttribute(BundleVersionDataSource.FIELD_BUNDLE_ID);
+ String selectedVersionId =
selectedRows[0].getAttribute(BundleVersionDataSource.FIELD_ID);
+
CoreGUI.goToView(LinkManager.getBundleDeploymentLink(Integer.valueOf(selectedId), Integer
+ .valueOf(selectedVersionId)));
+ }
}
- }
- });
+ });
+ }
}
}
diff --git
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/destination/BundleDestinationView.java
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/destination/BundleDestinationView.java
index c298b35..548037b 100644
---
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/destination/BundleDestinationView.java
+++
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/destination/BundleDestinationView.java
@@ -163,6 +163,7 @@ public class BundleDestinationView extends LocatableVLayout implements
Bookmarka
}
});
tagEditor.setAutoHeight();
+ tagEditor.setExtraSpace(10);
return tagEditor;
}
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 b567a0a..15ebed4 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
@@ -140,6 +140,7 @@ public class BundleView extends LocatableVLayout implements
BookmarkableView {
}
});
tagEditor.setAutoHeight();
+ tagEditor.setExtraSpace(10);
return tagEditor;
}
@@ -304,7 +305,7 @@ public class BundleView extends LocatableVLayout implements
BookmarkableView {
if (viewPath.getCurrent().getPath().equals("versions")) {
if (!viewPath.isEnd()) {
// a specific version
- BundleVersionView view = new
BundleVersionView(extendLocatorId("Version"));
+ BundleVersionView view = new
BundleVersionView(extendLocatorId("Version"), canManageBundles);
addMember(view);
view.renderView(viewPath.next());
}
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
index ad55799..2985f06 100644
---
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
@@ -26,11 +26,11 @@ import java.util.HashSet;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.smartgwt.client.data.Criteria;
-import com.smartgwt.client.types.TitleOrientation;
import com.smartgwt.client.widgets.Canvas;
-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.form.fields.events.ChangeEvent;
+import com.smartgwt.client.widgets.form.fields.events.ChangeHandler;
import com.smartgwt.client.widgets.tab.Tab;
import com.smartgwt.client.widgets.tab.TabSet;
@@ -40,6 +40,7 @@ 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.LinkManager;
import org.rhq.enterprise.gui.coregui.client.ViewId;
import org.rhq.enterprise.gui.coregui.client.ViewPath;
import org.rhq.enterprise.gui.coregui.client.bundle.deployment.BundleDeploymentListView;
@@ -61,63 +62,84 @@ import
org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableVLayout;
public class BundleVersionView extends LocatableVLayout implements BookmarkableView {
private BundleVersion version;
+ private boolean canManageBundles = false;
- public BundleVersionView(String locatorId) {
+ public BundleVersionView(String locatorId, boolean canManageBundles) {
super(locatorId);
+ this.canManageBundles = canManageBundles;
setWidth100();
setHeight100();
+ //setMargin(10); // do not set margin, we already have our margin set outside of
us
}
- public void viewBundleVersion(BundleVersion version, ViewId nextViewId) {
+ private void viewBundleVersion(BundleVersion version, ViewId nextViewId) {
// Whenever a new view request comes in, make sure to clean house to avoid ID
conflicts for sub-widgets
this.destroyMembers();
this.version = version;
- TabSet tabs = new LocatableTabSet(getLocatorId());
- tabs.addTab(createSummaryTab());
-
- tabs.addTab(createLiveDeploymentsTab());
-
- tabs.addTab(createFilesTab());
-
- // tabs.addTab(createUpdateHistoryTab());
-
addMember(new BackButton(extendLocatorId("BackButton"),
MSG.view_bundle_version_backToBundle() + ": "
- + version.getBundle().getName(), "Bundles/Bundle/" +
version.getBundle().getId()));
+ + version.getBundle().getName(),
LinkManager.getBundleLink(version.getBundle().getId())));
addMember(new
HeaderLabel(Canvas.getImgURL("subsystems/bundle/BundleVersion_24.png"),
version.getName() + ": "
+ version.getVersion()));
+ addMember(createTagEditor());
+
+ addMember(createSummaryForm());
+
+ TabSet tabs = new LocatableTabSet(extendLocatorId("Tabs"));
+ tabs.addTab(createRecipeTab());
+ tabs.addTab(createLiveDeploymentsTab());
+ tabs.addTab(createFilesTab());
addMember(tabs);
if (nextViewId != null) {
- if (nextViewId.getPath().equals("deployments")) {
+ if (nextViewId.getPath().equals("recipe")) {
+ tabs.selectTab(0);
+ } else 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);
+ } else {
+ // should we throw an exception? someone gave a bad URL; just bring them
to first tab
+ tabs.selectTab(0);
}
}
markForRedraw();
}
- private Tab createSummaryTab() {
- LocatableTab tab = new LocatableTab(extendLocatorId("Summary"),
MSG.common_title_summary());
-
- LocatableDynamicForm form = new LocatableDynamicForm(tab.getLocatorId());
+ private LocatableDynamicForm createSummaryForm() {
+ LocatableDynamicForm form = new
LocatableDynamicForm(extendLocatorId("Summary"));
form.setWidth100();
- form.setHeight100();
- form.setNumCols(4);
+ form.setAutoHeight();
+ form.setNumCols(2);
+ form.setWrapItemTitles(false);
+ form.setExtraSpace(10);
+ form.setIsGroup(true);
+ form.setGroupTitle(MSG.common_title_summary());
+ form.setPadding(5);
StaticTextItem versionItem = new StaticTextItem("version",
MSG.common_title_version());
versionItem.setValue(version.getVersion());
- CanvasItem tagItem = new CanvasItem("tag");
- tagItem.setShowTitle(false);
- TagEditorView tagEditor = new TagEditorView(form.getLocatorId(),
version.getTags(), false,
+ StaticTextItem descriptionItem = new StaticTextItem("description",
MSG.common_title_description());
+ descriptionItem.setValue(version.getDescription());
+
+ StaticTextItem liveDeploymentsItem = new StaticTextItem("deployments",
MSG.view_bundle_deployments());
+ liveDeploymentsItem.setValue(version.getBundleDeployments().size());
+
+ StaticTextItem filesItems = new StaticTextItem("files",
MSG.view_bundle_files());
+ filesItems.setValue(version.getBundleFiles().size());
+
+ form.setFields(versionItem, descriptionItem, liveDeploymentsItem, filesItems);
+ return form;
+ }
+
+ private TagEditorView createTagEditor() {
+ boolean readOnly = !this.canManageBundles;
+ TagEditorView tagEditor = new TagEditorView(extendLocatorId("Tags"),
version.getTags(), readOnly,
new TagsChangedCallback() {
public void tagsChanged(HashSet<Tag> tags) {
GWTServiceLookup.getTagService().updateBundleVersionTags(version.getId(), tags,
@@ -135,61 +157,54 @@ public class BundleVersionView extends LocatableVLayout implements
BookmarkableV
});
}
});
- tagEditor.setVertical(true);
- tagItem.setCanvas(tagEditor);
- tagItem.setRowSpan(4);
-
- StaticTextItem descriptionItem = new StaticTextItem("description",
MSG.common_title_description());
- descriptionItem.setValue(version.getDescription());
-
- StaticTextItem liveDeploymentsItem = new StaticTextItem("deployments",
MSG.view_bundle_deployments());
- liveDeploymentsItem.setValue(version.getBundleDeployments().size());
-
- StaticTextItem filesItems = new StaticTextItem("files",
MSG.view_bundle_files());
- filesItems.setValue(version.getBundleFiles().size());
-
- TextAreaItem recipeItem = new TextAreaItem("recipe",
MSG.view_bundle_recipe());
- recipeItem.setDisabled(true);
- recipeItem.setTitleOrientation(TitleOrientation.TOP);
- recipeItem.setColSpan(4);
- recipeItem.setWidth("*");
- recipeItem.setHeight("*");
- recipeItem.setValue(version.getRecipe());
+ tagEditor.setAutoHeight();
+ tagEditor.setExtraSpace(10);
+ return tagEditor;
+ }
- form.setFields(versionItem, tagItem, descriptionItem, liveDeploymentsItem,
filesItems, recipeItem);
+ private Tab createRecipeTab() {
+ LocatableTab tab = new LocatableTab(extendLocatorId("Recipe"),
MSG.view_bundle_recipe());
+ LocatableDynamicForm form = new
LocatableDynamicForm(extendLocatorId("RecipeForm"));
+
+ TextAreaItem recipeCanvas = new TextAreaItem("recipe",
MSG.view_bundle_recipe());
+ recipeCanvas.setShowTitle(false);
+ recipeCanvas.setColSpan(2);
+ recipeCanvas.setWidth("100%");
+ recipeCanvas.setHeight("100%");
+ recipeCanvas.setValue(version.getRecipe());
+ recipeCanvas.addChangeHandler(new ChangeHandler() {
+ @Override
+ public void onChange(ChangeEvent event) {
+ // makes this read-only; however, since its not disabled, user can still
select/copy the text
+ event.cancel();
+ }
+ });
+ form.setHeight100();
+ form.setWidth100();
+ form.setItems(recipeCanvas);
tab.setPane(form);
-
return tab;
}
private Tab createLiveDeploymentsTab() {
LocatableTab tab = new LocatableTab(extendLocatorId("Deployments"),
MSG.view_bundle_deployments());
-
Criteria criteria = new Criteria();
criteria.setAttribute("bundleVersionId", version.getId());
-
- // TODO: get user perm, if has manage_bundle, pass true
- tab.setPane(new BundleDeploymentListView(tab.getLocatorId(), criteria, false));
-
+ tab.setPane(new BundleDeploymentListView(tab.getLocatorId(), criteria,
this.canManageBundles));
return tab;
}
private Tab createFilesTab() {
LocatableTab tab = new LocatableTab(extendLocatorId("Files"),
MSG.view_bundle_files());
-
FileListView filesView = new FileListView(tab.getLocatorId(), version.getId());
-
tab.setPane(filesView);
-
return tab;
}
public void renderView(final ViewPath viewPath) {
int bundleVersionId = Integer.parseInt(viewPath.getCurrent().getPath());
- final ViewId viewId = viewPath.getCurrent();
-
BundleVersionCriteria criteria = new BundleVersionCriteria();
criteria.addFilterId(bundleVersionId);
criteria.fetchBundle(true);
@@ -206,9 +221,9 @@ public class BundleVersionView extends LocatableVLayout implements
BookmarkableV
public void onSuccess(PageList<BundleVersion> result) {
BundleVersion version = result.get(0);
- viewBundleVersion(version, viewPath.getCurrent());
+ ViewId nextPath = viewPath.next().getCurrent();
+ viewBundleVersion(version, nextPath);
}
});
-
}
}
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
index 31fce59..5b33200 100644
---
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
@@ -25,10 +25,13 @@ package org.rhq.enterprise.gui.coregui.client.bundle.version.file;
import java.util.List;
import com.google.gwt.user.client.rpc.AsyncCallback;
+import com.smartgwt.client.types.AutoFitWidthApproach;
+import com.smartgwt.client.widgets.grid.ListGrid;
import com.smartgwt.client.widgets.grid.ListGridField;
import com.smartgwt.client.widgets.grid.ListGridRecord;
import org.rhq.core.domain.bundle.BundleFile;
+import org.rhq.core.domain.content.PackageVersion;
import org.rhq.core.domain.criteria.BundleFileCriteria;
import org.rhq.core.domain.measurement.MeasurementUnits;
import org.rhq.core.domain.util.PageList;
@@ -43,6 +46,13 @@ import
org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableVLayout;
*/
public class FileListView extends LocatableVLayout {
+ private static final String ID = "id";
+ private static final String NAME = "name";
+ private static final String FILESIZE = "fileSize";
+ private static final String MD5 = "md5";
+ private static final String SHA256 = "sha256";
+ private static final String VERSION = "version";
+
private int bundleVersionId;
public FileListView(String locatorId, int bundleVersionId) {
@@ -54,20 +64,32 @@ public class FileListView extends LocatableVLayout {
Table table = new Table(extendLocatorId("BundleFiles"),
MSG.view_bundle_bundleFiles());
- ListGridField id = new ListGridField("id", MSG.common_title_id());
- id.setWidth("20%");
-
- ListGridField name = new ListGridField("name",
MSG.common_title_name());
- name.setWidth("60%");
+ ListGridField id = new ListGridField(ID, MSG.common_title_id());
+ ListGridField name = new ListGridField(NAME, MSG.common_title_name());
+ ListGridField size = new ListGridField(FILESIZE,
MSG.view_bundle_fileListView_fileSize());
+ //ListGridField md5 = new ListGridField(MD5,
MSG.view_bundle_fileListView_md5());
+ ListGridField sha256 = new ListGridField(SHA256,
MSG.view_bundle_fileListView_sha256());
+ ListGridField version = new ListGridField(VERSION, MSG.common_title_version());
- ListGridField size = new ListGridField("size",
MSG.view_bundle_fileListView_fileSize());
- name.setWidth("20%");
+ id.setWidth("50");
+ setAutoFitOnField(name);
+ setAutoFitOnField(size);
+ //setAutoFitOnField(md5);
+ setAutoFitOnField(sha256);
+ setAutoFitOnField(version);
// To get the ListGrid the Table must be initialized (via onInit()) by adding to
the Canvas
addMember(table);
- table.getListGrid().setFields(id, name, size);
- table.getListGrid().setData(buildRecords(files));
+ ListGrid listGrid = table.getListGrid();
+ listGrid.setFields(id, name, size, /*md5,*/sha256, version); // today, we
don't set md5, no sense showing it
+ listGrid.setData(buildRecords(files));
+ table.setTableActionDisableOverride(true);
+ }
+
+ private void setAutoFitOnField(ListGridField field) {
+ field.setAutoFitWidth(true);
+ field.setAutoFitWidthApproach(AutoFitWidthApproach.BOTH);
}
@Override
@@ -96,17 +118,27 @@ public class FileListView extends LocatableVLayout {
int i = 0;
for (BundleFile file : files) {
ListGridRecord record = new ListGridRecord();
- record.setAttribute("id", file.getId());
- record.setAttribute("name",
file.getPackageVersion().getFileName());
+ PackageVersion packageVersion = file.getPackageVersion();
+
+ record.setAttribute(ID, file.getId());
+ record.setAttribute(NAME,
returnValueOrUnknown(packageVersion.getFileName()));
+ record.setAttribute(MD5, returnValueOrUnknown(packageVersion.getMD5()));
+ record.setAttribute(SHA256,
returnValueOrUnknown(packageVersion.getSHA256()));
+ record.setAttribute(VERSION,
returnValueOrUnknown(packageVersion.getVersion()));
- Long size = file.getPackageVersion().getFileSize();
+ Long size = packageVersion.getFileSize();
if (size != null) {
- record.setAttribute("size",
MeasurementConverterClient.format(size.doubleValue(),
+ record.setAttribute(FILESIZE,
MeasurementConverterClient.format(size.doubleValue(),
MeasurementUnits.BYTES, true));
+ } else {
+ record.setAttribute(FILESIZE, MSG.common_val_na());
}
records[i++] = record;
}
return records;
}
+ private String returnValueOrUnknown(String val) {
+ return (val != null && val.length() > 0) ? val : MSG.common_val_na();
+ }
}
diff --git
a/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages.properties
b/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages.properties
index de1ef89..b0ceaf9 100644
---
a/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages.properties
+++
b/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages.properties
@@ -902,6 +902,8 @@ view_bundle_versions = Versions
# individual bundle views/wizards
view_bundle_fileListView_fileSize = File Size
+view_bundle_fileListView_md5 = MD5
+view_bundle_fileListView_sha256 = SHA256
view_bundle_fileListView_loadFailure = Failed to load bundle file data
view_bundle_version_backToBundle = Back to Bundle
view_bundle_version_bundleVersionTagUpdateFailure = Failed to update bundle version tags