Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read this important communication.
View | Details | Raw Unified | Return to bug 293467
Collapse All | Expand All

(-)META-INF/MANIFEST.MF (-1 / +1 lines)
Lines 2-8 Link Here
2
Bundle-ManifestVersion: 2
2
Bundle-ManifestVersion: 2
3
Bundle-Name: %plugin.name
3
Bundle-Name: %plugin.name
4
Bundle-SymbolicName: org.eclipse.jst.jsf.common;singleton:=true
4
Bundle-SymbolicName: org.eclipse.jst.jsf.common;singleton:=true
5
Bundle-Version: 1.1.4.qualifier
5
Bundle-Version: 1.1.5.qualifier
6
Bundle-Activator: org.eclipse.jst.jsf.common.JSFCommonPlugin$Implementation
6
Bundle-Activator: org.eclipse.jst.jsf.common.JSFCommonPlugin$Implementation
7
Bundle-Localization: plugin
7
Bundle-Localization: plugin
8
Export-Package: org.eclipse.jst.jsf.common;x-internal:=true,
8
Export-Package: org.eclipse.jst.jsf.common;x-internal:=true,
(-)src/org/eclipse/jst/jsf/common/util/TypeUtil.java (-9 / +9 lines)
Lines 15-30 Link Here
15
import java.util.ArrayList;
15
import java.util.ArrayList;
16
import java.util.List;
16
import java.util.List;
17
17
18
import org.eclipse.core.runtime.NullProgressMonitor;
19
import org.eclipse.jdt.core.IField;
18
import org.eclipse.jdt.core.IField;
20
import org.eclipse.jdt.core.IJavaProject;
19
import org.eclipse.jdt.core.IJavaProject;
21
import org.eclipse.jdt.core.IType;
20
import org.eclipse.jdt.core.IType;
22
import org.eclipse.jdt.core.ITypeHierarchy;
23
import org.eclipse.jdt.core.ITypeParameter;
21
import org.eclipse.jdt.core.ITypeParameter;
24
import org.eclipse.jdt.core.JavaModelException;
22
import org.eclipse.jdt.core.JavaModelException;
25
import org.eclipse.jdt.core.Signature;
23
import org.eclipse.jdt.core.Signature;
26
import org.eclipse.jst.jsf.common.JSFCommonPlugin;
24
import org.eclipse.jst.jsf.common.JSFCommonPlugin;
27
import org.eclipse.jst.jsf.common.internal.types.TypeConstants;
25
import org.eclipse.jst.jsf.common.internal.types.TypeConstants;
26
import org.eclipse.jst.jsf.common.internal.types.TypeInfoCache;
28
27
29
/**
28
/**
30
 * Utility for handling IType's and type signatures
29
 * Utility for handling IType's and type signatures
Lines 359-369 Link Here
359
                                throws JavaModelException
358
                                throws JavaModelException
360
    {
359
    {
361
        IType resolvedType = null;
360
        IType resolvedType = null;
361
362
        final TypeInfoCache typeInfoCache = TypeInfoCache.getInstance();
363
        IType[] superTypes = typeInfoCache.getCachedSupertypes(childType);
364
        if (superTypes == null) {
365
        	superTypes = typeInfoCache.cacheSupertypesFor(childType);
366
        }
362
        
367
        
363
        // not resolved? try the supertypes
364
        final ITypeHierarchy typeHierarchy =
365
            childType.newSupertypeHierarchy(new NullProgressMonitor());
366
        IType[] superTypes = typeHierarchy.getAllSupertypes(childType);
367
        String[][]   resolved;
368
        String[][]   resolved;
368
        
369
        
369
        LOOP_UNTIL_FIRST_MATCH:
370
        LOOP_UNTIL_FIRST_MATCH:
Lines 394-402 Link Here
394
     */
395
     */
395
    public static IType resolveType(final IJavaProject javaProject, final String fullyResolvedTypeSignature)
396
    public static IType resolveType(final IJavaProject javaProject, final String fullyResolvedTypeSignature)
396
    {
397
    {
397
        final String fullyQualifiedName =
398
        String fullyQualifiedName = getFullyQualifiedName(fullyResolvedTypeSignature);
398
            getFullyQualifiedName(fullyResolvedTypeSignature);
399
        fullyQualifiedName = Signature.getTypeErasure(fullyQualifiedName);
399
        
400
        try {
400
        try {
401
            return javaProject.findType(fullyQualifiedName);
401
            return javaProject.findType(fullyQualifiedName);
402
        } catch (JavaModelException e) {
402
        } catch (JavaModelException e) {
(-)src/org/eclipse/jst/jsf/common/metadata/internal/StandardMetaDataFilesTranslator.java (-6 / +11 lines)
Lines 14-19 Link Here
14
import java.util.Iterator;
14
import java.util.Iterator;
15
15
16
import org.eclipse.core.runtime.IStatus;
16
import org.eclipse.core.runtime.IStatus;
17
import org.eclipse.emf.ecore.util.EcoreUtil.Copier;
17
import org.eclipse.jst.jsf.common.JSFCommonPlugin;
18
import org.eclipse.jst.jsf.common.JSFCommonPlugin;
18
import org.eclipse.jst.jsf.common.metadata.Entity;
19
import org.eclipse.jst.jsf.common.metadata.Entity;
19
import org.eclipse.jst.jsf.common.metadata.EntityGroup;
20
import org.eclipse.jst.jsf.common.metadata.EntityGroup;
Lines 42-57 Link Here
42
		//assert assistant.getSourceModel() instanceof ModelKeyDescriptor;
43
		//assert assistant.getSourceModel() instanceof ModelKeyDescriptor;
43
		
44
		
44
		MetaDataModel mm = assistant.getMergedModel();
45
		MetaDataModel mm = assistant.getMergedModel();
45
		if (mm.getRoot() == null)
46
		Model mk = (Model)assistant.getSourceModelProvider().getSourceModel();
46
			mm.setRoot(assistant.getSourceModelProvider().getSourceModel());
47
		if (mm.getRoot() == null) {
47
		
48
			//create copy, otherwise source model becomes merged model because of reference
49
			Copier copier = new Copier();		
50
			Model newModel = (Model)copier.copy(mk.getModel());
51
			copier.copyReferences();
52
			mm.setRoot(newModel);
53
		}
48
		else {
54
		else {
49
			//for each entity and trait call "add".   assistant will handle merge.
55
			//for each entity and trait call "add".   assistant will handle merge.			
50
			Model mk = (Model)assistant.getSourceModelProvider().getSourceModel();
51
			if (mk != null) {//possible that model was not loaded 
56
			if (mk != null) {//possible that model was not loaded 
52
				traverseAndAdd(assistant, mk);
57
				traverseAndAdd(assistant, mk);
53
			} else if (StandardModelFactory.DEBUG_MD_LOAD) {
58
			} else if (StandardModelFactory.DEBUG_MD_LOAD) {
54
				JSFCommonPlugin.log(IStatus.ERROR,"Unable to load source model: "+assistant.getSourceModelProvider());
59
				JSFCommonPlugin.log(IStatus.ERROR,"Unable to load source model: "+assistant.getSourceModelProvider()); //$NON-NLS-1$
55
			}
60
			}
56
		}			
61
		}			
57
	}
62
	}
(-)src/org/eclipse/jst/jsf/common/metadata/internal/DomainSourceTypesRegistry.java (-18 / +13 lines)
Lines 30-39 Link Here
30
 * Registry of Domain Source Types loaded from domainSourceModelTypes ext-pt.
30
 * Registry of Domain Source Types loaded from domainSourceModelTypes ext-pt.
31
 */
31
 */
32
public class DomainSourceTypesRegistry{
32
public class DomainSourceTypesRegistry{
33
	private static final String EXTENSION_POINT_ID = "domainSourceModelTypes";
33
	private static final String EXTENSION_POINT_ID = "domainSourceModelTypes"; //$NON-NLS-1$
34
	private static DomainSourceTypesRegistry INSTANCE;
34
	private static DomainSourceTypesRegistry INSTANCE;
35
	private Map/*<String, List/*<DomainSourceModelTypeDescriptor>>*/ domainSourceTypeDescriptors;
35
	private Map/*<String, List/*<DomainSourceModelTypeDescriptor>>*/ domainSourceTypeDescriptors;
36
	private Map/*<String, List/*<IDomainSourceModelType>*/ domainSourceTypes;
37
	
36
	
38
	private DomainSourceTypesRegistry(){
37
	private DomainSourceTypesRegistry(){
39
		init();
38
		init();
Lines 53-62 Link Here
53
	 * @param domain identifier
52
	 * @param domain identifier
54
	 * @return list of <code>IDomainSourceModelType</code> sorted in descending order by ordinal
53
	 * @return list of <code>IDomainSourceModelType</code> sorted in descending order by ordinal
55
	 */
54
	 */
56
	public List/*<IDomainSourceModelType>*/ getDomainSourceTypes(String domain){
55
	public List/*<IDomainSourceModelType>*/ getDomainSourceTypes(String domain){		
57
		if (getDomainSourceTypes().containsKey(domain))
58
			return (List)getDomainSourceTypes().get(domain);
59
		
60
		List/*<DomainSourceModelTypeDescriptor>*/ list = getDomainSourceModelDescriptors(domain);
56
		List/*<DomainSourceModelTypeDescriptor>*/ list = getDomainSourceModelDescriptors(domain);
61
		List/*<IDomainSourceModelType>*/ types = new ArrayList/*<IDomainSourceModelType>*/();
57
		List/*<IDomainSourceModelType>*/ types = new ArrayList/*<IDomainSourceModelType>*/();
62
		for(Iterator/*<DomainSourceModelTypeDescriptor>*/ it=list.iterator();it.hasNext();){
58
		for(Iterator/*<DomainSourceModelTypeDescriptor>*/ it=list.iterator();it.hasNext();){
Lines 78-84 Link Here
78
			
74
			
79
		});
75
		});
80
		
76
		
81
		getDomainSourceTypes().put(domain, types);
82
		return types;
77
		return types;
83
	}
78
	}
84
	
79
	
Lines 110-121 Link Here
110
	}
105
	}
111
106
112
	private void addDomainSourceTypeDescriptor(IConfigurationElement element) {
107
	private void addDomainSourceTypeDescriptor(IConfigurationElement element) {
113
		String domainId = element.getAttribute("domainId");
108
		String domainId = element.getAttribute("domainId"); //$NON-NLS-1$
114
		String srcHdlrId = element.getAttribute("domainSourceModelTypeId");
109
		String srcHdlrId = element.getAttribute("domainSourceModelTypeId"); //$NON-NLS-1$
115
		String locator = element.getAttribute("locator");
110
		String locator = element.getAttribute("locator"); //$NON-NLS-1$
116
		String ordinalStr = element.getAttribute("ordinal");
111
		String ordinalStr = element.getAttribute("ordinal"); //$NON-NLS-1$
117
		int ordinal = 1;
112
		int ordinal = 1;
118
		if (ordinalStr!=null && !ordinalStr.equals("")){
113
		if (ordinalStr!=null && !ordinalStr.equals("")){ //$NON-NLS-1$
119
			ordinal = Integer.parseInt(ordinalStr);
114
			ordinal = Integer.parseInt(ordinalStr);
120
		}
115
		}
121
		DomainSourceModelTypeDescriptor d = new DomainSourceModelTypeDescriptor(domainId, srcHdlrId, locator, element.getContributor().getName(), ordinal);
116
		DomainSourceModelTypeDescriptor d = new DomainSourceModelTypeDescriptor(domainId, srcHdlrId, locator, element.getContributor().getName(), ordinal);
Lines 134-144 Link Here
134
		return domainSourceTypeDescriptors;
129
		return domainSourceTypeDescriptors;
135
	}
130
	}
136
	
131
	
137
	private Map/*<String, List/*<IDomainSourceModelType>>*/ getDomainSourceTypes() {
132
//	private Map/*<String, List/*<IDomainSourceModelType>>*/ getDomainSourceTypes() {
138
		if (domainSourceTypes == null){
133
//		if (domainSourceTypes == null){
139
			domainSourceTypes = new HashMap/*<String, List/*<IDomainSourceModelType>>*/();
134
//			domainSourceTypes = new HashMap/*<String, List/*<IDomainSourceModelType>>*/();
140
		}
135
//		}
141
		return domainSourceTypes;
136
//		return domainSourceTypes;
142
	}
137
//	}
143
138
144
}
139
}
(-)src/org/eclipse/jst/jsf/common/metadata/internal/DomainLoadingStrategy.java (-23 / +21 lines)
Lines 59-65 Link Here
59
	 * @see org.eclipse.jst.jsf.common.metadata.internal.IDomainLoadingStrategy#reload()
59
	 * @see org.eclipse.jst.jsf.common.metadata.internal.IDomainLoadingStrategy#reload()
60
	 */
60
	 */
61
	public void reload() throws ModelNotSetException {
61
	public void reload() throws ModelNotSetException {
62
		System.out.println("reload");//debug
62
		//System.out.println("reload");//debug //$NON-NLS-1$
63
		if (_model == null)
63
		if (_model == null)
64
			throw new ModelNotSetException();
64
			throw new ModelNotSetException();
65
		
65
		
Lines 77-83 Link Here
77
	 */
77
	 */
78
	protected void mergeModel(MetaDataModel model, List/*<IMetaDataSourceModelProvider>*/ sources) {		
78
	protected void mergeModel(MetaDataModel model, List/*<IMetaDataSourceModelProvider>*/ sources) {		
79
79
80
		StandardModelFactory.debug(">> Begin Merge: "+model.getModelKey()+"("+sources.size()+ " sources)", StandardModelFactory.DEBUG_MD_LOAD);
80
		StandardModelFactory.debug(">> Begin Merge: "+model.getModelKey()+"("+sources.size()+ " sources)", StandardModelFactory.DEBUG_MD_LOAD); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
81
81
82
		IMetaDataModelMergeAssistant assistant = createModelMergeAssistant(model);
82
		IMetaDataModelMergeAssistant assistant = createModelMergeAssistant(model);
83
		for (Iterator/*<IMetaDataSourceModelProvider>*/ it = sources.iterator();it.hasNext();){
83
		for (Iterator/*<IMetaDataSourceModelProvider>*/ it = sources.iterator();it.hasNext();){
Lines 86-104 Link Here
86
			while (translators.hasNext()){
86
			while (translators.hasNext()){
87
				IMetaDataTranslator translator = (IMetaDataTranslator)translators.next();
87
				IMetaDataTranslator translator = (IMetaDataTranslator)translators.next();
88
				if (translator.canTranslate(mds)){
88
				if (translator.canTranslate(mds)){
89
					StandardModelFactory.debug(">>> Merging: "+model.getModelKey()+"::"+mds, StandardModelFactory.DEBUG_MD_LOAD);
89
					StandardModelFactory.debug(">>> Merging: "+model.getModelKey()+"::"+mds, StandardModelFactory.DEBUG_MD_LOAD);  //$NON-NLS-1$//$NON-NLS-2$
90
					assistant.setSourceModelProvider(mds);
90
					assistant.setSourceModelProvider(mds);
91
					try {
91
					try {
92
						translator.translate(assistant);
92
						translator.translate(assistant);
93
					} catch (Exception e) {							
93
					} catch (Exception e) {							
94
						StandardModelFactory.debug(">>>> Error during translate/merge of: "+model.getModelKey()+": "+mds, StandardModelFactory.DEBUG_MD_LOAD);															
94
						StandardModelFactory.debug(">>>> Error during translate/merge of: "+model.getModelKey()+": "+mds, StandardModelFactory.DEBUG_MD_LOAD);															 //$NON-NLS-1$ //$NON-NLS-2$
95
						JSFCommonPlugin.log(IStatus.ERROR, "Error during load of: "+mds, e);
95
						JSFCommonPlugin.log(IStatus.ERROR, "Error during load of: "+mds, e); //$NON-NLS-1$
96
					}
96
					}
97
				}				
97
				}				
98
			}
98
			}
99
		}
99
		}
100
		assistant.setMergeComplete();
100
		assistant.setMergeComplete();
101
		StandardModelFactory.debug(">> End Merge: "+model.getModelKey(),StandardModelFactory.DEBUG_MD_LOAD);
101
		StandardModelFactory.debug(">> End Merge: "+model.getModelKey(),StandardModelFactory.DEBUG_MD_LOAD); //$NON-NLS-1$
102
	}
102
	}
103
	
103
	
104
	/**
104
	/**
Lines 135-159 Link Here
135
		List/*<IMetaDataSourceModelProvider>*/ sources = new ArrayList/*<IMetaDataSourceModelProvider>*/();		
135
		List/*<IMetaDataSourceModelProvider>*/ sources = new ArrayList/*<IMetaDataSourceModelProvider>*/();		
136
		for (Iterator/*<IDomainSourceModelType>*/ it = sourceTypes.iterator();it.hasNext();){
136
		for (Iterator/*<IDomainSourceModelType>*/ it = sourceTypes.iterator();it.hasNext();){
137
			IDomainSourceModelType sourceType = (IDomainSourceModelType)it.next();
137
			IDomainSourceModelType sourceType = (IDomainSourceModelType)it.next();
138
			IMetaDataLocator locator = sourceType.getLocator();
138
			IMetaDataLocator locator = sourceType.getLocator(model.getModelKey().getProject());
139
			//We MUST set the sourceType here to associate the handler with locator to use for the source models
139
			if (locator != null) {
140
			locator.setDomainSourceModelType(sourceType);
140
				//We MUST set the sourceType here to associate the handler with locator to use for the source models
141
			
141
				locator.setDomainSourceModelType(sourceType);
142
			//set project context in locator for those that care
142
								
143
			if (locator instanceof IPathSensitiveMetaDataLocator)
143
				List/*<IMetaDataSourceModelProvider>*/ providers = locator.locateMetaDataModelProviders(model.getModelKey().getUri());
144
				((IPathSensitiveMetaDataLocator)locator).setProjectContext(model.getModelKey().getProject());
144
				if (providers != null && !providers.isEmpty()){
145
			
145
					for (Iterator mdProviders =providers.iterator();mdProviders.hasNext();){
146
			List/*<IMetaDataSourceModelProvider>*/ providers = sourceType.getLocator().locateMetaDataModelProviders(model.getModelKey().getUri());
146
						IMetaDataSourceModelProvider provider = (IMetaDataSourceModelProvider)mdProviders.next();
147
			if (providers != null && !providers.isEmpty()){
147
						//We MUST set the sourceType here to associate the translators to use for the source models
148
				for (Iterator mdProviders =providers.iterator();mdProviders.hasNext();){
148
						provider.setLocator(locator);
149
					IMetaDataSourceModelProvider provider = (IMetaDataSourceModelProvider)mdProviders.next();
149
						sources.add(provider);
150
					//We MUST set the sourceType here to associate the translators to use for the source models
150
					}
151
					provider.setLocator(sourceType.getLocator());
152
					sources.add(provider);
153
				}
151
				}
152
				//listen for changes
153
				locator.addObserver(this);
154
			}
154
			}
155
			//listen for changes
156
			sourceType.getLocator().addObserver(this);
157
		}
155
		}
158
		return sources;
156
		return sources;
159
	}
157
	}
(-)src/org/eclipse/jst/jsf/common/metadata/internal/DomainSourceModelTypeDescriptor.java (-29 / +19 lines)
Lines 15-20 Link Here
15
import java.util.Iterator;
15
import java.util.Iterator;
16
import java.util.Set;
16
import java.util.Set;
17
17
18
import org.eclipse.core.resources.IProject;
18
import org.eclipse.core.runtime.IConfigurationElement;
19
import org.eclipse.core.runtime.IConfigurationElement;
19
import org.eclipse.core.runtime.IExtensionPoint;
20
import org.eclipse.core.runtime.IExtensionPoint;
20
import org.eclipse.core.runtime.IExtensionRegistry;
21
import org.eclipse.core.runtime.IExtensionRegistry;
Lines 28-42 Link Here
28
 * <code>com.eclipse.jst.jsf.common.domainSourceModelTypeTranslators</code> ext-pt
29
 * <code>com.eclipse.jst.jsf.common.domainSourceModelTypeTranslators</code> ext-pt
29
 */
30
 */
30
public class DomainSourceModelTypeDescriptor {
31
public class DomainSourceModelTypeDescriptor {
31
	private static final String TRANSLATORS_EXTENSION_POINT_ID = "domainSourceModelTypeTranslators";
32
	private static final String TRANSLATORS_EXTENSION_POINT_ID = "domainSourceModelTypeTranslators"; //$NON-NLS-1$
32
	private static final String STANDARD_FILE_NULL_TRANSLATOR = "org.eclipse.jst.jsf.common.metadata.internal.StandardMetaDataFilesTranslator";
33
	private static final String STANDARD_FILE_NULL_TRANSLATOR = "org.eclipse.jst.jsf.common.metadata.internal.StandardMetaDataFilesTranslator"; //$NON-NLS-1$
33
	private String domain = "DEFAULT";
34
	private String domain = "DEFAULT"; //$NON-NLS-1$
34
	private String domainSourceModelTypeId;
35
	private String domainSourceModelTypeId;
35
	private String locatorClassName = "org.eclipse.jst.jsf.common.metadata.internal.StandardMetaDataLocator";
36
	private String locatorClassName = "org.eclipse.jst.jsf.common.metadata.internal.StandardMetaDataLocator"; //$NON-NLS-1$
36
	private Set translatorDescriptors;
37
	private Set translatorDescriptors;
37
	private String bundleId = JSFCommonPlugin.PLUGIN_ID;
38
	private String bundleId = JSFCommonPlugin.PLUGIN_ID;
38
	private int ordinal;
39
	private int ordinal;
39
	private IDomainSourceModelType _instance;
40
	
40
	
41
	/**
41
	/**
42
	 * Constructor
42
	 * Constructor
Lines 70-76 Link Here
70
			IConfigurationElement[] elements = point.getConfigurationElements();
70
			IConfigurationElement[] elements = point.getConfigurationElements();
71
			for (int i = 0; i < elements.length; i++) {
71
			for (int i = 0; i < elements.length; i++) {
72
				IConfigurationElement element = elements[i];
72
				IConfigurationElement element = elements[i];
73
				String srcHdlrId = element.getAttribute("domainSourceModelTypeId");
73
				String srcHdlrId = element.getAttribute("domainSourceModelTypeId"); //$NON-NLS-1$
74
				if (srcHdlrId.equals(domainSourceModelTypeId))
74
				if (srcHdlrId.equals(domainSourceModelTypeId))
75
					addTranslatorDescriptor(element);
75
					addTranslatorDescriptor(element);
76
			}
76
			}
Lines 78-84 Link Here
78
	}
78
	}
79
	
79
	
80
	private void addTranslatorDescriptor(IConfigurationElement element) {
80
	private void addTranslatorDescriptor(IConfigurationElement element) {
81
		String translator = element.getAttribute("translatorClass");
81
		String translator = element.getAttribute("translatorClass"); //$NON-NLS-1$
82
		DomainSourceModelTranslatorDescriptor d = new DomainSourceModelTranslatorDescriptor(translator, element.getContributor().getName());
82
		DomainSourceModelTranslatorDescriptor d = new DomainSourceModelTranslatorDescriptor(translator, element.getContributor().getName());
83
		getTranslatorDescriptors().add(d);
83
		getTranslatorDescriptors().add(d);
84
	}
84
	}
Lines 98-116 Link Here
98
	}
98
	}
99
	 
99
	 
100
	/**
100
	/**
101
	 * @return singleton instance of the {@link IDomainSourceModelType}
101
	 * @return new instance of the {@link IDomainSourceModelType}
102
	 */
102
	 */
103
	public IDomainSourceModelType getInstance(){
103
	public IDomainSourceModelType getInstance(){
104
		if (_instance == null){
105
			_instance = newInstance();
106
		}
107
		return _instance;
108
	}
109
	/**
110
	 * @return new instance of {@link IDomainSourceModelType} 
111
	 */
112
	private IDomainSourceModelType newInstance(){		
113
114
		return new DomainSourceModelTypeImpl();
104
		return new DomainSourceModelTypeImpl();
115
	}
105
	}
116
	
106
	
Lines 143-151 Link Here
143
		/* (non-Javadoc)
133
		/* (non-Javadoc)
144
		 * @see org.eclipse.jst.jsf.common.metadata.internal.IDomainSourceModelType#getLocator()
134
		 * @see org.eclipse.jst.jsf.common.metadata.internal.IDomainSourceModelType#getLocator()
145
		 */
135
		 */
146
		public IMetaDataLocator getLocator() {
136
		public IMetaDataLocator getLocator(IProject project) {
147
			if (locator == null){
137
			if (locator == null){
148
				locator = MetaDataLocatorFactory.getInstance().getLocator(locatorClassName, bundleId);
138
				locator = MetaDataLocatorFactory.getInstance().getLocator(locatorClassName, bundleId, project);
149
			}
139
			}
150
								
140
								
151
			return locator;
141
			return locator;
Lines 165-176 Link Here
165
		 * @see java.lang.Object#toString()
155
		 * @see java.lang.Object#toString()
166
		 */
156
		 */
167
		public String toString(){
157
		public String toString(){
168
			StringBuffer buf = new StringBuffer("DomainSourceModelTypeImpl");
158
			StringBuffer buf = new StringBuffer("DomainSourceModelTypeImpl"); //$NON-NLS-1$
169
			buf.append("(domain = ");
159
			buf.append("(domain = "); //$NON-NLS-1$
170
			buf.append(getDomain());
160
			buf.append(getDomain());
171
			buf.append(", locator = ");
161
			buf.append(", locator = "); //$NON-NLS-1$
172
			buf.append(getLocator());
162
			buf.append(locator != null ? locator.toString() : "null"); //$NON-NLS-1$
173
			buf.append(")");
163
			buf.append(")"); //$NON-NLS-1$
174
			return buf.toString();
164
			return buf.toString();
175
		}
165
		}
176
		
166
		
Lines 187-196 Link Here
187
					return translators;
177
					return translators;
188
				} catch (InstantiationException e) {
178
				} catch (InstantiationException e) {
189
                    // TODO: other error handling?
179
                    // TODO: other error handling?
190
					JSFCommonPlugin.log(e, "Error in createTranslatorInstances(STANDARD_FILE_NULL_TRANSLATOR)");
180
					JSFCommonPlugin.log(e, "Error in createTranslatorInstances(STANDARD_FILE_NULL_TRANSLATOR)"); //$NON-NLS-1$
191
				} catch (IllegalAccessException e) {
181
				} catch (IllegalAccessException e) {
192
                    // TODO: other error handling?
182
                    // TODO: other error handling?
193
                    JSFCommonPlugin.log(e, "Error in createTranslatorInstances(STANDARD_FILE_NULL_TRANSLATOR)");
183
                    JSFCommonPlugin.log(e, "Error in createTranslatorInstances(STANDARD_FILE_NULL_TRANSLATOR)"); //$NON-NLS-1$
194
				}
184
				}
195
185
196
			}
186
			}
Lines 203-212 Link Here
203
					translators.add(klass.newInstance());
193
					translators.add(klass.newInstance());
204
				} catch (InstantiationException e) {
194
				} catch (InstantiationException e) {
205
                    // TODO: other error handling?
195
                    // TODO: other error handling?
206
                    JSFCommonPlugin.log(e, "Error in createTranslatorInstances");
196
                    JSFCommonPlugin.log(e, "Error in createTranslatorInstances"); //$NON-NLS-1$
207
				} catch (IllegalAccessException e) {
197
				} catch (IllegalAccessException e) {
208
                    // TODO: other error handling?
198
                    // TODO: other error handling?
209
                    JSFCommonPlugin.log(e, "Error in createTranslatorInstances");
199
                    JSFCommonPlugin.log(e, "Error in createTranslatorInstances"); //$NON-NLS-1$
210
				}
200
				}
211
			}
201
			}
212
			return translators;
202
			return translators;
(-)src/org/eclipse/jst/jsf/common/metadata/internal/IDomainSourceModelType.java (-2 / +5 lines)
Lines 13-18 Link Here
13
13
14
import java.util.Set;
14
import java.util.Set;
15
15
16
import org.eclipse.core.resources.IProject;
17
16
/**
18
/**
17
 * Binds a domain of metadata to a source model type which is defined by a {@link IMetaDataLocator} 
19
 * Binds a domain of metadata to a source model type which is defined by a {@link IMetaDataLocator} 
18
 * and set of {@link IMetaDataTranslator}s
20
 * and set of {@link IMetaDataTranslator}s
Lines 24-32 Link Here
24
	 */
26
	 */
25
	public String getDomain();
27
	public String getDomain();
26
	/**
28
	/**
27
	 * @return IMetaDataLocator
29
	 * @param project - may be null
30
	 * @return instance of IMetaDataLocator - may return null if the locator cannot operate in the current context
28
	 */
31
	 */
29
	public IMetaDataLocator getLocator();
32
	public IMetaDataLocator getLocator(IProject project);
30
//	public int getOrdinal();
33
//	public int getOrdinal();
31
	/**
34
	/**
32
	 * @return set of {@link IMetaDataTranslator}s for the domain source model type
35
	 * @return set of {@link IMetaDataTranslator}s for the domain source model type
(-)src/org/eclipse/jst/jsf/common/metadata/internal/MetaDataLocatorFactory.java (-21 / +102 lines)
Lines 10-19 Link Here
10
 *******************************************************************************/
10
 *******************************************************************************/
11
package org.eclipse.jst.jsf.common.metadata.internal;
11
package org.eclipse.jst.jsf.common.metadata.internal;
12
12
13
import java.util.ArrayList;
13
import java.util.HashMap;
14
import java.util.HashMap;
14
import java.util.Iterator;
15
import java.util.Iterator;
16
import java.util.List;
15
import java.util.Map;
17
import java.util.Map;
18
import java.util.StringTokenizer;
16
19
20
import org.eclipse.core.resources.IProject;
21
import org.eclipse.core.resources.IResourceChangeEvent;
22
import org.eclipse.core.resources.IResourceChangeListener;
23
import org.eclipse.core.resources.ResourcesPlugin;
17
import org.eclipse.core.runtime.IStatus;
24
import org.eclipse.core.runtime.IStatus;
18
import org.eclipse.jst.jsf.common.JSFCommonPlugin;
25
import org.eclipse.jst.jsf.common.JSFCommonPlugin;
19
26
Lines 21-76 Link Here
21
 * Creates instances of IMetaDataLocators and caches them so that there is only one instance of a particular locator
28
 * Creates instances of IMetaDataLocators and caches them so that there is only one instance of a particular locator
22
 * when client requests one. 
29
 * when client requests one. 
23
 */
30
 */
24
public class MetaDataLocatorFactory {
31
public class MetaDataLocatorFactory  
32
	implements IResourceChangeListener {
33
	
25
	private static MetaDataLocatorFactory INSTANCE = null;
34
	private static MetaDataLocatorFactory INSTANCE = null;
35
	private Map<String, IMetaDataLocator> _locators;
26
	
36
	
37
	private static final boolean DEBUG = false;
27
	/**
38
	/**
28
	 * @return singleton instance of the MetaDataLocatorFactory
39
	 * @return singleton instance of the MetaDataLocatorFactory
29
	 */
40
	 */
30
	public synchronized static MetaDataLocatorFactory getInstance(){
41
	public synchronized static MetaDataLocatorFactory getInstance(){
31
		if (INSTANCE == null){
42
		if (INSTANCE == null){
32
			INSTANCE = new MetaDataLocatorFactory();
43
			INSTANCE = new MetaDataLocatorFactory();
44
			ResourcesPlugin.getWorkspace().addResourceChangeListener(INSTANCE, IResourceChangeEvent.PRE_CLOSE);
33
		}
45
		}
34
		return INSTANCE;
46
		return INSTANCE;
35
	}
47
	}
36
48
37
	private HashMap _locators;
38
49
39
	private Map getLocators() {
50
51
	private Map<String, IMetaDataLocator> getLocators() {
40
		if (_locators == null){
52
		if (_locators == null){
41
			_locators = new HashMap();
53
			_locators = new HashMap<String, IMetaDataLocator>();
42
		}
54
		}
43
		return _locators;
55
		return _locators;
44
	}
56
	}
45
	
57
	
46
	/**
58
	/**
47
	 * @param locatorClassName
59
	 * @param locatorClassName - may NOT be null
48
	 * @param bundleId
60
	 * @param bundleId - may NOT be null
49
	 * @return IMetaDataLocator
61
	 * @param project - may be null
62
	 * @return shared instance of IMetaDataLocator 
63
	 * 			may return null if is IPathSensitiveMetaDataLocator and there is no project context 
50
	 */
64
	 */
51
	public IMetaDataLocator getLocator(String locatorClassName, String bundleId){
65
	public IMetaDataLocator getLocator(final String locatorClassName, final String bundleId, final IProject project){
66
		final Class klass = JSFCommonPlugin.loadClass(locatorClassName, bundleId);
52
		String key = getKey(locatorClassName, bundleId);
67
		String key = getKey(locatorClassName, bundleId);
53
		IMetaDataLocator locator = (IMetaDataLocator)getLocators().get(key);
68
		IMetaDataLocator locator = null;
54
		if (locator == null){
69
		try {
55
			Class klass = JSFCommonPlugin.loadClass(locatorClassName, bundleId);
70
			IMetaDataLocator tempLocator = (IMetaDataLocator)klass.newInstance();
56
			try {
71
			if (tempLocator != null) {				
57
				locator = (IMetaDataLocator)klass.newInstance();
72
				if (tempLocator instanceof IPathSensitiveMetaDataLocator) {
58
				if (locator != null) {
73
					if (project == null)
74
						return null;
75
					
76
					key = getKey(locatorClassName, project.getName());
77
				}
78
				
79
				locator = getLocators().get(key);
80
				if (locator == null) {
81
					locator = tempLocator;					
82
					if (locator instanceof IPathSensitiveMetaDataLocator)
83
						((IPathSensitiveMetaDataLocator)locator).setProjectContext(project);					
84
					
85
					if (DEBUG)
86
						System.out.println("Created locator: "+locator.toString()); //$NON-NLS-1$
87
					
59
					getLocators().put(key, locator);
88
					getLocators().put(key, locator);
60
					locator.startLocating();
89
					locator.startLocating();
61
				}
90
				}
62
			} catch (InstantiationException e) {
63
				JSFCommonPlugin.log(IStatus.ERROR, "Could not instantiate IMetaDataLocator: "+key, e);
64
			} catch (IllegalAccessException e) {
65
				JSFCommonPlugin.log(IStatus.ERROR, "IllegalAccessException while creating IMetaDataLocator: "+key, e);
66
			}
91
			}
92
		} catch (InstantiationException e) {
93
			JSFCommonPlugin.log(IStatus.ERROR, "Could not instantiate IMetaDataLocator: "+key, e); //$NON-NLS-1$
94
		} catch (IllegalAccessException e) {
95
			JSFCommonPlugin.log(IStatus.ERROR, "IllegalAccessException while creating IMetaDataLocator: "+key, e); //$NON-NLS-1$
67
		}
96
		}
97
		
68
		return locator;
98
		return locator;
69
	}
99
	}
70
100
71
	private String getKey(String locatorClassName, String bundleId) {
101
	/**
72
		StringBuffer buf = new StringBuffer(bundleId);
102
	 * @param locatorClassName
73
		buf.append(":");
103
	 * @param contextId - this may be the bundleID or the projectName if it is a path sensitive locator
104
	 * @return key 
105
	 */
106
	private String getKey(final String locatorClassName, final String contextId) {
107
		StringBuffer buf = new StringBuffer(contextId);
108
		buf.append(":"); //$NON-NLS-1$
74
		buf.append(locatorClassName);
109
		buf.append(locatorClassName);
75
		return buf.toString();
110
		return buf.toString();
76
	}
111
	}
Lines 79-88 Link Here
79
	 * Stops and disposes all locators
114
	 * Stops and disposes all locators
80
	 */
115
	 */
81
	public void dispose(){
116
	public void dispose(){
117
		ResourcesPlugin.getWorkspace().removeResourceChangeListener(this);
82
		for (Iterator it=getLocators().values().iterator();it.hasNext();){
118
		for (Iterator it=getLocators().values().iterator();it.hasNext();){
83
			IMetaDataLocator locator = (IMetaDataLocator)it.next();
119
			IMetaDataLocator locator = (IMetaDataLocator)it.next();
84
			locator.stopLocating();			
120
			locator.stopLocating();			
85
		}
121
		}
86
		getLocators().clear();
122
		getLocators().clear();
87
	}
123
	}
124
	
125
    /*
126
     * (non-Javadoc)
127
     * 
128
     * @see
129
     * org.eclipse.core.resources.IResourceChangeListener#resourceChanged(org
130
     * .eclipse.core.resources.IResourceChangeEvent)
131
     */
132
    public void resourceChanged(final IResourceChangeEvent event) {
133
        if (event.getType() == IResourceChangeEvent.PRE_CLOSE
134
                || event.getType() == IResourceChangeEvent.PRE_DELETE) {
135
            // a project is closing - release and cleanup
136
            final IProject aProject = (IProject) event.getResource();
137
            
138
            if (aProject != null) {
139
            	List<String> locatorsToRemove = new ArrayList<String>();
140
	    		for (Iterator it=getLocators().keySet().iterator();it.hasNext();){
141
	    			String key = (String)it.next();	    			
142
	    			if (locatorIsForProject(key, aProject.getName())) {
143
	    				locatorsToRemove.add(key);
144
	    			}
145
	    		}
146
147
	    		if (! locatorsToRemove.isEmpty()) {
148
	    			for (String key : locatorsToRemove) {
149
	    				IMetaDataLocator locator = getLocators().get(key);
150
						
151
						if (DEBUG)
152
							System.out.println("Removed locator: "+locator.toString()); //$NON-NLS-1$
153
	    				
154
	    				locator.stopLocating();
155
	    				getLocators().remove(key);
156
	    			}
157
	    		}
158
            }
159
        }
160
    }
161
162
	private boolean locatorIsForProject(final String key, final String projectName) {
163
		StringTokenizer t = new StringTokenizer(key, ":"); //$NON-NLS-1$
164
		String contextId = t.nextToken();
165
		if (contextId.equals(projectName))
166
			return true;
167
		return false;
168
	}
88
}
169
}
(-)src/org/eclipse/jst/jsf/common/metadata/internal/MetaDataModelManager.java (-4 / +4 lines)
Lines 137-146 Link Here
137
        synchronized (GLOBAL_INSTANCE_LOCK) {
137
        synchronized (GLOBAL_INSTANCE_LOCK) {
138
            ModelKeyDescriptor modelKeyDescriptor = StandardModelFactory.getInstance().createModelKeyDescriptor(modelContext);
138
            ModelKeyDescriptor modelKeyDescriptor = StandardModelFactory.getInstance().createModelKeyDescriptor(modelContext);
139
139
140
            StandardModelFactory.debug(">START getModel: "+modelKeyDescriptor, StandardModelFactory.DEBUG_MD_GET);
140
            StandardModelFactory.debug(">START getModel: "+modelKeyDescriptor, StandardModelFactory.DEBUG_MD_GET); //$NON-NLS-1$
141
141
142
            MetaDataModel model = models.get(modelKeyDescriptor);
142
            MetaDataModel model = models.get(modelKeyDescriptor);
143
            if (model == null || project == null) {
143
            if (model == null || project == null) { //<---  why is the project == null test here?!?!
144
                // long in = System.currentTimeMillis();
144
                // long in = System.currentTimeMillis();
145
                model = loadMetadata(modelKeyDescriptor);
145
                model = loadMetadata(modelKeyDescriptor);
146
                //System.out.println("Time to load "+modelContext.getURI()+": "+
146
                //System.out.println("Time to load "+modelContext.getURI()+": "+
Lines 157-163 Link Here
157
                ((Model) model.getRoot())
157
                ((Model) model.getRoot())
158
                        .setCurrentModelContext(modelKeyDescriptor);
158
                        .setCurrentModelContext(modelKeyDescriptor);
159
159
160
            StandardModelFactory.debug(">END getModel: "+modelKeyDescriptor, StandardModelFactory.DEBUG_MD_GET);
160
            StandardModelFactory.debug(">END getModel: "+modelKeyDescriptor, StandardModelFactory.DEBUG_MD_GET); //$NON-NLS-1$
161
            return model;
161
            return model;
162
        }
162
        }
163
    }
163
    }
Lines 194-200 Link Here
194
        if (!Thread.holdsLock(GLOBAL_INSTANCE_LOCK)) {
194
        if (!Thread.holdsLock(GLOBAL_INSTANCE_LOCK)) {
195
            JSFCommonPlugin
195
            JSFCommonPlugin
196
                    .log(IStatus.ERROR,
196
                    .log(IStatus.ERROR,
197
                            "Internal Error: loadMetadata must not be called if class lock not held");
197
                            "Internal Error: loadMetadata must not be called if class lock not held"); //$NON-NLS-1$
198
            return null;
198
            return null;
199
        }
199
        }
200
200
(-)src/org/eclipse/jst/jsf/common/metadata/internal/MetaDataModelMergeAssistantImpl.java (-11 / +11 lines)
Lines 43-49 Link Here
43
		IMetaDataModelMergeAssistant {
43
		IMetaDataModelMergeAssistant {
44
	
44
	
45
	private MetaDataModel mergedModel;
45
	private MetaDataModel mergedModel;
46
	private Copier copier;
47
	private SimpleEntityQueryVisitorImpl entityVisitor;
46
	private SimpleEntityQueryVisitorImpl entityVisitor;
48
	private SimpleTraitQueryVisitorImpl traitVisitor;
47
	private SimpleTraitQueryVisitorImpl traitVisitor;
49
	private IMetaDataSourceModelProvider provider;
48
	private IMetaDataSourceModelProvider provider;
Lines 54-60 Link Here
54
	 */
53
	 */
55
	public MetaDataModelMergeAssistantImpl(MetaDataModel model) {
54
	public MetaDataModelMergeAssistantImpl(MetaDataModel model) {
56
		this.mergedModel = model;
55
		this.mergedModel = model;
57
		copier = new Copier();
58
		entityVisitor = new SimpleEntityQueryVisitorImpl(new HierarchicalSearchControl(1, 
56
		entityVisitor = new SimpleEntityQueryVisitorImpl(new HierarchicalSearchControl(1, 
59
			HierarchicalSearchControl.SCOPE_ALL_LEVELS));
57
			HierarchicalSearchControl.SCOPE_ALL_LEVELS));
60
		traitVisitor = new SimpleTraitQueryVisitorImpl(new SearchControl(1));
58
		traitVisitor = new SimpleTraitQueryVisitorImpl(new SearchControl(1));
Lines 110-116 Link Here
110
				ret = (Entity)rs.getResults().get(0);				
108
				ret = (Entity)rs.getResults().get(0);				
111
			rs.close();
109
			rs.close();
112
		} catch (MetaDataException e) {
110
		} catch (MetaDataException e) {
113
			JSFCommonPlugin.log(IStatus.ERROR, "Error in getMergedEntity()", e);
111
			JSFCommonPlugin.log(IStatus.ERROR, "Error in getMergedEntity()", e); //$NON-NLS-1$
114
		}
112
		}
115
		return ret;
113
		return ret;
116
	}
114
	}
Lines 175-180 Link Here
175
	}
173
	}
176
174
177
	private /*synchronized*/ Entity addEntityInternal(final Entity parent, final Entity entity) {
175
	private /*synchronized*/ Entity addEntityInternal(final Entity parent, final Entity entity) {
176
		Copier copier = new Copier();
178
		Entity mmEntity =(Entity)copier.copy(entity);
177
		Entity mmEntity =(Entity)copier.copy(entity);
179
		copier.copyReferences();
178
		copier.copyReferences();
180
		parent.getChildEntities().add(mmEntity);
179
		parent.getChildEntities().add(mmEntity);
Lines 209-219 Link Here
209
	public void setMergeComplete() {
208
	public void setMergeComplete() {
210
		Model model = (Model)getMergedModel().getRoot();
209
		Model model = (Model)getMergedModel().getRoot();
211
		if (model != null){
210
		if (model != null){
212
			StandardModelFactory.debug(">> Begin processIncludeGroups for: "+getMergedModel().getModelKey(),StandardModelFactory.DEBUG_MD_LOAD);
211
			StandardModelFactory.debug(">> Begin processIncludeGroups for: "+getMergedModel().getModelKey(),StandardModelFactory.DEBUG_MD_LOAD); //$NON-NLS-1$
213
			
212
			
214
			processIncludeGroups(model);			
213
			processIncludeGroups(model);			
215
			
214
			
216
			StandardModelFactory.debug(">> End processIncludeGroups for: "+getMergedModel().getModelKey(),StandardModelFactory.DEBUG_MD_LOAD);
215
			StandardModelFactory.debug(">> End processIncludeGroups for: "+getMergedModel().getModelKey(),StandardModelFactory.DEBUG_MD_LOAD); //$NON-NLS-1$
217
		}		
216
		}		
218
	}
217
	}
219
	
218
	
Lines 226-232 Link Here
226
	 * @param trait
225
	 * @param trait
227
	 * @return merged Trait
226
	 * @return merged Trait
228
	 */
227
	 */
229
	private Trait addTraitInternal(final Entity parent, final Trait trait) {		
228
	private Trait addTraitInternal(final Entity parent, final Trait trait) {
229
		Copier copier = new Copier();
230
		Trait mmTrait =(Trait)copier.copy(trait);
230
		Trait mmTrait =(Trait)copier.copy(trait);
231
		copier.copyReferences();
231
		copier.copyReferences();
232
		parent.getTraits().add(mmTrait);
232
		parent.getTraits().add(mmTrait);
Lines 254-260 Link Here
254
				ret = (Entity)rs.getResults().get(0);				
254
				ret = (Entity)rs.getResults().get(0);				
255
			rs.close();
255
			rs.close();
256
		} catch (MetaDataException e) {
256
		} catch (MetaDataException e) {
257
			JSFCommonPlugin.log(IStatus.ERROR, "Error in getMergedEntity()", e);
257
			JSFCommonPlugin.log(IStatus.ERROR, "Error in getMergedEntity()", e); //$NON-NLS-1$
258
		}
258
		}
259
		return ret;
259
		return ret;
260
	}
260
	}
Lines 265-271 Link Here
265
		while (e.eContainer() != null){
265
		while (e.eContainer() != null){
266
			buf.insert(0, e.getId());
266
			buf.insert(0, e.getId());
267
			if (e.eContainer()!=null && e.eContainer().eContainer() != null)
267
			if (e.eContainer()!=null && e.eContainer().eContainer() != null)
268
				buf.insert(0,"/");
268
				buf.insert(0,"/"); //$NON-NLS-1$
269
			e = (Entity)e.eContainer();
269
			e = (Entity)e.eContainer();
270
		}
270
		}
271
		return buf.toString();
271
		return buf.toString();
Lines 287-293 Link Here
287
				ret = (Trait)rs.getResults().get(0);				
287
				ret = (Trait)rs.getResults().get(0);				
288
			rs.close();
288
			rs.close();
289
		} catch (MetaDataException e) {
289
		} catch (MetaDataException e) {
290
			JSFCommonPlugin.log(IStatus.ERROR, "Error in getMergedTrait()", e);
290
			JSFCommonPlugin.log(IStatus.ERROR, "Error in getMergedTrait()", e); //$NON-NLS-1$
291
		}
291
		}
292
		return ret;
292
		return ret;
293
	}
293
	}
Lines 337-344 Link Here
337
			addIncludeRefs(entity, entityGroup);
337
			addIncludeRefs(entity, entityGroup);
338
		}
338
		}
339
		else {
339
		else {
340
			JSFCommonPlugin.log(IStatus.ERROR, "Unable to load external metadata model refs for "+modelContext.getURI()
340
			JSFCommonPlugin.log(IStatus.ERROR, "Unable to load external metadata model refs for "+modelContext.getURI() //$NON-NLS-1$
341
					+ " into "+ entity.getModel().getCurrentModelContext().getUri());
341
					+ " into "+ entity.getModel().getCurrentModelContext().getUri()); //$NON-NLS-1$
342
		}
342
		}
343
	}
343
	}
344
344

Return to bug 293467