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 returns true
.
The method write
is used to store the object in an .ivl
file.
This method is overridden to store
the string in the member variable value
.Note that the super.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.
Note
The 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.