Pergunta
Como faço para implementar um importador de página personalizado no CQ3.X ou CQ4.X?
Consulte aqui para a documentação básica sobre a ferramenta de atualização em si
O que é um importador de página?
Um importador de página é um serviço OSGi que implementa um método de importação de página que é chamado quando uma página de um tipo específico de csd é solicitada a partir da instância CQ3.X ou CQ4.x pela Ferramenta de Atualização do CQ5. Um importador de página única poderá ser implementado para vários CSDs ou para um único tipo de CSD.
Conhecimento pré-requisito necessário para este artigo:
- Como configurar o ambiente de desenvolvimento com o Eclipse
- Como criar e implantar um pacote no Apache Felix
Resposta, Resolução
Abaixo estão as implementações vazias de importadores de páginas personalizados. isto é, eles não importarão nada a menos que você crie os nós / tipos de nó / mixins e propriedades para o conteúdo da página que deseja importar.
Implemente uma classe que importe vários tipos de página de modelo CSD
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; /** * O importador de todas as páginas do 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 { // this variable configures which template csds get processed by this page importer 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: Implement import functionality here... } }
Implemente uma página que importe um único tipo de página do CSD
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"; } /** * Importa a página em questão para o Repositório. * <p> * A diferença para a implementação da classe base é que a página * não é realmente armazenada no destino final, como é indicado pelo * mapeamento de manipulador de página, mas abaixo de <code>/var/dam</code> para onde os * ativos são selecionados para serem importados como um ativo do DAM. */ public Node importPage(ImporterContext context, Page page) throws RepositoryException { //TODO: Implement import functionality here... } }
Versões afetadas
CQ5.2+