// Path: plugins/fr.inria.atlanmod.emftocsp/src/fr/inria/atlanmod/emftocsp/IModelBuilder.java
// public interface IModelBuilder <R, P, C, AS, AT, OP,ST> {
// 	
// 	boolean isAssoc(String s);
// 	void generateInstance(String path);
// 	void decorticateResult();
// 	void setSolution(ST solution);
// 	boolean solutionIsEmpty();
// 
// 
// 	
// 
// 	}
// 
// 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/modelbuilder/AssocStruct.java
// public class AssocStruct extends Struct {
// 
// 	public AssocStruct(CompoundTerm cp, String functor) {
// 		super(functor);
// 		// TODO Auto-generated constructor stub
// 		srcOid=(Integer) cp.arg(1);
// 		trgOid=(Integer) cp.arg(2);
// 	}
// 	private int srcOid;
// 	private int trgOid;
// 	@Override
// 	public String toString() {
// 		return "AssocStruct [srcOid=" + srcOid + ", trgOid=" + trgOid + "]";
// 	}
// 	public int getSrcOid() {
// 		return srcOid;
// 	}
// 	public void setSrcOid(int srcOid) {
// 		this.srcOid = srcOid;
// 	}
// 	public int getTrgOid() {
// 		return trgOid;
// 	}
// 	public void setTrgOid(int trgOid) {
// 		this.trgOid = trgOid;
// 	}
// 	
// 	
// }
// 
// Path: plugins/fr.inria.atlanmod.emftocsp/src/fr/inria/atlanmod/emftocsp/modelbuilder/ObjectStruct.java
// public class ObjectStruct extends Struct {
// 	
// 	private List<Field> fields;
// 	
// 	public List<Field> getFields() {
// 		return fields;
// 	}
// 
// 
// 	public void setFields(List<Field> fields) {
// 		this.fields = fields;
// 	}
// 
// 
// 	public ObjectStruct(CompoundTerm cp, String functor) {
// 		super(functor);
// 		// TODO Auto-generated constructor stub
// 		fields = new LinkedList<Field>();
// 		for (int i=1; i<= cp.arity(); i++)
// 			fields.add(new Field(cp.arg(i),i));
// 	}
// 
// 
// 	public int getOid(){
// 		return (Integer) fields.get(0).getValue() ;
// 		
// 	}
// 	@Override
// 	public String toString() {
// 		return "ObjectStruct [fields=" + fields + "]";
// 	}
// }
// 
// Path: plugins/fr.inria.atlanmod.emftocsp/src/fr/inria/atlanmod/emftocsp/modelbuilder/Struct.java
// public class Struct {
// 	
// 	public Struct(String functor) {
// 		name=functor;
// 	}
// 	private String name;
// 	
// 	public String getName() {
// 		return name;
// 	}
// 	public void setName(String name) {
// 		this.name = name;
// 	}
// 
// }


import java.util.List;
import javax.annotation.Generated;
import org.eclipse.core.resources.IFolder;
import fr.inria.atlanmod.emftocsp.IModelBuilder;
import fr.inria.atlanmod.emftocsp.IModelReader;
import fr.inria.atlanmod.emftocsp.modelbuilder.AssocStruct;
import fr.inria.atlanmod.emftocsp.modelbuilder.ObjectStruct;
import fr.inria.atlanmod.emftocsp.modelbuilder.Struct;
/*******************************************************************************
 * Copyright (c) 2013 INRIA Rennes Bretagne-Atlantique.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 * 
 * Contributors:
 *     INRIA Rennes Bretagne-Atlantique - initial API and implementation
 *******************************************************************************/
package fr.inria.atlanmod.emftocsp.impl;







/**
 * @author <a href="mailto:amine.benelallam@inria.fr">Amine Benelallam</a>
 *
 */
public abstract class ModelBuilder<R, P, C, AS, AT, OP,ST> implements IModelBuilder<R, P, C, AS, AT, OP,ST> {
	
	protected ST solution;
// Path: plugins/fr.inria.atlanmod.emftocsp/src/fr/inria/atlanmod/emftocsp/IModelBuilder.java
// public interface IModelBuilder <R, P, C, AS, AT, OP,ST> {
// 	
// 	boolean isAssoc(String s);
// 	void generateInstance(String path);
// 	void decorticateResult();
// 	void setSolution(ST solution);
// 	boolean solutionIsEmpty();
// 
// 
// 	
// 
// 	}
// 
// 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/modelbuilder/AssocStruct.java
// public class AssocStruct extends Struct {
// 
// 	public AssocStruct(CompoundTerm cp, String functor) {
// 		super(functor);
// 		// TODO Auto-generated constructor stub
// 		srcOid=(Integer) cp.arg(1);
// 		trgOid=(Integer) cp.arg(2);
// 	}
// 	private int srcOid;
// 	private int trgOid;
// 	@Override
// 	public String toString() {
// 		return "AssocStruct [srcOid=" + srcOid + ", trgOid=" + trgOid + "]";
// 	}
// 	public int getSrcOid() {
// 		return srcOid;
// 	}
// 	public void setSrcOid(int srcOid) {
// 		this.srcOid = srcOid;
// 	}
// 	public int getTrgOid() {
// 		return trgOid;
// 	}
// 	public void setTrgOid(int trgOid) {
// 		this.trgOid = trgOid;
// 	}
// 	
// 	
// }
// 
// Path: plugins/fr.inria.atlanmod.emftocsp/src/fr/inria/atlanmod/emftocsp/modelbuilder/ObjectStruct.java
// public class ObjectStruct extends Struct {
// 	
// 	private List<Field> fields;
// 	
// 	public List<Field> getFields() {
// 		return fields;
// 	}
// 
// 
// 	public void setFields(List<Field> fields) {
// 		this.fields = fields;
// 	}
// 
// 
// 	public ObjectStruct(CompoundTerm cp, String functor) {
// 		super(functor);
// 		// TODO Auto-generated constructor stub
// 		fields = new LinkedList<Field>();
// 		for (int i=1; i<= cp.arity(); i++)
// 			fields.add(new Field(cp.arg(i),i));
// 	}
// 
// 
// 	public int getOid(){
// 		return (Integer) fields.get(0).getValue() ;
// 		
// 	}
// 	@Override
// 	public String toString() {
// 		return "ObjectStruct [fields=" + fields + "]";
// 	}
// }
// 
// Path: plugins/fr.inria.atlanmod.emftocsp/src/fr/inria/atlanmod/emftocsp/modelbuilder/Struct.java
// public class Struct {
// 	
// 	public Struct(String functor) {
// 		name=functor;
// 	}
// 	private String name;
// 	
// 	public String getName() {
// 		return name;
// 	}
// 	public void setName(String name) {
// 		this.name = name;
// 	}
// 
// }


// Path: plugins/fr.inria.atlanmod.emftocsp/src/fr/inria/atlanmod/emftocsp/impl/ModelBuilder.java
import java.util.List;
import javax.annotation.Generated;
import org.eclipse.core.resources.IFolder;
import fr.inria.atlanmod.emftocsp.IModelBuilder;
import fr.inria.atlanmod.emftocsp.IModelReader;
import fr.inria.atlanmod.emftocsp.modelbuilder.AssocStruct;
import fr.inria.atlanmod.emftocsp.modelbuilder.ObjectStruct;
import fr.inria.atlanmod.emftocsp.modelbuilder.Struct;

/*******************************************************************************
 * Copyright (c) 2013 INRIA Rennes Bretagne-Atlantique.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 * 
 * Contributors:
 *     INRIA Rennes Bretagne-Atlantique - initial API and implementation
 *******************************************************************************/
package fr.inria.atlanmod.emftocsp.impl;







/**
 * @author <a href="mailto:amine.benelallam@inria.fr">Amine Benelallam</a>
 *
 */
public abstract class ModelBuilder<R, P, C, AS, AT, OP,ST> implements IModelBuilder<R, P, C, AS, AT, OP,ST> {
	
	protected ST solution;
	protected IModelReader<R, P, C, AS, AT, OP> modelReader;