Skip to content

Package: FilteredViewProviderAdapter

FilteredViewProviderAdapter

nameinstructionbranchcomplexitylinemethod
FilteredViewProviderAdapter(IViewProvider)
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%
adapt(IViewProvider)
M: 0 C: 12
100%
M: 0 C: 2
100%
M: 0 C: 2
100%
M: 0 C: 3
100%
M: 0 C: 1
100%
canProvideViewModel(EObject, VViewModelProperties, Collection)
M: 0 C: 13
100%
M: 1 C: 3
75%
M: 1 C: 2
67%
M: 0 C: 3
100%
M: 0 C: 1
100%
dispose(IFilteredViewProvider)
M: 0 C: 10
100%
M: 0 C: 2
100%
M: 0 C: 2
100%
M: 0 C: 3
100%
M: 0 C: 1
100%
provideViewModel(EObject, VViewModelProperties, Collection)
M: 1 C: 12
92%
M: 2 C: 2
50%
M: 2 C: 1
33%
M: 1 C: 2
67%
M: 0 C: 1
100%
static {...}
M: 0 C: 7
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 2
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.provider;
15:
16: import java.util.Collection;
17: import java.util.Map;
18: import java.util.concurrent.ConcurrentHashMap;
19: import java.util.function.Function;
20:
21: import org.eclipse.emf.ecore.EObject;
22: import org.eclipse.emf.ecp.view.spi.model.VView;
23: import org.eclipse.emf.ecp.view.spi.model.VViewModelProperties;
24: import org.eclipse.emf.ecp.view.spi.provider.IFilteredViewProvider;
25: import org.eclipse.emf.ecp.view.spi.provider.IViewProvider;
26:
27: /**
28: * Filtering view provider adapter. If any filter keys are required, then
29: * it provides nothing. Otherwise, it delegates view provision.
30: */
31: final class FilteredViewProviderAdapter implements IFilteredViewProvider {
32:
33:         private static final Function<IViewProvider, IFilteredViewProvider> FACTORY = FilteredViewProviderAdapter::new;
34:
35:         private static final Map<IViewProvider, IFilteredViewProvider> INSTANCES = new ConcurrentHashMap<>();
36:
37:         private final IViewProvider delegate;
38:
39:         /**
40:          * Initializes me.
41:          *
42:          * @param delegate the view provider to which I delegate
43:          */
44:         private FilteredViewProviderAdapter(IViewProvider delegate) {
45:                 super();
46:
47:                 this.delegate = delegate;
48:         }
49:
50:         @Override
51:         public double canProvideViewModel(EObject object, VViewModelProperties properties,
52:                 Collection<String> requiredKeys) {
53:
54:•                return requiredKeys == null || requiredKeys.isEmpty()
55:                         ? delegate.canProvideViewModel(object, properties)
56:                         : NOT_APPLICABLE;
57:         }
58:
59:         @Override
60:         public VView provideViewModel(EObject object, VViewModelProperties properties, Collection<String> requiredKeys) {
61:•                return requiredKeys == null || requiredKeys.isEmpty()
62:                         ? delegate.provideViewModel(object, properties)
63:                         : null;
64:         }
65:
66:         /**
67:          * Obtain the canonical adapter for a view {@code provider}.
68:          *
69:          * @param provider a legacy view provider
70:          * @return the filtering adapter
71:          */
72:         static IFilteredViewProvider adapt(IViewProvider provider) {
73:•                if (provider instanceof IFilteredViewProvider) {
74:                         return (IFilteredViewProvider) provider;
75:                 }
76:                 return INSTANCES.computeIfAbsent(provider, FACTORY);
77:         }
78:
79:         /**
80:          * Forgets an {@code adapter} that is no longer needed.
81:          *
82:          * @param adapter an adapter to dispose
83:          */
84:         static void dispose(IFilteredViewProvider adapter) {
85:•                if (adapter instanceof FilteredViewProviderAdapter) {
86:                         INSTANCES.remove(((FilteredViewProviderAdapter) adapter).delegate);
87:                 }
88:         }
89:
90: }