Open main menu

CDOT Wiki β

Changes

Teams Winter 2011/team2/lab2

11,368 bytes added, 18:51, 18 February 2011
no edit summary
=Tutorial=
 
==Prerequisites==
* Download [http://www.eclipse.org/downloads/packages/eclipse-classic-361/heliossr1 Eclipse Classic]
 
==Creating and Setting the Interface Bundle==
*Run Eclipse
*click on the ecl.... package and click okay
[[File:Mani2T2.png]]
*Now close the manifest and save all changes
 
==Creating and Setting the Provide Bundle==
*Follow the same steps for creating a new plug-in projects but instead supply the name "ecl.team2.lab2.weathersystem.provider"
*Remove all contents within the src->current package and add a class file called "ProviderActivator"
*Add a new package to the current project we're dealing with and name it "ecl.team2.lab2.weathersystem.provider.internal" and within it create a class called "SimpleWeatherSystem"
*Copy and paste the following code to their respective file
'''ProviderActivator'''
<pre>
package ecl.team2.lab2.weathersystem.provider;
 
import org.osgi.framework.BundleActivator;
import org.osgi.framework.BundleContext;
 
import ecl.team2.lab2.weather.WeatherSystem;
import ecl.team2.lab2.weathersystem.provider.internal.SimpleWeatherSystem;
 
public class ProviderActivator implements BundleActivator {
 
private static BundleContext context;
 
static BundleContext getContext() {
return context;
}
 
/*
* (non-Javadoc)
* @see org.osgi.framework.BundleActivator#start(org.osgi.framework.BundleContext)
*/
public void start(BundleContext bundleContext) throws Exception {
ProviderActivator.context = bundleContext;
SimpleWeatherSystem sws = new SimpleWeatherSystem();
context.registerService(WeatherSystem.class.getName(), sws, null);
System.out.println("Weather Station On !");
}
 
/*
* (non-Javadoc)
* @see org.osgi.framework.BundleActivator#stop(org.osgi.framework.BundleContext)
*/
public void stop(BundleContext bundleContext) throws Exception {
ProviderActivator.context = null;
System.out.println("Weather Station Off !");
}
 
}
</pre>
'''SimpleWeatherSystem'''
<pre>
package ecl.team2.lab2.weathersystem.provider.internal;
 
import ecl.team2.lab2.weather.WeatherSystem;
import ecl.team2.lab2.weather.Weather;
import java.util.ArrayList;
import java.util.Random;
 
 
public class SimpleWeatherSystem implements WeatherSystem {
ArrayList<Weather> weathers = new ArrayList<Weather>();
public SimpleWeatherSystem(){
ArrayList<String> cities = new ArrayList<String>();
cities.add("Toronto");
cities.add("New York");
cities.add("Calgary");
cities.add("Ottawa");
cities.add("Vancouver");
cities.add("Regina");
cities.add("Winnipeg");
cities.add("St. John");
cities.add("Fredericton");
cities.add("Halifax");
cities.add("Quebec City");
cities.add("Whitehorse");
cities.add("Yellowknife");
for(String c:cities){
Random randomGenerator = new Random();
float temp = randomGenerator.nextFloat()+35;
float rain = randomGenerator.nextFloat()+10;
float snow = randomGenerator.nextFloat()+10;
float windspeed = randomGenerator.nextFloat()+50;
char winddirection = '.';
int r = randomGenerator.nextInt(4);
switch(r){
case 0:
winddirection = 'E';
break;
case 1:
winddirection = 'W';
break;
case 2:
winddirection = 'N';
break;
case 3:
winddirection = 'S';
break;
}
Weather w = new Weather(c, temp, rain, snow, windspeed, winddirection);
this.weathers.add(w);
System.out.println(w.toString());
}
}
public Weather getWeather(String city) throws Exception {
// TODO Auto-generated method stub
Weather found = null;
for(Weather w:this.weathers){
city = city.toLowerCase();
String wcity =w.getCity().toLowerCase();
if(city.equals(wcity)){
found = w;
return found;
}
}
return found;
}
 
}
</pre>
*Save and close both files and now open the manifest file
*Click on the dependencies tab then click on add in the "import packages" panel.
*In the search field, enter "ecl", then click on "ecl.team2.lab2.weather", and afterwords click okay
[[File:Manifest3T2.png]]
 
==Creating and Implementing the Client Bundle==
*Follow the same steps for creating a new plug-in projects but instead supply the name "ecl.team2.lab2.weathersystem.client"
*Remove all contents within the src->current package and add a class file called "Activator" and another class file called "
*Copy and paste the following code to their respective file
'''Activator'''
<pre>
package ecl.team2.lab2.weathersystem.client;
 
import org.osgi.framework.BundleActivator;
import org.osgi.framework.BundleContext;
import org.osgi.framework.ServiceReference;
 
import ecl.team2.lab2.weather.WeatherSystem;
 
public class Activator implements BundleActivator {
 
private static BundleContext context;
private WeatherSystem sws;
 
static BundleContext getContext() {
return context;
}
 
/*
* (non-Javadoc)
* @see org.osgi.framework.BundleActivator#start(org.osgi.framework.BundleContext)
*/
public void start(BundleContext bundleContext) throws Exception {
Activator.context = bundleContext;
ServiceReference reference = context.getServiceReference(WeatherSystem.class.getName());
if(reference != null){
sws = (WeatherSystem) context.getService(reference);
if(sws != null) {
WeatherDialog.runDialog(sws);
context.ungetService(reference);
} else
System.err.println("The Weather Station is down !!!");
} else
System.err.println("The Weather Station can not be found !!!");
}
 
/*
* (non-Javadoc)
* @see org.osgi.framework.BundleActivator#stop(org.osgi.framework.BundleContext)
*/
public void stop(BundleContext bundleContext) throws Exception {
Activator.context = null;
System.err.println("Client Not Interested !");
}
}
</pre>
'''WeatherDialog'''
<pre>
package ecl.team2.lab2.weathersystem.client;
import javax.swing.*;
 
import ecl.team2.lab2.weather.WeatherSystem;
 
import java.awt.*;
import java.awt.event.*;
 
 
public class WeatherDialog extends JFrame{
private static final long serialVersionUID = 1L;
private JPanel panel;
private JButton btnGo;
private JComboBox combo;
private JLabel labelTitle;
private JLabel labelTemperature;
private JLabel labelRain;
private JLabel labelSnow;
private JLabel labelWindDirection;
private JLabel labelWindSpeed;
private WeatherSystem sws;
String[] cities = {"Toronto","New York","Calgary","Ottawa","Vancouver",
"Regina","Winnipeg","St. John","Fredericton",
"Halifax","Quebec City", "Whitehorse","Yellowknife"
};
 
public WeatherDialog(){
panel = new JPanel();
panel.setPreferredSize(new Dimension(200,200));
panel.setLayout(new FlowLayout(FlowLayout.LEFT));
combo = new JComboBox();
for(int i=0;i<cities.length;i++){
combo.addItem(cities[i]);
}
panel.add(combo);
btnGo = new JButton("Go");
panel.add(btnGo);
btnGo.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
String chosencity = (String)combo.getSelectedItem();
ShowWeather(chosencity);
}
}
);
this.labelTitle = new JLabel();
this.labelTemperature = new JLabel();
this.labelRain = new JLabel();
this.labelSnow = new JLabel();
this.labelWindDirection = new JLabel();
this.labelWindSpeed = new JLabel();
panel.add(labelTitle);panel.add(labelTemperature);panel.add(labelRain);
panel.add(labelSnow);panel.add(labelWindDirection);panel.add(labelWindSpeed);
this.setTitle("Todays Weather");
// Display the window.
this.setContentPane(panel);
this.pack();
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
this.setLocationRelativeTo(null);
}
public void ShowWeather(String city){
try {
float temp = sws.getWeather(city).getTempInCelcius();
float rain =sws.getWeather(city).getRainInMM();
float snow = sws.getWeather(city).getSnowInMM();
char direction = sws.getWeather(city).getWindDirection();
float speed = sws.getWeather(city).getWindspeedInKM();
this.labelTitle.setText("Todays weather in "+ city);
this.labelTemperature.setText("Temperature: "+ String.format("%.2f", temp) + " Celcius");
this.labelRain.setText("Rain: " + String.format("%.2f", rain) + " mm");
this.labelSnow.setText("Snow: " + String.format("%.2f", snow) + " mm");
this.labelWindDirection.setText("Wind Direction: " + direction);
this.labelWindSpeed.setText("Speed: " + String.format("%.2f", speed) + " km/hr");
}
catch (Exception ex){
System.err.println(ex.getMessage());
}
}
private static void createAndShowGUI(WeatherSystem ws) {
WeatherDialog frame = new WeatherDialog();
frame.sws = ws;
}
public static void runDialog(final WeatherSystem ws) {
// Schedule a job for the event-dispatching thread:
// creating and showing this application's GUI.
javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGUI(ws);
}
});
}
}
</pre>
*Save and close both files and now open the manifest file
*Click on the dependencies tab then click on add in the "import packages" panel.
*In the search field, enter "ecl", then click on "ecl.team2.lab2.weather"
*Afterwords ensure you only have "metaInf" on the binary build panel checked and ensure that "out..= bin/" is included in your build.properties tab
[[File:MetafestcT2.png]]
[[File:Metafestc2T2.png]]
==Run Configuration Setting==
*After completing all previous steps, on the menu bar click on run, then click "run configuration.."
*A window should have popped up, on the left panel, double click on "OSGI Framework"
*The right panel should have altered, click on deselect all button to deactivate all bundles.
*click on the check box in the table dubbed "workspace", this is essentially what we have been working on throughout the tutorial.
*After click on the button "add required bundles" and click on the check box labeled "only show selected"
*This reveals all the bundles that are required for our small program to work. Now under "start level" column, place the items in the following order, click apply and then run the code by clicking the run button
[[File:RunConfT2.png]]
*Once executed, a java window should have popped up
[[File:Gui1T2.png]]
*Click Go and you should see something similar to this
[[File:Gui2T2.png]]
*Most of the values are randomly generated and shows an excellent example of OSGI
*This concludes the tutorial
==End==
1
edit