| /* |
| * 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.jclouds.chef.domain; |
| |
| import static com.google.common.base.Preconditions.checkNotNull; |
| import static org.jclouds.chef.util.CollectionUtils.copyOfOrEmpty; |
| |
| import java.beans.ConstructorProperties; |
| import java.util.Set; |
| |
| import org.jclouds.javax.annotation.Nullable; |
| |
| import com.google.common.collect.ImmutableSet; |
| import com.google.gson.annotations.SerializedName; |
| |
| /** |
| * Cookbook object. |
| */ |
| public class CookbookVersion { |
| public static Builder builder(String name, String version) { |
| return new Builder(name, version); |
| } |
| |
| public static class Builder { |
| private String cookbookName; |
| private ImmutableSet.Builder<Resource> definitions = ImmutableSet.builder(); |
| private ImmutableSet.Builder<Attribute> attributes = ImmutableSet.builder(); |
| private ImmutableSet.Builder<Resource> files = ImmutableSet.builder(); |
| private Metadata metadata = Metadata.builder().build(); |
| private ImmutableSet.Builder<Resource> providers = ImmutableSet.builder(); |
| private ImmutableSet.Builder<Resource> resources = ImmutableSet.builder(); |
| private ImmutableSet.Builder<Resource> templates = ImmutableSet.builder(); |
| private ImmutableSet.Builder<Resource> libraries = ImmutableSet.builder(); |
| private String version; |
| private ImmutableSet.Builder<Resource> recipes = ImmutableSet.builder(); |
| private ImmutableSet.Builder<Resource> rootFiles = ImmutableSet.builder(); |
| |
| public Builder(String name, String version) { |
| this.cookbookName = checkNotNull(name, "name"); |
| this.version = checkNotNull(version, "version"); |
| } |
| |
| public Builder cookbookName(String cookbookName) { |
| this.cookbookName = checkNotNull(cookbookName, "cookbookName"); |
| return this; |
| } |
| |
| public Builder definition(Resource definition) { |
| this.definitions.add(checkNotNull(definition, "definition")); |
| return this; |
| } |
| |
| public Builder definitions(Iterable<Resource> definitions) { |
| this.definitions.addAll(checkNotNull(definitions, "definitions")); |
| return this; |
| } |
| |
| public Builder attribute(Attribute attribute) { |
| this.attributes.add(checkNotNull(attribute, "attribute")); |
| return this; |
| } |
| |
| public Builder attributes(Iterable<Attribute> attributes) { |
| this.attributes.addAll(checkNotNull(attributes, "attributes")); |
| return this; |
| } |
| |
| public Builder file(Resource file) { |
| this.files.add(checkNotNull(file, "file")); |
| return this; |
| } |
| |
| public Builder files(Iterable<Resource> files) { |
| this.files.addAll(checkNotNull(files, "files")); |
| return this; |
| } |
| |
| public Builder metadata(Metadata metadata) { |
| this.metadata = checkNotNull(metadata, "metadata"); |
| return this; |
| } |
| |
| public Builder provider(Resource provider) { |
| this.providers.add(checkNotNull(provider, "provider")); |
| return this; |
| } |
| |
| public Builder providers(Iterable<Resource> providers) { |
| this.providers.addAll(checkNotNull(providers, "providers")); |
| return this; |
| } |
| |
| public Builder resource(Resource resource) { |
| this.resources.add(checkNotNull(resource, "resource")); |
| return this; |
| } |
| |
| public Builder resources(Iterable<Resource> resources) { |
| this.resources.addAll(checkNotNull(resources, "resources")); |
| return this; |
| } |
| |
| public Builder template(Resource template) { |
| this.templates.add(checkNotNull(template, "template")); |
| return this; |
| } |
| |
| public Builder templates(Iterable<Resource> templates) { |
| this.templates.addAll(checkNotNull(templates, "templates")); |
| return this; |
| } |
| |
| public Builder library(Resource library) { |
| this.libraries.add(checkNotNull(library, "library")); |
| return this; |
| } |
| |
| public Builder libraries(Iterable<Resource> libraries) { |
| this.libraries.addAll(checkNotNull(libraries, "libraries")); |
| return this; |
| } |
| |
| public Builder version(String version) { |
| this.version = checkNotNull(version, "version"); |
| return this; |
| } |
| |
| public Builder recipe(Resource recipe) { |
| this.recipes.add(checkNotNull(recipe, "recipe")); |
| return this; |
| } |
| |
| public Builder recipes(Iterable<Resource> recipes) { |
| this.recipes.addAll(checkNotNull(recipes, "recipes")); |
| return this; |
| } |
| |
| public Builder rootFile(Resource rootFile) { |
| this.rootFiles.add(checkNotNull(rootFile, "rootFile")); |
| return this; |
| } |
| |
| public Builder rootFiles(Iterable<Resource> rootFiles) { |
| this.rootFiles.addAll(checkNotNull(rootFiles, "rootFiles")); |
| return this; |
| } |
| |
| public CookbookVersion build() { |
| return new CookbookVersion(checkNotNull(cookbookName, "name") + "-" + checkNotNull(version, "version"), |
| definitions.build(), attributes.build(), files.build(), metadata, providers.build(), cookbookName, |
| resources.build(), templates.build(), libraries.build(), version, recipes.build(), rootFiles.build()); |
| } |
| } |
| |
| private final String name; |
| private final Set<Resource> definitions; |
| private final Set<Attribute> attributes; |
| private final Set<Resource> files; |
| private final Metadata metadata; |
| private final Set<Resource> providers; |
| @SerializedName("cookbook_name") |
| private final String cookbookName; |
| private final Set<Resource> resources; |
| private final Set<Resource> templates; |
| private final Set<Resource> libraries; |
| private final String version; |
| private final Set<Resource> recipes; |
| @SerializedName("root_files") |
| private final Set<Resource> rootFiles; |
| |
| // internal |
| @SerializedName("json_class") |
| private String _jsonClass = "Chef::CookbookVersion"; |
| @SerializedName("chef_type") |
| private String _chefType = "cookbook_version"; |
| |
| @ConstructorProperties({ "name", "definitions", "attributes", "files", "metadata", "providers", "cookbook_name", |
| "resources", "templates", "libraries", "version", "recipes", "root_files" }) |
| protected CookbookVersion(String name, @Nullable Set<Resource> definitions, @Nullable Set<Attribute> attributes, |
| @Nullable Set<Resource> files, Metadata metadata, @Nullable Set<Resource> providers, String cookbookName, |
| @Nullable Set<Resource> resources, @Nullable Set<Resource> templates, @Nullable Set<Resource> libraries, |
| String version, @Nullable Set<Resource> recipes, @Nullable Set<Resource> rootFiles) { |
| this.name = name; |
| this.definitions = copyOfOrEmpty(definitions); |
| this.attributes = copyOfOrEmpty(attributes); |
| this.files = copyOfOrEmpty(files); |
| this.metadata = metadata; |
| this.providers = copyOfOrEmpty(providers); |
| this.cookbookName = cookbookName; |
| this.resources = copyOfOrEmpty(resources); |
| this.templates = copyOfOrEmpty(templates); |
| this.libraries = copyOfOrEmpty(libraries); |
| this.version = version; |
| this.recipes = copyOfOrEmpty(recipes); |
| this.rootFiles = copyOfOrEmpty(rootFiles); |
| } |
| |
| public String getName() { |
| return name; |
| } |
| |
| public Set<Resource> getDefinitions() { |
| return definitions; |
| } |
| |
| public Set<Attribute> getAttributes() { |
| return attributes; |
| } |
| |
| public Set<Resource> getFiles() { |
| return files; |
| } |
| |
| public Metadata getMetadata() { |
| return metadata; |
| } |
| |
| public Set<Resource> getSuppliers() { |
| return providers; |
| } |
| |
| public String getCookbookName() { |
| return cookbookName; |
| } |
| |
| public Set<Resource> getResources() { |
| return resources; |
| } |
| |
| public Set<Resource> getTemplates() { |
| return templates; |
| } |
| |
| public Set<Resource> getLibraries() { |
| return libraries; |
| } |
| |
| public String getVersion() { |
| return version; |
| } |
| |
| public Set<Resource> getRecipes() { |
| return recipes; |
| } |
| |
| public Set<Resource> getRootFiles() { |
| return rootFiles; |
| } |
| |
| @Override |
| public int hashCode() { |
| final int prime = 31; |
| int result = 1; |
| result = prime * result + ((attributes == null) ? 0 : attributes.hashCode()); |
| result = prime * result + ((cookbookName == null) ? 0 : cookbookName.hashCode()); |
| result = prime * result + ((definitions == null) ? 0 : definitions.hashCode()); |
| result = prime * result + ((files == null) ? 0 : files.hashCode()); |
| result = prime * result + ((libraries == null) ? 0 : libraries.hashCode()); |
| result = prime * result + ((metadata == null) ? 0 : metadata.hashCode()); |
| result = prime * result + ((name == null) ? 0 : name.hashCode()); |
| result = prime * result + ((providers == null) ? 0 : providers.hashCode()); |
| result = prime * result + ((recipes == null) ? 0 : recipes.hashCode()); |
| result = prime * result + ((resources == null) ? 0 : resources.hashCode()); |
| result = prime * result + ((rootFiles == null) ? 0 : rootFiles.hashCode()); |
| result = prime * result + ((templates == null) ? 0 : templates.hashCode()); |
| result = prime * result + ((version == null) ? 0 : version.hashCode()); |
| return result; |
| } |
| |
| @Override |
| public boolean equals(Object obj) { |
| if (this == obj) |
| return true; |
| if (obj == null) |
| return false; |
| if (getClass() != obj.getClass()) |
| return false; |
| CookbookVersion other = (CookbookVersion) obj; |
| if (attributes == null) { |
| if (other.attributes != null) |
| return false; |
| } else if (!attributes.equals(other.attributes)) |
| return false; |
| if (cookbookName == null) { |
| if (other.cookbookName != null) |
| return false; |
| } else if (!cookbookName.equals(other.cookbookName)) |
| return false; |
| if (definitions == null) { |
| if (other.definitions != null) |
| return false; |
| } else if (!definitions.equals(other.definitions)) |
| return false; |
| if (files == null) { |
| if (other.files != null) |
| return false; |
| } else if (!files.equals(other.files)) |
| return false; |
| if (libraries == null) { |
| if (other.libraries != null) |
| return false; |
| } else if (!libraries.equals(other.libraries)) |
| return false; |
| if (metadata == null) { |
| if (other.metadata != null) |
| return false; |
| } else if (!metadata.equals(other.metadata)) |
| return false; |
| if (name == null) { |
| if (other.name != null) |
| return false; |
| } else if (!name.equals(other.name)) |
| return false; |
| if (providers == null) { |
| if (other.providers != null) |
| return false; |
| } else if (!providers.equals(other.providers)) |
| return false; |
| if (recipes == null) { |
| if (other.recipes != null) |
| return false; |
| } else if (!recipes.equals(other.recipes)) |
| return false; |
| if (resources == null) { |
| if (other.resources != null) |
| return false; |
| } else if (!resources.equals(other.resources)) |
| return false; |
| if (rootFiles == null) { |
| if (other.rootFiles != null) |
| return false; |
| } else if (!rootFiles.equals(other.rootFiles)) |
| return false; |
| if (templates == null) { |
| if (other.templates != null) |
| return false; |
| } else if (!templates.equals(other.templates)) |
| return false; |
| if (version == null) { |
| if (other.version != null) |
| return false; |
| } else if (!version.equals(other.version)) |
| return false; |
| return true; |
| } |
| |
| @Override |
| public String toString() { |
| return "Cookbook [attributes=" + attributes + ", cookbookName=" + cookbookName + ", definitions=" + definitions |
| + ", files=" + files + ", libraries=" + libraries + ", metadata=" + metadata + ", name=" + name |
| + ", providers=" + providers + ", recipes=" + recipes + ", resources=" + resources + ", rootFiles=" |
| + rootFiles + ", templates=" + templates + ", version=" + version + "]"; |
| } |
| |
| } |