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

pl.fhframework.service.ComponentServiceImpl Maven / Gradle / Ivy

package pl.fhframework.service;

import org.springframework.stereotype.Service;
import pl.fhframework.annotations.Control;
import pl.fhframework.model.forms.Component;
import pl.fhframework.model.forms.Form;
import pl.fhframework.model.forms.IGroupingComponent;

import java.util.Arrays;
import java.util.List;

/**
 * Created by Adam Zareba on 28.02.2017.
 */
@Service
public class ComponentServiceImpl implements ComponentService {

    public static boolean isPossibleToBeAddedForParent(Component component, Class parentClass) {
        return isPossibleToBeAddedForParent(component.getClass(), parentClass);
    }

    public static boolean isPossibleToBeAddedForParent(Class componentClass, Class parentClass) {
        Class filteredParentClass = Form.class.isAssignableFrom(parentClass) ? Form.class : parentClass;
        Control formElementAnnotation = componentClass.getAnnotation(Control.class);
        if(formElementAnnotation == null) {
            return true;
        }
        List> parents = Arrays.asList(formElementAnnotation.parents());

        boolean matches = false;
        if (parents.size() == 0 || (parents.size() == 1 && parents.contains(Object.class))) {
            matches = true;
        } else {
            for (Class parent : parents) {
                if (parent.isAssignableFrom(filteredParentClass)) {
                    matches = true;
                }
            }
        }
        for (Class invalidParent : formElementAnnotation.invalidParents()) {
            if (invalidParent.isAssignableFrom(filteredParentClass)) {
                matches = false;
            }
        }

        return matches;
    }

    @Override
    public  T getComponent(IGroupingComponent groupingComponent, String subComponentId, Class subComponentClass) {
        for (Component subComponent : groupingComponent.getSubcomponents()) {
            if (subComponent instanceof IGroupingComponent) {
                if (subComponentId.equals(subComponent.getId()) && subComponentClass.isAssignableFrom(subComponent.getClass())) {
                    return (T) subComponent;
                } else {
                    T component = (T) getComponent(((IGroupingComponent) subComponent), subComponentId, subComponentClass);
                    if (component != null) {
                        return component;
                    }
                }
            } else {
                if (subComponentId.equals(subComponent.getId()) && subComponent.getClass().isAssignableFrom(subComponentClass)) {
                    return (T) subComponent;
                }
            }
        }

        return null;
    }


}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy