package org.ovirt.engine.ui.uicommonweb.models.providers;
import java.util.Arrays;
import org.ovirt.engine.core.common.businessentities.BusinessEntitiesDefinitions;
import org.ovirt.engine.core.common.businessentities.OpenstackNetworkPluginType;
import org.ovirt.engine.core.common.businessentities.OpenstackNetworkProviderProperties;
import org.ovirt.engine.core.common.businessentities.OpenstackNetworkProviderProperties.AgentConfiguration;
import org.ovirt.engine.core.common.businessentities.OpenstackNetworkProviderProperties.BrokerType;
import org.ovirt.engine.core.common.businessentities.OpenstackNetworkProviderProperties.MessagingConfiguration;
import org.ovirt.engine.core.common.businessentities.Provider;
import org.ovirt.engine.ui.uicommonweb.models.EntityModel;
import org.ovirt.engine.ui.uicommonweb.models.ListModel;
import org.ovirt.engine.ui.uicommonweb.validation.HostAddressValidation;
import org.ovirt.engine.ui.uicommonweb.validation.IValidation;
import org.ovirt.engine.ui.uicommonweb.validation.IntegerValidation;
import org.ovirt.engine.ui.uicommonweb.validation.InterfaceMappingsValidation;
import org.ovirt.engine.ui.uicommonweb.validation.NotEmptyValidation;
import org.ovirt.engine.ui.uicompat.ConstantsManager;
import org.ovirt.engine.ui.uicompat.EnumTranslator;
public class NeutronAgentModel extends EntityModel {
private ListModel<String> pluginType = new ListModel<>();
private EntityModel<Boolean> pluginConfigurationAvailable = new EntityModel<>();
private EntityModel<String> interfaceMappingsLabel = new EntityModel<>();
private EntityModel<String> interfaceMappingsExplanation = new EntityModel<>();
private EntityModel<String> interfaceMappings = new EntityModel<>();
private ListModel<BrokerType> brokerType = new ListModel<>();
private EntityModel<String> messagingServer = new EntityModel<>();
private EntityModel<String> messagingServerPort = new EntityModel<>();
private EntityModel<String> messagingServerUsername = new EntityModel<>();
private EntityModel<String> messagingServerPassword = new EntityModel<>();
public ListModel<String> getPluginType() {
return pluginType;
}
public EntityModel<Boolean> isPluginConfigurationAvailable() {
return pluginConfigurationAvailable;
}
public EntityModel<String> getInterfaceMappingsLabel() {
return interfaceMappingsLabel;
}
public EntityModel<String> getInterfaceMappingsExplanation() {
return interfaceMappingsExplanation;
}
public EntityModel<String> getInterfaceMappings() {
return interfaceMappings;
}
public ListModel<BrokerType> getBrokerType() {
return brokerType;
}
public EntityModel<String> getMessagingServer() {
return messagingServer;
}
public EntityModel<String> getMessagingServerPort() {
return messagingServerPort;
}
public EntityModel<String> getMessagingServerUsername() {
return messagingServerUsername;
}
public EntityModel<String> getMessagingServerPassword() {
return messagingServerPassword;
}
public NeutronAgentModel() {
getPluginType().getSelectedItemChangedEvent().addListener((ev, sender, args) -> {
String displayString = getPluginType().getSelectedItem();
isPluginConfigurationAvailable().setEntity(!NeutronPluginTranslator.isDisplayStringCustom(displayString));
if (!NeutronPluginTranslator.isDisplayStringCustom(displayString)) {
switch(NeutronPluginTranslator.getPluginTypeForDisplayString(displayString)) {
case LINUX_BRIDGE:
getInterfaceMappingsLabel().setEntity(ConstantsManager.getInstance()
.getConstants()
.bridgeMappings());
getInterfaceMappingsExplanation().setEntity(ConstantsManager.getInstance()
.getConstants()
.bridgeMappingsExplanation());
break;
case OPEN_VSWITCH:
default:
getInterfaceMappingsLabel().setEntity(ConstantsManager.getInstance()
.getConstants()
.interfaceMappings());
getInterfaceMappingsExplanation().setEntity(ConstantsManager.getInstance()
.getConstants()
.interfaceMappingsExplanation());
}
}
});
getPropertyChangedEvent().addListener((ev, sender, args) -> {
if ("IsAvailable".equals(args.propertyName)) { //$NON-NLS-1$
boolean value = getIsAvailable();
getPluginType().setIsAvailable(value);
isPluginConfigurationAvailable().setEntity(value
&& !NeutronPluginTranslator.isDisplayStringCustom(getPluginType().getSelectedItem()));
}
});
getPluginType().setItems(NeutronPluginTranslator.getPresetDisplayStrings());
getPluginType().setSelectedItem(getDefaultPluginTypeString());
getInterfaceMappingsLabel().setEntity(ConstantsManager.getInstance().getConstants().interfaceMappings());
getInterfaceMappingsExplanation().setEntity(ConstantsManager.getInstance()
.getConstants()
.interfaceMappingsExplanation());
getBrokerType().setItems(Arrays.asList(BrokerType.values()));
getBrokerType().setSelectedItem(BrokerType.RABBIT_MQ);
}
public boolean validate() {
if (getIsAvailable()) {
getPluginType().validateSelectedItem(new IValidation[] { new NotEmptyValidation() });
getBrokerType().validateSelectedItem(new IValidation[] { new NotEmptyValidation() });
getInterfaceMappings().validateEntity(new IValidation[] { new InterfaceMappingsValidation() });
getMessagingServer().validateEntity(new IValidation[] { new HostAddressValidation(true, true) });
getMessagingServerPort().validateEntity(new IValidation[] { new IntegerValidation(BusinessEntitiesDefinitions.NETWORK_MIN_LEGAL_PORT,
BusinessEntitiesDefinitions.NETWORK_MAX_LEGAL_PORT) });
setIsValid(getPluginType().getIsValid() && getInterfaceMappings().getIsValid()
&& getMessagingServer().getIsValid() && getMessagingServerPort().getIsValid()
&& getBrokerType().getIsValid());
}
return getIsValid();
}
public void init(Provider<OpenstackNetworkProviderProperties> provider) {
OpenstackNetworkProviderProperties properties = provider.getAdditionalProperties();
String pluginName = (properties == null) ? getDefaultPluginTypeString() : properties.getPluginType();
getPluginType().setSelectedItem(NeutronPluginTranslator.getDisplayStringForPluginName(pluginName));
if (properties != null) {
AgentConfiguration agentConfiguration = properties.getAgentConfiguration();
if (agentConfiguration != null) {
getInterfaceMappings().setEntity(agentConfiguration.getNetworkMappings());
MessagingConfiguration messagingConfiguration = agentConfiguration.getMessagingConfiguration();
if (messagingConfiguration != null) {
getBrokerType().setSelectedItem(messagingConfiguration.getBrokerType());
getMessagingServer().setEntity(messagingConfiguration.getAddress());
Integer port = messagingConfiguration.getPort();
getMessagingServerPort().setEntity(port == null ? null : Integer.toString(port));
getMessagingServerUsername().setEntity(messagingConfiguration.getUsername());
getMessagingServerPassword().setEntity(messagingConfiguration.getPassword());
}
}
}
}
public void flush(Provider<OpenstackNetworkProviderProperties> provider) {
OpenstackNetworkProviderProperties properties = provider.getAdditionalProperties();
if (properties == null) {
properties = new OpenstackNetworkProviderProperties();
provider.setAdditionalProperties(properties);
}
properties.setPluginType(NeutronPluginTranslator.
getPluginNameForDisplayString(getPluginType().getSelectedItem()));
if (!isPluginConfigurationAvailable().getEntity()) {
properties.setAgentConfiguration(null);
} else {
AgentConfiguration agentConfiguration = properties.getAgentConfiguration();
if (agentConfiguration == null) {
agentConfiguration = new AgentConfiguration();
properties.setAgentConfiguration(agentConfiguration);
}
agentConfiguration.setNetworkMappings(getInterfaceMappings().getEntity());
MessagingConfiguration messagingConfiguration = agentConfiguration.getMessagingConfiguration();
if (messagingConfiguration == null) {
messagingConfiguration = new MessagingConfiguration();
agentConfiguration.setMessagingConfiguration(messagingConfiguration);
}
messagingConfiguration.setAddress(getMessagingServer().getEntity());
String port = getMessagingServerPort().getEntity();
messagingConfiguration.setPort(port == null ? null : Integer.valueOf(port));
messagingConfiguration.setUsername(getMessagingServerUsername().getEntity());
messagingConfiguration.setPassword(getMessagingServerPassword().getEntity());
messagingConfiguration.setBrokerType(getBrokerType().getSelectedItem());
}
}
private String getDefaultPluginTypeString() {
return EnumTranslator.getInstance().translate(OpenstackNetworkPluginType.OPEN_VSWITCH);
}
}