Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
   *
   * Copyright (c) 2010-2011 Oracle and/or its affiliates. All rights reserved.
   *
   * The contents of this file are subject to the terms of either the GNU
   * General Public License Version 2 only ("GPL") or the Common Development
   * and Distribution License("CDDL") (collectively, the "License").  You
   * may not use this file except in compliance with the License.  You can
  * obtain a copy of the License at
  * http://glassfish.java.net/public/CDDL+GPL_1_1.html
  * or packager/legal/LICENSE.txt.  See the License for the specific
  * language governing permissions and limitations under the License.
  *
  * When distributing the software, include this License Header Notice in each
  * file and include the License file at packager/legal/LICENSE.txt.
  *
  * GPL Classpath Exception:
  * Oracle designates this particular file as subject to the "Classpath"
  * exception as provided by Oracle in the GPL Version 2 section of the License
  * file that accompanied this code.
  *
  * Modifications:
  * If applicable, add the following below the License Header, with the fields
  * enclosed by brackets [] replaced by your own identifying information:
  * "Portions Copyright [year] [name of copyright owner]"
  *
  * Contributor(s):
  * If you wish your version of this file to be governed by only the CDDL or
  * only the GPL Version 2, indicate your decision by adding "[Contributor]
  * elects to include this software in this distribution under the [CDDL or GPL
  * Version 2] license."  If you don't indicate a single choice of license, a
  * recipient has the option to distribute your version of this file under
  * either the CDDL, the GPL Version 2 or to extend the choice of license to
  * its licensees as provided above.  However, if you add GPL Version 2 code
  * and therefore, elected the GPL Version 2 license, then the option applies
  * only if the new code is made subject to such option by the copyright
  * holder.
  */
 package com.sun.jersey.core.header;
 
 import java.net.URI;
 import java.util.List;
 import java.util.Set;
A Link header.

Author(s):
Santiago.PericasGeertsen@sun.com
Paul.Sandoz@sun.com
 
 public class LinkHeader {
 
     private URI uri;
 
     private Set<Stringrels;
 
     private MediaType type;
     
     private MultivaluedMap<StringStringparameters;
 
     public LinkHeader(String headerthrows ParseExceptionIllegalArgumentException {
         this(HttpHeaderReader.newInstance(header));
     }
 
     public LinkHeader(HttpHeaderReader readerthrows ParseExceptionIllegalArgumentException {
          = URI.create(reader.nextSeparatedString('<''>'));
 
         if (reader.hasNext())
             parseParameters(reader);
     }
 
     protected LinkHeader(LinkHeaderBuilder builder) {
         this. = builder.uri;
 
         if (builder.rels != null) {
             if (builder.rels.size() == 1) {
                 this. = builder.rels;
             } else {
                 this. = Collections.unmodifiableSet(new HashSet<String>(builder.rels));
             }
         }
 
         this. = builder.type;
         
         if (builder.parameters != null) {
             this. = new MultivaluedMapImpl(builder.parameters);
         }
    }
    public static LinkHeader valueOf(String headerthrows IllegalArgumentException {
        try {
            return new LinkHeader(HttpHeaderReader.newInstance(header));
        } catch (ParseException ex) {
            throw new IllegalArgumentException(ex);
        }
    }
    @Override
    public String toString() {
        StringBuilder sb = new StringBuilder();
        sb.append('<').append(.toASCIIString()).append('>');
        if ( != null) {
            sb.append(';').append("rel=");
            if (.size() == 1) {
                sb.append(.iterator().next());
            } else {
                sb.append('\"');
                boolean first = true;
                for (String rel : ) {
                    if (!first)
                        sb.append(' ');
                    sb.append(rel);
                    first = false;
                }
                sb.append('\"');
            }
        }
        if ( != null) {
            sb.append(';').append("type=").
                    append(.getType()).append('/').append(.getSubtype());
        }
        if ( != null) {
            for (Entry<StringList<String>> e : .entrySet()) {
                String key = e.getKey();
                List<Stringvalues = e.getValue();
                if (key.equals("anchor") || key.equals("title")) {
                    sb.append(";").append(key).append("=");
                    WriterUtil.appendQuoted(sbvalues.get(0));
                } else if (key.equals("hreflang")) {
                    for (String value : e.getValue()) {
                        sb.append(";").append(e.getKey()).append("=").
                                append(value);
                    }
                } else {
                    for (String value : e.getValue()) {
                        sb.append(";").append(e.getKey()).append("=");                    
                        WriterUtil.appendQuoted(sbvalue);
                    }                    
                }
            }
        }
        
        return sb.toString();
    }
    public MultivaluedMap<StringStringgetParams() {
        checkNull();
        return ;
    }
    public URI getUri() {
        return ;
    }
    public Set<StringgetRel() {
        if ( == null) {
             = Collections.emptySet();
        }
        return ;
    }
    public MediaType getType() {
        return ;
    }
    
    public String getOp() {
        if ( != null) {
            return .getFirst("op");
        } else {
            return null;
        }
    }
    private void parseParameters(HttpHeaderReader readerthrows ParseException {
        while (reader.hasNext()) {
            reader.nextSeparator(';');
            while(reader.hasNextSeparator(';'true))
                reader.next();
            // Ignore a ';' with no parameters
            if (!reader.hasNext())
                break;
            // Get the parameter name
            String name = reader.nextToken().toLowerCase();
            reader.nextSeparator('=');
            if (name.equals("rel")) {
                String value = reader.nextTokenOrQuotedString();
                if (reader.getEvent() == .) {
                     = Collections.singleton(value);
                } else {
                    String[] values = value.split(" ");
                     = Collections.unmodifiableSet(new HashSet<String>(Arrays.asList(values)));
                }
            } else if (name.equals("hreflang")) {
                add(namereader.nextTokenOrQuotedString());
            } else if (name.equals("media")) {
                if (!containsKey("media")) {
                    add(namereader.nextTokenOrQuotedString());
                }
            } else if (name.equals("title")) {
                if (!containsKey("title")) {
                    add(namereader.nextQuotedString());
                }
            } else if (name.equals("title*")) {
                add(namereader.nextQuotedString());
            } else if (name.equals("type")) {
                String typeName = reader.nextToken();
                reader.nextSeparator('/');
                String subTypeName = reader.nextToken();
                 = new MediaType(typeNamesubTypeName);
            } else {
                add(namereader.nextTokenOrQuotedString());
            }
            // Get the parameter value
        }
    }
    private void checkNull() {
        if ( == null)
             = new MultivaluedMapImpl();
    }
    private boolean containsKey(String key) {
        checkNull();
        return .containsKey(key);
    }
    private void add(String keyString value) {
        checkNull();
        .add(keyvalue);
    }
    public static LinkHeaderBuilder uri(URI uri) {
        return new LinkHeaderBuilder(uri);
    }

    
A Link header builder.
    public static class LinkHeaderBuilder<T extends LinkHeaderBuilder, V extends LinkHeader> {
        protected URI uri;
        protected Set<Stringrels;
        protected MediaType type;
        
        protected MultivaluedMap<StringStringparameters;
        LinkHeaderBuilder(URI uri) {
            this. = uri;
        }
        public T rel(String rel) {
            if (rel == null)
                throw new IllegalArgumentException("rel parameter cannot be null");
            rel = rel.trim();
            if (rel.length() == 0)
                throw new IllegalArgumentException("rel parameter cannot an empty string or just white space");
            if ( == null) {
                 = Collections.singleton(rel);
            } else if (.size() == 1 && !.contains(rel)) {
                 = new HashSet<String>();
                .add(rel);
            } else {
                .add(rel);
            }
            
            return (T)this;
        }
        public T type(MediaType type) {
            this. = type;
            return (T)this;
        }
        
        public T op(String op) {
            parameter("op"op);
            return (T)this;
        }
        public T parameter(String keyString value) {
            if (key.equals("rel")) {
                return rel(value);
            } else if (key.equals("type")) {
                return type(MediaType.valueOf(value));
            }
            
            if ( == null)
                 = new MultivaluedMapImpl();
            .add(keyvalue);
            return (T)this;
        }
        public V build() {
            LinkHeader lh = new LinkHeader(this);
            return (V)lh;
        }
    }
New to GrepCode? Check out our FAQ X