Skip to main content
summaryrefslogtreecommitdiffstats
blob: 656bef92afe2dad77066f3965f1ac1f3e0c35b18 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
/*******************************************************************************
 *  Copyright (c) 2010, 2011  Oracle. All rights reserved.
 *  This program and the accompanying materials are made available under the
 *  terms of the Eclipse Public License v1.0, which accompanies this distribution
 *  and is available at http://www.eclipse.org/legal/epl-v10.html
 *  
 *  Contributors: 
 *  	Oracle - initial API and implementation
 *******************************************************************************/
package org.eclipse.jpt.jaxb.core.context;

import java.util.List;
import org.eclipse.jpt.common.core.resource.java.JavaResourceAbstractType;
import org.eclipse.jpt.jaxb.core.context.java.JavaContextNode;
import org.eclipse.wst.validation.internal.provisional.core.IMessage;
import org.eclipse.wst.validation.internal.provisional.core.IReporter;

/**
 * Represents a java class (or enum or interface) with JAXB metadata (specified or implied).
 * <p>
 * Provisional API: This interface is part of an interim API that is still
 * under development and expected to change significantly before reaching
 * stability. It is available at this early stage to solicit feedback from
 * pioneering adopters on the understanding that any code that uses this API
 * will almost certainly be broken (repeatedly) as the API evolves.
 * 
 * @version 3.1
 * @since 3.1
 */
public interface JaxbType
		extends JavaContextNode, XmlAdaptable {
	
	// ***** kind *****
	
	Kind getKind();
	
	
	// ***** type mapping *****
	
	final String MAPPING_PROPERTY = "mapping";  //$NON-NLS-1$
	
	/**
	 * Return the mapping of this type.  
	 * May be null.
	 * Will <b>not</b> be null if this type has an XmlType annotation (or other mapping annotation)
	 * or if this type is default mapped.
	 */
	JaxbTypeMapping getMapping();
	
	
	// ***** default mapped *****
	
	final String DEFAULT_MAPPED_PROPERTY = "defaultMapped";  //$NON-NLS-1$
	
	/**
	 * Return true if this type is mapped by reference.
	 * (If this type has a default mapping by virtue of it being referenced by another mapped type.)
	 */
	boolean isDefaultMapped();
	
	/**
	 * Set this to <code>true</code> if this type is referenced by another mapped type.
	 * (NB:  should only be called by {@link JaxbContextRoot} object.)
	 */
	void setDefaultMapped(boolean newValue);
	
	
	/**
	 * Return the associated java resource type
	 */
	JavaResourceAbstractType getJavaResourceType();
	
	/**
	 * Return the name of the type without any package or type qualifiers
	 */
	String getSimpleName();
	
	/**
	 * Returns the type-qualified name of this type, including qualification for any 
	 * enclosing types, but not including package qualification.
	 */
	String getTypeQualifiedName();
	
	/**
	 * Returns the fully qualified name of this type, including qualification for any 
	 * enclosing types and packages.
	 */
	String getFullyQualifiedName();
	
	/**
	 * Return the name of the type's package.  Empty string if none.
	 */
	String getPackageName();
	
	/**
	 * Return the {@link JaxbPackage} associated with this type
	 * (NB:  may be null in some partially built cases)
	 */
	JaxbPackage getJaxbPackage();
	
	/**
	 * Return the {@link JaxbPackageInfo} associated with this type, if it exists
	 */
	JaxbPackageInfo getJaxbPackageInfo();
	
	/**
	 * Return all directly referenced types, fully qualified.
	 * (Used for constructing Jaxb context)
	 */
	Iterable<String> getReferencedXmlTypeNames();
	
	
	// ****** validation *****
	
	/**
	 * Add to the list of current validation messages
	 */
	void validate(List<IMessage> messages, IReporter reporter);
	
	
	public enum Kind {
		
		/**
		 * {@link JaxbType}s of {@link Kind} CLASS may safely be cast as {@link JaxbClass}
		 */
		CLASS,
		
		/**
		 * {@link JaxbType}s of {@link Kind} ENUM may safely be cast as {@link JaxbEnum}
		 */
		ENUM;
	}
}

Back to the top