/**
* Դ�������ƣ�TableColumnLabelProvider.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.ecore.EStructuralFeature;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.widgets.Display;
import com.hundsun.ares.studio.core.ARESModelException;
import com.hundsun.ares.studio.core.IARESResource;
import com.hundsun.ares.studio.internal.core.ARESProjectProperty;
import com.hundsun.ares.studio.jres.database.ui.DatabaseUI;
import com.hundsun.ares.studio.jres.metadata.constant.IMetadataRefType;
import com.hundsun.ares.studio.jres.model.database.ColumnType;
import com.hundsun.ares.studio.jres.model.database.DatabasePackage;
import com.hundsun.ares.studio.jres.model.database.TableColumn;
import com.hundsun.ares.studio.jres.model.metadata.StandardField;
import com.hundsun.ares.studio.jres.model.metadata.TypeDefaultValue;
import com.hundsun.ares.studio.jres.model.metadata.util.MetadataServiceProvider;
import com.hundsun.ares.studio.model.reference.ReferenceInfo;
import com.hundsun.ares.studio.reference.ReferenceManager;
import com.hundsun.ares.studio.ui.editor.viewers.EObjectColumnLabelProvider;
/**
* @author yanwj06282
*
*/
public class TableColumnLabelProvider extends EObjectColumnLabelProvider {
// ���ֶκͷDZ��ֶε�ͼ��
private static Image STD = DatabaseUI.image("full/obj16/std.png");
private static Image NON_STD = DatabaseUI.image("full/obj16/non_std.png");
private IARESResource resource;
/**
* @param attribute
*/
public TableColumnLabelProvider(EStructuralFeature attribute ,IARESResource resource) {
super(attribute);
this.resource = resource;
}
@Override
public String getText(Object element) {
EStructuralFeature feature = getEStructuralFeature(element);
if (feature == DatabasePackage.Literals.TABLE_COLUMN__DATA_TYPE) {
if (element instanceof TableColumn) {
TableColumn column = (TableColumn) element;
if (column.getColumnType() == ColumnType.STD_FIELD) {
ReferenceInfo referenceInfo = ReferenceManager.getInstance().getFirstReferenceInfo(resource.getARESProject(), IMetadataRefType.StdField, column.getFieldName(), true);
if (referenceInfo == null)
return StringUtils.EMPTY;
StandardField field = (StandardField) referenceInfo.getObject();
return StringUtils.defaultString(field.getDataType());
} else {
return StringUtils.defaultString(column.getDataType());
}
}
}else if (DatabasePackage.Literals.TABLE_COLUMN__DEFAULT_VALUE.equals(feature)) {
if (element instanceof TableColumn) {
TableColumn column = (TableColumn) element;
String defValue = column.getDefaultValue();
String dbType = StringUtils.EMPTY;
//ȡ�����ݿ����ͣ����ݽű����ֽ�ȡ
try {
Object odt = (String) ((ARESProjectProperty)resource.getARESProject().getProjectProperty()).getProperties().get("tabledir");
if (odt instanceof String && StringUtils.isNotBlank(odt.toString())) {
String jsName = StringUtils.substringBefore(odt.toString(), ".");
if (StringUtils.indexOf(jsName, "_") > -1) {
dbType = StringUtils.substringAfterLast(jsName, "_");
}
}
} catch (ARESModelException e1) {
e1.printStackTrace();
}
//���ֱ�������˱�Ĭ��ֵ����ֱ��ȡ���������͵�ֵ
if (StringUtils.isNotBlank(defValue)) {
try {
TypeDefaultValue tdv = MetadataServiceProvider.getTypeDefaultValueByName(resource.getARESProject(), defValue);
if (tdv != null) {
return tdv.getData().get(dbType);
}
} catch (Exception e) {
//e.printStackTrace();
}
}else{
if (column.getColumnType() == ColumnType.STD_FIELD) {
try {
TypeDefaultValue tdv = MetadataServiceProvider.getTypeDefaultValueOfStdFieldByName(resource.getARESProject(), column.getFieldName());
if (tdv != null) {
return tdv.getData().get(dbType);
}
} catch (Exception e) {
//e.printStackTrace();
}
}
if (column.getColumnType() == ColumnType.NON_STD_FIELD) {
try {
TypeDefaultValue tdv = MetadataServiceProvider.getTypeDefaultValueOfBizTypeByName(resource.getARESProject(), column.getDataType());
if (tdv != null) {
return tdv.getData().get(dbType);
}
} catch (Exception e) {
//e.printStackTrace();
}
}
}
}
}
return super.getText(element);
}
/* (non-Javadoc)
* @see com.hundsun.ares.studio.ui.editor.viewers.EObjectColumnLabelProvider#getBackground(java.lang.Object)
*/
@Override
public Color getBackground(Object element) {
if (resource.isReadOnly()) {
return Display.getDefault().getSystemColor(SWT.COLOR_GRAY);
}
return super.getBackground(element);
}
@Override
protected Image doGetImage(Object element) {
EStructuralFeature feature = getEStructuralFeature(element);
// ��һ����ʾͼ��
if (feature == DatabasePackage.Literals.TABLE_COLUMN__MARK) {
if (element instanceof TableColumn) {
TableColumn c = (TableColumn) element;
if (c.getColumnType() == ColumnType.STD_FIELD) {
return STD;
} else {
return NON_STD;
}
}
}
return super.doGetImage(element);
}
}