Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
SeleniumHQ
GitHub Repository: SeleniumHQ/Selenium
Path: blob/trunk/java/src/org/openqa/selenium/ImmutableCapabilities.java
3991 views
1
// Licensed to the Software Freedom Conservancy (SFC) under one
2
// or more contributor license agreements. See the NOTICE file
3
// distributed with this work for additional information
4
// regarding copyright ownership. The SFC licenses this file
5
// to you under the Apache License, Version 2.0 (the
6
// "License"); you may not use this file except in compliance
7
// with the License. You may obtain a copy of the License at
8
//
9
// http://www.apache.org/licenses/LICENSE-2.0
10
//
11
// Unless required by applicable law or agreed to in writing,
12
// software distributed under the License is distributed on an
13
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
14
// KIND, either express or implied. See the License for the
15
// specific language governing permissions and limitations
16
// under the License.
17
18
package org.openqa.selenium;
19
20
import static org.openqa.selenium.SharedCapabilitiesMethods.setCapability;
21
22
import java.util.Collections;
23
import java.util.Map;
24
import java.util.TreeMap;
25
import org.jspecify.annotations.Nullable;
26
import org.openqa.selenium.internal.Require;
27
28
public class ImmutableCapabilities implements Capabilities {
29
30
private final Map<String, Object> delegate;
31
private final int hashCode;
32
33
public ImmutableCapabilities() {
34
this.delegate = Collections.emptyMap();
35
this.hashCode = SharedCapabilitiesMethods.hashCode(this);
36
}
37
38
public ImmutableCapabilities(String k, Object v) {
39
Require.nonNull("Capability", k);
40
Require.nonNull("Value", v);
41
42
Map<String, Object> delegate = new TreeMap<>();
43
setCapability(delegate, k, v);
44
45
this.delegate = Collections.unmodifiableMap(delegate);
46
this.hashCode = SharedCapabilitiesMethods.hashCode(this);
47
}
48
49
public ImmutableCapabilities(String k1, Object v1, String k2, Object v2) {
50
Require.nonNull("First capability", k1);
51
Require.nonNull("First value", v1);
52
Require.nonNull("Second capability", k2);
53
Require.nonNull("Second value", v2);
54
55
Map<String, Object> delegate = new TreeMap<>();
56
57
setCapability(delegate, k1, v1);
58
setCapability(delegate, k2, v2);
59
60
this.delegate = Collections.unmodifiableMap(delegate);
61
this.hashCode = SharedCapabilitiesMethods.hashCode(this);
62
}
63
64
public ImmutableCapabilities(String k1, Object v1, String k2, Object v2, String k3, Object v3) {
65
Require.nonNull("First capability", k1);
66
Require.nonNull("First value", v1);
67
Require.nonNull("Second capability", k2);
68
Require.nonNull("Second value", v2);
69
Require.nonNull("Third capability", k3);
70
Require.nonNull("Third value", v3);
71
72
Map<String, Object> delegate = new TreeMap<>();
73
74
setCapability(delegate, k1, v1);
75
setCapability(delegate, k2, v2);
76
setCapability(delegate, k3, v3);
77
78
this.delegate = Collections.unmodifiableMap(delegate);
79
this.hashCode = SharedCapabilitiesMethods.hashCode(this);
80
}
81
82
public ImmutableCapabilities(
83
String k1, Object v1, String k2, Object v2, String k3, Object v3, String k4, Object v4) {
84
Require.nonNull("First capability", k1);
85
Require.nonNull("First value", v1);
86
Require.nonNull("Second capability", k2);
87
Require.nonNull("Second value", v2);
88
Require.nonNull("Third capability", k3);
89
Require.nonNull("Third value", v3);
90
Require.nonNull("Fourth capability", k4);
91
Require.nonNull("Fourth value", v4);
92
93
Map<String, Object> delegate = new TreeMap<>();
94
95
setCapability(delegate, k1, v1);
96
setCapability(delegate, k2, v2);
97
setCapability(delegate, k3, v3);
98
setCapability(delegate, k4, v4);
99
100
this.delegate = Collections.unmodifiableMap(delegate);
101
this.hashCode = SharedCapabilitiesMethods.hashCode(this);
102
}
103
104
public ImmutableCapabilities(
105
String k1,
106
Object v1,
107
String k2,
108
Object v2,
109
String k3,
110
Object v3,
111
String k4,
112
Object v4,
113
String k5,
114
Object v5) {
115
Require.nonNull("First capability", k1);
116
Require.nonNull("First value", v1);
117
Require.nonNull("Second capability", k2);
118
Require.nonNull("Second value", v2);
119
Require.nonNull("Third capability", k3);
120
Require.nonNull("Third value", v3);
121
Require.nonNull("Fourth capability", k4);
122
Require.nonNull("Fourth value", v4);
123
Require.nonNull("Fifth capability", k5);
124
Require.nonNull("Fifth value", v5);
125
126
Map<String, Object> delegate = new TreeMap<>();
127
128
setCapability(delegate, k1, v1);
129
setCapability(delegate, k2, v2);
130
setCapability(delegate, k3, v3);
131
setCapability(delegate, k4, v4);
132
setCapability(delegate, k5, v5);
133
134
this.delegate = Collections.unmodifiableMap(delegate);
135
this.hashCode = SharedCapabilitiesMethods.hashCode(this);
136
}
137
138
public ImmutableCapabilities(Capabilities other) {
139
this(other.asMap());
140
}
141
142
public ImmutableCapabilities(Map<?, ?> capabilities) {
143
Require.nonNull("Capabilities", capabilities);
144
145
Map<String, Object> delegate = new TreeMap<>();
146
capabilities.forEach(
147
(key, value) -> {
148
Require.argument("Capability key", key).instanceOf(String.class);
149
Require.nonNull("Capability value", value);
150
151
setCapability(delegate, (String) key, value);
152
});
153
154
this.delegate = Collections.unmodifiableMap(delegate);
155
this.hashCode = SharedCapabilitiesMethods.hashCode(this);
156
}
157
158
@Override
159
public @Nullable Object getCapability(String capabilityName) {
160
Require.nonNull("Capability name", capabilityName);
161
return delegate.get(capabilityName);
162
}
163
164
@Override
165
public Map<String, Object> asMap() {
166
return delegate;
167
}
168
169
@Override
170
public int hashCode() {
171
return hashCode;
172
}
173
174
@Override
175
public boolean equals(@Nullable Object o) {
176
if (!(o instanceof Capabilities)) {
177
return false;
178
}
179
return SharedCapabilitiesMethods.equals(this, (Capabilities) o);
180
}
181
182
@Override
183
public String toString() {
184
return SharedCapabilitiesMethods.toString(this);
185
}
186
187
public static ImmutableCapabilities copyOf(Capabilities capabilities) {
188
Require.nonNull("Capabilities", capabilities);
189
190
if (capabilities instanceof ImmutableCapabilities) {
191
return (ImmutableCapabilities) capabilities;
192
}
193
194
return new ImmutableCapabilities(capabilities);
195
}
196
}
197
198