001/* 002 * ============================================================================ 003 * Copyright © 2002-2026 by Thomas Thrien. 004 * All Rights Reserved. 005 * ============================================================================ 006 * Licensed to the public under the agreements of the GNU Lesser General Public 007 * License, version 3.0 (the "License"). You may obtain a copy of the License at 008 * 009 * http://www.gnu.org/licenses/lgpl.html 010 * 011 * Unless required by applicable law or agreed to in writing, software 012 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 013 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 014 * License for the specific language governing permissions and limitations 015 * under the License. 016 */ 017 018package org.tquadrat.foundation.jsonbuilder.internal; 019 020import static java.lang.String.format; 021import static java.util.Locale.ROOT; 022import static org.apiguardian.api.API.Status.INTERNAL; 023import static org.tquadrat.foundation.lang.Objects.requireNonNullArgument; 024import static org.tquadrat.foundation.lang.Objects.requireValidIntegerArgument; 025 026import java.math.BigDecimal; 027import java.math.BigInteger; 028import java.util.Formatter; 029 030import org.apiguardian.api.API; 031import org.tquadrat.foundation.annotation.ClassVersion; 032import org.tquadrat.foundation.jsonbuilder.JSONArray; 033import org.tquadrat.foundation.jsonbuilder.JSONBuilder; 034import org.tquadrat.foundation.jsonbuilder.JSONNumber; 035import org.tquadrat.foundation.jsonbuilder.JSONObject; 036import org.tquadrat.foundation.jsonbuilder.JSONString; 037import org.tquadrat.foundation.jsonbuilder.JSONValue; 038 039/** 040 * <p>{@summary The implementation for the interface 041 * {@link JSONBuilder}.} 042 * 043 * @extauthor Thomas Thrien - thomas.thrien@tquadrat.org 044 * @version $Id: JSONBuilderImpl.java 1190 2026-04-08 13:27:20Z tquadrat $ 045 * @since 0.25.0 046 * 047 * @UMLGraph.link 048 */ 049@ClassVersion( sourceVersion = "$Id: JSONBuilderImpl.java 1190 2026-04-08 13:27:20Z tquadrat $" ) 050@API( status = INTERNAL, since = "0.25.0" ) 051public final class JSONBuilderImpl implements JSONBuilder 052{ 053 /*------------*\ 054 ====** Attributes **======================================================= 055 \*------------*/ 056 /** 057 * The indentation that is used when a 058 * {@link JSONValue} 059 * is formatted. 060 * 061 * @see JSONValue#formatTo(Formatter,int,int,int) 062 */ 063 private int m_Indentation; 064 065 /*--------------*\ 066 ====** Constructors **===================================================== 067 \*--------------*/ 068 /** 069 * Creates a new instance of {@code JSONBuilder}. 070 */ 071 public JSONBuilderImpl() 072 { 073 m_Indentation = DEFAULT_INDENTATION; 074 } // JSONBuilderImpl() 075 076 /*---------*\ 077 ====** Methods **========================================================== 078 \*---------*/ 079 /** 080 * {@inheritDoc} 081 */ 082 @Override 083 public final JSONArray createArray() { return new JSONArrayImpl( this ); } 084 085 /** 086 * {@inheritDoc} 087 */ 088 @Override 089 public final JSONObject createObject() { return new JSONObjectImpl( this ); } 090 091 /** 092 * {@inheritDoc} 093 */ 094 @Override 095 public final int getIndentation() { return m_Indentation; } 096 097 /** 098 * {@inheritDoc} 099 */ 100 @Override 101 public final void setIndentation( final int value ) 102 { 103 m_Indentation = requireValidIntegerArgument( value, "value", v -> v > 0 ); 104 } // setIndentation() 105 106 /** 107 * {@inheritDoc} 108 */ 109 @Override 110 public JSONNumber valueOf( final BigDecimal value ) 111 { 112 final var retValue = new JSONNumberImpl( format( ROOT, "%f", requireNonNullArgument( value, "value" ) ) ); 113 114 //---* Done *---------------------------------------------------------- 115 return retValue; 116 } // valueOf() 117 118 /** 119 * {@inheritDoc} 120 */ 121 @Override 122 public JSONNumber valueOf( final BigInteger value ) 123 { 124 final var retValue = new JSONNumberImpl( format( ROOT, "%d", requireNonNullArgument( value, "value" ) ) ); 125 126 //---* Done *---------------------------------------------------------- 127 return retValue; 128 } // valueOf() 129 130 /** 131 * {@inheritDoc} 132 */ 133 @Override 134 public JSONNumber valueOf( final double value ) 135 { 136 final var retValue = new JSONNumberImpl( Double.toString( value ) ); 137 138 //---* Done *---------------------------------------------------------- 139 return retValue; 140 } // valueOf() 141 142 /** 143 * {@inheritDoc} 144 */ 145 @SuppressWarnings( "CallToNumericToString" ) 146 @Override 147 public JSONNumber valueOf( final Double value ) 148 { 149 final var retValue = new JSONNumberImpl( requireNonNullArgument( value, "value" ).toString() ); 150 151 //---* Done *---------------------------------------------------------- 152 return retValue; 153 } // valueOf() 154 155 /** 156 * {@inheritDoc} 157 */ 158 @Override 159 public JSONNumber valueOf( final float value ) 160 { 161 final var retValue = new JSONNumberImpl( Float.toString( value ) ); 162 163 //---* Done *---------------------------------------------------------- 164 return retValue; 165 } // valueOf() 166 167 /** 168 * {@inheritDoc} 169 */ 170 @SuppressWarnings( "CallToNumericToString" ) 171 @Override 172 public JSONNumber valueOf( final Float value ) 173 { 174 final var retValue = new JSONNumberImpl( requireNonNullArgument( value, "value" ).toString() ); 175 176 //---* Done *---------------------------------------------------------- 177 return retValue; 178 } // valueOf() 179 180 /** 181 * {@inheritDoc} 182 */ 183 @Override 184 public JSONNumber valueOf( final int value ) 185 { 186 final var retValue = new JSONNumberImpl( Integer.toString( value ) ); 187 188 //---* Done *---------------------------------------------------------- 189 return retValue; 190 } // valueOf() 191 192 /** 193 * {@inheritDoc} 194 */ 195 @SuppressWarnings( "CallToNumericToString" ) 196 @Override 197 public JSONNumber valueOf( final Integer value ) 198 { 199 final var retValue = new JSONNumberImpl( requireNonNullArgument( value, "value" ).toString() ); 200 201 //---* Done *---------------------------------------------------------- 202 return retValue; 203 } // valueOf() 204 205 /** 206 * {@inheritDoc} 207 */ 208 @Override 209 public JSONNumber valueOf( final long value ) 210 { 211 final var retValue = new JSONNumberImpl( Long.toString( value ) ); 212 213 //---* Done *---------------------------------------------------------- 214 return retValue; 215 } // valueOf() 216 217 /** 218 * {@inheritDoc} 219 */ 220 @SuppressWarnings( "CallToNumericToString" ) 221 @Override 222 public JSONNumber valueOf( final Long value ) 223 { 224 final var retValue = new JSONNumberImpl( requireNonNullArgument( value, "value" ).toString() ); 225 226 //---* Done *---------------------------------------------------------- 227 return retValue; 228 } // valueOf() 229 230 /** 231 * {@inheritDoc} 232 */ 233 @Override 234 public JSONString valueOf( final String value ) 235 { 236 final var retValue = new JSONStringImpl( requireNonNullArgument( value, "value" ) ); 237 238 //---* Done *---------------------------------------------------------- 239 return retValue; 240 } // valueOf() 241} 242// class JSONBuilderImpl 243 244/* 245 * End of File 246 */