Package com.citytechinc.cq.component.content.util

Source Code of com.citytechinc.cq.component.content.util.ContentUtil

/**
*    Copyright 2013 CITYTECH, Inc.
*
*    Licensed under the Apache License, Version 2.0 (the "License");
*    you may not use this file except in compliance with the License.
*    You may obtain a copy of the License at
*
*        http://www.apache.org/licenses/LICENSE-2.0
*
*    Unless required by applicable law or agreed to in writing, software
*    distributed under the License is distributed on an "AS IS" BASIS,
*    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
*    See the License for the specific language governing permissions and
*    limitations under the License.
*/
package com.citytechinc.cq.component.content.util;

import java.io.File;
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;

import javassist.CtClass;

import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.TransformerException;

import org.apache.commons.compress.archivers.zip.ZipArchiveOutputStream;

import com.citytechinc.cq.component.annotations.Component;
import com.citytechinc.cq.component.content.Content;
import com.citytechinc.cq.component.content.factory.ContentFactory;
import com.citytechinc.cq.component.dialog.ComponentNameTransformer;
import com.citytechinc.cq.component.dialog.exception.InvalidComponentClassException;
import com.citytechinc.cq.component.dialog.exception.OutputFailureException;
import com.citytechinc.cq.component.maven.util.ComponentMojoUtil;

public class ContentUtil {
  private ContentUtil() {
  };

  /**
   * Write the content.xml to an output file, the path of which is determined
   * by the component class
   *
   * @param content
   * @param componentClass
   * @return The written file
   * @throws TransformerException
   * @throws ParserConfigurationException
   * @throws IOException
   * @throws OutputFailureException
   * @throws ClassNotFoundException
   * @throws NoSuchMethodException
   * @throws InvocationTargetException
   * @throws IllegalAccessException
   * @throws SecurityException
   * @throws IllegalArgumentException
   */
  public static File writeContentToFile(ComponentNameTransformer transformer, Content content,
    CtClass componentClass, File buildDirectory, String componentPathBase, String defaultComponentPathSuffix)
    throws TransformerException, ParserConfigurationException, IOException, OutputFailureException,
    ClassNotFoundException, IllegalArgumentException, SecurityException, IllegalAccessException,
    InvocationTargetException, NoSuchMethodException {

    return ComponentMojoUtil.writeElementToFile(transformer, content, componentClass, buildDirectory,
      componentPathBase, defaultComponentPathSuffix, ".content.xml");
  }

  /**
   * Writes a provided content file to a provided archive output stream at a
   * path determined by the class of the component.
   *
   * @param contentFile
   * @param componentClass
   * @param archiveStream
   * @param reservedNames A list of files which already exist within the Zip
   *            Archive. If a .content.xml file already exists for a
   *            particular component, it is left untouched.
   * @param componentPathBase
   * @throws IOException
   * @throws ClassNotFoundException
   */
  public static void writeContentToArchiveFile(ComponentNameTransformer transformer, File contentFile,
    CtClass componentClass, ZipArchiveOutputStream archiveStream, Set<String> reservedNames,
    String componentPathBase, String defaultComponentPathSuffix) throws IOException, ClassNotFoundException {

    ComponentMojoUtil.writeElementToArchiveFile(transformer, contentFile, componentClass, archiveStream,
      reservedNames, componentPathBase, defaultComponentPathSuffix, "/.content.xml");
  }

  /**
   * Constructs a list of Content objects representing .content.xml files from
   * a list of Classes. For each Class annotated with a Component annotation a
   * Content object is constructed.
   *
   * @param classList
   * @param zipOutputStream
   * @param reservedNames
   * @return The constructed Content objects
   * @throws InvalidComponentClassException
   * @throws TransformerException
   * @throws ParserConfigurationException
   * @throws IOException
   * @throws OutputFailureException
   * @throws ClassNotFoundException
   * @throws NoSuchMethodException
   * @throws InvocationTargetException
   * @throws IllegalAccessException
   * @throws SecurityException
   * @throws IllegalArgumentException
   */
  public static List<Content> buildContentFromClassList(List<CtClass> classList,
    ZipArchiveOutputStream zipOutputStream, Set<String> reservedNames, File buildDirectory,
    String componentPathBase, String defaultComponentPathSuffix, String defaultComponentGroup,
    ComponentNameTransformer transformer) throws InvalidComponentClassException, TransformerException,
    ParserConfigurationException, IOException, OutputFailureException, ClassNotFoundException,
    IllegalArgumentException, SecurityException, IllegalAccessException, InvocationTargetException,
    NoSuchMethodException {

    List<Content> builtContents = new ArrayList<Content>();

    for (CtClass curClass : classList) {
      ComponentMojoUtil.getLog().debug("Checking class for Component annotation " + curClass);

      Component annotation = (Component) curClass.getAnnotation(Component.class);

      ComponentMojoUtil.getLog().debug("Annotation : " + annotation);

      if (annotation != null) {
        ComponentMojoUtil.getLog().debug("Processing Component Class " + curClass);

        Content builtContent = ContentFactory.make(curClass, defaultComponentGroup);

        builtContents.add(builtContent);

        File contentFile = writeContentToFile(transformer, builtContent, curClass, buildDirectory,
          componentPathBase, defaultComponentPathSuffix);
        writeContentToArchiveFile(transformer, contentFile, curClass, zipOutputStream, reservedNames,
          componentPathBase, defaultComponentPathSuffix);
      }
    }

    return builtContents;

  }

}
TOP

Related Classes of com.citytechinc.cq.component.content.util.ContentUtil

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.