/*
 * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
 *
 * This code is free software; you can redistribute it and/or modify it
 * under the terms of the GNU General Public License version 2 only, as
 * published by the Free Software Foundation.  Oracle designates this
 * particular file as subject to the "Classpath" exception as provided
 * by Oracle in the LICENSE file that accompanied this code.
 *
 * This code is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
 * version 2 for more details (a copy is included in the LICENSE file that
 * accompanied this code).
 *
 * You should have received a copy of the GNU General Public License version
 * 2 along with this work; if not, write to the Free Software Foundation,
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
 *
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
 * or visit www.oracle.com if you need additional information or have any
 * questions.
 */

package com.sun.tools.internal.xjc.model;

import javax.xml.bind.annotation.adapters.CollapsedStringAdapter;
import javax.xml.bind.annotation.adapters.NormalizedStringAdapter;
import javax.xml.bind.annotation.adapters.XmlAdapter;

import com.sun.codemodel.internal.JClass;
import com.sun.tools.internal.xjc.model.nav.EagerNClass;
import com.sun.tools.internal.xjc.model.nav.NClass;
import com.sun.tools.internal.xjc.model.nav.NType;
import com.sun.tools.internal.xjc.model.nav.NavigatorImpl;
import com.sun.tools.internal.xjc.outline.Aspect;
import com.sun.tools.internal.xjc.outline.Outline;
import com.sun.xml.internal.bind.v2.model.core.Adapter;

Extended Adapter for use within XJC.
Author:Kohsuke Kawaguchi
/** * Extended {@link Adapter} for use within XJC. * * @author Kohsuke Kawaguchi */
public final class CAdapter extends Adapter<NType,NClass> {
If non-null, the same as Adapter<NType,NClass>.adapterType but more conveniently typed.
/** * If non-null, the same as {@link #adapterType} but more conveniently typed. */
private JClass adapterClass1;
If non-null, the same as Adapter<NType,NClass>.adapterType but more conveniently typed.
/** * If non-null, the same as {@link #adapterType} but more conveniently typed. */
private Class<? extends XmlAdapter> adapterClass2;
When the adapter class is statically known to us.
Params:
  • copy – true to copy the adapter class into the user package, or otherwise just refer to the class specified via the adapter parameter.
/** * When the adapter class is statically known to us. * * @param copy * true to copy the adapter class into the user package, * or otherwise just refer to the class specified via the * adapter parameter. */
public CAdapter(Class<? extends XmlAdapter> adapter, boolean copy) { super(getRef(adapter,copy),NavigatorImpl.theInstance); this.adapterClass1 = null; this.adapterClass2 = adapter; } static NClass getRef( final Class<? extends XmlAdapter> adapter, boolean copy ) { if(copy) { // TODO: this is a hack. the code generation should be defered until // the backend. (right now constant generation happens in the front-end) return new EagerNClass(adapter) { @Override public JClass toType(Outline o, Aspect aspect) { return o.addRuntime(adapter); } public String fullName() { // TODO: implement this method later throw new UnsupportedOperationException(); } }; } else { return NavigatorImpl.theInstance.ref(adapter); } } public CAdapter(JClass adapter) { super( NavigatorImpl.theInstance.ref(adapter), NavigatorImpl.theInstance); this.adapterClass1 = adapter; this.adapterClass2 = null; } public JClass getAdapterClass(Outline o) { if(adapterClass1==null) adapterClass1 = o.getCodeModel().ref(adapterClass2); return adapterType.toType(o, Aspect.EXPOSED); }
Returns true if the adapter is for whitespace normalization. Such an adapter can be ignored when producing a list.
/** * Returns true if the adapter is for whitespace normalization. * Such an adapter can be ignored when producing a list. */
public boolean isWhitespaceAdapter() { return adapterClass2==CollapsedStringAdapter.class || adapterClass2==NormalizedStringAdapter.class; }
Returns the adapter class if the adapter type is statically known to XJC.

This method is mostly for enabling certain optimized code generation.

/** * Returns the adapter class if the adapter type is statically known to XJC. * <p> * This method is mostly for enabling certain optimized code generation. */
public Class<? extends XmlAdapter> getAdapterIfKnown() { return adapterClass2; } }