View Javadoc
1   /*
2    * SPDX-FileCopyrightText: Copyright (c) 2012-2025 Yegor Bugayenko
3    * SPDX-License-Identifier: MIT
4    */
5   package com.jcabi.xml;
6   
7   import java.util.ArrayList;
8   import java.util.Arrays;
9   import java.util.Collection;
10  import lombok.EqualsAndHashCode;
11  
12  /**
13   * Chain of {@link XSL} stylesheets.
14   *
15   * @since 0.12
16   * @checkstyle AbbreviationAsWordInNameCheck (5 lines)
17   */
18  @EqualsAndHashCode(of = "sheets")
19  public final class XSLChain implements XSL {
20  
21      /**
22       * XSL sheets.
23       */
24      private final transient XSL[] sheets;
25  
26      /**
27       * Public ctor.
28       * @param shts Sheets
29       * @since 0.22
30       */
31      public XSLChain(final XSL... shts) {
32          this(Arrays.asList(shts));
33      }
34  
35      /**
36       * Public ctor.
37       * @param shts Sheets
38       */
39      public XSLChain(final Collection<XSL> shts) {
40          this.sheets = shts.toArray(new XSL[0]);
41      }
42  
43      @Override
44      public XML transform(final XML xml) {
45          XML output = xml;
46          for (final XSL sheet : this.sheets) {
47              output = sheet.transform(output);
48          }
49          return output;
50      }
51  
52      @Override
53      public String applyTo(final XML xml) {
54          throw new UnsupportedOperationException("#applyTo()");
55      }
56  
57      @Override
58      public XSL with(final Sources src) {
59          final Collection<XSL> list = new ArrayList<>(this.sheets.length);
60          for (final XSL sheet : this.sheets) {
61              list.add(sheet.with(src));
62          }
63          return new XSLChain(list);
64      }
65  
66      @Override
67      public XSL with(final String name, final Object value) {
68          final Collection<XSL> list = new ArrayList<>(this.sheets.length);
69          for (final XSL sheet : this.sheets) {
70              list.add(sheet.with(name, value));
71          }
72          return new XSLChain(list);
73      }
74  }