All Downloads are FREE. Search and download functionalities are using the official Maven repository.

jadex.bdi.examples.alarmclock.AlarmsGui Maven / Gradle / Ivy

Go to download

The Jadex BDI applications package contain several example applications, benchmarks and testcases using BDI agents.

The newest version!
package jadex.bdi.examples.alarmclock;

import jadex.bdi.runtime.IBDIExternalAccess;
import jadex.bdi.runtime.IBDIInternalAccess;
import jadex.bridge.IComponentStep;
import jadex.bridge.IInternalAccess;
import jadex.bridge.service.types.clock.IClockService;
import jadex.commons.future.IFuture;
import jadex.commons.gui.future.SwingDefaultResultListener;
import jadex.commons.gui.jtable.ObjectTableModel;
import jadex.commons.transformation.annotations.Classname;

import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import jadex.commons.beans.PropertyChangeEvent;
import jadex.commons.beans.PropertyChangeListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.ListSelectionModel;
import javax.swing.SwingUtilities;
import javax.swing.table.TableCellRenderer;

/**
 *  The alarm dialog presenting a list of alarms..
 */
public class AlarmsGui extends JFrame
{
	//-------- attributes --------

	/** The alarms table. */
	protected JTable alarms;

	/** The agent. */
	protected IBDIExternalAccess agent;

	/** The property change listener. */
	protected PropertyChangeListener plis;

	//-------- constructors --------

	/**
	 *  Create a new test center panel.
	 */
	public AlarmsGui(final IBDIExternalAccess agent)
	{
		super("Alarms");
		this.agent = agent;
		this.plis = new PropertyChangeListener()
		{
			public void propertyChange(PropertyChangeEvent evt)
			{
				//System.out.println("-----:"+evt);
				if(evt.getPropertyName().equals("alarmtime"))
					alarms.repaint();
			}
		};

		final ObjectTableModel tadata = new ObjectTableModel(new String[]{"Message", "Mode", "Active"})
		{
			public void setValueAt(Object value, int row, int col)
			{
				Alarm alarm = (Alarm)getObjectForRow(row);
				//System.out.println("alarm is: "+alarm);
				alarm.setActive(((Boolean)value).booleanValue());
				modifyData(value, row, col);
				fireTableCellUpdated(row, col);
			}
		};
		tadata.setColumnClass(Boolean.class, 2);
		tadata.setColumnEditable(true, 2);
		
		agent.scheduleStep(new IComponentStep()
		{
			public IFuture execute(IInternalAccess ia)
			{
//				SServiceProvider.getService(agent.getServiceProvider(), IClockService.class)
				ia.getServiceContainer().getRequiredService("clockservice")
					.addResultListener(new SwingDefaultResultListener(AlarmsGui.this)
				{
					public void customResultAvailable(Object result)
					{
						final IClockService cs = (IClockService)result;
						alarms = new JTable(tadata)
						{
							public Component prepareRenderer(
								TableCellRenderer renderer, int row, int column)
							{
								Component c = super.prepareRenderer(renderer, row, column);
	
								if(!isRowSelected(row))
								{
									Alarm alarm = (Alarm)tadata.getObjectForRow(row);
	//								IClockService cs = (IClockService)agent.getServiceContainer().getService(IClockService.class);
									if(alarm.getAlarmtime(cs.getTime())()
								{
									@Classname("alarms")
									public IFuture execute(IInternalAccess ia)
									{
										IBDIInternalAccess bia = (IBDIInternalAccess)ia;
										final Alarm[] alarms = (Alarm[])bia.getBeliefbase().getBeliefSet("alarms").getFacts();
										SwingUtilities.invokeLater(new Runnable()
										{
											public void run()
											{
												for(int i=0; i()
		{
			@Classname("addAlarm")
			public IFuture execute(IInternalAccess ia)
			{
				IBDIInternalAccess bia = (IBDIInternalAccess)ia;
				bia.getBeliefbase().getBeliefSet("alarms").addFact(alarm);
				return IFuture.DONE;
			}
		});
		
//		agent.getBeliefbase().addBeliefSetFact("alarms", alarm);
		ObjectTableModel tadata = (ObjectTableModel)alarms.getModel();
		tadata.insertRow(rowcnt, new Object[]{alarm.getMessage(),
			alarm.getMode(), Boolean.valueOf(alarm.isActive())}, alarm);
	}

	/**
	 *  remove a row from the table.
	 *  Updates belief set "alarms".
	 *  Removes row from the jtable.
	 *  Removes a property change listener from the alarm.
	 *  @param alarm The alarm.
	 */
	public void removeRow(final Alarm alarm)
	{
//		System.out.println("Removing:"+alarm);
		agent.scheduleStep(new IComponentStep()
		{
			@Classname("removeAlarm")
			public IFuture execute(IInternalAccess ia)
			{
				IBDIInternalAccess bia = (IBDIInternalAccess)ia;
				bia.getBeliefbase().getBeliefSet("alarms").removeFact(alarm);
				return IFuture.DONE;
			}
		});
//		agent.getBeliefbase().removeBeliefSetFact("alarms", alarm);
		ObjectTableModel tadata = (ObjectTableModel)alarms.getModel();
		tadata.removeRow(alarm);
		alarm.removePropertyChangeListener(plis);
	}

	/**
	 *  Main for starting.
	 */
	public static void main(String[] args)
	{
		/*AlarmsGui ad = new AlarmsGui(null);
		ad.pack();
		ad.setVisible(true);*/
	}

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy