259 lines
6.1 KiB
Java
259 lines
6.1 KiB
Java
package org.gcube.smartgears.configuration.container;
|
|
|
|
import java.util.ArrayList;
|
|
import java.util.Collections;
|
|
import java.util.HashMap;
|
|
import java.util.List;
|
|
import java.util.Map;
|
|
|
|
import org.gcube.common.validator.ValidationError;
|
|
import org.gcube.common.validator.Validator;
|
|
import org.gcube.common.validator.ValidatorFactory;
|
|
import org.gcube.common.validator.annotations.IsValid;
|
|
import org.gcube.common.validator.annotations.NotEmpty;
|
|
import org.gcube.common.validator.annotations.NotNull;
|
|
import org.gcube.smartgears.configuration.Mode;
|
|
import org.gcube.smartgears.configuration.ProxyAddress;
|
|
import org.gcube.smartgears.configuration.application.ApplicationConfiguration;
|
|
import org.gcube.smartgears.persistence.PersistenceWriter;
|
|
import org.gcube.smartgears.security.AuthorizationProvider;
|
|
|
|
/**
|
|
* The configuration of the container.
|
|
*
|
|
* @author Fabio Simeoni
|
|
* @author Luca Frosini (ISTI - CNR)
|
|
*/
|
|
public class ContainerConfiguration {
|
|
|
|
|
|
|
|
@NotNull @IsValid
|
|
private BaseConfiguration baseConfiguration;
|
|
|
|
@IsValid
|
|
private Map<String,String> properties = new HashMap<String, String>();
|
|
|
|
@NotNull @IsValid
|
|
private Site site;
|
|
|
|
@IsValid
|
|
private ProxyAddress proxy;
|
|
|
|
@NotEmpty @NotNull
|
|
private String accountingFallbackLocation;
|
|
|
|
private List<ApplicationConfiguration> apps = new ArrayList<ApplicationConfiguration>();
|
|
|
|
|
|
@NotNull @IsValid
|
|
private PersistenceWriter persistenceManager;
|
|
|
|
@NotNull @IsValid
|
|
private AuthorizationProvider authorizationProvider;
|
|
|
|
|
|
protected void setBaseConfiguration(BaseConfiguration baseConfiguration) {
|
|
this.baseConfiguration = baseConfiguration;
|
|
}
|
|
|
|
protected void setProperties(Map<String, String> properties) {
|
|
this.properties = properties;
|
|
}
|
|
|
|
protected void setSite(Site site) {
|
|
this.site = site;
|
|
}
|
|
|
|
protected void setProxy(ProxyAddress proxy) {
|
|
this.proxy = proxy;
|
|
}
|
|
|
|
protected void setAccountingFallbackLocation(String accountingFallbackLocation) {
|
|
this.accountingFallbackLocation = accountingFallbackLocation;
|
|
}
|
|
|
|
protected void setPersistenceManager(PersistenceWriter persistenceManager) {
|
|
this.persistenceManager = persistenceManager;
|
|
}
|
|
|
|
protected void setAuthorizationProvider(AuthorizationProvider authorizationProvider) {
|
|
this.authorizationProvider = authorizationProvider;
|
|
}
|
|
|
|
/**
|
|
* Returns the management mode for the container.
|
|
* @return the management mode
|
|
*/
|
|
public Mode mode() {
|
|
return baseConfiguration.getMode();
|
|
}
|
|
|
|
/**
|
|
* Returns the application configurations included in this configuration.
|
|
* @return the application configurations
|
|
*/
|
|
public List<ApplicationConfiguration> apps() {
|
|
return apps;
|
|
}
|
|
|
|
/**
|
|
* Returns the configuration of an application with a given context path.
|
|
* @param context the context path
|
|
* @return the application configuration
|
|
*/
|
|
public ApplicationConfiguration app(String context) {
|
|
|
|
for (ApplicationConfiguration app : apps)
|
|
if (context.equals(app.context()))
|
|
return app;
|
|
|
|
return null;
|
|
}
|
|
|
|
/**
|
|
* Adds the configuration of an application to this configuration.
|
|
* @param app the application configuration
|
|
* @return this configuration
|
|
*/
|
|
public synchronized ContainerConfiguration app(ApplicationConfiguration app) {
|
|
int indexToRemove =-1;
|
|
int index =0;
|
|
for (ApplicationConfiguration application : apps){
|
|
if (app.context().equals(application.context()))
|
|
indexToRemove = index;
|
|
index++;
|
|
}
|
|
if(indexToRemove!=-1)
|
|
apps.remove(indexToRemove);
|
|
apps.add(app);
|
|
return this;
|
|
}
|
|
|
|
/**
|
|
* Returns the geographical site of the container.
|
|
* @return the site
|
|
*/
|
|
public Site site() {
|
|
return site;
|
|
}
|
|
|
|
|
|
/**
|
|
* Returns the infrastructure in which the container is running.
|
|
* @return the infrastructure
|
|
*/
|
|
public String infrastructure() {
|
|
return baseConfiguration.getInfrastructure();
|
|
}
|
|
|
|
|
|
/**
|
|
* Returns the host name of the container.
|
|
* @return the host name;
|
|
*/
|
|
public String hostname() {
|
|
return baseConfiguration.getHostname();
|
|
}
|
|
|
|
/**
|
|
* Returns the port at which the container is listening for requests.
|
|
* @return the port
|
|
*/
|
|
public int port() {
|
|
return baseConfiguration.getPort();
|
|
}
|
|
|
|
|
|
/**
|
|
* Returns the port at which the container is listening for requests.
|
|
* @return the port
|
|
*/
|
|
public String protocol() {
|
|
return baseConfiguration.getProtocol();
|
|
}
|
|
|
|
|
|
public boolean authorizeChildrenContext() {
|
|
return baseConfiguration.isAuthorizeChildrenContext();
|
|
}
|
|
|
|
/**
|
|
* Returns the credentials.
|
|
* @return the credentials
|
|
*/
|
|
public AuthorizationProvider authorizationProvider() {
|
|
return authorizationProvider;
|
|
}
|
|
|
|
/**
|
|
* Returns the proxy of the container.
|
|
* @return the proxy
|
|
*/
|
|
public ProxyAddress proxy() {
|
|
return proxy;
|
|
}
|
|
|
|
|
|
/**
|
|
* Returns the persistence manager of the container.
|
|
* @return the manager
|
|
*/
|
|
public PersistenceWriter persistence() {
|
|
return persistenceManager;
|
|
}
|
|
|
|
/**
|
|
* Returns the persistence manager of the container.
|
|
* @return the manager
|
|
*/
|
|
public String accountingFallbackLocation() {
|
|
return accountingFallbackLocation;
|
|
}
|
|
|
|
/**
|
|
* Returns the configuration properties of the container.
|
|
* @return the properties
|
|
*/
|
|
public Map<String,String> properties() {
|
|
return Collections.unmodifiableMap(properties);
|
|
}
|
|
|
|
/**
|
|
* Returns the publication frequency for the container's profile.
|
|
* @return the frquency;
|
|
*/
|
|
public long publicationFrequency() {
|
|
return baseConfiguration.getPublicationFrequencyInSeconds();
|
|
}
|
|
|
|
/**
|
|
* Validates this configuration
|
|
*
|
|
* @throws IllegalStateException if the configuration is invalid
|
|
*/
|
|
public void validate() {
|
|
|
|
List<String> msgs = new ArrayList<String>();
|
|
|
|
Validator validator = ValidatorFactory.validator();
|
|
|
|
for (ValidationError error : validator.validate(this))
|
|
msgs.add(error.toString());
|
|
|
|
if (!msgs.isEmpty())
|
|
throw new IllegalStateException("invalid configuration: "+msgs);
|
|
|
|
}
|
|
|
|
@Override
|
|
public String toString() {
|
|
return "ContainerConfiguration [baseConfiguration=" + baseConfiguration + ", properties=" + properties
|
|
+ ", site=" + site + ", proxy=" + proxy + ", accountingFallbackLocation=" + accountingFallbackLocation
|
|
+ ", persistenceManager=" + persistenceManager.getClass().getSimpleName()
|
|
+ ", authorizationProvider=" + authorizationProvider.getClass().getSimpleName() + "]";
|
|
}
|
|
|
|
|
|
|
|
} |