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.emf.ecore.util.EcoreUtil;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.jface.viewers.TreeViewerColumn;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.jface.viewers.ViewerFilter;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Display;
import com.hundsun.ares.studio.core.IARESResource;
import com.hundsun.ares.studio.jres.clearinghouse.ui.ConstraintSelectionDialog;
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.chouse.RemoveConstraintModification;
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.TableKey;
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.extend.ExtensibleModelUtils;
import com.hundsun.ares.studio.ui.editor.viewers.EObjectColumnLabelProvider;
/**
* ɾ��Լ������
* @author sundl
*
*/
public class RemoveConstraintComposite extends ModifyActionColumnComposite<ConstraintModifyDetail> {
public RemoveConstraintComposite(Composite parent,
TableResourceData tableData, IARESResource resource,
Modification action) {
super(parent, tableData, resource, action);
}
@Override
protected EReference getEReference() {
return ChousePackage.Literals.ADD_CONSTRAINT_MODIFICATION__DETAILS;
}
@Override
protected ConstraintModifyDetail creatBlankItem() {
return ChouseFactory.eINSTANCE.createConstraintModifyDetail();
}
@Override
protected EList<ConstraintModifyDetail> getActionItems(Modification modification) {
return ((RemoveConstraintModification) action).getDetails();
}
@Override
protected void creatColumnComposite(TreeViewer treeViewer, final IARESResource res) {
{
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.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.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);
}
// �ֶ��б�
{
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.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 (res != null && res.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);
tvColumn.getColumn().setMoveable(true);
}
ExtensibleModelUtils.createExtensibleModelTreeViewerColumns(
treeViewer, resource, DatabasePackage.Literals.TABLE_KEY, null);
}
@Override
protected void handleAdd() {
ConstraintSelectionDialog dialog = new ConstraintSelectionDialog(getShell(), resource, tableData) {
protected Control createDialogArea(Composite parent) {
Control control = super.createDialogArea(parent);
getTreeViewer().addFilter(new ViewerFilter() {
@Override
public boolean select(Viewer viewer, Object parentElement, Object element) {
if (element instanceof TableKey) {
TableKey column = (TableKey) element;
for (ConstraintModifyDetail removed : input) {
if (StringUtils.equals(column.getName(), removed.getName())) {
return false;
}
}
return true;
}
return false;
}
});
return control;
}
};
dialog.setTitle("ѡ��Ҫɾ����Լ��");
if (dialog.open() == IDialogConstants.OK_ID) {
TableKey[] constraint = dialog.getSelection();
for (TableKey c : constraint) {
ConstraintModifyDetail removed = ChouseFactory.eINSTANCE.createConstraintModifyDetail();
removed.setMark(c.getMark());
removed.setName(c.getName());
removed.setType(c.getType());
for (TableColumn col : c.getColumns()) {
removed.getColumns().add(EcoreUtil.copy(col));
}
for (ForeignKey key : c.getForeignKey()) {
removed.getForeignKey().add(EcoreUtil.copy(key));
}
input.add(removed);
}
treeViewer.refresh();
}
}
@Override
protected void initAction(Modification modification) {
if(modification instanceof RemoveConstraintModification){
action = modification;
}
else{
action = ChouseFactory.eINSTANCE.createRemoveConstraintModification();
}
}
}