View Javadoc

1   //
2   //  ========================================================================
3   //  Copyright (c) 1995-2013 Mort Bay Consulting Pty. Ltd.
4   //  ------------------------------------------------------------------------
5   //  All rights reserved. This program and the accompanying materials
6   //  are made available under the terms of the Eclipse Public License v1.0
7   //  and Apache License v2.0 which accompanies this distribution.
8   //
9   //      The Eclipse Public License is available at
10  //      http://www.eclipse.org/legal/epl-v10.html
11  //
12  //      The Apache License v2.0 is available at
13  //      http://www.opensource.org/licenses/apache2.0.php
14  //
15  //  You may elect to redistribute this code under either of these licenses.
16  //  ========================================================================
17  //
18  
19  package org.eclipse.jetty.websocket.jsr356;
20  
21  import java.util.ArrayList;
22  import java.util.List;
23  import java.util.Map;
24  
25  import javax.websocket.Extension;
26  
27  import org.eclipse.jetty.websocket.api.extensions.ExtensionConfig;
28  import org.eclipse.jetty.websocket.api.util.QuoteUtil;
29  
30  public class JsrExtension implements Extension
31  {
32      private static class JsrParameter implements Extension.Parameter
33      {
34          private String name;
35          private String value;
36  
37          private JsrParameter(String key, String value)
38          {
39              this.name = key;
40              this.value = value;
41          }
42  
43          @Override
44          public String getName()
45          {
46              return this.name;
47          }
48  
49          @Override
50          public String getValue()
51          {
52              return this.value;
53          }
54      }
55  
56      private final String name;
57      private List<Parameter> parameters = new ArrayList<>();
58  
59      /**
60       * A configured extension
61       */
62      public JsrExtension(ExtensionConfig cfg)
63      {
64          this.name = cfg.getName();
65          if (cfg.getParameters() != null)
66          {
67              for (Map.Entry<String, String> entry : cfg.getParameters().entrySet())
68              {
69                  parameters.add(new JsrParameter(entry.getKey(),entry.getValue()));
70              }
71          }
72      }
73  
74      /**
75       * A potential (unconfigured) extension
76       */
77      public JsrExtension(String name)
78      {
79          this.name = name;
80      }
81  
82      @Override
83      public String getName()
84      {
85          return name;
86      }
87  
88      @Override
89      public List<Parameter> getParameters()
90      {
91          return parameters;
92      }
93  
94      @Override
95      public String toString()
96      {
97          StringBuilder str = new StringBuilder();
98          str.append(name);
99          for (Parameter param : parameters)
100         {
101             str.append(';');
102             str.append(param.getName());
103             String value = param.getValue();
104             if (value != null)
105             {
106                 str.append('=');
107                 QuoteUtil.quoteIfNeeded(str,value,";=");
108             }
109         }
110         return str.toString();
111     }
112 }