// Path: environment.monitor.core/src/main/java/org/yagel/monitor/MonitorConfig.java
// public interface MonitorConfig {
// 
// 
//   Set<EnvironmentConfig> getEnvironments();
// 
// }
// 
// Path: environment.monitor.core/src/main/java/org/yagel/monitor/config/EnvironmentConfigImpl.java
// @XmlRootElement
// @XmlAccessorType(XmlAccessType.FIELD)
// public class EnvironmentConfigImpl implements EnvironmentConfig {
// 
//   private String evnName;
//   private long taskDelay;
//   private String host;
//   private int appVersion;
//   @XmlElementWrapper(name = "checkedResources")
//   @XmlElement(name = "resource")
//   private Set<String> checkedResources;
//   private Map<String, String> additionalProperties;
// 
// 
//   @Override
//   public String getEnvName() {
//     return this.evnName;
//   }
// 
//   @Override
//   public String getHost() {
//     return this.host;
//   }
// 
//   @Override
//   public long getTaskDelay() {
//     return taskDelay;
//   }
// 
//   @Override
//   public int getAppVersion() {
//     return appVersion;
//   }
// 
// 
//   @Override
//   public Set<String> getCheckResources() {
//     return this.checkedResources;
//   }
// 
//   @Override
//   public Map<String, String> getAdditionalProperties() {
//     return this.additionalProperties;
//   }
// }
// 
// Path: environment.monitor.core/src/main/java/org/yagel/monitor/config/MonitorConfigImpl.java
// @XmlRootElement(name = "monitorConfig")
// @XmlAccessorType(XmlAccessType.FIELD)
// public class MonitorConfigImpl implements MonitorConfig {
// 
//   private static MonitorConfig config;
// 
//   @XmlElement(type = EnvironmentConfigImpl.class)
//   private Set<EnvironmentConfig> environments;
// 
//   @XmlElement
//   private String pluginCollectorLocation;
// 
//   @Override
//   public Set<EnvironmentConfig> getEnvironments() {
//     return environments;
//   }
// 
// 
// }
// 
// Path: environment.monitor.plugins/src/main/java/org/yagel/monitor/plugins/exception/MonitorConfigDeserializationException.java
// public class MonitorConfigDeserializationException extends RuntimeException {
// 
//   public MonitorConfigDeserializationException(Throwable cause) {
//     super(cause);
//   }
// }


import org.apache.log4j.Logger;
import org.yagel.monitor.MonitorConfig;
import org.yagel.monitor.config.EnvironmentConfigImpl;
import org.yagel.monitor.config.MonitorConfigImpl;
import org.yagel.monitor.plugins.exception.MonitorConfigDeserializationException;
import java.net.MalformedURLException;
import java.net.URL;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Unmarshaller;
package org.yagel.monitor.plugins;



class MonitorConfigReader {

  private final static Logger log = Logger.getLogger(MonitorConfigReader.class);

// Path: environment.monitor.core/src/main/java/org/yagel/monitor/MonitorConfig.java
// public interface MonitorConfig {
// 
// 
//   Set<EnvironmentConfig> getEnvironments();
// 
// }
// 
// Path: environment.monitor.core/src/main/java/org/yagel/monitor/config/EnvironmentConfigImpl.java
// @XmlRootElement
// @XmlAccessorType(XmlAccessType.FIELD)
// public class EnvironmentConfigImpl implements EnvironmentConfig {
// 
//   private String evnName;
//   private long taskDelay;
//   private String host;
//   private int appVersion;
//   @XmlElementWrapper(name = "checkedResources")
//   @XmlElement(name = "resource")
//   private Set<String> checkedResources;
//   private Map<String, String> additionalProperties;
// 
// 
//   @Override
//   public String getEnvName() {
//     return this.evnName;
//   }
// 
//   @Override
//   public String getHost() {
//     return this.host;
//   }
// 
//   @Override
//   public long getTaskDelay() {
//     return taskDelay;
//   }
// 
//   @Override
//   public int getAppVersion() {
//     return appVersion;
//   }
// 
// 
//   @Override
//   public Set<String> getCheckResources() {
//     return this.checkedResources;
//   }
// 
//   @Override
//   public Map<String, String> getAdditionalProperties() {
//     return this.additionalProperties;
//   }
// }
// 
// Path: environment.monitor.core/src/main/java/org/yagel/monitor/config/MonitorConfigImpl.java
// @XmlRootElement(name = "monitorConfig")
// @XmlAccessorType(XmlAccessType.FIELD)
// public class MonitorConfigImpl implements MonitorConfig {
// 
//   private static MonitorConfig config;
// 
//   @XmlElement(type = EnvironmentConfigImpl.class)
//   private Set<EnvironmentConfig> environments;
// 
//   @XmlElement
//   private String pluginCollectorLocation;
// 
//   @Override
//   public Set<EnvironmentConfig> getEnvironments() {
//     return environments;
//   }
// 
// 
// }
// 
// Path: environment.monitor.plugins/src/main/java/org/yagel/monitor/plugins/exception/MonitorConfigDeserializationException.java
// public class MonitorConfigDeserializationException extends RuntimeException {
// 
//   public MonitorConfigDeserializationException(Throwable cause) {
//     super(cause);
//   }
// }


// Path: environment.monitor.plugins/src/main/java/org/yagel/monitor/plugins/MonitorConfigReader.java
import org.apache.log4j.Logger;
import org.yagel.monitor.MonitorConfig;
import org.yagel.monitor.config.EnvironmentConfigImpl;
import org.yagel.monitor.config.MonitorConfigImpl;
import org.yagel.monitor.plugins.exception.MonitorConfigDeserializationException;
import java.net.MalformedURLException;
import java.net.URL;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Unmarshaller;

package org.yagel.monitor.plugins;



class MonitorConfigReader {

  private final static Logger log = Logger.getLogger(MonitorConfigReader.class);

  MonitorConfig readMonitorConfig(String configUrl) {