Dans cette leçon, vous créez la classe MyOrderItemAddCmdImpl qui implémente l'interface définie dans la classe OrderItemAddCmd. Votre nouvelle classe MyOrderItemAddCmdImpl doit inclure le code pour s'assurer qu'un panier client comprend cinq articles ou moins.
Procédure
-
Dans la vue Explorateur d'entreprise, développez .
-
Dans le répertoire src, créez le package com.ibm.commerce.sample.commands.
-
Cliquez avec le bouton droit sur le répertoire src et sélectionnez .
-
Entrez com.ibm.commerce.sample.commands dans la zone Nom.
-
Cliquez sur Terminer.
-
Créez la classe MyOrderItemAddCmdImpl.java.
-
Cliquez avec le bouton droit sur le nouveau package com.ibm.commerce.sample.commands et sélectionnez .
-
Dans l'Assistant Nouvelle classe Java, entrez MyOrderItemAddCmdImpl dans la zone Nom.
-
Cliquez sur le bouton Parcourir à droite de la zone Superclasse.
-
Saisissez
OrderItemAddCmdImpl, puis cliquez sur OK.
-
Cliquez sur Ajouter, puis entrez
OrderItemAddCmd et cliquez sur OK.
-
Cliquez sur Terminer.
Votre nouvelle classe
MyOrderItemAddCmdImpl.java peut ressembler au code suivant :
package com.ibm.commerce.sample.commands;
import com.ibm.commerce.orderitems.commands.OrderItemAddCmd;
import com.ibm.commerce.orderitems.commands.OrderItemAddCmdImpl;
public class MyOrderItemAddCmdImpl extends OrderItemAddCmdImpl implements
OrderItemAddCmd {
}
-
Ajoutez la logique métier et la gestion des exceptions dans votre nouvelle classe.
La logique métier et la gestion des exceptions détermine s'il y a cinq articles ou plus dans le panier. S'il y a cinq articles ou plus dans le panier, le client n'est pas autorisé à ajouter plus d'articles au panier. Pour ajouter la logique métier et la gestion des exceptions :
-
Dans votre nouvelle classe, ajoutez le code suivant avant la dernière accolade fermante (
}) qui indique la fin de la classe :
public void performExecute() throws ECException {
// Get a list of order ids
String[] orderIds = getOrderId();
// Check to make sure that an id exists at all
// if order ID exists then get number of items in the order
// else if no order ID exists then execute normal code
if (orderIds != null && orderIds.length > 0) {
// An exception should be thrown when trying to add a sixth item
// to the shopping cart. This code runs before an item is added and
// throws an exception if there are 5 or more items in the cart.
if (itemsInOrder(orderIds[0]) >= 5) {
throw new ECApplicationException(
MyNewMessages._ERR_TOO_MANY_ITEMS,
this.getClass().getName(),
"performExecute");
}
//else perform normal flow
}
super.performExecute();
}
//get number of items in the order
protected int itemsInOrder(String orderId) throws ECException {
try {
OrderAccessBean order = new OrderAccessBean();
order.setInitKey_orderId(orderId);
order.refreshCopyHelper();
return order.getOrderItems().length;
} catch (javax.ejb.FinderException e) {
throw new ECSystemException(
ECMessage._ERR_FINDER_EXCEPTION,
this.getClass().getName(),
"itemsInOrder");
} catch (javax.naming.NamingException e) {
throw new ECSystemException(
ECMessage._ERR_NAMING_EXCEPTION,
this.getClass().getName(),
"itemsInOrder");
} catch (java.rmi.RemoteException e) {
throw new ECSystemException(
ECMessage._ERR_REMOTE_EXCEPTION,
this.getClass().getName(),
"itemsInOrder");
} catch (javax.ejb.CreateException e) {
throw new ECSystemException(
ECMessage._ERR_CREATE_EXCEPTION,
this.getClass().getName(),
"itemsInOrder");
}
}
Ce code ajoute une méthode performExecute pour vérifier le nombre d'éléments dans le panier. Si le nombre d'articles déjà dans le panier est inférieur à cinq, la méthode appelle la méthode performExecute de la superclasse (OrderItemAddCmdImpl) comme normale. S'il y a cinq articles ou plus dans le panier, une exception est générée et l'utilisateur ne peut pas ajouter plus d'articles au panier.
-
Dans le menu Source, sélectionnez Organiser les importations pour ajouter les instructions d'importation à la classe.
Votre classe terminée peut ressembler à l'exemple de code suivant :
package com.ibm.commerce.sample.commands;
import com.ibm.commerce.exception.ECApplicationException;
import com.ibm.commerce.exception.ECException;
import com.ibm.commerce.exception.ECSystemException;
import com.ibm.commerce.order.objects.OrderAccessBean;
import com.ibm.commerce.orderitems.commands.OrderItemAddCmd;
import com.ibm.commerce.orderitems.commands.OrderItemAddCmdImpl;
import com.ibm.commerce.ras.ECMessage;
import com.ibm.commerce.sample.messages.MyNewMessages;
public class MyOrderItemAddCmdImpl extends OrderItemAddCmdImpl implements
OrderItemAddCmd {
public void performExecute() throws ECException {
// Get a list of order ids
String[] orderIds = getOrderId();
// Check to make sure that an id exists at all
// if order ID exists then get number of items in the order
// else if no order ID exists then execute normal code
if (orderIds != null && orderIds.length > 0) {
// An exception should be thrown when trying to add a sixth item
// to the shopping cart. This code runs before an item is added and
// throws an exception if there are 5 or more items in the cart.
if (itemsInOrder(orderIds[0]) >= 5) {
throw new ECApplicationException(
MyNewMessages._ERR_TOO_MANY_ITEMS, this.getClass()
.getName(), "performExecute");
}
// else perform normal flow
}
super.performExecute();
}
// get number of items in the order
protected int itemsInOrder(String orderId) throws ECException {
try {
OrderAccessBean order = new OrderAccessBean();
order.setInitKey_orderId(orderId);
order.refreshCopyHelper();
return order.getOrderItems().length;
} catch (javax.ejb.FinderException e) {
throw new ECSystemException(ECMessage._ERR_FINDER_EXCEPTION, this
.getClass().getName(), "itemsInOrder");
} catch (javax.naming.NamingException e) {
throw new ECSystemException(ECMessage._ERR_NAMING_EXCEPTION, this
.getClass().getName(), "itemsInOrder");
} catch (java.rmi.RemoteException e) {
throw new ECSystemException(ECMessage._ERR_REMOTE_EXCEPTION, this
.getClass().getName(), "itemsInOrder");
} catch (javax.ejb.CreateException e) {
throw new ECSystemException(ECMessage._ERR_CREATE_EXCEPTION, this
.getClass().getName(), "itemsInOrder");
}
}
}
-
Enregistrez votre travail.