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

Reply via email to