Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [platform-vcm-dev] FW: Separating the "VCM-GUI hooks/callbacks" from the "TeamProvid er" API

Hi Geoff,

I actually agree in principal with your post.  There are a few 
clarifications I should make which I hope will address your issues.

Let's ignore the CVS support for a moment, which could be considered a 
seperate project that just happens to be done by the same team.

In that case the VCM has three components:

1.  Extension points and API in Eclipse to provide a strong level of 
integration.  There are actually several parts:

a) A small set of VCM hooks.  These are things like:  maintaining the 
mapping from project to Provider, registering your Team nature, an 
extension point for registering your wizard to form that initial 
association between project and provider, etc. 

b) Desktop hooks.  These aren't VCM specific, but are required for a 
complete VCM story.  Here the VCM team is working with the desktop team to 
understand the requirements and to advance the available support for 2.0. 
Examples are: object contribution extensions to allow a provider's menus 
to show up in JDT and other plugins, provider specific decorators, etc. 
Also related is the logical to physical problem which we are devoting some 
thinking cycles to.

c) Core hooks.  Examples here include validateSave and validateEdit.  The 
latter is actually a core hook which the standard text editor uses.

The VCM team is championing the items in (b) and (c) on behalf of 
repository providers, providing usecases and requirements to the other 
teams.


2. Headless API.  We feel it is important that there exist an API that 
plug-ins can call in order to do some simple repository neutral VCM 
operations.  Since these operations would typically be scripted (e.g. a 
build script), they can't rely on prompting etc. and so must be headless. 
Currently our ITeamProvider API supports this, but perhaps shouldn't (more 
on this later).

3.  Generic UI (as you mentioned), and an API to leverage this.  This is 
currently ITeamProvider again, plus some additional APIs to enable things 
like the synchronization viewer.  The set of reusable UI pieces will 
likely be small but hopefully sufficient to get people up and moving fast.


Specifically wrt your comments:

>> The reason that this is important for an Eclipse user is that if an 
editor/IDE
>> invokes both the VCM-GUI hooks and the TeamProvider interface, then
>> the user will be seeing two incompatible sets of GUI's for the same
>> repository operations 

It is up to the provider to decide how much he wants for free, and how 
much he wants custom.  The menu filtering/etc., is based on a project 
nature, with one and only one provider specific nature for each project. 
Ensuring this single association between project and provider is captured 
in 1(a) above.  Thus you won't get two Gui's for a given project: you will 
get exactly that VCM GUI that you the provider decided on.

>> A repository provider
>> would probably want to look at the TeamProvider API and if it maps
>> reasonably well to their repository, they might be able to re-use part
>> or all of the "generic" VCM-GUI implementation, and just implement
>> themselves the TeamProvider API.  Alternatively, a repository provider
>> might decide to just ignore the TeamProvider interface and just
>> implement the VCM-GUI hooks and callbacks directly (that is for
>> example, what we will be doing for ClearCase).

Yes, I agree 100%.  I think we've achieved this, almost.

The 'almost' is because I think we've tried to double up on #2 (headless) 
and #3 (generic UI) where perhaps we shouldn't have.  The problem becomes, 
if you the provider either doesn't wish to support #2 or feel you can't 
due to semantic incompatibility, then you would like to opt out completely 
from implementing ITeamProvider.  And if you don't want #3 because you 
want a rich provider specific UI, the question becomes why are you forced 
to implement ITeamProvider?

Q:  As a side note, for any provider capable of supporting SCC (which most 
can), I would think you *could* support ITeamProvider API, and I would 
like to understand if this isn't true. 

Given the above, I believe you shouldn't have to implement ITeamProvider 
API.

We likely still need an object like ITeamProvider to describe the 
connection between Eclipse projects, etc., and a provider.  We could 
however move methods such as checkin/checkout/etc. out of ITeamProvider to 
somewhere else, so that its clear you only have to implement those methods 
to allow provider-neutral plugin access, or to get generic UI.

In time then you could decide if the demand for plugins to do 
provider-neutral VCM operations warrants implementing the API (assuming 
you can, modulo my question above).

There is a related question you asked regarding how we can split up the 
various bits into different projects/plugins so you don't get pieces you 
don't need.  This can be solved at a later time once we are all clear on 
the seperation.

Kevin






"Clemm, Geoff" <gclemm@xxxxxxxxxxxx>
Sent by: platform-vcm-dev-admin@xxxxxxxxxxx
12/09/2001 10:27 AM
Please respond to platform-vcm-dev

 
        To:     "Vcm (E-mail)" <platform-vcm-dev@xxxxxxxxxxx>
        cc: 
        Subject:        [platform-vcm-dev] FW: Separating the "VCM-GUI hooks/callbacks" from the 
"TeamProvid er" API

Currently there appear to be 3 related projects taking place in the
VCM project.

1) A set of VCM-GUI hooks and callbacks that allows a rich integration
   between an editor and a team repository provider.  These VCM-GUI
   hooks defines a set of hooks that an editor/IDE must invoke at the
   appropriate times, and a set of callbacks that an editor/IDE must
   implement.  Conversely, a team repository provider must implement
   the hooks, and must invoke the callbacks at the appropriate times.
   An example of a hook that an editor/IDE must invoke (these aren't
   the actual names) is "validateEdit()", when it first modifies a
   buffer associated with a file.  An example of a callback that an
   editor/IDE must implement is "fileHasChanged()", when a team
   repository provider has updated one of the files in the workspace.

2) A CVS VCM provider, that provides a CVS implementation of the
   VCM-GUI hooks and callbacks.

3) An implementation of the VCM-GUI hooks that calls a simple generic
   "TeamProvider" API.  Unlike the VCM-GUI hooks, (which assume that
   GUIs will pop up when many/most of the hooks are called), the
   TeamProvider API is a "headless" API, i.e. no GUI's will pop up.
   The purpose of this implementation is to make it easy to write a
   simple team repository provider, since all the GUI code has been
   written, and the team repository provider only implements the
   TeamProvider interface.  Question: Is the CVS VCM provider based on
   this generic GUI that invokes the TeamProvider interface, or does
   it have its own custom GUI that doesn't go through the TeamProvider
   interface?

I believe it is very important (both for repository vendors, and for
users of Eclipse) that we clearly separate these three projects.  In
particular, the editors and IDEs should only call the VCM-GUI hooks,
and should not directly invoke the TeamProvider interface.  The reason
this is important for repository vendors is that the TeamProvider
interface is incompatible with core functionality of advanced CM
repositories (e.g. it does not support versioned namespaces, it does
not support versioning at the project level, it does not support
change-set based behavior, it does not support sophisticated file area
management, and it does not support server-side merging).  The reason
that this is important for an Eclipse user is that if an editor/IDE
invokes both the VCM-GUI hooks and the TeamProvider interface, then
the user will be seeing two incompatible sets of GUI's for the same
repository operations (i.e. the GUI defined by the editor/IDE for the
TeamProvider interface, and the GUI defined by the repository vendor
for the VCM-GUI hooks).

This separation actually simplifies the job of editor/IDE tool writers ...
they implement just the VCM-GUI hooks and callbacks, and don't
have to even be aware of the TeamProvider API.  A repository provider
would probably want to look at the TeamProvider API and if it maps
reasonably well to their repository, they might be able to re-use part
or all of the "generic" VCM-GUI implementation, and just implement
themselves the TeamProvider API.  Alternatively, a repository provider
might decide to just ignore the TeamProvider interface and just
implement the VCM-GUI hooks and callbacks directly (that is for
example, what we will be doing for ClearCase).

Do folks agree with this characterization of the VCM work?  If so, I
think it is very important to clearly distinguish the VCM-GUI
hook/callback interface from the generic and CVS VCM-GUI hook/callback
implementations, and make it clear to editor/IDE writers that they
MUST implement the VCM-GUI hook/callbacks, and MUST NOT invoke the
TeamProvider API (the TeamProvider API is only for repository
implementors).  One possibility would be to actually separate these
three projects (or make the generic and CVS implementations be
sub-projects of the VCM project).

Cheers,
Geoff Clemm
Chief Engineer, ClearCase Business Unit, Rational Software
_______________________________________________
platform-vcm-dev mailing list
platform-vcm-dev@xxxxxxxxxxx
http://dev.eclipse.org/mailman/listinfo/platform-vcm-dev





Back to the top