carbidecpp22devenv/plugins/org.eclipse.gmf.templates.legacy_1.0.0.v20090614-0839/codegen.templates/xpt/editor/Editor.xpt
changeset 422 033392511bf7
equal deleted inserted replaced
421:631a44165bcf 422:033392511bf7
       
     1 /*
       
     2  * Copyright (c) 2006,2007 Borland Software Corporation
       
     3  * 
       
     4  * All rights reserved. This program and the accompanying materials
       
     5  * are made available under the terms of the Eclipse Public License v1.0
       
     6  * which accompanies this distribution, and is available at
       
     7  * http://www.eclipse.org/legal/epl-v10.html
       
     8  *
       
     9  * Contributors:
       
    10  *    Alexander Shatalin (Borland) - initial API and implementation
       
    11  */
       
    12 
       
    13 «IMPORT "http://www.eclipse.org/gmf/2008/GenModel"»
       
    14 «IMPORT "http://www.eclipse.org/emf/2002/Ecore"»
       
    15 «EXTENSION xpt::editor::Utils»
       
    16 
       
    17 «DEFINE Editor FOR gmfgen::GenEditorView-»
       
    18 	«EXPAND xpt::Common::copyright FOR editorGen-»
       
    19 package «packageName»;
       
    20 
       
    21 	«EXPAND xpt::Common::generatedClassComment»
       
    22 public class «className»  extends org.eclipse.gmf.runtime.diagram.ui.resources.editor.parts.DiagramDocumentEditor«EXPAND implementsList FOR getEditorImplementsList(this)» {
       
    23 
       
    24 	«EXPAND attributes-»
       
    25 	
       
    26 	«EXPAND constructor-»
       
    27 	
       
    28 	«EXPAND getContextID-»
       
    29 	«EXPAND createPaletteRoot FOR editorGen.diagram.palette-»
       
    30 	
       
    31 	«EXPAND getPreferencesHint-»
       
    32 	
       
    33 	«EXPAND getContributorId-»
       
    34 	«EXPAND getAdapter-»
       
    35 	
       
    36 	«EXPAND getDocumentProvider-»
       
    37 	
       
    38 	«EXPAND getEditingDomain-»
       
    39 	
       
    40 	«EXPAND setDocumentProvider-»
       
    41 	«IF isIDEMode(this)-»
       
    42 	
       
    43 		«EXPAND gotoMarker-»
       
    44 		
       
    45 		«EXPAND isSaveAsAllowed-»
       
    46 		
       
    47 		«EXPAND doSaveAs-»
       
    48 		
       
    49 		«EXPAND performSaveAs-»
       
    50 		
       
    51 		«EXPAND getShowInContext-»
       
    52 		«EXPAND getNavigatorSelection FOR editorGen.navigator-»
       
    53 	«ENDIF-»
       
    54 
       
    55 	«EXPAND configureGraphicalViewer-»
       
    56 
       
    57 	«IF editorGen.diagram.generateCreateShortcutAction()-»
       
    58 	
       
    59 		«EXPAND initializeGraphicalViewer-»
       
    60 		
       
    61 		«EXPAND DropTargetListener-»
       
    62 	«ENDIF-»
       
    63 
       
    64 	«EXPAND additions-»
       
    65 }
       
    66 «ENDDEFINE»
       
    67 
       
    68 «DEFINE attributes FOR gmfgen::GenEditorView-»
       
    69 	«EXPAND xpt::Common::generatedMemberComment»
       
    70 public static final String ID = "«iD»"; «EXPAND xpt::Common::nonNLS»
       
    71 	
       
    72 	«EXPAND xpt::Common::generatedMemberComment»
       
    73 public static final String CONTEXT_ID = "«contextID»"; «EXPAND xpt::Common::nonNLS»
       
    74 «ENDDEFINE»
       
    75 
       
    76 «DEFINE constructor FOR gmfgen::GenEditorView-»
       
    77 	«EXPAND xpt::Common::generatedMemberComment»
       
    78 public «className»() {
       
    79 	super(«null != editorGen.diagram.palette && editorGen.diagram.palette.flyout»);
       
    80 }
       
    81 «ENDDEFINE»
       
    82 
       
    83 «DEFINE getContextID FOR gmfgen::GenEditorView-»
       
    84 	«EXPAND xpt::Common::generatedMemberComment»
       
    85 protected String getContextID() {
       
    86 	return CONTEXT_ID;
       
    87 }
       
    88 «ENDDEFINE»
       
    89 
       
    90 «DEFINE createPaletteRoot FOR gmfgen::Palette-»
       
    91 
       
    92 	«EXPAND xpt::Common::generatedMemberComment»
       
    93 protected org.eclipse.gef.palette.PaletteRoot createPaletteRoot(org.eclipse.gef.palette.PaletteRoot existingPaletteRoot) {
       
    94 	org.eclipse.gef.palette.PaletteRoot root = super.createPaletteRoot(existingPaletteRoot);
       
    95 	new «getFactoryQualifiedClassName()»().fillPalette(root);
       
    96 	return root;
       
    97 }
       
    98 «ENDDEFINE»
       
    99 
       
   100 «DEFINE getPreferencesHint FOR gmfgen::GenEditorView-»
       
   101 	«EXPAND xpt::Common::generatedMemberComment»
       
   102 protected org.eclipse.gmf.runtime.diagram.core.preferences.PreferencesHint getPreferencesHint() {
       
   103 «REM» 
       
   104 	XXX seems better we use preference store directly (in configureGraphicalViewer) instead all these indirect ids 
       
   105 «ENDREM»«-»
       
   106 	return «editorGen.plugin.getActivatorQualifiedClassName()».DIAGRAM_PREFERENCES_HINT;
       
   107 }
       
   108 «ENDDEFINE»
       
   109 
       
   110 «DEFINE getContributorId FOR gmfgen::GenEditorView-»
       
   111 	«EXPAND xpt::Common::generatedMemberComment»
       
   112 public String getContributorId() {
       
   113 	return «editorGen.plugin.getActivatorQualifiedClassName()».ID;
       
   114 }
       
   115 «ENDDEFINE»
       
   116 
       
   117 «DEFINE getAdapter FOR gmfgen::GenEditorView-»
       
   118 	«IF !hasPropertySheet(this) || hasNavigator(this)-»
       
   119 	
       
   120 	«EXPAND xpt::Common::generatedMemberComment»
       
   121 public Object getAdapter(Class type) {
       
   122 	«IF !hasPropertySheet(this)-»
       
   123 	if (type == org.eclipse.ui.views.properties.IPropertySheetPage.class) {
       
   124 		return null;
       
   125 	}
       
   126 	«ENDIF-»
       
   127 	«IF hasNavigator(this)-»
       
   128 	if (type == org.eclipse.ui.part.IShowInTargetList.class) {
       
   129 		return new org.eclipse.ui.part.IShowInTargetList() {
       
   130 			public String[] getShowInTargetIds() {
       
   131 				return new String[] { org.eclipse.ui.navigator.resources.ProjectExplorer.VIEW_ID };
       
   132 			}
       
   133 		};
       
   134 	}
       
   135 	«ENDIF-»
       
   136 	return super.getAdapter(type);
       
   137 }
       
   138 	«ENDIF-»
       
   139 «ENDDEFINE»
       
   140 
       
   141 «DEFINE getDocumentProvider FOR gmfgen::GenEditorView-»
       
   142 	«EXPAND xpt::Common::generatedMemberComment»
       
   143 protected org.eclipse.gmf.runtime.diagram.ui.resources.editor.document.IDocumentProvider getDocumentProvider(org.eclipse.ui.IEditorInput input) {
       
   144 	if («EXPAND checkEditorInput») {
       
   145 		return «editorGen.plugin.getActivatorQualifiedClassName()».getInstance().getDocumentProvider();
       
   146 	}
       
   147 	return super.getDocumentProvider(input);
       
   148 }
       
   149 «ENDDEFINE»
       
   150 
       
   151 «DEFINE getEditingDomain FOR gmfgen::GenEditorView-»
       
   152 	«EXPAND xpt::Common::generatedMemberComment»
       
   153 public org.eclipse.emf.transaction.TransactionalEditingDomain getEditingDomain() {
       
   154 	org.eclipse.gmf.runtime.diagram.ui.resources.editor.document.IDocument document = getEditorInput() != null ? getDocumentProvider().getDocument(getEditorInput()) : null;
       
   155 	if (document instanceof org.eclipse.gmf.runtime.diagram.ui.resources.editor.document.IDiagramDocument) {
       
   156 		return ((org.eclipse.gmf.runtime.diagram.ui.resources.editor.document.IDiagramDocument) document).getEditingDomain();
       
   157 	}
       
   158 	return super.getEditingDomain();
       
   159 }
       
   160 «ENDDEFINE»
       
   161 
       
   162 «DEFINE setDocumentProvider FOR gmfgen::GenEditorView-»
       
   163 	«EXPAND xpt::Common::generatedMemberComment»
       
   164 protected void setDocumentProvider(org.eclipse.ui.IEditorInput input) {
       
   165 	if («EXPAND checkEditorInput») {
       
   166 		setDocumentProvider(«editorGen.plugin.getActivatorQualifiedClassName()».getInstance().getDocumentProvider());
       
   167 	} else {
       
   168 		super.setDocumentProvider(input);
       
   169 	}
       
   170 }
       
   171 «ENDDEFINE»
       
   172 
       
   173 «DEFINE checkEditorInput FOR gmfgen::GenEditorView»«IF isIDEMode(this)»input instanceof org.eclipse.ui.IFileEditorInput || «ENDIF»input instanceof org.eclipse.emf.common.ui.URIEditorInput«ENDDEFINE»
       
   174 
       
   175 «DEFINE gotoMarker FOR gmfgen::GenEditorView-»
       
   176 	«EXPAND xpt::Common::generatedMemberComment»
       
   177 public void gotoMarker(org.eclipse.core.resources.IMarker marker) {
       
   178 	org.eclipse.gmf.runtime.common.ui.services.marker.MarkerNavigationService.getInstance().gotoMarker(this, marker);
       
   179 }
       
   180 «ENDDEFINE»
       
   181 
       
   182 «DEFINE isSaveAsAllowed FOR gmfgen::GenEditorView-»
       
   183 	«EXPAND xpt::Common::generatedMemberComment»
       
   184 public boolean isSaveAsAllowed() {
       
   185 	return true;
       
   186 }
       
   187 «ENDDEFINE»
       
   188 
       
   189 «DEFINE doSaveAs FOR gmfgen::GenEditorView-»
       
   190 	«EXPAND xpt::Common::generatedMemberComment»
       
   191 public void doSaveAs() {
       
   192 	performSaveAs(new org.eclipse.core.runtime.NullProgressMonitor());
       
   193 }
       
   194 «ENDDEFINE»
       
   195 
       
   196 «DEFINE performSaveAs FOR gmfgen::GenEditorView-»
       
   197 	«EXPAND xpt::Common::generatedMemberComment»
       
   198 protected void performSaveAs(org.eclipse.core.runtime.IProgressMonitor progressMonitor) {
       
   199 	org.eclipse.swt.widgets.Shell shell = getSite().getShell();
       
   200 	org.eclipse.ui.IEditorInput input = getEditorInput();
       
   201 	org.eclipse.ui.dialogs.SaveAsDialog dialog = new org.eclipse.ui.dialogs.SaveAsDialog(shell);
       
   202 	org.eclipse.core.resources.IFile original = input instanceof org.eclipse.ui.IFileEditorInput ? ((org.eclipse.ui.IFileEditorInput) input).getFile() : null;
       
   203 	if (original != null) {
       
   204 		dialog.setOriginalFile(original);
       
   205 	}
       
   206 	dialog.create();
       
   207 	org.eclipse.gmf.runtime.diagram.ui.resources.editor.document.IDocumentProvider provider = getDocumentProvider();
       
   208 	if (provider == null) {
       
   209 		// editor has been programmatically closed while the dialog was open
       
   210 		return;
       
   211 	}
       
   212 	if (provider.isDeleted(input) && original != null) {
       
   213 		String message = org.eclipse.osgi.util.NLS.bind(«EXPAND xpt::Externalizer::accessorCall(i18nKeyForSavingDeletedFile(this)) FOR editorGen», original.getName());
       
   214 		dialog.setErrorMessage(null);
       
   215 		dialog.setMessage(message, org.eclipse.jface.dialogs.IMessageProvider.WARNING);
       
   216 	}
       
   217 	if (dialog.open() == org.eclipse.jface.window.Window.CANCEL) {
       
   218 		if (progressMonitor != null) {
       
   219 			progressMonitor.setCanceled(true);
       
   220 		}
       
   221 		return;
       
   222 	}
       
   223 	org.eclipse.core.runtime.IPath filePath = dialog.getResult();
       
   224 	if (filePath == null) {
       
   225 		if (progressMonitor != null) {
       
   226 			progressMonitor.setCanceled(true);
       
   227 		}
       
   228 		return;
       
   229 	}
       
   230 	org.eclipse.core.resources.IWorkspaceRoot workspaceRoot = org.eclipse.core.resources.ResourcesPlugin.getWorkspace().getRoot();
       
   231 	org.eclipse.core.resources.IFile file = workspaceRoot.getFile(filePath);
       
   232 	final org.eclipse.ui.IEditorInput newInput = new org.eclipse.ui.part.FileEditorInput(file);
       
   233 	// Check if the editor is already open
       
   234 	org.eclipse.ui.IEditorMatchingStrategy matchingStrategy = getEditorDescriptor().getEditorMatchingStrategy();
       
   235 	org.eclipse.ui.IEditorReference[] editorRefs = org.eclipse.ui.PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getEditorReferences();
       
   236 	for (int i = 0; i < editorRefs.length; i++) {
       
   237 		if (matchingStrategy.matches(editorRefs[i], newInput)) {
       
   238 			org.eclipse.jface.dialogs.MessageDialog.openWarning(shell, «EXPAND xpt::Externalizer::accessorCall(titleKey(i18nKeyForSaveAsProblems(this))) FOR editorGen», «EXPAND xpt::Externalizer::accessorCall(messageKey(i18nKeyForSaveAsProblems(this))) FOR editorGen»);
       
   239 			return;
       
   240 		}
       
   241 	}
       
   242 	boolean success = false;
       
   243 	try {
       
   244 		provider.aboutToChange(newInput);
       
   245 		getDocumentProvider(newInput).saveDocument(progressMonitor, newInput, getDocumentProvider().getDocument(getEditorInput()), true);
       
   246 		success = true;
       
   247 	} catch (org.eclipse.core.runtime.CoreException x) {
       
   248 		org.eclipse.core.runtime.IStatus status = x.getStatus();
       
   249 		if (status == null || status.getSeverity() != org.eclipse.core.runtime.IStatus.CANCEL) {
       
   250 			org.eclipse.jface.dialogs.ErrorDialog.openError(shell, «EXPAND xpt::Externalizer::accessorCall(titleKey(i18nKeyForSaveProblems(this))) FOR editorGen», «EXPAND xpt::Externalizer::accessorCall(messageKey(i18nKeyForSaveProblems(this))) FOR editorGen», x.getStatus());
       
   251 		}
       
   252 	} finally {
       
   253 		provider.changed(newInput);
       
   254 		if (success) {
       
   255 			setInput(newInput);
       
   256 		}
       
   257 	}
       
   258 	if (progressMonitor != null) {
       
   259 		progressMonitor.setCanceled(!success);
       
   260 	}
       
   261 }
       
   262 «ENDDEFINE»
       
   263 
       
   264 «DEFINE getShowInContext FOR gmfgen::GenEditorView-»
       
   265 	«EXPAND xpt::Common::generatedMemberComment»
       
   266 public org.eclipse.ui.part.ShowInContext getShowInContext() {
       
   267 	return new org.eclipse.ui.part.ShowInContext(getEditorInput(), «IF hasNavigator(this)»getNavigatorSelection()«ELSE»getGraphicalViewer().getSelection()«ENDIF»);
       
   268 }
       
   269 «ENDDEFINE»
       
   270 
       
   271 «DEFINE getNavigatorSelection FOR gmfgen::GenNavigator-»
       
   272 	
       
   273 	«EXPAND xpt::Common::generatedMemberComment»
       
   274 private org.eclipse.jface.viewers.ISelection getNavigatorSelection() {
       
   275 	org.eclipse.gmf.runtime.diagram.ui.resources.editor.document.IDiagramDocument document = getDiagramDocument();
       
   276 	«EXPAND xpt::navigator::NavigatorLinkHelper::findSelectionBody-»
       
   277 }
       
   278 «ENDDEFINE»
       
   279 
       
   280 «DEFINE configureGraphicalViewer FOR gmfgen::GenEditorView-»
       
   281 	«EXPAND xpt::Common::generatedMemberComment»
       
   282 	protected void configureGraphicalViewer() {
       
   283 		super.configureGraphicalViewer();
       
   284 		«EXPAND xpt::editor::DiagramEditorContextMenuProvider::qualifiedClassName FOR editorGen.diagram» provider =
       
   285 				new «EXPAND xpt::editor::DiagramEditorContextMenuProvider::qualifiedClassName FOR editorGen.diagram»(this, getDiagramGraphicalViewer());
       
   286 		getDiagramGraphicalViewer().setContextMenu(provider);
       
   287 		getSite().registerContextMenu(org.eclipse.gmf.runtime.diagram.ui.actions.ActionIds.DIAGRAM_EDITOR_CONTEXT_MENU, provider, getDiagramGraphicalViewer());
       
   288 	}
       
   289 «ENDDEFINE»
       
   290 
       
   291 «DEFINE initializeGraphicalViewer FOR gmfgen::GenEditorView-»
       
   292 	«EXPAND xpt::Common::generatedMemberComment»
       
   293 protected void initializeGraphicalViewer() {
       
   294 	super.initializeGraphicalViewer();
       
   295 	«EXPAND addDropTargetListener("org.eclipse.jface.util.LocalSelectionTransfer.getTransfer()")-»
       
   296 	«EXPAND addDropTargetListener("org.eclipse.emf.edit.ui.dnd.LocalTransfer.getInstance()")-»
       
   297 }
       
   298 «ENDDEFINE»
       
   299 
       
   300 «DEFINE addDropTargetListener(String transferAccessor) FOR gmfgen::GenEditorView-»
       
   301 getDiagramGraphicalViewer().addDropTargetListener(new DropTargetListener(getDiagramGraphicalViewer(), «transferAccessor») {
       
   302 
       
   303 	protected Object getJavaObject(org.eclipse.swt.dnd.TransferData data) {
       
   304 		return «transferAccessor».nativeToJava(data);
       
   305 	}
       
   306 
       
   307 });
       
   308 «ENDDEFINE»
       
   309 
       
   310 «DEFINE DropTargetListener FOR gmfgen::GenEditorView-»
       
   311 	«EXPAND xpt::Common::generatedClassComment»
       
   312 private abstract class DropTargetListener extends org.eclipse.gmf.runtime.diagram.ui.parts.DiagramDropTargetListener {
       
   313 
       
   314 	«EXPAND DTL_constructor-»
       
   315 
       
   316 	«EXPAND DTL_getObjectsBeingDropped-»
       
   317 
       
   318 	«EXPAND DTL_getJavaObject-»
       
   319 
       
   320 	«EXPAND DTL_additions-»
       
   321 }
       
   322 «ENDDEFINE»
       
   323 
       
   324 
       
   325 «DEFINE DTL_constructor FOR gmfgen::GenEditorView-»
       
   326 	«EXPAND xpt::Common::generatedMemberComment»
       
   327 public DropTargetListener(org.eclipse.gef.EditPartViewer viewer, org.eclipse.swt.dnd.Transfer xfer) {
       
   328 	super(viewer, xfer);
       
   329 }
       
   330 «ENDDEFINE»
       
   331 
       
   332 «DEFINE DTL_getObjectsBeingDropped FOR gmfgen::GenEditorView-»
       
   333 	«EXPAND xpt::Common::generatedMemberComment»
       
   334 protected java.util.List getObjectsBeingDropped() {
       
   335 	org.eclipse.swt.dnd.TransferData data = getCurrentEvent().currentDataType;
       
   336 	java.util.Collection uris = new java.util.HashSet();
       
   337 
       
   338 	Object transferedObject = getJavaObject(data);
       
   339 	if (transferedObject instanceof org.eclipse.jface.viewers.IStructuredSelection) {
       
   340 		org.eclipse.jface.viewers.IStructuredSelection selection = (org.eclipse.jface.viewers.IStructuredSelection) transferedObject;
       
   341 		for (java.util.Iterator it = selection.iterator(); it.hasNext();) {
       
   342 			Object nextSelectedObject = it.next();
       
   343 «REM»
       
   344 	TODO: move NavigatorItem to some place available in runtime and remove 
       
   345 	"genEditor.getEditorGen().getNavigator() != null" test
       
   346 «ENDREM»«-»
       
   347 			«IF hasNavigator(this)»if (nextSelectedObject instanceof «editorGen.navigator.getNavigatorItemQualifiedClassName()») {
       
   348 				org.eclipse.gmf.runtime.notation.View view = ((«editorGen.navigator.getNavigatorItemQualifiedClassName()») nextSelectedObject).getView();
       
   349 				nextSelectedObject = view.getElement();
       
   350 			} else «ENDIF»if (nextSelectedObject instanceof org.eclipse.core.runtime.IAdaptable) {
       
   351 				org.eclipse.core.runtime.IAdaptable adaptable = (org.eclipse.core.runtime.IAdaptable) nextSelectedObject;
       
   352 				nextSelectedObject = adaptable.getAdapter(org.eclipse.emf.ecore.EObject.class);
       
   353 			}
       
   354 
       
   355 			if (nextSelectedObject instanceof org.eclipse.emf.ecore.EObject) {
       
   356 				org.eclipse.emf.ecore.EObject modelElement = (org.eclipse.emf.ecore.EObject) nextSelectedObject;
       
   357 				org.eclipse.emf.ecore.resource.Resource modelElementResource = modelElement.eResource();
       
   358 				uris.add(modelElementResource.getURI().appendFragment(modelElementResource.getURIFragment(modelElement)));	
       
   359 			}
       
   360 		}
       
   361 	}
       
   362 
       
   363 	java.util.List result = new java.util.ArrayList();
       
   364 	for (java.util.Iterator it = uris.iterator(); it.hasNext();) {
       
   365 		org.eclipse.emf.common.util.URI nextURI = (org.eclipse.emf.common.util.URI) it.next();
       
   366 		org.eclipse.emf.ecore.EObject modelObject = getEditingDomain().getResourceSet().getEObject(nextURI, true);
       
   367 		result.add(modelObject);
       
   368 	}
       
   369 	return result;
       
   370 }
       
   371 «ENDDEFINE»
       
   372 
       
   373 «DEFINE DTL_getJavaObject FOR gmfgen::GenEditorView-»
       
   374 	«EXPAND xpt::Common::generatedMemberComment»
       
   375 protected abstract Object getJavaObject(org.eclipse.swt.dnd.TransferData data);
       
   376 «ENDDEFINE»
       
   377 
       
   378 «DEFINE implementsList FOR List[String]-»
       
   379 «IF !isEmpty()» implements «EXPAND implementsListEntry FOREACH this SEPARATOR ", "»«ENDIF-»
       
   380 «ENDDEFINE»
       
   381 
       
   382 «DEFINE implementsListEntry FOR String»«this»«ENDDEFINE»
       
   383 
       
   384 «DEFINE DTL_additions FOR gmfgen::GenEditorView-»
       
   385 «ENDDEFINE»
       
   386 
       
   387 «DEFINE additions FOR gmfgen::GenEditorView-»
       
   388 «ENDDEFINE»
       
   389 
       
   390 «DEFINE i18nValues FOR gmfgen::GenEditorView-»
       
   391 «EXPAND xpt::Externalizer::messageEntry(i18nKeyForSavingDeletedFile(this), "The original file \"{0}\" has been deleted.")-»
       
   392 «EXPAND xpt::Externalizer::messageEntry(titleKey(i18nKeyForSaveAsProblems(this)), "Problem During Save As...")-»
       
   393 «EXPAND xpt::Externalizer::messageEntry(messageKey(i18nKeyForSaveAsProblems(this)), "Save could not be completed. Target file is already open in another editor.")-»
       
   394 «EXPAND xpt::Externalizer::messageEntry(titleKey(i18nKeyForSaveProblems(this)), "Save Problems")-»
       
   395 «EXPAND xpt::Externalizer::messageEntry(messageKey(i18nKeyForSaveProblems(this)), "Could not save file.")-»
       
   396 «ENDDEFINE»
       
   397 
       
   398 «DEFINE i18nAccessors FOR gmfgen::GenEditorView-»
       
   399 	«EXPAND xpt::Externalizer::accessorField(i18nKeyForSavingDeletedFile(this))-»
       
   400 	«EXPAND xpt::Externalizer::accessorField(titleKey(i18nKeyForSaveAsProblems(this)))-»
       
   401 	«EXPAND xpt::Externalizer::accessorField(messageKey(i18nKeyForSaveAsProblems(this)))-»
       
   402 	«EXPAND xpt::Externalizer::accessorField(titleKey(i18nKeyForSaveProblems(this)))-»
       
   403 	«EXPAND xpt::Externalizer::accessorField(messageKey(i18nKeyForSaveProblems(this)))-»
       
   404 «ENDDEFINE»