blob: 8b21a311dd740cd809a7c60729948076ca7da019 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2008, 2012 IBM Corporation 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
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.bpel.compare.ui.annotation;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.WeakHashMap;
import org.eclipse.emf.compare.diff.metamodel.DiffElement;
import org.eclipse.emf.compare.diff.metamodel.DiffModel;
import org.eclipse.emf.compare.diff.service.DiffService;
import org.eclipse.emf.compare.match.metamodel.MatchModel;
import org.eclipse.emf.compare.match.service.MatchService;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.compare.CompareConfiguration;
public class AnnotationsStore {
private static AnnotationsStore instance;
private WeakHashMap<EObject, DiffElement> model2annotation =
new WeakHashMap<EObject, DiffElement>();
public HashMap<CompareConfiguration, List<DiffElement>> annotations = new HashMap<CompareConfiguration, List<DiffElement>>();
public static synchronized AnnotationsStore getInstance() {
if (instance == null) {
instance = new AnnotationsStore();
}
return instance;
}
/**
* Compares two models and stores all the changes.
* To get the change for certain element use {@link #getAnnotation(EObject)}
*
* This function should be used once for given <code>left</code>
* and <code>right</code> objects. Next call will override the result of
* the previous call.
*
* I.e. this function should not be used like that:
* annotate(left, right);
* annotate(left, right1);
*
* @param left
* @param right
*/
public void annotate(CompareConfiguration cc, EObject left, EObject right) {
try {
MatchModel match = MatchService.doMatch(left, right,
Collections.<String, Object> emptyMap());
DiffModel diff = DiffService.doDiff(match, false);
AnnotationSwitch as = new AnnotationSwitch();
model2annotation.putAll(as.getAnnotations(diff, match));
annotations.put(cc, as.annotations);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public DiffElement getAnnotation(EObject model) {
return model2annotation.get(model);
}
}