Path: blob/trunk/java/src/org/openqa/selenium/ImmutableCapabilities.java
3991 views
// Licensed to the Software Freedom Conservancy (SFC) under one1// or more contributor license agreements. See the NOTICE file2// distributed with this work for additional information3// regarding copyright ownership. The SFC licenses this file4// to you under the Apache License, Version 2.0 (the5// "License"); you may not use this file except in compliance6// with the License. You may obtain a copy of the License at7//8// http://www.apache.org/licenses/LICENSE-2.09//10// Unless required by applicable law or agreed to in writing,11// software distributed under the License is distributed on an12// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY13// KIND, either express or implied. See the License for the14// specific language governing permissions and limitations15// under the License.1617package org.openqa.selenium;1819import static org.openqa.selenium.SharedCapabilitiesMethods.setCapability;2021import java.util.Collections;22import java.util.Map;23import java.util.TreeMap;24import org.jspecify.annotations.Nullable;25import org.openqa.selenium.internal.Require;2627public class ImmutableCapabilities implements Capabilities {2829private final Map<String, Object> delegate;30private final int hashCode;3132public ImmutableCapabilities() {33this.delegate = Collections.emptyMap();34this.hashCode = SharedCapabilitiesMethods.hashCode(this);35}3637public ImmutableCapabilities(String k, Object v) {38Require.nonNull("Capability", k);39Require.nonNull("Value", v);4041Map<String, Object> delegate = new TreeMap<>();42setCapability(delegate, k, v);4344this.delegate = Collections.unmodifiableMap(delegate);45this.hashCode = SharedCapabilitiesMethods.hashCode(this);46}4748public ImmutableCapabilities(String k1, Object v1, String k2, Object v2) {49Require.nonNull("First capability", k1);50Require.nonNull("First value", v1);51Require.nonNull("Second capability", k2);52Require.nonNull("Second value", v2);5354Map<String, Object> delegate = new TreeMap<>();5556setCapability(delegate, k1, v1);57setCapability(delegate, k2, v2);5859this.delegate = Collections.unmodifiableMap(delegate);60this.hashCode = SharedCapabilitiesMethods.hashCode(this);61}6263public ImmutableCapabilities(String k1, Object v1, String k2, Object v2, String k3, Object v3) {64Require.nonNull("First capability", k1);65Require.nonNull("First value", v1);66Require.nonNull("Second capability", k2);67Require.nonNull("Second value", v2);68Require.nonNull("Third capability", k3);69Require.nonNull("Third value", v3);7071Map<String, Object> delegate = new TreeMap<>();7273setCapability(delegate, k1, v1);74setCapability(delegate, k2, v2);75setCapability(delegate, k3, v3);7677this.delegate = Collections.unmodifiableMap(delegate);78this.hashCode = SharedCapabilitiesMethods.hashCode(this);79}8081public ImmutableCapabilities(82String k1, Object v1, String k2, Object v2, String k3, Object v3, String k4, Object v4) {83Require.nonNull("First capability", k1);84Require.nonNull("First value", v1);85Require.nonNull("Second capability", k2);86Require.nonNull("Second value", v2);87Require.nonNull("Third capability", k3);88Require.nonNull("Third value", v3);89Require.nonNull("Fourth capability", k4);90Require.nonNull("Fourth value", v4);9192Map<String, Object> delegate = new TreeMap<>();9394setCapability(delegate, k1, v1);95setCapability(delegate, k2, v2);96setCapability(delegate, k3, v3);97setCapability(delegate, k4, v4);9899this.delegate = Collections.unmodifiableMap(delegate);100this.hashCode = SharedCapabilitiesMethods.hashCode(this);101}102103public ImmutableCapabilities(104String k1,105Object v1,106String k2,107Object v2,108String k3,109Object v3,110String k4,111Object v4,112String k5,113Object v5) {114Require.nonNull("First capability", k1);115Require.nonNull("First value", v1);116Require.nonNull("Second capability", k2);117Require.nonNull("Second value", v2);118Require.nonNull("Third capability", k3);119Require.nonNull("Third value", v3);120Require.nonNull("Fourth capability", k4);121Require.nonNull("Fourth value", v4);122Require.nonNull("Fifth capability", k5);123Require.nonNull("Fifth value", v5);124125Map<String, Object> delegate = new TreeMap<>();126127setCapability(delegate, k1, v1);128setCapability(delegate, k2, v2);129setCapability(delegate, k3, v3);130setCapability(delegate, k4, v4);131setCapability(delegate, k5, v5);132133this.delegate = Collections.unmodifiableMap(delegate);134this.hashCode = SharedCapabilitiesMethods.hashCode(this);135}136137public ImmutableCapabilities(Capabilities other) {138this(other.asMap());139}140141public ImmutableCapabilities(Map<?, ?> capabilities) {142Require.nonNull("Capabilities", capabilities);143144Map<String, Object> delegate = new TreeMap<>();145capabilities.forEach(146(key, value) -> {147Require.argument("Capability key", key).instanceOf(String.class);148Require.nonNull("Capability value", value);149150setCapability(delegate, (String) key, value);151});152153this.delegate = Collections.unmodifiableMap(delegate);154this.hashCode = SharedCapabilitiesMethods.hashCode(this);155}156157@Override158public @Nullable Object getCapability(String capabilityName) {159Require.nonNull("Capability name", capabilityName);160return delegate.get(capabilityName);161}162163@Override164public Map<String, Object> asMap() {165return delegate;166}167168@Override169public int hashCode() {170return hashCode;171}172173@Override174public boolean equals(@Nullable Object o) {175if (!(o instanceof Capabilities)) {176return false;177}178return SharedCapabilitiesMethods.equals(this, (Capabilities) o);179}180181@Override182public String toString() {183return SharedCapabilitiesMethods.toString(this);184}185186public static ImmutableCapabilities copyOf(Capabilities capabilities) {187Require.nonNull("Capabilities", capabilities);188189if (capabilities instanceof ImmutableCapabilities) {190return (ImmutableCapabilities) capabilities;191}192193return new ImmutableCapabilities(capabilities);194}195}196197198