1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-04-23 14:42:11 +02:00
cdt/rse/doc/org.eclipse.rse.doc.isv/guide/tutorial/DeveloperSubSystem2.html
2006-05-30 15:32:53 +00:00

233 lines
8.4 KiB
HTML
Executable file

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8">
<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
<meta name="copyright" content="Copyright (c) IBM Corporation and others 2002, 2006. This page is made available under license. For full details see the LEGAL in the documentation book that contains this page." >
<LINK REL="STYLESHEET" HREF="../../book.css" TYPE="text/css">
<title>DeveloperSubSystem Class After Editing Supporting Multiple Filter Types</title>
</head>
<body bgcolor="#ffffff">
<h1>DeveloperSubSystem Class After Editing Supporting Multiple Filter Types</h1>
<p>
<pre><samp>
package samples.subsystems;
import samples.model.*;
import com.ibm.etools.systems.dftsubsystem.impl.DefaultSubSystemImpl;
import com.ibm.etools.systems.subsystems.impl.*;
import com.ibm.etools.systems.subsystems.*;
import org.eclipse.core.runtime.*; // for IProgressMonitor
import com.ibm.etools.systems.core.clientserver.NamePatternMatcher;
import java.util.*;
/**
* This is our subsystem, which manages the remote connection and resources for
* a particular system connection object.
*/
public class DeveloperSubSystem extends DefaultSubSystemImpl
{
private TeamResource[] teams; // faked-out master list of teams
private Vector devVector = new Vector(); // faked-out master list of developers
private static int employeeId = 123456; // employee Id factory
/**
* Constructor for DeveloperSubSystem.
*/
public DeveloperSubSystem()
{
super();
}
/**
* Return a singleton instance of an AbstractSystemManager subclass that manages
* a pool of ISystem objects, one per system connection. By default, getSystem()
* calls this, unless you override getSystem().
* &lt;p&gt;
* @return DeveloperSystemManager.getTheDeveloperSystemManager()
*/
public AbstractSystemManager getSystemManager()
{
return DeveloperSystemManager.getTheDeveloperSystemManager();
}
/**
* For drag and drop, and clipboard support of remote objects.
* &lt;p&gt;
* Return the remote object within the subsystem that corresponds to
* the specified unique ID. Because each subsystem maintains it's own
* objects, it's the responsability of the subsystem to determine
* how an ID (or key) for a given object maps to the real object.
* By default this returns null.
*/
public Object getObjectWithAbsoluteName(String key)
{
// Functional opposite getAbsoluteName(Object) in our resource adapters
if (key.startsWith(&quot;Team_&quot;))
{
String teamName = key.substring(5);
TeamResource[] allTeams = getAllTeams();
for (int idx=0; idx&lt;allTeams.length; idx++)
if (allTeams[idx].getName().equals(teamName))
return allTeams[idx];
}
else if (key.startsWith(&quot;Devr_&quot;))
{
String devrId = key.substring(5);
DeveloperResource[] devrs = getAllDevelopers();
for (int idx=0; idx&lt;devrs.length; idx++)
if (devrs[idx].getId().equals(devrId))
return devrs[idx];
}
return null;
}
/**
* When a filter is expanded, this is called for each filter string in the filter.
* Using the criteria of the filter string, it must return objects representing remote resources.
* For us, this will be an array of TeamResource objects.
*
* @param monitor - the progress monitor in effect while this operation performs
* @param filterString - one of the filter strings from the expanded filter.
*/
<a name="resolve"></a>protected Object[] internalResolveFilterString(IProgressMonitor monitor, String filterString)
throws java.lang.reflect.InvocationTargetException,
java.lang.InterruptedException
{
<b>int slashIdx = filterString.indexOf('/');
if (slashIdx &lt; 0)
{</b>
// Fake it out for now and return dummy list.
// In reality, this would communicate with remote server-side code/data.
TeamResource[] allTeams = getAllTeams();
// Now, subset master list, based on filter string...
NamePatternMatcher subsetter = new NamePatternMatcher(filterString);
Vector v = new Vector();
for (int idx=0; idx&lt;allTeams.length; idx++)
{
if (subsetter.matches(allTeams[idx].getName()))
v.addElement(allTeams[idx]);
}
TeamResource[] teams = new TeamResource[v.size()];
for (int idx=0; idx&lt;v.size(); idx++)
teams[idx] = (TeamResource)v.elementAt(idx);
return teams;
<b>}
else
{
String teamName = filterString.substring(0, slashIdx);
String devrName = filterString.substring(slashIdx+1);
TeamResource[] allTeams = getAllTeams();
TeamResource match = null;
for (int idx=0; (match==null) &amp;&amp; (idx&lt;allTeams.length); idx++)
if (allTeams[idx].getName().equals(teamName))
match = allTeams[idx];
if (match != null)
{
DeveloperResource[] allDevrs = match.getDevelopers();
// Now, subset master list, based on filter string...
NamePatternMatcher subsetter = new NamePatternMatcher(devrName);
Vector v = new Vector();
for (int idx=0; idx&lt;allDevrs.length; idx++)
{
if (subsetter.matches(allDevrs[idx].getName()))
v.addElement(allDevrs[idx]);
}
DeveloperResource[] devrs = new DeveloperResource[v.size()];
for (int idx=0; idx&lt;v.size(); idx++)
devrs[idx] = (DeveloperResource)v.elementAt(idx);
return devrs;
}
}
return null;</b>
}
/**
* When a remote resource is expanded, this is called to return the children of the resource, if
* the resource's adapter states the resource object is expandable. &lt;br&gt;
* For us, it is a Team resource that was expanded, and an array of Developer resources will be returned.
*
* @param monitor - the progress monitor in effect while this operation performs
* @param parent - the parent resource object being expanded
* @param filterString - typically defaults to &quot;*&quot;. In future additional user-specific quick-filters may be supported.
*/
protected Object[] internalResolveFilterString(IProgressMonitor monitor, Object parent, String filterString)
throws java.lang.reflect.InvocationTargetException,
java.lang.InterruptedException
{
// typically we ignore the filter string as it is always &quot;*&quot;
// until support is added for &quot;quick filters&quot; the user can specify/select
// at the time they expand a remote resource.
TeamResource team = (TeamResource)parent;
return team.getDevelopers();
}
// ------------------
// Our own methods...
// ------------------
/**
* Get the list of all teams. Normally this would involve a trip the server, but we
* fake it out and return a hard-coded local list.
*/
public TeamResource[] getAllTeams()
{
if (teams == null)
teams = createTeams(&quot;Team &quot;, 4);
return teams;
}
/**
* Get the list of all developers. Normally this would involve a trip the server, but we
* fake it out and return a hard-coded local list.
*/
public DeveloperResource[] getAllDevelopers()
{
DeveloperResource[] allDevrs = new DeveloperResource[devVector.size()];
for (int idx=0; idx&lt;allDevrs.length; idx++)
allDevrs[idx] = (DeveloperResource)devVector.elementAt(idx);
return allDevrs;
}
/*
* Create and return a dummy set of teams
*/
private TeamResource[] createTeams(String prefix, int howMany)
{
TeamResource[] teams = new TeamResource[howMany];
for (int idx=0; idx&lt;teams.length; idx++)
{
teams[idx] = new TeamResource(this);
teams[idx].setName(prefix + (idx+1));
teams[idx].setDevelopers(createDevelopers(teams[idx].getName()+&quot; developer&quot;,idx+1));
}
return teams;
}
/*
* Create and return a dummy set of developers
*/
private DeveloperResource[] createDevelopers(String prefix, int howMany)
{
DeveloperResource[] devrs = new DeveloperResource[howMany];
for (int idx=0; idx&lt;devrs.length; idx++)
{
devrs[idx] = new DeveloperResource(this);
devrs[idx].setName(prefix + (idx+1));
devrs[idx].setId(Integer.toString(employeeId++));
devrs[idx].setDeptNbr(Integer.toString((idx+1)*100));
devVector.add(devrs[idx]); // update master list
}
return devrs;
}
}
</samp></pre>
</p>
</body>
</html>