/*******************************************************************************
 * Copyright 2014 University of Southern California
 * 
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 * 
 * 	http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 * 
 * This code was developed by the Information Integration Group as part 
 * of the Karma project at the Information Sciences Institute of the 
 * University of Southern California.  For more information, publications, 
 * and related projects, please see: http://www.isi.edu/integration
 ******************************************************************************/
package edu.isi.karma.kr2rml.mapping;

import java.util.HashMap;
import java.util.Map;

import org.json.JSONArray;

import edu.isi.karma.kr2rml.KR2RMLVersion;
import edu.isi.karma.kr2rml.SubjectMap;
import edu.isi.karma.kr2rml.formatter.KR2RMLColumnNameFormatter;
import edu.isi.karma.kr2rml.planning.TriplesMap;
import edu.isi.karma.rep.metadata.WorksheetProperties.SourceTypes;

public class KR2RMLMapping extends R2RMLMapping{
	
	private KR2RMLVersion version;
	private KR2RMLMappingAuxillaryInformation auxInfo;
	private Map<String, SubjectMap> subjectMapIndex;
	private Map<String, TriplesMap> triplesMapIndex;
	private JSONArray worksheetHistory;
	private String worksheetHistoryString;
	private KR2RMLColumnNameFormatter formatter;
	private boolean isR2RMLCompatible;
	private boolean isRMLCompatible;
	private SourceTypes sourceType; 
	
	public KR2RMLMapping(R2RMLMappingIdentifier id, KR2RMLVersion version)
	{
		super(id);
		this.version = version;
		this.auxInfo = new KR2RMLMappingAuxillaryInformation();	
		this.subjectMapIndex = new HashMap<String, SubjectMap>();
		this.triplesMapIndex = new HashMap<String, TriplesMap>();
	}

	public KR2RMLVersion getVersion()
	{
		return version;
	}
	
	public KR2RMLMappingAuxillaryInformation getAuxInfo() {
		return auxInfo;
	}
	
	public Map<String, SubjectMap> getSubjectMapIndex() {
		return subjectMapIndex;
	}

	public Map<String, TriplesMap> getTriplesMapIndex() {
		return triplesMapIndex;
	}

	public JSONArray getWorksheetHistory() {
		return worksheetHistory;
	}

	public void setWorksheetHistory(JSONArray worksheetHistory) {
		this.worksheetHistory = worksheetHistory;
		worksheetHistoryString = worksheetHistory.toString();
	}

	public void setColumnNameFormatter(KR2RMLColumnNameFormatter formatter) {
		this.formatter = formatter;
	}
	public KR2RMLColumnNameFormatter getColumnNameFormatter()
	{
		return formatter;
	}

	public boolean isR2RMLCompatible() {
		return isR2RMLCompatible;
	}

	public boolean isRMLCompatible()
	{
		return isRMLCompatible;
	}
	
	public void setR2RMLCompatible(boolean isR2RMLCompatible) {
		this.isR2RMLCompatible = isR2RMLCompatible;
	}

	public void setRMLCompatible(boolean isRMLCompatible)
	{
		this.isRMLCompatible = isRMLCompatible;
	}

	public SourceTypes getSourceType() {
		return sourceType;
	}

	public void setSourceType(SourceTypes sourceType) {
		this.sourceType = sourceType;
	}
	
	public String getWorksheetHistoryString() {
		return worksheetHistoryString;
	}
}
