AggregateUpdatableValue.java
上传用户:hengxinggs
上传日期:2008-01-15
资源大小:212k
文件大小:3k
源码类别:

PlugIns编程

开发平台:

Java

  1. /*******************************************************************************
  2.  * Copyright (c) 2005 IBM Corporation and others.
  3.  * All rights reserved. This program and the accompanying materials
  4.  * are made available under the terms of the Eclipse Public License v1.0
  5.  * which accompanies this distribution, and is available at
  6.  * http://www.eclipse.org/legal/epl-v10.html
  7.  * 
  8.  * Contributors:
  9.  *     IBM Corporation - initial API and implementation
  10.  *******************************************************************************/
  11. package org.eclipse.jface.examples.databinding.model;
  12. import java.util.StringTokenizer;
  13. import org.eclipse.jface.databinding.ChangeEvent;
  14. import org.eclipse.jface.databinding.IChangeListener;
  15. import org.eclipse.jface.databinding.IUpdatableValue;
  16. import org.eclipse.jface.databinding.UpdatableValue;
  17. public class AggregateUpdatableValue extends UpdatableValue {
  18. private IUpdatableValue[] updatableValues;
  19. private String delimiter;
  20. private boolean updating = false;
  21. private IChangeListener listener = new IChangeListener() {
  22. public void handleChange(ChangeEvent changeEvent) {
  23. if (!updating) 
  24.    fireChangeEvent(ChangeEvent.CHANGE, null, null);
  25. }
  26. };
  27. public AggregateUpdatableValue(IUpdatableValue[] updatableValues,
  28. String delimiter) {
  29. this.updatableValues = updatableValues;
  30. this.delimiter = delimiter;
  31. for (int i = 0; i < updatableValues.length; i++) {
  32. updatableValues[i].addChangeListener(listener);
  33. }
  34. }
  35. public void setValue(Object value) {
  36. Object oldValue = getValue();
  37. StringTokenizer tokenizer = new StringTokenizer((String) value,
  38. delimiter);
  39. try {
  40. updating=true;
  41. for (int i = 0; i < updatableValues.length; i++) {
  42. if (tokenizer.hasMoreElements()) {
  43. updatableValues[i].setValue(tokenizer.nextElement());
  44. }
  45. else {
  46. updatableValues[i].setValue(null);
  47. }
  48. }
  49. } finally {
  50. updating = false;
  51. }
  52. fireChangeEvent(ChangeEvent.CHANGE, oldValue, getValue());
  53. }
  54. public Object getValue() {
  55. StringBuffer result = new StringBuffer();
  56. for (int i = 0; i < updatableValues.length; i++) {
  57. if (i > 0 & i < updatableValues.length) {
  58. result.append(delimiter);
  59. }
  60. result.append(updatableValues[i].getValue());
  61. }
  62. return result.toString();
  63. }
  64. public Class getValueType() {
  65. return String.class;
  66. }
  67. public void dispose() {
  68. for (int i = 0; i < updatableValues.length; i++) {
  69. updatableValues[i].removeChangeListener(listener);
  70. }
  71. super.dispose();
  72. }
  73. }