svnno****@sourc*****
svnno****@sourc*****
2009年 3月 19日 (木) 01:47:38 JST
Revision: 2909 http://svn.sourceforge.jp/view?root=jiemamy&view=rev&rev=2909 Author: daisuke_m Date: 2009-03-19 01:47:38 +0900 (Thu, 19 Mar 2009) Log Message: ----------- ウィジェットとアダプタのライフサイクルを見誤って、ヌルポってた。 Modified Paths: -------------- vesta/trunk/org.jiemamy.eclipse.ui/src/main/java/org/jiemamy/eclipse/editor/dialog/TypeOptionManager.java vesta/trunk/org.jiemamy.eclipse.ui/src/main/java/org/jiemamy/eclipse/editor/dialog/table/TableEditDialogColumnTab.java -------------- next part -------------- Modified: vesta/trunk/org.jiemamy.eclipse.ui/src/main/java/org/jiemamy/eclipse/editor/dialog/TypeOptionManager.java =================================================================== --- vesta/trunk/org.jiemamy.eclipse.ui/src/main/java/org/jiemamy/eclipse/editor/dialog/TypeOptionManager.java 2009-03-18 16:31:31 UTC (rev 2908) +++ vesta/trunk/org.jiemamy.eclipse.ui/src/main/java/org/jiemamy/eclipse/editor/dialog/TypeOptionManager.java 2009-03-18 16:47:38 UTC (rev 2909) @@ -70,6 +70,12 @@ /** タイムゾーンコントロール */ private Button chkWithTimezone; + private SizedDataTypeAdapter sizedDataTypeAdapter; + + private PrecisionedDataTypeAdapter precisionedDataTypeAdapter; + + private TimezonedDataTypeAdapter timezonedDataTypeAdapter; + /** * インスタンスを生成する。 @@ -190,23 +196,20 @@ public void setValue(Object adapter) { Class<?> adapterClass = adapter.getClass(); if (SizedDataTypeAdapter.class.isAssignableFrom(adapterClass)) { - SizedDataTypeAdapter sizedDataTypeAdapter = (SizedDataTypeAdapter) adapter; + sizedDataTypeAdapter = (SizedDataTypeAdapter) adapter; Integer size = sizedDataTypeAdapter.getSize(); txtSize.setText(StringUtils.defaultIfEmpty(ObjectUtils.toString(size), "")); - txtSize.setData(adapter); } else if (PrecisionedDataTypeAdapter.class.isAssignableFrom(adapterClass)) { - PrecisionedDataTypeAdapter precisionedDataTypeAdapter = (PrecisionedDataTypeAdapter) adapter; + precisionedDataTypeAdapter = (PrecisionedDataTypeAdapter) adapter; Integer precision = precisionedDataTypeAdapter.getPrecision(); Integer scale = precisionedDataTypeAdapter.getScale(); txtPrecision.setText(StringUtils.defaultIfEmpty(ObjectUtils.toString(precision), "")); txtPrecision.setData(adapter); txtScale.setText(StringUtils.defaultIfEmpty(ObjectUtils.toString(scale), "")); - txtScale.setData(adapter); } else if (TimezonedDataTypeAdapter.class.isAssignableFrom(adapterClass)) { - TimezonedDataTypeAdapter timezonedDataTypeAdapter = (TimezonedDataTypeAdapter) adapter; + timezonedDataTypeAdapter = (TimezonedDataTypeAdapter) adapter; Boolean withTimeZone = timezonedDataTypeAdapter.isWithTimezone(); chkWithTimezone.setSelection(BooleanUtils.isTrue(withTimeZone)); - chkWithTimezone.setData(adapter); } } @@ -214,8 +217,7 @@ * コントロールからアダプタにデータを書き戻す。 */ public void writeBackToAdapter() { - if (txtSize != null && txtSize.isDisposed() == false) { - SizedDataTypeAdapter sizedDataTypeAdapter = (SizedDataTypeAdapter) txtSize.getData(); + if (isAlive(txtSize) && sizedDataTypeAdapter != null) { String text = txtSize.getText(); Integer value = null; try { @@ -226,8 +228,7 @@ } sizedDataTypeAdapter.setSize(value); } - if (txtPrecision != null && txtPrecision.isDisposed() == false) { - PrecisionedDataTypeAdapter precisionedDataTypeAdapter = (PrecisionedDataTypeAdapter) txtPrecision.getData(); + if (isAlive(txtPrecision) && precisionedDataTypeAdapter != null) { String text = txtPrecision.getText(); Integer value = null; try { @@ -238,25 +239,31 @@ } precisionedDataTypeAdapter.setPrecision(value); } - if (txtScale != null && txtScale.isDisposed() == false) { - PrecisionedDataTypeAdapter precisionedDataTypeAdapter = (PrecisionedDataTypeAdapter) txtScale.getData(); + if (isAlive(txtScale) && precisionedDataTypeAdapter != null) { String text = txtScale.getText(); Integer value = null; - try { - value = Integer.valueOf(text); + if (StringUtils.isEmpty(text)) { txtScale.setBackground(null); - } catch (NumberFormatException e) { - txtScale.setBackground(ERROR); + } else { + try { + value = Integer.valueOf(text); + txtScale.setBackground(null); + } catch (NumberFormatException e) { + txtScale.setBackground(ERROR); + } } precisionedDataTypeAdapter.setScale(value); } - if (chkWithTimezone != null && chkWithTimezone.isDisposed() == false) { - TimezonedDataTypeAdapter timezonedDataTypeAdapter = (TimezonedDataTypeAdapter) chkWithTimezone.getData(); + if (isAlive(chkWithTimezone) && timezonedDataTypeAdapter != null) { boolean value = chkWithTimezone.getSelection(); timezonedDataTypeAdapter.setWithTimezone(value == false ? null : value); } } + private boolean isAlive(Control control) { + return control != null && control.isDisposed() == false; + } + /** * オプションコントロールが生きていれば、enableの値を設定する。 * @@ -266,7 +273,7 @@ * @param enabled enableの値 */ private void setEnabledIfAlive(Control control, boolean enabled) { - if (control != null && control.isDisposed() == false) { + if (isAlive(control)) { control.setEnabled(enabled); } } Modified: vesta/trunk/org.jiemamy.eclipse.ui/src/main/java/org/jiemamy/eclipse/editor/dialog/table/TableEditDialogColumnTab.java =================================================================== --- vesta/trunk/org.jiemamy.eclipse.ui/src/main/java/org/jiemamy/eclipse/editor/dialog/table/TableEditDialogColumnTab.java 2009-03-18 16:31:31 UTC (rev 2908) +++ vesta/trunk/org.jiemamy.eclipse.ui/src/main/java/org/jiemamy/eclipse/editor/dialog/table/TableEditDialogColumnTab.java 2009-03-18 16:47:38 UTC (rev 2909) @@ -88,7 +88,9 @@ import org.jiemamy.model.datatype.DataTypeMold; import org.jiemamy.model.datatype.DomainModel; import org.jiemamy.model.datatype.DomainRef; +import org.jiemamy.model.datatype.adapter.PrecisionedDataTypeAdapter; import org.jiemamy.model.datatype.adapter.SizedDataTypeAdapter; +import org.jiemamy.model.datatype.adapter.TimezonedDataTypeAdapter; import org.jiemamy.model.entity.TableModel; import org.jiemamy.utils.CollectionsUtil; import org.jiemamy.utils.LogMarker; @@ -674,6 +676,16 @@ SizedDataTypeAdapter sizedDataTypeAdapter = builtinDataType.getAdapter(SizedDataTypeAdapter.class); typeOptionManager.setValue(sizedDataTypeAdapter); } + if (builtinDataType.hasAdapter(PrecisionedDataTypeAdapter.class)) { + PrecisionedDataTypeAdapter precisionedDataTypeAdapter = + builtinDataType.getAdapter(PrecisionedDataTypeAdapter.class); + typeOptionManager.setValue(precisionedDataTypeAdapter); + } + if (builtinDataType.hasAdapter(TimezonedDataTypeAdapter.class)) { + TimezonedDataTypeAdapter timezonedDataTypeAdapter = + builtinDataType.getAdapter(TimezonedDataTypeAdapter.class); + typeOptionManager.setValue(timezonedDataTypeAdapter); + } } txtDefaultValue.setText(StringUtils.defaultIfEmpty(columnModel.getDefaultValue(), "")); txtDescription.setText(StringUtils.defaultIfEmpty(columnModel.getDescription(), ""));