de.interseroh.report.domain.ParameterForm.java Source code

Java tutorial

Introduction

Here is the source code for de.interseroh.report.domain.ParameterForm.java

Source

/*
 * 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.
 *
 * (c) 2015 - Interseroh and Crowdcode
 */
package de.interseroh.report.domain;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.Map;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.util.MultiValueMap;

import de.interseroh.report.domain.visitors.ParameterToMapVisitor;
import de.interseroh.report.domain.visitors.ParameterVisitor;
import de.interseroh.report.domain.visitors.ReportParamsBuilder;

/**
 * @author Ingo Dppe (Crowdcode)
 */
public class ParameterForm {

    private static final Logger logger = LoggerFactory.getLogger(ParameterForm.class);

    private String reportName;
    private Collection<ParameterGroup> groups;
    private Map<String, Parameter> parameterMap;
    private MultiValueMap<String, String> requestParameters;
    private boolean overwrite = true;
    private Long pageNumber;

    public void accept(ParameterVisitor visitor) {
        for (ParameterGroup group : groups) {
            group.accept(visitor);
        }
    }

    /**
     * Checks whether or not all parameters has either a value or a default
     * value.
     *
     * @return false if not all required parameters has a valid value
     */
    public boolean isValid() {
        boolean valid = true;

        for (ParameterGroup parameter : groups) {
            valid &= parameter.isValid();
        }

        return valid;
    }

    /**
     * Builds a map for all scalar parameter based on parameter name and value.
     * Not multi-value and adhoc scalar parameter will be transformed to an
     * array of values. For instance, <code>name={value1, value2}</code>
     *
     * @return
     */
    public Map<String, Object> asReportParameters() {
        return new ReportParamsBuilder().build(groups);

    }

    /**
     * Returns a map of all cascading group and scalar parameters of the
     * ParameterForm. The map do not contain synthetic and simple groups.
     *
     * @return Map<String, Parameter>
     */
    public Map<String, Parameter> getParams() {
        if (parameterMap == null) {
            parameterMap = new ParameterToMapVisitor(groups).build();
        }
        return Collections.synchronizedMap(parameterMap);
    }

    public Long getPageNumber() {
        return pageNumber;
    }

    public void setPageNumber(Long pageNumber) {
        this.pageNumber = pageNumber;
    }

    public boolean isPageSelected() {
        return pageNumber != null;
    }

    public void setParams(Map<String, ScalarParameter> params) {
        logger.info("Got:{}", params);
        // nothing to do read only
    }

    public MultiValueMap<String, String> getRequestParameters() {
        return requestParameters;
    }

    public void setRequestParameters(MultiValueMap<String, String> requestParameters) {
        this.requestParameters = requestParameters;
    }

    public ParameterForm withRequestParameters(MultiValueMap<String, String> requestParameters) {
        this.requestParameters = requestParameters;
        return this;
    }

    /**
     * This will clear the cached map between parameter names and objects. The
     * map will be rebuild lazy on the next request
     *
     * @see ParameterForm#getParams()
     * @return same instance of ParameterForm
     */
    public ParameterForm resetParams() {
        parameterMap = null;
        return this;
    }

    public ParameterForm withReportName(final String reportName) {
        this.reportName = reportName;
        return this;
    }

    public ParameterForm withParameterGroups(List<ParameterGroup> groups) {
        this.groups = groups;
        return this;
    }

    public ParameterForm addParameterGroup(ParameterGroup group) {
        getGroups().add(group);
        return this;
    }

    public boolean hasNoParameters() {
        return groups.size() == 0;
    }

    public String getReportName() {
        return reportName;
    }

    public void setReportName(String reportName) {
        this.reportName = reportName;
    }

    public Collection<ParameterGroup> getGroups() {
        if (groups == null) {
            groups = new ArrayList<>();
        }
        return groups;
    }

    public void setGroups(Collection<ParameterGroup> groups) {
        this.groups = groups;
    }

    public boolean isOverwrite() {
        return overwrite;
    }

    public void setOverwrite(boolean overwrite) {
        this.overwrite = overwrite;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o)
            return true;
        if (o == null || getClass() != o.getClass())
            return false;

        ParameterForm that = (ParameterForm) o;

        return !(reportName != null ? !reportName.equals(that.reportName) : that.reportName != null);
    }

    @Override
    public int hashCode() {
        return reportName != null ? reportName.hashCode() : 0;
    }

    @Override
    public String toString() {
        return "ParameterForm{" + "groups=" + groups + '}';
    }
}