Startseite der AlphaAgent-Groupware  

Programmierung eigener Groupware-Plugins

Hier werden Sie in Kürze ausführliche Informationen zur Erstellung eigener Module für die Groupware AlphaAgent finden.
Für einen ersten Einblick finden Sie bereits zwei Java-Quellcode-Dateien, welche ein komplettes eigenes, aber funktionsloses Modul für den AlphaAgent darstellen:

package de.mydomain.alphaagent.example;

import java.awt.*;
import java.net.*;
import javax.swing.*;

import com.sowas.alphaagent.*;
import com.sowas.alphaagent._main.*;
import com.sowas.alphaagent._main.data.*;
import com.sowas.alphaagent._main.folder.*;
import com.sowas.lib.application.alphaagent.*;

/**
 * Ein beispielhaftes Plugin für den AlphaAgent.
 * Dieses Plguin hat keine eigene Funktionalität.
 * Es kann aber gut als Grundlage für neue Plugins verwendet werden.
 *  
 * @author Norbert Schäfers 
 */
public class ExamplePlugin extends JPanel implements AlphaAgentAPIConstants, AlphaAgentPlugin, 
						FolderConstants, PassDataListener {
	public static final String	TI_HELP = "Hilfe";  // ToolbarItem
	public static final String	TT_HELP = "Hilfe anzeigen";  // Tooltip
	public static final String	MENU_NAME = "Beispiel";
	CaptionPanel			captionPanel;
	MainFrame			mainFrame;
	ExamplePanel			examplePanel = null;
	ImageIcon 			iconHelp;

	/**
	 * Erzeugt das ExamplePlugin.
	 */
	public ExamplePlugin() {
		super();
	}

	/**
	 * Liefert den Namen des Plugins, welcher auch für das Menü verwendet wird.
	 * Gleichzeitig wird diese Name auch für die Indentifizierung des Plugins verwendet.
	 * Der Name ist daher konstant, aber grundsätzlich frei wählbar 
	 * (darf also einen anderen Namen als das Plugin selbst haben).
	 */
	public String getMenuViewName() {
		return MENU_NAME;
	}

	/**
	 * Liefert dieses Plugin zurück.
	 * 
	 * @return Dieses Plugin.
	 */
	public JPanel getPluginPanel() {
		return this;
	}

	/**
	 * Wird einmal beim ersten Start des Plugins aufgerufen (beim Start des Hauptprogramms).
	 * Erzeugt das CaptionPanel und das ExamplePanel.
	 * Außerdem wird ein Symbol zum Symbolpanel hinzugefügt und ein Eintrag in die 
	 * Ordneransicht gemacht.
	 */
	public void startup(MainFrame mainFrame, String strBaseDir) {
		this.mainFrame = mainFrame;
		
		setLayout(new BorderLayout());
		setBackground(new Color(232, 232, 232));
		
		// Die überschrift:
		captionPanel = new CaptionPanel(ExamplePlugin.MENU_NAME);
		add(captionPanel, BorderLayout.NORTH);

		// Das Hauptpanel für dieses Plugin wird erzeugt:
		examplePanel = new ExamplePanel(mainFrame, this);
		add(examplePanel, BorderLayout.CENTER);

		// Benötigte Images werden geladen:
		URL urlImage = null;
		try {
			urlImage = new URL(strBaseDir + "images/ger_example.gif");
			iconHelp = new ImageIcon(new URL(mainFrame.getBaseURL() 
						 + "/images/help.gif"));
		} catch (Exception e) {
			e.printStackTrace();
		}

		// Der große Button für die Symbolleiste ganz links wird erzeugt:
		// Es wird kein Listener (null) übergeben.
		mainFrame.addSymbolItem(new ImageIcon(urlImage), getMenuViewName(), null);

		// Ein Eintrag für die Ordneransicht wird erzeugt:
		FolderItem fiExample = new FolderItem(getMenuViewName(), FOLDERID_EXAMPLE);
		fiExample.setAllowsChildren(false);  // Keine Unterordner erlaubt
		// Der gerade erzeugte Eintrag wird nun der Ordneransicht hinzugefügt.
		// Hier wird kein Listener (null) übergeben.
		mainFrame.addFolderItem(null, fiExample, FolderPanel.NOTEXPANDED, null, false);
	}

	/**
	 * Wird einmal zum Beenden aufgerufen (meist beim Beenden des Hauptprogramms).
	 * Kann für "Aufräumarbeiten" verwendet werden.
	 */
	public void shutdown() {
	}

	/**
	 * Wird jedesmal aufgerufen, wenn das Panel des Plugins in den Vordergrund geholt wird.
	 * Dabei werden z.B. die Einträge in die Toolbar gemacht.
	 */
	public void activate() {
		examplePanel.activate();
		
		// Erzeugen eines Hilfe-Buttons in der Toolbar:
		// Als Listener wird examplePanel angegeben, in 
		// dessen actionPerformed(..) das Betätigen des
		// Buttons bearbeitet wird.
		mainFrame.addToolbarItem(TI_HELP, iconHelp, TT_HELP, examplePanel, true).
				setTextVisible(false);
	}

	/**
	 * Wird aufgerufen, wenn das Panel eines anderen Plugins in den Vordergrund kommt.
	 * Muss alle Einträge aus der Toolbar löschen, da diese 
	 * ja für jedes Plugin unterschiedlich sein können.
	 */
	public void deactivate() {
		examplePanel.deactivate();
		mainFrame.removeToolbarItem(TI_HELP);
	}

	/**
	 * Der Ordner im FolderPanel wurde geändert.
	 */
	public void folderChanged(){
	}
	
	/**
	 * Interface-Methode für eine optional(!!) zu verwende Kommunikation mit anderen Plugins. 
	 * Bearbeitet die "Aufträge", welche von den anderen Plugins kommen.
	 * Jedes Plugin, welches Funktionen und/oder Daten zur Verfügung stellen möchte, ist
	 * selber für dafür zuständig und muss dies dokumentieren.
	 * 
	 * @param pc Die zu verarbeitenden Daten.
	 * @return   Wenn die Verarbeitung geklappt hat das Ergebnis, sonst null.
	 */
	public Object handlePassData(PassDataset pc) {
		return null;
	}

}
           
 
package de.mydomain.alphaagent.example;

import java.awt.event.*;
import javax.swing.*;

import com.sowas.alphaagent._main.MainFrame;
import com.sowas.lib.util.*;

/**
 * Repräsentiert das HauptPanel des Example-Modules.
 * In diesem findet die Anzeige/Verarbeitung der Daten statt.
 * 
 * @author Norbert Schäfers 
 */
public class ExamplePanel extends JPanel implements ActionListener {
	MainFrame 	mainFrame;
	ExamplePlugin	examplePlugin;

	/**
	 * Erzeugt das HauptPanel.
	 * 
	 * @param mainFrame
	 * @param examplePlugin
	 */
	public ExamplePanel(MainFrame mainFrame, ExamplePlugin examplePlugin) {
		super();
		this.mainFrame = mainFrame;
		this.examplePlugin = examplePlugin;
		init();
	}

	private void init() {
	}

	public void activate() {
	}

	public void deactivate() {
	}

	public void actionPerformed(ActionEvent e) {
		if (e.getActionCommand().equals(ExamplePlugin.TI_HELP)){
			MessageDlg msgDlg=new MessageDlg("Hilfe...", 
							 "Hilfe?\nSelber nachdenken! ;-)", 
							 MessageDlg.MB_OK);
			msgDlg.setVisible(true);
		}
	}

}