/** * 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.ambari.server.state; import java.util.ArrayList; import java.util.List; import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlElementWrapper; import javax.xml.bind.annotation.XmlElements; import com.google.gson.annotations.SerializedName; /** * Represents service os-specific details (like repositories and packages). * Represents <code>osSpecific</code> */ @XmlAccessorType(XmlAccessType.FIELD) public class ServiceOsSpecific { private String osFamily; private Repo repo; public ServiceOsSpecific() { } public ServiceOsSpecific(String osFamily) { this.osFamily = osFamily; } @XmlElementWrapper(name="packages") @XmlElements(@XmlElement(name="package")) private List<Package> packages = new ArrayList<>(); public String getOsFamily() { return osFamily; } public Repo getRepo() { return repo; } public List<Package> getPackages() { return packages; } public void addPackages(List<Package> packages) { this.packages.addAll(packages); } @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; ServiceOsSpecific that = (ServiceOsSpecific) o; if (osFamily != null ? !osFamily.equals(that.osFamily) : that.osFamily != null) return false; if (packages != null ? !packages.equals(that.packages) : that.packages != null) return false; if (repo != null ? !repo.equals(that.repo) : that.repo != null) return false; return true; } @Override public int hashCode() { int result = osFamily != null ? osFamily.hashCode() : 0; result = 31 * result + (repo != null ? repo.hashCode() : 0); result = 31 * result + (packages != null ? packages.hashCode() : 0); return result; } /** * The <code>repo</code> tag. It has different set of fields compared to * <link>org.apache.ambari.server.state.RepositoryInfo</link>, * that's why we need another class */ @XmlAccessorType(XmlAccessType.FIELD) public static class Repo { @SerializedName("baseUrl") private String baseurl; @SerializedName("mirrorsList") private String mirrorslist; @SerializedName("repoId") private String repoid; @SerializedName("repoName") private String reponame; private Repo() { } /** * @return the base url */ public String getBaseUrl() { return (null == baseurl || baseurl.isEmpty()) ? null : baseurl; } /** * @return the mirrorlist field */ public String getMirrorsList() { return (null == mirrorslist || mirrorslist.isEmpty()) ? null : mirrorslist; } /** * @return the repo id */ public String getRepoId() { return repoid; } /** * @return the repo name */ public String getRepoName() { return reponame; } @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; Repo repo = (Repo) o; if (baseurl != null ? !baseurl.equals(repo.baseurl) : repo.baseurl != null) return false; if (mirrorslist != null ? !mirrorslist.equals(repo.mirrorslist) : repo.mirrorslist != null) return false; if (repoid != null ? !repoid.equals(repo.repoid) : repo.repoid != null) return false; if (reponame != null ? !reponame.equals(repo.reponame) : repo.reponame != null) return false; return true; } @Override public int hashCode() { int result = baseurl != null ? baseurl.hashCode() : 0; result = 31 * result + (mirrorslist != null ? mirrorslist.hashCode() : 0); result = 31 * result + (repoid != null ? repoid.hashCode() : 0); result = 31 * result + (reponame != null ? reponame.hashCode() : 0); return result; } } /** * The <code>package</code> tag. */ @XmlAccessorType(XmlAccessType.FIELD) public static class Package { private String name; private String condition = ""; /** * If true, package will not be attempted to be upgraded during RU. * Typically, packages that are located outside of HDP* repositories, * should be marked as true */ private Boolean skipUpgrade = Boolean.FALSE; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getCondition() { return condition; } public void setCondition(String condition) { this.condition = condition; } public Boolean getSkipUpgrade() { return skipUpgrade; } public void setSkipUpgrade(Boolean skipUpgrade) { this.skipUpgrade = skipUpgrade; } public Package() { } @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; Package aPackage = (Package) o; if (!name.equals(aPackage.name)) return false; if (!skipUpgrade.equals(aPackage.skipUpgrade)) return false; if (!condition.equals(aPackage.condition)) return false; return true; } @Override public int hashCode() { int result = name.hashCode(); result = 31 * result + skipUpgrade.hashCode(); result = 31 * result + condition.hashCode(); return result; } } }