package com.hundsun.ares.studio.jres.metadata.ui.viewer;
import org.apache.commons.lang.StringUtils;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.EStructuralFeature;
import org.eclipse.emf.edit.domain.AdapterFactoryEditingDomain;
import org.eclipse.emf.edit.domain.EditingDomain;
import org.eclipse.jface.viewers.ILabelProvider;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.widgets.Display;
import com.hundsun.ares.studio.core.IARESElement;
import com.hundsun.ares.studio.core.IARESModule;
import com.hundsun.ares.studio.core.registry.ModuleRootType2ResTypeMap;
import com.hundsun.ares.studio.jres.model.metadata.IDRangeItem;
import com.hundsun.ares.studio.jres.model.metadata.IDRangeList;
import com.hundsun.ares.studio.ui.editor.extend.IExtensibleModelEditingSupport;
import com.hundsun.ares.studio.ui.editor.extend.IExtensibleModelPropertyDescriptor;
import com.hundsun.ares.studio.ui.editor.viewers.EObjectColumnLabelProvider;
public class IDExtendLabelProvider extends EObjectColumnLabelProvider {
IExtensibleModelEditingSupport editingSupport;
IExtensibleModelPropertyDescriptor descriptor;
IDRangeList info;
/**
* @param editingSupport
* @param descriptior
*/
public IDExtendLabelProvider(
IExtensibleModelEditingSupport editingSupport,
IExtensibleModelPropertyDescriptor descriptor , IDRangeList info) {
super(descriptor.getStructuralFeature());
this.editingSupport = editingSupport;
this.descriptor = descriptor;
this.info = info;
}
@Override
protected EObject getOwner(Object element) {
IDRangeItem item = getIDRangeItem(element);
if(item != null){
return item.getData2().get(editingSupport.getKey());
}
return null;
}
private IDRangeItem getIDRangeItem(Object element){
if(element instanceof IARESElement){
String path = ((IARESElement)element).getResource().getProjectRelativePath().toPortableString();
for(IDRangeItem item : info.getItems()){
if(StringUtils.equals(item.getName(), path)){
return item;
}
}
}
return null;
}
/* (non-Javadoc)
* @see com.hundsun.ares.studio.jres.ui.viewers.BaseEObjectColumnLabelProvider#getText(java.lang.Object)
*/
@Override
public String getText(Object element) {
EObject owner = getOwner(element);
EStructuralFeature feature = descriptor.getStructuralFeature();
if (owner != null) {
ILabelProvider labelProvider = descriptor.getLabelProvider();
Object value = owner.eGet(feature);
return labelProvider.getText(value);
}
return feature.getDefaultValueLiteral();
}
@Override
public Color getBackground(Object element) {
EditingDomain editingDomain = AdapterFactoryEditingDomain.getEditingDomainFor(info);
if(editingDomain != null && editingDomain.isReadOnly(info.eResource())){
return Display.getDefault().getSystemColor(SWT.COLOR_GRAY);
}
//������һ��Ĭ��Լ����nameΪ��Դ��������ɣ�����Զ��Ÿ���
String[] types = StringUtils.split(editingSupport.getName(), ",");
if(element instanceof IARESModule){
String type = ((IARESModule)element).getRoot().getType();
for(String resType : types){
String[] rootTypes = ModuleRootType2ResTypeMap.getInstance().getAllowedRootTypes(resType);
for(String rootType : rootTypes){
if(StringUtils.equals(type, rootType)){
return super.getBackground(element);
}
}
}
}
return Display.getDefault().getSystemColor(SWT.COLOR_GRAY);
}
}