/** * <p>Copyright: Copyright (c) 2014</p> * <p>Company: �������ӹɷ����޹�˾</p> */ package com.hundsun.ares.studio.jres.clearinghouse.celleditor; import java.util.Arrays; import java.util.Iterator; import java.util.List; import org.apache.commons.lang.StringUtils; import org.eclipse.emf.ecore.EAttribute; import org.eclipse.emf.ecore.EStructuralFeature; import org.eclipse.jface.dialogs.Dialog; import org.eclipse.jface.layout.GridDataFactory; import org.eclipse.jface.viewers.CheckboxTableViewer; import org.eclipse.jface.viewers.DoubleClickEvent; import org.eclipse.jface.viewers.IDoubleClickListener; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.TableViewerColumn; import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Shell; import com.hundsun.ares.studio.core.IARESResource; 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.database.TableIndex; import com.hundsun.ares.studio.jres.model.database.TableIndexColumn; import com.hundsun.ares.studio.jres.model.database.TableResourceData; import com.hundsun.ares.studio.jres.model.metadata.StandardField; import com.hundsun.ares.studio.model.reference.ReferenceInfo; import com.hundsun.ares.studio.reference.ReferenceManager; import com.hundsun.ares.studio.ui.editor.viewers.EObjectColumnLabelProvider; import com.hundsun.ares.studio.ui.editor.viewers.ReferenceContentProvider; /** * @author liaogc * */ public class IndexFieldSelectEditorDialog extends Dialog{ private CheckboxTableViewer tableViewer; private String title; private IARESResource resource; private TableResourceData tableResourceData; private List<TableIndexColumn> result; private TableIndex index; private List<TableIndexColumn>initIndexFields;//��ʼ���Ѿ�ѡ��������ֶ� final ReferenceManager manager = ReferenceManager.getInstance(); /** * @param parentShell * @param info * @param resource */ public IndexFieldSelectEditorDialog(Shell parentShell, String Title,TableIndex index ,List<TableIndexColumn>initIndexFields,TableResourceData tableResourceData,IARESResource resource) { super(parentShell); this.title = Title; this.index = index; this.initIndexFields = initIndexFields; this.resource = resource; this.tableResourceData = tableResourceData;} /* (non-Javadoc) * @see org.eclipse.jface.window.Window#getShellStyle() */ @Override protected int getShellStyle() { return super.getShellStyle() |SWT.RESIZE | SWT.MAX; } public List<TableIndexColumn> getSelectedColumns() { return result; } @Override protected void configureShell(Shell newShell) { super.configureShell(newShell); newShell.setText(title); } /* (non-Javadoc) * @see org.eclipse.jface.dialogs.Dialog#okPressed() */ @Override protected void okPressed() { result = (List)Arrays.asList(tableViewer.getCheckedElements()) ; super.okPressed(); } /* (non-Javadoc) * @see org.eclipse.jface.dialogs.Dialog#createDialogArea(org.eclipse.swt.widgets.Composite) */ @Override protected Control createDialogArea(Composite parent) { Composite composite = (Composite) super.createDialogArea(parent); tableViewer = CheckboxTableViewer.newCheckList(composite, SWT.BORDER|SWT.FULL_SELECTION|SWT.V_SCROLL|SWT.H_SCROLL); tableViewer.getTable().setLinesVisible(true); tableViewer.getTable().setHeaderVisible(true); GridDataFactory.swtDefaults().hint(-1, 200).grab(true, true).align(SWT.FILL, SWT.FILL).applyTo(tableViewer.getTable()); tableViewer.addDoubleClickListener(new IDoubleClickListener() { @Override public void doubleClick(DoubleClickEvent event) { IStructuredSelection sel = (IStructuredSelection) event.getSelection(); if (!sel.isEmpty()) { Object element = sel.getFirstElement(); tableViewer.setChecked(element, !tableViewer.getChecked(element)); } } }); tableViewer.setContentProvider(new ReferenceContentProvider(DatabasePackage.Literals.TABLE_INDEX__COLUMNS)); // �ֶ��� { EAttribute attribute = DatabasePackage.Literals.TABLE_INDEX_COLUMN__COLUMN_NAME; final TableViewerColumn tvColumn = new TableViewerColumn(tableViewer, SWT.LEFT); tvColumn.getColumn().setWidth(100); tvColumn.getColumn().setText("�ֶ���"); EObjectColumnLabelProvider provider = new EObjectColumnLabelProvider(attribute); tvColumn.setLabelProvider(provider); } // ���� { EAttribute attribute = DatabasePackage.Literals.TABLE_INDEX_COLUMN__ASCENDING; final TableViewerColumn tvColumn = new TableViewerColumn(tableViewer, SWT.LEFT); tvColumn.getColumn().setWidth(100); tvColumn.getColumn().setText("����"); EObjectColumnLabelProvider provider = new EObjectColumnLabelProvider(attribute); tvColumn.setLabelProvider(provider); } // ������ { final TableViewerColumn tvColumn = new TableViewerColumn(tableViewer, SWT.LEFT); tvColumn.getColumn().setWidth(100); tvColumn.getColumn().setText("������"); FieldChineseNameColumnLabelProvider provider = new FieldChineseNameColumnLabelProvider(DatabasePackage.Literals.TABLE_INDEX_COLUMN__COLUMN_NAME); tvColumn.setLabelProvider(provider); } // �ֶ����� { final TableViewerColumn tvColumn = new TableViewerColumn(tableViewer, SWT.LEFT); tvColumn.getColumn().setWidth(100); tvColumn.getColumn().setText("˵��"); FieldDescColumnLabelProvider provider = new FieldDescColumnLabelProvider(DatabasePackage.Literals.TABLE_INDEX_COLUMN__COLUMN_NAME); tvColumn.setLabelProvider(provider); } for(TableIndexColumn field:initIndexFields){ boolean find = false; Iterator<TableIndexColumn> iterator = index.getColumns().iterator(); while(iterator.hasNext()){ TableIndexColumn indexField = iterator.next(); if(StringUtils.equals(field.getColumnName(),indexField.getColumnName())){ find = true; break; } } if(!find){ index.getColumns().add(field); } } tableViewer.setInput(index); setInitState(); return composite; } /** * ��ʼ�ֶ�ѡ��״̬ */ private void setInitState(){ for(TableIndexColumn field:initIndexFields){ for(TableIndexColumn indexField:index.getColumns()){ if(StringUtils.equals(field.getColumnName(),indexField.getColumnName())){ tableViewer.setChecked(indexField, true); break; } } } } private class FieldChineseNameColumnLabelProvider extends EObjectColumnLabelProvider{ /** * @param attribute */ public FieldChineseNameColumnLabelProvider(EStructuralFeature attribute) { super(attribute); // TODO Auto-generated constructor stub } @Override public String getText(Object element) { TableIndexColumn column = (TableIndexColumn) element; String name = column.getColumnName(); if (column.getColumnType() == ColumnType.STD_FIELD) { ReferenceInfo ref = (ReferenceInfo) manager.getFirstReferenceInfo(resource.getARESProject(), IMetadataRefType.StdField, name, true); if (ref != null) { StandardField stdField = (StandardField) ref.getObject(); return stdField == null ? StringUtils.EMPTY : StringUtils.defaultString(stdField.getChineseName()); }else { return StringUtils.EMPTY; } } else { TableColumn c = findColumn(name); if (c != null) { return StringUtils.defaultString(c.getChineseName()); } return StringUtils.EMPTY; } } } private class FieldDescColumnLabelProvider extends EObjectColumnLabelProvider{ /** * @param attribute */ public FieldDescColumnLabelProvider(EStructuralFeature attribute) { super(attribute); // TODO Auto-generated constructor stub } @Override public String getText(Object element) { TableIndexColumn column = (TableIndexColumn) element; String name = column.getColumnName(); if (column.getColumnType() == ColumnType.STD_FIELD) { ReferenceInfo ref = (ReferenceInfo) manager.getFirstReferenceInfo(resource.getARESProject(), IMetadataRefType.StdField, name, true); if (ref != null) { StandardField stdField = (StandardField) ref.getObject(); return stdField == null ? StringUtils.EMPTY : StringUtils.defaultString(stdField.getDescription()); }else { return StringUtils.EMPTY; } } else { TableColumn c = findColumn(name); if (c != null) { return StringUtils.defaultString(c.getDescription()); } return StringUtils.EMPTY; } } } /** * �����ֶ����ҳ���Ӧ�ı���� * @param name * @return */ private TableColumn findColumn(String name) { for (TableColumn c : tableResourceData.getColumns()) { if (StringUtils.equals(c.getName(), name)) return c; } return null; } }