/**
* Դ�������ƣ�ConstraintForeignKeyCellEditor.java
* �������Ȩ���������ӹɷ�����˾ ��Ȩ����
* ϵͳ���ƣ�ARES Studio
* ģ�����ƣ�com.hundsun.ares.studio.jres.biz.stock.ui
* ����˵����$desc
* ����ĵ���
* ���ߣ�sundl
*/
package com.hundsun.ares.studio.jres.clearinghouse.celleditor;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.emf.ecore.util.EcoreUtil;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.viewers.DialogCellEditor;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import com.hundsun.ares.studio.core.IARESResource;
import com.hundsun.ares.studio.jres.database.constant.IDatabaseRefType;
import com.hundsun.ares.studio.jres.model.chouse.ConstraintModifyDetail;
import com.hundsun.ares.studio.jres.model.database.ForeignKey;
import com.hundsun.ares.studio.jres.model.database.TableColumn;
import com.hundsun.ares.studio.jres.model.database.TableResourceData;
import com.hundsun.ares.studio.jres.model.database.util.DatabaseUtil;
import com.hundsun.ares.studio.model.reference.ReferenceInfo;
import com.hundsun.ares.studio.reference.ReferenceManager;
/**
* @author sundl
*
*/
public class ConstraintForeignKeyCellEditor extends DialogCellEditor{
private IARESResource currTableResource;
private ConstraintModifyDetail constraint;
private TableResourceData tableData;
/**
* @param currTableResource
* @param constraint
* @param tableData
*/
public ConstraintForeignKeyCellEditor(Composite parent, IARESResource currTableResource, ConstraintModifyDetail constraint, TableResourceData tableData) {
super(parent);
this.currTableResource = currTableResource;
this.constraint = constraint;
this.tableData = tableData;
}
@Override
protected Object openDialogBox(Control cellEditorWindow) {
String tableName = null;
if (constraint.getForeignKey().size() > 0) {
tableName = constraint.getForeignKey().get(0).getTableName();
}
List<TableColumn> columns = new ArrayList<TableColumn>();
ReferenceManager manager = ReferenceManager.getInstance();
ReferenceInfo ref = manager.getFirstReferenceInfo(currTableResource.getARESProject(), IDatabaseRefType.Table, tableName, true);
if (ref != null) {
TableResourceData refTableData = (TableResourceData) ref.getObject();
if (refTableData != null) {
for (ForeignKey key : constraint.getForeignKey()) {
TableColumn c = DatabaseUtil.findColumn(key.getFieldName(), tableData);
if (c != null) {
columns.add(EcoreUtil.copy(c));
}
}
}
}
ForeignKeyFieldDialog dialog = new ForeignKeyFieldDialog(getControl().getShell(),
currTableResource.getARESProject(),
constraint);
if (dialog.open() == Dialog.OK) {
return dialog.getResult();
}
return null;
}
@Override
protected void updateContents(Object value) {
if (value instanceof List<?>) {
List<?> list = (List<?>) value;
int length = list.size();
String label = "";
for (int i = 0; i < length; i++) {
Object obj = list.get(i);
ForeignKey c = (ForeignKey) obj;
if (i==0)
label += c.getTableName() + "(";
label += c.getFieldName();
if (i<length-1)
label+=",";
else
label+=")";
}
super.updateContents(label);
}
}
}