package fr.mch.mdo.jms.client;
import java.util.Observer;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageListener;
import javax.jms.TextMessage;
import fr.mch.mdo.client.printer.AbstractPrinter;
import fr.mch.mdo.client.printer.IPrinter;
/**
* This class represents view part.
*
* @author mathieu
*/
public class PrinterModel implements MessageListener
{
/**
* Default Serial Version UID.
*/
private static final long serialVersionUID = 1L;
/**
* Message received by JMS, this class has to update the View class with
* this data.
*/
private PrinterObservableMessage observableMessage = new PrinterObservableMessage();
// Model/Data part
private JmsClientQueue jmsClientConsumer;
// Controller Part
private IPrinter printer = new AbstractPrinter() {
@Override
public String getParameter(String key, String defaultValue) {
return defaultValue;
}
};
public PrinterModel() {
jmsClientConsumer = new JmsClientQueueConsumer(this);
try {
if (jmsClientConsumer.getConnection() != null) {
jmsClientConsumer.getConnection().start();
}
} catch (JMSException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
printer.init();
}
public void addPrinterObserver(Observer controller) {
observableMessage.addObserver(controller);
}
public String getMessage() {
return observableMessage.getMessage().toString();
}
@Override
public void onMessage(Message message) {
try {
message.acknowledge();
// Step 11. Receive the message
System.out.println("Message Type: " + message.getJMSType());
this.observableMessage.setMessage(message);
print(observableMessage.getMessage());
} catch (JMSException e) {
// // TODO Auto-generated catch block
e.printStackTrace();
} finally {
}
}
public void print(Message message) {
if (message != null) {
try {
// Step 11. Receive the message
System.out.println("Print Message: " + message.getJMSType());
this.observableMessage.setMessage(message);
if (message instanceof TextMessage) {
String text = ((TextMessage) message).getText();
System.out.println("Received message: " + text);
// Vider le buffer de l'applet
printer.resetDataBuffer();
// Entete
printer.addData2(text);
printer.print();
message.acknowledge();
}
} catch (JMSException e) {
// // TODO Auto-generated catch block
e.printStackTrace();
} finally {
}
}
}
public void print() {
print(observableMessage.getMessage());
}
public void reloadPrinter() {
printer.reload();
}
public void reloadJms() {
jmsClientConsumer = new JmsClientQueueConsumer(this);
}
public void stop() {
printer.stop();
}
public void close() {
printer.close();
jmsClientConsumer.close();
}
}