/**
* Դ�������ƣ�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.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.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.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.jres.basicdata.constant.IBasicDataEpacakgeConstant;
import com.hundsun.ares.studio.jres.basicdata.logic.util.BasicDataEpackageUtil;
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.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.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.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.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 STDModelAndDataListViewerBlock extends MetadataListViewerBlock {
EPackage ePackage;
String className;
TreeViewer viewer;
EObjectColumnViewerProblemView problemView;
AddItemAction addItemAction;
// InsertItemAction insertAction;
// ImportBasicdataAction importAction;
// ExportBasicdataAction exportAction;
List<TreeViewerColumn> columns = new ArrayList<TreeViewerColumn>();
public STDModelAndDataListViewerBlock(FormPage page,
EditingDomain editingDomain,
IWorkbenchPartSite site,
IARESResource resource,
IProblemPool problemPool,
String className) {
super(page, editingDomain, site, resource, problemPool);
this.className = className;
}
/**
* ÿ��ePackage���ڲ�ͣ�ı仯������Ҫһ�������趨
* @param ePackage
*/
public void setEpackage(EPackage ePackage){
this.ePackage = ePackage;
//ePackage�䶯���е�ACTION��Ҫ�����趨
if(null != addItemAction ){
addItemAction.setItemClass((EClass)ePackage.getEClassifier(className));
// insertAction.setItemClass((EClass)ePackage.getEClassifier(className));
// importAction.setePackage(ePackage);
// exportAction.setePackage(ePackage);
}
}
@Override
protected boolean getDefaultShowCategory() {
return true;
}
@Override
protected void createColumns(TreeViewer viewer) {
this.viewer = viewer;
buildColumns();
// getEditableControl().addEditableUnit(new JresDefaultEditableUnit(viewer.getControl()));
getProblemPool().addView(problemView);
}
public void recreateColumns(){
//ɾ���пؼ�
for(TreeViewerColumn item:columns){
item.getColumn().dispose();
}
//����������
columns.clear();
//ȥ��������ͼ
getProblemPool().removeView(problemView);
//���´�����
buildColumns();
//ˢ�½���
viewer.refresh();
}
protected void buildColumns() {
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;
}
problemView = new BasicDataProblemView(treeViewer,attrArray);
{
// ���������
TreeViewerColumn column = new TreeViewerColumn(treeViewer, SWT.LEFT);
columns.add(column);
String columnName = "����";
column.getColumn().setWidth(120);
column.getColumn().setMoveable(true);
//��feature�ṩ��
IEStructuralFeatureProvider featureProvider = null;
if(attrSize > 0){
columnName = BasicDataEpackageUtil.getAttrColumnName(getARESResource(),attrArray[0]);
featureProvider = new MetadataEStructuralFeatureProvider(MetadataPackage.Literals.NAMED_ELEMENT__NAME,attrArray[0]);
}else{
featureProvider = new MetadataEStructuralFeatureProvider(MetadataPackage.Literals.NAMED_ELEMENT__NAME,null);
}
column.getColumn().setText(columnName);
// ���ñ�ǩ�ṩ��
EObjectColumnLabelProvider provider = new BasicdataHeaderColumnLabelProvider(featureProvider,getARESResource());
provider.setDiagnosticProvider(problemView);
column.setLabelProvider(provider);
// ���ñ༭֧��
BasicDataContentProposalProviderHelper helper = new BasicDataContentProposalProviderHelper();
EAttribute attribute = attrSize > 0 ? attrArray[0] : null;
BasicDataContentProposalProvider proposalProvider = new BasicDataContentProposalProvider(helper, attribute, getARESResource());
BasicDataTextEditingSupport es = new BasicDataTextEditingSupport(treeViewer, featureProvider,proposalProvider);
es.setDecorator(new BaiscDataEditingSupportDecorator(featureProvider,getARESResource()));
column.setEditingSupport(es);
}
{
// ���������
TreeViewerColumn column = new TreeViewerColumn(treeViewer, SWT.LEFT);
columns.add(column);
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());
provider.setDiagnosticProvider(problemView);
column.setLabelProvider(provider);
// ���ñ༭֧��
BasicDataContentProposalProviderHelper helper = new BasicDataContentProposalProviderHelper();
EAttribute attribute = attrSize > 1 ? attrArray[1] : null;
BasicDataContentProposalProvider proposalProvider = new BasicDataContentProposalProvider(helper, attribute, getARESResource());
BasicDataTextEditingSupport es = new BasicDataTextEditingSupport(treeViewer, featureProvider,proposalProvider);
es.setDecorator(new BaiscDataEditingSupportDecorator(featureProvider,getARESResource()));
column.setEditingSupport(es);
}
{
// ���������
TreeViewerColumn column = new TreeViewerColumn(treeViewer, SWT.LEFT);
columns.add(column);
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());
provider.setDiagnosticProvider(problemView);
column.setLabelProvider(provider);
// ���ñ༭֧��
BasicDataContentProposalProviderHelper helper = new BasicDataContentProposalProviderHelper();
EAttribute attribute = attrSize > 2 ? attrArray[2] : null;
BasicDataContentProposalProvider proposalProvider = new BasicDataContentProposalProvider(helper, attribute, getARESResource());
BasicDataTextEditingSupport es = new BasicDataTextEditingSupport(treeViewer, featureProvider,proposalProvider);
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);
columns.add(column);
column.getColumn().setText(BasicDataEpackageUtil.getAttrColumnName(getARESResource(),attrArray[i]));
column.getColumn().setWidth(120);
column.getColumn().setMoveable(true);
// ���ñ�ǩ�ṩ��
EObjectColumnLabelProvider provider = new BasicDataColumnLabelProvider(attribute,getARESResource());
provider.setDiagnosticProvider(problemView);
column.setLabelProvider(provider);
// ���ñ༭֧��
BasicDataContentProposalProviderHelper helper = new BasicDataContentProposalProviderHelper();
BasicDataContentProposalProvider proposalProvider = new BasicDataContentProposalProvider(helper, attribute, getARESResource());
BasicDataTextEditingSupport es = new BasicDataTextEditingSupport(treeViewer, new IEStructuralFeatureProvider.Impl(attribute),proposalProvider);
es.setDecorator(new BaiscDataEditingSupportDecorator(attribute,getARESResource()));
column.setEditingSupport(es);
}
}
/* (non-Javadoc)
* @see com.hundsun.ares.studio.jres.ui.viewers.link.ICellLinkProvider#getLinkedObject(org.eclipse.jface.viewers.ViewerCell)
*/
@Override
public Pair<EObject, IARESResource> getLinkedObject(ViewerCell cell) {
return null;
}
/* (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(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);
}
@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(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);
}
/**
* ������Ҫ�䶯��Action
*/
private void createNeedChangedAction(){
addItemAction = new AddItemAction(getColumnViewer(),
getEditingDomain(),
(EClass)ePackage.getEClassifier(IBasicDataEpacakgeConstant.MasterItem)){
/* (non-Javadoc)
* @see com.hundsun.ares.studio.jres.ui.actions.ColumnViewerAction#calculateEnabled()
*/
@Override
protected boolean calculateEnabled() {
EAttribute[] attrArray = BasicDataEpackageUtil.filterAttr(getItemClass());
if(attrArray.length == 0){
return false;
}
return super.calculateEnabled();
}
};
// insertAction = new InsertItemAction(
// getColumnViewer(),
// getEditingDomain(),
// (EClass)ePackage.getEClassifier(IBasicDataEpacakgeConstant.MasterItem));
//
// importAction = new ImportBasicdataAction(getARESResource(), getColumnViewer(),getEditingDomain(),ePackage,className);
//
// exportAction = new ExportBasicdataAction(getARESResource(), getSite(),ePackage,className);
}
@Override
protected void createActions() {
//�������ֶε�����action
super.createActions();
List<IAction> actions = new ArrayList<IAction>();
createNeedChangedAction();
getActionRegistry().registerAction(addItemAction);
getSelectionActions().add(addItemAction.getId());
actions.add(addItemAction);
// getActionRegistry().registerAction(insertAction);
// getSelectionActions().add(insertAction.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(className));
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(), viewer, 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();
}
/* (non-Javadoc)
* @see com.hundsun.ares.studio.jres.metadata.ui.block.MetadataListViewerBlock#setInput(java.lang.Object)
*/
@Override
public void setInput(Object input) {
super.setInput(input);
}
}