Author: amelentev
Date: 2008-02-06 22:37:39 +0100 (Wed, 06 Feb 2008)
New Revision: 7330
Modified:
xwiki-platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/store/XWikiHibernateStore.java
Log:
XWIKI-1621: Changing parameters of list properties fails
XWIKI-299: Changing property layout of a list property in a class doesn' work
(multiple select yes/no)
Migrate list properties after save of class
Modified:
xwiki-platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/store/XWikiHibernateStore.java
===================================================================
---
xwiki-platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/store/XWikiHibernateStore.java
2008-02-06 20:30:58 UTC (rev 7329)
+++
xwiki-platform/core/trunk/xwiki-core/src/main/java/com/xpn/xwiki/store/XWikiHibernateStore.java
2008-02-06 21:37:39 UTC (rev 7330)
@@ -63,12 +63,17 @@
import com.xpn.xwiki.objects.BaseElement;
import com.xpn.xwiki.objects.BaseObject;
import com.xpn.xwiki.objects.BaseProperty;
+import com.xpn.xwiki.objects.DBStringListProperty;
import com.xpn.xwiki.objects.LargeStringProperty;
import com.xpn.xwiki.objects.ListProperty;
import com.xpn.xwiki.objects.PropertyInterface;
+import com.xpn.xwiki.objects.StringListProperty;
import com.xpn.xwiki.objects.StringProperty;
import com.xpn.xwiki.objects.classes.BaseClass;
+import com.xpn.xwiki.objects.classes.DBListClass;
+import com.xpn.xwiki.objects.classes.ListClass;
import com.xpn.xwiki.objects.classes.PropertyClass;
+import com.xpn.xwiki.objects.classes.StaticListClass;
import com.xpn.xwiki.objects.classes.StringClass;
import com.xpn.xwiki.objects.classes.TextAreaClass;
import com.xpn.xwiki.render.XWikiRenderer;
@@ -371,6 +376,48 @@
bclass.setName(doc.getFullName());
if ((bclass.getFieldList().size()>0)&&(useClassesTable(true,
context)))
saveXWikiClass(bclass, context, false);
+ // update objects of the class
+ for (Iterator itf=bclass.getFieldList().iterator();
itf.hasNext(); ) {
+ PropertyClass prop = (PropertyClass) itf.next();
+ // migrate values of list properties
+ if (prop instanceof StaticListClass || prop instanceof
DBListClass) {
+ ListClass lc = (ListClass) prop;
+ String[] classes =
{DBStringListProperty.class.getName(), StringListProperty.class.getName(),
StringProperty.class.getName()}; // @see ListClass#newProperty()
+ for (int i=0; i<classes.length; i++) {
+ String oldclass = classes[i];
+ if
(!oldclass.equals(lc.newProperty().getClass().getName())) {
+ Query q = session.createQuery("select p from
"+oldclass+" as p, BaseObject as o" +
+ " where o.className=?" +
+ " and p.id=o.id and p.name=?")
+ .setString(0, bclass.getName())
+ .setString(1, lc.getName());
+ for (Iterator it = q.list().iterator();
it.hasNext(); ) {
+ BaseProperty lp = (BaseProperty) it.next();
+ BaseProperty lp1 = lc.newProperty();
+ lp1.setId(lp.getId());
+ lp1.setName(lp.getName());
+ if (lc.isMultiSelect()) {
+ List tmp;
+ if (lp.getValue() instanceof List) {
+ tmp = (List) lp.getValue();
+ } else {
+ tmp = new ArrayList(1);
+ tmp.add(lp.getValue());
+ }
+ lp1.setValue(tmp);
+ } else {
+ Object tmp = lp.getValue();
+ if (tmp instanceof List)
+ tmp = ((List)tmp).get(0);
+ lp1.setValue(tmp);
+ }
+ session.delete(lp);
+ session.save(lp1);
+ }
+ }
+ }
+ }
+ }
} else {
// TODO: Remove existing class
}
_______________________________________________
notifications mailing list
[email protected]
http://lists.xwiki.org/mailman/listinfo/notifications