aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/musichub/business/AudioElement.java
blob: 0c1e9e4c36885b41f273d0d970fabc9a0718bf1e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
package musichub.business;

import org.w3c.dom.Document;
import org.w3c.dom.Element;

import java.io.File;
import java.io.IOException;
import java.util.Scanner;
import java.util.UUID;

import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.Clip;
import javax.sound.sampled.LineUnavailableException;
import javax.sound.sampled.UnsupportedAudioFileException;

public abstract class AudioElement {
    protected String title;
    protected String artist;
    protected int lengthInSeconds;
    protected UUID uuid;
    protected String content;

    public AudioElement(String title, String artist, int lengthInSeconds, String id, String content) {
        this.title = title;
        this.artist = artist;
        this.lengthInSeconds = lengthInSeconds;
        this.uuid = UUID.fromString(id);
        this.content = content;
    }

    public AudioElement(String title, String artist, int lengthInSeconds, String content) {
        this.title = title;
        this.artist = artist;
        this.lengthInSeconds = lengthInSeconds;
        this.content = content;
        this.uuid = UUID.randomUUID();
    }

    public AudioElement(Element xmlElement) {
        {
            title = xmlElement.getElementsByTagName("title").item(0).getTextContent();
            artist = xmlElement.getElementsByTagName("artist").item(0).getTextContent();
            lengthInSeconds = Integer.parseInt(xmlElement.getElementsByTagName("length").item(0).getTextContent());
            content = xmlElement.getElementsByTagName("content").item(0).getTextContent();
            String uuid = null;
            try {
                uuid = xmlElement.getElementsByTagName("UUID").item(0).getTextContent();
            } catch (Exception ex) {
                System.out.println("Empty element UUID, will create a new one");
            }
            if ((uuid == null) || (uuid.isEmpty()))
                this.uuid = UUID.randomUUID();
            else this.uuid = UUID.fromString(uuid);
        }
    }

    public UUID getUUID() {
        return this.uuid;
    }

    public String getArtist() {
        return this.artist;
    }

    public String getTitle() {
        return this.title;
    }

    public String toString() {
        return "Title = " + this.title + ", Artist = " + this.artist + ", Length = " + this.lengthInSeconds + ", Content = " + this.content;
    }

    public void createXMLElement(Document document, Element parentElement) {
        Element nameElement = document.createElement("title");
        nameElement.appendChild(document.createTextNode(title));
        parentElement.appendChild(nameElement);

        Element artistElement = document.createElement("artist");
        artistElement.appendChild(document.createTextNode(artist));
        parentElement.appendChild(artistElement);

        Element lengthElement = document.createElement("length");
        lengthElement.appendChild(document.createTextNode(Integer.valueOf(lengthInSeconds).toString()));
        parentElement.appendChild(lengthElement);

        Element UUIDElement = document.createElement("UUID");
        UUIDElement.appendChild(document.createTextNode(uuid.toString()));
        parentElement.appendChild(UUIDElement);

        Element contentElement = document.createElement("content");
        contentElement.appendChild(document.createTextNode(content));
        parentElement.appendChild(contentElement);

    }
    
    public void manageAudioElement() throws UnsupportedAudioFileException, IOException, LineUnavailableException {
    	
    	Scanner scanner = new Scanner(System.in); 
    	
    	File file = new File(this.content);
    	AudioInputStream audioStream = AudioSystem.getAudioInputStream(file);
    	Clip clip = AudioSystem.getClip();
    	clip.open(audioStream);
    	
    	String action = "";
    			
    	while(!action.equals("Q")) {
    		System.out.println("P = Play \b S = Stop \b R = Reset \b Q = Quit");
    		System.out.println("Enter your choice");
    		action = scanner.next();
        	action = action.toUpperCase();
        	
        	switch(action) {
        		case "S" : clip.stop();
        		break;
        		case "P" : clip.start();
        		break;
        		case "R" : clip.setMicrosecondPosition(0);
        		break;
        		case "Q" : clip.stop();
        		break;
        		default : System.out.println("try again");
        	}
        	System.out.println("You stoped the Audio element");
    	}
    	
    	clip.close();
    
    }

}