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;
020:
021: import java.util.Arrays;
022: import java.util.List;
023:
024: import org.restlet.data.Protocol;
025: import org.restlet.data.Request;
026: import org.restlet.data.Response;
027: import org.restlet.util.Engine;
028: import org.restlet.util.Helper;
029:
030: /**
031: * Connector acting as a generic client. It internally uses one of the available
032: * connectors registered with the current Restlet implementation.
033: *
034: * @author Jerome Louvel (contact@noelios.com)
035: */
036: public class Client extends Connector {
037: /** The helper provided by the implementation. */
038: private Helper helper;
039:
040: /**
041: * Constructor.
042: *
043: * @param context
044: * The context.
045: * @param protocols
046: * The connector protocols.
047: */
048: public Client(Context context, List<Protocol> protocols) {
049: super (context, protocols);
050:
051: if ((protocols != null) && (protocols.size() > 0)) {
052: if (Engine.getInstance() != null) {
053: this .helper = Engine.getInstance().createHelper(this );
054: }
055: }
056: }
057:
058: /**
059: * Constructor.
060: *
061: * @param context
062: * The context.
063: * @param protocol
064: * The connector protocol.
065: */
066: public Client(Context context, Protocol protocol) {
067: this (context, Arrays.asList(protocol));
068: }
069:
070: /**
071: * Constructor.
072: *
073: * @param protocols
074: * The connector protocols.
075: */
076: public Client(List<Protocol> protocols) {
077: this (null, protocols);
078: }
079:
080: /**
081: * Constructor.
082: *
083: * @param protocol
084: * The connector protocol.
085: */
086: public Client(Protocol protocol) {
087: this (null, protocol);
088: }
089:
090: /**
091: * Returns the helper provided by the implementation.
092: *
093: * @return The helper provided by the implementation.
094: */
095: private Helper getHelper() {
096: return this .helper;
097: }
098:
099: /**
100: * Handles a call.
101: *
102: * @param request
103: * The request to handle.
104: * @param response
105: * The response to update.
106: */
107: public void handle(Request request, Response response) {
108: init(request, response);
109: if (getHelper() != null)
110: getHelper().handle(request, response);
111: }
112:
113: @Override
114: public void start() throws Exception {
115: if (isStopped()) {
116: super .start();
117: if (getHelper() != null)
118: getHelper().start();
119: }
120: }
121:
122: @Override
123: public void stop() throws Exception {
124: if (isStarted()) {
125: if (getHelper() != null)
126: getHelper().stop();
127: super.stop();
128: }
129: }
130:
131: }
|