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@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
rhq-commits@lists.fedorahosted.org