01: /*
02: * Licensed to the Apache Software Foundation (ASF) under one or more
03: * contributor license agreements. See the NOTICE file distributed with
04: * this work for additional information regarding copyright ownership.
05: * The ASF licenses this file to You under the Apache License, Version 2.0
06: * (the "License"); you may not use this file except in compliance with
07: * the License. You may obtain a copy of the License at
08: *
09: * http://www.apache.org/licenses/LICENSE-2.0
10: *
11: * Unless required by applicable law or agreed to in writing, software
12: * distributed under the License is distributed on an "AS IS" BASIS,
13: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14: * See the License for the specific language governing permissions and
15: * limitations under the License.
16: */
17:
18: package java.beans;
19:
20: import java.awt.Menu;
21: import java.awt.MenuItem;
22:
23: class AwtMenuPersistenceDelegate extends DefaultPersistenceDelegate {
24: @Override
25: @SuppressWarnings({"nls","boxing"})
26: protected void initialize(Class<?> type, Object oldInstance,
27: Object newInstance, Encoder enc) {
28: super .initialize(type, oldInstance, newInstance, enc);
29: if (type != oldInstance.getClass()) {
30: return;
31: }
32:
33: Menu menu = (Menu) oldInstance;
34: int count = menu.getItemCount();
35: Expression getterExp = null;
36: for (int i = 0; i < count; i++) {
37: getterExp = new Expression(menu.getItem(i), "getLabel",
38: null);
39: try {
40: // Calculate the old value of the property
41: Object oldVal = getterExp.getValue();
42: // Write the getter expression to the encoder
43: enc.writeExpression(getterExp);
44: // Get the target value that exists in the new environment
45: Object targetVal = enc.get(oldVal);
46: // Get the current property value in the new environment
47: Object newVal = null;
48: try {
49: newVal = new Expression(((Menu) newInstance)
50: .getItem(i), "getLabel", null).getValue();
51: } catch (IndexOutOfBoundsException ex) {
52: // The newInstance has no elements, so current property
53: // value remains null
54: }
55: /*
56: * Make the target value and current property value equivalent
57: * in the new environment
58: */
59: if (null == targetVal) {
60: if (null != newVal) {
61: // Set to null
62: Statement setterStm = new Statement(
63: oldInstance, "insert", new Object[] {
64: null, i });
65: enc.writeStatement(setterStm);
66: }
67: } else {
68: PersistenceDelegate pd = enc
69: .getPersistenceDelegate(targetVal
70: .getClass());
71: if (!pd.mutatesTo(targetVal, newVal)) {
72: MenuItem menuItem = new MenuItem(
73: (String) oldVal);
74: menuItem.setName(menu.getItem(i).getName());
75: Statement setterStm = new Statement(
76: oldInstance, "add",
77: new Object[] { menuItem });
78: enc.writeStatement(setterStm);
79: }
80: }
81: } catch (Exception ex) {
82: enc.getExceptionListener().exceptionThrown(ex);
83: }
84: }
85: }
86: }
|