Project for Continous Integration
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

255 lines
6.6 KiB

package device.cdPlayer;
import device.Device;
import device.cdPlayer.exceptions.*;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class CDPlayer implements Device {
// 0-Leer; true-1
private int CdDriveContent=0;
private int CdFlap=0;
private int volume = 0;
private String infoText=null;
private List<String> supportedFormats = new ArrayList<String>(Arrays.asList(new String[] {"Audio","MP3","WMA","AAC"}));
private String actualPlayTrack="";
private CD loadedCD=null;
private CDWechseler cdWechseler=null;
private String activeSource="CDDrive";//or CDWechseler
private List<String>favoriteSongs=new ArrayList<>();
private boolean muted=false;
private int oldVolume=0;
private String status="";
@Override
public void louder() {
if(volume < 100) {
volume += 1;
} else {
volume = 100;
}
}
@Override
public void quieter() {
if(volume > 0) {
volume -= 1;
} else {
volume = 0;
}
}
@Override
public int getVolume() {
return volume;
}
@Override
public void next() {
List<String> playList = Arrays.asList(loadedCD.getPlayList());
int indexOfActualPlayTrack=playList.indexOf(actualPlayTrack);
int indexOfNextPlayTrack=(indexOfActualPlayTrack+1)%loadedCD.getPlayList().length;
this.actualPlayTrack=playList.get(indexOfNextPlayTrack );
}
@Override
public void prev() {
List<String> playList = Arrays.asList(loadedCD.getPlayList());
int actualIndex=playList.indexOf(actualPlayTrack);
if(actualIndex>0){
actualIndex-=1;
}else{
actualIndex=0;
}
this.actualPlayTrack=playList.get(actualIndex);
}
@Override
public String getInfoText() {
if(infoText==null){
throw new ReturnValueNullException();
}
return infoText;
}
@Override
public String[] getOptions() {
Method[] methods=this.getClass().getDeclaredMethods();
String[] outMethods=new String[methods.length];
for (int i = 0; i <methods.length ; i++) {
outMethods[i]=methods[i].getName();
}
return outMethods;
}
@Override
public String chooseItem(int itemNr) {
if(this.loadedCD==null){
throw new ReturnValueNullException();
}
if(itemNr<0){
throw new NegativeInputException();
}
if(!(itemNr>=0 && itemNr<loadedCD.getPlayList().length)){
throw new ItemNumberNotFoundException();
}
return loadedCD.getPlayList()[itemNr];
}
@Override
public String[] getItemList() {
return loadedCD.getPlayList();
}
@Override
public String mute() {
muted=true;
oldVolume=volume;
volume=0;
return ("Volume muted.");
}
@Override
public String unmute() {
muted=false;
volume=oldVolume;
oldVolume=0;
return ("Volume unmute.");
}
@Override
public String play() {
if(isCdFlapOpen()){
throw new CdFlapIsOpenException();
}
else if(!isCdFlapOpen()&&getCdDriveContent()==0){
throw new NoCDException();
}
else if(!isCdFlapOpen()&&getCdDriveContent()==1&&!checkFormat(loadedCD.getFormat())){
throw new FormatNotSupportedException();
}
else if(!isCdFlapOpen()&&getCdDriveContent()==1&&checkFormat(loadedCD.getFormat())){
status="AllConditionsForPlayMet";
return (loadedCD.getFormat()+":"+this.actualPlayTrack+" is playing.");
}
return null;
}
public String changePlaySource(){
if(activeSource.equals("CDDrive")) {
this.activeSource = "CDWechseler";
this.cdWechseler=new CDWechseler();
this.cdWechseler.activate();
}else this.activeSource="CDDrive";
return activeSource;
}
public void loadCDWechseler(CD cd,int index){
if(cdWechseler==null||!cdWechseler.isRunning()){
throw new CDWechselerNotRunningException();
}
if(!(this.supportedFormats.contains(cd.getFormat()))){
throw new FormatNotSupportedException();
}
if(index>10){
throw new MaxCapacityExceededException();
}
cdWechseler.loadOneCD(cd,index);
this.loadedCD=cdWechseler.getCDList().get(0);
}
public void changeToNextCD(){
if(activeSource.equals("CDDrive")){
throw new ChangeCDOnlyOnCDWechselerException();
}
List<CD> CDList = cdWechseler.getCDList();
int indexOfLoadedCD=CDList.indexOf(loadedCD);
int nextIndex=(indexOfLoadedCD+1)%CDList.size();
this.loadedCD=CDList.get(nextIndex);
}
public void addToFavoriteSongs(String song){
if(activeSource.equals("CDDrive")){
throw new CDWechselerNotRunningException();
}
if(!(favoriteSongs.contains(song))) {
favoriteSongs.add(song);
}
}
//Getters, Setters und SupportMethods
public void setCD(CD _loadedCD) {
loadedCD=_loadedCD;
this.setCdDriveContent();
this.actualPlayTrack=loadedCD.getPlayList()[0];
}
private void setCdDriveContent() {
CdDriveContent = 1;
}
public void tapOnCdFlap(){
this.CdFlap+=1;
}
private boolean checkFormat(String format){
if(this.supportedFormats.contains(format))
return true;
else return false;
}
private int getCdDriveContent() {
return CdDriveContent;
}
private boolean isCdFlapOpen() {
if(CdFlap==1) {
return true;
}
else
return false;
}
public String getSongByNumber(int songNr){
List<String> playList = Arrays.asList(loadedCD.getPlayList());
return playList.get(songNr);
}
public String getActualPlayTrack() {
return actualPlayTrack;
}
public void setInfoText() {
this.infoText=this.getClass().getSimpleName()+": Item->"+actualPlayTrack+" from Album->"+this.loadedCD.getAlbumName()+" running.";
}
public CD getCD() {
return this.loadedCD;
}
public CDWechseler getCdWechseler() {
return cdWechseler;
}
public List<String> getFavoriteSongs() {
return favoriteSongs;
}
public boolean isMuted() {
return muted;
}
public int getOldVolume() {
return oldVolume;
}
public String getStatus() {
return status;
}
}