blob: df9bd822ec016a766169ed9958b3f76f8caefee0 [file] [log] [blame]
/*
* 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 + "]";
}
}