On Fri, Jul 10, 2009 at 09:44, Vincent Massol<[email protected]> wrote:
> I like this. Shouldn't we also remove the automatic creation of Tag
> objects in all documents by default?

+1

>
> 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
>



-- 
Thomas Mortagne
_______________________________________________
devs mailing list
[email protected]
http://lists.xwiki.org/mailman/listinfo/devs

Reply via email to