This lesson builds on top of the plug-in project you created
in Exercise 5, and modified in Exercise 6. In this lesson, you 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
.
About this task
To create the CARMAContextProvider
class:
Procedure
- Make sure that you are in the Plug-in Development perspective.
In the Package Explorer view, expand the
com.ibm.carma.plugin.view
plug-in
project that you used for Exercises 5 and 6.
- Right click 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
closes and the
CustomContentProvider
class is 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 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 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.