/*
* Copyright (C) 2014 GG-Net GmbH - Oliver Günther
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package eu.ggnet.dwoss.redtape.state;
import eu.ggnet.statemachine.StateMachine;
import eu.ggnet.statemachine.State;
import static eu.ggnet.dwoss.redtape.state.RedTapeStateTransitions.*;
import static eu.ggnet.dwoss.redtape.state.RedTapeStates.*;
/**
* The RedTape State Machine.
* Run this class to see a graph of all possible States and Transitions for RedTape.
* <p/>
* @author oliver.guenther
*/
public class RedTapeStateMachine extends StateMachine<CustomerDocument> {
public State<CustomerDocument>[] I;
public State<CustomerDocument>[] II;
public State<CustomerDocument>[] III;
public State<CustomerDocument>[] IV;
public State<CustomerDocument>[] V;
{
I = new State[]{
I_CREATED_F000,
I_CREATED_F001,
I_CREATED_F010,
I_CREATED_F011,
I_CREATE_INVOICE,
I_HAND_OVER_GOODS,
SALE_COMPLETED
};
I_Workflow();
I_DispatchChange();
I_PaymentMethodChange();
I_Cancel();
II = new State[]{
II_CREATED_F000,
II_CREATED_F010,
II_CREATED_F001,
II_CREATED_F011,
II_WAIT_FOR_MONEY_F000,
II_WAIT_FOR_MONEY_F010,
II_WAIT_FOR_MONEY_F001,
II_WAIT_FOR_MONEY_F011,
II_PREPARE_SHIPPING,
II_CREATE_INVOICE,
II_PREPARE_SHIPPING_INVOICED,
SALE_COMPLETED
};
II_Workflow();
II_DispatchChange();
II_PaymentMethodChange();
II_Cancel();
III = new State[]{
III_CREATED_F000,
III_CREATED_F001,
III_CREATED_F011,
III_PAYMENT_CONTRACT_SENT_F000,
III_PAYMENT_CONTRACT_SENT_F001,
III_CREATED_PREPARE_SHIPPING_F010,
III_PREPARE_SHIPPING_F011,
III_WAIT_FOR_MONEY,
III_WAIT_FOR_ORDER_CONFIRMATION_F011,
SALE_COMPLETED
};
III_Workflow();
III_PaymentMethodChange();
III_Cancel();
IV = new State[]{
IV_CREATED_F001,
IV_CREATED_F011,
IV_CREATED_PREPARE_SHIPPING_F000,
IV_CREATED_PREPARE_SHIPPING_F010,
IV_V_WAIT_FOR_MONEY_OR_EXECUTE_DIRECT_DEBIT,
IV_PREPARE_SHIPPING_F0X1,
IV_WAIT_FOR_ORDER_CONFIRMATION_F001,
IV_WAIT_FOR_ORDER_CONFIRMATION_F011,
SALE_COMPLETED
};
V = new State[]{
V_CREATED_WAIT_FOR_PICKUP_F000,
V_CREATED_WAIT_FOR_PICKUP_F001,
V_CREATED_WAIT_FOR_PICKUP_F010,
V_CREATED_WAIT_FOR_PICKUP_F011,
IV_V_WAIT_FOR_MONEY_OR_EXECUTE_DIRECT_DEBIT,
SALE_COMPLETED
};
IV_V_Workflow();
IV_V_Cancel();
IV_DispatchChange();
IV_PaymentMethodChange();
V_DispatchChange();
V_PaymentMethodChange();
// --- After Sale
add(SALE_COMPLETED, CREATE_COMPLAINT, COMPLAINT_CREATED);
add(SALE_COMPLETED, CREATE_CREDIT_MEMO, CREDIT_MEMO_CREATED);
add(SALE_COMPLETED, CREATE_ANNULATION_INVOICE, ANNULATION_INVOICE_CREATED);
add(COMPLAINT_CREATED, REJECT_COMPLAINT, COMPLAINT_ABORTED);
add(COMPLAINT_CREATED, WITHDRAW_COMPLAINT, COMPLAINT_ABORTED);
add(COMPLAINT_CREATED, ACCEPT_COMPLAINT, COMPLAINT_ACCEPTED);
add(COMPLAINT_ACCEPTED, CREATE_CREDIT_MEMO, CREDIT_MEMO_CREATED);
add(COMPLAINT_ACCEPTED, CREATE_ANNULATION_INVOICE, ANNULATION_INVOICE_CREATED);
add(ANNULATION_INVOICE_CREATED, BALANCED_REPAYMENT, REPAYMENT_BALLANCED);
add(CREDIT_MEMO_CREATED, BALANCED_REPAYMENT, REPAYMENT_BALLANCED);
// --- Returns and Capital Assets
add(CREATED_CAPITAL_ASSET, COMPLETE_RETURN_CAPITAL_ASSET, COMPLETED_RETURNS_CAPITAL_ASSETS);
add(CREATED_CAPITAL_ASSET, CANCEL, CANCELED);
add(CREATED_RETURNS, COMPLETE_RETURN_CAPITAL_ASSET, COMPLETED_RETURNS_CAPITAL_ASSETS);
add(CREATED_RETURNS, CANCEL, CANCELED);
}
private void I_Workflow() {
add(I_CREATED_F000, I_PAY, I_CREATE_INVOICE);
add(I_CREATED_F000, I_PAY_AND_INVOICE, I_HAND_OVER_GOODS);
add(I_CREATED_F000, I_PAY_AND_INVOICE_PICK_UP, SALE_COMPLETED);
add(I_CREATED_F001, I_PAY, I_CREATE_INVOICE);
add(I_CREATED_F001, I_PAY_AND_INVOICE, I_HAND_OVER_GOODS);
add(I_CREATED_F001, I_PAY_AND_INVOICE_PICK_UP, SALE_COMPLETED);
add(I_CREATED_F010, I_PAY, I_CREATE_INVOICE);
add(I_CREATED_F010, I_PAY_AND_INVOICE, I_HAND_OVER_GOODS);
add(I_CREATED_F010, I_PAY_AND_INVOICE_PICK_UP, SALE_COMPLETED);
add(I_CREATED_F011, I_PAY, I_CREATE_INVOICE);
add(I_CREATED_F011, I_PAY_AND_INVOICE, I_HAND_OVER_GOODS);
add(I_CREATED_F011, I_PAY_AND_INVOICE_PICK_UP, SALE_COMPLETED);
add(I_CREATE_INVOICE, I_INVOICE, I_HAND_OVER_GOODS);
add(I_HAND_OVER_GOODS, I_PICK_UP, SALE_COMPLETED);
}
private void I_DispatchChange() {
add(I_CREATED_F000, I_SET_DISPATCH, II_CREATED_F000);
add(I_CREATED_F001, I_SET_DISPATCH, II_CREATED_F001);
add(I_CREATED_F010, I_SET_DISPATCH, II_CREATED_F010);
add(I_CREATED_F011, I_SET_DISPATCH, II_CREATED_F011);
}
private void I_PaymentMethodChange() {
add(I_CREATED_F000, I_SET_DIRECT_DEBIT, V_CREATED_WAIT_FOR_PICKUP_F000);
add(I_CREATED_F001, I_SET_DIRECT_DEBIT, V_CREATED_WAIT_FOR_PICKUP_F001);
add(I_CREATED_F010, I_SET_DIRECT_DEBIT, V_CREATED_WAIT_FOR_PICKUP_F010);
add(I_CREATED_F011, I_SET_DIRECT_DEBIT, V_CREATED_WAIT_FOR_PICKUP_F011);
add(I_CREATED_F000, I_SET_INVOICE, V_CREATED_WAIT_FOR_PICKUP_F000);
add(I_CREATED_F001, I_SET_INVOICE, V_CREATED_WAIT_FOR_PICKUP_F001);
add(I_CREATED_F010, I_SET_INVOICE, V_CREATED_WAIT_FOR_PICKUP_F010);
add(I_CREATED_F011, I_SET_INVOICE, V_CREATED_WAIT_FOR_PICKUP_F011);
}
private void I_Cancel() {
add(I_CREATED_F000, CANCEL, CANCELED);
add(I_CREATED_F001, CANCEL, CANCELED);
add(I_CREATED_F010, CANCEL, CANCELED);
add(I_CREATED_F011, CANCEL, CANCELED);
}
private void II_Workflow() {
add(II_CREATED_F000, II_BRIEF, II_WAIT_FOR_MONEY_F000);
add(II_CREATED_F001, II_BRIEF, II_WAIT_FOR_MONEY_F001);
add(II_CREATED_F010, II_BRIEF, II_WAIT_FOR_MONEY_F010);
add(II_CREATED_F011, II_BRIEF, II_WAIT_FOR_MONEY_F011);
add(II_WAIT_FOR_MONEY_F000, II_PAY, II_PREPARE_SHIPPING);
add(II_WAIT_FOR_MONEY_F001, II_PAY, II_PREPARE_SHIPPING);
add(II_WAIT_FOR_MONEY_F010, II_PAY, II_PREPARE_SHIPPING);
add(II_WAIT_FOR_MONEY_F011, II_PAY, II_PREPARE_SHIPPING);
add(II_PREPARE_SHIPPING, II_SEND_AND_INVOICE, SALE_COMPLETED);
add(II_PREPARE_SHIPPING, II_SEND_WITHOUT_INVOICE, II_CREATE_INVOICE);
add(II_PREPARE_SHIPPING, II_INVOICE_UNSHIPPED, II_PREPARE_SHIPPING_INVOICED);
add(II_CREATE_INVOICE, II_INVOICE, SALE_COMPLETED);
add(II_PREPARE_SHIPPING_INVOICED, II_SEND, SALE_COMPLETED);
}
private void II_DispatchChange() {
add(II_CREATED_F000, II_SET_PICK_UP, I_CREATED_F000);
add(II_CREATED_F001, II_SET_PICK_UP, I_CREATED_F001);
add(II_CREATED_F010, II_SET_PICK_UP, I_CREATED_F010);
add(II_CREATED_F011, II_SET_PICK_UP, I_CREATED_F011);
add(II_WAIT_FOR_MONEY_F000, II_SET_PICK_UP, I_CREATED_F000);
add(II_WAIT_FOR_MONEY_F001, II_SET_PICK_UP, I_CREATED_F001);
add(II_WAIT_FOR_MONEY_F010, II_SET_PICK_UP, I_CREATED_F010);
add(II_WAIT_FOR_MONEY_F011, II_SET_PICK_UP, I_CREATED_F011);
}
private void II_PaymentMethodChange() {
add(II_CREATED_F000, II_SET_CASH_ON_DELIVERY_F01X, III_CREATED_F000);
add(II_CREATED_F001, II_SET_CASH_ON_DELIVERY_F01X, III_CREATED_F001);
add(II_CREATED_F010, II_SET_CASH_ON_DELIVERY_F010, III_CREATED_PREPARE_SHIPPING_F010);
add(II_CREATED_F011, II_SET_CASH_ON_DELIVERY_F011, III_CREATED_F011);
add(II_WAIT_FOR_MONEY_F000, II_SET_CASH_ON_DELIVERY_F01X, III_CREATED_F000);
add(II_WAIT_FOR_MONEY_F001, II_SET_CASH_ON_DELIVERY_F01X, III_CREATED_F001);
add(II_WAIT_FOR_MONEY_F010, II_SET_CASH_ON_DELIVERY_F010, III_CREATED_PREPARE_SHIPPING_F010);
add(II_WAIT_FOR_MONEY_F011, II_SET_CASH_ON_DELIVERY_F011, III_CREATED_F011);
add(II_CREATED_F000, II_SET_DIRECT_DEBIT_F0X0, IV_CREATED_PREPARE_SHIPPING_F000);
add(II_CREATED_F001, II_SET_DIRECT_DEBIT_F0X1, IV_CREATED_F001);
add(II_CREATED_F010, II_SET_DIRECT_DEBIT_F0X0, IV_CREATED_PREPARE_SHIPPING_F010);
add(II_CREATED_F011, II_SET_DIRECT_DEBIT_F0X1, IV_CREATED_F011);
add(II_WAIT_FOR_MONEY_F000, II_SET_DIRECT_DEBIT_F0X0, IV_CREATED_PREPARE_SHIPPING_F000);
add(II_WAIT_FOR_MONEY_F001, II_SET_DIRECT_DEBIT_F0X1, IV_CREATED_F001);
add(II_WAIT_FOR_MONEY_F010, II_SET_DIRECT_DEBIT_F0X0, IV_CREATED_PREPARE_SHIPPING_F010);
add(II_WAIT_FOR_MONEY_F011, II_SET_DIRECT_DEBIT_F0X1, IV_CREATED_F011);
add(II_CREATED_F000, II_SET_INVOICE_F0X0, IV_CREATED_PREPARE_SHIPPING_F000);
add(II_CREATED_F001, II_SET_INVOICE_F0X1, IV_CREATED_F001);
add(II_CREATED_F010, II_SET_INVOICE_F0X0, IV_CREATED_PREPARE_SHIPPING_F010);
add(II_CREATED_F011, II_SET_INVOICE_F0X1, IV_CREATED_F011);
add(II_WAIT_FOR_MONEY_F000, II_SET_INVOICE_F0X0, IV_CREATED_PREPARE_SHIPPING_F000);
add(II_WAIT_FOR_MONEY_F001, II_SET_INVOICE_F0X1, IV_CREATED_F001);
add(II_WAIT_FOR_MONEY_F010, II_SET_INVOICE_F0X0, IV_CREATED_PREPARE_SHIPPING_F010);
add(II_WAIT_FOR_MONEY_F011, II_SET_INVOICE_F0X1, IV_CREATED_F011);
}
private void II_Cancel() {
add(II_CREATED_F000, CANCEL, CANCELED);
add(II_CREATED_F001, CANCEL, CANCELED);
add(II_CREATED_F010, CANCEL, CANCELED);
add(II_CREATED_F011, CANCEL, CANCELED);
add(II_WAIT_FOR_MONEY_F000, CANCEL, CANCELED);
add(II_WAIT_FOR_MONEY_F001, CANCEL, CANCELED);
add(II_WAIT_FOR_MONEY_F010, CANCEL, CANCELED);
add(II_WAIT_FOR_MONEY_F011, CANCEL, CANCELED);
}
private void III_Workflow() {
add(III_CREATED_F000, SEND_PAYMENT_CONTRACT, III_PAYMENT_CONTRACT_SENT_F000);
add(III_CREATED_F001, SEND_PAYMENT_CONTRACT, III_PAYMENT_CONTRACT_SENT_F001);
add(III_CREATED_F011, III_IV_SEND_ORDER, III_WAIT_FOR_ORDER_CONFIRMATION_F011);
add(III_CREATED_PREPARE_SHIPPING_F010, III_IV_SEND_AND_INVOICE, III_WAIT_FOR_MONEY);
add(III_PAYMENT_CONTRACT_SENT_F000, III_CONFIRM_PAYMENT_CONTRACT_F000, III_CREATED_PREPARE_SHIPPING_F010);
add(III_PAYMENT_CONTRACT_SENT_F001, III_CONFIRM_PAYMENT_CONTRACT_F001, III_CREATED_F011);
add(III_WAIT_FOR_ORDER_CONFIRMATION_F011, III_IV_ORDER_CONFIRMED, III_PREPARE_SHIPPING_F011);
add(III_PREPARE_SHIPPING_F011, III_IV_SEND_AND_INVOICE, III_WAIT_FOR_MONEY);
add(III_WAIT_FOR_MONEY, III_IV_V_PAY, SALE_COMPLETED);
}
private void III_PaymentMethodChange() {
add(III_CREATED_F000, III_SET_ADVANCE_PAYMENT, II_CREATED_F000);
add(III_CREATED_F001, III_SET_ADVANCE_PAYMENT, II_CREATED_F001);
add(III_CREATED_F011, III_SET_ADVANCE_PAYMENT, II_CREATED_F011);
add(III_CREATED_PREPARE_SHIPPING_F010, III_SET_ADVANCE_PAYMENT, II_CREATED_F010);
add(III_PAYMENT_CONTRACT_SENT_F000, III_SET_ADVANCE_PAYMENT, II_CREATED_F000);
add(III_PAYMENT_CONTRACT_SENT_F001, III_SET_ADVANCE_PAYMENT, II_CREATED_F001);
add(III_WAIT_FOR_ORDER_CONFIRMATION_F011, III_SET_ADVANCE_PAYMENT, II_CREATED_F011);
add(III_CREATED_F000, III_SET_DIRECT_DEBIT_F0X0, IV_CREATED_PREPARE_SHIPPING_F000);
add(III_CREATED_PREPARE_SHIPPING_F010, III_SET_DIRECT_DEBIT_F0X0, IV_CREATED_PREPARE_SHIPPING_F010);
add(III_CREATED_F001, III_SET_DIRECT_DEBIT_F0X1, IV_CREATED_F001);
add(III_CREATED_F011, III_SET_DIRECT_DEBIT_F0X1, IV_CREATED_F011);
add(III_PAYMENT_CONTRACT_SENT_F000, III_SET_DIRECT_DEBIT_F0X0, IV_CREATED_PREPARE_SHIPPING_F000);
add(III_PAYMENT_CONTRACT_SENT_F001, III_SET_DIRECT_DEBIT_F0X1, IV_CREATED_F001);
add(III_WAIT_FOR_ORDER_CONFIRMATION_F011, III_SET_DIRECT_DEBIT_F0X1, IV_CREATED_F011);
add(III_CREATED_F000, III_SET_INVOICE_F0X0, IV_CREATED_PREPARE_SHIPPING_F000);
add(III_CREATED_PREPARE_SHIPPING_F010, III_SET_INVOICE_F0X0, IV_CREATED_PREPARE_SHIPPING_F010);
add(III_CREATED_F001, III_SET_INVOICE_F0X1, IV_CREATED_F001);
add(III_CREATED_F011, III_SET_INVOICE_F0X1, IV_CREATED_F011);
add(III_PAYMENT_CONTRACT_SENT_F000, III_SET_INVOICE_F0X0, IV_CREATED_PREPARE_SHIPPING_F000);
add(III_PAYMENT_CONTRACT_SENT_F001, III_SET_INVOICE_F0X1, IV_CREATED_F001);
add(III_WAIT_FOR_ORDER_CONFIRMATION_F011, III_SET_INVOICE_F0X1, IV_CREATED_F011);
}
private void III_Cancel() {
add(III_CREATED_F000, CANCEL, CANCELED);
add(III_CREATED_F001, CANCEL, CANCELED);
add(III_CREATED_F011, CANCEL, CANCELED);
add(III_CREATED_PREPARE_SHIPPING_F010, CANCEL, CANCELED);
add(III_PAYMENT_CONTRACT_SENT_F000, CANCEL, CANCELED);
add(III_PAYMENT_CONTRACT_SENT_F001, CANCEL, CANCELED);
add(III_WAIT_FOR_ORDER_CONFIRMATION_F011, CANCEL, CANCELED);
}
private void IV_V_Workflow() {
add(IV_CREATED_F001, III_IV_SEND_ORDER, IV_WAIT_FOR_ORDER_CONFIRMATION_F001);
add(IV_CREATED_F011, III_IV_SEND_ORDER, IV_WAIT_FOR_ORDER_CONFIRMATION_F011);
add(IV_CREATED_PREPARE_SHIPPING_F000, III_IV_SEND_AND_INVOICE, IV_V_WAIT_FOR_MONEY_OR_EXECUTE_DIRECT_DEBIT);
add(IV_CREATED_PREPARE_SHIPPING_F010, III_IV_SEND_AND_INVOICE, IV_V_WAIT_FOR_MONEY_OR_EXECUTE_DIRECT_DEBIT);
add(IV_WAIT_FOR_ORDER_CONFIRMATION_F001, III_IV_ORDER_CONFIRMED, IV_PREPARE_SHIPPING_F0X1);
add(IV_WAIT_FOR_ORDER_CONFIRMATION_F011, III_IV_ORDER_CONFIRMED, IV_PREPARE_SHIPPING_F0X1);
add(IV_PREPARE_SHIPPING_F0X1, III_IV_SEND_AND_INVOICE, IV_V_WAIT_FOR_MONEY_OR_EXECUTE_DIRECT_DEBIT);
add(V_CREATED_WAIT_FOR_PICKUP_F000, V_HAND_OVER_AND_INVOICE, IV_V_WAIT_FOR_MONEY_OR_EXECUTE_DIRECT_DEBIT);
add(V_CREATED_WAIT_FOR_PICKUP_F001, V_HAND_OVER_AND_INVOICE, IV_V_WAIT_FOR_MONEY_OR_EXECUTE_DIRECT_DEBIT);
add(V_CREATED_WAIT_FOR_PICKUP_F010, V_HAND_OVER_AND_INVOICE, IV_V_WAIT_FOR_MONEY_OR_EXECUTE_DIRECT_DEBIT);
add(V_CREATED_WAIT_FOR_PICKUP_F011, V_HAND_OVER_AND_INVOICE, IV_V_WAIT_FOR_MONEY_OR_EXECUTE_DIRECT_DEBIT);
add(IV_V_WAIT_FOR_MONEY_OR_EXECUTE_DIRECT_DEBIT, III_IV_V_PAY, SALE_COMPLETED);
}
private void IV_V_Cancel() {
add(IV_CREATED_F001, CANCEL, CANCELED);
add(IV_CREATED_F011, CANCEL, CANCELED);
add(IV_CREATED_PREPARE_SHIPPING_F000, CANCEL, CANCELED);
add(IV_CREATED_PREPARE_SHIPPING_F010, CANCEL, CANCELED);
add(IV_WAIT_FOR_ORDER_CONFIRMATION_F001, CANCEL, CANCELED);
add(IV_WAIT_FOR_ORDER_CONFIRMATION_F011, CANCEL, CANCELED);
add(V_CREATED_WAIT_FOR_PICKUP_F000, CANCEL, CANCELED);
add(V_CREATED_WAIT_FOR_PICKUP_F001, CANCEL, CANCELED);
add(V_CREATED_WAIT_FOR_PICKUP_F010, CANCEL, CANCELED);
add(V_CREATED_WAIT_FOR_PICKUP_F011, CANCEL, CANCELED);
}
private void IV_DispatchChange() {
add(IV_CREATED_F001, IV_SET_PICK_UP, V_CREATED_WAIT_FOR_PICKUP_F001);
add(IV_CREATED_F011, IV_SET_PICK_UP, V_CREATED_WAIT_FOR_PICKUP_F011);
add(IV_CREATED_PREPARE_SHIPPING_F000, IV_SET_PICK_UP, V_CREATED_WAIT_FOR_PICKUP_F000);
add(IV_CREATED_PREPARE_SHIPPING_F010, IV_SET_PICK_UP, V_CREATED_WAIT_FOR_PICKUP_F010);
add(IV_WAIT_FOR_ORDER_CONFIRMATION_F001, IV_SET_PICK_UP, V_CREATED_WAIT_FOR_PICKUP_F001);
add(IV_WAIT_FOR_ORDER_CONFIRMATION_F011, IV_SET_PICK_UP, V_CREATED_WAIT_FOR_PICKUP_F011);
}
private void V_DispatchChange() {
add(V_CREATED_WAIT_FOR_PICKUP_F000, V_SET_DISPATCH_F0X0, IV_CREATED_PREPARE_SHIPPING_F000);
add(V_CREATED_WAIT_FOR_PICKUP_F001, V_SET_DISPATCH_F0X1, IV_CREATED_F001);
add(V_CREATED_WAIT_FOR_PICKUP_F010, V_SET_DISPATCH_F0X0, IV_CREATED_PREPARE_SHIPPING_F010);
add(V_CREATED_WAIT_FOR_PICKUP_F011, V_SET_DISPATCH_F0X1, IV_CREATED_F011);
}
private void IV_PaymentMethodChange() {
add(IV_CREATED_F001, IV_SET_ADVANCE_PAYMENT, II_CREATED_F001);
add(IV_CREATED_F011, IV_SET_ADVANCE_PAYMENT, II_CREATED_F011);
add(IV_CREATED_PREPARE_SHIPPING_F000, IV_SET_ADVANCE_PAYMENT, II_CREATED_F000);
add(IV_CREATED_PREPARE_SHIPPING_F010, IV_SET_ADVANCE_PAYMENT, II_CREATED_F010);
add(IV_WAIT_FOR_ORDER_CONFIRMATION_F001, IV_SET_ADVANCE_PAYMENT, II_CREATED_F001);
add(IV_WAIT_FOR_ORDER_CONFIRMATION_F011, IV_SET_ADVANCE_PAYMENT, II_CREATED_F011);
add(IV_CREATED_F001, IV_SET_CASH_ON_DELIVERY_F00X, III_CREATED_F001);
add(IV_CREATED_F011, IV_SET_CASH_ON_DELIVERY_F011, III_CREATED_F011);
add(IV_CREATED_PREPARE_SHIPPING_F000, IV_SET_CASH_ON_DELIVERY_F00X, III_CREATED_F001);
add(IV_CREATED_PREPARE_SHIPPING_F010, IV_SET_CASH_ON_DELIVERY_F010, III_CREATED_PREPARE_SHIPPING_F010);
add(IV_WAIT_FOR_ORDER_CONFIRMATION_F001, IV_SET_CASH_ON_DELIVERY_F00X, III_CREATED_F001);
add(IV_WAIT_FOR_ORDER_CONFIRMATION_F011, IV_SET_CASH_ON_DELIVERY_F011, III_CREATED_F001);
add(IV_CREATED_F001, IV_SET_INVOICE_F0X1, IV_CREATED_F001);
add(IV_CREATED_F011, IV_SET_INVOICE_F0X1, IV_CREATED_F011);
add(IV_CREATED_PREPARE_SHIPPING_F000, IV_SET_INVOICE_F0X0, IV_CREATED_PREPARE_SHIPPING_F000);
add(IV_CREATED_PREPARE_SHIPPING_F010, IV_SET_INVOICE_F0X0, IV_CREATED_PREPARE_SHIPPING_F010);
add(IV_WAIT_FOR_ORDER_CONFIRMATION_F001, IV_SET_INVOICE_F0X1, IV_WAIT_FOR_ORDER_CONFIRMATION_F001);
add(IV_WAIT_FOR_ORDER_CONFIRMATION_F011, IV_SET_INVOICE_F0X1, IV_WAIT_FOR_ORDER_CONFIRMATION_F011);
add(IV_CREATED_F001, IV_SET_DIRECT_DEBIT_F0X1, IV_CREATED_F001);
add(IV_CREATED_F011, IV_SET_DIRECT_DEBIT_F0X1, IV_CREATED_F011);
add(IV_CREATED_PREPARE_SHIPPING_F000, IV_SET_DIRECT_DEBIT_F0X0, IV_CREATED_PREPARE_SHIPPING_F000);
add(IV_CREATED_PREPARE_SHIPPING_F010, IV_SET_DIRECT_DEBIT_F0X0, IV_CREATED_PREPARE_SHIPPING_F010);
add(IV_WAIT_FOR_ORDER_CONFIRMATION_F001, IV_SET_DIRECT_DEBIT_F0X1, IV_WAIT_FOR_ORDER_CONFIRMATION_F001);
add(IV_WAIT_FOR_ORDER_CONFIRMATION_F011, IV_SET_DIRECT_DEBIT_F0X1, IV_WAIT_FOR_ORDER_CONFIRMATION_F011);
}
private void V_PaymentMethodChange() {
add(V_CREATED_WAIT_FOR_PICKUP_F000, V_SET_ADVANCE_PAYMENT, I_CREATED_F000);
add(V_CREATED_WAIT_FOR_PICKUP_F001, V_SET_ADVANCE_PAYMENT, I_CREATED_F001);
add(V_CREATED_WAIT_FOR_PICKUP_F010, V_SET_ADVANCE_PAYMENT, I_CREATED_F010);
add(V_CREATED_WAIT_FOR_PICKUP_F011, V_SET_ADVANCE_PAYMENT, I_CREATED_F011);
add(V_CREATED_WAIT_FOR_PICKUP_F000, V_SET_INVOICE, V_CREATED_WAIT_FOR_PICKUP_F000);
add(V_CREATED_WAIT_FOR_PICKUP_F001, V_SET_INVOICE, V_CREATED_WAIT_FOR_PICKUP_F001);
add(V_CREATED_WAIT_FOR_PICKUP_F010, V_SET_INVOICE, V_CREATED_WAIT_FOR_PICKUP_F010);
add(V_CREATED_WAIT_FOR_PICKUP_F011, V_SET_INVOICE, V_CREATED_WAIT_FOR_PICKUP_F011);
add(V_CREATED_WAIT_FOR_PICKUP_F000, V_SET_DIRECT_DEBIT, V_CREATED_WAIT_FOR_PICKUP_F000);
add(V_CREATED_WAIT_FOR_PICKUP_F001, V_SET_DIRECT_DEBIT, V_CREATED_WAIT_FOR_PICKUP_F001);
add(V_CREATED_WAIT_FOR_PICKUP_F010, V_SET_DIRECT_DEBIT, V_CREATED_WAIT_FOR_PICKUP_F010);
add(V_CREATED_WAIT_FOR_PICKUP_F011, V_SET_DIRECT_DEBIT, V_CREATED_WAIT_FOR_PICKUP_F011);
}
public RedTapeStateMachine() {
super(new RedTapeStateCharacteristicFactory());
}
public static void main(String[] args) {
// Dossier dos = new Dossier();
// dos.setDispatch(false);
// Document doc = new Document();
// doc.setType(Document.Type.ORDER);
// dos.setPaymentMethod(PaymentMethod.ADVANCE_PAYMENT);
// doc.setDirective(Document.Directive.WAIT_FOR_MONEY);
// doc.add(Document.Condition.CREATED);
// doc.setDossier(dos);
//
// CustomerDocument cd = new CustomerDocument(new HashSet<>(), doc, ShippingCondition.DEFAULT, PaymentMethod.DIRECT_DEBIT);
RedTapeStateMachine om = new RedTapeStateMachine();
// Grapher.showExact(om,new RedTapeStateFormater() ,om.IV);
// System.out.println(om.getState(cd));
}
}