package org.arquillian.cube.docker.impl.client.config; import java.lang.reflect.Field; import java.util.HashMap; import java.util.Map; import org.arquillian.cube.spi.metadata.NetworkMetadata; public class Network { private Map<Class<? extends NetworkMetadata>, Object> metadata = new HashMap<>(); private String driver; private IPAM ipam; private Map<String, String> options; public String getDriver() { return driver; } public void setDriver(String driver) { this.driver = driver; } public IPAM getIpam() { return ipam; } public void setIpam(IPAM ipam) { this.ipam = ipam; } public void merge(Network container) { try { Field[] fields = Network.class.getDeclaredFields(); for (Field field : fields) { if (!field.isAccessible()) { field.setAccessible(true); } Object thisVal = field.get(this); if (thisVal == null) { Object otherVal = field.get(container); field.set(this, otherVal); } } } catch (Exception e) { throw new RuntimeException("Could not merge objects", e); } } public Map<String, String> getOptions() { return options; } public void setOptions(Map<String, String> options) { this.options = options; } public <X extends NetworkMetadata> boolean hasMetadata(Class<X> type) { return metadata.containsKey(type); } public <X extends NetworkMetadata> void addMetadata(Class<X> type, X impl) { metadata.put(type, impl); } public <X extends NetworkMetadata> X getMetadata(Class<X> type) { return (X) metadata.get(type); } }