001: /*
002: * Copyright 2005-2007 Noelios Consulting.
003: *
004: * The contents of this file are subject to the terms of the Common Development
005: * and Distribution License (the "License"). You may not use this file except in
006: * compliance with the License.
007: *
008: * You can obtain a copy of the license at
009: * http://www.opensource.org/licenses/cddl1.txt See the License for the specific
010: * language governing permissions and limitations under the License.
011: *
012: * When distributing Covered Code, include this CDDL HEADER in each file and
013: * include the License file at http://www.opensource.org/licenses/cddl1.txt If
014: * applicable, add the following below this CDDL HEADER, with the fields
015: * enclosed by brackets "[]" replaced with your own identifying information:
016: * Portions Copyright [yyyy] [name of copyright owner]
017: */
018:
019: package org.restlet.util;
020:
021: import org.restlet.Context;
022: import org.restlet.Restlet;
023: import org.restlet.Server;
024: import org.restlet.data.Protocol;
025:
026: /**
027: * Modifiable list of server connectors.
028: *
029: * @author Jerome Louvel (contact@noelios.com)
030: */
031: public final class ServerList extends WrapperList<Server> {
032: /** The context. */
033: private Context context;
034:
035: /** The target Restlet of added servers. */
036: private Restlet target;
037:
038: /**
039: * Constructor.
040: *
041: * @param context
042: * The context.
043: * @param target
044: * The target Restlet of added servers.
045: */
046: public ServerList(Context context, Restlet target) {
047: this .context = context;
048: this .target = target;
049: }
050:
051: /**
052: * Adds a new server connector in the map supporting the given protocol.
053: *
054: * @param protocol
055: * The connector protocol.
056: * @return The added server.
057: */
058: public Server add(Protocol protocol) {
059: Server result = new Server(getContext(), protocol, null,
060: protocol.getDefaultPort(), getTarget());
061: add(result);
062: return result;
063: }
064:
065: /**
066: * Adds a new server connector in the map supporting the given protocol on
067: * the specified port.
068: *
069: * @param protocol
070: * The connector protocol.
071: * @param port
072: * The listening port.
073: * @return The added server.
074: */
075: public Server add(Protocol protocol, int port) {
076: Server result = new Server(getContext(), protocol, null, port,
077: getTarget());
078: add(result);
079: return result;
080: }
081:
082: /**
083: * Adds a new server connector in the map supporting the given protocol on
084: * the specified IP address and port.
085: *
086: * @param protocol
087: * The connector protocol.
088: * @param address
089: * The optional listening IP address (useful if multiple IP
090: * addresses available).
091: * @param port
092: * The listening port.
093: * @return The added server.
094: */
095: public Server add(Protocol protocol, String address, int port) {
096: Server result = new Server(getContext(), protocol, address,
097: port, getTarget());
098: add(result);
099: return result;
100: }
101:
102: /**
103: * Adds a server at the end of the list.
104: *
105: * @return True (as per the general contract of the Collection.add method).
106: */
107: public boolean add(Server server) {
108: server.setTarget(getTarget());
109: return super .add(server);
110: }
111:
112: /**
113: * Returns the context.
114: *
115: * @return The context.
116: */
117: public Context getContext() {
118: return this .context;
119: }
120:
121: /**
122: * Returns the target Restlet.
123: *
124: * @return The target Restlet.
125: */
126: public Restlet getTarget() {
127: return this.target;
128: }
129:
130: }
|