/*******************************************************************************
* Copyright (c) 2006-2010 eBay Inc. All Rights Reserved.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*******************************************************************************/
/**
*
*/
package org.ebayopensource.turmeric.eclipse.ui.components;
import java.util.Collection;
import java.util.Collections;
import org.ebayopensource.turmeric.eclipse.core.logging.SOALogger;
import org.ebayopensource.turmeric.eclipse.core.resources.constants.SOAProjectConstants;
import org.ebayopensource.turmeric.eclipse.resources.model.AssetInfo;
import org.ebayopensource.turmeric.eclipse.resources.util.SOAConsumerUtil.EnvironmentItem;
import org.eclipse.core.runtime.Assert;
import org.eclipse.jface.viewers.AbstractTreeViewer;
import org.eclipse.jface.viewers.ColumnWeightData;
import org.eclipse.jface.viewers.ILabelProviderListener;
import org.eclipse.jface.viewers.ITableLabelProvider;
import org.eclipse.jface.viewers.ITreeContentProvider;
import org.eclipse.jface.viewers.TableLayout;
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.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Tree;
import org.eclipse.swt.widgets.TreeColumn;
/**
* The Class SOAConsumerServicesViewer.
*
* @author yayu
* @since 1.0.0
*/
public class SOAConsumerServicesViewer extends TreeViewer {
private static final SOALogger logger = SOALogger.getLogger();
private boolean useAssetInfo = true;
private boolean isZeroConfig = false;
/**
* Instantiates a new sOA consumer services viewer.
*
* @param parent the parent
*/
public SOAConsumerServicesViewer(Composite parent) {
this(parent, true);
}
/**
* Instantiates a new sOA consumer services viewer.
*
* @param parent the parent
* @param useAssetInfo the use asset info
*/
public SOAConsumerServicesViewer(Composite parent, boolean useAssetInfo) {
this(parent, useAssetInfo, false);
}
/**
* Instantiates a new sOA consumer services viewer.
*
* @param parent the parent
* @param useAssetInfo the use asset info
* @param isZeroConfig whether is zero configured
*/
public SOAConsumerServicesViewer(Composite parent, boolean useAssetInfo, boolean isZeroConfig) {
super(parent, SWT.BORDER | SWT.SINGLE | SWT.V_SCROLL
| SWT.H_SCROLL| SWT.FULL_SELECTION);
this.useAssetInfo = useAssetInfo;
this.isZeroConfig = isZeroConfig;
init();
}
public boolean isZeroConfig() {
return isZeroConfig;
}
public void setZeroConfig(boolean isZeroConfig) {
this.isZeroConfig = isZeroConfig;
}
/**
* Adds the content provider.
*/
protected void addContentProvider() {
setContentProvider(new ITreeContentProvider() {
public Object[] getChildren(Object parentElement) {
return getElements(parentElement);
}
@Override
public Object getParent(Object element) {
return null;
}
@Override
public boolean hasChildren(Object element) {
return element instanceof EnvironmentItem;
}
@Override
public Object[] getElements(Object inputElement) {
if (inputElement instanceof Collection<?>) {
Collection<?> data = (Collection<?>)inputElement;
if (isZeroConfig && data.isEmpty() == false) {
Object obj = data.iterator().next();
if (obj instanceof EnvironmentItem) {
return useAssetInfo ?
((EnvironmentItem)obj).getServiceData().values().toArray()
: ((EnvironmentItem)obj).getServices().toArray();
}
}
return ((Collection<?>)inputElement).toArray();
} else if (inputElement instanceof EnvironmentItem) {
return useAssetInfo ?
((EnvironmentItem)inputElement).getServiceData().values().toArray()
: ((EnvironmentItem)inputElement).getServices().toArray();
}
return Collections.EMPTY_LIST.toArray();
}
@Override
public void dispose() {
}
@Override
public void inputChanged(Viewer viewer, Object oldInput,
Object newInput) {
}
});
}
/**
* Adds the label provider.
*/
protected void addLabelProvider() {
setLabelProvider(new ITableLabelProvider() {
@Override
public Image getColumnImage(Object element, int columnIndex) {
return null;
}
@Override
public String getColumnText(Object element, int columnIndex) {
if (isZeroConfig == false) {
if (element instanceof AssetInfo) {
if (columnIndex == 1)
return ((AssetInfo)element).getDescription();
} else if (element instanceof String) {
if (columnIndex == 1)
return element.toString();
} else if (element instanceof EnvironmentItem) {
final EnvironmentItem info = (EnvironmentItem)element;
if (columnIndex == 0) {
return info.getName();
}
}
} else {
if (element instanceof AssetInfo) {
if (columnIndex == 0)
return ((AssetInfo)element).getDescription();
} else if (element instanceof String) {
if (columnIndex == 0)
return element.toString();
}
}
return SOAProjectConstants.EMPTY_STRING;
}
@Override
public void addListener(ILabelProviderListener listener) {
}
@Override
public void dispose() {
}
@Override
public boolean isLabelProperty(Object element, String property) {
return false;
}
@Override
public void removeListener(ILabelProviderListener listener) {
}
});
}
/**
* Inits the.
*/
protected void init() {
setAutoExpandLevel(AbstractTreeViewer.ALL_LEVELS);
addContentProvider();
addLabelProvider();
createColumns();
}
/**
* Creates the columns.
*/
protected void createColumns() {
final Tree tree = getTree();
Assert.isTrue(tree.getParent().getLayout() instanceof GridLayout,
"The SOA Consumer Services Viewer must be put in a composite that is using GridLayout.");
tree.setLayoutData(new GridData(GridData.FILL_BOTH));
tree.setHeaderVisible(true);
tree.setLinesVisible(true);
final TableLayout layout = new TableLayout();
if (isZeroConfig == false) {
layout.addColumnData(new ColumnWeightData(40, 100, true));
}
layout.addColumnData(new ColumnWeightData(60, 150, true));
tree.setLayout(layout);
TreeColumn column = new TreeColumn(tree, SWT.LEFT);
if (isZeroConfig == false) {
column.setText("Environment");
column = new TreeColumn(tree, SWT.LEFT);
}
column.setText("Admin Name");
}
}