blob: 77c52f1d5149dc455fd27245b89dcfdd0580b09e [file] [log] [blame]
amywufe0f3612006-01-25 03:48:57 +00001/*******************************************************************************
2 * Copyright (c) 2005, 2006 IBM Corporation and others.
3 * All rights reserved. This program and the accompanying materials
4 * are made available under the terms of the Eclipse Public License v1.0
5 * which accompanies this distribution, and is available at
6 * http://www.eclipse.org/legal/epl-v10.html
7 *
8 * Contributors:
9 * IBM Corporation - initial API and implementation
10 *******************************************************************************/
nitind65cb13d2005-03-10 23:04:22 +000011package org.eclipse.wst.html.ui.internal.wizard;
12
david_williams9f462582005-04-15 23:38:47 +000013import java.io.ByteArrayInputStream;
14import java.io.ByteArrayOutputStream;
15import java.io.OutputStreamWriter;
nitind65cb13d2005-03-10 23:04:22 +000016
17import org.eclipse.core.resources.IFile;
nitind861c8e32008-02-28 05:51:36 +000018import org.eclipse.core.resources.ProjectScope;
19import org.eclipse.core.runtime.Platform;
david_williams9f462582005-04-15 23:38:47 +000020import org.eclipse.core.runtime.Preferences;
nitind861c8e32008-02-28 05:51:36 +000021import org.eclipse.core.runtime.preferences.IScopeContext;
22import org.eclipse.core.runtime.preferences.InstanceScope;
nitind65cb13d2005-03-10 23:04:22 +000023import org.eclipse.jface.resource.ImageDescriptor;
24import org.eclipse.jface.viewers.IStructuredSelection;
25import org.eclipse.jface.viewers.StructuredSelection;
26import org.eclipse.jface.wizard.Wizard;
27import org.eclipse.ui.INewWizard;
28import org.eclipse.ui.IWorkbench;
29import org.eclipse.ui.IWorkbenchPage;
30import org.eclipse.ui.PartInitException;
31import org.eclipse.ui.PlatformUI;
nitind65cb13d2005-03-10 23:04:22 +000032import org.eclipse.ui.ide.IDE;
david_williams9f462582005-04-15 23:38:47 +000033import org.eclipse.wst.html.core.internal.HTMLCorePlugin;
david_williams3a2ab2d2005-04-11 16:32:45 +000034import org.eclipse.wst.html.ui.internal.HTMLUIMessages;
nitind65cb13d2005-03-10 23:04:22 +000035import org.eclipse.wst.html.ui.internal.Logger;
david_williams385fc5c2005-06-07 22:34:13 +000036import org.eclipse.wst.html.ui.internal.editor.HTMLEditorPluginImageHelper;
37import org.eclipse.wst.html.ui.internal.editor.HTMLEditorPluginImages;
david_williams9f462582005-04-15 23:38:47 +000038import org.eclipse.wst.sse.core.internal.encoding.CommonEncodingPreferenceNames;
nitind861c8e32008-02-28 05:51:36 +000039import org.eclipse.wst.sse.core.utils.StringUtils;
nitind65cb13d2005-03-10 23:04:22 +000040
41public class NewHTMLWizard extends Wizard implements INewWizard {
amywu9802af82006-06-01 21:22:40 +000042
43 private NewHTMLFileWizardPage fNewFilePage;
david_williams9f462582005-04-15 23:38:47 +000044 private NewHTMLTemplatesWizardPage fNewFileTemplatesPage;
nitind65cb13d2005-03-10 23:04:22 +000045 private IStructuredSelection fSelection;
nitind65cb13d2005-03-10 23:04:22 +000046
47 public void addPages() {
amywu9802af82006-06-01 21:22:40 +000048 fNewFilePage = new NewHTMLFileWizardPage("HTMLWizardNewFileCreationPage", new StructuredSelection(IDE.computeSelectedResources(fSelection))); //$NON-NLS-1$
david_williams3a2ab2d2005-04-11 16:32:45 +000049 fNewFilePage.setTitle(HTMLUIMessages._UI_WIZARD_NEW_HEADING);
50 fNewFilePage.setDescription(HTMLUIMessages._UI_WIZARD_NEW_DESCRIPTION);
nitind65cb13d2005-03-10 23:04:22 +000051 addPage(fNewFilePage);
amywufe0f3612006-01-25 03:48:57 +000052
david_williams9f462582005-04-15 23:38:47 +000053 fNewFileTemplatesPage = new NewHTMLTemplatesWizardPage();
54 addPage(fNewFileTemplatesPage);
nitind65cb13d2005-03-10 23:04:22 +000055 }
nitind861c8e32008-02-28 05:51:36 +000056
57 private String applyLineDelimiter(IFile file, String text) {
58 String lineDelimiter = Platform.getPreferencesService().getString(Platform.PI_RUNTIME, Platform.PREF_LINE_SEPARATOR, System.getProperty("line.separator"), new IScopeContext[] {new ProjectScope(file.getProject()), new InstanceScope() });//$NON-NLS-1$
59 String convertedText = StringUtils.replace(text, "\r\n", "\n");
60 convertedText = StringUtils.replace(convertedText, "\r", "\n");
61 convertedText = StringUtils.replace(convertedText, "\n", lineDelimiter);
62 return convertedText;
63 }
nitind65cb13d2005-03-10 23:04:22 +000064
65 public void init(IWorkbench aWorkbench, IStructuredSelection aSelection) {
66 fSelection = aSelection;
david_williams3a2ab2d2005-04-11 16:32:45 +000067 setWindowTitle(HTMLUIMessages._UI_WIZARD_NEW_TITLE);
amywufe0f3612006-01-25 03:48:57 +000068
david_williams385fc5c2005-06-07 22:34:13 +000069 ImageDescriptor descriptor = HTMLEditorPluginImageHelper.getInstance().getImageDescriptor(HTMLEditorPluginImages.IMG_WIZBAN_NEWHTMLFILE);
70 setDefaultPageImageDescriptor(descriptor);
nitind65cb13d2005-03-10 23:04:22 +000071 }
72
73 private void openEditor(final IFile file) {
74 if (file != null) {
75 getShell().getDisplay().asyncExec(new Runnable() {
76 public void run() {
77 try {
78 IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
79 IDE.openEditor(page, file, true);
80 }
81 catch (PartInitException e) {
82 Logger.log(Logger.WARNING_DEBUG, e.getMessage(), e);
83 }
84 }
85 });
86 }
87 }
88
89 public boolean performFinish() {
amywufe0f3612006-01-25 03:48:57 +000090 boolean performedOK = false;
david_williams9f462582005-04-15 23:38:47 +000091 // save user options for next use
92 fNewFileTemplatesPage.saveLastSavedPreferences();
93
amywufe0f3612006-01-25 03:48:57 +000094 // no file extension specified so add default extension
95 String fileName = fNewFilePage.getFileName();
96 if (fileName.lastIndexOf('.') == -1) {
amywu9802af82006-06-01 21:22:40 +000097 String newFileName = fNewFilePage.addDefaultExtension(fileName);
amywufe0f3612006-01-25 03:48:57 +000098 fNewFilePage.setFileName(newFileName);
99 }
100
david_williams9f462582005-04-15 23:38:47 +0000101 // create a new empty file
nitind65cb13d2005-03-10 23:04:22 +0000102 IFile file = fNewFilePage.createNewFile();
david_williams9f462582005-04-15 23:38:47 +0000103
amywufe0f3612006-01-25 03:48:57 +0000104 // if there was problem with creating file, it will be null, so make
105 // sure to check
106 if (file != null) {
107 // put template contents into file
108 String templateString = fNewFileTemplatesPage.getTemplateString();
109 if (templateString != null) {
nitind861c8e32008-02-28 05:51:36 +0000110 templateString = applyLineDelimiter(file, templateString);
amywufe0f3612006-01-25 03:48:57 +0000111 // determine the encoding for the new file
112 Preferences preference = HTMLCorePlugin.getDefault().getPluginPreferences();
113 String charSet = preference.getString(CommonEncodingPreferenceNames.OUTPUT_CODESET);
david_williams9f462582005-04-15 23:38:47 +0000114
amywufe0f3612006-01-25 03:48:57 +0000115 try {
116 ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
117 OutputStreamWriter outputStreamWriter = null;
118 if (charSet == null || charSet.trim().equals("")) { //$NON-NLS-1$
119 // just use default encoding
120 outputStreamWriter = new OutputStreamWriter(outputStream);
121 }
122 else {
123 outputStreamWriter = new OutputStreamWriter(outputStream, charSet);
124 }
125 outputStreamWriter.write(templateString);
126 outputStreamWriter.flush();
127 outputStreamWriter.close();
128 ByteArrayInputStream inputStream = new ByteArrayInputStream(outputStream.toByteArray());
129 file.setContents(inputStream, true, false, null);
130 inputStream.close();
david_williams9f462582005-04-15 23:38:47 +0000131 }
amywufe0f3612006-01-25 03:48:57 +0000132 catch (Exception e) {
133 Logger.log(Logger.WARNING_DEBUG, "Could not create contents for new HTML file", e); //$NON-NLS-1$
134 }
david_williams9f462582005-04-15 23:38:47 +0000135 }
david_williams9f462582005-04-15 23:38:47 +0000136
amywufe0f3612006-01-25 03:48:57 +0000137 // open the file in editor
138 openEditor(file);
139
140 // everything's fine
141 performedOK = true;
142 }
143 return performedOK;
nitind65cb13d2005-03-10 23:04:22 +0000144 }
145}