Skip to content

Package: CategorizationRevealProvider$1

CategorizationRevealProvider$1

nameinstructionbranchcomplexitylinemethod
caseCategorizableElement(VCategorizableElement)
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%
caseCategorizationElement(VCategorizationElement)
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%
caseCategory(VCategory)
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%
{...}
M: 0 C: 6
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) 2019 Christian W. Damus 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: * Christian W. Damus - initial API and implementation
13: ******************************************************************************/
14: package org.eclipse.emf.ecp.view.internal.categorization.swt;
15:
16: import static org.eclipse.emf.common.util.ECollections.singletonEList;
17:
18: import org.eclipse.emf.common.util.ECollections;
19: import org.eclipse.emf.common.util.EList;
20: import org.eclipse.emf.ecore.EObject;
21: import org.eclipse.emf.ecore.util.Switch;
22: import org.eclipse.emf.ecp.view.model.common.di.annotations.Renderer;
23: import org.eclipse.emf.ecp.view.spi.categorization.model.VAbstractCategorization;
24: import org.eclipse.emf.ecp.view.spi.categorization.model.VCategorizableElement;
25: import org.eclipse.emf.ecp.view.spi.categorization.model.VCategorization;
26: import org.eclipse.emf.ecp.view.spi.categorization.model.VCategorizationElement;
27: import org.eclipse.emf.ecp.view.spi.categorization.model.VCategory;
28: import org.eclipse.emf.ecp.view.spi.categorization.model.util.CategorizationSwitch;
29: import org.eclipse.emf.ecp.view.spi.categorization.swt.AbstractJFaceTreeRenderer;
30: import org.eclipse.emf.ecp.view.spi.categorization.swt.AbstractSWTTabRenderer;
31: import org.eclipse.emf.ecp.view.spi.model.VElement;
32: import org.eclipse.emfforms.bazaar.Bid;
33: import org.eclipse.emfforms.bazaar.Create;
34: import org.eclipse.emfforms.spi.core.services.reveal.DrillDown;
35: import org.eclipse.emfforms.spi.core.services.reveal.EMFFormsRevealProvider;
36: import org.eclipse.emfforms.spi.core.services.reveal.Reveal;
37: import org.eclipse.emfforms.spi.core.services.reveal.RevealHelper;
38: import org.eclipse.emfforms.spi.core.services.reveal.RevealStep;
39: import org.eclipse.emfforms.spi.swt.core.AbstractSWTRenderer;
40: import org.osgi.service.component.annotations.Component;
41:
42: /**
43: * A reveal provider for {@link VCategorizationElement}s and
44: * {@link VCategorizableElement}s.
45: *
46: * @since 1.22
47: */
48: @Component(name = "categorizationRevealProvider")
49: public class CategorizationRevealProvider implements EMFFormsRevealProvider {
50:
51:         private final Double containerBid = 5.0;
52:         private final Double leafBid = 1.0;
53:
54:         private final Switch<Double> bidSwitch = new CategorizationSwitch<Double>() {
55:                 @Override
56:                 public Double caseCategorizationElement(VCategorizationElement object) {
57:                         return containerBid;
58:                 }
59:
60:                 @Override
61:                 public Double caseCategorizableElement(VCategorizableElement object) {
62:                         return containerBid;
63:                 }
64:
65:                 @Override
66:                 public Double caseCategory(VCategory object) {
67:                         return leafBid;
68:                 }
69:         };
70:
71:         private final Switch<EList<? extends VElement>> childrenSwitch = new CategorizationSwitch<EList<? extends VElement>>() {
72:                 @Override
73:                 public EList<? extends VElement> caseCategory(VCategory object) {
74:                         return object.getComposite() != null ? singletonEList(object.getComposite()) : null;
75:                 }
76:
77:                 @Override
78:                 public EList<? extends VElement> caseCategorization(VCategorization object) {
79:                         return object.getCategorizations();
80:                 }
81:
82:                 @Override
83:                 public EList<? extends VElement> caseCategorizationElement(VCategorizationElement object) {
84:                         return object.getCategorizations();
85:                 }
86:
87:                 @Override
88:                 public EList<? extends VElement> defaultCase(EObject object) {
89:                         return ECollections.emptyEList();
90:                 }
91:
92:                 @DrillDown
93:                 Iterable<? extends VElement> drillDown(VElement element) {
94:                         return doSwitch(element);
95:                 }
96:         };
97:
98:         /**
99:          * I bid on the {@code element} if it is a {@link VCategorizationElement} or some kind
100:          * of {@link VCategorizableElement}.
101:          *
102:          * @param element the element to bid on
103:          * @return my bid
104:          */
105:         @Bid
106:         public Double canReveal(VElement element) {
107:                 return bidSwitch.doSwitch(element);
108:         }
109:
110:         /**
111:          * Create an intermediate reveal step to drill down into a categorization {@code element}.
112:          *
113:          * @param element the categorization element in which to drill down
114:          * @param object the object to reveal
115:          * @param helper the reveal helper for drill-down
116:          * @return the drill-down reveal step
117:          */
118:         @Create
119:         public RevealStep reveal(VElement element, EObject object, RevealHelper helper) {
120:                 return helper.drillDown(this, childrenSwitch);
121:         }
122:
123:         @Reveal
124:         private RevealStep drillDown(VElement element, EObject object,
125:                 @Renderer AbstractSWTRenderer<? extends VAbstractCategorization> renderer,
126:                 RevealStep nextStep) {
127:
128:                 return RevealStep.reveal(element, object, () -> reveal(renderer, nextStep.getViewModel()));
129:         }
130:
131:         /**
132:          * Reveal the rendering of a {@code categorization} in its parent {@code element}
133:          * rendering in the given editor {@code context}.
134:          *
135:          * @param renderer the parent categorization renderer
136:          * @param categorization the categorization to reveal
137:          */
138:         void reveal(AbstractSWTRenderer<? extends VAbstractCategorization> renderer, VElement categorization) {
139:                 if (!(categorization instanceof VAbstractCategorization)) {
140:                         return;
141:                 }
142:
143:                 final VAbstractCategorization abstractCategorization = (VAbstractCategorization) categorization;
144:
145:                 if (renderer instanceof AbstractSWTTabRenderer) {
146:                         final AbstractSWTTabRenderer<?> tabRenderer = (AbstractSWTTabRenderer<?>) renderer;
147:                         tabRenderer.showCategorization(abstractCategorization);
148:                 } else if (renderer instanceof AbstractJFaceTreeRenderer<?>) {
149:                         final AbstractJFaceTreeRenderer<?> treeRenderer = (AbstractJFaceTreeRenderer<?>) renderer;
150:                         treeRenderer.showCategorization(abstractCategorization);
151:                 }
152:         }
153:
154: }