/**
* Դ�������ƣ�AddConstraintComposite.java
* �������Ȩ���������ӹɷ�����˾ ��Ȩ����
* ϵͳ���ƣ�ARES Studio
* ģ�����ƣ�com.hundsun.ares.studio.jres.biz.stock.ui
* ����˵����$desc
* ����ĵ���
* ���ߣ�sundl
*/
package com.hundsun.ares.studio.jres.clearinghouse.composite;
import org.apache.commons.lang.StringUtils;
import org.eclipse.emf.common.util.EList;
import org.eclipse.emf.ecore.EAttribute;
import org.eclipse.emf.ecore.EReference;
import org.eclipse.emf.ecore.EStructuralFeature;
import org.eclipse.jface.viewers.CellEditor;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.jface.viewers.TreeViewerColumn;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import com.hundsun.ares.studio.core.IARESResource;
import com.hundsun.ares.studio.jres.clearinghouse.celleditor.ConstraintColumnsEditingSupport;
import com.hundsun.ares.studio.jres.clearinghouse.celleditor.ConstraintForeignKeyEditingSupport;
import com.hundsun.ares.studio.jres.model.chouse.AddConstraintModification;
import com.hundsun.ares.studio.jres.model.chouse.ChouseFactory;
import com.hundsun.ares.studio.jres.model.chouse.ChousePackage;
import com.hundsun.ares.studio.jres.model.chouse.ConstraintModifyDetail;
import com.hundsun.ares.studio.jres.model.chouse.Modification;
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.TableColumn;
import com.hundsun.ares.studio.jres.model.database.TableResourceData;
import com.hundsun.ares.studio.jres.model.database.key_type;
import com.hundsun.ares.studio.ui.editor.editingsupport.EnumEditingSupport;
import com.hundsun.ares.studio.ui.editor.editingsupport.IEditingSupportDecorator;
import com.hundsun.ares.studio.ui.editor.editingsupport.TextEditingSupport;
import com.hundsun.ares.studio.ui.editor.extend.ExtensibleModelUtils;
import com.hundsun.ares.studio.ui.editor.viewers.EObjectColumnLabelProvider;
/**
* ����Լ������
* @author sundl
*
*/
public class AddConstraintComposite extends ModifyActionColumnComposite<ConstraintModifyDetail>{
public AddConstraintComposite(Composite parent, TableResourceData tableData, IARESResource resource, Modification action) {
super(parent, tableData, resource, action);
}
/* (non-Javadoc)
* @see com.hundsun.ares.studio.jres.clearinghouse.composite.ModifyActionColumnComposite#getEReference()
*/
@Override
protected EReference getEReference() {
return ChousePackage.Literals.ADD_CONSTRAINT_MODIFICATION__DETAILS;
}
/* (non-Javadoc)
* @see com.hundsun.ares.studio.jres.clearinghouse.composite.ModifyActionColumnComposite#creatBlankItem()
*/
@Override
protected ConstraintModifyDetail creatBlankItem() {
return ChouseFactory.eINSTANCE.createConstraintModifyDetail();
}
/* (non-Javadoc)
* @see com.hundsun.ares.studio.jres.clearinghouse.composite.ModifyActionColumnComposite#getActionItems(com.hundsun.ares.studio.jres.model.chouse.Modification)
*/
@Override
protected EList<ConstraintModifyDetail> getActionItems(Modification modification) {
return ((AddConstraintModification) action).getDetails();
}
/* (non-Javadoc)
* @see com.hundsun.ares.studio.jres.clearinghouse.composite.ModifyActionColumnComposite#creatColumnComposite(org.eclipse.jface.viewers.TreeViewer, com.hundsun.ares.studio.core.IARESResource)
*/
@Override
protected void creatColumnComposite(TreeViewer treeViewer, final IARESResource resource) {
{
EAttribute attribute = ChousePackage.Literals.CONSTRAINT_MODIFY_DETAIL__MARK;
final TreeViewerColumn tvColumn = new TreeViewerColumn(treeViewer, SWT.LEFT);
tvColumn.getColumn().setWidth(100);
tvColumn.getColumn().setText("���");
EObjectColumnLabelProvider provider = new EObjectColumnLabelProvider(attribute);
tvColumn.setLabelProvider(provider);
tvColumn.setEditingSupport(new TextEditingSupport(treeViewer, attribute));
tvColumn.getColumn().setMoveable(true);
}
// �ֶ���
{
EAttribute attribute = ChousePackage.Literals.CONSTRAINT_MODIFY_DETAIL__NAME;
TreeViewerColumn tvColumn = new TreeViewerColumn(treeViewer, SWT.LEFT);
tvColumn.getColumn().setWidth(200);
tvColumn.getColumn().setText("Լ����");
EObjectColumnLabelProvider provider = new EObjectColumnLabelProvider(attribute);
tvColumn.setLabelProvider(provider);
tvColumn.setEditingSupport(new TextEditingSupport(treeViewer, attribute));
tvColumn.getColumn().setMoveable(true);
}
// ����
{
EAttribute attribute = ChousePackage.Literals.CONSTRAINT_MODIFY_DETAIL__TYPE;
final TreeViewerColumn tvColumn = new TreeViewerColumn(treeViewer, SWT.LEFT);
tvColumn.getColumn().setWidth(130);
tvColumn.getColumn().setText("����");
EObjectColumnLabelProvider provider = new EObjectColumnLabelProvider(attribute);
tvColumn.setLabelProvider(provider);
tvColumn.setEditingSupport(new EnumEditingSupport(treeViewer, attribute));
}
// �ֶ��б�
{
EStructuralFeature feature = ChousePackage.Literals.CONSTRAINT_MODIFY_DETAIL__COLUMNS;
final TreeViewerColumn tvColumn = new TreeViewerColumn(treeViewer, SWT.LEFT);
tvColumn.getColumn().setWidth(150);
tvColumn.getColumn().setText("�ֶ��б�");
EObjectColumnLabelProvider provider = new EObjectColumnLabelProvider(feature){
@Override
public String getText(Object element) {
StringBuffer buffer = new StringBuffer();
if(element instanceof ConstraintModifyDetail){
ConstraintModifyDetail tableKey = (ConstraintModifyDetail)element;
EList<TableColumn> colunms = tableKey.getColumns();
for(int index=0; index<colunms.size(); index++){
if(index > 0){
buffer.append(",");
}
buffer.append(colunms.get(index).getName());
}
}
return buffer.toString();
}
};
tvColumn.setLabelProvider(provider);
tvColumn.setEditingSupport(new ConstraintColumnsEditingSupport(treeViewer,feature,resource, tableData));
tvColumn.getColumn().setMoveable(true);
}
// ���
{
EStructuralFeature feature = ChousePackage.Literals.CONSTRAINT_MODIFY_DETAIL__FOREIGN_KEY;
final TreeViewerColumn tvColumn = new TreeViewerColumn(treeViewer, SWT.LEFT);
tvColumn.getColumn().setWidth(150);
tvColumn.getColumn().setText("���");
EObjectColumnLabelProvider provider = new EObjectColumnLabelProvider(feature) {
public String getText(Object element) {
if(element instanceof ConstraintModifyDetail){
ConstraintModifyDetail modify = (ConstraintModifyDetail) element;
EList<ForeignKey> foreignKey = modify.getForeignKey();
StringBuffer buffer = new StringBuffer();
for (int i = 0, length = foreignKey.size(); i < length; i++) {
if (i == 0) {
String tableName = foreignKey.get(0).getTableName();
String shortName = StringUtils.substringAfterLast(tableName, ".");
buffer.append(shortName + "(");
}
buffer.append(foreignKey.get(i).getFieldName());
if (i < length - 1)
buffer.append(",");
else
buffer.append(")");
}
return buffer.toString();
}
return StringUtils.EMPTY;
}
@Override
public Color getBackground(Object element) {
if (resource != null && resource.isReadOnly()) {
return Display.getDefault().getSystemColor(SWT.COLOR_GRAY);
}
ConstraintModifyDetail key = (ConstraintModifyDetail)element;
if(!key.getType().equals(key_type.FOREIGN)){
return Display.getDefault().getSystemColor(SWT.COLOR_GRAY);
}
return super.getBackground(element);
}
};
tvColumn.setLabelProvider(provider);
// ForeignKeyColumnEditingSupport editingSupport = new ForeignKeyColumnEditingSupport(treeViewer,feature,resource);
ConstraintForeignKeyEditingSupport editingSupport = new ConstraintForeignKeyEditingSupport(treeViewer, feature, resource, tableData);
editingSupport.setDecorator(new IEditingSupportDecorator() {
@Override
public CellEditor decorateGetCellEditor(CellEditor cellEditor, Object element) {
return cellEditor;
};
@Override
public boolean decorateCanEdit(boolean canEdit, Object element) {
ConstraintModifyDetail key = (ConstraintModifyDetail)element;
return key.getType().equals(key_type.FOREIGN);
}
});
tvColumn.setEditingSupport(editingSupport);
tvColumn.getColumn().setMoveable(true);
}
ExtensibleModelUtils.createExtensibleModelTreeViewerColumns(
treeViewer, resource, DatabasePackage.Literals.TABLE_KEY, null);
}
/* (non-Javadoc)
* @see com.hundsun.ares.studio.jres.clearinghouse.composite.ModifyActionComposite#initAction(com.hundsun.ares.studio.jres.model.chouse.Modification)
*/
@Override
protected void initAction(Modification modification) {
if(modification instanceof AddConstraintModification){
action = modification;
}
else{
action = ChouseFactory.eINSTANCE.createAddConstraintModification();
}
}
}