package com.hundsun.ares.studio.jres.clearinghouse.composite;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.emf.common.command.Command;
import org.eclipse.emf.ecore.EReference;
import org.eclipse.emf.ecore.util.EcoreUtil;
import org.eclipse.emf.edit.domain.EditingDomain;
import org.eclipse.emf.transaction.RecordingCommand;
import org.eclipse.emf.transaction.TransactionalEditingDomain;
import org.eclipse.jface.layout.GridDataFactory;
import org.eclipse.jface.layout.GridLayoutFactory;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Composite;
import com.hundsun.ares.studio.core.IARESResource;
import com.hundsun.ares.studio.core.model.CoreFactory;
import com.hundsun.ares.studio.core.model.RevisionHistory;
import com.hundsun.ares.studio.jres.clearinghouse.ui.action.IWizardComposite;
import com.hundsun.ares.studio.jres.clearinghouse.ui.page.RevisionHistoryColumnsViewerBlock;
import com.hundsun.ares.studio.jres.database.ui.actions.AddNonStdFiledColumnAction;
import com.hundsun.ares.studio.jres.model.chouse.AddTableColumnModification;
import com.hundsun.ares.studio.jres.model.chouse.ChouseFactory;
import com.hundsun.ares.studio.jres.model.chouse.ChousePackage;
import com.hundsun.ares.studio.jres.model.chouse.HisTableColumn;
import com.hundsun.ares.studio.jres.model.chouse.IStock3Constant;
import com.hundsun.ares.studio.jres.model.chouse.Modification;
import com.hundsun.ares.studio.jres.model.chouse.RevisionHistoryProperty;
import com.hundsun.ares.studio.jres.model.chouse.util.StockUtils;
import com.hundsun.ares.studio.jres.model.database.DatabaseFactory;
import com.hundsun.ares.studio.jres.model.database.TableColumn;
import com.hundsun.ares.studio.jres.model.database.TableResourceData;
import com.hundsun.ares.studio.ui.editor.EMFFormEditor;
import com.hundsun.ares.studio.ui.editor.actions.ColumnViewerAddAction;
import com.hundsun.ares.studio.ui.editor.editable.ActionEditableUnit;
public class AddColumnWizardComposite extends Composite implements IWizardComposite{
private IARESResource resource;
private EditingDomain domain;
private AddTableColumnModification action = ChouseFactory.eINSTANCE.createAddTableColumnModification();
private TableResourceData table;
public AddColumnWizardComposite(Composite parent, EMFFormEditor editor, Modification modify) {
super(parent, SWT.NONE);
this.resource = editor.getARESResource();
table = (TableResourceData) editor.getInfo();
this.domain = editor.getEditingDomain();
GridLayoutFactory.fillDefaults().applyTo(this);
RevisionHistoryColumnsViewerBlock block = new RevisionHistoryColumnsViewerBlock(domain, resource) {
protected EReference getEReference() {
return ChousePackage.Literals.ADD_TABLE_COLUMN_MODIFICATION__COLUMNS;
}
protected void createAddAction() {
addAction = new ColumnViewerAddAction(
getColumnViewer(),
getEditingDomain(),
null,
getEReference(),
ChousePackage.Literals.HIS_TABLE_COLUMN);
addAction.setText("���ӱ��ֶ�");
getActionRegistry().registerAction(addAction);
getSelectionActions().add(addAction.getId());
}
/**
* �½��DZ��ֶε�Action
*/
protected void createAddNonStdAction() {
addNonStdAction = new AddNonStdFiledColumnAction(
getColumnViewer(),
getEditingDomain(),
null,
getEReference(),
ChousePackage.Literals.HIS_TABLE_COLUMN);
getActionRegistry().registerAction(addNonStdAction);
getSelectionActions().add(addNonStdAction.getId());
//ֻ������
// 2012-05-15 sundl �༭����ʹ�õ�ʱ������null
if (getEditableControl() != null) {
getEditableControl().addEditableUnit(new ActionEditableUnit(addNonStdAction));
}
}
};
block.createControl(this, editor.getToolkit());
GridDataFactory.fillDefaults().grab(true, true).applyTo(block.getControl());
domain.getCommandStack().addCommandStackListener(block);
block.setInput(action);
}
/* (non-Javadoc)
* @see com.hundsun.ares.studio.jres.clearinghouse.ui.action.IWizardComposite#getCommand()
*/
@Override
public Command getCommand() {
return new RecordingCommand((TransactionalEditingDomain) domain) {
@Override
protected void doExecute() {
List<TableColumn> addedTC = new ArrayList<TableColumn>();
List<HisTableColumn> addedHisTC = new ArrayList<HisTableColumn>();
for (HisTableColumn hisCol : action.getColumns()) {
//hisCol.getData2()ֻ�ܴ���һ��������
addedHisTC.add(EcoreUtil.copy(hisCol));
TableColumn col = DatabaseFactory.eINSTANCE.createTableColumn();
col.setColumnType(hisCol.getColumnType());
col.setDefaultValue(hisCol.getDefaultValue());
col.setMark(hisCol.getMark());
// col.setName(hisCol.getName());
col.setFieldName(hisCol.getFieldName());
col.setColumnName(hisCol.getColumnName());
col.setChineseName(hisCol.getChineseName());
col.setDescription(hisCol.getDescription());
col.setDataType(hisCol.getDataType());
col.setNullable(hisCol.isNullable());
col.setPrimaryKey(hisCol.isPrimaryKey());
col.setComments(hisCol.getComments());
col.getData().putAll(hisCol.getData());
col.getData2().putAll(hisCol.getData2());
addedTC.add(col);
}
table.getColumns().addAll(addedTC);
//��������Ϣ
AddTableColumnModification action = ChouseFactory.eINSTANCE.createAddTableColumnModification();
action.getColumns().addAll(addedHisTC);
RevisionHistory rh = CoreFactory.eINSTANCE.createRevisionHistory();
RevisionHistoryProperty p = ChouseFactory.eINSTANCE.createRevisionHistoryProperty();
p.setAction(action);
rh.setModified(StockUtils.getModificationDescription(table, action));
rh.getData2().put(IStock3Constant.HISTORY_DATA2_KEY, p);
// 2012-05-18 sundl �ļ�¼�Զ���ӵ���һ����¼
table.getHistories().add(0, rh);
};
};
}
}