Just to follow up - Christian and I sorted out some things over IRC; and he is reviewing a patch right now. Jody
On Thu, May 14, 2009 at 10:52 PM, Jody Garnett <jody.garn...@gmail.com> wrote: > Sorry my previous reply fell of the list ... here is a proposal for a > "refreshed" Repository interface: > > public interface Repository { > /** > * Search for the DataAccess (or DataStore) providing access > * to the indicated typeName. > * <p> > * This lookup method is not namespace aware; and will find the first > * possible match. > * <p> > * @param name Name of the DataStore to retrieve > * @return DataStore > */ > DataAccess<?,?> access( String typeName ); > /** > * Search for the DataAccess (or DataStore) providing access > * to the indicated typeName. > * > * @param Name The typeName (namespace and name) to search for > * @return DataAccess api providing access to the > indicatedTypeName (or null if not found) > */ > DataAccess<?,?> access( Name name ); > } > > A couple changes from yours: > - DataAccess is returned rather than DataStore > - namespace is part of Name > > I find this a little weak in that you cannot "browse" the contents of > the Registery; however since we do not have a need for that - only > look up - I think we are fine. > > I find it really stange that you are lookin up DataStore here; by the > typeName the DataStore produces. A code example would end up being. > > Name typeName = new NameImpl( namespace, name ); > DataStore<?,?> data = (DataStore<?,?>) registery.access( typeName ); > FeatureSource<?,?> source = data.getFeatureSource( typeName ); > > I would find it easier with a single registery.source( typeName ) > method; but whatever. I might also suggest a dataStore method to avoid > the cast to DataStore. > > So how about it; if I make this modification can we update your code > (and implementation) to make use of it? > > Jody > > On Thu, May 14, 2009 at 10:33 PM, Jody Garnett <jody.garn...@gmail.com> wrote: >>> Jody I took a deeper look to Catalog interface and I got dazed and confused. >> >> Not the catalog interface the simple repository interface ... >> interface { >> Map getDataStores(); >> SortedMap getFeatureSources(); >> Set getPrefixes(); >> boolean lockExists(String lockId) >> boolean lockRefresh(String lockId, Transaction) >> boolean lockRelease(String lockId, Transaction) >> source source(String dataStoreId, String typeName ) >> } >> >> And you have: >> >> public interface DataStoreLookup { >> public void initialize(Object source); >> public DataStore getDataStoreFor(String name); >> public DataStore getDataStoreFor(String namespace, String name); >> } >> >> So one is working with FeatureSource and the other is working with >> DataStore; incidentally how do you look up a datastore for a >> namespace/name ? does that not indentify a single feature type? I also >> do not know what your initialize( source ) method is for ... >> >>> Again I agree on having a central repository interface but a redesign is >>> not a matter of adding some methods. >> >>> Some thoughts >>> 1) I am missing the clean concept of namespace handling >> >> Then we add it; right now the api documents something stupid - a >> datastore id since that is what geoserver had when it was written. >> Which each have a lookup method that takes two strings - both are >> supposed to be a simple front end to the geoserver catalog so they >> probably end up acting the same. >> >>> 2) It must be possible to write a Repository implementation acting as >>> adapter for the geoserver catalog (supporting the workspace concept, which I >>> think we could handle with 1). The same must be possibile for UDIG. The >>> interface implementation must be configurable externally, we need something >>> like a "RepositoryFactory" >> >> Ignore uDig for a moment; focus on what geoServer is doing; I can make >> udig work later. >> >> I did not follow you their; you probably intend to pass in this >> repository as a connection parameter to your pregeneralized datastore? >> Something either application can do. >> >>> 3) Unlucky naming of methods, "source" as an example. You must look at the >>> source code to have an idea what this method is doing. Missing methods, how >>> to get a datastore with his name and namespace ? >> >> You are focused on name and namespace; that is fine. Source is the >> super type of FeatureSource (something gabriel did). I am not sure if >> your datastore is generic enough to work on Source (does it assume >> simple features or not?). >> >>> 4) No idea about the locking methods, I think nobody calls them, and btw, I >>> would delegate the locking to an >>> external locking manager. And why should a repository do locking at all ? >> >> We can remove them; the reason locking had the responsibility was >> because it was the only interface that "knows" all the datastores and >> thus can perform cross datastore operations (such as locking). >> >>> So, I think we would a least need >>> RepositoryInterface >>> RepositoryFactory >> >> I think we can skip the factory on this one; we are not creating a >> generic Repository; we are being passed in an adapter to the geoserver >> catalog. >> >>> RepositoryImpl for geotools >> >> This is pretty simple to write; just store the datastores in a map. >> >>> RepositoryImpl for geoserver >>> RepositoryImpl for udig ? >> >> These other two seem okay. >> >>> This would be a real improvement but it would block me for weeks. >> >> I do not want to introduce duplicate api for the same function; would >> you like to have a breakout IRC session and fix the repository >> interface to match your datastore finder? You do have to explain your >> two part namespace / name lookup - looking up a DataStore for me; >> right now that makes little sense to me. >> >>> As a proposal, I would like to continue with the DataStoreLookup and mark it >>> depricated as soon we have implemented a cleanrepository concept. >>> christian >> >> I am interested in going the other direction; replacing the Repository >> interface methods with what you have in DataSource lookup. Part of the >> difficulty here is that your module "introduces" public api - not >> simply implementing the DataStoreFactory (which can be dropped into >> any app; but instead asks to go out into the app that is hosting it >> and look up other datastores). >> >> Jody >> > ------------------------------------------------------------------------------ Crystal Reports - New Free Runtime and 30 Day Trial Check out the new simplified licensing option that enables unlimited royalty-free distribution of the report engine for externally facing server and web deployment. http://p.sf.net/sfu/businessobjects _______________________________________________ Geotools-devel mailing list Geotools-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/geotools-devel