Open main menu

CDOT Wiki β

Changes

Teams Winter 2011/team6/lab2

9,993 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()+"):[[image"+ message+"\n\n"); } }===Install and run the Chat Client Bundle===:11PManifesta) Go to Run Configuration then OSGi Framework and make sure the client provider and interface are selected.png|300px]]:b) Select Add Required Bundles
1
edit