/* * The contents of this file are subject to the terms of the Common Development and * Distribution License (the License). You may not use this file except in compliance with the * License. * * You can obtain a copy of the License at legal/CDDLv1.0.txt. See the License for the * specific language governing permission and limitations under the License. * * When distributing Covered Software, include this CDDL Header Notice in each file and include * the License file at legal/CDDLv1.0.txt. If applicable, add the following below the CDDL * Header, with the fields enclosed by brackets [] replaced by your own identifying * information: "Portions Copyright [year] [name of copyright owner]". * * Copyright 2016 ForgeRock AS. */ package org.opends.server.api; import static org.opends.messages.ConfigMessages.*; import static org.opends.server.util.StaticUtils.*; import java.util.List; import org.forgerock.http.HttpApplication; import org.forgerock.http.HttpApplicationException; import org.forgerock.i18n.LocalizableException; import org.forgerock.i18n.LocalizableMessage; import org.forgerock.opendj.server.config.server.HTTPEndpointCfg; import org.opends.server.core.ServerContext; import org.opends.server.types.InitializationException; /** * Endpoint attach an {@link HttpApplication} to an URI. * * @param * Type of the configuration used by this {@link HttpEndpoint} */ public abstract class HttpEndpoint { /** Configuration of this endpoint. */ protected final C configuration; /** Context of this LDAP server. */ protected final ServerContext serverContext; /** * Create a new {@link HttpEndpoint} with the given configuration. * * @param configuration * Configuration of this {@link HttpEndpoint} * @param serverContext * Context of this LDAP server */ public HttpEndpoint(C configuration, ServerContext serverContext) { this.configuration = configuration; this.serverContext = serverContext; } /** * Check that the configuration of this {@link HttpEndpoint} is valid. This * default implementation try to instantiate and start the underlying * {@link HttpApplication}. * * @param unacceptableReasons * A list that can be used to hold messages about why the * configuration is not acceptable. * @return true if the configuration is valid. */ public boolean isConfigurationValid(List unacceptableReasons) { HttpApplication dummyApplication = null; try { dummyApplication = newHttpApplication(); dummyApplication.start(); return true; } catch (HttpApplicationException e) { if (e instanceof LocalizableException) { unacceptableReasons.add(((LocalizableException) e).getMessageObject()); return false; } unacceptableReasons.add(ERR_CONFIG_HTTPENDPOINT_INVALID_CONFIGURATION .get(configuration.dn(), stackTraceToSingleLineString(e))); return false; } catch (InitializationException ie) { unacceptableReasons.add(ie.getMessageObject()); return false; } finally { if (dummyApplication != null) { dummyApplication.stop(); } } } /** * Create a new HttpApplication. * * @return an {@link HttpApplication} configured and ready to be started. * @throws InitializationException * If the application cannot be created. */ public abstract HttpApplication newHttpApplication() throws InitializationException; }