### Eclipse Workspace Patch 1.0 #P org.eclipse.mtj.core Index: src/org/eclipse/mtj/internal/core/text/l10n/L10nLocale.java =================================================================== --- src/org/eclipse/mtj/internal/core/text/l10n/L10nLocale.java (revision 758) +++ src/org/eclipse/mtj/internal/core/text/l10n/L10nLocale.java (working copy) @@ -7,10 +7,13 @@ * http://www.eclipse.org/legal/epl-v10.html * * Contributors: - * Diego Sandin (Motorola) - Initial Version + * Diego Sandin (Motorola) - Initial Version + * David Marques (Motorola) - Implementing validation. */ package org.eclipse.mtj.internal.core.text.l10n; +import java.util.LinkedList; +import java.util.List; import java.util.Locale; import java.util.StringTokenizer; @@ -17,6 +20,8 @@ import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; import org.eclipse.mtj.core.IMTJCoreConstants; +import org.eclipse.mtj.core.internal.MTJCorePlugin; +import org.eclipse.mtj.internal.core.text.IDocumentElementNode; import org.eclipse.osgi.util.NLS; public class L10nLocale extends L10nObject { @@ -138,9 +143,75 @@ setStatus(new Status(IStatus.OK, IMTJCoreConstants.PLUGIN_ID, "Valid Locale")); } + + syncronizeKeyStates(); + } + + /** + * This method synchronizes the state of all entries in the locale. + * + * @param locale target locale. + */ + private void syncronizeKeyStates() { + IDocumentElementNode[] entryNodes = this.getChildNodes(); + List cache = new LinkedList(); + for (IDocumentElementNode entryNode : entryNodes) { + L10nEntry entry = (L10nEntry) entryNode; + if (!cache.contains(entry)) { + List duplicates = this + .findDuplicatedEntries(entry); + if (duplicates.size() > 0) { + for (L10nEntry duplicate : duplicates) { + duplicate.setStatus(new Status(IStatus.ERROR, + MTJCorePlugin.PLUGIN_ID, null)); + cache.add(duplicate); + } + entry.setStatus(new Status(IStatus.ERROR, + MTJCorePlugin.PLUGIN_ID, null)); + } else { + entry.setStatus(new Status(IStatus.OK, + MTJCorePlugin.PLUGIN_ID, null)); + } + } + } + } + + /** + * This method returns a list of all locale entries containing the + * specified key. + * + * @param locale target locale. + * @param key entry key. + * @return duplicated entries. + */ + private List findDuplicatedEntries(L10nLocale locale, + String key) { + List duplicates = new LinkedList(); + IDocumentElementNode nodes[] = locale.getChildNodes(); + for (IDocumentElementNode node : nodes) { + L10nEntry entry = (L10nEntry) node; + if (entry.getKey().toUpperCase().equals(key.toUpperCase())) { + duplicates.add(entry); + } + } + return duplicates; } /** + * This method finds all locale entries duplicated with the specified + * locale. + * + * @param localeEntry target locale. + * @return duplicated entries. + */ + public List findDuplicatedEntries(L10nEntry localeEntry) { + List duplicates = findDuplicatedEntries( + (L10nLocale) localeEntry.getParent(), localeEntry.getKey()); + duplicates.remove(localeEntry); + return duplicates; + } + + /** * Since the compatibility with the LOcalization Data from MTJ version * 0.9.1RC1 was broken, we try to convert the old XML format to the new one */ Index: src/org/eclipse/mtj/internal/core/text/l10n/L10nLocales.java =================================================================== --- src/org/eclipse/mtj/internal/core/text/l10n/L10nLocales.java (revision 758) +++ src/org/eclipse/mtj/internal/core/text/l10n/L10nLocales.java (working copy) @@ -7,10 +7,14 @@ * http://www.eclipse.org/legal/epl-v10.html * * Contributors: - * Diego Sandin (Motorola) - Initial version + * Diego Sandin (Motorola) - Initial version + * David Marques (Motorola) - Implementing validation. */ package org.eclipse.mtj.internal.core.text.l10n; +import org.eclipse.mtj.internal.core.text.IDocumentElementNode; + + /** * @since 0.9.1 */ @@ -129,6 +133,11 @@ */ @Override public void validate() { + IDocumentElementNode[] localeNodes = this.getChildNodes(); + for (IDocumentElementNode localeNode : localeNodes) { + L10nLocale locale = (L10nLocale) localeNode; + locale.validate(); + } } } Index: src/org/eclipse/mtj/internal/core/l10n/L10nBuilder.java =================================================================== --- src/org/eclipse/mtj/internal/core/l10n/L10nBuilder.java (revision 758) +++ src/org/eclipse/mtj/internal/core/l10n/L10nBuilder.java (working copy) @@ -11,7 +11,8 @@ * David Marques (Motorola) - Using L10n Models. * David Marques (Motorola) - Fixing cleaning. * David Marques (Motorola) - Removing all .properties from project - * upon cleaning project. + * upon cleaning project. + * David Marques (Motorola) - Generating keys on upper case. */ package org.eclipse.mtj.internal.core.l10n; @@ -251,7 +252,7 @@ IDocumentElementNode[] nodes = locale.getChildNodes(); for (int i = 0; i < nodes.length; i++) { L10nEntry entry = (L10nEntry) nodes[i]; - buffer.append(entry.getKey()); + buffer.append(entry.getKey().toUpperCase()); buffer.append("="); //$NON-NLS-1$ buffer.append(entry.getValue()); buffer.append("\n"); //$NON-NLS-1$ Index: src/org/eclipse/mtj/internal/core/l10n/L10nApi.java =================================================================== --- src/org/eclipse/mtj/internal/core/l10n/L10nApi.java (revision 758) +++ src/org/eclipse/mtj/internal/core/l10n/L10nApi.java (working copy) @@ -11,6 +11,7 @@ * David Marques (Motorola) - Fixing propeties folder path * David Marques (Motorola) - Removing old classes from L10n API * upon API creation. + * David Marques (Motorola) - Generating keys on upper case. */ package org.eclipse.mtj.internal.core.l10n; @@ -128,8 +129,8 @@ IDocumentElementNode[] entryNodes = locale.getChildNodes(); for (int i = 0; i < entryNodes.length; i++) { L10nEntry entry = (L10nEntry) entryNodes[i]; - if (!keys.contains(entry.getKey())) { - keys.add(entry.getKey()); + if (!keys.contains(entry.getKey().toUpperCase())) { + keys.add(entry.getKey().toUpperCase()); } } } @@ -229,7 +230,7 @@ private static String writeStringConstantDeclaration(String name, String value) { return NLS.bind("\t\tpublic static final String {0} = \"{1}\";\n", - new String[] { name.replace("-", "_"), value }); + new String[] { name.replace("-", "_"), value}); } /** #P org.eclipse.mtj.ui Index: src/org/eclipse/mtj/internal/ui/editors/l10n/details/L10nEntryDetails.java =================================================================== --- src/org/eclipse/mtj/internal/ui/editors/l10n/details/L10nEntryDetails.java (revision 758) +++ src/org/eclipse/mtj/internal/ui/editors/l10n/details/L10nEntryDetails.java (working copy) @@ -8,6 +8,7 @@ * * Contributors: * Diego Sandin (Motorola) - Initial Version + * David Marques (Motorola) - Synchronizing key states with outline. */ package org.eclipse.mtj.internal.ui.editors.l10n.details; @@ -17,6 +18,7 @@ import org.eclipse.mtj.internal.ui.editor.FormEntryAdapter; import org.eclipse.mtj.internal.ui.editors.l10n.L10nInputContext; import org.eclipse.mtj.internal.ui.editors.l10n.LocalesTreeSection; +import org.eclipse.mtj.internal.ui.editors.l10n.LocalizationDataEditor; import org.eclipse.mtj.ui.internal.forms.parts.FormEntry; import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.Composite; @@ -21,6 +23,7 @@ import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.Composite; import org.eclipse.ui.forms.IFormPart; +import org.eclipse.ui.forms.editor.FormEditor; import org.eclipse.ui.forms.events.HyperlinkEvent; public class L10nEntryDetails extends L10nAbstractDetails { @@ -113,7 +116,7 @@ */ private void createLocaleEntryListeners() { keyEntry.setFormEntryListener(new FormEntryAdapter(this) { - @Override + public void textValueChanged(FormEntry entry) { // Ensure data object is defined if (localeEntry != null) { @@ -119,6 +122,12 @@ if (localeEntry != null) { { localeEntry.setKey(keyEntry.getValue()); + localeEntry.getParent().validate(); + + FormEditor editor = getPage().getEditor(); + if (editor instanceof LocalizationDataEditor) { + ((LocalizationDataEditor) editor).displayLocaleKeysConflict(localeEntry.getLocales()); + } } } } Index: src/org/eclipse/mtj/internal/ui/editors/l10n/details/L10nLocaleDetails.java =================================================================== --- src/org/eclipse/mtj/internal/ui/editors/l10n/details/L10nLocaleDetails.java (revision 758) +++ src/org/eclipse/mtj/internal/ui/editors/l10n/details/L10nLocaleDetails.java (working copy) @@ -8,6 +8,7 @@ * * Contributors: * Diego Sandin (Motorola) - Initial Version + * David Marques (Motorola) - Synchronizing locale states with outline. */ package org.eclipse.mtj.internal.ui.editors.l10n.details; @@ -182,6 +183,7 @@ locale .setCountryCode(localeCountryCodeEntry .getValue()); + locale.validate(); } } } @@ -213,6 +215,7 @@ { locale.setLanguageCode(localeLanguageCodeEntry .getValue()); + locale.validate(); } } } Index: src/org/eclipse/mtj/internal/ui/editors/l10n/pages/L10nSourcePage.java =================================================================== --- src/org/eclipse/mtj/internal/ui/editors/l10n/pages/L10nSourcePage.java (revision 758) +++ src/org/eclipse/mtj/internal/ui/editors/l10n/pages/L10nSourcePage.java (working copy) @@ -16,7 +16,9 @@ import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.jface.viewers.ILabelProvider; +import org.eclipse.jface.viewers.ISelectionChangedListener; import org.eclipse.jface.viewers.ITreeContentProvider; +import org.eclipse.jface.viewers.SelectionChangedEvent; import org.eclipse.jface.viewers.ViewerComparator; import org.eclipse.mtj.core.internal.MTJCorePlugin; import org.eclipse.mtj.internal.core.l10n.L10nApi; @@ -23,11 +25,15 @@ import org.eclipse.mtj.internal.core.text.IDocumentAttributeNode; import org.eclipse.mtj.internal.core.text.IDocumentElementNode; import org.eclipse.mtj.internal.core.text.IDocumentRange; +import org.eclipse.mtj.internal.core.text.IEditingModel; import org.eclipse.mtj.internal.core.text.l10n.L10nLocales; import org.eclipse.mtj.internal.core.text.l10n.L10nModel; import org.eclipse.mtj.internal.ui.MTJUIMessages; +import org.eclipse.mtj.internal.ui.editor.ISortableContentOutlinePage; import org.eclipse.mtj.internal.ui.editor.MTJFormEditor; +import org.eclipse.mtj.internal.ui.editor.SourceOutlinePage; import org.eclipse.mtj.internal.ui.editor.XMLSourcePage; +import org.eclipse.mtj.internal.ui.editors.l10n.L10nSourceOutlinePage; import org.eclipse.mtj.ui.internal.MTJUIPlugin; /** @@ -45,6 +51,30 @@ } /* (non-Javadoc) + * @see org.eclipse.mtj.internal.ui.editor.MTJSourcePage#createOutlinePage() + */ + protected ISortableContentOutlinePage createOutlinePage() { + SourceOutlinePage sourceOutlinePage = new L10nSourceOutlinePage( + (MTJFormEditor) getEditor(), (IEditingModel) getInputContext() + .getModel(), createOutlineLabelProvider(), + createOutlineContentProvider(), + createDefaultOutlineComparator(), createOutlineComparator()); + + fOutlinePage = sourceOutlinePage; + fOutlineSelectionChangedListener = new ISelectionChangedListener() { + public void selectionChanged(SelectionChangedEvent event) { + updateSelection(event); + } + }; + fOutlinePage + .addSelectionChangedListener(fOutlineSelectionChangedListener); + getSelectionProvider().addSelectionChangedListener(sourceOutlinePage); + fEditorSelectionChangedListener = new MTJSourcePageChangedListener(); + fEditorSelectionChangedListener.install(getSelectionProvider()); + return fOutlinePage; + } + + /* (non-Javadoc) * @see org.eclipse.mtj.internal.ui.editor.MTJSourcePage#createOutlineComparator() */ @Override @@ -167,5 +197,4 @@ MTJCorePlugin.log(IStatus.ERROR, e); } } - } Index: src/org/eclipse/mtj/internal/ui/editors/l10n/LocalesTreeSection.java =================================================================== --- src/org/eclipse/mtj/internal/ui/editors/l10n/LocalesTreeSection.java (revision 758) +++ src/org/eclipse/mtj/internal/ui/editors/l10n/LocalesTreeSection.java (working copy) @@ -7,7 +7,8 @@ * http://www.eclipse.org/legal/epl-v10.html * * Contributors: - * Diego Sandin (Motorola) - Initial Version + * Diego Sandin (Motorola) - Initial Version + * David Marques (Motorola) - Synchronizing key states with outline. */ package org.eclipse.mtj.internal.ui.editors.l10n; @@ -52,6 +53,7 @@ import org.eclipse.ui.actions.ActionFactory; import org.eclipse.ui.actions.ContributionItemFactory; import org.eclipse.ui.dialogs.PatternFilter; +import org.eclipse.ui.forms.editor.FormEditor; import org.eclipse.ui.forms.widgets.FormToolkit; import org.eclipse.ui.forms.widgets.Section; import org.eclipse.ui.keys.IBindingService; @@ -558,16 +560,24 @@ * * @param event the update event */ - private void handleModelChangeType(IModelChangedEvent event) { - // Get the changed object - Object[] objects = event.getChangedObjects(); - L10nObject object = (L10nObject) objects[0]; - - if (object != null) { // Update the element in the tree viewer - object.validate(); - localesTree.update(object, null); - localesTree.refresh(); - } + private void handleModelChangeType(final IModelChangedEvent event) { + + localesTree.getControl().getDisplay().asyncExec(new Runnable() { + public void run() { + if (localesTree.getControl().isDisposed()) { + return; + } + + // Get the changed object + Object[] objects = event.getChangedObjects(); + L10nObject object = (L10nObject) objects[0]; + + if (object != null) { // Update the element in the tree viewer + localesTree.update(object, null); + localesTree.refresh(); + } + } + }); } /** @@ -760,6 +770,14 @@ // Create the adapted listener for the filter entry field filteredTree.createUIListenerEntryFilter(this); + + L10nLocales locales = model.getLocales(); + locales.validate(); + + FormEditor editor = getPage().getEditor(); + if (editor instanceof LocalizationDataEditor) { + ((LocalizationDataEditor) editor).displayLocaleKeysConflict(locales); + } } /* (non-Javadoc) Index: src/org/eclipse/mtj/internal/ui/editors/l10n/LocalizationDataEditor.java =================================================================== --- src/org/eclipse/mtj/internal/ui/editors/l10n/LocalizationDataEditor.java (revision 758) +++ src/org/eclipse/mtj/internal/ui/editors/l10n/LocalizationDataEditor.java (working copy) @@ -9,6 +9,7 @@ * Contributors: * Diego Sandin (Motorola) - Initial Version * David Marques (Motorola) - Overriding doSave method. + * David Marques (Motorola) - Synchronizing key states with outline. */ package org.eclipse.mtj.internal.ui.editors.l10n; @@ -14,6 +15,7 @@ import java.io.File; import java.util.Iterator; +import java.util.List; import org.eclipse.core.resources.IFile; import org.eclipse.core.runtime.CoreException; @@ -19,6 +21,7 @@ import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; +import org.eclipse.jface.dialogs.IMessageProvider; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.mtj.core.internal.MTJCorePlugin; @@ -23,6 +26,8 @@ import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.mtj.core.internal.MTJCorePlugin; import org.eclipse.mtj.internal.core.l10n.L10nApi; +import org.eclipse.mtj.internal.core.text.l10n.L10nLocale; +import org.eclipse.mtj.internal.core.text.l10n.L10nLocales; import org.eclipse.mtj.internal.core.text.l10n.L10nModel; import org.eclipse.mtj.internal.core.text.l10n.L10nObject; import org.eclipse.mtj.internal.ui.editor.ISortableContentOutlinePage; @@ -35,6 +40,7 @@ import org.eclipse.mtj.internal.ui.editors.l10n.pages.L10nSourcePage; import org.eclipse.mtj.internal.ui.editors.l10n.pages.LocalizationPage; import org.eclipse.mtj.ui.IMTJUIConstants; +import org.eclipse.osgi.util.NLS; import org.eclipse.ui.IEditorInput; import org.eclipse.ui.IFileEditorInput; import org.eclipse.ui.IStorageEditorInput; @@ -39,6 +45,7 @@ import org.eclipse.ui.IFileEditorInput; import org.eclipse.ui.IStorageEditorInput; import org.eclipse.ui.PartInitException; +import org.eclipse.ui.forms.IMessageManager; import org.eclipse.ui.forms.editor.IFormPage; /** @@ -81,6 +88,18 @@ } + @Override + protected void pageChange(int newPageIndex) { + super.pageChange(newPageIndex); + IFormPage page = getActivePageInstance(); + if (page instanceof LocalizationPage) { + L10nModel model = (L10nModel) inputContextManager.findContext(L10nInputContext.CONTEXT_ID).getModel(); + if (model != null) { + displayLocaleKeysConflict(model.getLocales()); + } + } + } + /* (non-Javadoc) * @see org.eclipse.mtj.internal.ui.editor.MTJFormEditor#getSelection() */ @@ -223,4 +242,19 @@ protected InputContext getInputContext(Object object) { return inputContextManager.findContext(L10nInputContext.CONTEXT_ID); } + + /** + * Displays conflicting locales message. + * + * @param locales locales. + */ + public void displayLocaleKeysConflict(L10nLocales locales) { + List conflicted = L10nUtil.findConflictedLocales(locales); + IMessageManager manager = getActivePageInstance().getManagedForm().getMessageManager(); + manager.removeAllMessages(); + for (L10nLocale locale : conflicted) { + String message = NLS.bind("Locale keys are case insensitive. The locale {0} has duplicated keys.", locale.getName()); + manager.addMessage(locale, message, null, IMessageProvider.ERROR); + } + } } Index: src/org/eclipse/mtj/internal/ui/editors/l10n/L10nUtil.java =================================================================== --- src/org/eclipse/mtj/internal/ui/editors/l10n/L10nUtil.java (revision 0) +++ src/org/eclipse/mtj/internal/ui/editors/l10n/L10nUtil.java (revision 0) @@ -0,0 +1,60 @@ +package org.eclipse.mtj.internal.ui.editors.l10n; + +import java.util.LinkedList; +import java.util.List; + +import org.eclipse.core.runtime.IStatus; +import org.eclipse.mtj.internal.core.text.IDocumentElementNode; +import org.eclipse.mtj.internal.core.text.l10n.L10nEntry; +import org.eclipse.mtj.internal.core.text.l10n.L10nLocale; +import org.eclipse.mtj.internal.core.text.l10n.L10nLocales; + +/** + * Copyright (c) 2008 Motorola. + * + * 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: + * David Marques (Motorola) - Initial Version + */ +public class L10nUtil { + + /** + * This method finds all conflicting locales. + * + * @param locales target locales instance. + * @return the list of all conflicting locales. + */ + public static List findConflictedLocales(L10nLocales locales) { + List conflicted = new LinkedList(); + IDocumentElementNode[] localeNodes = locales.getChildNodes(); + for (IDocumentElementNode localeNode : localeNodes) { + L10nLocale locale = (L10nLocale) localeNode; + if (localeHasKeyConflicts(locale)) { + conflicted.add(locale); + } + } + return conflicted; + } + + /** + * Checks whether the specified locale has conflicting keys. + * + * @param locale target locale instance. + * @return true if there are conslicts false otherwise. + */ + private static boolean localeHasKeyConflicts(L10nLocale locale) { + IDocumentElementNode nodes[] = locale.getChildNodes(); + for (IDocumentElementNode node : nodes) { + L10nEntry entry = (L10nEntry) node; + if (entry.getStatus().getSeverity() == IStatus.ERROR) { + return true; + } + } + return false; + } + +} Index: src/org/eclipse/mtj/internal/ui/editors/l10n/L10nSourceOutlinePage.java =================================================================== --- src/org/eclipse/mtj/internal/ui/editors/l10n/L10nSourceOutlinePage.java (revision 0) +++ src/org/eclipse/mtj/internal/ui/editors/l10n/L10nSourceOutlinePage.java (revision 0) @@ -0,0 +1,71 @@ +/** + * Copyright (c) 2008 Motorola. + * + * 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: + * David Marques (Motorola) - Initial Version + */ +package org.eclipse.mtj.internal.ui.editors.l10n; + +import org.eclipse.jface.text.IDocument; +import org.eclipse.jface.viewers.IBaseLabelProvider; +import org.eclipse.jface.viewers.IContentProvider; +import org.eclipse.jface.viewers.ViewerComparator; +import org.eclipse.mtj.internal.core.text.IEditingModel; +import org.eclipse.mtj.internal.core.text.l10n.L10nModel; +import org.eclipse.mtj.internal.ui.editor.MTJFormEditor; +import org.eclipse.mtj.internal.ui.editor.SourceOutlinePage; +import org.eclipse.swt.widgets.Control; + +public class L10nSourceOutlinePage extends SourceOutlinePage { + + /** + * Creates a new content outline page for the XML editor. + * + * @param editor + * @param model + * @param lProvider + * @param cProvider + * @param defaultComparator + * @param comparator + */ + public L10nSourceOutlinePage(MTJFormEditor editor, IEditingModel model, + IBaseLabelProvider provider, IContentProvider provider2, + ViewerComparator defaultComparator, ViewerComparator comparator) { + super(editor, model, provider, provider2, defaultComparator, comparator); + } + + @Override + public void reconciled(IDocument document) { + + final Control control = getControl(); + if ((control == null) || control.isDisposed()) { + return; + } + + control.getDisplay().asyncExec(new Runnable() { + public void run() { + if (control.isDisposed()) { + return; + } + if (model instanceof L10nModel) { + ((L10nModel) model).getLocales().validate(); + } + } + }); + super.reconciled(document); + } + + /** + * Validates the model. + */ + public void refresh() { + if (model instanceof L10nModel) { + ((L10nModel) model).getLocales().validate(); + } + } +} Index: src/org/eclipse/mtj/internal/ui/editor/SourceOutlinePage.java =================================================================== --- src/org/eclipse/mtj/internal/ui/editor/SourceOutlinePage.java (revision 758) +++ src/org/eclipse/mtj/internal/ui/editor/SourceOutlinePage.java (working copy) @@ -9,6 +9,7 @@ * Contributors: * IBM Corporation - initial API and implementation * Diego Sandin (Motorola) - Adapted code from org.eclipse.pde.ui + * David Marques (Motorola) - Changing several attributes access. */ package org.eclipse.mtj.internal.ui.editor; @@ -45,7 +46,7 @@ * from our parent. */ private ArrayList listenerList; - private IEditingModel model; + protected IEditingModel model; private boolean sorted; private ViewerComparator viewerComparator; TreeViewer viewer; Index: src/org/eclipse/mtj/internal/ui/editor/MTJFormEditor.java =================================================================== --- src/org/eclipse/mtj/internal/ui/editor/MTJFormEditor.java (revision 758) +++ src/org/eclipse/mtj/internal/ui/editor/MTJFormEditor.java (working copy) @@ -54,6 +54,7 @@ import org.eclipse.mtj.internal.ui.editor.context.IInputContextListener; import org.eclipse.mtj.internal.ui.editor.context.InputContext; import org.eclipse.mtj.internal.ui.editor.context.InputContextManager; +import org.eclipse.mtj.internal.ui.editors.l10n.L10nSourceOutlinePage; import org.eclipse.mtj.ui.IMTJUIConstants; import org.eclipse.mtj.ui.internal.MTJUIPlugin; import org.eclipse.search.ui.text.ISearchEditorAccess; @@ -891,6 +892,9 @@ ISortableContentOutlinePage outline = null; if (page instanceof MTJSourcePage) { outline = ((MTJSourcePage) page).getContentOutline(); + if ((outline != null) && (outline instanceof L10nSourceOutlinePage)) { + ((L10nSourceOutlinePage) outline).refresh(); + } } else { outline = getFormOutline(); if ((outline != null) && (outline instanceof FormOutlinePage)) { Index: src/org/eclipse/mtj/internal/ui/editor/MTJSourcePage.java =================================================================== --- src/org/eclipse/mtj/internal/ui/editor/MTJSourcePage.java (revision 758) +++ src/org/eclipse/mtj/internal/ui/editor/MTJSourcePage.java (working copy) @@ -7,8 +7,9 @@ * http://www.eclipse.org/legal/epl-v10.html * * Contributors: - * IBM Corporation - initial API and implementation - * Diego Sandin (Motorola) - Adapted code from org.eclipse.pde.ui/PDESourcePage + * IBM Corporation - initial API and implementation + * Diego Sandin (Motorola) - Adapted code from org.eclipse.pde.ui/PDESourcePage + * David Marques (Motorola) - Changing several attributes access. */ package org.eclipse.mtj.internal.ui.editor; @@ -80,7 +81,7 @@ * * @since 0.9.1 */ - private class MTJSourcePageChangedListener implements + public class MTJSourcePageChangedListener implements ISelectionChangedListener { /** @@ -146,13 +147,13 @@ /** * The editor selection changed listener. */ - private MTJSourcePageChangedListener fEditorSelectionChangedListener; + protected MTJSourcePageChangedListener fEditorSelectionChangedListener; private String fId; private int fIndex; private InputContext fInputContext; - private ISortableContentOutlinePage fOutlinePage; + protected ISortableContentOutlinePage fOutlinePage; private Object fSelection; - private ISelectionChangedListener fOutlineSelectionChangedListener; + protected ISelectionChangedListener fOutlineSelectionChangedListener; /** * @param editor