// Path: src/main/java/com/deswaef/twitch/api/streams/domain/StreamCheck.java
// public class StreamCheck {
// 
//     private TwitchStream stream;
// 
//     public boolean isOnline() {
//         return stream != null;
//     }
// 
//     public TwitchStream getStream() {
//         return stream;
//     }
// 
//     public void setStream(TwitchStream stream) {
//         this.stream = stream;
//     }
// }
// 
// Path: src/main/java/com/deswaef/twitch/api/streams/domain/TwitchStream.java
// public class TwitchStream {
// 
//     @SerializedName(value = "_id")
//     private Long id;
// 
//     private String game;
//     private Long viewers;
// 
//     public Long getId() {
//         return id;
//     }
// 
//     public void setId(Long id) {
//         this.id = id;
//     }
// 
//     public String getGame() {
//         return game;
//     }
// 
//     public void setGame(String game) {
//         this.game = game;
//     }
// 
//     public Long getViewers() {
//         return viewers;
//     }
// 
//     public void setViewers(Long viewers) {
//         this.viewers = viewers;
//     }
// 
//     @Override
//     public String toString() {
//         return "Stream{" +
//                 "id=" + id +
//                 ", game='" + game + '\'' +
//                 ", viewers=" + viewers +
//                 '}';
//     }
// }
// 
// Path: src/main/java/com/deswaef/twitch/exception/Assert.java
// public class Assert {
//     public static void notNull(Object input, String errorMessage) {
//         if (input == null) {
//             throw new IllegalArgumentException(errorMessage);
//         }
//     }
// }


import com.deswaef.twitch.api.streams.domain.StreamCheck;
import com.deswaef.twitch.api.streams.domain.TwitchStream;
import com.deswaef.twitch.exception.Assert;
import retrofit.RestAdapter;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Optional;
package com.deswaef.twitch.api.streams;



/**
 * User: Quinten
 * Date: 22-8-2014
 * Time: 20:47
 *
 * @author Quinten De Swaef
 */
public class StreamResource  {

    private StreamService streamService;

    /**
     * returns a list of the current top streams
     *
     * @return List of TwitchStream
     */
    public List<TwitchStream> streams() {
        try {
            return Arrays.asList(
                    streamService.streams()
                            .getStreams());
        } catch (Exception ex) {
            return new ArrayList<>();
        }
    }

    /**
     * Returns an Optional of Streamcheck.
     * If the stream does not exist, the optional is empty.
     * Otherwise, utility methods in the StreamCheck will tell you if the stream is online or not.
     *
     * @param stream String name of the stream
     * @return Optional of StreamCheck
     */
// Path: src/main/java/com/deswaef/twitch/api/streams/domain/StreamCheck.java
// public class StreamCheck {
// 
//     private TwitchStream stream;
// 
//     public boolean isOnline() {
//         return stream != null;
//     }
// 
//     public TwitchStream getStream() {
//         return stream;
//     }
// 
//     public void setStream(TwitchStream stream) {
//         this.stream = stream;
//     }
// }
// 
// Path: src/main/java/com/deswaef/twitch/api/streams/domain/TwitchStream.java
// public class TwitchStream {
// 
//     @SerializedName(value = "_id")
//     private Long id;
// 
//     private String game;
//     private Long viewers;
// 
//     public Long getId() {
//         return id;
//     }
// 
//     public void setId(Long id) {
//         this.id = id;
//     }
// 
//     public String getGame() {
//         return game;
//     }
// 
//     public void setGame(String game) {
//         this.game = game;
//     }
// 
//     public Long getViewers() {
//         return viewers;
//     }
// 
//     public void setViewers(Long viewers) {
//         this.viewers = viewers;
//     }
// 
//     @Override
//     public String toString() {
//         return "Stream{" +
//                 "id=" + id +
//                 ", game='" + game + '\'' +
//                 ", viewers=" + viewers +
//                 '}';
//     }
// }
// 
// Path: src/main/java/com/deswaef/twitch/exception/Assert.java
// public class Assert {
//     public static void notNull(Object input, String errorMessage) {
//         if (input == null) {
//             throw new IllegalArgumentException(errorMessage);
//         }
//     }
// }


// Path: src/main/java/com/deswaef/twitch/api/streams/StreamResource.java
import com.deswaef.twitch.api.streams.domain.StreamCheck;
import com.deswaef.twitch.api.streams.domain.TwitchStream;
import com.deswaef.twitch.exception.Assert;
import retrofit.RestAdapter;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Optional;

package com.deswaef.twitch.api.streams;



/**
 * User: Quinten
 * Date: 22-8-2014
 * Time: 20:47
 *
 * @author Quinten De Swaef
 */
public class StreamResource  {

    private StreamService streamService;

    /**
     * returns a list of the current top streams
     *
     * @return List of TwitchStream
     */
    public List<TwitchStream> streams() {
        try {
            return Arrays.asList(
                    streamService.streams()
                            .getStreams());
        } catch (Exception ex) {
            return new ArrayList<>();
        }
    }

    /**
     * Returns an Optional of Streamcheck.
     * If the stream does not exist, the optional is empty.
     * Otherwise, utility methods in the StreamCheck will tell you if the stream is online or not.
     *
     * @param stream String name of the stream
     * @return Optional of StreamCheck
     */
    public Optional<StreamCheck> stream(String stream) {