package com.zhan_dui.utils.m3u8;
import java.net.URI;
/**
* @author dkuffner
*/
final class ElementImpl implements Element {
private final PlaylistInfo playlistInfo;
private final EncryptionInfo encryptionInfo;
private final double duration;
private final URI uri;
private final boolean discontinuity;
private final String title;
private final long programDate;
public ElementImpl(PlaylistInfo playlistInfo, EncryptionInfo encryptionInfo, double duration, URI uri,
String title, long programDate, boolean discontinuity) {
if (uri == null) {
throw new NullPointerException("uri");
}
if (duration < -1) {
throw new IllegalArgumentException();
}
if (playlistInfo != null && encryptionInfo != null) {
throw new IllegalArgumentException("Element cannot be a encrypted playlist.");
}
this.playlistInfo = playlistInfo;
this.encryptionInfo = encryptionInfo;
this.duration = duration;
this.uri = uri;
this.title = title;
this.discontinuity=discontinuity;
this.programDate = programDate;
}
public String getTitle() {
return title;
}
public int getDuration() {
return (int)Math.round(duration);
}
public boolean isDiscontinuity() {
return discontinuity;
}
public double getExactDuration() {
return duration;
}
public URI getURI() {
return uri;
}
public boolean isEncrypted() {
return encryptionInfo != null;
}
public boolean isPlayList() {
return playlistInfo != null;
}
public boolean isMedia() {
return playlistInfo == null;
}
public EncryptionInfo getEncryptionInfo() {
return encryptionInfo;
}
public PlaylistInfo getPlayListInfo() {
return playlistInfo;
}
public long getProgramDate() {
return programDate;
}
@Override
public String toString() {
return "ElementImpl{" +
"playlistInfo=" + playlistInfo +
", encryptionInfo=" + encryptionInfo +
", discontinuity=" +discontinuity +
", duration=" + duration +
", uri=" + uri +
", title='" + title + '\'' +
'}';
}
static final class PlaylistInfoImpl implements PlaylistInfo {
private final int programId;
private final int bandWidth;
private final String codec;
public PlaylistInfoImpl(int programId, int bandWidth, String codec) {
this.programId = programId;
this.bandWidth = bandWidth;
this.codec = codec;
}
public int getProgramId() {
return programId;
}
public int getBandWitdh() {
return bandWidth;
}
public String getCodecs() {
return codec;
}
@Override
public String toString() {
return "PlaylistInfoImpl{" +
"programId=" + programId +
", bandWidth=" + bandWidth +
", codec='" + codec + '\'' +
'}';
}
}
static final class EncryptionInfoImpl implements EncryptionInfo {
private final URI uri;
private final String method;
public EncryptionInfoImpl(URI uri, String method) {
this.uri = uri;
this.method = method;
}
public URI getURI() {
return uri;
}
public String getMethod() {
return method;
}
@Override
public String toString() {
return "EncryptionInfoImpl{" +
"uri=" + uri +
", method='" + method + '\'' +
'}';
}
}
}