[Jiemamy-notify:1722] commit [2909] ウィジェットとアダプタのライフサイクルを見誤って、ヌルポってた。

Zurück zum Archiv-Index

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(), ""));



Jiemamy-notify メーリングリストの案内
Zurück zum Archiv-Index