001// Generated by delombok at Sun Jul 30 17:21:56 UTC 2023
002package de.cuioss.test.jsf.mocks;
003
004import java.net.MalformedURLException;
005import java.net.URL;
006import java.util.HashMap;
007import java.util.Map;
008import javax.faces.application.Resource;
009import javax.faces.application.ResourceHandler;
010import javax.faces.application.ViewResource;
011import javax.faces.context.FacesContext;
012import de.cuioss.tools.string.MoreStrings;
013
014/**
015 * Mock Implementation ResourceHandler
016 *
017 * @author Oliver Wolff
018 */
019public class CuiMockResourceHandler extends ResourceHandler {
020    /**
021     */
022    public static final String DUMMY_URL = "http://dummy";
023    /**
024     * "libNotThere"
025     */
026    public static final String LIBRARY_NOT_THERE = "libNotThere";
027    /**
028     * "resNotThere"
029     */
030    public static final String RESOURCE_NOT_THERE = "resNotThere";
031    /**
032     * "rendererererer"
033     */
034    public static final String RENDERER_SUFFIX = "-rendererererer";
035    /**
036     * the availableResouces use the form libraryName + LIBRARY_RESOURCE_DELIMITER +
037     * resourceName as key
038     */
039    public static final String LIBRARY_RESOURCE_DELIMITER = "-";
040    /**
041     * "image/png"
042     */
043    public static final String DEFAULT_CONTENT_TYPE = "image/png";
044    private boolean resourceRequest;
045    /**
046     * A map of resources to be provided by this resourceHandler.
047     */
048    private Map<String, CuiMockResource> availableResouces = new HashMap<>();
049
050    @Override
051    public Resource createResource(final String resourceName) {
052        return createResource(resourceName, null);
053    }
054
055    @Override
056    public Resource createResource(final String resourceName, final String libraryName) {
057        return createResource(resourceName, libraryName, DEFAULT_CONTENT_TYPE);
058    }
059
060    @Override
061    public Resource createResource(final String resourceName, final String libraryName, final String contentType) {
062        return availableResouces.get(createResourceMapKey(resourceName, libraryName));
063    }
064
065    @Override
066    public ViewResource createViewResource(final FacesContext context, final String resourceName) {
067        return new ViewResource() {
068            @Override
069            public URL getURL() {
070                try {
071                    return new URL(DUMMY_URL + resourceName);
072                } catch (MalformedURLException e) {
073                    throw new IllegalStateException(e);
074                }
075            }
076        };
077    }
078
079    /**
080     * Creates an resourceIdetnifier utilized by availableResouces
081     *
082     * @param resourceName may be null
083     * @param libraryName  may be null
084     * @return the concatenated String, see {@link #LIBRARY_RESOURCE_DELIMITER}
085     */
086    public static final String createResourceMapKey(final String resourceName, final String libraryName) {
087        var resource = resourceName;
088        var library = libraryName;
089        if (MoreStrings.isEmpty(library)) {
090            library = "notThere";
091        }
092        if (MoreStrings.isEmpty(resource)) {
093            resource = "notThere";
094        }
095        return library + LIBRARY_RESOURCE_DELIMITER + resource;
096    }
097
098    @Override
099    public boolean libraryExists(final String libraryName) {
100        return LIBRARY_NOT_THERE.equals(libraryName);
101    }
102
103    @Override
104    public void handleResourceRequest(final FacesContext context) {
105        // NOOP
106    }
107
108    @Override
109    public boolean isResourceRequest(final FacesContext context) {
110        return resourceRequest;
111    }
112
113    @Override
114    public String getRendererTypeForResourceName(final String resourceName) {
115        return resourceName + RENDERER_SUFFIX;
116    }
117
118    @java.lang.SuppressWarnings("all")
119    @lombok.Generated
120    public void setResourceRequest(final boolean resourceRequest) {
121        this.resourceRequest = resourceRequest;
122    }
123
124    /**
125     * A map of resources to be provided by this resourceHandler.
126     */
127    @java.lang.SuppressWarnings("all")
128    @lombok.Generated
129    public Map<String, CuiMockResource> getAvailableResouces() {
130        return this.availableResouces;
131    }
132
133    /**
134     * A map of resources to be provided by this resourceHandler.
135     */
136    @java.lang.SuppressWarnings("all")
137    @lombok.Generated
138    public void setAvailableResouces(final Map<String, CuiMockResource> availableResouces) {
139        this.availableResouces = availableResouces;
140    }
141}