Skip to main content

This CGIT instance is deprecated, and repositories have been moved to Gitlab or Github. See the repository descriptions for specific locations.

summaryrefslogtreecommitdiffstats
blob: 91eaa792b2b3fb41a42d6a6b5c58c3a310086877 (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
/**********************************************************************
 * Copyright (c) 2003, 2005 IBM Corporation and others.
 * 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:
 *     IBM Corporation - Initial API and implementation
 **********************************************************************/
package org.eclipse.wst.server.ui.internal.wizard.page;

import java.util.HashMap;
import java.util.Map;

import org.eclipse.core.resources.IFile;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;

import org.eclipse.wst.server.core.IRuntime;
import org.eclipse.wst.server.core.IServerType;
import org.eclipse.wst.server.core.IServerWorkingCopy;
/**
 * A helper class used to cache the creation of server elements.
 */
public class ElementCreationCache {
	protected Map elementCache;
	protected Map taskCache;

	/**
	 * ElementCreationCache constructor comment.
	 */
	public ElementCreationCache() {
		super();
		elementCache = new HashMap();
		taskCache = new HashMap();
	}
	
	/**
	 * Return the key to use for the given factory.
	 *
	 * @param type the server type
	 * @param isLocalhost true if the server is local
	 * @return the key
	 */
	protected String getKey(IServerType type, boolean isLocalhost) {
		return type.getId() + "|" + isLocalhost + "|";
	}

	/**
	 * Returns a server. 
	 *
	 * @param type
	 * @param isLocalhost true if the server is local
	 * @param monitor a progress monitor
	 * @return a server working copy
	 * @throws CoreException if anything goes wrong
	 */
	public IServerWorkingCopy getServer(IServerType type, boolean isLocalhost, IProgressMonitor monitor) throws CoreException {
		try {
			IServerWorkingCopy server = getCachedServer(type, isLocalhost);
			if (server != null)
				return server;
		} catch (Exception e) {
			// ignore
		}
	
		try {
			IFile file = null;
			//if (ServerPreferences.getInstance().isCreateResourcesInWorkspace())
			//	file = ServerUtil.getUnusedServerFile(WizardUtil.getServerProject(), type);
			
			IServerWorkingCopy server = type.createServer(null, file, (IRuntime)null, monitor);
			elementCache.put(getKey(type, isLocalhost), server);
			return server;
		} catch (CoreException ce) {
			throw ce;
		}
	}

	/**
	 * Returns a cached server resource. 
	 *
	 * @param type the server type
	 * @param isLocalhost true if the server is local
	 * @return a working copy
	 */
	public IServerWorkingCopy getCachedServer(IServerType type, boolean isLocalhost) {
		try {
			IServerWorkingCopy server = (IServerWorkingCopy) elementCache.get(getKey(type, isLocalhost));
			if (server != null)
				return server;
		} catch (Exception e) {
			// ignore
		}

		return null;
	}

	/**
	 * Clears a cached server resource. 
	 *
	 * @param type the server type
	 * @param isLocalhost true if the server is local
	 */
	public void clearCachedServer(IServerType type, boolean isLocalhost) {
		try {
			elementCache.remove(getKey(type, isLocalhost));
		} catch (Exception e) {
			// ignore
		}
	}
}

Back to the top