package com.hundsun.ares.studio.atom.ui.module;
import java.util.List;
import org.apache.commons.lang.StringUtils;
import org.eclipse.core.resources.IFolder;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.emf.databinding.edit.EMFEditObservables;
import org.eclipse.emf.databinding.edit.EditingDomainEObjectObservableValue;
import org.eclipse.emf.ecore.EClass;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.EStructuralFeature;
import org.eclipse.emf.edit.domain.EditingDomain;
import org.eclipse.jface.databinding.swt.SWTObservables;
import org.eclipse.jface.layout.GridDataFactory;
import org.eclipse.jface.layout.GridLayoutFactory;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Combo;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Text;
import org.eclipse.ui.forms.IManagedForm;
import org.eclipse.ui.forms.editor.FormEditor;
import org.eclipse.ui.forms.widgets.FormToolkit;
import org.eclipse.ui.forms.widgets.Section;
import com.hundsun.ares.studio.atom.constants.IAtomConstants;
import com.hundsun.ares.studio.core.model.ModuleProperty;
import com.hundsun.ares.studio.cres.constant.ICresUIConstant;
import com.hundsun.ares.studio.cres.extend.core.constants.ICresExtendConstants;
import com.hundsun.ares.studio.cres.extend.cresextend.CresextendPackage;
import com.hundsun.ares.studio.jres.metadata.constant.IMetadataRefType;
import com.hundsun.ares.studio.jres.model.database.oracle.util.OracleDataBaseUtil;
import com.hundsun.ares.studio.jres.model.metadata.BizPropertyConfig;
import com.hundsun.ares.studio.model.reference.ReferenceInfo;
import com.hundsun.ares.studio.reference.ReferenceManager;
import com.hundsun.ares.studio.ui.editor.blocks.EMFExtendSectionScrolledFormPage;
public class CresModulePropertyPage extends EMFExtendSectionScrolledFormPage<ModuleProperty> {
private Text txtSubSysID;
Combo txtDatabase;
private Text txtDBConn;
private CresModuleDependsBlock block;
/**
* @param editor
* @param id
* @param title
*/
public CresModulePropertyPage(FormEditor editor, String id, String title) {
super(editor, id, title);
}
/* (non-Javadoc)
* @see com.hundsun.ares.studio.ui.editor.blocks.EMFExtendSectionScrolledFormPage#getEClass()
*/
@Override
protected EClass getEClass() {
return CresextendPackage.Literals.CRES_MOUDLE_EXTEND_PROPERTY;
}
/* (non-Javadoc)
* @see com.hundsun.ares.studio.ui.editor.blocks.EMFExtendSectionScrolledFormPage#getMapKey()
*/
@Override
protected String getMapKey() {
return ICresExtendConstants.CRES_EXTEND_MOUDLE_PROPERTY;
}
/* (non-Javadoc)
* @see com.hundsun.ares.studio.ui.page.ExtendSectionScrolledFormPage#createSections(org.eclipse.ui.forms.IManagedForm)
*/
@Override
protected void createSections(IManagedForm managedForm) {
FormToolkit toolkit = managedForm.getToolkit();
createBaseInfoSection(managedForm, toolkit);
if(getResource().getRoot().getType().equals(IAtomConstants.ATOM_ROOT_TYPE)){
//ԭ��ģ�������ʾҵ�����section ����ģ����²���ʾ
createBizPropertyConfigSection(managedForm, toolkit);
}
createMoudleDependsSection(managedForm, toolkit);
}
/**
* ҵ�����
* @param managedForm
* @param toolkit
*/
private void createBizPropertyConfigSection(IManagedForm managedForm,
FormToolkit toolkit) {
Section sectionBizConfig = createSectionWithTitle(managedForm.getForm()
.getBody(), toolkit, "ҵ�����", true);
final Composite client = toolkit.createComposite(sectionBizConfig, SWT.NONE);
client.setLayout(new GridLayout(10, false));
//��ȡҵ���������Ϣ
List<ReferenceInfo> infos = ReferenceManager.getInstance().getReferenceInfos(getARESProject(), IMetadataRefType.BizPropertyConfig, true);
//����𣬶�Ӧ��ֵΪ��ֵ""
Button btnNoConfig = toolkit.createButton(client, "�����", SWT.RADIO);
GridDataFactory.fillDefaults().align(SWT.LEFT, SWT.CENTER).grab(false, false).span(1, 1).applyTo(btnNoConfig);
//��
getBindingContext().bindValue(SWTObservables.observeSelection(btnNoConfig),
new BizPropertyConfigObservableValue(getEditingDomain(), getModel(), CresextendPackage.Literals.CRES_MOUDLE_EXTEND_PROPERTY__BIZ_PROPERTY_CONFIG,""));
for(ReferenceInfo info : infos){
//ÿһ��ҵ�����ö�Ӧһ��radioButton
BizPropertyConfig config = (BizPropertyConfig) info.getObject();
//��������ʾ����ҵ�����õ�������
Button btnConfig = toolkit.createButton(client, config.getChineseName(), SWT.RADIO);
GridDataFactory.fillDefaults().align(SWT.LEFT, SWT.CENTER).grab(false, false).span(1, 1).applyTo(btnConfig);
//��ֵΪҵ�����õı��
getBindingContext().bindValue(SWTObservables.observeSelection(btnConfig),
new BizPropertyConfigObservableValue(getEditingDomain(), getModel(), CresextendPackage.Literals.CRES_MOUDLE_EXTEND_PROPERTY__BIZ_PROPERTY_CONFIG,config.getName()));
}
sectionBizConfig.setClient(client);
}
/**
* @param managedForm
* @param toolkit
*/
private void createMoudleDependsSection(IManagedForm managedForm,
FormToolkit toolkit) {
Section section = createSectionWithTitle(managedForm.getForm()
.getBody(), toolkit, "ģ������", true);
final Composite content = toolkit.createComposite(section, SWT.NONE);
GridLayoutFactory.fillDefaults().applyTo(content);
Composite comp = toolkit.createComposite(content, SWT.NONE);
GridDataFactory.fillDefaults().indent(0, 0).grab(true, true).applyTo(comp);
comp.setLayout(new FillLayout());
block = new CresModuleDependsBlock(comp,
CresextendPackage.Literals.CRES_MOUDLE_EXTEND_PROPERTY__DEPENDS,
getEditingDomain(), resource, null);
block.createControl(comp, toolkit);
block.setInput(getInfo());
addPropertyListener(block);
getEditingDomain().getCommandStack().addCommandStackListener(block);
section.setClient(content);
toolkit.paintBordersFor(content);
}
/**
* ����������Ϣ����
* @param managedForm
* @param toolkit
*/
private void createBaseInfoSection(IManagedForm managedForm,
FormToolkit toolkit) {
Section sectionBaseInfo = createSectionWithTitle(managedForm.getForm()
.getBody(), toolkit, "������Ϣ", true);
final Composite baseInfo = toolkit.createComposite(sectionBaseInfo, SWT.NONE);
Label lbSubSysID = toolkit.createLabel(baseInfo, "��ϵͳ��ţ�", SWT.NONE);
txtSubSysID = toolkit.createText(baseInfo, "", SWT.BORDER);
Label lbDBName = toolkit.createLabel(baseInfo, "���ݿ⣺", SWT.NONE);
txtDatabase = new Combo(baseInfo, SWT.NONE);
{
txtDatabase.setItems(OracleDataBaseUtil.getDataBaseName(getARESProject(),true));
}
Label lbDBConn = toolkit.createLabel(baseInfo, "���ݿ����ӣ�", SWT.NONE);
txtDBConn = toolkit.createText(baseInfo, "", SWT.BORDER);
//����
baseInfo.setLayout(new GridLayout(2, false));
GridDataFactory.fillDefaults().align(SWT.LEFT, SWT.CENTER).grab(false, false).span(1, 1).applyTo(lbSubSysID);
GridDataFactory.fillDefaults().align(SWT.FILL, SWT.CENTER).grab(true, false).span(1, 1).applyTo(txtSubSysID);
GridDataFactory.fillDefaults().align(SWT.LEFT, SWT.CENTER).grab(false, false).span(1, 1).applyTo(lbDBName);
GridDataFactory.fillDefaults().align(SWT.FILL, SWT.CENTER).grab(true, false).span(1, 1).applyTo(txtDatabase);
GridDataFactory.fillDefaults().align(SWT.LEFT, SWT.CENTER).grab(false, false).span(1, 1).applyTo(lbDBConn);
GridDataFactory.fillDefaults().align(SWT.FILL, SWT.CENTER).grab(true, false).span(1, 1).applyTo(txtDBConn);
//��ģ�鲻��ʾ
if(getResource().getModule().getParent().getElementName().equals(ICresUIConstant.LOGIC_ROOT_NAME)){
sectionBaseInfo.setBounds(0, 0, 0, 0);
sectionBaseInfo.setVisible(false);
}else {
sectionBaseInfo.setClient(baseInfo);
toolkit.paintBordersFor(baseInfo);
}
databinding();
}
/**
* ���ݰ�
*/
private void databinding() {
//��ϵͳ���
getBindingContext().bindValue(SWTObservables.observeText(txtSubSysID, SWT.Modify),
EMFEditObservables.observeValue(getEditingDomain(), getModel(),
CresextendPackage.Literals.CRES_MOUDLE_EXTEND_PROPERTY__SUB_SYS_ID));
//���ݿ�
// getBindingContext().bindValue(SWTObservables.observeText(txtDBName, SWT.Modify),
// EMFEditObservables.observeValue(getEditingDomain(), getModel(),
// CresextendPackage.Literals.CRES_MOUDLE_EXTEND_PROPERTY__DATA_BASE_NAME));
getBindingContext().bindValue(
SWTObservables.observeSelection(txtDatabase),
EMFEditObservables.observeValue(getEditingDomain(), getModel(),
CresextendPackage.Literals.CRES_MOUDLE_EXTEND_PROPERTY__DATA_BASE_NAME));
//���ݿ�����
getBindingContext().bindValue(SWTObservables.observeText(txtDBConn, SWT.Modify),
EMFEditObservables.observeValue(getEditingDomain(), getModel(),
CresextendPackage.Literals.CRES_MOUDLE_EXTEND_PROPERTY__DATA_BASE_CONN));
}
/* (non-Javadoc)
* @see com.hundsun.ares.studio.ui.page.ExtendPageWithMyDirtySystem#shouldLoad()
*/
@Override
public boolean shouldLoad() {
IProject project = getARESProject().getProject();
try {
if(project.hasNature(ICresExtendConstants.CRES_PROJECT_NATURE)){//cres����
//ԭ�ӡ�����ģ��
IFolder rootFolder = (IFolder)resource.getModule().getParent().getResource();
if(StringUtils.equalsIgnoreCase("atom", rootFolder.getName()) ||
StringUtils.equalsIgnoreCase("logic", rootFolder.getName())){
return true;
}
return false;
}
} catch (CoreException e) {
e.printStackTrace();
return false;
}
return false;
}
//��ҵ���������ֵ��radioButton
private class BizPropertyConfigObservableValue extends EditingDomainEObjectObservableValue{
String value;
public BizPropertyConfigObservableValue(EditingDomain domain,
EObject eObject, EStructuralFeature eStructuralFeature,String value) {
super(domain, eObject, eStructuralFeature);
this.value = value;
}
@Override
protected Object doGetValue() {
Object value = super.doGetValue();
//�����ȡ��ֵ��button��Ӧ��ֵ��ȣ����ʾ��button��ѡ��
if(value.equals(this.value)){
return true;
}
return false;
}
@Override
protected void doSetValue(Object value) {
if(value instanceof Boolean){
if((Boolean) value){
//valueΪtrue����ʾѡ���˸�button������button��Ӧ��ֵ���õ�ģ����
super.doSetValue(this.value);
}
}
}
}
}