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.server.linking.impl;
 
 import java.net.URI;
 import java.util.List;
 import java.util.Map;

Describes an entity in terms of its fields, bean properties and com.sun.jersey.server.linking.Ref annotated fields.

Author(s):
mh124079
 
 public class EntityDescriptor {
 
     // Maintains an internal static cache to optimize processing
 
     private static Map<Class<?>, EntityDescriptordescriptors
         = new HashMap<Class<?>, EntityDescriptor>();
 
     public static synchronized EntityDescriptor getInstance(Class<?> entityClass) {
         if (.containsKey(entityClass)) {
             return .get(entityClass);
         } else {
             EntityDescriptor descriptor = new EntityDescriptor(entityClass);
             .put(entityClassdescriptor);
             return descriptor;
         }
     }
 
     // instance
 
     private Map<StringFieldDescriptornonLinkFields;
     private Map<StringRefFieldDescriptorlinkFields;
     private List<LinkDescriptorlinkHeaders;

    
Construct an new descriptor by inspecting the supplied class.

Parameters:
entityClass
 
     private EntityDescriptor(Class<?> entityClass) {
         // create a list of link headers
         this. = new ArrayList<LinkDescriptor>();
         findLinkHeaders(entityClass);
         this. = Collections.unmodifiableList();
 
         // create a list of field names
         this. = new HashMap<StringFieldDescriptor>();
         this. = new HashMap<StringRefFieldDescriptor>();
         findFields(entityClass);
         this. = Collections.unmodifiableMap(this.);
         this. = Collections.unmodifiableMap(this.);
    }
        return .values();
    }
        return .values();
    }
    public List<LinkDescriptorgetLinkHeaders() {
        return ;
    }

    
Find and cache the fields of the supplied class and its superclasses and interfaces.

Parameters:
entityClass the class
    private void findFields(Class<?> entityClass) {
        for (Field fentityClass.getDeclaredFields()) {
            Ref a = f.getAnnotation(Ref.class);
            if (a != null) {
                Class<?> t = f.getType();
                if (t.equals(String.class) || t.equals(URI.class)) {
                    if (!.containsKey(f.getName())) {
                        .put(f.getName(), new RefFieldDescriptor(fat));
                    }
                } else {
                    // TODO unsupported type
                }
            } else {
                // see issue http://java.net/jira/browse/JERSEY-625
                if(((f.getModifiers() & .) > 0) ||
                        f.getName().startsWith("java.") ||
                        f.getName().startsWith("javax.")
                        )
                    continue;
                .put(f.getName(), new FieldDescriptor(f));
            }
        }
        // look for nonLinkFields in superclasses
        Class<?> sc = entityClass.getSuperclass();
        if (sc != null && sc != Object.class) {
            findFields(sc);
        }
        // look for nonLinkFields in interfaces
        for (Class<?> ic : entityClass.getInterfaces()) {
            findFields(ic);
        }
    }
    private void findLinkHeaders(Class<?> entityClass) {
        Link linkHeaderAnnotation = entityClass.getAnnotation(Link.class);
        if (linkHeaderAnnotation != null) {
            .add(new LinkDescriptor(linkHeaderAnnotation));
        }
        Links linkHeadersAnnotation = entityClass.getAnnotation(Links.class);
        if (linkHeadersAnnotation != null) {
            for (Link linkHeaderlinkHeadersAnnotation.value()) {
                .add(new LinkDescriptor(linkHeader));
            }
        }
        // look in superclasses
        Class<?> sc = entityClass.getSuperclass();
        if (sc != null && sc != Object.class) {
            findLinkHeaders(sc);
        }
        // look in interfaces
        for (Class<?> ic : entityClass.getInterfaces()) {
            findLinkHeaders(ic);
        }
    }
New to GrepCode? Check out our FAQ X