class AbstractElementModelProcessor
        extends AbstractProcessor implements IElementModelProcessor {

    private final String dialectPrefix;
    private final MatchingElementName matchingElementName;
    private final MatchingAttributeName matchingAttributeName;



    public AbstractElementModelProcessor(
            final TemplateMode templateMode, final String dialectPrefix,
            final String elementName, final boolean prefixElementName,
            final String attributeName, final boolean prefixAttributeName,
            final int precedence) {

        super(templateMode, precedence);

        this.dialectPrefix = dialectPrefix;

        this.matchingElementName =
                (elementName == null?
                    null :
                    MatchingElementName.forElementName(
                            templateMode, ElementNames.forName(templateMode, (prefixElementName? this.dialectPrefix : null), elementName)));
        this.matchingAttributeName =
                (attributeName == null?
                    null :
                    MatchingAttributeName.forAttributeName(
                            templateMode, AttributeNames.forName(templateMode, (prefixAttributeName? this.dialectPrefix : null), attributeName)));

    }

    protected final String getDialectPrefix() {
        return this.dialectPrefix;
    }

    public final MatchingElementName getMatchingElementName() {
        return this.matchingElementName;
    }


    public final MatchingAttributeName getMatchingAttributeName() {
        return this.matchingAttributeName;
    }



    public final void process(
            final ITemplateContext context,
            final IModel model, final IElementModelStructureHandler structureHandler) {<FILL_FUNCTION_BODY>}


    protected abstract void doProcess(
            final ITemplateContext context,
            final IModel model,
            final IElementModelStructureHandler structureHandler);

}


        ITemplateEvent firstEvent = null;
        try {

            firstEvent = model.get(0);

            doProcess(context, model, structureHandler);

        } catch (final TemplateProcessingException e) {

            // We will try to add all information possible to the exception report (template name, line, col)

            if (firstEvent != null) {

                String modelTemplateName = firstEvent.getTemplateName();
                int modelLine = firstEvent.getLine();
                int modelCol = firstEvent.getCol();

                if (modelTemplateName != null) {
                    if (!e.hasTemplateName()) {
                        e.setTemplateName(modelTemplateName);
                    }
                }
                if (modelLine != -1 && modelCol != -1) {
                    if (!e.hasLineAndCol()) {
                        e.setLineAndCol(modelLine, modelCol);
                    }
                }

            }

            throw e;

        } catch (final Exception e) {

            // We will try to add all information possible to the exception report (template name, line, col)

            String modelTemplateName = null;
            int modelLine = -1;
            int modelCol = -1;

            if (firstEvent != null) {

                modelTemplateName = firstEvent.getTemplateName();
                modelLine = firstEvent.getLine();
                modelCol = firstEvent.getCol();
            }

            throw new TemplateProcessingException(
                    "Error during execution of processor '" + this.getClass().getName() + "'", modelTemplateName, modelLine, modelCol, e);

        }

    
<methods>public void <init>(org.thymeleaf.templatemode.TemplateMode, int) ,public final int getPrecedence() ,public final org.thymeleaf.templatemode.TemplateMode getTemplateMode() <variables>private final non-sealed int precedence,private final non-sealed org.thymeleaf.templatemode.TemplateMode templateMode