package io.cattle.platform.servicediscovery.process;
import static io.cattle.platform.core.model.tables.InstanceLinkTable.*;
import io.cattle.platform.core.constants.InstanceLinkConstants;
import io.cattle.platform.core.model.Instance;
import io.cattle.platform.core.model.InstanceLink;
import io.cattle.platform.core.model.Service;
import io.cattle.platform.core.model.ServiceConsumeMap;
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.process.common.handler.AbstractObjectProcessHandler;
import io.cattle.platform.servicediscovery.api.dao.ServiceConsumeMapDao;
import java.util.List;
import javax.inject.Inject;
import javax.inject.Named;
import org.jooq.tools.StringUtils;
@Named
public class ServiceLinkActivateHandler extends AbstractObjectProcessHandler implements ProcessPreListener {
@Inject
ServiceConsumeMapDao consumeMapDao;
@Override
public String[] getProcessNames() {
return new String[] { "instancelink.activate" };
}
@Override
public HandlerResult handle(ProcessState state, ProcessInstance process) {
InstanceLink link = (InstanceLink)state.getResource();
if (link.getServiceConsumeMapId() == null) {
return null;
}
ServiceConsumeMap map = objectManager.loadResource(ServiceConsumeMap.class, link.getServiceConsumeMapId());
String serviceName = map.getName();
if (StringUtils.isBlank(serviceName)) {
Service service = objectManager.loadResource(Service.class, map.getConsumedServiceId());
serviceName = service.getName();
}
Instance instance = consumeMapDao.findOneInstanceForService(map.getConsumedServiceId());
List<String> names = consumeMapDao.findInstanceNamesForService(map.getConsumedServiceId());
return new HandlerResult(INSTANCE_LINK.LINK_NAME, serviceName,
InstanceLinkConstants.FIELD_INSTANCE_NAMES, names,
INSTANCE_LINK.TARGET_INSTANCE_ID, instance == null ? null : instance.getId());
}
}