package com.hundsun.ares.studio.jres.database.ui.editors.blocks; import org.eclipse.emf.common.util.EList; import org.eclipse.emf.ecore.EAttribute; import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.ecore.EStructuralFeature; import org.eclipse.emf.edit.domain.EditingDomain; import org.eclipse.jface.action.IAction; import org.eclipse.jface.action.IMenuManager; import org.eclipse.jface.action.Separator; import org.eclipse.jface.action.ToolBarManager; import org.eclipse.jface.viewers.CellEditor; import org.eclipse.jface.viewers.IContentProvider; import org.eclipse.jface.viewers.TreeViewer; import org.eclipse.jface.viewers.TreeViewerColumn; import org.eclipse.swt.SWT; import com.hundsun.ares.studio.core.IARESResource; import com.hundsun.ares.studio.jres.database.ui.viewer.ForeignKeyColumnEditingSupport; import com.hundsun.ares.studio.jres.database.ui.viewer.ForeignKeyColumnLabelProvider; import com.hundsun.ares.studio.jres.database.ui.viewer.KeyColumnEditingSupport; import com.hundsun.ares.studio.jres.database.ui.viewer.TableColumnLabelProvider; 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.TableKey; import com.hundsun.ares.studio.jres.model.database.key_type; import com.hundsun.ares.studio.ui.editor.actions.ColumnViewerAddAction; import com.hundsun.ares.studio.ui.editor.actions.ColumnViewerCopyAction; import com.hundsun.ares.studio.ui.editor.actions.ColumnViewerDeleteAction; import com.hundsun.ares.studio.ui.editor.actions.ColumnViewerInsertAction; import com.hundsun.ares.studio.ui.editor.actions.ColumnViewerMoveDownAction; import com.hundsun.ares.studio.ui.editor.actions.ColumnViewerMoveUpAction; import com.hundsun.ares.studio.ui.editor.actions.ColumnViewerPasteAction; import com.hundsun.ares.studio.ui.editor.actions.CopyCellAction; import com.hundsun.ares.studio.ui.editor.actions.IActionIDConstant; import com.hundsun.ares.studio.ui.editor.blocks.TreeViewerBlock; import com.hundsun.ares.studio.ui.editor.editable.ActionEditableUnit; import com.hundsun.ares.studio.ui.editor.editingsupport.EMFEditingSupport; 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.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; import com.hundsun.ares.studio.ui.validate.IProblemPool; public class TableKeyViewerBlock extends TreeViewerBlock { private ColumnViewerAddAction addAction; private ColumnViewerInsertAction insertAction; private ColumnViewerMoveUpAction moveUpAction; private ColumnViewerMoveDownAction moveDownAction; private ColumnViewerPasteAction pasteAction; /** * @param editingDomain * @param resource * @param problemPool */ public TableKeyViewerBlock(EditingDomain editingDomain, IARESResource resource, IProblemPool problemPool) { super(); this.editingDomain = editingDomain; this.resource = resource; this.problemPool = problemPool; } /* (non-Javadoc) * @see com.hundsun.ares.studio.jres.ui.pages.ColumnViewerBlock#getColumnViewerContentProvider() */ @Override protected IContentProvider getColumnViewerContentProvider() { return new ReferenceTreeContentProvider(DatabasePackage.Literals.TABLE_RESOURCE_DATA__KEYS); } /* (non-Javadoc) * @see com.hundsun.ares.studio.ui.editor.blocks.ColumnViewerBlock#getHeadColumnFeature() */ @Override protected EStructuralFeature getHeadColumnFeature() { return DatabasePackage.Literals.TABLE_KEY__NAME; } /* (non-Javadoc) * @see com.hundsun.ares.studio.jres.ui.pages.ColumnViewerBlock#createMenus(org.eclipse.jface.action.IMenuManager) */ @Override protected void createMenus(IMenuManager menuManager) { IAction action = getActionRegistry().getAction(IActionIDConstant.CV_ADD); menuManager.add(action); action = getActionRegistry().getAction(IActionIDConstant.CV_DELETE); menuManager.add(action); menuManager.add(new Separator()); action = getActionRegistry().getAction(IActionIDConstant.CV_COPY); menuManager.add(action); action = getActionRegistry().getAction(CopyCellAction.ID); menuManager.add(action); action = getActionRegistry().getAction(IActionIDConstant.CV_PASTE); menuManager.add(action); menuManager.add(new Separator()); action = getActionRegistry().getAction(IActionIDConstant.CV_MOVE_UP); menuManager.add(action); action = getActionRegistry().getAction(IActionIDConstant.CV_MOVE_DOWN); menuManager.add(action); action = getActionRegistry().getAction(IActionIDConstant.CV_INSERT); menuManager.add(action); } /* (non-Javadoc) * @see com.hundsun.ares.studio.jres.ui.pages.ColumnViewerBlock#createColumns(org.eclipse.jface.viewers.ColumnViewer) */ @Override 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_KEY__MARK; final TreeViewerColumn tvColumn = new TreeViewerColumn(treeViewer, SWT.LEFT); tvColumn.getColumn().setWidth(80); tvColumn.getColumn().setText("���"); EObjectColumnLabelProvider provider = new TableColumnLabelProvider(attribute , getARESResource()); provider.setDiagnosticProvider(problemView); tvColumn.setLabelProvider(provider); tvColumn.setEditingSupport(new TextEditingSupport(treeViewer, attribute)); tvColumn.getColumn().setMoveable(true); } //���� { EAttribute attribute = DatabasePackage.Literals.TABLE_KEY__NAME; final TreeViewerColumn tvColumn = new TreeViewerColumn(treeViewer, SWT.LEFT); tvColumn.getColumn().setWidth(130); tvColumn.getColumn().setText("����"); EObjectColumnLabelProvider provider = new TableColumnLabelProvider(attribute , getARESResource()); provider.setDiagnosticProvider(problemView); tvColumn.setLabelProvider(provider); tvColumn.setEditingSupport(new TextEditingSupport(treeViewer, attribute)); tvColumn.getColumn().setMoveable(true); } // ���� { EAttribute attribute = DatabasePackage.Literals.TABLE_KEY__TYPE; final TreeViewerColumn tvColumn = new TreeViewerColumn(treeViewer, SWT.LEFT); tvColumn.getColumn().setWidth(130); tvColumn.getColumn().setText("����"); EObjectColumnLabelProvider provider = new TableColumnLabelProvider(attribute , getARESResource()); provider.setDiagnosticProvider(problemView); tvColumn.setLabelProvider(provider); tvColumn.setEditingSupport(new EnumEditingSupport(treeViewer, attribute)); } // �ֶ��б� { EStructuralFeature feature = DatabasePackage.Literals.TABLE_KEY__COLUMNS; final TreeViewerColumn tvColumn = new TreeViewerColumn(treeViewer, SWT.LEFT); tvColumn.getColumn().setWidth(150); tvColumn.getColumn().setText("�ֶ��б�"); EObjectColumnLabelProvider provider = new TableColumnLabelProvider(feature,getARESResource()){ @Override public String getText(Object element) { StringBuffer buffer = new StringBuffer(); if(element instanceof TableKey){ TableKey tableKey = (TableKey)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(); } }; provider.setDiagnosticProvider(problemView); tvColumn.setLabelProvider(provider); tvColumn.setEditingSupport(getKeyColEditingSupper(treeViewer, feature)); tvColumn.getColumn().setMoveable(true); } // ��� { EStructuralFeature feature = DatabasePackage.Literals.TABLE_KEY__FOREIGN_KEY; final TreeViewerColumn tvColumn = new TreeViewerColumn(treeViewer, SWT.LEFT); tvColumn.getColumn().setWidth(150); tvColumn.getColumn().setText("���"); ForeignKeyColumnLabelProvider provider = new ForeignKeyColumnLabelProvider(getARESResource(),feature); provider.setDiagnosticProvider(problemView); tvColumn.setLabelProvider(provider); ForeignKeyColumnEditingSupport editingSupport = new ForeignKeyColumnEditingSupport(treeViewer,feature,resource); editingSupport.setDecorator(new IEditingSupportDecorator() { @Override public CellEditor decorateGetCellEditor(CellEditor cellEditor, Object element) { return cellEditor; }; @Override public boolean decorateCanEdit(boolean canEdit, Object element) { TableKey key = (TableKey)element; return key.getType().equals(key_type.FOREIGN); } }); tvColumn.setEditingSupport(editingSupport); tvColumn.getColumn().setMoveable(true); } // ��չ��Ϣ ExtensibleModelUtils.createExtensibleModelTreeViewerColumns( treeViewer, getARESResource(), DatabasePackage.Literals.TABLE_KEY, exProblemView); // 2012-05-15 sundl �ڷDZ༭����ʹ�õ�ʱ��problemPool������null if (getProblemPool() != null) { getProblemPool().addView(problemView); getProblemPool().addView(exProblemView); // getEditableControl().addEditableUnit(new JresDefaultEditableUnit(viewer.getControl())); } } /** * ��ȡԼ���ı༭֧�� * * @param treeViewer * @param feature * @return */ protected EMFEditingSupport getKeyColEditingSupper(TreeViewer treeViewer ,EStructuralFeature feature){ return new KeyColumnEditingSupport(treeViewer,feature,resource); } /* (non-Javadoc) * @see com.hundsun.ares.studio.jres.ui.pages.ColumnViewerBlock#createActions() */ @Override protected void createActions() { super.createActions(); addAction = new ColumnViewerAddAction( getColumnViewer(), getEditingDomain(), null, DatabasePackage.Literals.TABLE_RESOURCE_DATA__KEYS, DatabasePackage.Literals.TABLE_KEY); getActionRegistry().registerAction(addAction); getSelectionActions().add(addAction.getId()); insertAction = new ColumnViewerInsertAction( getColumnViewer(), getEditingDomain(), null, DatabasePackage.Literals.TABLE_RESOURCE_DATA__KEYS, DatabasePackage.Literals.TABLE_KEY); getActionRegistry().registerAction(insertAction); getSelectionActions().add(insertAction.getId()); IAction delAction = new ColumnViewerDeleteAction(getColumnViewer(), getEditingDomain()); getActionRegistry().registerAction(delAction); getSelectionActions().add(delAction.getId()); moveUpAction = new ColumnViewerMoveUpAction(getColumnViewer(), getEditingDomain()); getActionRegistry().registerAction(moveUpAction); getSelectionActions().add(moveUpAction.getId()); getStackActions().add(moveUpAction.getId()); moveDownAction = new ColumnViewerMoveDownAction(getColumnViewer(), getEditingDomain()); getActionRegistry().registerAction(moveDownAction); getSelectionActions().add(moveDownAction.getId()); getStackActions().add(moveDownAction.getId()); IAction copyAction = new ColumnViewerCopyAction(getColumnViewer()); getActionRegistry().registerAction(copyAction); getSelectionActions().add(copyAction.getId()); pasteAction = new ColumnViewerPasteAction(getColumnViewer(), getEditingDomain(), null, null); getActionRegistry().registerAction(pasteAction); getClipboardActions().add(pasteAction.getId()); createCellAction(); //ֻ������ // 2012-05-15 sundl �༭����ʹ�õ�ʱ�򣬿�����null if (getEditableControl() != null) { getEditableControl().addEditableUnit(new ActionEditableUnit(addAction)); getEditableControl().addEditableUnit(new ActionEditableUnit(delAction)); getEditableControl().addEditableUnit(new ActionEditableUnit(moveUpAction)); getEditableControl().addEditableUnit(new ActionEditableUnit(moveDownAction)); } } /** * �����ı�Acation */ private void createCellAction(){ IAction copyCellAction = new CopyCellAction(getColumnViewer()); getActionRegistry().registerAction(copyCellAction); } /* (non-Javadoc) * @see com.hundsun.ares.studio.jres.ui.pages.ColumnViewerBlock#setInput(java.lang.Object) */ @Override public void setInput(Object input) { addAction.setOwner((EObject) input); insertAction.setOwner((EObject) input); moveDownAction.setOwner((EObject) input); moveDownAction.setReference(DatabasePackage.Literals.TABLE_RESOURCE_DATA__KEYS); moveUpAction.setOwner((EObject) input); moveUpAction.setReference(DatabasePackage.Literals.TABLE_RESOURCE_DATA__KEYS); pasteAction.setOwner((EObject) input); pasteAction.setReference(DatabasePackage.Literals.TABLE_RESOURCE_DATA__KEYS); super.setInput(input); } /* (non-Javadoc) * @see com.hundsun.ares.studio.jres.ui.pages.ColumnViewerBlock#createButtons(com.hundsun.ares.studio.jres.ui.actions.ButtonGroupManager) */ @Override protected void createToolbarItems(ToolBarManager buttonManager) { // ������ť�б� IAction action = getActionRegistry().getAction(IActionIDConstant.CV_ADD); buttonManager.add(action); action = getActionRegistry().getAction(IActionIDConstant.CV_INSERT); if(null != action) buttonManager.add(action); action = getActionRegistry().getAction(IActionIDConstant.CV_DELETE); buttonManager.add(action); action = getActionRegistry().getAction(IActionIDConstant.CV_MOVE_UP); buttonManager.add(action); action = getActionRegistry().getAction(IActionIDConstant.CV_MOVE_DOWN); buttonManager.add(action); } @Override protected String getID() { return getClass().getName(); } }