package eu.dnetlib.espas.gui.shared;

import com.google.gwt.user.client.rpc.IsSerializable;

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

public class ModelDocumentation implements IsSerializable{
	
	public static final Map<String, String> documentationMap = new HashMap<String, String>();
	
	public static final String individual = "individual";
	public static final String organization = "organization";
	public static final String platform = "platform";
	public static final String project = "project";
	public static final String instrument = "instrument";
	public static final String operation = "operation";
	public static final String computation = "computation";
	public static final String acquisition = "acquisition";
	public static final String compositeProcess = "compositeProcess";
	public static final String observationCollection = "observationCollection";
	public static final String observation = "observation";
	
	public static final String contactInfo = "contactInfo";
	
	public static final String subPlatform = "subPlatform";
	public static final String relatedParty = "relatedParty";
	public static final String location = "location";
	public static final String locationName = "locationName";
	public static final String locationGml = "locationGml";
	public static final String citation = "citation";
	
	public static final String subProject = "subProject";
	public static final String keywordSets = "keywordSets";
	public static final String keywordSet = "keywordSet";
	public static final String keyword = "keyword";
	public static final String codeList = "codeList";
	public static final String codeListValue = "codeListValue";
	
	public static final String status = "status";
	public static final String subOperation = "subOperation";

	public static final String computationKind = "computationKind";
	public static final String algorithm = "algorithm";
	public static final String software = "software";
	
	public static final String query = "query";
	public static final String subCollection = "subCollection";
	
	
	public static void loadDocumentationMap() {
		
		documentationMap.put(ModelDocumentation.individual, "An individual having a  particular role associated with a real world object.");
		documentationMap.put(ModelDocumentation.organization, "An organization having a  particular role associated with a real world object.");
		documentationMap.put(ModelDocumentation.platform, "A platform is an identifiable object which can either: i)bring the acquisition instrument(s) " +
				"to the appropriate environment (e.g aircraft, ground station); ii) create the appropriate environment for the  acquisition instrument(s) " +
				"(e.g a cloud chamber) ; or iii) provide the appropriate operational conditions to the instruments (e.g a ground station provides electricity) " +
				"in order to acquire the data according to the observation objectives.");
		documentationMap.put(ModelDocumentation.project, "An identifiable activity designed to accomplish a set of objectives. A typical sequence of data " +
				"capturing involves one or more projects for which a number of observations are conducted, using appropriate tools and methods, to produce data sets.");
		documentationMap.put(ModelDocumentation.instrument, "Designations for the measuring instruments.");
		documentationMap.put(ModelDocumentation.operation, "Information about a platform operation - e.g. flight of an aircraft - which is needed for the data acquisition.");
		documentationMap.put(ModelDocumentation.computation, "A process component which involves only numerical computation.");
		documentationMap.put(ModelDocumentation.acquisition, "A process component which uses at least one instrument to provide a result (i.e., data)." +
				"An acquisition might involve platforms and platform operations.");
		documentationMap.put(ModelDocumentation.compositeProcess, "A process consisting of more than one components. A component shall be either of acquisition or " +
				"computation type. The aggregation may include only acquisition or computation types, or both.");
		documentationMap.put(ModelDocumentation.observationCollection, "A collection of existing observations. Observations can be aggregated in collections organised " +
				"with significantly more flexibility than including only those observations conducted in support of the same  project.");
		documentationMap.put(ModelDocumentation.observation, "Observation is the act that results in the estimation of the value(s) (i.e. data) of a property (e.g. " +
				"magnetic field density) using a designated process, such as a sensor, instrument, algorithm or process chain.");
		
		documentationMap.put(ModelDocumentation.individual + "." + ModelDocumentation.contactInfo, "Means of communication with this individual.");
		
		documentationMap.put(ModelDocumentation.organization + "." + ModelDocumentation.contactInfo, "Means of communication with this organisation.");
		
		documentationMap.put(ModelDocumentation.platform + "." + ModelDocumentation.subPlatform, "A platform can be an aggregation of platforms. The members of the " +
				"aggregation are indicated in this field.");
		documentationMap.put(ModelDocumentation.platform + "." + ModelDocumentation.relatedParty, "Information regarding organisations and/or individuals related to the platform.");
		documentationMap.put(ModelDocumentation.platform + "." + ModelDocumentation.location, "The location of the platform given by a geometric or geographic description or both. " +
				"Location is only applicable to static platforms or geostationary satellites.");
		documentationMap.put(ModelDocumentation.platform + "." + ModelDocumentation.location + "." + ModelDocumentation.locationName, "Geographic description.");
		documentationMap.put(ModelDocumentation.platform + "." + ModelDocumentation.location + "." + ModelDocumentation.locationGml, "Geometric description.");
		documentationMap.put(ModelDocumentation.platform + "." + ModelDocumentation.citation, "Reference to documentation describing the platform.");
		
		documentationMap.put(ModelDocumentation.project + "." + ModelDocumentation.relatedParty, "Information regarding organisations and/or individuals related to the project.");
		documentationMap.put(ModelDocumentation.project + "." + ModelDocumentation.citation, "Reference to documentation describing the project.");
		documentationMap.put(ModelDocumentation.project + "." + ModelDocumentation.subProject, "A project can be an aggregation of projects. The members of the aggregation " +
				"are indicated in this field.");
		documentationMap.put(ModelDocumentation.project + "." + ModelDocumentation.keywordSets +  "." + ModelDocumentation.keyword,
				"Common-use word(s) or phrase(s) used to describe the subject.");
		documentationMap.put(ModelDocumentation.project + "." + ModelDocumentation.keywordSets + "." + ModelDocumentation.codeList,
				"Method used to group similar keywords (e.g. ,discipline)");
		documentationMap.put(ModelDocumentation.project + "." + ModelDocumentation.keywordSets + "." + ModelDocumentation.codeListValue,
				"Name of the formally registered thesaurus or a similar authoritative source of keywords");
		
		
		documentationMap.put(ModelDocumentation.instrument + "." + ModelDocumentation.relatedParty, "Information regarding organisations and/or individuals " +
				"related to the instrument.");
		documentationMap.put(ModelDocumentation.instrument + "." + ModelDocumentation.citation, "Reference to documentation describing the instrument.");
		
		
		documentationMap.put(ModelDocumentation.operation + "." + ModelDocumentation.relatedParty, "Information regarding organisations and/or individuals related " +
				"to the operation.");
		documentationMap.put(ModelDocumentation.operation + "." + ModelDocumentation.location, "The location of the platform operation given  by a geometric or geographic " +
				"description or both.");
		documentationMap.put(ModelDocumentation.operation + "." + ModelDocumentation.location + "." + ModelDocumentation.locationName, "Geographic description.");
		documentationMap.put(ModelDocumentation.operation + "." + ModelDocumentation.location + "." + ModelDocumentation.locationGml, "Geometric description.");
		documentationMap.put(ModelDocumentation.operation + "." + ModelDocumentation.citation, "Reference to documentation describing the operation.");
		documentationMap.put(ModelDocumentation.operation + "." + ModelDocumentation.status, "Status of the platform operation." +
				"description or both.");
		documentationMap.put(ModelDocumentation.operation + "." + ModelDocumentation.subOperation, "An operation can be an aggregation of operations. The members of " +
				"the aggregation are indicated in this field.");
		
		
		documentationMap.put(ModelDocumentation.computation + "." + ModelDocumentation.relatedParty, "Information regarding organisations and/or individuals related to " +
				"the computation.");
		documentationMap.put(ModelDocumentation.computation + "." + ModelDocumentation.citation, "Reference to documentation describing the computation.");
		documentationMap.put(ModelDocumentation.computation + "." + ModelDocumentation.computationKind, "This field indicates whether the computation is an algorithm or a software.");
		documentationMap.put(ModelDocumentation.computation + "." + ModelDocumentation.computationKind + "." + ModelDocumentation.citation, "Reference to documentation " +
				"describing the software.");
		documentationMap.put(ModelDocumentation.computation + "." + ModelDocumentation.computationKind + "." + ModelDocumentation.algorithm + "." + ModelDocumentation.citation, 
				"Reference to documentation describing the algorithm.");
		
		
		documentationMap.put(ModelDocumentation.acquisition + "." + ModelDocumentation.relatedParty, "Information regarding organisations and/or individuals related to " +
				"the acquisition.");
		documentationMap.put(ModelDocumentation.acquisition + "." + ModelDocumentation.citation, "Reference to documentation describing the acquisition.");
		
		
		documentationMap.put(ModelDocumentation.compositeProcess + "." + ModelDocumentation.relatedParty, "Information regarding organisations and/or individuals related to " +
				"the compositeProcess.");
		documentationMap.put(ModelDocumentation.compositeProcess + "." + ModelDocumentation.citation, "Reference to documentation describing the composite process.");
		
		
		documentationMap.put(ModelDocumentation.observationCollection + "." + ModelDocumentation.relatedParty, "Information regarding organisations and/or individuals related " +
				"to the observation collection.");
		documentationMap.put(ModelDocumentation.observationCollection + "." + ModelDocumentation.query, "Query that describes the observations which belong to this collection.");
		documentationMap.put(ModelDocumentation.observationCollection + "." + ModelDocumentation.subCollection, "An observation collection can be an aggregation of observation collections. " +
				"The members of the aggregation are indicated in this field.");
		
		
		documentationMap.put(ModelDocumentation.observation + "." + ModelDocumentation.relatedParty, "Information regarding organisations and/or individuals related to " +
				"the observation.");
		documentationMap.put(ModelDocumentation.observation + "." + ModelDocumentation.citation, "Reference to documentation describing the observation.");
	}
}
