~kadamandiya-dev/+junk/kadamandiya-dev

« back to all changes in this revision

Viewing changes to gui/Kadamandiya/src/com/p2p/seller/TransactionMessageSender.java

  • Committer: Dileepa Jayakody
  • Date: 2011-09-14 18:53:41 UTC
  • Revision ID: dileepajayakody@gmail.com-20110914185341-5pc3zzuctm9ecftt
added files for feedback logic

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
 * To change this template, choose Tools | Templates
 
3
 * and open the template in the editor.
 
4
 */
 
5
package com.p2p.seller;
 
6
 
 
7
import com.entity.Bid;
 
8
import com.entity.BusinessContract;
 
9
import com.entity.CommerceUser;
 
10
import com.entity.Transaction;
 
11
import com.entity.UserFeedback;
 
12
import com.p2p.advertisement.BidAdvertisement;
 
13
import com.p2p.advertisement.ContractAdvertisement;
 
14
import com.p2p.advertisement.FeedbackAdvertisement;
 
15
import com.p2p.service.BuyerServiceProvider;
 
16
import com.p2p.service.SellerServiceProvider;
 
17
import java.io.IOException;
 
18
import java.util.Calendar;
 
19
import net.jxta.document.MimeMediaType;
 
20
import net.jxta.document.XMLDocument;
 
21
import net.jxta.endpoint.Message;
 
22
import net.jxta.endpoint.StringMessageElement;
 
23
import net.jxta.endpoint.TextDocumentMessageElement;
 
24
import net.jxta.peergroup.PeerGroup;
 
25
import net.jxta.protocol.PipeAdvertisement;
 
26
import net.jxta.util.JxtaBiDiPipe;
 
27
 
 
28
/**
 
29
 *
 
30
 * @author dileepa
 
31
 *
 
32
 * still working
 
33
 */
 
34
public class TransactionMessageSender implements Runnable {
 
35
 
 
36
    private PeerGroup peergroup;
 
37
    private PipeAdvertisement sendingPipeAdv;
 
38
    private PipeAdvertisement fromPipeAdv;
 
39
    Transaction transactionToSend;
 
40
    UserFeedback feebackToSend;
 
41
    BusinessContract contractToSend;
 
42
    private int userType = CommerceUser.SELLER;
 
43
    private String msgType = null;
 
44
    private JxtaBiDiPipe pipe = null;
 
45
    public final static String TRANS_MESSAGE_NAMESPACE = "Transactions";
 
46
    public final static String TRANSACTION_ID_ELEMENT_NAME = "TransactionID";
 
47
    public final static String TRANSACTION_DATE_ELEMENT_NAME = "TransactionDate";
 
48
    public final static String TRANSACTION_TYPE_ELEMENT_NAME = "TransactionType";
 
49
    public final static String TRANSACTION_STATUS_ELEMENT_NAME = "TransactionStatus";
 
50
    public final static String CONFIRMED_BID_ELEMENT_NAME = "ConfirmedBid";
 
51
    public final static String CONTRACT_ELEMENT_NAME = "Contract";
 
52
    public final static String TRANSACTION_PIPE_ELEMENT_NAME = "TransactionPipe";
 
53
    public final static String FEEDBACK_ELEMENT_NAME = "Feedback";
 
54
    public final static String MSG_TYPE_ELEMENT_NAME = "MessageType";
 
55
    //message types
 
56
    public final static String TRANSACTION_TYPE = "Transaction";
 
57
    public final static String FEEDBACK_TYPE = "Feedback";
 
58
 
 
59
    /**
 
60
     *  Standard constructor.
 
61
     *
 
62
     *  @param peergroup
 
63
     */
 
64
    //this is a transaction type message
 
65
    public TransactionMessageSender(PeerGroup peergroup, PipeAdvertisement toPipeAdv, PipeAdvertisement fromPipeAdv, Transaction tx) {
 
66
        this.peergroup = peergroup;
 
67
        this.sendingPipeAdv = toPipeAdv;
 
68
        this.fromPipeAdv = fromPipeAdv;
 
69
        this.transactionToSend = tx;
 
70
        this.contractToSend = transactionToSend.getContract();
 
71
        this.msgType = TRANSACTION_TYPE;
 
72
 
 
73
    }
 
74
 
 
75
    //feedback type of message
 
76
    public TransactionMessageSender(PeerGroup peergroup, PipeAdvertisement toPipeAdv, UserFeedback fb) {
 
77
        this.peergroup = peergroup;
 
78
        this.sendingPipeAdv = toPipeAdv;
 
79
        this.feebackToSend = fb;
 
80
        this.msgType = FEEDBACK_TYPE;
 
81
    }
 
82
 
 
83
    /**
 
84
     *  Send Bid
 
85
     * @throws IOException
 
86
     */
 
87
    //should send the Bid info
 
88
    private void sendContract() throws IOException {
 
89
 
 
90
        ContractAdvertisement cAdv = ContractAdvertisement.getContractAdvertisement(this.contractToSend);
 
91
 
 
92
        Message msg = new Message();
 
93
        String txID = this.transactionToSend.getTransactionID();
 
94
        Calendar txDate = this.transactionToSend.getTransactionDate();
 
95
        int year = txDate.get(Calendar.YEAR);
 
96
        int month = txDate.get(Calendar.MONTH);
 
97
        int date = txDate.get(Calendar.DATE);
 
98
        String txDateStr = date + "/" + month + "/" + year;
 
99
        int txType = this.transactionToSend.getTransactionType();
 
100
        int txStatus = this.transactionToSend.getTransactionStatus();
 
101
        String confBidID = null;
 
102
        if (this.transactionToSend.getConfirmedBid() != null) {
 
103
            confBidID = this.transactionToSend.getConfirmedBid().getBidID();
 
104
 
 
105
        } else if (this.transactionToSend.getConfirmedBidID() != null) {
 
106
            confBidID = this.transactionToSend.getConfirmedBidID();
 
107
        }
 
108
        //the msg type = transaction
 
109
        msg.addMessageElement(TRANS_MESSAGE_NAMESPACE, new StringMessageElement(MSG_TYPE_ELEMENT_NAME, TRANSACTION_TYPE, null));
 
110
        //elements specific to tx msg
 
111
        msg.addMessageElement(TRANS_MESSAGE_NAMESPACE, new StringMessageElement(TRANSACTION_ID_ELEMENT_NAME, txID, null)); //the bid msg
 
112
        msg.addMessageElement(TRANS_MESSAGE_NAMESPACE, new StringMessageElement(TRANSACTION_TYPE_ELEMENT_NAME, String.valueOf(txType), null));
 
113
        msg.addMessageElement(TRANS_MESSAGE_NAMESPACE, new StringMessageElement(TRANSACTION_DATE_ELEMENT_NAME, txDateStr, null));
 
114
        msg.addMessageElement(TRANS_MESSAGE_NAMESPACE, new StringMessageElement(TRANSACTION_STATUS_ELEMENT_NAME, String.valueOf(txStatus), null));
 
115
        msg.addMessageElement(TRANS_MESSAGE_NAMESPACE, new StringMessageElement(CONFIRMED_BID_ELEMENT_NAME, confBidID, null));
 
116
        msg.addMessageElement(TRANS_MESSAGE_NAMESPACE, new TextDocumentMessageElement(
 
117
                CONTRACT_ELEMENT_NAME, (XMLDocument) cAdv.getDocument(MimeMediaType.XMLUTF8), null));
 
118
        //the from pipe to send confirmed bids
 
119
        msg.addMessageElement(TRANS_MESSAGE_NAMESPACE, new TextDocumentMessageElement(
 
120
                TRANSACTION_PIPE_ELEMENT_NAME, (XMLDocument) fromPipeAdv.getDocument(MimeMediaType.XMLUTF8), null));
 
121
 
 
122
        /*String data = "777";
 
123
        msg.addMessageElement(MESSAGE_NAMESPACE_NAME, new StringMessageElement(BID_MSG_ELEMENT_NAME, data, null));
 
124
         */
 
125
 
 
126
        System.out.println("[" + Thread.currentThread().getName() + "]  sending a transaction:");
 
127
        pipe.sendMessage(msg);
 
128
 
 
129
 
 
130
 
 
131
    }
 
132
 
 
133
//to send transaction feedback
 
134
    private void sendFeedback() throws IOException {
 
135
 
 
136
        FeedbackAdvertisement fAdv =  FeedbackAdvertisement.getFeedbackAdvertisement(this.feebackToSend);
 
137
 
 
138
        Message msg = new Message();
 
139
        String txID = this.transactionToSend.getTransactionID();
 
140
        //the msg type = feedback
 
141
        msg.addMessageElement(TRANS_MESSAGE_NAMESPACE, new StringMessageElement(MSG_TYPE_ELEMENT_NAME, FEEDBACK_TYPE, null));
 
142
        msg.addMessageElement(TRANS_MESSAGE_NAMESPACE, new StringMessageElement(TRANSACTION_ID_ELEMENT_NAME, txID, null)); //the bid msg
 
143
        //feedback specific details
 
144
        msg.addMessageElement(TRANS_MESSAGE_NAMESPACE, new TextDocumentMessageElement(
 
145
                FEEDBACK_ELEMENT_NAME, (XMLDocument) fAdv.getDocument(MimeMediaType.XMLUTF8), null));
 
146
        System.out.println("[" + Thread.currentThread().getName() + "]  sending a feedback:");
 
147
        pipe.sendMessage(msg);
 
148
 
 
149
 
 
150
 
 
151
    }
 
152
 
 
153
    /**
 
154
     * Set up this pipe connection and wait until the expected messages have
 
155
     * been received.
 
156
     */
 
157
    public void run() {
 
158
        try {
 
159
            System.out.println("[" + Thread.currentThread().getName() + "] Attempting to establish a connection to : " + sendingPipeAdv.getPipeID());
 
160
            pipe = new JxtaBiDiPipe(peergroup, sendingPipeAdv, 20000, null, true);
 
161
            System.out.println("[" + Thread.currentThread().getName() + "] JxtaBiDiPipe pipe created");
 
162
            if (msgType.equals(TRANSACTION_TYPE)) {
 
163
                sendContract();
 
164
            } else if (msgType.equals(FEEDBACK_TYPE)) {
 
165
                sendFeedback();
 
166
            }
 
167
            pipe.close();
 
168
 
 
169
            System.out.println("[" + Thread.currentThread().getName() + "] Done!");
 
170
        } catch (IOException failure) {
 
171
            failure.printStackTrace();
 
172
        }
 
173
    }
 
174
 
 
175
    /**
 
176
     * @return the msgType
 
177
     */
 
178
    public String getMsgType() {
 
179
        return msgType;
 
180
    }
 
181
 
 
182
    /**
 
183
     * @param msgType the msgType to set
 
184
     */
 
185
    public void setMsgType(String msgType) {
 
186
        this.msgType = msgType;
 
187
    }
 
188
}