• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

hazendaz / sitemesh2 / 59

22 Mar 2026 02:30AM UTC coverage: 40.347%. Remained the same
59

push

github

hazendaz
[mvn] Update maven wrapper

698 of 1891 branches covered (36.91%)

Branch coverage included in aggregate %.

1555 of 3693 relevant lines covered (42.11%)

0.42 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

81.01
/src/main/java/com/opensymphony/module/sitemesh/DefaultSitemeshBuffer.java
1
/*
2
 * SPDX-License-Identifier: Apache-2.0
3
 * Copyright 2011-2026 Hazendaz
4
 */
5
package com.opensymphony.module.sitemesh;
6

7
import java.io.IOException;
8
import java.io.Writer;
9
import java.util.Map;
10
import java.util.TreeMap;
11

12
/**
13
 * The default implementation of sitemesh buffer.
14
 */
15
public class DefaultSitemeshBuffer implements SitemeshBuffer {
16

17
    /** The buffer. */
18
    private final char[] buffer;
19

20
    /** The length. */
21
    private final int length;
22

23
    /** The buffer fragments. */
24
    private final TreeMap<Integer, SitemeshBufferFragment> bufferFragments;
25

26
    /**
27
     * Instantiates a new default sitemesh buffer.
28
     *
29
     * @param buffer
30
     *            the buffer
31
     */
32
    public DefaultSitemeshBuffer(char[] buffer) {
33
        this(buffer, buffer.length);
1✔
34
    }
1✔
35

36
    /**
37
     * Instantiates a new default sitemesh buffer.
38
     *
39
     * @param buffer
40
     *            the buffer
41
     * @param length
42
     *            the length
43
     */
44
    public DefaultSitemeshBuffer(char[] buffer, int length) {
45
        this(buffer, length, new TreeMap<Integer, SitemeshBufferFragment>());
1✔
46
    }
1✔
47

48
    /**
49
     * Instantiates a new default sitemesh buffer.
50
     *
51
     * @param buffer
52
     *            the buffer
53
     * @param length
54
     *            the length
55
     * @param bufferFragments
56
     *            the buffer fragments
57
     */
58
    public DefaultSitemeshBuffer(char[] buffer, int length, TreeMap<Integer, SitemeshBufferFragment> bufferFragments) {
1✔
59
        this.buffer = buffer;
1✔
60
        this.length = length;
1✔
61
        this.bufferFragments = bufferFragments;
1✔
62
    }
1✔
63

64
    @Override
65
    public void writeTo(Writer writer, int start, int length) throws IOException {
66
        int pos = start;
1✔
67
        for (Map.Entry<Integer, SitemeshBufferFragment> entry : bufferFragments.entrySet()) {
1✔
68
            int fragmentPosition = entry.getKey();
1✔
69
            if (fragmentPosition < pos) {
1✔
70
                continue;
1✔
71
            }
72
            if (fragmentPosition > start + length) {
1✔
73
                break;
1✔
74
            }
75
            // Write the buffer up to the fragment
76
            writer.write(buffer, pos, fragmentPosition - pos);
1✔
77
            // Write the fragment
78
            entry.getValue().writeTo(writer);
1✔
79
            // increment pos
80
            pos = fragmentPosition;
1✔
81
        }
1✔
82
        // Write out the remaining buffer
83
        if (pos < start + length) {
1✔
84
            writer.write(buffer, pos, start + length - pos);
1✔
85
        }
86
    }
1✔
87

88
    @Override
89
    public int getTotalLength() {
90
        return getTotalLength(0, length);
1✔
91
    }
92

93
    @Override
94
    public int getTotalLength(int start, int length) {
95
        int total = length;
1✔
96

97
        for (Map.Entry<Integer, SitemeshBufferFragment> entry : bufferFragments.entrySet()) {
1✔
98
            int fragmentPosition = entry.getKey();
1✔
99
            if (fragmentPosition < start) {
1!
100
                continue;
×
101
            }
102
            if (fragmentPosition > start + length) {
1!
103
                break;
×
104
            }
105
            total += entry.getValue().getTotalLength();
1✔
106
        }
1✔
107
        return total;
1✔
108
    }
109

110
    @Override
111
    public int getBufferLength() {
112
        return length;
1✔
113
    }
114

115
    @Override
116
    public char[] getCharArray() {
117
        return buffer;
1✔
118
    }
119

120
    @Override
121
    public boolean hasFragments() {
122
        return !bufferFragments.isEmpty();
×
123
    }
124

125
    /**
126
     * Builder.
127
     *
128
     * @return the builder
129
     */
130
    public static Builder builder() {
131
        return new Builder();
×
132
    }
133

134
    /**
135
     * Builder.
136
     *
137
     * @param sitemeshBuffer
138
     *            the sitemesh buffer
139
     *
140
     * @return the builder
141
     */
142
    public static Builder builder(SitemeshBuffer sitemeshBuffer) {
143
        if (sitemeshBuffer instanceof DefaultSitemeshBuffer) {
1✔
144
            return new Builder((DefaultSitemeshBuffer) sitemeshBuffer);
1✔
145
        }
146
        return new Builder(sitemeshBuffer);
1✔
147
    }
148

149
    /**
150
     * The Class Builder.
151
     */
152
    public static class Builder {
153

154
        /** The buffer. */
155
        private char[] buffer;
156

157
        /** The length. */
158
        private int length;
159

160
        /** The fragments. */
161
        private final TreeMap<Integer, SitemeshBufferFragment> fragments;
162

163
        /**
164
         * Instantiates a new builder.
165
         */
166
        private Builder() {
×
167
            this.fragments = new TreeMap<>();
×
168
        }
×
169

170
        /**
171
         * Instantiates a new builder.
172
         *
173
         * @param buffer
174
         *            the buffer
175
         */
176
        private Builder(DefaultSitemeshBuffer buffer) {
1✔
177
            this.buffer = buffer.buffer;
1✔
178
            this.length = buffer.length;
1✔
179
            this.fragments = new TreeMap<>(buffer.bufferFragments);
1✔
180
        }
1✔
181

182
        /**
183
         * Instantiates a new builder.
184
         *
185
         * @param buffer
186
         *            the buffer
187
         */
188
        private Builder(SitemeshBuffer buffer) {
1✔
189
            this.buffer = buffer.getCharArray();
1✔
190
            this.length = buffer.getBufferLength();
1✔
191
            this.fragments = new TreeMap<>();
1✔
192
        }
1✔
193

194
        /**
195
         * Sets the buffer.
196
         *
197
         * @param buffer
198
         *            the buffer
199
         *
200
         * @return the builder
201
         */
202
        public Builder setBuffer(char[] buffer) {
203
            this.buffer = buffer;
×
204
            return this;
×
205
        }
206

207
        /**
208
         * Sets the length.
209
         *
210
         * @param length
211
         *            the length
212
         *
213
         * @return the builder
214
         */
215
        public Builder setLength(int length) {
216
            this.length = length;
×
217
            return this;
×
218
        }
219

220
        /**
221
         * Insert.
222
         *
223
         * @param position
224
         *            the position
225
         * @param fragment
226
         *            the fragment
227
         *
228
         * @return the builder
229
         */
230
        public Builder insert(int position, SitemeshBufferFragment fragment) {
231
            this.fragments.put(position, fragment);
1✔
232
            return this;
1✔
233
        }
234

235
        /**
236
         * Builds the.
237
         *
238
         * @return the sitemesh buffer
239
         */
240
        public SitemeshBuffer build() {
241
            return new DefaultSitemeshBuffer(buffer, length, fragments);
1✔
242
        }
243
    }
244
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc