@Override
 public Object[] getChildren(Object parentElement) {
   final Object propertyValue = ((Object[]) parentElement)[1];
   if (propertyValue instanceof IDockerContainerState) {
     final IDockerContainerState containerState = (IDockerContainerState) propertyValue;
     return new Object[] {
       new Object[] {"ExitCode", containerState.exitCode()}, // $NON-NLS-1$
       new Object[] {
         "Finished at", LabelUtils.toFinishedDate(containerState.finishDate())
       }, //$NON-NLS-1$
       new Object[] {"Running", containerState.running()}, // $NON-NLS-1$
       new Object[] {"Paused", containerState.paused()}, // $NON-NLS-1$
       new Object[] {"Pid", containerState.pid()}, // $NON-NLS-1$
     };
   } else if (propertyValue instanceof IDockerHostConfig) {
     final IDockerHostConfig hostConfig = (IDockerHostConfig) propertyValue;
     return new Object[] {
       new Object[] {"Binds", LabelUtils.reduce(hostConfig.binds())}, // $NON-NLS-1$
       new Object[] {"ContainerIDFile", hostConfig.containerIDFile()}, // $NON-NLS-1$
       new Object[] {"Dns", LabelUtils.reduce(hostConfig.dns())}, // $NON-NLS-1$
       new Object[] {"DnsSearch", LabelUtils.reduce(hostConfig.dnsSearch())}, // $NON-NLS-1$
       new Object[] {"Links", splitLinks(hostConfig.links())}, // $NON-NLS-1$
       new Object[] {"LxcConf", hostConfig.lxcConf()}, // $NON-NLS-1$
       new Object[] {"NetworkMode", hostConfig.networkMode()}, // $NON-NLS-1$
       new Object[] {"PortBindings", LabelUtils.reduce(hostConfig.portBindings())}, // $NON-NLS-1$
       new Object[] {"Privileged", hostConfig.privileged()}, // $NON-NLS-1$
       new Object[] {"PublishAllPorts", hostConfig.publishAllPorts()}, // $NON-NLS-1$
       new Object[] {"VolumesFrom", LabelUtils.reduce(hostConfig.volumesFrom())}, // $NON-NLS-1$
     };
   } else if (propertyValue instanceof IDockerContainerConfig) {
     final IDockerContainerConfig config = (IDockerContainerConfig) propertyValue;
     return new Object[] {
       new Object[] {"AttachStderr", config.attachStderr()}, // $NON-NLS-1$
       new Object[] {"AttachStdin", config.attachStdin()}, // $NON-NLS-1$
       new Object[] {"AttachStdout", config.attachStdout()}, // $NON-NLS-1$
       new Object[] {"Cmd", LabelUtils.reduce(config.cmd())}, // $NON-NLS-1$
       new Object[] {"CpuSet", config.cpuset()}, // $NON-NLS-1$
       new Object[] {"CpuShares", config.cpuShares()}, // $NON-NLS-1$
       new Object[] {"Domainname", config.domainname()}, // $NON-NLS-1$
       new Object[] {"Entrypoint", LabelUtils.reduce(config.entrypoint())}, // $NON-NLS-1$
       new Object[] {"Env", LabelUtils.reduce(config.env())}, // $NON-NLS-1$
       new Object[] {"ExposedPorts", LabelUtils.reduce(config.exposedPorts())}, // $NON-NLS-1$
       new Object[] {"Hostname", config.hostname()}, // $NON-NLS-1$
       new Object[] {"Image", config.image()}, // $NON-NLS-1$
       new Object[] {"Memory", config.memory()}, // $NON-NLS-1$
       new Object[] {"MemorySwap", config.memorySwap()}, // $NON-NLS-1$
       new Object[] {"NetworkDisabled", config.networkDisabled()}, // $NON-NLS-1$
       new Object[] {"OnBuild", config.onBuild()}, // $NON-NLS-1$
       new Object[] {"OpenStdin", config.openStdin()}, // $NON-NLS-1$
       new Object[] {"PortSpecs", LabelUtils.reduce(config.portSpecs())}, // $NON-NLS-1$
       new Object[] {"StdinOnce", config.stdinOnce()}, // $NON-NLS-1$
       new Object[] {"Tty", config.tty()}, // $NON-NLS-1$
       new Object[] {"Volumes", config.volumes()}, // $NON-NLS-1$
       new Object[] {"WorkingDir", config.workingDir()}, // $NON-NLS-1$
     };
   } else if (propertyValue instanceof IDockerPortBinding) {
     final IDockerPortBinding portBinding = (IDockerPortBinding) propertyValue;
     return new Object[] {
       new Object[] {"Host IP/Port", LabelUtils.toString(portBinding)} // $NON-NLS-1$
     };
   } else if (propertyValue instanceof IDockerNetworkSettings) {
     final IDockerNetworkSettings networkSettings = (IDockerNetworkSettings) propertyValue;
     return new Object[] {
       new Object[] {"Bridge", networkSettings.bridge()}, // $NON-NLS-1$
       new Object[] {"Gateway", networkSettings.gateway()}, // $NON-NLS-1$
       new Object[] {"IPAddress", networkSettings.ipAddress()}, // $NON-NLS-1$
       new Object[] {"IPPrefixLen", networkSettings.ipPrefixLen()}, // $NON-NLS-1$
       new Object[] {"PortMapping", networkSettings.portMapping()}, // $NON-NLS-1$
       new Object[] {"Ports", LabelUtils.reduce(networkSettings.ports())}, // $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[] {"", LabelUtils.toString(propertyValues.get(i))}; // $NON-NLS-1$
     }
     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;
 }