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

org.apache.juneau.microservice.resources.ConfigResource Maven / Gradle / Ivy

// ***************************************************************************************************************************
// * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file *
// * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file        *
// * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance            *
// * with the License.  You may obtain a copy of the License at                                                              *
// *                                                                                                                         *
// *  http://www.apache.org/licenses/LICENSE-2.0                                                                             *
// *                                                                                                                         *
// * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an  *
// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the        *
// * specific language governing permissions and limitations under the License.                                              *
// ***************************************************************************************************************************
package org.apache.juneau.microservice.resources;

import static org.apache.juneau.dto.html5.HtmlBuilder.*;

import java.io.*;
import java.util.Map;

import org.apache.juneau.annotation.*;
import org.apache.juneau.collections.*;
import org.apache.juneau.dto.html5.*;
import org.apache.juneau.html.annotation.*;
import org.apache.juneau.http.annotation.*;
import org.apache.juneau.http.annotation.Content;
import org.apache.juneau.http.response.*;
import org.apache.juneau.rest.annotation.*;
import org.apache.juneau.rest.servlet.*;

/**
 * Shows contents of the microservice configuration file.
 *
 * 
See Also:
* * @serial exclude */ @Rest( path="/config", title="Configuration", description="Contents of configuration file." ) @HtmlDocConfig( navlinks={ "up: request:/..", "api: servlet:/api", "stats: servlet:/stats", "edit: servlet:/edit" }, resolveBodyVars="true" ) @SuppressWarnings("javadoc") public class ConfigResource extends BasicRestServlet { private static final long serialVersionUID = 1L; @RestGet( path="/", summary="Get config file contents", description="Show contents of config file as a JsonMap.", swagger=@OpSwagger( responses={ "200:{ description:'Config file as a map of map of objects.', example:{'':{defaultKey:'defaultValue'},'Section1':{key1:'val1',key2:123}}}" } ) ) public JsonMap getConfig() { return getContext().getConfig().toMap(); } @RestGet( path="/edit", summary="Render form entry page for editing config file", description="Renders a form entry page for editing the raw text of a config file." ) public Form getConfigEditForm() { return form().id("form").action("servlet:/").method("POST").enctype("application/x-www-form-urlencoded").children( div()._class("data").children( table( tr(td().style("text-align:right").children(button("submit","Submit"),button("reset","Reset"))), tr(th().child("Contents")), tr(th().child( textarea().name("contents").rows(40).cols(120).style("white-space:pre;word-wrap:normal;overflow-x:scroll;font-family:monospace;") .text(getContext().getConfig().toString())) ) ) ) ); } @RestGet( path="/{section}", summary="Get config file section contents", description="Show contents of config file section as a JsonMap.", swagger=@OpSwagger( responses={ "200:{ description:'Config file section as a map of objects.', example:{key1:'val1',key2:123}}" } ) ) public JsonMap getConfigSection( @Path("section") @Schema(d="Section name in config file.") String section ) throws SectionNotFound { return getSection(section); } @RestGet( path="/{section}/{key}", summary="Get config file entry value", description="Show value of config file entry as a simple string.", swagger=@OpSwagger( responses={ "200:{ description:'Entry value.', example:'servlet:/htdocs/themes/dark.css'}" } ) ) public String getConfigEntry( @Path("section") @Schema(d="Section name in config file.") String section, @Path("key") @Schema(d="Key name in section.") String key ) throws SectionNotFound { return getSection(section).getString(key); } @RestPost( path="/", summary="Update config file contents", description="Update the contents of the config file from a FORM post.", swagger=@OpSwagger( responses={ "200:{ description:'Config file section as a map of objects.', example:{key1:'val1',key2:123}}" } ) ) public JsonMap setConfigContentsFormPost( @FormData("contents") @Schema(d="New contents in INI file format.") String contents ) throws Exception { return setConfigContents(new StringReader(contents)); } @RestPut( path="/", summary="Update config file contents", description="Update the contents of the config file from raw text.", swagger=@OpSwagger( responses={ "200:{ description:'Config file section as a map of objects.', example:{key1:'val1',key2:123}}" } ) ) public JsonMap setConfigContents( @Content @Schema(d="New contents in INI file format.") Reader contents ) throws Exception { return getContext().getConfig().load(contents, true).toMap(); } @RestPut( path="/{section}", summary="Update config section contents", description="Add or overwrite a config file section.", swagger=@OpSwagger( responses={ "200:{ description:'Config file section as a map of objects.', example:{key1:'val1',key2:123}}" } ) ) public JsonMap setConfigSection( @Path("section") @Schema(d="Section name in config file.") String section, @Content @Schema(d="New contents of config section as a simple map of key/value pairs.") Map contents ) throws Exception { getContext().getConfig().setSection(section, null, contents); return getSection(section); } @RestPut( path="/{section}/{key}", summary="Update config entry value", description="Add or overwrite a config file entry.", swagger=@OpSwagger( responses={ "200:{ description:'The updated value.', example:'servlet:/htdocs/themes/dark.css'}" } ) ) public String setConfigValue( @Path("section") @Schema(d="Section name in config file.") String section, @Path("key") @Schema(d="Key name in section.") String key, @Content @Schema(d="New value for entry.") String value ) throws SectionNotFound { getContext().getConfig().set(section + '/' + key, value); return getSection(section).getString(key); } //----------------------------------------------------------------------------------------------------------------- // Helper beans //----------------------------------------------------------------------------------------------------------------- @Response @Schema(description="Section not found.") private class SectionNotFound extends NotFound { private static final long serialVersionUID = 1L; SectionNotFound() { super("Section not found."); } } //----------------------------------------------------------------------------------------------------------------- // Helper methods //----------------------------------------------------------------------------------------------------------------- private JsonMap getSection(String name) throws SectionNotFound { return getContext().getConfig().getSection(name).asMap().orElseThrow(SectionNotFound::new); } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy