Ok give me a little while to read my email and this one a couple times more.  I'll get 
back to you soon.

> 
> From: Niclas Hedhman <[EMAIL PROTECTED]>
> Date: 2003/11/08 Sat AM 07:21:03 EST
> To: "Avalon Developers List" <[EMAIL PROTECTED]>
> Subject: Re: Eclipse Plug-in
> 
> On Saturday 08 November 2003 08:45, Alex Karasulu wrote:
> > What methods do you foresee needing?  Perhaps I can add them into this
> > interface and u can use an implementation of it.  The first implementation
> > will use properties file on the repo server to get meta data on artifacts.
> 
> Since I don't have commit rights (yet), you won't find my code in the CVS.
> 
> I had a look at the repository stuff in the sandbox, and perhaps I am not 
> capable of appreciating the effort to the full... :o(
> My impression is that it is not very well abstracted and boiled down the the 
> bare essentials from the "use-case" point of view, and I feel that it is 
> looking too much towards a foreign repository (Maven I presume).
> 
> 
> Here is the rough draft (Stephen, I have made quite a lot of changes since 
> yesterday, as my abstract is much clearer after some JDs);
> 
> 
> First of all I have a very simple Resource defintion, extremely generic at the 
> moment. This is composed by the 4 interfaces below; ResourceInfo, 
> ReourceGroupInfo, Version and Compliance. (I am right now considering generic 
> Attributes on the resource as well, but have not put that in yet.)
> 
> I then have a RepositoryAgent interface, which knows how to communicate with a 
> particular repository type, to retrieve the resource metainfo and the 
> resource itself. One RepositoryAgent instance per actual repository.
> 
> Since the RepositoryAgent can be of different types (such as Maven, Niclas, 
> Alex, HyperDuper, etc) I need a factory class for each RepositoryAgent type, 
> simply called RepositoryAgentFactory.
> 
> The RepositoryAgentFactory is registered with the RepositoryTypeRegistry. For 
> each URN type, the implementation registers (somehow) with the 
> RepositoryTypeRegistry (now an interface, and would need to get instantiated 
> as well somehow).
> A repository has (from my POV) the form like;
> 
>    urn:[type]:[location]
> 
> for instance, 
>    urn:plain-url:file:///opt/avalon/repository/
> 
> To use this, as client, you do
> 
> String urn = urn:plain-url:file:///opt/avalon/repository/;
> RepositoryTypeRegistry reg = ... // Some way to find the registry.
> RepositoryAgentFactory factory = reg.getRepositoryAgentFactory( urn );
> RepositoryAgent agent = factory.create( urn );
> 
> // load root resource group ("").
> ResourceInfo[] infos = agent.loadResourceInfo( "" ); 
> 
> for( int i=0 ; i < infos.length ; i++ )
> {
>       String name = infos[i].getName();
>       String descr = infos[i].getDescription();
>       :
>       InputStream in = agent.openInputStream( infos[i] );
>       :
> }
> 
> (It is arguable if the openInputStream() should be within the ResourceInfo 
> instead, but I think that by putting it in the agent, the ResourceInfo 
> implementation can possibly be very generic, and not re-implemented for each 
> repository type.)
> 
> And so on...
> 
> ResourceGroup is an interesting concept, that I have promoted to first class 
> citizens over the day. It is a type of Resource that can contains other 
> Resources. That means that 
> "MyComponent" is a ResourceGroup, where as
> "MyComponent Ver 1.0.0" is a "leaf" Resource.
> One could possibly even imagine that 
> "MyComponent-1.0.0.jar" is a ResourceGroup containing other resources 
> internally.
> And I can also categorize my resources in any imaginable way.
> 
> To me this design looks pretty solid and well abstracted, and it should be 
> possible;
> 
> 1. Provide implementations (RepositoryAgent + RepositoryAgentFactory) for just 
> about any remote or local repository or some form of library.
> 
> 2. Specialize the functionality for more Avalon specific stuff on top of it.
> 
> 
> Also, I have introduced listeners on RepositoryTypeRegistry, 
> RepositoryAgentFactory and RepositoryAgent, which are notified about any 
> changes loaded or detected. This will drive a UI, for instance, very well.
> 
> 
> What do you think?
> 
> "This doesn't belong in Avalon!"  -  Yes, this has struck me too, but let's 
> iron it out here before we decide what to do with it.
> 
> Niclas
> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
> 
> 


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to