1 | /** |
2 | * Copyright 2005-2011 Steve McDuff d-duff@users.sourceforge.net |
3 | * |
4 | * Licensed under the Apache License, Version 2.0 (the "License"); |
5 | * you may not use this file except in compliance with the License. |
6 | * You may obtain a copy of the License at |
7 | * |
8 | * http://www.apache.org/licenses/LICENSE-2.0 |
9 | * |
10 | * Unless required by applicable law or agreed to in writing, software |
11 | * distributed under the License is distributed on an "AS IS" BASIS, |
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
13 | * See the License for the specific language governing permissions and |
14 | * limitations under the License. |
15 | */ |
16 | package org.deduced.viewer.web.shared; |
17 | |
18 | /** |
19 | * ModelListModel is a type of list that must contain model objects. It is able |
20 | * to handle add and remove signals from the server side list. |
21 | * |
22 | * @author Steve McDuff |
23 | * |
24 | * @param <c> the type of object contained within the model list. Must be a type |
25 | * that matches or extends the base Model type. |
26 | */ |
27 | public class ModelListModel<c extends Model> extends ListModel<c> implements |
28 | ModelContainer |
29 | { |
30 | |
31 | /** |
32 | * serialVersionUID |
33 | */ |
34 | private static final long serialVersionUID = 7214277196578341583L; |
35 | |
36 | /** |
37 | * |
38 | * ModelListModel constructor |
39 | */ |
40 | public ModelListModel() |
41 | { |
42 | |
43 | } |
44 | |
45 | /** |
46 | * (non-JSDoc) |
47 | * |
48 | * @see org.deduced.viewer.web.shared.Model#registerChildModels() |
49 | */ |
50 | @Override |
51 | protected void registerChildModels() |
52 | { |
53 | ModelRegistry registry = getModelRegistry(); |
54 | for (c itemElement : getList()) |
55 | { |
56 | itemElement.setParent(this); |
57 | itemElement.registerModel(registry); |
58 | } |
59 | super.registerChildModels(); |
60 | } |
61 | |
62 | /** |
63 | * (non-JSDoc) |
64 | * |
65 | * @see org.deduced.viewer.web.shared.ListModel#handleRemoveEvent(org.deduced.viewer.web.shared.ChangeEvent) |
66 | */ |
67 | @Override |
68 | public void handleRemoveEvent( |
69 | ChangeEvent event) |
70 | { |
71 | remove((String) event.getSerializableValue()); |
72 | } |
73 | |
74 | /** |
75 | * remove an object from the list based on it's unique ID |
76 | * |
77 | * @param removeID the ID to remove |
78 | */ |
79 | public void remove( |
80 | String removeID) |
81 | { |
82 | for (c type : getList()) |
83 | { |
84 | if (Utilities.equals(removeID, type.getId())) |
85 | { |
86 | remove(type); |
87 | break; |
88 | } |
89 | } |
90 | } |
91 | |
92 | /** |
93 | * (non-JSDoc) |
94 | * |
95 | * @see org.deduced.viewer.web.shared.ListModel#remove(org.deduced.viewer.web.shared.Model) |
96 | */ |
97 | @Override |
98 | public void remove( |
99 | c modelToRemove) |
100 | { |
101 | modelToRemove.delete(); |
102 | |
103 | super.remove(modelToRemove); |
104 | } |
105 | |
106 | /** |
107 | * (non-JSDoc) |
108 | * |
109 | * @see org.deduced.viewer.web.shared.ListModel#add(org.deduced.viewer.web.shared.Model) |
110 | */ |
111 | @Override |
112 | public void add( |
113 | c newModel) |
114 | { |
115 | newModel.setParent(this); |
116 | ModelRegistry modelRegistry = getModelRegistry(); |
117 | if (modelRegistry != null) |
118 | { |
119 | newModel.registerModel(modelRegistry); |
120 | } |
121 | |
122 | super.add(newModel); |
123 | } |
124 | |
125 | /** |
126 | * (non-JSDoc) |
127 | * |
128 | * @see org.deduced.viewer.web.shared.Model#deleteChildModels() |
129 | */ |
130 | @Override |
131 | protected void deleteChildModels() |
132 | { |
133 | for (c elementInList : getList()) |
134 | { |
135 | elementInList.delete(); |
136 | } |
137 | |
138 | super.deleteChildModels(); |
139 | } |
140 | |
141 | /** |
142 | * (non-JSDoc) |
143 | * |
144 | * @see org.deduced.viewer.web.shared.ModelContainer#modelChanged(org.deduced.viewer.web.shared.Model) |
145 | */ |
146 | @Override |
147 | public void modelChanged( |
148 | Model model) |
149 | { |
150 | // propagate the event |
151 | notifyParentThatModelChanged(); |
152 | } |
153 | |
154 | } |