Jakub Niedermertl has uploaded a new change for review. Change subject: userportal: Templates listing in userportal has multiple columns ......................................................................
userportal: Templates listing in userportal has multiple columns New columns were added to userportal > Extended > Templates listing: version, version name for users to be able to differentiate among versions of the same template. Table header allowing columns resizing were added. Change-Id: I72a3a86e20bcbb8e96f75aa3c0609979e7a3aff2 Bug-Url: https://bugzilla.redhat.com/1169373 Signed-off-by: Jakub Niedermertl <[email protected]> --- M frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/CommonApplicationConstants.java M frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/CommonApplicationTemplates.java M frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/templates/TemplateListModel.java M frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/section/main/view/AbstractSideTabWithDetailsView.java M frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/section/main/view/tab/extended/SideTabExtendedTemplateView.java M frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/widget/table/column/UserPortalSimpleActionTable.java M frontend/webadmin/modules/userportal-gwtp/src/main/resources/org/ovirt/engine/ui/userportal/css/ExtendedTemplateListTable.css A frontend/webadmin/modules/userportal-gwtp/src/main/resources/org/ovirt/engine/ui/userportal/css/ExtendedTemplateListTableHeader.css A frontend/webadmin/modules/userportal-gwtp/src/main/resources/org/ovirt/engine/ui/userportal/css/SideTabExtendedTemplateViewStyle.css 9 files changed, 178 insertions(+), 20 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/35/36835/1 diff --git a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/CommonApplicationConstants.java b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/CommonApplicationConstants.java index 9e6bde9..0cbf667 100644 --- a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/CommonApplicationConstants.java +++ b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/CommonApplicationConstants.java @@ -62,6 +62,15 @@ @DefaultStringValue("Disks Allocation:") String disksAllocation(); + @DefaultStringValue("Name") + String templateName(); + + @DefaultStringValue("Version") + String templateVersion(); + + @DefaultStringValue("Description") + String templateDescription(); + @DefaultStringValue("Create as a Template Sub Version") String createAsSubTemplate(); diff --git a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/CommonApplicationTemplates.java b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/CommonApplicationTemplates.java index fb94750..e51e1b4 100644 --- a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/CommonApplicationTemplates.java +++ b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/CommonApplicationTemplates.java @@ -98,6 +98,6 @@ @Template("<span title='{1}'>{0}</span>") SafeHtml textAndTitle(String text, String title); - @Template("<div style='border-right: 1px solid #D7D7E1; height: 32px;'>{0}</div>") + @Template("<div style='border-right: 1px solid #D7D7E1;'>{0}</div>") SafeHtml nonResizeableColumnHeader(SafeHtml text); } diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/templates/TemplateListModel.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/templates/TemplateListModel.java index 7da4809..1885d82 100644 --- a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/templates/TemplateListModel.java +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/templates/TemplateListModel.java @@ -2,6 +2,8 @@ import java.util.ArrayList; import java.util.Collection; +import java.util.Collections; +import java.util.Comparator; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -418,7 +420,54 @@ @Override public void setItems(Collection value) { genVersionToBaseTemplate(value); - super.setItems(value); + final List<VmTemplate> sortedValues = sortTemplates(value); + super.setItems(sortedValues); + } + + /** + * It sorts {@link org.ovirt.engine.core.common.businessentities.VmTemplate}s using + * {@link org.ovirt.engine.ui.uicommonweb.models.templates.TemplateListModel.TemplateComparator} + */ + private List<VmTemplate> sortTemplates(Collection<VmTemplate> value) { + final List<VmTemplate> sortedValues = new ArrayList<>(value); + Collections.sort(sortedValues, new TemplateComparator()); + return sortedValues; + } + + /** + * Comparator sorting templates + * <ul> + * <li>alphabetically by base-template name case insensitive</li> + * <li>alphabetically by base-template name case sensitive</li> + * <li>and then by version number - descending</li> + * </ul> + */ + private class TemplateComparator implements Comparator<VmTemplate> { + + @Override + public int compare(VmTemplate t1, VmTemplate t2) { + final int baseNameCaseInsentitiveComparison = t1.getName().compareToIgnoreCase(t2.getName()); + if (baseNameCaseInsentitiveComparison != 0) { + return baseNameCaseInsentitiveComparison; + } + final int baseNameComparison = t1.getName().compareTo(t2.getName()); + if (baseNameComparison != 0) { + return baseNameComparison; + } + final int versionComparison = Integer.signum( + -Integer.compare(t1.getTemplateVersionNumber(), t2.getTemplateVersionNumber())); + return versionComparison; + } + + @Override + public boolean equals(Object obj) { + return obj != null && this.getClass().equals(obj.getClass()); + } + + @Override + public int hashCode() { + return this.getClass().hashCode(); + } } private Map<Guid, String> templateIdToBaseTemplateName; diff --git a/frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/section/main/view/AbstractSideTabWithDetailsView.java b/frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/section/main/view/AbstractSideTabWithDetailsView.java index cf5bd10..34a50d5 100644 --- a/frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/section/main/view/AbstractSideTabWithDetailsView.java +++ b/frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/section/main/view/AbstractSideTabWithDetailsView.java @@ -57,14 +57,30 @@ protected SimpleActionTable<T> createActionTable() { return new UserPortalSimpleActionTable<T>(modelProvider, getTableResources(), + getTableHeaderResources(), ClientGinjectorProvider.getEventBus(), - ClientGinjectorProvider.getClientStorage()); + ClientGinjectorProvider.getClientStorage()) { + @Override + protected String getTableContainerStyleName() { + return AbstractSideTabWithDetailsView.this.getTableContainerStyleName() == null + ? super.getTableContainerStyleName() + : AbstractSideTabWithDetailsView.this.getTableContainerStyleName(); + } + }; } protected Resources getTableResources() { return null; } + protected Resources getTableHeaderResources() { + return null; + } + + protected String getTableContainerStyleName() { + return null; + } + void initSplitPanel() { splitPanel.add(table); subTabPanelVisible = false; diff --git a/frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/section/main/view/tab/extended/SideTabExtendedTemplateView.java b/frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/section/main/view/tab/extended/SideTabExtendedTemplateView.java index dca8125..279b06b 100644 --- a/frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/section/main/view/tab/extended/SideTabExtendedTemplateView.java +++ b/frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/section/main/view/tab/extended/SideTabExtendedTemplateView.java @@ -1,14 +1,19 @@ package org.ovirt.engine.ui.userportal.section.main.view.tab.extended; +import com.google.gwt.resources.client.ClientBundle; import org.ovirt.engine.core.common.businessentities.VmTemplate; +import org.ovirt.engine.ui.common.CommonApplicationConstants; import org.ovirt.engine.ui.common.idhandler.ElementIdHandler; import org.ovirt.engine.ui.common.system.ClientStorage; import org.ovirt.engine.ui.common.utils.ElementIdUtils; +import org.ovirt.engine.ui.common.widget.table.column.TextCellWithTooltip; +import org.ovirt.engine.ui.common.widget.table.column.TextColumnWithTooltip; import org.ovirt.engine.ui.uicommonweb.UICommand; import org.ovirt.engine.ui.uicommonweb.models.userportal.UserPortalTemplateListModel; import org.ovirt.engine.ui.userportal.ApplicationConstants; import org.ovirt.engine.ui.userportal.ApplicationResources; import org.ovirt.engine.ui.userportal.ApplicationTemplates; +import org.ovirt.engine.ui.userportal.SideTabWithDetailsViewStyle; import org.ovirt.engine.ui.userportal.section.main.presenter.tab.extended.SideTabExtendedTemplatePresenter; import org.ovirt.engine.ui.userportal.section.main.view.AbstractSideTabWithDetailsView; import org.ovirt.engine.ui.userportal.uicommon.model.template.UserPortalTemplateListProvider; @@ -34,16 +39,26 @@ private static final TemplateTableResources templateTableResources = GWT.create(TemplateTableResources.class); + private static final TemplateTableHeaderResources TEMPLATE_TABLE_HEADER_RESOURCES = + GWT.create(TemplateTableHeaderResources.class); + + private static final TemplateSideTabWithDetailsViewStyle TEMPLATE_SIDE_TAB_WITH_DETAILS_VIEW_STYLE = + GWT.create(TemplateSideTabWithDetailsViewStyle.class); + static { + TEMPLATE_SIDE_TAB_WITH_DETAILS_VIEW_STYLE.templateSideTab().ensureInjected(); + } + @Inject public SideTabExtendedTemplateView( UserPortalTemplateListProvider provider, ApplicationTemplates templates, ApplicationConstants constants, + CommonApplicationConstants commonConstants, ApplicationResources applicationResources, ClientStorage clientStorage) { super(provider, applicationResources, clientStorage); ViewIdHandler.idHandler.generateAndSetIds(this); - initTable(templates, constants); + initTable(templates, constants, commonConstants); } @Override @@ -52,11 +67,23 @@ } @Override + protected Resources getTableHeaderResources() { + return TEMPLATE_TABLE_HEADER_RESOURCES; + } + + @Override + protected String getTableContainerStyleName() { + return TEMPLATE_SIDE_TAB_WITH_DETAILS_VIEW_STYLE.templateSideTab().mainContentPanel(); + } + + @Override protected Object getSubTabPanelContentSlot() { return SideTabExtendedTemplatePresenter.TYPE_SetSubTabPanelContent; } - private void initTable(final ApplicationTemplates templates, ApplicationConstants constants) { + private void initTable(final ApplicationTemplates templates, ApplicationConstants constants, + CommonApplicationConstants commonConstants) { + getTable().enableColumnResizing(); final String elementIdPrefix = getTable().getContentTableElementId(); getTable().addColumn(new VmImageColumn<VmTemplate>(new OsTypeExtractor<VmTemplate>() { @@ -66,27 +93,59 @@ } }), "", "77px"); //$NON-NLS-1$ //$NON-NLS-2$ - Cell<VmTemplate> nameAndDescriptionCell = new AbstractCell<VmTemplate>() { + Cell<VmTemplate> nameCell = new AbstractCell<VmTemplate>() { @Override public void render(Context context, VmTemplate template, SafeHtmlBuilder sb) { sb.append(templates.vmNameCellItem( ElementIdUtils.createTableCellElementId(elementIdPrefix, "name", context), //$NON-NLS-1$ template.getName())); - - String description = template.getDescription(); - if (description != null && !description.isEmpty()) { - sb.append(templates.vmDescriptionCellItem(description)); - } } }; - Column<VmTemplate, VmTemplate> nameAndDescriptionColumn = new Column<VmTemplate, VmTemplate>(nameAndDescriptionCell) { + Column<VmTemplate, VmTemplate> nameColumn = new Column<VmTemplate, VmTemplate>(nameCell) { @Override public VmTemplate getValue(VmTemplate template) { return template; } }; - getTable().addColumn(nameAndDescriptionColumn, constants.empty()); + getTable().addColumn(nameColumn, commonConstants.templateName(), "22em"); //$NON-NLS-1$ + + final TextCellWithTooltip subversionNumberCell = new TextCellWithTooltip(TextCellWithTooltip.UNLIMITED_LENGTH); + + final TextColumnWithTooltip<VmTemplate> subversionNumberColumn = new TextColumnWithTooltip<VmTemplate>(subversionNumberCell) { + + @Override + public String getValue(VmTemplate template) { + return "(" + template.getTemplateVersionNumber() + ")"; //$NON-NLS-1$ //$NON-NLS-2$; + } + }; + table.addColumn(subversionNumberColumn, commonConstants.templateVersion(), "9em"); //$NON-NLS-1$ + + final TextCellWithTooltip subversionNameCell = new TextCellWithTooltip(TextCellWithTooltip.UNLIMITED_LENGTH); + + final TextColumnWithTooltip subversionNameColumn = new TextColumnWithTooltip<VmTemplate>(subversionNameCell) { + + @Override + public String getValue(VmTemplate template) { + return template.getTemplateVersionName() != null && !template.getTemplateVersionName().isEmpty() + ? template.getTemplateVersionName() + : ""; + } + }; + table.addColumn(subversionNameColumn, commonConstants.templateVersionName(), "22em"); //$NON-NLS-1$ + + final TextCellWithTooltip descriptionCell = new TextCellWithTooltip(TextCellWithTooltip.UNLIMITED_LENGTH); + + final TextColumnWithTooltip descriptionColumn = new TextColumnWithTooltip<VmTemplate>(descriptionCell) { + + @Override + public String getValue(VmTemplate template) { + return template.getDescription() != null && !template.getDescription().isEmpty() + ? template.getDescription() + : ""; + } + }; + table.addColumn(descriptionColumn, commonConstants.templateDescription()); getTable().addActionButton(new UserPortalButtonDefinition<VmTemplate>(constants.editTemplate()) { @Override @@ -112,4 +171,20 @@ TableStyle cellTableStyle(); } + public interface TemplateTableHeaderResources extends CellTable.Resources { + + @Source({ CellTable.Style.DEFAULT_CSS, + "org/ovirt/engine/ui/userportal/css/ExtendedTemplateListTable.css", + "org/ovirt/engine/ui/userportal/css/ExtendedTemplateListTableHeader.css"}) + @Override + CellTable.Style cellTableStyle(); + } + + public interface TemplateSideTabWithDetailsViewStyle extends ClientBundle { + + @Source({"org/ovirt/engine/ui/userportal/css/SideTabWithDetailsViewStyle.css", + "org/ovirt/engine/ui/userportal/css/SideTabExtendedTemplateViewStyle.css"}) + SideTabWithDetailsViewStyle templateSideTab(); + } + } diff --git a/frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/widget/table/column/UserPortalSimpleActionTable.java b/frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/widget/table/column/UserPortalSimpleActionTable.java index cb780fe..ef43601 100644 --- a/frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/widget/table/column/UserPortalSimpleActionTable.java +++ b/frontend/webadmin/modules/userportal-gwtp/src/main/java/org/ovirt/engine/ui/userportal/widget/table/column/UserPortalSimpleActionTable.java @@ -24,10 +24,11 @@ } public UserPortalSimpleActionTable(SearchableTableModelProvider<T, ?> dataProvider, - Resources resources, - EventBus eventBus, - ClientStorage clientStorage) { - super(dataProvider, resources, eventBus, clientStorage); + Resources resources, + Resources headerResources, + EventBus eventBus, + ClientStorage clientStorage) { + super(dataProvider, resources, headerResources, eventBus, clientStorage); } public UserPortalSimpleActionTable(SearchableTableModelProvider<T, ?> dataProvider, diff --git a/frontend/webadmin/modules/userportal-gwtp/src/main/resources/org/ovirt/engine/ui/userportal/css/ExtendedTemplateListTable.css b/frontend/webadmin/modules/userportal-gwtp/src/main/resources/org/ovirt/engine/ui/userportal/css/ExtendedTemplateListTable.css index ea1ac3f..4321803 100644 --- a/frontend/webadmin/modules/userportal-gwtp/src/main/resources/org/ovirt/engine/ui/userportal/css/ExtendedTemplateListTable.css +++ b/frontend/webadmin/modules/userportal-gwtp/src/main/resources/org/ovirt/engine/ui/userportal/css/ExtendedTemplateListTable.css @@ -9,7 +9,7 @@ } .cellTableHeader { - display: none; + display: none; } .cellTableWidget { @@ -19,8 +19,8 @@ .cellTableSelectedRowCell, .cellTableSelectedRow, .cellTableHoveredRow .cellTableSelectedRowCell { background-color: #3a5f7c; - font-size: 14px; - font-family: Arial,sans-serif; + font-size: 14px; + font-family: Arial,sans-serif; font-weight: bold; color: black; } diff --git a/frontend/webadmin/modules/userportal-gwtp/src/main/resources/org/ovirt/engine/ui/userportal/css/ExtendedTemplateListTableHeader.css b/frontend/webadmin/modules/userportal-gwtp/src/main/resources/org/ovirt/engine/ui/userportal/css/ExtendedTemplateListTableHeader.css new file mode 100644 index 0000000..fd354b8 --- /dev/null +++ b/frontend/webadmin/modules/userportal-gwtp/src/main/resources/org/ovirt/engine/ui/userportal/css/ExtendedTemplateListTableHeader.css @@ -0,0 +1,5 @@ +.cellTableHeader { + display: table-cell; + border: none; + padding-right: 0px; +} \ No newline at end of file diff --git a/frontend/webadmin/modules/userportal-gwtp/src/main/resources/org/ovirt/engine/ui/userportal/css/SideTabExtendedTemplateViewStyle.css b/frontend/webadmin/modules/userportal-gwtp/src/main/resources/org/ovirt/engine/ui/userportal/css/SideTabExtendedTemplateViewStyle.css new file mode 100644 index 0000000..ebf86e0 --- /dev/null +++ b/frontend/webadmin/modules/userportal-gwtp/src/main/resources/org/ovirt/engine/ui/userportal/css/SideTabExtendedTemplateViewStyle.css @@ -0,0 +1,3 @@ +.mainContentPanel { + top: 62px; +} \ No newline at end of file -- To view, visit http://gerrit.ovirt.org/36835 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I72a3a86e20bcbb8e96f75aa3c0609979e7a3aff2 Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Jakub Niedermertl <[email protected]> _______________________________________________ Engine-patches mailing list [email protected] http://lists.ovirt.org/mailman/listinfo/engine-patches
