/* * Copyright (c) 2014 Cisco Systems, Inc. and others. 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.opendaylight.controller.filtervalve.cors.jaxb; import static com.google.common.base.Preconditions.checkArgument; import static com.google.common.base.Preconditions.checkState; import com.google.common.base.Optional; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlRootElement; /** * Root element, arbitrarily named Host to match tomcat-server.xml, but does not allow specifying which host * name to be matched. */ @XmlRootElement(name = "Host") public class Host { private List contexts = new ArrayList<>(); private List filterTemplates = new ArrayList<>(); private boolean initialized; private Map contextMap; public synchronized void initialize(String fileName) { checkState(initialized == false, "Already initialized"); Map namesToTemplates = new HashMap<>(); for (Filter template : filterTemplates) { template.initializeTemplate(); namesToTemplates.put(template.getFilterName(), template); } contextMap = new HashMap<>(); for (Context context : getContexts()) { checkState(contextMap.containsKey(context.getPath()) == false, "Context {} already defined in {}", context.getPath(), fileName); context.initialize(fileName, namesToTemplates); contextMap.put(context.getPath(), context); } contextMap = Collections.unmodifiableMap(new HashMap<>(contextMap)); contexts = Collections.unmodifiableList(new ArrayList<>(contexts)); initialized = true; } public Optional findContext(String contextPath) { checkState(initialized, "Not initialized"); Context context = contextMap.get(contextPath); return Optional.fromNullable(context); } @XmlElement(name = "Context") public List getContexts() { return contexts; } public void setContexts(List contexts) { checkArgument(initialized == false, "Already initialized"); this.contexts = contexts; } @XmlElement(name = "filter-template") public List getFilterTemplates() { return filterTemplates; } public void setFilterTemplates(List filterTemplates) { checkArgument(initialized == false, "Already initialized"); this.filterTemplates = filterTemplates; } }