All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.citytechinc.cq.component.touchuidialog.widget.maker.AbstractTouchUIWidgetMaker Maven / Gradle / Ivy

There is a newer version: 7.0.0
Show newest version
package com.citytechinc.cq.component.touchuidialog.widget.maker;

import com.citytechinc.cq.component.annotations.Property;
import com.citytechinc.cq.component.annotations.Property.RenderValue;
import com.citytechinc.cq.component.dialog.exception.InvalidComponentFieldException;
import com.citytechinc.cq.component.touchuidialog.TouchUIDialogElement;
import com.citytechinc.cq.component.touchuidialog.exceptions.TouchUIDialogGenerationException;
import com.citytechinc.cq.component.touchuidialog.widget.TouchUIWidgetParameters;
import com.citytechinc.cq.component.util.ComponentUtil;
import javassist.CtClass;
import javassist.CtField;
import javassist.NotFoundException;
import org.codehaus.plexus.util.StringUtils;

import java.lang.reflect.ParameterizedType;
import java.util.HashMap;
import java.util.Map;

public abstract class AbstractTouchUIWidgetMaker implements TouchUIWidgetMaker {

    protected final TouchUIWidgetMakerParameters parameters;

    public AbstractTouchUIWidgetMaker(TouchUIWidgetMakerParameters parameters) {
        this.parameters = parameters;
    }

    @SuppressWarnings("unchecked")
    public final TouchUIDialogElement make() throws ClassNotFoundException, InvalidComponentFieldException,
        TouchUIDialogGenerationException, IllegalAccessException, InstantiationException {
        Class clazz = getClass();
        while (clazz != null && !AbstractTouchUIWidgetMaker.class.equals(clazz.getSuperclass())) {
            clazz = clazz.getSuperclass();
        }
        Class parameterClass =
            (Class) ((ParameterizedType) clazz.getGenericSuperclass()).getActualTypeArguments()[0];
        T parameters = parameterClass.newInstance();

        parameters.setFieldName(getFieldNameForField());
        parameters.setName(getNameForField());
        parameters.setFieldLabel(getFieldLabelForField());
        parameters.setFieldDescription(getFieldDescriptionForField());
        parameters.setRequired(getRequiredForField());
        parameters.setDefaultValue(getDefaultValueForField());
        parameters.setValue(getValueForField());
        parameters.setDisabled(getDisabledForField());
        parameters.setCssClass(getCssClassForField());
        parameters.setRenderReadOnly(getRenderReadOnlyForField());
        parameters.setAdditionalProperties(getAdditionalPropertiesForField());
        parameters.setShowOnCreate(getShowOnCreateForField());
        parameters.setHideOnEdit(getHideOnEditForField());

        if (StringUtils.isNotEmpty(getOrderBefore())) {
            parameters.setOrderBefore(getOrderBefore());
        }

        return make(parameters);

    }

    protected abstract TouchUIDialogElement make(T parameters) throws ClassNotFoundException,
        InvalidComponentFieldException, TouchUIDialogGenerationException, IllegalAccessException,
        InstantiationException;

    /**
     * 

* Determines and returns the name for the dialog field. The name is the * relative path to where any authored input using the resultant widget will * be housed in the content repository. *

*

* When useDotSlashInName is true, the string './' will be prepended to the * determined name. *

* * @return The name property of the DialogField annotation if one is * provided, otherwise the result of the {@link #getName()} method. */ protected String getNameForField() { String overrideName = parameters.getDialogFieldConfig().getName(); if (StringUtils.isNotEmpty(overrideName)) { if (overrideName.endsWith("/")) { overrideName = overrideName + getName(); } return overrideName; } if (parameters.isUseDotSlashInName()) { return "./" + getName(); } return getName(); } /** * @return The fieldName property of the DialogField annotation if one is * provided, the result of the {@link #getName()} method otherwise. */ protected String getFieldNameForField() { String overrideFieldName = parameters.getDialogFieldConfig().getFieldName(); if (StringUtils.isNotEmpty(overrideFieldName)) { return overrideFieldName; } return getName(); } /** * @return The fieldLabel property of the DialogField annotation if one is * provided, null otherwise. */ protected String getFieldLabelForField() { String overrideLabel = parameters.getDialogFieldConfig().getFieldLabel(); if (StringUtils.isNotEmpty(overrideLabel)) { return overrideLabel; } return null; } /** * @return The fieldDescription property of the DialogField annotation if * one is provided, null otherwise. */ protected String getFieldDescriptionForField() { String overrideFieldDescription = parameters.getDialogFieldConfig().getFieldDescription(); if (StringUtils.isNotEmpty(overrideFieldDescription)) { return overrideFieldDescription; } return null; } protected boolean getRequiredForField() { return parameters.getDialogFieldConfig().isRequired(); } protected String getDefaultValueForField() { String overrideFieldValue = parameters.getDialogFieldConfig().getDefaultValue(); if (StringUtils.isNotEmpty(overrideFieldValue)) { return overrideFieldValue; } return null; } protected String getValueForField() { if (StringUtils.isNotBlank(parameters.getDialogFieldConfig().getValue())) { return parameters.getDialogFieldConfig().getValue(); } return null; } protected String getTitleForField() { if (StringUtils.isNotBlank(parameters.getDialogFieldConfig().getTitle())) { return parameters.getDialogFieldConfig().getTitle(); } return null; } protected boolean getDisabledForField() { return parameters.getDialogFieldConfig().isDisabled(); } protected String getCssClassForField() { if (StringUtils.isNotBlank(parameters.getDialogFieldConfig().getCssClass())) { return parameters.getDialogFieldConfig().getCssClass(); } return null; } private boolean getRenderReadOnlyForField() { return parameters.getDialogFieldConfig().isRenderReadOnly(); } private boolean getShowOnCreateForField() { return parameters.getDialogFieldConfig().isShowOnCreate(); } private boolean getHideOnEditForField() { return parameters.getDialogFieldConfig().isHideOnEdit(); } private String getOrderBefore() { return parameters.getDialogFieldConfig().getOrderBefore(); } /** * @return When the widget is represented by a field in the Java class, this * method will return the name of the field. When the widget is * represented by a method in the Java Class, the string 'is' or * 'get' is stripped from the method name if it starts with either * of these strings, and then returns the resultant string. */ protected String getName() { if (isField()) { return parameters.getCtMember().getName(); } else { String tempName = parameters.getCtMember().getName(); if (tempName.startsWith("is")) { return StringUtils.uncapitalise(tempName.substring(2)); } else if (tempName.startsWith("get")) { return StringUtils.uncapitalise(tempName.substring(3)); } else { return StringUtils.uncapitalise(tempName); } } } /** * @return True if the Widget is represented by a field in the Component * class, false otherwise. */ protected boolean isField() { return parameters.getCtMember() instanceof CtField; } /** * @return True if the Widget is represented by a method in the Component * class, false otherwise. */ protected boolean isMethod() { return !isField(); } @SuppressWarnings("unchecked") public E getAnnotation(Class annotationClass) throws ClassNotFoundException { if (parameters.getCtMember().hasAnnotation(annotationClass)) { return (E) parameters.getCtMember().getAnnotation(annotationClass); } return null; } /** * @return THe CtType of the field or method representing the Widget * @throws javassist.NotFoundException * @throws com.citytechinc.cq.component.dialog.exception.InvalidComponentFieldException */ public CtClass getCtType() throws NotFoundException, InvalidComponentFieldException { return parameters.getClassPool().getCtClass(getType().getName()); } /** * @return The Class of the field or method representing the Widget * @throws InvalidComponentFieldException */ public Class getType() throws InvalidComponentFieldException { return ComponentUtil.getTypeForMember(parameters.getCtMember(), parameters.getContainingClass()); } /** * @return Name Value pairs represented by the additional properties tied to * the DialogField annotation, or null if no such properties are * defined. */ protected Map getAdditionalPropertiesForField() { if (parameters.getDialogFieldConfig().getAdditionalProperties().length > 0) { Map properties = new HashMap(); for (Property curProperty : parameters.getDialogFieldConfig().getAdditionalProperties()) { if (RenderValue.TOUCH.equals(curProperty.renderIn()) || RenderValue.BOTH.equals( curProperty.renderIn())) { properties.put(curProperty.name(), curProperty.value()); } } return properties; } return null; } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy