View | Details | Raw Unified | Return to bug 392701 | Differences between
and this patch

Collapse All | Expand All

(-)META-INF/MANIFEST.MF (+1 lines)
Lines 65-70 Link Here
65
 org.eclipse.jpt.jpa.core.internal.jpa2.resource.java.binary;x-internal:=true,
65
 org.eclipse.jpt.jpa.core.internal.jpa2.resource.java.binary;x-internal:=true,
66
 org.eclipse.jpt.jpa.core.internal.jpa2.resource.java.source;x-internal:=true,
66
 org.eclipse.jpt.jpa.core.internal.jpa2.resource.java.source;x-internal:=true,
67
 org.eclipse.jpt.jpa.core.internal.jpa2_1;x-internal:=true,
67
 org.eclipse.jpt.jpa.core.internal.jpa2_1;x-internal:=true,
68
 org.eclipse.jpt.jpa.core.internal.jpa2_1.context,
68
 org.eclipse.jpt.jpa.core.internal.jpa2_1.context.java;x-internal:=true,
69
 org.eclipse.jpt.jpa.core.internal.jpa2_1.context.java;x-internal:=true,
69
 org.eclipse.jpt.jpa.core.internal.jpa2_1.context.orm;x-internal:=true,
70
 org.eclipse.jpt.jpa.core.internal.jpa2_1.context.orm;x-internal:=true,
70
 org.eclipse.jpt.jpa.core.internal.jpa2_1.resource.java;x-internal:=true,
71
 org.eclipse.jpt.jpa.core.internal.jpa2_1.resource.java;x-internal:=true,
(-)model/src/org/eclipse/jpt/jpa/core/resource/orm/XmlStoredProcedureParameter.java (-11 / +3 lines)
Lines 10-24 Link Here
10
package org.eclipse.jpt.jpa.core.resource.orm;
10
package org.eclipse.jpt.jpa.core.resource.orm;
11
11
12
import org.eclipse.emf.common.notify.Notification;
12
import org.eclipse.emf.common.notify.Notification;
13
14
import org.eclipse.emf.ecore.EClass;
13
import org.eclipse.emf.ecore.EClass;
15
import org.eclipse.emf.ecore.EStructuralFeature;
14
import org.eclipse.emf.ecore.EStructuralFeature;
16
17
import org.eclipse.emf.ecore.impl.ENotificationImpl;
15
import org.eclipse.emf.ecore.impl.ENotificationImpl;
18
19
import org.eclipse.jpt.common.core.internal.utility.translators.SimpleTranslator;
16
import org.eclipse.jpt.common.core.internal.utility.translators.SimpleTranslator;
20
import org.eclipse.jpt.common.core.resource.xml.EBaseObjectImpl;
17
import org.eclipse.jpt.common.core.resource.xml.EBaseObjectImpl;
21
22
import org.eclipse.jpt.jpa.core.resource.orm.v2_1.JPA2_1;
18
import org.eclipse.jpt.jpa.core.resource.orm.v2_1.JPA2_1;
23
import org.eclipse.jpt.jpa.core.resource.orm.v2_1.OrmV2_1Package;
19
import org.eclipse.jpt.jpa.core.resource.orm.v2_1.OrmV2_1Package;
24
import org.eclipse.jpt.jpa.core.resource.orm.v2_1.ParameterMode_2_1;
20
import org.eclipse.jpt.jpa.core.resource.orm.v2_1.ParameterMode_2_1;
Lines 64-77 Link Here
64
	protected String description = DESCRIPTION_EDEFAULT;
60
	protected String description = DESCRIPTION_EDEFAULT;
65
61
66
	/**
62
	/**
67
	 * The default value of the '{@link #getMode() <em>Mode</em>}' attribute.
63
	 * changed this to null and removed the generated flag so emf won't generate over it
68
	 * <!-- begin-user-doc -->
64
	 * we don't want a default for enums, just null if the tag does not exist
69
	 * <!-- end-user-doc -->
70
	 * @see #getMode()
71
	 * @generated
72
	 * @ordered
73
	 */
65
	 */
74
	protected static final ParameterMode_2_1 MODE_EDEFAULT = ParameterMode_2_1.IN;
66
	protected static final ParameterMode_2_1 MODE_EDEFAULT = null;
75
67
76
	/**
68
	/**
77
	 * The cached value of the '{@link #getMode() <em>Mode</em>}' attribute.
69
	 * The cached value of the '{@link #getMode() <em>Mode</em>}' attribute.
(-)src/org/eclipse/jpt/jpa/core/context/QueryContainer.java (-3 / +45 lines)
Lines 1-5 Link Here
1
/*******************************************************************************
1
/*******************************************************************************
2
 * Copyright (c) 2008, 2012 Oracle. All rights reserved.
2
 * Copyright (c) 2008, 2013 Oracle. All rights reserved.
3
 * This program and the accompanying materials are made available under the
3
 * This program and the accompanying materials are made available under the
4
 * terms of the Eclipse Public License v1.0, which accompanies this distribution
4
 * terms of the Eclipse Public License v1.0, which accompanies this distribution
5
 * and is available at http://www.eclipse.org/legal/epl-v10.html.
5
 * and is available at http://www.eclipse.org/legal/epl-v10.html.
Lines 10-18 Link Here
10
package org.eclipse.jpt.jpa.core.context;
10
package org.eclipse.jpt.jpa.core.context;
11
11
12
import org.eclipse.jpt.common.utility.iterable.ListIterable;
12
import org.eclipse.jpt.common.utility.iterable.ListIterable;
13
import org.eclipse.jpt.jpa.core.internal.jpa2_1.context.NamedStoredProcedureQuery2_1;
13
14
14
/**
15
/**
15
 * Container for named queries and/or named native queries.
16
 * Container for named queries and/or named native queries and/or named stored procedure queries.
16
 * Used by entities and the <code>orm.xml</code>
17
 * Used by entities and the <code>orm.xml</code>
17
 * </code>entity-mappings</code> element. 
18
 * </code>entity-mappings</code> element. 
18
 * <p>
19
 * <p>
Lines 22-28 Link Here
22
 * pioneering adopters on the understanding that any code that uses this API
23
 * pioneering adopters on the understanding that any code that uses this API
23
 * will almost certainly be broken (repeatedly) as the API evolves.
24
 * will almost certainly be broken (repeatedly) as the API evolves.
24
 * 
25
 * 
25
 * @version 2.2
26
 * @version 3.3
26
 * @since 2.2
27
 * @since 2.2
27
 */
28
 */
28
public interface QueryContainer
29
public interface QueryContainer
Lines 115-118 Link Here
115
	 */
116
	 */
116
	void moveNamedNativeQuery(int targetIndex, int sourceIndex);
117
	void moveNamedNativeQuery(int targetIndex, int sourceIndex);
117
118
119
120
	// ********** named stored procedure queries **********
121
122
	/**
123
	 * Return the container's named stored procedure queries.
124
	 */
125
	ListIterable<? extends NamedStoredProcedureQuery2_1> getNamedStoredProcedureQueries();
126
127
	String NAMED_STORED_PROCEDURE_QUERIES_LIST = "namedStoredProcedureQueries"; //$NON-NLS-1$
128
129
	/**
130
	 * Return the number of named stored procedure queries.
131
	 */
132
	int getNamedStoredProcedureQueriesSize();
133
134
	/**
135
	 * Add a new named stored procedure query to the container and return it.
136
	 */
137
	NamedStoredProcedureQuery2_1 addNamedStoredProcedureQuery();
138
139
	/**
140
	 * Add a new named stored procedure query to the container at the specified index
141
	 * and return it.
142
	 */
143
	NamedStoredProcedureQuery2_1 addNamedStoredProcedureQuery(int index);
144
145
	/**
146
	 * Remove from the container the named stored procedure query at the specified index.
147
	 */
148
	void removeNamedStoredProcedureQuery(int index);
149
150
	/**
151
	 * Remove the specified named stored procedure query from the container.
152
	 */
153
	void removeNamedStoredProcedureQuery(NamedStoredProcedureQuery2_1 namedStoredProcedureQuery);
154
155
	/**
156
	 * Move a named stored procedure query as specified.
157
	 */
158
	void moveNamedStoredProcedureQuery(int targetIndex, int sourceIndex);
159
118
}
160
}
(-)src/org/eclipse/jpt/jpa/core/internal/AbstractJpaNode.java (+1 lines)
Lines 158-163 Link Here
158
	protected JpaFactory2_0 getJpaFactory2_0() {
158
	protected JpaFactory2_0 getJpaFactory2_0() {
159
		return (JpaFactory2_0) this.getJpaFactory();
159
		return (JpaFactory2_0) this.getJpaFactory();
160
	}
160
	}
161
161
	/**
162
	/**
162
	 * Call {@link #isJpa2_1Compatible()} before calling this method.
163
	 * Call {@link #isJpa2_1Compatible()} before calling this method.
163
	 */
164
	 */
(-)src/org/eclipse/jpt/jpa/core/internal/jpa1/context/java/GenericJavaQueryContainer.java (-1 / +94 lines)
Lines 23-28 Link Here
23
import org.eclipse.jpt.jpa.core.context.java.JavaNamedQuery;
23
import org.eclipse.jpt.jpa.core.context.java.JavaNamedQuery;
24
import org.eclipse.jpt.jpa.core.context.java.JavaQueryContainer;
24
import org.eclipse.jpt.jpa.core.context.java.JavaQueryContainer;
25
import org.eclipse.jpt.jpa.core.internal.context.java.AbstractJavaJpaContextNode;
25
import org.eclipse.jpt.jpa.core.internal.context.java.AbstractJavaJpaContextNode;
26
import org.eclipse.jpt.jpa.core.internal.jpa2_1.context.NamedStoredProcedureQuery2_1;
27
import org.eclipse.jpt.jpa.core.internal.jpa2_1.context.java.JavaNamedStoredProcedureQuery2_1;
28
import org.eclipse.jpt.jpa.core.internal.jpa2_1.context.java.JavaQueryContainer2_1;
29
import org.eclipse.jpt.jpa.core.jpa2_1.resource.java.NamedStoredProcedureQuery2_1Annotation;
26
import org.eclipse.jpt.jpa.core.resource.java.NamedNativeQueryAnnotation;
30
import org.eclipse.jpt.jpa.core.resource.java.NamedNativeQueryAnnotation;
27
import org.eclipse.jpt.jpa.core.resource.java.NamedQueryAnnotation;
31
import org.eclipse.jpt.jpa.core.resource.java.NamedQueryAnnotation;
28
import org.eclipse.wst.validation.internal.provisional.core.IMessage;
32
import org.eclipse.wst.validation.internal.provisional.core.IMessage;
Lines 33-44 Link Here
33
 */
37
 */
34
public class GenericJavaQueryContainer
38
public class GenericJavaQueryContainer
35
	extends AbstractJavaJpaContextNode
39
	extends AbstractJavaJpaContextNode
36
	implements JavaQueryContainer
40
	implements JavaQueryContainer, JavaQueryContainer2_1
37
{
41
{
38
	protected final Owner owner;
42
	protected final Owner owner;
39
43
40
	protected final ContextListContainer<JavaNamedQuery, NamedQueryAnnotation> namedQueryContainer;
44
	protected final ContextListContainer<JavaNamedQuery, NamedQueryAnnotation> namedQueryContainer;
41
	protected final ContextListContainer<JavaNamedNativeQuery, NamedNativeQueryAnnotation> namedNativeQueryContainer;
45
	protected final ContextListContainer<JavaNamedNativeQuery, NamedNativeQueryAnnotation> namedNativeQueryContainer;
46
	protected final ContextListContainer<JavaNamedStoredProcedureQuery2_1, NamedStoredProcedureQuery2_1Annotation> namedStoredProcedureQueryContainer;
42
47
43
48
44
	public GenericJavaQueryContainer(JpaContextNode parent, Owner owner) {
49
	public GenericJavaQueryContainer(JpaContextNode parent, Owner owner) {
Lines 46-51 Link Here
46
		this.owner = owner;
51
		this.owner = owner;
47
		this.namedQueryContainer = this.buildNamedQueryContainer();
52
		this.namedQueryContainer = this.buildNamedQueryContainer();
48
		this.namedNativeQueryContainer = this.buildNamedNativeQueryContainer();
53
		this.namedNativeQueryContainer = this.buildNamedNativeQueryContainer();
54
		this.namedStoredProcedureQueryContainer = this.buildNamedStoredProcedureQueryContainer();
49
	}
55
	}
50
56
51
57
Lines 56-61 Link Here
56
		super.synchronizeWithResourceModel();
62
		super.synchronizeWithResourceModel();
57
		this.syncNamedQueries();
63
		this.syncNamedQueries();
58
		this.syncNamedNativeQueries();
64
		this.syncNamedNativeQueries();
65
		this.syncNamedStoredProcedureQueries();
59
	}
66
	}
60
67
61
	@Override
68
	@Override
Lines 63-68 Link Here
63
		super.update();
70
		super.update();
64
		this.updateNodes(this.getNamedQueries());
71
		this.updateNodes(this.getNamedQueries());
65
		this.updateNodes(this.getNamedNativeQueries());
72
		this.updateNodes(this.getNamedNativeQueries());
73
		this.updateNodes(this.getNamedStoredProcedureQueries());
66
	}
74
	}
67
75
68
76
Lines 242-247 Link Here
242
		}
250
		}
243
	}
251
	}
244
252
253
	// ********** named stored procedure queries **********
254
255
	public ListIterable<JavaNamedStoredProcedureQuery2_1> getNamedStoredProcedureQueries() {
256
		return this.namedStoredProcedureQueryContainer.getContextElements();
257
	}
258
259
	public int getNamedStoredProcedureQueriesSize() {
260
		return this.namedStoredProcedureQueryContainer.getContextElementsSize();
261
	}
262
263
	public JavaNamedStoredProcedureQuery2_1 addNamedStoredProcedureQuery() {
264
		return this.addNamedStoredProcedureQuery(this.getNamedNativeQueriesSize());
265
	}
266
267
	public JavaNamedStoredProcedureQuery2_1 addNamedStoredProcedureQuery(int index) {
268
		NamedStoredProcedureQuery2_1Annotation annotation = this.addNamedStoredProcedureQueryAnnotation(index);
269
		return this.namedStoredProcedureQueryContainer.addContextElement(index, annotation);
270
	}
271
272
	protected NamedStoredProcedureQuery2_1Annotation addNamedStoredProcedureQueryAnnotation(int index) {
273
		return (NamedStoredProcedureQuery2_1Annotation) this.owner.getResourceAnnotatedElement().addAnnotation(index, NamedStoredProcedureQuery2_1Annotation.ANNOTATION_NAME);
274
	}
275
276
	public void removeNamedStoredProcedureQuery(NamedStoredProcedureQuery2_1 namedStoredProcedureQuery) {
277
		this.removeNamedStoredProcedureQuery(this.namedStoredProcedureQueryContainer.indexOfContextElement((JavaNamedStoredProcedureQuery2_1) namedStoredProcedureQuery));
278
	}
279
280
	public void removeNamedStoredProcedureQuery(int index) {
281
		this.owner.getResourceAnnotatedElement().removeAnnotation(index, NamedStoredProcedureQuery2_1Annotation.ANNOTATION_NAME);
282
		this.namedStoredProcedureQueryContainer.removeContextElement(index);
283
	}
284
285
	public void moveNamedStoredProcedureQuery(int targetIndex, int sourceIndex) {
286
		this.owner.getResourceAnnotatedElement().moveAnnotation(targetIndex, sourceIndex, NamedStoredProcedureQuery2_1Annotation.ANNOTATION_NAME);
287
		this.namedStoredProcedureQueryContainer.moveContextElement(targetIndex, sourceIndex);
288
	}
289
290
	protected JavaNamedStoredProcedureQuery2_1 buildNamedStoredProcedureQuery(NamedStoredProcedureQuery2_1Annotation namedStoredProcedureQueryAnnotation) {
291
		return this.isJpa2_1Compatible() ?
292
				this.getJpaFactory2_1().buildJavaNamedStoredProcedureQuery2_1(this, namedStoredProcedureQueryAnnotation) :
293
				null;
294
	}
295
296
	protected void syncNamedStoredProcedureQueries() {
297
		this.namedStoredProcedureQueryContainer.synchronizeWithResourceModel();
298
	}
299
300
	protected ListIterable<NamedStoredProcedureQuery2_1Annotation> getNamedStoredProcedureQueryAnnotations() {
301
		return new SubListIterableWrapper<NestableAnnotation, NamedStoredProcedureQuery2_1Annotation>(this.getNestableNamedStoredProcedureQueryAnnotations_());
302
	}
303
304
	protected ListIterable<NestableAnnotation> getNestableNamedStoredProcedureQueryAnnotations_() {
305
		return this.owner.getResourceAnnotatedElement().getAnnotations(NamedStoredProcedureQuery2_1Annotation.ANNOTATION_NAME);
306
	}
307
308
	protected ContextListContainer<JavaNamedStoredProcedureQuery2_1, NamedStoredProcedureQuery2_1Annotation> buildNamedStoredProcedureQueryContainer() {
309
		NamedStoredProcedureQueryContainer container = new NamedStoredProcedureQueryContainer();
310
		container.initialize();
311
		return container;
312
	}
313
314
	/**
315
	 * named query container
316
	 */
317
	protected class NamedStoredProcedureQueryContainer
318
		extends ContextListContainer<JavaNamedStoredProcedureQuery2_1, NamedStoredProcedureQuery2_1Annotation>
319
	{
320
		@Override
321
		protected String getContextElementsPropertyName() {
322
			return NAMED_STORED_PROCEDURE_QUERIES_LIST;
323
		}
324
		@Override
325
		protected JavaNamedStoredProcedureQuery2_1 buildContextElement(NamedStoredProcedureQuery2_1Annotation resourceElement) {
326
			return GenericJavaQueryContainer.this.buildNamedStoredProcedureQuery(resourceElement);
327
		}
328
		@Override
329
		protected ListIterable<NamedStoredProcedureQuery2_1Annotation> getResourceElements() {
330
			return GenericJavaQueryContainer.this.getNamedStoredProcedureQueryAnnotations();
331
		}
332
		@Override
333
		protected NamedStoredProcedureQuery2_1Annotation getResourceElement(JavaNamedStoredProcedureQuery2_1 contextElement) {
334
			return contextElement.getQueryAnnotation();
335
		}
336
	}
337
245
338
246
	// ********** validation **********
339
	// ********** validation **********
247
340
(-)src/org/eclipse/jpt/jpa/core/internal/jpa1/context/orm/GenericOrmQueryContainer.java (-2 / +98 lines)
Lines 21-29 Link Here
21
import org.eclipse.jpt.jpa.core.context.orm.OrmNamedQuery;
21
import org.eclipse.jpt.jpa.core.context.orm.OrmNamedQuery;
22
import org.eclipse.jpt.jpa.core.context.orm.OrmQueryContainer;
22
import org.eclipse.jpt.jpa.core.context.orm.OrmQueryContainer;
23
import org.eclipse.jpt.jpa.core.internal.context.orm.AbstractOrmXmlContextNode;
23
import org.eclipse.jpt.jpa.core.internal.context.orm.AbstractOrmXmlContextNode;
24
import org.eclipse.jpt.jpa.core.internal.jpa2_1.context.NamedStoredProcedureQuery2_1;
25
import org.eclipse.jpt.jpa.core.internal.jpa2_1.context.orm.OrmNamedStoredProcedureQuery2_1;
26
import org.eclipse.jpt.jpa.core.internal.jpa2_1.context.orm.OrmQueryContainer2_1;
24
import org.eclipse.jpt.jpa.core.resource.orm.OrmFactory;
27
import org.eclipse.jpt.jpa.core.resource.orm.OrmFactory;
25
import org.eclipse.jpt.jpa.core.resource.orm.XmlNamedNativeQuery;
28
import org.eclipse.jpt.jpa.core.resource.orm.XmlNamedNativeQuery;
26
import org.eclipse.jpt.jpa.core.resource.orm.XmlNamedQuery;
29
import org.eclipse.jpt.jpa.core.resource.orm.XmlNamedQuery;
30
import org.eclipse.jpt.jpa.core.resource.orm.XmlNamedStoredProcedureQuery;
27
import org.eclipse.jpt.jpa.core.resource.orm.XmlQueryContainer;
31
import org.eclipse.jpt.jpa.core.resource.orm.XmlQueryContainer;
28
import org.eclipse.wst.validation.internal.provisional.core.IMessage;
32
import org.eclipse.wst.validation.internal.provisional.core.IMessage;
29
import org.eclipse.wst.validation.internal.provisional.core.IReporter;
33
import org.eclipse.wst.validation.internal.provisional.core.IReporter;
Lines 33-44 Link Here
33
 */
37
 */
34
public class GenericOrmQueryContainer
38
public class GenericOrmQueryContainer
35
	extends AbstractOrmXmlContextNode
39
	extends AbstractOrmXmlContextNode
36
	implements OrmQueryContainer
40
	implements OrmQueryContainer, OrmQueryContainer2_1
37
{
41
{
38
	protected final XmlQueryContainer xmlQueryContainer;
42
	protected final XmlQueryContainer xmlQueryContainer;
39
43
40
	protected final ContextListContainer<OrmNamedQuery, XmlNamedQuery> namedQueryContainer;
44
	protected final ContextListContainer<OrmNamedQuery, XmlNamedQuery> namedQueryContainer;
41
	protected final ContextListContainer<OrmNamedNativeQuery, XmlNamedNativeQuery> namedNativeQueryContainer;
45
	protected final ContextListContainer<OrmNamedNativeQuery, XmlNamedNativeQuery> namedNativeQueryContainer;
46
	protected final ContextListContainer<OrmNamedStoredProcedureQuery2_1, XmlNamedStoredProcedureQuery> namedStoredProcedureQueryContainer;
42
47
43
48
44
	public GenericOrmQueryContainer(JpaContextNode parent, XmlQueryContainer xmlQueryContainer) {
49
	public GenericOrmQueryContainer(JpaContextNode parent, XmlQueryContainer xmlQueryContainer) {
Lines 46-51 Link Here
46
		this.xmlQueryContainer = xmlQueryContainer;
51
		this.xmlQueryContainer = xmlQueryContainer;
47
		this.namedQueryContainer = this.buildNamedQueryContainer();
52
		this.namedQueryContainer = this.buildNamedQueryContainer();
48
		this.namedNativeQueryContainer = this.buildNamedNativeQueryContainer();
53
		this.namedNativeQueryContainer = this.buildNamedNativeQueryContainer();
54
		this.namedStoredProcedureQueryContainer = this.buildNamedStoredProcedureQueryContainer();
49
	}
55
	}
50
56
51
57
Lines 56-61 Link Here
56
		super.synchronizeWithResourceModel();
62
		super.synchronizeWithResourceModel();
57
		this.syncNamedQueries();
63
		this.syncNamedQueries();
58
		this.syncNamedNativeQueries();
64
		this.syncNamedNativeQueries();
65
		this.syncNamedStoredProcedureQueries();
59
	}
66
	}
60
67
61
	@Override
68
	@Override
Lines 63-68 Link Here
63
		super.update();
70
		super.update();
64
		this.updateNodes(this.getNamedQueries());
71
		this.updateNodes(this.getNamedQueries());
65
		this.updateNodes(this.getNamedNativeQueries());
72
		this.updateNodes(this.getNamedNativeQueries());
73
		this.updateNodes(this.getNamedStoredProcedureQueries());
66
	}
74
	}
67
75
68
76
Lines 70-76 Link Here
70
78
71
	@SuppressWarnings("unchecked")
79
	@SuppressWarnings("unchecked")
72
	public Iterable<Query> getQueries() {
80
	public Iterable<Query> getQueries() {
73
		return IterableTools.<Query>concatenate(this.getNamedQueries(), this.getNamedNativeQueries());
81
		return IterableTools.<Query>concatenate(
82
				this.getNamedQueries(), 
83
				this.getNamedNativeQueries(),
84
				this.getNamedStoredProcedureQueries());
74
	}
85
	}
75
86
76
87
Lines 239-244 Link Here
239
	}
250
	}
240
251
241
252
253
	// ********** named stored procedure queries **********
254
255
	public ListIterable<OrmNamedStoredProcedureQuery2_1> getNamedStoredProcedureQueries() {
256
		return this.namedStoredProcedureQueryContainer.getContextElements();
257
	}
258
259
	public int getNamedStoredProcedureQueriesSize() {
260
		return this.namedStoredProcedureQueryContainer.getContextElementsSize();
261
	}
262
263
	public OrmNamedStoredProcedureQuery2_1 addNamedStoredProcedureQuery() {
264
		return this.addNamedStoredProcedureQuery(this.getNamedStoredProcedureQueriesSize());
265
	}
266
267
	public OrmNamedStoredProcedureQuery2_1 addNamedStoredProcedureQuery(int index) {
268
		XmlNamedStoredProcedureQuery xmlQuery = this.buildXmlNamedStoredProcedureQuery();
269
		OrmNamedStoredProcedureQuery2_1 query = this.namedStoredProcedureQueryContainer.addContextElement(index, xmlQuery);
270
		this.xmlQueryContainer.getNamedStoredProcedureQueries().add(index, xmlQuery);
271
		return query;
272
	}
273
274
	protected XmlNamedStoredProcedureQuery buildXmlNamedStoredProcedureQuery() {
275
		return OrmFactory.eINSTANCE.createXmlNamedStoredProcedureQuery();
276
	}
277
278
	public void removeNamedStoredProcedureQuery(NamedStoredProcedureQuery2_1 namedQuery) {
279
		this.removeNamedStoredProcedureQuery(this.namedStoredProcedureQueryContainer.indexOfContextElement((OrmNamedStoredProcedureQuery2_1) namedQuery));
280
	}
281
282
	public void removeNamedStoredProcedureQuery(int index) {
283
		this.namedStoredProcedureQueryContainer.removeContextElement(index);
284
		this.xmlQueryContainer.getNamedStoredProcedureQueries().remove(index);
285
	}
286
287
	public void moveNamedStoredProcedureQuery(int targetIndex, int sourceIndex) {
288
		this.namedStoredProcedureQueryContainer.moveContextElement(targetIndex, sourceIndex);
289
		this.xmlQueryContainer.getNamedStoredProcedureQueries().move(targetIndex, sourceIndex);
290
	}
291
292
	protected OrmNamedStoredProcedureQuery2_1 buildNamedStoredProcedureQuery(XmlNamedStoredProcedureQuery xmlNamedQuery) {
293
		return this.isOrmXml2_1Compatible() ?
294
				this.getContextNodeFactory2_1().buildOrmNamedStoredProcedureQuery2_1(this, xmlNamedQuery) :
295
				null;
296
	}
297
298
	protected void syncNamedStoredProcedureQueries() {
299
		this.namedStoredProcedureQueryContainer.synchronizeWithResourceModel();
300
	}
301
302
	protected ListIterable<XmlNamedStoredProcedureQuery> getXmlNamedStoredProcedureQueries() {
303
		// clone to reduce chance of concurrency problems
304
		return IterableTools.cloneLive(this.xmlQueryContainer.getNamedStoredProcedureQueries());
305
	}
306
307
	protected ContextListContainer<OrmNamedStoredProcedureQuery2_1, XmlNamedStoredProcedureQuery> buildNamedStoredProcedureQueryContainer() {
308
		NamedStoredProcedureQueryContainer container = new NamedStoredProcedureQueryContainer();
309
		container.initialize();
310
		return container;
311
	}
312
313
	/**
314
	 * named query container
315
	 */
316
	protected class NamedStoredProcedureQueryContainer
317
		extends ContextListContainer<OrmNamedStoredProcedureQuery2_1, XmlNamedStoredProcedureQuery>
318
	{
319
		@Override
320
		protected String getContextElementsPropertyName() {
321
			return NAMED_STORED_PROCEDURE_QUERIES_LIST;
322
		}
323
		@Override
324
		protected OrmNamedStoredProcedureQuery2_1 buildContextElement(XmlNamedStoredProcedureQuery resourceElement) {
325
			return GenericOrmQueryContainer.this.buildNamedStoredProcedureQuery(resourceElement);
326
		}
327
		@Override
328
		protected ListIterable<XmlNamedStoredProcedureQuery> getResourceElements() {
329
			return GenericOrmQueryContainer.this.getXmlNamedStoredProcedureQueries();
330
		}
331
		@Override
332
		protected XmlNamedStoredProcedureQuery getResourceElement(OrmNamedStoredProcedureQuery2_1 contextElement) {
333
			return contextElement.getXmlQuery();
334
		}
335
	}
336
337
242
	// ********** validation **********
338
	// ********** validation **********
243
339
244
	/**
340
	/**
(-)src/org/eclipse/jpt/jpa/core/internal/jpa2_1/GenericJpaFactory2_1.java (-16 / +36 lines)
Lines 7-36 Link Here
7
 * Contributors:
7
 * Contributors:
8
 *     Oracle - initial API and implementation
8
 *     Oracle - initial API and implementation
9
 ******************************************************************************/
9
 ******************************************************************************/
10
package org.eclipse.jpt.jpa.core.internal.jpa2_1;
10
package org.eclipse.jpt.jpa.core.internal.jpa2_1;
11
11
12
import org.eclipse.jpt.common.core.resource.java.JavaResourceType;
12
import org.eclipse.jpt.common.core.resource.java.JavaResourceType;
13
import org.eclipse.jpt.jpa.core.context.JpaContextNode;
13
import org.eclipse.jpt.jpa.core.context.JpaContextNode;
14
import org.eclipse.jpt.jpa.core.context.java.JavaQuery;
14
import org.eclipse.jpt.jpa.core.internal.jpa2.GenericJpaFactory2_0;
15
import org.eclipse.jpt.jpa.core.internal.jpa2.GenericJpaFactory2_0;
15
import org.eclipse.jpt.jpa.core.internal.jpa2_1.context.java.GenericJavaConverterType;
16
import org.eclipse.jpt.jpa.core.internal.jpa2_1.context.java.GenericJavaConverterType;
17
import org.eclipse.jpt.jpa.core.internal.jpa2_1.context.java.GenericJavaNamedStoredProcedureQuery2_1;
18
import org.eclipse.jpt.jpa.core.internal.jpa2_1.context.java.GenericJavaStoredProcedureParameter2_1;
19
import org.eclipse.jpt.jpa.core.internal.jpa2_1.context.java.JavaNamedStoredProcedureQuery2_1;
20
import org.eclipse.jpt.jpa.core.internal.jpa2_1.context.java.JavaQueryContainer2_1;
21
import org.eclipse.jpt.jpa.core.internal.jpa2_1.context.java.JavaStoredProcedureParameter2_1;
16
import org.eclipse.jpt.jpa.core.jpa2_1.JpaFactory2_1;
22
import org.eclipse.jpt.jpa.core.jpa2_1.JpaFactory2_1;
17
import org.eclipse.jpt.jpa.core.jpa2_1.context.java.JavaConverterType2_1;
23
import org.eclipse.jpt.jpa.core.jpa2_1.context.java.JavaConverterType2_1;
18
24
import org.eclipse.jpt.jpa.core.jpa2_1.resource.java.NamedStoredProcedureQuery2_1Annotation;
19
25
import org.eclipse.jpt.jpa.core.jpa2_1.resource.java.StoredProcedureParameter2_1Annotation;
20
/**
26
21
 * Central class that allows extenders to easily replace implementations of
27
22
 * various Dali interfaces.
28
/**
23
 */
29
 * Central class that allows extenders to easily replace implementations of
24
public class GenericJpaFactory2_1
30
 * various Dali interfaces.
25
	extends GenericJpaFactory2_0
31
 */
26
	implements JpaFactory2_1
32
public class GenericJpaFactory2_1
27
{
33
	extends GenericJpaFactory2_0
28
34
	implements JpaFactory2_1
29
	public GenericJpaFactory2_1() {
35
{
30
		super();
36
37
	public GenericJpaFactory2_1() {
38
		super();
39
	}
40
	
41
	public JavaStoredProcedureParameter2_1 buildJavaStoredProcedureParameter2_1(
42
			JavaQuery parent,
43
			StoredProcedureParameter2_1Annotation parameterAnnotation) {
44
		return new GenericJavaStoredProcedureParameter2_1(parent, parameterAnnotation);
45
		}
46
47
	public JavaNamedStoredProcedureQuery2_1 buildJavaNamedStoredProcedureQuery2_1(
48
			JavaQueryContainer2_1 parent, 
49
			NamedStoredProcedureQuery2_1Annotation namedStoredProcedureQueryAnnotation) {
50
		return new GenericJavaNamedStoredProcedureQuery2_1(parent, namedStoredProcedureQueryAnnotation);
31
	}
51
	}
32
52
33
	public JavaConverterType2_1 buildJavaConverterType(JpaContextNode parent, JavaResourceType jrt) {
53
	public JavaConverterType2_1 buildJavaConverterType(JpaContextNode parent, JavaResourceType jrt) {
34
		return new GenericJavaConverterType(parent, jrt);
54
		return new GenericJavaConverterType(parent, jrt);
35
	}
55
	}
36
}
56
}
(-)src/org/eclipse/jpt/jpa/core/internal/jpa2_1/context/NamedStoredProcedureQuery2_1.java (+169 lines)
Added Link Here
1
/*******************************************************************************
2
 * Copyright (c) 2013 Oracle. All rights reserved.
3
 * This program and the accompanying materials are made available under the
4
 * terms of the Eclipse Public License v1.0, which accompanies this distribution
5
 * and is available at http://www.eclipse.org/legal/epl-v10.html.
6
 * 
7
 * Contributors:
8
 *     Oracle - initial API and implementation
9
 ******************************************************************************/
10
package org.eclipse.jpt.jpa.core.internal.jpa2_1.context;
11
12
import org.eclipse.jpt.common.utility.iterable.ListIterable;
13
import org.eclipse.jpt.jpa.core.context.Query;
14
15
/**
16
 * named stored procedure query
17
 * <p>
18
 * Provisional API: This interface is part of an interim API that is still
19
 * under development and expected to change significantly before reaching
20
 * stability. It is available at this early stage to solicit feedback from
21
 * pioneering adopters on the understanding that any code that uses this API
22
 * will almost certainly be broken (repeatedly) as the API evolves.
23
 * 
24
 * @version 3.3
25
 * @since 3.3
26
 */
27
public interface NamedStoredProcedureQuery2_1
28
	extends Query
29
{
30
31
	// ********** procedure name **********
32
33
	String getProcedureName();
34
		String PROCEDURE_NAME_PROPERTY = "procedureName"; //$NON-NLS-1$
35
36
	void setProcedureName(String procedureName);
37
38
39
	// ********** parameters **********
40
41
	/**
42
	 * Return the query's parameters.
43
	 */
44
	ListIterable<? extends StoredProcedureParameter2_1> getParameters();
45
		String PARAMETERS_LIST = "parameters"; //$NON-NLS-1$
46
47
	/**
48
	 * Return the number of parameters in the query.
49
	 */
50
	int getParametersSize();
51
52
	/**
53
	 * Add a parameter to the query and return the object representing it.
54
	 */
55
	StoredProcedureParameter2_1 addParameter();
56
57
	/**
58
	 * Add a parameter to the index and return the object representing it.
59
	 */
60
	StoredProcedureParameter2_1 addParameter(int index);
61
62
	/**
63
	 * Remove the parameter from the query.
64
	 */
65
	void removeParameter(StoredProcedureParameter2_1 parameter);
66
67
	/**
68
	 * Remove the parameter at the index from the query.
69
	 */
70
	void removeParameter(int index);
71
72
	/**
73
	 * Move the hint from the source index to the target index.
74
	 */
75
	void moveParameter(int targetIndex, int sourceIndex);
76
77
	/**
78
	 * Return the parameter at the index.
79
	 */
80
	StoredProcedureParameter2_1 getParameter(int index);
81
82
	// ********** result classes **********
83
84
	/**
85
	 * Return the query's result classes.
86
	 */
87
	ListIterable<String> getResultClasses();
88
		String RESULT_CLASSES_LIST = "resultClasses"; //$NON-NLS-1$
89
90
	/**
91
	 * Return the number of result classes in the query.
92
	 */
93
	int getResultClassesSize();
94
95
	/**
96
	 * Return the result class at the index.
97
	 */
98
	String getResultClass(int index);
99
100
	/**
101
	 * Add the result class to the query.
102
	 */
103
	void addResultClass(String resultClass);
104
105
	/**
106
	 * Add the result class to  the index.
107
	 */
108
	void addResultClass(int index, String resultClass);
109
110
	/**
111
	 * Remove the result class from the query's list of result classes.
112
	 */
113
	void removeResultClass(String resultClass);
114
115
	/**
116
	 * Remove the result class at the index.
117
	 */
118
	void removeResultClass(int index);		
119
	
120
	/**
121
	 * Move the result class from the source index to the target index.
122
	 */
123
	void moveResultClass(int targetIndex, int sourceIndex);
124
125
126
	// ********** result set mappings **********
127
128
	/**
129
	 * Return the query's result set mappings.
130
	 */
131
	ListIterable<String> getResultSetMappings();
132
		String RESULT_SET_MAPPINGS_LIST = "resultSetMappings"; //$NON-NLS-1$
133
134
		/**
135
		 * Return the number of result set mappings in the query.
136
		 */
137
		int getResultSetMappingsSize();
138
139
		/**
140
		 * Return the result class at the index.
141
		 */
142
		String getResultSetMapping(int index);
143
144
145
	/**
146
	 * Add the result set mapping to the query.
147
	 */
148
	void addResultSetMapping(String resultClass);
149
150
	/**
151
	 * Add the result set mapping to the index.
152
	 */
153
	void addResultSetMapping(int index, String resultClass);
154
155
	/**
156
	 * Remove the result set mapping from the query's list of result set mappings.
157
	 */
158
	void removeResultSetMapping(String resultClass);
159
160
	/**
161
	 * Remove the result set mapping at the index.
162
	 */
163
	void removeResultSetMapping(int index);
164
165
	/**
166
	 * Move the result set mapping from the source index to the target index.
167
	 */
168
	void moveResultSetMapping(int targetIndex, int sourceIndex);
169
}
(-)src/org/eclipse/jpt/jpa/core/internal/jpa2_1/context/StoredProcedureParameter2_1.java (+82 lines)
Added Link Here
1
/*******************************************************************************
2
 * Copyright (c) 2013 Oracle. All rights reserved.
3
 * This program and the accompanying materials are made available under the
4
 * terms of the Eclipse Public License v1.0, which accompanies this distribution
5
 * and is available at http://www.eclipse.org/legal/epl-v10.html.
6
 * 
7
 * Contributors:
8
 *     Oracle - initial API and implementation
9
 ******************************************************************************/
10
package org.eclipse.jpt.jpa.core.internal.jpa2_1.context;
11
12
import org.eclipse.jpt.jpa.core.context.JpaContextNode;
13
import org.eclipse.jpt.jpa.core.jpa2_1.ParameterMode2_1;
14
15
/**
16
 * stored procedure parameter
17
 * <p>
18
 * Provisional API: This interface is part of an interim API that is still
19
 * under development and expected to change significantly before reaching
20
 * stability. It is available at this early stage to solicit feedback from
21
 * pioneering adopters on the understanding that any code that uses this API
22
 * will almost certainly be broken (repeatedly) as the API evolves.
23
 * 
24
 * @version 3.3
25
 * @since 3.3
26
 */
27
public interface StoredProcedureParameter2_1
28
	extends JpaContextNode
29
{
30
31
	// ********* name **********
32
	String getName();
33
		String NAME_PROPERTY = "name"; //$NON-NLS-1$
34
	
35
	void setName(String name);
36
37
38
	// *********** mode *************
39
40
	/**
41
	 * Return the specified mode if present, 
42
	 * otherwise return the default lock mode.
43
	 */
44
	ParameterMode2_1 getMode();
45
	ParameterMode2_1 getSpecifiedMode();
46
	void setSpecifiedMode(ParameterMode2_1 mode);
47
		String SPECIFIED_MODE_PROPERTY = "specifiedParameterMode"; //$NON-NLS-1$
48
	ParameterMode2_1 getDefaultMode();
49
		String DEFAULT_MODE_PROPERTY = "defaultParameterMode";  //$NON-NLS-1$
50
51
52
	// ********** type ***********
53
54
	String getTypeName();
55
		String TYPE_NAME_PROPERTY = "typeName"; //$NON-NLS-1$
56
	
57
	void setTypeName(String type);
58
59
	/**
60
	 * If the type name is specified, this will return it fully qualified. If not
61
	 * specified, then it will return null
62
	 */
63
	String getFullyQualifiedTypeName();
64
		String FULLY_QUALIFIED_TYPE_NAME_PROPERTY = "fullyQualifiedTypeName"; //$NON-NLS-1$
65
66
	/**
67
	 * Return the character to be used for browsing or
68
	 * creating the type {@link org.eclipse.jdt.core.IType IType}.
69
	 * @see org.eclipse.jdt.core.IType#getFullyQualifiedName(char)
70
	 */
71
	char getTypeEnclosingTypeSeparator();
72
73
74
	// ********** validation ***********
75
76
	/**
77
	 * Return whether this stored procedure parameter is <em>equivalent</em>
78
	 * to the specified stored procedure parameter.
79
	 */
80
	boolean isEquivalentTo(StoredProcedureParameter2_1 parameter);
81
82
}
(-)src/org/eclipse/jpt/jpa/core/internal/jpa2_1/context/java/GenericJavaNamedStoredProcedureQuery2_1.java (+340 lines)
Added Link Here
1
/*******************************************************************************
2
 * Copyright (c) 2013 Oracle. All rights reserved.
3
 * This program and the accompanying materials are made available under the
4
 * terms of the Eclipse Public License v1.0, which accompanies this distribution
5
 * and is available at http://www.eclipse.org/legal/epl-v10.html.
6
 *
7
 * Contributors:
8
 *     Oracle - initial API and implementation
9
 ******************************************************************************/
10
package org.eclipse.jpt.jpa.core.internal.jpa2_1.context.java;
11
12
import java.util.ArrayList;
13
import java.util.Vector;
14
import org.eclipse.jpt.common.utility.internal.ObjectTools;
15
import org.eclipse.jpt.common.utility.internal.collection.ListTools;
16
import org.eclipse.jpt.common.utility.internal.iterable.IterableTools;
17
import org.eclipse.jpt.common.utility.iterable.ListIterable;
18
import org.eclipse.jpt.jpa.core.context.Query;
19
import org.eclipse.jpt.jpa.core.context.orm.OrmQueryContainer;
20
import org.eclipse.jpt.jpa.core.internal.context.java.AbstractJavaQuery;
21
import org.eclipse.jpt.jpa.core.internal.jpa2_1.context.NamedStoredProcedureQuery2_1;
22
import org.eclipse.jpt.jpa.core.internal.jpa2_1.context.StoredProcedureParameter2_1;
23
import org.eclipse.jpt.jpa.core.internal.jpa2_1.context.orm.OrmQueryContainer2_1;
24
import org.eclipse.jpt.jpa.core.jpa2_1.resource.java.NamedStoredProcedureQuery2_1Annotation;
25
import org.eclipse.jpt.jpa.core.jpa2_1.resource.java.StoredProcedureParameter2_1Annotation;
26
27
/**
28
 * <code>orm.xml</code> named stored procedure query
29
 */
30
public class GenericJavaNamedStoredProcedureQuery2_1
31
	extends AbstractJavaQuery<NamedStoredProcedureQuery2_1Annotation>
32
	implements JavaNamedStoredProcedureQuery2_1
33
{
34
		protected String procedureName;
35
		
36
		protected final ContextListContainer<JavaStoredProcedureParameter2_1, StoredProcedureParameter2_1Annotation> parameterContainer;
37
38
		protected final Vector<String> resultClasses = new Vector<String>();
39
40
		protected final Vector<String> resultSetMappings = new Vector<String>();
41
42
43
		public GenericJavaNamedStoredProcedureQuery2_1(JavaQueryContainer2_1 parent, NamedStoredProcedureQuery2_1Annotation queryAnnotation) {
44
			super(parent, queryAnnotation);
45
			this.procedureName = queryAnnotation.getProcedureName();
46
			this.parameterContainer = this.buildParameterContainer();
47
			this.initializeResultClasses();
48
			this.initializeResultSetMappings();
49
		}
50
51
52
		// ********** synchronize/update **********
53
54
		@Override
55
		public void synchronizeWithResourceModel() {
56
			super.synchronizeWithResourceModel();
57
			this.setProcedureName_(this.queryAnnotation.getProcedureName());
58
			this.syncParameters();
59
			this.syncResultClasses();
60
			this.syncResultSetMappings();
61
		}
62
63
		@Override
64
		public void update() {
65
			super.update();
66
			this.updateNodes(this.getParameters());
67
		}
68
69
70
	// ********* procedure name ********
71
72
	public String getProcedureName() {
73
		return this.procedureName;
74
	}
75
76
	public void setProcedureName(String procedureName) {
77
		this.queryAnnotation.setProcedureName(procedureName);
78
		this.setProcedureName_(procedureName);
79
	}
80
	
81
	protected void setProcedureName_(String procedureName) {
82
		String old = this.procedureName;
83
		this.procedureName = procedureName;
84
		this.firePropertyChanged(PROCEDURE_NAME_PROPERTY, old, procedureName);
85
	}
86
87
	// ************ parameters ***********
88
89
	public ListIterable<JavaStoredProcedureParameter2_1> getParameters() {
90
		return this.parameterContainer.getContextElements();
91
	}
92
93
	public int getParametersSize() {
94
		return this.parameterContainer.getContextElementsSize();
95
	}
96
	
97
	public JavaStoredProcedureParameter2_1 addParameter() {
98
		return this.addParameter(this.getParametersSize());
99
	}
100
101
	public JavaStoredProcedureParameter2_1 addParameter(int index) {
102
		StoredProcedureParameter2_1Annotation annotation = this.queryAnnotation.addParameter(index);
103
		return this.parameterContainer.addContextElement(index, annotation);
104
	}
105
106
	public void removeParameter(StoredProcedureParameter2_1 parameter) {
107
		this.removeParameter(this.parameterContainer.indexOfContextElement((JavaStoredProcedureParameter2_1) parameter));
108
	}
109
110
	public void removeParameter(int index) {
111
		this.queryAnnotation.removeParameter(index);
112
		this.parameterContainer.removeContextElement(index);
113
	}
114
115
	public void moveParameter(int targetIndex, int sourceIndex) {
116
		this.queryAnnotation.moveParameter(targetIndex, sourceIndex);
117
		this.parameterContainer.moveContextElement(targetIndex, sourceIndex);
118
	}
119
120
	public JavaStoredProcedureParameter2_1 getParameter(int index) {
121
		return this.parameterContainer.get(index);
122
	}
123
124
	protected JavaStoredProcedureParameter2_1 buildParameter(StoredProcedureParameter2_1Annotation parameterAnnotation) {
125
		return this.isJpa2_1Compatible() ?
126
				this.getJpaFactory2_1().buildJavaStoredProcedureParameter2_1(this, parameterAnnotation) :
127
				null;
128
	}
129
130
	protected void syncParameters() {
131
		this.parameterContainer.synchronizeWithResourceModel();
132
	}
133
134
	protected ListIterable<StoredProcedureParameter2_1Annotation> getParameterAnnotations() {
135
		return this.queryAnnotation.getParameters();
136
	}
137
138
	protected ContextListContainer<JavaStoredProcedureParameter2_1, StoredProcedureParameter2_1Annotation> buildParameterContainer() {
139
		ParameterContainer container = new ParameterContainer();
140
		container.initialize();
141
		return container;
142
	}
143
144
	/**
145
	 * stored procedure parameter container
146
	 */
147
	protected class ParameterContainer
148
		extends ContextListContainer<JavaStoredProcedureParameter2_1, StoredProcedureParameter2_1Annotation>
149
	{
150
		@Override
151
		protected String getContextElementsPropertyName() {
152
			return PARAMETERS_LIST;
153
		}
154
		@Override
155
		protected JavaStoredProcedureParameter2_1 buildContextElement(StoredProcedureParameter2_1Annotation resourceElement) {
156
			return GenericJavaNamedStoredProcedureQuery2_1.this.buildParameter(resourceElement);
157
		}
158
		@Override
159
		protected ListIterable<StoredProcedureParameter2_1Annotation> getResourceElements() {
160
			return GenericJavaNamedStoredProcedureQuery2_1.this.getParameterAnnotations();
161
		}
162
		@Override
163
		protected StoredProcedureParameter2_1Annotation getResourceElement(JavaStoredProcedureParameter2_1 contextElement) {
164
			return contextElement.getStoredProcedureParameter2_1Annotation();
165
		}
166
	}
167
168
169
	// *********** result classes **********
170
171
	public ListIterable<String> getResultClasses() {
172
		return IterableTools.cloneLive(this.resultClasses);
173
	}
174
175
	public int getResultClassesSize() {
176
		return this.resultClasses.size();
177
	}
178
	
179
	public String getResultClass(int index) {
180
		return this.resultClasses.get(index);
181
	}
182
	
183
	public void addResultClass(String resultClass) {
184
		this.addResultClass(this.resultClasses.size(), resultClass);
185
	}
186
	
187
	public void addResultClass(int index, String resultClass) {
188
		this.queryAnnotation.addResultClass(index, resultClass);
189
		this.addItemToList(index, resultClass, this.resultClasses, RESULT_CLASSES_LIST);
190
	}
191
192
	public void removeResultClass(String resultClass) {
193
		this.removeResultClass(this.resultClasses.indexOf(resultClass));
194
	}
195
196
	public void removeResultClass(int index) {
197
		this.queryAnnotation.removeResultClass(index);
198
		this.removeItemFromList(index, this.resultClasses, RESULT_CLASSES_LIST);
199
	}
200
201
	public void moveResultClass(int targetIndex, int sourceIndex) {
202
		this.queryAnnotation.moveResultClass(targetIndex, sourceIndex);
203
		this.moveItemInList(targetIndex, sourceIndex, this.resultClasses, RESULT_CLASSES_LIST);
204
	}
205
	
206
	protected void initializeResultClasses() {
207
		for (String resultClass : this.getResourceResultClasses()) {
208
			this.resultClasses.add(resultClass);
209
		}
210
	}
211
212
	protected void syncResultClasses() {
213
		this.synchronizeList(this.getResourceResultClasses(), this.resultClasses, RESULT_CLASSES_LIST);
214
	}
215
216
	protected Iterable<String> getResourceResultClasses() {
217
		return this.queryAnnotation.getResultClasses();
218
	}
219
220
221
	// *********** result set mappings *********
222
223
	public ListIterable<String> getResultSetMappings() {
224
		return IterableTools.cloneLive(this.resultSetMappings);
225
	}
226
227
	public int getResultSetMappingsSize() {
228
		return this.resultSetMappings.size();
229
	}
230
	
231
	public String getResultSetMapping(int index) {
232
		return this.resultSetMappings.get(index);
233
	}
234
	
235
	public void addResultSetMapping(String resultSetMapping) {
236
		this.addResultSetMapping(this.resultSetMappings.size(), resultSetMapping);
237
	}
238
	
239
	public void addResultSetMapping(int index, String resultSetMapping) {
240
		this.queryAnnotation.addResultSetMapping(index, resultSetMapping);
241
		this.addItemToList(index, resultSetMapping, this.resultSetMappings, RESULT_SET_MAPPINGS_LIST);
242
	}
243
244
	public void removeResultSetMapping(String resultSetMapping) {
245
		this.removeResultSetMapping(this.resultSetMappings.indexOf(resultSetMapping));
246
	}
247
248
	public void removeResultSetMapping(int index) {
249
		this.queryAnnotation.removeResultSetMapping(index);
250
		this.removeItemFromList(index, this.resultSetMappings, RESULT_SET_MAPPINGS_LIST);
251
	}
252
253
	public void moveResultSetMapping(int targetIndex, int sourceIndex) {
254
		this.queryAnnotation.moveResultSetMapping(targetIndex, sourceIndex);
255
		this.moveItemInList(targetIndex, sourceIndex, this.resultSetMappings, RESULT_SET_MAPPINGS_LIST);
256
	}
257
	
258
	protected void initializeResultSetMappings() {
259
		for (String resultSetMapping : this.getResourceResultSetMappings()) {
260
			this.resultSetMappings.add(resultSetMapping);
261
		}
262
	}
263
264
	protected void syncResultSetMappings() {
265
		this.synchronizeList(this.getResourceResultSetMappings(), this.resultSetMappings, RESULT_SET_MAPPINGS_LIST);
266
	}
267
268
	protected Iterable<String> getResourceResultSetMappings() {
269
		return this.queryAnnotation.getResultSetMappings();
270
	}
271
272
	@Override
273
	public void toString(StringBuilder sb) {
274
		sb.append(this.resultClasses);
275
		sb.append(this.resultSetMappings);
276
	}
277
278
279
	// ********** metadata conversion *********
280
	
281
	public void convertTo(OrmQueryContainer queryContainer) {
282
		((OrmQueryContainer2_1) queryContainer).addNamedStoredProcedureQuery().convertFrom(this);
283
	}
284
285
	public void delete() {
286
		this.getParent().removeNamedStoredProcedureQuery(this);
287
	}
288
289
290
	// ********** validation **********
291
292
	@Override
293
	protected boolean isEquivalentTo(Query other) {
294
		return super.isEquivalentTo(other)
295
				&& this.isEquivalentTo((NamedStoredProcedureQuery2_1) other);
296
	}
297
298
	protected boolean isEquivalentTo(NamedStoredProcedureQuery2_1 other) {
299
		return ObjectTools.equals(this.procedureName, other.getProcedureName()) &&
300
				this.parametersAreEquivalentTo(other) &&
301
				this.valuesAreEquivalent(other, this.getResultClasses(), other.getResultClasses()) &&
302
				this.valuesAreEquivalent(other, this.getResultSetMappings(), other.getResultSetMappings());
303
	}
304
305
	protected boolean valuesAreEquivalent(NamedStoredProcedureQuery2_1 other, ListIterable<String> list1, ListIterable<String> list2) {
306
		ArrayList<String> stringList1 = ListTools.list(list1);
307
		ArrayList<String> stringList2 = ListTools.list(list2);
308
		if (stringList1.size() != stringList2.size()) {
309
			return false;
310
		}
311
		for (int i = 0; i < stringList1.size(); i++) {
312
			if ( !ObjectTools.equals(stringList1.get(i), stringList2.get(i))) {
313
				return false;
314
			}
315
		}
316
		return true;
317
	}
318
319
	protected boolean parametersAreEquivalentTo(NamedStoredProcedureQuery2_1 other) {
320
		// get fixed lists of the stored procedure parameters
321
		ArrayList<JavaStoredProcedureParameter2_1> parameter1 = ListTools.list(this.getParameters());
322
		ArrayList<? extends StoredProcedureParameter2_1> parameter2 = ListTools.list(other.getParameters());
323
		if (parameter1.size() != parameter2.size()) {
324
			return false;
325
		}
326
		for (int i = 0; i < parameter1.size(); i++) {
327
			if ( ! parameter1.get(i).isEquivalentTo(parameter2.get(i))) {
328
				return false;
329
			}
330
		}
331
		return true;
332
	}
333
334
	// ********** misc **********
335
336
	public Class<NamedStoredProcedureQuery2_1> getType() {
337
		return NamedStoredProcedureQuery2_1.class;
338
	}
339
340
}
(-)src/org/eclipse/jpt/jpa/core/internal/jpa2_1/context/java/GenericJavaStoredProcedureParameter2_1.java (+189 lines)
Added Link Here
1
/*******************************************************************************
2
 * Copyright (c) 2013 Oracle. All rights reserved.
3
 * This program and the accompanying materials are made available under the
4
 * terms of the Eclipse Public License v1.0, which accompanies this distribution
5
 * and is available at http://www.eclipse.org/legal/epl-v10.html.
6
 *
7
 * Contributors:
8
 *     Oracle - initial API and implementation
9
 ******************************************************************************/
10
package org.eclipse.jpt.jpa.core.internal.jpa2_1.context.java;
11
12
import org.eclipse.jpt.common.core.utility.TextRange;
13
import org.eclipse.jpt.common.utility.internal.ObjectTools;
14
import org.eclipse.jpt.jpa.core.context.java.JavaQuery;
15
import org.eclipse.jpt.jpa.core.internal.context.java.AbstractJavaJpaContextNode;
16
import org.eclipse.jpt.jpa.core.internal.jpa2_1.context.StoredProcedureParameter2_1;
17
import org.eclipse.jpt.jpa.core.jpa2_1.ParameterMode2_1;
18
import org.eclipse.jpt.jpa.core.jpa2_1.resource.java.StoredProcedureParameter2_1Annotation;
19
20
/**
21
 * Java stored procedure parameter
22
 */
23
public class GenericJavaStoredProcedureParameter2_1
24
	extends AbstractJavaJpaContextNode
25
	implements JavaStoredProcedureParameter2_1
26
{
27
	protected final StoredProcedureParameter2_1Annotation parameterAnnotation;
28
29
	protected String name;
30
	
31
	protected ParameterMode2_1 specifiedMode;
32
	protected ParameterMode2_1 defaultMode;
33
	
34
	protected String typeName;
35
	protected String fullyQualifiedTypeName;
36
37
38
	public GenericJavaStoredProcedureParameter2_1(JavaQuery parent, StoredProcedureParameter2_1Annotation parameterAnnotation) {
39
		super(parent);
40
		this.parameterAnnotation = parameterAnnotation;
41
		this.name = parameterAnnotation.getName();
42
		this.specifiedMode = this.buildSpecifiedMode();
43
		this.typeName = parameterAnnotation.getTypeName();
44
	}
45
46
47
	// ********** synchronize/update **********
48
49
	@Override
50
	public void synchronizeWithResourceModel() {
51
		super.synchronizeWithResourceModel();
52
		this.setName_(this.parameterAnnotation.getName());
53
		this.setSpecifiedMode_(this.buildSpecifiedMode());
54
		this.setTypeName_(this.parameterAnnotation.getTypeName());
55
	}
56
57
	@Override
58
	public void update() {
59
		super.update();
60
		this.setDefaultMode(this.buildDefaultMode());
61
		this.setFullyQualifiedTypeName(this.buildFullyQualifiedTypeName());
62
	}
63
64
	// ********* name **************
65
66
	public String getName() {
67
		return this.name;
68
	}
69
70
	public void setName(String name) {
71
		this.parameterAnnotation.setName(name);
72
		this.setName_(name);
73
	}
74
75
	protected void setName_(String name) {
76
		String old = this.name;
77
		this.name = name;
78
		this.firePropertyChanged(NAME_PROPERTY, old, name);
79
	}
80
81
82
	// ********** mode **********
83
84
	public ParameterMode2_1 getMode() {
85
		return (this.specifiedMode != null) ? this.specifiedMode : this.defaultMode;
86
	}
87
88
	public ParameterMode2_1 getSpecifiedMode() {
89
		return this.specifiedMode;
90
	}
91
92
	public void setSpecifiedMode(ParameterMode2_1 mode) {
93
		((StoredProcedureParameter2_1Annotation) this.parameterAnnotation).setMode(ParameterMode2_1.toJavaResourceModel(mode));
94
		this.setSpecifiedMode_(mode);
95
	}
96
97
	protected void setSpecifiedMode_(ParameterMode2_1 mode) {
98
		ParameterMode2_1 old = this.specifiedMode;
99
		this.specifiedMode = mode;
100
		this.firePropertyChanged(SPECIFIED_MODE_PROPERTY, old, mode);
101
	}
102
103
	protected ParameterMode2_1 buildSpecifiedMode() {
104
		return this.isJpa2_1Compatible() ?
105
			ParameterMode2_1.fromJavaResourceModel(((StoredProcedureParameter2_1Annotation) this.parameterAnnotation).getMode()) :
106
			null;
107
	}
108
109
	public ParameterMode2_1 getDefaultMode() {
110
		return this.defaultMode;
111
	}
112
113
	protected void setDefaultMode(ParameterMode2_1 mode) {
114
		ParameterMode2_1 old = this.defaultMode;
115
		this.defaultMode = mode;
116
		this.firePropertyChanged(DEFAULT_MODE_PROPERTY, old, mode);
117
	}
118
119
	protected ParameterMode2_1 buildDefaultMode() {
120
		return this.isJpa2_1Compatible() ?  ParameterMode2_1.IN : null;
121
	}
122
123
124
	// ********** type **********
125
126
	public String getTypeName() {
127
		return this.typeName;
128
	}
129
130
	public void setTypeName(String typeName) {
131
		this.parameterAnnotation.setTypeName(typeName);
132
		this.setTypeName_(typeName);
133
	}
134
135
	protected void setTypeName_(String typeName) {
136
		String old = this.typeName;
137
		this.typeName = typeName;
138
		this.firePropertyChanged(TYPE_NAME_PROPERTY, old, typeName);
139
	}
140
141
	public String getFullyQualifiedTypeName() {
142
		return this.fullyQualifiedTypeName;
143
	}
144
145
	protected void setFullyQualifiedTypeName(String typeName) {
146
		String old = this.fullyQualifiedTypeName;
147
		this.fullyQualifiedTypeName = typeName;
148
		this.firePropertyChanged(FULLY_QUALIFIED_TYPE_NAME_PROPERTY, old, typeName);
149
	}
150
151
	protected String buildFullyQualifiedTypeName() {
152
		return this.parameterAnnotation.getFullyQualifiedTypeName();
153
	}
154
155
	public char getTypeEnclosingTypeSeparator() {
156
		return '.';
157
	}
158
159
160
	// ********** validation **********
161
162
	public TextRange getValidationTextRange() {
163
		TextRange textRange = this.parameterAnnotation.getTextRange();
164
		return (textRange != null) ? textRange : this.getQuery().getValidationTextRange();
165
	}
166
167
	public boolean isEquivalentTo(StoredProcedureParameter2_1 parameter) {
168
		return ObjectTools.equals(this.name, parameter.getName()) &&
169
				ObjectTools.equals(this.specifiedMode, parameter.getMode()) &&
170
				ObjectTools.equals(this.typeName, parameter.getTypeName()) ;
171
	}
172
173
174
	// ********** misc **********
175
176
	@Override
177
	public JavaQuery getParent() {
178
		return (JavaQuery) super.getParent();
179
	}
180
181
	protected JavaQuery getQuery() {
182
		return this.getParent();
183
	}
184
185
	public StoredProcedureParameter2_1Annotation getStoredProcedureParameter2_1Annotation() {
186
		return this.parameterAnnotation;
187
	}
188
189
}
(-)src/org/eclipse/jpt/jpa/core/internal/jpa2_1/context/java/JavaNamedStoredProcedureQuery2_1.java (+41 lines)
Added Link Here
1
/*******************************************************************************
2
 * Copyright (c) 2013 Oracle. All rights reserved.
3
 * This program and the accompanying materials are made available under the
4
 * terms of the Eclipse Public License v1.0, which accompanies this distribution
5
 * and is available at http://www.eclipse.org/legal/epl-v10.html.
6
 * 
7
 * Contributors:
8
 *     Oracle - initial API and implementation
9
 ******************************************************************************/
10
package org.eclipse.jpt.jpa.core.internal.jpa2_1.context.java;
11
12
import org.eclipse.jpt.common.utility.iterable.ListIterable;
13
import org.eclipse.jpt.jpa.core.context.java.JavaQuery;
14
import org.eclipse.jpt.jpa.core.internal.jpa2_1.context.NamedStoredProcedureQuery2_1;
15
import org.eclipse.jpt.jpa.core.jpa2_1.resource.java.NamedStoredProcedureQuery2_1Annotation;
16
17
/**
18
 * Java named stored procedure query
19
 * <p>
20
 * Provisional API: This interface is part of an interim API that is still
21
 * under development and expected to change significantly before reaching
22
 * stability. It is available at this early stage to solicit feedback from
23
 * pioneering adopters on the understanding that any code that uses this API
24
 * will almost certainly be broken (repeatedly) as the API evolves.
25
 * 
26
 * @version 3.3
27
 * @since 3.3
28
 */
29
public interface JavaNamedStoredProcedureQuery2_1
30
	extends NamedStoredProcedureQuery2_1, JavaQuery
31
{
32
	NamedStoredProcedureQuery2_1Annotation getQueryAnnotation();
33
34
	// *********** parameters ************
35
	
36
	ListIterable<JavaStoredProcedureParameter2_1> getParameters();
37
38
	JavaStoredProcedureParameter2_1 addParameter();
39
40
	JavaStoredProcedureParameter2_1 addParameter(int index);
41
}
(-)src/org/eclipse/jpt/jpa/core/internal/jpa2_1/context/java/JavaQueryContainer2_1.java (+38 lines)
Added Link Here
1
/*******************************************************************************
2
 * Copyright (c) 2013 Oracle. All rights reserved.
3
 * This program and the accompanying materials are made available under the
4
 * terms of the Eclipse Public License v1.0, which accompanies this distribution
5
 * and is available at http://www.eclipse.org/legal/epl-v10.html.
6
 *
7
 * Contributors:
8
 *     Oracle - initial API and implementation
9
 ******************************************************************************/
10
package org.eclipse.jpt.jpa.core.internal.jpa2_1.context.java;
11
12
import org.eclipse.jpt.common.utility.iterable.ListIterable;
13
import org.eclipse.jpt.jpa.core.context.java.JavaQueryContainer;
14
15
/**
16
 * Java query container for JPA 2.1
17
 * <p>
18
 * Provisional API: This interface is part of an interim API that is still
19
 * under development and expected to change significantly before reaching
20
 * stability. It is available at this early stage to solicit feedback from
21
 * pioneering adopters on the understanding that any code that uses this API
22
 * will almost certainly be broken (repeatedly) as the API evolves.
23
 *
24
 * @version 3.3
25
 * @since 3.3
26
 */
27
public interface JavaQueryContainer2_1
28
	extends JavaQueryContainer
29
{
30
	// ********** named stored procedure queries **********
31
32
	ListIterable<JavaNamedStoredProcedureQuery2_1> getNamedStoredProcedureQueries();
33
34
	JavaNamedStoredProcedureQuery2_1 addNamedStoredProcedureQuery();
35
36
	JavaNamedStoredProcedureQuery2_1 addNamedStoredProcedureQuery(int index);
37
38
}
(-)src/org/eclipse/jpt/jpa/core/internal/jpa2_1/context/java/JavaStoredProcedureParameter2_1.java (+31 lines)
Added Link Here
1
/*******************************************************************************
2
 * Copyright (c) 2013 Oracle. All rights reserved.
3
 * This program and the accompanying materials are made available under the
4
 * terms of the Eclipse Public License v1.0, which accompanies this distribution
5
 * and is available at http://www.eclipse.org/legal/epl-v10.html.
6
 * 
7
 * Contributors:
8
 *     Oracle - initial API and implementation
9
 ******************************************************************************/
10
package org.eclipse.jpt.jpa.core.internal.jpa2_1.context.java;
11
12
import org.eclipse.jpt.jpa.core.internal.jpa2_1.context.StoredProcedureParameter2_1;
13
import org.eclipse.jpt.jpa.core.jpa2_1.resource.java.StoredProcedureParameter2_1Annotation;
14
15
/**
16
 * Java stored procedure parameter
17
 * <p>
18
 * Provisional API: This interface is part of an interim API that is still
19
 * under development and expected to change significantly before reaching
20
 * stability. It is available at this early stage to solicit feedback from
21
 * pioneering adopters on the understanding that any code that uses this API
22
 * will almost certainly be broken (repeatedly) as the API evolves.
23
 * 
24
 * @version 3.3
25
 * @since 3.3
26
 */
27
public interface JavaStoredProcedureParameter2_1
28
	extends StoredProcedureParameter2_1
29
{
30
	StoredProcedureParameter2_1Annotation getStoredProcedureParameter2_1Annotation();
31
}
(-)src/org/eclipse/jpt/jpa/core/internal/jpa2_1/context/orm/GenericOrmNamedStoredProcedureQuery2_1.java (+353 lines)
Added Link Here
1
/*******************************************************************************
2
 * Copyright (c) 2013 Oracle. All rights reserved.
3
 * This program and the accompanying materials are made available under the
4
 * terms of the Eclipse Public License v1.0, which accompanies this distribution
5
 * and is available at http://www.eclipse.org/legal/epl-v10.html.
6
 * 
7
 * Contributors:
8
 *     Oracle - initial API and implementation
9
 ******************************************************************************/
10
package org.eclipse.jpt.jpa.core.internal.jpa2_1.context.orm;
11
12
import java.util.ArrayList;
13
import java.util.Vector;
14
import org.eclipse.jpt.common.utility.internal.ObjectTools;
15
import org.eclipse.jpt.common.utility.internal.collection.ListTools;
16
import org.eclipse.jpt.common.utility.internal.iterable.IterableTools;
17
import org.eclipse.jpt.common.utility.iterable.ListIterable;
18
import org.eclipse.jpt.jpa.core.context.JpaContextNode;
19
import org.eclipse.jpt.jpa.core.context.Query;
20
import org.eclipse.jpt.jpa.core.internal.context.orm.AbstractOrmQuery;
21
import org.eclipse.jpt.jpa.core.internal.jpa2_1.context.NamedStoredProcedureQuery2_1;
22
import org.eclipse.jpt.jpa.core.internal.jpa2_1.context.StoredProcedureParameter2_1;
23
import org.eclipse.jpt.jpa.core.internal.jpa2_1.context.java.JavaNamedStoredProcedureQuery2_1;
24
import org.eclipse.jpt.jpa.core.internal.jpa2_1.context.java.JavaStoredProcedureParameter2_1;
25
import org.eclipse.jpt.jpa.core.resource.orm.OrmFactory;
26
import org.eclipse.jpt.jpa.core.resource.orm.XmlNamedStoredProcedureQuery;
27
import org.eclipse.jpt.jpa.core.resource.orm.XmlStoredProcedureParameter;
28
29
public class GenericOrmNamedStoredProcedureQuery2_1
30
	extends AbstractOrmQuery<XmlNamedStoredProcedureQuery>
31
	implements OrmNamedStoredProcedureQuery2_1
32
{
33
	protected String procedureName;
34
	
35
	protected final ContextListContainer<OrmStoredProcedureParameter2_1, XmlStoredProcedureParameter> parameterContainer;
36
37
	protected final Vector<String> resultClasses = new Vector<String>();
38
39
	protected final Vector<String> resultSetMappings = new Vector<String>();
40
41
42
	public GenericOrmNamedStoredProcedureQuery2_1(JpaContextNode parent, XmlNamedStoredProcedureQuery xmlNamedStoredProcedureQuery) {
43
		super(parent, xmlNamedStoredProcedureQuery);
44
		this.procedureName = this.xmlQuery.getProcedureName();
45
		this.parameterContainer = this.buildParameterContainer();
46
		this.initializeResultClasses();
47
		this.initializeResultSetMappings();
48
	}
49
50
51
	// ********** synchronize/update **********
52
53
	@Override
54
	public void synchronizeWithResourceModel() {
55
		super.synchronizeWithResourceModel();
56
		this.setProcedureName_(this.xmlQuery.getProcedureName());
57
		this.syncParameters();
58
		this.syncResultClasses();
59
		this.syncResultSetMappings();
60
	}
61
62
	@Override
63
	public void update() {
64
		super.update();
65
		this.updateNodes(this.getParameters());
66
	}
67
68
69
// ********* procedure name ********
70
71
public String getProcedureName() {
72
	return this.procedureName;
73
}
74
75
public void setProcedureName(String procedureName) {
76
	this.xmlQuery.setProcedureName(procedureName);
77
	this.setProcedureName_(procedureName);
78
}
79
80
protected void setProcedureName_(String procedureName) {
81
	String old = this.procedureName;
82
	this.procedureName = procedureName;
83
	this.firePropertyChanged(PROCEDURE_NAME_PROPERTY, old, procedureName);
84
}
85
86
// ********** parameters **********
87
88
public ListIterable<OrmStoredProcedureParameter2_1> getParameters() {
89
	return this.parameterContainer.getContextElements();
90
}
91
92
public int getParametersSize() {
93
	return this.parameterContainer.getContextElementsSize();
94
}
95
96
public OrmStoredProcedureParameter2_1 addParameter() {
97
	return this.addParameter(this.getParametersSize());
98
}
99
100
public OrmStoredProcedureParameter2_1 addParameter(int index) {
101
	XmlStoredProcedureParameter xmlParameter = this.buildXmlStoredProcedureParameter();
102
	OrmStoredProcedureParameter2_1 parameter = this.parameterContainer.addContextElement(index, xmlParameter);
103
	this.xmlQuery.getParameters().add(index, xmlParameter);
104
	return parameter;
105
}
106
107
protected XmlStoredProcedureParameter buildXmlStoredProcedureParameter() {
108
	return OrmFactory.eINSTANCE.createXmlStoredProcedureParameter();
109
}
110
111
public void removeParameter(StoredProcedureParameter2_1 parameter) {
112
	this.removeParameter(this.parameterContainer.indexOfContextElement((OrmStoredProcedureParameter2_1) parameter));
113
}
114
115
public void removeParameter(int index) {
116
	this.parameterContainer.removeContextElement(index);
117
	this.xmlQuery.getParameters().remove(index);
118
}
119
120
public void moveParameter(int targetIndex, int sourceIndex) {
121
	this.parameterContainer.moveContextElement(targetIndex, sourceIndex);
122
	this.xmlQuery.getParameters().move(targetIndex, sourceIndex);
123
}
124
125
public OrmStoredProcedureParameter2_1 getParameter(int index) {
126
	return this.parameterContainer.get(index);
127
}
128
129
protected OrmStoredProcedureParameter2_1 buildParameter(XmlStoredProcedureParameter xmlParameter) {
130
	return this.isOrmXml2_1Compatible() ?
131
			this.getContextNodeFactory2_1().buildOrmStoredProcedureParameter(this, xmlParameter) : 
132
			null;
133
}
134
135
protected void syncParameters() {
136
	this.parameterContainer.synchronizeWithResourceModel();
137
}
138
139
protected ListIterable<XmlStoredProcedureParameter> getXmlParameters() {
140
	// clone to reduce chance of concurrency problems
141
	return IterableTools.cloneLive(this.xmlQuery.getParameters());
142
}
143
144
protected ContextListContainer<OrmStoredProcedureParameter2_1, XmlStoredProcedureParameter> buildParameterContainer() {
145
	ParameterContainer container = new ParameterContainer();
146
	container.initialize();
147
	return container;
148
}
149
150
/**
151
 * query hint container
152
 */
153
protected class ParameterContainer
154
	extends ContextListContainer<OrmStoredProcedureParameter2_1, XmlStoredProcedureParameter>
155
{
156
	@Override
157
	protected String getContextElementsPropertyName() {
158
		return PARAMETERS_LIST;
159
	}
160
	@Override
161
	protected OrmStoredProcedureParameter2_1 buildContextElement(XmlStoredProcedureParameter resourceElement) {
162
		return GenericOrmNamedStoredProcedureQuery2_1.this.buildParameter(resourceElement);
163
	}
164
	@Override
165
	protected ListIterable<XmlStoredProcedureParameter> getResourceElements() {
166
		return GenericOrmNamedStoredProcedureQuery2_1.this.getXmlParameters();
167
	}
168
	@Override
169
	protected XmlStoredProcedureParameter getResourceElement(OrmStoredProcedureParameter2_1 contextElement) {
170
		return contextElement.getXmlStoredProcedureParameter();
171
	}
172
}
173
174
175
// *********** result classes **********
176
177
public ListIterable<String> getResultClasses() {
178
	return IterableTools.cloneLive(this.resultClasses);
179
}
180
181
public int getResultClassesSize() {
182
	return this.resultClasses.size();
183
}
184
185
public String getResultClass(int index) {
186
	return this.resultClasses.get(index);
187
}
188
189
public void addResultClass(String resultClass) {
190
	this.addResultClass(this.resultClasses.size(), resultClass);
191
}
192
193
public void addResultClass(int index, String resultClass) {
194
	this.addItemToList(index, resultClass, this.resultClasses, RESULT_CLASSES_LIST);
195
	this.xmlQuery.getResultClasses().add(index, resultClass);
196
}
197
198
public void removeResultClass(String resultClass) {
199
	this.removeResultClass(this.resultClasses.indexOf(resultClass));
200
}
201
202
public void removeResultClass(int index) {
203
	this.removeItemFromList(index, this.resultClasses, RESULT_CLASSES_LIST);
204
	this.xmlQuery.getResultClasses().remove(index);
205
}
206
207
public void moveResultClass(int targetIndex, int sourceIndex) {
208
	this.moveItemInList(targetIndex, sourceIndex, this.resultClasses, RESULT_CLASSES_LIST);
209
	this.xmlQuery.getResultClasses().move(targetIndex, sourceIndex);
210
}
211
212
protected void initializeResultClasses() {
213
	for (String resultClass : this.getResourceResultClasses()) {
214
		this.resultClasses.add(resultClass);
215
	}
216
}
217
218
protected void syncResultClasses() {
219
	this.synchronizeList(this.getResourceResultClasses(), this.resultClasses, RESULT_CLASSES_LIST);
220
}
221
222
protected Iterable<String> getResourceResultClasses() {
223
	return this.xmlQuery.getResultClasses();
224
}
225
226
227
// *********** result set mappings *********
228
229
public ListIterable<String> getResultSetMappings() {
230
	return IterableTools.cloneLive(this.resultSetMappings);
231
}
232
233
public int getResultSetMappingsSize() {
234
	return this.resultSetMappings.size();
235
}
236
237
public String getResultSetMapping(int index) {
238
	return this.resultSetMappings.get(index);
239
}
240
241
public void addResultSetMapping(String resultSetMapping) {
242
	this.addResultSetMapping(this.resultSetMappings.size(), resultSetMapping);
243
}
244
245
public void addResultSetMapping(int index, String resultSetMapping) {
246
	this.addItemToList(index, resultSetMapping, this.resultSetMappings, RESULT_SET_MAPPINGS_LIST);
247
	this.xmlQuery.getResultSetMappings().add(index, resultSetMapping);
248
}
249
250
public void removeResultSetMapping(String resultSetMapping) {
251
	this.removeResultSetMapping(this.resultSetMappings.indexOf(resultSetMapping));
252
}
253
254
public void removeResultSetMapping(int index) {
255
	this.removeItemFromList(index, this.resultSetMappings, RESULT_SET_MAPPINGS_LIST);
256
	this.xmlQuery.getResultSetMappings().remove(index);
257
}
258
259
public void moveResultSetMapping(int targetIndex, int sourceIndex) {
260
	this.moveItemInList(targetIndex, sourceIndex, this.resultSetMappings, RESULT_SET_MAPPINGS_LIST);
261
	this.xmlQuery.getResultSetMappings().move(targetIndex, sourceIndex);
262
}
263
264
protected void initializeResultSetMappings() {
265
	for (String resultSetMapping : this.getResourceResultSetMappings()) {
266
		this.resultSetMappings.add(resultSetMapping);
267
	}
268
}
269
270
protected void syncResultSetMappings() {
271
	this.synchronizeList(this.getResourceResultSetMappings(), this.resultSetMappings, RESULT_SET_MAPPINGS_LIST);
272
}
273
274
protected Iterable<String> getResourceResultSetMappings() {
275
	return this.xmlQuery.getResultSetMappings();
276
}
277
278
@Override
279
public void toString(StringBuilder sb) {
280
	sb.append(this.resultClasses);
281
	sb.append(this.resultSetMappings);
282
}
283
284
285
// ********** metadata conversion *********
286
287
public void convertFrom(JavaNamedStoredProcedureQuery2_1 javaQuery) {
288
	super.convertFrom(javaQuery);
289
	this.setName(javaQuery.getName());
290
	this.setProcedureName(javaQuery.getProcedureName());
291
	for (JavaStoredProcedureParameter2_1 javaParameter : javaQuery.getParameters()) {
292
		this.addParameter().convertFrom(javaParameter);
293
	}
294
	for (String resultClass : javaQuery.getResultClasses()) {
295
		this.addResultClass(resultClass);
296
	}
297
	for (String resultSetMapping : javaQuery.getResultSetMappings()) {
298
		this.addResultSetMapping(resultSetMapping);
299
	}
300
}
301
302
303
// ********** validation **********
304
305
@Override
306
protected boolean isEquivalentTo(Query other) {
307
	return super.isEquivalentTo(other)
308
			&& this.isEquivalentTo((NamedStoredProcedureQuery2_1) other);
309
}
310
311
protected boolean isEquivalentTo(NamedStoredProcedureQuery2_1 other) {
312
	return ObjectTools.equals(this.procedureName, other.getProcedureName()) &&
313
			this.parametersAreEquivalentTo(other) &&
314
			this.valuesAreEquivalent(other, this.getResultClasses(), other.getResultClasses()) &&
315
			this.valuesAreEquivalent(other, this.getResultSetMappings(), other.getResultSetMappings());
316
}
317
318
protected boolean valuesAreEquivalent(NamedStoredProcedureQuery2_1 other, ListIterable<String> list1, ListIterable<String> list2) {
319
	ArrayList<String> stringList1 = ListTools.list(list1);
320
	ArrayList<String> stringList2 = ListTools.list(list2);
321
	if (stringList1.size() != stringList2.size()) {
322
		return false;
323
	}
324
	for (int i = 0; i < stringList1.size(); i++) {
325
		if ( !ObjectTools.equals(stringList1.get(i), stringList2.get(i))) {
326
			return false;
327
		}
328
	}
329
	return true;
330
}
331
332
protected boolean parametersAreEquivalentTo(NamedStoredProcedureQuery2_1 other) {
333
	// get fixed lists of the stored procedure parameters
334
	ArrayList<OrmStoredProcedureParameter2_1> parameter1 = ListTools.list(this.getParameters());
335
	ArrayList<? extends StoredProcedureParameter2_1> parameter2 = ListTools.list(other.getParameters());
336
	if (parameter1.size() != parameter2.size()) {
337
		return false;
338
	}
339
	for (int i = 0; i < parameter1.size(); i++) {
340
		if ( ! parameter1.get(i).isEquivalentTo(parameter2.get(i))) {
341
			return false;
342
		}
343
	}
344
	return true;
345
}
346
347
// ********** misc **********
348
349
public Class<NamedStoredProcedureQuery2_1> getType() {
350
	return NamedStoredProcedureQuery2_1.class;
351
}
352
353
}
(-)src/org/eclipse/jpt/jpa/core/internal/jpa2_1/context/orm/GenericOrmStoredProcedureParameter2_1.java (+201 lines)
Added Link Here
1
/*******************************************************************************
2
 * Copyright (c) 2013 Oracle. All rights reserved.
3
 * This program and the accompanying materials are made available under the
4
 * terms of the Eclipse Public License v1.0, which accompanies this distribution
5
 * and is available at http://www.eclipse.org/legal/epl-v10.html.
6
 * 
7
 * Contributors:
8
 *     Oracle - initial API and implementation
9
 ******************************************************************************/
10
package org.eclipse.jpt.jpa.core.internal.jpa2_1.context.orm;
11
12
import org.eclipse.jpt.common.core.utility.TextRange;
13
import org.eclipse.jpt.common.utility.internal.ObjectTools;
14
import org.eclipse.jpt.jpa.core.context.orm.OrmQuery;
15
import org.eclipse.jpt.jpa.core.internal.context.orm.AbstractOrmXmlContextNode;
16
import org.eclipse.jpt.jpa.core.internal.jpa2_1.context.StoredProcedureParameter2_1;
17
import org.eclipse.jpt.jpa.core.internal.jpa2_1.context.java.JavaStoredProcedureParameter2_1;
18
import org.eclipse.jpt.jpa.core.jpa2_1.ParameterMode2_1;
19
import org.eclipse.jpt.jpa.core.resource.orm.XmlStoredProcedureParameter;
20
21
public class GenericOrmStoredProcedureParameter2_1
22
	extends AbstractOrmXmlContextNode
23
	implements OrmStoredProcedureParameter2_1
24
{
25
26
	protected final XmlStoredProcedureParameter xmlStoredProcedureParameter;
27
28
	protected String name;
29
	
30
	protected ParameterMode2_1 specifiedMode;
31
	protected ParameterMode2_1 defaultMode;
32
33
	protected String typeName;
34
	protected String fullyQualifiedTypeName;
35
36
37
	public GenericOrmStoredProcedureParameter2_1(
38
			OrmQuery parent,
39
			XmlStoredProcedureParameter xmlStoredProcedureParameter) {
40
		super(parent);
41
		this.xmlStoredProcedureParameter = xmlStoredProcedureParameter;
42
		this.name = xmlStoredProcedureParameter.getName();
43
		this.specifiedMode = this.buildSpecifiedMode();
44
		this.typeName = xmlStoredProcedureParameter.getClassName();
45
	}
46
47
48
	// ********** synchronize/update **********
49
50
	@Override
51
	public void synchronizeWithResourceModel() {
52
		super.synchronizeWithResourceModel();
53
		this.setName_(this.xmlStoredProcedureParameter.getName());
54
		this.setSpecifiedMode_(this.buildSpecifiedMode());
55
		this.setTypeName_(this.xmlStoredProcedureParameter.getClassName());
56
	}
57
58
	@Override
59
	public void update() {
60
		super.update();
61
		this.setDefaultMode(this.buildDefaultMode());
62
		this.setFullyQualifiedTypeName(this.buildFullyQualifiedTypeName());
63
	}
64
65
	// ********** name **********
66
67
	public String getName() {
68
		return this.name;
69
	}
70
71
	public void setName(String name) {
72
		this.setName_(name);
73
		this.xmlStoredProcedureParameter.setName(name);
74
	}
75
76
	protected void setName_(String name) {
77
		String old = this.name;
78
		this.name = name;
79
		this.firePropertyChanged(NAME_PROPERTY, old, name);
80
	}
81
82
83
	// ********** mode **********
84
85
	public ParameterMode2_1 getMode() {
86
		return (this.specifiedMode != null) ? this.specifiedMode : this.defaultMode;
87
	}
88
89
	public ParameterMode2_1 getSpecifiedMode() {
90
		return this.specifiedMode;
91
	}
92
93
	public void setSpecifiedMode(ParameterMode2_1 mode) {
94
		this.xmlStoredProcedureParameter.setMode(ParameterMode2_1.toOrmResourceModel(mode));
95
		this.setSpecifiedMode_(mode);
96
	}
97
98
	public void setSpecifiedMode_(ParameterMode2_1 mode) {
99
		ParameterMode2_1 old = this.specifiedMode;
100
		this.specifiedMode = mode;
101
		this.firePropertyChanged(SPECIFIED_MODE_PROPERTY, old, mode);
102
	}
103
104
	protected ParameterMode2_1 buildSpecifiedMode() {
105
		return this.isJpa2_1Compatible() ? 
106
				ParameterMode2_1.fromOrmResourceModel(this.xmlStoredProcedureParameter.getMode()) :
107
				null;
108
	}
109
110
	public ParameterMode2_1 getDefaultMode() {
111
		return this.defaultMode;
112
	}
113
114
	protected void setDefaultMode(ParameterMode2_1 mode) {
115
		ParameterMode2_1 old = this.defaultMode;
116
		this.defaultMode = mode;
117
		this.firePropertyChanged(DEFAULT_MODE_PROPERTY, old, mode);
118
	}
119
120
	protected ParameterMode2_1 buildDefaultMode() {
121
		return this.isJpa2_1Compatible() ? ParameterMode2_1.IN : null;
122
	}
123
124
125
	// ********** type **********
126
127
	public String getTypeName() {
128
		return this.typeName;
129
	}
130
131
	public void setTypeName(String typeName) {
132
		this.xmlStoredProcedureParameter.setClassName(typeName);
133
		this.setTypeName_(typeName);
134
	}
135
136
	protected void setTypeName_(String typeName) {
137
		String old = this.typeName;
138
		this.typeName = typeName;
139
		this.firePropertyChanged(TYPE_NAME_PROPERTY, old, typeName);
140
	}
141
142
	public String getFullyQualifiedTypeName() {
143
		return this.fullyQualifiedTypeName;
144
	}
145
146
	protected void setFullyQualifiedTypeName(String typeName) {
147
		String old = this.fullyQualifiedTypeName;
148
		this.fullyQualifiedTypeName = typeName;
149
		this.firePropertyChanged(FULLY_QUALIFIED_TYPE_NAME_PROPERTY, old, typeName);
150
	}
151
152
	protected String buildFullyQualifiedTypeName() {
153
		return this.getMappingFileRoot().qualify(this.typeName);
154
	}
155
156
	public char getTypeEnclosingTypeSeparator() {
157
		return '$';
158
	}
159
160
	// ********** metadata conversion **********
161
 
162
	public void convertFrom(JavaStoredProcedureParameter2_1 javaParameter) {
163
		this.setName(javaParameter.getName());
164
		this.setSpecifiedMode(javaParameter.getMode());
165
		this.setTypeName(javaParameter.getTypeName());
166
	}
167
168
	// ********** validation **********
169
170
	public TextRange getValidationTextRange() {
171
		TextRange textRange = this.xmlStoredProcedureParameter.getValidationTextRange();
172
		return (textRange != null) ? textRange : this.getQuery().getValidationTextRange();
173
	}
174
175
	public boolean isEquivalentTo(StoredProcedureParameter2_1 parameter) {
176
		return ObjectTools.equals(this.name, parameter.getName()) &&
177
				ObjectTools.equals(this.specifiedMode, parameter.getSpecifiedMode()) &&
178
				ObjectTools.equals(this.typeName, parameter.getTypeName());
179
	}
180
181
	// ********** misc **********
182
183
	@Override
184
	public OrmQuery getParent() {
185
		return (OrmQuery) super.getParent();
186
	}
187
188
	protected OrmQuery getQuery() {
189
		return this.getParent();
190
	}
191
192
	public XmlStoredProcedureParameter getXmlStoredProcedureParameter() {
193
		return this.xmlStoredProcedureParameter;
194
	}
195
196
	@Override
197
	public void toString(StringBuilder sb) {
198
		sb.append(this.name);
199
		sb.append(this.typeName);
200
	}
201
}
(-)src/org/eclipse/jpt/jpa/core/internal/jpa2_1/context/orm/GenericOrmXml2_1ContextNodeFactory.java (+14 lines)
Lines 14-19 Link Here
14
import org.eclipse.jpt.jpa.core.jpa2_1.context.orm.OrmConverterType2_1;
14
import org.eclipse.jpt.jpa.core.jpa2_1.context.orm.OrmConverterType2_1;
15
import org.eclipse.jpt.jpa.core.jpa2_1.context.orm.OrmXml2_1ContextNodeFactory;
15
import org.eclipse.jpt.jpa.core.jpa2_1.context.orm.OrmXml2_1ContextNodeFactory;
16
import org.eclipse.jpt.jpa.core.resource.orm.XmlConverter;
16
import org.eclipse.jpt.jpa.core.resource.orm.XmlConverter;
17
import org.eclipse.jpt.jpa.core.resource.orm.XmlNamedStoredProcedureQuery;
18
import org.eclipse.jpt.jpa.core.resource.orm.XmlStoredProcedureParameter;
17
19
18
public class GenericOrmXml2_1ContextNodeFactory
20
public class GenericOrmXml2_1ContextNodeFactory
19
	extends GenericOrmXml2_0ContextNodeFactory
21
	extends GenericOrmXml2_0ContextNodeFactory
Lines 23-26 Link Here
23
	public OrmConverterType2_1 buildOrmConverter(EntityMappings2_1 parent, XmlConverter xmlConverter) {
25
	public OrmConverterType2_1 buildOrmConverter(EntityMappings2_1 parent, XmlConverter xmlConverter) {
24
		return new GenericOrmConverterType(parent, xmlConverter);
26
		return new GenericOrmConverterType(parent, xmlConverter);
25
	}
27
	}
28
29
	public OrmNamedStoredProcedureQuery2_1 buildOrmNamedStoredProcedureQuery2_1(
30
			OrmQueryContainer2_1 parent, 
31
			XmlNamedStoredProcedureQuery xmlNamedStoredProcedureQuery) {
32
		return new GenericOrmNamedStoredProcedureQuery2_1(parent, xmlNamedStoredProcedureQuery);
33
	}
34
	
35
	public OrmStoredProcedureParameter2_1 buildOrmStoredProcedureParameter(
36
			OrmNamedStoredProcedureQuery2_1 parent,
37
			XmlStoredProcedureParameter xmlParameter) {
38
		return new GenericOrmStoredProcedureParameter2_1(parent, xmlParameter);
39
	}
26
}
40
}
(-)src/org/eclipse/jpt/jpa/core/internal/jpa2_1/context/orm/OrmNamedStoredProcedureQuery2_1.java (+39 lines)
Added Link Here
1
/*******************************************************************************
2
 * Copyright (c) 2013 Oracle. All rights reserved.
3
 * This program and the accompanying materials are made available under the
4
 * terms of the Eclipse Public License v1.0, which accompanies this distribution
5
 * and is available at http://www.eclipse.org/legal/epl-v10.html.
6
 * 
7
 * Contributors:
8
 *     Oracle - initial API and implementation
9
 ******************************************************************************/
10
package org.eclipse.jpt.jpa.core.internal.jpa2_1.context.orm;
11
12
import org.eclipse.jpt.common.utility.iterable.ListIterable;
13
import org.eclipse.jpt.jpa.core.context.orm.OrmQuery;
14
import org.eclipse.jpt.jpa.core.internal.jpa2_1.context.NamedStoredProcedureQuery2_1;
15
import org.eclipse.jpt.jpa.core.internal.jpa2_1.context.java.JavaNamedStoredProcedureQuery2_1;
16
import org.eclipse.jpt.jpa.core.resource.orm.XmlNamedStoredProcedureQuery;
17
18
public interface OrmNamedStoredProcedureQuery2_1
19
	extends OrmQuery, NamedStoredProcedureQuery2_1
20
{
21
	XmlNamedStoredProcedureQuery getXmlQuery();
22
	
23
	// *********** parameters ************
24
	
25
	ListIterable<OrmStoredProcedureParameter2_1> getParameters();
26
27
	OrmStoredProcedureParameter2_1 addParameter();
28
29
	OrmStoredProcedureParameter2_1 addParameter(int index);
30
31
	// ********** metadata conversion *********
32
	
33
	/**
34
	 * Build up a mapping file query from
35
	 * the given Java query
36
	 */
37
	void convertFrom(JavaNamedStoredProcedureQuery2_1 javaQuery);
38
39
}
(-)src/org/eclipse/jpt/jpa/core/internal/jpa2_1/context/orm/OrmQueryContainer2_1.java (+26 lines)
Added Link Here
1
/*******************************************************************************
2
 * Copyright (c) 2013 Oracle. All rights reserved.
3
 * This program and the accompanying materials are made available under the
4
 * terms of the Eclipse Public License v1.0, which accompanies this distribution
5
 * and is available at http://www.eclipse.org/legal/epl-v10.html.
6
 * 
7
 * Contributors:
8
 *     Oracle - initial API and implementation
9
 ******************************************************************************/
10
package org.eclipse.jpt.jpa.core.internal.jpa2_1.context.orm;
11
12
import org.eclipse.jpt.common.utility.iterable.ListIterable;
13
import org.eclipse.jpt.jpa.core.context.orm.OrmQueryContainer;
14
15
public interface OrmQueryContainer2_1
16
	extends OrmQueryContainer
17
{
18
	// ********** named stored procedure queries **********
19
20
	ListIterable<OrmNamedStoredProcedureQuery2_1> getNamedStoredProcedureQueries();
21
22
	OrmNamedStoredProcedureQuery2_1 addNamedStoredProcedureQuery();
23
24
	OrmNamedStoredProcedureQuery2_1 addNamedStoredProcedureQuery(int index);
25
26
}
(-)src/org/eclipse/jpt/jpa/core/internal/jpa2_1/context/orm/OrmStoredProcedureParameter2_1.java (+28 lines)
Added Link Here
1
/*******************************************************************************
2
 * Copyright (c) 2013 Oracle. All rights reserved.
3
 * This program and the accompanying materials are made available under the
4
 * terms of the Eclipse Public License v1.0, which accompanies this distribution
5
 * and is available at http://www.eclipse.org/legal/epl-v10.html.
6
 * 
7
 * Contributors:
8
 *     Oracle - initial API and implementation
9
 ******************************************************************************/
10
package org.eclipse.jpt.jpa.core.internal.jpa2_1.context.orm;
11
12
import org.eclipse.jpt.jpa.core.internal.jpa2_1.context.StoredProcedureParameter2_1;
13
import org.eclipse.jpt.jpa.core.internal.jpa2_1.context.java.JavaStoredProcedureParameter2_1;
14
import org.eclipse.jpt.jpa.core.resource.orm.XmlStoredProcedureParameter;
15
16
public interface OrmStoredProcedureParameter2_1
17
	extends StoredProcedureParameter2_1
18
{
19
	XmlStoredProcedureParameter getXmlStoredProcedureParameter();
20
21
	// ****** metadata conversion ****
22
	/**
23
	 * Build up a mapping file stored procedure parameter
24
	 * from the given Java stored procedure parameter
25
	 */
26
	void convertFrom(JavaStoredProcedureParameter2_1 javaStoredProcedureParameter);
27
28
}
(-)src/org/eclipse/jpt/jpa/core/internal/jpa2_1/resource/java/binary/BinaryStoredProcedureParameter2_1Annotation.java (-10 / +10 lines)
Lines 14-20 Link Here
14
import org.eclipse.jpt.common.core.resource.java.JavaResourceNode;
14
import org.eclipse.jpt.common.core.resource.java.JavaResourceNode;
15
import org.eclipse.jpt.common.core.utility.TextRange;
15
import org.eclipse.jpt.common.core.utility.TextRange;
16
import org.eclipse.jpt.jpa.core.jpa2_1.resource.java.JPA2_1;
16
import org.eclipse.jpt.jpa.core.jpa2_1.resource.java.JPA2_1;
17
import org.eclipse.jpt.jpa.core.jpa2_1.resource.java.ParameterMode2_1;
17
import org.eclipse.jpt.jpa.core.jpa2_1.resource.java.ParameterMode_2_1;
18
import org.eclipse.jpt.jpa.core.jpa2_1.resource.java.StoredProcedureParameter2_1Annotation;
18
import org.eclipse.jpt.jpa.core.jpa2_1.resource.java.StoredProcedureParameter2_1Annotation;
19
19
20
/**
20
/**
Lines 25-31 Link Here
25
	implements StoredProcedureParameter2_1Annotation
25
	implements StoredProcedureParameter2_1Annotation
26
{
26
{
27
	private String name;
27
	private String name;
28
	private ParameterMode2_1 mode;
28
	private ParameterMode_2_1 mode;
29
	private String type;
29
	private String type;
30
30
31
31
Lines 89-110 Link Here
89
	}
89
	}
90
	
90
	
91
	// ***** mode
91
	// ***** mode
92
	public ParameterMode2_1 getMode() {
92
	public ParameterMode_2_1 getMode() {
93
		return this.mode;
93
		return this.mode;
94
	}
94
	}
95
95
96
	public void setMode(ParameterMode2_1 mode) {
96
	public void setMode(ParameterMode_2_1 mode) {
97
		throw new UnsupportedOperationException();
97
		throw new UnsupportedOperationException();
98
	}
98
	}
99
99
100
	private void setMode_(ParameterMode2_1 mode) {
100
	private void setMode_(ParameterMode_2_1 mode) {
101
		ParameterMode2_1 old = this.mode;
101
		ParameterMode_2_1 old = this.mode;
102
		this.mode = mode;
102
		this.mode = mode;
103
		this.firePropertyChanged(MODE_PROPERTY, old, mode);
103
		this.firePropertyChanged(MODE_PROPERTY, old, mode);
104
	}
104
	}
105
105
106
	private ParameterMode2_1 buildMode() {
106
	private ParameterMode_2_1 buildMode() {
107
		return ParameterMode2_1.fromJavaAnnotationValue(this.getJdtMemberValue(this.getModeElementName()));
107
		return ParameterMode_2_1.fromJavaAnnotationValue(this.getJdtMemberValue(this.getModeElementName()));
108
	}
108
	}
109
109
110
	public TextRange getModeTextRange() {
110
	public TextRange getModeTextRange() {
Lines 112-122 Link Here
112
	}
112
	}
113
113
114
	// ***** type
114
	// ***** type
115
	public String getType() {
115
	public String getTypeName() {
116
		return this.type;
116
		return this.type;
117
	}
117
	}
118
118
119
	public void setType(String type) {
119
	public void setTypeName(String type) {
120
		throw new UnsupportedOperationException();
120
		throw new UnsupportedOperationException();
121
	}
121
	}
122
122
(-)src/org/eclipse/jpt/jpa/core/internal/jpa2_1/resource/java/source/SourceStoredProcedureParameter2_1Annotation.java (-11 / +11 lines)
Lines 26-32 Link Here
26
import org.eclipse.jpt.common.core.utility.jdt.ExpressionConverter;
26
import org.eclipse.jpt.common.core.utility.jdt.ExpressionConverter;
27
import org.eclipse.jpt.common.core.utility.jdt.IndexedDeclarationAnnotationAdapter;
27
import org.eclipse.jpt.common.core.utility.jdt.IndexedDeclarationAnnotationAdapter;
28
import org.eclipse.jpt.jpa.core.jpa2_1.resource.java.JPA2_1;
28
import org.eclipse.jpt.jpa.core.jpa2_1.resource.java.JPA2_1;
29
import org.eclipse.jpt.jpa.core.jpa2_1.resource.java.ParameterMode2_1;
29
import org.eclipse.jpt.jpa.core.jpa2_1.resource.java.ParameterMode_2_1;
30
import org.eclipse.jpt.jpa.core.jpa2_1.resource.java.StoredProcedureParameter2_1Annotation;
30
import org.eclipse.jpt.jpa.core.jpa2_1.resource.java.StoredProcedureParameter2_1Annotation;
31
31
32
/**
32
/**
Lines 43-49 Link Here
43
43
44
	private DeclarationAnnotationElementAdapter<String> modeDeclarationAdapter;
44
	private DeclarationAnnotationElementAdapter<String> modeDeclarationAdapter;
45
	private AnnotationElementAdapter<String> modeAdapter;
45
	private AnnotationElementAdapter<String> modeAdapter;
46
	private ParameterMode2_1 mode;
46
	private ParameterMode_2_1 mode;
47
	private TextRange modeTextRange;
47
	private TextRange modeTextRange;
48
48
49
	private DeclarationAnnotationElementAdapter<String> typeDeclarationAdapter;
49
	private DeclarationAnnotationElementAdapter<String> typeDeclarationAdapter;
Lines 166-190 Link Here
166
	}
166
	}
167
167
168
	// ***** mode
168
	// ***** mode
169
	public ParameterMode2_1 getMode() {
169
	public ParameterMode_2_1 getMode() {
170
		return this.mode;
170
		return this.mode;
171
	}
171
	}
172
172
173
	public void setMode(ParameterMode2_1 mode) {
173
	public void setMode(ParameterMode_2_1 mode) {
174
		if (this.attributeValueHasChanged(this.mode, mode)) {
174
		if (this.attributeValueHasChanged(this.mode, mode)) {
175
			this.mode = mode;
175
			this.mode = mode;
176
			this.modeAdapter.setValue(ParameterMode2_1.toJavaAnnotationValue(mode));
176
			this.modeAdapter.setValue(ParameterMode_2_1.toJavaAnnotationValue(mode));
177
		}
177
		}
178
	}
178
	}
179
179
180
	private void syncMode(ParameterMode2_1 astValue) {
180
	private void syncMode(ParameterMode_2_1 astValue) {
181
		ParameterMode2_1 old = this.mode;
181
		ParameterMode_2_1 old = this.mode;
182
		this.mode = astValue;
182
		this.mode = astValue;
183
		this.firePropertyChanged(MODE_PROPERTY, old, astValue);
183
		this.firePropertyChanged(MODE_PROPERTY, old, astValue);
184
	}
184
	}
185
185
186
	private ParameterMode2_1 buildMode(Annotation astAnnotation) {
186
	private ParameterMode_2_1 buildMode(Annotation astAnnotation) {
187
		return ParameterMode2_1.fromJavaAnnotationValue(this.modeAdapter.getValue(astAnnotation));
187
		return ParameterMode_2_1.fromJavaAnnotationValue(this.modeAdapter.getValue(astAnnotation));
188
	}
188
	}
189
189
190
	public TextRange getModeTextRange() {
190
	public TextRange getModeTextRange() {
Lines 204-214 Link Here
204
	}
204
	}
205
	
205
	
206
	// ***** type
206
	// ***** type
207
	public String getType() {
207
	public String getTypeName() {
208
		return this.type;
208
		return this.type;
209
	}
209
	}
210
210
211
	public void setType(String type) {
211
	public void setTypeName(String type) {
212
		if (this.attributeValueHasChanged(this.type, type)) {
212
		if (this.attributeValueHasChanged(this.type, type)) {
213
			this.type = type;
213
			this.type = type;
214
			this.fqTypeNameStale = true;
214
			this.fqTypeNameStale = true;
(-)src/org/eclipse/jpt/jpa/core/jpa2_1/JpaFactory2_1.java (-5 / +20 lines)
Lines 11-18 Link Here
11
11
12
import org.eclipse.jpt.common.core.resource.java.JavaResourceType;
12
import org.eclipse.jpt.common.core.resource.java.JavaResourceType;
13
import org.eclipse.jpt.jpa.core.context.JpaContextNode;
13
import org.eclipse.jpt.jpa.core.context.JpaContextNode;
14
import org.eclipse.jpt.jpa.core.context.java.JavaQuery;
15
import org.eclipse.jpt.jpa.core.internal.jpa2_1.context.java.JavaNamedStoredProcedureQuery2_1;
16
import org.eclipse.jpt.jpa.core.internal.jpa2_1.context.java.JavaQueryContainer2_1;
17
import org.eclipse.jpt.jpa.core.internal.jpa2_1.context.java.JavaStoredProcedureParameter2_1;
14
import org.eclipse.jpt.jpa.core.jpa2.JpaFactory2_0;
18
import org.eclipse.jpt.jpa.core.jpa2.JpaFactory2_0;
15
import org.eclipse.jpt.jpa.core.jpa2_1.context.java.JavaConverterType2_1;
19
import org.eclipse.jpt.jpa.core.jpa2_1.context.java.JavaConverterType2_1;
20
import org.eclipse.jpt.jpa.core.jpa2_1.resource.java.NamedStoredProcedureQuery2_1Annotation;
21
import org.eclipse.jpt.jpa.core.jpa2_1.resource.java.StoredProcedureParameter2_1Annotation;
16
22
17
/**
23
/**
18
 * JPA 2.1 factory
24
 * JPA 2.1 factory
Lines 25-34 Link Here
25
 * 
31
 * 
26
 * @version 3.3
32
 * @version 3.3
27
 * @since 3.3
33
 * @since 3.3
28
 */
34
 */
29
public interface JpaFactory2_1
35
public interface JpaFactory2_1
30
	extends JpaFactory2_0
36
	extends JpaFactory2_0
31
{
37
{
32
38
	// ********** Java Context Model **********
39
33
	JavaConverterType2_1 buildJavaConverterType(JpaContextNode parent, JavaResourceType jrt); 
40
	JavaConverterType2_1 buildJavaConverterType(JpaContextNode parent, JavaResourceType jrt); 
34
}
41
42
	JavaStoredProcedureParameter2_1 buildJavaStoredProcedureParameter2_1(
43
			JavaQuery parent, 
44
			StoredProcedureParameter2_1Annotation parameterAnnotation);
45
46
	JavaNamedStoredProcedureQuery2_1 buildJavaNamedStoredProcedureQuery2_1(
47
			JavaQueryContainer2_1 parent,
48
			NamedStoredProcedureQuery2_1Annotation namedStoredProcedureQueryAnnotation);
49
}
(-)src/org/eclipse/jpt/jpa/core/jpa2_1/ParameterMode2_1.java (+106 lines)
Added Link Here
1
/*******************************************************************************
2
* Copyright (c) 2013 Oracle. All rights reserved.
3
* This program and the accompanying materials are made available under the
4
* terms of the Eclipse Public License v1.0, which accompanies this distribution
5
* and is available at http://www.eclipse.org/legal/epl-v10.html.
6
* 
7
* Contributors:
8
*     Oracle - initial API and implementation
9
*******************************************************************************/
10
package org.eclipse.jpt.jpa.core.jpa2_1;
11
12
13
/**
14
 * parameter mode
15
 * 
16
 * Provisional API: This interface is part of an interim API that is still
17
 * under development and expected to change significantly before reaching
18
 * stability. It is available at this early stage to solicit feedback from
19
 * pioneering adopters on the understanding that any code that uses this API
20
 * will almost certainly be broken (repeatedly) as the API evolves.
21
 * 
22
 * @version 3.3
23
 * @since 3.3
24
 */
25
public enum ParameterMode2_1
26
{
27
	IN(
28
		org.eclipse.jpt.jpa.core.jpa2_1.resource.java.ParameterMode_2_1.IN,
29
		org.eclipse.jpt.jpa.core.resource.orm.v2_1.ParameterMode_2_1.IN
30
		),
31
	INOUT(
32
			org.eclipse.jpt.jpa.core.jpa2_1.resource.java.ParameterMode_2_1.INOUT,
33
			org.eclipse.jpt.jpa.core.resource.orm.v2_1.ParameterMode_2_1.INOUT
34
		),
35
	OUT(
36
			org.eclipse.jpt.jpa.core.jpa2_1.resource.java.ParameterMode_2_1.OUT,
37
			org.eclipse.jpt.jpa.core.resource.orm.v2_1.ParameterMode_2_1.OUT
38
		),
39
	REF_CURSOR(
40
			org.eclipse.jpt.jpa.core.jpa2_1.resource.java.ParameterMode_2_1.REF_CURSOR,
41
			org.eclipse.jpt.jpa.core.resource.orm.v2_1.ParameterMode_2_1.REF_CURSOR
42
		);
43
44
45
	private org.eclipse.jpt.jpa.core.jpa2_1.resource.java.ParameterMode_2_1 javaParameterMode;
46
	private org.eclipse.jpt.jpa.core.resource.orm.v2_1.ParameterMode_2_1 ormParameterMode;
47
48
	ParameterMode2_1(
49
			org.eclipse.jpt.jpa.core.jpa2_1.resource.java.ParameterMode_2_1 javaParameterMode,
50
			org.eclipse.jpt.jpa.core.resource.orm.v2_1.ParameterMode_2_1 ormParameterMode) {
51
		if (javaParameterMode == null) {
52
			throw new NullPointerException();
53
		}
54
		if (ormParameterMode == null) {
55
			throw new NullPointerException();
56
		}
57
		this.javaParameterMode = javaParameterMode;
58
		this.ormParameterMode = ormParameterMode;
59
	}
60
61
	public org.eclipse.jpt.jpa.core.jpa2_1.resource.java.ParameterMode_2_1 getJavaParameterMode() {
62
		return this.javaParameterMode;
63
	}
64
65
	public org.eclipse.jpt.jpa.core.resource.orm.v2_1.ParameterMode_2_1 getOrmParameterMode() {
66
		return this.ormParameterMode;
67
	}
68
69
70
	// ********** static methods **********
71
72
	public static ParameterMode2_1 fromJavaResourceModel(org.eclipse.jpt.jpa.core.jpa2_1.resource.java.ParameterMode_2_1 javaParameterMode) {
73
		return (javaParameterMode == null) ? null : fromJavaResourceModel_(javaParameterMode);
74
	}
75
76
	private static ParameterMode2_1 fromJavaResourceModel_(org.eclipse.jpt.jpa.core.jpa2_1.resource.java.ParameterMode_2_1 javaParameterMode) {
77
		for (ParameterMode2_1 parameterMode : ParameterMode2_1.values()) {
78
			if (parameterMode.getJavaParameterMode() == javaParameterMode) {
79
				return parameterMode;
80
			}
81
		}
82
		return null;
83
	}
84
85
	public static org.eclipse.jpt.jpa.core.jpa2_1.resource.java.ParameterMode_2_1 toJavaResourceModel(ParameterMode2_1 parameterMode) {
86
		return (parameterMode == null) ? null : parameterMode.getJavaParameterMode();
87
	}
88
89
90
	public static ParameterMode2_1 fromOrmResourceModel(org.eclipse.jpt.jpa.core.resource.orm.v2_1.ParameterMode_2_1 ormParameterMode) {
91
		return (ormParameterMode == null) ? null : fromOrmResourceModel_(ormParameterMode);
92
	}
93
94
	private static ParameterMode2_1 fromOrmResourceModel_(org.eclipse.jpt.jpa.core.resource.orm.v2_1.ParameterMode_2_1 ormParameterMode) {
95
		for (ParameterMode2_1 parameterMode : ParameterMode2_1.values()) {
96
			if (parameterMode.getOrmParameterMode() == ormParameterMode) {
97
				return parameterMode;
98
			}
99
		}
100
		return null;
101
	}
102
103
	public static org.eclipse.jpt.jpa.core.resource.orm.v2_1.ParameterMode_2_1 toOrmResourceModel(ParameterMode2_1 parameterMode) {
104
		return (parameterMode == null) ? null : parameterMode.getOrmParameterMode();
105
	}
106
}
(-)src/org/eclipse/jpt/jpa/core/jpa2_1/context/orm/OrmXml2_1ContextNodeFactory.java (+13 lines)
Lines 11-16 Link Here
11
11
12
import org.eclipse.jpt.jpa.core.context.orm.OrmXmlContextNodeFactory;
12
import org.eclipse.jpt.jpa.core.context.orm.OrmXmlContextNodeFactory;
13
import org.eclipse.jpt.jpa.core.resource.orm.XmlConverter;
13
import org.eclipse.jpt.jpa.core.resource.orm.XmlConverter;
14
import org.eclipse.jpt.jpa.core.internal.jpa2_1.context.orm.OrmNamedStoredProcedureQuery2_1;
15
import org.eclipse.jpt.jpa.core.internal.jpa2_1.context.orm.OrmQueryContainer2_1;
16
import org.eclipse.jpt.jpa.core.internal.jpa2_1.context.orm.OrmStoredProcedureParameter2_1;
17
import org.eclipse.jpt.jpa.core.resource.orm.XmlNamedStoredProcedureQuery;
18
import org.eclipse.jpt.jpa.core.resource.orm.XmlStoredProcedureParameter;
14
19
15
/**
20
/**
16
 * JPA 2.1 <code>orm.xml</code> context node factory
21
 * JPA 2.1 <code>orm.xml</code> context node factory
Lines 28-31 Link Here
28
	extends OrmXmlContextNodeFactory
33
	extends OrmXmlContextNodeFactory
29
{
34
{
30
	OrmConverterType2_1 buildOrmConverter(EntityMappings2_1 parent, XmlConverter xmlConverter);
35
	OrmConverterType2_1 buildOrmConverter(EntityMappings2_1 parent, XmlConverter xmlConverter);
36
37
	OrmNamedStoredProcedureQuery2_1 buildOrmNamedStoredProcedureQuery2_1(
38
			OrmQueryContainer2_1 parent,
39
			XmlNamedStoredProcedureQuery xmlNamedQuery);
40
	
41
	OrmStoredProcedureParameter2_1 buildOrmStoredProcedureParameter(
42
			OrmNamedStoredProcedureQuery2_1 parent,
43
			XmlStoredProcedureParameter xmlParameter);
31
}
44
}
(-)src/org/eclipse/jpt/jpa/core/jpa2_1/resource/java/NamedStoredProcedureQuery2_1Annotation.java (+10 lines)
Lines 116-121 Link Here
116
	/**
116
	/**
117
	 * Corresponds to the 'resultClasses' element of the NamedStoredProcedureQuery annotation.
117
	 * Corresponds to the 'resultClasses' element of the NamedStoredProcedureQuery annotation.
118
	 */
118
	 */
119
	void addResultClass(int index, String resultClass);
120
121
	/**
122
	 * Corresponds to the 'resultClasses' element of the NamedStoredProcedureQuery annotation.
123
	 */
119
	void moveResultClass(int targetIndex, int sourceIndex);
124
	void moveResultClass(int targetIndex, int sourceIndex);
120
125
121
	/**
126
	/**
Lines 156-161 Link Here
156
	/**
161
	/**
157
	 * Corresponds to the 'resultSetMappings' element of the NamedStoredProcedureQuery annotation.
162
	 * Corresponds to the 'resultSetMappings' element of the NamedStoredProcedureQuery annotation.
158
	 */
163
	 */
164
	void addResultSetMapping(int index, String resultSetMapping);
165
166
	/**
167
	 * Corresponds to the 'resultSetMappings' element of the NamedStoredProcedureQuery annotation.
168
	 */
159
	void moveResultSetMapping(int targetIndex, int sourceIndex);
169
	void moveResultSetMapping(int targetIndex, int sourceIndex);
160
170
161
	/**
171
	/**
(-)src/org/eclipse/jpt/jpa/core/jpa2_1/resource/java/ParameterMode2_1.java (-67 lines)
Lines 1-67 Link Here
1
/*******************************************************************************
2
 * Copyright (c) 2013 Oracle. All rights reserved.
3
 * This program and the accompanying materials are made available under the
4
 * terms of the Eclipse Public License v1.0, which accompanies this distribution
5
 * and is available at http://www.eclipse.org/legal/epl-v10.html.
6
 * 
7
 * Contributors:
8
 *     Oracle - initial API and implementation
9
 ******************************************************************************/
10
package org.eclipse.jpt.jpa.core.jpa2_1.resource.java;
11
12
13
/**
14
 * Corresponds to the JPA 2.1 enum
15
 * javax.persistence.ParameterMode
16
 * <p>
17
 * Provisional API: This interface is part of an interim API that is still
18
 * under development and expected to change significantly before reaching
19
 * stability. It is available at this early stage to solicit feedback from
20
 * pioneering adopters on the understanding that any code that uses this API
21
 * will almost certainly be broken (repeatedly) as the API evolves.
22
 * 
23
 * @version 3.3
24
 * @since 3.3
25
 */
26
public enum ParameterMode2_1
27
{
28
29
	IN(JPA2_1.PARAMETER_MODE__IN),
30
	INOUT(JPA2_1.PARAMETER_MODE__INOUT),
31
	OUT(JPA2_1.PARAMETER_MODE__OUT),
32
	REF_CURSOR(JPA2_1.PARAMETER_MODE__REF_CURSOR);
33
34
35
	private String javaAnnotationValue;
36
37
	ParameterMode2_1(String javaAnnotationValue) {
38
		if (javaAnnotationValue == null) {
39
			throw new NullPointerException();
40
		}
41
		this.javaAnnotationValue = javaAnnotationValue;
42
	}
43
44
	public String getJavaAnnotationValue() {
45
		return this.javaAnnotationValue;
46
	}
47
48
49
	// ********** static methods **********
50
51
	public static ParameterMode2_1 fromJavaAnnotationValue(Object javaAnnotationValue) {
52
		return (javaAnnotationValue == null) ? null : fromJavaAnnotationValue_(javaAnnotationValue);
53
	}
54
55
	private static ParameterMode2_1 fromJavaAnnotationValue_(Object javaAnnotationValue) {
56
		for (ParameterMode2_1 parameterMode : ParameterMode2_1.values()) {
57
			if (parameterMode.getJavaAnnotationValue().equals(javaAnnotationValue)) {
58
				return parameterMode;
59
			}
60
		}
61
		return null;
62
	}
63
64
	public static String toJavaAnnotationValue(ParameterMode2_1 parameterMode) {
65
		return (parameterMode == null) ? null : parameterMode.getJavaAnnotationValue();
66
	}
67
}
(-)src/org/eclipse/jpt/jpa/core/jpa2_1/resource/java/ParameterMode_2_1.java (+67 lines)
Added Link Here
1
/*******************************************************************************
2
 * Copyright (c) 2013 Oracle. All rights reserved.
3
 * This program and the accompanying materials are made available under the
4
 * terms of the Eclipse Public License v1.0, which accompanies this distribution
5
 * and is available at http://www.eclipse.org/legal/epl-v10.html.
6
 * 
7
 * Contributors:
8
 *     Oracle - initial API and implementation
9
 ******************************************************************************/
10
package org.eclipse.jpt.jpa.core.jpa2_1.resource.java;
11
12
13
/**
14
 * Corresponds to the JPA 2.1 enum
15
 * javax.persistence.ParameterMode
16
 * <p>
17
 * Provisional API: This interface is part of an interim API that is still
18
 * under development and expected to change significantly before reaching
19
 * stability. It is available at this early stage to solicit feedback from
20
 * pioneering adopters on the understanding that any code that uses this API
21
 * will almost certainly be broken (repeatedly) as the API evolves.
22
 * 
23
 * @version 3.3
24
 * @since 3.3
25
 */
26
public enum ParameterMode_2_1
27
{
28
29
	IN(JPA2_1.PARAMETER_MODE__IN),
30
	INOUT(JPA2_1.PARAMETER_MODE__INOUT),
31
	OUT(JPA2_1.PARAMETER_MODE__OUT),
32
	REF_CURSOR(JPA2_1.PARAMETER_MODE__REF_CURSOR);
33
34
35
	private String javaAnnotationValue;
36
37
	ParameterMode_2_1(String javaAnnotationValue) {
38
		if (javaAnnotationValue == null) {
39
			throw new NullPointerException();
40
		}
41
		this.javaAnnotationValue = javaAnnotationValue;
42
	}
43
44
	public String getJavaAnnotationValue() {
45
		return this.javaAnnotationValue;
46
	}
47
48
49
	// ********** static methods **********
50
51
	public static ParameterMode_2_1 fromJavaAnnotationValue(Object javaAnnotationValue) {
52
		return (javaAnnotationValue == null) ? null : fromJavaAnnotationValue_(javaAnnotationValue);
53
	}
54
55
	private static ParameterMode_2_1 fromJavaAnnotationValue_(Object javaAnnotationValue) {
56
		for (ParameterMode_2_1 parameterMode : ParameterMode_2_1.values()) {
57
			if (parameterMode.getJavaAnnotationValue().equals(javaAnnotationValue)) {
58
				return parameterMode;
59
			}
60
		}
61
		return null;
62
	}
63
64
	public static String toJavaAnnotationValue(ParameterMode_2_1 parameterMode) {
65
		return (parameterMode == null) ? null : parameterMode.getJavaAnnotationValue();
66
	}
67
}
(-)src/org/eclipse/jpt/jpa/core/jpa2_1/resource/java/StoredProcedureParameter2_1Annotation.java (-4 / +4 lines)
Lines 56-69 Link Here
56
	 * Corresponds to the 'mode' element of the StoredProcedureParameter annotation.
56
	 * Corresponds to the 'mode' element of the StoredProcedureParameter annotation.
57
	 * Return null if the element does not exist in the annotation
57
	 * Return null if the element does not exist in the annotation
58
	 */
58
	 */
59
	ParameterMode2_1 getMode();
59
	ParameterMode_2_1 getMode();
60
		String MODE_PROPERTY = "mode"; //$NON-NLS-1$
60
		String MODE_PROPERTY = "mode"; //$NON-NLS-1$
61
61
62
	/**
62
	/**
63
	 * Corresponds to the 'mode' element of the StoredProcedureParameter annotation.
63
	 * Corresponds to the 'mode' element of the StoredProcedureParameter annotation.
64
	 * Setting to null will remove the element.
64
	 * Setting to null will remove the element.
65
	 */
65
	 */
66
	void setMode(ParameterMode2_1 mode);
66
	void setMode(ParameterMode_2_1 mode);
67
67
68
	/**
68
	/**
69
	 * Return the {@link TextRange} for the 'mode' element. If the element 
69
	 * Return the {@link TextRange} for the 'mode' element. If the element 
Lines 77-90 Link Here
77
	 * Corresponds to the 'type' element of the StoredProcedureParameter annotation.
77
	 * Corresponds to the 'type' element of the StoredProcedureParameter annotation.
78
	 * Return null if the element does not exist in the annotation
78
	 * Return null if the element does not exist in the annotation
79
	 */
79
	 */
80
	String getType();
80
	String getTypeName();
81
		String TYPE_PROPERTY = "type"; //$NON-NLS-1$
81
		String TYPE_PROPERTY = "type"; //$NON-NLS-1$
82
82
83
	/**
83
	/**
84
	 * Corresponds to the 'type' element of the StoredProcedureParameter annotation.
84
	 * Corresponds to the 'type' element of the StoredProcedureParameter annotation.
85
	 * Setting to null will remove the element.
85
	 * Setting to null will remove the element.
86
	 */
86
	 */
87
	void setType(String type);
87
	void setTypeName(String type);
88
88
89
	/**
89
	/**
90
	 * Return the {@link TextRange} for the 'type' element. If the element 
90
	 * Return the {@link TextRange} for the 'type' element. If the element 
(-)src/org/eclipse/jpt/jpa/eclipselink/core/internal/EclipseLink2_5JpaFactory.java (+21 lines)
Lines 11-19 Link Here
11
11
12
import org.eclipse.jpt.common.core.resource.java.JavaResourceType;
12
import org.eclipse.jpt.common.core.resource.java.JavaResourceType;
13
import org.eclipse.jpt.jpa.core.context.JpaContextNode;
13
import org.eclipse.jpt.jpa.core.context.JpaContextNode;
14
import org.eclipse.jpt.jpa.core.context.java.JavaQuery;
14
import org.eclipse.jpt.jpa.core.internal.jpa2_1.context.java.GenericJavaConverterType;
15
import org.eclipse.jpt.jpa.core.internal.jpa2_1.context.java.GenericJavaConverterType;
16
import org.eclipse.jpt.jpa.core.internal.jpa2_1.context.java.GenericJavaNamedStoredProcedureQuery2_1;
17
import org.eclipse.jpt.jpa.core.internal.jpa2_1.context.java.GenericJavaStoredProcedureParameter2_1;
18
import org.eclipse.jpt.jpa.core.internal.jpa2_1.context.java.JavaNamedStoredProcedureQuery2_1;
19
import org.eclipse.jpt.jpa.core.internal.jpa2_1.context.java.JavaQueryContainer2_1;
20
import org.eclipse.jpt.jpa.core.internal.jpa2_1.context.java.JavaStoredProcedureParameter2_1;
15
import org.eclipse.jpt.jpa.core.jpa2_1.JpaFactory2_1;
21
import org.eclipse.jpt.jpa.core.jpa2_1.JpaFactory2_1;
16
import org.eclipse.jpt.jpa.core.jpa2_1.context.java.JavaConverterType2_1;
22
import org.eclipse.jpt.jpa.core.jpa2_1.context.java.JavaConverterType2_1;
23
import org.eclipse.jpt.jpa.core.jpa2_1.resource.java.NamedStoredProcedureQuery2_1Annotation;
24
import org.eclipse.jpt.jpa.core.jpa2_1.resource.java.StoredProcedureParameter2_1Annotation;
17
25
18
/**
26
/**
19
 *  EclipseLink 2.5 factory
27
 *  EclipseLink 2.5 factory
Lines 29-32 Link Here
29
	public JavaConverterType2_1 buildJavaConverterType(JpaContextNode parent, JavaResourceType jrt) {
37
	public JavaConverterType2_1 buildJavaConverterType(JpaContextNode parent, JavaResourceType jrt) {
30
		return new GenericJavaConverterType(parent, jrt);
38
		return new GenericJavaConverterType(parent, jrt);
31
	}
39
	}
40
41
	public JavaStoredProcedureParameter2_1 buildJavaStoredProcedureParameter2_1(
42
			JavaQuery parent, 
43
			StoredProcedureParameter2_1Annotation parameterAnnotation) {
44
		return new GenericJavaStoredProcedureParameter2_1(parent, parameterAnnotation);
45
	}
46
47
	public JavaNamedStoredProcedureQuery2_1 buildJavaNamedStoredProcedureQuery2_1(
48
			JavaQueryContainer2_1 parent,
49
			NamedStoredProcedureQuery2_1Annotation namedStoredProcedureQueryAnnotation) {
50
		return new GenericJavaNamedStoredProcedureQuery2_1(parent, namedStoredProcedureQueryAnnotation);
51
	}
52
32
}
53
}
(-)src/org/eclipse/jpt/jpa/eclipselink/core/internal/context/orm/EclipseLinkOrmXml2_5ContextNodeFactory.java (+19 lines)
Lines 10-19 Link Here
10
package org.eclipse.jpt.jpa.eclipselink.core.internal.context.orm;
10
package org.eclipse.jpt.jpa.eclipselink.core.internal.context.orm;
11
11
12
import org.eclipse.jpt.jpa.core.internal.jpa2_1.context.orm.GenericOrmConverterType;
12
import org.eclipse.jpt.jpa.core.internal.jpa2_1.context.orm.GenericOrmConverterType;
13
import org.eclipse.jpt.jpa.core.internal.jpa2_1.context.orm.GenericOrmNamedStoredProcedureQuery2_1;
14
import org.eclipse.jpt.jpa.core.internal.jpa2_1.context.orm.GenericOrmStoredProcedureParameter2_1;
15
import org.eclipse.jpt.jpa.core.internal.jpa2_1.context.orm.OrmNamedStoredProcedureQuery2_1;
16
import org.eclipse.jpt.jpa.core.internal.jpa2_1.context.orm.OrmQueryContainer2_1;
17
import org.eclipse.jpt.jpa.core.internal.jpa2_1.context.orm.OrmStoredProcedureParameter2_1;
13
import org.eclipse.jpt.jpa.core.jpa2_1.context.orm.EntityMappings2_1;
18
import org.eclipse.jpt.jpa.core.jpa2_1.context.orm.EntityMappings2_1;
14
import org.eclipse.jpt.jpa.core.jpa2_1.context.orm.OrmConverterType2_1;
19
import org.eclipse.jpt.jpa.core.jpa2_1.context.orm.OrmConverterType2_1;
15
import org.eclipse.jpt.jpa.core.jpa2_1.context.orm.OrmXml2_1ContextNodeFactory;
20
import org.eclipse.jpt.jpa.core.jpa2_1.context.orm.OrmXml2_1ContextNodeFactory;
16
import org.eclipse.jpt.jpa.core.resource.orm.XmlConverter;
21
import org.eclipse.jpt.jpa.core.resource.orm.XmlConverter;
22
import org.eclipse.jpt.jpa.core.resource.orm.XmlNamedStoredProcedureQuery;
23
import org.eclipse.jpt.jpa.core.resource.orm.XmlStoredProcedureParameter;
17
24
18
public class EclipseLinkOrmXml2_5ContextNodeFactory
25
public class EclipseLinkOrmXml2_5ContextNodeFactory
19
	extends EclipseLinkOrmXml2_4ContextNodeFactory
26
	extends EclipseLinkOrmXml2_4ContextNodeFactory
Lines 22-25 Link Here
22
	public OrmConverterType2_1 buildOrmConverter(EntityMappings2_1 parent, XmlConverter xmlConverter) {
29
	public OrmConverterType2_1 buildOrmConverter(EntityMappings2_1 parent, XmlConverter xmlConverter) {
23
		return new GenericOrmConverterType(parent, xmlConverter);
30
		return new GenericOrmConverterType(parent, xmlConverter);
24
	}
31
	}
32
33
	public OrmNamedStoredProcedureQuery2_1 buildOrmNamedStoredProcedureQuery2_1(
34
			OrmQueryContainer2_1 parent, 
35
			XmlNamedStoredProcedureQuery xmlNamedStoredProcedureQuery) {
36
		return new GenericOrmNamedStoredProcedureQuery2_1(parent, xmlNamedStoredProcedureQuery);
37
	}
38
39
	public OrmStoredProcedureParameter2_1 buildOrmStoredProcedureParameter(
40
			OrmNamedStoredProcedureQuery2_1 parent,
41
			XmlStoredProcedureParameter xmlParameter) {
42
		return new GenericOrmStoredProcedureParameter2_1(parent, xmlParameter);
43
	}
25
}
44
}
(-)src/org/eclipse/jpt/jpa/core/tests/internal/context/JptJpaCoreContextModelTests.java (+4 lines)
Lines 20-25 Link Here
20
import org.eclipse.jpt.jpa.core.tests.internal.jpa2.context.orm.Generic2_0OrmContextModelTests;
20
import org.eclipse.jpt.jpa.core.tests.internal.jpa2.context.orm.Generic2_0OrmContextModelTests;
21
import org.eclipse.jpt.jpa.core.tests.internal.jpa2.context.persistence.Generic2_0PersistenceContextModelTests;
21
import org.eclipse.jpt.jpa.core.tests.internal.jpa2.context.persistence.Generic2_0PersistenceContextModelTests;
22
import org.eclipse.jpt.jpa.core.tests.internal.jpa2_1.context.JpaProject2_1Tests;
22
import org.eclipse.jpt.jpa.core.tests.internal.jpa2_1.context.JpaProject2_1Tests;
23
import org.eclipse.jpt.jpa.core.tests.internal.jpa2_1.context.java.Generic2_1JavaContextModelTests;
24
import org.eclipse.jpt.jpa.core.tests.internal.jpa2_1.context.orm.Generic2_1OrmContextModelTests;
23
import org.eclipse.jpt.jpa.core.tests.internal.jpa2_1.context.persistence.JptJpa2_1ContextPersistenceModelTests;
25
import org.eclipse.jpt.jpa.core.tests.internal.jpa2_1.context.persistence.JptJpa2_1ContextPersistenceModelTests;
24
26
25
/**
27
/**
Lines 43-48 Link Here
43
			suite.addTest(Generic2_0OrmContextModelTests.suite());
45
			suite.addTest(Generic2_0OrmContextModelTests.suite());
44
			suite.addTest(Generic2_0PersistenceContextModelTests.suite());
46
			suite.addTest(Generic2_0PersistenceContextModelTests.suite());
45
			suite.addTest(JptJpa2_1ContextPersistenceModelTests.suite());
47
			suite.addTest(JptJpa2_1ContextPersistenceModelTests.suite());
48
			suite.addTest(Generic2_1JavaContextModelTests.suite());
49
			suite.addTest(Generic2_1OrmContextModelTests.suite());
46
		} else {
50
		} else {
47
			suite.addTest(TestSuite.warning(JptJpaCoreTests.buildMissingJarErrorMessage()));
51
			suite.addTest(TestSuite.warning(JptJpaCoreTests.buildMissingJarErrorMessage()));
48
		}
52
		}
(-)src/org/eclipse/jpt/jpa/core/tests/internal/jpa2/context/java/Generic2_0JavaContextModelTests.java (-1 / +1 lines)
Lines 38-44 Link Here
38
		return suite;
38
		return suite;
39
	}
39
	}
40
40
41
	private Generic2_0JavaContextModelTests() {
41
	protected Generic2_0JavaContextModelTests() {
42
		super();
42
		super();
43
		throw new UnsupportedOperationException();
43
		throw new UnsupportedOperationException();
44
	}
44
	}
(-)src/org/eclipse/jpt/jpa/core/tests/internal/jpa2_1/context/Generic2_1ContextModelTestCase.java (-1 / +2 lines)
Lines 13-19 Link Here
13
import org.eclipse.jpt.jpa.core.jpa2_1.JpaProject2_1;
13
import org.eclipse.jpt.jpa.core.jpa2_1.JpaProject2_1;
14
import org.eclipse.jpt.jpa.core.tests.internal.context.ContextModelTestCase;
14
import org.eclipse.jpt.jpa.core.tests.internal.context.ContextModelTestCase;
15
15
16
public abstract class Generic2_1ContextModelTestCase extends ContextModelTestCase
16
public abstract class Generic2_1ContextModelTestCase
17
	extends ContextModelTestCase
17
{
18
{
18
	protected Generic2_1ContextModelTestCase(String name) {
19
	protected Generic2_1ContextModelTestCase(String name) {
19
		super(name);
20
		super(name);
(-)src/org/eclipse/jpt/jpa/core/tests/internal/jpa2_1/context/java/Generic2_1JavaContextModelTests.java (+30 lines)
Added Link Here
1
/*******************************************************************************
2
 * Copyright (c) 2013 Oracle. All rights reserved.
3
 * This program and the accompanying materials are made available under the
4
 * terms of the Eclipse Public License v1.0, which accompanies this distribution
5
 * and is available at http://www.eclipse.org/legal/epl-v10.html.
6
 * 
7
 * Contributors:
8
 *     Oracle - initial API and implementation
9
 ******************************************************************************/
10
package org.eclipse.jpt.jpa.core.tests.internal.jpa2_1.context.java;
11
12
import junit.framework.Test;
13
import junit.framework.TestSuite;
14
import org.eclipse.jpt.jpa.core.tests.internal.jpa2.context.java.Generic2_0JavaContextModelTests;
15
16
public class Generic2_1JavaContextModelTests
17
	extends Generic2_0JavaContextModelTests
18
{
19
	public static Test suite() {
20
		TestSuite suite = new TestSuite(Generic2_1JavaContextModelTests.class.getPackage().getName());
21
		suite.addTestSuite(GenericJavaNamedStoredProcedureQuery2_1Tests.class);
22
		suite.addTestSuite(GenericJavaStoredProcedureParameter2_1Tests.class);
23
	return suite;
24
	}
25
26
	private Generic2_1JavaContextModelTests() {
27
		super();
28
		throw new UnsupportedOperationException();
29
	}
30
}
(-)src/org/eclipse/jpt/jpa/core/tests/internal/jpa2_1/context/java/GenericJavaNamedStoredProcedureQuery2_1Tests.java (+867 lines)
Added Link Here
1
/*******************************************************************************
2
 * Copyright (c) 2013 Oracle. All rights reserved.
3
 * This program and the accompanying materials are made available under the
4
 * terms of the Eclipse Public License v1.0, which accompanies this distribution
5
 * and is available at http://www.eclipse.org/legal/epl-v10.html.
6
 * 
7
 * Contributors:
8
 *     Oracle - initial API and implementation
9
 ******************************************************************************/
10
package org.eclipse.jpt.jpa.core.tests.internal.jpa2_1.context.java;
11
12
import java.util.Iterator;
13
import java.util.ListIterator;
14
import org.eclipse.jdt.core.ICompilationUnit;
15
import org.eclipse.jpt.common.core.resource.java.JavaResourceAnnotatedElement.AstNodeType;
16
import org.eclipse.jpt.common.core.resource.java.JavaResourceType;
17
import org.eclipse.jpt.common.utility.internal.iterator.IteratorTools;
18
import org.eclipse.jpt.jpa.core.context.Entity;
19
import org.eclipse.jpt.jpa.core.context.QueryHint;
20
import org.eclipse.jpt.jpa.core.internal.jpa2_1.context.NamedStoredProcedureQuery2_1;
21
import org.eclipse.jpt.jpa.core.internal.jpa2_1.context.StoredProcedureParameter2_1;
22
import org.eclipse.jpt.jpa.core.jpa2_1.resource.java.JPA2_1;
23
import org.eclipse.jpt.jpa.core.jpa2_1.resource.java.NamedStoredProcedureQuery2_1Annotation;
24
import org.eclipse.jpt.jpa.core.resource.java.JPA;
25
import org.eclipse.jpt.jpa.core.tests.internal.jpa2_1.context.Generic2_1ContextModelTestCase;
26
27
public class GenericJavaNamedStoredProcedureQuery2_1Tests
28
	extends Generic2_1ContextModelTestCase
29
{
30
	public GenericJavaNamedStoredProcedureQuery2_1Tests(String name) {
31
		super(name);
32
	}
33
34
35
	private static final String QUERY_NAME = "QUERY_NAME";
36
	private static final String PROCEDURE_NAME = "MY_PROCEDURE";
37
		
38
	private ICompilationUnit createTestEntityWithNamedStoredProcedureQuery() throws Exception {
39
		return this.createTestType(new DefaultAnnotationWriter() {
40
			@Override
41
			public Iterator<String> imports() {
42
				return IteratorTools.iterator(JPA.ENTITY, JPA2_1.NAMED_STORED_PROCEDURE_QUERY);
43
			}
44
			@Override
45
			public void appendTypeAnnotationTo(StringBuilder sb) {
46
				sb.append("@Entity").append(CR);
47
				sb.append("@NamedStoredProcedureQuery(name=\"" + QUERY_NAME + "\", procedureName=\"" + PROCEDURE_NAME + "\")");
48
			}
49
		});
50
	}
51
52
53
	// ********** name ***********
54
	
55
	public void testUpdateName() throws Exception {
56
		createTestEntityWithNamedStoredProcedureQuery();
57
		addXmlClassRef(FULLY_QUALIFIED_TYPE_NAME);
58
		
59
		Entity entity = getJavaEntity();
60
		NamedStoredProcedureQuery2_1 procedureQuery = entity.getQueryContainer().getNamedStoredProcedureQueries().iterator().next();
61
62
		JavaResourceType resourceType = (JavaResourceType) getJpaProject().getJavaResourceType(FULLY_QUALIFIED_TYPE_NAME, AstNodeType.TYPE);
63
		NamedStoredProcedureQuery2_1Annotation procedureQueryAnnotation = ((NamedStoredProcedureQuery2_1Annotation) resourceType.getAnnotation(0, NamedStoredProcedureQuery2_1Annotation.ANNOTATION_NAME));
64
65
		assertEquals(QUERY_NAME, procedureQueryAnnotation.getName());
66
		assertEquals(QUERY_NAME, procedureQuery.getName());
67
68
		//set name to null in the resource model
69
		procedureQueryAnnotation.setName(null);
70
		getJpaProject().synchronizeContextModel();
71
		assertNull(procedureQueryAnnotation.getName());
72
		assertNull(procedureQuery.getName());
73
74
		//set name in the resource model, verify context model updated
75
		procedureQueryAnnotation.setName("foo");
76
		getJpaProject().synchronizeContextModel();
77
		assertEquals("foo", procedureQueryAnnotation.getName());
78
		assertEquals("foo", procedureQuery.getName());
79
	}
80
	
81
	public void testModifyName() throws Exception {
82
		createTestEntityWithNamedStoredProcedureQuery();
83
		addXmlClassRef(FULLY_QUALIFIED_TYPE_NAME);
84
		Entity entity = getJavaEntity();
85
		NamedStoredProcedureQuery2_1 procedureQuery = entity.getQueryContainer().getNamedStoredProcedureQueries().iterator().next();
86
87
		JavaResourceType resourceType = (JavaResourceType) getJpaProject().getJavaResourceType(FULLY_QUALIFIED_TYPE_NAME, AstNodeType.TYPE);
88
		NamedStoredProcedureQuery2_1Annotation procedureQueryAnnotation = ((NamedStoredProcedureQuery2_1Annotation) resourceType.getAnnotation(0, NamedStoredProcedureQuery2_1Annotation.ANNOTATION_NAME));
89
90
		assertEquals(QUERY_NAME, procedureQueryAnnotation.getName());
91
		assertEquals(QUERY_NAME, procedureQuery.getName());
92
				
93
		//set name to null in the context model
94
		procedureQuery.setName(null);
95
		assertNull(procedureQueryAnnotation.getName());
96
		assertNull(procedureQuery.getName());
97
98
		//set name in the context model, verify resource model updated
99
		procedureQuery.setName("foo");
100
		assertEquals("foo", procedureQueryAnnotation.getName());
101
		assertEquals("foo", procedureQuery.getName());
102
	}
103
	
104
	// ********** procedure name ***********
105
	
106
	public void testUpdateProcedureName() throws Exception {
107
		createTestEntityWithNamedStoredProcedureQuery();
108
		addXmlClassRef(FULLY_QUALIFIED_TYPE_NAME);
109
		
110
		Entity entity = getJavaEntity();
111
		NamedStoredProcedureQuery2_1 procedureQuery = entity.getQueryContainer().getNamedStoredProcedureQueries().iterator().next();
112
113
		JavaResourceType resourceType = (JavaResourceType) getJpaProject().getJavaResourceType(FULLY_QUALIFIED_TYPE_NAME, AstNodeType.TYPE);
114
		NamedStoredProcedureQuery2_1Annotation procedureQueryAnnotation = ((NamedStoredProcedureQuery2_1Annotation) resourceType.getAnnotation(0, NamedStoredProcedureQuery2_1Annotation.ANNOTATION_NAME));
115
116
		assertEquals(PROCEDURE_NAME, procedureQueryAnnotation.getProcedureName());
117
		assertEquals(PROCEDURE_NAME, procedureQuery.getProcedureName());
118
119
		//set procedure name to null in the resource model
120
		procedureQueryAnnotation.setProcedureName(null);
121
		getJpaProject().synchronizeContextModel();
122
		assertNull(procedureQueryAnnotation.getProcedureName());
123
		assertNull(procedureQuery.getProcedureName());
124
125
		//set procedure name in the resource model, verify context model updated
126
		procedureQueryAnnotation.setProcedureName("foo");
127
		getJpaProject().synchronizeContextModel();
128
		assertEquals("foo", procedureQueryAnnotation.getProcedureName());
129
		assertEquals("foo", procedureQuery.getProcedureName());
130
	}
131
	
132
	public void testModifyProcedureName() throws Exception {
133
		createTestEntityWithNamedStoredProcedureQuery();
134
		addXmlClassRef(FULLY_QUALIFIED_TYPE_NAME);
135
		Entity entity = getJavaEntity();
136
		NamedStoredProcedureQuery2_1 procedureQuery = entity.getQueryContainer().getNamedStoredProcedureQueries().iterator().next();
137
138
		JavaResourceType resourceType = (JavaResourceType) getJpaProject().getJavaResourceType(FULLY_QUALIFIED_TYPE_NAME, AstNodeType.TYPE);
139
		NamedStoredProcedureQuery2_1Annotation procedureQueryAnnotation = ((NamedStoredProcedureQuery2_1Annotation) resourceType.getAnnotation(0, NamedStoredProcedureQuery2_1Annotation.ANNOTATION_NAME));
140
141
		assertEquals(PROCEDURE_NAME, procedureQueryAnnotation.getProcedureName());
142
		assertEquals(PROCEDURE_NAME, procedureQuery.getProcedureName());
143
				
144
		//set procedure name to null in the context model
145
		procedureQuery.setProcedureName(null);
146
		assertNull(procedureQueryAnnotation.getProcedureName());
147
		assertNull(procedureQuery.getProcedureName());
148
149
		//set procedure name in the context model, verify resource model updated
150
		procedureQuery.setProcedureName("foo");
151
		assertEquals("foo", procedureQueryAnnotation.getProcedureName());
152
		assertEquals("foo", procedureQuery.getProcedureName());
153
	}
154
155
156
	// ******** parameters **********
157
158
	public void testAddParameter() throws Exception {
159
		createTestEntityWithNamedStoredProcedureQuery();
160
		addXmlClassRef(FULLY_QUALIFIED_TYPE_NAME);
161
		Entity entity = getJavaEntity();
162
		NamedStoredProcedureQuery2_1 procedureQuery = entity.getQueryContainer().getNamedStoredProcedureQueries().iterator().next();
163
164
		JavaResourceType resourceType = (JavaResourceType) getJpaProject().getJavaResourceType(FULLY_QUALIFIED_TYPE_NAME, AstNodeType.TYPE);
165
		NamedStoredProcedureQuery2_1Annotation procedureQueryAnnotation = ((NamedStoredProcedureQuery2_1Annotation) resourceType.getAnnotation(0, NamedStoredProcedureQuery2_1Annotation.ANNOTATION_NAME));	
166
		
167
		StoredProcedureParameter2_1 parameter1 = procedureQuery.addParameter(0);
168
		parameter1.setName("FOO");
169
170
		assertEquals("FOO", procedureQueryAnnotation.parameterAt(0).getName());
171
		
172
		StoredProcedureParameter2_1 parameter2 = procedureQuery.addParameter(0);
173
		parameter2.setName("BAR");
174
		
175
		assertEquals("BAR", procedureQueryAnnotation.parameterAt(0).getName());
176
		assertEquals("FOO", procedureQueryAnnotation.parameterAt(1).getName());
177
		
178
		StoredProcedureParameter2_1 parameter3 = procedureQuery.addParameter(1);
179
		parameter3.setName("BAZ");
180
		
181
		assertEquals("BAR", procedureQueryAnnotation.parameterAt(0).getName());
182
		assertEquals("BAZ", procedureQueryAnnotation.parameterAt(1).getName());
183
		assertEquals("FOO", procedureQueryAnnotation.parameterAt(2).getName());
184
		
185
		ListIterator<? extends StoredProcedureParameter2_1> parameters = procedureQuery.getParameters().iterator();
186
		assertEquals(parameter2, parameters.next());
187
		assertEquals(parameter3, parameters.next());
188
		assertEquals(parameter1, parameters.next());
189
		
190
		parameters = procedureQuery.getParameters().iterator();
191
		assertEquals("BAR", parameters.next().getName());
192
		assertEquals("BAZ", parameters.next().getName());
193
		assertEquals("FOO", parameters.next().getName());
194
	}
195
	
196
	public void testRemoveParameter() throws Exception {
197
		createTestEntityWithNamedStoredProcedureQuery();
198
		addXmlClassRef(FULLY_QUALIFIED_TYPE_NAME);
199
		Entity entity = getJavaEntity();
200
		NamedStoredProcedureQuery2_1 procedureQuery = entity.getQueryContainer().getNamedStoredProcedureQueries().iterator().next();
201
202
		JavaResourceType resourceType = (JavaResourceType) getJpaProject().getJavaResourceType(FULLY_QUALIFIED_TYPE_NAME, AstNodeType.TYPE);
203
		NamedStoredProcedureQuery2_1Annotation procedureQueryAnnotation = ((NamedStoredProcedureQuery2_1Annotation) resourceType.getAnnotation(0, NamedStoredProcedureQuery2_1Annotation.ANNOTATION_NAME));	
204
205
		procedureQuery.addParameter(0).setName("FOO");
206
		procedureQuery.addParameter(1).setName("BAR");
207
		procedureQuery.addParameter(2).setName("BAZ");
208
		
209
		assertEquals(3, procedureQueryAnnotation.getParametersSize());
210
		
211
		procedureQuery.removeParameter(0);
212
		assertEquals(2, procedureQueryAnnotation.getParametersSize());
213
		assertEquals("BAR", procedureQueryAnnotation.parameterAt(0).getName());
214
		assertEquals("BAZ", procedureQueryAnnotation.parameterAt(1).getName());
215
216
		procedureQuery.removeParameter(0);
217
		assertEquals(1, procedureQueryAnnotation.getParametersSize());
218
		assertEquals("BAZ", procedureQueryAnnotation.parameterAt(0).getName());
219
		
220
		procedureQuery.removeParameter(0);
221
		assertEquals(0, procedureQueryAnnotation.getParametersSize());
222
	}
223
	
224
	public void testMoveParameter() throws Exception {
225
		createTestEntityWithNamedStoredProcedureQuery();
226
		addXmlClassRef(FULLY_QUALIFIED_TYPE_NAME);
227
		Entity entity = getJavaEntity();
228
		NamedStoredProcedureQuery2_1 procedureQuery = entity.getQueryContainer().getNamedStoredProcedureQueries().iterator().next();
229
230
		JavaResourceType resourceType = (JavaResourceType) getJpaProject().getJavaResourceType(FULLY_QUALIFIED_TYPE_NAME, AstNodeType.TYPE);
231
		NamedStoredProcedureQuery2_1Annotation procedureQueryAnnotation = ((NamedStoredProcedureQuery2_1Annotation) resourceType.getAnnotation(0, NamedStoredProcedureQuery2_1Annotation.ANNOTATION_NAME));	
232
233
		procedureQuery.addParameter(0).setName("FOO");
234
		procedureQuery.addParameter(1).setName("BAR");
235
		procedureQuery.addParameter(2).setName("BAZ");
236
		
237
		assertEquals(3, procedureQueryAnnotation.getParametersSize());
238
		
239
		
240
		procedureQuery.moveParameter(2, 0);
241
		ListIterator<? extends StoredProcedureParameter2_1> parameters = procedureQuery.getParameters().iterator();
242
		assertEquals("BAR", parameters.next().getName());
243
		assertEquals("BAZ", parameters.next().getName());
244
		assertEquals("FOO", parameters.next().getName());
245
246
		assertEquals("BAR", procedureQueryAnnotation.parameterAt(0).getName());
247
		assertEquals("BAZ", procedureQueryAnnotation.parameterAt(1).getName());
248
		assertEquals("FOO", procedureQueryAnnotation.parameterAt(2).getName());
249
250
251
		procedureQuery.moveParameter(0, 1);
252
		parameters = procedureQuery.getParameters().iterator();
253
		assertEquals("BAZ", parameters.next().getName());
254
		assertEquals("BAR", parameters.next().getName());
255
		assertEquals("FOO", parameters.next().getName());
256
257
		assertEquals("BAZ", procedureQueryAnnotation.parameterAt(0).getName());
258
		assertEquals("BAR", procedureQueryAnnotation.parameterAt(1).getName());
259
		assertEquals("FOO", procedureQueryAnnotation.parameterAt(2).getName());
260
	}
261
	
262
	public void testUpdateParameters() throws Exception {
263
		createTestEntityWithNamedStoredProcedureQuery();
264
		addXmlClassRef(FULLY_QUALIFIED_TYPE_NAME);
265
		Entity entity = getJavaEntity();
266
		NamedStoredProcedureQuery2_1 procedureQuery = entity.getQueryContainer().getNamedStoredProcedureQueries().iterator().next();
267
268
		JavaResourceType resourceType = (JavaResourceType) getJpaProject().getJavaResourceType(FULLY_QUALIFIED_TYPE_NAME, AstNodeType.TYPE);
269
		NamedStoredProcedureQuery2_1Annotation procedureQueryAnnotation = ((NamedStoredProcedureQuery2_1Annotation) resourceType.getAnnotation(0, NamedStoredProcedureQuery2_1Annotation.ANNOTATION_NAME));	
270
		
271
		procedureQueryAnnotation.addParameter(0).setName("FOO");
272
		procedureQueryAnnotation.addParameter(1).setName("BAR");
273
		procedureQueryAnnotation.addParameter(2).setName("BAZ");
274
		getJpaProject().synchronizeContextModel();
275
	
276
		ListIterator<? extends StoredProcedureParameter2_1> parameters = procedureQuery.getParameters().iterator();
277
		assertEquals("FOO", parameters.next().getName());
278
		assertEquals("BAR", parameters.next().getName());
279
		assertEquals("BAZ", parameters.next().getName());
280
		assertFalse(parameters.hasNext());
281
		
282
		procedureQueryAnnotation.moveParameter(2, 0);
283
		getJpaProject().synchronizeContextModel();
284
		parameters = procedureQuery.getParameters().iterator();
285
		assertEquals("BAR", parameters.next().getName());
286
		assertEquals("BAZ", parameters.next().getName());
287
		assertEquals("FOO", parameters.next().getName());
288
		assertFalse(parameters.hasNext());
289
	
290
		procedureQueryAnnotation.moveParameter(0, 1);
291
		getJpaProject().synchronizeContextModel();
292
		parameters = procedureQuery.getParameters().iterator();
293
		assertEquals("BAZ", parameters.next().getName());
294
		assertEquals("BAR", parameters.next().getName());
295
		assertEquals("FOO", parameters.next().getName());
296
		assertFalse(parameters.hasNext());
297
	
298
		procedureQueryAnnotation.removeParameter(1);
299
		getJpaProject().synchronizeContextModel();
300
		parameters = procedureQuery.getParameters().iterator();
301
		assertEquals("BAZ", parameters.next().getName());
302
		assertEquals("FOO", parameters.next().getName());
303
		assertFalse(parameters.hasNext());
304
	
305
		procedureQueryAnnotation.removeParameter(1);
306
		getJpaProject().synchronizeContextModel();
307
		parameters = procedureQuery.getParameters().iterator();
308
		assertEquals("BAZ", parameters.next().getName());
309
		assertFalse(parameters.hasNext());
310
		
311
		procedureQueryAnnotation.removeParameter(0);
312
		getJpaProject().synchronizeContextModel();
313
		assertFalse(procedureQuery.getParameters().iterator().hasNext());
314
	}
315
316
	public void testParametersSize() throws Exception {
317
		createTestEntityWithNamedStoredProcedureQuery();
318
		addXmlClassRef(FULLY_QUALIFIED_TYPE_NAME);
319
		Entity entity = getJavaEntity();
320
		NamedStoredProcedureQuery2_1 procedureQuery = entity.getQueryContainer().getNamedStoredProcedureQueries().iterator().next();
321
		assertEquals(0, procedureQuery.getParametersSize());
322
323
		JavaResourceType resourceType = (JavaResourceType) getJpaProject().getJavaResourceType(FULLY_QUALIFIED_TYPE_NAME, AstNodeType.TYPE);
324
		NamedStoredProcedureQuery2_1Annotation procedureQueryAnnotation = ((NamedStoredProcedureQuery2_1Annotation) resourceType.getAnnotation(0, NamedStoredProcedureQuery2_1Annotation.ANNOTATION_NAME));	
325
326
		procedureQueryAnnotation.addParameter(0);
327
		getJpaProject().synchronizeContextModel();
328
		assertEquals(1, procedureQuery.getParametersSize());
329
		
330
		procedureQueryAnnotation.addParameter(0);
331
		getJpaProject().synchronizeContextModel();
332
		assertEquals(2, procedureQuery.getParametersSize());
333
		
334
		procedureQueryAnnotation.removeParameter(0);
335
		procedureQueryAnnotation.removeParameter(0);
336
		getJpaProject().synchronizeContextModel();
337
		assertEquals(0, procedureQuery.getParametersSize());
338
	}
339
	
340
	// ********** result classes **********
341
	
342
	public void testAddResultClass() throws Exception {
343
		createTestEntityWithNamedStoredProcedureQuery();
344
		addXmlClassRef(FULLY_QUALIFIED_TYPE_NAME);
345
		Entity entity = getJavaEntity();
346
		NamedStoredProcedureQuery2_1 procedureQuery = entity.getQueryContainer().getNamedStoredProcedureQueries().iterator().next();
347
348
		JavaResourceType resourceType = (JavaResourceType) getJpaProject().getJavaResourceType(FULLY_QUALIFIED_TYPE_NAME, AstNodeType.TYPE);
349
		NamedStoredProcedureQuery2_1Annotation procedureQueryAnnotation = ((NamedStoredProcedureQuery2_1Annotation) resourceType.getAnnotation(0, NamedStoredProcedureQuery2_1Annotation.ANNOTATION_NAME));		
350
		
351
		procedureQuery.addResultClass("Employee");
352
		assertEquals("Employee", procedureQueryAnnotation.resultClassAt(0));
353
		
354
		procedureQuery.addResultClass("Address");
355
		assertEquals("Employee", procedureQueryAnnotation.resultClassAt(0));
356
		assertEquals("Address", procedureQueryAnnotation.resultClassAt(1));
357
		
358
		procedureQuery.addResultClass(1, "Project");
359
		assertEquals("Employee", procedureQueryAnnotation.resultClassAt(0));
360
		assertEquals("Project", procedureQueryAnnotation.resultClassAt(1));
361
		assertEquals("Address", procedureQueryAnnotation.resultClassAt(2));
362
		
363
		ListIterator<String> resultClasses = procedureQuery.getResultClasses().iterator();
364
		assertEquals("Employee", resultClasses.next());
365
		assertEquals("Project", resultClasses.next());
366
		assertEquals("Address", resultClasses.next());
367
	}
368
	
369
	public void testRemoveResultClass() throws Exception {
370
		createTestEntityWithNamedStoredProcedureQuery();
371
		addXmlClassRef(FULLY_QUALIFIED_TYPE_NAME);
372
		Entity entity = getJavaEntity();
373
		NamedStoredProcedureQuery2_1 procedureQuery = entity.getQueryContainer().getNamedStoredProcedureQueries().iterator().next();
374
375
		JavaResourceType resourceType = (JavaResourceType) getJpaProject().getJavaResourceType(FULLY_QUALIFIED_TYPE_NAME, AstNodeType.TYPE);
376
		NamedStoredProcedureQuery2_1Annotation procedureQueryAnnotation = ((NamedStoredProcedureQuery2_1Annotation) resourceType.getAnnotation(0, NamedStoredProcedureQuery2_1Annotation.ANNOTATION_NAME));		
377
378
		procedureQuery.addResultClass("Employee");
379
		procedureQuery.addResultClass("Address");
380
		procedureQuery.addResultClass("Project");
381
		
382
		assertEquals(3, procedureQueryAnnotation.getResultClassesSize());
383
		
384
		procedureQuery.removeResultClass(0);
385
		assertEquals(2, procedureQueryAnnotation.getResultClassesSize());
386
		assertEquals("Address", procedureQueryAnnotation.resultClassAt(0));
387
		assertEquals("Project", procedureQueryAnnotation.resultClassAt(1));
388
389
		procedureQuery.removeResultClass("Project");
390
		assertEquals(1, procedureQueryAnnotation.getResultClassesSize());
391
		assertEquals("Address", procedureQueryAnnotation.resultClassAt(0));
392
		
393
		procedureQuery.removeResultClass(0);
394
		assertEquals(0, procedureQueryAnnotation.getResultClassesSize());
395
	}
396
	
397
	public void testMoveResultClass() throws Exception {
398
		createTestEntityWithNamedStoredProcedureQuery();
399
		addXmlClassRef(FULLY_QUALIFIED_TYPE_NAME);
400
		Entity entity = getJavaEntity();
401
		NamedStoredProcedureQuery2_1 procedureQuery = entity.getQueryContainer().getNamedStoredProcedureQueries().iterator().next();
402
403
		JavaResourceType resourceType = (JavaResourceType) getJpaProject().getJavaResourceType(FULLY_QUALIFIED_TYPE_NAME, AstNodeType.TYPE);
404
		NamedStoredProcedureQuery2_1Annotation procedureQueryAnnotation = ((NamedStoredProcedureQuery2_1Annotation) resourceType.getAnnotation(0, NamedStoredProcedureQuery2_1Annotation.ANNOTATION_NAME));		
405
406
		procedureQuery.addResultClass("Employee");
407
		procedureQuery.addResultClass("Address");
408
		procedureQuery.addResultClass("Project");
409
			
410
		assertEquals(3, procedureQueryAnnotation.getResultClassesSize());
411
		
412
		procedureQuery.moveResultClass(2, 0);
413
		ListIterator<String> resultClasses = procedureQuery.getResultClasses().iterator();
414
		assertEquals("Address", resultClasses.next());
415
		assertEquals("Project", resultClasses.next());
416
		assertEquals("Employee", resultClasses.next());
417
418
		assertEquals("Address", procedureQueryAnnotation.resultClassAt(0));
419
		assertEquals("Project", procedureQueryAnnotation.resultClassAt(1));
420
		assertEquals("Employee", procedureQueryAnnotation.resultClassAt(2));
421
422
		procedureQuery.moveResultClass(0, 1);
423
		resultClasses = procedureQuery.getResultClasses().iterator();
424
		assertEquals("Project", resultClasses.next());
425
		assertEquals("Address", resultClasses.next());
426
		assertEquals("Employee", resultClasses.next());
427
428
		assertEquals("Project", procedureQueryAnnotation.resultClassAt(0));
429
		assertEquals("Address", procedureQueryAnnotation.resultClassAt(1));
430
		assertEquals("Employee", procedureQueryAnnotation.resultClassAt(2));
431
	}
432
	
433
	public void testUpdateResultClass() throws Exception {
434
		createTestEntityWithNamedStoredProcedureQuery();
435
		addXmlClassRef(FULLY_QUALIFIED_TYPE_NAME);
436
		Entity entity = getJavaEntity();
437
		NamedStoredProcedureQuery2_1 procedureQuery = entity.getQueryContainer().getNamedStoredProcedureQueries().iterator().next();
438
439
		JavaResourceType resourceType = (JavaResourceType) getJpaProject().getJavaResourceType(FULLY_QUALIFIED_TYPE_NAME, AstNodeType.TYPE);
440
		NamedStoredProcedureQuery2_1Annotation procedureQueryAnnotation = ((NamedStoredProcedureQuery2_1Annotation) resourceType.getAnnotation(0, NamedStoredProcedureQuery2_1Annotation.ANNOTATION_NAME));		
441
442
		procedureQuery.addResultClass("Employee");
443
		procedureQuery.addResultClass("Address");
444
		procedureQuery.addResultClass("Project");
445
		getJpaProject().synchronizeContextModel();
446
	
447
		ListIterator<String> resultClasses = procedureQuery.getResultClasses().iterator();
448
		assertEquals("Employee", resultClasses.next());
449
		assertEquals("Address", resultClasses.next());
450
		assertEquals("Project", resultClasses.next());
451
		assertFalse(resultClasses.hasNext());
452
		
453
		procedureQueryAnnotation.moveResultClass(2, 0);
454
		getJpaProject().synchronizeContextModel();
455
		resultClasses = procedureQuery.getResultClasses().iterator();
456
		assertEquals("Address", resultClasses.next());
457
		assertEquals("Project", resultClasses.next());
458
		assertEquals("Employee", resultClasses.next());
459
		assertFalse(resultClasses.hasNext());
460
	
461
		procedureQueryAnnotation.moveResultClass(0, 1);
462
		getJpaProject().synchronizeContextModel();
463
		resultClasses = procedureQuery.getResultClasses().iterator();
464
		assertEquals("Project", resultClasses.next());
465
		assertEquals("Address", resultClasses.next());
466
		assertEquals("Employee", resultClasses.next());
467
		assertFalse(resultClasses.hasNext());
468
	
469
		procedureQueryAnnotation.removeResultClass(1);
470
		getJpaProject().synchronizeContextModel();
471
		resultClasses = procedureQuery.getResultClasses().iterator();
472
		assertEquals("Project", resultClasses.next());
473
		assertEquals("Employee", resultClasses.next());
474
		assertFalse(resultClasses.hasNext());
475
	
476
		procedureQueryAnnotation.removeResultClass(1);
477
		getJpaProject().synchronizeContextModel();
478
		resultClasses = procedureQuery.getResultClasses().iterator();
479
		assertEquals("Project", resultClasses.next());
480
		assertFalse(resultClasses.hasNext());
481
		
482
		procedureQueryAnnotation.removeResultClass(0);
483
		getJpaProject().synchronizeContextModel();
484
		assertFalse(procedureQuery.getResultClasses().iterator().hasNext());
485
	}
486
487
	public void testResultClassesSize() throws Exception {
488
		createTestEntityWithNamedStoredProcedureQuery();
489
		addXmlClassRef(FULLY_QUALIFIED_TYPE_NAME);
490
		Entity entity = getJavaEntity();
491
		
492
		NamedStoredProcedureQuery2_1 procedureQuery = entity.getQueryContainer().getNamedStoredProcedureQueries().iterator().next();
493
		assertEquals(0, procedureQuery.getResultClassesSize());
494
		
495
		JavaResourceType resourceType = (JavaResourceType) getJpaProject().getJavaResourceType(FULLY_QUALIFIED_TYPE_NAME, AstNodeType.TYPE);
496
		NamedStoredProcedureQuery2_1Annotation procedureQueryAnnotation = ((NamedStoredProcedureQuery2_1Annotation) resourceType.getAnnotation(0, NamedStoredProcedureQuery2_1Annotation.ANNOTATION_NAME));
497
		
498
		procedureQueryAnnotation.addResultClass("Employee");
499
		getJpaProject().synchronizeContextModel();
500
		assertEquals(1, procedureQuery.getResultClassesSize());
501
		
502
		procedureQueryAnnotation.addResultClass(0, "Address");
503
		getJpaProject().synchronizeContextModel();
504
		assertEquals(2, procedureQuery.getResultClassesSize());
505
		
506
		procedureQueryAnnotation.removeResultClass(0);
507
		procedureQueryAnnotation.removeResultClass(0);
508
		getJpaProject().synchronizeContextModel();
509
		assertEquals(0, procedureQuery.getResultClassesSize());
510
	}
511
512
	// ********** result set mappings **********
513
		
514
	public void testAddResultSetMapping() throws Exception {
515
		createTestEntityWithNamedStoredProcedureQuery();
516
		addXmlClassRef(FULLY_QUALIFIED_TYPE_NAME);
517
		Entity entity = getJavaEntity();
518
		NamedStoredProcedureQuery2_1 procedureQuery = entity.getQueryContainer().getNamedStoredProcedureQueries().iterator().next();
519
520
		JavaResourceType resourceType = (JavaResourceType) getJpaProject().getJavaResourceType(FULLY_QUALIFIED_TYPE_NAME, AstNodeType.TYPE);
521
		NamedStoredProcedureQuery2_1Annotation procedureQueryAnnotation = ((NamedStoredProcedureQuery2_1Annotation) resourceType.getAnnotation(0, NamedStoredProcedureQuery2_1Annotation.ANNOTATION_NAME));		
522
		
523
		procedureQuery.addResultSetMapping("Employee");
524
		assertEquals("Employee", procedureQueryAnnotation.resultSetMappingAt(0));
525
		
526
		procedureQuery.addResultSetMapping("Address");
527
		assertEquals("Employee", procedureQueryAnnotation.resultSetMappingAt(0));
528
		assertEquals("Address", procedureQueryAnnotation.resultSetMappingAt(1));
529
		
530
		procedureQuery.addResultSetMapping(1, "Project");
531
		assertEquals("Employee", procedureQueryAnnotation.resultSetMappingAt(0));
532
		assertEquals("Project", procedureQueryAnnotation.resultSetMappingAt(1));
533
		assertEquals("Address", procedureQueryAnnotation.resultSetMappingAt(2));
534
		
535
		ListIterator<String> resultSetMapping = procedureQuery.getResultSetMappings().iterator();
536
		assertEquals("Employee", resultSetMapping.next());
537
		assertEquals("Project", resultSetMapping.next());
538
		assertEquals("Address", resultSetMapping.next());
539
	}
540
	
541
	public void testRemoveResultSetMapping() throws Exception {
542
		createTestEntityWithNamedStoredProcedureQuery();
543
		addXmlClassRef(FULLY_QUALIFIED_TYPE_NAME);
544
		Entity entity = getJavaEntity();
545
		NamedStoredProcedureQuery2_1 procedureQuery = entity.getQueryContainer().getNamedStoredProcedureQueries().iterator().next();
546
547
		JavaResourceType resourceType = (JavaResourceType) getJpaProject().getJavaResourceType(FULLY_QUALIFIED_TYPE_NAME, AstNodeType.TYPE);
548
		NamedStoredProcedureQuery2_1Annotation procedureQueryAnnotation = ((NamedStoredProcedureQuery2_1Annotation) resourceType.getAnnotation(0, NamedStoredProcedureQuery2_1Annotation.ANNOTATION_NAME));		
549
550
		procedureQuery.addResultSetMapping("Employee");
551
		procedureQuery.addResultSetMapping("Address");
552
		procedureQuery.addResultSetMapping("Project");
553
		
554
		assertEquals(3, procedureQueryAnnotation.getResultSetMappingsSize());
555
		
556
		procedureQuery.removeResultSetMapping(0);
557
		assertEquals(2, procedureQueryAnnotation.getResultSetMappingsSize());
558
		assertEquals("Address", procedureQueryAnnotation.resultSetMappingAt(0));
559
		assertEquals("Project", procedureQueryAnnotation.resultSetMappingAt(1));
560
561
		procedureQuery.removeResultSetMapping("Project");
562
		assertEquals(1, procedureQueryAnnotation.getResultSetMappingsSize());
563
		assertEquals("Address", procedureQueryAnnotation.resultSetMappingAt(0));
564
		
565
		procedureQuery.removeResultSetMapping(0);
566
		assertEquals(0, procedureQueryAnnotation.getResultSetMappingsSize());
567
	}
568
	
569
	public void testMoveResultSetMapping() throws Exception {
570
		createTestEntityWithNamedStoredProcedureQuery();
571
		addXmlClassRef(FULLY_QUALIFIED_TYPE_NAME);
572
		Entity entity = getJavaEntity();
573
		NamedStoredProcedureQuery2_1 procedureQuery = entity.getQueryContainer().getNamedStoredProcedureQueries().iterator().next();
574
575
		JavaResourceType resourceType = (JavaResourceType) getJpaProject().getJavaResourceType(FULLY_QUALIFIED_TYPE_NAME, AstNodeType.TYPE);
576
		NamedStoredProcedureQuery2_1Annotation procedureQueryAnnotation = ((NamedStoredProcedureQuery2_1Annotation) resourceType.getAnnotation(0, NamedStoredProcedureQuery2_1Annotation.ANNOTATION_NAME));		
577
578
		procedureQuery.addResultSetMapping("Employee");
579
		procedureQuery.addResultSetMapping("Address");
580
		procedureQuery.addResultSetMapping("Project");
581
			
582
		assertEquals(3, procedureQueryAnnotation.getResultSetMappingsSize());
583
		
584
		procedureQuery.moveResultSetMapping(2, 0);
585
		ListIterator<String> resultSetMapping = procedureQuery.getResultSetMappings().iterator();
586
		assertEquals("Address", resultSetMapping.next());
587
		assertEquals("Project", resultSetMapping.next());
588
		assertEquals("Employee", resultSetMapping.next());
589
590
		assertEquals("Address", procedureQueryAnnotation.resultSetMappingAt(0));
591
		assertEquals("Project", procedureQueryAnnotation.resultSetMappingAt(1));
592
		assertEquals("Employee", procedureQueryAnnotation.resultSetMappingAt(2));
593
594
		procedureQuery.moveResultSetMapping(0, 1);
595
		resultSetMapping = procedureQuery.getResultSetMappings().iterator();
596
		assertEquals("Project", resultSetMapping.next());
597
		assertEquals("Address", resultSetMapping.next());
598
		assertEquals("Employee", resultSetMapping.next());
599
600
		assertEquals("Project", procedureQueryAnnotation.resultSetMappingAt(0));
601
		assertEquals("Address", procedureQueryAnnotation.resultSetMappingAt(1));
602
		assertEquals("Employee", procedureQueryAnnotation.resultSetMappingAt(2));
603
	}
604
	
605
	public void testUpdateResultSetMapping() throws Exception {
606
		createTestEntityWithNamedStoredProcedureQuery();
607
		addXmlClassRef(FULLY_QUALIFIED_TYPE_NAME);
608
		Entity entity = getJavaEntity();
609
		NamedStoredProcedureQuery2_1 procedureQuery = entity.getQueryContainer().getNamedStoredProcedureQueries().iterator().next();
610
611
		JavaResourceType resourceType = (JavaResourceType) getJpaProject().getJavaResourceType(FULLY_QUALIFIED_TYPE_NAME, AstNodeType.TYPE);
612
		NamedStoredProcedureQuery2_1Annotation procedureQueryAnnotation = ((NamedStoredProcedureQuery2_1Annotation) resourceType.getAnnotation(0, NamedStoredProcedureQuery2_1Annotation.ANNOTATION_NAME));		
613
614
		procedureQuery.addResultSetMapping("Employee");
615
		procedureQuery.addResultSetMapping("Address");
616
		procedureQuery.addResultSetMapping("Project");
617
		getJpaProject().synchronizeContextModel();
618
	
619
		ListIterator<String> resultSetMapping = procedureQuery.getResultSetMappings().iterator();
620
		assertEquals("Employee", resultSetMapping.next());
621
		assertEquals("Address", resultSetMapping.next());
622
		assertEquals("Project", resultSetMapping.next());
623
		assertFalse(resultSetMapping.hasNext());
624
		
625
		procedureQueryAnnotation.moveResultSetMapping(2, 0);
626
		getJpaProject().synchronizeContextModel();
627
		resultSetMapping = procedureQuery.getResultSetMappings().iterator();
628
		assertEquals("Address", resultSetMapping.next());
629
		assertEquals("Project", resultSetMapping.next());
630
		assertEquals("Employee", resultSetMapping.next());
631
		assertFalse(resultSetMapping.hasNext());
632
	
633
		procedureQueryAnnotation.moveResultSetMapping(0, 1);
634
		getJpaProject().synchronizeContextModel();
635
		resultSetMapping = procedureQuery.getResultSetMappings().iterator();
636
		assertEquals("Project", resultSetMapping.next());
637
		assertEquals("Address", resultSetMapping.next());
638
		assertEquals("Employee", resultSetMapping.next());
639
		assertFalse(resultSetMapping.hasNext());
640
	
641
		procedureQueryAnnotation.removeResultSetMapping(1);
642
		getJpaProject().synchronizeContextModel();
643
		resultSetMapping = procedureQuery.getResultSetMappings().iterator();
644
		assertEquals("Project", resultSetMapping.next());
645
		assertEquals("Employee", resultSetMapping.next());
646
		assertFalse(resultSetMapping.hasNext());
647
	
648
		procedureQueryAnnotation.removeResultSetMapping(1);
649
		getJpaProject().synchronizeContextModel();
650
		resultSetMapping = procedureQuery.getResultSetMappings().iterator();
651
		assertEquals("Project", resultSetMapping.next());
652
		assertFalse(resultSetMapping.hasNext());
653
		
654
		procedureQueryAnnotation.removeResultSetMapping(0);
655
		getJpaProject().synchronizeContextModel();
656
		assertFalse(procedureQuery.getResultSetMappings().iterator().hasNext());
657
	}
658
659
	public void testResultSetMappingsSize() throws Exception {
660
		createTestEntityWithNamedStoredProcedureQuery();
661
		addXmlClassRef(FULLY_QUALIFIED_TYPE_NAME);
662
		Entity entity = getJavaEntity();
663
		
664
		NamedStoredProcedureQuery2_1 procedureQuery = entity.getQueryContainer().getNamedStoredProcedureQueries().iterator().next();
665
		assertEquals(0, procedureQuery.getResultSetMappingsSize());
666
		
667
		JavaResourceType resourceType = (JavaResourceType) getJpaProject().getJavaResourceType(FULLY_QUALIFIED_TYPE_NAME, AstNodeType.TYPE);
668
		NamedStoredProcedureQuery2_1Annotation procedureQueryAnnotation = ((NamedStoredProcedureQuery2_1Annotation) resourceType.getAnnotation(0, NamedStoredProcedureQuery2_1Annotation.ANNOTATION_NAME));
669
		
670
		procedureQueryAnnotation.addResultSetMapping("Employee");
671
		getJpaProject().synchronizeContextModel();
672
		assertEquals(1, procedureQuery.getResultSetMappingsSize());
673
		
674
		procedureQueryAnnotation.addResultSetMapping(0, "Address");
675
		getJpaProject().synchronizeContextModel();
676
		assertEquals(2, procedureQuery.getResultSetMappingsSize());
677
		
678
		procedureQueryAnnotation.removeResultSetMapping(0);
679
		procedureQueryAnnotation.removeResultSetMapping(0);
680
		getJpaProject().synchronizeContextModel();
681
		assertEquals(0, procedureQuery.getResultSetMappingsSize());
682
	}
683
	
684
	// ************ hints ************
685
	
686
	public void testAddHint() throws Exception {
687
		createTestEntityWithNamedStoredProcedureQuery();
688
		addXmlClassRef(FULLY_QUALIFIED_TYPE_NAME);
689
		Entity entity = getJavaEntity();
690
		NamedStoredProcedureQuery2_1 procedureQuery = entity.getQueryContainer().getNamedStoredProcedureQueries().iterator().next();
691
692
		JavaResourceType resourceType = (JavaResourceType) getJpaProject().getJavaResourceType(FULLY_QUALIFIED_TYPE_NAME, AstNodeType.TYPE);
693
		NamedStoredProcedureQuery2_1Annotation procedureQueryAnnotation = ((NamedStoredProcedureQuery2_1Annotation) resourceType.getAnnotation(0, NamedStoredProcedureQuery2_1Annotation.ANNOTATION_NAME));	
694
		
695
		QueryHint queryHint = procedureQuery.addHint(0);
696
		queryHint.setName("FOO");
697
698
		assertEquals("FOO", procedureQueryAnnotation.hintAt(0).getName());
699
		
700
		QueryHint queryHint2 = procedureQuery.addHint(0);
701
		queryHint2.setName("BAR");
702
		
703
		assertEquals("BAR", procedureQueryAnnotation.hintAt(0).getName());
704
		assertEquals("FOO", procedureQueryAnnotation.hintAt(1).getName());
705
		
706
		QueryHint queryHint3 = procedureQuery.addHint(1);
707
		queryHint3.setName("BAZ");
708
		
709
		assertEquals("BAR", procedureQueryAnnotation.hintAt(0).getName());
710
		assertEquals("BAZ", procedureQueryAnnotation.hintAt(1).getName());
711
		assertEquals("FOO", procedureQueryAnnotation.hintAt(2).getName());
712
		
713
		ListIterator<? extends QueryHint> hints = procedureQuery.getHints().iterator();
714
		assertEquals(queryHint2, hints.next());
715
		assertEquals(queryHint3, hints.next());
716
		assertEquals(queryHint, hints.next());
717
		
718
		hints = procedureQuery.getHints().iterator();
719
		assertEquals("BAR", hints.next().getName());
720
		assertEquals("BAZ", hints.next().getName());
721
		assertEquals("FOO", hints.next().getName());
722
	}
723
	
724
	public void testRemoveHint() throws Exception {
725
		createTestEntityWithNamedStoredProcedureQuery();
726
		addXmlClassRef(FULLY_QUALIFIED_TYPE_NAME);
727
		Entity entity = getJavaEntity();
728
		NamedStoredProcedureQuery2_1 procedureQuery = entity.getQueryContainer().getNamedStoredProcedureQueries().iterator().next();
729
730
		JavaResourceType resourceType = (JavaResourceType) getJpaProject().getJavaResourceType(FULLY_QUALIFIED_TYPE_NAME, AstNodeType.TYPE);
731
		NamedStoredProcedureQuery2_1Annotation procedureQueryAnnotation = ((NamedStoredProcedureQuery2_1Annotation) resourceType.getAnnotation(0, NamedStoredProcedureQuery2_1Annotation.ANNOTATION_NAME));		
732
733
		procedureQuery.addHint(0).setName("FOO");
734
		procedureQuery.addHint(1).setName("BAR");
735
		procedureQuery.addHint(2).setName("BAZ");
736
		
737
		assertEquals(3, procedureQueryAnnotation.getHintsSize());
738
		
739
		procedureQuery.removeHint(0);
740
		assertEquals(2, procedureQueryAnnotation.getHintsSize());
741
		assertEquals("BAR", procedureQueryAnnotation.hintAt(0).getName());
742
		assertEquals("BAZ", procedureQueryAnnotation.hintAt(1).getName());
743
744
		procedureQuery.removeHint(0);
745
		assertEquals(1, procedureQueryAnnotation.getHintsSize());
746
		assertEquals("BAZ", procedureQueryAnnotation.hintAt(0).getName());
747
		
748
		procedureQuery.removeHint(0);
749
		assertEquals(0, procedureQueryAnnotation.getHintsSize());
750
	}
751
	
752
	public void testMoveHint() throws Exception {
753
		createTestEntityWithNamedStoredProcedureQuery();
754
		addXmlClassRef(FULLY_QUALIFIED_TYPE_NAME);
755
		Entity entity = getJavaEntity();
756
		NamedStoredProcedureQuery2_1 procedureQuery = entity.getQueryContainer().getNamedStoredProcedureQueries().iterator().next();
757
758
		JavaResourceType resourceType = (JavaResourceType) getJpaProject().getJavaResourceType(FULLY_QUALIFIED_TYPE_NAME, AstNodeType.TYPE);
759
		NamedStoredProcedureQuery2_1Annotation procedureQueryAnnotation = ((NamedStoredProcedureQuery2_1Annotation) resourceType.getAnnotation(0, NamedStoredProcedureQuery2_1Annotation.ANNOTATION_NAME));		
760
761
		procedureQuery.addHint(0).setName("FOO");
762
		procedureQuery.addHint(1).setName("BAR");
763
		procedureQuery.addHint(2).setName("BAZ");
764
		
765
		assertEquals(3, procedureQueryAnnotation.getHintsSize());
766
		
767
		procedureQuery.moveHint(2, 0);
768
		ListIterator<? extends QueryHint> hints = procedureQuery.getHints().iterator();
769
		assertEquals("BAR", hints.next().getName());
770
		assertEquals("BAZ", hints.next().getName());
771
		assertEquals("FOO", hints.next().getName());
772
773
		assertEquals("BAR", procedureQueryAnnotation.hintAt(0).getName());
774
		assertEquals("BAZ", procedureQueryAnnotation.hintAt(1).getName());
775
		assertEquals("FOO", procedureQueryAnnotation.hintAt(2).getName());
776
777
778
		procedureQuery.moveHint(0, 1);
779
		hints = procedureQuery.getHints().iterator();
780
		assertEquals("BAZ", hints.next().getName());
781
		assertEquals("BAR", hints.next().getName());
782
		assertEquals("FOO", hints.next().getName());
783
784
		assertEquals("BAZ", procedureQueryAnnotation.hintAt(0).getName());
785
		assertEquals("BAR", procedureQueryAnnotation.hintAt(1).getName());
786
		assertEquals("FOO", procedureQueryAnnotation.hintAt(2).getName());
787
	}
788
	
789
	public void testUpdateHints() throws Exception {
790
		createTestEntityWithNamedStoredProcedureQuery();
791
		addXmlClassRef(FULLY_QUALIFIED_TYPE_NAME);
792
		Entity entity = getJavaEntity();
793
		NamedStoredProcedureQuery2_1 procedureQuery = entity.getQueryContainer().getNamedStoredProcedureQueries().iterator().next();
794
795
		JavaResourceType resourceType = (JavaResourceType) getJpaProject().getJavaResourceType(FULLY_QUALIFIED_TYPE_NAME, AstNodeType.TYPE);
796
		NamedStoredProcedureQuery2_1Annotation procedureQueryAnnotation = ((NamedStoredProcedureQuery2_1Annotation) resourceType.getAnnotation(0, NamedStoredProcedureQuery2_1Annotation.ANNOTATION_NAME));		
797
		
798
		procedureQueryAnnotation.addHint(0).setName("FOO");
799
		procedureQueryAnnotation.addHint(1).setName("BAR");
800
		procedureQueryAnnotation.addHint(2).setName("BAZ");
801
		getJpaProject().synchronizeContextModel();
802
	
803
		ListIterator<? extends QueryHint> hints = procedureQuery.getHints().iterator();
804
		assertEquals("FOO", hints.next().getName());
805
		assertEquals("BAR", hints.next().getName());
806
		assertEquals("BAZ", hints.next().getName());
807
		assertFalse(hints.hasNext());
808
		
809
		procedureQueryAnnotation.moveHint(2, 0);
810
		getJpaProject().synchronizeContextModel();
811
		hints = procedureQuery.getHints().iterator();
812
		assertEquals("BAR", hints.next().getName());
813
		assertEquals("BAZ", hints.next().getName());
814
		assertEquals("FOO", hints.next().getName());
815
		assertFalse(hints.hasNext());
816
	
817
		procedureQueryAnnotation.moveHint(0, 1);
818
		getJpaProject().synchronizeContextModel();
819
		hints = procedureQuery.getHints().iterator();
820
		assertEquals("BAZ", hints.next().getName());
821
		assertEquals("BAR", hints.next().getName());
822
		assertEquals("FOO", hints.next().getName());
823
		assertFalse(hints.hasNext());
824
	
825
		procedureQueryAnnotation.removeHint(1);
826
		getJpaProject().synchronizeContextModel();
827
		hints = procedureQuery.getHints().iterator();
828
		assertEquals("BAZ", hints.next().getName());
829
		assertEquals("FOO", hints.next().getName());
830
		assertFalse(hints.hasNext());
831
	
832
		procedureQueryAnnotation.removeHint(1);
833
		getJpaProject().synchronizeContextModel();
834
		hints = procedureQuery.getHints().iterator();
835
		assertEquals("BAZ", hints.next().getName());
836
		assertFalse(hints.hasNext());
837
		
838
		procedureQueryAnnotation.removeHint(0);
839
		getJpaProject().synchronizeContextModel();
840
		assertFalse(procedureQuery.getHints().iterator().hasNext());
841
	}
842
843
	public void testHintsSize() throws Exception {
844
		createTestEntityWithNamedStoredProcedureQuery();
845
		addXmlClassRef(FULLY_QUALIFIED_TYPE_NAME);
846
		Entity entity = getJavaEntity();
847
		NamedStoredProcedureQuery2_1 procedureQuery = entity.getQueryContainer().getNamedStoredProcedureQueries().iterator().next();
848
		assertEquals(0, procedureQuery.getHintsSize());
849
850
		JavaResourceType resourceType = (JavaResourceType) getJpaProject().getJavaResourceType(FULLY_QUALIFIED_TYPE_NAME, AstNodeType.TYPE);
851
		NamedStoredProcedureQuery2_1Annotation procedureQueryAnnotation = ((NamedStoredProcedureQuery2_1Annotation) resourceType.getAnnotation(0, NamedStoredProcedureQuery2_1Annotation.ANNOTATION_NAME));
852
		
853
		procedureQueryAnnotation.addHint(0);
854
		getJpaProject().synchronizeContextModel();
855
		assertEquals(1, procedureQuery.getHintsSize());
856
		
857
		procedureQueryAnnotation.addHint(0);
858
		getJpaProject().synchronizeContextModel();
859
		assertEquals(2, procedureQuery.getHintsSize());
860
		
861
		procedureQueryAnnotation.removeHint(0);
862
		procedureQueryAnnotation.removeHint(0);
863
		getJpaProject().synchronizeContextModel();
864
		assertEquals(0, procedureQuery.getHintsSize());
865
	}
866
	
867
}
(-)src/org/eclipse/jpt/jpa/core/tests/internal/jpa2_1/context/java/GenericJavaStoredProcedureParameter2_1Tests.java (+217 lines)
Added Link Here
1
/*******************************************************************************
2
 * Copyright (c) 2013 Oracle. All rights reserved.
3
 * This program and the accompanying materials are made available under the
4
 * terms of the Eclipse Public License v1.0, which accompanies this distribution
5
 * and is available at http://www.eclipse.org/legal/epl-v10.html.
6
 * 
7
 * Contributors:
8
 *     Oracle - initial API and implementation
9
 ******************************************************************************/
10
package org.eclipse.jpt.jpa.core.tests.internal.jpa2_1.context.java;
11
12
import java.util.Iterator;
13
import org.eclipse.jdt.core.ICompilationUnit;
14
import org.eclipse.jpt.common.core.resource.java.JavaResourceAnnotatedElement.AstNodeType;
15
import org.eclipse.jpt.common.core.resource.java.JavaResourceType;
16
import org.eclipse.jpt.common.utility.internal.iterator.IteratorTools;
17
import org.eclipse.jpt.jpa.core.context.Entity;
18
import org.eclipse.jpt.jpa.core.internal.jpa2_1.context.StoredProcedureParameter2_1;
19
import org.eclipse.jpt.jpa.core.jpa2_1.ParameterMode2_1;
20
import org.eclipse.jpt.jpa.core.jpa2_1.resource.java.JPA2_1;
21
import org.eclipse.jpt.jpa.core.jpa2_1.resource.java.NamedStoredProcedureQuery2_1Annotation;
22
import org.eclipse.jpt.jpa.core.jpa2_1.resource.java.ParameterMode_2_1;
23
import org.eclipse.jpt.jpa.core.jpa2_1.resource.java.StoredProcedureParameter2_1Annotation;
24
import org.eclipse.jpt.jpa.core.resource.java.JPA;
25
import org.eclipse.jpt.jpa.core.tests.internal.jpa2_1.context.Generic2_1ContextModelTestCase;
26
27
public class GenericJavaStoredProcedureParameter2_1Tests
28
	extends Generic2_1ContextModelTestCase
29
{
30
	public GenericJavaStoredProcedureParameter2_1Tests(String name) {
31
		super(name);
32
	}
33
34
35
	private static final String QUERY_NAME = "QUERY_NAME";
36
		
37
	private ICompilationUnit createTestEntityWithNamedStoredProcedureQuery() throws Exception {
38
		return this.createTestType(new DefaultAnnotationWriter() {
39
			@Override
40
			public Iterator<String> imports() {
41
				return IteratorTools.iterator(JPA.ENTITY, JPA2_1.NAMED_STORED_PROCEDURE_QUERY, JPA2_1.NAMED_STORED_PROCEDURE_PARAMETER);
42
			}
43
			@Override
44
			public void appendTypeAnnotationTo(StringBuilder sb) {
45
				sb.append("@Entity").append(CR);
46
				sb.append("@NamedStoredProcedureQuery(name=\"" + QUERY_NAME + "\", parameters=@StoredProcedureParameter())");
47
			}
48
		});
49
	}
50
	
51
	// ************ name ***********
52
	
53
	public void testUpdateName() throws Exception {
54
		createTestEntityWithNamedStoredProcedureQuery();
55
		addXmlClassRef(FULLY_QUALIFIED_TYPE_NAME);
56
		
57
		Entity entity = getJavaEntity();
58
		StoredProcedureParameter2_1 parameter = entity.getQueryContainer().getNamedStoredProcedureQueries().iterator().next().getParameters().iterator().next();
59
60
		JavaResourceType resourceType = (JavaResourceType) getJpaProject().getJavaResourceType(FULLY_QUALIFIED_TYPE_NAME, AstNodeType.TYPE);
61
		NamedStoredProcedureQuery2_1Annotation queryAnnotation = ((NamedStoredProcedureQuery2_1Annotation) resourceType.getAnnotation(0, NamedStoredProcedureQuery2_1Annotation.ANNOTATION_NAME));
62
		StoredProcedureParameter2_1Annotation parameterAnnotation = queryAnnotation.getParameters().iterator().next();
63
		
64
		assertNull(parameterAnnotation.getName());
65
		assertNull(parameter.getName());
66
67
		//set name in the resource model, verify context model updated
68
		parameterAnnotation.setName("foo");
69
		getJpaProject().synchronizeContextModel();
70
		assertEquals("foo", parameterAnnotation.getName());
71
		assertEquals("foo", parameter.getName());
72
		
73
		//set name to null in the resource model
74
		parameterAnnotation.setName(null); 
75
		getJpaProject().synchronizeContextModel();
76
		assertNull(parameter.getName());
77
	}
78
	
79
	public void testModifyName() throws Exception {
80
		createTestEntityWithNamedStoredProcedureQuery();
81
		addXmlClassRef(FULLY_QUALIFIED_TYPE_NAME);
82
		
83
		Entity entity = getJavaEntity();
84
		StoredProcedureParameter2_1 parameter = entity.getQueryContainer().getNamedStoredProcedureQueries().iterator().next().getParameters().iterator().next();
85
86
		JavaResourceType resourceType = (JavaResourceType) getJpaProject().getJavaResourceType(FULLY_QUALIFIED_TYPE_NAME, AstNodeType.TYPE);
87
		NamedStoredProcedureQuery2_1Annotation queryAnnotation = ((NamedStoredProcedureQuery2_1Annotation) resourceType.getAnnotation(0, NamedStoredProcedureQuery2_1Annotation.ANNOTATION_NAME));
88
		StoredProcedureParameter2_1Annotation parameterAnnotation = queryAnnotation.getParameters().iterator().next();
89
		
90
		assertNull(parameterAnnotation.getName());
91
		assertNull(parameter.getName());
92
93
		//set name in the context model, verify resource model updated
94
		parameter.setName("foo");
95
		assertEquals("foo", parameterAnnotation.getName());
96
		assertEquals("foo", parameter.getName());
97
		
98
		//set name to null in the context model
99
		parameter.setName(null);
100
		assertNull(parameterAnnotation.getName());
101
		assertNull(parameter.getName());
102
	}
103
	
104
	// ************ mode **********
105
	
106
	public void testUpdateMode() throws Exception {
107
		createTestEntityWithNamedStoredProcedureQuery();
108
		addXmlClassRef(FULLY_QUALIFIED_TYPE_NAME);
109
		
110
		Entity entity = getJavaEntity();
111
		StoredProcedureParameter2_1 parameter = entity.getQueryContainer().getNamedStoredProcedureQueries().iterator().next().getParameters().iterator().next();
112
113
		JavaResourceType resourceType = (JavaResourceType) getJpaProject().getJavaResourceType(FULLY_QUALIFIED_TYPE_NAME, AstNodeType.TYPE);
114
		NamedStoredProcedureQuery2_1Annotation queryAnnotation = ((NamedStoredProcedureQuery2_1Annotation) resourceType.getAnnotation(0, NamedStoredProcedureQuery2_1Annotation.ANNOTATION_NAME));
115
		StoredProcedureParameter2_1Annotation parameterAnnotation = queryAnnotation.getParameters().iterator().next();
116
		
117
		assertNull(parameterAnnotation.getMode());
118
		assertNull(parameter.getSpecifiedMode());
119
		assertEquals(ParameterMode2_1.IN, parameter.getMode());
120
121
		//set mode in the resource model, verify context model updated
122
		parameterAnnotation.setMode(ParameterMode_2_1.IN);
123
		getJpaProject().synchronizeContextModel();
124
		assertEquals(ParameterMode_2_1.IN, parameterAnnotation.getMode());
125
		assertEquals(ParameterMode2_1.IN, parameter.getMode());
126
		
127
		//set name to null in the resource model
128
		parameterAnnotation.setMode(null); 
129
		getJpaProject().synchronizeContextModel();
130
		assertNull(parameterAnnotation.getMode());
131
		assertNull(parameter.getSpecifiedMode());
132
		assertEquals(ParameterMode2_1.IN, parameter.getMode());
133
134
	}
135
	
136
	public void testModifyMode() throws Exception {
137
		createTestEntityWithNamedStoredProcedureQuery();
138
		addXmlClassRef(FULLY_QUALIFIED_TYPE_NAME);
139
		
140
		Entity entity = getJavaEntity();
141
		StoredProcedureParameter2_1 parameter = entity.getQueryContainer().getNamedStoredProcedureQueries().iterator().next().getParameters().iterator().next();
142
143
		JavaResourceType resourceType = (JavaResourceType) getJpaProject().getJavaResourceType(FULLY_QUALIFIED_TYPE_NAME, AstNodeType.TYPE);
144
		NamedStoredProcedureQuery2_1Annotation queryAnnotation = ((NamedStoredProcedureQuery2_1Annotation) resourceType.getAnnotation(0, NamedStoredProcedureQuery2_1Annotation.ANNOTATION_NAME));
145
		StoredProcedureParameter2_1Annotation parameterAnnotation = queryAnnotation.getParameters().iterator().next();
146
		
147
		assertNull(parameterAnnotation.getMode());
148
		assertNull(parameter.getSpecifiedMode());
149
		assertEquals(ParameterMode2_1.IN, parameter.getMode());
150
151
		//set mode in the context model, verify resource model updated
152
		parameter.setSpecifiedMode(ParameterMode2_1.INOUT);
153
		assertEquals(ParameterMode_2_1.INOUT, parameterAnnotation.getMode());
154
		assertEquals(ParameterMode2_1.INOUT, parameter.getMode());
155
		
156
		//set mode to null in the context model
157
		parameter.setSpecifiedMode(null);
158
		assertNull(parameterAnnotation.getMode());
159
		assertNull(parameter.getSpecifiedMode());
160
		assertEquals(ParameterMode2_1.IN, parameter.getMode());
161
162
	}
163
164
	// ************ type name **********
165
	
166
	public void testUpdateTypeName() throws Exception {
167
		createTestEntityWithNamedStoredProcedureQuery();
168
		addXmlClassRef(FULLY_QUALIFIED_TYPE_NAME);
169
		
170
		Entity entity = getJavaEntity();
171
		StoredProcedureParameter2_1 parameter = entity.getQueryContainer().getNamedStoredProcedureQueries().iterator().next().getParameters().iterator().next();
172
173
		JavaResourceType resourceType = (JavaResourceType) getJpaProject().getJavaResourceType(FULLY_QUALIFIED_TYPE_NAME, AstNodeType.TYPE);
174
		NamedStoredProcedureQuery2_1Annotation queryAnnotation = ((NamedStoredProcedureQuery2_1Annotation) resourceType.getAnnotation(0, NamedStoredProcedureQuery2_1Annotation.ANNOTATION_NAME));
175
		StoredProcedureParameter2_1Annotation parameterAnnotation = queryAnnotation.getParameters().iterator().next();
176
		
177
		assertNull(parameterAnnotation.getTypeName());
178
		assertNull(parameter.getTypeName());
179
180
		//set type in the resource model, verify context model updated
181
		parameterAnnotation.setTypeName("Foo");
182
		getJpaProject().synchronizeContextModel();
183
		assertEquals("Foo", parameterAnnotation.getTypeName());
184
		assertEquals("Foo", parameter.getTypeName());
185
		
186
		//set type to null in the resource model
187
		parameterAnnotation.setTypeName(null);
188
		getJpaProject().synchronizeContextModel();
189
		assertNull(parameter.getTypeName());
190
	}
191
	
192
	public void testModifyTypeName() throws Exception {
193
		createTestEntityWithNamedStoredProcedureQuery();
194
		addXmlClassRef(FULLY_QUALIFIED_TYPE_NAME);
195
		
196
		Entity entity = getJavaEntity();
197
		StoredProcedureParameter2_1 parameter = entity.getQueryContainer().getNamedStoredProcedureQueries().iterator().next().getParameters().iterator().next();
198
199
		JavaResourceType resourceType = (JavaResourceType) getJpaProject().getJavaResourceType(FULLY_QUALIFIED_TYPE_NAME, AstNodeType.TYPE);
200
		NamedStoredProcedureQuery2_1Annotation queryAnnotation = ((NamedStoredProcedureQuery2_1Annotation) resourceType.getAnnotation(0, NamedStoredProcedureQuery2_1Annotation.ANNOTATION_NAME));
201
		StoredProcedureParameter2_1Annotation parameterAnnotation = queryAnnotation.getParameters().iterator().next();
202
		
203
		assertNull(parameterAnnotation.getTypeName());
204
		assertNull(parameter.getTypeName());
205
206
		//set type in the context model, verify resource model updated
207
		parameter.setTypeName("Foo");
208
		assertEquals("Foo", parameterAnnotation.getTypeName());
209
		assertEquals("Foo", parameter.getTypeName());
210
		
211
		//set type to null in the context model
212
		parameter.setTypeName(null);
213
		assertNull(parameterAnnotation.getTypeName());
214
		assertNull(parameter.getTypeName());
215
	}
216
217
}
(-)src/org/eclipse/jpt/jpa/core/tests/internal/jpa2_1/context/orm/Generic2_1OrmContextModelTests.java (+33 lines)
Added Link Here
1
/*******************************************************************************
2
 * Copyright (c) 2013 Oracle. All rights reserved.
3
 * This program and the accompanying materials are made available under the
4
 * terms of the Eclipse Public License v1.0, which accompanies this distribution
5
 * and is available at http://www.eclipse.org/legal/epl-v10.html.
6
 * 
7
 * Contributors:
8
 *     Oracle - initial API and implementation
9
 ******************************************************************************/
10
package org.eclipse.jpt.jpa.core.tests.internal.jpa2_1.context.orm;
11
12
import junit.framework.Test;
13
import junit.framework.TestCase;
14
import junit.framework.TestSuite;
15
16
public class Generic2_1OrmContextModelTests extends TestCase
17
{
18
19
	public static Test suite() {
20
		TestSuite suite = new TestSuite(Generic2_1OrmContextModelTests.class.getPackage().getName());
21
22
		suite.addTestSuite(GenericOrmNamedStoredProcedureQuery2_1Tests.class);
23
		suite.addTestSuite(GenericOrmStoredProcedureParameter2_1Tests.class);
24
25
		return suite;
26
	}
27
28
	private Generic2_1OrmContextModelTests() {
29
		super();
30
		throw new UnsupportedOperationException();
31
	}
32
33
}
(-)src/org/eclipse/jpt/jpa/core/tests/internal/jpa2_1/context/orm/GenericOrmNamedStoredProcedureQuery2_1Tests.java (+712 lines)
Added Link Here
1
/*******************************************************************************
2
 * Copyright (c) 2013 Oracle. All rights reserved.
3
 * This program and the accompanying materials are made available under the
4
 * terms of the Eclipse Public License v1.0, which accompanies this distribution
5
 * and is available at http://www.eclipse.org/legal/epl-v10.html.
6
 * 
7
 * Contributors:
8
 *     Oracle - initial API and implementation
9
 ******************************************************************************/
10
package org.eclipse.jpt.jpa.core.tests.internal.jpa2_1.context.orm;
11
12
import java.util.ListIterator;
13
import org.eclipse.jpt.jpa.core.MappingKeys;
14
import org.eclipse.jpt.jpa.core.context.orm.OrmEntity;
15
import org.eclipse.jpt.jpa.core.context.orm.OrmPersistentType;
16
import org.eclipse.jpt.jpa.core.context.orm.OrmQueryHint;
17
import org.eclipse.jpt.jpa.core.internal.jpa2_1.context.orm.OrmNamedStoredProcedureQuery2_1;
18
import org.eclipse.jpt.jpa.core.internal.jpa2_1.context.orm.OrmQueryContainer2_1;
19
import org.eclipse.jpt.jpa.core.internal.jpa2_1.context.orm.OrmStoredProcedureParameter2_1;
20
import org.eclipse.jpt.jpa.core.resource.orm.OrmFactory;
21
import org.eclipse.jpt.jpa.core.resource.orm.XmlEntityMappings;
22
import org.eclipse.jpt.jpa.core.resource.orm.XmlNamedStoredProcedureQuery;
23
import org.eclipse.jpt.jpa.core.resource.persistence.PersistenceFactory;
24
import org.eclipse.jpt.jpa.core.resource.persistence.XmlMappingFileRef;
25
import org.eclipse.jpt.jpa.core.tests.internal.jpa2_1.context.Generic2_1ContextModelTestCase;
26
27
public class GenericOrmNamedStoredProcedureQuery2_1Tests
28
	extends Generic2_1ContextModelTestCase
29
{
30
	public GenericOrmNamedStoredProcedureQuery2_1Tests(String name) {
31
		super(name);
32
	}
33
	
34
	@Override
35
	protected void setUp() throws Exception {
36
		super.setUp();
37
		XmlMappingFileRef mappingFileRef = PersistenceFactory.eINSTANCE.createXmlMappingFileRef();
38
		mappingFileRef.setFileName(XmlEntityMappings.DEFAULT_RUNTIME_PATH_NAME);
39
		getXmlPersistenceUnit().getMappingFiles().add(mappingFileRef);
40
		getPersistenceXmlResource().save(null);
41
	}
42
43
	// *********** name *********
44
	
45
	public void testUpdateName() throws Exception {
46
		OrmPersistentType ormPersistentType = getEntityMappings().addPersistentType(MappingKeys.ENTITY_TYPE_MAPPING_KEY, "model.Foo");
47
		OrmEntity ormEntity = (OrmEntity) ormPersistentType.getMapping();
48
		OrmNamedStoredProcedureQuery2_1 ormProcedureQuery = ((OrmQueryContainer2_1) ormEntity.getQueryContainer()).addNamedStoredProcedureQuery(0);
49
		
50
		XmlNamedStoredProcedureQuery procedureQueryResource = getXmlEntityMappings().getEntities().get(0).getNamedStoredProcedureQueries().get(0);
51
		
52
		assertNull(ormProcedureQuery.getName());
53
		assertNull(procedureQueryResource.getName());
54
				
55
		//set name in the resource model, verify context model updated
56
		procedureQueryResource.setName("foo");
57
		assertEquals("foo", ormProcedureQuery.getName());
58
		assertEquals("foo", procedureQueryResource.getName());
59
	
60
		//set name to null in the resource model
61
		procedureQueryResource.setName(null);
62
		assertNull(ormProcedureQuery.getName());
63
		assertNull(procedureQueryResource.getName());
64
	}
65
	
66
	public void testModifyName() throws Exception {
67
		OrmPersistentType ormPersistentType = getEntityMappings().addPersistentType(MappingKeys.ENTITY_TYPE_MAPPING_KEY, "model.Foo");
68
		OrmEntity ormEntity = (OrmEntity) ormPersistentType.getMapping();
69
		OrmNamedStoredProcedureQuery2_1 ormProcedureQuery = ((OrmQueryContainer2_1) ormEntity.getQueryContainer()).addNamedStoredProcedureQuery(0);
70
		
71
		XmlNamedStoredProcedureQuery procedureQueryResource = getXmlEntityMappings().getEntities().get(0).getNamedStoredProcedureQueries().get(0);
72
		
73
		assertNull(ormProcedureQuery.getName());
74
		assertNull(procedureQueryResource.getName());
75
				
76
		//set name in the context model, verify resource model updated
77
		ormProcedureQuery.setName("foo");
78
		assertEquals("foo", ormProcedureQuery.getName());
79
		assertEquals("foo", procedureQueryResource.getName());
80
	
81
		//set new name in the context model, verify resource model updated
82
		ormProcedureQuery.setName("newFoo");
83
		assertEquals("newFoo", ormProcedureQuery.getName());
84
		assertEquals("newFoo", procedureQueryResource.getName());
85
86
		//set name to null in the context model
87
		ormProcedureQuery.setName(null);
88
		assertNull(ormProcedureQuery.getName());
89
		assertNull(procedureQueryResource.getName());
90
	}
91
	
92
	// ********** procedure name ***********
93
	
94
	public void testUpdateProcedureName() throws Exception {
95
		OrmPersistentType ormPersistentType = getEntityMappings().addPersistentType(MappingKeys.ENTITY_TYPE_MAPPING_KEY, "model.Foo");
96
		OrmEntity ormEntity = (OrmEntity) ormPersistentType.getMapping();
97
		OrmNamedStoredProcedureQuery2_1 ormProcedureQuery = ((OrmQueryContainer2_1) ormEntity.getQueryContainer()).addNamedStoredProcedureQuery(0);
98
		
99
		XmlNamedStoredProcedureQuery procedureQueryResource = getXmlEntityMappings().getEntities().get(0).getNamedStoredProcedureQueries().get(0);
100
		
101
		assertNull(ormProcedureQuery.getProcedureName());
102
		assertNull(procedureQueryResource.getProcedureName());
103
				
104
		//set procedure name in the resource model, verify context model updated
105
		procedureQueryResource.setProcedureName("foo");
106
		assertEquals("foo", ormProcedureQuery.getProcedureName());
107
		assertEquals("foo", procedureQueryResource.getProcedureName());
108
	
109
		//set procedure name to null in the resource model
110
		procedureQueryResource.setProcedureName(null);
111
		assertNull(ormProcedureQuery.getProcedureName());
112
		assertNull(procedureQueryResource.getProcedureName());
113
	}
114
	
115
	public void testModifyProcedureName() throws Exception {
116
		OrmPersistentType ormPersistentType = getEntityMappings().addPersistentType(MappingKeys.ENTITY_TYPE_MAPPING_KEY, "model.Foo");
117
		OrmEntity ormEntity = (OrmEntity) ormPersistentType.getMapping();
118
		OrmNamedStoredProcedureQuery2_1 ormProcedureQuery = ((OrmQueryContainer2_1) ormEntity.getQueryContainer()).addNamedStoredProcedureQuery(0);
119
		
120
		XmlNamedStoredProcedureQuery procedureQueryResource = getXmlEntityMappings().getEntities().get(0).getNamedStoredProcedureQueries().get(0);
121
		
122
		assertNull(ormProcedureQuery.getProcedureName());
123
		assertNull(procedureQueryResource.getName());
124
				
125
		//set procedure name in the context model, verify resource model updated
126
		ormProcedureQuery.setProcedureName("foo");
127
		assertEquals("foo", ormProcedureQuery.getProcedureName());
128
		assertEquals("foo", procedureQueryResource.getProcedureName());
129
	
130
		//set new procedure name in the context model, verify resource model updated
131
		ormProcedureQuery.setProcedureName("newFoo");
132
		assertEquals("newFoo", ormProcedureQuery.getProcedureName());
133
		assertEquals("newFoo", procedureQueryResource.getProcedureName());
134
135
		//set procedure name to null in the context model
136
		ormProcedureQuery.setProcedureName(null);
137
		assertNull(ormProcedureQuery.getProcedureName());
138
		assertNull(procedureQueryResource.getProcedureName());
139
	}
140
	
141
	
142
	// ************ parameters ************
143
	
144
	public void testAddParameter() throws Exception {
145
		OrmPersistentType ormPersistentType = getEntityMappings().addPersistentType(MappingKeys.ENTITY_TYPE_MAPPING_KEY, "model.Foo");
146
		OrmEntity ormEntity = (OrmEntity) ormPersistentType.getMapping();
147
		OrmNamedStoredProcedureQuery2_1 ormProcedureQuery = ((OrmQueryContainer2_1) ormEntity.getQueryContainer()).addNamedStoredProcedureQuery(0);
148
		
149
		XmlNamedStoredProcedureQuery procedureQueryResource = getXmlEntityMappings().getEntities().get(0).getNamedStoredProcedureQueries().get(0);
150
151
		OrmStoredProcedureParameter2_1 parameter1 = ormProcedureQuery.addParameter(0);
152
		parameter1.setName("FOO");
153
				
154
		assertEquals("FOO", procedureQueryResource.getParameters().get(0).getName());
155
		
156
		OrmStoredProcedureParameter2_1 parameter2 = ormProcedureQuery.addParameter(0);
157
		parameter2.setName("BAR");
158
		
159
		assertEquals("BAR", procedureQueryResource.getParameters().get(0).getName());
160
		assertEquals("FOO", procedureQueryResource.getParameters().get(1).getName());
161
		
162
		OrmStoredProcedureParameter2_1 parameter3 = ormProcedureQuery.addParameter(1);
163
		parameter3.setName("BAZ");
164
		
165
		assertEquals("BAR", procedureQueryResource.getParameters().get(0).getName());
166
		assertEquals("BAZ", procedureQueryResource.getParameters().get(1).getName());
167
		assertEquals("FOO", procedureQueryResource.getParameters().get(2).getName());
168
		
169
		ListIterator<OrmStoredProcedureParameter2_1> parameters = ormProcedureQuery.getParameters().iterator();
170
		assertEquals(parameter2, parameters.next());
171
		assertEquals(parameter3, parameters.next());
172
		assertEquals(parameter1, parameters.next());
173
		
174
		parameters = ormProcedureQuery.getParameters().iterator();
175
		assertEquals("BAR", parameters.next().getName());
176
		assertEquals("BAZ", parameters.next().getName());
177
		assertEquals("FOO", parameters.next().getName());
178
	}
179
	
180
	public void testRemoveParameter() throws Exception {
181
		OrmPersistentType ormPersistentType = getEntityMappings().addPersistentType(MappingKeys.ENTITY_TYPE_MAPPING_KEY, "model.Foo");
182
		OrmEntity ormEntity = (OrmEntity) ormPersistentType.getMapping();
183
		OrmNamedStoredProcedureQuery2_1 ormProcedureQuery = ((OrmQueryContainer2_1) ormEntity.getQueryContainer()).addNamedStoredProcedureQuery(0);
184
		
185
		XmlNamedStoredProcedureQuery procedureQueryResource = getXmlEntityMappings().getEntities().get(0).getNamedStoredProcedureQueries().get(0);
186
187
		ormProcedureQuery.addParameter(0).setName("FOO");
188
		ormProcedureQuery.addParameter(1).setName("BAR");
189
		ormProcedureQuery.addParameter(2).setName("BAZ");
190
		
191
		assertEquals(3, procedureQueryResource.getParameters().size());
192
		
193
		ormProcedureQuery.removeParameter(0);
194
		assertEquals(2, procedureQueryResource.getParameters().size());
195
		assertEquals("BAR", procedureQueryResource.getParameters().get(0).getName());
196
		assertEquals("BAZ", procedureQueryResource.getParameters().get(1).getName());
197
198
		ormProcedureQuery.removeParameter(0);
199
		assertEquals(1, procedureQueryResource.getParameters().size());
200
		assertEquals("BAZ", procedureQueryResource.getParameters().get(0).getName());
201
		
202
		ormProcedureQuery.removeParameter(0);
203
		assertEquals(0, procedureQueryResource.getParameters().size());
204
	}
205
	
206
	public void testMoveParameter() throws Exception {
207
		OrmPersistentType ormPersistentType = getEntityMappings().addPersistentType(MappingKeys.ENTITY_TYPE_MAPPING_KEY, "model.Foo");
208
		OrmEntity ormEntity = (OrmEntity) ormPersistentType.getMapping();
209
		OrmNamedStoredProcedureQuery2_1 ormProcedureQuery = ((OrmQueryContainer2_1) ormEntity.getQueryContainer()).addNamedStoredProcedureQuery(0);
210
		
211
		XmlNamedStoredProcedureQuery procedureQueryResource = getXmlEntityMappings().getEntities().get(0).getNamedStoredProcedureQueries().get(0);
212
213
		ormProcedureQuery.addParameter(0).setName("FOO");
214
		ormProcedureQuery.addParameter(1).setName("BAR");
215
		ormProcedureQuery.addParameter(2).setName("BAZ");
216
		
217
		assertEquals(3, procedureQueryResource.getParameters().size());
218
		
219
		ormProcedureQuery.moveParameter(2, 0);
220
		ListIterator<OrmStoredProcedureParameter2_1> parameters = ormProcedureQuery.getParameters().iterator();
221
		assertEquals("BAR", parameters.next().getName());
222
		assertEquals("BAZ", parameters.next().getName());
223
		assertEquals("FOO", parameters.next().getName());
224
225
		assertEquals("BAR", procedureQueryResource.getParameters().get(0).getName());
226
		assertEquals("BAZ", procedureQueryResource.getParameters().get(1).getName());
227
		assertEquals("FOO", procedureQueryResource.getParameters().get(2).getName());
228
229
230
		ormProcedureQuery.moveParameter(0, 1);
231
		parameters = ormProcedureQuery.getParameters().iterator();
232
		assertEquals("BAZ", parameters.next().getName());
233
		assertEquals("BAR", parameters.next().getName());
234
		assertEquals("FOO", parameters.next().getName());
235
236
		assertEquals("BAZ", procedureQueryResource.getParameters().get(0).getName());
237
		assertEquals("BAR", procedureQueryResource.getParameters().get(1).getName());
238
		assertEquals("FOO", procedureQueryResource.getParameters().get(2).getName());
239
	}
240
	
241
	public void testUpdateParameters() throws Exception {
242
		OrmPersistentType ormPersistentType = getEntityMappings().addPersistentType(MappingKeys.ENTITY_TYPE_MAPPING_KEY, "model.Foo");
243
		OrmEntity ormEntity = (OrmEntity) ormPersistentType.getMapping();
244
		OrmNamedStoredProcedureQuery2_1 ormProcedureQuery = ((OrmQueryContainer2_1) ormEntity.getQueryContainer()).addNamedStoredProcedureQuery(0);
245
		
246
		XmlNamedStoredProcedureQuery procedureQueryResource = getXmlEntityMappings().getEntities().get(0).getNamedStoredProcedureQueries().get(0);
247
248
		procedureQueryResource.getParameters().add(OrmFactory.eINSTANCE.createXmlStoredProcedureParameter());
249
		procedureQueryResource.getParameters().add(OrmFactory.eINSTANCE.createXmlStoredProcedureParameter());
250
		procedureQueryResource.getParameters().add(OrmFactory.eINSTANCE.createXmlStoredProcedureParameter());
251
		
252
		procedureQueryResource.getParameters().get(0).setName("FOO");
253
		procedureQueryResource.getParameters().get(1).setName("BAR");
254
		procedureQueryResource.getParameters().get(2).setName("BAZ");
255
256
		ListIterator<OrmStoredProcedureParameter2_1> parameters = ormProcedureQuery.getParameters().iterator();
257
		assertEquals("FOO", parameters.next().getName());
258
		assertEquals("BAR", parameters.next().getName());
259
		assertEquals("BAZ", parameters.next().getName());
260
		assertFalse(parameters.hasNext());
261
		
262
		procedureQueryResource.getParameters().move(2, 0);
263
		parameters = ormProcedureQuery.getParameters().iterator();
264
		assertEquals("BAR", parameters.next().getName());
265
		assertEquals("BAZ", parameters.next().getName());
266
		assertEquals("FOO", parameters.next().getName());
267
		assertFalse(parameters.hasNext());
268
269
		procedureQueryResource.getParameters().move(0, 1);
270
		parameters = ormProcedureQuery.getParameters().iterator();
271
		assertEquals("BAZ", parameters.next().getName());
272
		assertEquals("BAR", parameters.next().getName());
273
		assertEquals("FOO", parameters.next().getName());
274
		assertFalse(parameters.hasNext());
275
276
		procedureQueryResource.getParameters().remove(1);
277
		parameters = ormProcedureQuery.getParameters().iterator();
278
		assertEquals("BAZ", parameters.next().getName());
279
		assertEquals("FOO", parameters.next().getName());
280
		assertFalse(parameters.hasNext());
281
282
		procedureQueryResource.getParameters().remove(1);
283
		parameters = ormProcedureQuery.getParameters().iterator();
284
		assertEquals("BAZ", parameters.next().getName());
285
		assertFalse(parameters.hasNext());
286
		
287
		procedureQueryResource.getParameters().remove(0);
288
		assertFalse(ormProcedureQuery.getParameters().iterator().hasNext());
289
	}
290
	
291
	
292
	// ************ result classes ********
293
	
294
	public void testAddResultClass() throws Exception {
295
		OrmPersistentType ormPersistentType = getEntityMappings().addPersistentType(MappingKeys.ENTITY_TYPE_MAPPING_KEY, "model.Foo");
296
		OrmEntity ormEntity = (OrmEntity) ormPersistentType.getMapping();
297
		OrmNamedStoredProcedureQuery2_1 ormProcedureQuery = ((OrmQueryContainer2_1) ormEntity.getQueryContainer()).addNamedStoredProcedureQuery(0);
298
		
299
		XmlNamedStoredProcedureQuery procedureQueryResource = getXmlEntityMappings().getEntities().get(0).getNamedStoredProcedureQueries().get(0);
300
301
		ormProcedureQuery.addResultClass("Employee");
302
		assertEquals("Employee", procedureQueryResource.getResultClasses().get(0));
303
		
304
		ormProcedureQuery.addResultClass("Address");
305
		assertEquals("Employee", procedureQueryResource.getResultClasses().get(0));
306
		assertEquals("Address", procedureQueryResource.getResultClasses().get(1));
307
		
308
		ormProcedureQuery.addResultClass(1, "Project");
309
		
310
		assertEquals("Employee", procedureQueryResource.getResultClasses().get(0));
311
		assertEquals("Project", procedureQueryResource.getResultClasses().get(1));
312
		assertEquals("Address", procedureQueryResource.getResultClasses().get(2));
313
		
314
		ListIterator<String> resultSetClasses = ormProcedureQuery.getResultClasses().iterator();
315
		assertEquals("Employee", resultSetClasses.next());
316
		assertEquals("Project", resultSetClasses.next());
317
		assertEquals("Address", resultSetClasses.next());
318
	}
319
	
320
	public void testRemoveResultClass() throws Exception {
321
		OrmPersistentType ormPersistentType = getEntityMappings().addPersistentType(MappingKeys.ENTITY_TYPE_MAPPING_KEY, "model.Foo");
322
		OrmEntity ormEntity = (OrmEntity) ormPersistentType.getMapping();
323
		OrmNamedStoredProcedureQuery2_1 ormProcedureQuery = ((OrmQueryContainer2_1) ormEntity.getQueryContainer()).addNamedStoredProcedureQuery(0);
324
		
325
		XmlNamedStoredProcedureQuery procedureQueryResource = getXmlEntityMappings().getEntities().get(0).getNamedStoredProcedureQueries().get(0);
326
327
		ormProcedureQuery.addResultClass("Employee");
328
		ormProcedureQuery.addResultClass("Address");
329
		ormProcedureQuery.addResultClass("Project");
330
		
331
		assertEquals(3, procedureQueryResource.getResultClasses().size());
332
		
333
		ormProcedureQuery.removeResultClass(0);
334
		assertEquals(2, procedureQueryResource.getResultClasses().size());
335
		assertEquals("Address", procedureQueryResource.getResultClasses().get(0));
336
		assertEquals("Project", procedureQueryResource.getResultClasses().get(1));
337
338
		ormProcedureQuery.removeResultClass("Project");
339
		assertEquals(1, procedureQueryResource.getResultClasses().size());
340
		assertEquals("Address", procedureQueryResource.getResultClasses().get(0));
341
		
342
		ormProcedureQuery.removeResultClass(0);
343
		assertEquals(0, procedureQueryResource.getResultClasses().size());
344
	}
345
	
346
	public void testMoveResultClass() throws Exception {
347
		OrmPersistentType ormPersistentType = getEntityMappings().addPersistentType(MappingKeys.ENTITY_TYPE_MAPPING_KEY, "model.Foo");
348
		OrmEntity ormEntity = (OrmEntity) ormPersistentType.getMapping();
349
		OrmNamedStoredProcedureQuery2_1 ormProcedureQuery = ((OrmQueryContainer2_1) ormEntity.getQueryContainer()).addNamedStoredProcedureQuery(0);
350
		
351
		XmlNamedStoredProcedureQuery procedureQueryResource = getXmlEntityMappings().getEntities().get(0).getNamedStoredProcedureQueries().get(0);
352
353
		ormProcedureQuery.addResultClass("Employee");
354
		ormProcedureQuery.addResultClass("Address");
355
		ormProcedureQuery.addResultClass("Project");
356
		
357
		assertEquals(3, procedureQueryResource.getResultClasses().size());
358
		
359
		ormProcedureQuery.moveResultClass(2, 0);
360
		ListIterator<String> resultClasses = ormProcedureQuery.getResultClasses().iterator();
361
		assertEquals("Address", resultClasses.next());
362
		assertEquals("Project", resultClasses.next());
363
		assertEquals("Employee", resultClasses.next());
364
365
		assertEquals("Address", procedureQueryResource.getResultClasses().get(0));
366
		assertEquals("Project", procedureQueryResource.getResultClasses().get(1));
367
		assertEquals("Employee", procedureQueryResource.getResultClasses().get(2));
368
369
		ormProcedureQuery.moveResultClass(0, 1);
370
		resultClasses = ormProcedureQuery.getResultClasses().iterator();
371
		assertEquals("Project", resultClasses.next());
372
		assertEquals("Address", resultClasses.next());
373
		assertEquals("Employee", resultClasses.next());
374
375
		assertEquals("Project", procedureQueryResource.getResultClasses().get(0));
376
		assertEquals("Address", procedureQueryResource.getResultClasses().get(1));
377
		assertEquals("Employee", procedureQueryResource.getResultClasses().get(2));
378
	}
379
	
380
	public void testUpdateResultClasses() throws Exception {
381
		OrmPersistentType ormPersistentType = getEntityMappings().addPersistentType(MappingKeys.ENTITY_TYPE_MAPPING_KEY, "model.Foo");
382
		OrmEntity ormEntity = (OrmEntity) ormPersistentType.getMapping();
383
		OrmNamedStoredProcedureQuery2_1 ormProcedureQuery = ((OrmQueryContainer2_1) ormEntity.getQueryContainer()).addNamedStoredProcedureQuery(0);
384
		
385
		XmlNamedStoredProcedureQuery procedureQueryResource = getXmlEntityMappings().getEntities().get(0).getNamedStoredProcedureQueries().get(0);
386
387
		procedureQueryResource.getResultClasses().add("Employee");
388
		procedureQueryResource.getResultClasses().add("Address");
389
		procedureQueryResource.getResultClasses().add("Project");
390
391
		ListIterator<String> resultClasses = ormProcedureQuery.getResultClasses().iterator();
392
		assertEquals("Employee", resultClasses.next());
393
		assertEquals("Address", resultClasses.next());
394
		assertEquals("Project", resultClasses.next());
395
		assertFalse(resultClasses.hasNext());
396
		
397
		procedureQueryResource.getResultClasses().move(2, 0);
398
		resultClasses = ormProcedureQuery.getResultClasses().iterator();
399
		assertEquals("Address", resultClasses.next());
400
		assertEquals("Project", resultClasses.next());
401
		assertEquals("Employee", resultClasses.next());
402
		assertFalse(resultClasses.hasNext());
403
404
		procedureQueryResource.getResultClasses().move(0, 1);
405
		resultClasses = ormProcedureQuery.getResultClasses().iterator();
406
		assertEquals("Project", resultClasses.next());
407
		assertEquals("Address", resultClasses.next());
408
		assertEquals("Employee", resultClasses.next());
409
		assertFalse(resultClasses.hasNext());
410
411
		procedureQueryResource.getResultClasses().remove(1);
412
		resultClasses = ormProcedureQuery.getResultClasses().iterator();
413
		assertEquals("Project", resultClasses.next());
414
		assertEquals("Employee", resultClasses.next());
415
		assertFalse(resultClasses.hasNext());
416
417
		procedureQueryResource.getResultClasses().remove(1);
418
		resultClasses = ormProcedureQuery.getResultClasses().iterator();
419
		assertEquals("Project", resultClasses.next());
420
		assertFalse(resultClasses.hasNext());
421
		
422
		procedureQueryResource.getResultClasses().remove(0);
423
		assertFalse(ormProcedureQuery.getResultClasses().iterator().hasNext());
424
	}
425
426
427
	// ************ result set mappings ********
428
	
429
	public void testAddResultSetMapping() throws Exception {
430
		OrmPersistentType ormPersistentType = getEntityMappings().addPersistentType(MappingKeys.ENTITY_TYPE_MAPPING_KEY, "model.Foo");
431
		OrmEntity ormEntity = (OrmEntity) ormPersistentType.getMapping();
432
		OrmNamedStoredProcedureQuery2_1 ormProcedureQuery = ((OrmQueryContainer2_1) ormEntity.getQueryContainer()).addNamedStoredProcedureQuery(0);
433
		
434
		XmlNamedStoredProcedureQuery procedureQueryResource = getXmlEntityMappings().getEntities().get(0).getNamedStoredProcedureQueries().get(0);
435
436
		ormProcedureQuery.addResultSetMapping("Employee");
437
		assertEquals("Employee", procedureQueryResource.getResultSetMappings().get(0));
438
		
439
		ormProcedureQuery.addResultSetMapping("Address");
440
		assertEquals("Employee", procedureQueryResource.getResultSetMappings().get(0));
441
		assertEquals("Address", procedureQueryResource.getResultSetMappings().get(1));
442
		
443
		ormProcedureQuery.addResultSetMapping(1, "Project");
444
		
445
		assertEquals("Employee", procedureQueryResource.getResultSetMappings().get(0));
446
		assertEquals("Project", procedureQueryResource.getResultSetMappings().get(1));
447
		assertEquals("Address", procedureQueryResource.getResultSetMappings().get(2));
448
		
449
		ListIterator<String> resultSetMappings = ormProcedureQuery.getResultSetMappings().iterator();
450
		assertEquals("Employee", resultSetMappings.next());
451
		assertEquals("Project", resultSetMappings.next());
452
		assertEquals("Address", resultSetMappings.next());
453
	}
454
	
455
	public void testRemoveResultSetMapping() throws Exception {
456
		OrmPersistentType ormPersistentType = getEntityMappings().addPersistentType(MappingKeys.ENTITY_TYPE_MAPPING_KEY, "model.Foo");
457
		OrmEntity ormEntity = (OrmEntity) ormPersistentType.getMapping();
458
		OrmNamedStoredProcedureQuery2_1 ormProcedureQuery = ((OrmQueryContainer2_1) ormEntity.getQueryContainer()).addNamedStoredProcedureQuery(0);
459
		
460
		XmlNamedStoredProcedureQuery procedureQueryResource = getXmlEntityMappings().getEntities().get(0).getNamedStoredProcedureQueries().get(0);
461
462
		ormProcedureQuery.addResultSetMapping("Employee");
463
		ormProcedureQuery.addResultSetMapping("Address");
464
		ormProcedureQuery.addResultSetMapping("Project");
465
		
466
		assertEquals(3, procedureQueryResource.getResultSetMappings().size());
467
		
468
		ormProcedureQuery.removeResultSetMapping(0);
469
		assertEquals(2, procedureQueryResource.getResultSetMappings().size());
470
		assertEquals("Address", procedureQueryResource.getResultSetMappings().get(0));
471
		assertEquals("Project", procedureQueryResource.getResultSetMappings().get(1));
472
473
		ormProcedureQuery.removeResultSetMapping("Project");
474
		assertEquals(1, procedureQueryResource.getResultSetMappings().size());
475
		assertEquals("Address", procedureQueryResource.getResultSetMappings().get(0));
476
		
477
		ormProcedureQuery.removeResultSetMapping(0);
478
		assertEquals(0, procedureQueryResource.getResultSetMappings().size());
479
	}
480
	
481
	public void testMoveResultSetMapping() throws Exception {
482
		OrmPersistentType ormPersistentType = getEntityMappings().addPersistentType(MappingKeys.ENTITY_TYPE_MAPPING_KEY, "model.Foo");
483
		OrmEntity ormEntity = (OrmEntity) ormPersistentType.getMapping();
484
		OrmNamedStoredProcedureQuery2_1 ormProcedureQuery = ((OrmQueryContainer2_1) ormEntity.getQueryContainer()).addNamedStoredProcedureQuery(0);
485
		
486
		XmlNamedStoredProcedureQuery procedureQueryResource = getXmlEntityMappings().getEntities().get(0).getNamedStoredProcedureQueries().get(0);
487
488
		ormProcedureQuery.addResultSetMapping("Employee");
489
		ormProcedureQuery.addResultSetMapping("Address");
490
		ormProcedureQuery.addResultSetMapping("Project");
491
		
492
		assertEquals(3, procedureQueryResource.getResultSetMappings().size());
493
		
494
		ormProcedureQuery.moveResultSetMapping(2, 0);
495
		ListIterator<String> resultSetMappings = ormProcedureQuery.getResultSetMappings().iterator();
496
		assertEquals("Address", resultSetMappings.next());
497
		assertEquals("Project", resultSetMappings.next());
498
		assertEquals("Employee", resultSetMappings.next());
499
500
		assertEquals("Address", procedureQueryResource.getResultSetMappings().get(0));
501
		assertEquals("Project", procedureQueryResource.getResultSetMappings().get(1));
502
		assertEquals("Employee", procedureQueryResource.getResultSetMappings().get(2));
503
504
		ormProcedureQuery.moveResultSetMapping(0, 1);
505
		resultSetMappings = ormProcedureQuery.getResultSetMappings().iterator();
506
		assertEquals("Project", resultSetMappings.next());
507
		assertEquals("Address", resultSetMappings.next());
508
		assertEquals("Employee", resultSetMappings.next());
509
510
		assertEquals("Project", procedureQueryResource.getResultSetMappings().get(0));
511
		assertEquals("Address", procedureQueryResource.getResultSetMappings().get(1));
512
		assertEquals("Employee", procedureQueryResource.getResultSetMappings().get(2));
513
	}
514
	
515
	public void testUpdateResultSetMappings() throws Exception {
516
		OrmPersistentType ormPersistentType = getEntityMappings().addPersistentType(MappingKeys.ENTITY_TYPE_MAPPING_KEY, "model.Foo");
517
		OrmEntity ormEntity = (OrmEntity) ormPersistentType.getMapping();
518
		OrmNamedStoredProcedureQuery2_1 ormProcedureQuery = ((OrmQueryContainer2_1) ormEntity.getQueryContainer()).addNamedStoredProcedureQuery(0);
519
		
520
		XmlNamedStoredProcedureQuery procedureQueryResource = getXmlEntityMappings().getEntities().get(0).getNamedStoredProcedureQueries().get(0);
521
522
		procedureQueryResource.getResultSetMappings().add("Employee");
523
		procedureQueryResource.getResultSetMappings().add("Address");
524
		procedureQueryResource.getResultSetMappings().add("Project");
525
526
		ListIterator<String> resultSetMappings = ormProcedureQuery.getResultSetMappings().iterator();
527
		assertEquals("Employee", resultSetMappings.next());
528
		assertEquals("Address", resultSetMappings.next());
529
		assertEquals("Project", resultSetMappings.next());
530
		assertFalse(resultSetMappings.hasNext());
531
		
532
		procedureQueryResource.getResultSetMappings().move(2, 0);
533
		resultSetMappings = ormProcedureQuery.getResultSetMappings().iterator();
534
		assertEquals("Address", resultSetMappings.next());
535
		assertEquals("Project", resultSetMappings.next());
536
		assertEquals("Employee", resultSetMappings.next());
537
		assertFalse(resultSetMappings.hasNext());
538
539
		procedureQueryResource.getResultSetMappings().move(0, 1);
540
		resultSetMappings = ormProcedureQuery.getResultSetMappings().iterator();
541
		assertEquals("Project", resultSetMappings.next());
542
		assertEquals("Address", resultSetMappings.next());
543
		assertEquals("Employee", resultSetMappings.next());
544
		assertFalse(resultSetMappings.hasNext());
545
546
		procedureQueryResource.getResultSetMappings().remove(1);
547
		resultSetMappings = ormProcedureQuery.getResultSetMappings().iterator();
548
		assertEquals("Project", resultSetMappings.next());
549
		assertEquals("Employee", resultSetMappings.next());
550
		assertFalse(resultSetMappings.hasNext());
551
552
		procedureQueryResource.getResultSetMappings().remove(1);
553
		resultSetMappings= ormProcedureQuery.getResultSetMappings().iterator();
554
		assertEquals("Project", resultSetMappings.next());
555
		assertFalse(resultSetMappings.hasNext());
556
		
557
		procedureQueryResource.getResultSetMappings().remove(0);
558
		assertFalse(ormProcedureQuery.getResultSetMappings().iterator().hasNext());
559
	}
560
	
561
	
562
	// ************ hints **********
563
	
564
	public void testAddHint() throws Exception {
565
		OrmPersistentType ormPersistentType = getEntityMappings().addPersistentType(MappingKeys.ENTITY_TYPE_MAPPING_KEY, "model.Foo");
566
		OrmEntity ormEntity = (OrmEntity) ormPersistentType.getMapping();
567
		OrmNamedStoredProcedureQuery2_1 ormProcedureQuery = ((OrmQueryContainer2_1) ormEntity.getQueryContainer()).addNamedStoredProcedureQuery(0);
568
		
569
		XmlNamedStoredProcedureQuery procedureQueryResource = getXmlEntityMappings().getEntities().get(0).getNamedStoredProcedureQueries().get(0);
570
571
		OrmQueryHint queryHint = ormProcedureQuery.addHint(0);
572
		queryHint.setName("FOO");
573
				
574
		assertEquals("FOO", procedureQueryResource.getHints().get(0).getName());
575
		
576
		OrmQueryHint queryHint2 = ormProcedureQuery.addHint(0);
577
		queryHint2.setName("BAR");
578
		
579
		assertEquals("BAR", procedureQueryResource.getHints().get(0).getName());
580
		assertEquals("FOO", procedureQueryResource.getHints().get(1).getName());
581
		
582
		OrmQueryHint queryHint3 = ormProcedureQuery.addHint(1);
583
		queryHint3.setName("BAZ");
584
		
585
		assertEquals("BAR", procedureQueryResource.getHints().get(0).getName());
586
		assertEquals("BAZ", procedureQueryResource.getHints().get(1).getName());
587
		assertEquals("FOO", procedureQueryResource.getHints().get(2).getName());
588
		
589
		ListIterator<OrmQueryHint> queryHints = ormProcedureQuery.getHints().iterator();
590
		assertEquals(queryHint2, queryHints.next());
591
		assertEquals(queryHint3, queryHints.next());
592
		assertEquals(queryHint, queryHints.next());
593
		
594
		queryHints = ormProcedureQuery.getHints().iterator();
595
		assertEquals("BAR", queryHints.next().getName());
596
		assertEquals("BAZ", queryHints.next().getName());
597
		assertEquals("FOO", queryHints.next().getName());
598
	}
599
	
600
	public void testRemoveHint() throws Exception {
601
		OrmPersistentType ormPersistentType = getEntityMappings().addPersistentType(MappingKeys.ENTITY_TYPE_MAPPING_KEY, "model.Foo");
602
		OrmEntity ormEntity = (OrmEntity) ormPersistentType.getMapping();
603
		OrmNamedStoredProcedureQuery2_1 ormProcedureQuery = ((OrmQueryContainer2_1) ormEntity.getQueryContainer()).addNamedStoredProcedureQuery(0);
604
		
605
		XmlNamedStoredProcedureQuery procedureQueryResource = getXmlEntityMappings().getEntities().get(0).getNamedStoredProcedureQueries().get(0);
606
607
		ormProcedureQuery.addHint(0).setName("FOO");
608
		ormProcedureQuery.addHint(1).setName("BAR");
609
		ormProcedureQuery.addHint(2).setName("BAZ");
610
		
611
		assertEquals(3, procedureQueryResource.getHints().size());
612
		
613
		ormProcedureQuery.removeHint(0);
614
		assertEquals(2, procedureQueryResource.getHints().size());
615
		assertEquals("BAR", procedureQueryResource.getHints().get(0).getName());
616
		assertEquals("BAZ", procedureQueryResource.getHints().get(1).getName());
617
618
		ormProcedureQuery.removeHint(0);
619
		assertEquals(1, procedureQueryResource.getHints().size());
620
		assertEquals("BAZ", procedureQueryResource.getHints().get(0).getName());
621
		
622
		ormProcedureQuery.removeHint(0);
623
		assertEquals(0, procedureQueryResource.getHints().size());
624
	}
625
	
626
	public void testMoveHint() throws Exception {
627
		OrmPersistentType ormPersistentType = getEntityMappings().addPersistentType(MappingKeys.ENTITY_TYPE_MAPPING_KEY, "model.Foo");
628
		OrmEntity ormEntity = (OrmEntity) ormPersistentType.getMapping();
629
		OrmNamedStoredProcedureQuery2_1 ormProcedureQuery = ((OrmQueryContainer2_1) ormEntity.getQueryContainer()).addNamedStoredProcedureQuery(0);
630
		
631
		XmlNamedStoredProcedureQuery procedureQueryResource = getXmlEntityMappings().getEntities().get(0).getNamedStoredProcedureQueries().get(0);
632
633
		ormProcedureQuery.addHint(0).setName("FOO");
634
		ormProcedureQuery.addHint(1).setName("BAR");
635
		ormProcedureQuery.addHint(2).setName("BAZ");
636
		
637
		assertEquals(3, procedureQueryResource.getHints().size());
638
		
639
		
640
		ormProcedureQuery.moveHint(2, 0);
641
		ListIterator<OrmQueryHint> hints = ormProcedureQuery.getHints().iterator();
642
		assertEquals("BAR", hints.next().getName());
643
		assertEquals("BAZ", hints.next().getName());
644
		assertEquals("FOO", hints.next().getName());
645
646
		assertEquals("BAR", procedureQueryResource.getHints().get(0).getName());
647
		assertEquals("BAZ", procedureQueryResource.getHints().get(1).getName());
648
		assertEquals("FOO", procedureQueryResource.getHints().get(2).getName());
649
650
651
		ormProcedureQuery.moveHint(0, 1);
652
		hints = ormProcedureQuery.getHints().iterator();
653
		assertEquals("BAZ", hints.next().getName());
654
		assertEquals("BAR", hints.next().getName());
655
		assertEquals("FOO", hints.next().getName());
656
657
		assertEquals("BAZ", procedureQueryResource.getHints().get(0).getName());
658
		assertEquals("BAR", procedureQueryResource.getHints().get(1).getName());
659
		assertEquals("FOO", procedureQueryResource.getHints().get(2).getName());
660
	}
661
	
662
	public void testUpdateHints() throws Exception {
663
		OrmPersistentType ormPersistentType = getEntityMappings().addPersistentType(MappingKeys.ENTITY_TYPE_MAPPING_KEY, "model.Foo");
664
		OrmEntity ormEntity = (OrmEntity) ormPersistentType.getMapping();
665
		OrmNamedStoredProcedureQuery2_1 ormProcedureQuery = ((OrmQueryContainer2_1) ormEntity.getQueryContainer()).addNamedStoredProcedureQuery(0);
666
		
667
		XmlNamedStoredProcedureQuery procedureQueryResource = getXmlEntityMappings().getEntities().get(0).getNamedStoredProcedureQueries().get(0);
668
669
		procedureQueryResource.getHints().add(OrmFactory.eINSTANCE.createXmlQueryHint());
670
		procedureQueryResource.getHints().add(OrmFactory.eINSTANCE.createXmlQueryHint());
671
		procedureQueryResource.getHints().add(OrmFactory.eINSTANCE.createXmlQueryHint());
672
		
673
		procedureQueryResource.getHints().get(0).setName("FOO");
674
		procedureQueryResource.getHints().get(1).setName("BAR");
675
		procedureQueryResource.getHints().get(2).setName("BAZ");
676
677
		ListIterator<OrmQueryHint> hints = ormProcedureQuery.getHints().iterator();
678
		assertEquals("FOO", hints.next().getName());
679
		assertEquals("BAR", hints.next().getName());
680
		assertEquals("BAZ", hints.next().getName());
681
		assertFalse(hints.hasNext());
682
		
683
		procedureQueryResource.getHints().move(2, 0);
684
		hints = ormProcedureQuery.getHints().iterator();
685
		assertEquals("BAR", hints.next().getName());
686
		assertEquals("BAZ", hints.next().getName());
687
		assertEquals("FOO", hints.next().getName());
688
		assertFalse(hints.hasNext());
689
690
		procedureQueryResource.getHints().move(0, 1);
691
		hints = ormProcedureQuery.getHints().iterator();
692
		assertEquals("BAZ", hints.next().getName());
693
		assertEquals("BAR", hints.next().getName());
694
		assertEquals("FOO", hints.next().getName());
695
		assertFalse(hints.hasNext());
696
697
		procedureQueryResource.getHints().remove(1);
698
		hints = ormProcedureQuery.getHints().iterator();
699
		assertEquals("BAZ", hints.next().getName());
700
		assertEquals("FOO", hints.next().getName());
701
		assertFalse(hints.hasNext());
702
703
		procedureQueryResource.getHints().remove(1);
704
		hints = ormProcedureQuery.getHints().iterator();
705
		assertEquals("BAZ", hints.next().getName());
706
		assertFalse(hints.hasNext());
707
		
708
		procedureQueryResource.getHints().remove(0);
709
		assertFalse(ormProcedureQuery.getHints().iterator().hasNext());
710
	}
711
712
}
(-)src/org/eclipse/jpt/jpa/core/tests/internal/jpa2_1/context/orm/GenericOrmStoredProcedureParameter2_1Tests.java (+197 lines)
Added Link Here
1
/*******************************************************************************
2
 * Copyright (c) 2013 Oracle. All rights reserved.
3
 * This program and the accompanying materials are made available under the
4
 * terms of the Eclipse Public License v1.0, which accompanies this distribution
5
 * and is available at http://www.eclipse.org/legal/epl-v10.html.
6
 * 
7
 * Contributors:
8
 *     Oracle - initial API and implementation
9
 ******************************************************************************/
10
package org.eclipse.jpt.jpa.core.tests.internal.jpa2_1.context.orm;
11
12
import org.eclipse.jpt.jpa.core.MappingKeys;
13
import org.eclipse.jpt.jpa.core.context.orm.OrmEntity;
14
import org.eclipse.jpt.jpa.core.context.orm.OrmPersistentType;
15
import org.eclipse.jpt.jpa.core.internal.jpa2_1.context.orm.OrmQueryContainer2_1;
16
import org.eclipse.jpt.jpa.core.internal.jpa2_1.context.orm.OrmStoredProcedureParameter2_1;
17
import org.eclipse.jpt.jpa.core.jpa2_1.ParameterMode2_1;
18
import org.eclipse.jpt.jpa.core.resource.orm.XmlEntityMappings;
19
import org.eclipse.jpt.jpa.core.resource.orm.XmlStoredProcedureParameter;
20
import org.eclipse.jpt.jpa.core.resource.orm.v2_1.ParameterMode_2_1;
21
import org.eclipse.jpt.jpa.core.resource.persistence.PersistenceFactory;
22
import org.eclipse.jpt.jpa.core.resource.persistence.XmlMappingFileRef;
23
import org.eclipse.jpt.jpa.core.tests.internal.jpa2_1.context.Generic2_1ContextModelTestCase;
24
25
public class GenericOrmStoredProcedureParameter2_1Tests
26
	extends Generic2_1ContextModelTestCase
27
{
28
	public GenericOrmStoredProcedureParameter2_1Tests(String name) {
29
		super(name);
30
	}
31
	
32
	
33
	@Override
34
	protected void setUp() throws Exception {
35
		super.setUp();
36
		XmlMappingFileRef mappingFileRef = PersistenceFactory.eINSTANCE.createXmlMappingFileRef();
37
		mappingFileRef.setFileName(XmlEntityMappings.DEFAULT_RUNTIME_PATH_NAME);
38
		getXmlPersistenceUnit().getMappingFiles().add(mappingFileRef);
39
		getPersistenceXmlResource().save(null);
40
	}
41
42
	// ******* name ***********
43
	
44
	public void testUpdateName() throws Exception {
45
		OrmPersistentType ormPersistentType = getEntityMappings().addPersistentType(MappingKeys.ENTITY_TYPE_MAPPING_KEY, "model.Foo");
46
		OrmEntity ormEntity = (OrmEntity) ormPersistentType.getMapping();
47
		OrmStoredProcedureParameter2_1 ormParameter = ((OrmQueryContainer2_1) ormEntity.getQueryContainer()).addNamedStoredProcedureQuery(0).addParameter(0);
48
		
49
		XmlStoredProcedureParameter parameterResource = getXmlEntityMappings().getEntities().get(0).getNamedStoredProcedureQueries().get(0).getParameters().get(0);
50
		
51
		assertNull(ormParameter.getName());
52
		assertNull(parameterResource.getName());
53
				
54
		//set name in the resource model, verify context model updated
55
		parameterResource.setName("foo");
56
		assertEquals("foo", ormParameter.getName());
57
		assertEquals("foo", parameterResource.getName());
58
	
59
		//set name to null in the resource model
60
		parameterResource.setName(null);
61
		assertNull(ormParameter.getName());
62
		assertNull(parameterResource.getName());
63
	}
64
	
65
	public void testModifyName() throws Exception {
66
		OrmPersistentType ormPersistentType = getEntityMappings().addPersistentType(MappingKeys.ENTITY_TYPE_MAPPING_KEY, "model.Foo");
67
		OrmEntity ormEntity = (OrmEntity) ormPersistentType.getMapping();
68
		OrmStoredProcedureParameter2_1 ormParameter = ((OrmQueryContainer2_1) ormEntity.getQueryContainer()).addNamedStoredProcedureQuery(0).addParameter(0);
69
		
70
		XmlStoredProcedureParameter parameterResource = getXmlEntityMappings().getEntities().get(0).getNamedStoredProcedureQueries().get(0).getParameters().get(0);
71
		
72
		assertNull(ormParameter.getName());
73
		assertNull(parameterResource.getName());
74
				
75
		//set name in the context model, verify resource model updated
76
		ormParameter.setName("foo");
77
		assertEquals("foo", ormParameter.getName());
78
		assertEquals("foo", parameterResource.getName());
79
		
80
		//set new name in the context model, verify resource model updated
81
		ormParameter.setName("newFoo");
82
		assertEquals("newFoo", ormParameter.getName());
83
		assertEquals("newFoo", parameterResource.getName());
84
	
85
		//set name to null in the context model
86
		ormParameter.setName(null);
87
		assertNull(ormParameter.getName());
88
		assertNull(parameterResource.getName());
89
	}
90
	
91
	// ********* mode *********
92
	
93
	public void testUpdateMode() throws Exception {
94
		OrmPersistentType ormPersistentType = getEntityMappings().addPersistentType(MappingKeys.ENTITY_TYPE_MAPPING_KEY, "model.Foo");
95
		OrmEntity ormEntity = (OrmEntity) ormPersistentType.getMapping();
96
		OrmStoredProcedureParameter2_1 ormParameter = ((OrmQueryContainer2_1) ormEntity.getQueryContainer()).addNamedStoredProcedureQuery(0).addParameter(0);
97
		
98
		XmlStoredProcedureParameter parameterResource = getXmlEntityMappings().getEntities().get(0).getNamedStoredProcedureQueries().get(0).getParameters().get(0);
99
		
100
		assertNull(ormParameter.getSpecifiedMode());
101
		// test default mode
102
		assertEquals(ParameterMode2_1.IN, ormParameter.getMode());
103
		assertNull(parameterResource.getMode());
104
				
105
		//set mode in the resource model, verify context model updated
106
		parameterResource.setMode(ParameterMode_2_1.INOUT);
107
		assertEquals(ParameterMode2_1.INOUT, ormParameter.getMode());
108
		assertEquals(ParameterMode_2_1.INOUT, parameterResource.getMode());
109
	
110
		//set mode to null in the resource model
111
		parameterResource.setMode(null);
112
		assertNull(ormParameter.getSpecifiedMode());
113
		// test default mode
114
		assertEquals(ParameterMode2_1.IN, ormParameter.getMode());
115
		assertNull(parameterResource.getMode());
116
	}
117
	
118
	public void testModifyMode() throws Exception {
119
		OrmPersistentType ormPersistentType = getEntityMappings().addPersistentType(MappingKeys.ENTITY_TYPE_MAPPING_KEY, "model.Foo");
120
		OrmEntity ormEntity = (OrmEntity) ormPersistentType.getMapping();
121
		OrmStoredProcedureParameter2_1 ormParameter = ((OrmQueryContainer2_1) ormEntity.getQueryContainer()).addNamedStoredProcedureQuery(0).addParameter(0);
122
		
123
		XmlStoredProcedureParameter parameterResource = getXmlEntityMappings().getEntities().get(0).getNamedStoredProcedureQueries().get(0).getParameters().get(0);
124
		
125
		assertNull(ormParameter.getSpecifiedMode());
126
		// test default mode
127
		assertEquals(ParameterMode2_1.IN, ormParameter.getMode());
128
		assertNull(parameterResource.getMode());
129
				
130
		//set mode in the context model, verify resource model updated
131
		ormParameter.setSpecifiedMode(ParameterMode2_1.INOUT);
132
		assertEquals(ParameterMode2_1.INOUT, ormParameter.getMode());
133
		assertEquals(ParameterMode_2_1.INOUT, parameterResource.getMode());
134
		
135
		//set new mode in the context model, verify resource model updated
136
		ormParameter.setSpecifiedMode(ParameterMode2_1.OUT);
137
		assertEquals(ParameterMode2_1.OUT, ormParameter.getMode());
138
		assertEquals(ParameterMode_2_1.OUT, parameterResource.getMode());
139
140
	
141
		//set mode to null in the context model
142
		ormParameter.setSpecifiedMode(null);
143
		assertNull(ormParameter.getSpecifiedMode());
144
		// test default mode
145
		assertEquals(ParameterMode2_1.IN, ormParameter.getMode());
146
		assertNull(parameterResource.getMode());
147
	}
148
	
149
	// *********** type name *********
150
	
151
	public void testUpdateTypeName() throws Exception {
152
		OrmPersistentType ormPersistentType = getEntityMappings().addPersistentType(MappingKeys.ENTITY_TYPE_MAPPING_KEY, "model.Foo");
153
		OrmEntity ormEntity = (OrmEntity) ormPersistentType.getMapping();
154
		OrmStoredProcedureParameter2_1 ormParameter = ((OrmQueryContainer2_1) ormEntity.getQueryContainer()).addNamedStoredProcedureQuery(0).addParameter(0);
155
		
156
		XmlStoredProcedureParameter parameterResource = getXmlEntityMappings().getEntities().get(0).getNamedStoredProcedureQueries().get(0).getParameters().get(0);
157
		
158
		assertNull(ormParameter.getTypeName());
159
		assertNull(parameterResource.getClassName());
160
		
161
		//set type name in the resource model, verify context model updated
162
		parameterResource.setClassName("MyType");
163
		assertEquals("MyType", ormParameter.getTypeName());
164
		assertEquals("MyType", parameterResource.getClassName());
165
	
166
		//set type name to null in the resource model
167
		parameterResource.setClassName(null);
168
		assertNull(ormParameter.getTypeName());
169
		assertNull(parameterResource.getClassName());
170
	}
171
	
172
	public void testModifyTypeName() throws Exception {
173
		OrmPersistentType ormPersistentType = getEntityMappings().addPersistentType(MappingKeys.ENTITY_TYPE_MAPPING_KEY, "model.Foo");
174
		OrmEntity ormEntity = (OrmEntity) ormPersistentType.getMapping();
175
		OrmStoredProcedureParameter2_1 ormParameter = ((OrmQueryContainer2_1) ormEntity.getQueryContainer()).addNamedStoredProcedureQuery(0).addParameter(0);
176
		
177
		XmlStoredProcedureParameter parameterResource = getXmlEntityMappings().getEntities().get(0).getNamedStoredProcedureQueries().get(0).getParameters().get(0);
178
		
179
		assertNull(ormParameter.getTypeName());
180
		assertNull(parameterResource.getClassName());
181
				
182
		//set type name in the resource model, verify context model updated
183
		parameterResource.setClassName("MyType");
184
		assertEquals("MyType", ormParameter.getTypeName());
185
		assertEquals("MyType", parameterResource.getClassName());
186
	
187
		//set type name in the resource model, verify context model updated
188
		parameterResource.setClassName("MyNewType");
189
		assertEquals("MyNewType", ormParameter.getTypeName());
190
		assertEquals("MyNewType", parameterResource.getClassName());
191
	
192
		//set type name to null in the resource model
193
		parameterResource.setClassName(null);
194
		assertNull(ormParameter.getTypeName());
195
		assertNull(parameterResource.getClassName());
196
	}
197
}
(-)src/org/eclipse/jpt/jpa/core/tests/internal/jpa2_1/resource/java/StoredProcedureParameter2_1AnnotationTests.java (-13 / +13 lines)
Lines 15-21 Link Here
15
import org.eclipse.jpt.common.utility.internal.iterator.IteratorTools;
15
import org.eclipse.jpt.common.utility.internal.iterator.IteratorTools;
16
import org.eclipse.jpt.jpa.core.jpa2_1.resource.java.JPA2_1;
16
import org.eclipse.jpt.jpa.core.jpa2_1.resource.java.JPA2_1;
17
import org.eclipse.jpt.jpa.core.jpa2_1.resource.java.NamedStoredProcedureQuery2_1Annotation;
17
import org.eclipse.jpt.jpa.core.jpa2_1.resource.java.NamedStoredProcedureQuery2_1Annotation;
18
import org.eclipse.jpt.jpa.core.jpa2_1.resource.java.ParameterMode2_1;
18
import org.eclipse.jpt.jpa.core.jpa2_1.resource.java.ParameterMode_2_1;
19
import org.eclipse.jpt.jpa.core.jpa2_1.resource.java.StoredProcedureParameter2_1Annotation;
19
import org.eclipse.jpt.jpa.core.jpa2_1.resource.java.StoredProcedureParameter2_1Annotation;
20
20
21
@SuppressWarnings("nls")
21
@SuppressWarnings("nls")
Lines 85-91 Link Here
85
		
85
		
86
		NamedStoredProcedureQuery2_1Annotation namedQuery = (NamedStoredProcedureQuery2_1Annotation) resourceType.getAnnotation(0, JPA2_1.NAMED_STORED_PROCEDURE_QUERY);
86
		NamedStoredProcedureQuery2_1Annotation namedQuery = (NamedStoredProcedureQuery2_1Annotation) resourceType.getAnnotation(0, JPA2_1.NAMED_STORED_PROCEDURE_QUERY);
87
		StoredProcedureParameter2_1Annotation parameter = namedQuery.parameterAt(0);
87
		StoredProcedureParameter2_1Annotation parameter = namedQuery.parameterAt(0);
88
		assertEquals(ParameterMode2_1.IN, parameter.getMode());
88
		assertEquals(ParameterMode_2_1.IN, parameter.getMode());
89
	}
89
	}
90
90
91
	public void testSetMode() throws Exception {
91
	public void testSetMode() throws Exception {
Lines 94-103 Link Here
94
		
94
		
95
		NamedStoredProcedureQuery2_1Annotation namedQuery = (NamedStoredProcedureQuery2_1Annotation) resourceType.getAnnotation(0, JPA2_1.NAMED_STORED_PROCEDURE_QUERY);
95
		NamedStoredProcedureQuery2_1Annotation namedQuery = (NamedStoredProcedureQuery2_1Annotation) resourceType.getAnnotation(0, JPA2_1.NAMED_STORED_PROCEDURE_QUERY);
96
		StoredProcedureParameter2_1Annotation parameter = namedQuery.parameterAt(0);
96
		StoredProcedureParameter2_1Annotation parameter = namedQuery.parameterAt(0);
97
		assertEquals(ParameterMode2_1.IN, parameter.getMode());
97
		assertEquals(ParameterMode_2_1.IN, parameter.getMode());
98
		
98
		
99
		parameter.setMode(ParameterMode2_1.INOUT);
99
		parameter.setMode(ParameterMode_2_1.INOUT);
100
		assertEquals(ParameterMode2_1.INOUT, parameter.getMode());
100
		assertEquals(ParameterMode_2_1.INOUT, parameter.getMode());
101
		assertSourceContains("@StoredProcedureParameter(name = \"MyParameter\", mode = INOUT, type = MyType.class)", cu);
101
		assertSourceContains("@StoredProcedureParameter(name = \"MyParameter\", mode = INOUT, type = MyType.class)", cu);
102
	
102
	
103
		parameter.setMode(null);
103
		parameter.setMode(null);
Lines 114-120 Link Here
114
		NamedStoredProcedureQuery2_1Annotation namedQuery = (NamedStoredProcedureQuery2_1Annotation) resourceType.getAnnotation(0, JPA2_1.NAMED_STORED_PROCEDURE_QUERY);
114
		NamedStoredProcedureQuery2_1Annotation namedQuery = (NamedStoredProcedureQuery2_1Annotation) resourceType.getAnnotation(0, JPA2_1.NAMED_STORED_PROCEDURE_QUERY);
115
		StoredProcedureParameter2_1Annotation parameter = namedQuery.parameterAt(0);
115
		StoredProcedureParameter2_1Annotation parameter = namedQuery.parameterAt(0);
116
116
117
		assertEquals("MyType", parameter.getType());
117
		assertEquals("MyType", parameter.getTypeName());
118
	}
118
	}
119
119
120
	public void testSetType() throws Exception {
120
	public void testSetType() throws Exception {
Lines 124-137 Link Here
124
		NamedStoredProcedureQuery2_1Annotation namedQuery = (NamedStoredProcedureQuery2_1Annotation) resourceType.getAnnotation(0, JPA2_1.NAMED_STORED_PROCEDURE_QUERY);
124
		NamedStoredProcedureQuery2_1Annotation namedQuery = (NamedStoredProcedureQuery2_1Annotation) resourceType.getAnnotation(0, JPA2_1.NAMED_STORED_PROCEDURE_QUERY);
125
		StoredProcedureParameter2_1Annotation parameter = namedQuery.parameterAt(0);
125
		StoredProcedureParameter2_1Annotation parameter = namedQuery.parameterAt(0);
126
126
127
		assertEquals("MyType", parameter.getType());
127
		assertEquals("MyType", parameter.getTypeName());
128
		
128
		
129
		parameter.setType("Foo");
129
		parameter.setTypeName("Foo");
130
		assertEquals("Foo", parameter.getType());	
130
		assertEquals("Foo", parameter.getTypeName());	
131
		assertSourceContains("@StoredProcedureParameter(name = \"MyParameter\", mode = ParameterMode.IN, type = Foo.class", cu);
131
		assertSourceContains("@StoredProcedureParameter(name = \"MyParameter\", mode = ParameterMode.IN, type = Foo.class", cu);
132
		
132
		
133
		parameter.setType(null);
133
		parameter.setTypeName(null);
134
		assertNull(parameter.getType());
134
		assertNull(parameter.getTypeName());
135
		assertSourceDoesNotContain("type", cu);
135
		assertSourceDoesNotContain("type", cu);
136
		assertSourceContains("@StoredProcedureParameter(name = \"MyParameter\", mode = ParameterMode.IN", cu);
136
		assertSourceContains("@StoredProcedureParameter(name = \"MyParameter\", mode = ParameterMode.IN", cu);
137
	}
137
	}
Lines 143-152 Link Here
143
		NamedStoredProcedureQuery2_1Annotation namedQuery = (NamedStoredProcedureQuery2_1Annotation) resourceType.getAnnotation(0, JPA2_1.NAMED_STORED_PROCEDURE_QUERY);
143
		NamedStoredProcedureQuery2_1Annotation namedQuery = (NamedStoredProcedureQuery2_1Annotation) resourceType.getAnnotation(0, JPA2_1.NAMED_STORED_PROCEDURE_QUERY);
144
		StoredProcedureParameter2_1Annotation parameter = namedQuery.parameterAt(0);
144
		StoredProcedureParameter2_1Annotation parameter = namedQuery.parameterAt(0);
145
145
146
		assertNotNull(parameter.getType());
146
		assertNotNull(parameter.getTypeName());
147
		assertEquals("MyType", parameter.getFullyQualifiedTypeName());
147
		assertEquals("MyType", parameter.getFullyQualifiedTypeName());
148
148
149
		parameter.setType(TYPE_NAME);		
149
		parameter.setTypeName(TYPE_NAME);		
150
		
150
		
151
		assertEquals(FULLY_QUALIFIED_TYPE_NAME, parameter.getFullyQualifiedTypeName());				
151
		assertEquals(FULLY_QUALIFIED_TYPE_NAME, parameter.getFullyQualifiedTypeName());				
152
		assertSourceContains("@StoredProcedureParameter(name = \"MyParameter\", mode = ParameterMode.IN, type = " + TYPE_NAME + ".class)", cu);
152
		assertSourceContains("@StoredProcedureParameter(name = \"MyParameter\", mode = ParameterMode.IN, type = " + TYPE_NAME + ".class)", cu);

Return to bug 392701