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

com.jdiai.page.objects.PageFactory Maven / Gradle / Ivy

There is a newer version: 1.1.8
Show newest version
package com.jdiai.page.objects;

import com.epam.jdi.tools.map.MapArray;
import com.epam.jdi.tools.pairs.Pair;
import com.jdiai.annotations.Site;

import java.lang.reflect.Field;
import java.util.List;

import static com.epam.jdi.tools.LinqUtils.filter;
import static com.jdiai.JDI.domain;
import static com.jdiai.jsbuilder.QueryLogger.logger;
import static com.jdiai.page.objects.JDIPageFactory.*;
import static com.jdiai.page.objects.PageFactoryUtils.getJSFields;
import static com.jdiai.page.objects.PageFactoryUtils.setFieldValue;

public class PageFactory {
    public static  T initElements(Class cl) {
        Object page = CREATE_PAGE.apply(cl);
        initPageElements(page);
        return (T) page;
    }

    public static void initPageElements(Object page) {
        List jsFields = getJSFields(page.getClass());
        List filteredFields = filter(jsFields, FIELDS_FILTER);
        for (Field field : filteredFields) {
            createAndSetupField(page, field);
        }
    }
    private static void createAndSetupField(Object page, Field field) {
        InitInfo info = new InitInfo(page, field);
        MapArray rules = SETUP_RULES.filter(
            rule -> rule.condition.apply(info));
        for (Pair rule : rules) {
            logger.debug("Setup rule '%s' for field %s", rule.key, field.getName());
            rule.value.action.accept(info);
        }
        setFieldValue(field, page, info.instance);
    }

    public static void initSite(Class cl) {
        if (cl.isAnnotationPresent(Site.class)) {
            domain = cl.getAnnotation(Site.class).value();
        }
        Field[] allFields = cl.getDeclaredFields();
        List pages = filter(allFields, PAGES_FILTER);
        for (Field field : pages) {
            createAndSetupField(null, field);
        }
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy