/*
 * ALMA - Atacama Large Millimeter Array
 * (c) European Southern Observatory, 2002
 * (c) Associated Universities Inc., 2002
 * Copyright by ESO (in the framework of the ALMA collaboration),
 * Copyright by AUI (in the framework of the ALMA collaboration),
 * All rights reserved.
 * 
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 * 
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY, without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 * 
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
 * MA 02111-1307  USA
 *
 * Warning!
 *  -------------------------------------------------------------------- 
 * | This is generated code!  Do not modify this file.                  |
 * | If you do, all changes will be lost when the file is re-generated. |
 *  --------------------------------------------------------------------
 *
 * File FocusRow.cpp
 */
 
#include <vector>
#include <set>

#include <alma/ASDM/ASDM.h>
#include <alma/ASDM/FocusRow.h>
#include <alma/ASDM/FocusTable.h>

#include <alma/ASDM/AntennaTable.h>
#include <alma/ASDM/AntennaRow.h>

#include <alma/ASDM/FocusModelTable.h>
#include <alma/ASDM/FocusModelRow.h>
	

using asdm::ASDM;
using asdm::FocusRow;
using asdm::FocusTable;

using asdm::AntennaTable;
using asdm::AntennaRow;

using asdm::FocusModelTable;
using asdm::FocusModelRow;


#include <alma/ASDM/Parser.h>

#include <alma/ASDM/EnumerationParser.h>
#include <alma/ASDM/ASDMValuesParser.h>
 
#include <alma/ASDM/InvalidArgumentException.h>

using namespace std;

namespace asdm {
	FocusRow::~FocusRow() {
	}

	/**
	 * Return the table to which this row belongs.
	 */
	FocusTable &FocusRow::getTable() const {
		return table;
	}

	bool FocusRow::isAdded() const {
		return hasBeenAdded;
	}	

	void FocusRow::isAdded(bool added) {
		hasBeenAdded = added;
	}
	
#ifndef WITHOUT_ACS
	using asdmIDL::FocusRowIDL;
#endif
	
#ifndef WITHOUT_ACS
	/**
	 * Return this row in the form of an IDL struct.
	 * @return The values of this row as a FocusRowIDL struct.
	 */
	FocusRowIDL *FocusRow::toIDL() const {
		FocusRowIDL *x = new FocusRowIDL ();
		
		// Fill the IDL structure.
	
		
	
  		
		
		
			
		x->timeInterval = timeInterval.toIDLArrayTimeInterval();
			
		
	

	
  		
		
		
			
				
		x->focusTracking = focusTracking;
 				
 			
		
	

	
  		
		
		
			
		x->focusOffset.length(focusOffset.size());
		for (unsigned int i = 0; i < focusOffset.size(); ++i) {
			
			x->focusOffset[i] = focusOffset.at(i).toIDLLength();
			
	 	}
			
		
	

	
  		
		
		
			
		x->focusRotationOffset.length(focusRotationOffset.size());
		for (unsigned int i = 0; i < focusRotationOffset.size(); ++i) {
			
			x->focusRotationOffset[i] = focusRotationOffset.at(i).toIDLAngle();
			
	 	}
			
		
	

	
  		
		
		x->measuredFocusPositionExists = measuredFocusPositionExists;
		
		
			
		x->measuredFocusPosition.length(measuredFocusPosition.size());
		for (unsigned int i = 0; i < measuredFocusPosition.size(); ++i) {
			
			x->measuredFocusPosition[i] = measuredFocusPosition.at(i).toIDLLength();
			
	 	}
			
		
	

	
  		
		
		x->measuredFocusRotationExists = measuredFocusRotationExists;
		
		
			
		x->measuredFocusRotation.length(measuredFocusRotation.size());
		for (unsigned int i = 0; i < measuredFocusRotation.size(); ++i) {
			
			x->measuredFocusRotation[i] = measuredFocusRotation.at(i).toIDLAngle();
			
	 	}
			
		
	

	
	
		
	
  	
 		
		
	 	
			
		x->antennaId = antennaId.toIDLTag();
			
	 	 		
  	

	
  	
 		
		
	 	
			
				
		x->focusModelId = focusModelId;
 				
 			
	 	 		
  	

	
		
	

	

		
		return x;
	
	}
	
	void FocusRow::toIDL(asdmIDL::FocusRowIDL& x) const {
		// Set the x's fields.
	
		
	
  		
		
		
			
		x.timeInterval = timeInterval.toIDLArrayTimeInterval();
			
		
	

	
  		
		
		
			
				
		x.focusTracking = focusTracking;
 				
 			
		
	

	
  		
		
		
			
		x.focusOffset.length(focusOffset.size());
		for (unsigned int i = 0; i < focusOffset.size(); ++i) {
			
			x.focusOffset[i] = focusOffset.at(i).toIDLLength();
			
	 	}
			
		
	

	
  		
		
		
			
		x.focusRotationOffset.length(focusRotationOffset.size());
		for (unsigned int i = 0; i < focusRotationOffset.size(); ++i) {
			
			x.focusRotationOffset[i] = focusRotationOffset.at(i).toIDLAngle();
			
	 	}
			
		
	

	
  		
		
		x.measuredFocusPositionExists = measuredFocusPositionExists;
		
		
			
		x.measuredFocusPosition.length(measuredFocusPosition.size());
		for (unsigned int i = 0; i < measuredFocusPosition.size(); ++i) {
			
			x.measuredFocusPosition[i] = measuredFocusPosition.at(i).toIDLLength();
			
	 	}
			
		
	

	
  		
		
		x.measuredFocusRotationExists = measuredFocusRotationExists;
		
		
			
		x.measuredFocusRotation.length(measuredFocusRotation.size());
		for (unsigned int i = 0; i < measuredFocusRotation.size(); ++i) {
			
			x.measuredFocusRotation[i] = measuredFocusRotation.at(i).toIDLAngle();
			
	 	}
			
		
	

	
	
		
	
  	
 		
		
	 	
			
		x.antennaId = antennaId.toIDLTag();
			
	 	 		
  	

	
  	
 		
		
	 	
			
				
		x.focusModelId = focusModelId;
 				
 			
	 	 		
  	

	
		
	

	

	
	}
#endif
	

#ifndef WITHOUT_ACS
	/**
	 * Fill the values of this row from the IDL struct FocusRowIDL.
	 * @param x The IDL struct containing the values used to fill this row.
	 */
	void FocusRow::setFromIDL (FocusRowIDL x){
		try {
		// Fill the values from x.
	
		
	
		
		
			
		setTimeInterval(ArrayTimeInterval (x.timeInterval));
			
 		
		
	

	
		
		
			
		setFocusTracking(x.focusTracking);
  			
 		
		
	

	
		
		
			
		focusOffset .clear();
		for (unsigned int i = 0; i <x.focusOffset.length(); ++i) {
			
			focusOffset.push_back(Length (x.focusOffset[i]));
			
		}
			
  		
		
	

	
		
		
			
		focusRotationOffset .clear();
		for (unsigned int i = 0; i <x.focusRotationOffset.length(); ++i) {
			
			focusRotationOffset.push_back(Angle (x.focusRotationOffset[i]));
			
		}
			
  		
		
	

	
		
		measuredFocusPositionExists = x.measuredFocusPositionExists;
		if (x.measuredFocusPositionExists) {
		
		
			
		measuredFocusPosition .clear();
		for (unsigned int i = 0; i <x.measuredFocusPosition.length(); ++i) {
			
			measuredFocusPosition.push_back(Length (x.measuredFocusPosition[i]));
			
		}
			
  		
		
		}
		
	

	
		
		measuredFocusRotationExists = x.measuredFocusRotationExists;
		if (x.measuredFocusRotationExists) {
		
		
			
		measuredFocusRotation .clear();
		for (unsigned int i = 0; i <x.measuredFocusRotation.length(); ++i) {
			
			measuredFocusRotation.push_back(Angle (x.measuredFocusRotation[i]));
			
		}
			
  		
		
		}
		
	

	
	
		
	
		
		
			
		setAntennaId(Tag (x.antennaId));
			
 		
		
	

	
		
		
			
		setFocusModelId(x.focusModelId);
  			
 		
		
	

	
		
	

	

		} catch (const IllegalAccessException &err) {
			throw ConversionException (err.getMessage(),"Focus");
		}
	}
#endif
	
	/**
	 * Return this row in the form of an XML string.
	 * @return The values of this row as an XML string.
	 */
	string FocusRow::toXML() const {
		string buf;
		buf.append("<row> \n");
		
	
		
  	
 		
		
		Parser::toXML(timeInterval, "timeInterval", buf);
		
		
	

  	
 		
		
		Parser::toXML(focusTracking, "focusTracking", buf);
		
		
	

  	
 		
		
		Parser::toXML(focusOffset, "focusOffset", buf);
		
		
	

  	
 		
		
		Parser::toXML(focusRotationOffset, "focusRotationOffset", buf);
		
		
	

  	
 		
		if (measuredFocusPositionExists) {
		
		
		Parser::toXML(measuredFocusPosition, "measuredFocusPosition", buf);
		
		
		}
		
	

  	
 		
		if (measuredFocusRotationExists) {
		
		
		Parser::toXML(measuredFocusRotation, "measuredFocusRotation", buf);
		
		
		}
		
	

	
	
		
  	
 		
		
		Parser::toXML(antennaId, "antennaId", buf);
		
		
	

  	
 		
		
		Parser::toXML(focusModelId, "focusModelId", buf);
		
		
	

	
		
	

	

		
		buf.append("</row>\n");
		return buf;
	}

	/**
	 * Fill the values of this row from an XML string 
	 * that was produced by the toXML() method.
	 * @param x The XML string being used to set the values of this row.
	 */
	void FocusRow::setFromXML (string rowDoc) {
		Parser row(rowDoc);
		string s = "";
		try {
	
		
	
  		
			
	  	setTimeInterval(Parser::getArrayTimeInterval("timeInterval","Focus",rowDoc));
			
		
	

	
  		
			
	  	setFocusTracking(Parser::getBoolean("focusTracking","Focus",rowDoc));
			
		
	

	
  		
			
					
	  	setFocusOffset(Parser::get1DLength("focusOffset","Focus",rowDoc));
	  			
	  		
		
	

	
  		
			
					
	  	setFocusRotationOffset(Parser::get1DAngle("focusRotationOffset","Focus",rowDoc));
	  			
	  		
		
	

	
  		
        if (row.isStr("<measuredFocusPosition>")) {
			
								
	  		setMeasuredFocusPosition(Parser::get1DLength("measuredFocusPosition","Focus",rowDoc));
	  			
	  		
		}
 		
	

	
  		
        if (row.isStr("<measuredFocusRotation>")) {
			
								
	  		setMeasuredFocusRotation(Parser::get1DAngle("measuredFocusRotation","Focus",rowDoc));
	  			
	  		
		}
 		
	

	
	
		
	
  		
			
	  	setAntennaId(Parser::getTag("antennaId","Antenna",rowDoc));
			
		
	

	
  		
			
	  	setFocusModelId(Parser::getInteger("focusModelId","Focus",rowDoc));
			
		
	

	
		
	

	

		} catch (const IllegalAccessException &err) {
			throw ConversionException (err.getMessage(),"Focus");
		}
	}
	
	void FocusRow::toBin(EndianOSStream& eoss) {
	
	
	
	
		
	antennaId.toBin(eoss);
		
	

	
	
		
	timeInterval.toBin(eoss);
		
	

	
	
		
						
			eoss.writeBoolean(focusTracking);
				
		
	

	
	
		
	Length::toBin(focusOffset, eoss);
		
	

	
	
		
	Angle::toBin(focusRotationOffset, eoss);
		
	

	
	
		
						
			eoss.writeInt(focusModelId);
				
		
	


	
	
	eoss.writeBoolean(measuredFocusPositionExists);
	if (measuredFocusPositionExists) {
	
	
	
		
	Length::toBin(measuredFocusPosition, eoss);
		
	

	}

	eoss.writeBoolean(measuredFocusRotationExists);
	if (measuredFocusRotationExists) {
	
	
	
		
	Angle::toBin(measuredFocusRotation, eoss);
		
	

	}

	}
	
void FocusRow::antennaIdFromBin(EndianIStream& eis) {
		
	
		
		
		antennaId =  Tag::fromBin(eis);
		
	
	
}
void FocusRow::timeIntervalFromBin(EndianIStream& eis) {
		
	
		
		
		timeInterval =  ArrayTimeInterval::fromBin(eis);
		
	
	
}
void FocusRow::focusTrackingFromBin(EndianIStream& eis) {
		
	
	
		
			
		focusTracking =  eis.readBoolean();
			
		
	
	
}
void FocusRow::focusOffsetFromBin(EndianIStream& eis) {
		
	
		
		
			
	
	focusOffset = Length::from1DBin(eis);	
	

		
	
	
}
void FocusRow::focusRotationOffsetFromBin(EndianIStream& eis) {
		
	
		
		
			
	
	focusRotationOffset = Angle::from1DBin(eis);	
	

		
	
	
}
void FocusRow::focusModelIdFromBin(EndianIStream& eis) {
		
	
	
		
			
		focusModelId =  eis.readInt();
			
		
	
	
}

void FocusRow::measuredFocusPositionFromBin(EndianIStream& eis) {
		
	measuredFocusPositionExists = eis.readBoolean();
	if (measuredFocusPositionExists) {
		
	
		
		
			
	
	measuredFocusPosition = Length::from1DBin(eis);	
	

		
	

	}
	
}
void FocusRow::measuredFocusRotationFromBin(EndianIStream& eis) {
		
	measuredFocusRotationExists = eis.readBoolean();
	if (measuredFocusRotationExists) {
		
	
		
		
			
	
	measuredFocusRotation = Angle::from1DBin(eis);	
	

		
	

	}
	
}
	
	
	FocusRow* FocusRow::fromBin(EndianIStream& eis, FocusTable& table, const vector<string>& attributesSeq) {
		FocusRow* row = new  FocusRow(table);
		
		map<string, FocusAttributeFromBin>::iterator iter ;
		for (unsigned int i = 0; i < attributesSeq.size(); i++) {
			iter = row->fromBinMethods.find(attributesSeq.at(i));
			if (iter != row->fromBinMethods.end()) {
				(row->*(row->fromBinMethods[ attributesSeq.at(i) ] ))(eis);			
			}
			else {
				BinaryAttributeReaderFunctor* functorP = table.getUnknownAttributeBinaryReader(attributesSeq.at(i));
				if (functorP)
					(*functorP)(eis);
				else
					throw ConversionException("There is not method to read an attribute '"+attributesSeq.at(i)+"'.", "FocusTable");
			}
				
		}				
		return row;
	}

	//
	// A collection of methods to set the value of the attributes from their textual value in the XML representation
	// of one row.
	//
	
	// Convert a string into an Tag 
	void FocusRow::antennaIdFromText(const string & s) {
		 
          
		antennaId = ASDMValuesParser::parse<Tag>(s);
          
		
	}
	
	
	// Convert a string into an ArrayTimeInterval 
	void FocusRow::timeIntervalFromText(const string & s) {
		 
          
		timeInterval = ASDMValuesParser::parse<ArrayTimeInterval>(s);
          
		
	}
	
	
	// Convert a string into an boolean 
	void FocusRow::focusTrackingFromText(const string & s) {
		 
          
		focusTracking = ASDMValuesParser::parse<bool>(s);
          
		
	}
	
	
	// Convert a string into an Length 
	void FocusRow::focusOffsetFromText(const string & s) {
		 
          
		focusOffset = ASDMValuesParser::parse1D<Length>(s);
          
		
	}
	
	
	// Convert a string into an Angle 
	void FocusRow::focusRotationOffsetFromText(const string & s) {
		 
          
		focusRotationOffset = ASDMValuesParser::parse1D<Angle>(s);
          
		
	}
	
	
	// Convert a string into an int 
	void FocusRow::focusModelIdFromText(const string & s) {
		 
          
		focusModelId = ASDMValuesParser::parse<int>(s);
          
		
	}
	

	
	// Convert a string into an Length 
	void FocusRow::measuredFocusPositionFromText(const string & s) {
		measuredFocusPositionExists = true;
		 
          
		measuredFocusPosition = ASDMValuesParser::parse1D<Length>(s);
          
		
	}
	
	
	// Convert a string into an Angle 
	void FocusRow::measuredFocusRotationFromText(const string & s) {
		measuredFocusRotationExists = true;
		 
          
		measuredFocusRotation = ASDMValuesParser::parse1D<Angle>(s);
          
		
	}
	
	
	
	void FocusRow::fromText(const std::string& attributeName, const std::string&  t) {
		map<string, FocusAttributeFromText>::iterator iter;
		if ((iter = fromTextMethods.find(attributeName)) == fromTextMethods.end())
			throw ConversionException("I do not know what to do with '"+attributeName+"' and its content '"+t+"' (while parsing an XML document)", "FocusTable");
		(this->*(iter->second))(t);
	}
			
	////////////////////////////////////////////////
	// Intrinsic Table Attributes getters/setters //
	////////////////////////////////////////////////
	
	

	
 	/**
 	 * Get timeInterval.
 	 * @return timeInterval as ArrayTimeInterval
 	 */
 	ArrayTimeInterval FocusRow::getTimeInterval() const {
	
  		return timeInterval;
 	}

 	/**
 	 * Set timeInterval with the specified ArrayTimeInterval.
 	 * @param timeInterval The ArrayTimeInterval value to which timeInterval is to be set.
 	 
 	
 		
 	 * @throw IllegalAccessException If an attempt is made to change this field after is has been added to the table.
 	 	
 	 */
 	void FocusRow::setTimeInterval (ArrayTimeInterval timeInterval)  {
  	
  	
  		if (hasBeenAdded) {
 		
			throw IllegalAccessException("timeInterval", "Focus");
		
  		}
  	
 		this->timeInterval = timeInterval;
	
 	}
	
	

	

	
 	/**
 	 * Get focusTracking.
 	 * @return focusTracking as bool
 	 */
 	bool FocusRow::getFocusTracking() const {
	
  		return focusTracking;
 	}

 	/**
 	 * Set focusTracking with the specified bool.
 	 * @param focusTracking The bool value to which focusTracking is to be set.
 	 
 	
 		
 	 */
 	void FocusRow::setFocusTracking (bool focusTracking)  {
  	
  	
  		if (hasBeenAdded) {
 		
  		}
  	
 		this->focusTracking = focusTracking;
	
 	}
	
	

	

	
 	/**
 	 * Get focusOffset.
 	 * @return focusOffset as std::vector<Length >
 	 */
 	std::vector<Length > FocusRow::getFocusOffset() const {
	
  		return focusOffset;
 	}

 	/**
 	 * Set focusOffset with the specified std::vector<Length >.
 	 * @param focusOffset The std::vector<Length > value to which focusOffset is to be set.
 	 
 	
 		
 	 */
 	void FocusRow::setFocusOffset (std::vector<Length > focusOffset)  {
  	
  	
  		if (hasBeenAdded) {
 		
  		}
  	
 		this->focusOffset = focusOffset;
	
 	}
	
	

	

	
 	/**
 	 * Get focusRotationOffset.
 	 * @return focusRotationOffset as std::vector<Angle >
 	 */
 	std::vector<Angle > FocusRow::getFocusRotationOffset() const {
	
  		return focusRotationOffset;
 	}

 	/**
 	 * Set focusRotationOffset with the specified std::vector<Angle >.
 	 * @param focusRotationOffset The std::vector<Angle > value to which focusRotationOffset is to be set.
 	 
 	
 		
 	 */
 	void FocusRow::setFocusRotationOffset (std::vector<Angle > focusRotationOffset)  {
  	
  	
  		if (hasBeenAdded) {
 		
  		}
  	
 		this->focusRotationOffset = focusRotationOffset;
	
 	}
	
	

	
	/**
	 * The attribute measuredFocusPosition is optional. Return true if this attribute exists.
	 * @return true if and only if the measuredFocusPosition attribute exists. 
	 */
	bool FocusRow::isMeasuredFocusPositionExists() const {
		return measuredFocusPositionExists;
	}
	

	
 	/**
 	 * Get measuredFocusPosition, which is optional.
 	 * @return measuredFocusPosition as std::vector<Length >
 	 * @throw IllegalAccessException If measuredFocusPosition does not exist.
 	 */
 	std::vector<Length > FocusRow::getMeasuredFocusPosition() const  {
		if (!measuredFocusPositionExists) {
			throw IllegalAccessException("measuredFocusPosition", "Focus");
		}
	
  		return measuredFocusPosition;
 	}

 	/**
 	 * Set measuredFocusPosition with the specified std::vector<Length >.
 	 * @param measuredFocusPosition The std::vector<Length > value to which measuredFocusPosition is to be set.
 	 
 	
 	 */
 	void FocusRow::setMeasuredFocusPosition (std::vector<Length > measuredFocusPosition) {
	
 		this->measuredFocusPosition = measuredFocusPosition;
	
		measuredFocusPositionExists = true;
	
 	}
	
	
	/**
	 * Mark measuredFocusPosition, which is an optional field, as non-existent.
	 */
	void FocusRow::clearMeasuredFocusPosition () {
		measuredFocusPositionExists = false;
	}
	

	
	/**
	 * The attribute measuredFocusRotation is optional. Return true if this attribute exists.
	 * @return true if and only if the measuredFocusRotation attribute exists. 
	 */
	bool FocusRow::isMeasuredFocusRotationExists() const {
		return measuredFocusRotationExists;
	}
	

	
 	/**
 	 * Get measuredFocusRotation, which is optional.
 	 * @return measuredFocusRotation as std::vector<Angle >
 	 * @throw IllegalAccessException If measuredFocusRotation does not exist.
 	 */
 	std::vector<Angle > FocusRow::getMeasuredFocusRotation() const  {
		if (!measuredFocusRotationExists) {
			throw IllegalAccessException("measuredFocusRotation", "Focus");
		}
	
  		return measuredFocusRotation;
 	}

 	/**
 	 * Set measuredFocusRotation with the specified std::vector<Angle >.
 	 * @param measuredFocusRotation The std::vector<Angle > value to which measuredFocusRotation is to be set.
 	 
 	
 	 */
 	void FocusRow::setMeasuredFocusRotation (std::vector<Angle > measuredFocusRotation) {
	
 		this->measuredFocusRotation = measuredFocusRotation;
	
		measuredFocusRotationExists = true;
	
 	}
	
	
	/**
	 * Mark measuredFocusRotation, which is an optional field, as non-existent.
	 */
	void FocusRow::clearMeasuredFocusRotation () {
		measuredFocusRotationExists = false;
	}
	

	
	///////////////////////////////////////////////
	// Extrinsic Table Attributes getters/setters//
	///////////////////////////////////////////////
	
	

	
 	/**
 	 * Get antennaId.
 	 * @return antennaId as Tag
 	 */
 	Tag FocusRow::getAntennaId() const {
	
  		return antennaId;
 	}

 	/**
 	 * Set antennaId with the specified Tag.
 	 * @param antennaId The Tag value to which antennaId is to be set.
 	 
 	
 		
 	 * @throw IllegalAccessException If an attempt is made to change this field after is has been added to the table.
 	 	
 	 */
 	void FocusRow::setAntennaId (Tag antennaId)  {
  	
  	
  		if (hasBeenAdded) {
 		
			throw IllegalAccessException("antennaId", "Focus");
		
  		}
  	
 		this->antennaId = antennaId;
	
 	}
	
	

	

	
 	/**
 	 * Get focusModelId.
 	 * @return focusModelId as int
 	 */
 	int FocusRow::getFocusModelId() const {
	
  		return focusModelId;
 	}

 	/**
 	 * Set focusModelId with the specified int.
 	 * @param focusModelId The int value to which focusModelId is to be set.
 	 
 	
 		
 	 */
 	void FocusRow::setFocusModelId (int focusModelId)  {
  	
  	
  		if (hasBeenAdded) {
 		
  		}
  	
 		this->focusModelId = focusModelId;
	
 	}
	
	


	//////////////////////////////////////
	// Links Attributes getters/setters //
	//////////////////////////////////////
	
	
	
	
		

	/**
	 * Returns the pointer to the row in the Antenna table having Antenna.antennaId == antennaId
	 * @return a AntennaRow*
	 * 
	 
	 */
	 AntennaRow* FocusRow::getAntennaUsingAntennaId() {
	 
	 	return table.getContainer().getAntenna().getRowByKey(antennaId);
	 }
	 

	

	
	
	
		

	// ===> Slice link from a row of Focus table to a collection of row of FocusModel table.
	
	/**
	 * Get the collection of row in the FocusModel table having their attribut focusModelId == this->focusModelId
	 */
	vector <FocusModelRow *> FocusRow::getFocusModels() {
		
			return table.getContainer().getFocusModel().getRowByFocusModelId(focusModelId);
		
	}
	

	

	
	/**
	 * Create a FocusRow.
	 * <p>
	 * This constructor is private because only the
	 * table can create rows.  All rows know the table
	 * to which they belong.
	 * @param table The table to which this row belongs.
	 */ 
	FocusRow::FocusRow (FocusTable &t) : table(t) {
		hasBeenAdded = false;
		
	
	

	

	

	

	
		measuredFocusPositionExists = false;
	

	
		measuredFocusRotationExists = false;
	

	
	

	

	
	
	
	

	

	

	

	

	

	
	
	 fromBinMethods["antennaId"] = &FocusRow::antennaIdFromBin; 
	 fromBinMethods["timeInterval"] = &FocusRow::timeIntervalFromBin; 
	 fromBinMethods["focusTracking"] = &FocusRow::focusTrackingFromBin; 
	 fromBinMethods["focusOffset"] = &FocusRow::focusOffsetFromBin; 
	 fromBinMethods["focusRotationOffset"] = &FocusRow::focusRotationOffsetFromBin; 
	 fromBinMethods["focusModelId"] = &FocusRow::focusModelIdFromBin; 
		
	
	 fromBinMethods["measuredFocusPosition"] = &FocusRow::measuredFocusPositionFromBin; 
	 fromBinMethods["measuredFocusRotation"] = &FocusRow::measuredFocusRotationFromBin; 
	
	
	
	
				 
	fromTextMethods["antennaId"] = &FocusRow::antennaIdFromText;
		 
	
				 
	fromTextMethods["timeInterval"] = &FocusRow::timeIntervalFromText;
		 
	
				 
	fromTextMethods["focusTracking"] = &FocusRow::focusTrackingFromText;
		 
	
				 
	fromTextMethods["focusOffset"] = &FocusRow::focusOffsetFromText;
		 
	
				 
	fromTextMethods["focusRotationOffset"] = &FocusRow::focusRotationOffsetFromText;
		 
	
				 
	fromTextMethods["focusModelId"] = &FocusRow::focusModelIdFromText;
		 
	

	 
				
	fromTextMethods["measuredFocusPosition"] = &FocusRow::measuredFocusPositionFromText;
		 	
	 
				
	fromTextMethods["measuredFocusRotation"] = &FocusRow::measuredFocusRotationFromText;
		 	
		
	}
	
	FocusRow::FocusRow (FocusTable &t, FocusRow *row) : table(t) {
		hasBeenAdded = false;
		
		if (row == 0) {
	
	
	

	

	

	

	
		measuredFocusPositionExists = false;
	

	
		measuredFocusRotationExists = false;
	

	
	

	
		
		}
		else {
	
		
			antennaId = row->antennaId;
		
			timeInterval = row->timeInterval;
		
		
		
		
			focusTracking = row->focusTracking;
		
			focusOffset = row->focusOffset;
		
			focusRotationOffset = row->focusRotationOffset;
		
			focusModelId = row->focusModelId;
		
		
		
		
		if (row->measuredFocusPositionExists) {
			measuredFocusPosition = row->measuredFocusPosition;		
			measuredFocusPositionExists = true;
		}
		else
			measuredFocusPositionExists = false;
		
		if (row->measuredFocusRotationExists) {
			measuredFocusRotation = row->measuredFocusRotation;		
			measuredFocusRotationExists = true;
		}
		else
			measuredFocusRotationExists = false;
		
		}
		
		 fromBinMethods["antennaId"] = &FocusRow::antennaIdFromBin; 
		 fromBinMethods["timeInterval"] = &FocusRow::timeIntervalFromBin; 
		 fromBinMethods["focusTracking"] = &FocusRow::focusTrackingFromBin; 
		 fromBinMethods["focusOffset"] = &FocusRow::focusOffsetFromBin; 
		 fromBinMethods["focusRotationOffset"] = &FocusRow::focusRotationOffsetFromBin; 
		 fromBinMethods["focusModelId"] = &FocusRow::focusModelIdFromBin; 
			
	
		 fromBinMethods["measuredFocusPosition"] = &FocusRow::measuredFocusPositionFromBin; 
		 fromBinMethods["measuredFocusRotation"] = &FocusRow::measuredFocusRotationFromBin; 
			
	}

	
	bool FocusRow::compareNoAutoInc(Tag antennaId, ArrayTimeInterval timeInterval, bool focusTracking, std::vector<Length > focusOffset, std::vector<Angle > focusRotationOffset, int focusModelId) {
		bool result;
		result = true;
		
	
		
		result = result && (this->antennaId == antennaId);
		
		if (!result) return false;
	

	
		
		result = result && (this->timeInterval.overlaps(timeInterval));
		
		if (!result) return false;
	

	
		
		result = result && (this->focusTracking == focusTracking);
		
		if (!result) return false;
	

	
		
		result = result && (this->focusOffset == focusOffset);
		
		if (!result) return false;
	

	
		
		result = result && (this->focusRotationOffset == focusRotationOffset);
		
		if (!result) return false;
	

	
		
		result = result && (this->focusModelId == focusModelId);
		
		if (!result) return false;
	

		return result;
	}	
	
	
	
	bool FocusRow::compareRequiredValue(bool focusTracking, std::vector<Length > focusOffset, std::vector<Angle > focusRotationOffset, int focusModelId) {
		bool result;
		result = true;
		
	
		if (!(this->focusTracking == focusTracking)) return false;
	

	
		if (!(this->focusOffset == focusOffset)) return false;
	

	
		if (!(this->focusRotationOffset == focusRotationOffset)) return false;
	

	
		if (!(this->focusModelId == focusModelId)) return false;
	

		return result;
	}
	
	
	/**
	 * Return true if all required attributes of the value part are equal to their homologues
	 * in x and false otherwise.
	 *

	 * @param x a pointer on the FocusRow whose required attributes of the value part 

	 * will be compared with those of this.
	 * @return a boolean.
	 */
	bool FocusRow::equalByRequiredValue(FocusRow*  x ) {
		
			
		if (this->focusTracking != x->focusTracking) return false;
			
		if (this->focusOffset != x->focusOffset) return false;
			
		if (this->focusRotationOffset != x->focusRotationOffset) return false;
			
		if (this->focusModelId != x->focusModelId) return false;
			
		
		return true;
	}	
	
/*
	 map<string, FocusAttributeFromBin> FocusRow::initFromBinMethods() {
		map<string, FocusAttributeFromBin> result;
		
		result["antennaId"] = &FocusRow::antennaIdFromBin;
		result["timeInterval"] = &FocusRow::timeIntervalFromBin;
		result["focusTracking"] = &FocusRow::focusTrackingFromBin;
		result["focusOffset"] = &FocusRow::focusOffsetFromBin;
		result["focusRotationOffset"] = &FocusRow::focusRotationOffsetFromBin;
		result["focusModelId"] = &FocusRow::focusModelIdFromBin;
		
		
		result["measuredFocusPosition"] = &FocusRow::measuredFocusPositionFromBin;
		result["measuredFocusRotation"] = &FocusRow::measuredFocusRotationFromBin;
			
		
		return result;	
	}
*/	
} // End namespace asdm