/** * Դ�������ƣ�TableForeignKeyColumnCellEditor.java * �������Ȩ���������ӹɷ����޹�˾ ��Ȩ���� * ϵͳ���ƣ�JRES Studio * ģ�����ƣ�com.hundsun.ares.studio.jres.database.ui * ����˵����$desc * ����ĵ��� * ���ߣ� */ package com.hundsun.ares.studio.jres.database.ui.editors.celleditor; import java.util.ArrayList; import java.util.Collection; import java.util.List; import org.eclipse.emf.common.util.EList; import org.eclipse.emf.ecore.util.EObjectContainmentEList; import org.eclipse.emf.ecore.util.EcoreUtil; import org.eclipse.jface.viewers.ColumnViewer; import org.eclipse.jface.viewers.DialogCellEditor; import org.eclipse.jface.window.Window; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import com.hundsun.ares.studio.core.ARESModelException; import com.hundsun.ares.studio.core.IARESBundle; import com.hundsun.ares.studio.core.IARESProject; import com.hundsun.ares.studio.core.IARESResource; import com.hundsun.ares.studio.core.util.ARESElementUtil; import com.hundsun.ares.studio.jres.database.constant.IDatabaseResType; import com.hundsun.ares.studio.jres.database.ui.editors.dialog.ForeignKeyFieldSelectDialog; import com.hundsun.ares.studio.jres.model.database.ForeignKey; import com.hundsun.ares.studio.jres.model.database.TableKey; import com.hundsun.ares.studio.jres.model.database.TableResourceData; /**�⽡CellEditor * @author liaogc * */ public class TableForeignKeyColumnCellEditor extends DialogCellEditor { private IARESResource resource;//��ǰ�༭����Դ private Collection<ForeignKey> foreignKeies = new ArrayList<ForeignKey>(); private TableKey tablekey;//Ҫ�༭���� ForeignKeyFieldSelectDialog dialog; int returnCode; public TableForeignKeyColumnCellEditor(ColumnViewer columnViewer, IARESResource resource, String fromText, String toText) { super((Composite) columnViewer.getControl()); this.resource = resource; } @Override protected Object doGetValue() { return foreignKeies; } @Override protected void doSetValue(Object value) { if (returnCode == Window.CANCEL) { setValueValid(false); }else { setValueValid(true); } if (value instanceof EObjectContainmentEList) { tablekey = (TableKey) ((EObjectContainmentEList) value).getEObject(); } foreignKeies.clear(); foreignKeies.addAll(EcoreUtil.copyAll((Collection<ForeignKey>) value)); } /* * (non-Javadoc) * * @see * org.eclipse.jface.viewers.DialogCellEditor#openDialogBox(org.eclipse. * swt.widgets.Control) */ @Override protected Object openDialogBox(Control cellEditorWindow) { dialog = new ForeignKeyFieldSelectDialog( cellEditorWindow.getShell(), resource.getARESProject(), tablekey); returnCode = dialog.open(); Object obj = (returnCode == Window.OK) ? dialog.getResult() : null; if(obj == null){ setValueValid(false); } return obj; } /* (non-Javadoc) * @see org.eclipse.jface.viewers.DialogCellEditor#createControl(org.eclipse.swt.widgets.Composite) */ @Override protected Control createControl(Composite parent) { Control control = super.createControl(parent); if (returnCode == Window.CANCEL) { setValueValid(false); }else { setValueValid(true); } return control; } /** * ����⽡��Ӧ�ı��·�� * @return */ private String getSelectedForeginKeyTableFullPath() { TableResourceData trd = getCurrTableResourceData(); if (trd != null) { if (tablekey != null) { EList<ForeignKey> foreignKeies = tablekey.getForeignKey(); if (foreignKeies.size() > 0) return foreignKeies.get(0).getTableName(); } } return null; } /** * ����Ѿ����úõ�����ֶ� * * @return */ private List<String> getSelectedForeginKeyFeilds() { TableResourceData trd = getCurrTableResourceData(); List<String> fields = new ArrayList<String>(); if (trd != null) { if (tablekey != null) { EList<ForeignKey> foreignKeies = tablekey.getForeignKey(); for (ForeignKey fk : foreignKeies) { fields.add(fk.getFieldName()); } } } return fields; } /** * ��õ�ǰҪ��������ı����Դ * * @return */ private TableResourceData getCurrTableResourceData() { try { return resource.getInfo(TableResourceData.class); } catch (ARESModelException e) { e.printStackTrace(); } return null; } /** * ��������Ӧ����Ӧ��ģ�� * * @return */ private TableResourceData getForgienKeyTableResourceData() { try { IARESBundle[] bundles = ARESElementUtil.getRefARESProjects(getARESProject()); for (IARESBundle bundle : bundles) { IARESResource resource; resource = bundle.findResource( getSelectedForeginKeyTableFullPath(), IDatabaseResType.Table); if (resource != null) { return resource.getInfo(TableResourceData.class); } } } catch (ARESModelException e) { e.printStackTrace(); } return null; } private IARESProject getARESProject() { IARESResource res = this.resource; if (res != null) { return res.getARESProject(); } return null; } }