// ============================================================================
//
// Copyright (C) 2006-2012 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.designer.core.ui.routine;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.eclipse.jface.viewers.IColorProvider;
import org.eclipse.jface.viewers.ITableLabelProvider;
import org.eclipse.jface.viewers.ITreeContentProvider;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.widgets.Display;
import org.talend.commons.ui.runtime.image.ECoreImage;
import org.talend.commons.ui.runtime.image.ImageProvider;
import org.talend.core.model.general.Project;
import org.talend.core.model.properties.Property;
import org.talend.core.model.properties.RoutineItem;
import org.talend.repository.ProjectManager;
/**
* ggu class global comment. Detailled comment
*/
public class ShowRoutineItemsLabelProvider extends LabelProvider implements IColorProvider, ITreeContentProvider,
ITableLabelProvider {
private List<RoutineItemRecord> existedRoutinesRecord = null;
private Map<Project, List<Property>> allRoutineItems = null;
public ShowRoutineItemsLabelProvider(Map<Project, List<Property>> allRoutineItems,
List<RoutineItemRecord> existedRoutinesRecord) {
super();
this.existedRoutinesRecord = existedRoutinesRecord;
this.allRoutineItems = allRoutineItems;
}
public Object[] getElements(Object inputElement) {
Set<Project> projects = allRoutineItems.keySet();
List<Object> objects = new ArrayList<Object>();
Project currentProject = ProjectManager.getInstance().getCurrentProject();
for (Project p : projects) {
if (p.equals(currentProject)) {
List<Property> items = allRoutineItems.get(p);
if (items != null) {
objects.addAll(items);
}
} else {
objects.add(p);
}
}
return objects.toArray();
}
public Object[] getChildren(Object parentElement) {
if (parentElement instanceof Project) {
List<Property> list = allRoutineItems.get(parentElement);
if (list != null) {
return list.toArray();
}
}
return null;
}
public Object getParent(Object element) {
return null;
}
public boolean hasChildren(Object element) {
Object[] children = getChildren(element);
return children != null && children.length > 0;
}
public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
}
public Image getColumnImage(Object element, int columnIndex) {
return getImage(element);
}
@Override
public Image getImage(Object element) {
if (element instanceof Project) {
return ImageProvider.getImage(ECoreImage.REFERENCED_ICON);
}
return super.getImage(element);
}
public String getColumnText(Object element, int columnIndex) {
return getText(element);
}
@Override
public String getText(Object element) {
if (element instanceof Project) {
return ((Project) element).getLabel();
} else if (element instanceof Property) {
Property property = (Property) element;
return property.getLabel();
}
return super.getText(element);
}
public Color getBackground(Object element) {
if (existed(element)) {
Display disp = Display.getCurrent();
if (disp == null) {
disp = Display.getDefault();
}
return disp.getSystemColor(SWT.COLOR_INFO_BACKGROUND);
}
return null;
}
public Color getForeground(Object element) {
if (existed(element)) {
Display disp = Display.getCurrent();
if (disp == null) {
disp = Display.getDefault();
}
return disp.getSystemColor(SWT.COLOR_DARK_GRAY);
}
return null;
}
public boolean existed(Object element) {
if (existedRoutinesRecord != null && element != null && element instanceof Property
&& ((Property) element).getItem() instanceof RoutineItem) {
RoutineItem item = (RoutineItem) ((Property) element).getItem();
for (RoutineItemRecord record : existedRoutinesRecord) {
if (item.getProperty().getLabel().equals(record.getLabel())) {
return true;
} else {
if (item.getProperty().getId().equals(record.getId())) {
return true;
}
}
}
}
return false;
}
}