001 /* 002 * Copyright (c) 2009 The JOMC Project 003 * Copyright (c) 2005 Christian Schulte <cs@jomc.org> 004 * All rights reserved. 005 * 006 * Redistribution and use in source and binary forms, with or without 007 * modification, are permitted provided that the following conditions 008 * are met: 009 * 010 * o Redistributions of source code must retain the above copyright 011 * notice, this list of conditions and the following disclaimer. 012 * 013 * o Redistributions in binary form must reproduce the above copyright 014 * notice, this list of conditions and the following disclaimer in 015 * the documentation and/or other materials provided with the 016 * distribution. 017 * 018 * THIS SOFTWARE IS PROVIDED BY THE JOMC PROJECT AND CONTRIBUTORS "AS IS" 019 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 020 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 021 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE JOMC PROJECT OR 022 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 023 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 024 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; 025 * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 026 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 027 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 028 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 029 * 030 * $Id: Section.java 891 2009-11-02 03:40:00Z schulte2005 $ 031 * 032 */ 033 package org.jomc.util; 034 035 import java.util.ArrayList; 036 import java.util.List; 037 038 /** 039 * Section of text. 040 * 041 * @author <a href="mailto:cs@jomc.org">Christian Schulte</a> 042 * @version $Id: Section.java 891 2009-11-02 03:40:00Z schulte2005 $ 043 */ 044 public class Section 045 { 046 047 /** Constant for the mode during parsing the head content of a section. */ 048 static final int MODE_HEAD = 1; 049 050 /** Constant for the mode during parsing the tail content of a section. */ 051 static final int MODE_TAIL = 2; 052 053 /** The current parsing mode. */ 054 private int mode = MODE_HEAD; 055 056 /** The name of this section. */ 057 private String name; 058 059 /** The parsed head content of this section. */ 060 private StringBuilder headContent; 061 062 /** The parsed tail content of this section. */ 063 private StringBuilder tailContent; 064 065 /** Line marking the start of this section. */ 066 private String startingLine; 067 068 /** Line marking the end of this section. */ 069 private String endingLine; 070 071 /** The child sections of this section. */ 072 private List<Section> sections; 073 074 /** Creates a new {@code Section} instance. */ 075 public Section() 076 { 077 super(); 078 } 079 080 /** 081 * Gets the name of this section. 082 * 083 * @return The name of this section or {@code null}. 084 */ 085 public String getName() 086 { 087 return this.name; 088 } 089 090 /** 091 * Sets the name of this section. 092 * 093 * @param value The new name of this section or {@code null}. 094 */ 095 public void setName( final String value ) 096 { 097 this.name = value; 098 } 099 100 /** 101 * Gets the line marking the start of this section. 102 * 103 * @return The line marking the start of this section. 104 */ 105 public String getStartingLine() 106 { 107 return this.startingLine; 108 } 109 110 /** 111 * Sets the line marking the start of this section. 112 * 113 * @param value The new line marking the start of this section. 114 */ 115 public void setStartingLine( final String value ) 116 { 117 this.startingLine = value; 118 } 119 120 /** 121 * Gets the line marking the end of this section. 122 * 123 * @return The line marking the end of this section. 124 */ 125 public String getEndingLine() 126 { 127 return this.endingLine; 128 } 129 130 /** 131 * Sets the line marking the end of this section. 132 * 133 * @param value The new line marking the end of this section. 134 */ 135 public void setEndingLine( final String value ) 136 { 137 this.endingLine = value; 138 } 139 140 /** 141 * Gets the content of this section preceding any child section content. 142 * 143 * @return The content of this section preceding any child section content. 144 */ 145 public StringBuilder getHeadContent() 146 { 147 if ( this.headContent == null ) 148 { 149 this.headContent = new StringBuilder(); 150 } 151 152 return this.headContent; 153 } 154 155 /** 156 * Gets the content of this section succeeding any child section content. 157 * 158 * @return The content of this section succeeding any child section content. 159 */ 160 public StringBuilder getTailContent() 161 { 162 if ( this.tailContent == null ) 163 { 164 this.tailContent = new StringBuilder(); 165 } 166 167 return this.tailContent; 168 } 169 170 /** 171 * Gets the child sections of this section. 172 * 173 * @return A list of child sections of this section. 174 */ 175 public List<Section> getSections() 176 { 177 if ( this.sections == null ) 178 { 179 this.sections = new ArrayList<Section>(); 180 } 181 182 return this.sections; 183 } 184 185 /** 186 * Gets the parsing mode of the instance. 187 * 188 * @return The parsing mode of the instance. 189 * 190 * @see #MODE_HEAD 191 * @see #MODE_TAIL 192 */ 193 int getMode() 194 { 195 return this.mode; 196 } 197 198 /** 199 * Sets the parsing mode of the instance. 200 * 201 * @param value The new parsing mode of the instance. 202 * 203 * @see #MODE_HEAD 204 * @see #MODE_TAIL 205 */ 206 void setMode( final int value ) 207 { 208 this.mode = value; 209 } 210 211 }