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

import java.util.List;
import org.eclipse.jdt.core.dom.CompilationUnit;
import org.eclipse.jpt.core.context.Entity;
import org.eclipse.jpt.core.context.InheritanceType;
import org.eclipse.jpt.core.context.java.JavaEntity;
import org.eclipse.jpt.core.context.java.JavaTable;
import org.eclipse.jpt.core.internal.validation.DefaultJpaValidationMessages;
import org.eclipse.jpt.core.internal.validation.JpaValidationMessages;
import org.eclipse.jpt.core.resource.java.JavaResourcePersistentMember;
import org.eclipse.jpt.core.resource.java.TableAnnotation;
import org.eclipse.wst.validation.internal.provisional.core.IMessage;


public class GenericJavaTable extends AbstractJavaTable implements JavaTable
{
	protected JavaResourcePersistentMember persistentResource;

	public GenericJavaTable(JavaEntity parent) {
		super(parent);
	}
	
	public void initializeFromResource(JavaResourcePersistentMember persistentResource) {
		this.persistentResource = persistentResource;
		initializeFromResource(getTableResource());
	}

	
	//query for the table resource every time on setters.
	//call one setter and the tableResource could change. 
	//You could call more than one setter before this object has received any notification
	//from the java resource model
	@Override
	protected TableAnnotation getTableResource() {
		//TODO get the NullTable from the resource model or build it here in the context model??
		return (TableAnnotation) this.persistentResource.getNonNullAnnotation(getAnnotationName());
	}

	@Override
	protected String getAnnotationName() {
		return TableAnnotation.ANNOTATION_NAME;
	}
	
	@Override
	public JavaEntity getParent() {
		return (JavaEntity) super.getParent();
	}
	
	protected JavaEntity getJavaEntity() {
		return getParent();
	}
	
	protected Entity getRootEntity() {
		return getJavaEntity().getRootEntity();
	}
	
	@Override
	/**
	 * Table name default to the owning java entity name.
	 * If this entity is part of a single table inheritance hierarchy, table
	 * name defaults to the root entity's table name.
	 */
	protected String defaultName() {
		if (getJavaEntity().getInheritanceStrategy() == InheritanceType.SINGLE_TABLE) {
			if (getRootEntity() != getJavaEntity()) {
				return getRootEntity().getTable().getName();
			}
		}
		return getJavaEntity().getName();
	}
	
	@Override
	protected String defaultSchema() {
		if (getJavaEntity().getInheritanceStrategy() == InheritanceType.SINGLE_TABLE) {
			if (getRootEntity() != getJavaEntity()) {
				return getRootEntity().getTable().getSchema();
			}
		}
		return super.defaultSchema();
	}
	
	@Override
	protected String defaultCatalog() {
		if (getJavaEntity().getInheritanceStrategy() == InheritanceType.SINGLE_TABLE) {
			if (getRootEntity() != getJavaEntity()) {
				return getRootEntity().getTable().getCatalog();
			}
		}
		return super.defaultCatalog();
	}
	
	public void update(JavaResourcePersistentMember persistentResource) {
		this.persistentResource = persistentResource;
		this.update(getTableResource());
	}

	//******************* validation **********************
	
	@Override
	public void addToMessages(List<IMessage> messages, CompilationUnit astRoot) {
		super.addToMessages(messages, astRoot);
		boolean doContinue = this.connectionProfileIsActive();
		String schema = getSchema();
		
		if (doContinue && ! hasResolvedSchema()) {
			messages.add(
					DefaultJpaValidationMessages.buildMessage(
						IMessage.HIGH_SEVERITY,
						JpaValidationMessages.TABLE_UNRESOLVED_SCHEMA,
						new String[] {schema, getName()}, 
						this, 
						getSchemaTextRange(astRoot))
				);
			doContinue = false;
		}
		
		if (doContinue && ! isResolved()) {
			messages.add(
					DefaultJpaValidationMessages.buildMessage(
						IMessage.HIGH_SEVERITY,
						JpaValidationMessages.TABLE_UNRESOLVED_NAME,
						new String[] {getName()}, 
						this, 
						getNameTextRange(astRoot))
				);
		}
	}
}

Back to the top