aoqi@0: /* aoqi@0: * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. aoqi@0: * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. aoqi@0: * aoqi@0: * This code is free software; you can redistribute it and/or modify it aoqi@0: * under the terms of the GNU General Public License version 2 only, as aoqi@0: * published by the Free Software Foundation. Oracle designates this aoqi@0: * particular file as subject to the "Classpath" exception as provided aoqi@0: * by Oracle in the LICENSE file that accompanied this code. aoqi@0: * aoqi@0: * This code is distributed in the hope that it will be useful, but WITHOUT aoqi@0: * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or aoqi@0: * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License aoqi@0: * version 2 for more details (a copy is included in the LICENSE file that aoqi@0: * accompanied this code). aoqi@0: * aoqi@0: * You should have received a copy of the GNU General Public License version aoqi@0: * 2 along with this work; if not, write to the Free Software Foundation, aoqi@0: * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. aoqi@0: * aoqi@0: * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA aoqi@0: * or visit www.oracle.com if you need additional information or have any aoqi@0: * questions. aoqi@0: */ aoqi@0: aoqi@0: package com.sun.tools.internal.xjc.model; aoqi@0: aoqi@0: import javax.activation.MimeType; aoqi@0: import javax.xml.bind.annotation.adapters.XmlAdapter; aoqi@0: aoqi@0: import com.sun.xml.internal.bind.v2.TODO; aoqi@0: import com.sun.xml.internal.bind.v2.model.core.Adapter; aoqi@0: import com.sun.xml.internal.bind.v2.model.core.ID; aoqi@0: aoqi@0: /** aoqi@0: * Factory methods to create a new {@link TypeUse} from an existing one. aoqi@0: * aoqi@0: * @author Kohsuke Kawaguchi aoqi@0: */ aoqi@0: public final class TypeUseFactory { aoqi@0: private TypeUseFactory() {} aoqi@0: aoqi@0: public static TypeUse makeID( TypeUse t, ID id ) { aoqi@0: if(t.idUse()!=ID.NONE) aoqi@0: // I don't think we let users tweak the idness, so aoqi@0: // this error must indicate an inconsistency within the RI/spec. aoqi@0: throw new IllegalStateException(); aoqi@0: return new TypeUseImpl( t.getInfo(), t.isCollection(), id, t.getExpectedMimeType(), t.getAdapterUse() ); aoqi@0: } aoqi@0: aoqi@0: public static TypeUse makeMimeTyped( TypeUse t, MimeType mt ) { aoqi@0: if(t.getExpectedMimeType()!=null) aoqi@0: // I don't think we let users tweak the idness, so aoqi@0: // this error must indicate an inconsistency within the RI/spec. aoqi@0: throw new IllegalStateException(); aoqi@0: return new TypeUseImpl( t.getInfo(), t.isCollection(), t.idUse(), mt, t.getAdapterUse() ); aoqi@0: } aoqi@0: aoqi@0: public static TypeUse makeCollection( TypeUse t ) { aoqi@0: if(t.isCollection()) return t; aoqi@0: CAdapter au = t.getAdapterUse(); aoqi@0: if(au!=null && !au.isWhitespaceAdapter()) { aoqi@0: // we can't process this right now. aoqi@0: // for now bind to a weaker type aoqi@0: TODO.checkSpec(); aoqi@0: return CBuiltinLeafInfo.STRING_LIST; aoqi@0: } aoqi@0: return new TypeUseImpl( t.getInfo(), true, t.idUse(), t.getExpectedMimeType(), null ); aoqi@0: } aoqi@0: aoqi@0: public static TypeUse adapt(TypeUse t, CAdapter adapter) { aoqi@0: assert t.getAdapterUse()==null; // TODO: we don't know how to handle double adapters yet. aoqi@0: return new TypeUseImpl(t.getInfo(),t.isCollection(),t.idUse(),t.getExpectedMimeType(),adapter); aoqi@0: } aoqi@0: aoqi@0: /** aoqi@0: * Creates a new adapter {@link TypeUse} by using the existing {@link Adapter} class. aoqi@0: */ aoqi@0: public static TypeUse adapt( TypeUse t, Class adapter, boolean copy ) { aoqi@0: return adapt( t, new CAdapter(adapter,copy) ); aoqi@0: } aoqi@0: }