package com.hundsun.ares.studio.jres.database.ui.extend; import java.util.ArrayList; import java.util.Arrays; import java.util.Iterator; import java.util.List; import org.apache.commons.lang.ObjectUtils; import org.apache.commons.lang.StringUtils; import org.eclipse.core.databinding.UpdateListStrategy; import org.eclipse.core.databinding.UpdateValueStrategy; import org.eclipse.core.databinding.observable.Observables; 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.viewers.ILabelProvider; import org.eclipse.jface.viewers.LabelProvider; import org.eclipse.swt.SWT; import org.eclipse.swt.events.ModifyEvent; import org.eclipse.swt.events.ModifyListener; 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.core.model.ModuleProperty; import com.hundsun.ares.studio.jres.database.oracle.constant.IOracleRefType; import com.hundsun.ares.studio.jres.metadata.constant.IMetadataRefType; import com.hundsun.ares.studio.jres.model.chouse.ChousePackage; import com.hundsun.ares.studio.jres.model.database.oracle.OraclePackage; import com.hundsun.ares.studio.jres.model.database.oracle.TableSpaceRelation; import com.hundsun.ares.studio.jres.model.database.oracle.table_type; 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.databinding.IndexToItemsConverter; import com.hundsun.ares.studio.ui.databinding.ItemsToIndexConverter; import com.hundsun.ares.studio.ui.databinding.LabelProviderConverter; import com.hundsun.ares.studio.ui.editor.blocks.EMFExtendSectionScrolledFormPage; public class ModuleDatabasePropertyPage extends EMFExtendSectionScrolledFormPage<ModuleProperty> { public static final String KEY = "DatabaseModuleExtensibleProperty"; private Combo txtTableType; private Combo txtDatabase; private Text txtIndexTS; private Text txthis; private Text txthisindex; private Text txtfile; private Text txtfileindex; private Text txtre; private Text txtcl; private Text txtclindex; private Text txtsf; private Text txtsn; private Text txtsd; /** * @param editor * @param id * @param title */ public ModuleDatabasePropertyPage(FormEditor editor, String id, String title) { super(editor, id, title); } @Override protected EClass getEClass() { return OraclePackage.Literals.DATABASE_MODULE_EXTENSIBLE_PROPERTY; } @Override protected String getMapKey() { return KEY; } /* (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); createBizPropertyConfigSection(managedForm, toolkit); } /** * ����������Ϣ���� * @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); txtTableType = new Combo(baseInfo, SWT.BORDER | SWT.READ_ONLY); { txtTableType.setItems(OracleDataBaseUtil.getDataBaseName(getARESProject(),true)); } Label lbDBName = toolkit.createLabel(baseInfo, "�������ݿ⣺", SWT.NONE); txtDatabase = new Combo(baseInfo, SWT.BORDER); { txtDatabase.setItems(OracleDataBaseUtil.getDataBaseName(getARESProject(),true)); } txtDatabase.addModifyListener(new ModifyListener() { @Override public void modifyText(ModifyEvent e) { ReferenceInfo info = ReferenceManager.getInstance().getFirstReferenceInfo(getARESProject(), IOracleRefType.Space, txtDatabase.getText(), true); if (info != null) { txtIndexTS.setText(getSpaceText(OraclePackage.Literals.TABLE_SPACE_RELATION__INDEX_SPACE)); txthis.setText(getSpaceText(ChousePackage.Literals.TABLE_SPACE_RELATION_PROPERTY__HIS_SPACE)); txthisindex.setText(getSpaceText(ChousePackage.Literals.TABLE_SPACE_RELATION_PROPERTY__HIS_INDEX_SPACE)); txtfile.setText(getSpaceText(ChousePackage.Literals.TABLE_SPACE_RELATION_PROPERTY__FILE_SPACE)); txtfileindex.setText(getSpaceText(ChousePackage.Literals.TABLE_SPACE_RELATION_PROPERTY__FILE_INDEX_SPACE)); txtre.setText(getSpaceText(ChousePackage.Literals.TABLE_SPACE_PROPERTY__REDU_TABLE)); txtcl.setText(getSpaceText(ChousePackage.Literals.TABLE_SPACE_PROPERTY__CHEAR_TABLE)); txtclindex.setText(getSpaceText(ChousePackage.Literals.TABLE_SPACE_PROPERTY__CHEAR_TABLE_INDEX)); }else { txtIndexTS.setText(StringUtils.EMPTY); txthis.setText(StringUtils.EMPTY); txthisindex.setText(StringUtils.EMPTY); txtfile.setText(StringUtils.EMPTY); txtfileindex.setText(StringUtils.EMPTY); txtre.setText(StringUtils.EMPTY); txtcl.setText(StringUtils.EMPTY); txtclindex.setText(StringUtils.EMPTY); } } }); Label lbDBConn = toolkit.createLabel(baseInfo, "������ռ䣺", SWT.NONE); txtIndexTS = toolkit.createText(baseInfo, "", SWT.BORDER | SWT.READ_ONLY); Label lbhis = toolkit.createLabel(baseInfo, "��ʷ��ռ䣺", SWT.NONE); txthis = toolkit.createText(baseInfo, "", SWT.BORDER | SWT.READ_ONLY); Label lbhisindex = toolkit.createLabel(baseInfo, "��ʷ������ռ䣺", SWT.NONE); txthisindex = toolkit.createText(baseInfo, "", SWT.BORDER | SWT.READ_ONLY); Label lbfile = toolkit.createLabel(baseInfo, "�鵵��ռ䣺", SWT.NONE); txtfile = toolkit.createText(baseInfo, "", SWT.BORDER | SWT.READ_ONLY); Label lbfileindex = toolkit.createLabel(baseInfo, "�鵵������ռ䣺", SWT.NONE ); txtfileindex = toolkit.createText(baseInfo, "", SWT.BORDER | SWT.READ_ONLY); Label lbre = toolkit.createLabel(baseInfo, "�����ռ䣺", SWT.NONE); txtre = toolkit.createText(baseInfo, "", SWT.BORDER | SWT.READ_ONLY); Label lbcl = toolkit.createLabel(baseInfo, "�����ռ䣺", SWT.NONE); txtcl = toolkit.createText(baseInfo, "", SWT.BORDER | SWT.READ_ONLY); Label lbclindex = toolkit.createLabel(baseInfo, "����������ռ䣺", SWT.NONE); txtclindex = toolkit.createText(baseInfo, "", SWT.BORDER | SWT.READ_ONLY); Label lbsf = toolkit.createLabel(baseInfo, "������ֶΣ�", SWT.NONE); txtsf = toolkit.createText(baseInfo, "", SWT.BORDER); Label lbsn = toolkit.createLabel(baseInfo, "����������", SWT.NONE); txtsn = toolkit.createText(baseInfo, "", SWT.BORDER); Label lbsd = toolkit.createLabel(baseInfo, "������ʼ���ڣ�", SWT.NONE); txtsd = toolkit.createText(baseInfo, "", SWT.BORDER ); //���� baseInfo.setLayout(new GridLayout(2, false)); // GridDataFactory.fillDefaults().grab(true, true).applyTo(baseInfo); 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(txtTableType); 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(txtIndexTS); GridDataFactory.fillDefaults().align(SWT.LEFT, SWT.CENTER).grab(false, false).span(1, 1).applyTo(lbhis); GridDataFactory.fillDefaults().align(SWT.FILL, SWT.CENTER).grab(true, false).span(1, 1).applyTo(txthis); GridDataFactory.fillDefaults().align(SWT.LEFT, SWT.CENTER).grab(false, false).span(1, 1).applyTo(lbhisindex); GridDataFactory.fillDefaults().align(SWT.FILL, SWT.CENTER).grab(true, false).span(1, 1).applyTo(txthisindex); GridDataFactory.fillDefaults().align(SWT.LEFT, SWT.CENTER).grab(false, false).span(1, 1).applyTo(lbfile); GridDataFactory.fillDefaults().align(SWT.FILL, SWT.CENTER).grab(true, false).span(1, 1).applyTo(txtfile); GridDataFactory.fillDefaults().align(SWT.LEFT, SWT.CENTER).grab(false, false).span(1, 1).applyTo(lbfileindex); GridDataFactory.fillDefaults().align(SWT.FILL, SWT.CENTER).grab(true, false).span(1, 1).applyTo(txtfileindex); GridDataFactory.fillDefaults().align(SWT.LEFT, SWT.CENTER).grab(false, false).span(1, 1).applyTo(lbre); GridDataFactory.fillDefaults().align(SWT.FILL, SWT.CENTER).grab(true, false).span(1, 1).applyTo(txtre); GridDataFactory.fillDefaults().align(SWT.LEFT, SWT.CENTER).grab(false, false).span(1, 1).applyTo(lbcl); GridDataFactory.fillDefaults().align(SWT.FILL, SWT.CENTER).grab(true, false).span(1, 1).applyTo(txtcl); GridDataFactory.fillDefaults().align(SWT.LEFT, SWT.CENTER).grab(false, false).span(1, 1).applyTo(lbclindex); GridDataFactory.fillDefaults().align(SWT.FILL, SWT.CENTER).grab(true, false).span(1, 1).applyTo(txtclindex); GridDataFactory.fillDefaults().align(SWT.LEFT, SWT.CENTER).grab(false, false).span(1, 1).applyTo(lbsf); GridDataFactory.fillDefaults().align(SWT.FILL, SWT.CENTER).grab(true, false).span(1, 1).applyTo(txtsf); GridDataFactory.fillDefaults().align(SWT.LEFT, SWT.CENTER).grab(false, false).span(1, 1).applyTo(lbsn); GridDataFactory.fillDefaults().align(SWT.FILL, SWT.CENTER).grab(true, false).span(1, 1).applyTo(txtsn); GridDataFactory.fillDefaults().align(SWT.LEFT, SWT.CENTER).grab(false, false).span(1, 1).applyTo(lbsd); GridDataFactory.fillDefaults().align(SWT.FILL, SWT.CENTER).grab(true, false).span(1, 1).applyTo(txtsd); sectionBaseInfo.setClient(baseInfo); toolkit.paintBordersFor(baseInfo); getEditControls().add(txtTableType); getEditControls().add(txtDatabase); getEditControls().add(txtIndexTS); getEditControls().add(txthis); getEditControls().add(txthisindex); getEditControls().add(txtfile); getEditControls().add(txtfileindex); getEditControls().add(txtre); getEditControls().add(txtcl); getEditControls().add(txtclindex); getEditControls().add(txtsf); getEditControls().add(txtsn); getEditControls().add(txtsd); databinding(); } private String getSpaceText( EStructuralFeature feature) { String space = StringUtils.defaultString(txtDatabase.getText()); ReferenceInfo info = ReferenceManager.getInstance().getFirstReferenceInfo(getARESProject(),IOracleRefType.SpaceRelation ,space, true); if(info != null){ TableSpaceRelation obj = (TableSpaceRelation) info.getObject(); if (feature == OraclePackage.Literals.TABLE_SPACE_RELATION__INDEX_SPACE) { return obj.getIndexSpace(); } if (feature == OraclePackage.Literals.TABLE_SPACE_RELATION__MAIN_SPACE) { return obj.getMainSpace(); } if (obj != null) { for(Iterator<String> it = obj.getData2().keySet().iterator();it.hasNext();){ String key = it.next(); if (obj.getData2().get(key).eClass().getEAllStructuralFeatures().contains(feature)) { Object o = obj.getData2().get(key).eGet(feature); return o == null ? StringUtils.EMPTY : o.toString(); } } } } return StringUtils.EMPTY; } /** * ҵ����� * @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(), OraclePackage.Literals.DATABASE_MODULE_EXTENSIBLE_PROPERTY__BIZ_PKG,"")); 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(), OraclePackage.Literals.DATABASE_MODULE_EXTENSIBLE_PROPERTY__BIZ_PKG, config.getName())); } sectionBizConfig.setClient(client); } //��ҵ���������ֵ��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); } } } } /** * ���ݰ� */ private void databinding() { List<String> items = new ArrayList<String>(); List<ReferenceInfo> refs = ReferenceManager.getInstance().getReferenceInfos(getARESProject(),IOracleRefType.Space , true); for(ReferenceInfo info : refs){ items.add(info.getRefName()); } bingCombo(txtDatabase, items.toArray(new String[0]) , new LabelProvider(), getModel(), OraclePackage.Literals.DATABASE_MODULE_EXTENSIBLE_PROPERTY__SPACE); bingCombo(txtTableType, new table_type[]{table_type.COMMON,table_type.TEMP_NO_VALUE,table_type.TEMP_WITH_VALUE} , new LabelProvider(){ @Override public String getText(Object element) { table_type type = (table_type)element; if(type.getValue() == table_type.COMMON_VALUE) { return "һ���"; }else if(type.getValue() == table_type.TEMP_NO_VALUE_VALUE){ return "��ʱ��(����������)"; }else if(type.getValue() == table_type.TEMP_WITH_VALUE_VALUE) { return "��ʱ��(��������)"; } return super.getText(element); } }, getModel(), OraclePackage.Literals.DATABASE_MODULE_EXTENSIBLE_PROPERTY__TABLE_TYPE); getBindingContext().bindValue(SWTObservables.observeText(txtsf, SWT.Modify), EMFEditObservables.observeValue(getEditingDomain(), getModel(), OraclePackage.Literals.DATABASE_MODULE_EXTENSIBLE_PROPERTY__SPLIT_FIELD)); getBindingContext().bindValue(SWTObservables.observeText(txtsn, SWT.Modify), EMFEditObservables.observeValue(getEditingDomain(), getModel(), OraclePackage.Literals.DATABASE_MODULE_EXTENSIBLE_PROPERTY__SPLIT_NUM)); getBindingContext().bindValue(SWTObservables.observeText(txtsd, SWT.Modify), EMFEditObservables.observeValue(getEditingDomain(), getModel(), OraclePackage.Literals.DATABASE_MODULE_EXTENSIBLE_PROPERTY__START_DATE)); } protected void bingCombo(Combo cb, Object[] items, ILabelProvider labelProvider, EObject container, EStructuralFeature feature) { labelProvider = (ILabelProvider) ObjectUtils.defaultIfNull(labelProvider, new LabelProvider()); // �������˵� getBindingContext().bindList( SWTObservables.observeItems(cb), Observables.staticObservableList(Arrays.asList(items)), null, new UpdateListStrategy().setConverter(new LabelProviderConverter(labelProvider))); // ���ݰ� getBindingContext().bindValue( SWTObservables.observeSingleSelectionIndex(cb), EMFEditObservables.observeValue(getEditingDomain(), container, feature), new UpdateValueStrategy().setConverter( new IndexToItemsConverter(items) ), new UpdateValueStrategy().setConverter(new ItemsToIndexConverter(items))); } /* (non-Javadoc) * @see com.hundsun.ares.studio.ui.page.ExtendPageWithMyDirtySystem#shouldLoad() */ @Override public boolean shouldLoad() { if (StringUtils.equals(getResource().getRoot().getElementName(), "database")) { return true; } return false; } }