BookWrapper という名前で CobolBookReader プロジェクトに COBOL JVM クラスを作成します。その内容を次のコードに置き換えます。
$set sourceformat"variable" $set ilnamespace"com.microfocus.book" $set ilusing"java.util" $set ilusing"java.io" class-id Book. working-storage section. copy "book-error-codes.cpy". copy "book-rec-jvm.cpy" replacing == (prefix) == by == book ==. 01 filenameSet condition-value static value false. 78 filenamePropFile value "filename.properties". 78 filenameProp value "filename". 78 defaultFilename value "C:\bookfile.dat". 01 bookFunction pic x static. 78 readRecord value "1". 78 addRecord value "2". 78 deleteRecord value "3". 78 nextRecord value "4". 78 allRecords value "5". *>> <summary> *>> When the method is called, it reads book details *>> from a file by a given "stock number". *>> </summary> method-id Read static. local-storage section. 01 file-status pic xx. procedure division using by value stockno-in as string returning myBook as type Book. set myBook to new Book() set myBook::StockNumber to stockno-in invoke self::SetupFilename(myBook::getClass()::getClassLoader()) call "BookLegacy" using by value readRecord by value myBook::BookDetails by reference file-status invoke self::RaiseExceptionIfError(file-status) end method. *>> <summary> *>> This method records information about a book into the data file *>> </summary> *>> <param name="stockno-in">The stock number of the book</param> *>> <param name="title-in">The title of the book</param> *>> <param name="author-in">The author of the book</param> *>> <param name="type-in">The type of the book</param> *>> <param name="price-in">The price of the book</param> *>> <param name="onhand-in">The number of the books in stock</param> *>> <param name="sold-in">The number of books sold</param> *>> <returns></returns> method-id Add static. local-storage section. 01 file-status pic xx. procedure division using by value stockno-in as string by value title-in as string by value author-in as string by value type-in as string by value price-in as decimal by value onhand-in as binary-long by value sold-in as binary-long returning myBook as type Book. set myBook to new Book() set myBook::StockNumber to stockno-in set myBook::Title to title-in set myBook::Author to author-in set myBook::Type to type-in set myBook::RetailPrice to price-in set myBook::NumberOnHand to onhand-in set myBook::NumberSold to sold-in invoke self::SetupFilename(myBook::getClass()::getClassLoader()) call "BookLegacy" using by value addRecord by value myBook::BookDetails by reference file-status invoke self::RaiseExceptionIfError(file-status) end method. method-id Add static. local-storage section. procedure division using by value inBook as type Book returning outBook as type Book. set outBook to type Book::Add( inBook::StockNumber inBook::Title inBook::Author inBook::Type inBook::RetailPrice inBook::NumberOnHand inBook::NumberSold ) end method. *>> <summary> *>> Reads details about the next book following the given stock number *>> </summary> *>> <param name="stockno">The stock number of the last book</param> *>> <returns>Details about the next book</returns> method-id Next static. local-storage section. 01 file-status pic xx. procedure division using by value stockno as string returning myBook as type Book. set myBook to new Book() set myBook::StockNumber to stockno invoke self::SetupFilename(myBook::getClass()::getClassLoader()) call "BookLegacy" using by value nextRecord by value myBook::BookDetails by reference file-status invoke self::RaiseExceptionIfError(file-status) end method. *>> <summary> *>> Deletes a book from the data file given the book stock number *>> </summary> *>> <param name="stockno">The stock number of the book to delete</param> *>> <returns>The book that was deleted from the data file</returns> method-id Delete static. local-storage section. 01 file-status pic xx. procedure division using by value stockno as string returning myBook as type Book. set myBook to new Book() set myBook::StockNumber to stockno invoke self::SetupFilename(myBook::getClass()::getClassLoader()) call "BookLegacy" using by value deleteRecord by value myBook::BookDetails by reference file-status invoke self::RaiseExceptionIfError(file-status) end method. *>> <summary> *>> Raises a specific exception given a file status *>> </summary> *>> <param name="file-status">The file status that determines the exception to raise</param> method-id RaiseExceptionIfError static. linkage section. 01 file-status pic xx. procedure division using file-status. if file-status <> "00" and file-status <> "02" evaluate file-status when "35" raise new BookException(DataFileNotFound) when "23" raise new BookException(StockItemNotFound) when "46" raise new BookException(NoMoreItemsLeft) when "99" raise new BookException(ItemAlreadyExists) when other raise new BookException(FileError) end-evaluate end-if end method. method-id SetupFilename static. 01 filename pic x(256). procedure division using by value cl as type ClassLoader. if not filenameSet set filename to self::ReadFilename(cl) call "SET_FILENAME" using filename set filenameSet to true end-if end method. method-id ReadFilename static. 01 props type Properties. 01 inputStream type InputStream. procedure division using by value cl as type ClassLoader returning ret as string. set props to new Properties() set inputStream to cl::getResourceAsStream(filenamePropFile) invoke props::load(inputStream) invoke inputStream::close() set ret to props::getProperty(filenameProp defaultFilename) end method. *>> <summary> *>> Returns a pointer to the book details *>> </summary> *>> <returns>Pointer to the book details</returns> method-id get property BookDetails. procedure division returning bookDetailsAddress as pointer. set bookDetailsAddress to address of book-details end method. *>> <summary> *>> Returns the computed stock value of the book. *>> </summary> *>> <returns>The computed stock value of the book</returns> method-id get property StockValue. procedure division returning stockvalue as float-short. compute stockvalue = book-retail * book-onhand end method. end class.
これは、ブックを表すマネージ COBOL クラスであり、ファイル・システムへのアクセスとブック情報の内部管理を行うための静的メソッドを提供します。