/*
 *******************************************************************************
 * Copyright (c) 2018 Contributors to the Eclipse Foundation
 * 
 * See the NOTICE file(s) distributed with this work for additional
 * information regarding copyright ownership.
 * 
 * This program and the accompanying materials are made available under the
 * terms of the Eclipse Public License v. 2.0 which is available at
 * http://www.eclipse.org/legal/epl-2.0.
 * 
 * SPDX-License-Identifier: EPL-2.0
 *******************************************************************************
*/

package org.eclipse.openk.core.controller;

import org.apache.log4j.Logger;
import org.eclipse.openk.core.exceptions.HttpStatusException;

import java.util.TimerTask;

public class ServicesConfigCacheTimerTask extends TimerTask {
  private static final Logger logger = Logger.getLogger(ServicesConfigCacheTimerTask.class.getName());
  private String configFileName;

  public ServicesConfigCacheTimerTask( String configFileName ) {
    this.configFileName = configFileName;
  }


  @Override
  public void run() {
    try {
      ServicesConfigCache.getInstance().readServerDistribution(this.configFileName);
    } catch (HttpStatusException e) {
      logger.error("Error reading ServerDistributionFile", e);
    }
  }
}
