Package com.citytechinc.cq.component.dialog.dialogfieldset

Source Code of com.citytechinc.cq.component.dialog.dialogfieldset.DialogFieldSetWidgetMaker

/**
*    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.dialog.dialogfieldset;

import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

import javassist.CannotCompileException;
import javassist.CtMember;
import javassist.NotFoundException;

import org.codehaus.plexus.util.StringUtils;

import com.citytechinc.cq.component.annotations.DialogField;
import com.citytechinc.cq.component.annotations.widgets.DialogFieldSet;
import com.citytechinc.cq.component.dialog.AbstractWidget;
import com.citytechinc.cq.component.dialog.DialogElement;
import com.citytechinc.cq.component.dialog.exception.InvalidComponentFieldException;
import com.citytechinc.cq.component.dialog.factory.WidgetFactory;
import com.citytechinc.cq.component.dialog.maker.AbstractWidgetMaker;
import com.citytechinc.cq.component.dialog.maker.WidgetMakerParameters;
import com.citytechinc.cq.component.dialog.widgetcollection.WidgetCollection;
import com.citytechinc.cq.component.dialog.widgetcollection.WidgetCollectionParameters;
import com.citytechinc.cq.component.maven.util.ComponentMojoUtil;

public class DialogFieldSetWidgetMaker extends AbstractWidgetMaker {

  public DialogFieldSetWidgetMaker(WidgetMakerParameters parameters) {
    super(parameters);
  }

  private static final String ITEMS = "items";

  public DialogElement make() throws ClassNotFoundException, SecurityException, InvalidComponentFieldException,
    NotFoundException, CannotCompileException, NoSuchFieldException, InstantiationException,
    IllegalAccessException, IllegalArgumentException, InvocationTargetException, NoSuchMethodException {

    DialogFieldSet dialogFieldSetAnnotation = getAnnotation(DialogFieldSet.class);

    DialogFieldSetWidgetParameters widgetParameters = new DialogFieldSetWidgetParameters();

    widgetParameters.setFieldName(getFieldNameForField());
    widgetParameters.setFieldLabel(getFieldLabelForField());
    widgetParameters.setFieldDescription(getFieldDescriptionForField());
    widgetParameters.setAdditionalProperties(getAdditionalPropertiesForField());
    widgetParameters.setHideLabel(getHideLabelForField());

    widgetParameters.setCollapseFirst(dialogFieldSetAnnotation.collapseFirst());
    widgetParameters.setCollapsible(dialogFieldSetAnnotation.collapsible());
    widgetParameters.setCollapsed(dialogFieldSetAnnotation.collapsed());
    widgetParameters.setBorder(dialogFieldSetAnnotation.border());
    String title = null;
    if (!StringUtils.isEmpty(dialogFieldSetAnnotation.title())) {
      title = dialogFieldSetAnnotation.title();
    }
    widgetParameters.setTitle(title);
    widgetParameters.setListeners(getListeners());
    widgetParameters.setContainedElements(buildWidgetCollection(dialogFieldSetAnnotation));

    return new DialogFieldSetWidget(widgetParameters);

  }

  private List<DialogElement> buildWidgetCollection(DialogFieldSet dialogFieldSetAnnotation)
    throws InvalidComponentFieldException, NotFoundException, ClassNotFoundException, SecurityException,
    CannotCompileException, NoSuchFieldException, InstantiationException, IllegalAccessException,
    IllegalArgumentException, InvocationTargetException, NoSuchMethodException {

    List<CtMember> fieldsAndMethods = new ArrayList<CtMember>();

    fieldsAndMethods.addAll(ComponentMojoUtil.collectFields(getCtType()));
    fieldsAndMethods.addAll(ComponentMojoUtil.collectMethods(getCtType()));

    List<DialogElement> elements = new ArrayList<DialogElement>();

    for (CtMember curField : fieldsAndMethods) {
      if (curField.hasAnnotation(DialogField.class)) {

        Class<?> fieldClass = parameters.getClassLoader().loadClass(curField.getDeclaringClass().getName());

        WidgetMakerParameters curFieldMember = new WidgetMakerParameters(
          (DialogField) curField.getAnnotation(DialogField.class), curField, fieldClass,
          parameters.getClassLoader(), parameters.getClassPool(), parameters.getWidgetRegistry(), null, true);

        DialogElement builtFieldWidget = WidgetFactory.make(curFieldMember, -1);
        if (builtFieldWidget instanceof AbstractWidget
          && StringUtils.isNotEmpty(dialogFieldSetAnnotation.namePrefix())) {
          AbstractWidget widget = (AbstractWidget) builtFieldWidget;
          String name = widget.getName();
          String newName;
          if (name.startsWith("./")) {
            newName = name.substring(2);
          } else {
            newName = name;
          }
          newName = dialogFieldSetAnnotation.namePrefix() + newName;
          if (name.startsWith("./")) {
            newName = "./" + newName;
          }
          widget.setName(newName);
        }
        elements.add(builtFieldWidget);
      }
    }
    WidgetCollectionParameters wcp = new WidgetCollectionParameters();
    wcp.setContainedElements(elements);
    wcp.setFieldName(ITEMS);
    return Arrays.asList(new DialogElement[] { new WidgetCollection(wcp) });

  }
}
TOP

Related Classes of com.citytechinc.cq.component.dialog.dialogfieldset.DialogFieldSetWidgetMaker

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.