1 /*
2 * Copyright (c) 2012-2024, jcabi.com
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met: 1) Redistributions of source code must retain the above
8 * copyright notice, this list of conditions and the following
9 * disclaimer. 2) Redistributions in binary form must reproduce the above
10 * copyright notice, this list of conditions and the following
11 * disclaimer in the documentation and/or other materials provided
12 * with the distribution. 3) Neither the name of the jcabi.com nor
13 * the names of its contributors may be used to endorse or promote
14 * products derived from this software without specific prior written
15 * permission.
16 *
17 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
18 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT
19 * NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
20 * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
21 * THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
22 * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
23 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
24 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
25 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
26 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
27 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
28 * OF THE POSSIBILITY OF SUCH DAMAGE.
29 */
30 package com.jcabi.log;
31
32 import java.util.Formattable;
33 import java.util.FormattableFlags;
34
35 /**
36 * Logs decor.
37 *
38 * @since 0.1
39 */
40 public final class Logged {
41
42 /**
43 * The decor.
44 */
45 private final transient Formattable decor;
46
47 /**
48 * Formatting flags.
49 */
50 private final transient int flags;
51
52 /**
53 * Formatting width.
54 */
55 private final transient int width;
56
57 /**
58 * Formatting precision.
59 */
60 private final transient int precision;
61
62 /**
63 * Public ctor.
64 * @param dcr Decor
65 * @param flgs Flags
66 * @param wdt Width
67 * @param prcs Precision
68 * @checkstyle ParameterNumber (3 lines)
69 */
70 public Logged(final Formattable dcr,
71 final int flgs, final int wdt, final int prcs) {
72 this.decor = dcr;
73 this.flags = flgs;
74 this.width = wdt;
75 this.precision = prcs;
76 }
77
78 @Override
79 public String toString() {
80 final StringBuilder format = new StringBuilder(0);
81 format.append('%');
82 if ((this.flags & FormattableFlags.LEFT_JUSTIFY) == FormattableFlags
83 .LEFT_JUSTIFY) {
84 format.append('-');
85 }
86 if (this.width > 0) {
87 format.append(this.width);
88 }
89 if (this.precision > 0) {
90 format.append('.').append(this.precision);
91 }
92 if ((this.flags & FormattableFlags.UPPERCASE) == FormattableFlags
93 .UPPERCASE) {
94 format.append('S');
95 } else {
96 format.append('s');
97 }
98 return Logger.format(format.toString(), this.decor);
99 }
100
101 }