Changes

Jump to: navigation, search

Teams Winter 2011/team6/lab2

5,470 bytes added, 15:49, 12 April 2011
no edit summary
===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===
:badd the following code to ClientActivator  public void start(BundleContext bundleContext) Name your Plug-in Project throws Exception { ClientActivator.context = bundleContext; ServiceReference reference=context .getServiceReference(csIChatSystem.class.dps914getName()); if (reference!=null) { chatService=(IChatSystem)context.osgigetService(reference); if (chatService!=null) { ChatApp.labsetup(chatService); context.providerungetService(reference) again be sure ; } } } ===Implement classes required to select consume the target platform correctlyservice===
:ca) This time you can leave Create 2 Java Classes (ChatApp and ChatDialog):b) Make sure the Activator checked as you will need itpackage is defined correctly (cs.dps914. (Change the name of the activator to osgi.lab.client.app and cs.dps914.osgi.lab.providerclient.ClientActivatorgui respectively)
===Use the :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 Activator to find the 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); } }); } }
===Implement a class where one can consume the service==='''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 Service Consumer Bundle===
1
edit

Navigation menu