| /* |
| * Licensed to the Apache Software Foundation (ASF) under one or more |
| * contributor license agreements. See the NOTICE file distributed with |
| * this work for additional information regarding copyright ownership. |
| * The ASF licenses this file to You 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. |
| */ |
| |
| // Page Flow for PetStore Application |
| |
| // load CForms support |
| cocoon.load("resource://org/apache/cocoon/forms/flow/javascript/Form.js"); |
| |
| var MAX_RESULTS = 5; |
| |
| var VIEW = "jexl"; |
| var EXT = ".jexl"; |
| |
| // Utility to format numbers and dates (for use by Velocity templates) |
| |
| function Formatter() { |
| } |
| |
| Formatter.prototype.formatNumber = function(num, format) { |
| return new java.text.DecimalFormat(format).format(num); |
| } |
| |
| Formatter.prototype.formatDate = function(date, format) { |
| return new java.text.SimpleDateFormat(format).format(date); |
| } |
| |
| var formatter = new Formatter(); |
| var petStore = null; |
| var accountForm = null; |
| var cartForm = null; |
| var categoryList = null; |
| |
| |
| function main(funName) { |
| var fun = this[funName]; |
| var args = new Array(arguments.length -1); |
| for (var i = 1; i < arguments.length; i++) { |
| args[i-1] = arguments[i]; |
| } |
| getPetStore(); |
| fun.apply(args); |
| |
| } |
| |
| function getPetStore() { |
| if (petStore == null) { |
| this.petStore = new PetStore("hsql"); |
| this.cartForm = new CartForm(); |
| this.accountForm = new AccountForm(); |
| this.categoryList = getPetStore().getCategoryList(); |
| } |
| return petStore; |
| } |
| |
| function setView() { |
| VIEW = cocoon.request.get("view"); |
| print("setView: VIEW="+VIEW); |
| if (VIEW == "velocity") { |
| EXT = ".vm"; |
| } else if (VIEW == "xsp") { |
| EXT = ".xsp"; |
| } else if (VIEW == "jexl") { |
| EXT = ".jexl"; |
| } else if (VIEW == "jxpath") { |
| EXT = ".jxpath"; |
| } |
| print("EXT="+EXT); |
| } |
| |
| // Index page |
| |
| function index() { |
| setView(); |
| getPetStore(); |
| cocoon.sendPage("view/index" + EXT, { |
| accountForm: accountForm, |
| categoryList: categoryList, |
| }); |
| } |
| |
| // Cart page |
| |
| function viewCart() { |
| var cartItems = []; |
| for (var i in cartForm.cart.cartItems) { |
| var cartItem = cartForm.cart.cartItems[i]; |
| cartItems.push(cartItem); |
| } |
| cocoon.sendPage("view/Cart" + EXT, { |
| accountForm: accountForm, |
| cartForm: cartForm, |
| fmt: formatter, |
| cartItems: cartItems, |
| label: "Shopping Cart" |
| }); |
| } |
| |
| function removeItemFromCart() { |
| var itemId = cocoon.request.getParameter("workingItemId"); |
| var item = getPetStore().getItem(itemId); |
| cartForm.cart.removeItem(item); |
| var cartItems = []; |
| for (var i in cartForm.cart.cartItems) { |
| var cartItem = cartForm.cart.cartItems[i]; |
| cartItems.push(cartItem); |
| } |
| cocoon.sendPage("view/Cart" + EXT, { |
| fmt: formatter, |
| accountForm: accountForm, |
| cartForm: cartForm, |
| cartItems: cartItems, |
| label: "Shopping Cart" |
| }); |
| } |
| |
| function updateCartQuantities() { |
| var cartItems = []; |
| for (var i in cartForm.cart.cartItems) { |
| var cartItem = cartForm.cart.cartItems[i]; |
| var itemId = cartItem.item.itemId; |
| var quantity = parseInt(cocoon.request.get(itemId)); |
| cartItem.updateQuantity(quantity); |
| cartItems.push(cartItem); |
| } |
| cocoon.sendPage("view/Cart" + EXT, { |
| fmt: formatter, |
| accountForm: accountForm, |
| cartForm:cartForm, |
| cartItems: cartItems, |
| label: "Shopping Cart" |
| }); |
| } |
| |
| function addItemToCart() { |
| var itemId = cocoon.request.getParameter("itemId"); |
| var item = getPetStore().getItem(itemId); |
| cartForm.cart.addItem(item); |
| var cartItems = []; |
| for (var i in cartForm.cart.cartItems) { |
| var cartItem = cartForm.cart.cartItems[i]; |
| cartItems.push(cartItem); |
| } |
| cocoon.sendPage("view/Cart" + EXT, { |
| fmt: formatter, |
| accountForm: accountForm, |
| cartForm: cartForm, |
| cartItems: cartItems, |
| label: "Shopping Cart" |
| }); |
| } |
| |
| // Category page |
| |
| function viewCategory() { |
| var categoryId = cocoon.request.get("categoryId"); |
| var category = getPetStore().getCategory(categoryId); |
| var maxResults = MAX_RESULTS; |
| /* page local variable to keep track of pagination */ |
| var local = cocoon.createPageLocal(); |
| local.skipResults = 0; |
| while (true) { |
| var productList = |
| getPetStore().getProductListByCategory(categoryId, |
| local.skipResults, |
| maxResults); |
| local.lastPage = !productList.isLimitedByMaxRows; |
| local.rowCount = productList.rowCount; |
| var contextData = { |
| accountForm: accountForm, |
| productList: productList.rows, |
| category: category, |
| firstPage: local.skipResults == 0, |
| lastPage: local.lastPage |
| }; |
| cocoon.sendPageAndWait("view/Category" + EXT, |
| contextData, |
| function () { |
| /* release contextData and productList */ |
| contextData = null; |
| productList = null; |
| }); |
| var page = cocoon.request.get("page"); |
| if (page == "previous") { |
| if (local.skipResults != 0) { |
| local.skipResults -= maxResults; |
| } |
| } else if (page == "next") { |
| if (!local.lastPage) { |
| local.skipResults += local.rowCount; |
| } |
| } |
| } |
| } |
| |
| // Product page |
| |
| function viewProduct() { |
| var productId = cocoon.request.get("productId"); |
| var product = getPetStore().getProduct(productId); |
| var maxResults = MAX_RESULTS; |
| /* page local variable to handle pagination */ |
| var local = cocoon.createPageLocal(); |
| local.skipResults = 0; |
| while (true) { |
| var itemList = |
| getPetStore().getItemListByProduct(productId, |
| local.skipResults, |
| maxResults); |
| local.lastPage = !itemList.isLimitedByMaxRows; |
| local.rowCount = itemList.rowCount; |
| var contextData = { |
| accountForm: accountForm, |
| fmt: formatter, |
| product: product, |
| firstPage: local.skipResults == 0, |
| lastPage: local.lastPage, |
| itemList: itemList.rows |
| }; |
| cocoon.sendPageAndWait("view/Product" + EXT, |
| contextData, |
| function() { |
| /* release contextData and itemList */ |
| contextData = null; |
| itemList = null; |
| }); |
| var page = cocoon.request.get("page"); |
| if (page == "previous") { |
| if (local.skipResults != 0) { |
| local.skipResults -= maxResults; |
| } |
| } else if (page == "next") { |
| if (!local.lastPage) { |
| local.skipResults += local.rowCount; |
| } |
| } |
| } |
| } |
| |
| // Item page |
| |
| function viewItem() { |
| var itemId = cocoon.request.getParameter("itemId"); |
| var item = getPetStore().getItem(itemId); |
| cocoon.sendPage("view/Item" + EXT, { |
| accountForm: accountForm, |
| cartForm: cartForm, |
| item: item, |
| quantity: getPetStore().getItemRowCountByProduct(item.productId), |
| product: item.product, |
| fmt: formatter |
| }); |
| } |
| |
| // Sign-on page |
| |
| function signonForm() { |
| signOn(); |
| index(); |
| } |
| |
| function signOn(process) { |
| if (cocoon.request.get("signoff") != null) { |
| accountForm = new AccountForm(); |
| cartForm = new CartForm(); |
| } else { |
| var message = ""; |
| var registerType; |
| if (process) { |
| registerType = process; |
| } else { |
| registerType = "new"; |
| } |
| while (true) { |
| cocoon.sendPageAndWait("view/SignonForm" + EXT, { |
| accountForm: accountForm, |
| message: message, |
| registerType: registerType |
| }); |
| var username = cocoon.request.get("username"); |
| var password = cocoon.request.get("password"); |
| print("getting account: " + username); |
| var account = getPetStore().getAccount(username, password); |
| if (account == null) { |
| message = "Invalid username or password"; |
| } else { |
| accountForm = new AccountForm(username, password); |
| accountForm.account = account; |
| accountForm.signOn = false; |
| break; |
| } |
| } |
| } |
| } |
| |
| // Account Forms |
| |
| function editAccount() { |
| editAccountData(); |
| cocoon.sendPage("index.do"); |
| |
| } |
| |
| function newAccount() { |
| newAccountData(); |
| cocoon.sendPage("index.do"); |
| } |
| |
| function instantAccount() { |
| newAccountData(); |
| cocoon.sendPage("checkout.do"); |
| } |
| |
| function editAccountData() { |
| var editAccountDataForm = new Form("view/forms/editAccountForm_d.xml"); |
| var model = editAccountDataForm.getModel(); |
| model.message = ""; |
| model.username = accountForm.username; |
| model.changePwdOption = false; |
| model.password = ""; |
| model.retypepassword = ""; |
| model.firstname = accountForm.account.firstname; |
| model.lastname = accountForm.account.lastname; |
| model.email = accountForm.account.email; |
| model.phone= accountForm.account.phone; |
| model.addr1 = accountForm.account.addr1; |
| model.addr2 = accountForm.account.addr2; |
| model.city = accountForm.account.city; |
| model.state = accountForm.account.state; |
| model.zip = accountForm.account.zip; |
| model.country = accountForm.account.country; |
| model.langpref = accountForm.account.langpref; |
| model.favcategory = accountForm.account.favcategory; |
| model.mylistopt = accountForm.account.mylistopt; |
| model.banneropt = accountForm.account.banneropt; |
| |
| editAccountDataForm.showForm("view/editAccountForm.cforms"); |
| while (model.changePwdOption && (model.password != model.retypepassword || model.password == null)) { |
| model.message = "Passwords don't match!"; |
| editAccountDataForm.showForm("view/editAccountForm.cforms"); |
| } |
| |
| if (!accountForm.signOn) { |
| var update = getPetStore().updateAccount(model); |
| } else { |
| var insert = getPetStore().insertAccount(model); |
| accountForm.signOn = false; |
| } |
| |
| if (model.changePwdOption) { |
| var chPwd = getPetStore().updateSignon(accountForm.username, model.password); |
| accountForm.password = model.password; |
| } |
| accountForm.account = getPetStore().getAccount(accountForm.username, accountForm.password); |
| } |
| |
| function newAccountData() { |
| var newAccountDataForm = new Form("view/forms/newAccountForm_d.xml"); |
| var model = newAccountDataForm.getModel(); |
| |
| model.message = ""; |
| model.username = ""; |
| model.password = ""; |
| model.retypepassword = ""; |
| |
| newAccountDataForm.showForm("view/newAccountForm.cforms"); |
| while (getPetStore().testDuplicateLogin(model.username) > 0) { |
| model.message = "Username already in use. Please choose another username."; |
| newAccountDataForm.showForm("view/newAccountForm.cforms"); |
| } |
| var insertNewUser = getPetStore().insertNewUser(model); |
| print("insertNewUser: "+insertNewUser); |
| accountForm = new AccountForm(model.username, model.password); |
| accountForm.account = new Account(); |
| editAccountData(); |
| |
| } |
| |
| // Search |
| |
| function empty(str) { |
| return str == null || |
| (str instanceof java.lang.String ? |
| str.length() == 0 : |
| str.length == 0); |
| } |
| |
| function searchProducts() { |
| var keyword = cocoon.request.get("keyword"); |
| if (empty(keyword)) { |
| cocoon.sendPage("view/Error" + EXT, { |
| accountForm: accountForm, |
| message: "Please enter a keyword to search for, then press the search button" |
| }); |
| return; |
| } |
| /* page local variable to manage pagination */ |
| var local = cocoon.createPageLocal(); |
| local.skipSearchResults = 0; |
| var maxSearchResults = 3; |
| while (true) { |
| var result = |
| getPetStore().searchProductList(keyword, |
| local.skipSearchResults, |
| maxSearchResults); |
| local.lastPage = !result.isLimitedByMaxRows; |
| local.rowCount = result.rowCount; |
| var contextData = { |
| accountForm: accountForm, |
| searchResultsProductList: result.rows, |
| firstPage: local.skipSearchResults == 0, |
| lastPage: local.lastPage |
| }; |
| cocoon.sendPageAndWait("view/SearchProducts" + EXT, |
| contextData, |
| function() { |
| /* release contextData and result */ |
| contextData = null; |
| result = null; |
| }); |
| var page = cocoon.request.get("page"); |
| if (page == "previous") { |
| if (local.skipSearchResults != 0) { |
| local.skipSearchResults -= maxSearchResults; |
| } |
| } else if (page == "next") { |
| if (!local.lastPage) { |
| local.skipSearchResults += local.rowCount; |
| } |
| } |
| } |
| } |
| |
| function billingForm(order) { |
| var billingForm = new Form("view/forms/newOrderForm_d.xml"); |
| var model = billingForm.getModel(); |
| model.cardType = order.cardType; |
| model.creditCard = order.creditCard; |
| model.expiryDate = order.expiryDate; |
| model.billToFirstName = order.billToFirstName; |
| model.billToLastName = order.billToLastName; |
| model.billAddress1 = order.billAddress1; |
| model.billAddress2 = order.billAddress2; |
| model.billCity = order.billCity; |
| model.billState = order.billState; |
| model.billZip = order.billZip; |
| model.billCountry = order.billCountry; |
| model.shippingAddressRequired = false; |
| billingForm.showForm("view/newOrderForm.cforms"); |
| return model; |
| } |
| |
| function shippingForm(order) { |
| var shippingForm = new Form("view/forms/newShippingForm_d.xml"); |
| var model = shippingForm.getModel(); |
| model.shipToFirstName = order.shipToFirstName; |
| model.shipToLastName = order.shipToLastName; |
| model.shipAddress1 = order.shipAddress1; |
| model.shipAddress2 = order.shipAddress2; |
| model.shipCity= order.shipCity; |
| model.shipState= order.shipState; |
| model.shipZip= order.shipZip; |
| model.shipCountry= order.shipCountry; |
| shippingForm.showForm("view/newShippingForm.cforms"); |
| return model; |
| } |
| |
| // Checkout |
| |
| function checkout() { |
| var cartItems = []; |
| for (var i in cartForm.cart.cartItems) { |
| var cartItem = cartForm.cart.cartItems[i]; |
| cartItems.push(cartItem); |
| } |
| cocoon.sendPageAndWait("view/Cart" + EXT, { |
| accountForm: accountForm, |
| cartForm: cartForm, |
| fmt: formatter, |
| cartItems: cartItems, |
| label: "Checkout Summary" |
| }); |
| if (accountForm.signOn) { |
| signOn("instant"); |
| } |
| var orderForm = new OrderForm(); |
| orderForm.initOrder(accountForm, cartForm); |
| |
| var model = billingForm(orderForm.order); |
| orderForm.order.billToFirstName = model.billToFirstName; |
| orderForm.order.billToLastName = model.billToLastName; |
| orderForm.order.billAddress1 = model.billAddress1; |
| orderForm.order.billAddress2 = model.billAddress2; |
| orderForm.order.billCity = model.billCity; |
| orderForm.order.billState = model.billState; |
| orderForm.order.billZip = model.billZip; |
| orderForm.order.billCountry = model.billCountry; |
| orderForm.order.cardType = model.cardType; |
| orderForm.order.creditCard = model.creditCard; |
| orderForm.order.expiryDate = model.expiryDate; |
| orderForm.shippingAddressRequired = model.shippingAddressRequired; |
| if (orderForm.shippingAddressRequired == true) { |
| model = shippingForm(orderForm.order); |
| orderForm.order.shipToFirstName = model.shipToFirstName; |
| orderForm.order.shipToLastName = model.shipToLastName; |
| orderForm.order.shipAddress1 = model.shipAddress1; |
| orderForm.order.shipAddress2 = model.shipAddress2; |
| orderForm.order.shipCity = model.shipCity; |
| orderForm.order.shipState = model.shipState; |
| orderForm.order.shipZip = model.shipZip; |
| orderForm.order.shipCountry = model.shipCountry; |
| } |
| |
| cocoon.sendPageAndWait("view/ConfirmOrder" + EXT, |
| {accountForm: accountForm, |
| order: orderForm.order, |
| fmt: formatter}); |
| |
| orderForm.confirmed = |
| cocoon.request.getParameter("confirmed") == "true"; |
| |
| if (cartForm.cart.numberOfItems > 0 && orderForm.confirmed) { |
| var lastOID = getPetStore().insertOrder(orderForm.order, accountForm.username); |
| cartForm = new CartForm(); |
| // cocoon.sendPage("viewOrder.do?orderId=" + lastOID); |
| viewOrder(lastOID); |
| } |
| else { |
| cocoon.sendPage("index.do"); |
| } |
| } |
| |
| function listOrders() { |
| var orderList = getPetStore().getOrderList(accountForm.username); |
| cocoon.sendPage("view/ListOrders" + EXT, { |
| accountForm: accountForm, |
| fmt: formatter, |
| orderList: orderList |
| }); |
| } |
| |
| function viewOrder(lastOID) { |
| var orderId; |
| var message; |
| if (lastOID != null) { |
| orderId = lastOID; |
| message = "Thank you, your order has been submitted."; |
| } else { |
| orderId = cocoon.request.getParameter("orderId"); |
| } |
| var archivedOrder = getPetStore().getOrder(orderId, accountForm.username); |
| var lineItemList = getPetStore().getLineItems(orderId); |
| cocoon.sendPage("view/ViewOrder" + EXT, { |
| accountForm: accountForm, |
| fmt: formatter, |
| message: message, |
| archivedOrder: archivedOrder, |
| lineItemList: lineItemList.rows, |
| process: {label: "Ordered Items:", |
| id: "checkout"} |
| }); |
| } |