Frage
Wie implementiere ich ein benutzerspezifisches CQ3.X- oder CQ4.X-Seitentool?
Hier findet sich die Basisdokumentation für das Upgrade-Tool selbst.
Was ist ein Seiten-Importtool?
Ein Seiten-Importtool ist ein OSGi-Dienst, der eine Seitenimportmethode implementiert, die aufgerufen wird, wenn eine Seite eines bestimmten CSD-Typs von der CQ3.X- oder der CQ4.X-Instanz vom CQ5 Upgrade-Tool angefordert wird. Ein einzelnes Import-Tool kann für mehrere CSDs oder für einen einzelnen CSD-Typ implementiert werden.
Erforderliches Vorwissen für diesen Artikel:
- Einrichten der Entwicklungsumgebung mit Eclipse
- Erstellen und Bereitstellen eines Bundles für Apache Felix
Antwort, Auflösung
Im Folgenden sind leere Implementierungen von benutzerdefinierten Seiten-Importtools aufgeführt. d. h. es werden keine Elemente importiert, es sei denn, Sie erstellen die Knoten/Knotentypen/Mixins und Eigenschaften für den Seiteninhalt, den Sie importieren möchten.
Implementieren einer Klasse, die mehrere Mustervorlagen von CSD-Seitentypen importiert.
import javax.jcr.Node; import javax.jcr.PathNotFoundException; import javax.jcr.RepositoryException; import javax.jcr.Session; import javax.jcr.Value; import javax.jcr.ValueFormatException; import javax.jcr.lock.LockException; import javax.jcr.nodetype.ConstraintViolationException; import javax.jcr.version.VersionException; import org.apache.jackrabbit.util.Text; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.day.cq.commons.jcr.JcrUtil; import com.day.cq.compat.migration.ImporterContext; import com.day.cq.compat.migration.PageImporter; import com.day.cq.compat.migration.contentbus.Atom; import com.day.cq.compat.migration.contentbus.Container; import com.day.cq.compat.migration.contentbus.ContainerList; /** * The importer for all pages from daycare. * * @scr.component metatype="no" immediate="true" * @scr.service interface="com.day.cq.compat.migration.PageImporter" * @scr.property nameRef="PageImporter.PROP_CSD" valueRef="ALLCONTENTCSD" */ public class GenericContentPageImporter implements PageImporter { // diese Variable konfiguriert, welche CSD-Vorlagen durch dieses Seitenimporttool verarbeitet werden private final static String[] ALLCONTENTCSD = new String[] { "genericcontent", "globalhomepage", "localhomepage" }; public Node importPage(ImporterContext context, Page page) throws RepositoryException { Session session = context.getSession(); processPage(context, page, session); if (session.hasPendingChanges()) { session.save(); } return null; } public void processPage(ImporterContext context, Page page, Session session) { //TODO: Importfunktionalität hier implementieren... } }
Implementieren einer Seite, die einen einzelnen CSD-Seitentyp importiert
import javax.jcr.Node; import javax.jcr.PathNotFoundException; import javax.jcr.RepositoryException; import javax.jcr.Session; import javax.jcr.Value; import javax.jcr.ValueFormatException; import javax.jcr.lock.LockException; import javax.jcr.nodetype.ConstraintViolationException; import javax.jcr.version.VersionException; import org.apache.jackrabbit.util.Text; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.day.cq.commons.jcr.JcrUtil; import com.day.cq.compat.migration.ImporterContext; import com.day.cq.compat.migration.PageImporter; import com.day.cq.compat.migration.contentbus.Atom; import com.day.cq.compat.migration.contentbus.Container; import com.day.cq.compat.migration.contentbus.ContainerList; import com.day.cq.compat.migration.GenericImporter; import com.day.cq.compat.migration.ProvidedPageImporter; public class CustomPageImporter extends GenericImporter implements ProvidedPageImporter { CustomPageImporter() { } public String getCSDName() { return "mytemplatecsdname"; } /** * Imports the given page into the Repository. * <p> * Der Unterschied zur Basisklassenimplementierung ist, dass die Seite * in Wirklichkeit nicht am Zielort gespeichert wird, wie es von der Zuordnung der Bearbeitung der * Seite angezeigt wird, sondern unter <code>/var/dam</code>. Dort werden die * Assets für sie ausgewählt, sodass sie als DAM-Asset importiert werden. */ public Node importPage(ImporterContext context, Page page) throws RepositoryException { //TODO: Implement import functionality here... } }
Betroffene Versionen
CQ5.2+