Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'containers/org.eclipse.linuxtools.docker.ui/src/org/eclipse/linuxtools/internal/docker')
-rw-r--r--containers/org.eclipse.linuxtools.docker.ui/src/org/eclipse/linuxtools/internal/docker/ui/SWTImagesFactory.java12
-rw-r--r--containers/org.eclipse.linuxtools.docker.ui/src/org/eclipse/linuxtools/internal/docker/ui/views/DVMessages.properties4
-rw-r--r--containers/org.eclipse.linuxtools.docker.ui/src/org/eclipse/linuxtools/internal/docker/ui/views/DockerExplorerContentProvider.java519
-rw-r--r--containers/org.eclipse.linuxtools.docker.ui/src/org/eclipse/linuxtools/internal/docker/ui/views/DockerExplorerLabelProvider.java96
4 files changed, 608 insertions, 23 deletions
diff --git a/containers/org.eclipse.linuxtools.docker.ui/src/org/eclipse/linuxtools/internal/docker/ui/SWTImagesFactory.java b/containers/org.eclipse.linuxtools.docker.ui/src/org/eclipse/linuxtools/internal/docker/ui/SWTImagesFactory.java
index 55117df391..1f7d7b89e8 100644
--- a/containers/org.eclipse.linuxtools.docker.ui/src/org/eclipse/linuxtools/internal/docker/ui/SWTImagesFactory.java
+++ b/containers/org.eclipse.linuxtools.docker.ui/src/org/eclipse/linuxtools/internal/docker/ui/SWTImagesFactory.java
@@ -87,6 +87,12 @@ public class SWTImagesFactory {
+ "container_paused.png"; //$NON-NLS-1$
public static final String IMG_CONTAINER_STOPPED = NAME_PREFIX
+ "container_stopped.png"; //$NON-NLS-1$
+ public static final String IMG_CONTAINER_VOLUME = NAME_PREFIX
+ + "container_volume.png"; //$NON-NLS-1$
+ public static final String IMG_CONTAINER_PORT = NAME_PREFIX
+ + "container_port.png"; //$NON-NLS-1$
+ public static final String IMG_CONTAINER_LINK = NAME_PREFIX
+ + "container_link.png"; //$NON-NLS-1$
public static final String IMG_SYSTEM_PROCESS = NAME_PREFIX
+ "systemprocess.gif"; //$NON-NLS-1$
public static final String IMG_CHECKED = NAME_PREFIX + "checked.gif"; //$NON-NLS-1$
@@ -164,6 +170,12 @@ public class SWTImagesFactory {
"", IMG_CONTAINER_PAUSED);
public static final ImageDescriptor DESC_CONTAINER_STOPPED = createManaged(
"", IMG_CONTAINER_STOPPED);
+ public static final ImageDescriptor DESC_CONTAINER_VOLUME = createManaged("",
+ IMG_CONTAINER_VOLUME);
+ public static final ImageDescriptor DESC_CONTAINER_PORT = createManaged("",
+ IMG_CONTAINER_PORT);
+ public static final ImageDescriptor DESC_CONTAINER_LINK = createManaged("",
+ IMG_CONTAINER_LINK);
public static final ImageDescriptor DESC_SYSTEM_PROCESS = createManaged("",
IMG_SYSTEM_PROCESS);
public static final ImageDescriptor DESC_CHECKED = createManaged("",
diff --git a/containers/org.eclipse.linuxtools.docker.ui/src/org/eclipse/linuxtools/internal/docker/ui/views/DVMessages.properties b/containers/org.eclipse.linuxtools.docker.ui/src/org/eclipse/linuxtools/internal/docker/ui/views/DVMessages.properties
index c5577999ac..5ab0cd1f32 100644
--- a/containers/org.eclipse.linuxtools.docker.ui/src/org/eclipse/linuxtools/internal/docker/ui/views/DVMessages.properties
+++ b/containers/org.eclipse.linuxtools.docker.ui/src/org/eclipse/linuxtools/internal/docker/ui/views/DVMessages.properties
@@ -147,6 +147,7 @@ ViewerDaemonMissing.msg=No Docker daemon selected
ImagesLoadJob.msg=Loading images...
ContainersLoadJob.msg=Loading containers...
+ContainerInfoLoadJob.msg=Loading container info...
ImagesRemove.msg=Removing Images...
ImageRemove.msg=Removing {0}
@@ -193,4 +194,7 @@ Connection.unnamed=<unnamed>
Loading.label=Loading...
DockerContainersCategory.label=Containers
+DockerContainerPortMappingsCategory.label=Ports
+DockerContainerVolumesCategory.label=Volumes
+DockerContainerLinksCategory.label=Links
DockerImagesCategory.label=Images
diff --git a/containers/org.eclipse.linuxtools.docker.ui/src/org/eclipse/linuxtools/internal/docker/ui/views/DockerExplorerContentProvider.java b/containers/org.eclipse.linuxtools.docker.ui/src/org/eclipse/linuxtools/internal/docker/ui/views/DockerExplorerContentProvider.java
index 5cb6b938c9..192e307b3e 100644
--- a/containers/org.eclipse.linuxtools.docker.ui/src/org/eclipse/linuxtools/internal/docker/ui/views/DockerExplorerContentProvider.java
+++ b/containers/org.eclipse.linuxtools.docker.ui/src/org/eclipse/linuxtools/internal/docker/ui/views/DockerExplorerContentProvider.java
@@ -11,6 +11,12 @@
package org.eclipse.linuxtools.internal.docker.ui.views;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
@@ -23,10 +29,18 @@ import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.linuxtools.docker.core.DockerConnectionManager;
import org.eclipse.linuxtools.docker.core.IDockerConnection;
+import org.eclipse.linuxtools.docker.core.IDockerContainer;
+import org.eclipse.linuxtools.docker.core.IDockerContainerInfo;
+import org.eclipse.linuxtools.docker.core.IDockerHostConfig;
+import org.eclipse.linuxtools.docker.core.IDockerImage;
+import org.eclipse.linuxtools.docker.core.IDockerNetworkSettings;
+import org.eclipse.linuxtools.docker.core.IDockerPortBinding;
+import org.eclipse.linuxtools.docker.core.IDockerPortMapping;
+import org.eclipse.linuxtools.internal.docker.core.DockerPortMapping;
import org.eclipse.swt.widgets.Display;
/**
- * @author xcoulon
+ * {@link ITreeContentProvider} for the {@link DockerExplorerView}
*
*/
public class DockerExplorerContentProvider implements ITreeContentProvider {
@@ -75,6 +89,34 @@ public class DockerExplorerContentProvider implements ITreeContentProvider {
}
loadImages(imagesCategory);
return new Object[] { new LoadingStub(imagesCategory) };
+ } else if (parentElement instanceof IDockerContainer) {
+ final IDockerContainer container = (IDockerContainer) parentElement;
+ if (container.isInfoLoaded()) {
+ final IDockerContainerInfo info = container.info();
+ final IDockerNetworkSettings networkSettings = info
+ .networkSettings();
+ final IDockerHostConfig hostConfig = info.hostConfig();
+ return new Object[] {
+ new DockerContainerPortMappingsCategory(container,
+ networkSettings.ports()),
+ new DockerContainerVolumesCategory(container,
+ hostConfig.binds()),
+ new DockerContainerLinksCategory(container,
+ hostConfig.links()) };
+ }
+ loadContainerInfo(container);
+ return new Object[] { new LoadingStub(container) };
+ } else if (parentElement instanceof DockerContainerLinksCategory) {
+ final DockerContainerLinksCategory linksCategory = (DockerContainerLinksCategory) parentElement;
+ return linksCategory.getLinks().toArray();
+ } else
+ if (parentElement instanceof DockerContainerPortMappingsCategory) {
+ final DockerContainerPortMappingsCategory portMappingsCategory = (DockerContainerPortMappingsCategory) parentElement;
+ return portMappingsCategory.getPortMappings().toArray();
+
+ } else if (parentElement instanceof DockerContainerVolumesCategory) {
+ final DockerContainerVolumesCategory volumesCategory = (DockerContainerVolumesCategory) parentElement;
+ return volumesCategory.getVolumes().toArray();
}
return EMPTY;
}
@@ -84,7 +126,8 @@ public class DockerExplorerContentProvider implements ITreeContentProvider {
* @param containersCategory the selected {@link DockerContainersCategory}
*/
private void loadContainers(final DockerContainersCategory containersCategory) {
- final Job loadContainersJob = new Job("Loading containers...") {
+ final Job loadContainersJob = new Job(
+ DVMessages.getString("ContainersLoadJob.msg")) { //$NON-NLS-1$
@Override
protected IStatus run(final IProgressMonitor monitor) {
containersCategory.getConnection().getContainers(true);
@@ -112,11 +155,49 @@ public class DockerExplorerContentProvider implements ITreeContentProvider {
}
/**
+ * Call the {@link IDockerConnection#getContainers(boolean)} in a background
+ * job to avoid blocking the UI.
+ *
+ * @param container
+ * the selected {@link DockerContainersCategory}
+ */
+ private void loadContainerInfo(final IDockerContainer container) {
+ // only retain expanded tree paths if container was expanded
+ final TreePath[] expandedTreePaths = this.viewer.getExpandedState(
+ container) ? this.viewer.getExpandedTreePaths() : null;
+ final Job loadContainersJob = new Job(
+ DVMessages.getString("ContainerInfoLoadJob.msg")) { //$NON-NLS-1$
+ @Override
+ protected IStatus run(final IProgressMonitor monitor) {
+ container.info(true);
+ return Status.OK_STATUS;
+ }
+ };
+ loadContainersJob.addJobChangeListener(new JobChangeAdapter() {
+ @Override
+ public void done(final IJobChangeEvent event) {
+ event.getResult();
+ Display.getDefault().asyncExec(new Runnable() {
+ @Override
+ public void run() {
+ refreshTarget(container);
+ if (expandedTreePaths != null) {
+ viewer.setExpandedTreePaths(expandedTreePaths);
+ }
+ }
+ });
+ }
+ });
+ loadContainersJob.schedule();
+ }
+
+ /**
* Call the {@link IDockerConnection#getImages(boolean)} in a background job to avoid blocking the UI.
* @param imagesCategory the selected {@link DockerImagesCategory}
*/
private void loadImages(final DockerImagesCategory imagesCategory) {
- final Job loadImagesJob = new Job("Loading images...") {
+ final Job loadImagesJob = new Job(
+ DVMessages.getString("ImagesLoadJob.msg")) { //$NON-NLS-1$
@Override
protected IStatus run(final IProgressMonitor monitor) {
imagesCategory.getConnection().getImages(true);
@@ -150,7 +231,19 @@ public class DockerExplorerContentProvider implements ITreeContentProvider {
@Override
public boolean hasChildren(final Object element) {
- return (element instanceof IDockerConnection || element instanceof DockerContainersCategory || element instanceof DockerImagesCategory);
+ return (element instanceof IDockerConnection
+ || element instanceof DockerContainersCategory
+ || element instanceof DockerImagesCategory
+ || element instanceof IDockerContainer
+ || (element instanceof DockerContainerLinksCategory
+ && !((DockerContainerLinksCategory) element).getLinks()
+ .isEmpty())
+ || (element instanceof DockerContainerPortMappingsCategory
+ && !((DockerContainerPortMappingsCategory) element)
+ .getPortMappings().isEmpty())
+ || (element instanceof DockerContainerVolumesCategory
+ && !((DockerContainerVolumesCategory) element)
+ .getVolumes().isEmpty()));
}
/**
@@ -163,11 +256,11 @@ public class DockerExplorerContentProvider implements ITreeContentProvider {
private void refreshTarget(final Object target) {
// this piece of code must run in an async manner to avoid reentrant
// call while viewer is busy.
- Display.getDefault().asyncExec(new Runnable() {
+ Display.getDefault().syncExec(new Runnable() {
@Override
public void run() {
if (viewer != null) {
- TreePath[] treePaths = viewer.getExpandedTreePaths();
+ final TreePath[] treePaths = viewer.getExpandedTreePaths();
viewer.refresh(target, true);
viewer.setExpandedTreePaths(treePaths);
}
@@ -175,13 +268,17 @@ public class DockerExplorerContentProvider implements ITreeContentProvider {
});
}
+ /**
+ * Wrapper node to display {@link IDockerImage} of a given
+ * {@link IDockerConnection}
+ */
public static class DockerImagesCategory {
private final IDockerConnection connection;
/**
- * @param connection
- * - Docker connection
+ * @param container
+ * - Docker container
*/
public DockerImagesCategory(final IDockerConnection connection) {
this.connection = connection;
@@ -219,13 +316,17 @@ public class DockerExplorerContentProvider implements ITreeContentProvider {
}
+ /**
+ * Wrapper node to display {@link IDockerContainer} of a given
+ * {@link IDockerConnection}
+ */
public static class DockerContainersCategory {
private final IDockerConnection connection;
/**
- * @param connection
- * - Docker connection
+ * @param container
+ * - Docker container
*/
public DockerContainersCategory(final IDockerConnection connection) {
this.connection = connection;
@@ -260,10 +361,406 @@ public class DockerExplorerContentProvider implements ITreeContentProvider {
return false;
return true;
}
-
}
+ /**
+ * Wrapper node to display {@link IDockerPortMapping} of a given
+ * {@link IDockerContainer}
+ */
+ public static class DockerContainerPortMappingsCategory {
+
+ private final IDockerContainer container;
+
+ private final Map<String, List<IDockerPortBinding>> bindings;
+
+ /**
+ * @param container
+ * @param bindings
+ * - the container bindings
+ */
+ public DockerContainerPortMappingsCategory(
+ final IDockerContainer container,
+ final Map<String, List<IDockerPortBinding>> bindings) {
+ this.container = container;
+ this.bindings = bindings;
+ }
+
+ public List<IDockerPortMapping> getPortMappings() {
+ final List<IDockerPortMapping> portMappings = new ArrayList<>();
+ if (bindings != null) {
+ for (Entry<String, List<IDockerPortBinding>> entry : bindings
+ .entrySet()) {
+ // internal port is in the following form: "8080/tcp"
+ final String[] source = entry.getKey().split("/");
+ final int privatePort = Integer.parseInt(source[0]);
+ final String type = source[1];
+ for (IDockerPortBinding portBinding : entry.getValue()) {
+ portMappings.add(new DockerPortMapping(privatePort,
+ Integer.parseInt(portBinding.hostPort()), type,
+ portBinding.hostIp()));
+ }
+ }
+ }
+ Collections.sort(portMappings);
+ return portMappings;
+ }
+
+ @Override
+ public String toString() {
+ return "Port mappings for " + this.container.name();
+ }
+
+ @Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result
+ + ((container == null) ? 0 : container.hashCode());
+ return result;
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj)
+ return true;
+ if (obj == null)
+ return false;
+ if (getClass() != obj.getClass())
+ return false;
+ DockerContainerPortMappingsCategory other = (DockerContainerPortMappingsCategory) obj;
+ if (container == null) {
+ if (other.container != null)
+ return false;
+ } else if (!container.equals(other.container))
+ return false;
+ return true;
+ }
+
+ }
+
+ /**
+ * Wrapper node to display the {@link DockerContainerLink} of a given
+ * {@link IDockerContainer}
+ */
+ public static class DockerContainerLinksCategory {
+
+ private final IDockerContainer container;
+
+ private final List<DockerContainerLink> links;
+
+ /**
+ * Constructor.
+ *
+ * @param container
+ *
+ * @param links
+ * - the container links
+ */
+ public DockerContainerLinksCategory(final IDockerContainer container,
+ final List<String> links) {
+ this.container = container;
+ this.links = new ArrayList<>();
+ if (links != null) {
+ for (String link : links) {
+ this.links.add(new DockerContainerLink(link));
+ }
+ }
+ }
+
+ public List<DockerContainerLink> getLinks() {
+ if (this.links == null) {
+ return Collections.emptyList();
+ }
+ return this.links;
+ }
+
+ @Override
+ public String toString() {
+ return "Container links for " + this.container.name();
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see java.lang.Object#hashCode()
+ */
+ @Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result
+ + ((container == null) ? 0 : container.hashCode());
+ return result;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see java.lang.Object#equals(java.lang.Object)
+ */
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj)
+ return true;
+ if (obj == null)
+ return false;
+ if (getClass() != obj.getClass())
+ return false;
+ DockerContainerLinksCategory other = (DockerContainerLinksCategory) obj;
+ if (container == null) {
+ if (other.container != null)
+ return false;
+ } else if (!container.equals(other.container))
+ return false;
+ return true;
+ }
+
+ }
+
+ public static class DockerContainerLink {
+
+ private final String containerName;
+
+ private final String containerAlias;
+
+ /**
+ * Constructor.
+ *
+ * @param linkValue
+ * the bind value provided by the {@link IDockerHostConfig}.
+ */
+ public DockerContainerLink(final String linkValue) {
+ // format: "container_name:containerAlias"
+ final String[] args = linkValue.split(":");
+ this.containerName = getDisplayableContainerName(args[0]);
+ this.containerAlias = args.length > 0
+ ? getDisplayableContainerAlias(args[1]) : null;
+ }
+
+ /**
+ * Removes the heading "/" i(if found) in the given container name
+ *
+ * @param containerName
+ * @return a displayable container name
+ */
+ private String getDisplayableContainerName(final String containerName) {
+ return containerName.startsWith("/") ? containerName.substring(1)
+ : containerName;
+ }
+
+ /**
+ * Removes the heading "/" i(if found) in the given container name
+ *
+ * @param containerName
+ * @return a displayable container name
+ */
+ private String getDisplayableContainerAlias(
+ final String containerAlias) {
+ final String[] containerAliasSplit = containerAlias.split("/");
+ if (containerAliasSplit.length > 1) {
+ return containerAliasSplit[2];
+ }
+ return null;
+ }
+
+ public String getContainerName() {
+ return containerName;
+ }
+
+ public String getContainerAlias() {
+ return containerAlias;
+ }
+
+ @Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + ((containerAlias == null) ? 0 : containerAlias.hashCode());
+ result = prime * result
+ + ((containerName == null) ? 0 : containerName.hashCode());
+ return result;
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj)
+ return true;
+ if (obj == null)
+ return false;
+ if (getClass() != obj.getClass())
+ return false;
+ DockerContainerLink other = (DockerContainerLink) obj;
+ if (containerAlias == null) {
+ if (other.containerAlias != null)
+ return false;
+ } else if (!containerAlias.equals(other.containerAlias))
+ return false;
+ if (containerName == null) {
+ if (other.containerName != null)
+ return false;
+ } else if (!containerName.equals(other.containerName))
+ return false;
+ return true;
+ }
+
+ }
+
+ /**
+ * Wrapper node to display {@link DockerContainerVolume} of a given
+ * {@link IDockerContainer}
+ */
+ public static class DockerContainerVolumesCategory {
+
+ private final IDockerContainer container;
+
+ private final List<DockerContainerVolume> volumes;
+
+ /**
+ * Constructor.
+ *
+ * @param container
+ *
+ * @param volumes
+ * - the parent Docker container
+ */
+ public DockerContainerVolumesCategory(final IDockerContainer container,
+ final List<String> volumes) {
+ this.container = container;
+ this.volumes = new ArrayList<>();
+ if (volumes != null) {
+ for (String volume : volumes) {
+ this.volumes.add(new DockerContainerVolume(volume));
+ }
+ }
+ }
+
+ public List<DockerContainerVolume> getVolumes() {
+ if (this.volumes == null) {
+ return Collections.emptyList();
+ }
+ return volumes;
+ }
+
+ @Override
+ public String toString() {
+ return "Volumes for " + this.container.name();
+ }
+
+ @Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result
+ + ((container == null) ? 0 : container.hashCode());
+ return result;
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj)
+ return true;
+ if (obj == null)
+ return false;
+ if (getClass() != obj.getClass())
+ return false;
+ DockerContainerVolumesCategory other = (DockerContainerVolumesCategory) obj;
+ if (container == null) {
+ if (other.container != null)
+ return false;
+ } else if (!container.equals(other.container))
+ return false;
+ return true;
+ }
+
+ }
+
+ public static class DockerContainerVolume {
+
+ private final String hostPath;
+
+ private final String containerPath;
+
+ private final String flags;
+
+ /**
+ * @param volume
+ * the volume value provided by the {@link IDockerHostConfig}
+ * .
+ * @return a {@link DockerContainerVolume}
+ */
+ public DockerContainerVolume(final String volume) {
+ // (1) "container_path" to create a new volume for the container
+ // (2) "host_path:container_path" to bind-mount a host path into the
+ // container
+ // (3) "host_path:container_path:ro" to make the bind-mount
+ // read-only
+ // inside the container.
+ final String[] args = volume.split(":");
+ // on case (1), hostPath is null
+ this.hostPath = args.length > 1 ? args[0] : null;
+ // on case (1), containerPath is the first (and only) arg, otherwise
+ // it's the second one.
+ this.containerPath = args.length > 1 ? args[1] : args[0];
+ // flags exists on case (3) only
+ this.flags = args.length > 2 ? args[2] : null;
+ }
+
+ public String getHostPath() {
+ return hostPath;
+ }
+
+ public String getContainerPath() {
+ return containerPath;
+ }
+
+ public String getFlags() {
+ return flags;
+ }
+ @Override
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result
+ + ((containerPath == null) ? 0 : containerPath.hashCode());
+ result = prime * result + ((flags == null) ? 0 : flags.hashCode());
+ result = prime * result
+ + ((hostPath == null) ? 0 : hostPath.hashCode());
+ return result;
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj)
+ return true;
+ if (obj == null)
+ return false;
+ if (getClass() != obj.getClass())
+ return false;
+ DockerContainerVolume other = (DockerContainerVolume) obj;
+ if (containerPath == null) {
+ if (other.containerPath != null)
+ return false;
+ } else if (!containerPath.equals(other.containerPath))
+ return false;
+ if (flags == null) {
+ if (other.flags != null)
+ return false;
+ } else if (!flags.equals(other.flags))
+ return false;
+ if (hostPath == null) {
+ if (other.hostPath != null)
+ return false;
+ } else if (!hostPath.equals(other.hostPath))
+ return false;
+ return true;
+ }
+
+ }
+
+ /**
+ * Node to indicate that a job is running and loading data.
+ */
public static class LoadingStub {
private final Object element;
diff --git a/containers/org.eclipse.linuxtools.docker.ui/src/org/eclipse/linuxtools/internal/docker/ui/views/DockerExplorerLabelProvider.java b/containers/org.eclipse.linuxtools.docker.ui/src/org/eclipse/linuxtools/internal/docker/ui/views/DockerExplorerLabelProvider.java
index c1649f1210..42f88aeac5 100644
--- a/containers/org.eclipse.linuxtools.docker.ui/src/org/eclipse/linuxtools/internal/docker/ui/views/DockerExplorerLabelProvider.java
+++ b/containers/org.eclipse.linuxtools.docker.ui/src/org/eclipse/linuxtools/internal/docker/ui/views/DockerExplorerLabelProvider.java
@@ -26,7 +26,13 @@ import org.eclipse.linuxtools.docker.core.EnumDockerStatus;
import org.eclipse.linuxtools.docker.core.IDockerConnection;
import org.eclipse.linuxtools.docker.core.IDockerContainer;
import org.eclipse.linuxtools.docker.core.IDockerImage;
+import org.eclipse.linuxtools.docker.core.IDockerPortMapping;
import org.eclipse.linuxtools.internal.docker.ui.SWTImagesFactory;
+import org.eclipse.linuxtools.internal.docker.ui.views.DockerExplorerContentProvider.DockerContainerLink;
+import org.eclipse.linuxtools.internal.docker.ui.views.DockerExplorerContentProvider.DockerContainerLinksCategory;
+import org.eclipse.linuxtools.internal.docker.ui.views.DockerExplorerContentProvider.DockerContainerPortMappingsCategory;
+import org.eclipse.linuxtools.internal.docker.ui.views.DockerExplorerContentProvider.DockerContainerVolume;
+import org.eclipse.linuxtools.internal.docker.ui.views.DockerExplorerContentProvider.DockerContainerVolumesCategory;
import org.eclipse.linuxtools.internal.docker.ui.views.DockerExplorerContentProvider.DockerContainersCategory;
import org.eclipse.linuxtools.internal.docker.ui.views.DockerExplorerContentProvider.DockerImagesCategory;
import org.eclipse.linuxtools.internal.docker.ui.views.DockerExplorerContentProvider.LoadingStub;
@@ -78,6 +84,15 @@ public class DockerExplorerLabelProvider implements IStyledLabelProvider, ILabel
} else {
return SWTImagesFactory.DESC_CONTAINER_STOPPED.createImage();
}
+ } else if (element instanceof DockerContainerLinksCategory
+ || element instanceof DockerContainerLink) {
+ return SWTImagesFactory.DESC_CONTAINER_LINK.createImage();
+ } else if (element instanceof DockerContainerVolumesCategory
+ || element instanceof DockerContainerVolume) {
+ return SWTImagesFactory.DESC_CONTAINER_VOLUME.createImage();
+ } else if (element instanceof DockerContainerPortMappingsCategory
+ || element instanceof IDockerPortMapping) {
+ return SWTImagesFactory.DESC_CONTAINER_PORT.createImage();
} else if(element instanceof LoadingStub) {
return SWTImagesFactory.DESC_SYSTEM_PROCESS.createImage();
}
@@ -135,7 +150,7 @@ public class DockerExplorerLabelProvider implements IStyledLabelProvider, ILabel
if (!dockerImage.tags().isEmpty()) {
final List<String> tags = new ArrayList<>(dockerImage.tags());
Collections.sort(tags);
- messageBuilder.append(":");
+ messageBuilder.append(": ");
for (Iterator<String> tagIterator = tags.iterator(); tagIterator
.hasNext();) {
messageBuilder.append(tagIterator.next());
@@ -143,18 +158,75 @@ public class DockerExplorerLabelProvider implements IStyledLabelProvider, ILabel
messageBuilder.append(", ");
}
}
- final int startImageId = messageBuilder.length();
- messageBuilder.append(" (").append(imageShortId).append(')');
- final String message = messageBuilder.toString();
- final StyledString styledString = new StyledString(message);
- // styled tags
- styledString.setStyle(startTags, startImageId - startTags, StyledString.COUNTER_STYLER);
- // styled image id
- styledString.setStyle(startImageId, message.length() - startImageId, StyledString.QUALIFIER_STYLER);
- return styledString;
}
- } else if (element instanceof LoadingStub) {
- return new StyledString(DVMessages.getString("Loading.label")); //$NON-NLS-1$
+ final int startImageId = messageBuilder.length();
+ messageBuilder.append(" (").append(imageShortId).append(')');
+ final String message = messageBuilder.toString();
+ final StyledString styledString = new StyledString(message);
+ // styled tags
+ styledString.setStyle(startTags, startImageId - startTags,
+ StyledString.COUNTER_STYLER);
+ // styled image id
+ styledString.setStyle(startImageId, message.length() - startImageId,
+ StyledString.QUALIFIER_STYLER);
+ return styledString;
+ } else if (element instanceof DockerContainerPortMappingsCategory) {
+ return new StyledString(DVMessages
+ .getString("DockerContainerPortMappingsCategory.label")); //$NON-NLS-1$
+ } else if (element instanceof IDockerPortMapping) {
+ final IDockerPortMapping mapping = (IDockerPortMapping) element;
+ final String hostMapping = mapping.getIp() + ":"
+ + mapping.getPublicPort() + " -> ";
+ final String containerMapping = Integer
+ .toString(mapping.getPrivatePort());
+ final String mappingType = " (" + mapping.getType() + ")";
+ final StyledString styledString = new StyledString(
+ hostMapping + containerMapping + mappingType);
+ styledString.setStyle(
+ hostMapping.length() + containerMapping.length(),
+ mappingType.length(), StyledString.QUALIFIER_STYLER);
+ return styledString;
+ } else if (element instanceof DockerContainerVolumesCategory) {
+ return new StyledString(DVMessages
+ .getString("DockerContainerVolumesCategory.label")); //$NON-NLS-1$
+ } else if (element instanceof DockerContainerVolume) {
+ final DockerContainerVolume containerVolume = (DockerContainerVolume) element;
+ final String hostPath = containerVolume.getHostPath();
+ final StyledString styledString = new StyledString();
+ if (containerVolume.getHostPath() != null
+ && containerVolume.getContainerPath() != null) {
+ styledString.append(hostPath).append(" -> ")
+ .append(containerVolume.getContainerPath());
+ } else if (containerVolume.getHostPath() == null
+ && containerVolume.getContainerPath() != null) {
+ styledString.append(containerVolume.getContainerPath());
+ }
+ if (containerVolume.getFlags() != null) {
+ final int offset = styledString.length();
+ styledString.append(" (" + containerVolume.getFlags() + ")");
+ styledString.setStyle(offset, styledString.length() - offset,
+ StyledString.QUALIFIER_STYLER);
+ }
+ return styledString;
+ } else if (element instanceof DockerContainerLinksCategory) {
+ return new StyledString(
+ DVMessages.getString("DockerContainerLinksCategory.label")); //$NON-NLS-1$
+ } else if (element instanceof DockerContainerLink) {
+ final DockerContainerLink containerLink = (DockerContainerLink) element;
+ final String containerName = containerLink.getContainerName();
+ final String containerAlias = " ("
+ + containerLink.getContainerAlias() + ")";
+ final StyledString styledString = new StyledString(
+ containerName + containerAlias);
+ styledString.setStyle(containerName.length(),
+ containerAlias.length(), StyledString.QUALIFIER_STYLER);
+ return styledString;
+ } else if (element instanceof String) {
+ return new StyledString((String) element);
+ }
+
+ else if (element instanceof LoadingStub) {
+ return new StyledString(DVMessages.getString("Loading.label"));
}
return null;
}

Back to the top