From 55925c06dcb418477f068c76ceb5f85de78f4f09 Mon Sep 17 00:00:00 2001 From: David Dykstal Date: Wed, 2 Aug 2006 02:35:23 +0000 Subject: [PATCH] bug 149339 - updating some documentation to remove etools references and fix other dead links. --- .../guide/MemoryManagement.html | 32 ++--- rse/doc/org.eclipse.dstore.doc.isv/toc.xml | 1 + rse/doc/org.eclipse.rse.doc.isv/book.css | 113 +++++++++++++++++- .../guide/Artifacts.html | 107 +++-------------- .../guide/Extensions.html | 34 +++--- .../org.eclipse.rse.doc.isv/guide/Model.html | 71 +++++------ .../guide/ModelRSE.png | Bin 0 -> 17799 bytes .../guide/api/dialogs/uiDialogsAPI.html | 15 +-- .../guide/api/logger/uiLoggerAPI.html | 15 +-- .../guide/api/messages/uiMessageAPI.html | 10 +- .../guide/api/modelAPI.html | 3 +- .../guide/api/properties/uiPropertiesAPI.html | 2 +- .../guide/api/widgets/uiWidgetsAPI.html | 2 +- .../guide/overview.html | 32 ----- .../guide/plugin/popup.html | 14 +-- .../guide/plugin/propertypage.html | 12 +- .../guide/plugin/subsystem.html | 24 ++-- .../guide/plugin/systemtype.html | 2 +- .../guide/rse_int_architecture.html | 10 +- .../guide/rse_int_files.html | 16 +++ .../guide/rse_int_filters.html | 15 +++ .../guide/rse_int_overview.html | 33 ++++- .../guide/rse_int_processes.html | 16 +++ .../guide/rse_int_shells.html | 16 +++ .../tutorial/DeveloperAdapterFactory.html | 5 +- .../guide/tutorial/subsystem.html | 90 +++++++------- .../guide/tutorials.html | 3 +- .../questions/index.html | 10 +- rse/doc/org.eclipse.rse.doc.isv/toc.xml | 14 +-- .../org.eclipse.rse.doc.isv/topics_Guide.xml | 5 +- .../topics_Reference.xml | 2 +- 31 files changed, 386 insertions(+), 338 deletions(-) create mode 100755 rse/doc/org.eclipse.rse.doc.isv/guide/ModelRSE.png create mode 100755 rse/doc/org.eclipse.rse.doc.isv/guide/rse_int_files.html create mode 100755 rse/doc/org.eclipse.rse.doc.isv/guide/rse_int_filters.html create mode 100755 rse/doc/org.eclipse.rse.doc.isv/guide/rse_int_processes.html create mode 100755 rse/doc/org.eclipse.rse.doc.isv/guide/rse_int_shells.html diff --git a/rse/doc/org.eclipse.dstore.doc.isv/guide/MemoryManagement.html b/rse/doc/org.eclipse.dstore.doc.isv/guide/MemoryManagement.html index eaff9c9256e..3d48741818d 100644 --- a/rse/doc/org.eclipse.dstore.doc.isv/guide/MemoryManagement.html +++ b/rse/doc/org.eclipse.dstore.doc.isv/guide/MemoryManagement.html @@ -13,55 +13,55 @@

Since RSE version 7.0 a substantial design change has been made to the DataStore that significantly reduces the memory footprint of the DataElements in high-use, long up-time situations. A problem that was identified was that in the DataStore, DataElements were -rarely being destroyed – only when the files they represented were themselves deleted. When directories in the file system were explored, +rarely being destroyed - only when the files they represented were themselves deleted. When directories in the file system were explored, DataElements were being created to represent the files in the directories, but these DataElements were cached and never removed from the cache. Therefore, the number of DataElements in the DataStore was always increasing. With no opportunity to clear the cache or remove elements, the memory usage of the server continued to grow boundlessly.

-

A solution – “spirit” DataElements:

+

A solution - Spirit DataElements

-The solution to the problem of an ever-growing set of DataElements was simple – provide a mechanism of removing “old” +The solution to the problem of an ever-growing set of DataElements was simple - provide a mechanism of removing "old" DataElements and thus shrinking the set. Since server memory real-estate comes at a much higher premium, the focus here is on server-side memory reduction. The assumption then, is that DataElements in the DataStore will always remain in memory on the client, but that in the mirror-image DataStore that resides on the server, DataElements can be removed.

Formerly, the RSE ran under the assumption that the client and server DataStores mirrored each other. The new -implementation will have a server DataStore tree that is only a subset of all the elements in the client tree (because +implementation has a server DataStore tree that is only a subset of all the elements in the client tree (because some elements get removed.) In order to accommodate this, a new boolean member variable was added to the DataElement -class called “isSpirit”. When this variable is set to true it means different things on the client and server. On the -server, a “spirit” DataElement means the element is treated in much the same way as a “deleted” element. At the first -opportunity, the element is purged from the DataStore and garbage collected by the JVM – freeing up memory. On the client, -a “spirit” element means that that particular DataElement’s counterpart has been made a spirit; thus the client “knows” +class called "isSpirit". When this variable is set to true it means different things on the client and server. On the +server, a "spirit" DataElement means the element is treated in much the same way as a "deleted" element. At the first +opportunity, the element is purged from the DataStore and garbage collected by the JVM - freeing up memory. On the client, +a "spirit" element means that that particular DataElement's counterpart has been made a spirit; thus the client "knows" that its twin element on the server side has either been deleted, or is about to be deleted.

-

Disconnecting “old” DataElements:

+

Disconnecting "old" DataElements:

How is it determined when to mark a given DataElement as a spirit? It was decided that the decision to this would be left to clients of the DataStore (the miners), rather than to the DataStore itself. This was done for the purposes of granularity: some individual miners may not want DataElements to be ever purged, some might want only specific elements, etc. As an example, the UniversalFileSystemMiner employs the FileClassifier to classify files returned from a directory -query, and after each file has been classified, the DataStore’s disconnectObject() method is called on the DataElement +query, and after each file has been classified, the DataStore's disconnectObject() method is called on the DataElement representing that file, setting the stage for its becoming a spirit.

Controlling the queue of DataElements:

A new class, the DataElementRemover, running in its own thread, maintains a queue of objects that were passed into -DataStore’s disconnectObject() method; each object is stored in the queue along with the time it was added. The +DataStore's disconnectObject() method; each object is stored in the queue along with the time it was added. The DataElementRemover is configurable by two command-line options: -DSPIRIT_EXPIRY_TIME=x and -DSPIRIT_INTERVAL_TIME=y; -where x and y are integers representing a number of seconds. Every y seconds, the queue checks its elements and “makes -spirit” all those that are older than x seconds. The DataElement is then refreshed, and the change propagated to the +where x and y are integers representing a number of seconds. Every y seconds, the queue checks its elements and "makes +spirit" all those that are older than x seconds. The DataElement is then refreshed, and the change propagated to the client. On the server side, the DataElement is deleted at the first opportunity.

Turning on the feature:

-On the client side, this feature is always “on”. It is the server which is configured to do or not to do the spirit -DataElement behaviour. This way, backwards compatibility is maintained – if a new client connects to an old server, or a +On the client side, this feature is always "on". It is the server which is configured to do or not to do the spirit +DataElement behaviour. This way, backwards compatibility is maintained - if a new client connects to an old server, or a server with spirit turned off, the client detects this and operates as before. If an old client connects to a new server with spirit turned on, the server detects that the client does not have spirit capability and behaves as it did before.

-To turn on the spirit feature on the server side, one needs to include the command-line option –DDSTORE_SPIRIT_ON=true. +To turn on the spirit feature on the server side, one needs to include the command-line option -DDSTORE_SPIRIT_ON=true. The server scripts have been packaged in order to do this by default.

diff --git a/rse/doc/org.eclipse.dstore.doc.isv/toc.xml b/rse/doc/org.eclipse.dstore.doc.isv/toc.xml index 37f4d9e9338..66c07c020fc 100755 --- a/rse/doc/org.eclipse.dstore.doc.isv/toc.xml +++ b/rse/doc/org.eclipse.dstore.doc.isv/toc.xml @@ -7,6 +7,7 @@ + diff --git a/rse/doc/org.eclipse.rse.doc.isv/book.css b/rse/doc/org.eclipse.rse.doc.isv/book.css index 157414c6c66..bd2fe14b0ba 100755 --- a/rse/doc/org.eclipse.rse.doc.isv/book.css +++ b/rse/doc/org.eclipse.rse.doc.isv/book.css @@ -1 +1,112 @@ -@import "../PRODUCT_PLUGIN/book.css"; +P.Code { + display: block; + text-align: left; + text-indent: 0.00pt; + margin-top: 0.000000pt; + margin-bottom: 0.000000pt; + margin-right: 0.000000pt; + margin-left: 15pt; + font-size: 10.000000pt; + font-weight: normal; + font-style: normal; + color: #4444CC; + text-decoration: none; + vertical-align: baseline; + text-transform: none; + font-family: "Courier New", Courier, monospace; +} +H6.CaptionFigColumn { + display: block; + text-align: left; + text-indent: 0.000000pt; + margin-top: 3.000000pt; + margin-bottom: 11.000000pt; + margin-right: 0.000000pt; + margin-left: 0.000000pt; + font-size: 9.000000pt; + font-weight: bold; + font-style: Italic; + color: #000000; + text-decoration: none; + vertical-align: baseline; + text-transform: none; +} +P.Note { + display: block; + text-align: left; + text-indent: 0pt; + margin-top: 19.500000pt; + margin-bottom: 19.500000pt; + margin-right: 0.000000pt; + margin-left: 30pt; + font-size: 11.000000pt; + font-weight: normal; + font-style: Italic; + color: #000000; + text-decoration: none; + vertical-align: baseline; + text-transform: none; +} +EM.UILabel { + font-weight: Bold; + font-style: normal; + text-decoration: none; + vertical-align: baseline; + text-transform: none; +} +EM.CodeName { + font-weight: Bold; + font-style: normal; + text-decoration: none; + vertical-align: baseline; + text-transform: none; + font-family: "Courier New", Courier, monospace; +} + +body, html { border: 0px } + + +/* following font face declarations need to be removed for DBCS */ + +body, h1, h2, h3, h4, h5, h6, p, table, td, caption, th, ul, ol, dl, li, dd, dt {font-family: Arial, Helvetica, sans-serif; color: #000000} +pre { font-family: "Courier New", Courier, monospace;} + +/* end font face declarations */ + +/* following font size declarations should be OK for DBCS */ +body, h1, h2, h3, h4, h5, h6, p, table, td, caption, th, ul, ol, dl, li, dd, dt {font-size: 10pt; } +pre { font-size: 10pt} + +/* end font size declarations */ + +body { background: #FFFFFF; margin-bottom: 1em } +h1 { font-size: 18pt; margin-top: 5; margin-bottom: 1 } +h2 { font-size: 14pt; margin-top: 25; margin-bottom: 3 } +h3 { font-size: 11pt; margin-top: 20; margin-bottom: 3 } +h4 { font-size: 10pt; margin-top: 20; margin-bottom: 3; font-style: italic } +p { margin-top: 10px; margin-bottom: 10px } +pre { margin-left: 6; font-size: 9pt; color: #4444CC } +a:link { color: #0000FF } +a:hover { color: #000080 } +a:visited { text-decoration: underline } +ul { margin-top: 10px; margin-bottom: 10px; } +li { margin-top: 5px; margin-bottom: 5px; } +li p { margin-top: 5px; margin-bottom: 5px; } +ol { margin-top: 10px; margin-bottom: 10px; } +dl { margin-top: 10px; margin-bottom: 10px; } +dt { margin-top: 5px; margin-bottom: 5px; font-weight: bold; } +dd { margin-top: 5px; margin-bottom: 5px; } +strong { font-weight: bold} +em { font-style: italic} +var { font-style: italic} +div.revision { border-left-style: solid; border-left-width: thin; + border-left-color: #7B68EE; padding-left:5 } +th { font-weight: bold } + +a.command-link { +} +a.command-link img { + border-width: 0px; + border-style: none; + vertical-align: middle; +} diff --git a/rse/doc/org.eclipse.rse.doc.isv/guide/Artifacts.html b/rse/doc/org.eclipse.rse.doc.isv/guide/Artifacts.html index 325de4c521a..85967ef230b 100755 --- a/rse/doc/org.eclipse.rse.doc.isv/guide/Artifacts.html +++ b/rse/doc/org.eclipse.rse.doc.isv/guide/Artifacts.html @@ -33,26 +33,27 @@ The view contains a prompt to create new Hosts, and pop-up menu actions to renam

Hosts contain attributes, or data, that is saved between sessions of the workbench. These attributes are the host name, the remote system's host name and system type, an optional description, and a user Id that is used by default by each subordinate subsystem, at host time. -Underneath, all Hosts are stored via RSE persistence in an Eclipse project named RemoteSystemshosts, which +Underneath, all Hosts are stored via RSE persistence in an Eclipse project named RemoteSystemsConnections, which the user can enable for team support, allowing Hosts to be shared by a team.

Profiles

To facilitate team-shared and user-unique Hosts, -Hosts are owned by profiles. These are simply folders in the RemoteSystemshosts +Hosts are owned by profiles. These are simply folders in the RemoteSystemsConnections project, as it turns out, within which all other data including Hosts are scoped. Internally profiles are realized as SystemProfile objects, managed by the SystemProfileManager. -For each profile there is also a SystemhostPool object +For each profile there is also a SystemHostPool object created to manage the Hosts within that profile. There are menu actions for the -user to create and manage profiles. The collective of all Hosts of all active profiles are shown in the Remote Systems view, +user to create and manage profiles. The collective of all Hosts of all active profiles are shown in the +Remote Systems view, and the user can easily decide which profiles are active using the local pulldown menu of the Remote Systems view. -The list of profiles currently active is stored locally on each user's workstation, and not shared by the team. +The list of profiles currently active is stored locally on each user's workstation, and not shared by teams. By default, there exists a profile named Team, and a profile with a name unique to this user. When the first host is created the user is asked to supply this unique name, which defaults to the hostname of their workstation. Whenever a new host is created, the user is prompted for an active profile to contain the new host. Both default profiles are active initially, so all Hosts from each are shown. There is a preferences -setting to show the host names qualified by their profile name. After synchronizing the RemoteSystemshost +setting to show the host names qualified by their profile name. After synchronizing the RemoteSystemsConnections project with a team repository, using the RSE team view, all profiles of all members of the team will exist in the user's workspace, and hence all the Hosts created by all the team members. However, only the two default profiles are active, so the Hosts @@ -60,13 +61,16 @@ in the other profiles are not seen unless the user explicitly makes another prof for:

    -
  1. Team-shared Hosts (created in the team profile or any profile all team members make active)
  2. User-private Hosts (created in their own profile or any profile not active by default)
  3. User-roaming, whereby a user uses a different workstation than usual, and then synchronizes with the -team repository and sets their profile to be active. +
  4. Team-shared Hosts (created in the Team profile or any profile all team members make active) +
  5. User-private Hosts (created in their own profile or any profile not active by default) +
  6. User-roaming, whereby a user uses a different workstation than usual, +and then synchronizes with the team repository and sets their profile to be active.

As an aside, user IDs and passwords are not shared with the team repository, but rather stored only locally per workstation. -Each subsystem can have a unique user ID, which if not set is inherited from its host, which in turn if not set is inherited from the +Each subsystem can have a unique user ID, which if not set is inherited from its host, +which in turn if not set is inherited from the user ID preferences setting for the appropriate system type.

@@ -94,30 +98,6 @@ remote commands. There is also a Remote Commands view supplied that logs all com randomly enter a command to be run remotely. The commands all execute within the same shell, and users can launch additional shells for the same host. -For iSeries Hosts, these subsystems work with the folders and files in the Integrated File System, -and run commands in the QSHELL Unix-like environment. When using a WebSphere Studio configuration that -supports it, there is also additional subsystem configurations that supply three more subsystems for each -iSeries host: -
    -
  1. iSeries Objects. This accesses the libraries, objects, and members in the native QSYS file system, allowing -users to explore and manipulate them via RSE-supplied actions. For programmers, this also supplies -common APIs for listing remote libraries, objects, members, records, and fields, with various filtering -capabilities, as well as editing remote source members. Furthermore, there are a number of iSeries-specific -user interface actions, wizards, dialogs, and widgets that programmers can easily re-use. -
  2. iSeries Commands. This accesses the QSYS command shell and allows remote execution of any CL command. Users -can pre-defined commands or use the Commands view to randomly enter and run a command. For programmers, there -are APIs supplied to execute a remote CL command, with message retrieval. -
  3. iSeries Jobs. This accesses the iSeries jobs the user has access to, allowing limited exploration -and manipulation of those jobs. For programmers, this also supplies APIs for listing jobs, with various -filtering capabilities. -
-From any of these iSeries-specific subsystems, programmers can access the Toolbox for Java AS400 object -for the current session, thus avoiding redundant signon requests for the user, and inheritence of existing -job attributes. There is also a method for returning a JDBC host object for accessing DB2/400 databases -on that iSeries host. Both of these getter methods are available in the -ISeries system object all iSeries -subsystems share. System objects are described next.

-

Systems and System Managers

While not seen by the user, subsystem objects are required to return a connectorservice object via the getConnectorService() method. @@ -134,7 +114,7 @@ system class that is easily extended.

It may be the case that multiple subsystems, each from a different subsystem configuration, share the same live host for a given host object. To enable this, the framework supplies a base -connector service manager class +connector service manager class that can be used to manage a single shared connector service object across multiple subsystems. It uses a hashtable to store and return the connector service objects, keyed by a subsystem interface that all subsystems sharing the same connector service object are to implement. The subclass of the base connector service manager class supplies that interface. Further, the subclass @@ -205,65 +185,6 @@ this is the default case for the default filter pool. reference it.

- -

User Actions and Named Types

-

-If the subsystem configuration returns true to the -supportsUserDefinedActions -method, users can create their own actions -that appear in the pop-up menu for remote objects, using the Work With User Actions action and -dialog. User actions use substitution variables that are resolved at -runtime to various attributes of the selected remote objects. The actions themselves are run -on the remote system -of the host where the objects are listed from. User actions are instances of the -SystemUDAActionElement -class from the org.eclipse.rse.core.ui.uda package. -
-
-User actions can be scoped to only appear for objects of a -particular type. To facilitate this, users can create named types which are names that represent -one or more types of remote objects. Internally, they are -SystemUDTypeElement objects. -This is done using the Work With Named Types action and -dialog.

-

-User actions are contained by each subsystem factory, scoped by profile. You can programmatically access them by calling -getSubSystemActions -in a subsystem configuration object. They are scoped to the configuration, not the subsystem, -so the same list of actions is available for every host. The User Actions cascading menu -for remote objects lists all the actions defined for all active profiles, whose file type scoping criteria matches the -types of the currently selected remote objects. When users define new actions, they specify the profile to contain them. -This design allows for: -

    -
  1. Team actions. This is done by defining actions in the team profile or any profile all team members -have been instructed to make active. This is useful for common actions shared by all team members. -
  2. Private actions. This is done by defining actions in the user's profile or any profile that other team members -do not make active. -
-

Named types, however, are not scoped by profile. Rather, there is only one master list, per subsystem factory. -It is assumed there will be fewer of these, and they are not likely to be different per user. -

- -

Compile Commands

-

-If the subsystem configuration returns true to the -supportsCompileActions -method, users will see a Compile action in -the pop-up menu for compilable source files. Clearly, this support usually only makes sense for subsystems that -list remote source files. Whether a selected file is compilable or not is decided by the subsystem factory. It -actually defers this request to a compile manager, which must be programmed by subclassing the supplied base -class for this. The compile manager is also responsible for pre-supplying default compile commands. -

-

-The framework also supplies a Work With Compile Commands action and dialog, -by which users can create their own compile commands, -per source type. Compile commands internally are SystemCompileCommand objects. -These compile commands are stored per subsystem configuration, such that they are usable across all Hosts. -They are also scoped by profile, and the cascading compile action will list all compile commands from all active profiles, -for the selected file's source type. This scoping by profile, as with user actions, enables team support such that -users can see and can easily access their own compile commands and any shared compile commands. -

-

Preferences

Many of the default characteristics of the Remote System Explorer view and perspective are configurable by each user diff --git a/rse/doc/org.eclipse.rse.doc.isv/guide/Extensions.html b/rse/doc/org.eclipse.rse.doc.isv/guide/Extensions.html index d56a5f4d670..18c768bf315 100755 --- a/rse/doc/org.eclipse.rse.doc.isv/guide/Extensions.html +++ b/rse/doc/org.eclipse.rse.doc.isv/guide/Extensions.html @@ -52,38 +52,38 @@ Here are the extension points that are defined by the RSE: Description - org.eclipse.rse.core.popupMenus + org.eclipse.rse.core.systemType + For defining new system types that show up in the New Connection wizard. + + + org.eclipse.rse.core.subsystemConfiguration + For defining new subsystems that appear when a connection is expanded. + + + org.eclipse.rse.core.archivehandlers + For supporting additional archive file types, such as is done today for zip, jar and tar files. This adds support for expanding the archives and supporting all the usual actions on the contents. + + + org.eclipse.rse.ui.popupMenus For defining actions, which appear in the pop-up menu of remote objects listed in the Remote Systems view. - org.eclipse.rse.core.propertyPages + org.eclipse.rse.ui.propertyPages For defining property pages, which appear in the Properties dialog when users select the Properties action from the pop-up menu of remote objects listed in the Remote Systems view. - org.eclipse.rse.core.subsystemfactory - For defining new subsystems that appear when a connection is expanded. - - - org.eclipse.rse.core.systemtype - For defining new system types that show up in the New Connection wizard. - - - org.eclipse.rse.core.remoteSystemsViewPreferencesAction + org.eclipse.rse.ui.remoteSystemsViewPreferencesAction For contributing a fastpath action to jump to your preferences page, from the local pulldown menu of the Remote Systems view. - org.eclipse.rse.core.compile + org.eclipse.rse.ui.compile For contributing compile commands to the Compile menus and Work With Compile Commands dialog. - org.eclipse.rse.core.archivehandlers - For supporting additional archive file types, such as is done today for zip, jar and tar files. This adds support for expanding the archives and supporting all the usual actions on the contents. - - - org.eclipse.rse.core.setPreferenceDefaults + org.eclipse.rse.ui.rseConfigDefaults For solution providers that are building a product that includes RSE, this extension point allows you to pre-set some out-of-box preference values. For example, whether the New Connection tree item is shown in Remote Systems view. diff --git a/rse/doc/org.eclipse.rse.doc.isv/guide/Model.html b/rse/doc/org.eclipse.rse.doc.isv/guide/Model.html index dba1d5cea69..0defa67769c 100755 --- a/rse/doc/org.eclipse.rse.doc.isv/guide/Model.html +++ b/rse/doc/org.eclipse.rse.doc.isv/guide/Model.html @@ -11,43 +11,46 @@

Remote System Explorer Model

-

The underlying containment model for the RSE artifacts is shown here. -

+

The underlying containment model for the RSE static artifacts is shown here.

+

+

At runtime, the model takes a slightly different form:

+ \ No newline at end of file diff --git a/rse/doc/org.eclipse.rse.doc.isv/guide/ModelRSE.png b/rse/doc/org.eclipse.rse.doc.isv/guide/ModelRSE.png new file mode 100755 index 0000000000000000000000000000000000000000..d079e6e261ac0c130d128b40f721b45c90777c7b GIT binary patch literal 17799 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

-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 image - SystemSelectFileTypesAction + SystemSimpleSelectDialog @@ -151,15 +151,11 @@ development and test effort. All these dialogs are in package org.eclipse.rse.ui.actions package.

- -

In addition to these universal dialogs, there are dialogs specific to the Files subsystem supplied by IBM. These enable selection -of remote files or folders. They can be found in the -org.eclipse.rse.files.ui.dialogs package. -

- +

In addition to these universal dialogs, there are dialogs specific to the Files subsystem supplied by IBM. These enable selection of remote files or folders. They can be found in the org.eclipse.rse.files.ui.dialogs package.

+
@@ -179,7 +175,6 @@ org.eclipse.rse.files.ui.dialogs package.
Class
- -


+


diff --git a/rse/doc/org.eclipse.rse.doc.isv/guide/api/logger/uiLoggerAPI.html b/rse/doc/org.eclipse.rse.doc.isv/guide/api/logger/uiLoggerAPI.html index 21cf04b63a1..4160df4369b 100755 --- a/rse/doc/org.eclipse.rse.doc.isv/guide/api/logger/uiLoggerAPI.html +++ b/rse/doc/org.eclipse.rse.doc.isv/guide/api/logger/uiLoggerAPI.html @@ -31,7 +31,7 @@ This log file support offers the ability to log the following types of log messa
  • Define a static variable to hold the Logger instance, as in:
    protected static Logger log = null;
  • Instantiate the Logger object, in your plugin class constructor, as in:
    -if (log == null) log = LoggerFactory.getInst(this); + if (log == null) log = LoggerFactory.getLogger(this);
  • For convenience, offer fastpaths to the logXXX methods in your Logger instance:
         public static void logInfo(String message)
    @@ -52,16 +52,11 @@ This log file support offers the ability to log the following types of log messa
         }
         public static void logDebugMessage(String prefix, String message)
         {		
    -        if (Logger.DEBUG)
    -        {
    -           log.logDebugMessage(prefix, message);
    -        }
    +     log.logDebugMessage(prefix, message);
         }		
     
  • In the shutdown method of your plugin class, close the log file: - - LoggerFactory.freeInst(this); - +LoggerFactory.freeLogger(this);

    Typically your code will write a healthy number of messages to the log file, to help you determine what went wrong in an error situation in production. However, since this can result in a large number of @@ -73,10 +68,10 @@ preference page is supplied:

    Using The Common RSE Log File

    -

    To log your messages to the common RSE log file in .metadata\plugins\org.eclipse.rse.core, +

    To log your messages to the common RSE log file in .metadata\plugins\org.eclipse.rse.ui, either base your plugin class on the org.eclipse.rse.core.SystemBasePlugin class and use the inherited logging methods, or instead of instantiating your own Logging object, re-use the -RSE-supplied logging object by calling getDefault().getLog() in the org.eclipse.core.SystemBasePlugin +RSE-supplied logging object by calling getDefault().getLog() in the org.eclipse.rse.ui.RSEUIPlugin class.

    diff --git a/rse/doc/org.eclipse.rse.doc.isv/guide/api/messages/uiMessageAPI.html b/rse/doc/org.eclipse.rse.doc.isv/guide/api/messages/uiMessageAPI.html index 0c60f6e33ac..8018d11cc45 100755 --- a/rse/doc/org.eclipse.rse.doc.isv/guide/api/messages/uiMessageAPI.html +++ b/rse/doc/org.eclipse.rse.doc.isv/guide/api/messages/uiMessageAPI.html @@ -39,18 +39,18 @@ from the same SystemBasePluginThe SystemMessageFile Class

    The loadMessageFile method in SystemBasePlugin, returns an instance of -SystemMessageFile, +SystemMessageFile, representing the parsed message file. It is methods in this which return individual messages.

    The SystemMessage Class

    The getMessage method in SystemBasePlugin returns an instance of -SystemMessage, +SystemMessage, representing an individual message from the message file.

    To do message variable substitution, call the appropriate overload of the makeSubstitution method in -the message object, passing as many parameters as there are unique substitution variables in the message. +the message object, passing as many parameters as there are unique substitution variables in the message.

    -

    To get the first level message text, call getLevelOneText on the message object. To get -the second level help, call getLevelTwoText. +

    To get the first level message text, call getLevelOneText on the message object. To get +the second level help, call getLevelTwoText.

    The SystemMessageDialog Class

    diff --git a/rse/doc/org.eclipse.rse.doc.isv/guide/api/modelAPI.html b/rse/doc/org.eclipse.rse.doc.isv/guide/api/modelAPI.html index cefb940b8d7..460a7956193 100755 --- a/rse/doc/org.eclipse.rse.doc.isv/guide/api/modelAPI.html +++ b/rse/doc/org.eclipse.rse.doc.isv/guide/api/modelAPI.html @@ -10,8 +10,7 @@

    RSE Model API

    -

    The front door to accessing the elements of the RSE model is the -SystemRegistry, which is a +

    The front door to accessing the elements of the RSE model is the ISystemRegistry, which is a singleton object accessible via SystemStartHere.getSystemRegistry().

    The system registry will get you access to profiles, connections and subsystem factories. diff --git a/rse/doc/org.eclipse.rse.doc.isv/guide/api/properties/uiPropertiesAPI.html b/rse/doc/org.eclipse.rse.doc.isv/guide/api/properties/uiPropertiesAPI.html index a1a8c9bd60e..718893a03a1 100755 --- a/rse/doc/org.eclipse.rse.doc.isv/guide/api/properties/uiPropertiesAPI.html +++ b/rse/doc/org.eclipse.rse.doc.isv/guide/api/properties/uiPropertiesAPI.html @@ -65,7 +65,7 @@ point, you need to know the class or, preferably, interface that the objects imp

    Property Pages for RSE Remote Resources

    Remote resources have no underlying eclipse resource, and typically all are instances of the same class, meaning insufficient fidelity in scoping property pages to a remote resource of a particular type. Because of this, -the RSE supplies its propertyPages extension point, for remote resources, which allows for +the RSE supplies its propertyPages extension point, for remote resources, which allows for very explicit scoping of the property page to very specific types of remote resources.

    diff --git a/rse/doc/org.eclipse.rse.doc.isv/guide/api/widgets/uiWidgetsAPI.html b/rse/doc/org.eclipse.rse.doc.isv/guide/api/widgets/uiWidgetsAPI.html index d433ec31a72..39f1366eda8 100755 --- a/rse/doc/org.eclipse.rse.doc.isv/guide/api/widgets/uiWidgetsAPI.html +++ b/rse/doc/org.eclipse.rse.doc.isv/guide/api/widgets/uiWidgetsAPI.html @@ -60,7 +60,7 @@ package contains some specialized widgets you may find a use for: Uses the InheritableEntryField to prompt for a TCP/IP port, where toggling to the left means port 0, or let the "first available port". - SystemConnectionCombo + SystemHostCombo This is a combo box that displays the currently defined RSE system connections. The list can be subset by system type or types. Further, you can optionally display a New button beside the combo that allows the user to create a new connection. diff --git a/rse/doc/org.eclipse.rse.doc.isv/guide/overview.html b/rse/doc/org.eclipse.rse.doc.isv/guide/overview.html index 2fe023ec4c1..de5f0c3612d 100755 --- a/rse/doc/org.eclipse.rse.doc.isv/guide/overview.html +++ b/rse/doc/org.eclipse.rse.doc.isv/guide/overview.html @@ -10,37 +10,5 @@ -

    Remote System Explorer Overview

    - -

    -The perspective for managing connections is the Remote -System Explorer (RSE), and the primary tree-view within it is the -Remote Systems view. We assume you are already familiar with the RSE perspective, or will familiarize -yourself with it, and you are now interested in learning how to extend it. We also assume that you -already understand the concepts of plug-ins, extension points, and the workbench UI. You do not need -to be familiar with workspace resources, as the RSE does not use these to realize the artifacts it -shows to the user. -

    -

    A user can extend the Remote System Explorer by adding their own filters, user actions, and compile commands. -They may also customize the RSE by setting preferences.

    -

    -As a programmer, you can extend the Remote System Explorer by using RSE-unique extension points to -add property pages to remote objects, add actions to the pop-up menus for remote objects, and -even create your own subsystems that appear when a connection is expanded. The full Eclipse application -programming interface (API) set is -at your disposal for these, as well as the API set supplied by the Remote System Explorer. Furthermore, -you can use existing Eclipse extension points to author menu items, tool bar actions, pop-up menu actions, -and more for non-remote objects in the Remote System Explorer. -

    -

    -This guide explains all underlying -artifacts and model of the Remote System Explorer, the RSE extension points, and highlights the -important APIs available for your use. -

    \ No newline at end of file diff --git a/rse/doc/org.eclipse.rse.doc.isv/guide/plugin/popup.html b/rse/doc/org.eclipse.rse.doc.isv/guide/plugin/popup.html index 8639bb42ed4..3c39a717d93 100755 --- a/rse/doc/org.eclipse.rse.doc.isv/guide/plugin/popup.html +++ b/rse/doc/org.eclipse.rse.doc.isv/guide/plugin/popup.html @@ -11,7 +11,7 @@

    Plugging In Popup Menu Actions

    -

    The org.eclipse.rse.ui.popupMenus extension point is defined in the +

    The org.eclipse.rse.ui.popupMenus extension point is defined in the plugin org.eclipse.rse.ui, and it is patterned after Eclipse's org.eclipse.ui.popupMenus extension point. However, it is both simplified and extended specifically for remote objects. @@ -22,7 +22,7 @@ which scopes the remote objects to which the child elements apply:

    • id.A unique ID for this extension point. Not used, but required by Eclipse.
    • filtering attributes.To scope which remote objects these actions should show up for. -Described in the documentation +Described in the documentation of this element.

    Within each <objectContribution> element are zero or more <menu> elements for @@ -137,16 +137,6 @@ as shown here: in org.eclipse.rse.files.ui plugin Specialized base class offering specific support for any remote file object pop-up menu action, for any system type. - - ISeriesAbstractIFSPopupMenuExtensionAction - in com.ibm.etools.iseries.core plugin - Specialized base class offering specific support for iSeries IFS file or folder pop-up menu actions. - - - ISeriesAbstractQSYSPopupMenuExtensionAction - in com.ibm.etools.iseries.core plugin - Specialized base class offering specific support for pop-up menu actions for iSeries objects in the QSYS file system. - diff --git a/rse/doc/org.eclipse.rse.doc.isv/guide/plugin/propertypage.html b/rse/doc/org.eclipse.rse.doc.isv/guide/plugin/propertypage.html index 79c619c7329..7d1d69fda9f 100755 --- a/rse/doc/org.eclipse.rse.doc.isv/guide/plugin/propertypage.html +++ b/rse/doc/org.eclipse.rse.doc.isv/guide/plugin/propertypage.html @@ -11,7 +11,7 @@

    Plugging In Property Pages

    -

    The org.eclipse.rse.ui.propertyPages extension point is defined in the +

    The org.eclipse.rse.ui.propertyPages extension point is defined in the plugin org.eclipse.rse.ui, and it is patterned after Eclipse's org.eclipse.ui.propertyPages extension point, but both simplified and extended specifically for remote objects.
    What is a property page? @@ -66,16 +66,6 @@ selected on the left side. The supplied classes are listed here: in org.eclipse.rse.files.ui plugin. Specialized base class offering specific support for any remote file object property page. - - ISeriesAbstractIFSPropertyPageExtensionAction - in com.ibm.etools.iseries.core plugin. - Specialized base class offering specific support for iSeries IFS file or folder property pages. - - - ISeriesAbstractQSYSPropertyPageExtensionAction - in com.ibm.etools.iseries.core plugin. - Specialized base class offering specific support for property pages for iSeries objects in the QSYS file system. -

    diff --git a/rse/doc/org.eclipse.rse.doc.isv/guide/plugin/subsystem.html b/rse/doc/org.eclipse.rse.doc.isv/guide/plugin/subsystem.html index 9936ea856cb..d30cb3624bd 100755 --- a/rse/doc/org.eclipse.rse.doc.isv/guide/plugin/subsystem.html +++ b/rse/doc/org.eclipse.rse.doc.isv/guide/plugin/subsystem.html @@ -11,7 +11,7 @@

    Plugging In SubSystems

    -

    The org.eclipse.rse.ui.subsystemConfiguration +

    The org.eclipse.rse.ui.subsystemConfiguration extension point is defined in the plugin org.eclipse.rse.ui. This is the most complex extension point to use, but also the most powerful. It enables tool providers to register a class that creates subsystem objects, which appear under @@ -19,7 +19,7 @@ a connection when a connection is expanded in the Remote Systems view. For example, here is an iSeries connection with four subsystems, each created by a subsystem configuration registered with this extension point.

    -

    The extension markup is quite simple for this extension point, +

    The extension markup is quite simple for this extension point, as it has only one element, <configuration>, with only a few simple attributes to supply:

      @@ -45,7 +45,7 @@ interface, as described in the following programming details section.

      It is important to remember what the purpose of a subsystem is, and how it fits in the overall RSE model, so as to understand the programming details for supporting subsystems via this subsystem configuration extension point. Minimally speaking, this extension point requires a class that implements the interface -ISubSystemFactory. +ISubSystemFactory. Ultimately, the intent of a subsystem configuration is to provide individual subsystem instances to each connection, and the intent of a subsystem instance is to present remote resources for display or manipulation purposes. Thus, you must also create a class implementing the interface ISubSystem.
      @@ -61,8 +61,8 @@ are expanded, which results in a call to in the subsystem object.
      Furthermore, you will want to supply your own new-filter and -change-filter actions. + href="../../reference/api/org/eclipse/rse/ui/filters/actions/SystemNewFilterAction.html">new-filter and +change-filter actions. If filters are not supported, then these remote resources are shown immediately when the subsystem itself is expanded, via a call to getChildren. Either way the resulting resources are displayed to the user. To facilitate the displaying of these objects in the RSE views, the objects @@ -123,7 +123,7 @@ following summarizes the minimum set of classes you will be creating in order to remote resource - AbstractResource + AbstractResource Can be used as a base class for the objects representing remote resources. @@ -164,7 +164,7 @@ following summarizes the minimum set of classes you will be creating in order to

    • Designing the classes to represent the remote resources (your model) that you will show from your subsystem. Each must implement the org.eclipse.core.runtime.IAdaptable interface from Eclipse. It is also very helpful if they also maintain a reference to the subsystem which created them. The base class - AbstractResource is offered to help with this.
    • + AbstractResource is offered to help with this.
    • Designing the syntax of the filter string that will be used as a pattern to tell your subsystem what resources to show. For example, for files this might be of the form "path/generic-name /options". It is the job of your subsystem to interpret these strings and return a list of remote resources matching the criteria capturing in the string. You will eventually design a user interface to prompt the user for one the @@ -177,8 +177,8 @@ following summarizes the minimum set of classes you will be creating in order to
      • return a singleton instance of the system manager from step 3 in its getSystemManager method,
      • manage persistent properties via calls to the inherited setVendorAttribute - and getVendorAttribute methods, -
      • use your communications layer to return instances of your model objects in its internalResolveFilterString method. + and getVendorAttribute methods, +
      • use your communications layer to return instances of your model objects in its internalResolveFilterString method. The input to this is one or more strings such as you designed in step 5. It will return all remote resources matching the criteria captured in the input filter string. You may also find the org.eclipse.rse.services.clientserver.NamePatternMatcher class to be handy in comparing a generic pattern to a particular input. This class is in the runtime/clientserver.jar file, @@ -186,7 +186,7 @@ following summarizes the minimum set of classes you will be creating in order to
    • Creating a subclass of DefaultSubSystemFactoryImpl.
    • -
    • Defining your subsystemConfiguration extension in your plugin.xml file.
    • +
    • Defining your subsystemConfiguration extension in your plugin.xml file.
    • For each remote resource class you created in step 4, you need to create an adapter class, which extends AbstractSystemViewAdapter and which implements ISystemRemoteElementAdapter. @@ -225,11 +225,11 @@ following summarizes the minimum set of classes you will be creating in order to configureFilterDialog and in it calling setFilterStringEditPane on the given dialog. -
    • Override the getNewFilterPoolFilterAction(SystemFilterPool, Shell) +
    • Override the getNewFilterPoolFilterAction(SystemFilterPool, Shell) method in your subsystem factory, to return an instance of your new-filter action. You can actually avoid creating an action subclass if you choose, by calling the configuration methods in the RSE-supplied new-filter action class. -
    • Override the getChangeFilterAction(SystemFilter, Shell) +
    • Override the getChangeFilterAction(SystemFilter, Shell) method in your subsystem factory, to return an instance of your change-filter action. You can actually avoid creating an action subclass if you choose, by calling the configuration methods in the RSE-supplied change-filter action class. diff --git a/rse/doc/org.eclipse.rse.doc.isv/guide/plugin/systemtype.html b/rse/doc/org.eclipse.rse.doc.isv/guide/plugin/systemtype.html index e0c1f26d77d..a925b8190d5 100755 --- a/rse/doc/org.eclipse.rse.doc.isv/guide/plugin/systemtype.html +++ b/rse/doc/org.eclipse.rse.doc.isv/guide/plugin/systemtype.html @@ -11,7 +11,7 @@

      Plugging In System Types

      -

      The org.eclipse.rse.ui.systemType extension point is defined in the +

      The org.eclipse.rse.ui.systemType extension point is defined in the plugin org.eclipse.rse.ui. It enables new system types to be defined in the Remote System Explorer's New Connection wizard, such that users can define connections to systems of that type. For example, diff --git a/rse/doc/org.eclipse.rse.doc.isv/guide/rse_int_architecture.html b/rse/doc/org.eclipse.rse.doc.isv/guide/rse_int_architecture.html index cb6b98613ec..0bb2eeb9422 100755 --- a/rse/doc/org.eclipse.rse.doc.isv/guide/rse_int_architecture.html +++ b/rse/doc/org.eclipse.rse.doc.isv/guide/rse_int_architecture.html @@ -25,22 +25,20 @@ This is the headless, barebones API layer that is used to interact with different protocols to provide remote services that can be integrated into RSE. By default, RSE defines the following types of services: -

        + +
        • File Service - for listing, modifying, copying, and transfering remote file and folders
        • Shell Service - for launching remote shells and interacting with the associated IO
        • Process Services - for listing remote processes
        -

        -

        +

        New service types can be added as needed, either in core RSE, or extensions to the base. The service interfaces are defined loosely so that different implementations of the same service can be made using different protocols. For example, the IFileService could be implemented locally with java.io, FTP, DataStore or some other protocol. Similarly, the IShellService could be implemented locally via DataStore, telnet, SSH or something else.

        - - -

        RSE Subsystem Layer

        +

        RSE Subsystem Layer

        RSE subsystems integrate the services of the service layer with connection information, model artifacts and persistence. Each subsystem is associated with a single service type. For example, the file service subsystem is associated with the diff --git a/rse/doc/org.eclipse.rse.doc.isv/guide/rse_int_files.html b/rse/doc/org.eclipse.rse.doc.isv/guide/rse_int_files.html new file mode 100755 index 00000000000..d9e1654060c --- /dev/null +++ b/rse/doc/org.eclipse.rse.doc.isv/guide/rse_int_files.html @@ -0,0 +1,16 @@ + + + + + + + + +RSE UI + + + + +

        RSE Files

        + + \ No newline at end of file diff --git a/rse/doc/org.eclipse.rse.doc.isv/guide/rse_int_filters.html b/rse/doc/org.eclipse.rse.doc.isv/guide/rse_int_filters.html new file mode 100755 index 00000000000..8040c89902e --- /dev/null +++ b/rse/doc/org.eclipse.rse.doc.isv/guide/rse_int_filters.html @@ -0,0 +1,15 @@ + + + + + + + +RSE Hosts + + + +

        RSE Filters

        + + + diff --git a/rse/doc/org.eclipse.rse.doc.isv/guide/rse_int_overview.html b/rse/doc/org.eclipse.rse.doc.isv/guide/rse_int_overview.html index 0b530d99ba8..66d81b30ed3 100755 --- a/rse/doc/org.eclipse.rse.doc.isv/guide/rse_int_overview.html +++ b/rse/doc/org.eclipse.rse.doc.isv/guide/rse_int_overview.html @@ -10,6 +10,35 @@

        RSE Overview

        +

        +The perspective for managing connections is the Remote +System Explorer (RSE), and the primary tree-view within it is the +Remote Systems view. We assume you are already familiar with the RSE perspective, +or will familiarize yourself with it, and you are now interested in learning how to extend it. We also assume that you +already understand the concepts of plug-ins, extension points, and the workbench UI. You do not need +to be familiar with workspace resources, as the RSE does not use these to realize the artifacts it +shows to the user. +

        +

        A user can extend the Remote System Explorer by adding their own +filters, +user actions, and +compile commands. +They may also customize the RSE by setting +preferences.

        +

        +As a programmer, you can extend the Remote System Explorer by using +RSE-unique extension points to +add property pages to remote objects, add actions to the pop-up menus for remote objects, and +even create your own subsystems that appear when a connection is expanded. The full Eclipse application +programming interface (API) set is +at your disposal for these, as well as the API set supplied by the Remote System Explorer. Furthermore, +you can use existing Eclipse extension points to author menu items, tool bar actions, pop-up menu actions, +and more for non-remote objects in the Remote System Explorer. +

        +

        +This guide explains all underlying +artifacts and model of the Remote System Explorer, the RSE extension points, and highlights the +important APIs available for your use. +

        - - + \ No newline at end of file diff --git a/rse/doc/org.eclipse.rse.doc.isv/guide/rse_int_processes.html b/rse/doc/org.eclipse.rse.doc.isv/guide/rse_int_processes.html new file mode 100755 index 00000000000..d73ae1dbc1f --- /dev/null +++ b/rse/doc/org.eclipse.rse.doc.isv/guide/rse_int_processes.html @@ -0,0 +1,16 @@ + + + + + + + + +RSE UI + + + + +

        RSE Processes

        + + \ No newline at end of file diff --git a/rse/doc/org.eclipse.rse.doc.isv/guide/rse_int_shells.html b/rse/doc/org.eclipse.rse.doc.isv/guide/rse_int_shells.html new file mode 100755 index 00000000000..774da36b19e --- /dev/null +++ b/rse/doc/org.eclipse.rse.doc.isv/guide/rse_int_shells.html @@ -0,0 +1,16 @@ + + + + + + + + +RSE UI + + + + +

        RSE Shells

        + + \ No newline at end of file diff --git a/rse/doc/org.eclipse.rse.doc.isv/guide/tutorial/DeveloperAdapterFactory.html b/rse/doc/org.eclipse.rse.doc.isv/guide/tutorial/DeveloperAdapterFactory.html index 3a23a33f1d7..d98c6aa0f62 100755 --- a/rse/doc/org.eclipse.rse.doc.isv/guide/tutorial/DeveloperAdapterFactory.html +++ b/rse/doc/org.eclipse.rse.doc.isv/guide/tutorial/DeveloperAdapterFactory.html @@ -16,8 +16,9 @@ package samples.model; import org.eclipse.core.runtime.IAdapterFactory; -import com.ibm.etools.systems.core.ui.view.*; -import org.eclipse.ui.views.properties.IPropertySource; +import org.eclipse.rse.ui.view.AbstractSystemRemoteAdapterFactory; +import org.eclipse.rse.ui.view.ISystemViewElementAdapter; +import org.eclipse.ui.views.properties.IPropertySource; /** * This factory maps requests for an adapter object from a given remote object. diff --git a/rse/doc/org.eclipse.rse.doc.isv/guide/tutorial/subsystem.html b/rse/doc/org.eclipse.rse.doc.isv/guide/tutorial/subsystem.html index f9b73905cfc..77f4a64d21b 100755 --- a/rse/doc/org.eclipse.rse.doc.isv/guide/tutorial/subsystem.html +++ b/rse/doc/org.eclipse.rse.doc.isv/guide/tutorial/subsystem.html @@ -5,13 +5,12 @@ -Creating a Subsystem Factory +Creating a Subsystem Configuration -

        Creating a Subsystem Factory

        -

        In this tutorial, you will use the RSE subsystemfactory -extension point to show new subsystems within connections, when they are expanded. Effectively, +

        Creating a Subsystem Configuration

        +

        In this tutorial, you will use the RSE subsystemConfiguration extension point to show new subsystems within connections, when they are expanded. Effectively, you will add a new remote-accessing tool to the Remote System Explorer.

        A full-blown tutorial to illustrate this extension point is a bit difficult without inventing @@ -40,46 +39,41 @@ decide what resources to expose and what actions on those resources.


        -

        Step By Step: Creating a Subsystem Factory

        -

        If you have not already, first create or prepare a plugin project -We will follow the steps listed in the Overview of Steps section in the description of the plugin.

        . - -
          +

          Step By Step: Creating a Subsystem Configuration

          +

          If you have not already, first create or prepare a plugin project +We will follow the steps listed in the Overview of Steps section in the description of the plugin.

          +
          1. Create a package named samples.subsystems, by right-clicking on the src folder -and using the New->Package wizard. In the new package, create an empty interface -named IDeveloperSubSystem, -by right-clicking on the package and selecting New->Interface. +and using the New->Package wizard. In the new package, create an empty interface named IDeveloperSubSystem, by right-clicking on the package and selecting New->Interface.
          2. Also in package samples.subsystems, use New->Class to -create a class named DeveloperSystem that extends superclass -AbstractSystem, +create a class named DeveloperConnectorService that extends superclass +AbstractConnectorService, selecting the option to include Constructors from superclass. Edit the result to add a connected instance variable that is used in the methods, as shown in bold here.
          3. Again in package samples.subsystems, use New->Class to create a class named DeveloperSystemManager that extends superclass -AbstractSystemManager, +AbstractSystemManager, selecting the option to include Constructors from superclass. Edit the result to add a factory method, and flesh out the methods, as highlighted here.
          4. Create a package named samples.model. Create two classes in it: TeamResource and DeveloperResource, each of which extend -AbstractResource. +AbstractResource.
              -
            1. Edit DeveloperResource to add name, id, and deptNbr properties, - as shown in bold here. -
            2. Edit TeamResource to add name and developers (array) properties, - as shown in bold here. +
            3. Edit DeveloperResource to add name, id, and deptNbr properties, as shown in bold here.
            4. Edit TeamResource to add name and developers (array) properties, + as shown in bold here.
          5. You need to think about filter support. For now, you can keep it simple: users can only create filters that list teams, by specifying a single string that is either a scalar or a generic team name. If scalar, one team will be shown when the filter is expanded. If generic, all teams matching the generic pattern will be listed. Given the simplicity, you will not need to create a filter string class to perform parsing. As a result, you have nothing to do for this step.
          6. Return to package samples.subsystems, and create class DeveloperSubSystem -that extends DefaultSubSystemImpl. +that extends SubSystem. Edit the generated class to add code highlighted here.
          7. Again in package samples.subsystems, create class DeveloperSubSystemFactory -that extends DefaultSubSystemFactoryImpl. +that extends SubSystemConfiguration. Edit the generated class to add code highlighted here.
          8. In the project's root folder, find and edit file rseSamplesResources.properties and @@ -88,25 +82,25 @@ add the line highlighted here.
          9. Update your plugin.xml file to include the following lines:
            
                <!-- ======================================= -->
            -   <!-- SubSystem Factory                       -->
            +   <!-- SubSystem Configuration                 -->
                <!-- ======================================= -->
            -   <extension point="com.ibm.etools.systems.core.subsystemfactory">
            -        <factory
            +   <extension point="org.eclipse.rse.ui.subsystemConfiguration">
            +        <configuration
                          id="samples.subsystems.factory"
                          systemtypes="Linux;Unix;Windows"
                          name="Teams"
            -             class="samples.subsystems.DeveloperSubSystemFactory"
            +             class="samples.subsystems.DeveloperSubSystemConfiguration"
                          category="users"
                          vendor="ACME"
                     >
            -        </factory>
            +        </configuration>
                </extension>            
             
            Note: You would normal use the icon and iconLive attributes to specify a unique icon for your subsystem, but to keep it simple here, just use the default icon.
          -

          Now you are far enough along that you can try our what you have, before proceeding. Select +

          Now you are far enough along that you can try our what you have, before proceeding. Select Run->Run As->Run-time workbench. Create a new Linux connection in the RSE, and expand it. You'll now see your new subsystem, which you can expand to see its default filter, which in turn you can expand to see your hardcoded list of teams:
          @@ -120,29 +114,25 @@ by creating adapters for the resources:

          1. Select the samples.model package, and:
              -
            1. Create a new class named TeamResourceAdapter - that extends com.ibm.etools.systems.core.ui.view.AbstractSystemViewAdapter and implements - com.ibm.etools.systems.core.ui.view.ISystemRemoteElementAdapter. +
            2. Create a new class named TeamResourceAdapter that extends AbstractSystemViewAdapter and implements + ISystemRemoteElementAdapter. Edit the generated class and add the code highlighted here.
            3. Create a new class named DeveloperResourceAdapter - that extends com.ibm.etools.systems.core.ui.view.AbstractSystemViewAdapter and implements - com.ibm.etools.systems.core.ui.view.ISystemRemoteElementAdapter. + that extends AbstractSystemViewAdapter and implements + ISystemRemoteElementAdapter. Edit the generated class and add the code highlighted here.
            4. Next, you need the icons for your remote resources, which you referred to in your adapters. Edit the RSESamplesPlugin file and edit the initializeImageRegistry - to add the lines of code highlighted here. Now, you need the icons. Select the RSESamplesPlugin project, - right-click and select New->Folder and create a folder named icons. Select the new folder, and use File->Import to - import the team.gif and developer.gif files from the plugins\com.ibm.etools.systems.doc.isv\icons folder, - typically found c:\wdsc\iseries where c:\wdsc is where you installed this product. -
            5. + to add the lines of code highlighted here. Now, you need the icons. Select the RSESamplesPlugin project, right-click and select New->Folder and create a folder named icons. Select the new folder, and use File->Import to + import the team.gif and developer.gif files from the org.eclipse.rse.examples.tutorial/icons folder.
          2. Creating the adapters does nothing until you register them with the platform. To do that, you need an adapter factory class and you need to register it with the platform:
            1. Select the samples.model package and in it create a class named - DeveloperAdapterFactory that extends AbstracSystemRemoteAdapterFactory + DeveloperAdapterFactory that extends AbstractSystemRemoteAdapterFactory and implements interface org.eclipse.core.runtime.IAdapterFactory. Edit the generate class as per the highlighted code here.
            2. @@ -190,22 +180,22 @@ evolve the functions via your adapter, should you want to: