package fr.inria.atlanmod.neo4emf.change.impl;
import org.eclipse.emf.ecore.EReference;
import fr.inria.atlanmod.neo4emf.INeo4emfObject;
import fr.inria.atlanmod.neo4emf.INeo4emfResource;
import fr.inria.atlanmod.neo4emf.change.IChangeLog;
import fr.inria.atlanmod.neo4emf.change.IChangeLogFactory;
public class ChangeLogFactory implements IChangeLogFactory {
public static int CHANGELOG_SIZE = 10;
public static void setChangeLogSize(int size) {
CHANGELOG_SIZE = size;
}
public static IChangeLogFactory init() {
if (eINSTANCE == null) {
return new ChangeLogFactory();
} else {
return eINSTANCE;
}
}
@Override
public IChangeLog<Entry> createChangeLog(INeo4emfResource resource) {
return new ChangeLog(CHANGELOG_SIZE,resource);
}
@Override
public Entry createAddLink(INeo4emfObject from, EReference eRef, INeo4emfObject to) {
if(eRef.getEOpposite() == null) {
// Unidirectional EReference
return new UnidirectionalAddLink(from, eRef, to);
}
else {
// Bidirectional EReference
return new BidirectionalAddLink(from, eRef, to);
}
}
@Override
public Entry createRemoveLink(INeo4emfObject from, EReference eRef, INeo4emfObject to) {
if(eRef.getEOpposite() == null) {
// Unidirectional EReference
return new UnidirectionalRemoveLink(from, eRef, to);
}
else {
// Bidirectional EReference
return new BidirectionalRemoveLink(from, eRef, to);
}
}
}