/* * Copyright (C) 2011 Teleal GmbH, Switzerland * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation, either version 3 of * the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package org.teleal.cling.support.model; import org.teleal.cling.model.ModelUtil; import org.teleal.cling.model.action.ActionArgumentValue; import org.teleal.cling.model.types.UnsignedIntegerFourBytes; import java.util.Map; /** * @author Christian Bauer */ public class PositionInfo { private UnsignedIntegerFourBytes track = new UnsignedIntegerFourBytes(0); private String trackDuration = "00:00:00"; private String trackMetaData = "NOT_IMPLEMENTED"; private String trackURI = ""; private String relTime = "00:00:00"; private String absTime = "00:00:00"; // TODO: MORE VALUES IN DOMAIN! private int relCount = Integer.MAX_VALUE; // Indicates that we don't support this private int absCount = Integer.MAX_VALUE; public PositionInfo() { } public PositionInfo(Map<String, ActionArgumentValue> args) { this( ((UnsignedIntegerFourBytes) args.get("Track").getValue()).getValue(), (String) args.get("TrackDuration").getValue(), (String) args.get("TrackMetaData").getValue(), (String) args.get("TrackURI").getValue(), (String) args.get("RelTime").getValue(), (String) args.get("AbsTime").getValue(), (Integer) args.get("RelCount").getValue(), (Integer) args.get("AbsCount").getValue() ); } public PositionInfo(PositionInfo copy, String relTime, String absTime) { this.track = copy.track; this.trackDuration = copy.trackDuration; this.trackMetaData = copy.trackMetaData; this.trackURI = copy.trackURI; this.relTime = relTime; this.absTime = absTime; this.relCount = copy.relCount; this.absCount = copy.absCount; } public PositionInfo(PositionInfo copy, long relTimeSeconds, long absTimeSeconds) { this.track = copy.track; this.trackDuration = copy.trackDuration; this.trackMetaData = copy.trackMetaData; this.trackURI = copy.trackURI; this.relTime = ModelUtil.toTimeString(relTimeSeconds); this.absTime = ModelUtil.toTimeString(absTimeSeconds); this.relCount = copy.relCount; this.absCount = copy.absCount; } public PositionInfo(long track, String trackDuration, String trackURI, String relTime, String absTime) { this.track = new UnsignedIntegerFourBytes(track); this.trackDuration = trackDuration; this.trackURI = trackURI; this.relTime = relTime; this.absTime = absTime; } public PositionInfo(long track, String trackDuration, String trackMetaData, String trackURI, String relTime, String absTime, int relCount, int absCount) { this.track = new UnsignedIntegerFourBytes(track); this.trackDuration = trackDuration; this.trackMetaData = trackMetaData; this.trackURI = trackURI; this.relTime = relTime; this.absTime = absTime; this.relCount = relCount; this.absCount = absCount; } public PositionInfo(long track, String trackMetaData, String trackURI) { this.track = new UnsignedIntegerFourBytes(track); this.trackMetaData = trackMetaData; this.trackURI = trackURI; } public UnsignedIntegerFourBytes getTrack() { return track; } public String getTrackDuration() { return trackDuration; } public String getTrackMetaData() { return trackMetaData; } public String getTrackURI() { return trackURI; } public String getRelTime() { return relTime; } public String getAbsTime() { return absTime; } public int getRelCount() { return relCount; } public int getAbsCount() { return absCount; } public long getTrackDurationSeconds() { return getTrackDuration() == null ? 0 : ModelUtil.fromTimeString(getTrackDuration()); } public long getTrackElapsedSeconds() { return getRelTime() == null || getRelTime().equals("NOT_IMPLEMENTED") ? 0 : ModelUtil.fromTimeString(getRelTime()); } public long getTrackRemainingSeconds() { return getTrackDurationSeconds() - getTrackElapsedSeconds(); } public int getElapsedPercent() { long elapsed = getTrackElapsedSeconds(); long total = getTrackDurationSeconds(); if (elapsed == 0 || total == 0) return 0; return new Double(elapsed/((double)total/100)).intValue(); } @Override public String toString() { return "(PositionInfo) Track: " + getTrack() + " RelTime: " + getRelTime() + " Duration: " + getTrackDuration() + " Percent: " + getElapsedPercent(); } }