2
* To change this template, choose Tools | Templates
3
* and open the template in the editor.
5
package com.p2p.seller;
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;
34
public class TransactionMessageSender implements Runnable {
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";
56
public final static String TRANSACTION_TYPE = "Transaction";
57
public final static String FEEDBACK_TYPE = "Feedback";
60
* Standard constructor.
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;
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;
87
//should send the Bid info
88
private void sendContract() throws IOException {
90
ContractAdvertisement cAdv = ContractAdvertisement.getContractAdvertisement(this.contractToSend);
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();
105
} else if (this.transactionToSend.getConfirmedBidID() != null) {
106
confBidID = this.transactionToSend.getConfirmedBidID();
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));
122
/*String data = "777";
123
msg.addMessageElement(MESSAGE_NAMESPACE_NAME, new StringMessageElement(BID_MSG_ELEMENT_NAME, data, null));
126
System.out.println("[" + Thread.currentThread().getName() + "] sending a transaction:");
127
pipe.sendMessage(msg);
133
//to send transaction feedback
134
private void sendFeedback() throws IOException {
136
FeedbackAdvertisement fAdv = FeedbackAdvertisement.getFeedbackAdvertisement(this.feebackToSend);
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);
154
* Set up this pipe connection and wait until the expected messages have
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)) {
164
} else if (msgType.equals(FEEDBACK_TYPE)) {
169
System.out.println("[" + Thread.currentThread().getName() + "] Done!");
170
} catch (IOException failure) {
171
failure.printStackTrace();
176
* @return the msgType
178
public String getMsgType() {
183
* @param msgType the msgType to set
185
public void setMsgType(String msgType) {
186
this.msgType = msgType;