package io.cattle.platform.core.dao.impl;
import io.cattle.platform.core.dao.GenericResourceDao;
import io.cattle.platform.object.ObjectManager;
import io.cattle.platform.object.process.ObjectProcessManager;
import io.cattle.platform.object.process.StandardProcess;
import io.cattle.platform.util.type.CollectionUtils;
import java.util.Map;
import javax.inject.Inject;
import javax.inject.Named;
@Named
public class GenericResourceDaoImpl implements GenericResourceDao {
ObjectManager objectManager;
ObjectProcessManager processManager;
@Override
public <T> T createAndSchedule(Class<T> clz, Map<String, Object> properties) {
T obj = objectManager.create(clz, properties);
processManager.scheduleStandardProcess(StandardProcess.CREATE, obj, properties);
return objectManager.reload(obj);
}
@Override
public <T> T createAndSchedule(Class<T> clz, Object key, Object... values) {
Map<Object,Object> properties = CollectionUtils.asMap(key, values);
return createAndSchedule(clz, objectManager.convertToPropertiesFor(clz, properties));
}
@Override
public <T> T createAndSchedule(T obj, Map<String, Object> processData) {
obj = objectManager.create(obj);
processManager.scheduleStandardProcess(StandardProcess.CREATE, obj, processData);
return objectManager.reload(obj);
}
@Override
public <T> T createAndSchedule(T o) {
T obj = objectManager.create(o);
processManager.scheduleStandardProcess(StandardProcess.CREATE, obj, null);
return objectManager.reload(o);
}
@Override
public <T> T updateAndSchedule(T o) {
T obj = objectManager.persist(o);
processManager.scheduleStandardProcess(StandardProcess.UPDATE, obj, null);
return objectManager.reload(o);
}
@Override
public <T> T updateAndSchedule(T o, Map<String, Object> fields) {
o = objectManager.reload(o);
T obj = objectManager.setFields(o, fields);
processManager.scheduleStandardProcess(StandardProcess.UPDATE, obj, null);
return objectManager.reload(o);
}
@Override
public <T> T create(Class<T> clz, Object key, Object... values) {
Map<Object,Object> properties = CollectionUtils.asMap(key, values);
return create(clz, objectManager.convertToPropertiesFor(clz, properties));
}
@Override
public <T> T create(Class<T> clz, Map<String, Object> properties) {
T obj = objectManager.create(clz, properties);
processManager.executeStandardProcess(StandardProcess.CREATE, obj, properties);
return objectManager.reload(obj);
}
public ObjectProcessManager getProcessManager() {
return processManager;
}
@Inject
public void setProcessManager(ObjectProcessManager processManager) {
this.processManager = processManager;
}
public ObjectManager getObjectManager() {
return objectManager;
}
@Inject
public void setObjectManager(ObjectManager objectManager) {
this.objectManager = objectManager;
}
}