/**
* Copyright (c) 2014-2017 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.eclipse.smarthome.core.binding.xml.internal;
import org.eclipse.smarthome.config.core.ConfigDescription;
import org.eclipse.smarthome.config.xml.AbstractXmlConfigDescriptionProvider;
import org.eclipse.smarthome.config.xml.osgi.XmlDocumentProvider;
import org.eclipse.smarthome.core.binding.BindingInfo;
import org.eclipse.smarthome.core.binding.BindingInfoProvider;
import org.osgi.framework.Bundle;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* The {@link BindingInfoXmlProvider} is responsible managing any created
* objects by a {@link BindingInfoReader} for a certain bundle.
* <p>
* This implementation registers each {@link BindingInfo} object at the {@link XmlBindingInfoProvider} which is itself
* registered as {@link BindingInfoProvider} service at the <i>OSGi</i> service registry.
* <p>
* If there is a {@link ConfigDescription} object within the {@link BindingInfoXmlResult} object, it is added to the
* {@link AbstractXmlConfigDescriptionProvider} which is itself registered as <i>OSGi</i> service at the service registry.
*
* @author Michael Grammling - Initial Contribution
*
* @see BindingInfoXmlProviderFactory
*/
public class BindingInfoXmlProvider implements XmlDocumentProvider<BindingInfoXmlResult> {
private Logger logger = LoggerFactory.getLogger(BindingInfoXmlProvider.class);
private Bundle bundle;
private XmlBindingInfoProvider bindingInfoProvider;
private AbstractXmlConfigDescriptionProvider configDescriptionProvider;
public BindingInfoXmlProvider(Bundle bundle, XmlBindingInfoProvider bindingInfoProvider,
AbstractXmlConfigDescriptionProvider configDescriptionProvider) throws IllegalArgumentException {
if (bundle == null) {
throw new IllegalArgumentException("The Bundle must not be null!");
}
if (bindingInfoProvider == null) {
throw new IllegalArgumentException("The XmlBindingInfoProvider must not be null!");
}
if (configDescriptionProvider == null) {
throw new IllegalArgumentException("The XmlConfigDescriptionProvider must not be null!");
}
this.bundle = bundle;
this.bindingInfoProvider = bindingInfoProvider;
this.configDescriptionProvider = configDescriptionProvider;
}
@Override
public synchronized void addingObject(BindingInfoXmlResult bindingInfoXmlResult) {
if (bindingInfoXmlResult != null) {
ConfigDescription configDescription = bindingInfoXmlResult.getConfigDescription();
if (configDescription != null) {
try {
this.configDescriptionProvider.addConfigDescription(this.bundle, configDescription);
} catch (Exception ex) {
this.logger.error("Could not register ConfigDescription!", ex);
}
}
BindingInfo bindingInfo = bindingInfoXmlResult.getBindingInfo();
this.bindingInfoProvider.addBindingInfo(bundle, bindingInfo);
}
}
@Override
public void addingFinished() {
// nothing to do
}
@Override
public synchronized void release() {
this.bindingInfoProvider.removeAllBindingInfos(this.bundle);
this.configDescriptionProvider.removeAllConfigDescriptions(this.bundle);
}
}