/******************************************************************************* * Copyright (c) 2014, 2015 Red Hat. * 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: * Red Hat - Initial Contribution *******************************************************************************/ package org.eclipse.linuxtools.internal.docker.ui.views; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.Set; import org.eclipse.jface.viewers.ITreeContentProvider; import org.eclipse.jface.viewers.Viewer; import org.eclipse.linuxtools.docker.core.IDockerContainerConfig; import org.eclipse.linuxtools.docker.core.IDockerImageInfo; /** * @author jjohnstn * */ public class ImageInspectContentProvider implements ITreeContentProvider { private static final Object[] EMPTY = new Object[0]; @Override public void dispose() { } @Override public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { } @Override public Object[] getElements(Object inputElement) { if (inputElement instanceof IDockerImageInfo) { final IDockerImageInfo info = (IDockerImageInfo) inputElement; return new Object[] { new Object[] { "Id", info.id() }, //$NON-NLS-1$ new Object[] { "Parent", info.parent() }, //$NON-NLS-1$ new Object[] { "Comment", info.comment() }, //$NON-NLS-1$ new Object[] { "Created", LabelProviderUtils.toCreatedDate(info.created()) }, //$NON-NLS-1$ new Object[] { "Container", info.container() }, //$NON-NLS-1$ new Object[] { "ContainerConfig", info.containerConfig() }, //$NON-NLS-1$ new Object[] { "DockerVersion", info.dockerVersion() }, //$NON-NLS-1$ new Object[] { "Author", info.author() }, //$NON-NLS-1$ new Object[] { "Config", info.config() }, //$NON-NLS-1$ new Object[] { "Architecture", info.architecture() }, //$NON-NLS-1$ new Object[] { "Os", info.os() }, //$NON-NLS-1$ new Object[] { "Size", LabelProviderUtils.toString(info.size()) }, //$NON-NLS-1$ }; } return EMPTY; } @Override public Object[] getChildren(Object parentElement) { final Object propertyValue = ((Object[]) parentElement)[1]; if (propertyValue instanceof IDockerContainerConfig) { final IDockerContainerConfig config = (IDockerContainerConfig) propertyValue; return new Object[] { new Object[] { "Hostname", config.hostname() }, //$NON-NLS-1$ new Object[] { "Domainname", config.domainname() }, //$NON-NLS-1$ new Object[] { "User", config.user() }, //$NON-NLS-1$ new Object[] { "Memory", LabelProviderUtils.toString(config.memory()) }, //$NON-NLS-1$ new Object[] { "MemorySwap", LabelProviderUtils.toString(config.memorySwap()) }, //$NON-NLS-1$ new Object[] { "CpuShares", LabelProviderUtils.toString(config.cpuShares()) }, //$NON-NLS-1$ new Object[] { "Cpuset", config.cpuset() }, //$NON-NLS-1$ new Object[] { "AttachStdin", config.attachStdin() }, //$NON-NLS-1$ new Object[] { "AttachStdout", config.attachStdout() }, //$NON-NLS-1$ new Object[] { "AttachStderr", config.attachStderr() }, //$NON-NLS-1$ new Object[] { "PortSpecs", LabelProviderUtils.reduce(config.portSpecs()) }, //$NON-NLS-1$ new Object[] { "ExposedPorts", config.exposedPorts() }, //$NON-NLS-1$ new Object[] { "Tty", config.tty() }, //$NON-NLS-1$ new Object[] { "OpenStdin", config.openStdin() }, //$NON-NLS-1$ new Object[] { "StdinOnce", config.stdinOnce() }, //$NON-NLS-1$ new Object[] { "Env", LabelProviderUtils.reduce(config.env()) }, //$NON-NLS-1$ new Object[] { "Cmd", LabelProviderUtils.reduce(config.cmd()) }, //$NON-NLS-1$ new Object[] { "Image", config.image() }, //$NON-NLS-1$ new Object[] { "Volumes", LabelProviderUtils.reduce(config.volumes()) }, //$NON-NLS-1$ new Object[] { "WorkingDir", config.workingDir() }, //$NON-NLS-1$ new Object[] { "EntryPoint", LabelProviderUtils.reduce(config.entrypoint()) }, //$NON-NLS-1$ new Object[] { "NetworkDisabled", config.networkDisabled() }, //$NON-NLS-1$ new Object[] { "OnBuild", LabelProviderUtils.reduce(config.onBuild()) }, //$NON-NLS-1$ }; } else if (propertyValue instanceof List<?>) { @SuppressWarnings("unchecked") final List<Object> propertyValues = (List<Object>) propertyValue; final Object[] result = new Object[propertyValues.size()]; for (int i = 0; i < propertyValues.size(); i++) { result[i] = new Object[] { "", LabelProviderUtils.toString(propertyValues.get(i)) }; //$NON-NLS-1$ } return result; } else if (propertyValue instanceof Set<?>) { @SuppressWarnings("unchecked") final Set<Object> propertyValues = (Set<Object>) propertyValue; final Object[] result = new Object[propertyValues.size()]; Iterator<Object> iterator = propertyValues.iterator(); for (int i = 0; i < propertyValues.size(); i++) { result[i] = new Object[] { "", //$NON-NLS-1$ LabelProviderUtils.toString(iterator.next()) }; } return result; } else if (propertyValue instanceof Map<?, ?>) { final Map<?, ?> propertyValues = (Map<?, ?>) propertyValue; final Object[] result = new Object[propertyValues.size()]; int i = 0; for (Entry<?, ?> entry : propertyValues.entrySet()) { result[i] = new Object[] { entry.getKey(), entry.getValue() }; i++; } return result; } return EMPTY; } @Override public Object getParent(Object element) { return null; } @Override public boolean hasChildren(Object element) { if (element instanceof Object[]) { final Object value = ((Object[]) element)[1]; return (value instanceof List || value instanceof Map || value instanceof IDockerContainerConfig); } return false; } }