// Path: plugins/fr.inria.atlanmod.emftocsp/src/fr/inria/atlanmod/emftocsp/ICspCodeGenerator.java
// public interface ICspCodeGenerator<R, P, C, AS, AT, OP, CT> {
// 
//   void setModelReader(IModelReader<R, P, C, AS, AT, OP> modelReader);
//   
//   void setProperties(List<IModelProperty> properties);
//   
//   void setModelElementsDomains(Map<String, String> elementsDomain);
//   
//   void setOclParser(IOclParser<CT, R> oclParser);
//   
//   void setOclDocument(IFile oclDocument);
//   
//   void setModel(R modelResource);
//   
//   String getCspCode() throws ProcessingException;
//   
//   String getCspCodeFileExtension();  
// }
// 
// Path: plugins/fr.inria.atlanmod.emftocsp/src/fr/inria/atlanmod/emftocsp/IModelProperty.java
// public interface IModelProperty {
// 
//   void setName(String name);
//   
//   String getName();
//   
//   void setTargetModelElementsNames(List<String> modelElementsNames);
//   
//   List<String> getTargetModelElementsNames();
//     
//   String toString();
// }
// 
// Path: plugins/fr.inria.atlanmod.emftocsp/src/fr/inria/atlanmod/emftocsp/IModelReader.java
// public interface IModelReader<R, P, C, AS, AT, OP> {
// 
// 	public R getModelResource(); 
// 
// 	public List<P> getPackages();
// 
// 	public List<C> getClasses();
// 
// 	public List<String> getClassesNames();
// 
// 	public List<AT> getClassAttributes(C c);
// 
// 	public List<OP> getClassOperations(C c);  
// 
// 	public List<C> getClassSubtypes(List<C> classList, C c);
// 	
// 	public void getClassSubtypes(List<C> cList, C c, List<C> subTypes);
// 
// 	public C getBaseClass(C c);  
// 
// 	public List<AS> getAssociations();
// 
// 	public List<String> getAssociationsNames();
// 
// 	public String getAssociationName(AS as);
// 
// 	public String getAssociationEndName(AT asEnd);
// 
// 	public List<String> getAssociationNamesOfNonAbsClasses();
// 
// 	public R getResource();
// }
// 
// Path: plugins/fr.inria.atlanmod.emftocsp/src/fr/inria/atlanmod/emftocsp/IOclParser.java
// public interface IOclParser<CT, R> {
//   
//   CT parseOclConstraint(Object context, String key, String constraint);
//   
//   List<CT> parseOclDocument(IFile oclDocument, R modelResource) throws ProcessingException;
//   
//   List<CT> parseEmbeddedConstraints(R modelResource);
//   
//   List<CT> parseModelConstraints(R modelResource, IFile oclDocument) throws ProcessingException;
//   
//   List<String> getModelConstraintsNames(R modelResource, IFile oclDocument) throws ProcessingException;
// 
//   List<String> getModelInvariantNames(R modelResource, IFile oclDocument) throws ProcessingException;
// }
// 
// Path: plugins/fr.inria.atlanmod.emftocsp/src/fr/inria/atlanmod/emftocsp/ProcessingException.java
// public class ProcessingException extends RuntimeException {
// 
// 	private static final long serialVersionUID = 1L;
// 
// 	public ProcessingException(Throwable e) {
// 		super(e);
// 	}
// 
// 	public ProcessingException(String msg, Throwable th) {
// 		super(msg, th);
// 	}
// 
// 	public ProcessingException(String string) {
// 		super(string);
// 	}
// 
// }


import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.eclipse.core.resources.IFile;
import org.eclipse.emf.ecore.EAttribute;
import org.eclipse.emf.ecore.EClass;
import org.eclipse.emf.ecore.EOperation;
import org.eclipse.emf.ecore.EPackage;
import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.ocl.ecore.Constraint;
import fr.inria.atlanmod.emftocsp.ICspCodeGenerator;
import fr.inria.atlanmod.emftocsp.IModelProperty;
import fr.inria.atlanmod.emftocsp.IModelReader;
import fr.inria.atlanmod.emftocsp.IOclParser;
import fr.inria.atlanmod.emftocsp.ProcessingException;
    this.elementsDomain = (HashMap <String, String>)elementsDomain;
  }

  protected Map<String, String> getModelElementsDomain() {
    return elementsDomain;
  }
    
  @Override
  public void setOclParser(IOclParser<Constraint, Resource> oclParser) {
    this.oclParser = oclParser;
  }
  
  protected IOclParser<Constraint, Resource> getOclParser() {
    return oclParser;
  }
  
  @Override
  public void setOclDocument(IFile oclDocument) {
    this.oclDocument = oclDocument;
  }
  
  protected IFile getOclDocument() {
    return oclDocument;
  } 
  
  @Override
  public void setModel(Resource modelResource) {
    this.modelResource = modelResource;
  }
  
// Path: plugins/fr.inria.atlanmod.emftocsp/src/fr/inria/atlanmod/emftocsp/ICspCodeGenerator.java
// public interface ICspCodeGenerator<R, P, C, AS, AT, OP, CT> {
// 
//   void setModelReader(IModelReader<R, P, C, AS, AT, OP> modelReader);
//   
//   void setProperties(List<IModelProperty> properties);
//   
//   void setModelElementsDomains(Map<String, String> elementsDomain);
//   
//   void setOclParser(IOclParser<CT, R> oclParser);
//   
//   void setOclDocument(IFile oclDocument);
//   
//   void setModel(R modelResource);
//   
//   String getCspCode() throws ProcessingException;
//   
//   String getCspCodeFileExtension();  
// }
// 
// Path: plugins/fr.inria.atlanmod.emftocsp/src/fr/inria/atlanmod/emftocsp/IModelProperty.java
// public interface IModelProperty {
// 
//   void setName(String name);
//   
//   String getName();
//   
//   void setTargetModelElementsNames(List<String> modelElementsNames);
//   
//   List<String> getTargetModelElementsNames();
//     
//   String toString();
// }
// 
// Path: plugins/fr.inria.atlanmod.emftocsp/src/fr/inria/atlanmod/emftocsp/IModelReader.java
// public interface IModelReader<R, P, C, AS, AT, OP> {
// 
// 	public R getModelResource(); 
// 
// 	public List<P> getPackages();
// 
// 	public List<C> getClasses();
// 
// 	public List<String> getClassesNames();
// 
// 	public List<AT> getClassAttributes(C c);
// 
// 	public List<OP> getClassOperations(C c);  
// 
// 	public List<C> getClassSubtypes(List<C> classList, C c);
// 	
// 	public void getClassSubtypes(List<C> cList, C c, List<C> subTypes);
// 
// 	public C getBaseClass(C c);  
// 
// 	public List<AS> getAssociations();
// 
// 	public List<String> getAssociationsNames();
// 
// 	public String getAssociationName(AS as);
// 
// 	public String getAssociationEndName(AT asEnd);
// 
// 	public List<String> getAssociationNamesOfNonAbsClasses();
// 
// 	public R getResource();
// }
// 
// Path: plugins/fr.inria.atlanmod.emftocsp/src/fr/inria/atlanmod/emftocsp/IOclParser.java
// public interface IOclParser<CT, R> {
//   
//   CT parseOclConstraint(Object context, String key, String constraint);
//   
//   List<CT> parseOclDocument(IFile oclDocument, R modelResource) throws ProcessingException;
//   
//   List<CT> parseEmbeddedConstraints(R modelResource);
//   
//   List<CT> parseModelConstraints(R modelResource, IFile oclDocument) throws ProcessingException;
//   
//   List<String> getModelConstraintsNames(R modelResource, IFile oclDocument) throws ProcessingException;
// 
//   List<String> getModelInvariantNames(R modelResource, IFile oclDocument) throws ProcessingException;
// }
// 
// Path: plugins/fr.inria.atlanmod.emftocsp/src/fr/inria/atlanmod/emftocsp/ProcessingException.java
// public class ProcessingException extends RuntimeException {
// 
// 	private static final long serialVersionUID = 1L;
// 
// 	public ProcessingException(Throwable e) {
// 		super(e);
// 	}
// 
// 	public ProcessingException(String msg, Throwable th) {
// 		super(msg, th);
// 	}
// 
// 	public ProcessingException(String string) {
// 		super(string);
// 	}
// 
// }


// Path: plugins/fr.inria.atlanmod.emftocsp.emf/src/fr/inria/atlanmod/emftocsp/emf/impl/EmfCspCodeGenerator.java
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.eclipse.core.resources.IFile;
import org.eclipse.emf.ecore.EAttribute;
import org.eclipse.emf.ecore.EClass;
import org.eclipse.emf.ecore.EOperation;
import org.eclipse.emf.ecore.EPackage;
import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.ocl.ecore.Constraint;
import fr.inria.atlanmod.emftocsp.ICspCodeGenerator;
import fr.inria.atlanmod.emftocsp.IModelProperty;
import fr.inria.atlanmod.emftocsp.IModelReader;
import fr.inria.atlanmod.emftocsp.IOclParser;
import fr.inria.atlanmod.emftocsp.ProcessingException;

    this.elementsDomain = (HashMap <String, String>)elementsDomain;
  }

  protected Map<String, String> getModelElementsDomain() {
    return elementsDomain;
  }
    
  @Override
  public void setOclParser(IOclParser<Constraint, Resource> oclParser) {
    this.oclParser = oclParser;
  }
  
  protected IOclParser<Constraint, Resource> getOclParser() {
    return oclParser;
  }
  
  @Override
  public void setOclDocument(IFile oclDocument) {
    this.oclDocument = oclDocument;
  }
  
  protected IFile getOclDocument() {
    return oclDocument;
  } 
  
  @Override
  public void setModel(Resource modelResource) {
    this.modelResource = modelResource;
  }
  
  protected Resource getModel() {