package org.ovirt.engine.ui.webadmin.widget.footer; import java.util.ArrayList; import org.ovirt.engine.core.common.job.Job; import org.ovirt.engine.core.common.job.JobExecutionStatus; import org.ovirt.engine.core.common.job.Step; import org.ovirt.engine.ui.common.widget.label.StringValueLabel; import org.ovirt.engine.ui.common.widget.tooltip.WidgetTooltip; import org.ovirt.engine.ui.common.widget.tree.AbstractSubTabTree; import org.ovirt.engine.ui.uicommonweb.models.events.TaskListModel; import org.ovirt.engine.ui.webadmin.ApplicationConstants; import org.ovirt.engine.ui.webadmin.ApplicationResources; import org.ovirt.engine.ui.webadmin.gin.AssetProvider; import org.ovirt.engine.ui.webadmin.widget.label.FullDateTimeLabel; import com.google.gwt.dom.client.Style.TextOverflow; import com.google.gwt.dom.client.Style.Unit; import com.google.gwt.dom.client.Style.VerticalAlign; import com.google.gwt.resources.client.ImageResource; import com.google.gwt.user.client.ui.HasVerticalAlignment; import com.google.gwt.user.client.ui.HorizontalPanel; import com.google.gwt.user.client.ui.Image; import com.google.gwt.user.client.ui.Label; import com.google.gwt.user.client.ui.TreeItem; import com.google.gwt.user.client.ui.Widget; public class TasksTree extends AbstractSubTabTree<TaskListModel, Job, Step> { private static final ApplicationResources resources = AssetProvider.getResources(); private static final ApplicationConstants constants = AssetProvider.getConstants(); public TasksTree() { super(); } @Override protected TreeItem getRootItem(Job task) { HorizontalPanel panel = new HorizontalPanel(); panel.setSpacing(1); panel.setWidth("100%"); //$NON-NLS-1$ addItemToPanel(panel, new Image(getStatusImage(task.getStatus())), "25px"); //$NON-NLS-1$ StringValueLabel descriptionTextBoxLabel = new StringValueLabel(); descriptionTextBoxLabel.getElement().getStyle().setPaddingRight(5, Unit.PX); descriptionTextBoxLabel.getElement().getStyle().setTextOverflow(TextOverflow.ELLIPSIS); addTextBoxToPanel(panel, descriptionTextBoxLabel, task.getDescription(), ""); //$NON-NLS-1$ addValueLabelToPanel(panel, new FullDateTimeLabel(), task.getStartTime(), "150px"); //$NON-NLS-1$ addTextBoxToPanel(panel, new StringValueLabel(), task.getEndTime() == null ? "" : constants.untilEndTime(), "80px"); //$NON-NLS-1$ //$NON-NLS-2$ addValueLabelToPanel(panel, new FullDateTimeLabel(), task.getEndTime(), "150px"); //$NON-NLS-1$ WidgetTooltip corrIdTextBoxLabelTooltip = new WidgetTooltip(new StringValueLabel()); corrIdTextBoxLabelTooltip.setText(constants.correltaionIdEvent()); addTextBoxToPanel(panel, corrIdTextBoxLabelTooltip, task.getCorrelationId() != null && task.getCorrelationId().startsWith(TaskListModel.WEBADMIN) ? task.getCorrelationId() .split("_")[2] : task.getCorrelationId(), "100px"); //$NON-NLS-1$ //$NON-NLS-2$ TreeItem treeItem = new TreeItem(panel); String id = task.getCorrelationId().startsWith(TaskListModel.WEBADMIN) ? task.getCorrelationId() : task.getId() .toString(); treeItem.setUserObject(id); return treeItem; } @Override protected TreeItem getEmptyRoot() { return new TreeItem(new Label(constants.loadingLabel())); } @Override protected void addLeaves(TreeItem nodeItem, Step step) { if (step.getSteps() == null) { return; } TreeItem innerItem; for (Step innerStep : step.getSteps()) { innerItem = getNodeItem(innerStep); if (innerItem != null) { styleItem(innerItem, true); nodeItem.addItem(innerItem); addLeaves(innerItem, innerStep); } } } @Override protected void onTreeItemOpen(TreeItem treeItem) { super.onTreeItemOpen(treeItem); // Root node if (treeItem.getParentItem() == null) { String idOrCorrelationId = (String) treeItem.getUserObject(); listModel.updateSingleTask(idOrCorrelationId); } } @Override protected TreeItem getLeafItem(Step step) { HorizontalPanel panel = new HorizontalPanel(); panel.setSpacing(1); panel.setWidth("100%"); //$NON-NLS-1$ addItemToPanel(panel, new Image(getStatusImage(step.getStatus())), "25px"); //$NON-NLS-1$ StringValueLabel descriptionTextBoxLabel = new StringValueLabel(); descriptionTextBoxLabel.getElement().getStyle().setPaddingRight(5, Unit.PX); descriptionTextBoxLabel.getElement().getStyle().setTextOverflow(TextOverflow.ELLIPSIS); addTextBoxToPanel(panel, descriptionTextBoxLabel, step.getDescription(), ""); //$NON-NLS-1$ addValueLabelToPanel(panel, new FullDateTimeLabel(), step.getStartTime(), "150px"); //$NON-NLS-1$ addTextBoxToPanel(panel, new StringValueLabel(), step.getEndTime() == null ? "" : constants.until(), "80px"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ addValueLabelToPanel(panel, new FullDateTimeLabel(), step.getEndTime(), "150px"); //$NON-NLS-1$ TreeItem treeItem = new TreeItem(panel); treeItem.setUserObject(step.getId()); return treeItem; } @Override protected TreeItem getNodeItem(Step step) { return getLeafItem(step); } @Override protected ArrayList<Step> getNodeObjects(Job task) { return (ArrayList<Step>) task.getSteps(); } public void collapseAllTasks() { for (int i = 0; i < tree.getItemCount(); i++) { collapseAllTasksHelper(tree.getItem(i)); } } private void collapseAllTasksHelper(TreeItem item) { item.setState(false); for (int i = 0; i < item.getChildCount(); i++) { collapseAllTasksHelper(item.getChild(i)); } } public ImageResource getStatusImage(JobExecutionStatus jobExecutionStatus) { if (jobExecutionStatus == null) { return resources.questionMarkImage(); } switch (jobExecutionStatus) { case STARTED: return resources.waitImage(); case FINISHED: return resources.logNormalImage(); case FAILED: return resources.logErrorImage(); case ABORTED: return resources.logWarningImage(); case UNKNOWN: return resources.questionMarkImage(); default: return null; } } @Override protected void addItemToPanel(HorizontalPanel panel, Widget item, String width) { super.addItemToPanel(panel, item, width); item.getElement().getStyle().setColor("white"); //$NON-NLS-1$ item.getElement().getStyle().setVerticalAlign(VerticalAlign.MIDDLE); panel.setVerticalAlignment(HasVerticalAlignment.ALIGN_MIDDLE); } @Override protected void styleItem(TreeItem item, boolean enabled) { super.styleItem(item, enabled); item.getElement().getStyle().setProperty("borderTop", "1px solid white"); //$NON-NLS-1$ //$NON-NLS-2$ if (item.getParentItem() != null) { item.getElement().getStyle().setBackgroundColor("grey"); //$NON-NLS-1$ } } }