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.

197 lines
5.0 KiB

  1. package device.cdPlayer;
  2. import device.Device;
  3. import device.cdPlayer.exceptions.*;
  4. import java.lang.reflect.Method;
  5. import java.util.ArrayList;
  6. import java.util.Arrays;
  7. import java.util.List;
  8. public class CDPlayer implements Device {
  9. // 0-Leer; true-1
  10. private int CdDriveContent=0;
  11. private int CdFlap=0;
  12. private int volume = 0;
  13. private String infoText=null;
  14. private List<String> supportedFormats = new ArrayList<String>(Arrays.asList(new String[] {"Audio","MP3","WMA","AAC"}));
  15. private String actualPlayTrack="";
  16. private CD loadedCD=null;
  17. private CDWechseler cdWechseler=null;
  18. private String activeSource="CDDrive";//or CDWechseler
  19. @Override
  20. public void louder() {
  21. if(volume < 100) {
  22. volume += 1;
  23. } else {
  24. volume = 100;
  25. }
  26. }
  27. @Override
  28. public void quieter() {
  29. if(volume > 0) {
  30. volume -= 1;
  31. } else {
  32. volume = 0;
  33. }
  34. }
  35. @Override
  36. public int getVolume() {
  37. return volume;
  38. }
  39. @Override
  40. public void next() {
  41. List<String> playList = Arrays.asList(loadedCD.getPlayList());
  42. int indexOfActualPlayTrack=playList.indexOf(actualPlayTrack);
  43. int indexOfNextPlayTrack=(indexOfActualPlayTrack+1)%loadedCD.getPlayList().length;
  44. this.actualPlayTrack=playList.get(indexOfNextPlayTrack );
  45. }
  46. @Override
  47. public void prev() {
  48. List<String> playList = Arrays.asList(loadedCD.getPlayList());
  49. int actualIndex=playList.indexOf(actualPlayTrack);
  50. if(actualIndex>0){
  51. actualIndex-=1;
  52. }else{
  53. actualIndex=0;
  54. }
  55. this.actualPlayTrack=playList.get(actualIndex);
  56. }
  57. @Override
  58. public String getInfoText() {
  59. if(infoText==null){
  60. throw new ReturnValueNullException();
  61. }
  62. return infoText;
  63. }
  64. @Override
  65. public String[] getOptions() {
  66. Method[] methods=this.getClass().getDeclaredMethods();
  67. String[] outMethods=new String[methods.length];
  68. for (int i = 0; i <methods.length ; i++) {
  69. outMethods[i]=methods[i].getName();
  70. }
  71. return outMethods;
  72. }
  73. @Override
  74. public String chooseItem(int itemNr) {
  75. if(this.loadedCD==null){
  76. throw new ReturnValueNullException();
  77. }
  78. if(itemNr<0){
  79. throw new NegativeInputException();
  80. }
  81. if(!(itemNr>=0 && itemNr<loadedCD.getPlayList().length)){
  82. throw new ItemNumberNotFoundException();
  83. }
  84. return loadedCD.getPlayList()[itemNr];
  85. }
  86. @Override
  87. public String[] getItemList() {
  88. return loadedCD.getPlayList();
  89. }
  90. @Override
  91. public String mute() {
  92. return null;
  93. }
  94. @Override
  95. public String unmute() {
  96. return null;
  97. }
  98. @Override
  99. public String play() {
  100. if(isCdFlapOpen()){
  101. throw new CdFlapIsOpenException();
  102. }
  103. else if(!isCdFlapOpen()&&getCdDriveContent()==0){
  104. throw new NoCDException();
  105. }
  106. else if(!isCdFlapOpen()&&getCdDriveContent()==1&&!checkFormat(loadedCD.getFormat())){
  107. throw new FormatNotSupportedException();
  108. }
  109. else if(!isCdFlapOpen()&&getCdDriveContent()==1&&checkFormat(loadedCD.getFormat())){
  110. System.out.println(loadedCD.getFormat()+" "+this.actualPlayTrack+" is playing.");
  111. return "AllConditionsForPlayMet";
  112. }
  113. return null;
  114. }
  115. public String changePlaySource(){
  116. if(activeSource.equals("CDDrive")) {
  117. this.activeSource = "CDWechseler";
  118. }else this.activeSource="CDDrive";
  119. return activeSource;
  120. }
  121. public void loadCDWechseler(List<CD>cdList){
  122. if(cdWechseler==null||!cdWechseler.isRunning()){
  123. throw new CDWechselerNotRunningException();
  124. }
  125. }
  126. //Getters, Setters und SupportMethods
  127. public void setCD(CD _loadedCD) {
  128. loadedCD=_loadedCD;
  129. this.setCdDriveContent();
  130. this.actualPlayTrack=loadedCD.getPlayList()[0];
  131. }
  132. private void setCdDriveContent() {
  133. CdDriveContent = 1;
  134. }
  135. public void tapOnCdFlap(){
  136. this.CdFlap+=1;
  137. }
  138. private boolean checkFormat(String format){
  139. if(this.supportedFormats.contains(format))
  140. return true;
  141. else return false;
  142. }
  143. private int getCdDriveContent() {
  144. return CdDriveContent;
  145. }
  146. private boolean isCdFlapOpen() {
  147. if(CdFlap==1) {
  148. return true;
  149. }
  150. else
  151. return false;
  152. }
  153. public String getSongByNumber(int songNr){
  154. List<String> playList = Arrays.asList(loadedCD.getPlayList());
  155. return playList.get(songNr);
  156. }
  157. public String getActualPlayTrack() {
  158. return actualPlayTrack;
  159. }
  160. public void setInfoText() {
  161. this.infoText=this.getClass().getSimpleName()+": Item->"+actualPlayTrack+" from Album->"+this.loadedCD.getAlbumName()+" running.";
  162. }
  163. public CD getCD() {
  164. return this.loadedCD;
  165. }
  166. }