Changes

Jump to: navigation, search

Teams Winter 2011/team6/lab2

9,994 bytes added, 15:52, 12 April 2011
Install and run the Service Consumer Bundle
='''Lab 2 OSGI Tutorial='''
:After downloading the “Eclipse classic” from [http://www.eclipse.org/downloads/ Eclipse] then proceed with the following steps to create Chat Program with OSGi.
===Define MANIFEST.MF===
 
:a) Select the MANIFEST.MF
:c) Add cs.dps914.osgilab.chatinterface
:[[==image:11PManifest.png|600px]]   ===Create Java Classes Required===:a) Create 2 Java Classes (SimpleMessage and SimpleChatSystem):b) Make sure the package is defined correctly (cs.dps914.osgi.lab.provider.internals):[[image:12PClass.png |300px]]:c) Fill Java Classes with following Data ::SimpleMessage.java::  import java.util.Calendar; import java.util.Date; import cs.dps914.osgi.lab.chatinterface.IMessage; public class SimpleMessage implements IMessage { private String source; private Date time; private String message; public SimpleMessage(String src,String msg) { setSource(src); setTime(Calendar.getInstance().getTime()); setMessage(msg); } public void setSource(String src) { if (src!=null) { source=src; } else { source=""; } } public String getSource() { return source; } public void setTime(Date time) { if (time!=null) { this.time=time; } else { this.time=Calendar.getInstance().getTime(); } } public Date getTime() { return time; } public void setMessage(String msg) { if (msg!=null) { message=msg; } else { message=""; } } public String getMessage() { return message; } } SimpleChatSystem.java  import java.util.ArrayList; import cs.dps914.osgi.lab.chatinterface.IChatClient; import cs.dps914.osgi.lab.chatinterface.IChatSystem; import cs.dps914.osgi.lab.chatinterface.IMessage; public class SimpleChatSystem implements IChatSystem { public static ArrayList<IChatClient> clientList=new ArrayList<IChatClient>(); public static ArrayList<IMessage> messageList=new ArrayList<IMessage>(); public void registerClient(IChatClient client) { clientList.add(client); } public ArrayList<IMessage> appendMessage(String src, String msg) { IMessage newMsg=new SimpleMessage(src,msg); messageList.add(newMsg); for (IChatClient client:clientList) { client.receiveMessage(newMsg); } return messageList; } } ===Edit ChatActivator.java to add the following:===  import org.osgi.framework.BundleActivator; import org.osgi.framework.BundleContext; import cs.dps914.osgi.lab.chatinterface.IChatSystem; import cs.dps914.osgi.lab.provider.internals.SimpleChatSystem; and  public void start(BundleContext bundleContext) throws Exception { ChatActivator.context = bundleContext; IChatSystem vs=new SimpleChatSystem(); context.registerService(IChatSystem.class.getName(),vs,null); }  ===Install and Run the Chat Provider Bundle===  : a) Right click on MAINFEST.MF of the Provider, and go to Run As then Run Configuration: b) Right click on OSGI Framework and create a new Configuration: c) In Workspace, check the chatinterface bundle and the provider bundle.: d) Deselect Target Platform and click on Add Required Bundles, then check the Only show selected.: 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=== :a) 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.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

Navigation menu