package io.cattle.platform.docker.process.serializer;
import static io.cattle.platform.core.model.tables.InstanceTable.*;
import io.cattle.platform.core.constants.InstanceConstants;
import io.cattle.platform.core.model.Instance;
import io.cattle.platform.core.model.Volume;
import io.cattle.platform.core.util.InstanceHelpers;
import io.cattle.platform.docker.constants.DockerInstanceConstants;
import io.cattle.platform.json.JsonMapper;
import io.cattle.platform.object.ObjectManager;
import io.cattle.platform.object.serialization.ObjectTypeSerializerPostProcessor;
import io.cattle.platform.object.util.DataAccessor;
import io.github.ibuildthecloud.gdapi.condition.Condition;
import io.github.ibuildthecloud.gdapi.condition.ConditionType;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import javax.inject.Inject;
public class DockerContainerSerializer implements ObjectTypeSerializerPostProcessor {
JsonMapper jsonMapper;
ObjectManager objectManager;
@Override
public String[] getTypes() {
return new String[] { InstanceConstants.TYPE };
}
@SuppressWarnings({ "rawtypes", "unchecked" })
@Override
public void process(Object obj, String type, Map<String, Object> data) {
if (!(obj instanceof Instance))
return;
Instance instance = (Instance) obj;
if (!InstanceConstants.CONTAINER_LIKE.contains(instance.getKind()))
return;
List volumesFromContainerIds = DataAccessor.fields(instance).withKey(DockerInstanceConstants.FIELD_VOLUMES_FROM).as(jsonMapper, List.class);
List<Instance> containers = null;
if (volumesFromContainerIds != null && !volumesFromContainerIds.isEmpty()) {
Condition condition = new Condition(ConditionType.IN, volumesFromContainerIds);
containers = objectManager.find(Instance.class, INSTANCE.ID, condition);
}
if (containers == null)
containers = new ArrayList<Instance>();
data.put(DockerInstanceConstants.EVENT_FIELD_VOLUMES_FROM, containers);
List<Volume>volumes = InstanceHelpers.extractVolumesFromMounts(instance, objectManager);
data.put(DockerInstanceConstants.EVENT_FIELD_VOLUMES_FROM_DVM, volumes);
}
public JsonMapper getJsonMapper() {
return jsonMapper;
}
@Inject
public void setJsonMapper(JsonMapper jsonMapper) {
this.jsonMapper = jsonMapper;
}
public ObjectManager getObjectManager() {
return objectManager;
}
@Inject
public void setObjectManager(ObjectManager objectManager) {
this.objectManager = objectManager;
}
}