// ============================================================================ // // Copyright (C) 2006-2016 Talend Inc. - www.talend.com // // This source code is available under agreement available at // %InstallDIR%\features\org.talend.rcp.branding.%PRODUCTNAME%\%PRODUCTNAME%license.txt // // You should have received a copy of the agreement // along with this program; if not, write to Talend SA // 9 rue Pages 92150 Suresnes, France // // ============================================================================ package org.talend.mdm.repository.ui.dialogs.message; import java.util.Collection; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.MultiStatus; import org.eclipse.core.runtime.Status; import org.eclipse.jface.dialogs.Dialog; import org.eclipse.jface.dialogs.IDialogConstants; import org.eclipse.jface.viewers.ITreeContentProvider; import org.eclipse.jface.viewers.LabelProvider; import org.eclipse.jface.viewers.TreeViewer; import org.eclipse.jface.viewers.Viewer; import org.eclipse.swt.SWT; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.graphics.Point; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Tree; import org.talend.mdm.repository.core.command.ICommand; import org.talend.mdm.repository.core.service.DeployService.DeployCategoryStatus; import org.talend.mdm.repository.core.service.DeployService.DeployStatus; import org.talend.mdm.repository.plugin.RepositoryPlugin; import org.talend.mdm.repository.utils.EclipseResourceManager; /** * DOC hbhong class global comment. Detailled comment */ public class MultiStatusDialog extends Dialog { private class TreeContentProvider implements ITreeContentProvider { public void dispose() { } public Object[] getChildren(Object parentElement) { if (parentElement instanceof Object[]) { return (Object[]) parentElement; } if (parentElement instanceof Collection) { return ((Collection) parentElement).toArray(); } if (parentElement instanceof MultiStatus) { return ((MultiStatus) parentElement).getChildren(); } return new Object[0]; } public Object[] getElements(Object inputElement) { return getChildren(inputElement); } public Object getParent(Object element) { return null; } public boolean hasChildren(Object element) { return getChildren(element).length > 0; } public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { } } private class ViewerLabelProvider extends LabelProvider { @Override public Image getImage(Object element) { if (element instanceof DeployStatus) { DeployStatus status = (DeployStatus) element; int severity = status.getSeverity(); if (severity == IStatus.OK) { ICommand command = status.getCommand(); switch (command.getCommandType()) { case ICommand.CMD_ADD: return IMG_ADD; case ICommand.CMD_DELETE: return IMG_DELETE; case ICommand.CMD_MODIFY: return IMG_OK; } } else if (severity == IStatus.INFO) { return IMG_INFO; } else if (severity == IStatus.ERROR) { return IMG_ERR; } } else if (element instanceof DeployCategoryStatus) { return null; } else if (element instanceof Status || element instanceof MultiStatus) { Status status = (Status) element; int severity = status.getSeverity(); if (severity == IStatus.OK) { return IMG_OK; } else if (severity == IStatus.INFO) { return IMG_INFO; } else if (severity == IStatus.ERROR) { return IMG_ERR; } } return null; } @Override public String getText(Object element) { if (element instanceof IStatus) { IStatus status = (IStatus) element; if (status.isMultiStatus()) { return getStatusLabel(status); } else { return status.getMessage(); } } return ""; //$NON-NLS-1$ } } private static final Image IMG_ADD = EclipseResourceManager.getImage(RepositoryPlugin.PLUGIN_ID, "/icons/add.gif"); //$NON-NLS-1$ private static final Image IMG_DELETE = EclipseResourceManager.getImage(RepositoryPlugin.PLUGIN_ID, "/icons/recycle_bin_empty.png"); //$NON-NLS-1$ private static final Image IMG_ERR = EclipseResourceManager.getImage(RepositoryPlugin.PLUGIN_ID, "/icons/forbidden.png"); //$NON-NLS-1$ private static final Image IMG_INFO = EclipseResourceManager.getImage(RepositoryPlugin.PLUGIN_ID, "/icons/info_obj.gif"); //$NON-NLS-1$ private static final Image IMG_OK = EclipseResourceManager.getImage(RepositoryPlugin.PLUGIN_ID, "/icons/check.png"); //$NON-NLS-1$ private final String message; private Label msgLabel; protected final IStatus multiStatus; private Tree tree; private TreeViewer treeViewer; /** * Create the dialog. * * @param parentShell */ public MultiStatusDialog(Shell parentShell, String message, IStatus mutliStatus) { super(parentShell); // this.message = message; this.multiStatus = initMultiStatus(mutliStatus); // this.setShellStyle(getShellStyle() | SWT.RESIZE); } protected String getStatusLabel(IStatus status) { return status.getMessage(); } protected boolean needShowBottomMessage() { return false; } protected String getBottomMessage() { return null; } /** * DOC talend-mdm Comment method "initMultiStatus". * * @param mutliStatus2 * @return */ protected IStatus initMultiStatus(IStatus multiStatus) { return multiStatus; } /** * Create contents of the button bar. * * @param parent */ @Override protected void createButtonsForButtonBar(Composite parent) { createButton(parent, IDialogConstants.OK_ID, IDialogConstants.OK_LABEL, true); } /** * Create contents of the dialog. * * @param parent */ @Override protected Control createDialogArea(Composite parent) { Composite container = (Composite) super.createDialogArea(parent); container.setLayout(new GridLayout(1, false)); msgLabel = new Label(container, SWT.WRAP); GridData gd_msgLabel = new GridData(SWT.LEFT, SWT.CENTER, true, false, 1, 1); gd_msgLabel.horizontalIndent = 10; gd_msgLabel.verticalIndent = 10; gd_msgLabel.heightHint = 40; msgLabel.setLayoutData(gd_msgLabel); treeViewer = new TreeViewer(container, SWT.BORDER | SWT.FULL_SELECTION); tree = treeViewer.getTree(); tree.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1)); treeViewer.setContentProvider(new TreeContentProvider()); treeViewer.setLabelProvider(new ViewerLabelProvider()); buildBottomArea(container); initInput(); return container; } protected void buildBottomArea(Composite container) { // do nothing } /** * Return the initial size of the dialog. */ @Override protected Point getInitialSize() { return new Point(450, 300); } protected String getMessage() { if (message != null) { return message; } return ""; //$NON-NLS-1$ } /** * DOC hbhong Comment method "initInput". */ protected void initInput() { msgLabel.setText(getMessage()); // if (multiStatus != null && multiStatus.isMultiStatus()) { treeViewer.setInput(multiStatus.getChildren()); } } }