blob: 290a1c1767d06b37d98da2619e5f059dba2951ed [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2005, 2017 IBM Corporation and others.
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v. 2.0 which is available at
* http://www.eclipse.org/legal/epl-2.0.
*
* SPDX-License-Identifier: EPL-2.0
*
*******************************************************************************/
package org.eclipse.dltk.ui.wizards;
import java.net.URI;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.eclipse.core.filesystem.EFS;
import org.eclipse.core.filesystem.IFileStore;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.core.runtime.Path;
import org.eclipse.dltk.compiler.util.Util;
import org.eclipse.dltk.core.DLTKCore;
import org.eclipse.dltk.core.DLTKLanguageManager;
import org.eclipse.dltk.core.IDLTKLanguageToolkit;
import org.eclipse.dltk.core.IModelElement;
import org.eclipse.dltk.core.IProjectFragment;
import org.eclipse.dltk.core.IScriptFolder;
import org.eclipse.dltk.core.IScriptProject;
import org.eclipse.dltk.core.ISourceModule;
import org.eclipse.dltk.core.ModelException;
import org.eclipse.dltk.core.ScriptModelUtil;
import org.eclipse.dltk.core.environment.EnvironmentManager;
import org.eclipse.dltk.core.environment.IEnvironment;
import org.eclipse.dltk.internal.ui.util.SWTUtil;
import org.eclipse.dltk.internal.ui.wizards.dialogfields.ComboDialogField;
import org.eclipse.dltk.internal.ui.wizards.dialogfields.DialogField;
import org.eclipse.dltk.internal.ui.wizards.dialogfields.IDialogFieldListener;
import org.eclipse.dltk.internal.ui.wizards.dialogfields.LayoutUtil;
import org.eclipse.dltk.internal.ui.wizards.dialogfields.SelectionButtonDialogField;
import org.eclipse.dltk.internal.ui.wizards.dialogfields.StringDialogField;
import org.eclipse.dltk.ui.ModelElementLabelProvider;
import org.eclipse.dltk.ui.dialogs.StatusInfo;
import org.eclipse.dltk.ui.preferences.CodeTemplatesPreferencePage;
import org.eclipse.dltk.ui.text.templates.ICodeTemplateArea;
import org.eclipse.dltk.ui.text.templates.SourceModuleTemplateContext;
import org.eclipse.dltk.ui.util.CodeGeneration;
import org.eclipse.dltk.ui.wizards.ISourceModuleWizard.ICreateContext;
import org.eclipse.dltk.ui.wizards.ISourceModuleWizard.ICreateStep;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.dialogs.IDialogSettings;
import org.eclipse.jface.preference.PreferenceDialog;
import org.eclipse.jface.text.templates.Template;
import org.eclipse.jface.text.templates.TemplateContextType;
import org.eclipse.jface.text.templates.persistence.TemplateStore;
import org.eclipse.jface.viewers.ILabelProvider;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.window.Window;
import org.eclipse.jface.wizard.IWizard;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.widgets.Text;
import org.eclipse.ui.dialogs.ElementListSelectionDialog;
import org.eclipse.ui.dialogs.PreferencesUtil;
/**
* Wizard page that acts as a base class for wizard pages that create new source
* module elements, such as types. The class provides provides an input field
* for the source module name along with validation methods.
*
* @see NewSourceModuleInPackagePage
*/
public abstract class NewSourceModulePage extends NewContainerWizardPage {
static final String FILE = "NewSourceModulePage.file"; //$NON-NLS-1$
private static final String TEMPLATE = "NewSourceModulePage.template"; //$NON-NLS-1$
static final String EXTENSIONS = "NewSourceModulePage.extensions"; //$NON-NLS-1$
/**
* The status of the last validation of the file (i.e. source module).
*/
protected IStatus sourceModuleStatus;
private final List<IStatus> extensionStatus = new ArrayList<>();
private StringDialogField fileDialogField;
private IStatus fileChanged() {
StatusInfo status = new StatusInfo();
if (getFileText().length() == 0) {
status.setError(Messages.NewSourceModulePage_pathCannotBeEmpty);
} else {
if (!Path.EMPTY.isValidSegment(getFileText())) {
status.setError(Messages.NewSourceModulePage_InvalidFileName);
}
if (getScriptFolder() != null) {
ISourceModule module = getScriptFolder()
.getSourceModule(getFileName());
if (module.exists()) {
status.setError(
Messages.NewSourceModulePage_fileAlreadyExists);
} else {
IResource resource = module.getResource();
if (resource != null) {
URI location = resource.getLocationURI();
if (location != null) {
try {
IFileStore store = EFS.getStore(location);
if (store.fetchInfo().exists()) {
status.setError(
Messages.NewSourceModulePage_error_TypeNameExistsDifferentCase);
}
} catch (CoreException e) {
status.setError(
Messages.NewSourceModulePage_error_uri_location_unkown);
}
}
}
}
}
}
return status;
}
/**
* The wizard owning this page is responsible for calling this method with
* the current selection. The selection is used to initialize the fields of
* the wizard page.
*
* @param selection
* used to initialize the fields
*/
public void init(IStructuredSelection selection) {
if (getTemplateArea() != null) {
createTemplateField();
}
IModelElement element = getInitialScriptElement(selection);
initContainerPage(element);
updateTemplates();
updateStatus(new IStatus[] { containerStatus, fileChanged() });
}
protected void createFileControls(Composite parent, int nColumns) {
fileDialogField.doFillIntoGrid(parent, nColumns - 1);
Text text = fileDialogField.getTextControl(null);
LayoutUtil.setWidthHint(text, getMaxFieldWidth());
LayoutUtil.setHorizontalGrabbing(text);
DialogField.createEmptySpace(parent);
}
private static final String NO_TEMPLATE = Util.EMPTY_STRING;
private Template[] fTemplates;
private ComboDialogField fTemplateDialogField = null;
protected void createTemplateControls(Composite parent, int nColumns) {
fTemplateDialogField.doFillIntoGrid(parent, nColumns - 1);
LayoutUtil.setWidthHint(fTemplateDialogField.getComboControl(null),
getMaxFieldWidth());
final Button configureTemplates = new Button(parent, SWT.PUSH);
GridData configureData = new GridData(SWT.FILL, SWT.NONE, false, false);
configureData.widthHint = SWTUtil
.getButtonWidthHint(configureTemplates);
configureTemplates.setLayoutData(configureData);
configureTemplates
.setText(Messages.NewSourceModulePage_ConfigureTemplates);
configureTemplates.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
String templateName = null;
final Template template = getSelectedTemplate();
if (template != null) {
templateName = template.getName();
}
Map<String, Object> data = null;
if (templateName != null) {
data = new HashMap<>();
data.put(CodeTemplatesPreferencePage.DATA_SELECT_TEMPLATE,
templateName);
}
// TODO handle project specific preferences if any?
final String prefPageId = getTemplateArea()
.getTemplatePreferencePageId();
final PreferenceDialog dialog = PreferencesUtil
.createPreferenceDialogOn(getShell(), prefPageId,
new String[] { prefPageId }, data);
if (dialog.open() == Window.OK) {
updateTemplates();
}
}
});
}
protected void updateTemplates() {
if (fTemplateDialogField != null) {
Template selected = getSelectedTemplate();
String name = selected != null ? selected.getName()
: getLastUsedTemplateName();
fTemplates = getApplicableTemplates();
int idx = 0;
String[] names = new String[fTemplates.length + 1];
for (int i = 0; i < fTemplates.length; i++) {
names[i + 1] = fTemplates[i].getName();
if (name != null && name.equals(names[i + 1])) {
idx = i + 1;
}
}
if (idx == 0) {
final Template template = getDefaultTemplate();
if (template != null) {
for (int i = 0; i < fTemplates.length; ++i) {
if (template == fTemplates[i]) {
idx = i + 1;
break;
}
}
}
}
names[0] = Messages.NewSourceModulePage_noTemplate;
fTemplateDialogField.setItems(names);
fTemplateDialogField.selectItem(idx);
}
}
protected Template getDefaultTemplate() {
final String defaultTemplateId = getDefaultCodeTemplateId();
if (defaultTemplateId != null) {
final ICodeTemplateArea templateArea = getTemplateArea();
if (templateArea != null) {
final TemplateStore store = templateArea.getTemplateAccess()
.getTemplateStore();
return store.findTemplateById(defaultTemplateId);
}
}
return null;
}
protected Template[] getApplicableTemplates() {
final List<Template> result = new ArrayList<>();
final ICodeTemplateArea templateArea = getTemplateArea();
if (templateArea != null) {
final TemplateStore store = templateArea.getTemplateAccess()
.getTemplateStore();
final String[] contextTypeIds = getCodeTemplateContextTypeIds();
for (int i = 0; i < contextTypeIds.length; ++i) {
Template[] templates = store.getTemplates(contextTypeIds[i]);
Arrays.sort(templates, (t0, t1) -> t0.getName()
.compareToIgnoreCase(t1.getName()));
for (int j = 0; j < templates.length; ++j) {
result.add(templates[j]);
}
}
}
return result.toArray(new Template[result.size()]);
}
protected String getLastUsedTemplateKey() {
return getClass().getName() + "_LAST_USED_TEMPLATE"; //$NON-NLS-1$
}
/**
* @return the name of the template used in the previous dialog invocation.
*/
protected String getLastUsedTemplateName() {
final IDialogSettings dialogSettings = getDialogSettings();
return dialogSettings != null
? dialogSettings.get(getLastUsedTemplateKey())
: null;
}
/**
* Saves the name of the last used template.
*
* @param name
* the name of a template, or an empty string for no template.
*/
protected void saveLastUsedTemplateName(String name) {
final IDialogSettings dialogSettings = getDialogSettings();
if (dialogSettings != null) {
dialogSettings.put(getLastUsedTemplateKey(), name);
}
}
protected Template getSelectedTemplate() {
if (fTemplateDialogField != null) {
int index = fTemplateDialogField.getSelectionIndex() - 1;
if (index >= 0 && index < fTemplates.length) {
return fTemplates[index];
}
}
return null;
}
public NewSourceModulePage() {
super("wizardPage"); //$NON-NLS-1$
setTitle(getPageTitle());
setDescription(getPageDescription());
sourceModuleStatus = new StatusInfo();
// fileDialogField
fileDialogField = new StringDialogField();
fileDialogField.setLabelText(Messages.NewSourceModulePage_file);
fileDialogField.setDialogFieldListener(field -> {
sourceModuleStatus = fileChanged();
handleFieldChanged(FILE);
});
}
protected void createTemplateField() {
fTemplateDialogField = new ComboDialogField(SWT.READ_ONLY);
fTemplateDialogField
.setLabelText(Messages.NewSourceModulePage_Template);
}
@Override
protected void handleFieldChanged(String fieldName) {
super.handleFieldChanged(fieldName);
if (fieldName == CONTAINER) {
sourceModuleStatus = fileChanged();
}
if (fieldName == FILE || fieldName == CONTAINER) {
final IWizard wizard = getWizard();
if (wizard != null) {
((NewSourceModuleWizard) wizard).fireFieldChange(fieldName);
}
}
if (fieldName == EXTENSIONS) {
extensionStatus.clear();
for (ISourceModuleWizardExtension extension : getExtensions()) {
final IStatus status = extension.validate();
if (status != null) {
extensionStatus.add(status);
}
}
}
final List<IStatus> statuses = new ArrayList<>();
if (containerStatus != null) {
statuses.add(containerStatus);
}
if (sourceModuleStatus != null) {
statuses.add(sourceModuleStatus);
}
statuses.addAll(extensionStatus);
updateStatus(statuses.toArray(new IStatus[statuses.size()]));
}
private static class CreateContext implements ICreateContext {
final IScriptFolder scriptFolder;
final ISourceModule sourceModule;
/**
* @param fileName
* @param scriptFolder
* @param sourceModule
*/
public CreateContext(IScriptFolder scriptFolder,
ISourceModule sourceModule) {
this.scriptFolder = scriptFolder;
this.sourceModule = sourceModule;
}
@Override
public IEnvironment getEnvironment() {
IEnvironment environment = EnvironmentManager
.getEnvironment(getScriptFolder());
if (environment == null) {
environment = EnvironmentManager.getLocalEnvironment();
}
return environment;
}
@Override
public IScriptFolder getScriptFolder() {
return scriptFolder;
}
@Override
public IScriptProject getScriptProject() {
return getScriptFolder().getScriptProject();
}
@Override
public ISourceModule getSourceModule() {
return sourceModule;
}
private static class StepEntry {
final String kind;
final int priority;
final ICreateStep step;
public StepEntry(String kind, int priority, ICreateStep step) {
this.kind = kind;
this.priority = priority;
this.step = step;
}
}
final List<StepEntry> entries = new ArrayList<>();
@Override
public void addStep(String kind, int priority, ICreateStep step) {
entries.add(new StepEntry(kind, priority, step));
}
@Override
public ICreateStep[] getSteps(String kind) {
final List<StepEntry> selection = new ArrayList<>();
for (StepEntry entry : entries) {
if (kind.equals(entry.kind)) {
selection.add(entry);
}
}
Collections.sort(selection, (e1, e2) -> e1.priority - e1.priority);
final ICreateStep[] steps = new ICreateStep[selection.size()];
for (int i = 0; i < selection.size(); ++i) {
steps[i] = selection.get(i).step;
}
return steps;
}
private String content = Util.EMPTY_STRING;
@Override
public String getContent() {
return content;
}
@Override
public void setContent(String content) {
this.content = content;
}
}
class InitializeFileContent implements ICreateStep {
@Override
public void execute(ICreateContext context, IProgressMonitor monitor)
throws CoreException {
context.setContent(getFileContent(context.getSourceModule()));
}
}
static class CreateSourceModuleStep implements ICreateStep {
@Override
public void execute(ICreateContext context, IProgressMonitor monitor)
throws CoreException {
context.getScriptFolder().createSourceModule(
context.getSourceModule().getElementName(),
context.getContent(), true, monitor);
}
}
/**
* Creates new source module in current script folder. This method is called
* by the wizard on finish.
*/
public ISourceModule createFile(IProgressMonitor monitor)
throws CoreException {
if (monitor == null) {
monitor = new NullProgressMonitor();
}
final String fileName = getFileName();
final ISourceModule module = getScriptFolder()
.getSourceModule(fileName);
CreateContext context = new CreateContext(getScriptFolder(), module);
context.addStep(ICreateStep.KIND_PREPARE, 0,
new InitializeFileContent());
context.addStep(ICreateStep.KIND_EXECUTE, 0,
new CreateSourceModuleStep());
for (ISourceModuleWizardExtension extension : getExtensions()) {
extension.prepare(context);
}
final List<ICreateStep> steps = new ArrayList<>();
Collections.addAll(steps, context.getSteps(ICreateStep.KIND_PREPARE));
Collections.addAll(steps, context.getSteps(ICreateStep.KIND_EXECUTE));
Collections.addAll(steps, context.getSteps(ICreateStep.KIND_FINALIZE));
for (ICreateStep step : steps) {
step.execute(context, monitor);
}
return module;
}
@Override
public void createControl(Composite parent) {
initializeDialogUnits(parent);
final int nColumns = 3;
Composite composite = new Composite(parent, SWT.NONE);
GridData layoutData = new GridData(SWT.FILL, SWT.NONE, true, false);
composite.setLayoutData(layoutData);
composite.setFont(parent.getFont());
GridLayout layout = new GridLayout();
layout.numColumns = nColumns;
composite.setLayout(layout);
createContentControls(composite, nColumns);
setControl(composite);
Dialog.applyDialogFont(composite);
}
private static class WorkspaceMode implements ISourceModuleWizardMode {
public WorkspaceMode() {
}
@Override
public void createControl(Composite parent, int columns) {
// empty
}
@Override
public String getId() {
return ISourceModuleWizard.MODE_WORKSPACE;
}
@Override
public String getName() {
return "&workspace";
}
@Override
public void setEnabled(boolean enabled) {
// empty
}
}
private static class ModeEntry {
final SelectionButtonDialogField field;
final ISourceModuleWizardMode template;
public ModeEntry(SelectionButtonDialogField field,
ISourceModuleWizardMode template) {
this.field = field;
this.template = template;
}
private Boolean enabled = null;
public boolean getSelection() {
return enabled != null && enabled.booleanValue();
}
public void setSelection(boolean value) {
if (enabled == null || value != enabled.booleanValue()) {
if (field != null) {
field.setSelection(value);
}
template.setEnabled(value);
enabled = Boolean.valueOf(value);
}
}
}
final List<ModeEntry> modes = new ArrayList<>();
private ModeEntry getActiveMode() {
for (ModeEntry f : modes) {
if (f.getSelection()) {
return f;
}
}
if (!modes.isEmpty()) {
return modes.get(0);
}
throw new IllegalStateException("No modes");
}
private final IDialogFieldListener modeSelectionUpdater = field -> {
ModeEntry selection = null;
for (ModeEntry f1 : modes) {
if (f1.field != null && f1.field.isSelected()) {
selection = f1;
}
}
if (selection != null) {
for (ModeEntry f2 : modes) {
f2.setSelection(f2 == selection);
}
}
handleFieldChanged(TEMPLATE);
};
/**
* Creates content controls on the specified composite.
*
* @param composite
* @param nColumns
*/
protected void createContentControls(Composite composite,
final int nColumns) {
createContainerControls(composite, nColumns);
// createPackageControls(composite, nColumns);
createFileControls(composite, nColumns);
final List<ISourceModuleWizardMode> modes = new ArrayList<>();
for (ISourceModuleWizardExtension extension : getExtensions()) {
modes.addAll(extension.getModes());
}
if (!modes.isEmpty()) {
final Group contents = new Group(composite, SWT.NONE);
contents.setText("Location");
GridData ggd = new GridData(SWT.FILL, SWT.DEFAULT, true, false);
ggd.horizontalSpan = nColumns;
contents.setLayoutData(ggd);
contents.setLayout(new GridLayout(nColumns, false));
ModeEntry wsEntry = addMode(contents, nColumns,
new WorkspaceMode());
((GridData) wsEntry.field.getSelectionButton()
.getLayoutData()).horizontalSpan = nColumns;
for (ISourceModuleWizardMode template : modes) {
addMode(contents, nColumns, template);
}
for (ModeEntry modeEntry : this.modes) {
modeEntry.field.setDialogFieldListener(modeSelectionUpdater);
}
} else {
final ModeEntry entry = new ModeEntry(null, new WorkspaceMode());
entry.setSelection(true);
this.modes.add(entry);
}
if (fTemplateDialogField != null) {
createTemplateControls(composite, nColumns);
}
}
private List<ISourceModuleWizardExtension> getExtensions() {
return ((NewSourceModuleWizard) getWizard()).getExtensions();
}
private ModeEntry addMode(Composite parent, int nColumns,
ISourceModuleWizardMode template) {
SelectionButtonDialogField field = new SelectionButtonDialogField(
SWT.RADIO);
field.setLabelText(template.getName());
field.doFillIntoGrid(parent, 1);
// Composite parent = new Composite(contents, SWT.NONE);
// GridLayout layout = new GridLayout(3, false);
// layout.marginHeight = 0;
// layout.marginWidth = 0;
// parent.setLayout(layout);
// GridData ld = new GridData(SWT.FILL, SWT.DEFAULT, true,
// false);
// ld.horizontalSpan = nColumns - 1;
// parent.setLayoutData(ld);
template.createControl(parent, nColumns - 1);
final ModeEntry entry = new ModeEntry(field, template);
this.modes.add(entry);
String activeMode = ((NewSourceModuleWizard) getWizard()).getMode();
if (activeMode == null) {
activeMode = ISourceModuleWizard.MODE_WORKSPACE;
}
entry.setSelection(template.getId().equals(activeMode));
entry.field.setEnabled(((NewSourceModuleWizard) getWizard())
.isModeEnabled(template.getId()));
return entry;
}
protected String getFileText() {
return fileDialogField.getText();
}
/**
* Sets the file input field's text (simple name without path or extension)
* to the given value. Method doesn't update the model.
*
* @param name
* the new file name
* @param canBeModified
* if <code>true</code> the type name field is editable;
* otherwise it is read-only.
*/
public void setFileText(String name, boolean canBeModified) {
fileDialogField.setText(name);
fileDialogField.setEnabled(canBeModified);
}
protected String getFileName() {
final String fileText = getFileText();
String[] extensions = getFileExtensions();
for (int i = 0; i < extensions.length; ++i) {
String extension = extensions[i];
if (!extension.isEmpty() && fileText.endsWith("." + extension)) { //$NON-NLS-1$
return fileText;
}
}
if (extensions[0].isEmpty()) {
return fileText;
}
return fileText + "." + extensions[0]; //$NON-NLS-1$
}
protected String[] getFileExtensions() {
String requiredNature = getRequiredNature();
IDLTKLanguageToolkit toolkit = DLTKLanguageManager
.getLanguageToolkit(requiredNature);
if (toolkit != null) {
String[] extensions = ScriptModelUtil.getFileExtensions(toolkit);
if (extensions != null) {
return extensions;
}
}
return new String[] { Util.EMPTY_STRING };
}
protected IScriptFolder chooseScriptFolder() {
ILabelProvider labelProvider = new ModelElementLabelProvider(
ModelElementLabelProvider.SHOW_DEFAULT);
ElementListSelectionDialog dialog = new ElementListSelectionDialog(
getShell(), labelProvider);
dialog.setIgnoreCase(false);
dialog.setTitle(Messages.NewSourceModulePage_selectScriptFolder);
dialog.setMessage(Messages.NewSourceModulePage_selectScriptFolder);
dialog.setEmptyListMessage(
Messages.NewSourceModulePage_noFoldersAvailable);
IProjectFragment projectFragment = getProjectFragment();
if (projectFragment != null) {
try {
dialog.setElements(projectFragment.getChildren());
} catch (ModelException e) {
if (DLTKCore.DEBUG) {
e.printStackTrace();
}
}
}
dialog.setHelpAvailable(false);
if (getScriptFolder() != null) {
dialog.setInitialSelections(new Object[] { getScriptFolder() });
}
if (dialog.open() == Window.OK) {
Object element = dialog.getFirstResult();
if (element instanceof IScriptFolder) {
return (IScriptFolder) element;
}
}
return null;
}
@Override
public void setVisible(boolean visible) {
super.setVisible(visible);
if (visible) {
setFocus();
}
}
protected void setFocus() {
fileDialogField.setFocus();
}
protected abstract String getPageTitle();
protected abstract String getPageDescription();
protected ICodeTemplateArea getTemplateArea() {
return null;
}
protected String[] getCodeTemplateContextTypeIds() {
return null;
}
protected String getDefaultCodeTemplateId() {
return null;
}
protected String getFileContent(ISourceModule module) throws CoreException {
final ICodeTemplateArea templateArea = getTemplateArea();
if (templateArea != null) {
final Template template = getSelectedTemplate();
saveLastUsedTemplateName(
template != null ? template.getName() : NO_TEMPLATE);
if (template != null) {
final TemplateContextType contextType = templateArea
.getTemplateAccess().getContextTypeRegistry()
.getContextType(template.getContextTypeId());
// TODO introduce a way to create context by contextType
final SourceModuleTemplateContext context = new SourceModuleTemplateContext(
contextType,
CodeGeneration.getLineDelimiterUsed(module));
// String fileComment = getFileComment(file, lineDelimiter);
// context.setVariable(CodeTemplateContextType.FILE_COMMENT,
// fileComment != null ? fileComment : ""); //$NON-NLS-1$
// ICProject cproject = CoreModel.getDefault().create(
// file.getProject());
// String includeGuardSymbol = generateIncludeGuardSymbol(file
// .getName(), cproject);
// context.setVariable(CodeTemplateContextType.INCLUDE_GUARD_SYMBOL,
// includeGuardSymbol != null ? includeGuardSymbol : "");
// //$NON-NLS-1$
context.setSourceModuleVariables(module);
final String[] fullLine = {};
final String result = CodeGeneration.evaluateTemplate(context,
template, fullLine);
return result != null ? result : Util.EMPTY_STRING;
}
}
return getFileContent();
}
protected String getFileContent() {
return Util.EMPTY_STRING;
}
protected IEnvironment getEnvironment() {
final IProjectFragment fragment = getProjectFragment();
if (fragment != null) {
return EnvironmentManager
.getEnvironment(fragment.getScriptProject().getProject());
}
return null;
}
String getMode() {
return getActiveMode().template.getId();
}
void setMode(String mode) {
for (ModeEntry entry : modes) {
entry.setSelection(
mode != null && mode.equals(entry.template.getId()));
}
}
void enableMode(String mode, boolean enable) {
boolean updateSelection = false;
for (ModeEntry entry : modes) {
if (mode.equals(entry.template.getId()) && entry.field != null) {
if (entry.getSelection() && !enable) {
updateSelection = true;
entry.setSelection(false);
}
entry.field.setEnabled(enable);
}
}
if (updateSelection) {
for (ModeEntry entry : modes) {
if (entry.field == null || entry.field.isEnabled()) {
entry.setSelection(true);
break;
}
}
}
}
}