package com.microfocus.book;
import com.microfocus.cobol.program.ScaledInteger;
public class BookBean
{
private final String _stockno;
private final String _isbn;
private final String _title;
private final String _author;
private final String _type;
private final String _price;
private final String _onhand;
private final String _sold;
private final String _stockval;
BookBean(String stockno, String isbn, String title, String author,
String type, String price, String onhand, String sold, String stockval)
{
this._stockno = stockno;
this._isbn = isbn;
this._title = title;
this._author = author;
this._type = type;
this._price = price;
this._onhand = onhand;
this._sold = sold;
this._stockval = stockval;
}
public String getStockno()
{
return _stockno;
}
public String getIsbn()
{
return _isbn;
}
public String getTitle()
{
return _title;
}
public String getAuthor()
{
return _author;
}
public String getType()
{
return _type;
}
public String getPrice()
{
return _price;
}
public String getOnhand()
{
return _onhand;
}
public String getSold()
{
return _sold;
}
public String getStockval()
{
return _stockval;
}
public void toDetails(Details details)
{
details.setStockno(_stockno);
details.setIsbn(Long.parseLong(_isbn));
details.setTitle(_title);
details.setAuthor(_author);
details.setType(_type);
details.setRetail(ScaledInteger.parseScaledInteger(_price));
int onHandInt = Integer.parseInt(_onhand);
if(onHandInt < 0)
throw new RuntimeException("The number of books on hand must be 0 or positive");
details.setOnhand(onHandInt);
int soldInt = Integer.parseInt(_sold);
if(soldInt < 0)
throw new RuntimeException("The number of books sold must be 0 or positive");
details.setSold(soldInt);
}
public static BookBean fromDetails(Details details)
{
String stockno = details.getStockno().trim();
String isbn = "" + details.getIsbn();
String title = details.getTitle().trim();
String author = details.getAuthor().trim();
String type = details.getType().trim();
String price = details.getRetail().toString();
String onhand = "" + details.getOnhand();
String sold = "" + details.getSold();
ScaledInteger stockvalInt = details.getRetail().multiply(new ScaledInteger(details.getOnhand(), 0));
String stockval = stockvalInt.toString();
return new BookBean(stockno, isbn, title, author, type, price, onhand, sold, stockval);
}
public static BookBean blankBook()
{
return msgBook("*************************************");
}
public static BookBean msgBook(String msg)
{
String stockno = "****";
String isbn = "*************";
String title = msg;
String author = "*************************************";
String type = "****";
String price = "****";
String onhand = "****";
String sold = "****";
String stockval = "****";
return new BookBean(stockno, isbn, title, author, type, price, onhand, sold, stockval);
}
}
package com.microfocus.book;
import javax.servlet.http.HttpSession;
import com.microfocus.cobol.program.IObjectControl;
import com.microfocus.cobol.runtimeservices.IRunUnit;
import com.microfocus.cobol.runtimeservices.servlet.ServletRunUnitManager;
public class BookInterface
{
public static final String READ_RECORD = "1";
public static final String ADD_RECORD = "2";
public static final String DELETE_RECORD = "3";
public static final String NEXT_RECORD = "4";
public final IRunUnit runUnit;
public final BookLegacy bookLegacy;
public BookInterface(HttpSession session)
{
this(ServletRunUnitManager.getManager().GetSessionRunUnit(session));
}
public BookInterface(IRunUnit runUnit)
{
this.runUnit = runUnit;
BookLegacy bookLegacy = (BookLegacy) runUnit.GetInstance(BookLegacy.class);
if(bookLegacy == null)
{
bookLegacy = new BookLegacy();
runUnit.Add(bookLegacy);
}
this.bookLegacy = bookLegacy;
}
public BookBean readBook(String stockNo) throws JavaBookException
{
Details details = getObject(Details.class);
Sqlstate status = getObject(Sqlstate.class);
Sqlmessage message = getObject(Sqlmessage.class);
details.setStockno(stockNo);
bookLegacy.BookLegacy(READ_RECORD, details, status, message);
throwExceptionIfError(status, message);
return BookBean.fromDetails(details);
}
public BookBean addBook(BookBean book) throws JavaBookException
{
Details details = getObject(Details.class);
Sqlstate status = getObject(Sqlstate.class);
Sqlmessage message = getObject(Sqlmessage.class);
book.toDetails(details);
bookLegacy.BookLegacy(ADD_RECORD, details, status, message);
throwExceptionIfError(status, message);
return BookBean.fromDetails(details);
}
public BookBean deleteBook(String stockNo) throws JavaBookException
{
Details details = getObject(Details.class);
Sqlstate status = getObject(Sqlstate.class);
Sqlmessage message = getObject(Sqlmessage.class);
details.setStockno(stockNo);
bookLegacy.BookLegacy(DELETE_RECORD, details, status, message);
throwExceptionIfError(status, message);
return BookBean.fromDetails(details);
}
public BookBean nextBook(String stockNo) throws JavaBookException
{
Details details = getObject(Details.class);
Sqlstate status = getObject(Sqlstate.class);
Sqlmessage message = getObject(Sqlmessage.class);
details.setStockno(stockNo);
bookLegacy.BookLegacy(NEXT_RECORD, details, status, message);
throwExceptionIfError(status, message);
return BookBean.fromDetails(details);
}
private static void throwExceptionIfError(Sqlstate status, Sqlmessage message) throws JavaBookException
{
String sqlstate = status.getSqlstate();
if(!"00000".equals(sqlstate) && !"02000".equals(sqlstate) && !"21000".equals(sqlstate))
{
throw new JavaBookException(status.getSqlstate() + message.getSqlmessage());
}
}
private <T extends IObjectControl> T getObject(Class<T> cls)
{
try
{
T output = cls.newInstance();
runUnit.Add(output);
return output;
}
catch (Throwable t)
{
throw new RuntimeException(t);
}
}
}
package com.microfocus.book;
import java.io.PrintWriter;
import java.io.StringWriter;
import javax.servlet.RequestDispatcher;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import com.microfocus.cobol.runtimeservices.IRunUnit;
import com.microfocus.cobol.runtimeservices.servlet.ServletRunUnitManager;
public class BookServlet extends HttpServlet
{
private static final long serialVersionUID = -3563065100184185678L;
public static final String STOCK_NO_ATTRIBUTE = "stockno";
public static final String TITLE_ATTRIBUTE = "title";
public static final String AUTHOR_ATTRIBUTE = "author";
public static final String TYPE_ATTRIBUTE = "type";
public static final String ISBN_ATTRIBUTE = "isbn";
public static final String PRICE_ATTRIBUTE = "price";
public static final String ONHAND_ATTRIBUTE = "onhand";
public static final String SOLD_ATTRIBUTE = "sold";
public static final String STATUS_ATTRIBUTE = "status";
public static final String RUN_UNIT_ID_ATTRIBUTE = "rununitid";
public static final String SUBMIT_PARAMETER = "submit";
public static final String READ_PARAMETER = "Read";
public static final String ADD_PARAMETER = "Add";
public static final String DELETE_PARAMETER = "Delete";
public static final String NEXT_PARAMETER = "Next";
public static final String END_PARAMETER = "End Session";
public static final String ERROR_VALUE = "ERROR";
public static final String DEFAULT_VALUE = "DEFAULT";
public static final String VIEW_URL = "/BookJsp.jsp";
protected void doProcessing(HttpServletRequest req, HttpServletResponse res, boolean isGet)
{
String subValue = req.getParameter(SUBMIT_PARAMETER);
if(subValue == null)
{
subValue = DEFAULT_VALUE;
}
setRunUnitId(req);
if(subValue.equals(READ_PARAMETER))
{
performRead(req, res);
}
else if(subValue.equals(ADD_PARAMETER))
{
performAdd(req, res);
}
else if(subValue.equals(DELETE_PARAMETER))
{
performDelete(req, res);
}
else if(subValue.equals(NEXT_PARAMETER))
{
performNext(req, res);
}
else if(subValue.equals(END_PARAMETER))
{
performEndSession(req, res);
}
else
{
outputBlankBook(req, res);
}
RequestDispatcher dispatcher = getServletContext().getRequestDispatcher(VIEW_URL);
try
{
dispatcher.forward(req, res);
}
catch(Exception e)
{
throw new RuntimeException(e);
}
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse res)
{
doProcessing(req, res, true);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse res)
{
doProcessing(req, res, false);
}
private void performRead(HttpServletRequest req, HttpServletResponse res)
{
BookInterface bookInterface = getBookInterface(req.getSession());
String bookId = getStockNo(req, res);
if(bookId == null)
{
bookId = ERROR_VALUE;
}
try
{
BookBean book = bookInterface.readBook(bookId);
outputBook(req, res, book);
}
catch(JavaBookException e)
{
outputBookException(req, res, e);
}
catch (Exception e)
{
outputException(req, res, e);
}
}
private void performAdd(HttpServletRequest req, HttpServletResponse res)
{
BookInterface bookInterface = getBookInterface(req.getSession());
try
{
BookBean book = getBook(req, res);
book = bookInterface.addBook(book);
outputBook(req, res, book);
}
catch(JavaBookException e)
{
outputBookException(req, res, e);
}
catch (Exception e)
{
outputException(req, res, e);
}
}
private void performDelete(HttpServletRequest req, HttpServletResponse res)
{
BookInterface bookInterface = getBookInterface(req.getSession());
String bookId = getStockNo(req, res);
if(bookId == null)
{
bookId = ERROR_VALUE;
}
try
{
BookBean book = bookInterface.deleteBook(bookId);
outputBook(req, res, book);
}
catch(JavaBookException e)
{
outputBookException(req, res, e);
}
catch (Exception e)
{
outputException(req, res, e);
}
}
private void performNext(HttpServletRequest req, HttpServletResponse res)
{
BookInterface bookInterface = getBookInterface(req.getSession());
String bookId = getStockNo(req, res);
if(bookId == null)
{
bookId = ERROR_VALUE;
}
try
{
BookBean book = bookInterface.nextBook(bookId);
outputBook(req, res, book);
}
catch(JavaBookException e)
{
outputBookException(req, res, e);
}
catch (Exception e)
{
outputException(req, res, e);
}
}
private void performEndSession(HttpServletRequest req, HttpServletResponse res)
{
HttpSession session = req.getSession();
session.invalidate();
outputError(req, res, "Session invalidated");
}
private void outputBlankBook(HttpServletRequest req, HttpServletResponse res)
{
outputBook(req, res, BookBean.blankBook());
}
private void outputBookException(HttpServletRequest req, HttpServletResponse res, JavaBookException jbe)
{
outputError(req, res, jbe.getMessage());
}
private void outputException(HttpServletRequest req, HttpServletResponse res, Exception e)
{
String msg = e.getClass().getName() + " [" + e.getMessage() + "]";
StringWriter strWriter = new StringWriter();
PrintWriter printWriter = new PrintWriter(strWriter);
e.printStackTrace(printWriter);
req.setAttribute(STATUS_ATTRIBUTE, strWriter.toString());
outputError(req, res, msg);
}
private void outputBook(HttpServletRequest req, HttpServletResponse res, BookBean book)
{
if(book != null)
{
req.setAttribute("book", book);
}
else
{
req.setAttribute("book", BookBean.msgBook("ERROR! book is null in output book"));
}
}
private void outputError(HttpServletRequest req, HttpServletResponse res, String msg)
{
outputBook(req, res, BookBean.msgBook(msg));
}
private BookBean getBook(HttpServletRequest req, HttpServletResponse res)
{
return new BookBean
(
getStockNo(req, res),
getIsbn(req, res),
getTitle(req, res),
getAuthor(req, res),
getType(req, res),
getPrice(req, res),
getOnhand(req, res),
getSold(req, res),
""
);
}
private String getAttribute(HttpServletRequest req, HttpServletResponse res, String attribute)
{
String stockNoStr;
stockNoStr = req.getParameter(attribute);
if(stockNoStr == null)
{
stockNoStr = ERROR_VALUE;
}
return stockNoStr;
}
private String getStockNo(HttpServletRequest req, HttpServletResponse res)
{
return getAttribute(req, res, STOCK_NO_ATTRIBUTE);
}
private String getTitle(HttpServletRequest req, HttpServletResponse res)
{
return getAttribute(req, res, TITLE_ATTRIBUTE);
}
private String getAuthor(HttpServletRequest req, HttpServletResponse res)
{
return getAttribute(req, res, AUTHOR_ATTRIBUTE);
}
private String getType(HttpServletRequest req, HttpServletResponse res)
{
return getAttribute(req, res, TYPE_ATTRIBUTE);
}
private String getIsbn(HttpServletRequest req, HttpServletResponse res)
{
return getAttribute(req, res, ISBN_ATTRIBUTE);
}
private String getPrice(HttpServletRequest req, HttpServletResponse res)
{
return getAttribute(req, res, PRICE_ATTRIBUTE);
}
private String getOnhand(HttpServletRequest req, HttpServletResponse res)
{
return getAttribute(req, res, ONHAND_ATTRIBUTE);
}
private String getSold(HttpServletRequest req, HttpServletResponse res)
{
return getAttribute(req, res, SOLD_ATTRIBUTE);
}
private IRunUnit getRunUnit(HttpSession session)
{
return ServletRunUnitManager.getManager().GetSessionRunUnit(session);
}
private void setRunUnitId(HttpServletRequest req)
{
HttpSession session = req.getSession();
IRunUnit runUnit = getRunUnit(session);
String ruid = "" + runUnit.getRunUnitID();
req.setAttribute(RUN_UNIT_ID_ATTRIBUTE, ruid);
}
private BookInterface getBookInterface(HttpSession session)
{
BookInterface output = new BookInterface(session);
return output;
}
}
package com.microfocus.book;
import java.util.*;
public class JavaBookException extends Exception
{
/**
*
*/
private static final long serialVersionUID = -3882735817601888938L;
private static final Map<String, String> messages;
private static final String unknownErrorMessage = "Unknown Error: ";
public final String statusCode;
public JavaBookException(String statusCode)
{
super(messages.containsKey(statusCode) ? messages.get(statusCode)
: unknownErrorMessage + statusCode);
this.statusCode = statusCode;
}
static
{
messages = new HashMap<String, String>();
messages.put("35", "Error: Data file not found");
messages.put("23", "Error: Stock item not found");
messages.put("46", "No more items left");
messages.put("99", "Error: Item already exists");
messages.put("01", "Error: File error");
messages.put("B1", "Error: No key entered");
}
}