/*
* Copyright (C) 2006-2016 DLR, Germany
*
* All rights reserved
*
* http://www.rcenvironment.de/
*/
package de.rcenvironment.core.communication.configuration;
import java.util.List;
import de.rcenvironment.core.communication.api.NodeIdentifierService;
import de.rcenvironment.core.communication.common.InstanceNodeSessionId;
import de.rcenvironment.core.communication.model.InitialNodeInformation;
import de.rcenvironment.core.communication.model.NetworkContactPoint;
import de.rcenvironment.core.communication.sshconnection.InitialSshConnectionConfig;
/**
* Configuration management service for the local node. It serves to decouple the communication classes from the low-level
* {@link CommunicationConfiguration} class, which simplifies the configuration of integration tests.
*
* @author Robert Mischke
*/
public interface NodeConfigurationService {
/**
* A system property to specify a certain node id for testing. Example usage in command line:
* "-Drce.network.overrideNodeId=12312312312312312312312312312312"
*/
String SYSTEM_PROPERTY_OVERRIDE_NODE_ID = "rce.network.overrideNodeId";
/**
* Regular expression for the node id override value.
*/
String NODE_ID_OVERRIDE_PATTERN = "[0-9a-f]{32}";
/**
* A system property that forces local RPCs to be sent through message serialization (to catch serialization issues in local testing).
*/
String SYSTEM_PROPERTY_FORCE_LOCAL_RPC_SERIALIZATION = "rce.internal.forceLocalRPCSerialization";
/**
* Storage property key for the auto-generated local node id.
*/
String PERSISTENT_SETTINGS_KEY_PLATFORM_ID = "rce.network.nodeId";
/**
* @return the identifier of the local node
*/
InstanceNodeSessionId getInstanceNodeSessionId();
/**
* @return true if this node is a "workflow host"; temporary pass-through method
*/
@Deprecated
boolean isWorkflowHost();
/**
* @return the {@link NodeIdentifierService} implementation for this instance
*/
NodeIdentifierService getNodeIdentifierService();
/**
* @return an {@link InitialNodeInformation} object for the local node
*/
InitialNodeInformation getInitialNodeInformation();
/**
* @return the list of "provided" {@link NetworkContactPoint}s for the local node; these are the {@link NetworkContactPoint}s that the
* local node listens on as a "server"
*/
List<NetworkContactPoint> getServerContactPoints();
/**
* @return the list of "remote" {@link NetworkContactPoint}s for the local node; these are the {@link NetworkContactPoint}s that the
* local node connects to as a "client"
*/
List<NetworkContactPoint> getInitialNetworkContactPoints();
/**
* @return true if this node reports its outgoing message channels to other nodes, and accepts message forwarding requests from other
* nodes; in effect, setting this to "true" makes this node merge all networks it is connected to into one
*/
boolean isRelay();
/**
* @return the delay (in milliseconds) before connections to the configured "remote contact points" are attempted
*/
long getDelayBeforeStartupConnectAttempts();
/**
* @return the timeout for a request/response cycle on the initiating node
*/
int getRequestTimeoutMsec();
/**
* @return the timeout for a request/response cycle on a forwarding/routing node
*/
int getForwardingTimeoutMsec();
/**
* @return the current IP filter configuration; the implementing service is responsible for returning the most up-to-date configuration,
* for example by reloading a configuration file
*/
CommunicationIPFilterConfiguration getIPFilterConfiguration();
/**
* @return The list of configured ssh connections.
*/
List<InitialSshConnectionConfig> getInitialSSHConnectionConfigs();
/**
* Longitude and latitude values of the instance.
*
* @return non null 2-dim array
*/
double[] getLocationCoordinates();
/**
* Name of the location.
*
* @return name
*/
String getLocationName();
/**
* Contact information for the instance.
*
* @return contact string
*/
String getInstanceContact();
/**
* Some information about the instance.
*
* @return information string
*/
String getInstanceAdditionalInformation();
}