/** * Դ�������ƣ�StandardFieldViewerBlock.java * �������Ȩ���������ӹɷ����޹�˾ ��Ȩ���� * ϵͳ���ƣ�JRES Studio * ģ�����ƣ�com.hundsun.ares.studio.jres.metadata.ui * ����˵����$desc * ����ĵ��� * ���ߣ� */ package com.hundsun.ares.studio.jres.basicdata.ui.editor.blocks; 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.EClass; import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.ecore.EPackage; import org.eclipse.emf.edit.domain.EditingDomain; import org.eclipse.jface.action.IAction; import org.eclipse.jface.action.IMenuManager; import org.eclipse.jface.action.ToolBarManager; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.viewers.TreeViewer; import org.eclipse.jface.viewers.TreeViewerColumn; import org.eclipse.jface.viewers.ViewerCell; import org.eclipse.swt.SWT; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.widgets.Shell; import org.eclipse.ui.IWorkbenchPartSite; import org.eclipse.ui.forms.editor.FormPage; import org.eclipse.ui.plugin.AbstractUIPlugin; import com.hundsun.ares.studio.core.IARESResource; import com.hundsun.ares.studio.core.model.util.Pair; import com.hundsun.ares.studio.core.service.DataServiceManager; import com.hundsun.ares.studio.jres.basicdata.constant.IBasicDataEpacakgeConstant; import com.hundsun.ares.studio.jres.basicdata.core.basicdata.BasicDataEAttribute; import com.hundsun.ares.studio.jres.basicdata.core.basicdata.BasicDataField; import com.hundsun.ares.studio.jres.basicdata.logic.util.BasicDataEpackageUtil; import com.hundsun.ares.studio.jres.basicdata.logic.util.JRESResProviderUtil; import com.hundsun.ares.studio.jres.basicdata.ui.BasicDataUI; import com.hundsun.ares.studio.jres.basicdata.ui.editor.actions.BaiscDataCopyAction; import com.hundsun.ares.studio.jres.basicdata.ui.editor.actions.BasicDataPasteAction; import com.hundsun.ares.studio.jres.basicdata.ui.editor.actions.ExportBasicdataAction; import com.hundsun.ares.studio.jres.basicdata.ui.editor.actions.ImportBasicdataAction; import com.hundsun.ares.studio.jres.basicdata.ui.proposal.BasicDataContentProposalProvider; import com.hundsun.ares.studio.jres.basicdata.ui.proposal.BasicDataContentProposalProviderHelper; import com.hundsun.ares.studio.jres.basicdata.ui.viewer.BasicDataProblemView; import com.hundsun.ares.studio.jres.metadata.constant.IMetadataRefType; import com.hundsun.ares.studio.jres.metadata.service.IBusinessDataType; import com.hundsun.ares.studio.jres.metadata.service.IMetadataService; import com.hundsun.ares.studio.jres.metadata.service.IStandardDataType; import com.hundsun.ares.studio.jres.metadata.service.IStandardField; import com.hundsun.ares.studio.jres.metadata.ui.actions.AddChildCategoryAction; import com.hundsun.ares.studio.jres.metadata.ui.actions.AddItemAction; import com.hundsun.ares.studio.jres.metadata.ui.actions.AddSiblingCategoryAction; import com.hundsun.ares.studio.jres.metadata.ui.actions.IMetadataActionIDConstant; import com.hundsun.ares.studio.jres.metadata.ui.actions.InsertItemAction; import com.hundsun.ares.studio.jres.metadata.ui.actions.MoveDownAction; import com.hundsun.ares.studio.jres.metadata.ui.actions.MoveUpAction; import com.hundsun.ares.studio.jres.metadata.ui.actions.RemoveAction; import com.hundsun.ares.studio.jres.metadata.ui.actions.ShowCategoryAction; import com.hundsun.ares.studio.jres.metadata.ui.block.MetadataListViewerBlock; import com.hundsun.ares.studio.jres.metadata.ui.viewer.MetadataEStructuralFeatureProvider; import com.hundsun.ares.studio.jres.model.metadata.MetadataPackage; import com.hundsun.ares.studio.jres.model.metadata.StandardField; import com.hundsun.ares.studio.jres.model.metadata.decrypt.DeDictionaryType; import com.hundsun.ares.studio.jres.model.metadata.util.MetadataUtil; import com.hundsun.ares.studio.ui.ColumnViewerHoverToolTip; import com.hundsun.ares.studio.ui.editor.actions.ColumnViewerDeleteAction; import com.hundsun.ares.studio.ui.editor.actions.CopyCellAction; import com.hundsun.ares.studio.ui.editor.actions.CopyColumnAction; import com.hundsun.ares.studio.ui.editor.actions.IActionIDConstant; import com.hundsun.ares.studio.ui.editor.actions.ValidateAction; 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.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.IEStructuralFeatureProvider; import com.hundsun.ares.studio.ui.validate.IProblemPool; /** * */ public class SingleTableListViewerBlock extends MetadataListViewerBlock { EPackage ePackage; String className; IMetadataService manager; public SingleTableListViewerBlock(FormPage page, EditingDomain editingDomain, IWorkbenchPartSite site, IARESResource resource, IProblemPool problemPool, EPackage ePackage, String className) { super(page, editingDomain, site, resource, problemPool); this.ePackage = ePackage; this.className = className; manager = DataServiceManager.getInstance().getService(getARESResource().getARESProject(), IMetadataService.class); } @Override protected boolean getDefaultShowCategory() { return true; } /** * ����ֶ��� * @param resoruce * @param attribute * @return */ private String getColType(IARESResource resoruce,EAttribute attribute){ String type = StringUtils.EMPTY; if (attribute == null) { return type; } if(attribute instanceof BasicDataEAttribute ){ BasicDataEAttribute basicDataEAttribute = (BasicDataEAttribute) attribute; if(basicDataEAttribute.getData() !=null){ if(basicDataEAttribute.getData() instanceof BasicDataField){ BasicDataField basicDataField = (BasicDataField) basicDataEAttribute.getData(); if(basicDataField.getColumnType() == 0){//��׼�ֶ�ʱ IStandardField stdField = manager.getStandardField(attribute.getName()); if (stdField != null) { IBusinessDataType bizType = stdField.getDataType(); if (bizType != null) { IStandardDataType stdType = bizType.getStdType(); if (stdType != null) { type = stdType.getName(); } } } }else{//�DZ�׼�ֶ�ʱ IBusinessDataType bizType = manager.getBusinessDataType(basicDataField.getDataType()); if (bizType != null) { IStandardDataType stdType = bizType.getStdType(); if (stdType != null) { type = stdType.getName(); } } } } } } return type; } /** * �ж��Ƿ��ô��ı��� * * @param type * @return */ private boolean isLongTextCellEditor(String type){ if (StringUtils.indexOfIgnoreCase(type, "str") > 0) { return true; }else if (StringUtils.indexOfIgnoreCase(type, "String") > 0){ return true; }else if (StringUtils.indexOfIgnoreCase(type, "clob") > 0){ return true; } return false; } /** * �Ƿ������ֵ�༭ * @param proposalProvider * @return */ private boolean isDictCellEditor(BasicDataContentProposalProvider proposalProvider){ if(proposalProvider.getAttribute() != null && proposalProvider.getResource() != null){ if(BasicDataEpackageUtil.isStandardField(proposalProvider.getAttribute())){ StandardField stdField = JRESResProviderUtil.getMetadataModel(proposalProvider.getResource().getARESProject(), proposalProvider.getAttribute().getName(),IMetadataRefType.StdField , StandardField.class); if(null != stdField && StringUtils.isNotBlank(stdField.getDictionaryType())){ DeDictionaryType dicType = MetadataUtil.decrypt(stdField, proposalProvider.getResource()).getDictionaryType(); proposalProvider.setInput(dicType.getItems().toArray()); return true; } } } return false; } private EMFEditingSupport getEditingSupport(TreeViewer treeViewer ,IEStructuralFeatureProvider featureProvider,BasicDataContentProposalProvider proposalProvider ,EAttribute attrArray){ EMFEditingSupport es = null; if(isDictCellEditor(proposalProvider)){ es = new BasicDataDictTextEditingSupport(treeViewer, featureProvider,proposalProvider); }else if (isLongTextCellEditor(getColType(getARESResource(), attrArray))) { es = new LongBasicDataTextEditingSupport(treeViewer, featureProvider,proposalProvider); }else { es = new BasicDataTextEditingSupport(treeViewer, featureProvider,proposalProvider); } return es; } @Override protected void addToolTipSupport(TreeViewer viewer) { ColumnViewerHoverToolTip.enableFor(viewer); } @Override protected void createColumns(TreeViewer viewer) { final TreeViewer treeViewer = (TreeViewer) viewer; EClass masterEclass = (EClass)ePackage.getEClassifier(className); EAttribute[] attrArray = BasicDataEpackageUtil.filterAttr(masterEclass); int attrSize = attrArray.length; if(0 == attrSize){ MessageDialog dlg = new MessageDialog(new Shell(), "����", null, "������û�пɱ༭�����ȷ��������õ���ȷ�ԣ�", MessageDialog.ERROR, new String[]{"ȷ��"}, 0); dlg.open(); return; } EObjectColumnViewerProblemView problemView = new BasicDataProblemView(treeViewer,attrArray); { // ��������� TreeViewerColumn column = new TreeViewerColumn(treeViewer, SWT.LEFT); String columnName = BasicDataEpackageUtil.getAttrColumnName(getARESResource(),attrArray[0]); column.getColumn().setText(columnName); column.getColumn().setWidth(120); column.getColumn().setMoveable(true); //��feature�ṩ�� IEStructuralFeatureProvider featureProvider = new MetadataEStructuralFeatureProvider(MetadataPackage.Literals.NAMED_ELEMENT__NAME,attrArray[0]); // ���ñ�ǩ�ṩ�� EObjectColumnLabelProvider provider = new BasicdataHeaderColumnLabelProvider(featureProvider,getARESResource()){ @Override public String getToolTipText(Object element) { String text = getText(element); return StringUtils.isBlank(text) ? super.getToolTipText(element) : text; } }; provider.setDiagnosticProvider(problemView); column.setLabelProvider(provider); // ���ñ༭֧�� BasicDataContentProposalProviderHelper helper = new BasicDataContentProposalProviderHelper(); BasicDataContentProposalProvider proposalProvider = new BasicDataContentProposalProvider(helper, attrArray[0], getARESResource()); EMFEditingSupport es = getEditingSupport(treeViewer, featureProvider, proposalProvider, attrArray[0]); es.setDecorator(new BaiscDataEditingSupportDecorator(featureProvider,getARESResource())); column.setEditingSupport(es); } { // ��������� TreeViewerColumn column = new TreeViewerColumn(treeViewer, SWT.LEFT); String columnName = "������"; column.getColumn().setWidth(120); column.getColumn().setMoveable(true); //��feature�ṩ�� IEStructuralFeatureProvider featureProvider = null; if(attrSize > 1){ columnName = BasicDataEpackageUtil.getAttrColumnName(getARESResource(),attrArray[1]); featureProvider =new MetadataEStructuralFeatureProvider(MetadataPackage.Literals.NAMED_ELEMENT__CHINESE_NAME,attrArray[1]); }else{ featureProvider = new MetadataEStructuralFeatureProvider(MetadataPackage.Literals.NAMED_ELEMENT__CHINESE_NAME,null); } column.getColumn().setText(columnName); // ���ñ�ǩ�ṩ�� EObjectColumnLabelProvider provider = new BasicDataColumnLabelProvider(featureProvider,getARESResource()){ @Override public String getToolTipText(Object element) { String text = getText(element); return StringUtils.isBlank(text) ? super.getToolTipText(element) : text; } }; provider.setDiagnosticProvider(problemView); column.setLabelProvider(provider); // ���ñ༭֧�� BasicDataContentProposalProviderHelper helper = new BasicDataContentProposalProviderHelper(); EAttribute attribute = attrSize > 1 ? attrArray[1] : null; BasicDataContentProposalProvider proposalProvider = new BasicDataContentProposalProvider(helper, attribute, getARESResource()); EMFEditingSupport es = getEditingSupport(treeViewer, featureProvider, proposalProvider, attribute); es.setDecorator(new BaiscDataEditingSupportDecorator(featureProvider,getARESResource())); column.setEditingSupport(es); } { // ��������� TreeViewerColumn column = new TreeViewerColumn(treeViewer, SWT.LEFT); String columnName = "��ע"; column.getColumn().setWidth(120); column.getColumn().setMoveable(true); //��feature�ṩ�� IEStructuralFeatureProvider featureProvider = null; if(attrSize > 2){ columnName = BasicDataEpackageUtil.getAttrColumnName(getARESResource(),attrArray[2]); featureProvider = new MetadataEStructuralFeatureProvider(MetadataPackage.Literals.NAMED_ELEMENT__DESCRIPTION,attrArray[2]); }else{ featureProvider = new MetadataEStructuralFeatureProvider(MetadataPackage.Literals.NAMED_ELEMENT__DESCRIPTION,null); } column.getColumn().setText(columnName); // ���ñ�ǩ�ṩ�� EObjectColumnLabelProvider provider = new BasicDataColumnLabelProvider(featureProvider,getARESResource()){ @Override public String getToolTipText(Object element) { String text = getText(element); return StringUtils.isBlank(text) ? super.getToolTipText(element) : text; } }; provider.setDiagnosticProvider(problemView); column.setLabelProvider(provider); // ���ñ༭֧�� BasicDataContentProposalProviderHelper helper = new BasicDataContentProposalProviderHelper(); EAttribute attribute = attrSize > 2 ? attrArray[2] : null; BasicDataContentProposalProvider proposalProvider = new BasicDataContentProposalProvider(helper, attribute, getARESResource()); EMFEditingSupport es = getEditingSupport(treeViewer, featureProvider, proposalProvider, attribute); es.setDecorator(new BaiscDataEditingSupportDecorator(featureProvider,getARESResource())); column.setEditingSupport(es); } for(int i = 3;i < attrSize; i++){ // ���������� EAttribute attribute = attrArray[i]; // ��������� TreeViewerColumn column = new TreeViewerColumn(treeViewer, SWT.LEFT); column.getColumn().setText(BasicDataEpackageUtil.getAttrColumnName(getARESResource(),attrArray[i])); column.getColumn().setWidth(120); column.getColumn().setMoveable(true); // ���ñ�ǩ�ṩ�� EObjectColumnLabelProvider provider = new BasicDataColumnLabelProvider(attribute,getARESResource()){ @Override public String getToolTipText(Object element) { String text = getText(element); return StringUtils.isBlank(text) ? super.getToolTipText(element) : text; } }; provider.setDiagnosticProvider(problemView); column.setLabelProvider(provider); // ���ñ༭֧�� BasicDataContentProposalProviderHelper helper = new BasicDataContentProposalProviderHelper(); BasicDataContentProposalProvider proposalProvider = new BasicDataContentProposalProvider(helper, attribute, getARESResource()); EMFEditingSupport es = getEditingSupport(treeViewer, new IEStructuralFeatureProvider.Impl(attribute), proposalProvider, attrArray[i]); es.setDecorator(new BaiscDataEditingSupportDecorator(attribute,getARESResource())); column.setEditingSupport(es); } ExtensibleModelUtils.createExtensibleModelTreeViewerColumns(viewer, getARESResource(), masterEclass, problemView); getProblemPool().addView(problemView); } @Override public Pair<EObject, IARESResource> getLinkedObject(ViewerCell cell) { return null; } @Override protected void createMenus(IMenuManager menuManager) { //������׼�ֶα༭�����Ҽ��˵� IAction action = getActionRegistry().getAction(IMetadataActionIDConstant.CV_ADD_ITEM); menuManager.add(action); action = getActionRegistry().getAction(IMetadataActionIDConstant.CV_ADD_CHILD_CATEGORY); menuManager.add(action); action = getActionRegistry().getAction(IMetadataActionIDConstant.CV_ADD_SLIBING_CATEGORY); menuManager.add(action); action = getActionRegistry().getAction(IMetadataActionIDConstant.CV_REMOVE); menuManager.add(action); action = getActionRegistry().getAction(IActionIDConstant.CV_DELETE); menuManager.add(action); action = getActionRegistry().getAction(IMetadataActionIDConstant.CV_MOVE_UP); menuManager.add(action); action = getActionRegistry().getAction(IMetadataActionIDConstant.CV_MOVE_DOWN); menuManager.add(action); action = getActionRegistry().getAction(IActionIDConstant.CV_COPY); menuManager.add(action); action = getActionRegistry().getAction(CopyCellAction.ID); menuManager.add(action); action = getActionRegistry().getAction(CopyColumnAction.ID); menuManager.add(action); action = getActionRegistry().getAction(IActionIDConstant.CV_PASTE); menuManager.add(action); action = getActionRegistry().getAction(IMetadataActionIDConstant.CV_SHOW_CATEGORY); menuManager.add(action); // action = new MatadataRenameAction(getEditingDomain(),getTreeViewerFirstColumnName(),getFormPage().getEditor(),getColumnViewer(),getARESResource()); // menuManager.add(action); action = getActionRegistry().getAction(IActionIDConstant.CV_VALIDATE); menuManager.add(action); action = getActionRegistry().getAction(IMetadataActionIDConstant.CV_INSERT_ITEM); menuManager.add(action); } @Override protected void createToolbarItems(ToolBarManager manager) { super.createToolbarItems(manager); //������׼�ֶα༭���IJ����б� IAction action = getActionRegistry().getAction(IMetadataActionIDConstant.CV_ADD_ITEM); manager.add(action); action = getActionRegistry().getAction(IMetadataActionIDConstant.CV_ADD_CHILD_CATEGORY); manager.add(action); action = getActionRegistry().getAction(IMetadataActionIDConstant.CV_ADD_SLIBING_CATEGORY); manager.add(action); action = getActionRegistry().getAction(IMetadataActionIDConstant.CV_INSERT_ITEM); manager.add(action); action = getActionRegistry().getAction(IActionIDConstant.CV_DELETE); manager.add(action); action = getActionRegistry().getAction(IMetadataActionIDConstant.CV_MOVE_UP); manager.add(action); action = getActionRegistry().getAction(IMetadataActionIDConstant.CV_MOVE_DOWN); manager.add(action); action = getActionRegistry().getAction(IMetadataActionIDConstant.CV_IMPORT_METADATA); manager.add(action); action = getActionRegistry().getAction(IMetadataActionIDConstant.CV_EXPORT_METADATA); manager.add(action); } @Override protected void createActions() { //������׼�ֶε�����action super.createActions(); List<IAction> actions = new ArrayList<IAction>(); IAction addItemAction = new AddItemAction(getColumnViewer(), getEditingDomain(), (EClass)ePackage.getEClassifier(IBasicDataEpacakgeConstant.MasterItem)); getActionRegistry().registerAction(addItemAction); getSelectionActions().add(addItemAction.getId()); actions.add(addItemAction); IAction actionInsert = new InsertItemAction( getColumnViewer(), getEditingDomain(), (EClass)ePackage.getEClassifier(IBasicDataEpacakgeConstant.MasterItem)); getActionRegistry().registerAction(actionInsert); getSelectionActions().add(actionInsert.getId()); IAction addChildCategoryAction = new AddChildCategoryAction(getColumnViewer(), getEditingDomain()); getActionRegistry().registerAction(addChildCategoryAction); getSelectionActions().add(addChildCategoryAction.getId()); actions.add(addChildCategoryAction); IAction addSiblingCategoryAction = new AddSiblingCategoryAction(getColumnViewer(), getEditingDomain()); getActionRegistry().registerAction(addSiblingCategoryAction); getSelectionActions().add(addSiblingCategoryAction.getId()); actions.add(addSiblingCategoryAction); IAction columnViewerDelAction = new ColumnViewerDeleteAction(getColumnViewer(), getEditingDomain()); getActionRegistry().registerAction(columnViewerDelAction); getSelectionActions().add(columnViewerDelAction.getId()); actions.add(columnViewerDelAction); IAction removeAction = new RemoveAction(getColumnViewer(), getEditingDomain()); getActionRegistry().registerAction(removeAction); getSelectionActions().add(removeAction.getId()); actions.add(removeAction); IAction moveUpAction = new MoveUpAction(getColumnViewer(), getEditingDomain()); getActionRegistry().registerAction(moveUpAction); getSelectionActions().add(moveUpAction.getId()); getStackActions().add(moveUpAction.getId()); actions.add(moveUpAction); IAction moveDownAction = new MoveDownAction(getColumnViewer(), getEditingDomain()); getActionRegistry().registerAction(moveDownAction); getSelectionActions().add(moveDownAction.getId()); getStackActions().add(moveDownAction.getId()); actions.add(moveDownAction); IAction showCategoryAction = new ShowCategoryAction(getColumnViewer()); getActionRegistry().registerAction(showCategoryAction); actions.add(showCategoryAction); IAction copyAction = new BaiscDataCopyAction(getColumnViewer(),getEditingDomain()); getActionRegistry().registerAction(copyAction); getSelectionActions().add(copyAction.getId()); IAction copyCellAction = new CopyCellAction(getColumnViewer()); getActionRegistry().registerAction(copyCellAction); IAction copyColumnAction = new CopyColumnAction(getColumnViewer()); getActionRegistry().registerAction(copyColumnAction); IAction pasteAction = new BasicDataPasteAction(getColumnViewer(),getEditingDomain(), MetadataPackage.Literals.METADATA_RESOURCE_DATA__ITEMS, (EClass)ePackage.getEClassifier(IBasicDataEpacakgeConstant.MasterItem)); getActionRegistry().registerAction(pasteAction); getSelectionActions().add(pasteAction.getId()); getClipboardActions().add(pasteAction.getId()); IAction actionValidate = new ValidateAction(getFormPage()); getActionRegistry().registerAction(actionValidate); actions.add(actionValidate); ImportBasicdataAction importAction = new ImportBasicdataAction(getARESResource(), getColumnViewer(),getEditingDomain(),ePackage,className); getActionRegistry().registerAction(importAction); getSelectionActions().add(importAction.getId()); String dialogTitle = "������������"; Image dialogImage = AbstractUIPlugin.imageDescriptorFromPlugin(BasicDataUI.PLUGIN_ID, "icons/full/obj16/BaiscData.png").createImage(); String dialogMessage = "����Ŀ�еĻ������ݵ���(Excel�ļ�)."; ExportBasicdataAction exportAction = new ExportBasicdataAction(getARESResource(), getSite(),ePackage,className,dialogTitle,dialogImage,dialogMessage); getActionRegistry().registerAction(exportAction); getSelectionActions().add(exportAction.getId()); for(IAction action: actions) { getEditableControl().addEditableUnit(new ActionEditableUnit(action)); } } @Override protected String getID() { return getClass().getName(); } }