View Javadoc
1   package org.apache.maven.doxia.sink.impl;
2   
3   /*
4    * Licensed to the Apache Software Foundation (ASF) under one
5    * or more contributor license agreements.  See the NOTICE file
6    * distributed with this work for additional information
7    * regarding copyright ownership.  The ASF licenses this file
8    * to you under the Apache License, Version 2.0 (the
9    * "License"); you may not use this file except in compliance
10   * with the License.  You may obtain a copy of the License at
11   *
12   *   http://www.apache.org/licenses/LICENSE-2.0
13   *
14   * Unless required by applicable law or agreed to in writing,
15   * software distributed under the License is distributed on an
16   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17   * KIND, either express or implied.  See the License for the
18   * specific language governing permissions and limitations
19   * under the License.
20   */
21  
22  import org.apache.maven.doxia.logging.Log;
23  import org.apache.maven.doxia.logging.SystemStreamLog;
24  import org.apache.maven.doxia.markup.Markup;
25  import org.apache.maven.doxia.sink.Sink;
26  
27  /**
28   * An abstract base class that defines some convenience methods for sinks.
29   *
30   * @author ltheussl
31   * @author <a href="mailto:vincent.siveton@gmail.com">Vincent Siveton</a>
32   * @version $Id: AbstractSink.html 979316 2016-02-02 21:51:43Z hboutemy $
33   * @since 1.1
34   */
35  public abstract class AbstractSink
36      implements Sink, Markup
37  {
38      private Log logger;
39  
40      /** {@inheritDoc} */
41      public void enableLogging( Log log )
42      {
43          this.logger = log;
44      }
45  
46      /**
47       * Returns a logger for this sink.
48       * If no logger has been configured, a new SystemStreamLog is returned.
49       *
50       * @return Log
51       */
52      protected Log getLog()
53      {
54          if ( logger == null )
55          {
56              logger = new SystemStreamLog();
57          }
58  
59          return logger;
60      }
61  
62      /**
63       * Parses the given String and replaces all occurrences of
64       * '\n', '\r' and '\r\n' with the system EOL. All Sinks should
65       * make sure that text output is filtered through this method.
66       *
67       * @param text the text to scan.
68       *      May be null in which case null is returned.
69       *
70       * @return a String that contains only System EOLs.
71       */
72       protected static String unifyEOLs( String text )
73       {
74          if ( text == null )
75          {
76              return null;
77          }
78  
79          int length = text.length();
80  
81          StringBuilder buffer = new StringBuilder( length );
82  
83          for ( int i = 0; i < length; i++ )
84          {
85              if ( text.charAt( i ) == '\r' )
86              {
87                  if ( ( i + 1 ) < length && text.charAt( i + 1 ) == '\n' )
88                  {
89                      i++;
90                  }
91  
92                  buffer.append( EOL );
93              }
94              else if ( text.charAt( i ) == '\n' )
95              {
96                  buffer.append( EOL );
97              }
98              else
99              {
100                 buffer.append( text.charAt( i ) );
101             }
102         }
103 
104         return buffer.toString();
105     }
106 
107      /**
108       * This is called in {@link #head()} or in {@link #close()}, and can be used
109       * to set the sink into a clear state so it can be re-used.
110       *
111       * @since 1.1.2
112       */
113      protected void init()
114      {
115          // nop
116      }
117 }