@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = { "entryID", "entryTitle", "dataSetCitation", "personnel", "discipline", "parameters", "isoTopicCategory", "keyword", "sensorName", "sourceName", "temporalCoverage",
        "paleoTemporalCoverage", "dataSetProgress", "spatialCoverage", "location", "dataResolution", "project", "quality", "accessConstraints", "useConstraints", "dataSetLanguage",
        "originatingCenter", "dataCenter", "distribution", "multimediaSample", "reference", "summary", "relatedURL", "parentDIF", "idnNode", "originatingMetadataNode", "metadataName",
        "metadataVersion", "difCreationDate", "lastDIFRevisionDate", "difRevisionHistory", "futureDIFReviewDate", "_private" })
@XmlRootElement(name = "DIF")
public class DIF {

  @XmlElement(name = "Entry_ID", required = true)
  protected String entryID;
  @XmlElement(name = "Entry_Title", required = true)
  protected String entryTitle;
  @XmlElement(name = "Data_Set_Citation")
  protected List<DataSetCitation> dataSetCitation;
  @XmlElement(name = "Personnel")
  protected List<Personnel> personnel;
  @XmlElement(name = "Discipline")
  protected List<Discipline> discipline;
  @XmlElement(name = "Parameters", required = true)
  protected List<Parameters> parameters;
  @XmlElement(name = "ISO_Topic_Category")
  protected List<String> isoTopicCategory;
  @XmlElement(name = "Keyword")
  protected List<String> keyword;
  @XmlElement(name = "Sensor_Name")
  protected List<SensorName> sensorName;
  @XmlElement(name = "Source_Name")
  protected List<SourceName> sourceName;
  @XmlElement(name = "Temporal_Coverage")
  protected List<TemporalCoverage> temporalCoverage;
  @XmlElement(name = "Paleo_Temporal_Coverage")
  protected List<PaleoTemporalCoverage> paleoTemporalCoverage;
  @XmlElement(name = "Data_Set_Progress")
  protected String dataSetProgress;
  @XmlElement(name = "Spatial_Coverage")
  protected List<SpatialCoverage> spatialCoverage;
  @XmlElement(name = "Location")
  protected List<Location> location;
  @XmlElement(name = "Data_Resolution")
  protected List<DataResolution> dataResolution;
  @XmlElement(name = "Project")
  protected List<Project> project;
  @XmlElement(name = "Quality")
  protected String quality;
  @XmlElement(name = "Access_Constraints")
  protected String accessConstraints;
  @XmlElement(name = "Use_Constraints")
  protected String useConstraints;
  @XmlElement(name = "Data_Set_Language")
  protected List<String> dataSetLanguage;
  @XmlElement(name = "Originating_Center")
  protected String originatingCenter;
  @XmlElement(name = "Data_Center", required = true)
  protected List<DataCenter> dataCenter;
  @XmlElement(name = "Distribution")
  protected List<Distribution> distribution;
  @XmlElement(name = "Multimedia_Sample")
  protected List<MultimediaSample> multimediaSample;
  @XmlElement(name = "Reference")
  protected List<Reference> reference;
  @XmlElement(name = "Summary", required = true)
  protected Summary summary;
  @XmlElement(name = "Related_URL")
  protected List<RelatedURL> relatedURL;
  @XmlElement(name = "Parent_DIF")
  protected List<String> parentDIF;
  @XmlElement(name = "IDN_Node")
  protected List<IDNNode> idnNode;
  @XmlElement(name = "Originating_Metadata_Node")
  protected String originatingMetadataNode;
  @XmlElement(name = "Metadata_Name", required = true)
  protected String metadataName;
  @XmlElement(name = "Metadata_Version", required = true)
  protected String metadataVersion;
  @XmlElement(name = "DIF_Creation_Date")
  protected String difCreationDate;
  @XmlElement(name = "Last_DIF_Revision_Date")
  protected String lastDIFRevisionDate;
  @XmlElement(name = "DIF_Revision_History")
  protected String difRevisionHistory;
  @XmlElement(name = "Future_DIF_Review_Date")
  protected String futureDIFReviewDate;
  @XmlElement(name = "Private")
  protected String _private;

  /**
   * Gets the value of the entryID property.
   * 
   * @return possible object is {@link String }
   * 
   */
  public String getEntryID() {
    return entryID;
  }

  /**
   * Sets the value of the entryID property.
   * 
   * @param value
   *          allowed object is {@link String }
   * 
   */
  public void setEntryID(String value) {
    this.entryID = value;
  }

  /**
   * Gets the value of the entryTitle property.
   * 
   * @return possible object is {@link String }
   * 
   */
  public String getEntryTitle() {
    return entryTitle;
  }

  /**
   * Sets the value of the entryTitle property.
   * 
   * @param value
   *          allowed object is {@link String }
   * 
   */
  public void setEntryTitle(String value) {
    this.entryTitle = value;
  }

  /**
   * Gets the value of the dataSetCitation property.
   * 
   * <p>
   * This accessor method returns a reference to the live list, not a snapshot.
   * Therefore any modification you make to the returned list will be present
   * inside the JAXB object. This is why there is not a <CODE>set</CODE> method
   * for the dataSetCitation property.
   * 
   * <p>
   * For example, to add a new item, do as follows:
   * 
   * <pre>
   * getDataSetCitation().add(newItem);
   * </pre>
   * 
   * 
   * <p>
   * Objects of the following type(s) are allowed in the list
   * {@link DataSetCitation }
   * 
   * @return the List of DataSetCitation's
   */
  public List<DataSetCitation> getDataSetCitation() {
    if (dataSetCitation == null) {
      dataSetCitation = new ArrayList<DataSetCitation>();
    }
    return this.dataSetCitation;
  }

  /**
   * Gets the value of the personnel property.
   * 
   * <p>
   * This accessor method returns a reference to the live list, not a snapshot.
   * Therefore any modification you make to the returned list will be present
   * inside the JAXB object. This is why there is not a <CODE>set</CODE> method
   * for the personnel property.
   * 
   * <p>
   * For example, to add a new item, do as follows:
   * 
   * <pre>
   * getPersonnel().add(newItem);
   * </pre>
   * 
   * 
   * <p>
   * Objects of the following type(s) are allowed in the list {@link Personnel }
   * 
   * @return the List of Personnel
   */
  public List<Personnel> getPersonnel() {
    if (personnel == null) {
      personnel = new ArrayList<Personnel>();
    }
    return this.personnel;
  }

  /**
   * Gets the value of the discipline property.
   * 
   * <p>
   * This accessor method returns a reference to the live list, not a snapshot.
   * Therefore any modification you make to the returned list will be present
   * inside the JAXB object. This is why there is not a <CODE>set</CODE> method
   * for the discipline property.
   * 
   * <p>
   * For example, to add a new item, do as follows:
   * 
   * <pre>
   * getDiscipline().add(newItem);
   * </pre>
   * 
   * 
   * <p>
   * Objects of the following type(s) are allowed in the list {@link Discipline }
   * 
   * @return the List of Disciplines
   */
  public List<Discipline> getDiscipline() {
    if (discipline == null) {
      discipline = new ArrayList<Discipline>();
    }
    return this.discipline;
  }

  /**
   * Gets the value of the parameters property.
   * 
   * <p>
   * This accessor method returns a reference to the live list, not a snapshot.
   * Therefore any modification you make to the returned list will be present
   * inside the JAXB object. This is why there is not a <CODE>set</CODE> method
   * for the parameters property.
   * 
   * <p>
   * For example, to add a new item, do as follows:
   * 
   * <pre>
   * getParameters().add(newItem);
   * </pre>
   * 
   * 
   * <p>
   * Objects of the following type(s) are allowed in the list {@link Parameters }
   * 
   * @return the List of Parameter's
   */
  public List<Parameters> getParameters() {
    if (parameters == null) {
      parameters = new ArrayList<Parameters>();
    }
    return this.parameters;
  }

  /**
   * Gets the value of the isoTopicCategory property.
   * 
   * <p>
   * This accessor method returns a reference to the live list, not a snapshot.
   * Therefore any modification you make to the returned list will be present
   * inside the JAXB object. This is why there is not a <CODE>set</CODE> method
   * for the isoTopicCategory property.
   * 
   * <p>
   * For example, to add a new item, do as follows:
   * 
   * <pre>
   * getISOTopicCategory().add(newItem);
   * </pre>
   * 
   * 
   * <p>
   * Objects of the following type(s) are allowed in the list {@link String }
   * 
   * @return the List of ISOTopicCategories
   */
  public List<String> getISOTopicCategory() {
    if (isoTopicCategory == null) {
      isoTopicCategory = new ArrayList<String>();
    }
    return this.isoTopicCategory;
  }

  /**
   * Gets the value of the keyword property.
   * 
   * <p>
   * This accessor method returns a reference to the live list, not a snapshot.
   * Therefore any modification you make to the returned list will be present
   * inside the JAXB object. This is why there is not a <CODE>set</CODE> method
   * for the keyword property.
   * 
   * <p>
   * For example, to add a new item, do as follows:
   * 
   * <pre>
   * getKeyword().add(newItem);
   * </pre>
   * 
   * 
   * <p>
   * Objects of the following type(s) are allowed in the list {@link String }
   * 
   * @return the List of Keywords
   */
  public List<String> getKeyword() {
    if (keyword == null) {
      keyword = new ArrayList<String>();
    }
    return this.keyword;
  }

  /**
   * Gets the value of the sensorName property.
   * 
   * <p>
   * This accessor method returns a reference to the live list, not a snapshot.
   * Therefore any modification you make to the returned list will be present
   * inside the JAXB object. This is why there is not a <CODE>set</CODE> method
   * for the sensorName property.
   * 
   * <p>
   * For example, to add a new item, do as follows:
   * 
   * <pre>
   * getSensorName().add(newItem);
   * </pre>
   * 
   * 
   * <p>
   * Objects of the following type(s) are allowed in the list {@link SensorName }
   * 
   * @return the List of SensorNames
   */
  public List<SensorName> getSensorName() {
    if (sensorName == null) {
      sensorName = new ArrayList<SensorName>();
    }
    return this.sensorName;
  }

  /**
   * Gets the value of the sourceName property.
   * 
   * <p>
   * This accessor method returns a reference to the live list, not a snapshot.
   * Therefore any modification you make to the returned list will be present
   * inside the JAXB object. This is why there is not a <CODE>set</CODE> method
   * for the sourceName property.
   * 
   * <p>
   * For example, to add a new item, do as follows:
   * 
   * <pre>
   * getSourceName().add(newItem);
   * </pre>
   * 
   * 
   * <p>
   * Objects of the following type(s) are allowed in the list {@link SourceName }
   * 
   * @return the List of SourceName's
   */
  public List<SourceName> getSourceName() {
    if (sourceName == null) {
      sourceName = new ArrayList<SourceName>();
    }
    return this.sourceName;
  }

  /**
   * Gets the value of the temporalCoverage property.
   * 
   * <p>
   * This accessor method returns a reference to the live list, not a snapshot.
   * Therefore any modification you make to the returned list will be present
   * inside the JAXB object. This is why there is not a <CODE>set</CODE> method
   * for the temporalCoverage property.
   * 
   * <p>
   * For example, to add a new item, do as follows:
   * 
   * <pre>
   * getTemporalCoverage().add(newItem);
   * </pre>
   * 
   * 
   * <p>
   * Objects of the following type(s) are allowed in the list
   * {@link TemporalCoverage }
   * 
   * @return the List of TemporalCoverage's
   */
  public List<TemporalCoverage> getTemporalCoverage() {
    if (temporalCoverage == null) {
      temporalCoverage = new ArrayList<TemporalCoverage>();
    }
    return this.temporalCoverage;
  }

  /**
   * Gets the value of the paleoTemporalCoverage property.
   * 
   * <p>
   * This accessor method returns a reference to the live list, not a snapshot.
   * Therefore any modification you make to the returned list will be present
   * inside the JAXB object. This is why there is not a <CODE>set</CODE> method
   * for the paleoTemporalCoverage property.
   * 
   * <p>
   * For example, to add a new item, do as follows:
   * 
   * <pre>
   * getPaleoTemporalCoverage().add(newItem);
   * </pre>
   * 
   * 
   * <p>
   * Objects of the following type(s) are allowed in the list
   * {@link PaleoTemporalCoverage }
   * 
   * @return the List of PaleoTemporalCoverage's
   */
  public List<PaleoTemporalCoverage> getPaleoTemporalCoverage() {
    if (paleoTemporalCoverage == null) {
      paleoTemporalCoverage = new ArrayList<PaleoTemporalCoverage>();
    }
    return this.paleoTemporalCoverage;
  }

  /**
   * Gets the value of the dataSetProgress property.
   * 
   * @return possible object is {@link String }
   * 
   */
  public String getDataSetProgress() {
    return dataSetProgress;
  }

  /**
   * Sets the value of the dataSetProgress property.
   * 
   * @param value
   *          allowed object is {@link String }
   * 
   */
  public void setDataSetProgress(String value) {
    this.dataSetProgress = value;
  }

  /**
   * Gets the value of the spatialCoverage property.
   * 
   * <p>
   * This accessor method returns a reference to the live list, not a snapshot.
   * Therefore any modification you make to the returned list will be present
   * inside the JAXB object. This is why there is not a <CODE>set</CODE> method
   * for the spatialCoverage property.
   * 
   * <p>
   * For example, to add a new item, do as follows:
   * 
   * <pre>
   * getSpatialCoverage().add(newItem);
   * </pre>
   * 
   * 
   * <p>
   * Objects of the following type(s) are allowed in the list
   * {@link SpatialCoverage }
   * 
   * @return the List of SpatialCoverage's
   */
  public List<SpatialCoverage> getSpatialCoverage() {
    if (spatialCoverage == null) {
      spatialCoverage = new ArrayList<SpatialCoverage>();
    }
    return this.spatialCoverage;
  }

  /**
   * Gets the value of the location property.
   * 
   * <p>
   * This accessor method returns a reference to the live list, not a snapshot.
   * Therefore any modification you make to the returned list will be present
   * inside the JAXB object. This is why there is not a <CODE>set</CODE> method
   * for the location property.
   * 
   * <p>
   * For example, to add a new item, do as follows:
   * 
   * <pre>
   * getLocation().add(newItem);
   * </pre>
   * 
   * 
   * <p>
   * Objects of the following type(s) are allowed in the list {@link Location }
   * 
   * @return the List of Location's
   */
  public List<Location> getLocation() {
    if (location == null) {
      location = new ArrayList<Location>();
    }
    return this.location;
  }

  /**
   * Gets the value of the dataResolution property.
   * 
   * <p>
   * This accessor method returns a reference to the live list, not a snapshot.
   * Therefore any modification you make to the returned list will be present
   * inside the JAXB object. This is why there is not a <CODE>set</CODE> method
   * for the dataResolution property.
   * 
   * <p>
   * For example, to add a new item, do as follows:
   * 
   * <pre>
   * getDataResolution().add(newItem);
   * </pre>
   * 
   * 
   * <p>
   * Objects of the following type(s) are allowed in the list
   * {@link DataResolution }
   * 
   * @return the List of Dataresolution's
   */
  public List<DataResolution> getDataResolution() {
    if (dataResolution == null) {
      dataResolution = new ArrayList<DataResolution>();
    }
    return this.dataResolution;
  }

  /**
   * Gets the value of the project property.
   * 
   * <p>
   * This accessor method returns a reference to the live list, not a snapshot.
   * Therefore any modification you make to the returned list will be present
   * inside the JAXB object. This is why there is not a <CODE>set</CODE> method
   * for the project property.
   * 
   * <p>
   * For example, to add a new item, do as follows:
   * 
   * <pre>
   * getProject().add(newItem);
   * </pre>
   * 
   * 
   * <p>
   * Objects of the following type(s) are allowed in the list {@link Project }
   * 
   * @return the List of Projects
   */
  public List<Project> getProject() {
    if (project == null) {
      project = new ArrayList<Project>();
    }
    return this.project;
  }

  /**
   * Gets the value of the quality property.
   * 
   * @return possible object is {@link String }
   * 
   */
  public String getQuality() {
    return quality;
  }

  /**
   * Sets the value of the quality property.
   * 
   * @param value
   *          allowed object is {@link String }
   * 
   */
  public void setQuality(String value) {
    this.quality = value;
  }

  /**
   * Gets the value of the accessConstraints property.
   * 
   * @return possible object is {@link String }
   * 
   */
  public String getAccessConstraints() {
    return accessConstraints;
  }

  /**
   * Sets the value of the accessConstraints property.
   * 
   * @param value
   *          allowed object is {@link String }
   * 
   */
  public void setAccessConstraints(String value) {
    this.accessConstraints = value;
  }

  /**
   * Gets the value of the useConstraints property.
   * 
   * @return possible object is {@link String }
   * 
   */
  public String getUseConstraints() {
    return useConstraints;
  }

  /**
   * Sets the value of the useConstraints property.
   * 
   * @param value
   *          allowed object is {@link String }
   * 
   */
  public void setUseConstraints(String value) {
    this.useConstraints = value;
  }

  /**
   * Gets the value of the dataSetLanguage property.
   * 
   * <p>
   * This accessor method returns a reference to the live list, not a snapshot.
   * Therefore any modification you make to the returned list will be present
   * inside the JAXB object. This is why there is not a <CODE>set</CODE> method
   * for the dataSetLanguage property.
   * 
   * <p>
   * For example, to add a new item, do as follows:
   * 
   * <pre>
   * getDataSetLanguage().add(newItem);
   * </pre>
   * 
   * 
   * <p>
   * Objects of the following type(s) are allowed in the list {@link String }
   * 
   * @return the List of DataSetLanguages
   */
  public List<String> getDataSetLanguage() {
    if (dataSetLanguage == null) {
      dataSetLanguage = new ArrayList<String>();
    }
    return this.dataSetLanguage;
  }

  /**
   * Gets the value of the originatingCenter property.
   * 
   * @return possible object is {@link String }
   * 
   */
  public String getOriginatingCenter() {
    return originatingCenter;
  }

  /**
   * Sets the value of the originatingCenter property.
   * 
   * @param value
   *          allowed object is {@link String }
   * 
   */
  public void setOriginatingCenter(String value) {
    this.originatingCenter = value;
  }

  /**
   * Gets the value of the dataCenter property.
   * 
   * <p>
   * This accessor method returns a reference to the live list, not a snapshot.
   * Therefore any modification you make to the returned list will be present
   * inside the JAXB object. This is why there is not a <CODE>set</CODE> method
   * for the dataCenter property.
   * 
   * <p>
   * For example, to add a new item, do as follows:
   * 
   * <pre>
   * getDataCenter().add(newItem);
   * </pre>
   * 
   * 
   * <p>
   * Objects of the following type(s) are allowed in the list {@link DataCenter }
   * 
   * @return the List of DataCenter's
   */
  public List<DataCenter> getDataCenter() {
    if (dataCenter == null) {
      dataCenter = new ArrayList<DataCenter>();
    }
    return this.dataCenter;
  }

  /**
   * Gets the value of the distribution property.
   * 
   * <p>
   * This accessor method returns a reference to the live list, not a snapshot.
   * Therefore any modification you make to the returned list will be present
   * inside the JAXB object. This is why there is not a <CODE>set</CODE> method
   * for the distribution property.
   * 
   * <p>
   * For example, to add a new item, do as follows:
   * 
   * <pre>
   * getDistribution().add(newItem);
   * </pre>
   * 
   * 
   * <p>
   * Objects of the following type(s) are allowed in the list
   * {@link Distribution }
   * 
   * @return the List of Distributions
   */
  public List<Distribution> getDistribution() {
    if (distribution == null) {
      distribution = new ArrayList<Distribution>();
    }
    return this.distribution;
  }

  /**
   * Gets the value of the multimediaSample property.
   * 
   * <p>
   * This accessor method returns a reference to the live list, not a snapshot.
   * Therefore any modification you make to the returned list will be present
   * inside the JAXB object. This is why there is not a <CODE>set</CODE> method
   * for the multimediaSample property.
   * 
   * <p>
   * For example, to add a new item, do as follows:
   * 
   * <pre>
   * getMultimediaSample().add(newItem);
   * </pre>
   * 
   * 
   * <p>
   * Objects of the following type(s) are allowed in the list
   * {@link MultimediaSample }
   * 
   * @return the List of MultimediaSample's
   */
  public List<MultimediaSample> getMultimediaSample() {
    if (multimediaSample == null) {
      multimediaSample = new ArrayList<MultimediaSample>();
    }
    return this.multimediaSample;
  }

  /**
   * Gets the value of the reference property.
   * 
   * <p>
   * This accessor method returns a reference to the live list, not a snapshot.
   * Therefore any modification you make to the returned list will be present
   * inside the JAXB object. This is why there is not a <CODE>set</CODE> method
   * for the reference property.
   * 
   * <p>
   * For example, to add a new item, do as follows:
   * 
   * <pre>
   * getReference().add(newItem);
   * </pre>
   * 
   * 
   * <p>
   * Objects of the following type(s) are allowed in the list {@link Reference }
   * 
   * @return the List of References
   */
  public List<Reference> getReference() {
    if (reference == null) {
      reference = new ArrayList<Reference>();
    }
    return this.reference;
  }

  /**
   * Gets the value of the summary property.
   * 
   * @return possible object is {@link Summary }
   * 
   */
  public Summary getSummary() {
    return summary;
  }

  /**
   * Sets the value of the summary property.
   * 
   * @param value
   *          allowed object is {@link Summary }
   * 
   */
  public void setSummary(Summary value) {
    this.summary = value;
  }

  /**
   * Gets the value of the relatedURL property.
   * 
   * <p>
   * This accessor method returns a reference to the live list, not a snapshot.
   * Therefore any modification you make to the returned list will be present
   * inside the JAXB object. This is why there is not a <CODE>set</CODE> method
   * for the relatedURL property.
   * 
   * <p>
   * For example, to add a new item, do as follows:
   * 
   * <pre>
   * getRelatedURL().add(newItem);
   * </pre>
   * 
   * 
   * <p>
   * Objects of the following type(s) are allowed in the list {@link RelatedURL }
   * 
   * @return the List of RelatedURLs
   */
  public List<RelatedURL> getRelatedURL() {
    if (relatedURL == null) {
      relatedURL = new ArrayList<RelatedURL>();
    }
    return this.relatedURL;
  }

  /**
   * Gets the value of the parentDIF property.
   * 
   * <p>
   * This accessor method returns a reference to the live list, not a snapshot.
   * Therefore any modification you make to the returned list will be present
   * inside the JAXB object. This is why there is not a <CODE>set</CODE> method
   * for the parentDIF property.
   * 
   * <p>
   * For example, to add a new item, do as follows:
   * 
   * <pre>
   * getParentDIF().add(newItem);
   * </pre>
   * 
   * 
   * <p>
   * Objects of the following type(s) are allowed in the list {@link String }
   * 
   * @return the List of ParentDIF's
   */
  public List<String> getParentDIF() {
    if (parentDIF == null) {
      parentDIF = new ArrayList<String>();
    }
    return this.parentDIF;
  }

  /**
   * Gets the value of the idnNode property.
   * 
   * <p>
   * This accessor method returns a reference to the live list, not a snapshot.
   * Therefore any modification you make to the returned list will be present
   * inside the JAXB object. This is why there is not a <CODE>set</CODE> method
   * for the idnNode property.
   * 
   * <p>
   * For example, to add a new item, do as follows:
   * 
   * <pre>
   * getIDNNode().add(newItem);
   * </pre>
   * 
   * 
   * <p>
   * Objects of the following type(s) are allowed in the list {@link IDNNode }
   * 
   * @return the List of IDNNodes
   */
  public List<IDNNode> getIDNNode() {
    if (idnNode == null) {
      idnNode = new ArrayList<IDNNode>();
    }
    return this.idnNode;
  }

  /**
   * Gets the value of the originatingMetadataNode property.
   * 
   * @return possible object is {@link String }
   * 
   */
  public String getOriginatingMetadataNode() {
    return originatingMetadataNode;
  }

  /**
   * Sets the value of the originatingMetadataNode property.
   * 
   * @param value
   *          allowed object is {@link String }
   * 
   */
  public void setOriginatingMetadataNode(String value) {
    this.originatingMetadataNode = value;
  }

  /**
   * Gets the value of the metadataName property.
   * 
   * @return possible object is {@link String }
   * 
   */
  public String getMetadataName() {
    return metadataName;
  }

  /**
   * Sets the value of the metadataName property.
   * 
   * @param value
   *          allowed object is {@link String }
   * 
   */
  public void setMetadataName(String value) {
    this.metadataName = value;
  }

  /**
   * Gets the value of the metadataVersion property.
   * 
   * @return possible object is {@link String }
   * 
   */
  public String getMetadataVersion() {
    return metadataVersion;
  }

  /**
   * Sets the value of the metadataVersion property.
   * 
   * @param value
   *          allowed object is {@link String }
   * 
   */
  public void setMetadataVersion(String value) {
    this.metadataVersion = value;
  }

  /**
   * Gets the value of the difCreationDate property.
   * 
   * @return possible object is {@link String }
   * 
   */
  public String getDIFCreationDate() {
    return difCreationDate;
  }

  /**
   * Sets the value of the difCreationDate property.
   * 
   * @param value
   *          allowed object is {@link String }
   * 
   */
  public void setDIFCreationDate(String value) {
    this.difCreationDate = value;
  }

  /**
   * Gets the value of the lastDIFRevisionDate property.
   * 
   * @return possible object is {@link String }
   * 
   */
  public String getLastDIFRevisionDate() {
    return lastDIFRevisionDate;
  }

  /**
   * Sets the value of the lastDIFRevisionDate property.
   * 
   * @param value
   *          allowed object is {@link String }
   * 
   */
  public void setLastDIFRevisionDate(String value) {
    this.lastDIFRevisionDate = value;
  }

  /**
   * Gets the value of the difRevisionHistory property.
   * 
   * @return possible object is {@link String }
   * 
   */
  public String getDIFRevisionHistory() {
    return difRevisionHistory;
  }

  /**
   * Sets the value of the difRevisionHistory property.
   * 
   * @param value
   *          allowed object is {@link String }
   * 
   */
  public void setDIFRevisionHistory(String value) {
    this.difRevisionHistory = value;
  }

  /**
   * Gets the value of the futureDIFReviewDate property.
   * 
   * @return possible object is {@link String }
   * 
   */
  public String getFutureDIFReviewDate() {
    return futureDIFReviewDate;
  }

  /**
   * Sets the value of the futureDIFReviewDate property.
   * 
   * @param value
   *          allowed object is {@link String }
   * 
   */
  public void setFutureDIFReviewDate(String value) {
    this.futureDIFReviewDate = value;
  }

  /**
   * Gets the value of the private property.
   * 
   * @return possible object is {@link String }
   * 
   */
  public String getPrivate() {
    return _private;
  }

  /**
   * Sets the value of the private property.
   * 
   * @param value
   *          allowed object is {@link String }
   * 
   */
  public void setPrivate(String value) {
    this._private = value;
  }

} @XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = { "dataCenterName", "dataCenterURL", "dataSetID", "personnel" })
@XmlRootElement(name = "Data_Center")
public class DataCenter {

  @XmlElement(name = "Data_Center_Name", required = true)
  protected DataCenterName dataCenterName;
  @XmlElement(name = "Data_Center_URL")
  protected String dataCenterURL;
  @XmlElement(name = "Data_Set_ID")
  protected List<String> dataSetID;
  @XmlElement(name = "Personnel", required = true)
  protected List<Personnel> personnel;

  /**
   * Gets the value of the dataCenterName property.
   * 
   * @return possible object is {@link DataCenterName }
   * 
   */
  public DataCenterName getDataCenterName() {
    return dataCenterName;
  }

  /**
   * Sets the value of the dataCenterName property.
   * 
   * @param value
   *          allowed object is {@link DataCenterName }
   * 
   */
  public void setDataCenterName(DataCenterName value) {
    this.dataCenterName = value;
  }

  /**
   * Gets the value of the dataCenterURL property.
   * 
   * @return possible object is {@link String }
   * 
   */
  public String getDataCenterURL() {
    return dataCenterURL;
  }

  /**
   * Sets the value of the dataCenterURL property.
   * 
   * @param value
   *          allowed object is {@link String }
   * 
   */
  public void setDataCenterURL(String value) {
    this.dataCenterURL = value;
  }

  /**
   * Gets the value of the dataSetID property.
   * 
   * <p>
   * This accessor method returns a reference to the live list, not a snapshot.
   * Therefore any modification you make to the returned list will be present
   * inside the JAXB object. This is why there is not a <CODE>set</CODE> method
   * for the dataSetID property.
   * 
   * <p>
   * For example, to add a new item, do as follows:
   * 
   * <pre>
   * getDataSetID().add(newItem);
   * </pre>
   * 
   * 
   * <p>
   * Objects of the following type(s) are allowed in the list {@link String }
   * 
   * @return the List of dataset ID's
   */
  public List<String> getDataSetID() {
        if (dataSetID == null) {
            dataSetID = new ArrayList<>();
        }
        return this.dataSetID;
    }

  /**
   * Gets the value of the personnel property.
   * 
   * <p>
   * This accessor method returns a reference to the live list, not a snapshot.
   * Therefore any modification you make to the returned list will be present
   * inside the JAXB object. This is why there is not a <CODE>set</CODE> method
   * for the personnel property.
   * 
   * <p>
   * For example, to add a new item, do as follows:
   * 
   * <pre>
   * getPersonnel().add(newItem);
   * </pre>
   * 
   * 
   * <p>
   * Objects of the following type(s) are allowed in the list {@link Personnel }
   * 
   * @return the List of Personnel
   */
  public List<Personnel> getPersonnel() {
    if (personnel == null) {
      personnel = new ArrayList<Personnel>();
    }
    return this.personnel;
  }

} @XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = { "shortName", "longName" })
@XmlRootElement(name = "Data_Center_Name")
public class DataCenterName {

  @XmlElement(name = "Short_Name", required = true)
  protected String shortName;
  @XmlElement(name = "Long_Name")
  protected String longName;

  /**
   * Gets the value of the shortName property.
   * 
   * @return possible object is {@link String }
   * 
   */
  public String getShortName() {
    return shortName;
  }

  /**
   * Sets the value of the shortName property.
   * 
   * @param value
   *          allowed object is {@link String }
   * 
   */
  public void setShortName(String value) {
    this.shortName = value;
  }

  /**
   * Gets the value of the longName property.
   * 
   * @return possible object is {@link String }
   * 
   */
  public String getLongName() {
    return longName;
  }

  /**
   * Sets the value of the longName property.
   * 
   * @param value
   *          allowed object is {@link String }
   * 
   */
  public void setLongName(String value) {
    this.longName = value;
  }

} @XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = { "latitudeResolution", "longitudeResolution", "horizontalResolutionRange", "verticalResolution", "verticalResolutionRange", "temporalResolution",
        "temporalResolutionRange" })
@XmlRootElement(name = "Data_Resolution")
public class DataResolution {

  @XmlElement(name = "Latitude_Resolution")
  protected String latitudeResolution;
  @XmlElement(name = "Longitude_Resolution")
  protected String longitudeResolution;
  @XmlElement(name = "Horizontal_Resolution_Range")
  protected String horizontalResolutionRange;
  @XmlElement(name = "Vertical_Resolution")
  protected String verticalResolution;
  @XmlElement(name = "Vertical_Resolution_Range")
  protected String verticalResolutionRange;
  @XmlElement(name = "Temporal_Resolution")
  protected String temporalResolution;
  @XmlElement(name = "Temporal_Resolution_Range")
  protected String temporalResolutionRange;

  /**
   * Gets the value of the latitudeResolution property.
   * 
   * @return possible object is {@link String }
   * 
   */
  public String getLatitudeResolution() {
    return latitudeResolution;
  }

  /**
   * Sets the value of the latitudeResolution property.
   * 
   * @param value
   *          allowed object is {@link String }
   * 
   */
  public void setLatitudeResolution(String value) {
    this.latitudeResolution = value;
  }

  /**
   * Gets the value of the longitudeResolution property.
   * 
   * @return possible object is {@link String }
   * 
   */
  public String getLongitudeResolution() {
    return longitudeResolution;
  }

  /**
   * Sets the value of the longitudeResolution property.
   * 
   * @param value
   *          allowed object is {@link String }
   * 
   */
  public void setLongitudeResolution(String value) {
    this.longitudeResolution = value;
  }

  /**
   * Gets the value of the horizontalResolutionRange property.
   * 
   * @return possible object is {@link String }
   * 
   */
  public String getHorizontalResolutionRange() {
    return horizontalResolutionRange;
  }

  /**
   * Sets the value of the horizontalResolutionRange property.
   * 
   * @param value
   *          allowed object is {@link String }
   * 
   */
  public void setHorizontalResolutionRange(String value) {
    this.horizontalResolutionRange = value;
  }

  /**
   * Gets the value of the verticalResolution property.
   * 
   * @return possible object is {@link String }
   * 
   */
  public String getVerticalResolution() {
    return verticalResolution;
  }

  /**
   * Sets the value of the verticalResolution property.
   * 
   * @param value
   *          allowed object is {@link String }
   * 
   */
  public void setVerticalResolution(String value) {
    this.verticalResolution = value;
  }

  /**
   * Gets the value of the verticalResolutionRange property.
   * 
   * @return possible object is {@link String }
   * 
   */
  public String getVerticalResolutionRange() {
    return verticalResolutionRange;
  }

  /**
   * Sets the value of the verticalResolutionRange property.
   * 
   * @param value
   *          allowed object is {@link String }
   * 
   */
  public void setVerticalResolutionRange(String value) {
    this.verticalResolutionRange = value;
  }

  /**
   * Gets the value of the temporalResolution property.
   * 
   * @return possible object is {@link String }
   * 
   */
  public String getTemporalResolution() {
    return temporalResolution;
  }

  /**
   * Sets the value of the temporalResolution property.
   * 
   * @param value
   *          allowed object is {@link String }
   * 
   */
  public void setTemporalResolution(String value) {
    this.temporalResolution = value;
  }

  /**
   * Gets the value of the temporalResolutionRange property.
   * 
   * @return possible object is {@link String }
   * 
   */
  public String getTemporalResolutionRange() {
    return temporalResolutionRange;
  }

  /**
   * Sets the value of the temporalResolutionRange property.
   * 
   * @param value
   *          allowed object is {@link String }
   * 
   */
  public void setTemporalResolutionRange(String value) {
    this.temporalResolutionRange = value;
  }

} @XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = { "datasetCreator", "datasetTitle", "datasetSeriesName", "datasetReleaseDate", "datasetReleasePlace", "datasetPublisher", "version", "issueIdentification",
        "dataPresentationForm", "otherCitationDetails", "onlineResource" })
@XmlRootElement(name = "Data_Set_Citation")
public class DataSetCitation {

  @XmlElement(name = "Dataset_Creator")
  protected String datasetCreator;
  @XmlElement(name = "Dataset_Title")
  protected String datasetTitle;
  @XmlElement(name = "Dataset_Series_Name")
  protected String datasetSeriesName;
  @XmlElement(name = "Dataset_Release_Date")
  protected String datasetReleaseDate;
  @XmlElement(name = "Dataset_Release_Place")
  protected String datasetReleasePlace;
  @XmlElement(name = "Dataset_Publisher")
  protected String datasetPublisher;
  @XmlElement(name = "Version")
  protected String version;
  @XmlElement(name = "Issue_Identification")
  protected String issueIdentification;
  @XmlElement(name = "Data_Presentation_Form")
  protected String dataPresentationForm;
  @XmlElement(name = "Other_Citation_Details")
  protected String otherCitationDetails;
  @XmlElement(name = "Online_Resource")
  protected String onlineResource;

  /**
   * Gets the value of the datasetCreator property.
   * 
   * @return possible object is {@link String }
   * 
   */
  public String getDatasetCreator() {
    return datasetCreator;
  }

  /**
   * Sets the value of the datasetCreator property.
   * 
   * @param value
   *          allowed object is {@link String }
   * 
   */
  public void setDatasetCreator(String value) {
    this.datasetCreator = value;
  }

  /**
   * Gets the value of the datasetTitle property.
   * 
   * @return possible object is {@link String }
   * 
   */
  public String getDatasetTitle() {
    return datasetTitle;
  }

  /**
   * Sets the value of the datasetTitle property.
   * 
   * @param value
   *          allowed object is {@link String }
   * 
   */
  public void setDatasetTitle(String value) {
    this.datasetTitle = value;
  }

  /**
   * Gets the value of the datasetSeriesName property.
   * 
   * @return possible object is {@link String }
   * 
   */
  public String getDatasetSeriesName() {
    return datasetSeriesName;
  }

  /**
   * Sets the value of the datasetSeriesName property.
   * 
   * @param value
   *          allowed object is {@link String }
   * 
   */
  public void setDatasetSeriesName(String value) {
    this.datasetSeriesName = value;
  }

  /**
   * Gets the value of the datasetReleaseDate property.
   * 
   * @return possible object is {@link String }
   * 
   */
  public String getDatasetReleaseDate() {
    return datasetReleaseDate;
  }

  /**
   * Sets the value of the datasetReleaseDate property.
   * 
   * @param value
   *          allowed object is {@link String }
   * 
   */
  public void setDatasetReleaseDate(String value) {
    this.datasetReleaseDate = value;
  }

  /**
   * Gets the value of the datasetReleasePlace property.
   * 
   * @return possible object is {@link String }
   * 
   */
  public String getDatasetReleasePlace() {
    return datasetReleasePlace;
  }

  /**
   * Sets the value of the datasetReleasePlace property.
   * 
   * @param value
   *          allowed object is {@link String }
   * 
   */
  public void setDatasetReleasePlace(String value) {
    this.datasetReleasePlace = value;
  }

  /**
   * Gets the value of the datasetPublisher property.
   * 
   * @return possible object is {@link String }
   * 
   */
  public String getDatasetPublisher() {
    return datasetPublisher;
  }

  /**
   * Sets the value of the datasetPublisher property.
   * 
   * @param value
   *          allowed object is {@link String }
   * 
   */
  public void setDatasetPublisher(String value) {
    this.datasetPublisher = value;
  }

  /**
   * Gets the value of the version property.
   * 
   * @return possible object is {@link String }
   * 
   */
  public String getVersion() {
    return version;
  }

  /**
   * Sets the value of the version property.
   * 
   * @param value
   *          allowed object is {@link String }
   * 
   */
  public void setVersion(String value) {
    this.version = value;
  }

  /**
   * Gets the value of the issueIdentification property.
   * 
   * @return possible object is {@link String }
   * 
   */
  public String getIssueIdentification() {
    return issueIdentification;
  }

  /**
   * Sets the value of the issueIdentification property.
   * 
   * @param value
   *          allowed object is {@link String }
   * 
   */
  public void setIssueIdentification(String value) {
    this.issueIdentification = value;
  }

  /**
   * Gets the value of the dataPresentationForm property.
   * 
   * @return possible object is {@link String }
   * 
   */
  public String getDataPresentationForm() {
    return dataPresentationForm;
  }

  /**
   * Sets the value of the dataPresentationForm property.
   * 
   * @param value
   *          allowed object is {@link String }
   * 
   */
  public void setDataPresentationForm(String value) {
    this.dataPresentationForm = value;
  }

  /**
   * Gets the value of the otherCitationDetails property.
   * 
   * @return possible object is {@link String }
   * 
   */
  public String getOtherCitationDetails() {
    return otherCitationDetails;
  }

  /**
   * Sets the value of the otherCitationDetails property.
   * 
   * @param value
   *          allowed object is {@link String }
   * 
   */
  public void setOtherCitationDetails(String value) {
    this.otherCitationDetails = value;
  }

  /**
   * Gets the value of the onlineResource property.
   * 
   * @return possible object is {@link String }
   * 
   */
  public String getOnlineResource() {
    return onlineResource;
  }

  /**
   * Sets the value of the onlineResource property.
   * 
   * @param value
   *          allowed object is {@link String }
   * 
   */
  public void setOnlineResource(String value) {
    this.onlineResource = value;
  }

} @XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = { "shortName", "longName" })
@XmlRootElement(name = "IDN_Node")
public class IDNNode {

  @XmlElement(name = "Short_Name", required = true)
  protected String shortName;
  @XmlElement(name = "Long_Name")
  protected String longName;

  /**
   * Gets the value of the shortName property.
   * 
   * @return possible object is {@link String }
   * 
   */
  public String getShortName() {
    return shortName;
  }

  /**
   * Sets the value of the shortName property.
   * 
   * @param value
   *          allowed object is {@link String }
   * 
   */
  public void setShortName(String value) {
    this.shortName = value;
  }

  /**
   * Gets the value of the longName property.
   * 
   * @return possible object is {@link String }
   * 
   */
  public String getLongName() {
    return longName;
  }

  /**
   * Sets the value of the longName property.
   * 
   * @param value
   *          allowed object is {@link String }
   * 
   */
  public void setLongName(String value) {
    this.longName = value;
  }

} @XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = { "locationCategory", "locationType", "locationSubregion1", "locationSubregion2", "locationSubregion3", "detailedLocation" })
@XmlRootElement(name = "Location")
public class Location {

  @XmlElement(name = "Location_Category", required = true)
  protected String locationCategory;
  @XmlElement(name = "Location_Type")
  protected String locationType;
  @XmlElement(name = "Location_Subregion1")
  protected String locationSubregion1;
  @XmlElement(name = "Location_Subregion2")
  protected String locationSubregion2;
  @XmlElement(name = "Location_Subregion3")
  protected String locationSubregion3;
  @XmlElement(name = "Detailed_Location")
  protected String detailedLocation;

  /**
   * Gets the value of the locationCategory property.
   * 
   * @return possible object is {@link String }
   * 
   */
  public String getLocationCategory() {
    return locationCategory;
  }

  /**
   * Sets the value of the locationCategory property.
   * 
   * @param value
   *          allowed object is {@link String }
   * 
   */
  public void setLocationCategory(String value) {
    this.locationCategory = value;
  }

  /**
   * Gets the value of the locationType property.
   * 
   * @return possible object is {@link String }
   * 
   */
  public String getLocationType() {
    return locationType;
  }

  /**
   * Sets the value of the locationType property.
   * 
   * @param value
   *          allowed object is {@link String }
   * 
   */
  public void setLocationType(String value) {
    this.locationType = value;
  }

  /**
   * Gets the value of the locationSubregion1 property.
   * 
   * @return possible object is {@link String }
   * 
   */
  public String getLocationSubregion1() {
    return locationSubregion1;
  }

  /**
   * Sets the value of the locationSubregion1 property.
   * 
   * @param value
   *          allowed object is {@link String }
   * 
   */
  public void setLocationSubregion1(String value) {
    this.locationSubregion1 = value;
  }

  /**
   * Gets the value of the locationSubregion2 property.
   * 
   * @return possible object is {@link String }
   * 
   */
  public String getLocationSubregion2() {
    return locationSubregion2;
  }

  /**
   * Sets the value of the locationSubregion2 property.
   * 
   * @param value
   *          allowed object is {@link String }
   * 
   */
  public void setLocationSubregion2(String value) {
    this.locationSubregion2 = value;
  }

  /**
   * Gets the value of the locationSubregion3 property.
   * 
   * @return possible object is {@link String }
   * 
   */
  public String getLocationSubregion3() {
    return locationSubregion3;
  }

  /**
   * Sets the value of the locationSubregion3 property.
   * 
   * @param value
   *          allowed object is {@link String }
   * 
   */
  public void setLocationSubregion3(String value) {
    this.locationSubregion3 = value;
  }

  /**
   * Gets the value of the detailedLocation property.
   * 
   * @return possible object is {@link String }
   * 
   */
  public String getDetailedLocation() {
    return detailedLocation;
  }

  /**
   * Sets the value of the detailedLocation property.
   * 
   * @param value
   *          allowed object is {@link String }
   * 
   */
  public void setDetailedLocation(String value) {
    this.detailedLocation = value;
  }

} @XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = { "category", "topic", "term", "variableLevel1", "variableLevel2", "variableLevel3", "detailedVariable" })
@XmlRootElement(name = "Parameters")
public class Parameters {

  @XmlElement(name = "Category", required = true)
  protected String category;
  @XmlElement(name = "Topic", required = true)
  protected String topic;
  @XmlElement(name = "Term", required = true)
  protected String term;
  @XmlElement(name = "Variable_Level_1")
  protected String variableLevel1;
  @XmlElement(name = "Variable_Level_2")
  protected String variableLevel2;
  @XmlElement(name = "Variable_Level_3")
  protected String variableLevel3;
  @XmlElement(name = "Detailed_Variable")
  protected String detailedVariable;

  /**
   * Gets the value of the category property.
   * 
   * @return possible object is {@link String }
   * 
   */
  public String getCategory() {
    return category;
  }

  /**
   * Sets the value of the category property.
   * 
   * @param value
   *          allowed object is {@link String }
   * 
   */
  public void setCategory(String value) {
    this.category = value;
  }

  /**
   * Gets the value of the topic property.
   * 
   * @return possible object is {@link String }
   * 
   */
  public String getTopic() {
    return topic;
  }

  /**
   * Sets the value of the topic property.
   * 
   * @param value
   *          allowed object is {@link String }
   * 
   */
  public void setTopic(String value) {
    this.topic = value;
  }

  /**
   * Gets the value of the term property.
   * 
   * @return possible object is {@link String }
   * 
   */
  public String getTerm() {
    return term;
  }

  /**
   * Sets the value of the term property.
   * 
   * @param value
   *          allowed object is {@link String }
   * 
   */
  public void setTerm(String value) {
    this.term = value;
  }

  /**
   * Gets the value of the variableLevel1 property.
   * 
   * @return possible object is {@link String }
   * 
   */
  public String getVariableLevel1() {
    return variableLevel1;
  }

  /**
   * Sets the value of the variableLevel1 property.
   * 
   * @param value
   *          allowed object is {@link String }
   * 
   */
  public void setVariableLevel1(String value) {
    this.variableLevel1 = value;
  }

  /**
   * Gets the value of the variableLevel2 property.
   * 
   * @return possible object is {@link String }
   * 
   */
  public String getVariableLevel2() {
    return variableLevel2;
  }

  /**
   * Sets the value of the variableLevel2 property.
   * 
   * @param value
   *          allowed object is {@link String }
   * 
   */
  public void setVariableLevel2(String value) {
    this.variableLevel2 = value;
  }

  /**
   * Gets the value of the variableLevel3 property.
   * 
   * @return possible object is {@link String }
   * 
   */
  public String getVariableLevel3() {
    return variableLevel3;
  }

  /**
   * Sets the value of the variableLevel3 property.
   * 
   * @param value
   *          allowed object is {@link String }
   * 
   */
  public void setVariableLevel3(String value) {
    this.variableLevel3 = value;
  }

  /**
   * Gets the value of the detailedVariable property.
   * 
   * @return possible object is {@link String }
   * 
   */
  public String getDetailedVariable() {
    return detailedVariable;
  }

  /**
   * Sets the value of the detailedVariable property.
   * 
   * @param value
   *          allowed object is {@link String }
   * 
   */
  public void setDetailedVariable(String value) {
    this.detailedVariable = value;
  }

} @XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = { "role", "firstName", "middleName", "lastName", "email", "phone", "fax", "contactAddress" })
@XmlRootElement(name = "Personnel")
public class Personnel {

  @XmlElement(name = "Role", required = true)
  protected List<String> role;
  @XmlElement(name = "First_Name")
  protected String firstName;
  @XmlElement(name = "Middle_Name")
  protected String middleName;
  @XmlElement(name = "Last_Name", required = true)
  protected String lastName;
  @XmlElement(name = "Email")
  protected List<String> email;
  @XmlElement(name = "Phone")
  protected List<String> phone;
  @XmlElement(name = "Fax")
  protected List<String> fax;
  @XmlElement(name = "Contact_Address")
  protected ContactAddress contactAddress;

  /**
   * Gets the value of the role property.
   * 
   * <p>
   * This accessor method returns a reference to the live list, not a snapshot.
   * Therefore any modification you make to the returned list will be present
   * inside the JAXB object. This is why there is not a <CODE>set</CODE> method
   * for the role property.
   * 
   * <p>
   * For example, to add a new item, do as follows:
   * 
   * <pre>
   * getRole().add(newItem);
   * </pre>
   * 
   * 
   * <p>
   * Objects of the following type(s) are allowed in the list {@link String }
   * 
   * 
   */
  public List<String> getRole() {
    if (role == null) {
      role = new ArrayList<String>();
    }
    return this.role;
  }

  /**
   * Gets the value of the firstName property.
   * 
   * @return possible object is {@link String }
   * 
   */
  public String getFirstName() {
    return firstName;
  }

  /**
   * Sets the value of the firstName property.
   * 
   * @param value
   *          allowed object is {@link String }
   * 
   */
  public void setFirstName(String value) {
    this.firstName = value;
  }

  /**
   * Gets the value of the middleName property.
   * 
   * @return possible object is {@link String }
   * 
   */
  public String getMiddleName() {
    return middleName;
  }

  /**
   * Sets the value of the middleName property.
   * 
   * @param value
   *          allowed object is {@link String }
   * 
   */
  public void setMiddleName(String value) {
    this.middleName = value;
  }

  /**
   * Gets the value of the lastName property.
   * 
   * @return possible object is {@link String }
   * 
   */
  public String getLastName() {
    return lastName;
  }

  /**
   * Sets the value of the lastName property.
   * 
   * @param value
   *          allowed object is {@link String }
   * 
   */
  public void setLastName(String value) {
    this.lastName = value;
  }

  /**
   * Gets the value of the email property.
   * 
   * <p>
   * This accessor method returns a reference to the live list, not a snapshot.
   * Therefore any modification you make to the returned list will be present
   * inside the JAXB object. This is why there is not a <CODE>set</CODE> method
   * for the email property.
   * 
   * <p>
   * For example, to add a new item, do as follows:
   * 
   * <pre>
   * getEmail().add(newItem);
   * </pre>
   * 
   * 
   * <p>
   * Objects of the following type(s) are allowed in the list {@link String }
   * 
   * 
   */
  public List<String> getEmail() {
    if (email == null) {
      email = new ArrayList<String>();
    }
    return this.email;
  }

  /**
   * Gets the value of the phone property.
   * 
   * <p>
   * This accessor method returns a reference to the live list, not a snapshot.
   * Therefore any modification you make to the returned list will be present
   * inside the JAXB object. This is why there is not a <CODE>set</CODE> method
   * for the phone property.
   * 
   * <p>
   * For example, to add a new item, do as follows:
   * 
   * <pre>
   * getPhone().add(newItem);
   * </pre>
   * 
   * 
   * <p>
   * Objects of the following type(s) are allowed in the list {@link String }
   * 
   * 
   */
  public List<String> getPhone() {
    if (phone == null) {
      phone = new ArrayList<String>();
    }
    return this.phone;
  }

  /**
   * Gets the value of the fax property.
   * 
   * <p>
   * This accessor method returns a reference to the live list, not a snapshot.
   * Therefore any modification you make to the returned list will be present
   * inside the JAXB object. This is why there is not a <CODE>set</CODE> method
   * for the fax property.
   * 
   * <p>
   * For example, to add a new item, do as follows:
   * 
   * <pre>
   * getFax().add(newItem);
   * </pre>
   * 
   * 
   * <p>
   * Objects of the following type(s) are allowed in the list {@link String }
   * 
   * 
   */
  public List<String> getFax() {
    if (fax == null) {
      fax = new ArrayList<String>();
    }
    return this.fax;
  }

  /**
   * Gets the value of the contactAddress property.
   * 
   * @return possible object is {@link ContactAddress }
   * 
   */
  public ContactAddress getContactAddress() {
    return contactAddress;
  }

  /**
   * Sets the value of the contactAddress property.
   * 
   * @param value
   *          allowed object is {@link ContactAddress }
   * 
   */
  public void setContactAddress(ContactAddress value) {
    this.contactAddress = value;
  }

} @XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = { "shortName", "longName" })
@XmlRootElement(name = "Project")
public class Project {

  @XmlElement(name = "Short_Name", required = true)
  protected String shortName;
  @XmlElement(name = "Long_Name")
  protected String longName;

  /**
   * Gets the value of the shortName property.
   * 
   * @return possible object is {@link String }
   * 
   */
  public String getShortName() {
    return shortName;
  }

  /**
   * Sets the value of the shortName property.
   * 
   * @param value
   *          allowed object is {@link String }
   * 
   */
  public void setShortName(String value) {
    this.shortName = value;
  }

  /**
   * Gets the value of the longName property.
   * 
   * @return possible object is {@link String }
   * 
   */
  public String getLongName() {
    return longName;
  }

  /**
   * Sets the value of the longName property.
   * 
   * @param value
   *          allowed object is {@link String }
   * 
   */
  public void setLongName(String value) {
    this.longName = value;
  }

} @XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = { "shortName", "longName" })
@XmlRootElement(name = "Sensor_Name")
public class SensorName {

  @XmlElement(name = "Short_Name", required = true)
  protected String shortName;
  @XmlElement(name = "Long_Name")
  protected String longName;

  /**
   * Gets the value of the shortName property.
   * 
   * @return possible object is {@link String }
   * 
   */
  public String getShortName() {
    return shortName;
  }

  /**
   * Sets the value of the shortName property.
   * 
   * @param value
   *          allowed object is {@link String }
   * 
   */
  public void setShortName(String value) {
    this.shortName = value;
  }

  /**
   * Gets the value of the longName property.
   * 
   * @return possible object is {@link String }
   * 
   */
  public String getLongName() {
    return longName;
  }

  /**
   * Sets the value of the longName property.
   * 
   * @param value
   *          allowed object is {@link String }
   * 
   */
  public void setLongName(String value) {
    this.longName = value;
  }

} @XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = { "shortName", "longName" })
@XmlRootElement(name = "Source_Name")
public class SourceName {

  @XmlElement(name = "Short_Name", required = true)
  protected String shortName;
  @XmlElement(name = "Long_Name")
  protected String longName;

  /**
   * Gets the value of the shortName property.
   * 
   * @return possible object is {@link String }
   * 
   */
  public String getShortName() {
    return shortName;
  }

  /**
   * Sets the value of the shortName property.
   * 
   * @param value
   *          allowed object is {@link String }
   * 
   */
  public void setShortName(String value) {
    this.shortName = value;
  }

  /**
   * Gets the value of the longName property.
   * 
   * @return possible object is {@link String }
   * 
   */
  public String getLongName() {
    return longName;
  }

  /**
   * Sets the value of the longName property.
   * 
   * @param value
   *          allowed object is {@link String }
   * 
   */
  public void setLongName(String value) {
    this.longName = value;
  }

} @XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = { "southernmostLatitude", "northernmostLatitude", "westernmostLongitude", "easternmostLongitude", "minimumAltitude", "maximumAltitude", "minimumDepth", "maximumDepth" })
@XmlRootElement(name = "Spatial_Coverage")
public class SpatialCoverage {

  @XmlElement(name = "Southernmost_Latitude")
  protected String southernmostLatitude;
  @XmlElement(name = "Northernmost_Latitude")
  protected String northernmostLatitude;
  @XmlElement(name = "Westernmost_Longitude")
  protected String westernmostLongitude;
  @XmlElement(name = "Easternmost_Longitude")
  protected String easternmostLongitude;
  @XmlElement(name = "Minimum_Altitude")
  protected String minimumAltitude;
  @XmlElement(name = "Maximum_Altitude")
  protected String maximumAltitude;
  @XmlElement(name = "Minimum_Depth")
  protected String minimumDepth;
  @XmlElement(name = "Maximum_Depth")
  protected String maximumDepth;

  /**
   * Gets the value of the southernmostLatitude property.
   * 
   * @return possible object is {@link String }
   * 
   */
  public String getSouthernmostLatitude() {
    return southernmostLatitude;
  }

  /**
   * Sets the value of the southernmostLatitude property.
   * 
   * @param value
   *          allowed object is {@link String }
   * 
   */
  public void setSouthernmostLatitude(String value) {
    this.southernmostLatitude = value;
  }

  /**
   * Gets the value of the northernmostLatitude property.
   * 
   * @return possible object is {@link String }
   * 
   */
  public String getNorthernmostLatitude() {
    return northernmostLatitude;
  }

  /**
   * Sets the value of the northernmostLatitude property.
   * 
   * @param value
   *          allowed object is {@link String }
   * 
   */
  public void setNorthernmostLatitude(String value) {
    this.northernmostLatitude = value;
  }

  /**
   * Gets the value of the westernmostLongitude property.
   * 
   * @return possible object is {@link String }
   * 
   */
  public String getWesternmostLongitude() {
    return westernmostLongitude;
  }

  /**
   * Sets the value of the westernmostLongitude property.
   * 
   * @param value
   *          allowed object is {@link String }
   * 
   */
  public void setWesternmostLongitude(String value) {
    this.westernmostLongitude = value;
  }

  /**
   * Gets the value of the easternmostLongitude property.
   * 
   * @return possible object is {@link String }
   * 
   */
  public String getEasternmostLongitude() {
    return easternmostLongitude;
  }

  /**
   * Sets the value of the easternmostLongitude property.
   * 
   * @param value
   *          allowed object is {@link String }
   * 
   */
  public void setEasternmostLongitude(String value) {
    this.easternmostLongitude = value;
  }

  /**
   * Gets the value of the minimumAltitude property.
   * 
   * @return possible object is {@link String }
   * 
   */
  public String getMinimumAltitude() {
    return minimumAltitude;
  }

  /**
   * Sets the value of the minimumAltitude property.
   * 
   * @param value
   *          allowed object is {@link String }
   * 
   */
  public void setMinimumAltitude(String value) {
    this.minimumAltitude = value;
  }

  /**
   * Gets the value of the maximumAltitude property.
   * 
   * @return possible object is {@link String }
   * 
   */
  public String getMaximumAltitude() {
    return maximumAltitude;
  }

  /**
   * Sets the value of the maximumAltitude property.
   * 
   * @param value
   *          allowed object is {@link String }
   * 
   */
  public void setMaximumAltitude(String value) {
    this.maximumAltitude = value;
  }

  /**
   * Gets the value of the minimumDepth property.
   * 
   * @return possible object is {@link String }
   * 
   */
  public String getMinimumDepth() {
    return minimumDepth;
  }

  /**
   * Sets the value of the minimumDepth property.
   * 
   * @param value
   *          allowed object is {@link String }
   * 
   */
  public void setMinimumDepth(String value) {
    this.minimumDepth = value;
  }

  /**
   * Gets the value of the maximumDepth property.
   * 
   * @return possible object is {@link String }
   * 
   */
  public String getMaximumDepth() {
    return maximumDepth;
  }

  /**
   * Sets the value of the maximumDepth property.
   * 
   * @param value
   *          allowed object is {@link String }
   * 
   */
  public void setMaximumDepth(String value) {
    this.maximumDepth = value;
  }

} @XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = { "abstract" })
@XmlRootElement(name = "Summary")
public class Summary {

  @XmlElement(name = "Abstract", required = true)
  protected String summaryAbstract;

  /**
   * Gets the value of the summaryAbstract property.
   * 
   * @return possible object is {@link String }
   * 
   */
  public String getAbstract() {
    return summaryAbstract;
  }

  /**
   * Sets the value of the summaryAbstract property.
   * 
   * @param value
   *          allowed object is {@link String }
   * 
   */
  public void setAbstract(String value) {
    this.summaryAbstract = value;
  }

} @XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = { "startDate", "stopDate" })
@XmlRootElement(name = "Temporal_Coverage")
public class TemporalCoverage {

  @XmlElement(name = "Start_Date")
  protected String startDate;
  @XmlElement(name = "Stop_Date")
  protected String stopDate;

  /**
   * Gets the value of the startDate property.
   * 
   * @return possible object is {@link String }
   * 
   */
  public String getStartDate() {
    return startDate;
  }

  /**
   * Sets the value of the startDate property.
   * 
   * @param value
   *          allowed object is {@link String }
   * 
   */
  public void setStartDate(String value) {
    this.startDate = value;
  }

  /**
   * Gets the value of the stopDate property.
   * 
   * @return possible object is {@link String }
   * 
   */
  public String getStopDate() {
    return stopDate;
  }

  /**
   * Sets the value of the stopDate property.
   * 
   * @param value
   *          allowed object is {@link String }
   * 
   */
  public void setStopDate(String value) {
    this.stopDate = value;
  }

}
import java.io.ByteArrayInputStream;
import java.util.List;
import java.util.Properties;
import org.esipfed.eskg.structures.DIF;
import org.esipfed.eskg.structures.DataCenter;
import org.esipfed.eskg.structures.DataCenterName;
import org.esipfed.eskg.structures.DataResolution;
import org.esipfed.eskg.structures.DataSetCitation;
import org.esipfed.eskg.structures.IDNNode;
import org.esipfed.eskg.structures.Location;
import org.esipfed.eskg.structures.Parameters;
import org.esipfed.eskg.structures.Personnel;
import org.esipfed.eskg.structures.Project;
import org.esipfed.eskg.structures.SensorName;
import org.esipfed.eskg.structures.SourceName;
import org.esipfed.eskg.structures.SpatialCoverage;
import org.esipfed.eskg.structures.Summary;
import org.esipfed.eskg.structures.TemporalCoverage;
import org.jdom2.Document;
import org.jdom2.Element;
import org.jdom2.Namespace;
import org.jdom2.input.SAXBuilder;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
          } else if ("Minimum_Altitude".equals(element.getName())) {
            spatialCoverage.setMinimumAltitude(element.getTextTrim());
          } else if ("Minimum_Depth".equals(element.getName())) {
            spatialCoverage.setMinimumDepth(element.getTextTrim());
          } else if ("Northernmost_Latitude".equals(element.getName())) {
            spatialCoverage.setNorthernmostLatitude(element.getTextTrim());
          } else if ("Southernmost_Latitude".equals(element.getName())) {
            spatialCoverage.setSouthernmostLatitude(element.getTextTrim());
          } else if ("Westernmost_Longitude".equals(element.getName())) {
            spatialCoverage.setWesternmostLongitude(element.getTextTrim());
          }
        }
        dif.getSpatialCoverage().add(spatialCoverage);
      }

      // create Location(s)
      List<Element> locationList = difElement.getChildren("Location", ns);
      for (Element locationElement : locationList) {
        List<Element> locationElementChildren = locationElement.getChildren();
        Location location = new Location();
        for (Element element : locationElementChildren) {
          if ("Detailed_Location".equals(element.getName())) {
            location.setDetailedLocation(element.getTextTrim());
          } else if ("Location_Category".equals(element.getName())) {
            location.setLocationCategory(element.getTextTrim());
          } else if ("Location_Subregion_1".equals(element.getName())) {
            location.setLocationSubregion1(element.getTextTrim());
          } else if ("Location_Subregion_2".equals(element.getName())) {
            location.setLocationSubregion2(element.getTextTrim());
          } else if ("Location_Subregion_3".equals(element.getName())) {
            location.setLocationSubregion3(element.getTextTrim());
          } else if ("Location_Type".equals(element.getName())) {
            location.setLocationType(element.getTextTrim());
          }
        }
        dif.getLocation().add(location);
      }

      // create Data_Resolution(s)
      List<Element> dataResolutionList = difElement.getChildren("Data_Resolution", ns);
      for (Element dataResolutionElement : dataResolutionList) {
        List<Element> dataResolutionElementChildren = dataResolutionElement.getChildren();
        DataResolution dataResolution = new DataResolution();
        for (Element element : dataResolutionElementChildren) {
          if ("Horizontal_Resolution_Range".equals(element.getName())) {
            dataResolution.setHorizontalResolutionRange(element.getTextTrim());
          } else if ("Latitude_Resolution".equals(element.getName())) {
            dataResolution.setLatitudeResolution(element.getTextTrim());
          } else if ("Longitude_Resolution".equals(element.getName())) {
            dataResolution.setLongitudeResolution(element.getTextTrim());
          } else if ("Temporal_Resolution".equals(element.getName())) {
            dataResolution.setTemporalResolution(element.getTextTrim());
          } else if ("Temporal_Resolution_Range".equals(element.getName())) {
            dataResolution.setTemporalResolutionRange(element.getTextTrim());
          } else if ("Vertical_Resolution".equals(element.getName())) {
            dataResolution.setVerticalResolution(element.getTextTrim());
          } else if ("Vertical_Resolution_Range".equals(element.getName())) {
            dataResolution.setVerticalResolutionRange(element.getTextTrim());
          }
        }
        dif.getDataResolution().add(dataResolution);
      }

      // create Project(s)
      List<Element> projectList = difElement.getChildren("Project", ns);
      for (Element projectElement : projectList) {
        List<Element> projectElementChildren = projectElement.getChildren();
        Project project = new Project();
        for (Element element : projectElementChildren) {
          if ("Long_Name".equals(element.getName())) {
            project.setLongName(element.getTextTrim());
          } else if ("Short_Name".equals(element.getName())) {
            project.setShortName(element.getTextTrim());
          }
        }
        dif.getProject().add(project);
      }

      // create Data_Center(s)
      List<Element> dataCenterList = difElement.getChildren("Data_Center", ns);
      for (Element dataCenterElement : dataCenterList) {
        List<Element> dataCenterElementChildren = dataCenterElement.getChildren();
        DataCenter dataCenter = new DataCenter();
        for (Element dataCenterElementChild : dataCenterElementChildren) {
          if ("Data_Center_Name".equals(dataCenterElementChild.getName())) {
            // create Data_Center_Name
            DataCenterName dataCenterName = new DataCenterName();
            List<Element> dataCenterNameChildren = dataCenterElementChild.getChildren();
            for (Element dataCenterNameChild : dataCenterNameChildren) {
              if ("Long_Name".equals(dataCenterNameChild.getName())) {
                dataCenterName.setLongName(dataCenterNameChild.getTextTrim());
              } else if ("Short_Name".equals(dataCenterNameChild.getName())) {
                dataCenterName.setShortName(dataCenterNameChild.getTextTrim());
              }
            }
            dataCenter.setDataCenterName(dataCenterName);
          } else if ("Data_Center_URL".equals(dataCenterElementChild.getName())) {
            dataCenter.setDataCenterURL(dataCenterElementChild.getTextTrim());
          } else if ("Personnel".equals(dataCenterElementChild.getName())) {
            // create data center Personnel
            Personnel personnel = new Personnel();
            List<Element> dataCenterPersonnelChildren = dataCenterElementChild.getChildren();
            for (Element element : dataCenterPersonnelChildren) {
              if ("Role".equals(element.getName())) {
                personnel.getRole().add(element.getTextTrim());
              } else if ("First_Name".equals(element.getName())) {
                personnel.setFirstName(element.getTextTrim());
              } else if ("Last_Name".equals(element.getName())) {
                personnel.setLastName(element.getTextTrim());
              } else if ("Email".equals(element.getName())) {
                personnel.getEmail().add(element.getTextTrim());
              }
            }
            dataCenter.getPersonnel().add(personnel);
          }
        }
        dif.getDataCenter().add(dataCenter);
      }

      // create Summary(s)
      List<Element> summaryList = difElement.getChildren("Summary", ns);