package com.hundsun.ares.studio.jres.clearinghouse.ui; import java.util.ArrayList; import java.util.List; import org.apache.commons.lang.StringUtils; import org.eclipse.emf.ecore.EAttribute; import org.eclipse.emf.ecore.EObject; import org.eclipse.jface.dialogs.Dialog; import org.eclipse.jface.layout.GridDataFactory; import org.eclipse.jface.viewers.CheckboxTreeViewer; 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.graphics.Image; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Shell; import com.hundsun.ares.studio.core.IARESResource; import com.hundsun.ares.studio.jres.database.ui.viewer.TableColumnLabelProvider; import com.hundsun.ares.studio.jres.database.ui.viewer.TableColumnRefLabelProvider; import com.hundsun.ares.studio.jres.database.utils.DatabaseUtils; import com.hundsun.ares.studio.jres.model.database.DatabasePackage; import com.hundsun.ares.studio.jres.model.database.TableColumn; import com.hundsun.ares.studio.ui.editor.extend.CheckBoxColumnLabelProvider; import com.hundsun.ares.studio.ui.editor.extend.ExtensibleModelColumnViewerProblemView; import com.hundsun.ares.studio.ui.editor.extend.ExtensibleModelUtils; import com.hundsun.ares.studio.ui.editor.viewers.EObjectColumnLabelProvider; import com.hundsun.ares.studio.ui.editor.viewers.EObjectColumnViewerProblemView; import com.hundsun.ares.studio.ui.editor.viewers.ReferenceTreeContentProvider; public class ColumnSelectionDialog extends Dialog { private IARESResource resource; private EObject input; private CheckboxTreeViewer treeViewer; private String title; private TableColumn[] result = new TableColumn[0]; public ColumnSelectionDialog(Shell parentShell, IARESResource resource, EObject input) { super(parentShell); this.resource = resource; this.input = input; } @Override protected void configureShell(Shell newShell) { super.configureShell(newShell); newShell.setText(title == null ? "ѡ����" : title); } public void setTitle(String title) { this.title = title; } public IARESResource getResource() { return this.resource; } @Override protected Control createDialogArea(Composite parent) { Composite composite = new Composite(parent, SWT.NONE); composite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); composite.setLayout(new GridLayout(1, false)); treeViewer = new CheckboxTreeViewer(composite, SWT.CHECK | SWT.BORDER); treeViewer.setContentProvider(new ReferenceTreeContentProvider(DatabasePackage.Literals.TABLE_RESOURCE_DATA__COLUMNS)); treeViewer.getTree().setHeaderVisible(true); treeViewer.getTree().setLinesVisible(true); createColumns(treeViewer); // treeViewer.addCheckStateListener(new ICheckStateListener() { // @Override // public void checkStateChanged(CheckStateChangedEvent event) { // Object[] objects = treeViewer.getCheckedElements(); // List<TableColumn> columnList = new ArrayList<TableColumn>(); // for (Object obj : objects) { // if (obj instanceof TableColumn) { // columnList.add((TableColumn) obj); // } // } // result = columnList.toArray(new TableColumn[0]); // } // }); treeViewer.setInput(input); GridDataFactory.fillDefaults().hint(-1, 300).applyTo(treeViewer.getTree()); return composite; } protected void createColumns(TreeViewer viewer) { final TreeViewer treeViewer = (TreeViewer) viewer; // ����һ����� EObjectColumnViewerProblemView problemView = new EObjectColumnViewerProblemView(treeViewer); // ������չ�� EObjectColumnViewerProblemView exProblemView = new ExtensibleModelColumnViewerProblemView(treeViewer); // ��� { EAttribute attribute = DatabasePackage.Literals.TABLE_COLUMN__MARK; final TreeViewerColumn tvColumn = new TreeViewerColumn(treeViewer, SWT.LEFT); tvColumn.getColumn().setWidth(90); tvColumn.getColumn().setText("���"); EObjectColumnLabelProvider provider = new TableColumnLabelProvider(attribute , resource); provider.setDiagnosticProvider(problemView); tvColumn.setLabelProvider(provider); tvColumn.getColumn().setMoveable(true); } // ���õı�׼�ֶ� { EAttribute attribute = DatabasePackage.Literals.TABLE_COLUMN__FIELD_NAME; final TreeViewerColumn tvColumn = new TreeViewerColumn(treeViewer, SWT.LEFT); tvColumn.getColumn().setWidth(130); tvColumn.getColumn().setText("�ֶ���"); EObjectColumnLabelProvider provider = new TableColumnLabelProvider(attribute , getResource()); provider.setDiagnosticProvider(problemView); tvColumn.setLabelProvider(provider); } // ������ { final TreeViewerColumn tvColumn = new TreeViewerColumn(treeViewer, SWT.LEFT); tvColumn.getColumn().setWidth(100); tvColumn.getColumn().setText("������"); TableColumnRefLabelProvider provider = new TableColumnRefLabelProvider(resource.getBundle(), TableColumnRefLabelProvider.TYPE.ChineseName){ @Override public Color getBackground(Object element) { if (getResource().isReadOnly()) { return Display.getDefault().getSystemColor(SWT.COLOR_GRAY); } return super.getBackground(element); } }; tvColumn.setLabelProvider(provider); tvColumn.getColumn().setMoveable(true); } // �ֶ����� { final TreeViewerColumn tvColumn = new TreeViewerColumn(treeViewer, SWT.LEFT); tvColumn.getColumn().setWidth(100); tvColumn.getColumn().setText("�ֶ�����"); TableColumnRefLabelProvider provider = new TableColumnRefLabelProvider(resource.getBundle(), TableColumnRefLabelProvider.TYPE.Type){ @Override public Color getBackground(Object element) { if (getResource().isReadOnly()) { return Display.getDefault().getSystemColor(SWT.COLOR_GRAY); } return super.getBackground(element); } }; tvColumn.setLabelProvider(provider); tvColumn.getColumn().setMoveable(true); } // �ֶ�˵�� { final TreeViewerColumn tvColumn = new TreeViewerColumn(treeViewer, SWT.LEFT); tvColumn.getColumn().setWidth(150); tvColumn.getColumn().setText("�ֶ�˵��"); TableColumnRefLabelProvider provider = new TableColumnRefLabelProvider(resource.getBundle(), TableColumnRefLabelProvider.TYPE.Desciption){ @Override public String getToolTipText(Object element) { return getText(element); } @Override public Color getBackground(Object element) { if (getResource().isReadOnly()) { return Display.getDefault().getSystemColor(SWT.COLOR_GRAY); } return super.getBackground(element); } }; tvColumn.setLabelProvider(provider); tvColumn.getColumn().setMoveable(true); } // Ĭ��ֵ { EAttribute attribute = DatabasePackage.Literals.TABLE_COLUMN__DEFAULT_VALUE; final TreeViewerColumn tvColumn = new TreeViewerColumn(treeViewer, SWT.LEFT); tvColumn.getColumn().setWidth(100); tvColumn.getColumn().setText("Ĭ��ֵ"); EObjectColumnLabelProvider provider = new TableColumnLabelProvider(attribute , getResource()); provider.setDiagnosticProvider(problemView); tvColumn.setLabelProvider(provider); tvColumn.getColumn().setMoveable(true); } // �Ƿ�Ϊ�� { EAttribute attribute = DatabasePackage.Literals.TABLE_COLUMN__NULLABLE; final TreeViewerColumn tvColumn = new TreeViewerColumn(treeViewer, SWT.LEFT); tvColumn.getColumn().setWidth(80); tvColumn.getColumn().setText("�����"); CheckBoxColumnLabelProvider provider = new CheckBoxColumnLabelProvider(attribute , getResource()){ @Override public Color getBackground(Object element) { TableColumn tc = (TableColumn) element; //if (tc.isPrimaryKey()) { if(DatabaseUtils.isPrimaryKey(tc)){ return Display.getDefault().getSystemColor(SWT.COLOR_GRAY); } return super.getBackground(element); } @Override public Image getImage(Object element) { TableColumn tc = (TableColumn) element; // if (tc.isPrimaryKey()) { if(DatabaseUtils.isPrimaryKey(tc)){ return null; } return super.getImage(element); } }; tvColumn.setLabelProvider(provider); tvColumn.getColumn().setMoveable(true); } // ��ע { EAttribute attribute = DatabasePackage.Literals.TABLE_COLUMN__COMMENTS; final TreeViewerColumn tvColumn = new TreeViewerColumn(treeViewer, SWT.LEFT); tvColumn.getColumn().setWidth(150); tvColumn.getColumn().setText("��ע"); EObjectColumnLabelProvider provider = new TableColumnLabelProvider(attribute , getResource()){ @Override public String getToolTipText(Object element) { String text = super.getToolTipText(element); if(StringUtils.isBlank(text)){ return getText(element); } return text; } }; provider.setDiagnosticProvider(problemView); tvColumn.setLabelProvider(provider); tvColumn.getColumn().setMoveable(true); } // ��չ��Ϣ ExtensibleModelUtils.createExtensibleModelTreeViewerColumns( treeViewer, getResource(), DatabasePackage.Literals.TABLE_COLUMN, exProblemView); } public CheckboxTreeViewer getTreeViewer() { return this.treeViewer; } @Override protected void okPressed() { List<TableColumn> columns = new ArrayList<TableColumn>(); for (Object obj : treeViewer.getCheckedElements()) { columns.add((TableColumn) obj); } this.result = columns.toArray(new TableColumn[0]); super.okPressed(); } public TableColumn[] getSelection() { return result; } }