Another kind of user property, called named property, can also be
set on a graphic object. A named property is an instance of the
class IlvNamedProperty. This class is an abstract
class; it must be subclassed for your own needs. The difference
between a named property and a user property is mainly that this
type of property is named and can be saved with the graphic object
in an
.ivl
file when the graphic object is saved. Note that a named property
can also be stored in the manager or in a layer
object, which is described in Layers.
To store a named property in a graphic
object, use:
void setNamedProperty(IlvNamedProperty)
To get a named property, use:
void getNamedProperty(String name)
The following example shows a named
property.
import ilog.views.*; import ilog.views.io.*; public class MyNamedProperty extends IlvNamedProperty { String value; public MyNamedProperty(IlvInputStream stream) throws IlvReadFileException { super(stream); this.value = stream.readString("value"); } public MyNamedProperty(String name, String value) { super(name); this.value = value; } public MyNamedProperty(MyNamedProperty source) { super(source); this.value = source.value; } public IlvNamedProperty copy() { return new MyNamedProperty(this); } public boolean isPersistent() { return true; } public void write(IlvOutputStream stream) throws IOException { super.write(stream); stream.write("value", value); } }
This named property defines a member variable value of type
String
to store the value of the property.
Several methods have been created to allow the storage of the
property in an
.ivl
file:
- The method
isPersistent
of the named property returnstrue
. - The method
write
is used to store the object in an.ivl
file.This method is overridden to store the string in the member variablevalue
.Note that thesuper.write
call is mandatory for a correct storage of the property. - The class defines a public constructor with an
IlvInputStream
parameter.This constructor is used to reload the property from the.ivl
file.NoteThe complete name of the class (including the name of the package) will be stored in the.ivl
file. Therefore, if you change the name of the class, the property can no longer be loaded. Also, the class must be a public class to be saved in an.ivl
file. Otherwise, it is impossible for the.ivl
file reader to instantiate the class.