/** * ======================== legal notice ====================== * * File: MedialistParser.java * Created: 13. June 2012, 04:57 * Author: Geronimo * Project: cmpc - a java frontend (client) part of compound media player * uses external players to play the media * * CMP - compound media player * * is a client/server mediaplayer intended to play any media from any workstation * without the need to export or mount shares. cmps is an easy to use backend * with a (ready to use) HTML-interface. Additionally the backend supports * authentication via HTTP-digest authorization. * cmpc is a client with vdr-like osd-menues. * * Copyright (c) 2012 Reinhard Mantey, some rights reserved! * published under Creative Commons by-sa * For details see http://creativecommons.org/licenses/by-sa/3.0/ * * The cmp project's homepage is at http://projects.vdr-developer.org/projects/cmp * * -------------------------------------------------------------- */ package de.schwarzrot.media.util; import java.io.InputStream; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.List; import com.google.gson.stream.JsonReader; import de.schwarzrot.media.domain.Media; import de.schwarzrot.media.domain.MediaType; import de.schwarzrot.media.domain.PlayList; public class MedialistParser { public PlayList parseListChunk(InputStream is) { JsonReader reader = null; PlayList rv = null; try { reader = new JsonReader(new InputStreamReader(is, "UTF-8")); rv = readPlayList(reader); } catch (Throwable t) { t.printStackTrace(); } finally { try { reader.close(); } catch (Throwable t) { } } return rv; } protected Media readMedia(JsonReader reader) { Media rv = new Media(); try { reader.beginObject(); while (reader.hasNext()) { String name = reader.nextName(); if (Media.NAME_PROPERTY.equals(name)) { rv.setName(reader.nextString()); } else if (Media.TYPE_PROPERTY.equals(name)) { rv.setType(reader.nextInt()); } else if (Media.FORMAT_PROPERTY.equals(name)) { rv.setFormat(reader.nextString()); } else if (Media.PATH_PROPERTY.equals(name)) { rv.setPath(reader.nextString()); } else { rv.setProperty(name, reader.nextString()); } } reader.endObject(); } catch (Throwable t) { t.printStackTrace(); } return rv; } protected List readMediaArray(JsonReader reader) { List rv = new ArrayList(); try { reader.beginArray(); while (reader.hasNext()) { rv.add(readMedia(reader)); } reader.endArray(); } catch (Throwable t) { t.printStackTrace(); } return rv; } protected MediaType readMediaType(JsonReader reader) { MediaType rv = new MediaType(); try { reader.beginObject(); while (reader.hasNext()) { String name = reader.nextName(); if (MediaType.NAME_PROPERTY.equals(name)) { rv.setName(reader.nextString()); } else if (MediaType.START_PROPERTY.equals(name)) { rv.setStart(reader.nextLong()); } else { reader.skipValue(); } } reader.endObject(); } catch (Throwable t) { t.printStackTrace(); } return rv; } protected PlayList readPlayList(JsonReader reader) { PlayList rv = new PlayList(); try { reader.beginObject(); while (reader.hasNext()) { String name = reader.nextName(); if (PlayList.TOTAL_PROPERTY.equals(name)) { rv.setTotal(reader.nextLong()); } else if (PlayList.TYPES_PROPERTY.equals(name)) { rv.setTypes(readTypeArray(reader)); } else if (PlayList.RESULTS_PROPERTY.equals(name)) { rv.setResults(readMediaArray(reader)); } else { reader.skipValue(); } } reader.endObject(); } catch (Throwable t) { t.printStackTrace(); rv = null; } return rv; } protected List readTypeArray(JsonReader reader) { List rv = new ArrayList(); try { reader.beginArray(); while (reader.hasNext()) { rv.add(readMediaType(reader)); } reader.endArray(); } catch (Throwable t) { t.printStackTrace(); } return rv; } }