org.symbian.tools.wrttools/src/org/symbian/tools/wrttools/util/ProjectUtils.java
author Eugene Ostroukhov <eostroukhov@symbian.org>
Tue, 12 Jan 2010 13:50:32 -0800
changeset 30 50ffca984095
parent 22 6297dfe3bd9d
child 38 954dbf7baac6
permissions -rw-r--r--
Home button now works, launch configuration was renamed
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
3
d3477de62514 Added new wizards for importing WRT projects. Added CSS Validator.
TasneemS@US-TASNEEMS
parents:
diff changeset
     1
/**
d3477de62514 Added new wizards for importing WRT projects. Added CSS Validator.
TasneemS@US-TASNEEMS
parents:
diff changeset
     2
 * Copyright (c) 2009 Symbian Foundation and/or its subsidiary(-ies).
d3477de62514 Added new wizards for importing WRT projects. Added CSS Validator.
TasneemS@US-TASNEEMS
parents:
diff changeset
     3
 * All rights reserved.
d3477de62514 Added new wizards for importing WRT projects. Added CSS Validator.
TasneemS@US-TASNEEMS
parents:
diff changeset
     4
 * This component and the accompanying materials are made available
d3477de62514 Added new wizards for importing WRT projects. Added CSS Validator.
TasneemS@US-TASNEEMS
parents:
diff changeset
     5
 * under the terms of the License "Eclipse Public License v1.0"
d3477de62514 Added new wizards for importing WRT projects. Added CSS Validator.
TasneemS@US-TASNEEMS
parents:
diff changeset
     6
 * which accompanies this distribution, and is available
d3477de62514 Added new wizards for importing WRT projects. Added CSS Validator.
TasneemS@US-TASNEEMS
parents:
diff changeset
     7
 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
d3477de62514 Added new wizards for importing WRT projects. Added CSS Validator.
TasneemS@US-TASNEEMS
parents:
diff changeset
     8
 *
d3477de62514 Added new wizards for importing WRT projects. Added CSS Validator.
TasneemS@US-TASNEEMS
parents:
diff changeset
     9
 * Initial Contributors:
d3477de62514 Added new wizards for importing WRT projects. Added CSS Validator.
TasneemS@US-TASNEEMS
parents:
diff changeset
    10
 * Symbian Foundation - initial contribution.
d3477de62514 Added new wizards for importing WRT projects. Added CSS Validator.
TasneemS@US-TASNEEMS
parents:
diff changeset
    11
 * Contributors:
d3477de62514 Added new wizards for importing WRT projects. Added CSS Validator.
TasneemS@US-TASNEEMS
parents:
diff changeset
    12
 * Description:
d3477de62514 Added new wizards for importing WRT projects. Added CSS Validator.
TasneemS@US-TASNEEMS
parents:
diff changeset
    13
 * Overview:
d3477de62514 Added new wizards for importing WRT projects. Added CSS Validator.
TasneemS@US-TASNEEMS
parents:
diff changeset
    14
 * Details:
d3477de62514 Added new wizards for importing WRT projects. Added CSS Validator.
TasneemS@US-TASNEEMS
parents:
diff changeset
    15
 * Platforms/Drives/Compatibility:
d3477de62514 Added new wizards for importing WRT projects. Added CSS Validator.
TasneemS@US-TASNEEMS
parents:
diff changeset
    16
 * Assumptions/Requirement/Pre-requisites:
d3477de62514 Added new wizards for importing WRT projects. Added CSS Validator.
TasneemS@US-TASNEEMS
parents:
diff changeset
    17
 * Failures and causes:
d3477de62514 Added new wizards for importing WRT projects. Added CSS Validator.
TasneemS@US-TASNEEMS
parents:
diff changeset
    18
 */
11
05e53cfc29d8 Import previewer implemented
Eugene Ostroukhov
parents: 3
diff changeset
    19
package org.symbian.tools.wrttools.util;
3
d3477de62514 Added new wizards for importing WRT projects. Added CSS Validator.
TasneemS@US-TASNEEMS
parents:
diff changeset
    20
11
05e53cfc29d8 Import previewer implemented
Eugene Ostroukhov
parents: 3
diff changeset
    21
import java.io.BufferedInputStream;
05e53cfc29d8 Import previewer implemented
Eugene Ostroukhov
parents: 3
diff changeset
    22
import java.io.File;
05e53cfc29d8 Import previewer implemented
Eugene Ostroukhov
parents: 3
diff changeset
    23
import java.io.FileInputStream;
05e53cfc29d8 Import previewer implemented
Eugene Ostroukhov
parents: 3
diff changeset
    24
import java.io.FileNotFoundException;
05e53cfc29d8 Import previewer implemented
Eugene Ostroukhov
parents: 3
diff changeset
    25
import java.io.FileOutputStream;
05e53cfc29d8 Import previewer implemented
Eugene Ostroukhov
parents: 3
diff changeset
    26
import java.io.IOException;
05e53cfc29d8 Import previewer implemented
Eugene Ostroukhov
parents: 3
diff changeset
    27
import java.io.InputStream;
05e53cfc29d8 Import previewer implemented
Eugene Ostroukhov
parents: 3
diff changeset
    28
import java.io.OutputStream;
3
d3477de62514 Added new wizards for importing WRT projects. Added CSS Validator.
TasneemS@US-TASNEEMS
parents:
diff changeset
    29
import java.net.URI;
11
05e53cfc29d8 Import previewer implemented
Eugene Ostroukhov
parents: 3
diff changeset
    30
import java.util.zip.ZipEntry;
05e53cfc29d8 Import previewer implemented
Eugene Ostroukhov
parents: 3
diff changeset
    31
import java.util.zip.ZipInputStream;
05e53cfc29d8 Import previewer implemented
Eugene Ostroukhov
parents: 3
diff changeset
    32
import java.util.zip.ZipOutputStream;
3
d3477de62514 Added new wizards for importing WRT projects. Added CSS Validator.
TasneemS@US-TASNEEMS
parents:
diff changeset
    33
11
05e53cfc29d8 Import previewer implemented
Eugene Ostroukhov
parents: 3
diff changeset
    34
import javax.swing.filechooser.FileSystemView;
05e53cfc29d8 Import previewer implemented
Eugene Ostroukhov
parents: 3
diff changeset
    35
05e53cfc29d8 Import previewer implemented
Eugene Ostroukhov
parents: 3
diff changeset
    36
import org.eclipse.core.resources.IFile;
05e53cfc29d8 Import previewer implemented
Eugene Ostroukhov
parents: 3
diff changeset
    37
import org.eclipse.core.resources.IFolder;
3
d3477de62514 Added new wizards for importing WRT projects. Added CSS Validator.
TasneemS@US-TASNEEMS
parents:
diff changeset
    38
import org.eclipse.core.resources.IProject;
d3477de62514 Added new wizards for importing WRT projects. Added CSS Validator.
TasneemS@US-TASNEEMS
parents:
diff changeset
    39
import org.eclipse.core.resources.IWorkspace;
d3477de62514 Added new wizards for importing WRT projects. Added CSS Validator.
TasneemS@US-TASNEEMS
parents:
diff changeset
    40
import org.eclipse.core.resources.ResourcesPlugin;
d3477de62514 Added new wizards for importing WRT projects. Added CSS Validator.
TasneemS@US-TASNEEMS
parents:
diff changeset
    41
import org.eclipse.core.runtime.CoreException;
11
05e53cfc29d8 Import previewer implemented
Eugene Ostroukhov
parents: 3
diff changeset
    42
import org.eclipse.core.runtime.IPath;
3
d3477de62514 Added new wizards for importing WRT projects. Added CSS Validator.
TasneemS@US-TASNEEMS
parents:
diff changeset
    43
import org.eclipse.core.runtime.IProgressMonitor;
11
05e53cfc29d8 Import previewer implemented
Eugene Ostroukhov
parents: 3
diff changeset
    44
import org.eclipse.core.runtime.IStatus;
05e53cfc29d8 Import previewer implemented
Eugene Ostroukhov
parents: 3
diff changeset
    45
import org.eclipse.core.runtime.NullProgressMonitor;
05e53cfc29d8 Import previewer implemented
Eugene Ostroukhov
parents: 3
diff changeset
    46
import org.eclipse.core.runtime.Status;
3
d3477de62514 Added new wizards for importing WRT projects. Added CSS Validator.
TasneemS@US-TASNEEMS
parents:
diff changeset
    47
import org.eclipse.core.runtime.SubProgressMonitor;
11
05e53cfc29d8 Import previewer implemented
Eugene Ostroukhov
parents: 3
diff changeset
    48
import org.eclipse.jface.window.Window;
05e53cfc29d8 Import previewer implemented
Eugene Ostroukhov
parents: 3
diff changeset
    49
import org.eclipse.swt.widgets.Display;
05e53cfc29d8 Import previewer implemented
Eugene Ostroukhov
parents: 3
diff changeset
    50
import org.eclipse.ui.PlatformUI;
05e53cfc29d8 Import previewer implemented
Eugene Ostroukhov
parents: 3
diff changeset
    51
import org.eclipse.ui.statushandlers.StatusManager;
3
d3477de62514 Added new wizards for importing WRT projects. Added CSS Validator.
TasneemS@US-TASNEEMS
parents:
diff changeset
    52
import org.eclipse.wst.jsdt.internal.ui.wizards.buildpaths.BuildPathsBlock;
30
50ffca984095 Home button now works, launch configuration was renamed
Eugene Ostroukhov <eostroukhov@symbian.org>
parents: 22
diff changeset
    53
import org.eclipse.wst.sse.core.StructuredModelManager;
50ffca984095 Home button now works, launch configuration was renamed
Eugene Ostroukhov <eostroukhov@symbian.org>
parents: 22
diff changeset
    54
import org.eclipse.wst.sse.core.internal.provisional.IModelManager;
3
d3477de62514 Added new wizards for importing WRT projects. Added CSS Validator.
TasneemS@US-TASNEEMS
parents:
diff changeset
    55
import org.eclipse.wst.validation.ValidationFramework;
30
50ffca984095 Home button now works, launch configuration was renamed
Eugene Ostroukhov <eostroukhov@symbian.org>
parents: 22
diff changeset
    56
import org.eclipse.wst.xml.core.internal.provisional.document.IDOMDocument;
50ffca984095 Home button now works, launch configuration was renamed
Eugene Ostroukhov <eostroukhov@symbian.org>
parents: 22
diff changeset
    57
import org.eclipse.wst.xml.core.internal.provisional.document.IDOMModel;
11
05e53cfc29d8 Import previewer implemented
Eugene Ostroukhov
parents: 3
diff changeset
    58
import org.symbian.tools.wrttools.Activator;
05e53cfc29d8 Import previewer implemented
Eugene Ostroukhov
parents: 3
diff changeset
    59
import org.symbian.tools.wrttools.dialogs.AptanaProjectSelectionDialog;
30
50ffca984095 Home button now works, launch configuration was renamed
Eugene Ostroukhov <eostroukhov@symbian.org>
parents: 22
diff changeset
    60
import org.w3c.dom.Element;
50ffca984095 Home button now works, launch configuration was renamed
Eugene Ostroukhov <eostroukhov@symbian.org>
parents: 22
diff changeset
    61
import org.w3c.dom.NodeList;
3
d3477de62514 Added new wizards for importing WRT projects. Added CSS Validator.
TasneemS@US-TASNEEMS
parents:
diff changeset
    62
d3477de62514 Added new wizards for importing WRT projects. Added CSS Validator.
TasneemS@US-TASNEEMS
parents:
diff changeset
    63
public class ProjectUtils {
30
50ffca984095 Home button now works, launch configuration was renamed
Eugene Ostroukhov <eostroukhov@symbian.org>
parents: 22
diff changeset
    64
	private static final String WRT_PREVIEW_MAIN_HTML = "wrt_preview_main.html";
14
e3d48d24826c UI refresh
Eugene Ostroukhov <eostroukhov@symbian.org>
parents: 11
diff changeset
    65
	public static final String PREVIEW_FOLDER = "preview";
e3d48d24826c UI refresh
Eugene Ostroukhov <eostroukhov@symbian.org>
parents: 11
diff changeset
    66
	public static final String PREVIEW_FRAME_FILE = "wrt_preview_frame.html";
e3d48d24826c UI refresh
Eugene Ostroukhov <eostroukhov@symbian.org>
parents: 11
diff changeset
    67
30
50ffca984095 Home button now works, launch configuration was renamed
Eugene Ostroukhov <eostroukhov@symbian.org>
parents: 22
diff changeset
    68
	@SuppressWarnings("restriction")
11
05e53cfc29d8 Import previewer implemented
Eugene Ostroukhov
parents: 3
diff changeset
    69
	public static IProject createWrtProject(String name, URI uri,
05e53cfc29d8 Import previewer implemented
Eugene Ostroukhov
parents: 3
diff changeset
    70
			IProgressMonitor monitor) throws CoreException {
3
d3477de62514 Added new wizards for importing WRT projects. Added CSS Validator.
TasneemS@US-TASNEEMS
parents:
diff changeset
    71
		monitor.beginTask("Create project resources", 20);
d3477de62514 Added new wizards for importing WRT projects. Added CSS Validator.
TasneemS@US-TASNEEMS
parents:
diff changeset
    72
		IWorkspace workspace = ResourcesPlugin.getWorkspace();
11
05e53cfc29d8 Import previewer implemented
Eugene Ostroukhov
parents: 3
diff changeset
    73
		IProject project = workspace.getRoot().getProject(name);
22
6297dfe3bd9d Several bugfixes
Eugene Ostroukhov <eostroukhov@symbian.org>
parents: 14
diff changeset
    74
		ValidationFramework.getDefault().addValidationBuilder(project);
11
05e53cfc29d8 Import previewer implemented
Eugene Ostroukhov
parents: 3
diff changeset
    75
		BuildPathsBlock.createProject(project, uri, new SubProgressMonitor(
05e53cfc29d8 Import previewer implemented
Eugene Ostroukhov
parents: 3
diff changeset
    76
				monitor, 10));
3
d3477de62514 Added new wizards for importing WRT projects. Added CSS Validator.
TasneemS@US-TASNEEMS
parents:
diff changeset
    77
d3477de62514 Added new wizards for importing WRT projects. Added CSS Validator.
TasneemS@US-TASNEEMS
parents:
diff changeset
    78
		BuildPathsBlock.addJavaNature(project, new SubProgressMonitor(monitor,
d3477de62514 Added new wizards for importing WRT projects. Added CSS Validator.
TasneemS@US-TASNEEMS
parents:
diff changeset
    79
				10));
d3477de62514 Added new wizards for importing WRT projects. Added CSS Validator.
TasneemS@US-TASNEEMS
parents:
diff changeset
    80
d3477de62514 Added new wizards for importing WRT projects. Added CSS Validator.
TasneemS@US-TASNEEMS
parents:
diff changeset
    81
		// TODO: Build path, super type, etc.
d3477de62514 Added new wizards for importing WRT projects. Added CSS Validator.
TasneemS@US-TASNEEMS
parents:
diff changeset
    82
		// BuildPathsBlock.flush(classPathEntries, javaScriptProject, superType,
d3477de62514 Added new wizards for importing WRT projects. Added CSS Validator.
TasneemS@US-TASNEEMS
parents:
diff changeset
    83
		// monitor)
d3477de62514 Added new wizards for importing WRT projects. Added CSS Validator.
TasneemS@US-TASNEEMS
parents:
diff changeset
    84
d3477de62514 Added new wizards for importing WRT projects. Added CSS Validator.
TasneemS@US-TASNEEMS
parents:
diff changeset
    85
d3477de62514 Added new wizards for importing WRT projects. Added CSS Validator.
TasneemS@US-TASNEEMS
parents:
diff changeset
    86
		monitor.done();
d3477de62514 Added new wizards for importing WRT projects. Added CSS Validator.
TasneemS@US-TASNEEMS
parents:
diff changeset
    87
		return project;
d3477de62514 Added new wizards for importing WRT projects. Added CSS Validator.
TasneemS@US-TASNEEMS
parents:
diff changeset
    88
	}
11
05e53cfc29d8 Import previewer implemented
Eugene Ostroukhov
parents: 3
diff changeset
    89
05e53cfc29d8 Import previewer implemented
Eugene Ostroukhov
parents: 3
diff changeset
    90
	public static void addPreviewer(IProject project, IPath mainHtml) {
05e53cfc29d8 Import previewer implemented
Eugene Ostroukhov
parents: 3
diff changeset
    91
		URI archive = getPreviewerArchive();
05e53cfc29d8 Import previewer implemented
Eugene Ostroukhov
parents: 3
diff changeset
    92
		try {
05e53cfc29d8 Import previewer implemented
Eugene Ostroukhov
parents: 3
diff changeset
    93
			if (archive != null) {
05e53cfc29d8 Import previewer implemented
Eugene Ostroukhov
parents: 3
diff changeset
    94
				ZipInputStream stream = new ZipInputStream(archive.toURL().openStream());
05e53cfc29d8 Import previewer implemented
Eugene Ostroukhov
parents: 3
diff changeset
    95
				ZipEntry entry;
05e53cfc29d8 Import previewer implemented
Eugene Ostroukhov
parents: 3
diff changeset
    96
				while ((entry = stream.getNextEntry()) != null) {
05e53cfc29d8 Import previewer implemented
Eugene Ostroukhov
parents: 3
diff changeset
    97
					if (!entry.isDirectory()) {
05e53cfc29d8 Import previewer implemented
Eugene Ostroukhov
parents: 3
diff changeset
    98
						copyFile(project, entry.getName(), stream, entry.getSize(), new NullProgressMonitor());
05e53cfc29d8 Import previewer implemented
Eugene Ostroukhov
parents: 3
diff changeset
    99
					} else {
05e53cfc29d8 Import previewer implemented
Eugene Ostroukhov
parents: 3
diff changeset
   100
						IFolder folder = project.getFolder(entry.getName());
05e53cfc29d8 Import previewer implemented
Eugene Ostroukhov
parents: 3
diff changeset
   101
						if (!folder.exists()) {
05e53cfc29d8 Import previewer implemented
Eugene Ostroukhov
parents: 3
diff changeset
   102
							folder.create(false, true, new NullProgressMonitor());
05e53cfc29d8 Import previewer implemented
Eugene Ostroukhov
parents: 3
diff changeset
   103
						}
05e53cfc29d8 Import previewer implemented
Eugene Ostroukhov
parents: 3
diff changeset
   104
					}
05e53cfc29d8 Import previewer implemented
Eugene Ostroukhov
parents: 3
diff changeset
   105
					stream.closeEntry();
05e53cfc29d8 Import previewer implemented
Eugene Ostroukhov
parents: 3
diff changeset
   106
				}
05e53cfc29d8 Import previewer implemented
Eugene Ostroukhov
parents: 3
diff changeset
   107
			}
30
50ffca984095 Home button now works, launch configuration was renamed
Eugene Ostroukhov <eostroukhov@symbian.org>
parents: 22
diff changeset
   108
			createPreviewerHomePage(project, mainHtml);
11
05e53cfc29d8 Import previewer implemented
Eugene Ostroukhov
parents: 3
diff changeset
   109
		} catch (IOException e) {
05e53cfc29d8 Import previewer implemented
Eugene Ostroukhov
parents: 3
diff changeset
   110
			StatusManager.getManager().handle(new Status(IStatus.ERROR, Activator.PLUGIN_ID, "Unable to add previewer to project"));
05e53cfc29d8 Import previewer implemented
Eugene Ostroukhov
parents: 3
diff changeset
   111
		} catch (CoreException e) {
05e53cfc29d8 Import previewer implemented
Eugene Ostroukhov
parents: 3
diff changeset
   112
			StatusManager.getManager().handle(e, Activator.PLUGIN_ID);
05e53cfc29d8 Import previewer implemented
Eugene Ostroukhov
parents: 3
diff changeset
   113
		}
05e53cfc29d8 Import previewer implemented
Eugene Ostroukhov
parents: 3
diff changeset
   114
	}
05e53cfc29d8 Import previewer implemented
Eugene Ostroukhov
parents: 3
diff changeset
   115
30
50ffca984095 Home button now works, launch configuration was renamed
Eugene Ostroukhov <eostroukhov@symbian.org>
parents: 22
diff changeset
   116
	@SuppressWarnings("restriction")
50ffca984095 Home button now works, launch configuration was renamed
Eugene Ostroukhov <eostroukhov@symbian.org>
parents: 22
diff changeset
   117
	private static void createPreviewerHomePage(IProject project, IPath mainHtml)
50ffca984095 Home button now works, launch configuration was renamed
Eugene Ostroukhov <eostroukhov@symbian.org>
parents: 22
diff changeset
   118
			throws CoreException, IOException {
50ffca984095 Home button now works, launch configuration was renamed
Eugene Ostroukhov <eostroukhov@symbian.org>
parents: 22
diff changeset
   119
		IFile file = project.getFile(mainHtml + ".html");
50ffca984095 Home button now works, launch configuration was renamed
Eugene Ostroukhov <eostroukhov@symbian.org>
parents: 22
diff changeset
   120
		if (file.exists()) {
50ffca984095 Home button now works, launch configuration was renamed
Eugene Ostroukhov <eostroukhov@symbian.org>
parents: 22
diff changeset
   121
			IFile newFile = project.getFile(WRT_PREVIEW_MAIN_HTML);
50ffca984095 Home button now works, launch configuration was renamed
Eugene Ostroukhov <eostroukhov@symbian.org>
parents: 22
diff changeset
   122
			file.copy(newFile.getFullPath(), false, new NullProgressMonitor());
50ffca984095 Home button now works, launch configuration was renamed
Eugene Ostroukhov <eostroukhov@symbian.org>
parents: 22
diff changeset
   123
			IModelManager modelManager = StructuredModelManager
50ffca984095 Home button now works, launch configuration was renamed
Eugene Ostroukhov <eostroukhov@symbian.org>
parents: 22
diff changeset
   124
					.getModelManager();
50ffca984095 Home button now works, launch configuration was renamed
Eugene Ostroukhov <eostroukhov@symbian.org>
parents: 22
diff changeset
   125
			IDOMModel model = (IDOMModel) modelManager
50ffca984095 Home button now works, launch configuration was renamed
Eugene Ostroukhov <eostroukhov@symbian.org>
parents: 22
diff changeset
   126
					.getModelForEdit(newFile);
50ffca984095 Home button now works, launch configuration was renamed
Eugene Ostroukhov <eostroukhov@symbian.org>
parents: 22
diff changeset
   127
			if (model != null) {
50ffca984095 Home button now works, launch configuration was renamed
Eugene Ostroukhov <eostroukhov@symbian.org>
parents: 22
diff changeset
   128
				try {
50ffca984095 Home button now works, launch configuration was renamed
Eugene Ostroukhov <eostroukhov@symbian.org>
parents: 22
diff changeset
   129
					addJS(model);
50ffca984095 Home button now works, launch configuration was renamed
Eugene Ostroukhov <eostroukhov@symbian.org>
parents: 22
diff changeset
   130
				} finally {
50ffca984095 Home button now works, launch configuration was renamed
Eugene Ostroukhov <eostroukhov@symbian.org>
parents: 22
diff changeset
   131
					model.releaseFromEdit();
50ffca984095 Home button now works, launch configuration was renamed
Eugene Ostroukhov <eostroukhov@symbian.org>
parents: 22
diff changeset
   132
				}
50ffca984095 Home button now works, launch configuration was renamed
Eugene Ostroukhov <eostroukhov@symbian.org>
parents: 22
diff changeset
   133
			}
50ffca984095 Home button now works, launch configuration was renamed
Eugene Ostroukhov <eostroukhov@symbian.org>
parents: 22
diff changeset
   134
		}
50ffca984095 Home button now works, launch configuration was renamed
Eugene Ostroukhov <eostroukhov@symbian.org>
parents: 22
diff changeset
   135
	}
50ffca984095 Home button now works, launch configuration was renamed
Eugene Ostroukhov <eostroukhov@symbian.org>
parents: 22
diff changeset
   136
50ffca984095 Home button now works, launch configuration was renamed
Eugene Ostroukhov <eostroukhov@symbian.org>
parents: 22
diff changeset
   137
	@SuppressWarnings("restriction")
50ffca984095 Home button now works, launch configuration was renamed
Eugene Ostroukhov <eostroukhov@symbian.org>
parents: 22
diff changeset
   138
	private static void addJS(IDOMModel model) throws IOException, CoreException {
50ffca984095 Home button now works, launch configuration was renamed
Eugene Ostroukhov <eostroukhov@symbian.org>
parents: 22
diff changeset
   139
		IDOMDocument document = model.getDocument();
50ffca984095 Home button now works, launch configuration was renamed
Eugene Ostroukhov <eostroukhov@symbian.org>
parents: 22
diff changeset
   140
		Element documentElement = document.getDocumentElement();
50ffca984095 Home button now works, launch configuration was renamed
Eugene Ostroukhov <eostroukhov@symbian.org>
parents: 22
diff changeset
   141
		if (documentElement != null) {
50ffca984095 Home button now works, launch configuration was renamed
Eugene Ostroukhov <eostroukhov@symbian.org>
parents: 22
diff changeset
   142
			NodeList elementsByTagName = documentElement.getElementsByTagName("head");
50ffca984095 Home button now works, launch configuration was renamed
Eugene Ostroukhov <eostroukhov@symbian.org>
parents: 22
diff changeset
   143
			if (elementsByTagName.getLength() == 1) { // We do not want to handle malformed HTMLs
50ffca984095 Home button now works, launch configuration was renamed
Eugene Ostroukhov <eostroukhov@symbian.org>
parents: 22
diff changeset
   144
				Element head = (Element) elementsByTagName.item(0);
50ffca984095 Home button now works, launch configuration was renamed
Eugene Ostroukhov <eostroukhov@symbian.org>
parents: 22
diff changeset
   145
				Element script = document.createElement("script");
50ffca984095 Home button now works, launch configuration was renamed
Eugene Ostroukhov <eostroukhov@symbian.org>
parents: 22
diff changeset
   146
				script.setAttribute("language", "JavaScript");
50ffca984095 Home button now works, launch configuration was renamed
Eugene Ostroukhov <eostroukhov@symbian.org>
parents: 22
diff changeset
   147
				script.setAttribute("type", "text/javascript");
50ffca984095 Home button now works, launch configuration was renamed
Eugene Ostroukhov <eostroukhov@symbian.org>
parents: 22
diff changeset
   148
				script.setAttribute("src", "preview/script/lib/loader.js");
50ffca984095 Home button now works, launch configuration was renamed
Eugene Ostroukhov <eostroukhov@symbian.org>
parents: 22
diff changeset
   149
				head.insertBefore(script, head.getFirstChild());
50ffca984095 Home button now works, launch configuration was renamed
Eugene Ostroukhov <eostroukhov@symbian.org>
parents: 22
diff changeset
   150
				model.save();
50ffca984095 Home button now works, launch configuration was renamed
Eugene Ostroukhov <eostroukhov@symbian.org>
parents: 22
diff changeset
   151
			}
50ffca984095 Home button now works, launch configuration was renamed
Eugene Ostroukhov <eostroukhov@symbian.org>
parents: 22
diff changeset
   152
		}
50ffca984095 Home button now works, launch configuration was renamed
Eugene Ostroukhov <eostroukhov@symbian.org>
parents: 22
diff changeset
   153
	}
50ffca984095 Home button now works, launch configuration was renamed
Eugene Ostroukhov <eostroukhov@symbian.org>
parents: 22
diff changeset
   154
11
05e53cfc29d8 Import previewer implemented
Eugene Ostroukhov
parents: 3
diff changeset
   155
	private static URI getPreviewerArchive() {
05e53cfc29d8 Import previewer implemented
Eugene Ostroukhov
parents: 3
diff changeset
   156
		File file = getPreviewerZip();
05e53cfc29d8 Import previewer implemented
Eugene Ostroukhov
parents: 3
diff changeset
   157
		if (file.isFile()) {
05e53cfc29d8 Import previewer implemented
Eugene Ostroukhov
parents: 3
diff changeset
   158
			return file.toURI();
05e53cfc29d8 Import previewer implemented
Eugene Ostroukhov
parents: 3
diff changeset
   159
		}
05e53cfc29d8 Import previewer implemented
Eugene Ostroukhov
parents: 3
diff changeset
   160
		Display display = Display.getDefault();
05e53cfc29d8 Import previewer implemented
Eugene Ostroukhov
parents: 3
diff changeset
   161
		display.syncExec(new Runnable() {
05e53cfc29d8 Import previewer implemented
Eugene Ostroukhov
parents: 3
diff changeset
   162
			@Override
05e53cfc29d8 Import previewer implemented
Eugene Ostroukhov
parents: 3
diff changeset
   163
			public void run() {
05e53cfc29d8 Import previewer implemented
Eugene Ostroukhov
parents: 3
diff changeset
   164
				importPreviewer();
05e53cfc29d8 Import previewer implemented
Eugene Ostroukhov
parents: 3
diff changeset
   165
			}
05e53cfc29d8 Import previewer implemented
Eugene Ostroukhov
parents: 3
diff changeset
   166
		});
05e53cfc29d8 Import previewer implemented
Eugene Ostroukhov
parents: 3
diff changeset
   167
		if (file.isFile()) {
05e53cfc29d8 Import previewer implemented
Eugene Ostroukhov
parents: 3
diff changeset
   168
			return file.toURI();
05e53cfc29d8 Import previewer implemented
Eugene Ostroukhov
parents: 3
diff changeset
   169
		}
05e53cfc29d8 Import previewer implemented
Eugene Ostroukhov
parents: 3
diff changeset
   170
		return null;
05e53cfc29d8 Import previewer implemented
Eugene Ostroukhov
parents: 3
diff changeset
   171
	}
05e53cfc29d8 Import previewer implemented
Eugene Ostroukhov
parents: 3
diff changeset
   172
05e53cfc29d8 Import previewer implemented
Eugene Ostroukhov
parents: 3
diff changeset
   173
	private static File getPreviewerZip() {
05e53cfc29d8 Import previewer implemented
Eugene Ostroukhov
parents: 3
diff changeset
   174
		return Activator.getDefault().getStateLocation()
05e53cfc29d8 Import previewer implemented
Eugene Ostroukhov
parents: 3
diff changeset
   175
				.append("previewer.zip").toFile();
05e53cfc29d8 Import previewer implemented
Eugene Ostroukhov
parents: 3
diff changeset
   176
	}
05e53cfc29d8 Import previewer implemented
Eugene Ostroukhov
parents: 3
diff changeset
   177
14
e3d48d24826c UI refresh
Eugene Ostroukhov <eostroukhov@symbian.org>
parents: 11
diff changeset
   178
	private static void importPreviewer() {
11
05e53cfc29d8 Import previewer implemented
Eugene Ostroukhov
parents: 3
diff changeset
   179
		AptanaProjectSelectionDialog dialog = new AptanaProjectSelectionDialog(
05e53cfc29d8 Import previewer implemented
Eugene Ostroukhov
parents: 3
diff changeset
   180
				PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell());
05e53cfc29d8 Import previewer implemented
Eugene Ostroukhov
parents: 3
diff changeset
   181
		int open = dialog.open();
05e53cfc29d8 Import previewer implemented
Eugene Ostroukhov
parents: 3
diff changeset
   182
		if (open == Window.OK) {
05e53cfc29d8 Import previewer implemented
Eugene Ostroukhov
parents: 3
diff changeset
   183
			File project = dialog.getProject();
05e53cfc29d8 Import previewer implemented
Eugene Ostroukhov
parents: 3
diff changeset
   184
			try {
05e53cfc29d8 Import previewer implemented
Eugene Ostroukhov
parents: 3
diff changeset
   185
				zipPreviewer(project);
05e53cfc29d8 Import previewer implemented
Eugene Ostroukhov
parents: 3
diff changeset
   186
			} catch (IOException e) {
05e53cfc29d8 Import previewer implemented
Eugene Ostroukhov
parents: 3
diff changeset
   187
				StatusManager
05e53cfc29d8 Import previewer implemented
Eugene Ostroukhov
parents: 3
diff changeset
   188
						.getManager()
05e53cfc29d8 Import previewer implemented
Eugene Ostroukhov
parents: 3
diff changeset
   189
						.handle(
05e53cfc29d8 Import previewer implemented
Eugene Ostroukhov
parents: 3
diff changeset
   190
								new Status(
05e53cfc29d8 Import previewer implemented
Eugene Ostroukhov
parents: 3
diff changeset
   191
										IStatus.ERROR,
05e53cfc29d8 Import previewer implemented
Eugene Ostroukhov
parents: 3
diff changeset
   192
										Activator.PLUGIN_ID,
05e53cfc29d8 Import previewer implemented
Eugene Ostroukhov
parents: 3
diff changeset
   193
										"Failed to create Web Runtime previewer archive.",
05e53cfc29d8 Import previewer implemented
Eugene Ostroukhov
parents: 3
diff changeset
   194
										e), StatusManager.SHOW);
05e53cfc29d8 Import previewer implemented
Eugene Ostroukhov
parents: 3
diff changeset
   195
			}
05e53cfc29d8 Import previewer implemented
Eugene Ostroukhov
parents: 3
diff changeset
   196
		}
05e53cfc29d8 Import previewer implemented
Eugene Ostroukhov
parents: 3
diff changeset
   197
	}
05e53cfc29d8 Import previewer implemented
Eugene Ostroukhov
parents: 3
diff changeset
   198
05e53cfc29d8 Import previewer implemented
Eugene Ostroukhov
parents: 3
diff changeset
   199
	private static void zipPreviewer(File project) throws IOException {
05e53cfc29d8 Import previewer implemented
Eugene Ostroukhov
parents: 3
diff changeset
   200
		ZipOutputStream stream = new ZipOutputStream(new FileOutputStream(
05e53cfc29d8 Import previewer implemented
Eugene Ostroukhov
parents: 3
diff changeset
   201
				getPreviewerZip()));
05e53cfc29d8 Import previewer implemented
Eugene Ostroukhov
parents: 3
diff changeset
   202
		try {
14
e3d48d24826c UI refresh
Eugene Ostroukhov <eostroukhov@symbian.org>
parents: 11
diff changeset
   203
			zip(new File(project, PREVIEW_FOLDER), stream, PREVIEW_FOLDER + "/");
e3d48d24826c UI refresh
Eugene Ostroukhov <eostroukhov@symbian.org>
parents: 11
diff changeset
   204
			zipFile(new File(project, PREVIEW_FRAME_FILE),
e3d48d24826c UI refresh
Eugene Ostroukhov <eostroukhov@symbian.org>
parents: 11
diff changeset
   205
					PREVIEW_FRAME_FILE, stream);
11
05e53cfc29d8 Import previewer implemented
Eugene Ostroukhov
parents: 3
diff changeset
   206
		} finally {
05e53cfc29d8 Import previewer implemented
Eugene Ostroukhov
parents: 3
diff changeset
   207
			stream.close();
05e53cfc29d8 Import previewer implemented
Eugene Ostroukhov
parents: 3
diff changeset
   208
		}
05e53cfc29d8 Import previewer implemented
Eugene Ostroukhov
parents: 3
diff changeset
   209
	}
05e53cfc29d8 Import previewer implemented
Eugene Ostroukhov
parents: 3
diff changeset
   210
05e53cfc29d8 Import previewer implemented
Eugene Ostroukhov
parents: 3
diff changeset
   211
	private static void zip(File folder, ZipOutputStream stream, String path)
05e53cfc29d8 Import previewer implemented
Eugene Ostroukhov
parents: 3
diff changeset
   212
			throws IOException {
05e53cfc29d8 Import previewer implemented
Eugene Ostroukhov
parents: 3
diff changeset
   213
		ZipEntry entry = new ZipEntry(path);
05e53cfc29d8 Import previewer implemented
Eugene Ostroukhov
parents: 3
diff changeset
   214
		stream.putNextEntry(entry);
05e53cfc29d8 Import previewer implemented
Eugene Ostroukhov
parents: 3
diff changeset
   215
		stream.closeEntry();
05e53cfc29d8 Import previewer implemented
Eugene Ostroukhov
parents: 3
diff changeset
   216
		File[] files = folder.listFiles();
05e53cfc29d8 Import previewer implemented
Eugene Ostroukhov
parents: 3
diff changeset
   217
		for (File file : files) {
05e53cfc29d8 Import previewer implemented
Eugene Ostroukhov
parents: 3
diff changeset
   218
			if (file.isFile()) {
05e53cfc29d8 Import previewer implemented
Eugene Ostroukhov
parents: 3
diff changeset
   219
				zipFile(file, path + file.getName(), stream);
05e53cfc29d8 Import previewer implemented
Eugene Ostroukhov
parents: 3
diff changeset
   220
			} else {
05e53cfc29d8 Import previewer implemented
Eugene Ostroukhov
parents: 3
diff changeset
   221
				zip(file, stream, path + file.getName() + "/");
05e53cfc29d8 Import previewer implemented
Eugene Ostroukhov
parents: 3
diff changeset
   222
			}
05e53cfc29d8 Import previewer implemented
Eugene Ostroukhov
parents: 3
diff changeset
   223
		}
05e53cfc29d8 Import previewer implemented
Eugene Ostroukhov
parents: 3
diff changeset
   224
	}
05e53cfc29d8 Import previewer implemented
Eugene Ostroukhov
parents: 3
diff changeset
   225
05e53cfc29d8 Import previewer implemented
Eugene Ostroukhov
parents: 3
diff changeset
   226
	private static void zipFile(File file, String zipEntry,
05e53cfc29d8 Import previewer implemented
Eugene Ostroukhov
parents: 3
diff changeset
   227
			ZipOutputStream stream) throws IOException, FileNotFoundException {
05e53cfc29d8 Import previewer implemented
Eugene Ostroukhov
parents: 3
diff changeset
   228
		ZipEntry entry = new ZipEntry(zipEntry);
05e53cfc29d8 Import previewer implemented
Eugene Ostroukhov
parents: 3
diff changeset
   229
		stream.putNextEntry(entry);
05e53cfc29d8 Import previewer implemented
Eugene Ostroukhov
parents: 3
diff changeset
   230
		BufferedInputStream inputStream = new BufferedInputStream(
05e53cfc29d8 Import previewer implemented
Eugene Ostroukhov
parents: 3
diff changeset
   231
				new FileInputStream(file));
05e53cfc29d8 Import previewer implemented
Eugene Ostroukhov
parents: 3
diff changeset
   232
		try {
05e53cfc29d8 Import previewer implemented
Eugene Ostroukhov
parents: 3
diff changeset
   233
			copy(inputStream, stream);
05e53cfc29d8 Import previewer implemented
Eugene Ostroukhov
parents: 3
diff changeset
   234
		} finally {
05e53cfc29d8 Import previewer implemented
Eugene Ostroukhov
parents: 3
diff changeset
   235
			inputStream.close();
05e53cfc29d8 Import previewer implemented
Eugene Ostroukhov
parents: 3
diff changeset
   236
		}
05e53cfc29d8 Import previewer implemented
Eugene Ostroukhov
parents: 3
diff changeset
   237
		stream.closeEntry();
05e53cfc29d8 Import previewer implemented
Eugene Ostroukhov
parents: 3
diff changeset
   238
	}
05e53cfc29d8 Import previewer implemented
Eugene Ostroukhov
parents: 3
diff changeset
   239
05e53cfc29d8 Import previewer implemented
Eugene Ostroukhov
parents: 3
diff changeset
   240
	private static void copy(InputStream in, OutputStream out)
05e53cfc29d8 Import previewer implemented
Eugene Ostroukhov
parents: 3
diff changeset
   241
			throws IOException {
05e53cfc29d8 Import previewer implemented
Eugene Ostroukhov
parents: 3
diff changeset
   242
		byte[] buffer = new byte[131072]; // 128k - should be enough for most
05e53cfc29d8 Import previewer implemented
Eugene Ostroukhov
parents: 3
diff changeset
   243
		// JS/CSS files
05e53cfc29d8 Import previewer implemented
Eugene Ostroukhov
parents: 3
diff changeset
   244
		int count;
05e53cfc29d8 Import previewer implemented
Eugene Ostroukhov
parents: 3
diff changeset
   245
		while ((count = in.read(buffer)) > 0) {
05e53cfc29d8 Import previewer implemented
Eugene Ostroukhov
parents: 3
diff changeset
   246
			out.write(buffer, 0, count);
05e53cfc29d8 Import previewer implemented
Eugene Ostroukhov
parents: 3
diff changeset
   247
		}
05e53cfc29d8 Import previewer implemented
Eugene Ostroukhov
parents: 3
diff changeset
   248
	}
05e53cfc29d8 Import previewer implemented
Eugene Ostroukhov
parents: 3
diff changeset
   249
05e53cfc29d8 Import previewer implemented
Eugene Ostroukhov
parents: 3
diff changeset
   250
	public static String getDefaultAptanaLocation() {
05e53cfc29d8 Import previewer implemented
Eugene Ostroukhov
parents: 3
diff changeset
   251
		File myDocuments = FileSystemView.getFileSystemView()
05e53cfc29d8 Import previewer implemented
Eugene Ostroukhov
parents: 3
diff changeset
   252
				.getDefaultDirectory();
05e53cfc29d8 Import previewer implemented
Eugene Ostroukhov
parents: 3
diff changeset
   253
		File file = new File(myDocuments, "Aptana Studio Workspace");
05e53cfc29d8 Import previewer implemented
Eugene Ostroukhov
parents: 3
diff changeset
   254
		return file.exists() ? file.getAbsolutePath() : "";
05e53cfc29d8 Import previewer implemented
Eugene Ostroukhov
parents: 3
diff changeset
   255
	}
05e53cfc29d8 Import previewer implemented
Eugene Ostroukhov
parents: 3
diff changeset
   256
05e53cfc29d8 Import previewer implemented
Eugene Ostroukhov
parents: 3
diff changeset
   257
	public static boolean isAptanaProject(File f) {
14
e3d48d24826c UI refresh
Eugene Ostroukhov <eostroukhov@symbian.org>
parents: 11
diff changeset
   258
		return new File(f, PREVIEW_FOLDER).isDirectory()
e3d48d24826c UI refresh
Eugene Ostroukhov <eostroukhov@symbian.org>
parents: 11
diff changeset
   259
				&& new File(f, PREVIEW_FRAME_FILE).isFile();
11
05e53cfc29d8 Import previewer implemented
Eugene Ostroukhov
parents: 3
diff changeset
   260
	}
05e53cfc29d8 Import previewer implemented
Eugene Ostroukhov
parents: 3
diff changeset
   261
05e53cfc29d8 Import previewer implemented
Eugene Ostroukhov
parents: 3
diff changeset
   262
	public static void copyFile(IProject project, String name, ZipInputStream stream,
05e53cfc29d8 Import previewer implemented
Eugene Ostroukhov
parents: 3
diff changeset
   263
			long size, IProgressMonitor monitor) throws CoreException,
05e53cfc29d8 Import previewer implemented
Eugene Ostroukhov
parents: 3
diff changeset
   264
			IOException {
05e53cfc29d8 Import previewer implemented
Eugene Ostroukhov
parents: 3
diff changeset
   265
		IFile file = project.getFile(name);
05e53cfc29d8 Import previewer implemented
Eugene Ostroukhov
parents: 3
diff changeset
   266
		file.create(new NonClosingStream(stream), true,
05e53cfc29d8 Import previewer implemented
Eugene Ostroukhov
parents: 3
diff changeset
   267
				new SubProgressMonitor(monitor, 1));
05e53cfc29d8 Import previewer implemented
Eugene Ostroukhov
parents: 3
diff changeset
   268
	}
14
e3d48d24826c UI refresh
Eugene Ostroukhov <eostroukhov@symbian.org>
parents: 11
diff changeset
   269
e3d48d24826c UI refresh
Eugene Ostroukhov <eostroukhov@symbian.org>
parents: 11
diff changeset
   270
	public static void importPreviewer(URI locationURI) {
e3d48d24826c UI refresh
Eugene Ostroukhov <eostroukhov@symbian.org>
parents: 11
diff changeset
   271
		if (!getPreviewerZip().exists()) {
e3d48d24826c UI refresh
Eugene Ostroukhov <eostroukhov@symbian.org>
parents: 11
diff changeset
   272
			File file = new File(locationURI);
e3d48d24826c UI refresh
Eugene Ostroukhov <eostroukhov@symbian.org>
parents: 11
diff changeset
   273
			try {
e3d48d24826c UI refresh
Eugene Ostroukhov <eostroukhov@symbian.org>
parents: 11
diff changeset
   274
				zipPreviewer(file);
e3d48d24826c UI refresh
Eugene Ostroukhov <eostroukhov@symbian.org>
parents: 11
diff changeset
   275
			} catch (IOException e) {
e3d48d24826c UI refresh
Eugene Ostroukhov <eostroukhov@symbian.org>
parents: 11
diff changeset
   276
				Activator.log(e);
e3d48d24826c UI refresh
Eugene Ostroukhov <eostroukhov@symbian.org>
parents: 11
diff changeset
   277
			}
e3d48d24826c UI refresh
Eugene Ostroukhov <eostroukhov@symbian.org>
parents: 11
diff changeset
   278
		}
e3d48d24826c UI refresh
Eugene Ostroukhov <eostroukhov@symbian.org>
parents: 11
diff changeset
   279
	}
e3d48d24826c UI refresh
Eugene Ostroukhov <eostroukhov@symbian.org>
parents: 11
diff changeset
   280
e3d48d24826c UI refresh
Eugene Ostroukhov <eostroukhov@symbian.org>
parents: 11
diff changeset
   281
	public static boolean isAptanaProject(URI locationURI) {
e3d48d24826c UI refresh
Eugene Ostroukhov <eostroukhov@symbian.org>
parents: 11
diff changeset
   282
		return isAptanaProject(new File(locationURI));
e3d48d24826c UI refresh
Eugene Ostroukhov <eostroukhov@symbian.org>
parents: 11
diff changeset
   283
	}
3
d3477de62514 Added new wizards for importing WRT projects. Added CSS Validator.
TasneemS@US-TASNEEMS
parents:
diff changeset
   284
}