Skip to main content
aboutsummaryrefslogtreecommitdiffstats
blob: d16c3f72c5624cc6b405c3e69327aaffe6b5fd7c (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
/***********************************************************************
 * Copyright (c) 2008 by SAP AG, Walldorf. 
 * 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:
 *     SAP AG - initial API and implementation
 ***********************************************************************/
package org.eclipse.jst.jee.model.internal;

import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;

import org.eclipse.core.resources.IProject;
import org.eclipse.jst.j2ee.model.IModelProvider;
import org.eclipse.jst.j2ee.model.IModelProviderFactory;
import org.eclipse.jst.j2ee.model.IModelProviderListener;
import org.eclipse.wst.common.componentcore.resources.IVirtualComponent;

/**
 * @author  Kiril Mitov k.mitov@sap.com
 *
 */
public class Ejb3MergedModelProviderFactory implements IModelProviderFactory {

	private HashMap<IProject, IModelProvider> xmlResources = new HashMap<IProject, IModelProvider>();

	public IModelProvider create(IProject project) {
		IModelProvider result = getResource(project);
		if(result == null || ((EJB3MergedModelProvider)result).isDisposed()){
			Collection<IModelProviderListener> listeners = new ArrayList<IModelProviderListener>();
			if (result != null){
				listeners = ( (EJB3MergedModelProvider)result).getListeners();
			}
			result = new EJB3MergedModelProvider(project);
			
			addListeners(result, listeners);
			addResource(project, result);
		}
		return result;
	}
	
	private void addListeners(IModelProvider modelProvider,
			Collection<IModelProviderListener> listeners) {
		for (IModelProviderListener iModelProviderListener : listeners) {
			if (iModelProviderListener != null)
				modelProvider.addListener(iModelProviderListener);
		}
	}

	public IModelProvider create(IVirtualComponent component) {
		return create(component.getProject());
	}

	private void addResource(IProject project, IModelProvider modelProvider){
		xmlResources.put(project, modelProvider);
	}

	private IModelProvider getResource(IProject project){
		return xmlResources.get(project);
	}

}

Back to the top