blob: f63b0b1f7ef9c2d22357d6ed24ad0aa656a27cb2 [file] [log] [blame]
/*
* Copyright (c) 2007, 2009 Borland Software Corporation
*
* 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:
* Dmitry Stadnik (Borland) - initial implementation
* Artem Tikhomirov (Borland) - [235113] alternative parser access
* [244419] custom parsers
* initial API
*/
«IMPORT 'http://www.eclipse.org/gmf/2009/GenModel'»
«EXTENSION impl::parsers::i18n»
«DEFINE Main FOR gmfgen::PredefinedParser»
«EXPAND xpt::Common::copyright FOR holder.editorGen
package «holder.implPackageName»;
«EXPAND xpt::Common::generatedClassComment»
public class «className» extends «EXPAND impl::parsers::AbstractParser::qualifiedClassName FOR holder» {
«EXPAND fields»
«EXPAND cons»
«EXPAND aux_methods»
«EXPAND parser_getEditStringMethod»
«EXPAND parser_isValidEditStringMethod»
«EXPAND parser_getParseCommandMethod»
«EXPAND parser_getPrintStringMethod»
«EXPAND parser_isAffectingEventMethod»
«EXPAND parser_getCompletionProcessorMethod»
«EXPAND additions»
}
«ENDDEFINE»
«DEFINE additions FOR gmfgen::PredefinedParser»«ENDDEFINE»
«DEFINE fields FOR gmfgen::PredefinedParser
«IF viewMethod = gmfgen::LabelTextAccessMethod::MESSAGE_FORMAT or viewMethod = gmfgen::LabelTextAccessMethod::PRINTF
«EXPAND xpt::Common::generatedMemberComment»
private String defaultPattern;
«EXPAND xpt::Common::generatedMemberComment»
private String defaultEditablePattern;
«ENDIF
«IF viewMethod = gmfgen::LabelTextAccessMethod::MESSAGE_FORMAT»
«EXPAND xpt::Common::generatedMemberComment»
private java.text.MessageFormat viewProcessor;
«EXPAND xpt::Common::generatedMemberComment»
private java.text.MessageFormat editorProcessor;
«ENDIF
«IF editMethod = gmfgen::LabelTextAccessMethod::MESSAGE_FORMAT»
«EXPAND xpt::Common::generatedMemberComment»
private java.text.MessageFormat editProcessor;
«ENDIF
«ENDDEFINE»
«DEFINE cons FOR gmfgen::PredefinedParser
«EXPAND xpt::Common::generatedMemberComment»
public «className»(org.eclipse.emf.ecore.EAttribute[] features) {
super(features);
«IF viewMethod = gmfgen::LabelTextAccessMethod::NATIVE or editMethod = gmfgen::LabelTextAccessMethod::NATIVE
if (features.length != 1) {
throw new IllegalArgumentException(java.util.Arrays.toString(features));
}
«ENDIF
}
«EXPAND xpt::Common::generatedMemberComment»
public «className»(org.eclipse.emf.ecore.EAttribute[] features, org.eclipse.emf.ecore.EAttribute[] editableFeatures) {
super(features, editableFeatures);
«IF viewMethod = gmfgen::LabelTextAccessMethod::NATIVE or editMethod = gmfgen::LabelTextAccessMethod::NATIVE
if (features.length != 1) {
throw new IllegalArgumentException(java.util.Arrays.toString(features));
}
if (editableFeatures.length != 1) {
throw new IllegalArgumentException(java.util.Arrays.toString(editableFeatures));
}
«ENDIF
}
«ENDDEFINE»
«DEFINE aux_methods FOR gmfgen::PredefinedParser
«IF viewMethod = gmfgen::LabelTextAccessMethod::MESSAGE_FORMAT
«EXPAND xpt::Common::generatedMemberComment»
protected String getDefaultPattern() {
if (defaultPattern == null) {
StringBuffer sb = new StringBuffer();
for (int i = 0; i < features.length; i++) {
if (i > 0) {
sb.append(' ');
}
sb.append('{');
sb.append(i);
sb.append('}');
}
defaultPattern = sb.toString();
}
return defaultPattern;
}
«EXPAND xpt::Common::generatedMemberComment»
public void setViewPattern(String viewPattern) {
super.setViewPattern(viewPattern);
viewProcessor = null;
}
«EXPAND xpt::Common::generatedMemberComment»
public void setEditorPattern(String editorPattern) {
super.setEditorPattern(editorPattern);
editorProcessor = null;
}
«EXPAND xpt::Common::generatedMemberComment»
protected java.text.MessageFormat getViewProcessor() {
if (viewProcessor == null) {
viewProcessor = new java.text.MessageFormat(getViewPattern() == null ? getDefaultPattern() : getViewPattern());
}
return viewProcessor;
}
«EXPAND xpt::Common::generatedMemberComment»
protected java.text.MessageFormat getEditorProcessor() {
if (editorProcessor == null) {
editorProcessor = new java.text.MessageFormat(getEditorPattern() == null ? getDefaultEditablePattern() : getEditorPattern());
}
return editorProcessor;
}
«ELSEIF viewMethod = gmfgen::LabelTextAccessMethod::PRINTF
«EXPAND xpt::Common::generatedMemberComment»
protected String getDefaultPattern() {
if (defaultPattern == null) {
StringBuffer sb = new StringBuffer();
for (int i = 0; i < features.length; i++) {
if (i > 0) {
sb.append(' ');
}
sb.append('%');
sb.append(i + 1);
sb.append('$');
sb.append('s');
}
defaultPattern = sb.toString();
}
return defaultPattern;
}
«ENDIF
«IF viewMethod = gmfgen::LabelTextAccessMethod::MESSAGE_FORMAT or editMethod = gmfgen::LabelTextAccessMethod::MESSAGE_FORMAT
«EXPAND xpt::Common::generatedMemberComment»
protected String getDefaultEditablePattern() {
if (defaultEditablePattern == null) {
StringBuffer sb = new StringBuffer();
for (int i = 0; i < editableFeatures.length; i++) {
if (i > 0) {
sb.append(' ');
}
sb.append('{');
sb.append(i);
sb.append('}');
}
defaultEditablePattern = sb.toString();
}
return defaultEditablePattern;
}
«ENDIF
«IF viewMethod = gmfgen::LabelTextAccessMethod::PRINTF or editMethod = gmfgen::LabelTextAccessMethod::PRINTF
«EXPAND xpt::Common::generatedMemberComment»
protected String getDefaultEditablePattern() {
if (defaultEditablePattern == null) {
StringBuffer sb = new StringBuffer();
for (int i = 0; i < editableFeatures.length; i++) {
if (i > 0) {
sb.append(' ');
}
sb.append('%');
sb.append(i + 1);
sb.append('$');
sb.append('s');
}
defaultEditablePattern = sb.toString();
}
return defaultEditablePattern;
}
«ENDIF
«IF editMethod = gmfgen::LabelTextAccessMethod::MESSAGE_FORMAT
«EXPAND xpt::Common::generatedMemberComment»
public void setEditPattern(String editPattern) {
super.setEditPattern(editPattern);
editProcessor = null;
}
«EXPAND xpt::Common::generatedMemberComment»
protected java.text.MessageFormat getEditProcessor() {
if (editProcessor == null) {
editProcessor = new java.text.MessageFormat(getEditPattern() == null ? getDefaultEditablePattern() : getEditPattern());
}
return editProcessor;
}
«ELSEIF editMethod = gmfgen::LabelTextAccessMethod::REGEXP
«EXPAND xpt::Common::generatedMemberComment»
public String getEditPattern() {
String pattern = super.getEditPattern();
return pattern != null ? pattern : " "EXPAND xpt::Common::nonNLS»
}
«ENDIF
«ENDDEFINE»
«DEFINE parser_getEditStringMethod FOR gmfgen::PredefinedParser
«EXPAND xpt::Common::generatedMemberComment»
public String getEditString(org.eclipse.core.runtime.IAdaptable adapter, int flags) {
«IF viewMethod = gmfgen::LabelTextAccessMethod::MESSAGE_FORMAT
org.eclipse.emf.ecore.EObject element = (org.eclipse.emf.ecore.EObject) adapter.getAdapter(org.eclipse.emf.ecore.EObject.class);
return getEditorProcessor().format(getEditableValues(element), new StringBuffer(), new java.text.FieldPosition(0)).toString();
«ELSEIF viewMethod = gmfgen::LabelTextAccessMethod::PRINTF
org.eclipse.emf.ecore.EObject element = (org.eclipse.emf.ecore.EObject) adapter.getAdapter(org.eclipse.emf.ecore.EObject.class);
String pattern = getEditorPattern() == null ? getDefaultEditablePattern() : getEditorPattern();
return String.format(pattern, getEditableValues(element));
«ELSEIF viewMethod = gmfgen::LabelTextAccessMethod::REGEXP
return ""EXPAND xpt::Common::nonNLS»
«ELSEIF viewMethod = gmfgen::LabelTextAccessMethod::NATIVE
org.eclipse.emf.ecore.EObject element = (org.eclipse.emf.ecore.EObject) adapter.getAdapter(org.eclipse.emf.ecore.EObject.class);
String s = org.eclipse.emf.ecore.util.EcoreUtil.convertToString(editableFeatures[0].getEAttributeType(), element.eGet(editableFeatures[0]));
return s != null ? s : ""EXPAND xpt::Common::nonNLS»
«ENDIF
}
«ENDDEFINE»
«DEFINE parser_isValidEditStringMethod FOR gmfgen::PredefinedParser
«EXPAND xpt::Common::generatedMemberComment»
public org.eclipse.gmf.runtime.common.ui.services.parser.IParserEditStatus isValidEditString(org.eclipse.core.runtime.IAdaptable adapter, String editString) {
«IF editMethod = gmfgen::LabelTextAccessMethod::MESSAGE_FORMAT
java.text.ParsePosition pos = new java.text.ParsePosition(0);
Object[] values = getEditProcessor().parse(editString, pos);
if (values == null) {
return new org.eclipse.gmf.runtime.common.ui.services.parser.ParserEditStatus(
«holder.editorGen.plugin.getActivatorQualifiedClassName()».ID,
org.eclipse.gmf.runtime.common.ui.services.parser.IParserEditStatus.UNEDITABLE,
org.eclipse.osgi.util.NLS.bind(
«EXPAND xpt::Externalizer::accessorCall(i18nKeyForMessageFormatParserInvalidInputError()) FOR holder.editorGen»,
new Integer(pos.getErrorIndex())));
}
return validateNewValues(values);
«ELSEIF editMethod = gmfgen::LabelTextAccessMethod::PRINTF
return org.eclipse.gmf.runtime.common.ui.services.parser.ParserEditStatus.UNEDITABLE_STATUS;
«ELSEIF editMethod = gmfgen::LabelTextAccessMethod::REGEXP
if (editString == null) {
return org.eclipse.gmf.runtime.common.ui.services.parser.ParserEditStatus.UNEDITABLE_STATUS;
}
Object[] values = editString.split(getEditPattern());
return validateNewValues(values);
«ELSEIF editMethod = gmfgen::LabelTextAccessMethod::NATIVE
return org.eclipse.gmf.runtime.common.ui.services.parser.ParserEditStatus.EDITABLE_STATUS;
«ENDIF
}
«ENDDEFINE»
«DEFINE parser_getParseCommandMethod FOR gmfgen::PredefinedParser
«EXPAND xpt::Common::generatedMemberComment»
public org.eclipse.gmf.runtime.common.core.command.ICommand getParseCommand(org.eclipse.core.runtime.IAdaptable adapter, String newString, int flags) {
«IF editMethod = gmfgen::LabelTextAccessMethod::MESSAGE_FORMAT
Object[] values = getEditProcessor().parse(newString, new java.text.ParsePosition(0));
return getParseCommand(adapter, values, flags);
«ELSEIF editMethod = gmfgen::LabelTextAccessMethod::PRINTF
return org.eclipse.gmf.runtime.common.core.command.UnexecutableCommand.INSTANCE;
«ELSEIF editMethod = gmfgen::LabelTextAccessMethod::REGEXP
if (newString == null) {
return org.eclipse.gmf.runtime.common.core.command.UnexecutableCommand.INSTANCE;
}
Object[] values = newString.split(getEditPattern());
return super.getParseCommand(adapter, values, flags);
«ELSEIF editMethod = gmfgen::LabelTextAccessMethod::NATIVE
Object value = org.eclipse.emf.ecore.util.EcoreUtil.createFromString(editableFeatures[0].getEAttributeType(), newString);
return getParseCommand(adapter, new Object[] { value }, flags);
«ENDIF
}
«ENDDEFINE»
«DEFINE parser_getPrintStringMethod FOR gmfgen::PredefinedParser
«EXPAND xpt::Common::generatedMemberComment»
public String getPrintString(org.eclipse.core.runtime.IAdaptable adapter, int flags) {
«IF viewMethod = gmfgen::LabelTextAccessMethod::MESSAGE_FORMAT
org.eclipse.emf.ecore.EObject element = (org.eclipse.emf.ecore.EObject) adapter.getAdapter(org.eclipse.emf.ecore.EObject.class);
return getViewProcessor().format(getValues(element), new StringBuffer(), new java.text.FieldPosition(0)).toString();
«ELSEIF viewMethod = gmfgen::LabelTextAccessMethod::PRINTF
org.eclipse.emf.ecore.EObject element = (org.eclipse.emf.ecore.EObject) adapter.getAdapter(org.eclipse.emf.ecore.EObject.class);
return String.format(getViewPattern() == null ? getDefaultPattern() : getViewPattern(), getValues(element));
«ELSEIF viewMethod = gmfgen::LabelTextAccessMethod::REGEXP
return ""EXPAND xpt::Common::nonNLS»
«ELSEIF viewMethod = gmfgen::LabelTextAccessMethod::NATIVE
org.eclipse.emf.ecore.EObject element = (org.eclipse.emf.ecore.EObject) adapter.getAdapter(org.eclipse.emf.ecore.EObject.class);
String s = org.eclipse.emf.ecore.util.EcoreUtil.convertToString(features[0].getEAttributeType(), element.eGet(features[0]));
return s != null ? s : ""EXPAND xpt::Common::nonNLS»
«ENDIF
}
«ENDDEFINE»
«DEFINE parser_isAffectingEventMethod FOR gmfgen::PredefinedParser
«REM»NO-OP, rely on superclass for now«ENDREM
«ENDDEFINE»
«DEFINE parser_getCompletionProcessorMethod FOR gmfgen::PredefinedParser
«REM»NO-OP, rely on superclass for now«ENDREM
«ENDDEFINE»
«DEFINE i18nValues FOR gmfgen::GenParsers
«IF (implementations)[gmfgen::PredefinedParser]->exists(p | p.editMethod = gmfgen::LabelTextAccessMethod::MESSAGE_FORMAT
«EXPAND xpt::Externalizer::messageEntry(i18nKeyForMessageFormatParserInvalidInputError(), 'Invalid input at {0}')-»
«ENDIF
«ENDDEFINE»
«DEFINE i18nAccessors FOR gmfgen::GenParsers
«IF (implementations)[gmfgen::PredefinedParser]->exists(p | p.editMethod = gmfgen::LabelTextAccessMethod::MESSAGE_FORMAT
«EXPAND xpt::Externalizer::accessorField(i18nKeyForMessageFormatParserInvalidInputError())-»
«ENDIF
«ENDDEFINE»