17 * Failures and causes: |
17 * Failures and causes: |
18 */ |
18 */ |
19 package org.symbian.tools.tmw.internal.ui.project; |
19 package org.symbian.tools.tmw.internal.ui.project; |
20 |
20 |
21 import java.util.Collection; |
21 import java.util.Collection; |
|
22 import java.util.Collections; |
22 import java.util.HashMap; |
23 import java.util.HashMap; |
23 import java.util.HashSet; |
24 import java.util.HashSet; |
24 import java.util.Map; |
25 import java.util.Map; |
|
26 import java.util.TreeMap; |
25 |
27 |
26 import org.eclipse.core.runtime.IConfigurationElement; |
28 import org.eclipse.core.runtime.IConfigurationElement; |
27 import org.eclipse.core.runtime.Platform; |
29 import org.eclipse.core.runtime.Platform; |
28 import org.symbian.tools.tmw.core.TMWCore; |
30 import org.symbian.tools.tmw.core.TMWCore; |
29 import org.symbian.tools.tmw.core.runtimes.IMobileWebRuntime; |
31 import org.symbian.tools.tmw.core.runtimes.IMobileWebRuntime; |
32 import org.symbian.tools.tmw.ui.project.IProjectTemplateManager; |
34 import org.symbian.tools.tmw.ui.project.IProjectTemplateManager; |
33 import org.symbian.tools.tmw.ui.project.ITemplateInstaller; |
35 import org.symbian.tools.tmw.ui.project.ITemplateInstaller; |
34 |
36 |
35 public class ProjectTemplateManagerImpl implements IProjectTemplateManager { |
37 public class ProjectTemplateManagerImpl implements IProjectTemplateManager { |
36 private Map<IMobileWebRuntime, ITemplateInstaller> emptyProjects; |
38 private Map<IMobileWebRuntime, ITemplateInstaller> emptyProjects; |
|
39 private Map<IMobileWebRuntime, Map<String, String>> runtimeTemplateParameters; |
37 private Map<IMobileWebRuntime, IProjectTemplate[]> templates; |
40 private Map<IMobileWebRuntime, IProjectTemplate[]> templates; |
38 |
41 |
39 public IProjectTemplate getDefaultTemplate(IMobileWebRuntime runtime) { |
42 public IProjectTemplate getDefaultTemplate(IMobileWebRuntime runtime) { |
40 final IProjectTemplate[] projectTemplates = getProjectTemplates(runtime); |
43 final IProjectTemplate[] projectTemplates = getProjectTemplates(runtime); |
41 return projectTemplates != null && projectTemplates.length > 0 ? projectTemplates[0] : null; |
44 return projectTemplates != null && projectTemplates.length > 0 ? projectTemplates[0] : null; |
58 final IProjectTemplate[] runtimeTemplates = templates.get(runtime); |
61 final IProjectTemplate[] runtimeTemplates = templates.get(runtime); |
59 return runtimeTemplates == null ? new IProjectTemplate[0] : runtimeTemplates; |
62 return runtimeTemplates == null ? new IProjectTemplate[0] : runtimeTemplates; |
60 } |
63 } |
61 |
64 |
62 private Map<IMobileWebRuntime, IProjectTemplate[]> readExtensions() { |
65 private Map<IMobileWebRuntime, IProjectTemplate[]> readExtensions() { |
|
66 runtimeTemplateParameters = new HashMap<IMobileWebRuntime, Map<String, String>>(); |
63 emptyProjects = new HashMap<IMobileWebRuntime, ITemplateInstaller>(); |
67 emptyProjects = new HashMap<IMobileWebRuntime, ITemplateInstaller>(); |
64 final Map<IMobileWebRuntime, Collection<IProjectTemplate>> map = new HashMap<IMobileWebRuntime, Collection<IProjectTemplate>>(); |
68 final Map<IMobileWebRuntime, Collection<IProjectTemplate>> map = new HashMap<IMobileWebRuntime, Collection<IProjectTemplate>>(); |
65 final IConfigurationElement[] elements = Platform.getExtensionRegistry().getConfigurationElementsFor( |
69 final IConfigurationElement[] elements = Platform.getExtensionRegistry().getConfigurationElementsFor( |
66 TMWCoreUI.PLUGIN_ID, "projectTemplate"); |
70 TMWCoreUI.PLUGIN_ID, "projectTemplate"); |
67 for (IConfigurationElement element : elements) { |
71 for (IConfigurationElement element : elements) { |
74 tmplts = new HashSet<IProjectTemplate>(); |
78 tmplts = new HashSet<IProjectTemplate>(); |
75 map.put(runtime, tmplts); |
79 map.put(runtime, tmplts); |
76 } |
80 } |
77 tmplts.add(template); |
81 tmplts.add(template); |
78 } |
82 } |
79 } else if ("empty-project".equals(element.getName())) { |
83 } else if ("runtime-template".equals(element.getName())) { |
80 final String runtimeId = element.getAttribute("runtime-id"); |
84 final String runtimeId = element.getAttribute("runtime-id"); |
81 final String runtimeVersion = element.getAttribute("version"); |
85 final String runtimeVersion = element.getAttribute("version"); |
82 final IMobileWebRuntime runtime = TMWCore.getRuntimesManager().getRuntime(runtimeId, runtimeVersion); |
86 final IMobileWebRuntime runtime = TMWCore.getRuntimesManager().getRuntime(runtimeId, runtimeVersion); |
83 if (runtime != null) { |
87 if (runtime != null) { |
84 emptyProjects.put(runtime, CompoundInstaller.combine(emptyProjects.get(runtime), elements)); |
88 emptyProjects.put(runtime, |
|
89 CompoundInstaller.combine(emptyProjects.get(runtime), element.getChildren())); |
|
90 Map<String, String> params = runtimeTemplateParameters.get(runtime); |
|
91 if (params == null) { |
|
92 params = new TreeMap<String, String>(); |
|
93 runtimeTemplateParameters.put(runtime, params); |
|
94 } |
|
95 for (IConfigurationElement el : element.getChildren()) { |
|
96 if ("default-parameter-value".equals(el.getName())) { |
|
97 params.put(el.getAttribute("name"), el.getAttribute("value")); |
|
98 } |
|
99 } |
85 } |
100 } |
86 } |
101 } |
87 } |
102 } |
88 final Map<IMobileWebRuntime, IProjectTemplate[]> res = new HashMap<IMobileWebRuntime, IProjectTemplate[]>( |
103 final Map<IMobileWebRuntime, IProjectTemplate[]> res = new HashMap<IMobileWebRuntime, IProjectTemplate[]>( |
89 map.size()); |
104 map.size()); |
91 final Collection<IProjectTemplate> collection = entry.getValue(); |
106 final Collection<IProjectTemplate> collection = entry.getValue(); |
92 res.put(entry.getKey(), collection.toArray(new IProjectTemplate[collection.size()])); |
107 res.put(entry.getKey(), collection.toArray(new IProjectTemplate[collection.size()])); |
93 } |
108 } |
94 return res; |
109 return res; |
95 } |
110 } |
|
111 |
|
112 public Map<String, String> getDefaultTemplateParameterValues(IMobileWebRuntime runtime) { |
|
113 if (runtimeTemplateParameters == null) { |
|
114 readExtensions(); |
|
115 } |
|
116 Map<String, String> params = runtimeTemplateParameters.get(runtime); |
|
117 if (params == null) { |
|
118 return Collections.emptyMap(); |
|
119 } |
|
120 return params; |
|
121 } |
96 } |
122 } |