| /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
| ~ Licensed to the Apache Software Foundation (ASF) under one |
| ~ or more contributor license agreements. See the NOTICE file |
| ~ distributed with this work for additional information |
| ~ regarding copyright ownership. The ASF licenses this file |
| ~ to you under the Apache License, Version 2.0 (the |
| ~ "License"); you may not use this file except in compliance |
| ~ with the License. You may obtain a copy of the License at |
| ~ |
| ~ http://www.apache.org/licenses/LICENSE-2.0 |
| ~ |
| ~ Unless required by applicable law or agreed to in writing, |
| ~ software distributed under the License is distributed on an |
| ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| ~ KIND, either express or implied. See the License for the |
| ~ specific language governing permissions and limitations |
| ~ under the License. |
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ |
| package org.apache.sling.scriptingbundle.plugin.capability; |
| |
| import java.util.Arrays; |
| import java.util.Collections; |
| import java.util.HashSet; |
| import java.util.LinkedHashSet; |
| import java.util.List; |
| import java.util.Objects; |
| import java.util.Set; |
| |
| import org.apache.commons.lang3.StringUtils; |
| import org.jetbrains.annotations.NotNull; |
| import org.jetbrains.annotations.Nullable; |
| import org.osgi.framework.Version; |
| |
| public class ProvidedResourceTypeCapability { |
| private final Set<String> resourceTypes; |
| private final String scriptEngine; |
| private final String scriptExtension; |
| private final String extendsResourceType; |
| private final Version version; |
| private final String requestExtension; |
| private final String requestMethod; |
| private final List<String> selectors; |
| |
| private ProvidedResourceTypeCapability(@NotNull Set<String> resourceTypes, @Nullable String scriptEngine, |
| @Nullable String scriptExtension, @Nullable String extendsResourceType, |
| @Nullable Version version, @Nullable String requestExtension, @Nullable String requestMethod, |
| @NotNull List<String> selectors) { |
| this.resourceTypes = resourceTypes; |
| this.scriptEngine = scriptEngine; |
| this.scriptExtension = scriptExtension; |
| this.extendsResourceType = extendsResourceType; |
| this.version = version; |
| this.requestExtension = requestExtension; |
| this.requestMethod = requestMethod; |
| this.selectors = selectors; |
| } |
| |
| public static Builder builder() { |
| return new Builder(); |
| } |
| |
| @NotNull |
| public Set<String> getResourceTypes() { |
| return Collections.unmodifiableSet(resourceTypes); |
| } |
| |
| @Nullable |
| public String getScriptEngine() { |
| return scriptEngine; |
| } |
| |
| @Nullable |
| public String getScriptExtension() { |
| return scriptExtension; |
| } |
| |
| @Nullable |
| public Version getVersion() { |
| return version; |
| } |
| |
| @Nullable |
| public String getRequestExtension() { |
| return requestExtension; |
| } |
| |
| @Nullable |
| public String getExtendsResourceType() { |
| return extendsResourceType; |
| } |
| |
| @Nullable |
| public String getRequestMethod() { |
| return requestMethod; |
| } |
| |
| @NotNull |
| public List<String> getSelectors() { |
| return Collections.unmodifiableList(selectors); |
| } |
| |
| @Override |
| public int hashCode() { |
| return Objects |
| .hash(resourceTypes, scriptEngine, scriptExtension, version, requestExtension, extendsResourceType, requestMethod, |
| selectors); |
| } |
| |
| @Override |
| public boolean equals(Object obj) { |
| if (this == obj) { |
| return true; |
| } |
| if (obj instanceof ProvidedResourceTypeCapability) { |
| ProvidedResourceTypeCapability other = (ProvidedResourceTypeCapability) obj; |
| return Objects.equals(resourceTypes, other.resourceTypes) && Objects.equals(scriptEngine, other.scriptEngine) && |
| Objects.equals(scriptExtension, other.scriptExtension) && |
| Objects.equals(version, other.version) && Objects.equals(requestExtension, other.requestExtension) && |
| Objects.equals(extendsResourceType, other.extendsResourceType) && Objects.equals(requestMethod, other.requestMethod) && |
| Objects.equals(selectors, other.selectors); |
| } |
| return false; |
| } |
| |
| @Override |
| public String toString() { |
| return String.format( |
| "%s{resourceTypes=%s, scriptEngine=%s, scriptEngineExtension=%s, version=%s, selectors=%s, requestExtension=%s, " + |
| "requestMethod=%s, extendsResourceType=%s}", |
| this.getClass().getSimpleName(), resourceTypes, scriptEngine, scriptExtension, version, selectors, requestExtension, |
| requestMethod, |
| extendsResourceType |
| ); |
| } |
| |
| public static class Builder { |
| private Set<String> resourceTypes = new HashSet<>(); |
| private String scriptEngine; |
| private String scriptExtension; |
| private String extendsResourceType; |
| private Version version; |
| private String requestExtension; |
| private String requestMethod; |
| private List<String> selectors = Collections.emptyList(); |
| |
| public Builder withResourceTypes(@NotNull Set<String> resourceTypes) { |
| if (resourceTypes.isEmpty()) { |
| throw new IllegalArgumentException("The script's resourceTypes cannot be null or empty."); |
| } |
| this.resourceTypes = resourceTypes; |
| return this; |
| } |
| |
| public Builder withResourceTypes(@NotNull String... resourceTypes) { |
| return withResourceTypes(new LinkedHashSet<>(Arrays.asList(resourceTypes))); |
| } |
| |
| public Builder withResourceType(@NotNull String resourceType) { |
| if (StringUtils.isEmpty(resourceType)) { |
| throw new IllegalArgumentException("The script's resourceType cannot be null or empty."); |
| } |
| resourceTypes.add(resourceType); |
| return this; |
| } |
| |
| public Builder withScriptEngine(String scriptEngine) { |
| this.scriptEngine = scriptEngine; |
| return this; |
| } |
| |
| public Builder withScriptExtension(String scriptExtension) { |
| this.scriptExtension = scriptExtension; |
| return this; |
| } |
| |
| public Builder withExtendsResourceType(String extendsResourceType) { |
| this.extendsResourceType = extendsResourceType; |
| return this; |
| } |
| |
| public Builder withVersion(Version version) { |
| this.version = version; |
| return this; |
| } |
| |
| public Builder withRequestExtension(String requestExtension) { |
| this.requestExtension = requestExtension; |
| return this; |
| } |
| |
| public Builder withRequestMethod(String requestMethod) { |
| this.requestMethod = requestMethod; |
| return this; |
| } |
| |
| public Builder withSelectors(@NotNull List<String> selectors) { |
| this.selectors = selectors; |
| return this; |
| } |
| |
| public Builder withSelectors(@NotNull String... selectors) { |
| return withSelectors(Arrays.asList(selectors)); |
| } |
| |
| public Builder fromCapability(@NotNull ProvidedResourceTypeCapability capability) { |
| if (capability.getResourceTypes().isEmpty()) { |
| throw new IllegalArgumentException("The script's resourceTypes cannot be null or empty."); |
| } |
| this.resourceTypes = capability.getResourceTypes(); |
| this.scriptEngine = capability.getScriptEngine(); |
| this.scriptExtension = capability.getScriptExtension(); |
| this.extendsResourceType = capability.getExtendsResourceType(); |
| this.version = capability.getVersion(); |
| this.requestExtension = capability.getRequestExtension(); |
| this.requestMethod = capability.getRequestMethod(); |
| this.selectors = capability.getSelectors(); |
| return this; |
| } |
| |
| |
| public ProvidedResourceTypeCapability build() { |
| return new ProvidedResourceTypeCapability(resourceTypes, scriptEngine, scriptExtension, extendsResourceType, version, |
| requestExtension, requestMethod, selectors); |
| } |
| } |
| } |