[91608] improve new jsp wizard - better support new jsp templates
diff --git a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/wizard/NewJSPWizard.java b/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/wizard/NewJSPWizard.java
index 0fa3630..f9edb4b 100644
--- a/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/wizard/NewJSPWizard.java
+++ b/bundles/org.eclipse.jst.jsp.ui/src/org/eclipse/jst/jsp/ui/internal/wizard/NewJSPWizard.java
@@ -1,5 +1,8 @@
 package org.eclipse.jst.jsp.ui.internal.wizard;
 
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.OutputStreamWriter;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
@@ -7,13 +10,19 @@
 import org.eclipse.core.resources.IFile;
 import org.eclipse.core.runtime.IPath;
 import org.eclipse.core.runtime.Path;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.core.runtime.Preferences;
+import org.eclipse.core.runtime.content.IContentType;
 import org.eclipse.jface.resource.ImageDescriptor;
 import org.eclipse.jface.viewers.IStructuredSelection;
 import org.eclipse.jface.viewers.StructuredSelection;
 import org.eclipse.jface.wizard.Wizard;
+import org.eclipse.jst.jsp.core.contenttype.ContentTypeIdForJSP;
+import org.eclipse.jst.jsp.core.internal.JSPCorePlugin;
 import org.eclipse.jst.jsp.ui.internal.JSPUIMessages;
 import org.eclipse.jst.jsp.ui.internal.JSPUIPlugin;
 import org.eclipse.jst.jsp.ui.internal.Logger;
+import org.eclipse.osgi.util.NLS;
 import org.eclipse.ui.INewWizard;
 import org.eclipse.ui.IWorkbench;
 import org.eclipse.ui.IWorkbenchPage;
@@ -21,20 +30,35 @@
 import org.eclipse.ui.PlatformUI;
 import org.eclipse.ui.dialogs.WizardNewFileCreationPage;
 import org.eclipse.ui.ide.IDE;
+import org.eclipse.wst.sse.core.internal.encoding.CommonEncodingPreferenceNames;
 
 public class NewJSPWizard extends Wizard implements INewWizard {
 	static String PAGE_IMAGE = "/icons/full/wizban/newjspfile_wiz.gif"; //$NON-NLS-1$
 	private WizardNewFileCreationPage fNewFilePage;
+	private NewJSPTemplatesWizardPage fNewFileTemplatesPage;
 	private IStructuredSelection fSelection;
-	List fValidExtensions = new ArrayList(Arrays.asList(new String[]{"jsp", "jspf"})); //$NON-NLS-1$ //$NON-NLS-2$
+	private List fValidExtensions = null;
+
+	/**
+	 * Get list of valid extensions for JSP Content type
+	 * 
+	 * @return
+	 */
+	List getValidExtensions() {
+		if (fValidExtensions == null) {
+			IContentType type = Platform.getContentTypeManager().getContentType(ContentTypeIdForJSP.ContentTypeID_JSP);
+			fValidExtensions = new ArrayList(Arrays.asList(type.getFileSpecs(IContentType.FILE_EXTENSION_SPEC)));
+		}
+		return fValidExtensions;
+	}
 
 	public void addPages() {
 		fNewFilePage = new WizardNewFileCreationPage("JSPWizardNewFileCreationPage", new StructuredSelection(IDE.computeSelectedResources(fSelection))) { //$NON-NLS-1$
 			protected boolean validatePage() {
 				IPath handlePath = new Path(getFileName());
 				String extension = handlePath.getFileExtension();
-				if (extension == null || !fValidExtensions.contains(extension)) {
-					setErrorMessage(JSPUIMessages._ERROR_FILENAME_MUST_END_JSP);
+				if (extension == null || !getValidExtensions().contains(extension)) {
+					setErrorMessage(NLS.bind(JSPUIMessages._ERROR_FILENAME_MUST_END_JSP, getValidExtensions().toString()));
 					return false;
 				}
 				setErrorMessage(null);
@@ -45,6 +69,9 @@
 		fNewFilePage.setDescription(JSPUIMessages._UI_WIZARD_NEW_DESCRIPTION);
 
 		addPage(fNewFilePage);
+
+		fNewFileTemplatesPage = new NewJSPTemplatesWizardPage();
+		addPage(fNewFileTemplatesPage);
 	}
 
 	public void init(IWorkbench aWorkbench, IStructuredSelection aSelection) {
@@ -77,7 +104,41 @@
 	}
 
 	public boolean performFinish() {
+		// save user options for next use
+		fNewFileTemplatesPage.saveLastSavedPreferences();
+
+		// create a new empty file
 		IFile file = fNewFilePage.createNewFile();
+
+		// put template contents into file
+		String templateString = fNewFileTemplatesPage.getTemplateString();
+		if (templateString != null) {
+			// determine the encoding for the new file
+			Preferences preference = JSPCorePlugin.getDefault().getPluginPreferences();
+			String charSet = preference.getString(CommonEncodingPreferenceNames.OUTPUT_CODESET);
+
+			try {
+				ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
+				OutputStreamWriter outputStreamWriter = null;
+				if (charSet == null || charSet.trim().equals("")) { //$NON-NLS-1$
+					// just use default encoding
+					outputStreamWriter = new OutputStreamWriter(outputStream);
+				} else {
+					outputStreamWriter = new OutputStreamWriter(outputStream, charSet);
+				}
+				outputStreamWriter.write(templateString);
+				outputStreamWriter.flush();
+				outputStreamWriter.close();
+				ByteArrayInputStream inputStream = new ByteArrayInputStream(outputStream.toByteArray());
+				file.setContents(inputStream, true, false, null);
+				inputStream.close();
+			}
+			catch (Exception e) {
+				Logger.log(Logger.WARNING_DEBUG, "Could not create contents for new JSP file", e); //$NON-NLS-1$
+			}
+		}
+
+		// open the file in editor
 		openEditor(file);
 		return true;
 	}