Skip to content
Snippets Groups Projects
Commit 69e2000f authored by Alexander Diewald's avatar Alexander Diewald
Browse files

Merge branch 'master' of https://git.fortiss.org/af3/kernel.git into 3209_javafx

parents 929cf7f3 bd502046
No related branches found
No related tags found
1 merge request!43209 javafx
...@@ -34,9 +34,6 @@ ...@@ -34,9 +34,6 @@
</extension> </extension>
<extension point="org.fortiss.tooling.kernel.migrationProvider"> <extension point="org.fortiss.tooling.kernel.migrationProvider">
<migrationProvider migrationProvider="org.fortiss.tooling.base.migration.IDMigrationProvider">
<objectClass objectClass="org.fortiss.tooling.kernel.extension.data.ITopLevelElement"/>
</migrationProvider>
<migrationProvider migrationProvider="org.fortiss.tooling.base.migration.RemoveDuplicatedAnnotationsMigrationProvider"> <migrationProvider migrationProvider="org.fortiss.tooling.base.migration.RemoveDuplicatedAnnotationsMigrationProvider">
<objectClass objectClass="org.fortiss.tooling.kernel.extension.data.ITopLevelElement"/> <objectClass objectClass="org.fortiss.tooling.kernel.extension.data.ITopLevelElement"/>
</migrationProvider> </migrationProvider>
......
IDMigrationProvider.java fa145250ce031ab8e635db290b12cd6be2bda75c GREEN
RemoveDuplicatedAnnotationsMigrationProvider.java 5d7689066a577110dbdf84b5c81372b1df2a51c6 GREEN RemoveDuplicatedAnnotationsMigrationProvider.java 5d7689066a577110dbdf84b5c81372b1df2a51c6 GREEN
RemoveOutdatedAnnotationInstanceMigrationProvider.java 29c29f2bb7515cad1de45a30ffc185001b47a016 GREEN RemoveOutdatedAnnotationInstanceMigrationProvider.java 29c29f2bb7515cad1de45a30ffc185001b47a016 GREEN
/*-------------------------------------------------------------------------+
| Copyright 2013 fortiss GmbH |
| |
| Licensed under the Apache License, Version 2.0 (the "License"); |
| you may not use this file except in compliance with the License. |
| You may obtain a copy of the License at |
| |
| http://www.apache.org/licenses/LICENSE-2.0 |
| |
| Unless required by applicable law or agreed to in writing, software |
| distributed under the License is distributed on an "AS IS" BASIS, |
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| See the License for the specific language governing permissions and |
| limitations under the License. |
+--------------------------------------------------------------------------*/
package org.fortiss.tooling.base.migration;
import static org.fortiss.tooling.kernel.utils.UniqueIDUtils.fixMissingIDs;
import static org.fortiss.tooling.kernel.utils.UniqueIDUtils.hasMissingIDs;
import java.util.Map;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.xml.type.AnyType;
import org.fortiss.tooling.kernel.extension.IMigrationProvider;
import org.fortiss.tooling.kernel.extension.data.ITopLevelElement;
/**
* {@link IDMigrationProvider} that - if required - adds missing IDs to a model.
*
* @author Shaka
*/
public class IDMigrationProvider implements IMigrationProvider {
/** {@inheritDoc} */
@Override
public boolean needMigration(ITopLevelElement modelElement,
Map<EObject, AnyType> unknownFeatures) {
// if the id of model element is 0
if(modelElement != null) {
EObject rootElement = modelElement.getRootModelElement();
return (rootElement != null) && hasMissingIDs(rootElement);
}
return false;
}
/** {@inheritDoc} */
@Override
public void migrate(ITopLevelElement modelElement, Map<EObject, AnyType> unknownFeatures) {
fixMissingIDs(modelElement);
}
}
AutoUndoCommandStack.java 6aa645a9ed6e6547539c376fda97284928c4f9d4 GREEN AutoUndoCommandStack.java 6aa645a9ed6e6547539c376fda97284928c4f9d4 GREEN
EMFTransactionalCommand.java ba4b5bead9768b6ce6c955b9238cd96cb722533c GREEN EMFTransactionalCommand.java ba4b5bead9768b6ce6c955b9238cd96cb722533c GREEN
EclipseResourceStorageService.java 1b9722e31a5ec33e4c3f7bb171fc2ce587729bf8 GREEN EclipseResourceStorageService.java 1b9722e31a5ec33e4c3f7bb171fc2ce587729bf8 GREEN
ModelContext.java 58e41785101a92624e60329b5bf8046466a49d33 GREEN ModelContext.java 85ede185d4b232221a96d0bf37a4c676b105dc00 GREEN
NonDirtyingEMFTransactionalCommand.java ec5f282603891096b09f2628155dd27e3a21c588 GREEN NonDirtyingEMFTransactionalCommand.java ec5f282603891096b09f2628155dd27e3a21c588 GREEN
...@@ -15,10 +15,13 @@ ...@@ -15,10 +15,13 @@
+--------------------------------------------------------------------------*/ +--------------------------------------------------------------------------*/
package org.fortiss.tooling.kernel.internal.storage.eclipse; package org.fortiss.tooling.kernel.internal.storage.eclipse;
import static java.lang.Math.max;
import static org.eclipse.emf.common.util.URI.createPlatformResourceURI;
import static org.eclipse.emf.ecore.util.EcoreUtil.resolveAll; import static org.eclipse.emf.ecore.util.EcoreUtil.resolveAll;
import static org.fortiss.tooling.kernel.utils.EMFResourceUtils.buildOptionsMap; import static org.fortiss.tooling.kernel.utils.EMFResourceUtils.buildOptionsMap;
import static org.fortiss.tooling.kernel.utils.LoggingUtils.error; import static org.fortiss.tooling.kernel.utils.LoggingUtils.error;
import static org.fortiss.tooling.kernel.utils.LoggingUtils.warning; import static org.fortiss.tooling.kernel.utils.LoggingUtils.warning;
import static org.fortiss.tooling.kernel.utils.UniqueIDUtils.generateMissingIDs;
import java.io.ByteArrayInputStream; import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream; import java.io.ByteArrayOutputStream;
...@@ -36,6 +39,7 @@ import java.util.Set; ...@@ -36,6 +39,7 @@ import java.util.Set;
import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IFile;
import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.emf.common.command.AbstractCommand; import org.eclipse.emf.common.command.AbstractCommand;
import org.eclipse.emf.common.command.BasicCommandStack; import org.eclipse.emf.common.command.BasicCommandStack;
import org.eclipse.emf.common.command.CommandStack; import org.eclipse.emf.common.command.CommandStack;
...@@ -110,7 +114,7 @@ class ModelContext implements ITopLevelElement, CommandStackListener { ...@@ -110,7 +114,7 @@ class ModelContext implements ITopLevelElement, CommandStackListener {
editingDomain = TransactionalEditingDomain.Factory.INSTANCE.createEditingDomain(); editingDomain = TransactionalEditingDomain.Factory.INSTANCE.createEditingDomain();
rset = editingDomain.getResourceSet(); rset = editingDomain.getResourceSet();
URI uri = URI.createPlatformResourceURI(file.getFullPath().toString(), true); URI uri = createPlatformResourceURI(file.getFullPath().toString(), true);
resource = getResourceSet().createResource(uri); resource = getResourceSet().createResource(uri);
resource.load(buildOptionsMap()); resource.load(buildOptionsMap());
...@@ -201,29 +205,29 @@ class ModelContext implements ITopLevelElement, CommandStackListener { ...@@ -201,29 +205,29 @@ class ModelContext implements ITopLevelElement, CommandStackListener {
// which is why special care must be taken to ensure uniqueness. // which is why special care must be taken to ensure uniqueness.
if(ids.contains(id)) { if(ids.contains(id)) {
hadDuplicates = true; hadDuplicates = true;
runAsCommand(new Runnable() { runAsNonDirtyingCommand(() -> {
@Override element.setId(0);
public void run() {
element.setId(0);
}
}); });
} else { } else {
ids.add(id); ids.add(id);
} }
} }
maxId = Math.max(maxId, id); maxId = max(maxId, id);
} }
} }
maxId = Math.max(0, maxId); maxId = max(0, maxId);
if(hadMissing || hadDuplicates) { if(hadMissing || hadDuplicates) {
runAsCommand(new Runnable() { runAsNonDirtyingCommand(() -> {
@Override maxId = generateMissingIDs(getRootModelElement(), maxId);
public void run() {
maxId = UniqueIDUtils.generateMissingIDs(getRootModelElement(), maxId);
}
}); });
try {
doSave(new NullProgressMonitor());
} catch(IOException | CoreException e) {
error(ToolingKernelActivator.getDefault(),
"Error saving model file when fixing missing/duplicate IDs.", e);
}
} }
if(hadDuplicates) { if(hadDuplicates) {
......
...@@ -11,4 +11,4 @@ LoggingUtils.java a982f7c3371e72feb8658510b5b0358876281a12 GREEN ...@@ -11,4 +11,4 @@ LoggingUtils.java a982f7c3371e72feb8658510b5b0358876281a12 GREEN
PrototypesUtils.java ec75bed75cfc5103f1f38e3a29df86f729428775 GREEN PrototypesUtils.java ec75bed75cfc5103f1f38e3a29df86f729428775 GREEN
ResourceUtils.java 5d8f55b3b22a8d963a26ae4a83b4228e2a03d963 GREEN ResourceUtils.java 5d8f55b3b22a8d963a26ae4a83b4228e2a03d963 GREEN
TransformationUtils.java ef1f2346a7e31059fe6a48dff49d247809d38dcd GREEN TransformationUtils.java ef1f2346a7e31059fe6a48dff49d247809d38dcd GREEN
UniqueIDUtils.java 99cf0934ee27a95f4b6edbc251e6ff24e5d1d7f7 GREEN UniqueIDUtils.java c520d053a6530a490431f7acc3cda1a2f8907281 GREEN
...@@ -259,42 +259,24 @@ public class UniqueIDUtils { ...@@ -259,42 +259,24 @@ public class UniqueIDUtils {
return false; return false;
} }
/**
* Generates all missing IDs of the given model.
*
* @param modelElement
* top level element
*/
public static void fixMissingIDs(final ITopLevelElement modelElement) {
final int maxID = getLargestID(modelElement.getRootModelElement());
if(maxID > 0) {
modelElement.runAsCommand(() -> {
generateMissingIDs(modelElement.getRootModelElement(), maxID);
});
}
}
/** /**
* Generates all missing IDs of the given sub-model. * Generates all missing IDs of the given sub-model.
* *
* @param object * @param object
* The sub-model element for which missing IDs should be prepared * Sub-model element for which missing IDs should be prepared
* @param existingModel * @param existingModel
* the existing model to be considered for used IDs if object * Any element in an existing model to be considered for used IDs.
* already contains IDs > 0 * If this model does not contain any IDs <> 0, this method has no effect.
*/ */
public static void fixMissingIDs(EObject object, EObject existingModel) { public static void fixMissingIDs(EObject object, EObject existingModel) {
EObject root = existingModel; EObject root = existingModel;
while(root.eContainer() != null) { while(root.eContainer() != null) {
root = root.eContainer(); root = root.eContainer();
} }
ITopLevelElement topLevelElement =
IPersistencyService.getInstance().getTopLevelElementFor(existingModel);
final int maxID = getLargestID(root); final int maxID = getLargestID(root);
if(maxID > 0) { if(maxID > 0) {
topLevelElement.runAsCommand(() -> { generateMissingIDs(object, maxID);
generateMissingIDs(object, maxID);
});
} }
} }
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment