| <!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, 2007. 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</title> |
| </head> |
| |
| <body bgcolor="#ffffff"> |
| <h1>DeveloperSubSystem Class After Editing</h1> |
| <pre><samp> |
| package samples.subsystems; |
| |
| <strong>import java.util.Vector; |
| |
| import org.eclipse.core.runtime.IProgressMonitor; |
| import org.eclipse.rse.core.subsystems.IConnectorService;</strong> |
| import org.eclipse.rse.core.subsystems.SubSystem; |
| <strong>import org.eclipse.rse.core.model.IHost; |
| import org.eclipse.rse.services.clientserver.NamePatternMatcher; |
| |
| import samples.model.DeveloperResource; |
| import samples.model.TeamResource;</strong> |
| |
| <strong>/** |
| * This is our subsystem, which manages the remote connection and resources for |
| * a particular system connection object. |
| */</strong> |
| public class DeveloperSubSystem extends SubSystem |
| { |
| <strong>private TeamResource[] teams; // faked-out master list of teams</strong> |
| <strong>private Vector devVector = new Vector(); // faked-out master list of developers</strong> |
| <strong>private static int employeeId = 123456; // employee Id factory</strong> |
| |
| /** |
| * @param host |
| * @param connectorService |
| */ |
| public DeveloperSubSystem(IHost host, IConnectorService connectorService) { |
| super(host, connectorService); |
| } |
| |
| /* (non-Javadoc) |
| * @see org.eclipse.rse.core.subsystems.SubSystem#initializeSubSystem(org.eclipse.core.runtime.IProgressMonitor) |
| */ |
| public void initializeSubSystem(IProgressMonitor monitor) { |
| } |
| |
| /* (non-Javadoc) |
| * @see org.eclipse.rse.core.subsystems.ISubSystem#uninitializeSubSystem(org.eclipse.core.runtime.IProgressMonitor) |
| */ |
| public void uninitializeSubSystem(IProgressMonitor monitor) { |
| } |
| |
| <strong>/** |
| * For drag and drop, and clipboard support of remote objects. |
| * |
| * 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 of getAbsoluteName(Object) in our resource adapters |
| if (key.startsWith("Team_")) //$NON-NLS-1$ |
| { |
| String teamName = key.substring(5); |
| TeamResource[] allTeams = getAllTeams(); |
| for (int idx=0; idx < allTeams.length; idx++) |
| if (allTeams[idx].getName().equals(teamName)) |
| return allTeams[idx]; |
| } |
| else if (key.startsWith("Devr_")) //$NON-NLS-1$ |
| { |
| String devrId = key.substring(5); |
| DeveloperResource[] devrs = getAllDevelopers(); |
| for (int idx=0; idx < devrs.length; idx++) |
| if (devrs[idx].getId().equals(devrId)) |
| return devrs[idx]; |
| } |
| return null; |
| }</strong> |
| |
| <strong>/** |
| * 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. |
| */ |
| protected Object[] internalResolveFilterString(String filterString, IProgressMonitor monitor) |
| throws java.lang.reflect.InvocationTargetException, |
| java.lang.InterruptedException |
| { |
| // 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 < allTeams.length; idx++) |
| { |
| if (subsetter.matches(allTeams[idx].getName())) |
| v.addElement(allTeams[idx]); |
| } |
| TeamResource[] teams = new TeamResource[v.size()]; |
| for (int idx=0; idx < v.size(); idx++) |
| teams[idx] = (TeamResource)v.elementAt(idx); |
| return teams; |
| }</strong> |
| |
| <strong>/** |
| * 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. |
| * 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 "*". In future additional user-specific quick-filters may be supported. |
| */ |
| <a id="resolveFilterString"/>protected Object[] internalResolveFilterString(Object parent, String filterString, IProgressMonitor monitor) |
| throws java.lang.reflect.InvocationTargetException, |
| java.lang.InterruptedException |
| { |
| // typically we ignore the filter string as it is always "*" |
| // until support is added for "quick filters" the user can specify/select |
| // at the time they expand a remote resource. |
| |
| TeamResource team = (TeamResource)parent; |
| return team.getDevelopers(); |
| }</strong> |
| |
| <strong>// ------------------ |
| // Our own methods... |
| // ------------------</strong> |
| |
| <strong>/** |
| * 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("Team ", 4); |
| return teams; |
| }</strong> |
| |
| <strong>/** |
| * 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 < allDevrs.length; idx++) |
| allDevrs[idx] = (DeveloperResource)devVector.elementAt(idx); |
| return allDevrs; |
| }</strong> |
| |
| <strong>/* |
| * 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 < teams.length; idx++) |
| { |
| teams[idx] = new TeamResource(this); |
| teams[idx].setName(prefix + (idx+1)); |
| teams[idx].setDevelopers(createDevelopers(teams[idx].getName()+" developer",idx+1)); |
| } |
| return teams; |
| }</strong> |
| |
| <strong>/* |
| * Create and return a dummy set of developers |
| */ |
| private DeveloperResource[] createDevelopers(String prefix, int nbr) |
| { |
| DeveloperResource[] devrs = new DeveloperResource[nbr]; |
| for (int idx=0; idx < 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; |
| }</strong> |
| |
| } |
| </samp></pre> |
| </body> |
| </html> |