/** * Դ�������ƣ�ForeignKeyColumnLabelProvider.java * �������Ȩ���������ӹɷ����޹�˾ ��Ȩ���� * ϵͳ���ƣ�JRES Studio * ģ�����ƣ�com.hundsun.ares.studio.jres.database.ui * ����˵����$desc * ����ĵ��� * ���ߣ� */ package com.hundsun.ares.studio.jres.database.ui.viewer; import org.apache.commons.lang.StringUtils; import org.eclipse.emf.common.util.Diagnostic; import org.eclipse.emf.common.util.EList; import org.eclipse.emf.ecore.EStructuralFeature; import org.eclipse.emf.edit.ui.provider.ExtendedImageRegistry; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.jface.viewers.DecorationOverlayIcon; import org.eclipse.jface.viewers.IDecoration; 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.eclipse.ui.ISharedImages; import org.eclipse.ui.PlatformUI; import com.hundsun.ares.studio.core.IARESResource; import com.hundsun.ares.studio.jres.model.database.DatabasePackage; import com.hundsun.ares.studio.jres.model.database.ForeignKey; import com.hundsun.ares.studio.jres.model.database.TableKey; import com.hundsun.ares.studio.jres.model.database.key_type; import com.hundsun.ares.studio.ui.editor.IDiagnosticProvider; import com.hundsun.ares.studio.ui.editor.viewers.BaseEObjectColumnLabelProvider; /**�������б༭֧�� * @author liaogc * */ public class ForeignKeyColumnLabelProvider extends BaseEObjectColumnLabelProvider{ private static ImageDescriptor IMG_DEC_ERROR = PlatformUI.getWorkbench().getSharedImages().getImageDescriptor(ISharedImages.IMG_DEC_FIELD_ERROR); private static ImageDescriptor IMG_DEC_WARNING = PlatformUI.getWorkbench().getSharedImages().getImageDescriptor(ISharedImages.IMG_DEC_FIELD_WARNING); private static Image IMG_ERROR = PlatformUI.getWorkbench().getSharedImages().getImage(ISharedImages.IMG_OBJS_ERROR_TSK); private static Image IMG_WARNING = PlatformUI.getWorkbench().getSharedImages().getImage(ISharedImages.IMG_OBJS_WARN_TSK); private IDiagnosticProvider diagnosticProvider; private IARESResource resource; public ForeignKeyColumnLabelProvider(IARESResource resource,EStructuralFeature attribute) { super(attribute); this.resource = resource; } public String getText(Object element) { if(element instanceof TableKey){ EList<ForeignKey> foreignKey = ((TableKey)element).getForeignKey(); StringBuffer buffer = new StringBuffer(); // 2014.01.16 sundl �޸���ʾ��ʽΪ tablename(col1, col2, col3...) for (int i = 0, length = foreignKey.size(); i < length; i++) { if (i == 0) { String tableName = StringUtils.substringAfterLast(foreignKey.get(0).getTableName(), "."); buffer.append(tableName + "("); } buffer.append(foreignKey.get(i).getFieldName()); if (i < length - 1) buffer.append(","); else buffer.append(")"); } return buffer.toString(); } return StringUtils.EMPTY; } /** * @param diagnosticProvider the diagnosticProvider to set */ public void setDiagnosticProvider(IDiagnosticProvider diagnosticProvider) { this.diagnosticProvider = diagnosticProvider; } protected Diagnostic getDiagnostic(Object element) { if(element instanceof TableKey){ TableKey tablekey = (TableKey) element; if (diagnosticProvider != null) { for( ForeignKey foreignKey :tablekey.getForeignKey()){ Diagnostic diagnostic =diagnosticProvider.getDiagnostic(foreignKey, DatabasePackage.Literals.TABLE_COLUMN__FOREIGNKEY); if(diagnostic!=null){ return diagnostic; } } } } else if (diagnosticProvider != null) { return diagnosticProvider.getDiagnostic(getOwner(element), getEStructuralFeature(element)); } return null; } /** * @return the diagnosticProvider */ protected IDiagnosticProvider getDiagnosticProvider() { return diagnosticProvider; } /* (non-Javadoc) * @see org.eclipse.jface.viewers.ColumnLabelProvider#getImage(java.lang.Object) */ @Override final public Image getImage(Object element) { Image image = doGetImage(element); // �����������ͼ��ģ�����Ҫ���ϱ�� Diagnostic diagnostic = getDiagnostic(element); if (diagnostic != null) { if (image == null) { switch (diagnostic.getSeverity()) { case Diagnostic.ERROR: return IMG_ERROR; case Diagnostic.WARNING: return IMG_WARNING; } } else { DecorationOverlayIcon icon = null; switch (diagnostic.getSeverity()) { case Diagnostic.ERROR: icon = new DecorationOverlayIcon(image, IMG_DEC_ERROR, IDecoration.BOTTOM_LEFT); break; case Diagnostic.WARNING: icon = new DecorationOverlayIcon(image, IMG_DEC_WARNING, IDecoration.BOTTOM_LEFT); break; } if (icon != null) { return ExtendedImageRegistry.INSTANCE.getImage(icon); } else { return image; } } } return image; } protected Image doGetImage(Object element) { return null; } @Override public Color getBackground(Object element) { if (resource != null && resource.isReadOnly()) { return Display.getDefault().getSystemColor(SWT.COLOR_GRAY); } TableKey key = (TableKey)element; if(!key.getType().equals(key_type.FOREIGN)){ return Display.getDefault().getSystemColor(SWT.COLOR_GRAY); } return super.getBackground(element); } @Override public String getToolTipText(Object element) { Diagnostic diagnostic = getDiagnostic(element); if (diagnostic != null) { return diagnostic.getMessage(); } return super.getToolTipText(element); } @Override public int getToolTipTimeDisplayed(Object object) { return 0; } }