1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package org.apache.mina.core.service;
21
22 import java.net.SocketAddress;
23 import java.util.Collections;
24 import java.util.Set;
25
26 import org.apache.mina.core.session.IoSessionConfig;
27 import org.apache.mina.util.IdentityHashSet;
28
29
30
31
32
33
34 public class DefaultTransportMetadata implements TransportMetadata {
35
36 private final String providerName;
37
38 private final String name;
39
40 private final boolean connectionless;
41
42
43 private final boolean fragmentation;
44
45 private final Class<? extends SocketAddress> addressType;
46
47 private final Class<? extends IoSessionConfig> sessionConfigType;
48
49 private final Set<Class<? extends Object>> envelopeTypes;
50
51
52
53
54
55
56
57
58
59
60
61
62 public DefaultTransportMetadata(String providerName, String name, boolean connectionless, boolean fragmentation,
63 Class<? extends SocketAddress> addressType, Class<? extends IoSessionConfig> sessionConfigType,
64 Class<?>... envelopeTypes) {
65
66 if (providerName == null) {
67 throw new IllegalArgumentException("providerName");
68 } else {
69 this.providerName = providerName.trim().toLowerCase();
70
71 if (this.providerName.length() == 0) {
72 throw new IllegalArgumentException("providerName is empty.");
73 }
74 }
75
76 if (name == null) {
77 throw new IllegalArgumentException("name");
78 } else {
79 this.name = name.trim().toLowerCase();
80
81 if (this.name.length() == 0) {
82 throw new IllegalArgumentException("name is empty.");
83 }
84 }
85
86 if (addressType == null) {
87 throw new IllegalArgumentException("addressType");
88 }
89
90 if (envelopeTypes == null) {
91 throw new IllegalArgumentException("envelopeTypes");
92 }
93
94 if (envelopeTypes.length == 0) {
95 throw new IllegalArgumentException("envelopeTypes is empty.");
96 }
97
98 if (sessionConfigType == null) {
99 throw new IllegalArgumentException("sessionConfigType");
100 }
101
102 this.connectionless = connectionless;
103 this.fragmentation = fragmentation;
104 this.addressType = addressType;
105 this.sessionConfigType = sessionConfigType;
106
107 Set<Class<? extends Object>> newEnvelopeTypes = new IdentityHashSet<>();
108 for (Class<? extends Object> c : envelopeTypes) {
109 newEnvelopeTypes.add(c);
110 }
111 this.envelopeTypes = Collections.unmodifiableSet(newEnvelopeTypes);
112 }
113
114
115
116
117 @Override
118 public Class<? extends SocketAddress> getAddressType() {
119 return addressType;
120 }
121
122
123
124
125 @Override
126 public Set<Class<? extends Object>> getEnvelopeTypes() {
127 return envelopeTypes;
128 }
129
130
131
132
133 @Override
134 public Class<? extends IoSessionConfig> getSessionConfigType() {
135 return sessionConfigType;
136 }
137
138
139
140
141 @Override
142 public String getProviderName() {
143 return providerName;
144 }
145
146
147
148
149 @Override
150 public String getName() {
151 return name;
152 }
153
154
155
156
157 @Override
158 public boolean isConnectionless() {
159 return connectionless;
160 }
161
162
163
164
165 @Override
166 public boolean hasFragmentation() {
167 return fragmentation;
168 }
169
170 @Override
171 public String toString() {
172 return name;
173 }
174 }