package io.github.ibuildthecloud.gdapi.validation;
import io.github.ibuildthecloud.gdapi.model.Resource;
import io.github.ibuildthecloud.gdapi.request.resource.ResourceManager;
import io.github.ibuildthecloud.gdapi.request.resource.ResourceManagerLocator;
import io.github.ibuildthecloud.gdapi.util.RequestUtils;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.inject.Inject;
import org.apache.commons.lang3.StringUtils;
public class ResourceManagerReferenceValidator implements ReferenceValidator {
ResourceManagerLocator locator;
@Override
public Object getById(String type, String id) {
ResourceManager manager = locator.getResourceManagerByType(type);
return manager == null ? null : manager.getById(type, id, null);
}
@Override
public Object getByField(String type, String fieldName, Object value, String id) {
ResourceManager manager = locator.getResourceManagerByType(type);
if (manager == null) {
return null;
}
Map<Object, Object> criteria = new HashMap<Object, Object>();
criteria.put(fieldName, value);
Object result = manager.list(type, criteria, null);
List<?> list = RequestUtils.toList(result);
if (StringUtils.isNotBlank(id)) {
Object x = manager.getById(type, id, null);
if (list.size() > 0 && x != null) {
list.remove(x);
}
}
return list.size() == 0 ? null : list.get(0);
}
@Override
public Resource getResourceId(String type, String id) {
ResourceManager manager = locator.getResourceManagerByType(type);
if (manager == null) {
return null;
}
Object result = manager.getById(type, id, null);
if (result == null) {
return null;
}
return manager.convertResponse(result, null);
}
public ResourceManagerLocator getLocator() {
return locator;
}
@Inject
public void setLocator(ResourceManagerLocator locator) {
this.locator = locator;
}
}