package io.cattle.platform.process.externalevent;
import static io.cattle.platform.core.model.tables.AgentTable.*;
import io.cattle.platform.core.constants.AgentConstants;
import io.cattle.platform.core.constants.ExternalEventConstants;
import io.cattle.platform.core.model.Agent;
import io.cattle.platform.core.model.ExternalEvent;
import io.cattle.platform.engine.handler.HandlerResult;
import io.cattle.platform.engine.handler.ProcessPreListener;
import io.cattle.platform.engine.process.ProcessInstance;
import io.cattle.platform.engine.process.ProcessState;
import io.cattle.platform.object.meta.ObjectMetaDataManager;
import io.cattle.platform.object.util.DataAccessor;
import io.cattle.platform.process.common.handler.AbstractObjectProcessLogic;
import io.cattle.platform.util.type.Priority;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.inject.Named;
@Named
public class ExternalEventPreCreate extends AbstractObjectProcessLogic implements ProcessPreListener, Priority {
@Override
public String[] getProcessNames() {
return new String[] { "externalevent.create" };
}
@Override
public HandlerResult handle(ProcessState state, ProcessInstance process) {
// event's account id is set to the agent that submitted. This will change it to the actual user's account id.
ExternalEvent event = (ExternalEvent)state.getResource();
List<Agent> agents = objectManager.find(Agent.class, AGENT.ACCOUNT_ID, event.getAccountId());
if (agents.size() == 1) {
Agent agent = agents.get(0);
Long resourceAccId = DataAccessor.fromDataFieldOf(agent).withKey(AgentConstants.DATA_AGENT_RESOURCES_ACCOUNT_ID).as(Long.class);
Map<String, Object> data = new HashMap<String, Object>();
if (resourceAccId != null) {
data.put(ObjectMetaDataManager.ACCOUNT_FIELD, resourceAccId);
}
if (event.getReportedAccountId() != null) {
data.put(ExternalEventConstants.FIELD_REPORTED_ACCOUNT_ID, event.getReportedAccountId());
} else {
data.put(ExternalEventConstants.FIELD_REPORTED_ACCOUNT_ID, event.getAccountId());
}
return new HandlerResult(data);
}
return null;
}
@Override
public int getPriority() {
return Priority.DEFAULT;
}
}