blob: 52cf6b4de6f6be56f9b10b11adca8bbc8600bc73 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2006, 2015 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* IBM Corporation - initial API and implementation
* Lars Vogel <Lars.Vogel@vogella.com> - Bug 473694
*******************************************************************************/
package org.eclipse.pde.internal.ui.templates.ide;
import java.io.File;
import java.util.ArrayList;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.jface.wizard.Wizard;
import org.eclipse.jface.wizard.WizardPage;
import org.eclipse.pde.core.plugin.*;
import org.eclipse.pde.internal.ui.templates.*;
import org.eclipse.pde.ui.IFieldData;
import org.eclipse.pde.ui.templates.AbstractTemplateSection;
import org.eclipse.pde.ui.templates.PluginReference;
/**
* Creates a template for contributing to the Universal Welcome
* intro. Requires Eclipse version 3.2.
*
* @since 3.2
*/
public class UniversalWelcomeTemplate extends PDETemplateSection {
private static final String KEY_LINK_ID = "linkId"; //$NON-NLS-1$
private static final String KEY_EXTENSION_ID = "extensionId"; //$NON-NLS-1$
private static final String KEY_INTRO_DIR = "introDir"; //$NON-NLS-1$
private static final String KEY_PATH = "path"; //$NON-NLS-1$
private static final String KEY_LINK_URL = "linkUrl"; //$NON-NLS-1$
private String pluginId;
public UniversalWelcomeTemplate() {
setPageCount(1);
createOptions();
}
private void createOptions() {
// options
addOption(KEY_INTRO_DIR, PDETemplateMessages.UniversalWelcomeTemplate_key_directoryName, "intro", 0); //$NON-NLS-1$
addOption(KEY_PATH, PDETemplateMessages.UniversalWelcomeTemplate_key_targetPage, new String[][] { {"overview/@", PDETemplateMessages.UniversalWelcomeTemplate_page_Overview}, {"tutorials/@", PDETemplateMessages.UniversalWelcomeTemplate_page_Tutorials}, //$NON-NLS-1$ //$NON-NLS-2$
{"firststeps/@", PDETemplateMessages.UniversalWelcomeTemplate_page_FirstSteps}, {"samples/@", PDETemplateMessages.UniversalWelcomeTemplate_page_Samples}, //$NON-NLS-1$ //$NON-NLS-2$
{"whatsnew/@", PDETemplateMessages.UniversalWelcomeTemplate_page_Whatsnew}, {"migrate/@", PDETemplateMessages.UniversalWelcomeTemplate_page_Migrate}, //$NON-NLS-1$ //$NON-NLS-2$
{"webresources/@", PDETemplateMessages.UniversalWelcomeTemplate_page_WebResources}}, "overview/@", 0); //$NON-NLS-1$ //$NON-NLS-2$
addOption(KEY_LINK_URL, PDETemplateMessages.UniversalWelcomeTemplate_linkUrl, "http://www.eclipse.org", 0); //$NON-NLS-1$
}
@Override
public void addPages(Wizard wizard) {
WizardPage page = createPage(0, IHelpContextIds.TEMPLATE_UNIVERSAL_WELCOME);
page.setTitle(PDETemplateMessages.IntroTemplate_title);
page.setDescription(PDETemplateMessages.IntroTemplate_desc);
wizard.addPage(page);
markPagesAdded();
}
@Override
public boolean isDependentOnParentWizard() {
return true;
}
@Override
public String getSectionId() {
return "universalWelcome"; //$NON-NLS-1$
}
@Override
protected void initializeFields(IFieldData data) {
// In a new project wizard, we don't know this yet - the
// model has not been created
pluginId = data.getId();
}
@Override
public void initializeFields(IPluginModelBase model) {
pluginId = model.getPluginBase().getId();
}
@Override
protected void updateModel(IProgressMonitor monitor) throws CoreException {
IPluginBase plugin = model.getPluginBase();
IPluginExtension extension = createExtension("org.eclipse.ui.intro.configExtension", false); //$NON-NLS-1$
IPluginElement element = model.getPluginFactory().createElement(extension);
element.setName("configExtension"); //$NON-NLS-1$
element.setAttribute("configId", //$NON-NLS-1$
"org.eclipse.ui.intro.universalConfig"); //$NON-NLS-1$
element.setAttribute("content", getStringOption(KEY_INTRO_DIR) //$NON-NLS-1$
+ "/sample.xml"); //$NON-NLS-1$
extension.add(element);
if (!extension.isInTheModel())
plugin.add(extension);
}
@Override
protected boolean isOkToCreateFolder(File sourceFolder) {
return true;
}
/**
* @see AbstractTemplateSection#isOkToCreateFile(File)
*/
@Override
protected boolean isOkToCreateFile(File sourceFile) {
return true;
}
@Override
public String getUsedExtensionPoint() {
return "org.eclipse.ui.intro.configExtension"; //$NON-NLS-1$
}
@Override
public IPluginReference[] getDependencies(String schemaVersion) {
ArrayList<PluginReference> result = new ArrayList<>();
// We really need Eclipse 3.2 or higher but since Universal
// appears in 3.2 for the first time, just depending on
// its presence has the same effect.
result.add(new PluginReference("org.eclipse.ui.intro", null, 0)); //$NON-NLS-1$
result.add(new PluginReference("org.eclipse.ui.intro.universal", null, 0)); //$NON-NLS-1$
result.add(new PluginReference("org.eclipse.ui", null, 0)); //$NON-NLS-1$
return result.toArray(new IPluginReference[result.size()]);
}
@Override
public int getNumberOfWorkUnits() {
return super.getNumberOfWorkUnits() + 1;
}
/*
* We are going to compute some values even though we are
* not exposing them as options.
*/
@Override
public String getStringOption(String name) {
if (name.equals(KEY_EXTENSION_ID)) {
return stripNonAlphanumeric(pluginId) + "-introExtension"; //$NON-NLS-1$
}
if (name.equals(KEY_LINK_ID)) {
return stripNonAlphanumeric(pluginId) + "-introLink"; //$NON-NLS-1$
}
return super.getStringOption(name);
}
/*
* Strips any non alphanumeric characters from the string so as not to break the css
*/
private String stripNonAlphanumeric(String id) {
StringBuffer result = new StringBuffer();
for (int i = 0; i < id.length(); i++) {
char next = id.charAt(i);
if (Character.isLetterOrDigit(next)) {
result.append(next);
}
}
return result.toString();
}
@Override
public String[] getNewFiles() {
return new String[] {getStringOption(KEY_INTRO_DIR) + "/"}; //$NON-NLS-1$
}
}