| /*=============================================================================# |
| # Copyright (c) 2017, 2019 Stephan Wahlbrink and others. |
| # |
| # This program and the accompanying materials are made available under the |
| # terms of the Eclipse Public License 2.0 which is available at |
| # https://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0 |
| # which is available at https://www.apache.org/licenses/LICENSE-2.0. |
| # |
| # SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 |
| # |
| # Contributors: |
| # Stephan Wahlbrink <sw@wahlbrink.eu> - initial API and implementation |
| #=============================================================================*/ |
| |
| package org.eclipse.statet.r.ui.util; |
| |
| import java.util.ArrayList; |
| import java.util.HashMap; |
| import java.util.List; |
| import java.util.Map; |
| |
| import org.eclipse.statet.jcommons.lang.NonNull; |
| import org.eclipse.statet.jcommons.lang.NonNullByDefault; |
| import org.eclipse.statet.jcommons.lang.Nullable; |
| |
| import org.eclipse.statet.ltk.model.core.elements.IModelElement; |
| import org.eclipse.statet.ltk.model.core.elements.IModelElement.Filter; |
| import org.eclipse.statet.r.core.data.CombinedRElement; |
| |
| |
| @NonNullByDefault |
| public class RElementInput<TSource> { |
| |
| |
| private final TSource source; |
| |
| private final @Nullable Filter envFilter; |
| private final @Nullable Filter otherFilter; |
| |
| private final @Nullable Map<CombinedRElement, CombinedRElement[]> envFilteredChildren; |
| |
| |
| private CombinedRElement @Nullable [] rootElements; |
| |
| |
| public RElementInput(final TSource source, |
| final IModelElement. @Nullable Filter envFilter, |
| final IModelElement. @Nullable Filter otherFilter) { |
| this.source= source; |
| |
| this.envFilter= envFilter; |
| this.otherFilter= otherFilter; |
| |
| this.envFilteredChildren= (envFilter != null) ? new HashMap<>() : null; |
| } |
| |
| |
| public TSource getSource() { |
| return this.source; |
| } |
| |
| |
| public boolean hasEnvFilter() { |
| return (this.envFilter != null); |
| } |
| |
| public IModelElement. @Nullable Filter getEnvFilter() { |
| return this.envFilter; |
| } |
| |
| public CombinedRElement[] getEnvChildren(final CombinedRElement rElement) { |
| CombinedRElement[] children= this.envFilteredChildren.get(rElement); |
| if (children == null) { |
| final List<? extends CombinedRElement> list= rElement.getModelChildren(this.envFilter); |
| children= list.toArray(new @NonNull CombinedRElement[list.size()]); |
| this.envFilteredChildren.put(rElement, children); |
| } |
| return children; |
| } |
| |
| public List<CombinedRElement> filterEnvChildren(final List<? extends CombinedRElement> children) { |
| final List<CombinedRElement> list= new ArrayList<>(children.size()); |
| for (final CombinedRElement rElement : children) { |
| if (this.envFilter.include(rElement)) { |
| list.add(rElement); |
| } |
| } |
| return list; |
| } |
| |
| |
| public boolean hasOtherFilter() { |
| return (this.otherFilter != null); |
| } |
| |
| public IModelElement. @Nullable Filter getOtherFilter() { |
| return this.otherFilter; |
| } |
| |
| |
| public void setRootElements(final CombinedRElement @Nullable [] elements) { |
| this.rootElements= elements; |
| } |
| |
| public CombinedRElement @Nullable [] getRootElements() { |
| return this.rootElements; |
| } |
| |
| } |