Skip to content

Package: EStructuralFeatureContentProvider

EStructuralFeatureContentProvider

nameinstructionbranchcomplexitylinemethod
EStructuralFeatureContentProvider(boolean)
M: 0 C: 6
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 3
100%
M: 0 C: 1
100%
dispose()
M: 0 C: 1
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 1
100%
M: 0 C: 1
100%
getChildren(Object)
M: 40 C: 25
38%
M: 5 C: 3
38%
M: 3 C: 2
40%
M: 8 C: 5
38%
M: 0 C: 1
100%
getElements(Object)
M: 0 C: 4
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 1
100%
M: 0 C: 1
100%
getParent(Object)
M: 2 C: 0
0%
M: 0 C: 0
100%
M: 1 C: 0
0%
M: 1 C: 0
0%
M: 1 C: 0
0%
hasChildren(Object)
M: 28 C: 43
61%
M: 10 C: 10
50%
M: 7 C: 4
36%
M: 3 C: 9
75%
M: 0 C: 1
100%
inputChanged(Viewer, Object, Object)
M: 0 C: 1
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 1
100%
M: 0 C: 1
100%

Coverage

1: /*******************************************************************************
2: * Copyright (c) 2011-2019 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: * Lucas Koehler - initial API and implementation
13: ******************************************************************************/
14: package org.eclipse.emf.ecp.view.internal.editor.handler;
15:
16: import java.util.LinkedHashSet;
17: import java.util.Set;
18:
19: import org.eclipse.emf.ecore.EClass;
20: import org.eclipse.emf.ecore.EPackage;
21: import org.eclipse.emf.ecore.EReference;
22: import org.eclipse.emf.ecore.EStructuralFeature;
23: import org.eclipse.jface.viewers.ITreeContentProvider;
24: import org.eclipse.jface.viewers.Viewer;
25:
26: /**
27: * An {@link ITreeContentProvider} that allows to select {@link EStructuralFeature EStructuralFeatures}. These are
28: * read from an {@link EClass}, an {@link EPackage}, or an already expanded {@link EReference}.
29: *
30: * @author Lucas Koehler
31: *
32: */
33: public class EStructuralFeatureContentProvider implements ITreeContentProvider {
34:         private final boolean allowMultiReferences;
35:
36:         /**
37:          *
38:          * @param expandableMultiReferences Whether the content provider considers a multi reference to have children.
39:          */
40:         public EStructuralFeatureContentProvider(boolean expandableMultiReferences) {
41:                 allowMultiReferences = expandableMultiReferences;
42:         }
43:
44:         @Override
45:         public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
46:                 // nothing to do here
47:         }
48:
49:         @Override
50:         public void dispose() {
51:                 // nothing to do here
52:         }
53:
54:         @Override
55:         public boolean hasChildren(Object element) {
56:•                if (EPackage.class.isInstance(element)) {
57:                         final EPackage p = (EPackage) element;
58:•                        return !p.getEClassifiers().isEmpty() || !p.getESubpackages().isEmpty();
59:                 }
60:•                if (EPackage.Registry.class.isInstance(element)) {
61:•                        return !EPackage.Registry.class.cast(element).values().isEmpty();
62:                 }
63:•                if (EClass.class.isInstance(element)) {
64:•                        return !EClass.class.cast(element).getEAllStructuralFeatures().isEmpty();
65:                 }
66:•                if (EReference.class.isInstance(element)) {
67:                         final EReference eReference = (EReference) element;
68:
69:•                        return eReference.isMany() && !allowMultiReferences ? false
70:                                 : hasChildren(eReference.getEReferenceType());
71:                 }
72:                 return false;
73:         }
74:
75:         @Override
76:         public Object getParent(Object element) {
77:                 // nothing to do here
78:                 return null;
79:         }
80:
81:         @Override
82:         public Object[] getElements(Object inputElement) {
83:                 return getChildren(inputElement);
84:         }
85:
86:         @Override
87:         public Object[] getChildren(Object parentElement) {
88:•                if (EClass.class.isInstance(parentElement)) {
89:                         return EClass.class.cast(parentElement).getEAllStructuralFeatures().toArray();
90:                 }
91:•                if (EReference.class.isInstance(parentElement)) {
92:                         final EClass referenceType = EReference.class.cast(parentElement).getEReferenceType();
93:                         return referenceType.getEAllStructuralFeatures().toArray();
94:                 }
95:•                if (EPackage.Registry.class.isInstance(parentElement)) {
96:                         return EPackage.Registry.class.cast(parentElement).values().toArray();
97:                 }
98:•                if (EPackage.class.isInstance(parentElement)) {
99:                         final Set<Object> children = new LinkedHashSet<Object>();
100:                         children.addAll(EPackage.class.cast(parentElement).getESubpackages());
101:                         children.addAll(EPackage.class.cast(parentElement).getEClassifiers());
102:                         return children.toArray();
103:                 }
104:                 return null;
105:         }
106: }