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.ecore.EStructuralFeature; import org.eclipse.jface.dialogs.Dialog; import org.eclipse.jface.layout.GridDataFactory; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.TableViewer; 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.basicdata.constant.IBasicDataEpacakgeConstant; import com.hundsun.ares.studio.jres.basicdata.logic.util.BasicDataEpackageUtil; import com.hundsun.ares.studio.ui.FilteredTable; import com.hundsun.ares.studio.ui.TableViewerPatternFilter; import com.hundsun.ares.studio.ui.editor.viewers.EObjectColumnLabelProvider; import com.hundsun.ares.studio.ui.editor.viewers.EObjectColumnViewerProblemView; public class InfoSelectDialog extends Dialog { IARESResource resource; EPackage ePackage; TableViewer treeViewer; EObject resourceInfo; //���ڱ༭���� List<Object> result = new ArrayList<Object>(); public InfoSelectDialog(Shell parentShell, IARESResource resource, EObject resourceInfo) { super(parentShell); this.resource = resource; this.ePackage = resourceInfo.eClass().getEPackage(); this.resourceInfo = resourceInfo; } @Override protected void configureShell(Shell shell) { super.configureShell(shell); shell.setText("ѡ��"); } @Override protected Control createDialogArea(Composite parent) { Composite contents = (Composite) super.createDialogArea(parent); treeViewer = doCreateColumnViewer(contents); EObjectColumnViewerProblemView problemView = new EObjectColumnViewerProblemView( treeViewer); EClass slaveEclass = (EClass) ePackage .getEClassifier(IBasicDataEpacakgeConstant.InfoItem); EAttribute[] attrArray = BasicDataEpackageUtil.filterAttr(slaveEclass); for (int i = 0; i < attrArray.length; i++) { // ���������� EAttribute attribute = attrArray[i]; // ��������� TableViewerColumn column = new TableViewerColumn(treeViewer, SWT.LEFT); column.getColumn().setText( BasicDataEpackageUtil.getAttrColumnName(resource, attrArray[i])); column.getColumn().setWidth(120); column.getColumn().setMoveable(true); // ���ñ�ǩ�ṩ�� EObjectColumnLabelProvider provider = new EObjectColumnLabelProvider( attribute); // provider.setDiagnosticProvider(problemView); column.setLabelProvider(provider); // // ���ñ༭֧�� // BasicDataTextEditingSupport es = new // BasicDataTextEditingSupport(treeViewer, new // IEStructuralFeatureProvider.Impl(attribute)); // es.setDecorator(new // BaiscDataEditingSupportDecorator(attribute,resource)); // column.setEditingSupport(es); } GridDataFactory.swtDefaults().hint(400, 300).grab(true, true).align(SWT.FILL, SWT.FILL) .applyTo(treeViewer.getControl()); treeViewer.setContentProvider(new InfoListContentProvider()); try { EStructuralFeature feature = resourceInfo.eClass().getEStructuralFeature( IBasicDataEpacakgeConstant.Attr_Info_Items); treeViewer.setInput(resourceInfo.eGet(feature)); } catch (Exception e) { } return contents; } /** * ����table * * @param parent * @return */ protected TableViewer doCreateColumnViewer(Composite parent) { final FilteredTable table = new FilteredTable(parent, SWT.BORDER | SWT.FULL_SELECTION | SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL, new TableViewerPatternFilter(), true) { /* * (non-Javadoc) * * @see com.hundsun.ares.studio.jres.ui.common.FilteredTable# * getRefreshJobDelay() */ @Override protected long getRefreshJobDelay() { return getViewer().getTable().getItemCount() / 40 + 100; } }; table.getViewer().getTable().setHeaderVisible(true); table.getViewer().getTable().setLinesVisible(true); return table.getViewer(); } public TableViewer getViewer() { return this.treeViewer; } @Override protected void okPressed() { result.clear(); IStructuredSelection selection = (IStructuredSelection) this.treeViewer .getSelection(); if (selection.isEmpty()) { return; } EClass infoClass = (EClass)ePackage.getEClassifier(IBasicDataEpacakgeConstant.InfoItem); EClass linkClass = (EClass)ePackage.getEClassifier(IBasicDataEpacakgeConstant.SlaveItem); EStructuralFeature refer = linkClass.getEStructuralFeature(IBasicDataEpacakgeConstant.Attr_Info_Content_Reference); String[] masterKeys = BasicDataEpackageUtil.getMasterKeyAnnotation(infoClass) ; for(Object item:selection.toArray()){ EObject obj = (EObject)item; //������������ EObject slaveItem = ePackage.getEFactoryInstance().create(linkClass); //�������ֵ for(String key:masterKeys){ EStructuralFeature source = infoClass.getEStructuralFeature(key); EStructuralFeature target = linkClass.getEStructuralFeature(key); slaveItem.eSet(target, obj.eGet(source)); } //������� slaveItem.eSet(refer, item); result.add(slaveItem); } // result = new BasicEList<Object>(values.getChildren()); super.okPressed(); } @Override public boolean close() { return super.close(); } /* * (non-Javadoc) * * @see org.eclipse.jface.dialogs.Dialog#isResizable() */ @Override protected boolean isResizable() { return true; } /** * ��ȡ��� * @return */ public List<Object> getResult(){ return result; } }