package controller.compare;
import java.util.ArrayList;
/**
* ComparerProvider Class, provides suitable comparer based on different diagram types
*
*/
public class ComparerProvider {
private static ComparerProvider instance = null;
private ArrayList<String> comparerLookUpTable = new ArrayList<String>();
/**
* Constructor, adding three kinds of diagrams in ArrayList
* for future checking
*/
private ComparerProvider(){
comparerLookUpTable.add("xmiClassDiagram");
comparerLookUpTable.add("ecoreClassDiagram");
comparerLookUpTable.add("xmiSequenceDiagram");
}
/**
* Instance provider
*
* @return ComparerProvider
*/
public static ComparerProvider getInstance(){
if(instance == null){
synchronized(ComparerProvider.class){
if(instance == null){
instance = new ComparerProvider();
}
}
}
return instance;
}
/**
* @param diagramType
* The type of input diagram
*
* @return comparer
* The instance of different Comparers
*/
public ComparerIntf createComparer(String diagramType)
{
ComparerIntf comparer = null;
if (!comparerLookUpTable.contains(diagramType))
{
return comparer;
}
else
{
if(diagramType.equals("xmiClassDiagram"))
{
comparer = new XmiClassDiagramComparer();
}
else if(diagramType.equals("ecoreClassDiagram"))
{
comparer = new EcoreClassDiagramComparer();
}
else if(diagramType.equals("xmiSequenceDiagram"))
{
comparer = new SequenceDiagramComparer();
}
}
return comparer;
}
}