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.EObject;
import org.eclipse.jface.viewers.ColumnViewer;
import org.eclipse.jface.viewers.DialogCellEditor;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.LabelProvider;
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.IARESResource;
import com.hundsun.ares.studio.jres.database.ui.editors.dialog.SelectDialog;
import com.hundsun.ares.studio.jres.model.database.TableColumn;
import com.hundsun.ares.studio.jres.model.database.TableKey;
import com.hundsun.ares.studio.jres.model.database.TableResourceData;
public class TableKeyColumnsCellEditor extends DialogCellEditor {
ColumnViewer viewer;
IARESResource resource;
List<String> columns = new ArrayList<String>();
TableKey tableKey;
private int returnCode = Window.CANCEL;
/**
* @param viewer
* @param resource
*/
public TableKeyColumnsCellEditor(ColumnViewer viewer, IARESResource resource) {
super((Composite) viewer.getControl());
this.viewer = viewer;
this.resource = resource;
}
@Override
protected Object doGetValue() {
return columns;
}
@Override
protected void doSetValue(Object value) {
if (returnCode == Window.CANCEL) {
setValueValid(false);
}else {
setValueValid(true);
}
Object obj = ((IStructuredSelection)viewer.getSelection()).getFirstElement();
if(obj != null && obj instanceof TableKey){
tableKey = (TableKey)obj;
}
if(value instanceof Collection){
columns.clear();
columns.addAll((Collection<String>) value);
}
}
protected List<TableColumn> getCellEditorInput(){
List<TableColumn> tableColumns = new ArrayList<TableColumn>();
TableResourceData tableResourceData = null;
EObject obj = tableKey.eContainer();
if(obj != null && obj instanceof TableResourceData){
tableResourceData = (TableResourceData)obj;
}else{
try {
tableResourceData = resource.getInfo(TableResourceData.class);
} catch (ARESModelException e) {
e.printStackTrace();
}
}
for(TableColumn col : tableResourceData.getColumns()){
tableColumns.add(col);
}
return tableColumns;
}
@Override
protected Object openDialogBox(Control cellEditorWindow) {
EList<TableColumn> keyColumns = tableKey.getColumns();
SelectDialog dialog = new SelectDialog(cellEditorWindow.getShell(), "ѡ����ֶ�", getCellEditorInput(),keyColumns ,new LabelProvider(){
@Override
public String getText(Object element) {
if(element instanceof TableColumn){
return ((TableColumn)element).getName();
}
return super.getText(element);
}
});
returnCode = dialog.open();
Object result = (returnCode == Window.OK) ? dialog.getResult() : null;
if(result == null){
setValueValid(false);
}
return result;
}
@Override
protected Control createControl(Composite parent) {
Control control = super.createControl(parent);
if (returnCode == Window.CANCEL) {
setValueValid(false);
}else {
setValueValid(true);
}
return control;
}
}