/*******************************************************************************
 * Copyright (c) 2017, MDH 
 *
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v2.0
 * which accompanies this distribution, and is available at
 * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
 *
 * SPDX-License-Identifier: EPL-2.0
 *  
 * Contributors:
 *   Faiz Ul Muram <faiz.ul.muram@mdh.se>
 *   Initial API and implementation and/or initial documentation
 *******************************************************************************/
package org.eclipse.opencert.process2assurproj.assuranceproject.etl;

public class EPF2ARGTransParameters {

	private String pluginID;
	private String etlTransform;
	
	// Parameters for input model
	//MCP
	private String libName;
	private String libModelFilePath;
	private boolean libReadOnLoad;
	private boolean libStoreOnDisposal;
	
	//CRF problem	
	private String epfMetamodelURI;
	private String epfMetamodelFilePath;
	
	//MCP
	
	// Paremeters for ouput arg model
	
	private String argName;
	private String argMetamodelURI;
	//CRF problem	
	private String argMetaModelFilePath;
	//CRF problem	
	private String argModelFilePath;
	private boolean argReadOnLoad;
	private boolean argStoreOnDisposal;
	

	public String getPluginID() {
		return pluginID;
	}

	public void setPluginID(String pluginID) {
		this.pluginID = pluginID;
	}

	public String getEtlTransform() {
		return etlTransform;
	}

	public void setEtlTransform(String etlTransform) {
		this.etlTransform = etlTransform;
	}

	public String getSourceName() {
		return libName;
	}

	public void setSourceName(String sourceName) {
		this.libName = sourceName;
	}

	public String getEPFMetaModelURI() {
		return epfMetamodelURI;
	}

	public void setEPFMetaModelURI(String sourceMetaModelURI) {
		this.epfMetamodelURI = sourceMetaModelURI;
	}


	public String getEPFMetaModelFilePath() {
		return epfMetamodelFilePath;
	}

	public void setEPFMetaModelFilePath(String sourceMetaModelFilePath) {
		this.epfMetamodelFilePath = sourceMetaModelFilePath;
	}
	
	public String getLibModelFilePath() {
		return libModelFilePath;
	}

	public void setLibModelFilePath(String sourceModelFilePath) {
		this.libModelFilePath = sourceModelFilePath;
	}

	public boolean isLibReadOnLoad() {
		return libReadOnLoad;
	}

	public void setLibReadOnLoad(boolean sourceReadOnLoad) {
		this.libReadOnLoad = sourceReadOnLoad;
	}

	public boolean isLibStoreOnDisposal() {
		return libStoreOnDisposal;
	}

	public void setLibStoreOnDisposal(boolean sourceStoreOnDisposal) {
		this.libStoreOnDisposal = sourceStoreOnDisposal;
	}

	public String getLibName() {
		return libName;
	}

	public void setLibName(String libName) {
		this.libName = libName;
	}

	public String getArgName() {
		return argName;
	}

	public void setArgName(String argName) {
		this.argName = argName;
	}

	public String getArgMetamodelURI() {
		return argMetamodelURI;
	}

	public void setArgMetamodelURI(String argMetamodelURI) {
		this.argMetamodelURI = argMetamodelURI;
	}

	public String getArgMetamodelFilePath() {
		return argMetaModelFilePath;
	}

	public void setArgMetaModelFilePath(String argMetaModelFilePath) {
		this.argMetaModelFilePath = argMetaModelFilePath;
	}

	public String getArgModelFilePath() {
		return argModelFilePath;
	}

	public void setArgModelFilePath(String argModelFilePath) {
		this.argModelFilePath = argModelFilePath;
	}

	public boolean isArgReadOnLoad() {
		return argReadOnLoad;
	}

	public void setArgReadOnLoad(boolean argReadOnLoad) {
		this.argReadOnLoad = argReadOnLoad;
	}

	public boolean isArgStoreOnDisposal() {
		return argStoreOnDisposal;
	}

	public void setArgStoreOnDisposal(boolean argStoreOnDisposal) {
		this.argStoreOnDisposal = argStoreOnDisposal;
	}

}
