Add model provider for Internationalization Preference in the context of
CDO

Change-Id: Ib780de53b8208da9a31e2a485f81324bd1d40644
diff --git a/cdo/bundles/org.eclipse.papyrus.cdo.core/META-INF/MANIFEST.MF b/cdo/bundles/org.eclipse.papyrus.cdo.core/META-INF/MANIFEST.MF
index 3e044af..c1322ed 100755
--- a/cdo/bundles/org.eclipse.papyrus.cdo.core/META-INF/MANIFEST.MF
+++ b/cdo/bundles/org.eclipse.papyrus.cdo.core/META-INF/MANIFEST.MF
@@ -23,7 +23,8 @@
  org.eclipse.papyrus.infra.services.localizer;bundle-version="1.2.0",
  org.eclipse.net4j;bundle-version="[4.3.0,5.0.0)",
  org.eclipse.emf.cdo.admin;bundle-version="[4.1.200,5.0.0)",
- org.eclipse.papyrus.infra.core.sashwindows.di;bundle-version="1.2.0"
+ org.eclipse.papyrus.infra.core.sashwindows.di;bundle-version="1.2.0",
+ org.eclipse.papyrus.infra.internationalization;bundle-version="[1.2.100,2.0.0)"
 Export-Package: org.eclipse.papyrus.cdo.core,
  org.eclipse.papyrus.cdo.core.admin,
  org.eclipse.papyrus.cdo.core.exporter,
diff --git a/cdo/bundles/org.eclipse.papyrus.cdo.core/plugin.xml b/cdo/bundles/org.eclipse.papyrus.cdo.core/plugin.xml
index a84c144..1bf33a7 100755
--- a/cdo/bundles/org.eclipse.papyrus.cdo.core/plugin.xml
+++ b/cdo/bundles/org.eclipse.papyrus.cdo.core/plugin.xml
@@ -100,5 +100,11 @@
             scheme="cdo.checkout">
       </sashModelProvider>
    </extension>
+   <extension
+         point="org.eclipse.papyrus.infra.internationalization.internationalizationPreferenceModelProvider">
+      <internationalizationPreferenceModelProvider
+            class="org.eclipse.papyrus.cdo.core.InternationalizationPreferenceModelProvider1">
+      </internationalizationPreferenceModelProvider>
+   </extension>
 
 </plugin>
diff --git a/cdo/bundles/org.eclipse.papyrus.cdo.core/src/org/eclipse/papyrus/cdo/internal/core/resource/CDOInternationalizationPreferenceModelProvider.java b/cdo/bundles/org.eclipse.papyrus.cdo.core/src/org/eclipse/papyrus/cdo/internal/core/resource/CDOInternationalizationPreferenceModelProvider.java
new file mode 100644
index 0000000..7f26802
--- /dev/null
+++ b/cdo/bundles/org.eclipse.papyrus.cdo.core/src/org/eclipse/papyrus/cdo/internal/core/resource/CDOInternationalizationPreferenceModelProvider.java
@@ -0,0 +1,71 @@
+/*****************************************************************************
+ * Copyright (c) 2020 CEA LIST and others.
+ * 
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ *   CEA LIST - Initial API and implementation
+ *   
+ *****************************************************************************/
+
+package org.eclipse.papyrus.cdo.internal.core.resource;
+
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.emf.cdo.explorer.CDOExplorerUtil;
+import org.eclipse.emf.cdo.explorer.checkouts.CDOCheckout;
+import org.eclipse.emf.cdo.util.CDOURIUtil;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.papyrus.cdo.internal.core.Activator;
+import org.eclipse.papyrus.infra.core.resource.ModelSet;
+import org.eclipse.papyrus.infra.internationalization.modelresource.AbstractInternationalizationPreferenceModelProvider;
+import org.eclipse.papyrus.infra.internationalization.modelresource.InternationalizationPreferenceModel;
+
+
+public class CDOInternationalizationPreferenceModelProvider extends AbstractInternationalizationPreferenceModelProvider {
+
+
+	public CDOInternationalizationPreferenceModelProvider() {
+		super();
+	}
+
+	/**
+	 * @see org.eclipse.papyrus.infra.internationalization.modelresource.IInternationalizationPreferenceModelProvider#getInternationalizationPreferenceModelURI(org.eclipse.emf.common.util.URI)
+	 *
+	 * @param userModelURI
+	 * @return
+	 */
+	@Override
+	public URI getInternationalizationPreferenceModelURI(URI userModelURI) {
+		URI uriWithoutExtension = userModelURI.trimFileExtension();
+		IPath stateLocation = indexFolder.append(CDOURIUtil.extractResourcePath(uriWithoutExtension));
+		return URI.createFileURI(stateLocation.toString()).appendFileExtension(InternationalizationPreferenceModel.INTERNATIONALIZATION_PREFERENCE_FILE_EXTENSION);
+	}
+
+	private static final IPath INTERNATIONALIZATION_PREFERENCE_MODEL_STORAGE_ROOT = Activator.getDefault().getStateLocation().append("internationalizationidx"); //$NON-NLS-1$
+
+	private IPath indexFolder;
+
+	@Override
+	public void initialize(ModelSet modelSet) {
+		super.initialize(modelSet);
+
+		CDOCheckout checkout = CDOExplorerUtil.getCheckout(modelSet);
+		if (checkout != null) {
+			initialize(checkout);
+		} else {
+			// Model probably is in the workspace if null
+			indexFolder = INTERNATIONALIZATION_PREFERENCE_MODEL_STORAGE_ROOT;
+		}
+	}
+
+	public CDOInternationalizationPreferenceModelProvider initialize(CDOCheckout checkout) {
+		indexFolder = INTERNATIONALIZATION_PREFERENCE_MODEL_STORAGE_ROOT.append(checkout.getView().getSession().getRepositoryInfo().getUUID());
+		return this;
+	}
+
+}