1
edit
Changes
no edit summary
<source lang=java>
package ecl.team2.lab3.weathermodel;
import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeSupport;
import java.util.Random;
public class Weather {
private float windspeedInKM;
private char windDirection;
private PropertyChangeSupport propertyChangeSupport = new PropertyChangeSupport(this);
public Weather()
{
}
public Weather(String cit)
{
city=cit;
Random randomGenerator = new Random();
tempInCelcius = randomGenerator.nextFloat()+35;
rainInMM = randomGenerator.nextFloat()+10;
snowInMM = randomGenerator.nextFloat()+10;
windspeedInKM = randomGenerator.nextFloat()+50;
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;
}
}
public Weather(String pcity, float ptemp, float prain, float psnow, float pwspeed, char pwdirection){
public void setWindDirection(char windDirection) {
propertyChangeSupport.firePropertyChange("", this.windDirection, this.windDirection = windDirection);
}
public void setWindspeedInKM(float windspeedInKM) {
propertyChangeSupport.firePropertyChange("", this.windspeedInKM, this.windspeedInKM = windspeedInKM);
}
public void setSnowInMM(float snowInMM) {
propertyChangeSupport.firePropertyChange("", this.snowInMM, this.snowInMM = snowInMM);
}
public void setRainInMM(float rainInMM) {
propertyChangeSupport.firePropertyChange("", this.rainInMM, this.rainInMM = rainInMM);
}
public void setTempInCelcius(float tempInCelcius) {
propertyChangeSupport.firePropertyChange("", this.tempInCelcius, this.tempInCelcius = tempInCelcius);
}
public void setCity(String city) {
propertyChangeSupport.firePropertyChange("", this.city, this.city = city);
}
public String getCity() {
return city;
}
public void addPropertyChangeListener(String name, PropertyChangeListener listener)
{
propertyChangeSupport.addPropertyChangeListener(name,listener);
}
public void removePropertyChangeListener(PropertyChangeListener listener)
{
propertyChangeSupport.addPropertyChangeListener(listener);
}
winddirection = 'S';
break;
}
this.weathers.add(w);
System.out.println(w.toString());
}
public void removeCity(String oCity)
{
this.weathers.remove(oCity);
}
*These classes will be used later on into the tutorial.
==Creating and Using Commands/Views=====Commands===
*Commands are in the most laymen terms, actions. What we mean by action is that we are insisting through some physical representation, whether it be a button or plain-typed text, we are calling an event. That event can be to exit the program or even perform a feature within the application.
*Let's create our first menu for the menu bar that will contain a command to exit the application.
For AddCityHandler.java
<source lang=java>
package ecl.team2.lab3.commands;
import org.eclipse.core.commands.AbstractHandler;
import org.eclipse.core.commands.ExecutionEvent;
import org.eclipse.core.commands.ExecutionException;
import org.eclipse.core.commands.IHandler;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.PartInitException;
import org.eclipse.ui.handlers.HandlerUtil;
//This will allow us to edit the content using the editor window
import ecl.team2.lab3.editor.WeatherEditor;
import ecl.team2.lab3.editor.WeatherInput;
public class AddCityHandler extends AbstractHandler implements IHandler {
@Override
public Object execute(ExecutionEvent event) throws ExecutionException {
IWorkbenchWindow window = HandlerUtil.getActiveWorkbenchWindow(event);
IWorkbenchPage page = window.getActivePage();
WeatherInput input = new WeatherInput("-1");
try
{
page.openEditor(input, WeatherEditor.ID);
}
catch (PartInitException e)
{
System.out.println(e.getMessage());
}
return null;
}
}
</source>
<br/>
<br/>
'''RemoveCityHandler'''
For Commmand
<pre>
id: ecl.team2.lab3.rcpExample.RemoveCity
name: Add City
defaultHandler: ecl.team2.lab3.commands.RemoveCityHandler
</pre>
For Menu Command
<pre>
commandId: ecl.team2.lab3.rcpExample.RemoveCity
label: Remove City
tooltip: Removes a city or multiple cities based on selection
</pre>
For RemoveCityHandler.java
<source lang=java>
package ecl.team2.lab3.commands;
import java.util.ArrayList;
import java.util.Iterator;
import org.eclipse.core.commands.AbstractHandler;
import org.eclipse.core.commands.ExecutionEvent;
import org.eclipse.core.commands.ExecutionException;
import org.eclipse.core.commands.IHandler;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.handlers.HandlerUtil;
import ecl.team2.lab3.rcpexample.WeatherView;
import ecl.team2.lab3.weathermodel.*;
public class RemoveCityHandler extends AbstractHandler implements IHandler {
@Override
public Object execute(ExecutionEvent event) throws ExecutionException {
IWorkbenchWindow window = HandlerUtil.getActiveWorkbenchWindow(event);
IWorkbenchPage page = window.getActivePage();
WeatherView view = (WeatherView) page.findView(WeatherView.ID);
ISelection select = view.getSite().getSelectionProvider().getSelection();
if(select!=null && select instanceof IStructuredSelection)
{
IStructuredSelection sel = (IStructuredSelection)select;
for(Iterator<Weather> iter = sel.iterator(); iter.hasNext();)
{
Weather temp = iter.next();
SimpleWeatherSystem.INSTANCE.removeCity(temp.getCity());
}
view.getViewer().refresh();
}
return null;
}
}
</source>
<br/>
===Views===
Since most of the back-end coding has been completed through the "Commands" section, this portion will be brief.
*In order to view and edit our content, we must create a view. Creating a view is very similar to creating a command, except you must add the extension "org.eclipse.ui.views" in our MANIFEST file.
*You should have something that looks akin to this
[[File:UiviewsT2.png]]
*Now that we've included the extension, we should create a new view so we may view and edit our content. We do this by right-clicking our recent addition, scroll to "New", and then click on "view".
*Enter the following information below and once that's completed click on "class*". Clicking on "class*" will allow us to create classes on the fly using the "New Java Class" wizard. Most of the mandatory components for creating a view java class has already been added, so all we have to do is click "Finish"
[[File:Ext4T2.png]]
*Replace code inside "WeatherView.java" with:
<source lang=java>
package ecl.team2.lab3.rcpexample;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Text;
import org.eclipse.ui.part.ViewPart;
public class WeatherView extends ViewPart
{
public static final String ID = "ecl.team2.lab3.rcpexample.WeatherView";
@Override
public void createPartControl(Composite parent)
{
this.setPartName("Weather");
Text text = new Text(parent, SWT.BORDER);
text.setText("Weather content will be displayed here");
}