| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117 |
- package audio.io;
- import java.awt.Color;
- import java.io.File;
- import java.io.FileInputStream;
- import java.io.FileNotFoundException;
- import java.io.IOException;
- import java.io.InputStream;
- import java.lang.reflect.Field;
- import javax.json.Json;
- import javax.json.JsonArray;
- import javax.json.JsonObject;
- import javax.json.JsonReader;
- import audio.ObjectInstance;
- import audio.Song;
- import audio.SongInstance;
- public class JSONReader {
- public static Song readSong(File f) throws IOException {
- if(!f.exists())
- throw new FileNotFoundException("CSF File does not exist");
-
- // Get CSF File
- InputStream is = new FileInputStream(f);
- // Read CSF Content
- JsonReader rdr = Json.createReader(is);
- JsonObject obj = rdr.readObject();
- rdr.close();
-
- if(!obj.containsKey("meta") || !obj.containsKey("file") || !obj.containsKey("data"))
- throw new IOException("Corrupt CSF File");
- // Create new Song
- Song s = new Song();
- // Read META data
- JsonObject meta = obj.getJsonObject("meta");
- s.setTitle(meta.getString("title"));
- s.setSubtitle(meta.getString("subtitle"));
- s.setAuthor(meta.getString("author"));
- s.setCreator(meta.getString("creator"));
- s.setBPM(meta.getInt("BPM"));
-
- //Read FILE data
- JsonObject file = obj.getJsonObject("file");
-
- File audio = new File(file.getString("audio"));
- if(!audio.exists() || !audio.getName().endsWith(".mp3"))
- throw new FileNotFoundException("Audio file does not exist");
- s.setAudio(audio);
-
- File background = new File(file.getString("background"));
- if(!background.exists() || !(background.getName().endsWith(".jpg") || background.getName().endsWith(".png")))
- throw new FileNotFoundException("Background image does not exist");
- s.setBackground(background);
- File banner = new File(file.getString("banner"));
- if(!banner.exists() || !(banner.getName().endsWith(".jpg") || banner.getName().endsWith(".png")))
- throw new FileNotFoundException("Banner image does not exist");
- s.setBanner(banner);
-
- s.setFile(f);
-
- //Read Data data
- JsonArray data = obj.getJsonArray("data");
- for(int i = 0; i < data.size(); i++)
- {
- s.addSongInstance( readSongInstance(data.getJsonObject(i)) );
- }
-
- return s;
- }
- private static SongInstance readSongInstance(JsonObject obj) throws IOException {
- String difficulty = obj.getString("difficulty");
- SongInstance si = new SongInstance(difficulty);
-
- JsonArray object = obj.getJsonArray("objects");
- for(int i = 0; i < object.size(); i++)
- {
- si.addObjectInstance( readObjectInstance(object.getJsonObject(i)) );
- }
-
- return si;
- }
-
- private static ObjectInstance readObjectInstance(JsonObject obj) throws IOException
- {
- ObjectInstance oi = new ObjectInstance();
-
- oi.setTime(obj.getInt("time"));
- oi.setDirection(obj.getInt("direction"));
-
- Color color;
- try {
- Field field = Color.class.getField(obj.getString("color").toLowerCase());
- color = (Color)field.get(null);
- } catch (Exception e) {
- throw new IOException("Cannot read property color from " + obj);
- }
- oi.setColor(color);
-
- if(obj.containsKey("hold") && obj.getBoolean("hold"))
- {
- oi.setHold(obj.getBoolean("hold"));
- oi.setLength(obj.getInt("length"));
- }
-
- return oi;
- }
- }
|