/*
 * Copyright 2001-2004 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 samples.integrationGuide.example2;

import org.apache.axis.wsdl.toJava.Emitter;

public class MyEmitter extends Emitter {

    public static final int RUM  = 0;
    public static final int WORK = 1;

    private int song = -1;

    public MyEmitter() {
        MyGeneratorFactory factory = new MyGeneratorFactory();
        setFactory(factory);
        factory.setEmitter(this);
    } // ctor

    public int getSong() {
        return song;
    } // getSong

    public void setSong(int song) {
        this.song = song;
    } // setSong

} // class MyEmitter
