
module org
{
    module jacorb
    {
        module demo {
            module notification {
                module office {

                    enum Status { CANCELLED, PRINTED, ONLINE, OFFLINE, JAMMED, OUT_OF_PAPER };
                    typedef long JobID;
                    typedef string UserID;

                    struct Job {
                        JobID job_id;
                        UserID user_id;
                    };

                    union PrinterStatus switch( Status )
                    {
                        case CANCELLED:
                        case PRINTED: Job the_job;
                        case OFFLINE:
                        case ONLINE: boolean dummy;
                    };

                    interface Printer
                    {
                        typedef string Document;

                        exception OffLine {};
                        exception AlreadyPrinted {};
                        exception UnknownJobID {};

                        JobID print(in Document text, in UserID uid)
                            raises (OffLine);

                        void cancel(in JobID id, in UserID uid)
                            raises (AlreadyPrinted, UnknownJobID);

                        void setOffLine(in boolean flag);
                    };


                };
            };
        };
    };
};
