Path: blob/trunk/java/src/org/openqa/selenium/ImmutableCapabilities.java
1865 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.NullMarked;25import org.jspecify.annotations.Nullable;26import org.openqa.selenium.internal.Require;2728@NullMarked29public class ImmutableCapabilities implements Capabilities {3031private final Map<String, Object> delegate;32private final int hashCode;3334public ImmutableCapabilities() {35this.delegate = Collections.emptyMap();36this.hashCode = SharedCapabilitiesMethods.hashCode(this);37}3839public ImmutableCapabilities(String k, Object v) {40Require.nonNull("Capability", k);41Require.nonNull("Value", v);4243Map<String, Object> delegate = new TreeMap<>();44setCapability(delegate, k, v);4546this.delegate = Collections.unmodifiableMap(delegate);47this.hashCode = SharedCapabilitiesMethods.hashCode(this);48}4950public ImmutableCapabilities(String k1, Object v1, String k2, Object v2) {51Require.nonNull("First capability", k1);52Require.nonNull("First value", v1);53Require.nonNull("Second capability", k2);54Require.nonNull("Second value", v2);5556Map<String, Object> delegate = new TreeMap<>();5758setCapability(delegate, k1, v1);59setCapability(delegate, k2, v2);6061this.delegate = Collections.unmodifiableMap(delegate);62this.hashCode = SharedCapabilitiesMethods.hashCode(this);63}6465public ImmutableCapabilities(String k1, Object v1, String k2, Object v2, String k3, Object v3) {66Require.nonNull("First capability", k1);67Require.nonNull("First value", v1);68Require.nonNull("Second capability", k2);69Require.nonNull("Second value", v2);70Require.nonNull("Third capability", k3);71Require.nonNull("Third value", v3);7273Map<String, Object> delegate = new TreeMap<>();7475setCapability(delegate, k1, v1);76setCapability(delegate, k2, v2);77setCapability(delegate, k3, v3);7879this.delegate = Collections.unmodifiableMap(delegate);80this.hashCode = SharedCapabilitiesMethods.hashCode(this);81}8283public ImmutableCapabilities(84String k1, Object v1, String k2, Object v2, String k3, Object v3, String k4, Object v4) {85Require.nonNull("First capability", k1);86Require.nonNull("First value", v1);87Require.nonNull("Second capability", k2);88Require.nonNull("Second value", v2);89Require.nonNull("Third capability", k3);90Require.nonNull("Third value", v3);91Require.nonNull("Fourth capability", k4);92Require.nonNull("Fourth value", v4);9394Map<String, Object> delegate = new TreeMap<>();9596setCapability(delegate, k1, v1);97setCapability(delegate, k2, v2);98setCapability(delegate, k3, v3);99setCapability(delegate, k4, v4);100101this.delegate = Collections.unmodifiableMap(delegate);102this.hashCode = SharedCapabilitiesMethods.hashCode(this);103}104105public ImmutableCapabilities(106String k1,107Object v1,108String k2,109Object v2,110String k3,111Object v3,112String k4,113Object v4,114String k5,115Object v5) {116Require.nonNull("First capability", k1);117Require.nonNull("First value", v1);118Require.nonNull("Second capability", k2);119Require.nonNull("Second value", v2);120Require.nonNull("Third capability", k3);121Require.nonNull("Third value", v3);122Require.nonNull("Fourth capability", k4);123Require.nonNull("Fourth value", v4);124Require.nonNull("Fifth capability", k5);125Require.nonNull("Fifth value", v5);126127Map<String, Object> delegate = new TreeMap<>();128129setCapability(delegate, k1, v1);130setCapability(delegate, k2, v2);131setCapability(delegate, k3, v3);132setCapability(delegate, k4, v4);133setCapability(delegate, k5, v5);134135this.delegate = Collections.unmodifiableMap(delegate);136this.hashCode = SharedCapabilitiesMethods.hashCode(this);137}138139public ImmutableCapabilities(Capabilities other) {140this(other.asMap());141}142143public ImmutableCapabilities(Map<?, ?> capabilities) {144Require.nonNull("Capabilities", capabilities);145146Map<String, Object> delegate = new TreeMap<>();147capabilities.forEach(148(key, value) -> {149Require.argument("Capability key", key).instanceOf(String.class);150Require.nonNull("Capability value", value);151152setCapability(delegate, (String) key, value);153});154155this.delegate = Collections.unmodifiableMap(delegate);156this.hashCode = SharedCapabilitiesMethods.hashCode(this);157}158159@Override160public @Nullable Object getCapability(String capabilityName) {161Require.nonNull("Capability name", capabilityName);162return delegate.get(capabilityName);163}164165@Override166public Map<String, Object> asMap() {167return delegate;168}169170@Override171public int hashCode() {172return hashCode;173}174175@Override176public boolean equals(@Nullable Object o) {177if (!(o instanceof Capabilities)) {178return false;179}180return SharedCapabilitiesMethods.equals(this, (Capabilities) o);181}182183@Override184public String toString() {185return SharedCapabilitiesMethods.toString(this);186}187188public static ImmutableCapabilities copyOf(Capabilities capabilities) {189Require.nonNull("Capabilities", capabilities);190191if (capabilities instanceof ImmutableCapabilities) {192return (ImmutableCapabilities) capabilities;193}194195return new ImmutableCapabilities(capabilities);196}197}198199200