/* Copyright (c) 2011 Danish Maritime Authority. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package dk.dma.ais.configuration.bus; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.InputStream; import java.io.OutputStream; import java.util.ArrayList; import java.util.List; import javax.xml.bind.JAXBContext; import javax.xml.bind.JAXBException; import javax.xml.bind.Marshaller; import javax.xml.bind.Unmarshaller; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlRootElement; import javax.xml.bind.annotation.XmlTransient; import dk.dma.ais.bus.AisBus; import dk.dma.ais.bus.AisBusConsumer; import dk.dma.ais.bus.AisBusProvider; import dk.dma.ais.configuration.bus.consumer.AisBusConsumerConfiguration; import dk.dma.ais.configuration.bus.provider.AisBusProviderConfiguration; @XmlRootElement public class AisBusConfiguration extends AisBusComponentConfiguration { private int busPullMaxElements = 1000; private int busQueueSize = 10000; private List<AisBusProviderConfiguration> providers = new ArrayList<>(); private List<AisBusConsumerConfiguration> consumers = new ArrayList<>(); public AisBusConfiguration() { } public int getBusPullMaxElements() { return busPullMaxElements; } public void setBusPullMaxElements(int busPullMaxElements) { this.busPullMaxElements = busPullMaxElements; } public int getBusQueueSize() { return busQueueSize; } public void setBusQueueSize(int busQueueSize) { this.busQueueSize = busQueueSize; } @XmlElement(name = "provider") public List<AisBusProviderConfiguration> getProviders() { return providers; } public void setProviders(List<AisBusProviderConfiguration> providers) { this.providers = providers; } @XmlElement(name = "consumer") public List<AisBusConsumerConfiguration> getConsumers() { return consumers; } public void setConsumers(List<AisBusConsumerConfiguration> consumers) { this.consumers = consumers; } @Override @XmlTransient public AisBus getInstance() { AisBus aisBus = new AisBus(); aisBus.setBusQueueSize(busQueueSize); aisBus.setBusPullMaxElements(busPullMaxElements); configure(aisBus); aisBus.init(); for (AisBusConsumerConfiguration consumerConf : consumers) { AisBusConsumer consumer = (AisBusConsumer) consumerConf.getInstance(); if (consumer != null) { consumer.init(); aisBus.registerConsumer(consumer); } } for (AisBusProviderConfiguration providerConf : providers) { AisBusProvider provider = (AisBusProvider) providerConf.getInstance(); if (provider != null) { provider.init(); aisBus.registerProvider(provider); } } return aisBus; } public static void save(OutputStream out, final AisBusConfiguration conf) throws JAXBException { JAXBContext context = JAXBContext.newInstance(AisBusConfiguration.class); Marshaller m = context.createMarshaller(); m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE); m.setProperty(Marshaller.JAXB_ENCODING, "UTF-8"); m.marshal(conf, out); } public static AisBusConfiguration load(InputStream in) throws JAXBException { JAXBContext context = JAXBContext.newInstance(AisBusConfiguration.class); Unmarshaller um = context.createUnmarshaller(); return (AisBusConfiguration) um.unmarshal(in); } public static void save(String filename, final AisBusConfiguration conf) throws JAXBException, FileNotFoundException { save(new FileOutputStream(new File(filename)), conf); } public static AisBusConfiguration load(String filename) throws FileNotFoundException, JAXBException { return load(new FileInputStream(new File(filename))); } }