package io.cattle.platform.systemstack.api;
import io.cattle.platform.core.addon.CatalogTemplate;
import io.cattle.platform.core.constants.AccountConstants;
import io.cattle.platform.core.constants.ProjectTemplateConstants;
import io.cattle.platform.core.model.Account;
import io.cattle.platform.core.model.ProjectTemplate;
import io.cattle.platform.iaas.api.filter.common.AbstractDefaultResourceManagerFilter;
import io.cattle.platform.json.JsonMapper;
import io.cattle.platform.object.ObjectManager;
import io.cattle.platform.object.util.DataAccessor;
import io.cattle.platform.systemstack.listener.SystemStackUpdate;
import io.cattle.platform.util.type.CollectionUtils;
import io.github.ibuildthecloud.gdapi.factory.SchemaFactory;
import io.github.ibuildthecloud.gdapi.request.ApiRequest;
import io.github.ibuildthecloud.gdapi.request.resource.ResourceManager;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import javax.inject.Inject;
import javax.inject.Named;
import org.apache.commons.lang3.StringUtils;
public class AccountCreateFilter extends AbstractDefaultResourceManagerFilter {
@Inject @Named("CoreSchemaFactory")
SchemaFactory schemaFactory;
@Inject
ObjectManager objectManager;
@Inject
JsonMapper jsonMapper;
@Override
public Object create(String type, ApiRequest request, ResourceManager next) {
Account account = request.proxyRequestObject(Account.class);
ProjectTemplate template = objectManager.loadResource(ProjectTemplate.class, account.getProjectTemplateId());
if (template == null) {
return super.create(type, request, next);
}
List<CatalogTemplate> templates = DataAccessor.fieldObjectList(template, ProjectTemplateConstants.FIELD_STACKS, CatalogTemplate.class, jsonMapper);
if (templates == null) {
return super.create(type, request, next);
}
List<String> ids = new ArrayList<>();
for (CatalogTemplate catalogTemplate : templates) {
String id = catalogTemplate.getTemplateVersionId();
if (StringUtils.isBlank(id)) {
id = catalogTemplate.getTemplateId();
}
if (StringUtils.isNotBlank(id)) {
ids.add(id);
}
}
Map<String, Object> input = CollectionUtils.toMap(request.getRequestObject());
input.put(AccountConstants.FIELD_ORCHESTRATION, SystemStackUpdate.chooseOrchestration(ids));
return super.create(type, request, next);
}
@Override
public String[] getTypes() {
List<String> names = schemaFactory.getSchemaNames(Account.class);
return names.toArray(new String[names.size()]);
}
}