forked from restlet/restlet-framework-java
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathConnector.java
More file actions
133 lines (121 loc) · 4.28 KB
/
Connector.java
File metadata and controls
133 lines (121 loc) · 4.28 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
/**
* Copyright 2005-2013 Restlet S.A.S.
*
* The contents of this file are subject to the terms of one of the following
* open source licenses: Apache 2.0 or LGPL 3.0 or LGPL 2.1 or CDDL 1.0 or EPL
* 1.0 (the "Licenses"). You can select the license that you prefer but you may
* not use this file except in compliance with one of these Licenses.
*
* You can obtain a copy of the Apache 2.0 license at
* http://www.opensource.org/licenses/apache-2.0
*
* You can obtain a copy of the LGPL 3.0 license at
* http://www.opensource.org/licenses/lgpl-3.0
*
* You can obtain a copy of the LGPL 2.1 license at
* http://www.opensource.org/licenses/lgpl-2.1
*
* You can obtain a copy of the CDDL 1.0 license at
* http://www.opensource.org/licenses/cddl1
*
* You can obtain a copy of the EPL 1.0 license at
* http://www.opensource.org/licenses/eclipse-1.0
*
* See the Licenses for the specific language governing permissions and
* limitations under the Licenses.
*
* Alternatively, you can obtain a royalty free commercial license with less
* limitations, transferable or non-transferable, directly at
* http://www.restlet.com/products/restlet-framework
*
* Restlet is a registered trademark of Restlet S.A.S.
*/
package org.restlet;
import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;
import org.restlet.data.Protocol;
/**
* Restlet enabling communication between Components. "A connector is an
* abstract mechanism that mediates communication, coordination, or cooperation
* among components. Connectors enable communication between components by
* transferring data elements from one interface to another without changing the
* data." Roy T. Fielding<br>
* <br>
* "Encapsulate the activities of accessing resources and transferring resource
* representations. The connectors present an abstract interface for component
* communication, enhancing simplicity by providing a clean separation of
* concerns and hiding the underlying implementation of resources and
* communication mechanisms" Roy T. Fielding<br>
* <br>
* Concurrency note: instances of this class or its subclasses can be invoked by
* several threads at the same time and therefore must be thread-safe. You
* should be especially careful when storing state in member variables.
*
* @see <a
* href="http://roy.gbiv.com/pubs/dissertation/software_arch.htm#sec_1_2_2">Source
* dissertation</a>
* @see <a
* href="http://roy.gbiv.com/pubs/dissertation/rest_arch_style.htm#sec_5_2_2">Source
* dissertation</a>
* @author Jerome Louvel
*/
public abstract class Connector extends Restlet {
/** The list of protocols simultaneously supported. */
private final List<Protocol> protocols;
/**
* Constructor.
*
* @param context
* The context.
*/
public Connector(Context context) {
this(context, null);
}
/**
* Constructor.
*
* @param context
* The context.
* @param protocols
* The supported protocols.
*/
public Connector(Context context, List<Protocol> protocols) {
super(context);
if (protocols == null) {
this.protocols = new CopyOnWriteArrayList<Protocol>();
} else {
this.protocols = new CopyOnWriteArrayList<Protocol>(protocols);
}
}
/**
* Returns the modifiable list of protocols simultaneously supported.
*
* @return The protocols simultaneously supported.
*/
public List<Protocol> getProtocols() {
return this.protocols;
}
/**
* Indicates the underlying connector helper is available.
*
* @return True if the underlying connector helper is available.
*/
public abstract boolean isAvailable();
/**
* Sets the list of protocols simultaneously supported. This method clears
* the current list and adds all entries in the parameter list.
*
* @param protocols
* A list of protocols.
*/
public void setProtocols(List<Protocol> protocols) {
synchronized (getProtocols()) {
if (protocols != getProtocols()) {
getProtocols().clear();
if (protocols != null) {
getProtocols().addAll(protocols);
}
}
}
}
}