On May 21, 2008, at 1:52 AM, Sergiu Dumitriu wrote:

[snip]

> And since we're touching the
> configuration part, I think we should completely rewrite this part, as
> the current system is sooo bad (I mean the
> XWiki#get[User/Web/XWiki]Preference[AsSomething] methods and the giant
> XWikiPreferences class). This was supposed to be a Configuration
> proposal that I was thinking about, but didn't have the time to write
> until now. So here it is:

hmm... I thought I had already sent a configuration proposal but I  
can't find it. It's possible that I started writing it and discarded  
it... I think I was not fully happy with it. I had started  
implementing it (I still have my code) but couldn't find a nice way of  
doing some things and just pushed it back to later as a  
consequence... ;)

However I do remember listing the characteristics that this  
configuration component should have but I can't find it again.

I don't have the time to reply to the text below. I'll need to digest  
it first and merge it with my proposal. My proposal was a very generic  
proposal addressing all xwiki configuration needs but not going into  
your level of details for the configuration done in xwiki pages.

Thanks
-Vincent

> Requirements:
>
> 1. We should allow an application/component to be configured at the
> farm, wiki, space, user and document level (the specificity can be
> configured for each setting), with static values in the component's  
> xml
> configuration and default values in the java class file or in the
> template/wiki document using the configuration (depending on whether
> there is a component/java/template part).
>
> 2. An application should be able to define its own customization
> xclasses, the same class being usable for all levels of customization
> (now, some settings go both in XWikiUsers class and XWikiPreferences
> class). In fact, XWikiPreferences should disappear completely.
>
> 3. Global (farm) settings should go in
> [mainwiki]:Admin/GlobalPreferences, wiki settings should go in
> Admin/WikiPreferences, space settings should go in
> <Space>/SpacePreferences, user settings should go in the user profile.
> The current locations are inappropriate (WebPreferences??). [I'm not
> sure if Preferences is a good name, as the list of blog categories is
> not exactly "preferences", but more like "settings"]
>
> 4. The settings pages include an administration sheet, which later  
> lists
> all customization pages in the wiki that are customizable at that  
> level
> (for the moment, using an explicit search, later using Interface
> Extensions).
>
> 5. The configuration should be accessible using a simple API, which
> should find the right settings, internally taking care of all the
> details: consider the lowest level for that setting (some settings are
> valid only at the wiki level, or even global, so don't search or allow
> settings at a lower level), security (some settings should only be  
> taken
> into consideration if the author is trusted), in-wiki and in-file
> settings. This means that the application should call one method, and
> not have a complicated code combining getUserPreference,
> getWebPreference, getXWikiPreference and Param.
>
> 6. All this should be done without changing the data model (meaning  
> that
> we use the classic xclasses/xobjects for this).
>
>
> How things work:
>
> An application lists one or several wiki documents in its application
> description as customization classes. Administration sheets (also from
> the application) are then autoincluded in the global, wiki or space
> Administration page, and in the user settings page. Such a sheet would
> check if the class allows customization at the current level, and if
> not, warns about this. If there is no instance of the target class, it
> provides a link for creating one (doing it automatically is another
> option, but I don't think it is a good idea, as this pollutes the wiki
> with unused objects). The sheets should follow a common guideline, for
> consistency. All options should be documented in the sheet.
>
> The application code then calls the settings component API to check  
> the
> settings that apply for the current document/user. Of course, all this
> with lots of caching for good performance (this is not the case in the
> current core, as a lot of time is spent cloning XWikiPreferences in
> HibernateCacheStore).
>
> The hard part is deciding how to configure these classes and sheets.
> Since we shouldn't use different Property types, we can't add a
> customizationLevel metaproperty. A feasible solution would be to  
> require
> all properties in the same class to have the same level of
> configuration, and either specify in the application description, or  
> use
> a tag for that. The best would be to have a document property, but the
> current data model does not have that.
>
>
> Proposed API variant 1:
>
> /* Gets the current setting for an application, from the specified  
> class. */
> String getSetting(applicationName, className, settingName);
>
> /* Same as above, when the application has only one settings class
> defined. */
> String getSetting(applicationName, settingName);
>
> /* If the current document is known to belong to a certain  
> application,
> get a setting for that application */
> String getSetting(settingName);
>
> /* Stops at a specified level, instead of the default one. */
> String getSettingForLevel(applicationName, className, settingName,
> maxLevel);
>
> /* Returns the setting at a specified level, with no inheritance. */
> String getSettingAtLevel(applicationName, className, settingName,
> exactLevel);
>
> Proposed API variant 2:
>
> /* Search for the setting name in the attached objects. */
> String getSetting(settingName);
>
> /* Gets the current setting, from the specified class. */
> String getSetting(settingName, className);
>
> /* Stops at a specified level, instead of the default one. */
> String getSettingForLevel(settingName, className, maxLevel);
>
> /* Returns the setting at a specified level, with no inheritance. */
> String getSettingAtLevel(settingName, className, exactLevel);
>
>
> - I don't know if we need methods returning other types, like int or
> double, since we can use velocity tools for converting the returned  
> string
> - I don't know if we should have the applicationName in the parameter
> list, or just the className; my take is that specifying the  
> application
> name is a bit more semantical and less technical
> - maxLevel should be an enum, but we need a custom introspector for  
> this
> to work
> - maxLevel assumes a fixed order of levels, which is an obvious one,
> except for the User level. Where should that be in this order? Is the
> user preference the most important one?
>
>
> So, WDYT?
> -- 
> Sergiu Dumitriu
> http://purl.org/net/sergiu/
> _______________________________________________
> devs mailing list
> devs@xwiki.org
> http://lists.xwiki.org/mailman/listinfo/devs

_______________________________________________
devs mailing list
devs@xwiki.org
http://lists.xwiki.org/mailman/listinfo/devs

Reply via email to