1/* 2 * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. Oracle designates this 8 * particular file as subject to the "Classpath" exception as provided 9 * by Oracle in the LICENSE file that accompanied this code. 10 * 11 * This code is distributed in the hope that it will be useful, but WITHOUT 12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 14 * version 2 for more details (a copy is included in the LICENSE file that 15 * accompanied this code). 16 * 17 * You should have received a copy of the GNU General Public License version 18 * 2 along with this work; if not, write to the Free Software Foundation, 19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 20 * 21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 22 * or visit www.oracle.com if you need additional information or have any 23 * questions. 24 */ 25 26package com.sun.tools.internal.xjc.model; 27 28import com.sun.codemodel.internal.JPackage; 29 30/** 31 * Parent of a {@link CClassInfo}/{@link CElementInfo}. 32 * 33 * TODO: rename 34 * 35 * Either {@link CClassInfo} or {@link CClassInfoParent.Package}. 36 */ 37public interface CClassInfoParent { 38 /** 39 * Returns the fully-qualified name. 40 */ 41 String fullName(); 42 43 <T> T accept( Visitor<T> visitor ); 44 45 /** 46 * Gets the nearest {@link JPackage}. 47 */ 48 JPackage getOwnerPackage(); 49 50 /** 51 * Visitor of {@link CClassInfoParent} 52 */ 53 public static interface Visitor<T> { 54 T onBean( CClassInfo bean ); 55 T onPackage( JPackage pkg ); 56 T onElement( CElementInfo element ); 57 } 58 59 /** 60 * {@link JPackage} as a {@link CClassInfoParent}. 61 * 62 * Use {@link Model#getPackage} to obtain an instance. 63 */ 64 public static final class Package implements CClassInfoParent { 65 public final JPackage pkg; 66 67 public Package(JPackage pkg) { 68 this.pkg = pkg; 69 } 70 71 public String fullName() { 72 return pkg.name(); 73 } 74 75 public <T> T accept(Visitor<T> visitor) { 76 return visitor.onPackage(pkg); 77 } 78 79 public JPackage getOwnerPackage() { 80 return pkg; 81 } 82 } 83} 84