| /******************************************************************************* |
| * Copyright (c) 2015 vogella GmbH. |
| * |
| * This program and the accompanying materials |
| * are made available under the terms of the Eclipse Public License 2.0 |
| * which accompanies this distribution, and is available at |
| * https://www.eclipse.org/legal/epl-2.0/ |
| * |
| * SPDX-License-Identifier: EPL-2.0 |
| * |
| * Contributors: |
| * Simon Scholz <simon.scholz@vogella.com> - initial API and implementation |
| *******************************************************************************/ |
| package org.eclipse.e4.tools.preference.spy.parts.viewer; |
| |
| import java.util.ArrayList; |
| import java.util.List; |
| |
| import org.eclipse.core.databinding.observable.masterdetail.IObservableFactory; |
| import org.eclipse.core.databinding.observable.set.IObservableSet; |
| import org.eclipse.e4.tools.preference.spy.model.PreferenceEntry; |
| import org.eclipse.e4.tools.preference.spy.model.PreferenceNodeEntry; |
| import org.eclipse.jface.databinding.viewers.ObservableSetTreeContentProvider; |
| import org.eclipse.jface.databinding.viewers.TreeStructureAdvisor; |
| |
| public class PreferenceEntriesContentProvider extends ObservableSetTreeContentProvider { |
| |
| private boolean hierarchicalLayout; |
| |
| public PreferenceEntriesContentProvider(IObservableFactory setFactory, TreeStructureAdvisor structureAdvisor) { |
| super(setFactory, structureAdvisor); |
| } |
| |
| @Override |
| public Object[] getElements(Object inputElement) { |
| Object[] children = super.getElements(inputElement); |
| if (isHierarchicalLayout()) { |
| return children; |
| } |
| |
| List<PreferenceEntry> childList = new ArrayList<PreferenceEntry>(); |
| |
| for (Object object : children) { |
| getChildren(object, childList); |
| } |
| |
| return childList.toArray(); |
| } |
| |
| private void getChildren(Object element, List<PreferenceEntry> childList) { |
| if (element instanceof PreferenceNodeEntry) { |
| IObservableSet preferenceEntries = ((PreferenceNodeEntry) element).getPreferenceEntries(); |
| for (Object object : preferenceEntries) { |
| getChildren(object, childList); |
| } |
| } else if (element instanceof PreferenceEntry) { |
| childList.add((PreferenceEntry) element); |
| } |
| } |
| |
| public boolean isHierarchicalLayout() { |
| return hierarchicalLayout; |
| } |
| |
| public void setHierarchicalLayout(boolean hierarchicalLayout) { |
| this.hierarchicalLayout = hierarchicalLayout; |
| } |
| } |