/** * */ package com.thinkbiganalytics.metadata.sla.spi.core; /*- * #%L * thinkbig-sla-core * %% * Copyright (C) 2017 ThinkBig Analytics * %% * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * #L% */ import com.google.common.collect.ComparisonChain; import com.thinkbiganalytics.metadata.sla.api.AssessmentResult; import com.thinkbiganalytics.metadata.sla.api.ObligationAssessment; import com.thinkbiganalytics.metadata.sla.api.ServiceLevelAgreement; import com.thinkbiganalytics.metadata.sla.api.ServiceLevelAssessment; import org.apache.commons.lang3.StringUtils; import org.joda.time.DateTime; import java.io.Serializable; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.HashSet; import java.util.List; import java.util.Set; import java.util.UUID; /** * */ public class SimpleServiceLevelAssessment implements ServiceLevelAssessment { private static final long serialVersionUID = 2752726049105871947L; private DateTime time; private ServiceLevelAgreement sla; private String message = ""; private AssessmentResult result = AssessmentResult.SUCCESS; private Set<ObligationAssessment> obligationAssessments; private ServiceLevelAssessment.ID id; /** * */ protected SimpleServiceLevelAssessment() { this.id = new AssessmentId(UUID.randomUUID()); this.time = DateTime.now(); this.obligationAssessments = new HashSet<ObligationAssessment>(); } public SimpleServiceLevelAssessment(ServiceLevelAgreement sla) { this(); this.sla = sla; } public SimpleServiceLevelAssessment(ServiceLevelAgreement sla, String message, AssessmentResult result) { super(); this.id = new AssessmentId(UUID.randomUUID()); this.sla = sla; this.message = message; this.result = result; } /* (non-Javadoc) * @see com.thinkbiganalytics.metadata.sla.api.ServiceLevelAssessment#getTime() */ @Override public DateTime getTime() { return this.time; } protected void setTime(DateTime time) { this.time = time; } /* (non-Javadoc) * @see com.thinkbiganalytics.metadata.sla.api.ServiceLevelAssessment#getSLA() */ @Override public ServiceLevelAgreement getAgreement() { return this.sla; } @Override public String getServiceLevelAgreementId() { return this.sla != null ? this.sla.getId().toString() : null; } /* (non-Javadoc) * @see com.thinkbiganalytics.metadata.sla.api.ServiceLevelAssessment#getMessage() */ @Override public String getMessage() { return this.message; } protected void setMessage(String message) { this.message = message; } /* (non-Javadoc) * @see com.thinkbiganalytics.metadata.sla.api.ServiceLevelAssessment#getResult() */ @Override public AssessmentResult getResult() { return this.result; } protected void setResult(AssessmentResult result) { this.result = result; } /* (non-Javadoc) * @see com.thinkbiganalytics.metadata.sla.api.ServiceLevelAssessment#getObligationAssessments() */ @Override public Set<ObligationAssessment> getObligationAssessments() { return new HashSet<ObligationAssessment>(this.obligationAssessments); } @Override public int compareTo(ServiceLevelAssessment sla) { ComparisonChain chain = ComparisonChain .start() .compare(this.getResult(), sla.getResult()) .compare(this.getAgreement().getName(), sla.getAgreement().getName()); if (chain.result() != 0) { return chain.result(); } List<ObligationAssessment> list1 = new ArrayList<>(this.getObligationAssessments()); List<ObligationAssessment> list2 = new ArrayList<>(sla.getObligationAssessments()); chain = chain.compare(list1.size(), list2.size()); Collections.sort(list1); Collections.sort(list2); for (int idx = 0; idx < list1.size(); idx++) { chain = chain.compare(list1.get(idx), list2.get(idx)); } return chain.result(); } protected boolean add(ObligationAssessment assessment) { return this.obligationAssessments.add(assessment); } protected boolean addAll(Collection<? extends ObligationAssessment> assessments) { return this.obligationAssessments.addAll(assessments); } protected void setSla(ServiceLevelAgreement sla) { this.sla = sla; } @Override public ID getId() { return this.id; } public static class AssessmentId implements ID { private static final long serialVersionUID = -9084653006891727475L; private String idValue; public AssessmentId() { } public AssessmentId(Serializable ser) { if (ser instanceof String) { String uuid = (String) ser; if (!StringUtils.contains(uuid, "-")) { uuid = ((String) ser).replaceFirst("([0-9a-fA-F]{8})([0-9a-fA-F]{4})([0-9a-fA-F]{4})([0-9a-fA-F]{4})([0-9a-fA-F]+)", "$1-$2-$3-$4-$5"); } setUuid(UUID.fromString(uuid)); } else if (ser instanceof UUID) { setUuid((UUID) ser); } else { throw new IllegalArgumentException("Unknown ID value: " + ser); } } public String getIdValue() { return idValue; } @Override public String toString() { return idValue; } public UUID getUuid() { return UUID.fromString(idValue); } public void setUuid(UUID uuid) { this.idValue = uuid.toString(); } } }