package com.clouck.comparator;
import java.util.Collection;
import java.util.List;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import com.amazonaws.services.ec2.model.PlacementGroup;
import com.clouck.exception.ClouckUnexpectedConditionException;
import com.clouck.model.Event;
import com.clouck.model.EventType;
import com.clouck.model.aws.ec2.Ec2PlacementGroup;
import com.clouck.model.aws.ec2.Ec2Version;
@Component
public class Ec2PlacementGroupComparator extends AbstractEc2Comparator<Ec2PlacementGroup> {
private static final Logger log = LoggerFactory.getLogger(Ec2PlacementGroupComparator.class);
@Override
public Event firstScan() {
return createFirstScanEvent(EventType.Ec2_PlacementGroup_First_Scan);
}
@Override
public Event initialise(Ec2PlacementGroup newResource) {
return createEvent(null, newResource, EventType.Ec2_PlacementGroup_Found);
}
@Override
public Event add(Ec2PlacementGroup newResource) {
PlacementGroup placementGroup = newResource.getResource();
String state = placementGroup.getState();
switch (state) {
case "pending":
return createEvent(null, newResource, EventType.Ec2_PlacementGroup_Pending);
case "deleting":
return createEvent(null, newResource, EventType.Ec2_PlacementGroup_Deleting);
// case "deleted":
case "available":
return createEvent(null, newResource, EventType.Ec2_PlacementGroup_Create);
default:
log.error("not handled placement group state:{}", state);
return createEvent(null, newResource, EventType.Unknown);
}
}
@Override
public Event delete(Ec2PlacementGroup oldResource) {
return createEvent(oldResource, null, EventType.Ec2_PlacementGroup_Delete);
}
@Override
protected void update(List<Event> result, Ec2PlacementGroup oldResource, Ec2PlacementGroup newResource) {
PlacementGroup newPlacementGroup = newResource.getResource();
PlacementGroup oldPlacementGroup = oldResource.getResource();
String newState = newPlacementGroup.getState();
String oldState = oldPlacementGroup.getState();
if (notEqual(newState, oldState)) {
switch (newState) {
case "pending":
result.add(createEvent(oldResource, newResource, EventType.Ec2_PlacementGroup_Pending));
break;
case "deleting":
result.add(createEvent(oldResource, newResource, EventType.Ec2_PlacementGroup_Deleting));
// case "deleted":
break;
case "available":
result.add(createEvent(oldResource, newResource, EventType.Ec2_PlacementGroup_Create));
break;
default:
log.error("not handled placement group state:{}", newState);
result.add(createEvent(oldResource, newResource, EventType.Unknown));
}
}
}
}