This lesson builds on top of the plug-in project you created
in Exercise 5, and modified in Exercise 6. In this lesson, you will
create the CustomContextProvider class, which can
be customized to fit any viewer you want. For example, if you want
the field viewer, the context provider can extend the CarmaFieldsContentProvider.
To create the CARMAContextProvider class:
- Make sure you are in the Plug-in Development perspective.
In the Package Explorer view, expand the com.ibm.carma.plugin.view plug-in
project you used for Exercises 5 and 6.
- Right click on the view package containing
the CARMADeveloperView and CustomLabelProvider classes,
and select New > Class.
- In the New Java Class dialog box
that opens, enter CustomContextProvider in
the Name text field.
- Click the Browse button to the right
of the Superclass text field. In the Superclass
Selection dialog box that opens, enter the filter text, CARMATreeContentProvider.
Select the matching class, and click OK.
- Mark the checkbox, Constructors from superclass,
and click Finish. The New Java Class dialog
will close and the CustomContentProvider class will
be created.
- Start by ensuring the following imports are included in
the Java™ class. Add any that
are missing.
import java.util.Vector;
import com.ibm.carma.model.RepositoryInstance;
import com.ibm.carma.ui.view.CarmaTreeContentProvider;
- You will want to modify the getChildren method
to change the content that is provided to the viewer. This method
is where the provider can control which items are sent to the viewer
when expanding the RAM. For this tutorial, you will implement the getChildren method
to return only repository instances that have a CARMA token
in the name and are not a listing, object, or load repository instance.
The following pseudocode demonstrates what the getChildren method
should do:
get the children of the object that would normally be returned;
for each child
{
if(the child is a repository instance)
{
if(the repository instance has a CARMA token and is not a listing, object, or load repository instance)
add the child to the list of displayable children;
}
}
Use the following is sample code for the getChildren method:public Object[] getChildren(Object parent)
{
Object[] children = super.getChildren(parent);
//Do not parse non-existant children
if(children == null)
{
return children;
}
Vector<Object> displayChildren = new Vector<Object>();
for(int i = 0; i < children.length; i++)
{
if(children[i] instanceof RepositoryInstance)
{
RepositoryInstance myContainer = (RepositoryInstance) children[i];
if (myContainer.getName().contains("CARMA"))
{
displayChildren.add(children[i]);
}
}
else
{
displayChildren.add(children[i]);
}
}
return displayChildren.toArray();
}
- Save the source and debug any errors.