1 package fr.ifremer.quadrige3.ui.swing.model;
2
3 /*-
4 * #%L
5 * Quadrige3 Core :: Quadrige3 UI Common
6 * $Id:$
7 * $HeadURL:$
8 * %%
9 * Copyright (C) 2017 Ifremer
10 * %%
11 * This program is free software: you can redistribute it and/or modify
12 * it under the terms of the GNU Affero General Public License as published by
13 * the Free Software Foundation, either version 3 of the License, or
14 * (at your option) any later version.
15 *
16 * This program is distributed in the hope that it will be useful,
17 * but WITHOUT ANY WARRANTY; without even the implied warranty of
18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 * GNU General Public License for more details.
20 *
21 * You should have received a copy of the GNU Affero General Public License
22 * along with this program. If not, see <http://www.gnu.org/licenses/>.
23 * #L%
24 */
25
26
27 import org.jdesktop.beans.AbstractBean;
28 import org.nuiton.util.beans.PropertyDiff;
29
30 import java.util.Map;
31
32 /**
33 * To monitor a bean and know when it changes.
34 *
35 * @author Ludovic Pecquot <ludovic.pecquot@e-is.pro>
36 * @param <B> bean type to monitor
37 */
38 public class BeanMonitor<B> extends AbstractBean {
39
40 /** Constant <code>PROPERTY_BEAN="bean"</code> */
41 public static final String PROPERTY_BEAN = "bean";
42
43 private final org.nuiton.util.beans.BeanMonitor monitor;
44
45 /**
46 * <p>Constructor for BeanMonitor.</p>
47 *
48 * @param properties a {@link java.lang.String} object.
49 */
50 public BeanMonitor(String... properties) {
51 this.monitor = new org.nuiton.util.beans.BeanMonitor(properties);
52 }
53
54 /**
55 * <p>setProperties.</p>
56 *
57 * @param properties a {@link java.lang.String} object.
58 */
59 public void setProperties(String... properties) {
60 monitor.setProperties(properties);
61 }
62
63 /**
64 * <p>getBean.</p>
65 *
66 * @return a B object.
67 */
68 @SuppressWarnings("unchecked")
69 public B getBean() {
70 return (B) monitor.getBean();
71 }
72
73 /**
74 * <p>setBean.</p>
75 *
76 * @param bean a B object.
77 */
78 public void setBean(B bean) {
79 Object oldValue = getBean();
80 monitor.setBean(bean);
81 firePropertyChange(PROPERTY_BEAN, oldValue, bean);
82 }
83
84 /**
85 * <p>Getter for the field <code>monitor</code>.</p>
86 *
87 * @return a {@link org.nuiton.util.beans.BeanMonitor} object.
88 */
89 public org.nuiton.util.beans.BeanMonitor getMonitor() {
90 return monitor;
91 }
92
93 /**
94 * <p>wasModified.</p>
95 *
96 * @return a boolean.
97 */
98 public boolean wasModified() {
99 return monitor.wasModified();
100 }
101
102 /**
103 * <p>getModifiedProperties.</p>
104 *
105 * @return an array of {@link java.lang.String} objects.
106 */
107 public String[] getModifiedProperties() {
108 return monitor.getModifiedProperties();
109 }
110
111 /**
112 * <p>getOriginalValues.</p>
113 *
114 * @return a {@link java.util.Map} object.
115 */
116 public Map<String, Object> getOriginalValues() {
117 return monitor.getOriginalValues();
118 }
119
120 /**
121 * <p>getPropertyDiffs.</p>
122 *
123 * @return an array of {@link org.nuiton.util.beans.PropertyDiff} objects.
124 */
125 public PropertyDiff[] getPropertyDiffs() {
126 return monitor.getPropertyDiffs();
127 }
128
129 /**
130 * <p>clearModified.</p>
131 */
132 public void clearModified() {
133 monitor.clearModified();
134 }
135 }