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-2025 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/dsol/manual/" target="_blank">DSOL Manual</a>. The DSOL
10 * project is distributed under a three-clause BSD-style license, which can be found at
11 * <a href="https://simulation.tudelft.nl/dsol/docs/latest/license.html" target="_blank">DSOL License</a>.
12 * </p>
13 * @author <a href="https://www.linkedin.com/in/peterhmjacobs">Peter Jacobs </a>
14 * @author <a href="https://github.com/averbraeck">Alexander Verbraeck</a>
15 * @author Niels Lang.
16 * @since 1.5
17 */
18 public interface Property
19 {
20 /**
21 * Retrieves the name of the property.
22 * @return The name of the property
23 */
24 String getName();
25
26 /**
27 * Returns the type of this property's value.
28 * @return A {see java.lang.Class}instance denoting the type of this property.
29 */
30 Class<?> getType();
31
32 /**
33 * Returns whether the value of this property may be altered.
34 * @return 'True', when this property's value can be altered, 'false' otherwise.
35 */
36 boolean isEditable();
37
38 /**
39 * Set the value of this property. However, if isEditable() returns 'false', the value of this property will not be altered.
40 * Composite property values (i.e. {see java.util.Collection}or arrays) should be provided as an instance of {see
41 * java.util.Collection}.
42 * @param value The new value of this property.
43 */
44 void setValue(Object value);
45
46 /**
47 * Returns the current value of this property.
48 * @return The current value of this property.
49 */
50 Object getValue();
51
52 /**
53 * Retrieves the introspected object, which contains this Property.
54 * @return the instance
55 */
56 Object getInstance();
57
58 /**
59 * Returns the collection type of the contained value (i.e. a composite value). The definition whether a value is considered
60 * composite depends on the property paradigm used by this Property.
61 * @return the CollectionTypeEnum of this Property.
62 */
63 ComposedTypeEnum getComposedType();
64
65 /**
66 * Returns the type of the collection components contained in this Property.
67 * @return The type of the collection components contained in this Property. Returns null when isCollection() returns false,
68 * or when the component type could not be determined by this Property.
69 */
70 Class<?> getComponentType();
71 }