Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
SeleniumHQ
GitHub Repository: SeleniumHQ/Selenium
Path: blob/trunk/java/src/org/openqa/selenium/ImmutableCapabilities.java
1865 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.NullMarked;
26
import org.jspecify.annotations.Nullable;
27
import org.openqa.selenium.internal.Require;
28
29
@NullMarked
30
public class ImmutableCapabilities implements Capabilities {
31
32
private final Map<String, Object> delegate;
33
private final int hashCode;
34
35
public ImmutableCapabilities() {
36
this.delegate = Collections.emptyMap();
37
this.hashCode = SharedCapabilitiesMethods.hashCode(this);
38
}
39
40
public ImmutableCapabilities(String k, Object v) {
41
Require.nonNull("Capability", k);
42
Require.nonNull("Value", v);
43
44
Map<String, Object> delegate = new TreeMap<>();
45
setCapability(delegate, k, v);
46
47
this.delegate = Collections.unmodifiableMap(delegate);
48
this.hashCode = SharedCapabilitiesMethods.hashCode(this);
49
}
50
51
public ImmutableCapabilities(String k1, Object v1, String k2, Object v2) {
52
Require.nonNull("First capability", k1);
53
Require.nonNull("First value", v1);
54
Require.nonNull("Second capability", k2);
55
Require.nonNull("Second value", v2);
56
57
Map<String, Object> delegate = new TreeMap<>();
58
59
setCapability(delegate, k1, v1);
60
setCapability(delegate, k2, v2);
61
62
this.delegate = Collections.unmodifiableMap(delegate);
63
this.hashCode = SharedCapabilitiesMethods.hashCode(this);
64
}
65
66
public ImmutableCapabilities(String k1, Object v1, String k2, Object v2, String k3, Object v3) {
67
Require.nonNull("First capability", k1);
68
Require.nonNull("First value", v1);
69
Require.nonNull("Second capability", k2);
70
Require.nonNull("Second value", v2);
71
Require.nonNull("Third capability", k3);
72
Require.nonNull("Third value", v3);
73
74
Map<String, Object> delegate = new TreeMap<>();
75
76
setCapability(delegate, k1, v1);
77
setCapability(delegate, k2, v2);
78
setCapability(delegate, k3, v3);
79
80
this.delegate = Collections.unmodifiableMap(delegate);
81
this.hashCode = SharedCapabilitiesMethods.hashCode(this);
82
}
83
84
public ImmutableCapabilities(
85
String k1, Object v1, String k2, Object v2, String k3, Object v3, String k4, Object v4) {
86
Require.nonNull("First capability", k1);
87
Require.nonNull("First value", v1);
88
Require.nonNull("Second capability", k2);
89
Require.nonNull("Second value", v2);
90
Require.nonNull("Third capability", k3);
91
Require.nonNull("Third value", v3);
92
Require.nonNull("Fourth capability", k4);
93
Require.nonNull("Fourth value", v4);
94
95
Map<String, Object> delegate = new TreeMap<>();
96
97
setCapability(delegate, k1, v1);
98
setCapability(delegate, k2, v2);
99
setCapability(delegate, k3, v3);
100
setCapability(delegate, k4, v4);
101
102
this.delegate = Collections.unmodifiableMap(delegate);
103
this.hashCode = SharedCapabilitiesMethods.hashCode(this);
104
}
105
106
public ImmutableCapabilities(
107
String k1,
108
Object v1,
109
String k2,
110
Object v2,
111
String k3,
112
Object v3,
113
String k4,
114
Object v4,
115
String k5,
116
Object v5) {
117
Require.nonNull("First capability", k1);
118
Require.nonNull("First value", v1);
119
Require.nonNull("Second capability", k2);
120
Require.nonNull("Second value", v2);
121
Require.nonNull("Third capability", k3);
122
Require.nonNull("Third value", v3);
123
Require.nonNull("Fourth capability", k4);
124
Require.nonNull("Fourth value", v4);
125
Require.nonNull("Fifth capability", k5);
126
Require.nonNull("Fifth value", v5);
127
128
Map<String, Object> delegate = new TreeMap<>();
129
130
setCapability(delegate, k1, v1);
131
setCapability(delegate, k2, v2);
132
setCapability(delegate, k3, v3);
133
setCapability(delegate, k4, v4);
134
setCapability(delegate, k5, v5);
135
136
this.delegate = Collections.unmodifiableMap(delegate);
137
this.hashCode = SharedCapabilitiesMethods.hashCode(this);
138
}
139
140
public ImmutableCapabilities(Capabilities other) {
141
this(other.asMap());
142
}
143
144
public ImmutableCapabilities(Map<?, ?> capabilities) {
145
Require.nonNull("Capabilities", capabilities);
146
147
Map<String, Object> delegate = new TreeMap<>();
148
capabilities.forEach(
149
(key, value) -> {
150
Require.argument("Capability key", key).instanceOf(String.class);
151
Require.nonNull("Capability value", value);
152
153
setCapability(delegate, (String) key, value);
154
});
155
156
this.delegate = Collections.unmodifiableMap(delegate);
157
this.hashCode = SharedCapabilitiesMethods.hashCode(this);
158
}
159
160
@Override
161
public @Nullable Object getCapability(String capabilityName) {
162
Require.nonNull("Capability name", capabilityName);
163
return delegate.get(capabilityName);
164
}
165
166
@Override
167
public Map<String, Object> asMap() {
168
return delegate;
169
}
170
171
@Override
172
public int hashCode() {
173
return hashCode;
174
}
175
176
@Override
177
public boolean equals(@Nullable Object o) {
178
if (!(o instanceof Capabilities)) {
179
return false;
180
}
181
return SharedCapabilitiesMethods.equals(this, (Capabilities) o);
182
}
183
184
@Override
185
public String toString() {
186
return SharedCapabilitiesMethods.toString(this);
187
}
188
189
public static ImmutableCapabilities copyOf(Capabilities capabilities) {
190
Require.nonNull("Capabilities", capabilities);
191
192
if (capabilities instanceof ImmutableCapabilities) {
193
return (ImmutableCapabilities) capabilities;
194
}
195
196
return new ImmutableCapabilities(capabilities);
197
}
198
}
199
200