I like this. Shouldn't we also remove the automatic creation of Tag
objects in all documents by default?
I have never understood why we do this for Tags and not for Rights,
and all other objects. For me the objects should be created only when
required and not by default.
Thanks
-Vincent
On Jul 4, 2009, at 5:22 PM, sdumitriu (SVN) wrote:
> Author: sdumitriu
> Date: 2009-07-04 17:22:41 +0200 (Sat, 04 Jul 2009)
> New Revision: 21818
>
> Modified:
> platform/xwiki-plugins/trunk/tag/src/main/java/com/xpn/xwiki/
> plugin/tag/TagPlugin.java
> Log:
> XATAG-20: Adding tags fails when there is no Tag object attached to
> the document
> Fixed.
>
> Modified: platform/xwiki-plugins/trunk/tag/src/main/java/com/xpn/
> xwiki/plugin/tag/TagPlugin.java
> ===================================================================
> --- platform/xwiki-plugins/trunk/tag/src/main/java/com/xpn/xwiki/
> plugin/tag/TagPlugin.java 2009-07-04 15:22:34 UTC (rev 21817)
> +++ platform/xwiki-plugins/trunk/tag/src/main/java/com/xpn/xwiki/
> plugin/tag/TagPlugin.java 2009-07-04 15:22:41 UTC (rev 21818)
> @@ -29,12 +29,18 @@
>
> import org.apache.commons.collections.CollectionUtils;
> import org.apache.commons.lang.StringUtils;
> +import org.apache.commons.logging.Log;
> +import org.apache.commons.logging.LogFactory;
>
> import com.xpn.xwiki.XWikiContext;
> import com.xpn.xwiki.XWikiException;
> import com.xpn.xwiki.api.Api;
> import com.xpn.xwiki.doc.XWikiDocument;
> +import com.xpn.xwiki.objects.BaseObject;
> import com.xpn.xwiki.objects.BaseProperty;
> +import com.xpn.xwiki.objects.DBStringListProperty;
> +import com.xpn.xwiki.objects.classes.BaseClass;
> +import com.xpn.xwiki.objects.classes.PropertyClass;
> import com.xpn.xwiki.plugin.XWikiDefaultPlugin;
> import com.xpn.xwiki.plugin.XWikiPluginInterface;
>
> @@ -45,6 +51,9 @@
> */
> public class TagPlugin extends XWikiDefaultPlugin implements
> XWikiPluginInterface
> {
> + /** Logging helper object. */
> + public static final Log LOG = LogFactory.getLog(TagPlugin.class);
> +
> /**
> * The identifier for this plugin; used for accessing the plugin
> from velocity, and as the action returning the
> * extension content.
> @@ -116,10 +125,40 @@
> private void setDocumentTags(XWikiDocument document,
> List<String> tags, XWikiContext context)
> {
> BaseProperty prop = (BaseProperty)
> document.getObject(TAG_CLASS, true, context).safeget(TAG_PROPERTY);
> + // Properties aren't added to an object unless a value is
> specified either from the Web or from an XML.
> + if (prop == null) {
> + prop = createTagProperty(document.getObject(TAG_CLASS,
> true, context), context);
> + }
> prop.setValue(tags);
> }
>
> /**
> + * Create and add the main tag property to the provided tag
> object. The new property corresponds to the definition
> + * in the tag class, but in case of an error, the default type
> is a relational-stored list.
> + *
> + * @param tagObject the target tag object
> + * @param context the current request context
> + * @return the created property
> + * @see #TAG_PROPERTY
> + */
> + private BaseProperty createTagProperty(BaseObject tagObject,
> XWikiContext context)
> + {
> + BaseProperty tagProperty;
> + try {
> + BaseClass tagClass =
> context.getWiki().getClass(TAG_CLASS, context);
> + PropertyClass tagPropertyDefinition = (PropertyClass)
> tagClass.getField(TAG_PROPERTY);
> + tagProperty = tagPropertyDefinition.newProperty();
> + } catch (XWikiException ex) {
> + LOG.warn("Failed to properly create tag property for
> the tag object, creating a default one");
> + tagProperty = new DBStringListProperty();
> + }
> + tagProperty.setName(TAG_PROPERTY);
> + tagProperty.setObject(tagObject);
> + tagObject.safeput(TAG_PROPERTY, tagProperty);
> + return tagProperty;
> + }
> +
> + /**
> * Get all tags within the wiki.
> *
> * @param context XWiki context.
>
> _______________________________________________
> notifications mailing list
> [email protected]
> http://lists.xwiki.org/mailman/listinfo/notifications
_______________________________________________
devs mailing list
[email protected]
http://lists.xwiki.org/mailman/listinfo/devs