/*
* 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<Context> contexts = new ArrayList<>();
private List<Filter> filterTemplates = new ArrayList<>();
private boolean initialized;
private Map<String, Context> contextMap;
public synchronized void initialize(String fileName) {
checkState(initialized == false, "Already initialized");
Map<String, Filter> 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<Context> findContext(String contextPath) {
checkState(initialized, "Not initialized");
Context context = contextMap.get(contextPath);
return Optional.fromNullable(context);
}
@XmlElement(name = "Context")
public List<Context> getContexts() {
return contexts;
}
public void setContexts(List<Context> contexts) {
checkArgument(initialized == false, "Already initialized");
this.contexts = contexts;
}
@XmlElement(name = "filter-template")
public List<Filter> getFilterTemplates() {
return filterTemplates;
}
public void setFilterTemplates(List<Filter> filterTemplates) {
checkArgument(initialized == false, "Already initialized");
this.filterTemplates = filterTemplates;
}
}