package org.marketcetera.photon.internal.strategy.ui; import java.io.InputStream; import java.util.regex.Pattern; import org.eclipse.core.databinding.validation.IValidator; import org.eclipse.core.databinding.validation.ValidationStatus; import org.eclipse.core.runtime.IStatus; import org.eclipse.jface.viewers.ISelection; import org.marketcetera.photon.internal.strategy.StrategyTemplate; import org.marketcetera.util.misc.ClassVersion; import org.rubypeople.rdt.core.util.Util; /* $License$ */ /** * Wizard to create a new Ruby strategy script from a template. * * @author <a href="mailto:will@marketcetera.com">Will Horn</a> * @version $Id: NewRubyStrategyWizard.java 16154 2012-07-14 16:34:05Z colin $ * @since 1.0.0 */ @ClassVersion("$Id: NewRubyStrategyWizard.java 16154 2012-07-14 16:34:05Z colin $") public final class NewRubyStrategyWizard extends AbstractNewStrategyWizard { private static final IValidator sClassNameValidator = new IValidator() { /** * From <a href= * "http://web.njit.edu/all_topics/Prog_Lang_Docs/html/ruby/yacc.html" * >http * ://web.njit.edu/all_topics/Prog_Lang_Docs/html/ruby/yacc.html</a>. */ private final Pattern CLASS_NAME_PATTERN = Pattern .compile("^[a-zA-Z_][a-zA-Z0-9_]*"); //$NON-NLS-1$ @Override public IStatus validate(Object value) { final String string = (String) value; if (!CLASS_NAME_PATTERN.matcher(string).matches()) { return ValidationStatus .error(Messages.NEW_RUBY_STRATEGY_WIZARD_INVALID_CLASS_NAME .getText()); } return ValidationStatus.ok(); } }; private static final String SCRIPT_EXTENSION = ".rb"; //$NON-NLS-1$ private static final String RUBY_STRATEGY_TEMPLATE = "RubyStrategyTemplate.txt"; //$NON-NLS-1$ @Override protected NewStrategyWizardPage createPage(ISelection selection) { return new NewStrategyWizardPage(selection, Messages.NEW_RUBY_STRATEGY_WIZARD__TITLE.getText(), sClassNameValidator); } @Override protected String getScriptName(String typeName) { return Util.camelCaseToUnderscores(typeName) + SCRIPT_EXTENSION; } @Override protected InputStream openContentStream(String className) { return StrategyTemplate.createNewScript(RUBY_STRATEGY_TEMPLATE, className); } }