/*
* Copyright © 2015 Cask Data, Inc.
*
* 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 co.cask.cdap.api.artifact;
import co.cask.cdap.api.annotation.Beta;
import co.cask.cdap.api.plugin.PluginClass;
import java.util.Collections;
import java.util.HashSet;
import java.util.Objects;
import java.util.Set;
/**
* Classes contained in an artifact, such as plugin classes and application classes.
*/
@Beta
public final class ArtifactClasses {
private final Set<ApplicationClass> apps;
private final Set<PluginClass> plugins;
private ArtifactClasses(Set<ApplicationClass> apps, Set<PluginClass> plugins) {
this.apps = apps;
this.plugins = plugins;
}
public Set<ApplicationClass> getApps() {
return apps;
}
public Set<PluginClass> getPlugins() {
return plugins;
}
@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (o == null || getClass() != o.getClass()) {
return false;
}
ArtifactClasses that = (ArtifactClasses) o;
return Objects.equals(apps, that.apps) && Objects.equals(plugins, that.plugins);
}
@Override
public int hashCode() {
return Objects.hash(apps, plugins);
}
@Override
public String toString() {
return "ArtifactClasses{" +
"apps=" + apps +
", plugins=" + plugins +
'}';
}
public static Builder builder() {
return new Builder();
}
/**
* Builder to more easily add application and plugin classes, and in the future, program and dataset classes.
*/
public static class Builder {
private final Set<ApplicationClass> apps = new HashSet<>();
private final Set<PluginClass> plugins = new HashSet<>();
public Builder addApps(ApplicationClass... apps) {
Collections.addAll(this.apps, apps);
return this;
}
public Builder addApps(Iterable<ApplicationClass> apps) {
for (ApplicationClass app : apps) {
this.apps.add(app);
}
return this;
}
public Builder addApp(ApplicationClass app) {
apps.add(app);
return this;
}
public Builder addPlugins(PluginClass... plugins) {
Collections.addAll(this.plugins, plugins);
return this;
}
public Builder addPlugins(Iterable<PluginClass> plugins) {
for (PluginClass plugin : plugins) {
this.plugins.add(plugin);
}
return this;
}
public Builder addPlugin(PluginClass plugin) {
plugins.add(plugin);
return this;
}
public ArtifactClasses build() {
return new ArtifactClasses(Collections.unmodifiableSet(apps), Collections.unmodifiableSet(plugins));
}
}
}