/**
* Դ�������ƣ�ForeignKeyTableViewer.java
* �������Ȩ���������ӹɷ�����˾ ��Ȩ����
* ϵͳ���ƣ�JRES Studio
* ģ�����ƣ�com.hundsun.ares.studio.jres.database.ui
* ����˵����$desc
* ����ĵ���
* ���ߣ�
*/
package com.hundsun.ares.studio.jres.database.ui.editors.dialog;
import org.apache.commons.lang.StringUtils;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.viewers.CheckboxTableViewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableItem;
import com.hundsun.ares.studio.core.IARESProject;
import com.hundsun.ares.studio.core.service.DataServiceManager;
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.IStandardField;
import com.hundsun.ares.studio.jres.model.database.TableColumn;
/**
* @author liaogc
*
*/
public class ForeignKeyTableViewer extends CheckboxTableViewer {
private TableColumn sourceTableColumn;
private IARESProject project;
/*
* (non-Javadoc)
*
* @see
* org.eclipse.jface.viewers.CheckboxTableViewer#handleSelect(org.eclipse
* .swt.events.SelectionEvent)
*/
@Override
public void handleSelect(SelectionEvent event) {
Object[] selectedList = this.getCheckedElements();
if (selectedList != null) {
for (Object object : selectedList) {
TableItem item = (TableItem) event.item;
Object data = item.getData();
if (data != object) {
setChecked(object, false);
}
}
}
TableItem item = (TableItem) event.item;
Object data = item.getData();
if(data instanceof TableColumn){
TableColumn destTableColumn =(TableColumn) data;
StringBuilder errorMessage = new StringBuilder();
if(item.getChecked()&& !vlidateType(getBusinessId(sourceTableColumn.getFieldName()),getBusinessId(destTableColumn.getFieldName()),errorMessage)){
MessageDialog.openWarning(null, "�ֶ�����", errorMessage.toString());
}
}
super.handleSelect(event);
}
/**
* @param table
*/
public ForeignKeyTableViewer(Table table, TableColumn sourceTableColumn,IARESProject project) {
super(table);
this.sourceTableColumn = sourceTableColumn;
this.project = project;
}
public static CheckboxTableViewer newCheckList(Composite parent,
TableColumn sourceTableColumn,IARESProject project, int style) {
Table table = new Table(parent, SWT.CHECK | style);
return new ForeignKeyTableViewer(table, sourceTableColumn, project);
}
private boolean vlidateType(String id, String id2,
StringBuilder errorMessage) {
IMetadataService metadataService = getMetadataService(this.project);
IBusinessDataType type1 = metadataService.getBusinessDataType(id);
IBusinessDataType type2 = metadataService.getBusinessDataType(id2);
if (type1.getName().equals(type2.getName())) {
return true;
} else {
if(!type1.getStdType().getName().equals(type2.getStdType().getName())){
errorMessage.append("�ֶ����Ͳ�һ��!");
return false;
}else if(type1.getLength() != type2.getLength()){
errorMessage.append("�ֶ����ͳ��Ȳ�һ��!");
return false;
}
}
return true;
}
private String getBusinessId(String fieldName){
IMetadataService service = getMetadataService(project);
IStandardField filed = service.getStandardField(fieldName);
return StringUtils.defaultString(filed.getDataTypeId());
}
private IMetadataService getMetadataService(IARESProject project) {
return DataServiceManager.getInstance().getService(project,
IMetadataService.class);
}
}