/**
*
*/
package com.thinkbiganalytics.metadata.sla.spi;
/*-
* #%L
* thinkbig-sla-api
* %%
* 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.thinkbiganalytics.metadata.sla.api.ServiceLevelAgreement;
import java.io.Serializable;
import java.util.List;
/**
* A provider for creating and managing SLAs.
*/
public interface ServiceLevelAgreementProvider {
// TODO Add criteria-based SLA search methods
/**
* Resolves an ID from a serialized form, for instance the string result from the toSting() method of an ID.
*
* @param ser some serializable form
* @return a reconstituted SLA ID
*/
ServiceLevelAgreement.ID resolve(Serializable ser);
/**
* @return a set of all SLAs
*/
List<ServiceLevelAgreement> getAgreements();
/**
* @param id the ID of an SLA
* @return the SLA corresponding to the given ID, or null if the SLA no longer exists
*/
ServiceLevelAgreement getAgreement(ServiceLevelAgreement.ID id);
/**
* Search for an SLA by name.
*
* @param slaName to name to match
* @return the SLA or null if not found
*/
// TODO: remove/deprecate this method when criteria-based search methods are added
ServiceLevelAgreement findAgreementByName(String slaName);
/**
* Removes an SLA with the given ID.
*
* @param id the ID of an SLA
* @return true of the SLA existed and was SLA, otherwise false
*/
boolean removeAgreement(ServiceLevelAgreement.ID id);
/**
* Produces a new builder for creating a new SLA.
*
* @return the builder
*/
ServiceLevelAgreementBuilder builder();
/**
* Produces a new builder for creating a new SLA that replaces another one having the given ID.
*
* @param id the ID of the SLA that will be replaced
* @return the builder
*/
ServiceLevelAgreementBuilder builder(ServiceLevelAgreement.ID id);
ServiceLevelAgreementCheckBuilder slaCheckBuilder(ServiceLevelAgreement.ID slaId);
}