/*
* Copyright (C) 2006-2016 DLR, Germany
*
* All rights reserved
*
* http://www.rcenvironment.de/
*/
package de.rcenvironment.core.component.model.endpoint.impl;
import java.io.Serializable;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import org.codehaus.jackson.annotate.JsonIgnore;
import org.codehaus.jackson.annotate.JsonIgnoreProperties;
import de.rcenvironment.core.component.model.endpoint.api.EndpointDefinition;
import de.rcenvironment.core.component.model.endpoint.api.EndpointDefinitionsProvider;
import de.rcenvironment.core.component.model.endpoint.api.EndpointGroupDefinition;
/**
* Provides endpoint definitions of a component.
*
* @author Doreen Seider
*/
@JsonIgnoreProperties(ignoreUnknown = true)
public class EndpointDefinitionsProviderImpl implements Serializable, EndpointDefinitionsProvider {
private static final long serialVersionUID = -386695878188756473L;
private Set<EndpointDefinitionImpl> endpointDefinitions = new HashSet<>();
private Set<EndpointGroupDefinitionImpl> endpointGroupDefinitions = new HashSet<>();
@JsonIgnore
private Map<String, EndpointDefinition> staticEndpointDefinitions = new HashMap<>();
@JsonIgnore
private Map<String, EndpointDefinition> dynamicEndpointDefinitions = new HashMap<>();
@JsonIgnore
private Map<String, EndpointGroupDefinition> staticEndpointGroupDefinitions = new HashMap<>();
@JsonIgnore
private Map<String, EndpointGroupDefinition> dynamicEndpointGroupDefinitions = new HashMap<>();
@JsonIgnore
@Override
public Set<EndpointDefinition> getStaticEndpointDefinitions() {
return new HashSet<EndpointDefinition>(staticEndpointDefinitions.values());
}
@JsonIgnore
@Override
public EndpointDefinition getStaticEndpointDefinition(String name) {
return staticEndpointDefinitions.get(name);
}
@JsonIgnore
@Override
public Set<EndpointDefinition> getDynamicEndpointDefinitions() {
return new HashSet<EndpointDefinition>(dynamicEndpointDefinitions.values());
}
@JsonIgnore
@Override
public EndpointDefinition getDynamicEndpointDefinition(String id) {
return dynamicEndpointDefinitions.get(id);
}
@JsonIgnore
@Override
public Set<EndpointGroupDefinition> getDynamicEndpointGroupDefinitions() {
return new HashSet<EndpointGroupDefinition>(dynamicEndpointGroupDefinitions.values());
}
@JsonIgnore
@Override
public Set<EndpointGroupDefinition> getStaticEndpointGroupDefinitions() {
return new HashSet<EndpointGroupDefinition>(staticEndpointGroupDefinitions.values());
}
@JsonIgnore
@Override
public EndpointGroupDefinition getDynamicEndpointGroupDefinition(String id) {
return dynamicEndpointGroupDefinitions.get(id);
}
public Set<EndpointDefinition> getEndpointDefinitions() {
return new HashSet<EndpointDefinition>(endpointDefinitions);
}
public Set<EndpointGroupDefinition> getEndpointGroupDefinitions() {
return new HashSet<EndpointGroupDefinition>(endpointGroupDefinitions);
}
/**
* Assumes that at most one endpoint description with name "*" is given. If there is more than
* one given the very last one is set as the dynamic one.
*
* @param endpointDefinitionImpls all {@link EndpointDefinition}s (static and at most one
* dynamic)
*/
public void setEndpointDefinitions(Set<EndpointDefinitionImpl> endpointDefinitionImpls) {
endpointDefinitions = endpointDefinitionImpls;
for (EndpointDefinition endpointInterface : endpointDefinitionImpls) {
if (endpointInterface.getIdentifier() != null) {
dynamicEndpointDefinitions.put(endpointInterface.getIdentifier(), endpointInterface);
} else {
staticEndpointDefinitions.put(endpointInterface.getName(), endpointInterface);
}
}
}
/**
* Assumes that at most one {@link EndpointGroupDefinition} with name "*" is given. If there is more than
* one given the very last one is set as the dynamic one.
*
* @param endpointGroupDefinitionImpls all {@link EndpointGroupDefinition}s (static and at most one
* dynamic)
*/
public void setEndpointGroupDefinitions(Set<EndpointGroupDefinitionImpl> endpointGroupDefinitionImpls) {
endpointGroupDefinitions = endpointGroupDefinitionImpls;
for (EndpointGroupDefinition endpointDefinition : endpointGroupDefinitionImpls) {
if (endpointDefinition.getIdentifier() != null) {
dynamicEndpointGroupDefinitions.put(endpointDefinition.getIdentifier(), endpointDefinition);
} else {
staticEndpointGroupDefinitions.put(endpointDefinition.getName(), endpointDefinition);
}
}
}
}