SlideShare a Scribd company logo
1 of 78
Download to read offline
MUSTER IN
WEBCONTROLLERN
arthur tomas
jens himmelreich
VIEW CONTROLLER
MODEL
VIEW CONTROLLER
MODEL
VIEW CONTROLLER
MODEL
EXKURS
VIEW CONTROLLER
MODEL
WebMVC
FUNK
TION
HYGI
ENE
VIEW CONTROLLER
MODEL
CONTROLLER
CONTROLLER
public static void main(String[] arguments) {
if(basket.isPaymentCreditCard()) {
if( customerService.isCreditCardLock(bask
log.info("CreditCard isLocked");
return new ModelAndView(urlComposer.g
}
CreditCardOrder order = creditCardOrder
if(isBankAuthenticationResponse(request))
log.debug("Bank response request with
credtitCartService.finalizeAuthentifi
} else {
AuthentificationIntermediateResponse
= creditCardService.beginAuthenti
urlComposer.getSslUrl("/Bes
if (authResponse.needs5dsecureAuthent
log.debug("CreditCard needs 5dsec
return show5dSecurePage(authRespo
}
}
if (creditCardService.isAuthenticationErr
log.info("creditCardService.isAuthent
return new ModelAndView(urlComposer.g
} else {
log.debug("creditCardService without
creditCardService.authorizePayment(ca
CONTROLLER
CONTROLLER
?
KOMPLEXES
SETUP
REQUEST
RESPONSE
EXPERIMENT
if(basket.isPaymentCreditCard()) {
if( customerService.isCreditCardLock(basket.getCardNumber()) ) {
log.info("CreditCard isLocked");
return new ModelAndView(urlComposer.getSslRedirectUrl("/Zahlungs
}
CreditCardOrder creditCardOrder =
creditCardOrderFactory.newPoseidonOrder(
if(isBankAuthenticationResponse(request)) {
log.debug("Bank response request with: CREDITCARD_5dSECURE_BANK_
creditCardService.finalizeAuthentification(get5dSecureBankRespon
} else {
AuthentificationIntermediateResponse authResponse
= poseidonService.beginAuthentification(poseidonOrder,
urlComposer.getSslUrl("/Bestell.html?submit1
if (authResponse.needs5dsecureAuthentication()) {
log.debug("CreditCard needs 5dsecureAuthentication!");
return show5dSecurePage(authResponse);
}
}
if (creditCardService.isAuthenticationError(creditCardOrder)) {
log.info("creditCardService.isAuthenticationError");
return new ModelAndView(urlComposer.getSslRedirectUrl("/Zahl
} else {
log.debug("creditCardService without AuthenticationError");
creditCardService.authorizePayment(creditCardOrder);
if (creditCardService.isSuccessfullAuthorized(creditCardOrder))
log.debug("creditCardService.isSuccessfullAuthorized");
basket.getPaymentMethod().setCardNumber(creditCardOrder.getA
CONTROLLER
REFACTORING
CLEAN
REZ
EPT
1
2
3
4
5 TE
ST
6
7
8 TE
ST
CLEAN
OBJEKTE
ERKENNEN
PARAMETER
OBJEKT
@Override
protected ModelAndView handleSslRequest(HttpServletRequest request,
HttpServletResponse response, ModelBuilder modelBuilder)
throws Exception {
if( isNotAuthorizised(request, modelBuilder)){
return handleLogin(request, response, modelBuilder);
}
Session session = modelBuilder.getSession();
Basket basket = modelBuilder.getBasket();
Customer customer = modelBuilder.getCustomer();
PaymentRule paymentRule =
(PaymentRule)paymentRuleComposer.compose(basket, customer);
ModelAndView escapeModelAndView =
getMavIfStateIsNotValidForCheckout(basket, paymentRule, session);
if(escapeModelAndView != null) {
return escapeModelAndView;
}
disableDesiredDeliveryDate(session, basket, modelBuilder);
CountryCode cc =
catalogService.getCountryCodeByIsoCode2(basket.getCountryToDeliver());
logInfos(basket);
putDataToModel(modelBuilder, basket, cc);
@Override
protected ModelAndView handleSslRequest(HttpServletRequest request,
HttpServletResponse response, ModelBuilder modelBuilder)
throws Exception {
if( isNotAuthorizised(request, modelBuilder)){
return handleLogin(request, response, modelBuilder);
}
Session session = modelBuilder.getSession();
Basket basket = modelBuilder.getBasket();
Customer customer = modelBuilder.getCustomer();
PaymentRule paymentRule = paymentRuleComposer
.compose(basket, customer);
ModelAndView escapeModelAndView =
getMavIfStateIsNotValidForCheckout(basket, paymentRule, session);
if(escapeModelAndView != null) {
return escapeModelAndView;
}
disableDesiredDeliveryDate(session, basket, modelBuilder);
CountryCode cc =
catalogService.getCountryCodeByIsoCode2(basket.getCountryToDeliver());
logInfos(basket);
putDataToModel(modelBuilder, basket, cc);
@Override
protected ModelAndView handleSslRequest(HttpServletRequest request,
HttpServletResponse response, ModelBuilder modelBuilder)
throws Exception {
if( isNotAuthorizised(request, modelBuilder)){
return handleLogin(request, response, modelBuilder);
}
Session session = modelBuilder.getSession();
Basket basket = modelBuilder.getBasket();
Customer customer = modelBuilder.getCustomer();
PaymentRule paymentRule = paymentRuleComposer
.compose(basket, customer);
ModelAndView escapeModelAndView =
getMavIfStateIsNotValidForCheckout(basket, paymentRule, session);
if(escapeModelAndView != null) {
return escapeModelAndView;
}
disableDesiredDeliveryDate(session, basket, modelBuilder);
CountryCode cc =
catalogService.getCountryCodeByIsoCode2(basket.getCountryToDeliver());
logInfos(basket);
putDataToModel(modelBuilder, basket, cc);
Session session = modelBuilde
Basket basket = modelBuilder.
Customer customer = modelBuil
PaymentRule paymentRule = pay
@Override
protected ModelAndView handleSslRequest(HttpServletRequest request,
HttpServletResponse response, ModelBuilder modelBuilder)
throws Exception {
if( isNotAuthorizised(request, modelBuilder)){
return handleLogin(request, response, modelBuilder);
}
Session session = modelBuilder.getSession();
Basket basket = modelBuilder.getBasket();
Customer customer = modelBuilder.getCustomer();
PaymentRule paymentRule =
(PaymentRule)paymentRuleComposer.compose(basket, customer);
ModelAndView escapeModelAndView =
getMavIfStateIsNotValidForCheckout(basket, paymentRule, session);
if(escapeModelAndView != null) {
return escapeModelAndView;
}
disableDesiredDeliveryDate(session, basket, modelBuilder);
CountryCode cc =
catalogService.getCountryCodeByIsoCode2(basket.getCountryToDeliver());
logInfos(basket);
putDataToModel(modelBuilder, basket, cc);
@Override
protected ModelAndView handleSslRequest(HttpServletRequest request,
HttpServletResponse response, ModelBuilder modelBuilder)
throws Exception {
if( isNotAuthorizised(request, modelBuilder)){
return handleLogin(request, response, modelBuilder);
}
Session session = modelBuilder.getSession();
Basket basket = modelBuilder.getBasket();
Customer customer = modelBuilder.getCustomer();
PaymentRule paymentRule =
(PaymentRule)paymentRuleComposer.compose(basket, customer);
ModelAndView escapeModelAndView =
getMavIfStateIsNotValidForCheckout(basket, paymentRule, session);
if(escapeModelAndView != null) {
return escapeModelAndView;
}
disableDesiredDeliveryDate(session, basket, modelBuilder);
CountryCode cc =
catalogService.getCountryCodeByIsoCode2(basket.getCountryToDeliver());
logInfos(basket);
putDataToModel(modelBuilder, basket, cc);
@Override
protected ModelAndView handleSslRequest(HttpServletRequest request,
HttpServletResponse response, ModelBuilder modelBuilder)
throws Exception {
if( isNotAuthorizised(request, modelBuilder)){
return handleLogin(request, response, modelBuilder);
}
Session session = modelBuilder.getSession();
Basket basket = modelBuilder.getBasket();
Customer customer = modelBuilder.getCustomer();
PaymentRule paymentRule =
(PaymentRule)paymentRuleComposer.compose(basket, customer);
ModelAndView escapeModelAndView =
getMavIfStateIsNotValidForCheckout(basket, paymentRule, session);
if(escapeModelAndView != null) {
return escapeModelAndView;
}
disableDesiredDeliveryDate(session, basket, modelBuilder);
CountryCode cc =
catalogService.getCountryCodeByIsoCode2(basket.getCountryToDeliver());
logInfos(basket);
putDataToModel(modelBuilder, basket, cc);
(session, basket, modelBuilder)
public class SessionContext {
private ModelBuilder modelBuilder;
private PaymentRule paymentRule;
private boolean needsUpdate;
public SessionContext(
ModelBuilder modelBuilder,
RuleComposer rulecomposer) {
this.needsUpdate = false;
this.modelBuilder = modelBuilder;
this.paymentRule = createPaymentRule(rulecomposer);
}
// ...
}
public class SessionContext {
private ModelBuilder modelBuilder;
private PaymentRule paymentRule;
private boolean needsUpdate;
public SessionContext(
ModelBuilder modelBuilder,
RuleComposer rulecomposer) {
this.needsUpdate = false;
this.modelBuilder = modelBuilder;
this.paymentRule = createPaymentRule(rulecomposer);
}
// ...
}
public class SessionContext {
private ModelBuilder modelBuilder;
private PaymentRule paymentRule;
private boolean needsUpdate;
public SessionContext(
ModelBuilder modelBuilder,
RuleComposer rulecomposer) {
this.needsUpdate = false;
this.modelBuilder = modelBuilder;
this.paymentRule = createPaymentRule(rulecomposer);
}
// ...
}
SessionContext(
ModelBuilder modelBuilder,
RuleComposer rulecomposer)
@Override
protected ModelAndView handleSslRequest(HttpServletRequest request,
HttpServletResponse response, ModelBuilder modelBuilder)
throws Exception {
if( isNotAuthorizised(request, modelBuilder)){
return handleLogin(request, response, modelBuilder);
}
Session session = modelBuilder.getSession();
Basket basket = modelBuilder.getBasket();
Customer customer = modelBuilder.getCustomer();
PaymentRule paymentRule =
(PaymentRule)paymentRuleComposer.compose(basket, customer);
ModelAndView escapeModelAndView =
getMavIfStateIsNotValidForCheckout(basket, paymentRule, session);
if(escapeModelAndView != null) {
return escapeModelAndView;
}
disableDesiredDeliveryDate(session, basket, modelBuilder);
CountryCode cc =
catalogService.getCountryCodeByIsoCode2(basket.getCountryToDeliver());
logInfos(basket);
putDataToModel(modelBuilder, basket, cc);
@Override
protected ModelAndView handleSslRequest(HttpServletRequest request,
HttpServletResponse response, ModelBuilder modelBuilder)
throws Exception {
if( isNotAuthorizised(request, modelBuilder)){
return handleLogin(request, response, modelBuilder);
}
Session session = modelBuilder.getSession();
Basket basket = modelBuilder.getBasket();
Customer customer = modelBuilder.getCustomer();
PaymentRule paymentRule =
(PaymentRule)paymentRuleComposer.compose(basket, customer);
ModelAndView escapeModelAndView =
getMavIfStateIsNotValidForCheckout(basket, paymentRule, session);
if(escapeModelAndView != null) {
return escapeModelAndView;
}
disableDesiredDeliveryDate(session, basket, modelBuilder);
CountryCode cc =
catalogService.getCountryCodeByIsoCode2(basket.getCountryToDeliver());
logInfos(basket);
putDataToModel(modelBuilder, basket, cc);
@Override
protected ModelAndView handleSslRequest(HttpServletRequest request,
HttpServletResponse response, ModelBuilder modelBuilder)
throws Exception {
if( isNotAuthorizised(request, modelBuilder)){
return handleLogin(request, response, modelBuilder);
}
SessionContext context =
new SessionContext(
modelBuilder,
paymentRuleComposer);
ModelAndView escapeModelAndView =
getMavIfStateIsNotValidForCheckout(context);
if(escapeModelAndView != null) {
return escapeModelAndView;
}
disableDesiredDeliveryDate(context);
CountryCode cc =
catalogService.getCountryCodeByIsoCode2(basket.getCountryToDeliver());
logInfos(basket);
putDataToModel(modelBuilder, basket, cc);
@Override
protected ModelAndView handleSslRequest(HttpServletRequest request,
HttpServletResponse response, ModelBuilder modelBuilder)
throws Exception {
if( isNotAuthorizised(request, modelBuilder)){
return handleLogin(request, response, modelBuilder);
}
SessionContext context =
new SessionContext(modelBuilder, paymentRuleComposer);
ModelAndView escapeModelAndView =
getMavIfStateIsNotValidForCheckout(basket, paymentRule, session);
if(escapeModelAndView != null) {
return escapeModelAndView;
}
disableDesiredDeliveryDate(context);
CountryCode cc =
catalogService.getCountryCodeByIsoCode2(basket.getCountryToDeliver());
logInfos(basket);
putDataToModel(modelBuilder, basket, cc);
SessionContext context =
new SessionContext(
modelBuilder,
paymentRuleComposer);
@Override
protected ModelAndView handleSslRequest(HttpServletRequest request,
HttpServletResponse response, ModelBuilder modelBuilder)
throws Exception {
if( isNotAuthorizised(request, modelBuilder)){
return handleLogin(request, response, modelBuilder);
}
SessionContext context =
new SessionContext(modelBuilder, paymentRuleComposer);
ModelAndView escapeModelAndView =
getMavIfStateIsNotValidForCheckout(context);
if(escapeModelAndView != null) {
return escapeModelAndView;
}
disableDesiredDeliveryDate(context);
CountryCode cc =
catalogService.getCountryCodeByIsoCode2(basket.getCountryToDeliver());
logInfos(basket);
putDataToModel(modelBuilder, basket, cc);
disableDesired-
DeliveryDate(context);
ECHTES
OBJEKT
@Override
protected ModelAndView handleSslRequest(HttpServletRequest request,
HttpServletResponse response, ModelBuilder modelBuilder)
throws Exception {
if( isNotAuthorizised(request, modelBuilder)){
return handleLogin(request, response, modelBuilder);
}
SessionContext context =
new SessionContext(modelBuilder, paymentRuleComposer);
ModelAndView escapeModelAndView =
getMavIfStateIsNotValidForCheckout(context);
if(escapeModelAndView != null) {
return escapeModelAndView;
}
disableDesiredDeliveryDate(context);
CountryCode cc =
catalogService.getCountryCodeByIsoCode2(basket.getCountryToDeliver());
logInfos(basket);
putDataToModel(modelBuilder, basket, cc);
@Override
protected ModelAndView handleSslRequest(HttpServletRequest request,
HttpServletResponse response, ModelBuilder modelBuilder)
throws Exception {
if( isNotAuthorizised(request, modelBuilder)){
return handleLogin(request, response, modelBuilder);
}
SessionContext context =
new SessionContext(modelBuilder, paymentRuleComposer);
ModelAndView escapeModelAndView =
getMavIfStateIsNotValidForCheckout(context);
if(escapeModelAndView != null) {
return escapeModelAndView;
}
context.disableDesiredDeliveryDate();
CountryCode cc =
catalogService.getCountryCodeByIsoCode2(basket.getCountryToDeliver());
logInfos(basket);
putDataToModel(modelBuilder, basket, cc);
@Override
protected ModelAndView handleSslRequest(HttpServletRequest request,
HttpServletResponse response, ModelBuilder modelBuilder)
throws Exception {
if( isNotAuthorizised(request, modelBuilder)){
return handleLogin(request, response, modelBuilder);
}
SessionContext context =
new SessionContext(modelBuilder, paymentRuleComposer);
ModelAndView escapeModelAndView =
getMavIfStateIsNotValidForCheckout(context);
if(escapeModelAndView != null) {
return escapeModelAndView;
}
context.setDesiredDeliveryDate();
CountryCode cc =
catalogService.getCountryCodeByIsoCode2(basket.getCountryToDeliver());
logInfos(basket);
putDataToModel(modelBuilder, basket, cc);
context.
disableDesiredDeliveryDate();
METHODEN
OBJEKT
@Override
protected ModelAndView handleSslRequest(HttpServletRequest request,
HttpServletResponse response, ModelBuilder modelBuilder)
throws Exception {
if( isNotAuthorizised(request, modelBuilder)){
return handleLogin(request, response, modelBuilder);
}
SessionContext context =
new SessionContext(modelBuilder, paymentRuleComposer);
ModelAndView escapeModelAndView =
getMavIfStateIsNotValidForCheckout(context);
if(escapeModelAndView != null) {
return escapeModelAndView;
}
context.disableDesiredDeliveryDate();
CountryCode cc =
catalogService.getCountryCodeByIsoCode2(basket.getCountryToDeliver());
logInfos(basket);
putDataToModel(modelBuilder, basket, cc);
@Override
protected ModelAndView handleSslRequest(HttpServletRequest request,
HttpServletResponse response, ModelBuilder modelBuilder)
throws Exception {
if( isNotAuthorizised(request, modelBuilder)){
return handleLogin(request, response, modelBuilder);
}
SessionContext context =
new SessionContext(modelBuilder, paymentRuleComposer);
ModelAndView escapeModelAndView =
getMavIfStateIsNotValidForCheckout(context);
if(escapeModelAndView != null) {
return escapeModelAndView;
}
context.disableDesiredDeliveryDate();
CountryCode cc =
catalogService.getCountryCodeByIsoCode2(basket.getCountryToDeliver());
logInfos(basket);
putDataToModel(modelBuilder, basket, cc);
@Override
protected ModelAndView handleSslRequest(HttpServletRequest request,
HttpServletResponse response, ModelBuilder modelBuilder)
throws Exception {
if( isNotAuthorizised(request, modelBuilder)){
return handleLogin(request, response, modelBuilder);
}
SessionContext context =
new SessionContext(modelBuilder, paymentRuleComposer);
ModelAndView escapeModelAndView =
getMavIfStateIsNotValidForCheckout(basket, paymentRule, session);
if(escapeModelAndView != null) {
return escapeModelAndView;
}
context.disableDesiredDeliveryDate();
CountryCode cc =
catalogService.getCountryCodeByIsoCode2(basket.getCountryToDeliver());
logInfos(basket);
putDataToModel(modelBuilder, basket, cc);
getMavIfStateIsNot-
ValidForCheckout(context)
private ModelAndView getMavIfStateIsNotValidForCheckout(
SessionContext context) {
if( !context.getBasket().hasLineItems() ) {
return new ModelAndView(redirectCartView);
}
if(!context.getBasket().hasInvoiceAddress()) {
return new ModelAndView(redirectInvoiceView);
}
if(!context.getBasket().isValidForCheckout(paymentRule)) {
if( !context.getBasket().isFurnitureOk()
|| !context.getBasket().isPaymentMethodAllowed(
context.getPaymentRule())
|| !context.getBasket().isPaymentMethodValid()) {
return new ModelAndView(redirectInvoiceAndDeliveryView);
}
return new ModelAndView(redirectInvoiceView);
}
return null;
}
private ModelAndView getMavIfStateIsNotValidForCheckout(
SessionContext context) {
if( !context.getBasket().hasLineItems() ) {
return new ModelAndView(redirectCartView);
}
if(!context.getBasket().hasInvoiceAddress()) {
return new ModelAndView(redirectInvoiceView);
}
if(!context.getBasket().isValidForCheckout(paymentRule)) {
if( !context.getBasket().isFurnitureOk()
|| !context.getBasket().isPaymentMethodAllowed(
context.getPaymentRule())
|| !context.getBasket().isPaymentMethodValid()) {
return new ModelAndView(redirectInvoiceAndDeliveryView);
}
return new ModelAndView(redirectInvoiceView);
}
return null;
}
private ModelAndView getMavIfStateIsNotValidForCheckout(
SessionContext context) {
if( !context.getBasket().hasLineItems() ) {
return new ModelAndView(redirectCartView);
}
if(!context.getBasket().hasInvoiceAddress()) {
return new ModelAndView(redirectInvoiceView);
}
if(!context.getBasket().isValidForCheckout(paymentRule)) {
if( !context.getBasket().isFurnitureOk()
|| !context.getBasket().isPaymentMethodAllowed(
context.getPaymentRule())
|| !context.getBasket().isPaymentMethodValid()) {
return new ModelAndView(redirectInvoiceAndDeliveryView);
}
return new ModelAndView(redirectInvoiceView);
}
return null;
}
!context.get
!context.get
context.get
!context.get
public CheckOutState(Basket basket, PaymentRule rule) {
this.basket = basket;
this.rule = rule;
}
public CheckOutStep nextStep() {
if (basket.isEmpty())
return CART;
if (basket.isValidForCheckout(rule))
return LAST_CHECK;
if ((!basket.hasInvoiceAddress())
|| (basket.isFurnitureOk()
&& basket.isPaymentMethodAllowed(rule)
&& basket.isPaymentMethodValid()))
return INVOICE_ADDRESS;
return PAYMENT_AND_DELIVERY;
}
public CheckOutState(Basket basket, PaymentRule rule) {
this.basket = basket;
this.rule = rule;
}
public CheckOutStep nextStep() {
if (basket.isEmpty())
return CART;
if (basket.isValidForCheckout(rule))
return LAST_CHECK;
if ((!basket.hasInvoiceAddress())
|| (basket.isFurnitureOk()
&& basket.isPaymentMethodAllowed(rule)
&& basket.isPaymentMethodValid()))
return INVOICE_ADDRESS;
return PAYMENT_AND_DELIVERY;
}
CheckOutState(
Basket basket,
PaymentRule rule)
private ModelAndView handleOrderRequest(HttpServletRequest request,
HttpServletResponse response, ModelBuilder modelBuilder)
throws Exception {
SessionContext context =
new SessionContext(modelBuilder, paymentRuleComposer);
CheckOutState state =
new CheckOutState(
context.getBasket(),
context.getPaymentRule());
if (!state.isValidForCheckOut())
return modelAndViewFor(state.nextStep());
context.disableDesiredDeliveryDate();
private ModelAndView handleOrderRequest(HttpServletRequest request,
HttpServletResponse response, ModelBuilder modelBuilder)
throws Exception {
SessionContext context =
new SessionContext(modelBuilder, paymentRuleComposer);
CheckOutState state =
new CheckOutState(
context.getBasket(),
context.getPaymentRule());
if (!state.isValidForCheckOut())
return modelAndViewFor(state.nextStep());
context.disableDesiredDeliveryDate();
private ModelAndView handleOrderRequest(HttpServletRequest request,
HttpServletResponse response, ModelBuilder modelBuilder)
throws Exception {
SessionContext context =
new SessionContext(modelBuilder, paymentRuleComposer);
CheckOutState state =
new CheckOutState(
context.getBasket(),
context.getPaymentRule());
if (!state.isValidForCheckOut())
return modelAndViewFor(state.nextStep());
context.disableDesiredDeliveryDate();
state =
new CheckOutState(
context.getBasket(),
context.getPaymentRule());
protected ModelAndView handleSslRequest(HttpServletRequest request,
HttpServletResponse response, ModelBuilder modelBuilder)
throws Exception {
if( isNotAuthorizised(request, modelBuilder)){
return handleLogin(request, response, modelBuilder);
}
Session session = modelBuilder.getSession();
Basket basket = modelBuilder.getBasket();
Customer customer = modelBuilder.getCustomer();
PaymentRule paymentRule =
(PaymentRule)paymentRuleComposer.compose(basket, customer);
ModelAndView escapeModelAndView =
getMavIfStateIsNotValidForCheckout(basket, paymentRule, session);
if(escapeModelAndView != null) {
return escapeModelAndView;
}
disableDesiredDeliveryDate(session, basket, modelBuilder);
private ModelAndView handleOrderRequest(HttpServletRequest request,
HttpServletResponse response, ModelBuilder modelBuilder)
throws Exception {
SessionContext context =
new SessionContext(modelBuilder, paymentRuleComposer);
CheckOutState state =
new CheckOutState(
context.getBasket(),
context.getPaymentRule());
if (!state.isValidForCheckOut())
return modelAndViewFor(state.nextStep());
context.disableDesiredDeliveryDate();
ER
GO
OBJEKT
≠DING
OBJEKT = DING
OBJEKT ≠ DING
SEIHEB
AMME
OBJEKTE
ERKENNEN
OBJEKTE
GEBÄREN
OBJEKTE
PFLEGEN
OBJEKT
≠DING
SEIHEB
AMME
EN
DE
CREDITS
von tangaroo
von Axel Pfaender
von binaryCoco
von tilaneseven
von spiffie
von static416
von autowitch
von Daveybot
von woodleywonderworks
von Tim Morgan
von Tim Morgan
von Tim Morgan
von nickwheeleroz
von otisarchives1
von *ejk*
von cuulongden
von Laure Wayaffe
von mab @ flickr
von Kazze
von aesop
von SteveMcN
von canonsnapper
von bies

More Related Content

What's hot

Windows Store app using XAML and C#: Enterprise Product Development
Windows Store app using XAML and C#: Enterprise Product Development Windows Store app using XAML and C#: Enterprise Product Development
Windows Store app using XAML and C#: Enterprise Product Development
Mahmoud Hamed Mahmoud
 
Webit expo Standard Product
Webit expo Standard ProductWebit expo Standard Product
Webit expo Standard Product
Boji Ditcheva
 
Why SOLID matters - even for JavaScript
Why SOLID matters - even for JavaScriptWhy SOLID matters - even for JavaScript
Why SOLID matters - even for JavaScript
martinlippert
 

What's hot (19)

Modern Android Architecture
Modern Android ArchitectureModern Android Architecture
Modern Android Architecture
 
Lessons Learned: Migrating Tests to Selenium v2
Lessons Learned: Migrating Tests to Selenium v2Lessons Learned: Migrating Tests to Selenium v2
Lessons Learned: Migrating Tests to Selenium v2
 
Checkout in Magento 2 by Max Pronko
Checkout in Magento 2 by Max PronkoCheckout in Magento 2 by Max Pronko
Checkout in Magento 2 by Max Pronko
 
Windows Store app using XAML and C#: Enterprise Product Development
Windows Store app using XAML and C#: Enterprise Product Development Windows Store app using XAML and C#: Enterprise Product Development
Windows Store app using XAML and C#: Enterprise Product Development
 
ASP.NET MVC 3.0 Validation
ASP.NET MVC 3.0 ValidationASP.NET MVC 3.0 Validation
ASP.NET MVC 3.0 Validation
 
Rolebased security
Rolebased securityRolebased security
Rolebased security
 
droidQuery: The Android port of jQuery
droidQuery: The Android port of jQuerydroidQuery: The Android port of jQuery
droidQuery: The Android port of jQuery
 
Taming forms with React
Taming forms with ReactTaming forms with React
Taming forms with React
 
I os 03
I os 03I os 03
I os 03
 
How to integrate paytm payment gateway using react js in seven easy steps
How to integrate paytm payment gateway using react js in seven easy stepsHow to integrate paytm payment gateway using react js in seven easy steps
How to integrate paytm payment gateway using react js in seven easy steps
 
MongoDB.local Atlanta: Introduction to Serverless MongoDB
MongoDB.local Atlanta: Introduction to Serverless MongoDBMongoDB.local Atlanta: Introduction to Serverless MongoDB
MongoDB.local Atlanta: Introduction to Serverless MongoDB
 
Webit expo Standard Product
Webit expo Standard ProductWebit expo Standard Product
Webit expo Standard Product
 
course js day 3
course js day 3course js day 3
course js day 3
 
Manipulating Magento - Mage Titans Italy 2018
Manipulating Magento - Mage Titans Italy 2018Manipulating Magento - Mage Titans Italy 2018
Manipulating Magento - Mage Titans Italy 2018
 
Braintree and our new v.zero SDK for iOS
Braintree and our new v.zero SDK for iOSBraintree and our new v.zero SDK for iOS
Braintree and our new v.zero SDK for iOS
 
Design Patterns for Tablets and Smartphones
Design Patterns for Tablets and SmartphonesDesign Patterns for Tablets and Smartphones
Design Patterns for Tablets and Smartphones
 
Why SOLID matters - even for JavaScript
Why SOLID matters - even for JavaScriptWhy SOLID matters - even for JavaScript
Why SOLID matters - even for JavaScript
 
Bare-knuckle web development
Bare-knuckle web developmentBare-knuckle web development
Bare-knuckle web development
 
Symfony2. Form and Validation
Symfony2. Form and ValidationSymfony2. Form and Validation
Symfony2. Form and Validation
 

Viewers also liked

интернет коммуникации в привлечении пациентов февраль 2010
интернет коммуникации в привлечении пациентов февраль 2010интернет коммуникации в привлечении пациентов февраль 2010
интернет коммуникации в привлечении пациентов февраль 2010
Andrey Enkin
 
Portfolio alignment with business intentions
Portfolio alignment with business intentionsPortfolio alignment with business intentions
Portfolio alignment with business intentions
Luis Becerra
 
Применение автоматизированных систем управления в медицине
Применение автоматизированных систем управления в медицинеПрименение автоматизированных систем управления в медицине
Применение автоматизированных систем управления в медицине
Andrey Enkin
 

Viewers also liked (12)

Agile Softwareentwicklung nach Winston Royce
Agile Softwareentwicklung nach Winston RoyceAgile Softwareentwicklung nach Winston Royce
Agile Softwareentwicklung nach Winston Royce
 
Das agile Ich (extended version)
Das agile Ich (extended version)Das agile Ich (extended version)
Das agile Ich (extended version)
 
Skalierungsprobleme im eCommerce
Skalierungsprobleme im eCommerceSkalierungsprobleme im eCommerce
Skalierungsprobleme im eCommerce
 
ConwaysLawRevisited
ConwaysLawRevisitedConwaysLawRevisited
ConwaysLawRevisited
 
интернет коммуникации в привлечении пациентов февраль 2010
интернет коммуникации в привлечении пациентов февраль 2010интернет коммуникации в привлечении пациентов февраль 2010
интернет коммуникации в привлечении пациентов февраль 2010
 
Piloter la DSI
Piloter la DSIPiloter la DSI
Piloter la DSI
 
Jejak Tuhan
Jejak TuhanJejak Tuhan
Jejak Tuhan
 
Portfolio alignment with business intentions
Portfolio alignment with business intentionsPortfolio alignment with business intentions
Portfolio alignment with business intentions
 
Der pathologische Programmierer
Der pathologische ProgrammiererDer pathologische Programmierer
Der pathologische Programmierer
 
The Island Of Samoa
The Island Of Samoa The Island Of Samoa
The Island Of Samoa
 
Применение автоматизированных систем управления в медицине
Применение автоматизированных систем управления в медицинеПрименение автоматизированных систем управления в медицине
Применение автоматизированных систем управления в медицине
 
Sound follows function // Sound communication and the relevance of timbre.
Sound follows function // Sound communication and the relevance of timbre.Sound follows function // Sound communication and the relevance of timbre.
Sound follows function // Sound communication and the relevance of timbre.
 

Similar to Muster in Webcontrollern

Version1.0 StartHTML000000232 EndHTML000065057 StartFragment0000.docx
Version1.0 StartHTML000000232 EndHTML000065057 StartFragment0000.docxVersion1.0 StartHTML000000232 EndHTML000065057 StartFragment0000.docx
Version1.0 StartHTML000000232 EndHTML000065057 StartFragment0000.docx
tienboileau
 
Jasigsakai12 columbia-customizes-cas
Jasigsakai12 columbia-customizes-casJasigsakai12 columbia-customizes-cas
Jasigsakai12 columbia-customizes-cas
ellentuck
 
Dont call me cache april 17
Dont call me cache april 17Dont call me cache april 17
Dont call me cache april 17
Nati Shalom
 

Similar to Muster in Webcontrollern (20)

Building an End-to-End AngularJS Application
Building an End-to-End AngularJS ApplicationBuilding an End-to-End AngularJS Application
Building an End-to-End AngularJS Application
 
Building the an End-to-End ASP.NET MVC 4, Entity Framework, HTML5, jQuery app...
Building the an End-to-End ASP.NET MVC 4, Entity Framework, HTML5, jQuery app...Building the an End-to-End ASP.NET MVC 4, Entity Framework, HTML5, jQuery app...
Building the an End-to-End ASP.NET MVC 4, Entity Framework, HTML5, jQuery app...
 
HTML5 Gaming Payment Platforms
HTML5 Gaming Payment PlatformsHTML5 Gaming Payment Platforms
HTML5 Gaming Payment Platforms
 
Dependency injection - the right way
Dependency injection - the right wayDependency injection - the right way
Dependency injection - the right way
 
Version1.0 StartHTML000000232 EndHTML000065057 StartFragment0000.docx
Version1.0 StartHTML000000232 EndHTML000065057 StartFragment0000.docxVersion1.0 StartHTML000000232 EndHTML000065057 StartFragment0000.docx
Version1.0 StartHTML000000232 EndHTML000065057 StartFragment0000.docx
 
Jasigsakai12 columbia-customizes-cas
Jasigsakai12 columbia-customizes-casJasigsakai12 columbia-customizes-cas
Jasigsakai12 columbia-customizes-cas
 
MVI - Managing State The Kotlin Way
MVI - Managing State The Kotlin WayMVI - Managing State The Kotlin Way
MVI - Managing State The Kotlin Way
 
Mad Max is back, plus the rest of our new reviews and notable screenings
Mad Max is back, plus the rest of our new reviews and notable screeningsMad Max is back, plus the rest of our new reviews and notable screenings
Mad Max is back, plus the rest of our new reviews and notable screenings
 
GigaSpaces XAP - Don't Call Me Cache!
GigaSpaces XAP - Don't Call Me Cache!GigaSpaces XAP - Don't Call Me Cache!
GigaSpaces XAP - Don't Call Me Cache!
 
Authorization iii
Authorization iiiAuthorization iii
Authorization iii
 
(PHPers Wrocław #5) How to write valuable unit test?
(PHPers Wrocław #5) How to write valuable unit test?(PHPers Wrocław #5) How to write valuable unit test?
(PHPers Wrocław #5) How to write valuable unit test?
 
Tinkerbelles return home from their Guinness world-record attempt on Sunday
Tinkerbelles return home from their Guinness world-record attempt on SundayTinkerbelles return home from their Guinness world-record attempt on Sunday
Tinkerbelles return home from their Guinness world-record attempt on Sunday
 
Rushed to Victory Gardens' stage, An Issue of Blood is more effusion than play
Rushed to Victory Gardens' stage, An Issue of Blood is more effusion than playRushed to Victory Gardens' stage, An Issue of Blood is more effusion than play
Rushed to Victory Gardens' stage, An Issue of Blood is more effusion than play
 
Introduction to Zend Framework web services
Introduction to Zend Framework web servicesIntroduction to Zend Framework web services
Introduction to Zend Framework web services
 
Mastering Oracle ADF Bindings
Mastering Oracle ADF BindingsMastering Oracle ADF Bindings
Mastering Oracle ADF Bindings
 
Dont call me cache java version
Dont call me cache java versionDont call me cache java version
Dont call me cache java version
 
Dont call me cache april 17
Dont call me cache april 17Dont call me cache april 17
Dont call me cache april 17
 
[22]Efficient and Testable MVVM pattern
[22]Efficient and Testable MVVM pattern[22]Efficient and Testable MVVM pattern
[22]Efficient and Testable MVVM pattern
 
Discontinuing Reader Matches
Discontinuing Reader MatchesDiscontinuing Reader Matches
Discontinuing Reader Matches
 
Angular 2.0 forms
Angular 2.0 formsAngular 2.0 forms
Angular 2.0 forms
 

More from Jens Himmelreich

More from Jens Himmelreich (11)

Auto, Maschine, Buch
Auto, Maschine, BuchAuto, Maschine, Buch
Auto, Maschine, Buch
 
kundenorientierte vertikalisierung
kundenorientierte vertikalisierungkundenorientierte vertikalisierung
kundenorientierte vertikalisierung
 
Software-Hygiene
Software-HygieneSoftware-Hygiene
Software-Hygiene
 
Schnittmuster
SchnittmusterSchnittmuster
Schnittmuster
 
Der pathologische Programmierer (revised edition)
Der pathologische Programmierer (revised edition)Der pathologische Programmierer (revised edition)
Der pathologische Programmierer (revised edition)
 
Lean Startup
Lean StartupLean Startup
Lean Startup
 
Das Leben als Projekt
Das Leben als ProjektDas Leben als Projekt
Das Leben als Projekt
 
Agilität und Mikropolitik
Agilität und MikropolitikAgilität und Mikropolitik
Agilität und Mikropolitik
 
Fremde Domänen verstehen - eine philosophische Randnotiz
Fremde Domänen verstehen - eine philosophische RandnotizFremde Domänen verstehen - eine philosophische Randnotiz
Fremde Domänen verstehen - eine philosophische Randnotiz
 
Die Dinge richtig tun - die richtigen Dinge tun
Die Dinge richtig tun - die richtigen Dinge tunDie Dinge richtig tun - die richtigen Dinge tun
Die Dinge richtig tun - die richtigen Dinge tun
 
Das agile Ich
Das agile IchDas agile Ich
Das agile Ich
 

Recently uploaded

Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
vu2urc
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
giselly40
 

Recently uploaded (20)

A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
Evaluating the top large language models.pdf
Evaluating the top large language models.pdfEvaluating the top large language models.pdf
Evaluating the top large language models.pdf
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
 
GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdf
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
 

Muster in Webcontrollern

  • 10.
  • 13. CONTROLLER public static void main(String[] arguments) { if(basket.isPaymentCreditCard()) { if( customerService.isCreditCardLock(bask log.info("CreditCard isLocked"); return new ModelAndView(urlComposer.g } CreditCardOrder order = creditCardOrder if(isBankAuthenticationResponse(request)) log.debug("Bank response request with credtitCartService.finalizeAuthentifi } else { AuthentificationIntermediateResponse = creditCardService.beginAuthenti urlComposer.getSslUrl("/Bes if (authResponse.needs5dsecureAuthent log.debug("CreditCard needs 5dsec return show5dSecurePage(authRespo } } if (creditCardService.isAuthenticationErr log.info("creditCardService.isAuthent return new ModelAndView(urlComposer.g } else { log.debug("creditCardService without creditCardService.authorizePayment(ca
  • 18.
  • 20. if(basket.isPaymentCreditCard()) { if( customerService.isCreditCardLock(basket.getCardNumber()) ) { log.info("CreditCard isLocked"); return new ModelAndView(urlComposer.getSslRedirectUrl("/Zahlungs } CreditCardOrder creditCardOrder = creditCardOrderFactory.newPoseidonOrder( if(isBankAuthenticationResponse(request)) { log.debug("Bank response request with: CREDITCARD_5dSECURE_BANK_ creditCardService.finalizeAuthentification(get5dSecureBankRespon } else { AuthentificationIntermediateResponse authResponse = poseidonService.beginAuthentification(poseidonOrder, urlComposer.getSslUrl("/Bestell.html?submit1 if (authResponse.needs5dsecureAuthentication()) { log.debug("CreditCard needs 5dsecureAuthentication!"); return show5dSecurePage(authResponse); } } if (creditCardService.isAuthenticationError(creditCardOrder)) { log.info("creditCardService.isAuthenticationError"); return new ModelAndView(urlComposer.getSslRedirectUrl("/Zahl } else { log.debug("creditCardService without AuthenticationError"); creditCardService.authorizePayment(creditCardOrder); if (creditCardService.isSuccessfullAuthorized(creditCardOrder)) log.debug("creditCardService.isSuccessfullAuthorized"); basket.getPaymentMethod().setCardNumber(creditCardOrder.getA
  • 23. CLEAN
  • 25. 1
  • 26. 2
  • 27. 3
  • 28. 4
  • 30. 6
  • 31. 7
  • 33. CLEAN
  • 36. @Override protected ModelAndView handleSslRequest(HttpServletRequest request, HttpServletResponse response, ModelBuilder modelBuilder) throws Exception { if( isNotAuthorizised(request, modelBuilder)){ return handleLogin(request, response, modelBuilder); } Session session = modelBuilder.getSession(); Basket basket = modelBuilder.getBasket(); Customer customer = modelBuilder.getCustomer(); PaymentRule paymentRule = (PaymentRule)paymentRuleComposer.compose(basket, customer); ModelAndView escapeModelAndView = getMavIfStateIsNotValidForCheckout(basket, paymentRule, session); if(escapeModelAndView != null) { return escapeModelAndView; } disableDesiredDeliveryDate(session, basket, modelBuilder); CountryCode cc = catalogService.getCountryCodeByIsoCode2(basket.getCountryToDeliver()); logInfos(basket); putDataToModel(modelBuilder, basket, cc);
  • 37. @Override protected ModelAndView handleSslRequest(HttpServletRequest request, HttpServletResponse response, ModelBuilder modelBuilder) throws Exception { if( isNotAuthorizised(request, modelBuilder)){ return handleLogin(request, response, modelBuilder); } Session session = modelBuilder.getSession(); Basket basket = modelBuilder.getBasket(); Customer customer = modelBuilder.getCustomer(); PaymentRule paymentRule = paymentRuleComposer .compose(basket, customer); ModelAndView escapeModelAndView = getMavIfStateIsNotValidForCheckout(basket, paymentRule, session); if(escapeModelAndView != null) { return escapeModelAndView; } disableDesiredDeliveryDate(session, basket, modelBuilder); CountryCode cc = catalogService.getCountryCodeByIsoCode2(basket.getCountryToDeliver()); logInfos(basket); putDataToModel(modelBuilder, basket, cc);
  • 38. @Override protected ModelAndView handleSslRequest(HttpServletRequest request, HttpServletResponse response, ModelBuilder modelBuilder) throws Exception { if( isNotAuthorizised(request, modelBuilder)){ return handleLogin(request, response, modelBuilder); } Session session = modelBuilder.getSession(); Basket basket = modelBuilder.getBasket(); Customer customer = modelBuilder.getCustomer(); PaymentRule paymentRule = paymentRuleComposer .compose(basket, customer); ModelAndView escapeModelAndView = getMavIfStateIsNotValidForCheckout(basket, paymentRule, session); if(escapeModelAndView != null) { return escapeModelAndView; } disableDesiredDeliveryDate(session, basket, modelBuilder); CountryCode cc = catalogService.getCountryCodeByIsoCode2(basket.getCountryToDeliver()); logInfos(basket); putDataToModel(modelBuilder, basket, cc); Session session = modelBuilde Basket basket = modelBuilder. Customer customer = modelBuil PaymentRule paymentRule = pay
  • 39. @Override protected ModelAndView handleSslRequest(HttpServletRequest request, HttpServletResponse response, ModelBuilder modelBuilder) throws Exception { if( isNotAuthorizised(request, modelBuilder)){ return handleLogin(request, response, modelBuilder); } Session session = modelBuilder.getSession(); Basket basket = modelBuilder.getBasket(); Customer customer = modelBuilder.getCustomer(); PaymentRule paymentRule = (PaymentRule)paymentRuleComposer.compose(basket, customer); ModelAndView escapeModelAndView = getMavIfStateIsNotValidForCheckout(basket, paymentRule, session); if(escapeModelAndView != null) { return escapeModelAndView; } disableDesiredDeliveryDate(session, basket, modelBuilder); CountryCode cc = catalogService.getCountryCodeByIsoCode2(basket.getCountryToDeliver()); logInfos(basket); putDataToModel(modelBuilder, basket, cc);
  • 40. @Override protected ModelAndView handleSslRequest(HttpServletRequest request, HttpServletResponse response, ModelBuilder modelBuilder) throws Exception { if( isNotAuthorizised(request, modelBuilder)){ return handleLogin(request, response, modelBuilder); } Session session = modelBuilder.getSession(); Basket basket = modelBuilder.getBasket(); Customer customer = modelBuilder.getCustomer(); PaymentRule paymentRule = (PaymentRule)paymentRuleComposer.compose(basket, customer); ModelAndView escapeModelAndView = getMavIfStateIsNotValidForCheckout(basket, paymentRule, session); if(escapeModelAndView != null) { return escapeModelAndView; } disableDesiredDeliveryDate(session, basket, modelBuilder); CountryCode cc = catalogService.getCountryCodeByIsoCode2(basket.getCountryToDeliver()); logInfos(basket); putDataToModel(modelBuilder, basket, cc);
  • 41. @Override protected ModelAndView handleSslRequest(HttpServletRequest request, HttpServletResponse response, ModelBuilder modelBuilder) throws Exception { if( isNotAuthorizised(request, modelBuilder)){ return handleLogin(request, response, modelBuilder); } Session session = modelBuilder.getSession(); Basket basket = modelBuilder.getBasket(); Customer customer = modelBuilder.getCustomer(); PaymentRule paymentRule = (PaymentRule)paymentRuleComposer.compose(basket, customer); ModelAndView escapeModelAndView = getMavIfStateIsNotValidForCheckout(basket, paymentRule, session); if(escapeModelAndView != null) { return escapeModelAndView; } disableDesiredDeliveryDate(session, basket, modelBuilder); CountryCode cc = catalogService.getCountryCodeByIsoCode2(basket.getCountryToDeliver()); logInfos(basket); putDataToModel(modelBuilder, basket, cc); (session, basket, modelBuilder)
  • 42. public class SessionContext { private ModelBuilder modelBuilder; private PaymentRule paymentRule; private boolean needsUpdate; public SessionContext( ModelBuilder modelBuilder, RuleComposer rulecomposer) { this.needsUpdate = false; this.modelBuilder = modelBuilder; this.paymentRule = createPaymentRule(rulecomposer); } // ... }
  • 43. public class SessionContext { private ModelBuilder modelBuilder; private PaymentRule paymentRule; private boolean needsUpdate; public SessionContext( ModelBuilder modelBuilder, RuleComposer rulecomposer) { this.needsUpdate = false; this.modelBuilder = modelBuilder; this.paymentRule = createPaymentRule(rulecomposer); } // ... }
  • 44. public class SessionContext { private ModelBuilder modelBuilder; private PaymentRule paymentRule; private boolean needsUpdate; public SessionContext( ModelBuilder modelBuilder, RuleComposer rulecomposer) { this.needsUpdate = false; this.modelBuilder = modelBuilder; this.paymentRule = createPaymentRule(rulecomposer); } // ... } SessionContext( ModelBuilder modelBuilder, RuleComposer rulecomposer)
  • 45. @Override protected ModelAndView handleSslRequest(HttpServletRequest request, HttpServletResponse response, ModelBuilder modelBuilder) throws Exception { if( isNotAuthorizised(request, modelBuilder)){ return handleLogin(request, response, modelBuilder); } Session session = modelBuilder.getSession(); Basket basket = modelBuilder.getBasket(); Customer customer = modelBuilder.getCustomer(); PaymentRule paymentRule = (PaymentRule)paymentRuleComposer.compose(basket, customer); ModelAndView escapeModelAndView = getMavIfStateIsNotValidForCheckout(basket, paymentRule, session); if(escapeModelAndView != null) { return escapeModelAndView; } disableDesiredDeliveryDate(session, basket, modelBuilder); CountryCode cc = catalogService.getCountryCodeByIsoCode2(basket.getCountryToDeliver()); logInfos(basket); putDataToModel(modelBuilder, basket, cc);
  • 46. @Override protected ModelAndView handleSslRequest(HttpServletRequest request, HttpServletResponse response, ModelBuilder modelBuilder) throws Exception { if( isNotAuthorizised(request, modelBuilder)){ return handleLogin(request, response, modelBuilder); } Session session = modelBuilder.getSession(); Basket basket = modelBuilder.getBasket(); Customer customer = modelBuilder.getCustomer(); PaymentRule paymentRule = (PaymentRule)paymentRuleComposer.compose(basket, customer); ModelAndView escapeModelAndView = getMavIfStateIsNotValidForCheckout(basket, paymentRule, session); if(escapeModelAndView != null) { return escapeModelAndView; } disableDesiredDeliveryDate(session, basket, modelBuilder); CountryCode cc = catalogService.getCountryCodeByIsoCode2(basket.getCountryToDeliver()); logInfos(basket); putDataToModel(modelBuilder, basket, cc);
  • 47. @Override protected ModelAndView handleSslRequest(HttpServletRequest request, HttpServletResponse response, ModelBuilder modelBuilder) throws Exception { if( isNotAuthorizised(request, modelBuilder)){ return handleLogin(request, response, modelBuilder); } SessionContext context = new SessionContext( modelBuilder, paymentRuleComposer); ModelAndView escapeModelAndView = getMavIfStateIsNotValidForCheckout(context); if(escapeModelAndView != null) { return escapeModelAndView; } disableDesiredDeliveryDate(context); CountryCode cc = catalogService.getCountryCodeByIsoCode2(basket.getCountryToDeliver()); logInfos(basket); putDataToModel(modelBuilder, basket, cc);
  • 48. @Override protected ModelAndView handleSslRequest(HttpServletRequest request, HttpServletResponse response, ModelBuilder modelBuilder) throws Exception { if( isNotAuthorizised(request, modelBuilder)){ return handleLogin(request, response, modelBuilder); } SessionContext context = new SessionContext(modelBuilder, paymentRuleComposer); ModelAndView escapeModelAndView = getMavIfStateIsNotValidForCheckout(basket, paymentRule, session); if(escapeModelAndView != null) { return escapeModelAndView; } disableDesiredDeliveryDate(context); CountryCode cc = catalogService.getCountryCodeByIsoCode2(basket.getCountryToDeliver()); logInfos(basket); putDataToModel(modelBuilder, basket, cc); SessionContext context = new SessionContext( modelBuilder, paymentRuleComposer);
  • 49. @Override protected ModelAndView handleSslRequest(HttpServletRequest request, HttpServletResponse response, ModelBuilder modelBuilder) throws Exception { if( isNotAuthorizised(request, modelBuilder)){ return handleLogin(request, response, modelBuilder); } SessionContext context = new SessionContext(modelBuilder, paymentRuleComposer); ModelAndView escapeModelAndView = getMavIfStateIsNotValidForCheckout(context); if(escapeModelAndView != null) { return escapeModelAndView; } disableDesiredDeliveryDate(context); CountryCode cc = catalogService.getCountryCodeByIsoCode2(basket.getCountryToDeliver()); logInfos(basket); putDataToModel(modelBuilder, basket, cc); disableDesired- DeliveryDate(context);
  • 51. @Override protected ModelAndView handleSslRequest(HttpServletRequest request, HttpServletResponse response, ModelBuilder modelBuilder) throws Exception { if( isNotAuthorizised(request, modelBuilder)){ return handleLogin(request, response, modelBuilder); } SessionContext context = new SessionContext(modelBuilder, paymentRuleComposer); ModelAndView escapeModelAndView = getMavIfStateIsNotValidForCheckout(context); if(escapeModelAndView != null) { return escapeModelAndView; } disableDesiredDeliveryDate(context); CountryCode cc = catalogService.getCountryCodeByIsoCode2(basket.getCountryToDeliver()); logInfos(basket); putDataToModel(modelBuilder, basket, cc);
  • 52. @Override protected ModelAndView handleSslRequest(HttpServletRequest request, HttpServletResponse response, ModelBuilder modelBuilder) throws Exception { if( isNotAuthorizised(request, modelBuilder)){ return handleLogin(request, response, modelBuilder); } SessionContext context = new SessionContext(modelBuilder, paymentRuleComposer); ModelAndView escapeModelAndView = getMavIfStateIsNotValidForCheckout(context); if(escapeModelAndView != null) { return escapeModelAndView; } context.disableDesiredDeliveryDate(); CountryCode cc = catalogService.getCountryCodeByIsoCode2(basket.getCountryToDeliver()); logInfos(basket); putDataToModel(modelBuilder, basket, cc);
  • 53. @Override protected ModelAndView handleSslRequest(HttpServletRequest request, HttpServletResponse response, ModelBuilder modelBuilder) throws Exception { if( isNotAuthorizised(request, modelBuilder)){ return handleLogin(request, response, modelBuilder); } SessionContext context = new SessionContext(modelBuilder, paymentRuleComposer); ModelAndView escapeModelAndView = getMavIfStateIsNotValidForCheckout(context); if(escapeModelAndView != null) { return escapeModelAndView; } context.setDesiredDeliveryDate(); CountryCode cc = catalogService.getCountryCodeByIsoCode2(basket.getCountryToDeliver()); logInfos(basket); putDataToModel(modelBuilder, basket, cc); context. disableDesiredDeliveryDate();
  • 55. @Override protected ModelAndView handleSslRequest(HttpServletRequest request, HttpServletResponse response, ModelBuilder modelBuilder) throws Exception { if( isNotAuthorizised(request, modelBuilder)){ return handleLogin(request, response, modelBuilder); } SessionContext context = new SessionContext(modelBuilder, paymentRuleComposer); ModelAndView escapeModelAndView = getMavIfStateIsNotValidForCheckout(context); if(escapeModelAndView != null) { return escapeModelAndView; } context.disableDesiredDeliveryDate(); CountryCode cc = catalogService.getCountryCodeByIsoCode2(basket.getCountryToDeliver()); logInfos(basket); putDataToModel(modelBuilder, basket, cc);
  • 56. @Override protected ModelAndView handleSslRequest(HttpServletRequest request, HttpServletResponse response, ModelBuilder modelBuilder) throws Exception { if( isNotAuthorizised(request, modelBuilder)){ return handleLogin(request, response, modelBuilder); } SessionContext context = new SessionContext(modelBuilder, paymentRuleComposer); ModelAndView escapeModelAndView = getMavIfStateIsNotValidForCheckout(context); if(escapeModelAndView != null) { return escapeModelAndView; } context.disableDesiredDeliveryDate(); CountryCode cc = catalogService.getCountryCodeByIsoCode2(basket.getCountryToDeliver()); logInfos(basket); putDataToModel(modelBuilder, basket, cc);
  • 57. @Override protected ModelAndView handleSslRequest(HttpServletRequest request, HttpServletResponse response, ModelBuilder modelBuilder) throws Exception { if( isNotAuthorizised(request, modelBuilder)){ return handleLogin(request, response, modelBuilder); } SessionContext context = new SessionContext(modelBuilder, paymentRuleComposer); ModelAndView escapeModelAndView = getMavIfStateIsNotValidForCheckout(basket, paymentRule, session); if(escapeModelAndView != null) { return escapeModelAndView; } context.disableDesiredDeliveryDate(); CountryCode cc = catalogService.getCountryCodeByIsoCode2(basket.getCountryToDeliver()); logInfos(basket); putDataToModel(modelBuilder, basket, cc); getMavIfStateIsNot- ValidForCheckout(context)
  • 58. private ModelAndView getMavIfStateIsNotValidForCheckout( SessionContext context) { if( !context.getBasket().hasLineItems() ) { return new ModelAndView(redirectCartView); } if(!context.getBasket().hasInvoiceAddress()) { return new ModelAndView(redirectInvoiceView); } if(!context.getBasket().isValidForCheckout(paymentRule)) { if( !context.getBasket().isFurnitureOk() || !context.getBasket().isPaymentMethodAllowed( context.getPaymentRule()) || !context.getBasket().isPaymentMethodValid()) { return new ModelAndView(redirectInvoiceAndDeliveryView); } return new ModelAndView(redirectInvoiceView); } return null; }
  • 59. private ModelAndView getMavIfStateIsNotValidForCheckout( SessionContext context) { if( !context.getBasket().hasLineItems() ) { return new ModelAndView(redirectCartView); } if(!context.getBasket().hasInvoiceAddress()) { return new ModelAndView(redirectInvoiceView); } if(!context.getBasket().isValidForCheckout(paymentRule)) { if( !context.getBasket().isFurnitureOk() || !context.getBasket().isPaymentMethodAllowed( context.getPaymentRule()) || !context.getBasket().isPaymentMethodValid()) { return new ModelAndView(redirectInvoiceAndDeliveryView); } return new ModelAndView(redirectInvoiceView); } return null; }
  • 60. private ModelAndView getMavIfStateIsNotValidForCheckout( SessionContext context) { if( !context.getBasket().hasLineItems() ) { return new ModelAndView(redirectCartView); } if(!context.getBasket().hasInvoiceAddress()) { return new ModelAndView(redirectInvoiceView); } if(!context.getBasket().isValidForCheckout(paymentRule)) { if( !context.getBasket().isFurnitureOk() || !context.getBasket().isPaymentMethodAllowed( context.getPaymentRule()) || !context.getBasket().isPaymentMethodValid()) { return new ModelAndView(redirectInvoiceAndDeliveryView); } return new ModelAndView(redirectInvoiceView); } return null; } !context.get !context.get context.get !context.get
  • 61. public CheckOutState(Basket basket, PaymentRule rule) { this.basket = basket; this.rule = rule; } public CheckOutStep nextStep() { if (basket.isEmpty()) return CART; if (basket.isValidForCheckout(rule)) return LAST_CHECK; if ((!basket.hasInvoiceAddress()) || (basket.isFurnitureOk() && basket.isPaymentMethodAllowed(rule) && basket.isPaymentMethodValid())) return INVOICE_ADDRESS; return PAYMENT_AND_DELIVERY; }
  • 62. public CheckOutState(Basket basket, PaymentRule rule) { this.basket = basket; this.rule = rule; } public CheckOutStep nextStep() { if (basket.isEmpty()) return CART; if (basket.isValidForCheckout(rule)) return LAST_CHECK; if ((!basket.hasInvoiceAddress()) || (basket.isFurnitureOk() && basket.isPaymentMethodAllowed(rule) && basket.isPaymentMethodValid())) return INVOICE_ADDRESS; return PAYMENT_AND_DELIVERY; } CheckOutState( Basket basket, PaymentRule rule)
  • 63. private ModelAndView handleOrderRequest(HttpServletRequest request, HttpServletResponse response, ModelBuilder modelBuilder) throws Exception { SessionContext context = new SessionContext(modelBuilder, paymentRuleComposer); CheckOutState state = new CheckOutState( context.getBasket(), context.getPaymentRule()); if (!state.isValidForCheckOut()) return modelAndViewFor(state.nextStep()); context.disableDesiredDeliveryDate();
  • 64. private ModelAndView handleOrderRequest(HttpServletRequest request, HttpServletResponse response, ModelBuilder modelBuilder) throws Exception { SessionContext context = new SessionContext(modelBuilder, paymentRuleComposer); CheckOutState state = new CheckOutState( context.getBasket(), context.getPaymentRule()); if (!state.isValidForCheckOut()) return modelAndViewFor(state.nextStep()); context.disableDesiredDeliveryDate();
  • 65. private ModelAndView handleOrderRequest(HttpServletRequest request, HttpServletResponse response, ModelBuilder modelBuilder) throws Exception { SessionContext context = new SessionContext(modelBuilder, paymentRuleComposer); CheckOutState state = new CheckOutState( context.getBasket(), context.getPaymentRule()); if (!state.isValidForCheckOut()) return modelAndViewFor(state.nextStep()); context.disableDesiredDeliveryDate(); state = new CheckOutState( context.getBasket(), context.getPaymentRule());
  • 66. protected ModelAndView handleSslRequest(HttpServletRequest request, HttpServletResponse response, ModelBuilder modelBuilder) throws Exception { if( isNotAuthorizised(request, modelBuilder)){ return handleLogin(request, response, modelBuilder); } Session session = modelBuilder.getSession(); Basket basket = modelBuilder.getBasket(); Customer customer = modelBuilder.getCustomer(); PaymentRule paymentRule = (PaymentRule)paymentRuleComposer.compose(basket, customer); ModelAndView escapeModelAndView = getMavIfStateIsNotValidForCheckout(basket, paymentRule, session); if(escapeModelAndView != null) { return escapeModelAndView; } disableDesiredDeliveryDate(session, basket, modelBuilder);
  • 67. private ModelAndView handleOrderRequest(HttpServletRequest request, HttpServletResponse response, ModelBuilder modelBuilder) throws Exception { SessionContext context = new SessionContext(modelBuilder, paymentRuleComposer); CheckOutState state = new CheckOutState( context.getBasket(), context.getPaymentRule()); if (!state.isValidForCheckOut()) return modelAndViewFor(state.nextStep()); context.disableDesiredDeliveryDate();
  • 68. ER GO
  • 77. EN DE
  • 78. CREDITS von tangaroo von Axel Pfaender von binaryCoco von tilaneseven von spiffie von static416 von autowitch von Daveybot von woodleywonderworks von Tim Morgan von Tim Morgan von Tim Morgan von nickwheeleroz von otisarchives1 von *ejk* von cuulongden von Laure Wayaffe von mab @ flickr von Kazze von aesop von SteveMcN von canonsnapper von bies