/*******************************************************************************
 * Copyright (c) 2001, 2006 IBM Corporation and others.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License 2.0
 * which accompanies this distribution, and is available at
 * https://www.eclipse.org/legal/epl-2.0/
 *
 * SPDX-License-Identifier: EPL-2.0
 *
 * Contributors:
 *     IBM Corporation - initial API and implementation
 *******************************************************************************/
package org.eclipse.wst.xml.ui.internal.validation.core.errorinfo;

import java.util.List;

import org.eclipse.jface.viewers.ColumnWeightData;
import org.eclipse.jface.viewers.IStructuredContentProvider;
import org.eclipse.jface.viewers.ITableLabelProvider;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.TableLayout;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableColumn;
import org.eclipse.ui.ISharedImages;
import org.eclipse.wst.validation.internal.provisional.core.IMessage;
import org.eclipse.wst.xml.core.internal.validation.core.ValidationMessage;
import org.eclipse.wst.xml.ui.internal.XMLUIPlugin;
import org.eclipse.wst.xml.ui.internal.validation.XMLValidationUIMessages;



public class TaskListTableViewer extends TableViewer {
	protected static final int COLUMN_ICON = 0;
	protected static final int COLUMN_DESCRIPTION = 1;
	protected static final int COLUMN_RESOURCE = 3;
	protected static final int COLUMN_LOCATION = 2;

	protected static final String LABEL_ICON = ""; //$NON-NLS-1$
	protected static final String LABEL_DESCRIPTION = XMLValidationUIMessages.TaskListTableViewer_0;
	protected static final String LABEL_RESOURCE = XMLValidationUIMessages.TaskListTableViewer_1;
	protected static final String LABEL_LOCATION = XMLValidationUIMessages.TaskListTableViewer_2;

	protected int visibleRows = -1;

	protected int getColumnWidth(int column) {
		int result = 0;
		switch (column) {
			case COLUMN_ICON : {
				result = 1;
				break;
			}
			case COLUMN_DESCRIPTION : {
				result = 20;
				break;
			}
			case COLUMN_RESOURCE : {
				result = 3;
				break;
			}
			case COLUMN_LOCATION : {
				result = 3;
				break;
			}
		}
		return result;
	}

	public TaskListTableViewer(Composite parent, int visibleRows) {
		this(parent, SWT.FULL_SELECTION | SWT.MULTI | SWT.BORDER, visibleRows);
	}

	public TaskListTableViewer(Composite parent, int style, int visibleRows) {
		super(new Table(parent, style));
		getTable().setLinesVisible(true);

		Provider provider = new Provider();
		setContentProvider(provider);
		setLabelProvider(provider);

		String[] columnPropertiesArray = {LABEL_ICON, LABEL_DESCRIPTION, LABEL_LOCATION};
		setColumnProperties(columnPropertiesArray);

		Table table = getTable();
		table.setHeaderVisible(true);
		table.setLayoutData(new GridData(GridData.FILL_BOTH));

		TableLayout layout = new TableLayout();

		for (int i = 0; i < columnPropertiesArray.length; i++) {
			TableColumn column = new TableColumn(table, i);
			column.setText(columnPropertiesArray[i]);
			column.setAlignment(SWT.LEFT);
			layout.addColumnData(new ColumnWeightData(getColumnWidth(i), true));
		}

		table.setLayout(layout);

		this.visibleRows = visibleRows;
	}

	/**
	 * NamespaceInfoTableLabelProvider
	 */
	protected class Provider extends LabelProvider implements ITableLabelProvider, IStructuredContentProvider {
		Viewer viewer;
		Image errorImage;
		Image warnImage;

		public Provider() {
			errorImage = XMLUIPlugin.getInstance().getImage(ISharedImages.IMG_OBJS_ERROR_TSK);

			warnImage = XMLUIPlugin.getInstance().getImage(ISharedImages.IMG_OBJS_WARN_TSK);
		}

		public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
			this.viewer = viewer;
		}

		public Object[] getElements(Object inputElement) {
			List list = (List) viewer.getInput();
			return list != null ? list.toArray() : null;
		}

		public Image getColumnImage(Object object, int columnIndex) {
			ValidationMessage validationMessage = (ValidationMessage) object;
			Image result = null;
			if (columnIndex == 0) {
				int severity = validationMessage.getSeverity();
				if ((severity == IMessage.HIGH_SEVERITY) || (severity == IMessage.NORMAL_SEVERITY)) {
					result = errorImage;
				}
				else {
					result = warnImage;
				}
			}
			return result;
		}

		public String getColumnText(Object object, int column) {
			ValidationMessage errorMessage = (ValidationMessage) object;
			String result = ""; //$NON-NLS-1$
			switch (column) {
				case COLUMN_DESCRIPTION : {
					result = errorMessage.getMessage();
					break;
				}
				case COLUMN_LOCATION : {
					result = XMLValidationUIMessages.TaskListTableViewer_3 + errorMessage.getLineNumber();
					break;
				}
			}
			return result;
		}
	}
}
