Skip to content

Package: CheckedEStructuralFeatureCompositeImpl$1

CheckedEStructuralFeatureCompositeImpl$1

nameinstructionbranchcomplexitylinemethod
widgetSelected(SelectionEvent)
M: 13 C: 0
0%
M: 0 C: 0
100%
M: 1 C: 0
0%
M: 3 C: 0
0%
M: 1 C: 0
0%
{...}
M: 6 C: 0
0%
M: 0 C: 0
100%
M: 1 C: 0
0%
M: 1 C: 0
0%
M: 1 C: 0
0%

Coverage

1: /*******************************************************************************
2: * Copyright (c) 2011-2013 EclipseSource Muenchen GmbH and others.
3: *
4: * All rights reserved. This program and the accompanying materials
5: * are made available under the terms of the Eclipse Public License 2.0
6: * which accompanies this distribution, and is available at
7: * https://www.eclipse.org/legal/epl-2.0/
8: *
9: * SPDX-License-Identifier: EPL-2.0
10: *
11: * Contributors:
12: * Johannes Faltermeier - initial API and implementation
13: ******************************************************************************/
14: package org.eclipse.emf.ecp.spi.common.ui.composites;
15:
16: import java.util.ArrayList;
17: import java.util.Collection;
18: import java.util.LinkedHashMap;
19: import java.util.List;
20: import java.util.Map;
21: import java.util.Set;
22:
23: import org.eclipse.emf.ecp.internal.common.ui.MessageKeys;
24: import org.eclipse.emfforms.spi.localization.LocalizationServiceHelper;
25: import org.eclipse.jface.layout.GridDataFactory;
26: import org.eclipse.jface.layout.GridLayoutFactory;
27: import org.eclipse.jface.viewers.CheckStateChangedEvent;
28: import org.eclipse.jface.viewers.CheckboxTableViewer;
29: import org.eclipse.jface.viewers.ICheckStateListener;
30: import org.eclipse.jface.viewers.ICheckStateProvider;
31: import org.eclipse.jface.viewers.IStructuredContentProvider;
32: import org.eclipse.jface.viewers.Viewer;
33: import org.eclipse.swt.SWT;
34: import org.eclipse.swt.events.SelectionAdapter;
35: import org.eclipse.swt.events.SelectionEvent;
36: import org.eclipse.swt.widgets.Button;
37: import org.eclipse.swt.widgets.Composite;
38:
39: /**
40: * This class provides a list with {@link org.eclipse.emf.ecore.EStructuralFeature EStructuralFeature}s that can be
41: * selected with a checkbox.
42: *
43: * @author jfaltermeier
44: *
45: */
46: public class CheckedEStructuralFeatureCompositeImpl extends SelectModelElementCompositeImpl implements
47:         CheckedEStructuralFeatureComposite {
48:
49:         private final Object[] input;
50:         private FilteredViewerContentProvider provider;
51:         private final Map<Object, Boolean> objectToCheckedMap;
52:
53:         /**
54:          * Constructor.
55:          *
56:          * @param input the input for the viewer
57:          */
58:         public CheckedEStructuralFeatureCompositeImpl(Object input) {
59:                 super(input, true);
60:                 this.input = (Object[]) input;
61:                 objectToCheckedMap = new LinkedHashMap<Object, Boolean>();
62:         }
63:
64:         /**
65:          * {@inheritDoc}.
66:          *
67:          * @see org.eclipse.emf.ecp.spi.common.ui.composites.AbstractFilteredSelectionComposite#createUI(org.eclipse.swt.widgets.Composite)
68:          */
69:         @Override
70:         public Composite createUI(Composite parent) {
71:                 final Composite composite = super.createUI(parent);
72:                 final Composite buttons = new Composite(composite, SWT.NONE);
73:                 GridLayoutFactory.fillDefaults().numColumns(2).equalWidth(true).applyTo(buttons);
74:                 GridDataFactory.fillDefaults().align(SWT.FILL, SWT.TOP).grab(true, false).span(2, 1).applyTo(buttons);
75:
76:                 final Button buttonAll = new Button(buttons, SWT.PUSH);
77:                 buttonAll.setText(LocalizationServiceHelper.getString(CheckedEStructuralFeatureCompositeImpl.class,
78:                         MessageKeys.CheckedModelElementHelper_SelectAllLabel));
79:                 GridDataFactory.fillDefaults().align(SWT.FILL, SWT.TOP).grab(true, false).applyTo(buttonAll);
80:                 buttonAll.addSelectionListener(new SelectionAdapter() {
81:
82:                         @Override
83:                         public void widgetSelected(SelectionEvent e) {
84:                                 getViewer().setCheckedElements(input);
85:                                 provider.setCheckStateForAll(true);
86:                         }
87:                 });
88:
89:                 final Button buttonNone = new Button(buttons, SWT.PUSH);
90:                 buttonNone.setText(LocalizationServiceHelper.getString(CheckedEStructuralFeatureCompositeImpl.class,
91:                         MessageKeys.CheckedModelElementHelper_DeselectAllLabel));
92:                 GridDataFactory.fillDefaults().align(SWT.FILL, SWT.TOP).grab(true, false).applyTo(buttonNone);
93:                 buttonNone.addSelectionListener(new SelectionAdapter() {
94:
95:                         @Override
96:                         public void widgetSelected(SelectionEvent e) {
97:                                 getViewer().setCheckedElements(new Object[0]);
98:                                 provider.setCheckStateForAll(false);
99:                         }
100:                 });
101:
102:                 return composite;
103:         }
104:
105:         /**
106:          *
107:          * {@inheritDoc}
108:          *
109:          * @see org.eclipse.emf.ecp.spi.common.ui.composites.SelectModelElementCompositeImpl#createViewer(org.eclipse.swt.widgets.Composite)
110:          */
111:         @Override
112:         protected CheckboxTableViewer createViewer(Composite composite) {
113:                 final CheckboxTableViewer tableViewer = CheckboxTableViewer.newCheckList(composite, SWT.BORDER | SWT.MULTI
114:                         | SWT.FULL_SELECTION);
115:                 tableViewer.setLabelProvider(getLabelProvider());
116:                 provider = new FilteredViewerContentProvider(tableViewer);
117:                 tableViewer.setContentProvider(provider);
118:                 tableViewer.setCheckStateProvider(provider);
119:                 tableViewer.setInput(getInput());
120:                 return tableViewer;
121:         }
122:
123:         /**
124:          * {@inheritDoc}
125:          *
126:          * @see org.eclipse.emf.ecp.spi.common.ui.composites.AbstractFilteredSelectionComposite#getViewer()
127:          */
128:         @Override
129:         public CheckboxTableViewer getViewer() {
130:                 return (CheckboxTableViewer) super.getViewer();
131:         }
132:
133:         /**
134:          * {@inheritDoc}
135:          *
136:          * @see org.eclipse.emf.ecp.spi.common.ui.composites.AbstractFilteredSelectionComposite#getSelection()
137:          */
138:         @Override
139:         public Object[] getSelection() {
140:                 final List<Object> result = new ArrayList<Object>();
141:                 for (int i = 0; i < input.length; i++) {
142:                         final Object cur = input[i];
143:                         if (objectToCheckedMap.containsKey(cur) && objectToCheckedMap.get(cur)) {
144:                                 result.add(cur);
145:                         }
146:                 }
147:                 return result.toArray();
148:         }
149:
150:         /**
151:          * {@link IStructuredContentProvider} that also handles the checked state of a viewer with a filter.
152:          *
153:          * @author jfaltermeier
154:          *
155:          */
156:         private class FilteredViewerContentProvider implements IStructuredContentProvider, ICheckStateProvider {
157:
158:                 FilteredViewerContentProvider(CheckboxTableViewer viewer) {
159:                         viewer.addCheckStateListener(new ICheckStateListener() {
160:                                 @Override
161:                                 public void checkStateChanged(CheckStateChangedEvent event) {
162:                                         objectToCheckedMap.put(event.getElement(), event.getChecked());
163:                                 }
164:                         });
165:                 }
166:
167:                 /**
168:                  * {@inheritDoc}
169:                  *
170:                  * @see org.eclipse.jface.viewers.ICheckStateProvider#isChecked(java.lang.Object)
171:                  */
172:                 @Override
173:                 public boolean isChecked(Object element) {
174:                         return getCheckedState(element);
175:                 }
176:
177:                 private boolean getCheckedState(Object element) {
178:                         if (!objectToCheckedMap.containsKey(element)) {
179:                                 objectToCheckedMap.put(element, Boolean.FALSE);
180:                         }
181:                         return objectToCheckedMap.get(element);
182:                 }
183:
184:                 /**
185:                  * {@inheritDoc}
186:                  *
187:                  * @see org.eclipse.jface.viewers.ICheckStateProvider#isGrayed(java.lang.Object)
188:                  */
189:                 @Override
190:                 public boolean isGrayed(Object element) {
191:                         return false;
192:                 }
193:
194:                 public void setCheckStateForAll(boolean state) {
195:                         final Set<Object> keySet = objectToCheckedMap.keySet();
196:                         for (final Object o : keySet) {
197:                                 objectToCheckedMap.put(o, state);
198:                         }
199:                 }
200:
201:                 /**
202:                  * {@inheritDoc}
203:                  *
204:                  * @see org.eclipse.jface.viewers.IContentProvider#dispose()
205:                  */
206:                 @Override
207:                 public void dispose() {
208:                         // nothing to dispose
209:                 }
210:
211:                 /**
212:                  * {@inheritDoc}
213:                  *
214:                  * @see org.eclipse.jface.viewers.IContentProvider#inputChanged(org.eclipse.jface.viewers.Viewer,
215:                  * java.lang.Object, java.lang.Object)
216:                  */
217:                 @Override
218:                 public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
219:                         // ignore until actually needed =)
220:                 }
221:
222:                 /**
223:                  * {@inheritDoc}
224:                  *
225:                  * @see org.eclipse.jface.viewers.IStructuredContentProvider#getElements(java.lang.Object)
226:                  */
227:                 @Override
228:                 @SuppressWarnings("rawtypes")
229:                 public Object[] getElements(Object inputElement) {
230:                         // Copied from ArrayContentProvider since its illegal to extend it
231:                         if (inputElement instanceof Object[]) {
232:                                 return (Object[]) inputElement;
233:                         }
234:                         if (inputElement instanceof Collection) {
235:                                 return ((Collection) inputElement).toArray();
236:                         }
237:                         return new Object[0];
238:                 }
239:
240:         }
241:
242: }