Changing forms programtically
Changing forms programmatically
The Protege API provides access also to the forms configuration. An application can change programmatically the display of a class or an instance the same way in which it is changed in the Forms tab in the Protege UI.
Replacing the slot widget for a class
A class display is made up of slot widgets. For each slot type, there is a default slot widget used to display the value of the slot. For example, slot of type String and cardinality single has as a default slot widget, the TextFieldWidget.
An application can replace the widget used to display a slot on a class form. The following code uses the Newspaper project and replaces the slot widget for slot other_information
for class Editor
from TextAreaWidget
to TextFieldWidget>.
//the class for which the form needs to be customized Cls editorCls = kb.getCls("Editor"); FormWidget formWidget = (FormWidget) kb.getProject().getDesignTimeClsWidget(editorCls); //slot to customize Slot testSlot = kb.getSlot("other_information"); SlotWidget sw = formWidget.getSlotWidget(testSlot); formWidget.replaceWidget(testSlot, "edu.stanford.smi.protege.widget.TextFieldWidget"); //optional - set the label of the slot widget sw.setLabel("MyLabel"); //inform the UI that the class form has been customized formWidget.getDescriptor().setDirectlyCustomizedByUser(true);
Hiding a slot widget from the class display
Hiding a slot widget is done by replacing the slot widget with null. So, in the code from above the line containing the replaceWidget
call should be replaced with the following line:
formWidget.replaceWidget(testSlot, null);