All Downloads are FREE. Search and download functionalities are using the official Maven repository.

cim1.model.CurveData Maven / Gradle / Ivy

There is a newer version: 2.4.1
Show newest version
/**
 * Copyright (c) 2016, All partners of the iTesla project (http://www.itesla-project.eu/consortium)
 * This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
 */
package cim1.model;

import cim1.exc.InterpretationException;
import cim1.exc.LinkageException;
import java.util.BitSet;
import java.util.Map;
import java.util.EnumMap;
import javax.xml.stream.XMLStreamException;
import cim1.CIMURI;
import javax.xml.stream.XMLStreamWriter;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 *
 * This file has been automatically generated by CIMGateway
 *
 * Description :
 *
 * This class "CurveData.java" represents the
 * class CurveData : CIMInstance
 *
 *    + y1value   1..1   float 
 *    + xvalue   1..1   float 
 *    + y2value   1..1   float 
 *    + CurveSchedule   1..1   Curve 

 */
public class CurveData extends CIMInstance {

    private static Logger LOGGER = LoggerFactory.getLogger(CurveData.class);

    /**
     * Attribute "y1value"
     *
     * Comment from profile:
     * The data value of the  first Y-axis variable, depending on the Y-axis units
     */
    public float y1value;

    /**
     * Attribute "xvalue"
     *
     * Comment from profile:
     * The data value of the X-axis variable,  depending on the X-axis units
     */
    public float xvalue;

    /**
     * Attribute "y2value"
     *
     * Comment from profile:
     * The data value of the second Y-axis variable (if present), depending on the Y-axis units
     */
    public float y2value;

    /**
     * Attribute "curveSchedule"
     *
     * Comment from profile:
     * The Curve defined by this CurveData.
     */
    public Curve curveSchedule;

    /**
     * The id of the attribute "curveSchedule"
     * This id is mainly used to resolve links after parsing an instance
     */

    public String idCurveSchedule;

    /**
     * The current bitset describing the state of each CIM attribute of this
     * class
     */
    private BitSet currentBitset = new BitSet();

   /**
    * The bitset describing which CIM attributes of this class have to set to
    * be consistent within a "merged" context
    */
    private final BitSet minBitset = new BitSet();

   /**
    * The Map of subset<=>bitset describing which CIM attributes of this class
    * have to set to be consistent within a specific subset context
    */
    private final Map minBitsets
            = new EnumMap(Subset.class);

    
    /**
     * Utility to return the "y1value" value
     *
     * @return the value of the attribute "y1value"
     */
    public float getY1value() {
        return this.y1value;
    }

    /**
     * Utility to set the "y1value" value
     *
     * @param y1valueValue 
     *            value to set
     */
    public void setY1value(float y1valueValue) {
        this.y1value = y1valueValue;
        this.currentBitset.set(0);
    }

    /**
     * Utility to test if the value of "y1value" has been set
     *
     * @return boolean
     *            if true the attribute "y1value" is already set
     *            if false isn't yet
     */
    public boolean y1valueIsSet() {
        return this.currentBitset.get(0);
     }
    
    /**
     * Utility to return the "xvalue" value
     *
     * @return the value of the attribute "xvalue"
     */
    public float getXvalue() {
        return this.xvalue;
    }

    /**
     * Utility to set the "xvalue" value
     *
     * @param xvalueValue 
     *            value to set
     */
    public void setXvalue(float xvalueValue) {
        this.xvalue = xvalueValue;
        this.currentBitset.set(1);
    }

    /**
     * Utility to test if the value of "xvalue" has been set
     *
     * @return boolean
     *            if true the attribute "xvalue" is already set
     *            if false isn't yet
     */
    public boolean xvalueIsSet() {
        return this.currentBitset.get(1);
     }
    
    /**
     * Utility to return the "y2value" value
     *
     * @return the value of the attribute "y2value"
     */
    public float getY2value() {
        return this.y2value;
    }

    /**
     * Utility to set the "y2value" value
     *
     * @param y2valueValue 
     *            value to set
     */
    public void setY2value(float y2valueValue) {
        this.y2value = y2valueValue;
        this.currentBitset.set(2);
    }

    /**
     * Utility to test if the value of "y2value" has been set
     *
     * @return boolean
     *            if true the attribute "y2value" is already set
     *            if false isn't yet
     */
    public boolean y2valueIsSet() {
        return this.currentBitset.get(2);
     }
    
    /**
     * Utility to return the "curveSchedule"
     *
     * @return the value of the attribute "curveSchedule"
     */
    public Curve getCurveSchedule() {
        return this.curveSchedule;
    }

    /**
     * Utility to test if the value of "curveSchedule" has been set
     *
     * @return boolean
     *            if true the attribute "curveSchedule" is already set
     *            if false it isn't yet
     */
    public boolean curveScheduleIsSet() {
        return this.currentBitset.get(3);
    }

    /**
     * Utility to set the "curveScheduleValue"
     *
     * @param curveScheduleValue
     *            instance to set
     * @param setInverse
     *            boolean to specify whether to set the inverse association
     *            or not
     * @throws LinkageException
     */
    public void setCurveSchedule(
            Curve curveScheduleValue,
            boolean setInverse) throws LinkageException {
        this.curveSchedule = curveScheduleValue;
        this.currentBitset.set(3);
        if (setInverse) {
            
            if (curveScheduleValue != null) {
                curveScheduleValue.addCurveScheduleDatas(this, false);
            }
        }
    }


    /**
     * Factory of the class
     *
     * @param id
     *            id of the class CurveData to create
     * @return the class created
     */
    public static CurveData create(final String id) {
        CurveData newCurveData = new CurveData();
        newCurveData.setId(id);
        return newCurveData;
    }

    /**
     * Utility to "clear" the content of a class when a subset is invalidated
     *
     * @param subset subset to clean
     */
    @Override
    public void clearContent(Subset subset) {

        // First of all, we clear the associations:
        this.clearAssociations(subset);

        switch (subset) {
            default: // nothing to clear
        }
    }

    /**
     * Utility to read an attribute
     * This function is called by the CIMModel
     *
     * @param class_name
     *            the read name of class
     * @param attr_name
     *            the read name of attribute
     * @param value
     *            the read value of the attribute
     * @param model
     *            the interface to the model this class belongs to
     * @throws InterpretationException
     */
    @Override
    public void readAttribute(final String class_name, final String attr_name,
                              final String value, CIMModel model) throws InterpretationException {

        if (class_name.equals("CurveData")) {
            if (attr_name.equals("y1value")) {

                if (!(model.isCurrentSubsetSet())
                        || (model.getCurrentSubset() == Subset.Equipment)) {
                    float typedValue;
                    if (!value.isEmpty()) {

                        try {
                            if (value.equalsIgnoreCase("NaN")) {
                                throw new NumberFormatException();
                            }
                            typedValue = Float
                                    .parseFloat(value);
                        } catch(NumberFormatException e) {
                            throw new InterpretationException("The attribute y1value in class "
                                + "CurveData is supposed to be a Float"
                                + " but has not the expected NumberFormat");
                        }

                    } else {
                        throw new InterpretationException("The field of float"
                            + " in CurveData was found empty");
                    }

                    this.setY1value(typedValue);
                    return;
                } else {
                    StringBuilder errorMessage
                            = new StringBuilder("The attribute \"");
                    errorMessage.append(attr_name);
                    errorMessage.append("\" in class \"");
                    errorMessage.append(class_name);
                    errorMessage.append("\" cannot be defined in a file ");
                    errorMessage.append("describing an other subset than ");
                    errorMessage.append("\"Equipment\".");
                    throw new InterpretationException(errorMessage.toString());
                }
            }
            if (attr_name.equals("xvalue")) {

                if (!(model.isCurrentSubsetSet())
                        || (model.getCurrentSubset() == Subset.Equipment)) {
                    float typedValue;
                    if (!value.isEmpty()) {

                        try {
                            if (value.equalsIgnoreCase("NaN")) {
                                throw new NumberFormatException();
                            }
                            typedValue = Float
                                    .parseFloat(value);
                        } catch(NumberFormatException e) {
                            throw new InterpretationException("The attribute xvalue in class "
                                + "CurveData is supposed to be a Float"
                                + " but has not the expected NumberFormat");
                        }

                    } else {
                        throw new InterpretationException("The field of float"
                            + " in CurveData was found empty");
                    }

                    this.setXvalue(typedValue);
                    return;
                } else {
                    StringBuilder errorMessage
                            = new StringBuilder("The attribute \"");
                    errorMessage.append(attr_name);
                    errorMessage.append("\" in class \"");
                    errorMessage.append(class_name);
                    errorMessage.append("\" cannot be defined in a file ");
                    errorMessage.append("describing an other subset than ");
                    errorMessage.append("\"Equipment\".");
                    throw new InterpretationException(errorMessage.toString());
                }
            }
            if (attr_name.equals("y2value")) {

                if (!(model.isCurrentSubsetSet())
                        || (model.getCurrentSubset() == Subset.Equipment)) {
                    float typedValue;
                    if (!value.isEmpty()) {

                        try {
                            if (value.equalsIgnoreCase("NaN")) {
                                throw new NumberFormatException();
                            }
                            typedValue = Float
                                    .parseFloat(value);
                        } catch(NumberFormatException e) {
                            throw new InterpretationException("The attribute y2value in class "
                                + "CurveData is supposed to be a Float"
                                + " but has not the expected NumberFormat");
                        }

                    } else {
                        throw new InterpretationException("The field of float"
                            + " in CurveData was found empty");
                    }

                    this.setY2value(typedValue);
                    return;
                } else {
                    StringBuilder errorMessage
                            = new StringBuilder("The attribute \"");
                    errorMessage.append(attr_name);
                    errorMessage.append("\" in class \"");
                    errorMessage.append(class_name);
                    errorMessage.append("\" cannot be defined in a file ");
                    errorMessage.append("describing an other subset than ");
                    errorMessage.append("\"Equipment\".");
                    throw new InterpretationException(errorMessage.toString());
                }
            }
                StringBuilder errorMessage = new StringBuilder("The attribute \"");
                errorMessage.append(attr_name);
                errorMessage.append("\" in class \"");
                errorMessage.append(class_name);
                errorMessage
                        .append("\" could not be found in the model !");
                throw new InterpretationException(errorMessage.toString());
            } else {
                StringBuilder errorMessage = new StringBuilder("The attribute \"");
                errorMessage.append(attr_name);
                errorMessage.append("\" in class \"");
                errorMessage.append(class_name);
                errorMessage
                        .append("\" could not be found in the model !");
                throw new InterpretationException(errorMessage.toString());
            }
    }

    /**
     * Utility to read a reference to a resource
     * This function is called by the CIMModel
     *
     * @param class_name
     *            the read name of class
     * @param resource_name
     *            the read name of the associated resource
     * @param id
     *            the id of the associated resource
     * @param model
     *            the model this class belongs to
     * @throws InterpretationException
     */
    @Override
    public void readResource(final String class_name,
            final String resource_name, final String id, CIMModel model)
            throws InterpretationException, LinkageException {
        if (class_name.equals("CurveData")) {

            if (resource_name.equals("CurveSchedule")) {

                if (!(model.isCurrentSubsetSet())
                        || (model.getCurrentSubset() == Subset.Equipment)) {
                    idCurveSchedule = id.substring(1);
                    if (!super.isAddedToUnresolved()) {
                          model.addUnresolved();
                          super.addToUnresolved();
                    }

                    return;
                } else {
                    StringBuilder errorMessage
                            = new StringBuilder("The association \"");
                    errorMessage.append(resource_name);
                    errorMessage.append("\" in class");
                    errorMessage.append("\""+class_name+" \"");
                    errorMessage.append("is not supposed to be in the subset \"");
                    errorMessage.append(model.getCurrentSubset().getIdentifier());
                    errorMessage.append("\"");
                    throw new InterpretationException(errorMessage.toString());
                }
           }


            StringBuilder errorMessage = new StringBuilder("The association \"");
            errorMessage.append(resource_name);
            errorMessage.append("\" in class \"");
            errorMessage.append(class_name);
            errorMessage.append("\" could not be found in the model !");
            throw new InterpretationException(errorMessage.toString());
        } else {
            StringBuilder errorMessage = new StringBuilder("The association \"");
            errorMessage.append(resource_name);
            errorMessage.append("\" in class \"");
            errorMessage.append(class_name);
            errorMessage.append("\" could not be found in the model !");
            throw new InterpretationException(errorMessage.toString());
        }
    }

    /**
     * Utility to write the content into the CIM XML format
     *
     * @param writeID
     *            specifies whether to write the XML "id" attribute (this is used for describing concrete class)
     * @param xmlsw
     *            XMLStreamWriter where are stored the elements to write
     */
    @Override
    public void write(XMLStreamWriter xmlsw, boolean writeID) {

        /*
         * In previous versions, we used to check the consistency
         * of the instance in the context but this task is now
         * performed by the model before attempting to write.
         * Therefore each instance can now be written even if
         * it is not consistent !
         */

        if (writeID) {

            try {
                xmlsw.writeStartElement(CIMURI.CIMURI, "CurveData");
                xmlsw.writeAttribute(CIMModel.rdfURI, "ID", getId());
                // xmlsw.writeCharacters("\n");
            } catch (XMLStreamException e) {
                StringBuilder errorMessage = new StringBuilder(
                        "Error while trying to write the class ");
                errorMessage.append("CurveData ");
                errorMessage.append("which ID has been initialized to : ");
                errorMessage.append(getId());
                LOGGER.error(errorMessage.toString());
                LOGGER.error(e.toString(), e);
            }
        }
        writeClass(xmlsw);

        if (writeID) {
            try {
                xmlsw.writeEndElement();
                // xmlsw.writeCharacters("\n");
            } catch (XMLStreamException e) {
                StringBuilder errorMessage = new StringBuilder(
                        "Error while trying to write the end Element of the class ");
                errorMessage.append("CurveData ");
                errorMessage.append("which ID has been initialized to : ");
                errorMessage.append(getId());
                LOGGER.error(errorMessage.toString());
                LOGGER.error(e.toString(), e);
            }
        }

        return;
    }

    /**
     * Utility to write the content this class into the CIM/XML format according
     * to a subset
     *
     * @param subset
     *            the subset defining the context in which to write this class
     * @param writeID
     *            specifies whether to write the XML "id" attribute (this is used for describing concrete class)
     * @param xmlsw
     *            the stream in which are stored the elements to write
     */
    @Override
    public void write(XMLStreamWriter xmlsw, final Subset subset,
            boolean writeID) {

        /*
         * In previous versions, we used to check the consistency
         * of the instance in the context but this task is now
         * performed by the model before attempting to write.
         * Therefore each instance can now be written even if
         * it is not consistent !
         */

        switch (subset) {
        case Equipment: {

            if (writeID) {
                try {
                    xmlsw.writeStartElement(CIMURI.CIMURI, "CurveData");
                    xmlsw.writeAttribute(CIMModel.rdfURI, "ID", getId());
                    // xmlsw.writeCharacters("\n");
                } catch (XMLStreamException e) {
                    StringBuilder errorMessage = new StringBuilder(
                            "Error while trying to write the class ");
                    errorMessage.append("CurveData ");
                    errorMessage.append("which ID has been initialized to : ");
                    errorMessage.append(getId());
                    errorMessage.append(" in the subset ");
                    errorMessage.append("Equipment");
                   LOGGER.error(errorMessage.toString());
                   LOGGER.error(e.toString(), e);
                }
            }

            writeClass(xmlsw);
            if (writeID) {

                try {
                    xmlsw.writeEndElement();
                    // xmlsw.writeCharacters("\n");
                } catch (XMLStreamException e) {
                    StringBuilder errorMessage = new StringBuilder(
                            "Error while trying to write end element of ");
                    errorMessage.append("CurveData ");
                    errorMessage.append("which ID has been initialized to : ");
                    errorMessage.append(getId());
                    errorMessage.append(" in the subset ");
                    errorMessage.append("Equipment");
                    LOGGER.error(errorMessage.toString());
                    LOGGER.error(e.toString(), e);
                }

            }
            break;
        }
        default: {// Do nothing !
        }
        }
        return;
    }

    /**
     * Utility to resolve the links at the end of parsing
     *
     * @param model
     *            the model this class belongs to
     * @param boundaryModel
     *            the model that gather data about the boundarySet, used
     *            as a resource force links resolving
     * @throws Linkage Exception
     */
    @Override
    public void resolveLinks(CIMModel model, CIMModel boundaryModel) throws LinkageException {
        if (idCurveSchedule != null) {
            Curve attributeToSet =
                    model.searchCurve
                    (idCurveSchedule);

            if (attributeToSet != null) {
                boolean setInverse = true;

                try {
                    this.setCurveSchedule(attributeToSet, setInverse);
                } catch(LinkageException e) {
                   LOGGER.error(e.toString(), e);
                    throw new LinkageException(e.getMessage());
                }
            } else if (boundaryModel != null) {
                Curve attributeToSetFromBoundary = boundaryModel.searchCurve(idCurveSchedule);
                if(attributeToSetFromBoundary != null) {
                    attributeToSetFromBoundary.setFromBoundary(true);
                    boolean setInverse = true;
                    try {
                        this.setCurveSchedule(attributeToSetFromBoundary, setInverse);
                    } catch(LinkageException e) {
                       LOGGER.error(e.toString(), e);
                        throw new LinkageException(e.getMessage());
                    }
                    attributeToSetFromBoundary.resolveLinks(model, boundaryModel);
                } else {
                    StringBuilder errorMessage = new StringBuilder(
                            "Could not find the reference to object of type \"Curve\" and id \"");
                    errorMessage.append(idCurveSchedule);
                    errorMessage.append("\" in \"CurveData\" of id \"");
                    errorMessage.append(this.getId());
                    errorMessage.append("\" !");
                    throw new LinkageException(errorMessage.toString());
                }
            } else {
                StringBuilder errorMessage = new StringBuilder(
                        "Could not find the reference to object of type \"Curve\" and id \"");
                errorMessage.append(idCurveSchedule);
                errorMessage.append("\" in \"CurveData\" of id \"");
                errorMessage.append(this.getId());
                errorMessage.append("\" !");
                throw new LinkageException(errorMessage.toString());
            }
        }


        removeFromUnresolved();
    }

    /**
     * Utility to check whether this class is consistent according to a subset
     *
     * @param subset
     *            the subset defining the context in which to check whether this class is consistent
     * @return a ConsistencyCheck instance whose boolean attribute (consistent)
     *         indicates if this class is consistent and whose String attribute
     *         (message)
     *         indicates why this class is not consistent if it is not
     */
    @Override
    public ConsistencyCheck modelConsistency(final Subset subset) {
        BitSet intersection = new BitSet(this.minBitsets.get(subset).length());
        intersection.or(this.minBitsets.get(subset));
        // we create a copy of minBitsets.get(subset)
        intersection.and(this.currentBitset);
        boolean consistent = (this.minBitsets.get(subset).equals(intersection));
        StringBuilder message = new StringBuilder("");

        if (!consistent) {
            message.append(getMessageForConsistency(this.minBitsets.get(subset)));
        }

        return new ConsistencyCheck(consistent, message.toString());
    }

    /**
     * Utility to check whether this class is consistent in a "merged" context
     *
     * @return a ConsistencyCheck instance whose boolean attribute (consistent)
     *         indicates if this class is consistent and whose String attribute
     *         (message)
     *         indicates why this class is not consistent if it is not
     */
    @Override
    public ConsistencyCheck modelConsistency() {
        BitSet intersection = new BitSet(this.minBitset.length());
        intersection.or(this.minBitset);
        // we create a copy of minBitSet
        intersection.and(this.currentBitset);
        boolean consistent = (this.minBitset.equals(intersection));
        StringBuilder message = new StringBuilder("");

        if (!consistent) {
        message.append(getMessageForConsistency(this.minBitset));
        }

        return new ConsistencyCheck(consistent, message.toString());
    }

    /**
     * Utility to copy the "base" of an other instance of the same class
     * This utility does not copy the associations with other instances from
     * the instance to copy
     *
     * @param otherCurveData
     *            the instance to copy
     */
    public void copyBase(final CurveData otherCurveData) {
        float newy1value;
        // assigning primitive type :
        if (otherCurveData.currentBitset.get(0)) {
            newy1value = otherCurveData.getY1value();
            this.setY1value(newy1value);
          }
        float newxvalue;
        // assigning primitive type :
        if (otherCurveData.currentBitset.get(1)) {
            newxvalue = otherCurveData.getXvalue();
            this.setXvalue(newxvalue);
          }
        float newy2value;
        // assigning primitive type :
        if (otherCurveData.currentBitset.get(2)) {
            newy2value = otherCurveData.getY2value();
            this.setY2value(newy2value);
          }

        // Memory allocation has done successfully !
        // Dropping "old" objects...
        // This part may change : we do nothing to allow the user to access
        // object by their id from the global model.

        if (otherCurveData.currentBitset.get(3)) {
            Curve curveScheduleAssociation = otherCurveData.getCurveSchedule();

            //this.idCurveSchedule = (curveScheduleAssociation != null) ? curveScheduleAssociation.getId() : "";
            if (curveScheduleAssociation != null) {
                this.idCurveSchedule = curveScheduleAssociation.getId();
                // the proper bit will be set when the setter is called
            } else {
                this.idCurveSchedule = "";
            }
        }

        // TODO : Call the parent copy constructor instead ?
        super.copyBase(otherCurveData);

    }

    /**
     * Utility to return the content of this class into the CIM XML format
     *
     * @param xmlsw
     *            the stream in which are stored the elements to write
     */
    private void writeClass(XMLStreamWriter xmlsw) {

        if (currentBitset.get(0)) {

        try {
            // xmlsw.writeCharacters("\t");
            xmlsw.writeStartElement(CIMURI.CIMURI,
                    "CurveData.y1value");
            xmlsw.writeCharacters(String.valueOf(getY1value()));
            xmlsw.writeEndElement();
            // xmlsw.writeCharacters("\n");
        } catch(XMLStreamException e) {
            StringBuilder errorMessage = new StringBuilder(
                    "Error while trying to write the value of the attribute ");
            errorMessage.append("Y1value");
            errorMessage.append(" in class ");
            errorMessage.append("CurveData ");
            errorMessage.append("which ID has been initialized to : ");
            errorMessage.append(getId());
            LOGGER.error(errorMessage.toString());
            LOGGER.error(e.toString(), e);
        }
        }

        if (currentBitset.get(1)) {

        try {
            // xmlsw.writeCharacters("\t");
            xmlsw.writeStartElement(CIMURI.CIMURI,
                    "CurveData.xvalue");
            xmlsw.writeCharacters(String.valueOf(getXvalue()));
            xmlsw.writeEndElement();
            // xmlsw.writeCharacters("\n");
        } catch(XMLStreamException e) {
            StringBuilder errorMessage = new StringBuilder(
                    "Error while trying to write the value of the attribute ");
            errorMessage.append("Xvalue");
            errorMessage.append(" in class ");
            errorMessage.append("CurveData ");
            errorMessage.append("which ID has been initialized to : ");
            errorMessage.append(getId());
            LOGGER.error(errorMessage.toString());
            LOGGER.error(e.toString(), e);
        }
        }

        if (currentBitset.get(2)) {

        try {
            // xmlsw.writeCharacters("\t");
            xmlsw.writeStartElement(CIMURI.CIMURI,
                    "CurveData.y2value");
            xmlsw.writeCharacters(String.valueOf(getY2value()));
            xmlsw.writeEndElement();
            // xmlsw.writeCharacters("\n");
        } catch(XMLStreamException e) {
            StringBuilder errorMessage = new StringBuilder(
                    "Error while trying to write the value of the attribute ");
            errorMessage.append("Y2value");
            errorMessage.append(" in class ");
            errorMessage.append("CurveData ");
            errorMessage.append("which ID has been initialized to : ");
            errorMessage.append(getId());
            LOGGER.error(errorMessage.toString());
            LOGGER.error(e.toString(), e);
        }
        }

        if (currentBitset.get(3)) {
        if (idCurveSchedule != null) {
            try {
                // xmlsw.writeCharacters("\t");
                xmlsw.writeEmptyElement(CIMURI.CIMURI,
                        "CurveData.CurveSchedule");
                xmlsw.writeAttribute(CIMModel.rdfURI, "resource", "#"
                        + idCurveSchedule);
                // xmlsw.writeCharacters("\n");
            } catch(XMLStreamException e) {
                StringBuilder errorMessage = new StringBuilder(
                        "Error while trying to write the resource attribute ");
                errorMessage.append("CurveSchedule");
                errorMessage.append(" in class ");
                errorMessage.append("CurveData ");
                errorMessage.append("which ID has been initialized to : ");
                errorMessage.append(getId());
                LOGGER.error(errorMessage.toString());
                LOGGER.error(e.toString(), e);
            }
        }
        }

        return;
    }

    /**
     * Utility in charge of creating the message when the class is not
     * consistent within a specific context
     *
     * @param minBitset
     *            bitset describing which CIM attributes of this class have
     *            to be set so that it is consistent within a
     *            specific subset context
     * @return the message explaining what is not consistent
     */
    private String getMessageForConsistency(final BitSet minBitset) {

        StringBuilder message = new StringBuilder(
                "Instance of \"CurveData\" of id \"");
        message.append(this.getId());
        message.append("\" is not consistent in this context:\n");
        /*
         * XOR and then AND
         * The result is :
         * "1" : has not been set and need to be
         * "0" : has been set or is not mandatory
         */

        BitSet isNotSet = new BitSet(minBitset.length());
        isNotSet.or(minBitset);
        // we create a copy of minBitset
        isNotSet.xor(this.currentBitset);
        isNotSet.and(minBitset);

        if (isNotSet.get(0)) {
            message.append("\t\"y1value\" needs to be set\n");
        }

        if (isNotSet.get(1)) {
            message.append("\t\"xvalue\" needs to be set\n");
        }

        if (isNotSet.get(2)) {
            message.append("\t\"y2value\" needs to be set\n");
        }

        if (isNotSet.get(3)) {
            message.append("\t\"CurveSchedule\" needs to be set\n");
        }
        return message.toString();
    }

    /**
     * Copy constructor
     * The associations with other objects are not copied
     *
     * @param CurveData
     *            the reference to the class to copy
     * @return the class constructed
     */
    private CurveData(final CurveData otherCurveData) {
        // TODO : check exception safe
        this.copyBase(otherCurveData);
    }

   /**
    * Constructor of the class CurveData
    */
    protected CurveData() {

        super.subset = Subset.Equipment;
        this.minBitsets.put(Subset.StateVariables, new BitSet(4));
        this.minBitsets.put(Subset.Topology, new BitSet(4));
        BitSet classBitset = new BitSet(4);
        classBitset.set(0);
        classBitset.set(1);
        classBitset.set(2);
        classBitset.set(3);
        this.minBitsets.put(Subset.Equipment, classBitset);
    }



    /**
     * Utility to clear the associations of this class belonging to a
     * specific subset
     *
     * @param subset
     *            the subset from which to clear the associations of this class
     */
    @Override
    protected void clearAssociations(final Subset subset) {

        switch (subset) {
            case StateVariables: {
                break;
            }
            case Topology: {
                break;
            }
            case Equipment: {
                break;
            }
            default: // nothing to clear
        }
    }

    /**
     * Utility returning a copy of the "base" of this instance
     * This utility does not copy the associations with other instances
     *
     * @return a clone of this instance
     */
    public CurveData clone() {
        CurveData newInstance = new CurveData(this);
        CurveData newInstanceSP = newInstance;
        return newInstanceSP;
    }

}







© 2015 - 2024 Weber Informatics LLC | Privacy Policy