package org.eclipse.linuxtools.internal.docker.ui; /******************************************************************************* * Copyright (c) 2000, 2009, 2016 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * IBM Corporation - initial API and implementation * Red Hat Inc. - modified to use with Docker Tooling *******************************************************************************/ import java.util.Iterator; import java.util.List; import org.eclipse.ui.dialogs.FileSystemElement; import org.eclipse.ui.model.AdaptableList; import org.eclipse.ui.wizards.datatransfer.IImportStructureProvider; /** * The <code>MinimizedFileSystemElement</code> is a * <code>FileSystemElement</code> that knows if it has been populated or not. */ public class MinimizedFileSystemElement extends FileSystemElement { private boolean populated = false; /** * Create a <code>MinimizedFileSystemElement</code> with the supplied name * and parent. * * @param name * the name of the file element this represents * @param parent * the containing parent * @param isDirectory * indicated if this could have children or not */ public MinimizedFileSystemElement(String name, FileSystemElement parent, boolean isDirectory) { super(name, parent, isDirectory); } /** * Returns a list of the files that are immediate children. Use the supplied * provider if it needs to be populated. of this folder. */ public AdaptableList getFiles(IImportStructureProvider provider) { if (!populated) { populate(provider); } return super.getFiles(); } /** * Returns a list of the folders that are immediate children. Use the * supplied provider if it needs to be populated. of this folder. */ public AdaptableList getFolders(IImportStructureProvider provider) { if (!populated) { populate(provider); } return super.getFolders(); } /** * Return whether or not population has happened for the receiver. */ public boolean isPopulated() { return this.populated; } /** * Populate the files and folders of the receiver using the supplied * structure provider. * * @param provider * org.eclipse.ui.wizards.datatransfer.IImportStructureProvider */ private void populate(IImportStructureProvider provider) { Object fileSystemObject = getFileSystemObject(); @SuppressWarnings("rawtypes") List children = provider.getChildren(fileSystemObject); if (children != null) { @SuppressWarnings("rawtypes") Iterator childrenEnum = children.iterator(); while (childrenEnum.hasNext()) { Object child = childrenEnum.next(); String elementLabel = provider.getLabel(child); // Create one level below MinimizedFileSystemElement result = new MinimizedFileSystemElement( elementLabel, this, provider.isFolder(child)); result.setFileSystemObject(child); } } setPopulated(); } /** * Set whether or not population has happened for the receiver to true. */ public void setPopulated() { this.populated = true; } }