package OWL2generator;

/**
 *  <b><code>Individual</code></b> class represents an OWL class
 *  individual with a name, serial number, and annotation.The annotation
 *  originates from a configuration file.
 *  <code>Individual</code> serves as a building block for
 *  OWL/XML ontology generation within the framework. It encapsulates
 *  information about individual entities within the ontology, potentially
 *  using configuration file data for annotation details.
 *  <p>
 *  <b>Functionality:</b>
 *  <p>
 *  Stores individual name (following W3C OWL naming conventions with a
 *  unique suffix).
 *  <p>
 *  Tracks a serial number for individual name generation, likely incremented
 *   upon object creation.
 *  <p>
 *  Holds an annotation potentially comprised of an OWL class annotation and
 *  a dynamically generated role description.
 *  <p>
 *  <code>Constructor</code> initializes member variables 
 *  (<code>individualName</code>, <code>serialNumber</code>, 
 *  <code>annotation</code>).
 *  <p>
 *  <code>incrementSerialNumber</code> method increases the serial number
 *  (used in name generation).
 *  <p>
 *  <b>Key Points:</b>
 *  <p>
 *  No getter/setter methods are present, suggesting direct member
 *  variable access.
 *  <p>
 *  <b>Environment:</b>
 *  <ul>
 *  <li>    IDE:              Eclipse IDE for Java Developers
 *  <li>    Version:          2021-12 (4.22.0)
 *  <li>    Build id:         20211202-1639
 *  <li>    HW Model Name:    iMac, MacOS Monterey, 12.5.1
 *  <li>    Processor Name:   Quad-Core Intel Core i5
 *  <li>    Processor Speed:  3.2 GHz
 *  <li>    Memory:           32 GB 1867 MHz DDR3
 *  <li>    Disk:             APPLE SSD SM0256G    
 *  <li>    Serial:           DGKRC080GG7V
 *  </ul>
 *  @version 1-001
 *  @since   2024/06/19
 *  @author  Edit Hlaszny (https://www.edithlaszny.eu/ edithlaszny@gmail.com)
 */

public class Individual
{
    /**
     *  Following the W3C OWL naming conventions, the beginning of the 
     *  individual name is the same as the name of the OWL class (except 
     *  for one difference: the very first character is lower case). 
     *  The name formatted in this way also includes an _ID99999 suffix, 
     *  where 99999 is a decimal serial number supplemented with leading zeros. 
     */
	String individualName ;
	
    /**
     *  The serial number of the individual's name, which increments continuously,
     *  whenever a new instance is needed. 
     */
	int    serialNumber ;

    /**
     *  The annotation describes the role of the individual is composed of two
     *  parts: the first part corresponds to the OWL class annotation, and the 
     *  second one refers to the role of the individual, which is dynamically 
     *  generated individual in a given triplet. 
     */
	String annotation ;
	
	/*
	 *  The constructor sets the class members only. No getters/setters were used.
	 *  
	 *  @param individualName  OWL class name + suffix
	 *  @param serialNumber    continuously enhancing serial number
	 *  @param annotation      individuals an
	 */
	Individual(String individualName,
	           int    serialNumber,
	           String annotation
	          )
	{
		this.individualName = individualName ;
		this.serialNumber   = serialNumber ;
		this.annotation     = annotation ;
		
	}   //  end of constructor()

	/*
	 *  The method increments the serial number (the serial number is part of the individual's
	 *  name, as suffix)
	 */
	void incrementSerialNumber()
	{
		this.serialNumber++ ;
		
	}   //  end of method incrementSerialNumber
	
}   //  end of class Individual
