package com.loadimpact.resource.configuration; import com.loadimpact.resource.LoadZone; import javax.json.JsonArray; import javax.json.JsonObject; import java.io.Serializable; import java.util.ArrayList; import java.util.Collections; import java.util.List; /** * Container for JSON load_schedule.tracks[] * * @author jens */ public class LoadTrack implements Serializable { public String zone; public List<LoadClip> clips = new ArrayList<LoadClip>(); public LoadTrack() { } public LoadTrack(LoadZone loadZone) { this.zone = loadZone.uid; } public LoadTrack(LoadZone loadZone, List<LoadClip> clips) { this.zone = loadZone.uid; this.clips = clips; } public LoadTrack(JsonObject json) { this.zone = json.getString("loadzone", null); JsonArray clipsJson = json.getJsonArray("clips"); if (clipsJson != null) { ArrayList<LoadClip> list = new ArrayList<LoadClip>(clipsJson.size()); for (int k = 0; k < clipsJson.size(); ++k) { list.add(new LoadClip(clipsJson.getJsonObject(k))); } this.clips = Collections.unmodifiableList(list); } } public LoadTrack clip(LoadClip clip) { clips.add(clip); return this; } public LoadTrack clip(int percent, int scenarioId) { return clip(new LoadClip(percent, scenarioId)); } @Override public String toString() { return "LoadTrack{" + "zone='" + zone + '\'' + ", clips=" + clips + '}'; } @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; LoadTrack loadTrack = (LoadTrack) o; if (!clips.equals(loadTrack.clips)) return false; if (!zone.equals(loadTrack.zone)) return false; return true; } @Override public int hashCode() { int result = zone.hashCode(); result = 31 * result + clips.hashCode(); return result; } }