fix #774 infinite loop in net.sourceforge.phpeclipse.builder.IdentifierIndexManager...
[phpeclipse.git] / net.sourceforge.phpeclipse / src / net / sourceforge / phpdt / internal / corext / template / php / CodeTemplates.java
1 /*******************************************************************************
2  * Copyright (c) 2000, 2004 IBM Corporation and others.
3  * All rights reserved. This program and the accompanying materials 
4  * are made available under the terms of the Common Public License v1.0
5  * which accompanies this distribution, and is available at
6  * http://www.eclipse.org/legal/cpl-v10.html
7  * 
8  * Contributors:
9  *     IBM Corporation - initial API and implementation
10  *******************************************************************************/
11 package net.sourceforge.phpdt.internal.corext.template.php;
12
13 import java.io.File;
14 import java.io.InputStream;
15 import java.util.ResourceBundle;
16
17 import net.sourceforge.phpeclipse.PHPeclipsePlugin;
18
19 import org.eclipse.core.runtime.CoreException;
20 import org.eclipse.core.runtime.IPath;
21 import org.eclipse.jface.text.templates.Template;
22
23 /**
24  * <code>CodeTemplates</code> gives access to the available code templates.
25  * 
26  * @since 3.0
27  * @deprecated use
28  *             {@link net.sourceforge.phpdt.internal.ui.JavaPlugin#getCodeTemplateStore()}
29  *             instead
30  */
31 public class CodeTemplates extends
32                 net.sourceforge.phpdt.internal.corext.template.php.TemplateSet {
33
34         private static final String DEFAULT_FILE = "default-codetemplates.xml"; //$NON-NLS-1$
35
36         private static final String TEMPLATE_FILE = "codetemplates.xml"; //$NON-NLS-1$
37
38         private static final ResourceBundle fgResourceBundle = ResourceBundle
39                         .getBundle(JavaTemplateMessages.class.getName());
40
41         /** Singleton. */
42         private static CodeTemplates fgTemplates;
43
44         public static Template getCodeTemplate(String name) {
45                 return getInstance().getFirstTemplate(name);
46         }
47
48         /**
49          * Returns an instance of templates.
50          */
51         public static CodeTemplates getInstance() {
52                 if (fgTemplates == null)
53                         fgTemplates = new CodeTemplates();
54
55                 return fgTemplates;
56         }
57
58         private CodeTemplates() {
59                 super(
60                                 "codetemplate", PHPeclipsePlugin.getDefault().getCodeTemplateContextRegistry()); //$NON-NLS-1$
61                 create();
62         }
63
64         private void create() {
65
66                 try {
67                         addFromStream(getDefaultsAsStream(), false, true, fgResourceBundle);
68                         File templateFile = getTemplateFile();
69                         if (templateFile.exists()) {
70                                 addFromFile(templateFile, false, fgResourceBundle);
71                         }
72                         saveToFile(templateFile);
73
74                 } catch (CoreException e) {
75                         PHPeclipsePlugin.log(e);
76                         clear();
77                 }
78
79         }
80
81         /**
82          * Resets the template set.
83          */
84         public void reset() throws CoreException {
85                 clear();
86                 addFromFile(getTemplateFile(), false, fgResourceBundle);
87         }
88
89         /**
90          * Resets the template set with the default templates.
91          */
92         public void restoreDefaults() throws CoreException {
93                 clear();
94                 addFromStream(getDefaultsAsStream(), false, true, fgResourceBundle);
95         }
96
97         /**
98          * Saves the template set.
99          */
100         public void save() throws CoreException {
101                 saveToFile(getTemplateFile());
102         }
103
104         private static InputStream getDefaultsAsStream() {
105                 return CodeTemplates.class.getResourceAsStream(DEFAULT_FILE);
106         }
107
108         private static File getTemplateFile() {
109                 IPath path = PHPeclipsePlugin.getDefault().getStateLocation();
110                 path = path.append(TEMPLATE_FILE);
111
112                 return path.toFile();
113         }
114
115 }