/** * Set clone of argument as container. * @param container argument for cloning, can be null */ public void setContainer(ContainerSource container) { this.container = Cloneables.clone(container); }
@Override public ServiceSource clone() { ServiceSource clone; try { clone = (ServiceSource) super.clone(); } catch (CloneNotSupportedException e) { throw new RuntimeException(e); } clone.ports = Cloneables.clone(clone.ports); clone.labels = Cloneables.clone(clone.labels); clone.constraints = Cloneables.clone(clone.constraints); clone.container = Cloneables.clone(clone.container); return clone; }
@Override public ContainerSource clone() { ContainerSource clone = (ContainerSource) super.clone(); clone.command = Cloneables.clone(clone.command); clone.environment = Cloneables.clone(clone.environment); clone.volumes = Cloneables.clone(clone.volumes); clone.volumeBinds = Cloneables.clone(clone.volumeBinds); clone.volumesFrom = Cloneables.clone(clone.volumesFrom); clone.mounts = Cloneables.clone(clone.mounts); clone.ports = Cloneables.clone(clone.ports); clone.labels = Cloneables.clone(clone.labels); clone.links = Cloneables.clone(clone.links); clone.dns = Cloneables.clone(clone.dns); clone.entrypoint = Cloneables.clone(clone.entrypoint); clone.dnsSearch = Cloneables.clone(clone.dnsSearch); clone.networks = Cloneables.clone(clone.networks); clone.extraHosts = Cloneables.clone(clone.extraHosts); clone.securityOpt = Cloneables.clone(clone.securityOpt); clone.include = Cloneables.clone(clone.include); return clone; }
@Override public RootSource clone() { try { RootSource clone = (RootSource) super.clone(); clone.clusters = Cloneables.clone(clone.clusters); return clone; } catch (CloneNotSupportedException e) { throw new RuntimeException(e); } } }
@Override public ApplicationSource clone() { try { ApplicationSource clone = (ApplicationSource) super.clone(); clone.containers = Cloneables.clone(clone.containers); // do not forget uncomment below //clone.networks = Cloneables.clone(clone.networks); //clone.volumes = Cloneables.clone(clone.volumes); return clone; } catch (CloneNotSupportedException e) { throw new RuntimeException(e); } }
@SuppressWarnings("unchecked") private static <T> Collection<T> clone(Collection<T> src) { // also we may preallocate lists for src size Collection<T> collection = BeanUtils.instantiate(src.getClass()); src.forEach(i -> collection.add(clone(i))); return src; } }
@Override public DockerClusterConfig clone() { DockerClusterConfig clone = super.clone(); clone.managers = Cloneables.clone(clone.managers); return clone; } }
/** * @param src * @param <T> */ @SuppressWarnings("unchecked") public static <T> T clone(T src) { if(src == null) { return null; } Class<?> clazz = src.getClass(); if(Map.class.isAssignableFrom(clazz)) { return (T) clone((Map<?, ?>) src); } if(Collection.class.isAssignableFrom(clazz)) { return (T) clone((Collection<?>) src); } if(Cloneable.class.isAssignableFrom(clazz)) { try { Method cloner = clazz.getDeclaredMethod("clone"); return (T) cloner.invoke(src); } catch (ReflectiveOperationException e) { throw new RuntimeException("Can not clone instance of " + clazz, e); } } return src; }