/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.activemq.artemis.core.client.impl; import java.net.URI; import java.net.URISyntaxException; import java.util.Map; import org.apache.activemq.artemis.api.core.Pair; import org.apache.activemq.artemis.api.core.TransportConfiguration; import org.apache.activemq.artemis.api.core.client.TopologyMember; import org.apache.activemq.artemis.core.remoting.impl.netty.TransportConstants; import org.apache.activemq.artemis.spi.core.protocol.RemotingConnection; import org.apache.activemq.artemis.utils.ConfigurationHelper; public final class TopologyMemberImpl implements TopologyMember { private static final long serialVersionUID = 1123652191795626133L; private final Pair<TransportConfiguration, TransportConfiguration> connector; private final String backupGroupName; private final String scaleDownGroupName; /** * transient to avoid serialization changes */ private transient long uniqueEventID = System.currentTimeMillis(); private final String nodeId; public TopologyMemberImpl(String nodeId, final String backupGroupName, final String scaleDownGroupName, final TransportConfiguration a, final TransportConfiguration b) { this.nodeId = nodeId; this.backupGroupName = backupGroupName; this.scaleDownGroupName = scaleDownGroupName; this.connector = new Pair<>(a, b); uniqueEventID = System.currentTimeMillis(); } @Override public TransportConfiguration getLive() { return connector.getA(); } @Override public TransportConfiguration getBackup() { return connector.getB(); } public void setBackup(final TransportConfiguration param) { connector.setB(param); } public void setLive(final TransportConfiguration param) { connector.setA(param); } @Override public String getNodeId() { return nodeId; } @Override public long getUniqueEventID() { return uniqueEventID; } @Override public String getBackupGroupName() { return backupGroupName; } @Override public String getScaleDownGroupName() { return scaleDownGroupName; } /** * @param uniqueEventID the uniqueEventID to set */ public void setUniqueEventID(final long uniqueEventID) { this.uniqueEventID = uniqueEventID; } public Pair<TransportConfiguration, TransportConfiguration> getConnector() { return connector; } @Override public boolean isMember(RemotingConnection connection) { TransportConfiguration connectorConfig = connection.getTransportConnection() != null ? connection.getTransportConnection().getConnectorConfig() : null; return isMember(connectorConfig); } @Override public boolean isMember(TransportConfiguration configuration) { if (getConnector().getA() != null && getConnector().getA().isSameParams(configuration) || getConnector().getB() != null && getConnector().getB().isSameParams(configuration)) { return true; } else { return false; } } @Override public String toURI() { TransportConfiguration liveConnector = getLive(); Map<String, Object> props = liveConnector.getParams(); String host = ConfigurationHelper.getStringProperty(TransportConstants.HOST_PROP_NAME, "localhost", props); int port = ConfigurationHelper.getIntProperty(TransportConstants.PORT_PROP_NAME, 0, props); return "tcp://" + host + ":" + port; } public URI toBackupURI() { TransportConfiguration backupConnector = getBackup(); if (backupConnector == null) { return null; } Map<String, Object> props = backupConnector.getParams(); String host = ConfigurationHelper.getStringProperty(TransportConstants.HOST_PROP_NAME, "localhost", props); int port = ConfigurationHelper.getIntProperty(TransportConstants.PORT_PROP_NAME, 0, props); boolean sslEnabled = ConfigurationHelper.getBooleanProperty(TransportConstants.SSL_ENABLED_PROP_NAME, false, props); try { return new URI("tcp://" + host + ":" + port + "?" + TransportConstants.SSL_ENABLED_PROP_NAME + "=" + sslEnabled); } catch (URISyntaxException e) { return null; } } @Override public String toString() { return "TopologyMember[id = " + nodeId + ", connector=" + connector + ", backupGroupName=" + backupGroupName + ", scaleDownGroupName=" + scaleDownGroupName + "]"; } }