package com.hundsun.ares.studio.procedure.ui.editor; import java.text.SimpleDateFormat; import java.util.Date; import org.apache.commons.lang.StringUtils; import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.emf.common.command.Command; import org.eclipse.emf.ecore.EClass; import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.edit.command.SetCommand; import org.eclipse.ui.PartInitException; import com.hundsun.ares.studio.biz.ui.editor.page.InterfacePage; import com.hundsun.ares.studio.core.ARESModelException; import com.hundsun.ares.studio.jres.database.utils.ProjectSettingUtil; import com.hundsun.ares.studio.procdure.ProcdurePackage; import com.hundsun.ares.studio.procdure.Procedure; import com.hundsun.ares.studio.procdure.constants.IProcedureResType; import com.hundsun.ares.studio.procedure.compiler.mysql.constant.IProcedureSkeletonFactoryConstantMySQL; import com.hundsun.ares.studio.procedure.compiler.oracle.constant.IProcedureSkeletonFactoryConstantOracle; import com.hundsun.ares.studio.procedure.ui.editor.page.ProcedureInterfacePage; import com.hundsun.ares.studio.procedure.ui.editor.page.ProcedurePreViewPage; import com.hundsun.ares.studio.procedure.ui.editor.page.ProcedurePreviewUpdater; import com.hundsun.ares.studio.procedure.ui.editor.page.ProcedureRelatedInfoPage; import com.hundsun.ares.studio.procedure.ui.editor.page.ProcedureTextEditor; import com.hundsun.ares.studio.ui.CommonElementContentProvider; import com.hundsun.ares.studio.ui.CommonElementLabelProvider; import com.hundsun.ares.studio.ui.editor.EMFFormEditor; import com.hundsun.ares.studio.ui.editor.blocks.RevisionHistoryListPage; import com.hundsun.ares.studio.ui.editor.text.TextEditorInput; import com.hundsun.ares.studio.ui.editor.textbase.ITextBased; import com.hundsun.ares.studio.ui.editor.textbase.TextBasedEditorInput; public class ProcedureEditor extends EMFFormEditor { private InterfacePage interfacePage; private ProcedureTextEditor sourcePage; private ProcedurePreViewPage preViewPage; private int index; static CommonElementContentProvider cp = new CommonElementContentProvider(); static CommonElementLabelProvider provider = new CommonElementLabelProvider(cp); /* (non-Javadoc) * @see com.hundsun.ares.studio.jres.ui.form.EMFFormEditor#getInfoClass() */ @Override protected EClass getInfoClass() { return ProcdurePackage.Literals.PROCEDURE; } /* (non-Javadoc) * @see org.eclipse.ui.forms.editor.FormEditor#addPages() */ @Override protected void addPages() { interfacePage = new ProcedureInterfacePage(null, this, "interface", "�ӿ�"); try { //������Ϣ addPage(interfacePage); // α����ҳ�� final Procedure procedure = (Procedure) getInfo(); sourcePage = new ProcedureTextEditor(getARESResource()); TextBasedEditorInput input = new TextBasedEditorInput(new ITextBased() { @Override public void setText(String text) { Command command = SetCommand.create(getEditingDomain(), procedure, ProcdurePackage.Literals.PROCEDURE__PSEUDO_CODE, text); getEditingDomain().getCommandStack().execute(command); } @Override public String getText() { return procedure.getPseudoCode(); } }, getARESResource()); index = addPage(sourcePage, input); sourcePage.setEditor(this); setPageText(index, "ʵ��-α����"); //��չҳ�� createExtendPage(); //Ԥ��ҳ�� addPage(preViewPage=new ProcedurePreViewPage(this, "preview", "Ԥ��"), new TextEditorInput()); //������Ϣ addPage(new ProcedureRelatedInfoPage(this, "relatedInfo", "������Ϣ")); //�޸ļ�¼ addPage(new RevisionHistoryListPage(this, "revisionHistory", "�޶���Ϣ")); String databaseType = ProjectSettingUtil.getDatabaseType(getARESResource().getARESProject()); if(databaseType.equalsIgnoreCase(ProjectSettingUtil.MYSQL)){ addPageChangedListener(new ProcedurePreviewUpdater(IProcedureSkeletonFactoryConstantMySQL.SKELETONTYPE_CRES_PROCEDURE_MYSQL,databaseType)); } else{ addPageChangedListener(new ProcedurePreviewUpdater(IProcedureSkeletonFactoryConstantOracle.SKELETONTYPE_CRES_PROCEDURE_ORACLE,databaseType)); } } catch (PartInitException e) { e.printStackTrace(); } } /** * ���洴��ʱ�� * */ private void saveCreateDate() { SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd"); String date = format.format(new Date()); EObject info = getInfo(); String value = ""; if(null != info && info instanceof Procedure) { Procedure pro = (Procedure)info; String oldCreateDate = pro.getCreateDate(); if(StringUtils.startsWith(oldCreateDate, date)) { int modifyNum = Integer.parseInt(oldCreateDate.substring(8)); value = date + (modifyNum+1); }else { value = date + 1; } } Command command = new SetCommand(getEditingDomain(), getInfo(), ProcdurePackage.Literals.PROCEDURE__CREATE_DATE, value); getEditingDomain().getCommandStack().execute(command); } @Override protected void handleBeforeSave() { sourcePage.doSave(new NullProgressMonitor()); setPartName(getEditorTitle()); saveCreateDate(); } @Override protected void handleAfterSave() { setPartName(getEditorTitle()); } @Override protected String getEditorTitle() { String partName = provider.getText(getARESResource()); if (isReadOnly()) { partName += "(ֻ��)"; } return partName; } @Override public boolean isDirty() { if (sourcePage.isDirty()) { return true; } return super.isDirty(); } /* (non-Javadoc) * @see org.eclipse.ui.forms.editor.FormEditor#pageChange(int) */ @Override protected void pageChange(int newPageIndex) { if(newPageIndex!=2){//����Ԥ���༭�༭��λ����Ϣ preViewPage.saveLocation(); } super.pageChange(newPageIndex); if (newPageIndex==2){//�ָ�Ԥ���༭�༭��λ�� preViewPage.restoreLocation(); } } }