blob: 93a15daebe92586a09f5f88889cab8fb6242aa4c [file] [log] [blame]
/*
* Copyright (c) 2012 S.C. Axemblr Software Solutions S.R.L
*
* Licensed 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 com.axemblr.provisionr.api.software;
import com.axemblr.provisionr.api.util.WithOptions;
import com.google.common.base.Objects;
import static com.google.common.base.Preconditions.checkNotNull;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
import java.util.List;
import java.util.Map;
/**
* Define the software environment for all the machines in the pool
*/
public class Software extends WithOptions {
public static SoftwareBuilder builder() {
return new SoftwareBuilder();
}
private final String imageId;
private final boolean cachedImage;
private final Map<String, String> files;
private final List<String> packages;
private final List<Repository> repositories;
Software(String imageId, boolean cachedImage, Map<String, String> files, List<String> packages,
List<Repository> repositories, Map<String, String> options) {
super(options);
this.imageId = checkNotNull(imageId, "The supplied imageId was null");
this.cachedImage = cachedImage;
this.files = ImmutableMap.copyOf(files);
this.packages = ImmutableList.copyOf(packages);
this.repositories = ImmutableList.copyOf(repositories);
}
public String getImageId() {
return imageId;
}
public boolean isCachedImage() {
return cachedImage;
}
/**
* Map of remote files that need to be available on the local filesystem
*/
public Map<String, String> getFiles() {
return files;
}
/**
* List of packages that should be installed
* <p/>
* This list can also include paths to local files
*/
public List<String> getPackages() {
return packages;
}
/**
* List of custom repositories to add to the system before
* installing any packages
*/
public List<Repository> getRepositories() {
return repositories;
}
public SoftwareBuilder toBuilder() {
return builder().imageId(imageId).files(files)
.packages(packages).repositories(repositories).options(getOptions());
}
@Override
public int hashCode() {
return Objects.hashCode(imageId, cachedImage, files, packages, repositories, getOptions());
}
@Override
public boolean equals(Object obj) {
if (obj == null) {
return false;
}
if (getClass() != obj.getClass()) {
return false;
}
final Software other = (Software) obj;
return Objects.equal(this.imageId, other.imageId)
&& Objects.equal(this.cachedImage, other.cachedImage)
&& Objects.equal(this.files, other.files)
&& Objects.equal(this.packages, other.packages)
&& Objects.equal(this.repositories, other.repositories)
&& Objects.equal(this.getOptions(), other.getOptions());
}
@Override
public String toString() {
return "Software{" +
"imageId='" + imageId + '\'' +
", cachedImage=" + cachedImage +
", files=" + files +
", packages=" + packages +
", repositories=" + repositories +
", options=" + getOptions() +
'}';
}
}