View Javadoc
1   package nl.tudelft.simulation.introspection;
2   
3   /**
4    * A property defines a characteristic of an object. It has a name, a type and provides methods to view and alter its value.
5    * Different introspection implementation may provide different definitions for what exactly are regarded to be the 'properties'
6    * of an object.
7    * <p>
8    * Copyright (c) 2002-2024 Delft University of Technology, Jaffalaan 5, 2628 BX Delft, the Netherlands. All rights reserved. See
9    * for project information <a href="https://simulation.tudelft.nl/" target="_blank"> https://simulation.tudelft.nl</a>. The DSOL
10   * project is distributed under a three-clause BSD-style license, which can be found at
11   * <a href="https://https://simulation.tudelft.nl/dsol/docs/latest/license.html" target="_blank">
12   * https://https://simulation.tudelft.nl/dsol/docs/latest/license.html</a>.
13   * </p>
14   * @author <a href="https://www.linkedin.com/in/peterhmjacobs">Peter Jacobs </a>
15   * @author <a href="https://www.tudelft.nl/averbraeck">Alexander Verbraeck</a>
16   * @author Niels Lang.
17   * @since 1.5
18   */
19  public interface Property
20  {
21      /**
22       * Retrieves the name of the property.
23       * @return The name of the property
24       */
25      String getName();
26  
27      /**
28       * Returns the type of this property's value.
29       * @return A {see java.lang.Class}instance denoting the type of this property.
30       */
31      Class<?> getType();
32  
33      /**
34       * Returns whether the value of this property may be altered.
35       * @return 'True', when this property's value can be altered, 'false' otherwise.
36       */
37      boolean isEditable();
38  
39      /**
40       * Set the value of this property. However, if isEditable() returns 'false', the value of this property will not be altered.
41       * Composite property values (i.e. {see java.util.Collection}or arrays) should be provided as an instance of {see
42       * java.util.Collection}.
43       * @param value Object; The new value of this property.
44       */
45      void setValue(Object value);
46  
47      /**
48       * Returns the current value of this property.
49       * @return The current value of this property.
50       */
51      Object getValue();
52  
53      /**
54       * Retrieves the introspected object, which contains this Property.
55       * @return the instance
56       */
57      Object getInstance();
58  
59      /**
60       * Returns the collection type of the contained value (i.e. a composite value). The definition whether a value is considered
61       * composite depends on the property paradigm used by this Property.
62       * @return the CollectionTypeEnum of this Property.
63       */
64      ComposedTypeEnum getComposedType();
65  
66      /**
67       * Returns the type of the collection components contained in this Property.
68       * @return The type of the collection components contained in this Property. Returns null when isCollection() returns false,
69       *         or when the component type could not be determined by this Property.
70       */
71      Class<?> getComponentType();
72  }