blob: 99a95508bda34bab4a664fe8578fd1d36d2ff7a7 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2000, 2016 IBM Corporation and others.
*
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* IBM Corporation - initial API and implementation
* Sebastian Davids: sdavids@gmx.de - see bug 25376
* Jeremie Bresson <jbr@bsiag.com> - Allow to specify format for date variable - https://bugs.eclipse.org/75981
* Lars Vogel <Lars.Vogel@vogella.com> - Bug 486903, 487327, 487901
*******************************************************************************/
package org.eclipse.jface.text.templates;
import java.util.List;
import com.ibm.icu.text.DateFormat;
import com.ibm.icu.text.SimpleDateFormat;
import com.ibm.icu.util.Calendar;
import com.ibm.icu.util.ULocale;
/**
* Global variables which are available in any context.
* <p>
* Clients may instantiate the classes contained within this class.
* </p>
*
* @since 3.0
*/
public class GlobalTemplateVariables {
/** The type of the selection variables. */
public static final String SELECTION= "selection"; //$NON-NLS-1$
/**
* The cursor variable determines the cursor placement after template edition.
*/
public static class Cursor extends SimpleTemplateVariableResolver {
/** Name of the cursor variable, value= {@value} */
public static final String NAME= "cursor"; //$NON-NLS-1$
/**
* Creates a new cursor variable
*/
public Cursor() {
super(NAME, TextTemplateMessages.getString("GlobalVariables.variable.description.cursor")); //$NON-NLS-1$
setEvaluationString(""); //$NON-NLS-1$
}
}
/**
* The selection variable determines templates that work on a selection.
*
* @since 3.6
*/
public static class Selection extends SimpleTemplateVariableResolver {
/**
* Creates a word selection variable.
*
* @param name the name of the variable
* @param description the description of the variable
*/
public Selection(String name, String description) {
super(name, description);
}
@Override
protected String resolve(TemplateContext context) {
String selection= context.getVariable(SELECTION);
if (selection == null)
return ""; //$NON-NLS-1$
return selection;
}
@Override
public void resolve(TemplateVariable variable, TemplateContext context) {
List<String> params= variable.getVariableType().getParams();
if (params.size() >= 1 && params.get(0) != null) {
resolveWithParams(variable, context, params);
} else {
// No parameter, use default:
super.resolve(variable, context);
}
}
private void resolveWithParams(TemplateVariable variable, TemplateContext context, List<String> params) {
String selection= context.getVariable(SELECTION);
if (selection != null && !selection.isEmpty()) {
variable.setValue(selection);
} else {
String defaultValue= params.get(0);
variable.setValue(defaultValue);
}
variable.setUnambiguous(true);
variable.setResolved(true);
}
}
/**
* The word selection variable determines templates that work on selected words, but not on
* selected lines.
*/
public static class WordSelection extends Selection {
/** Name of the word selection variable, value= {@value} */
public static final String NAME= "word_selection"; //$NON-NLS-1$
/**
* Creates a new word selection variable
*/
public WordSelection() {
super(NAME, TextTemplateMessages.getString("GlobalVariables.variable.description.selectedWord")); //$NON-NLS-1$
}
}
/**
* The line selection variable determines templates that work on selected
* lines.
*/
public static class LineSelection extends Selection {
/** Name of the line selection variable, value= {@value} */
public static final String NAME= "line_selection"; //$NON-NLS-1$
/**
* Creates a new line selection variable
*/
public LineSelection() {
super(NAME, TextTemplateMessages.getString("GlobalVariables.variable.description.selectedLines")); //$NON-NLS-1$
}
}
/**
* The dollar variable inserts an escaped dollar symbol.
*/
public static class Dollar extends SimpleTemplateVariableResolver {
/**
* Creates a new dollar variable
*/
public Dollar() {
super("dollar", TextTemplateMessages.getString("GlobalVariables.variable.description.dollar")); //$NON-NLS-1$ //$NON-NLS-2$
setEvaluationString("$"); //$NON-NLS-1$
}
}
/**
* The date variable evaluates to the current date. This supports a <code>pattern</code> and a
* <code>locale</code> as optional parameters. <code>pattern</code> is a pattern compatible with
* {@link SimpleDateFormat}. <code>locale</code> is a string representation of the locale
* compatible with the constructor parameter {@link ULocale#ULocale(String)}.
*/
public static class Date extends SimpleTemplateVariableResolver {
/**
* Creates a new date variable
*/
public Date() {
super("date", TextTemplateMessages.getString("GlobalVariables.variable.description.date")); //$NON-NLS-1$ //$NON-NLS-2$
}
@Override
public void resolve(TemplateVariable variable, TemplateContext context) {
List<String> params= variable.getVariableType().getParams();
if (params.size() >= 1 && params.get(0) != null) {
resolveWithParams(variable, context, params);
} else {
// No parameter, use default format:
super.resolve(variable, context);
}
}
private void resolveWithParams(TemplateVariable variable, TemplateContext context, List<String> params) {
try {
// There is a least one parameter (params.get(0) is not null), set the format depending on second parameter:
DateFormat format;
if (params.size() >= 2 && params.get(1) != null) {
format= new SimpleDateFormat(params.get(0), new ULocale(params.get(1)));
} else {
format= new SimpleDateFormat(params.get(0));
}
variable.setValue(format.format(new java.util.Date()));
variable.setUnambiguous(true);
variable.setResolved(true);
} catch (IllegalArgumentException e) {
// Date formating did not work, use default format instead:
super.resolve(variable, context);
}
}
@Override
protected String resolve(TemplateContext context) {
return DateFormat.getDateInstance().format(new java.util.Date());
}
}
/**
* The year variable evaluates to the current year.
*/
public static class Year extends SimpleTemplateVariableResolver {
/**
* Creates a new year variable
*/
public Year() {
super("year", TextTemplateMessages.getString("GlobalVariables.variable.description.year")); //$NON-NLS-1$ //$NON-NLS-2$
}
@Override
protected String resolve(TemplateContext context) {
return Integer.toString(Calendar.getInstance().get(Calendar.YEAR));
}
}
/**
* The time variable evaluates to the current time.
*/
public static class Time extends SimpleTemplateVariableResolver {
/**
* Creates a new time variable
*/
public Time() {
super("time", TextTemplateMessages.getString("GlobalVariables.variable.description.time")); //$NON-NLS-1$ //$NON-NLS-2$
}
@Override
protected String resolve(TemplateContext context) {
return DateFormat.getTimeInstance().format(new java.util.Date());
}
}
/**
* The user variable evaluates to the current user.
*/
public static class User extends SimpleTemplateVariableResolver {
/**
* Creates a new user name variable
*/
public User() {
super("user", TextTemplateMessages.getString("GlobalVariables.variable.description.user")); //$NON-NLS-1$ //$NON-NLS-2$
}
@Override
protected String resolve(TemplateContext context) {
return System.getProperty("user.name"); //$NON-NLS-1$
}
}
}