diff options
author | Nicolas FAUVERGUE | 2017-05-11 12:07:21 +0000 |
---|---|---|
committer | vincent lorenzo | 2017-05-12 18:46:14 +0000 |
commit | b800f342de4af3d59196427ad0f8b44f8b1a0349 (patch) | |
tree | 047755fa16c2d1183f0f943035645fd825d359b0 /plugins/infra | |
parent | 3dab9aaaa059edb969def64c919f43db36b1f5ec (diff) | |
download | org.eclipse.papyrus-b800f342de4af3d59196427ad0f8b44f8b1a0349.tar.gz org.eclipse.papyrus-b800f342de4af3d59196427ad0f8b44f8b1a0349.tar.xz org.eclipse.papyrus-b800f342de4af3d59196427ad0f8b44f8b1a0349.zip |
Bug 510951: [Internationalization] Elements from profile does not have
label displayed https://bugs.eclipse.org/bugs/show_bug.cgi?id=510951
Bug 516166: [infra-sashwindows] IPageLifeCycleEventsListener - An
undesired pageActivated() events is sent when a page is closed
https://bugs.eclipse.org/bugs/show_bug.cgi?id=516166
- Add some test condition for internationalization
- Modify the resource management in the internationalization model
resource
- Manage the unload of internationalization like the load
- Modify the JUnit test corresponding to the editor reload after the fix
of bug 516166
Change-Id: I565ac0c88387dbe907b6c027efac9cd412e13af1
Signed-off-by: Nicolas FAUVERGUE <nicolas.fauvergue@cea.fr>
Diffstat (limited to 'plugins/infra')
3 files changed, 92 insertions, 15 deletions
diff --git a/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.common/src/org/eclipse/papyrus/infra/internationalization/common/utils/InternationalizationPreferencesUtils.java b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.common/src/org/eclipse/papyrus/infra/internationalization/common/utils/InternationalizationPreferencesUtils.java index 3cd39072b9e..5d3157c71b8 100644 --- a/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.common/src/org/eclipse/papyrus/infra/internationalization/common/utils/InternationalizationPreferencesUtils.java +++ b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization.common/src/org/eclipse/papyrus/infra/internationalization/common/utils/InternationalizationPreferencesUtils.java @@ -46,7 +46,7 @@ public class InternationalizationPreferencesUtils { public static IPreferenceStore getPreferenceStore(final EObject eObject) { URI resourceURI = eObject.eResource().getURI(); final ResourceSet resourceSet = eObject.eResource().getResourceSet(); - if (resourceSet instanceof ModelSet) { + if (resourceSet instanceof ModelSet && null != ((ModelSet) resourceSet).getURIWithoutExtension()) { resourceURI = ((ModelSet) resourceSet).getURIWithoutExtension().appendFileExtension(DiModel.DI_FILE_EXTENSION); } return getPreferenceStore(resourceURI); @@ -114,7 +114,7 @@ public class InternationalizationPreferencesUtils { public static void setInternationalizationPreference(final EObject eObject, final boolean value) { URI resourceURI = eObject.eResource().getURI(); final ResourceSet resourceSet = eObject.eResource().getResourceSet(); - if (resourceSet instanceof ModelSet) { + if (resourceSet instanceof ModelSet && null != ((ModelSet) resourceSet).getURIWithoutExtension()) { resourceURI = ((ModelSet) resourceSet).getURIWithoutExtension().appendFileExtension(DiModel.DI_FILE_EXTENSION); } setInternationalizationPreference(resourceURI, value); @@ -162,7 +162,7 @@ public class InternationalizationPreferencesUtils { if (null != eObject && null != eObject.eResource()) { URI resourceURI = eObject.eResource().getURI(); final ResourceSet resourceSet = eObject.eResource().getResourceSet(); - if (resourceSet instanceof ModelSet) { + if (resourceSet instanceof ModelSet && null != ((ModelSet) resourceSet).getURIWithoutExtension()) { resourceURI = ((ModelSet) resourceSet).getURIWithoutExtension().appendFileExtension(DiModel.DI_FILE_EXTENSION); } result = getInternationalizationPreference(resourceURI); @@ -236,7 +236,7 @@ public class InternationalizationPreferencesUtils { if (null != eObject && null != eObject.eResource()) { URI resourceURI = eObject.eResource().getURI(); final ResourceSet resourceSet = eObject.eResource().getResourceSet(); - if (resourceSet instanceof ModelSet) { + if (resourceSet instanceof ModelSet && null != ((ModelSet) resourceSet).getURIWithoutExtension()) { resourceURI = ((ModelSet) resourceSet).getURIWithoutExtension().appendFileExtension(DiModel.DI_FILE_EXTENSION); } result = getLocalePreference(resourceURI); @@ -276,7 +276,7 @@ public class InternationalizationPreferencesUtils { public static void setLanguagePreference(final EObject eObject, final String language) { URI resourceURI = eObject.eResource().getURI(); final ResourceSet resourceSet = eObject.eResource().getResourceSet(); - if (resourceSet instanceof ModelSet) { + if (resourceSet instanceof ModelSet && null != ((ModelSet) resourceSet).getURIWithoutExtension()) { resourceURI = ((ModelSet) resourceSet).getURIWithoutExtension().appendFileExtension(DiModel.DI_FILE_EXTENSION); } setLanguagePreference(resourceURI, language); diff --git a/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization/src/org/eclipse/papyrus/infra/internationalization/modelresource/InternationalizationModelResource.java b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization/src/org/eclipse/papyrus/infra/internationalization/modelresource/InternationalizationModelResource.java index 0ed7d29e859..02bb1510370 100644 --- a/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization/src/org/eclipse/papyrus/infra/internationalization/modelresource/InternationalizationModelResource.java +++ b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization/src/org/eclipse/papyrus/infra/internationalization/modelresource/InternationalizationModelResource.java @@ -380,6 +380,11 @@ public class InternationalizationModelResource extends AbstractModelWithSharedRe if (!resource.isLoaded()) { // If this is a read-only resource, create a fake resource to get the internationalization content and read the needed entries if(modelSet.getTransactionalEditingDomain().isReadOnly(resource)) { + + // Unload the resource and remove the created resource from the map + unload(resource); + getResources().remove(resource); + final URI initialResourceURI = resource.getURI(); final String lastSegment = initialResourceURI.lastSegment(); URI newResourceURI = modelSet.getURIWithoutExtension(); @@ -387,7 +392,13 @@ public class InternationalizationModelResource extends AbstractModelWithSharedRe newResourceURI = newResourceURI.appendSegment(lastSegment); // Create the resource with the ResourceSet but this one need to be removed from the ResourceSet - resource = modelSet.createResource(newResourceURI); + // Look for the resource + resource = getResourceSet().getResource(newResourceURI, false); + + // Check if model is loaded. + if (null == resource) { + resource = modelSet.createResource(newResourceURI); + } configureResource(initialResourceURI, resource, locale); if (resource instanceof InternationalizationResource) { @@ -402,9 +413,6 @@ public class InternationalizationModelResource extends AbstractModelWithSharedRe Activator.log.error("Error during load resource.", e); //$NON-NLS-1$ } - // Remove the resource from the ResourceSet because this is only needed to read and not save the resource - modelSet.getResources().remove(resource); - // And add the temporary resource to the list of resources to not save resourcesToNotSave.add(resource); }else { @@ -439,10 +447,7 @@ public class InternationalizationModelResource extends AbstractModelWithSharedRe final Resource resource = this.resource; // Fill the properties by locale map - if (null == propertiesByLocale.get(resourceURI)) { - propertiesByLocale.put(resourceURI, new HashMap<Locale, Resource>()); - } - propertiesByLocale.get(resourceURI).put(locale, resource); + configureResource(resourceURI, resource, locale); // Calculate the internationalization content loadInternationalizationContent(uri, locale); @@ -1282,7 +1287,7 @@ public class InternationalizationModelResource extends AbstractModelWithSharedRe if (null != initialUri) { unload(initialUri); } - resource.unload(); + unload(resource); } // Remove adapters @@ -1320,6 +1325,9 @@ public class InternationalizationModelResource extends AbstractModelWithSharedRe preferencePartLabelSynchronizers.clear(); preferencePartLabelSynchronizers = null; } + + resourcesToNotSave.clear(); + resourcesToNotSave = null; resource = null; super.unload(); @@ -1357,7 +1365,13 @@ public class InternationalizationModelResource extends AbstractModelWithSharedRe entriesIterator.remove(); } } + + if(propertiesByLocale.get(initialUri).isEmpty()) { + propertiesByLocale.remove(initialUri); + } } + + resource.unload(); } /** diff --git a/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization/src/org/eclipse/papyrus/infra/internationalization/resource/InternationalizationResource.java b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization/src/org/eclipse/papyrus/infra/internationalization/resource/InternationalizationResource.java index 0c67969ed02..9258a7d6cde 100644 --- a/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization/src/org/eclipse/papyrus/infra/internationalization/resource/InternationalizationResource.java +++ b/plugins/infra/internationalization/org.eclipse.papyrus.infra.internationalization/src/org/eclipse/papyrus/infra/internationalization/resource/InternationalizationResource.java @@ -16,6 +16,7 @@ package org.eclipse.papyrus.infra.internationalization.resource; import java.io.IOException; import java.util.Collections; import java.util.Enumeration; +import java.util.Iterator; import java.util.Locale; import java.util.Map; import java.util.Properties; @@ -24,6 +25,7 @@ import java.util.Vector; import org.eclipse.emf.common.util.URI; import org.eclipse.emf.ecore.EObject; +import org.eclipse.emf.ecore.InternalEObject; import org.eclipse.emf.ecore.resource.ResourceSet; import org.eclipse.emf.ecore.resource.URIConverter; import org.eclipse.emf.ecore.resource.impl.ExtensibleURIConverterImpl; @@ -140,7 +142,7 @@ public class InternationalizationResource extends XMIResourceImpl { } catch (InterruptedException | RollbackException e) { Activator.log.error(e); } - }else { + } else { final GMFtoEMFCommandWrapper command = new GMFtoEMFCommandWrapper(new AddToResourceCommand( ((ModelSet) getResourceSet()).getTransactionalEditingDomain(), this, library)); command.execute(); @@ -227,6 +229,67 @@ public class InternationalizationResource extends XMIResourceImpl { } /** + * {@inheritDoc} + * + * @see org.eclipse.emf.ecore.xmi.impl.XMLResourceImpl#doUnload() + */ + @Override + protected void doUnload() { + + Iterator<EObject> allContents = getAllProperContents(unloadingContents); + + // This guard is needed to ensure that clear doesn't make the resource become loaded. + // + if (!getContents().isEmpty()) { + // Load the locale save option if exist + final Object needUnsafe = getDefaultLoadOptions() != null + && getDefaultLoadOptions().containsKey(InternationalizationResourceOptionsConstants.LOAD_OPTION_UNSAFE_ADD_CONTENT) + ? getDefaultLoadOptions().get(InternationalizationResourceOptionsConstants.LOAD_OPTION_UNSAFE_ADD_CONTENT) + : defaultLoadOptions != null + ? defaultLoadOptions + .get(InternationalizationResourceOptionsConstants.LOAD_OPTION_UNSAFE_ADD_CONTENT) + : null; + + // Add the library to the resource + if (needUnsafe instanceof Boolean && (Boolean) needUnsafe) { + try { + // We need to do this by unsafe for the fake resources + GMFUnsafe.write(((ModelSet) getResourceSet()).getTransactionalEditingDomain(), new Runnable() { + + @Override + public void run() { + getContents().clear(); + + } + }); + } catch (InterruptedException | RollbackException e) { + Activator.log.error(e); + } + } else { + getContents().clear(); + } + } + getErrors().clear(); + getWarnings().clear(); + + while (allContents.hasNext()) { + unloaded((InternalEObject) allContents.next()); + } + + if (idToEObjectMap != null) { + idToEObjectMap.clear(); + } + + if (eObjectToIDMap != null) { + eObjectToIDMap.clear(); + } + + if (eObjectToExtensionMap != null) { + eObjectToExtensionMap.clear(); + } + } + + /** * This allows to load the key resolver option. * * @param options |