/**************************************************************
 * 
 * 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.
 * 
 *************************************************************/


package com.sun.star.report.util;

import com.sun.star.report.DataSourceFactory;
import com.sun.star.report.InputRepository;
import com.sun.star.report.JobDefinitionException;
import com.sun.star.report.JobProperties;
import com.sun.star.report.OutputRepository;
import com.sun.star.report.ParameterMap;
import com.sun.star.report.ReportEngineMetaData;
import com.sun.star.report.ReportEngineParameterNames;
import com.sun.star.report.ReportJobDefinition;

public class DefaultReportJobDefinition implements ReportJobDefinition
{

    public static final String OUTPUT_TYPE = "output-type";
    private final DefaultParameterMap parameters;
    private final DefaultJobProperties properties;

    public DefaultReportJobDefinition(final ReportEngineMetaData metaData)
    {
        this.parameters = new DefaultParameterMap();
        this.properties = new DefaultJobProperties(metaData);
    }

    public void setDataSourceFactory(final DataSourceFactory dataSourceFactory)
            throws JobDefinitionException
    {
        this.properties.setProperty(ReportEngineParameterNames.INPUT_DATASOURCE_FACTORY, dataSourceFactory);
    }

    public DataSourceFactory getDataSourceFactory()
    {
        return (DataSourceFactory) this.properties.getProperty(ReportEngineParameterNames.INPUT_DATASOURCE_FACTORY);
    }

    public InputRepository getInputRepository()
    {
        return (InputRepository) this.properties.getProperty(ReportEngineParameterNames.INPUT_REPOSITORY);
    }

    public void setInputRepository(final InputRepository inputRepository)
            throws JobDefinitionException
    {
        this.properties.setProperty(ReportEngineParameterNames.INPUT_REPOSITORY, inputRepository);
    }

    public OutputRepository getOutputRepository()
    {
        return (OutputRepository) this.properties.getProperty(ReportEngineParameterNames.OUTPUT_REPOSITORY);
    }

    public void setOutputRepository(final OutputRepository outputRepository)
            throws JobDefinitionException
    {
        this.properties.setProperty(ReportEngineParameterNames.OUTPUT_REPOSITORY, outputRepository);
    }

    /**
     * The parameters of the root report definition. The parameters for the subreports are
     * defined using mappings, it would not make sense to define them here.
     *
     * @return a map container for query parameters.
     */
    public ParameterMap getQueryParameters()
    {
        return parameters;
    }

    public void setReportDefinitionName(final String reportDefinitionName)
            throws JobDefinitionException
    {
        this.properties.setProperty(ReportEngineParameterNames.INPUT_NAME, reportDefinitionName);
    }

    /**
     * The name under which we can load the report definition.
     *
     * @return the report definition's name.
     */
    public String getReportDefinitionName()
    {
        return (String) this.properties.getProperty(ReportEngineParameterNames.INPUT_NAME);
    }

    public JobProperties getProcessingParameters()
    {
        return properties;
    }
}
