/** * Copyright 2015-2016 Red Hat, Inc, and individual contributors. * * Licensed 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.wildfly.swarm.spi.api; import java.util.ArrayList; import java.util.List; /** * A group of inbound and outbound socket-bindings. * * <p>The default socket-binding group is typically named {@code standard-sockets}.</p> * * <p>All bindings within a group may be universally offset to accommodate shifting * an entire server up or down some set number of ports.</p> * * @author Bob McWhirter * @see SocketBinding * @see OutboundSocketBinding */ public class SocketBindingGroup { private final String name; private final String defaultInterace; private final String portOffsetExpression; private List<SocketBinding> socketBindings = new ArrayList<>(); private List<OutboundSocketBinding> outboundSocketBindings = new ArrayList<>(); /** * Create a new socket-binding group. * * @param name The name of the group. * @param defaultInterface The name of the interface to bind to. * @param portOffsetExpression The port offset expression. */ public SocketBindingGroup(String name, String defaultInterface, String portOffsetExpression) { this.name = name; this.defaultInterace = defaultInterface; this.portOffsetExpression = portOffsetExpression; } /** * Retrieve the name of this group. * * @return The name of this group. */ public String name() { return this.name; } /** * Retrieve the name of the default interface. * * @return The name of the default interface. */ public String defaultInterface() { return this.defaultInterace; } /** * Retrieve the port-offset expression. * * @return The port offset expression. */ public String portOffsetExpression() { return this.portOffsetExpression; } /** * Add a socket-binding to this group. * * @param binding The binding to add. * @return this group. */ public SocketBindingGroup socketBinding(SocketBinding binding) { this.socketBindings.add(binding); return this; } /** * Retrieve a socket-binding by name. * * @param name The socket-binding name. * @return The socket-binding if present, otherwise {@code null}. */ public SocketBinding socketBinding(String name) { return this.socketBindings.stream().filter(e -> e.name().equals(name)).findFirst().orElse(null); } /** * Retrieve all socket-bindings attached to this group. * * @return All socket-bindings attached to this group. */ public List<SocketBinding> socketBindings() { return this.socketBindings; } /** * Add an outbound socket-binding to this group. * * @param binding The binding to add. * @return this group. */ public SocketBindingGroup outboundSocketBinding(OutboundSocketBinding binding) { this.outboundSocketBindings.add(binding); return this; } /** * Retrieve all outbound socket-bindings attached to this group. * * @return All outbound socket-bindings attached to this group. */ public List<OutboundSocketBinding> outboundSocketBindings() { return this.outboundSocketBindings; } }