package org.ovirt.engine.ui.userportal.section.main.view.tab.extended; import org.ovirt.engine.core.common.businessentities.VmTemplate; import org.ovirt.engine.core.compat.Guid; 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.cell.TextCell; import org.ovirt.engine.ui.common.widget.table.column.AbstractDataurlImageColumn; import org.ovirt.engine.ui.common.widget.table.column.AbstractTextColumn; import org.ovirt.engine.ui.uicommonweb.UICommand; import org.ovirt.engine.ui.uicommonweb.models.userportal.UserPortalTemplateListModel; import org.ovirt.engine.ui.uicommonweb.models.vms.IconCache; import org.ovirt.engine.ui.userportal.ApplicationConstants; import org.ovirt.engine.ui.userportal.ApplicationMessages; 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.gin.AssetProvider; 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; import org.ovirt.engine.ui.userportal.widget.action.UserPortalButtonDefinition; import com.google.gwt.cell.client.AbstractCell; import com.google.gwt.cell.client.Cell; import com.google.gwt.core.client.GWT; import com.google.gwt.resources.client.ClientBundle; import com.google.gwt.safehtml.shared.SafeHtmlBuilder; import com.google.gwt.user.cellview.client.CellTable; import com.google.gwt.user.cellview.client.CellTable.Resources; import com.google.gwt.user.cellview.client.Column; import com.google.inject.Inject; public class SideTabExtendedTemplateView extends AbstractSideTabWithDetailsView<VmTemplate, UserPortalTemplateListModel> implements SideTabExtendedTemplatePresenter.ViewDef { interface ViewIdHandler extends ElementIdHandler<SideTabExtendedTemplateView> { ViewIdHandler idHandler = GWT.create(ViewIdHandler.class); } public interface TemplateTableResources extends CellTable.Resources { interface TableStyle extends CellTable.Style { } @Override @Source({ CellTable.Style.DEFAULT_CSS, "org/ovirt/engine/ui/userportal/css/ExtendedTemplateListTable.css" }) 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(); } 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(); } private static final ApplicationTemplates templates = AssetProvider.getTemplates(); private static final ApplicationResources resources = AssetProvider.getResources(); private static final ApplicationConstants constants = AssetProvider.getConstants(); private static final ApplicationMessages messages = AssetProvider.getMessages(); @Inject public SideTabExtendedTemplateView( UserPortalTemplateListProvider provider, ClientStorage clientStorage) { super(provider, clientStorage); ViewIdHandler.idHandler.generateAndSetIds(this); initTable(); } @Override protected Resources getTableResources() { return templateTableResources; } @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() { getTable().enableColumnResizing(); final String elementIdPrefix = getTable().getContentTableElementId(); getTable().addColumn(new AbstractDataurlImageColumn<VmTemplate>() { @Override public String getValue(VmTemplate template) { final Guid smallIconId = template.getSmallIconId(); return IconCache.getInstance().getIcon(smallIconId); } }, "", "77px"); //$NON-NLS-1$ //$NON-NLS-2$ 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())); } }; Column<VmTemplate, VmTemplate> nameColumn = new Column<VmTemplate, VmTemplate>(nameCell) { @Override public VmTemplate getValue(VmTemplate template) { return template; } }; getTable().addColumn(nameColumn, constants.templateName(), "350px"); //$NON-NLS-1$ final TextCell subversionNumberCell = new TextCell(); final AbstractTextColumn<VmTemplate> subversionNumberColumn = new AbstractTextColumn<VmTemplate>(subversionNumberCell) { @Override public String getValue(VmTemplate template) { return "(" + template.getTemplateVersionNumber() + ")"; //$NON-NLS-1$ //$NON-NLS-2$; } }; table.addColumn(subversionNumberColumn, constants.templateVersion(), "140px"); //$NON-NLS-1$ final TextCell subversionNameCell = new TextCell(); final AbstractTextColumn<VmTemplate> subversionNameColumn = new AbstractTextColumn<VmTemplate>(subversionNameCell) { @Override public String getValue(VmTemplate template) { return template.getTemplateVersionName() != null && !template.getTemplateVersionName().isEmpty() ? template.getTemplateVersionName() : ""; //$NON-NLS-1$ } }; table.addColumn(subversionNameColumn, constants.templateVersionName(), "350px"); //$NON-NLS-1$ final TextCell descriptionCell = new TextCell(); final AbstractTextColumn<VmTemplate> descriptionColumn = new AbstractTextColumn<VmTemplate>(descriptionCell) { @Override public String getValue(VmTemplate template) { return template.getDescription() != null && !template.getDescription().isEmpty() ? template.getDescription() : ""; //$NON-NLS-1$ } }; table.addColumn(descriptionColumn, constants.templateDescription()); getTable().addActionButton(new UserPortalButtonDefinition<VmTemplate>(constants.editTemplate()) { @Override protected UICommand resolveCommand() { return getModel().getEditCommand(); } }); getTable().addActionButton(new UserPortalButtonDefinition<VmTemplate>(constants.removeTemplate()) { @Override protected UICommand resolveCommand() { return getModel().getRemoveCommand(); } }); } }