package com.hundsun.ares.studio.jres.obj.ui.editor;
import java.util.EventObject;
import org.apache.commons.lang.StringUtils;
import org.eclipse.emf.common.command.Command;
import org.eclipse.emf.common.notify.Notification;
import org.eclipse.emf.transaction.RecordingCommand;
import org.eclipse.emf.transaction.TransactionalEditingDomain;
import org.eclipse.emf.transaction.TriggerListener;
import org.eclipse.jface.layout.GridDataFactory;
import org.eclipse.jface.layout.GridLayoutFactory;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Text;
import org.eclipse.ui.forms.IManagedForm;
import org.eclipse.ui.forms.widgets.FormToolkit;
import org.eclipse.ui.forms.widgets.Section;
import com.hundsun.ares.studio.biz.ARESObject;
import com.hundsun.ares.studio.biz.BizPackage;
import com.hundsun.ares.studio.biz.Parameter;
import com.hundsun.ares.studio.biz.constants.IBizResType;
import com.hundsun.ares.studio.core.model.CorePackage;
import com.hundsun.ares.studio.core.model.RevisionHistory;
import com.hundsun.ares.studio.core.model.util.RevisionHistoryUtil;
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.ui.editor.EMFFormEditor;
import com.hundsun.ares.studio.ui.editor.blocks.DataBindingFormPage;
import com.hundsun.ares.studio.ui.editor.blocks.FormWidgetUtils;
import com.hundsun.ares.studio.ui.editor.editable.JresDefaultEditableUnit;
import com.hundsun.ares.studio.ui.editor.extend.ExtensibleModelComposite;
/**
* ����༭ҳ��
* @author sundl
*/
public class ObjectPage extends DataBindingFormPage {
private Text txtObjId;
public Text txtEnglishName;
private Text txtName;
private Text txtDesc;
private ExtensibleModelComposite emc;
private TriggerListener trigger = new TriggerListener() {
@Override
protected Command trigger(TransactionalEditingDomain domain,
Notification notification) {
if (notification.getNotifier() instanceof ARESObject) {
if (BizPackage.Literals.PARAMETER__TYPE.equals(notification.getFeature())) {
// �����������������������,���Զ��Ѷ�Ӧ��java���ʹ���
final Parameter pd = (Parameter) notification.getNotifier();
final String type = pd.getType();
return new RecordingCommand(domain) {
@Override
protected void doExecute() {
IMetadataService service = DataServiceManager.getInstance().getService(
getEditor().getARESResource().getARESProject(), IMetadataService.class);
IBusinessDataType bizType = service.getBusinessDataType(type);
if (bizType != null) {
pd.setRealType(bizType.getRealType("java"));
}
}
};
}
}
return null;
}
};
public ObjectPage(EMFFormEditor editor, String id, String title) {
super(editor, id, title);
getEditingDomain().addResourceSetListener(trigger);
}
@Override
protected void doDataBingingOnControls() {
bingText(txtObjId, getInfo(), CorePackage.Literals.BASIC_RESOURCE_INFO__OBJECT_ID);
bingText(txtName, getInfo(), CorePackage.Literals.BASIC_RESOURCE_INFO__CHINESE_NAME);
bingText(txtDesc, getInfo(), CorePackage.Literals.BASIC_RESOURCE_INFO__DESCRIPTION);
bingText(txtEnglishName, getInfo(), CorePackage.Literals.BASIC_RESOURCE_INFO__NAME);
}
@Override
protected void doCreateFormContent(IManagedForm managedForm) {
Composite composite = managedForm.getForm().getBody();
FormToolkit toolkit = managedForm.getToolkit();
managedForm.getForm().setText(getTitle());
toolkit.decorateFormHeading(managedForm.getForm().getForm());
Section baseSection = createBaseInfoSection(composite, toolkit);
Section extendSection = createExtendedInfoSection(composite, toolkit);
GridLayoutFactory.swtDefaults().applyTo(composite);
GridDataFactory.fillDefaults().grab(true, false).applyTo(baseSection);
GridDataFactory.fillDefaults().grab(true, false).applyTo(extendSection);
composite.getParent().layout();
}
protected Section createBaseInfoSection(Composite composite, FormToolkit toolkit) {
Section section = toolkit.createSection(composite, FormWidgetUtils.getDefaultSectionStyles());
section.setText("������Ϣ");
Composite content = toolkit.createComposite(section, SWT.NONE);
GridDataFactory.fillDefaults().align(SWT.BEGINNING, SWT.CENTER).applyTo(content);
content.setLayout(new GridLayout(4, false));
Label lbObjectNo = toolkit.createLabel(content, "�����");
GridDataFactory.fillDefaults().applyTo(lbObjectNo);
txtObjId = toolkit.createText(content, "" ,SWT.BORDER);
GridDataFactory.fillDefaults().grab(true, false).applyTo(txtObjId);
Label lblEnglishName = toolkit.createLabel(content, "Ӣ������");
txtEnglishName = toolkit.createText(content, StringUtils.EMPTY, FormWidgetUtils.getDefaultSingleLineTextStyles()|SWT.READ_ONLY);
GridDataFactory.fillDefaults().applyTo(lblEnglishName);
GridDataFactory.fillDefaults().grab(true, false).applyTo(txtEnglishName);
Label lblName = toolkit.createLabel(content, "��������");
txtName = toolkit.createText(content, "", SWT.BORDER);
GridDataFactory.swtDefaults().applyTo(lblName);
GridDataFactory.fillDefaults().grab(true, true).hint(10, SWT.DEFAULT).applyTo(txtName);
Label lblVersion = toolkit.createLabel(content, "�汾�ţ�");
Text txtVersion = toolkit.createText(content, "", SWT.BORDER);
GridDataFactory.swtDefaults().applyTo(lblVersion);
GridDataFactory.fillDefaults().grab(true, true).applyTo(txtVersion);
Label lblUpdate = toolkit.createLabel(content, "����ʱ�䣺");
Text txtUpdate = toolkit.createText(content, "", SWT.BORDER);
GridDataFactory.swtDefaults().applyTo(lblUpdate);
GridDataFactory.fillDefaults().grab(true, true).applyTo(txtUpdate);
Composite cc = new Composite(content, SWT.NONE);
GridDataFactory.swtDefaults().grab(true, false).hint(-1, 20).span(2, 1).applyTo(cc);
{
//�ҳ����µİ汾��
RevisionHistory his = RevisionHistoryUtil.getMaxVersionHisInfo(getEditor().getARESResource().getModule() ,IBizResType.Object);
if (his != null) {
txtVersion.setText(his.getVersion());
txtUpdate.setText(his.getModifiedDate());
}else {
his = RevisionHistoryUtil.getMaxVersionHisInfo(getEditor().getARESResource().getModule());
if (his != null) {
txtVersion.setText(his.getVersion());
txtUpdate.setText(his.getModifiedDate());
}else {
String projectVersion = RevisionHistoryUtil.getProjectPropertyVersion(getEditor().getARESResource().getARESProject());
if (StringUtils.isBlank(projectVersion)) {
projectVersion = "1.0.0.1";
}
txtVersion.setText(projectVersion);
}
}
}
Label lblDesc = toolkit.createLabel(content, "˵����");
txtDesc = toolkit.createText(content, "", SWT.H_SCROLL | SWT.V_SCROLL| SWT.MULTI | SWT.WRAP | SWT.BORDER);
GridDataFactory.swtDefaults().applyTo(lblDesc);
GridDataFactory.fillDefaults().grab(true, true).hint(500, 50).span(3, 1).applyTo(txtDesc);
txtEnglishName.setEditable(false);
txtVersion.setEditable(false);
txtUpdate.setEditable(false);
txtEnglishName.setBackground(Display.getDefault().getSystemColor(SWT.COLOR_GRAY));
txtVersion.setBackground(Display.getDefault().getSystemColor(SWT.COLOR_GRAY));
txtUpdate.setBackground(Display.getDefault().getSystemColor(SWT.COLOR_GRAY));
//ֻ������
getEditableControl().addEditableUnit(new JresDefaultEditableUnit(txtObjId));
getEditableControl().addEditableUnit(new JresDefaultEditableUnit(txtName));
getEditableControl().addEditableUnit(new JresDefaultEditableUnit(txtDesc));
section.setClient(content);
return section;
}
@Override
public void infoChange() {
emc.setInput(getEditor().getARESResource(), getInfo());
super.infoChange();
}
@Override
public void commandStackChanged(EventObject event) {
super.commandStackChanged(event);
emc.refresh();
}
protected Section createExtendedInfoSection(Composite parent, FormToolkit toolkit) {
Section section = toolkit.createSection(parent, FormWidgetUtils.getDefaultSectionStyles());
section.setText("��չ��Ϣ");
emc = new ExtensibleModelComposite(section, toolkit);
emc.setProblemPool(getProblemPool());
// getEditableControl().addEditableUnit(new JresDefaultEditableUnit(emc));
section.setClient(emc);
return section;
}
}