1 /* 2 * Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. Oracle designates this 8 * particular file as subject to the "Classpath" exception as provided 9 * by Oracle in the LICENSE file that accompanied this code. 10 * 11 * This code is distributed in the hope that it will be useful, but WITHOUT 12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 14 * version 2 for more details (a copy is included in the LICENSE file that 15 * accompanied this code). 16 * 17 * You should have received a copy of the GNU General Public License version 18 * 2 along with this work; if not, write to the Free Software Foundation, 19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 20 * 21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 22 * or visit www.oracle.com if you need additional information or have any 23 * questions. 24 */ 25 26 package javafx.beans.property; 27 28 import javafx.beans.InvalidationListener; 29 import javafx.beans.value.ChangeListener; 30 31 /** 32 * This class provides a convenient class to define read-only properties. It 33 * creates two properties that are synchronized. One property is read-only 34 * and can be passed to external users. The other property is read- and 35 * writable and should be used internally only. 36 * 37 * @since JavaFX 2.0 38 */ 39 public class ReadOnlyIntegerWrapper extends SimpleIntegerProperty { 40 41 private ReadOnlyPropertyImpl readOnlyProperty; 42 43 /** 44 * The constructor of {@code ReadOnlyIntegerWrapper} 45 */ 46 public ReadOnlyIntegerWrapper() { 47 } 48 49 /** 50 * The constructor of {@code ReadOnlyIntegerWrapper} 51 * 52 * @param initialValue 53 * the initial value of the wrapped value 54 */ 55 public ReadOnlyIntegerWrapper(int initialValue) { 56 super(initialValue); 57 } 58 59 /** 60 * The constructor of {@code ReadOnlyIntegerWrapper} 61 * 62 * @param bean 63 * the bean of this {@code ReadOnlyIntegerProperty} 64 * @param name 65 * the name of this {@code ReadOnlyIntegerProperty} 66 */ 67 public ReadOnlyIntegerWrapper(Object bean, String name) { 68 super(bean, name); 69 } 70 71 /** 72 * The constructor of {@code ReadOnlyIntegerWrapper} 73 * 74 * @param bean 75 * the bean of this {@code ReadOnlyIntegerProperty} 76 * @param name 77 * the name of this {@code ReadOnlyIntegerProperty} 78 * @param initialValue 79 * the initial value of the wrapped value 80 */ 81 public ReadOnlyIntegerWrapper(Object bean, String name, int initialValue) { 82 super(bean, name, initialValue); 83 } 84 85 /** 86 * Returns the readonly property, that is synchronized with this 87 * {@code ReadOnlyIntegerWrapper}. 88 * 89 * @return the readonly property 90 */ 91 public ReadOnlyIntegerProperty getReadOnlyProperty() { 92 if (readOnlyProperty == null) { 93 readOnlyProperty = new ReadOnlyPropertyImpl(); 94 } 95 return readOnlyProperty; 96 } 97 98 /** 99 * {@inheritDoc} 100 */ 101 @Override 102 public void addListener(InvalidationListener listener) { 103 getReadOnlyProperty().addListener(listener); 104 } 105 106 /** 107 * {@inheritDoc} 108 */ 109 @Override 110 public void removeListener(InvalidationListener listener) { 111 if (readOnlyProperty != null) { 112 readOnlyProperty.removeListener(listener); 113 } 114 } 115 116 /** 117 * {@inheritDoc} 118 */ 119 @Override 120 public void addListener(ChangeListener<? super Number> listener) { 121 getReadOnlyProperty().addListener(listener); 122 } 123 124 /** 125 * {@inheritDoc} 126 */ 127 @Override 128 public void removeListener(ChangeListener<? super Number> listener) { 129 if (readOnlyProperty != null) { 130 readOnlyProperty.removeListener(listener); 131 } 132 } 133 134 /** 135 * {@inheritDoc} 136 */ 137 @Override 138 protected void fireValueChangedEvent() { 139 if (readOnlyProperty != null) { 140 readOnlyProperty.fireValueChangedEvent(); 141 } 142 } 143 144 private class ReadOnlyPropertyImpl extends ReadOnlyIntegerPropertyBase { 145 146 @Override 147 public int get() { 148 return ReadOnlyIntegerWrapper.this.get(); 149 } 150 151 @Override 152 public Object getBean() { 153 return ReadOnlyIntegerWrapper.this.getBean(); 154 } 155 156 @Override 157 public String getName() { 158 return ReadOnlyIntegerWrapper.this.getName(); 159 } 160 }; 161 }