Search in sources :

Example 1 with LargeStringProperty

use of com.xpn.xwiki.objects.LargeStringProperty in project xwiki-platform by xwiki.

the class XWikiDocument method convertSyntax.

/**
 * Convert the current document content from its current syntax to the new syntax passed as parameter.
 *
 * @param targetSyntax the syntax to convert to (e.g. {@code xwiki/2.0}, {@code xhtml/1.0}, etc)
 * @throws XWikiException if an exception occurred during the conversion process
 */
public void convertSyntax(Syntax targetSyntax, XWikiContext context) throws XWikiException {
    // convert content
    setContent(performSyntaxConversion(getContent(), getDocumentReference(), getSyntax(), targetSyntax));
    // convert objects
    Map<DocumentReference, List<BaseObject>> objectsByClass = getXObjects();
    for (List<BaseObject> objects : objectsByClass.values()) {
        for (BaseObject bobject : objects) {
            if (bobject != null) {
                BaseClass bclass = bobject.getXClass(context);
                for (Object fieldClass : bclass.getProperties()) {
                    if (fieldClass instanceof TextAreaClass && ((TextAreaClass) fieldClass).isWikiContent()) {
                        TextAreaClass textAreaClass = (TextAreaClass) fieldClass;
                        LargeStringProperty field = (LargeStringProperty) bobject.getField(textAreaClass.getName());
                        if (field != null) {
                            field.setValue(performSyntaxConversion(field.getValue(), getDocumentReference(), getSyntax(), targetSyntax));
                        }
                    }
                }
            }
        }
    }
    // change syntax
    setSyntax(targetSyntax);
}
Also used : LargeStringProperty(com.xpn.xwiki.objects.LargeStringProperty) BaseClass(com.xpn.xwiki.objects.classes.BaseClass) XWikiAttachmentList(com.xpn.xwiki.internal.doc.XWikiAttachmentList) ArrayList(java.util.ArrayList) List(java.util.List) BaseObject(com.xpn.xwiki.objects.BaseObject) TextAreaClass(com.xpn.xwiki.objects.classes.TextAreaClass) DocumentReference(org.xwiki.model.reference.DocumentReference) LocalDocumentReference(org.xwiki.model.reference.LocalDocumentReference) BaseObject(com.xpn.xwiki.objects.BaseObject)

Example 2 with LargeStringProperty

use of com.xpn.xwiki.objects.LargeStringProperty in project xwiki-platform by xwiki.

the class TextAreaClass method newProperty.

@Override
public BaseProperty newProperty() {
    BaseProperty property = new LargeStringProperty();
    property.setName(getName());
    return property;
}
Also used : LargeStringProperty(com.xpn.xwiki.objects.LargeStringProperty) BaseProperty(com.xpn.xwiki.objects.BaseProperty)

Example 3 with LargeStringProperty

use of com.xpn.xwiki.objects.LargeStringProperty in project xwiki-platform by xwiki.

the class GroupsClass method newProperty.

@Override
public BaseProperty newProperty() {
    BaseProperty property = new LargeStringProperty();
    property.setName(getName());
    return property;
}
Also used : LargeStringProperty(com.xpn.xwiki.objects.LargeStringProperty) BaseProperty(com.xpn.xwiki.objects.BaseProperty)

Example 4 with LargeStringProperty

use of com.xpn.xwiki.objects.LargeStringProperty in project xwiki-platform by xwiki.

the class UsersClass method newProperty.

@Override
public BaseProperty newProperty() {
    BaseProperty property = new LargeStringProperty();
    property.setName(getName());
    return property;
}
Also used : LargeStringProperty(com.xpn.xwiki.objects.LargeStringProperty) BaseProperty(com.xpn.xwiki.objects.BaseProperty)

Example 5 with LargeStringProperty

use of com.xpn.xwiki.objects.LargeStringProperty in project xwiki-platform by xwiki.

the class XWikiHibernateStore method loadXWikiCollectionInternal.

private void loadXWikiCollectionInternal(BaseCollection object1, XWikiDocument doc, XWikiContext inputxcontext, boolean bTransaction, boolean alreadyLoaded) throws XWikiException {
    XWikiContext context = getExecutionXContext(inputxcontext, true);
    BaseCollection object = object1;
    try {
        if (bTransaction) {
            checkHibernate(context);
            bTransaction = beginTransaction(false, context);
        }
        Session session = getSession(context);
        if (!alreadyLoaded) {
            try {
                session.load(object, object1.getId());
            } catch (ObjectNotFoundException e) {
                // There is no object data saved
                object = null;
                return;
            }
        }
        DocumentReference classReference = object.getXClassReference();
        // If the class reference is null in the loaded object then skip loading properties
        if (classReference != null) {
            BaseClass bclass = null;
            if (!classReference.equals(object.getDocumentReference())) {
                // Let's check if the class has a custom mapping
                bclass = object.getXClass(context);
            } else {
                // we will go in an endless loop
                if (doc != null) {
                    bclass = doc.getXClass();
                }
            }
            List<String> handledProps = new ArrayList<String>();
            try {
                if ((bclass != null) && (bclass.hasCustomMapping()) && context.getWiki().hasCustomMappings()) {
                    Session dynamicSession = session.getSession(EntityMode.MAP);
                    Object map = dynamicSession.load(bclass.getName(), object.getId());
                    // Let's make sure to look for null fields in the dynamic mapping
                    bclass.fromValueMap((Map) map, object);
                    handledProps = bclass.getCustomMappingPropertyList(context);
                    for (String prop : handledProps) {
                        if (((Map) map).get(prop) == null) {
                            handledProps.remove(prop);
                        }
                    }
                }
            } catch (Exception e) {
            }
            // Load strings, integers, dates all at once
            Query query = session.createQuery("select prop.name, prop.classType from BaseProperty as prop where prop.id.id = :id");
            query.setLong("id", object.getId());
            for (Object[] result : (List<Object[]>) query.list()) {
                String name = (String) result[0];
                // custom mapping
                if (handledProps.contains(name)) {
                    continue;
                }
                String classType = (String) result[1];
                BaseProperty property = null;
                try {
                    property = (BaseProperty) Class.forName(classType).newInstance();
                    property.setObject(object);
                    property.setName(name);
                    loadXWikiProperty(property, context, false);
                } catch (Exception e) {
                    // WORKAROUND IN CASE OF MIXMATCH BETWEEN STRING AND LARGESTRING
                    try {
                        if (property instanceof StringProperty) {
                            LargeStringProperty property2 = new LargeStringProperty();
                            property2.setObject(object);
                            property2.setName(name);
                            loadXWikiProperty(property2, context, false);
                            property.setValue(property2.getValue());
                            if (bclass != null) {
                                if (bclass.get(name) instanceof TextAreaClass) {
                                    property = property2;
                                }
                            }
                        } else if (property instanceof LargeStringProperty) {
                            StringProperty property2 = new StringProperty();
                            property2.setObject(object);
                            property2.setName(name);
                            loadXWikiProperty(property2, context, false);
                            property.setValue(property2.getValue());
                            if (bclass != null) {
                                if (bclass.get(name) instanceof StringClass) {
                                    property = property2;
                                }
                            }
                        } else {
                            throw e;
                        }
                    } catch (Throwable e2) {
                        Object[] args = { object.getName(), object.getClass(), Integer.valueOf(object.getNumber() + ""), name };
                        throw new XWikiException(XWikiException.MODULE_XWIKI_STORE, XWikiException.ERROR_XWIKI_STORE_HIBERNATE_LOADING_OBJECT, "Exception while loading object '{0}' of class '{1}', number '{2}' and property '{3}'", e, args);
                    }
                }
                object.addField(name, property);
            }
        }
        if (bTransaction) {
            endTransaction(context, false, false);
        }
    } catch (Exception e) {
        Object[] args = { object.getName(), object.getClass(), Integer.valueOf(object.getNumber() + "") };
        throw new XWikiException(XWikiException.MODULE_XWIKI_STORE, XWikiException.ERROR_XWIKI_STORE_HIBERNATE_LOADING_OBJECT, "Exception while loading object '{0}' of class '{1}' and number '{2}'", e, args);
    } finally {
        try {
            if (bTransaction) {
                endTransaction(context, false, false);
            }
        } catch (Exception e) {
        }
        restoreExecutionXContext();
    }
}
Also used : Query(org.hibernate.Query) ArrayList(java.util.ArrayList) XWikiContext(com.xpn.xwiki.XWikiContext) LargeStringProperty(com.xpn.xwiki.objects.LargeStringProperty) StringProperty(com.xpn.xwiki.objects.StringProperty) BaseStringProperty(com.xpn.xwiki.objects.BaseStringProperty) BaseCollection(com.xpn.xwiki.objects.BaseCollection) TextAreaClass(com.xpn.xwiki.objects.classes.TextAreaClass) XWikiException(com.xpn.xwiki.XWikiException) InitializationException(org.xwiki.component.phase.InitializationException) MigrationRequiredException(com.xpn.xwiki.store.migration.MigrationRequiredException) ObjectNotFoundException(org.hibernate.ObjectNotFoundException) QueryException(org.xwiki.query.QueryException) UnexpectedException(org.xwiki.store.UnexpectedException) ComponentLookupException(org.xwiki.component.manager.ComponentLookupException) SQLException(java.sql.SQLException) LargeStringProperty(com.xpn.xwiki.objects.LargeStringProperty) StringClass(com.xpn.xwiki.objects.classes.StringClass) ObjectNotFoundException(org.hibernate.ObjectNotFoundException) BaseClass(com.xpn.xwiki.objects.classes.BaseClass) BaseObject(com.xpn.xwiki.objects.BaseObject) List(java.util.List) ArrayList(java.util.ArrayList) BaseProperty(com.xpn.xwiki.objects.BaseProperty) DocumentReference(org.xwiki.model.reference.DocumentReference) XWikiException(com.xpn.xwiki.XWikiException) Session(org.hibernate.Session)

Aggregations

LargeStringProperty (com.xpn.xwiki.objects.LargeStringProperty)5 BaseProperty (com.xpn.xwiki.objects.BaseProperty)4 BaseObject (com.xpn.xwiki.objects.BaseObject)2 BaseClass (com.xpn.xwiki.objects.classes.BaseClass)2 TextAreaClass (com.xpn.xwiki.objects.classes.TextAreaClass)2 ArrayList (java.util.ArrayList)2 List (java.util.List)2 DocumentReference (org.xwiki.model.reference.DocumentReference)2 XWikiContext (com.xpn.xwiki.XWikiContext)1 XWikiException (com.xpn.xwiki.XWikiException)1 XWikiAttachmentList (com.xpn.xwiki.internal.doc.XWikiAttachmentList)1 BaseCollection (com.xpn.xwiki.objects.BaseCollection)1 BaseStringProperty (com.xpn.xwiki.objects.BaseStringProperty)1 StringProperty (com.xpn.xwiki.objects.StringProperty)1 StringClass (com.xpn.xwiki.objects.classes.StringClass)1 MigrationRequiredException (com.xpn.xwiki.store.migration.MigrationRequiredException)1 SQLException (java.sql.SQLException)1 ObjectNotFoundException (org.hibernate.ObjectNotFoundException)1 Query (org.hibernate.Query)1 Session (org.hibernate.Session)1