/*
 * Copyright 2004,2005 The Apache Software Foundation.
 *
 * Licensed 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 org.apache.axis2.tool.service.bean;

public class WSDLFileLocationBean {

    private String WSDLFileName;
    private boolean manual;
    private boolean skip;
    
    
    
    /**
     * @return Returns the skip.
     */
    public boolean isSkip() {
        return skip;
    }
    /**
     * @param skip The skip to set.
     */
    public void setSkip(boolean skip) {
        this.skip = skip;
    }
    /**
     * @return Returns the manual.
     */
    public boolean isManual() {
        return manual;
    }
    /**
     * @param manual The manual to set.
     */
    public void setManual(boolean manual) {
        this.manual = manual;
    }
    /**
     * @return Returns the wSDLFileName.
     */
    public String getWSDLFileName() {
        return WSDLFileName;
    }
    /**
     * @param fileName The wSDLFileName to set.
     */
    public void setWSDLFileName(String fileName) {
        WSDLFileName = fileName;
    }
}
