1 /*
2  * libjingle
3  * Copyright 2013 Google Inc.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions are met:
7  *
8  *  1. Redistributions of source code must retain the above copyright notice,
9  *     this list of conditions and the following disclaimer.
10  *  2. Redistributions in binary form must reproduce the above copyright notice,
11  *     this list of conditions and the following disclaimer in the documentation
12  *     and/or other materials provided with the distribution.
13  *  3. The name of the author may not be used to endorse or promote products
14  *     derived from this software without specific prior written permission.
15  *
16  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
17  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
18  * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
19  * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
20  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
21  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
22  * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
23  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
24  * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
25  * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26  */
27 
28 package org.webrtc;
29 
30 import java.util.LinkedList;
31 import java.util.List;
32 
33 /**
34  * Description of media constraints for {@code MediaStream} and
35  * {@code PeerConnection}.
36  */
37 public class MediaConstraints {
38   /** Simple String key/value pair. */
39   public static class KeyValuePair {
40     private final String key;
41     private final String value;
42 
KeyValuePair(String key, String value)43     public KeyValuePair(String key, String value) {
44       this.key = key;
45       this.value = value;
46     }
47 
getKey()48     public String getKey() {
49       return key;
50     }
51 
getValue()52     public String getValue() {
53       return value;
54     }
55 
toString()56     public String toString() {
57       return key + ": " + value;
58     }
59 
60     @Override
equals(Object other)61     public boolean equals(Object other) {
62       if (this == other) {
63         return true;
64       }
65       if (other == null || getClass() != other.getClass()) {
66         return false;
67       }
68       KeyValuePair that = (KeyValuePair)other;
69       return key.equals(that.key) && value.equals(that.value);
70     }
71 
72     @Override
hashCode()73     public int hashCode() {
74       return key.hashCode() + value.hashCode();
75     }
76   }
77 
78   public final List<KeyValuePair> mandatory;
79   public final List<KeyValuePair> optional;
80 
MediaConstraints()81   public MediaConstraints() {
82     mandatory = new LinkedList<KeyValuePair>();
83     optional = new LinkedList<KeyValuePair>();
84   }
85 
stringifyKeyValuePairList(List<KeyValuePair> list)86   private static String stringifyKeyValuePairList(List<KeyValuePair> list) {
87     StringBuilder builder = new StringBuilder("[");
88     for (KeyValuePair pair : list) {
89       if (builder.length() > 1) {
90         builder.append(", ");
91       }
92       builder.append(pair.toString());
93     }
94     return builder.append("]").toString();
95   }
96 
toString()97   public String toString() {
98     return "mandatory: " + stringifyKeyValuePairList(mandatory) +
99         ", optional: " + stringifyKeyValuePairList(optional);
100   }
101 }
102