blob: 01ddaef84fc3136824d2ad062ff6dccf7e1f0fc4 [file] [log] [blame]
package org.apache.maven.doxia.sink.impl;
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
import java.util.LinkedList;
import java.util.List;
import java.util.Stack;
import org.apache.maven.doxia.sink.SinkEventAttributes;
import org.apache.maven.doxia.sink.impl.AbstractSink;
/**
* This sink is used for testing purposes in order to check wether
* the input of some parser is well-formed.
*
* @author <a href="mailto:lars@trieloff.net">Lars Trieloff</a>
* @version $Id$
*/
public class WellformednessCheckingSink
extends AbstractSink
{
private final Stack<String> elements = new Stack<String>();
private final List<String> errors = new LinkedList<String>();
@Override
public void head()
{
startElement( "head" );
}
@Override
public void head_()
{
checkWellformedness( "head" );
}
@Override
public void body()
{
startElement( "body" );
}
@Override
public void body_()
{
checkWellformedness( "body" );
}
@Override
public void article()
{
startElement( "article" );
}
@Override
public void article_()
{
checkWellformedness( "article" );
}
@Override
public void navigation()
{
startElement( "navigation" );
}
@Override
public void navigation_()
{
checkWellformedness( "navigation" );
}
@Override
public void sidebar()
{
startElement( "sidebar" );
}
@Override
public void sidebar_()
{
checkWellformedness( "sidebar" );
}
@Override
public void section1()
{
startElement( "section1" );
}
@Override
public void section1_()
{
checkWellformedness( "section1" );
}
@Override
public void section2()
{
startElement( "section2" );
}
@Override
public void section2_()
{
checkWellformedness( "section2" );
}
@Override
public void section3()
{
startElement( "section3" );
}
@Override
public void section3_()
{
checkWellformedness( "section3" );
}
@Override
public void section4()
{
startElement( "section4" );
}
@Override
public void section4_()
{
checkWellformedness( "section4" );
}
@Override
public void section5()
{
startElement( "section5" );
}
@Override
public void section5_()
{
checkWellformedness( "section5" );
}
@Override
public void section6()
{
startElement( "section6" );
}
@Override
public void section6_()
{
checkWellformedness( "section6" );
}
@Override
public void header()
{
startElement( "header" );
}
@Override
public void header_()
{
checkWellformedness( "header" );
}
@Override
public void content()
{
startElement( "content" );
}
@Override
public void content_()
{
checkWellformedness( "content" );
}
@Override
public void footer()
{
startElement( "footer" );
}
@Override
public void footer_()
{
checkWellformedness( "footer" );
}
@Override
public void list()
{
startElement( "list" );
}
@Override
public void list_()
{
checkWellformedness( "list" );
}
@Override
public void listItem()
{
startElement( "listItem" );
}
@Override
public void listItem_()
{
checkWellformedness( "listItem" );
}
@Override
public void numberedList( int numbering )
{
startElement( "numberedList" );
}
@Override
public void numberedList_()
{
checkWellformedness( "numberedList" );
}
@Override
public void numberedListItem()
{
startElement( "numberedListItem" );
}
@Override
public void numberedListItem_()
{
checkWellformedness( "numberedListItem" );
}
@Override
public void definitionList()
{
startElement( "definitionList" );
}
@Override
public void definitionList_()
{
checkWellformedness( "definitionList" );
}
@Override
public void definitionListItem()
{
startElement( "definitionListItem" );
}
@Override
public void definitionListItem_()
{
checkWellformedness( "definitionListItem" );
}
@Override
public void definition()
{
startElement( "definition" );
}
@Override
public void definition_()
{
checkWellformedness( "definition" );
}
@Override
public void figure()
{
startElement( "figure" );
}
@Override
public void figure_()
{
checkWellformedness( "figure" );
}
@Override
public void table()
{
startElement( "table" );
}
@Override
public void table_()
{
checkWellformedness( "table" );
}
@Override
public void tableRows( int[] justification, boolean grid )
{
startElement( "tableRows" );
}
@Override
public void tableRows_()
{
checkWellformedness( "tableRows" );
}
@Override
public void tableRow()
{
startElement( "tableRow" );
}
@Override
public void tableRow_()
{
checkWellformedness( "tableRow" );
}
@Override
public void title()
{
startElement( "title" );
}
@Override
public void title_()
{
checkWellformedness( "title" );
}
@Override
public void author()
{
startElement( "author" );
}
@Override
public void author_()
{
checkWellformedness( "author" );
}
@Override
public void date()
{
startElement( "date" );
}
@Override
public void date_()
{
checkWellformedness( "date" );
}
@Override
public void sectionTitle()
{
startElement( "sectionTitle" );
}
@Override
public void sectionTitle_()
{
checkWellformedness( "sectionTitle" );
}
@Override
public void sectionTitle1()
{
startElement( "sectionTitle1" );
}
@Override
public void sectionTitle1_()
{
checkWellformedness( "sectionTitle1" );
}
@Override
public void sectionTitle2()
{
startElement( "sectionTitle2" );
}
@Override
public void sectionTitle2_()
{
checkWellformedness( "sectionTitle2" );
}
@Override
public void sectionTitle3()
{
startElement( "sectionTitle3" );
}
@Override
public void sectionTitle3_()
{
checkWellformedness( "sectionTitle3" );
}
@Override
public void sectionTitle4()
{
startElement( "sectionTitle4" );
}
@Override
public void sectionTitle4_()
{
checkWellformedness( "sectionTitle4" );
}
@Override
public void sectionTitle5()
{
startElement( "sectionTitle5" );
}
@Override
public void sectionTitle5_()
{
checkWellformedness( "sectionTitle5" );
}
@Override
public void sectionTitle6()
{
startElement( "sectionTitle6" );
}
@Override
public void sectionTitle6_()
{
checkWellformedness( "sectionTitle6" );
}
@Override
public void paragraph()
{
startElement( "paragraph" );
}
@Override
public void paragraph_()
{
checkWellformedness( "paragraph" );
}
@Override
public void data( String value )
{
startElement( "data" );
}
@Override
public void data_()
{
checkWellformedness( "data" );
}
@Override
public void time( String datetime )
{
startElement( "time" );
}
@Override
public void time_()
{
checkWellformedness( "time" );
}
@Override
public void address()
{
startElement( "address" );
}
@Override
public void address_()
{
checkWellformedness( "address" );
}
@Override
public void blockquote()
{
startElement( "blockquote" );
}
@Override
public void blockquote_()
{
checkWellformedness( "blockquote" );
}
@Override
public void division()
{
startElement( "division" );
}
@Override
public void division_()
{
checkWellformedness( "division" );
}
@Override
public void verbatim( boolean boxed )
{
startElement( "verbatim" );
}
@Override
public void verbatim_()
{
checkWellformedness( "verbatim" );
}
@Override
public void definedTerm()
{
startElement( "definedTerm" );
}
@Override
public void definedTerm_()
{
checkWellformedness( "definedTerm" );
}
@Override
public void figureCaption()
{
startElement( "figureCaption" );
}
@Override
public void figureCaption_()
{
checkWellformedness( "figureCaption" );
}
@Override
public void tableCell()
{
startElement( "tableCell" );
}
@Override
public void tableCell( String width )
{
startElement( "tableCell" );
}
@Override
public void tableCell_()
{
checkWellformedness( "tableCell" );
}
@Override
public void tableHeaderCell()
{
startElement( "tableHeaderCell" );
}
@Override
public void tableHeaderCell( String width )
{
startElement( "tableHeaderCell" );
}
@Override
public void tableHeaderCell_()
{
checkWellformedness( "tableHeaderCell" );
}
@Override
public void tableCaption()
{
startElement( "tableCaption" );
}
@Override
public void tableCaption_()
{
checkWellformedness( "tableCaption" );
}
@Override
public void figureGraphics( String name )
{
// nop
}
@Override
public void horizontalRule()
{
// nop
}
@Override
public void pageBreak()
{
// nop
}
@Override
public void anchor( String name )
{
startElement( "anchor" );
}
@Override
public void anchor_()
{
checkWellformedness( "anchor" );
}
@Override
public void link( String name )
{
startElement( "link" );
}
@Override
public void link_()
{
checkWellformedness( "link" );
}
@Override
public void inline()
{
startElement( "inline" );
}
@Override
public void inline_()
{
checkWellformedness( "inline" );
}
@Override
public void italic()
{
startElement( "italic" );
}
@Override
public void italic_()
{
checkWellformedness( "italic" );
}
@Override
public void bold()
{
startElement( "bold" );
}
@Override
public void bold_()
{
checkWellformedness( "bold" );
}
@Override
public void monospaced()
{
startElement( "monospaced" );
}
@Override
public void monospaced_()
{
checkWellformedness( "monospaced" );
}
@Override
public void lineBreak()
{
// nop
}
@Override
public void lineBreakOpportunity()
{
// nop
}
@Override
public void nonBreakingSpace()
{
// nop
}
@Override
public void text( String text )
{
// nop
}
@Override
public void rawText( String text )
{
// nop
}
@Override
public void comment( String comment )
{
// nop
}
@Override
public void flush()
{
// nop
}
@Override
public void close()
{
this.elements.clear();
this.errors.clear();
}
/**
* Finds out wether the wellformedness-contraints of the model have been
* violated.
*
* @return false for non-wellformed models
*/
public boolean isWellformed()
{
return errors.isEmpty();
}
/**
* Gets the offending element that breaks the wellformedness as well
* as the exepected element.
*
* @return the expected and acual elements
*/
public String getOffender()
{
if ( isWellformed() )
{
return null;
}
return errors.get( errors.size() - 1 );
}
/**
* Gets the list of errors found during wellformedness-check
*
* @return a list of String of error messages
*/
public List<String> getOffenders()
{
return errors;
}
/**
* Checks wether a newly encountered end-tag breaks the wellformedness
* of the model.
*
* @param actual the local-name of the encountered element
*/
private void checkWellformedness( String actual )
{
String expected = elements.pop();
if ( !expected.equals( actual ) )
{
errors.add( "Encountered closing: " + actual + ", expected " + expected );
}
}
/**
* Starts a new element and puts it on the stack in order to calculate
* wellformedness of the model at a later point of time.
*
* @param string the local-name of the start-tag
*/
private void startElement( String string )
{
elements.push( string );
}
@Override
public void head( SinkEventAttributes attributes )
{
head();
}
@Override
public void title( SinkEventAttributes attributes )
{
title();
}
@Override
public void author( SinkEventAttributes attributes )
{
author();
}
@Override
public void date( SinkEventAttributes attributes )
{
date();
}
@Override
public void body( SinkEventAttributes attributes )
{
body();
}
@Override
public void article( SinkEventAttributes attributes )
{
article();
}
@Override
public void navigation( SinkEventAttributes attributes )
{
navigation();
}
@Override
public void sidebar( SinkEventAttributes attributes )
{
sidebar();
}
@Override
public void section( int level, SinkEventAttributes attributes )
{
startElement( "section" + level );
}
@Override
public void section_( int level )
{
checkWellformedness( "section" + level );
}
@Override
public void sectionTitle( int level, SinkEventAttributes attributes )
{
startElement( "sectionTitle" + level );
}
@Override
public void sectionTitle_( int level )
{
checkWellformedness( "sectionTitle" + level );
}
@Override
public void header( SinkEventAttributes attributes )
{
header();
}
@Override
public void content( SinkEventAttributes attributes )
{
content();
}
@Override
public void footer( SinkEventAttributes attributes )
{
footer();
}
@Override
public void list( SinkEventAttributes attributes )
{
list();
}
@Override
public void listItem( SinkEventAttributes attributes )
{
listItem();
}
@Override
public void numberedList( int numbering, SinkEventAttributes attributes )
{
numberedList( numbering );
}
@Override
public void numberedListItem( SinkEventAttributes attributes )
{
numberedListItem();
}
@Override
public void definitionList( SinkEventAttributes attributes )
{
definitionList();
}
@Override
public void definitionListItem( SinkEventAttributes attributes )
{
definitionListItem();
}
@Override
public void definition( SinkEventAttributes attributes )
{
definition();
}
@Override
public void definedTerm( SinkEventAttributes attributes )
{
definedTerm();
}
@Override
public void figure( SinkEventAttributes attributes )
{
figure();
}
@Override
public void figureCaption( SinkEventAttributes attributes )
{
figureCaption();
}
@Override
public void figureGraphics( String src, SinkEventAttributes attributes )
{
figureGraphics( src );
}
@Override
public void table( SinkEventAttributes attributes )
{
table();
}
@Override
public void tableRow( SinkEventAttributes attributes )
{
tableRow();
}
@Override
public void tableCell( SinkEventAttributes attributes )
{
tableCell();
}
@Override
public void tableHeaderCell( SinkEventAttributes attributes )
{
tableHeaderCell();
}
@Override
public void tableCaption( SinkEventAttributes attributes )
{
tableCaption();
}
@Override
public void paragraph( SinkEventAttributes attributes )
{
paragraph();
}
@Override
public void data( String value, SinkEventAttributes attributes )
{
data( value );
}
@Override
public void time( String datetime, SinkEventAttributes attributes )
{
time( datetime );
}
@Override
public void address( SinkEventAttributes attributes )
{
address();
}
@Override
public void blockquote( SinkEventAttributes attributes )
{
blockquote();
}
@Override
public void division( SinkEventAttributes attributes )
{
division();
}
@Override
public void verbatim( SinkEventAttributes attributes )
{
verbatim( false );
}
@Override
public void horizontalRule( SinkEventAttributes attributes )
{
horizontalRule();
}
@Override
public void anchor( String name, SinkEventAttributes attributes )
{
anchor( name );
}
@Override
public void link( String name, SinkEventAttributes attributes )
{
link( name );
}
@Override
public void inline( SinkEventAttributes attributes )
{
inline();
}
@Override
public void lineBreak( SinkEventAttributes attributes )
{
lineBreak();
}
@Override
public void lineBreakOpportunity( SinkEventAttributes attributes )
{
lineBreakOpportunity();
}
@Override
public void text( String text, SinkEventAttributes attributes )
{
text( text );
}
@Override
public void unknown( String name, Object[] requiredParams, SinkEventAttributes attributes )
{
// ignore
}
}