/**
* Copyright (c) 2010-2016 by the respective copyright holders.
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*/
package org.openhab.binding.astro.internal.common;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import org.openhab.binding.astro.AstroBindingProvider;
import org.openhab.binding.astro.internal.job.JobScheduler;
import org.openhab.binding.astro.internal.model.Moon;
import org.openhab.binding.astro.internal.model.Planet;
import org.openhab.binding.astro.internal.model.PlanetName;
import org.openhab.binding.astro.internal.model.Sun;
import org.openhab.core.events.EventPublisher;
/**
* Singleton with the important objects for this binding.
*
* @author Gerhard Riegler
* @since 1.5.0
*/
public class AstroContext {
private EventPublisher eventPublisher;
private Collection<AstroBindingProvider> providers;
private AstroConfig config = new AstroConfig();
private JobScheduler jobScheduler = new JobScheduler(this);
private Map<PlanetName, Planet> planets = new HashMap<PlanetName, Planet>();
private static AstroContext instance;
private AstroContext() {
}
/**
* Create or returns the instance of this class.
*/
public static AstroContext getInstance() {
if (instance == null) {
instance = new AstroContext();
instance.planets.put(PlanetName.SUN, new Sun());
instance.planets.put(PlanetName.MOON, new Moon());
}
return instance;
}
/**
* Returns the AstroConfig.
*/
public AstroConfig getConfig() {
return config;
}
/**
* Sets the EventPublisher for use in the binding.
*/
public void setEventPublisher(EventPublisher eventPublisher) {
this.eventPublisher = eventPublisher;
}
/**
* Returns the EventPublisher.
*/
public EventPublisher getEventPublisher() {
return eventPublisher;
}
/**
* Returns all AstroBindingProviders.
*/
public Collection<AstroBindingProvider> getProviders() {
return providers;
}
/**
* Sets all AstroBindingProviders for use in the binding.
*/
public void setProviders(Collection<AstroBindingProvider> providers) {
this.providers = providers;
}
/**
* Returns the JobScheduler.
*/
public JobScheduler getJobScheduler() {
return jobScheduler;
}
/**
* Returns the specified planet.
*/
public Planet getPlanet(PlanetName planetName) {
return planets.get(planetName);
}
/**
* Sets the planet data.
*/
public void setPlanet(PlanetName planetName, Planet planet) {
planets.put(planetName, planet);
}
}