Open main menu

CDOT Wiki β

Changes

Teams Winter 2011/team6/lab2

6,222 bytes added, 15:52, 12 April 2011
Install and run the Service Consumer Bundle
: e) Make sure "validate bundles automatically..." is selected
: f) Click apply
[[image:13RunProvider.png |500px]]
 
 
==Implement Chat Client==
The Chat Client is dependent on the Chat Interface and Provider.
===Define the MANIFEST.MF for the service consumer bundle===
:a) Create a new Plug-in Project
:b) Name your Plug-in Project (cs.dps914.osgi.lab.provider) again be sure to select the target platform correctly
:c) This time you can leave the Activator checked as you will need it. (Change the name of the activator to cs.dps914.osgi.lab.provider.ClientActivator)
:d) Edit the MANIFEST.MF dependencies to add the chat interface (similar to Provider)
:e) Edit the MANIFEST.MF
[[image:14CManifest.png | 500px]]
 
===Use the Client Activator to find the service===
 
:add the following code to ClientActivator
 
public void start(BundleContext bundleContext) throws Exception {
ClientActivator.context = bundleContext;
ServiceReference reference=context
.getServiceReference(IChatSystem.class.getName());
if (reference!=null) {
chatService=(IChatSystem)context.getService(reference);
if (chatService!=null) {
ChatApp.setup(chatService);
context.ungetService(reference);
}
}
}
===Implement classes required to consume the service===
[[image:13RunProvidera) Create 2 Java Classes (ChatApp and ChatDialog):b) Make sure the package is defined correctly (cs.dps914.osgi.lab.client.app and cs.dps914.osgi.lab.client.png |500px]]gui respectively) :c) Fill Java Classes with following Data'''ChatApp.java''' import java.util.ArrayList; import javax.swing.SwingUtilities; import cs.dps914.osgi.lab.chatinterface.IChatClient; import cs.dps914.osgi.lab.chatinterface.IChatSystem; import cs.dps914.osgi.lab.chatinterface.IMessage; import cs.dps914.osgi.lab.client.gui.ChatDialog; public class ChatApp implements IChatClient { private IChatSystem service; private ChatDialog dialog; public ChatApp(IChatSystem sys,ChatDialog gui) { service=sys; service.registerClient(this); dialog=gui; gui.setApp(this); } public ArrayList<IMessage> sendMessage( String src, String msg) { return service.appendMessage(src,msg); } public void receiveMessage(IMessage msg) { dialog.displayMessage(msg.getSource(), msg.getMessage(),msg.getTime()); } public static void exit() { System.exit(0); } public static void setup(final IChatSystem service) { SwingUtilities.invokeLater(new Runnable() { public void run() { ChatDialog window=new ChatDialog(); new ChatApp(service,window); window.pack(); window.setVisible(true); } }); } } '''ChatDialog.java'''  import java.awt.BorderLayout; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.Date; import javax.swing.BorderFactory; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JMenu; import javax.swing.JMenuBar; import javax.swing.JMenuItem; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTextArea; import javax.swing.JTextField; import javax.swing.KeyStroke; import cs.dps914.osgi.lab.client.app.ChatApp; public class ChatDialog extends JFrame { private static final long serialVersionUID = -4817932904935871995L; private ChatApp app; private JScrollPane sp_display; private JTextArea ta_display; private JTextField tf_name; private JTextArea ta_msg; public ChatDialog() { super("Talk-to-Self Chat App"); setLayout(new GridLayout(1,2)); getContentPane().add(makeDisplayArea()); getContentPane().add(makeCompositionArea()); setJMenuBar(makeMenu()); } private JPanel makeDisplayArea() { JPanel panel=new JPanel(); panel.setBorder(BorderFactory.createTitledBorder( "Messages")); panel.setLayout(new BorderLayout()); ta_display=new JTextArea(); ta_display.setEnabled(false); sp_display=new JScrollPane(ta_display); panel.add(sp_display,BorderLayout.CENTER); JButton bt_clear=new JButton("Clear"); bt_clear.setToolTipText("Clear message display"); bt_clear.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { ta_display.setText(""); } }); panel.add(bt_clear,BorderLayout.PAGE_END); return panel; } private JPanel makeCompositionArea() { JPanel panel=new JPanel(); panel.setBorder(BorderFactory.createTitledBorder( "Compose")); panel.setLayout(new BorderLayout()); tf_name=new JTextField(); tf_name.setBorder(BorderFactory.createTitledBorder( "Your Name")); panel.add(tf_name,BorderLayout.PAGE_START); JPanel pn_msg=new JPanel(); pn_msg.setLayout(new BorderLayout()); pn_msg.setBorder(BorderFactory.createTitledBorder( "Your Message")); ta_msg=new JTextArea(); JScrollPane sp_msg=new JScrollPane(ta_msg); pn_msg.add(sp_msg); panel.add(pn_msg,BorderLayout.CENTER); JButton bt_send=new JButton("Send"); bt_send.setToolTipText("Send messages to yourself"); bt_send.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { app.sendMessage(tf_name.getText(), ta_msg.getText()); ta_msg.setText(""); } }); panel.add(bt_send,BorderLayout.PAGE_END); return panel; } private JMenuBar makeMenu() { // Setup menu bar JMenuBar menuBar = new JMenuBar(); // Setup menu options JMenu fileMenu = new JMenu("File"); fileMenu.setMnemonic('F'); menuBar.add(fileMenu); // File menu JMenuItem fileClose = new JMenuItem("Quit"); fileClose.setAccelerator(KeyStroke.getKeyStroke("ctrl W") ); fileClose.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { ChatApp.exit(); } }); fileMenu.add(fileClose); return menuBar; } public void setApp(ChatApp app) { this.app=app; } public void displayMessage(String source, String message,Date time) { ta_display.append(source+" ("+time.toString()+"): "+ message+"\n\n"); } }===Install and run the Chat Client Bundle===:a) Go to Run Configuration then OSGi Framework and make sure the client provider and interface are selected.:b) Select Add Required Bundles
1
edit