// Path: src/main/java/com/github/vedenin/codingchallenge/common/CurrencyEnum.java
// public enum CurrencyEnum {
//     EUR("EUR", "Euro (EUR)"),
//     USD("USD", "US Dollar (USD)"),
//     GBP("GBP", "British Pound (GBP)"),
//     NZD("NZD", "New Zealand Dollar (NZD)"),
//     AUD("AUD", "Australian Dollar (AUD)"),
//     JPY("JPY", "Japanese Yen (JPY)"),
//     HUF("HUF", "Hungarian Forint (HUF)"),
//     RUB("RUB", "Russian Ruble (RUB)"),
//     PLN("PLN", "Polish Zloty (PLN)");
//     private final String code;
//     private final String description;
// 
//     CurrencyEnum(String code, String description) {
//         this.code = code;
//         this.description = description;
//     }
// 
//     public String getCode() {
//         return code;
//     }
// 
//     public String getDescription() {
//         return description;
//     }
// }
// 
// Path: src/main/java/com/github/vedenin/codingchallenge/persistence/ErrorEntity.java
// @Entity
// public class ErrorEntity {
//     @Id
//     @GeneratedValue(strategy= GenerationType.AUTO)
//     private Long   id;
//     private String errorMessage;
//     private Exception exp;
// 
//     public ErrorEntity(String errorMessage, Exception exp) {
//         this.errorMessage = errorMessage;
//         this.exp = exp;
//     }
// 
//     public ErrorEntity() {
//     }
// 
//     public Long getId() {
//         return id;
//     }
// 
//     public void setId(Long id) {
//         this.id = id;
//     }
// 
//     public String getErrorMessage() {
//         return errorMessage;
//     }
// 
//     public void setErrorMessage(String errorMessage) {
//         this.errorMessage = errorMessage;
//     }
// 
//     public Exception getExp() {
//         return exp;
//     }
// 
//     public void setExp(Exception exp) {
//         this.exp = exp;
//     }
// }
// 
// Path: src/main/java/com/github/vedenin/codingchallenge/persistence/ErrorRepository.java
// public interface ErrorRepository extends CrudRepository<ErrorEntity, Long> {
// }
// 
// Path: src/main/java/com/github/vedenin/codingchallenge/persistence/PropertyService.java
// @Service
// public class PropertyService {
//     @Inject
//     PropertyRepository repository;
// 
//     public DefaultProperty getDefaultProperties() {
//         DefaultProperty properties = repository.findOne(1L);
//         if(properties == null) {
//             properties = new DefaultProperty();
//             repository.save(properties);
//         }
//         return properties;
//     }
// 
//     public void setDefaultProperties(DefaultProperty properties) {
//         repository.save(properties);
//     }
// }


import com.github.vedenin.codingchallenge.common.CurrencyEnum;
import com.github.vedenin.codingchallenge.persistence.ErrorEntity;
import com.github.vedenin.codingchallenge.persistence.ErrorRepository;
import com.github.vedenin.codingchallenge.persistence.PropertyService;
import com.google.common.cache.Cache;
import com.google.common.cache.CacheBuilder;
import org.springframework.stereotype.Service;
import javax.inject.Inject;
import java.math.BigDecimal;
import java.util.Calendar;
import java.util.List;
import java.util.concurrent.TimeUnit;
package com.github.vedenin.codingchallenge.restclient;



/**
 * Rest client that used all services before one of services not returns
 * correct result
 * <p>
 * Created by slava on 10.02.17.
 */
@Service("FaultTolerant")
public class FaultTolerantRestClient implements RestClient {
    private static final long INIT_DURATION = 60L * 60L;
    @Inject
    private List<RestClient> list;
    @Inject
// Path: src/main/java/com/github/vedenin/codingchallenge/common/CurrencyEnum.java
// public enum CurrencyEnum {
//     EUR("EUR", "Euro (EUR)"),
//     USD("USD", "US Dollar (USD)"),
//     GBP("GBP", "British Pound (GBP)"),
//     NZD("NZD", "New Zealand Dollar (NZD)"),
//     AUD("AUD", "Australian Dollar (AUD)"),
//     JPY("JPY", "Japanese Yen (JPY)"),
//     HUF("HUF", "Hungarian Forint (HUF)"),
//     RUB("RUB", "Russian Ruble (RUB)"),
//     PLN("PLN", "Polish Zloty (PLN)");
//     private final String code;
//     private final String description;
// 
//     CurrencyEnum(String code, String description) {
//         this.code = code;
//         this.description = description;
//     }
// 
//     public String getCode() {
//         return code;
//     }
// 
//     public String getDescription() {
//         return description;
//     }
// }
// 
// Path: src/main/java/com/github/vedenin/codingchallenge/persistence/ErrorEntity.java
// @Entity
// public class ErrorEntity {
//     @Id
//     @GeneratedValue(strategy= GenerationType.AUTO)
//     private Long   id;
//     private String errorMessage;
//     private Exception exp;
// 
//     public ErrorEntity(String errorMessage, Exception exp) {
//         this.errorMessage = errorMessage;
//         this.exp = exp;
//     }
// 
//     public ErrorEntity() {
//     }
// 
//     public Long getId() {
//         return id;
//     }
// 
//     public void setId(Long id) {
//         this.id = id;
//     }
// 
//     public String getErrorMessage() {
//         return errorMessage;
//     }
// 
//     public void setErrorMessage(String errorMessage) {
//         this.errorMessage = errorMessage;
//     }
// 
//     public Exception getExp() {
//         return exp;
//     }
// 
//     public void setExp(Exception exp) {
//         this.exp = exp;
//     }
// }
// 
// Path: src/main/java/com/github/vedenin/codingchallenge/persistence/ErrorRepository.java
// public interface ErrorRepository extends CrudRepository<ErrorEntity, Long> {
// }
// 
// Path: src/main/java/com/github/vedenin/codingchallenge/persistence/PropertyService.java
// @Service
// public class PropertyService {
//     @Inject
//     PropertyRepository repository;
// 
//     public DefaultProperty getDefaultProperties() {
//         DefaultProperty properties = repository.findOne(1L);
//         if(properties == null) {
//             properties = new DefaultProperty();
//             repository.save(properties);
//         }
//         return properties;
//     }
// 
//     public void setDefaultProperties(DefaultProperty properties) {
//         repository.save(properties);
//     }
// }


// Path: src/main/java/com/github/vedenin/codingchallenge/restclient/FaultTolerantRestClient.java
import com.github.vedenin.codingchallenge.common.CurrencyEnum;
import com.github.vedenin.codingchallenge.persistence.ErrorEntity;
import com.github.vedenin.codingchallenge.persistence.ErrorRepository;
import com.github.vedenin.codingchallenge.persistence.PropertyService;
import com.google.common.cache.Cache;
import com.google.common.cache.CacheBuilder;
import org.springframework.stereotype.Service;
import javax.inject.Inject;
import java.math.BigDecimal;
import java.util.Calendar;
import java.util.List;
import java.util.concurrent.TimeUnit;

package com.github.vedenin.codingchallenge.restclient;



/**
 * Rest client that used all services before one of services not returns
 * correct result
 * <p>
 * Created by slava on 10.02.17.
 */
@Service("FaultTolerant")
public class FaultTolerantRestClient implements RestClient {
    private static final long INIT_DURATION = 60L * 60L;
    @Inject
    private List<RestClient> list;
    @Inject
    private ErrorRepository errorRepository;