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-2013 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.Set;
 
 import  javax.ws.rs.core.UriInfo;
 
 import  com.sun.jersey.impl.ImplMessages;
Utility class that can inject links into com.sun.jersey.server.linking.Link annotated fields in an entity.

Author(s):
mh124079
 
 public class RefProcessor<T> {
 
     private static final Logger log = Logger.getLogger(RefProcessor.class.getName());
 
     public RefProcessor(Class<T> c) {
          = EntityDescriptor.getInstance(c);
     }

    
Inject any com.sun.jersey.server.linking.Link annotated fields in the supplied entity and recursively process its fields.

Parameters:
entity the entity object returned by the resource method
uriInfo the uriInfo for the request
 
     public void processLinks(T entity, UriInfo uriInfo) {
         Set<Objectprocessed = new HashSet<Object>();
         Object resource = uriInfo.getMatchedResources().get(0);
         processLinks(entityresourceentityprocesseduriInfo);
     }

    
Inject any com.sun.jersey.server.linking.Link annotated fields in the supplied instance. Called once for the entity and then recursively for each member and field.

Parameters:
entity
processed a list of already processed objects, used to break recursion when processing circular references.
uriInfo
 
     private void processLinks(Object entityObject resourceObject instance,
                               Set<Objectprocessed, UriInfo uriInfo) {
 
         try {
             if (instance == null || processed.contains(instance))
                 return// ignore null properties and defeat circular references
             processed.add(instance);
         } catch (RuntimeException e) {
             // fix for JERSEY-1656
             .log(., ImplMessages.WARNING_LINKFILTER_PROCESSING(instance.getClass().getName()), e);
         }
        // Process any @Link annotated fields in entity
        for (RefFieldDescriptor linkField : .getLinkFields()) {
            if (LinkBuilder.evaluateCondition(linkField.getCondition(), entityresourceinstance)) {
                URI uri = LinkBuilder.buildURI(linkFieldentityresourceinstanceuriInfo);
                linkField.setPropertyValue(instanceuri);
            }
        }
        // If entity is an array or collection then process members
        Class<?> instanceClass = instance.getClass();
        if (instanceClass.isArray() && Object[].class.isAssignableFrom(instanceClass)) {
            Object array[] = (Object[]) instance;
            for (Object member : array) {
                processMember(entityresourcememberprocesseduriInfo);
            }
        } else if (instance instanceof Collection) {
            Collection collection = (Collectioninstance;
            for (Object member : collection) {
                processMember(entityresourcememberprocesseduriInfo);
            }
        }
        // Recursively process all member fields
        for (FieldDescriptor member : .getNonLinkFields()) {
            processMember(entityresourcemember.getFieldValue(instance), processeduriInfo);
        }
    }
    private void processMember(Object entityObject resourceObject memberSet<Objectprocessed, UriInfo uriInfo) {
        if (member != null) {
            RefProcessor proc = new RefProcessor(member.getClass());
            proc.processLinks(entityresourcememberprocesseduriInfo);
        }
    }
New to GrepCode? Check out our FAQ X