##### General Information

- Overview
- Features
- Specification
- Getting Started
- Howto Build Turbine
- Changes

##### Documentation

- Services
- Howtos
- Wiki
- JavaDocs

##### Development

- Proposals
- How To Help
- Todo

##### Project Documentation

- Project Information
- Project Reports
  - Changes Report
  - FindBugs Report
  - JavaDocs
  - Test JavaDocs
  - Source Xref
  - Test Source Xref
  - PMD Report
  - CPD Report
  - Surefire Report
  - Cobertura Test Coverage
  - JDepend
  - RAT Report
  - Tag List

##### Apache

- Apache Website
- License
- How the ASF works
- Sponsorship
- Thanks
- Security

## CPD Results

The following document contains the results of PMD's CPD 4.2.5.

## Duplications

File | Line
--- | ---
org/apache/turbine/modules/actions/sessionvalidator/TemplateSecureSessionValidator.java | 151
org/apache/turbine/modules/actions/sessionvalidator/TemplateSessionValidator.java | 109
            else if (data.getParameters().containsKey("_session_access_counter")
                    && !security.isAnonymousUser(data.getUser()))
            {
                // See comments in screens.error.InvalidState.
                if (data.getParameters().getInt("_session_access_counter")
                        < (((Integer) data.getUser().getTemp(
                        "_session_access_counter")).intValue() - 1))
                {
                    if (data.getTemplateInfo().getScreenTemplate() != null)
                    {
                        data.getUser().setTemp("prev_template",
                                data.getTemplateInfo().getScreenTemplate()
                                .replace('/', ','));
                        data.getTemplateInfo().setScreenTemplate(conf.getString(
                                TurbineConstants.TEMPLATE_INVALID_STATE));
                    }
                    else
                    {
                        data.getUser().setTemp("prev_screen",
                                               data.getScreen().replace('/', ','));
                        data.setScreen(conf.getString(
                                TurbineConstants.SCREEN_INVALID_STATE));
                    }
                    data.getUser().setTemp("prev_parameters", data.getParameters());
                    data.setAction("");
                }
            }

            // we do not want to allow both a screen and template parameter.
            // The template parameter is dominant.
            if (data.getTemplateInfo().getScreenTemplate() != null)
            {
                data.setScreen(null);
            }

            // Comply with Turbine 4.0 standards
            pipelineData.get(Turbine.class).put(User.class, data.getUser());
        }
    }