2016-11-25 15:42:29 +01:00
|
|
|
package org.gcube.smartgears.context.container;
|
|
|
|
|
2023-02-06 17:34:18 +01:00
|
|
|
import static org.gcube.smartgears.Constants.container_profile_file_path;
|
|
|
|
|
|
|
|
import java.io.File;
|
|
|
|
import java.io.FileInputStream;
|
|
|
|
import java.io.ObjectInputStream;
|
|
|
|
import java.util.UUID;
|
2022-03-17 17:17:15 +01:00
|
|
|
|
2016-11-25 15:42:29 +01:00
|
|
|
import org.gcube.common.events.Hub;
|
2023-02-06 17:34:18 +01:00
|
|
|
import org.gcube.smartgears.configuration.PersistenceConfiguration;
|
2016-11-25 15:42:29 +01:00
|
|
|
import org.gcube.smartgears.configuration.container.ContainerConfiguration;
|
|
|
|
import org.gcube.smartgears.context.Properties;
|
|
|
|
import org.gcube.smartgears.lifecycle.container.ContainerLifecycle;
|
2022-03-17 17:17:15 +01:00
|
|
|
import org.gcube.smartgears.persistence.PersistenceWriter;
|
2023-01-19 16:16:14 +01:00
|
|
|
import org.gcube.smartgears.security.AuthorizationProvider;
|
2023-02-06 17:34:18 +01:00
|
|
|
import org.slf4j.Logger;
|
|
|
|
import org.slf4j.LoggerFactory;
|
2016-11-25 15:42:29 +01:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Default {@link ContainerContext} implementation.
|
|
|
|
*
|
|
|
|
* @author Fabio Simeoni
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
public class DefaultContainerContext implements ContainerContext {
|
|
|
|
|
2023-02-06 17:34:18 +01:00
|
|
|
private static Logger log = LoggerFactory.getLogger(DefaultContainerContext.class);
|
|
|
|
|
2016-11-25 15:42:29 +01:00
|
|
|
private final ContainerConfiguration configuration;
|
|
|
|
private final ContainerLifecycle lifecycle;
|
|
|
|
private final Properties properties;
|
|
|
|
private final Hub hub;
|
2023-01-19 16:16:14 +01:00
|
|
|
private final AuthorizationProvider authorizationProvider;
|
2016-11-25 15:42:29 +01:00
|
|
|
private final String id;
|
2023-02-06 17:34:18 +01:00
|
|
|
private final PersistenceWriter persistenceWriter;
|
2016-11-25 15:42:29 +01:00
|
|
|
/**
|
|
|
|
* Creates an instance with mandatory parameters.
|
|
|
|
* @param configuration the configuration
|
|
|
|
* @param hub the event hub
|
|
|
|
* @param lifecycle the lifecycle
|
|
|
|
* @param properties the properties
|
|
|
|
*/
|
2023-02-06 17:34:18 +01:00
|
|
|
public DefaultContainerContext(ContainerConfiguration configuration, Hub hub, ContainerLifecycle lifecycle, AuthorizationProvider authProvider,
|
2016-11-25 15:42:29 +01:00
|
|
|
Properties properties) {
|
|
|
|
this.configuration=configuration;
|
|
|
|
this.hub=hub;
|
|
|
|
this.lifecycle = lifecycle;
|
|
|
|
this.properties=properties;
|
2023-01-19 16:16:14 +01:00
|
|
|
this.authorizationProvider = authProvider;
|
2023-02-06 17:34:18 +01:00
|
|
|
|
|
|
|
PersistenceConfiguration persistenceWriterConf = configuration.persistenceConfiguration();
|
|
|
|
|
|
|
|
try {
|
|
|
|
persistenceWriter = persistenceWriterConf.getImplementationClass().getDeclaredConstructor().newInstance();
|
|
|
|
persistenceWriter.configure(persistenceWriterConf.getWriterConfiguration());
|
|
|
|
}catch (Exception e) {
|
|
|
|
throw new RuntimeException(e);
|
|
|
|
}
|
|
|
|
|
|
|
|
File file = persistenceWriter.file(container_profile_file_path);
|
|
|
|
|
|
|
|
String id = null;
|
|
|
|
if (file.exists()) {
|
|
|
|
log.info("loading persisted state for container");
|
|
|
|
try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream(file))) {
|
|
|
|
id = (String) ois.readObject();
|
|
|
|
} catch (Exception e) {
|
|
|
|
log.error("error loading persisted state, creating new uuid", e);
|
|
|
|
}
|
2016-11-25 15:42:29 +01:00
|
|
|
|
2023-02-06 17:34:18 +01:00
|
|
|
}
|
|
|
|
if (id == null) {
|
|
|
|
id = UUID.randomUUID().toString();
|
|
|
|
log.info("container id created is {}", id);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
this.id = id;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
/*
|
2022-03-21 11:17:07 +01:00
|
|
|
public HostingNode profile() {
|
|
|
|
return properties().lookup(container_profile_property).value(HostingNode.class);
|
2023-02-06 17:34:18 +01:00
|
|
|
};*/
|
2016-11-25 15:42:29 +01:00
|
|
|
|
|
|
|
@Override
|
|
|
|
public ContainerConfiguration configuration() {
|
|
|
|
return configuration;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public ContainerLifecycle lifecycle() {
|
|
|
|
return lifecycle;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public Hub events() {
|
|
|
|
return hub;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
2023-02-06 17:34:18 +01:00
|
|
|
public PersistenceWriter persistenceWriter() {
|
|
|
|
return persistenceWriter;
|
2016-11-25 15:42:29 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public Properties properties() {
|
|
|
|
return properties;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public String id() {
|
|
|
|
return id;
|
|
|
|
}
|
|
|
|
|
2023-01-19 16:16:14 +01:00
|
|
|
public AuthorizationProvider authorizationProvider() {
|
|
|
|
return authorizationProvider;
|
|
|
|
}
|
2016-11-25 15:42:29 +01:00
|
|
|
|
|
|
|
}
|