/*******************************************************************************
 * Copyright (c) 2013-2015 LAAS-CNRS (www.laas.fr)
 * 7 Colonel Roche 31077 Toulouse - France
 *
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 *
 * Contributors:
 *     Thierry Monteil (Project co-founder) - Management and initial specification,
 *         conception and documentation.
 *     Mahdi Ben Alaya (Project co-founder) - Management and initial specification,
 *         conception, implementation, test and documentation.
 *     Christophe Chassot - Management and initial specification.
 *     Khalil Drira - Management and initial specification.
 *     Yassine Banouar - Initial specification, conception, implementation, test
 *         and documentation.
 *     Guillaume Garzone - Conception, implementation, test and documentation.
 *     Francois Aissaoui - Conception, implementation, test and documentation.
 ******************************************************************************/

// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.7
// See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a>
// Any modifications to this file will be lost upon recompilation of the source schema.
// Generated on: 2014.01.25 at 04:25:45 PM CET
//


package org.eclipse.om2m.commons.resource;

import javax.persistence.Embeddable;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlSchemaType;
import javax.xml.bind.annotation.XmlType;



/**
 * <p>Java Class for IntegrityValResults complex type.
 *
 * <p>The following schema fragment specifies the expected content contained within this class.
 *
 * <pre>
 * &lt;complexType name="IntegrityValResults">
 *   &lt;complexContent>
 *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
 *       &lt;sequence>
 *         &lt;element name="ivalResults" type="{http://www.w3.org/2001/XMLSchema}long"/>
 *         &lt;element name="signedIvalResult" type="{http://www.w3.org/2001/XMLSchema}long"/>
 *         &lt;element name="secureTimeStamp" type="{http://www.w3.org/2001/XMLSchema}dateTime"/>
 *       &lt;/sequence>
 *     &lt;/restriction>
 *   &lt;/complexContent>
 * &lt;/complexType>
 * </pre>
 *
 *
 */
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "IntegrityValResults", propOrder = {
        "ivalResults",
        "signedIvalResult",
        "secureTimeStamp"
})
@Embeddable
public class IntegrityValResults {

    @XmlElement(namespace = "")
    protected long ivalResults;
    @XmlElement(namespace = "")
    protected long signedIvalResult;
    @XmlElement(namespace = "", required = true)
    @XmlSchemaType(name = "dateTime")
    protected String secureTimeStamp;

    /**
     * Gets the value of the property ivalResults.
     *
     */
    public long getIvalResults() {
        return ivalResults;
    }

    /**
     * Sets the value of the property ivalResults.
     *
     */
    public void setIvalResults(long value) {
        this.ivalResults = value;
    }

    /**
     * Gets the value of the property signedIvalResult.
     *
     */
    public long getSignedIvalResult() {
        return signedIvalResult;
    }

    /**
     * Sets the value of the property signedIvalResult.
     *
     */
    public void setSignedIvalResult(long value) {
        this.signedIvalResult = value;
    }

    /**
     * Gets the value of the property secureTimeStamp.
     *
     * @return
     *     possible object is
     *     {@link String }
     *
     */
    public String getSecureTimeStamp() {
        return secureTimeStamp;
    }

    /**
     * Sets the value of the property secureTimeStamp.
     *
     * @param value
     *     allowed object is
     *     {@link String }
     *
     */
    public void setSecureTimeStamp(String value) {
        this.secureTimeStamp = value;
    }

}
