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

org.openfact.services.resources.admin.info.ServerInfoAdminResource Maven / Gradle / Ivy

The newest version!
package org.openfact.services.resources.admin.info;

import org.openfact.keys.KeyProvider;
import org.openfact.component.ComponentFactory;
import org.openfact.provider.ConfiguredProvider;
import org.openfact.provider.ProviderConfigProperty;
import org.openfact.models.utils.ModelToRepresentation;
import org.openfact.report.ReportProviderType;
import org.openfact.report.ReportTheme;
import org.openfact.report.ReportThemeProvider;
import org.openfact.representations.idm.ComponentTypeRepresentation;
import org.openfact.representations.info.*;
import org.openfact.services.managers.ServerStartup;
import org.openfact.theme.Theme;
import org.openfact.theme.ThemeProvider;
import org.openfact.theme.ThemeProviderType;

import javax.ejb.Stateless;
import javax.enterprise.inject.Any;
import javax.enterprise.inject.Instance;
import javax.inject.Inject;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.WebApplicationException;
import javax.ws.rs.core.MediaType;
import java.io.IOException;
import java.util.*;

@Stateless
@Path("/admin/serverinfo")
public class ServerInfoAdminResource {

    @Inject
    private ServerStartup serverStartup;

    @Inject
    @ThemeProviderType(type = ThemeProviderType.ProviderType.EXTENDING)
    private ThemeProvider themeProvider;

    @Inject
    @ReportProviderType(type = ReportProviderType.ProviderType.EXTENDING)
    private ReportThemeProvider reportThemeProvider;

    @Inject
    @Any
    private Instance componentFactories;

    @Inject
    private ModelToRepresentation modelToRepresentation;

    private static Map> createEnumsMap(Class... enums) {
        Map> m = new HashMap<>();
        for (Class e : enums) {
            String n = e.getSimpleName();
            n = Character.toLowerCase(n.charAt(0)) + n.substring(1);

            List l = new LinkedList<>();
            for (Object c : e.getEnumConstants()) {
                l.add(c.toString());
            }
            Collections.sort(l);

            m.put(n, l);
        }
        return m;
    }

    /**
     * General information about the server
     *
     * @return
     */
    @GET
    @Produces(MediaType.APPLICATION_JSON)
    public ServerInfoRepresentation getInfo() {
        ServerInfoRepresentation info = new ServerInfoRepresentation();
        info.setSystemInfo(SystemInfoRepresentation.create(serverStartup.getServerStartupTimestamp()));
        info.setMemoryInfo(MemoryInfoRepresentation.create());
        info.setProfileInfo(ProfileInfoRepresentation.create());

        setThemes(info);
        setReports(info);
        setProviders(info);
        return info;
    }

    private void setProviders(ServerInfoRepresentation info) {
        info.setComponentTypes(new HashMap<>());

        List types = new ArrayList<>();

        Iterator iterator = componentFactories.iterator();
        while (iterator.hasNext()) {
            ComponentFactory componentFactory = iterator.next();

            ComponentTypeRepresentation rep = new ComponentTypeRepresentation();
            rep.setId(componentFactory.getId());
            ConfiguredProvider configured = componentFactory;
            rep.setHelpText(configured.getHelpText());
            List configProperties = configured.getConfigProperties();
            if (configProperties == null) {
                configProperties = Collections.EMPTY_LIST;
            }
            rep.setProperties(modelToRepresentation.toRepresentation(configProperties));

            types.add(rep);
        }

        info.getComponentTypes().put(KeyProvider.class.getName(), types);
    }

    private void setThemes(ServerInfoRepresentation info) {
        info.setThemes(new HashMap<>());

        for (Theme.Type type : Theme.Type.values()) {
            List themeNames = new LinkedList<>(themeProvider.nameSet(type));
            Collections.sort(themeNames);

            List themes = new LinkedList<>();
            info.getThemes().put(type.toString().toLowerCase(), themes);

            for (String name : themeNames) {
                try {
                    Theme theme = themeProvider.getTheme(name, type);
                    ThemeInfoRepresentation ti = new ThemeInfoRepresentation();
                    ti.setName(name);

                    String locales = theme.getProperties().getProperty("locales");
                    if (locales != null) {
                        ti.setLocales(locales.replaceAll(" ", "").split(","));
                    }

                    themes.add(ti);
                } catch (IOException e) {
                    throw new WebApplicationException("Failed to load themes", e);
                }
            }
        }
    }

    private void setReports(ServerInfoRepresentation info) {
        info.setReports(new HashMap<>());

        for (ReportTheme.Type type : ReportTheme.Type.values()) {
            List reportThemeNames = new LinkedList<>(reportThemeProvider.nameSet(type));
            Collections.sort(reportThemeNames);

            List themes = new LinkedList<>();
            info.getReports().put(type.toString().toLowerCase(), themes);

            for (String name : reportThemeNames) {
                try {
                    ReportTheme theme = reportThemeProvider.getTheme(name, type);
                    ReportInfoRepresentation ti = new ReportInfoRepresentation();
                    ti.setName(name);

                    String locales = theme.getProperties().getProperty("locales");
                    if (locales != null) {
                        ti.setLocales(locales.replaceAll(" ", "").split(","));
                    }

                    themes.add(ti);
                } catch (IOException e) {
                    throw new WebApplicationException("Failed to load report themes", e);
                }
            }
        }
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy