From: <jan...@us...> - 2007-01-14 20:17:08
|
Revision: 505 http://svn.sourceforge.net/magicmap/?rev=505&view=rev Author: jan_fride Date: 2007-01-14 12:17:04 -0800 (Sun, 14 Jan 2007) Log Message: ----------- update plugins Added Paths: ----------- trunk/magicmapclient/src/net/sf/magicmap/client/plugin/AbstractPlugin.java trunk/magicmapclient/src/net/sf/magicmap/client/plugin/IPlugin.java trunk/magicmapclient/src/net/sf/magicmap/client/plugin/IPluginDescriptor.java trunk/magicmapclient/src/net/sf/magicmap/client/plugin/InvalidPluginDescriptorException.java trunk/magicmapclient/src/net/sf/magicmap/client/plugin/PluginException.java trunk/magicmapclient/src/net/sf/magicmap/client/plugin/PluginLoader.java trunk/magicmapclient/src/net/sf/magicmap/client/plugin/PluginManager.java trunk/magicmapclient/src/net/sf/magicmap/client/plugin/PluginRepository.java trunk/magicmapclient/src/net/sf/magicmap/client/plugin/SimplePluginDescriptor.java trunk/magicmapclient/src/net/sf/magicmap/client/plugin/SimpleVendor.java trunk/magicmapclient/src/net/sf/magicmap/client/plugin/action/ trunk/magicmapclient/src/net/sf/magicmap/client/plugin/action/InstallPluginAction.java trunk/magicmapclient/src/net/sf/magicmap/client/plugin/action/LoadPluginsAction.java trunk/magicmapclient/src/net/sf/magicmap/client/plugin/action/ShowPluginsAction.java trunk/magicmapclient/src/net/sf/magicmap/client/plugin/action/UninstallPluginAction.java trunk/magicmapclient/src/net/sf/magicmap/client/plugin/forms/ trunk/magicmapclient/src/net/sf/magicmap/client/plugin/forms/PluginsForm.java trunk/magicmapclient/src/net/sf/magicmap/client/plugin/package.html trunk/magicmapclient/src/net/sf/magicmap/client/plugin/ui/ trunk/magicmapclient/src/net/sf/magicmap/client/plugin/ui/ArtifactRepositoryTableModel.java trunk/magicmapclient/src/net/sf/magicmap/client/plugin/ui/PluginDescriptorModel.java trunk/magicmapclient/src/net/sf/magicmap/client/plugin/ui/PluginDialog.java trunk/magicmapclient/src/net/sf/magicmap/client/plugin/ui/PluginTableModel.java trunk/magicmapclient/src/net/sf/magicmap/client/plugin/ui/PluginTableRenderer.java trunk/magicmapclient/src/net/sf/magicmap/client/plugin/util/ trunk/magicmapclient/src/net/sf/magicmap/client/plugin/util/DirWalker.java trunk/magicmapclient/src/net/sf/magicmap/client/plugin/util/IPluginVF.java trunk/magicmapclient/src/net/sf/magicmap/client/plugin/util/OperatingSystemInfo.java trunk/magicmapclient/src/net/sf/magicmap/client/plugin/util/PluginComparator.java trunk/magicmapclient/src/net/sf/magicmap/client/plugin/util/PluginDescriptorConverter.java trunk/magicmapclient/src/net/sf/magicmap/client/plugin/util/PluginDescriptorReader.java Added: trunk/magicmapclient/src/net/sf/magicmap/client/plugin/AbstractPlugin.java =================================================================== --- trunk/magicmapclient/src/net/sf/magicmap/client/plugin/AbstractPlugin.java (rev 0) +++ trunk/magicmapclient/src/net/sf/magicmap/client/plugin/AbstractPlugin.java 2007-01-14 20:17:04 UTC (rev 505) @@ -0,0 +1,104 @@ + +package net.sf.magicmap.client.plugin; + +import net.sf.magicmap.artifact.ArtifactComparator; +import net.sf.magicmap.artifact.IArtifact; +import net.sf.magicmap.client.controller.IController; +import net.sf.magicmap.client.utils.Settings; + +import javax.swing.*; +import java.awt.*; + +/** + * Eine Klasse die das Implementieren von Plugins erleichtert. + * + */ +public class AbstractPlugin implements IPlugin { + + protected IController controller; + + private final IPluginDescriptor descriptor; + + private static final ArtifactComparator cmp = new ArtifactComparator(); + + public static final AbstractPlugin EMPTY_PLUGIN = new AbstractPlugin(IPluginDescriptor.EMPTY); + /** + * + * @param descriptor + */ + protected AbstractPlugin(net.sf.magicmap.client.plugin.IPluginDescriptor descriptor) { + assert (descriptor != null); + this.descriptor = descriptor; + } + + public void disposePlugin(){ + + } + + public void setController(IController controller){ + this.controller = controller; + } + + public void startPlugin(){ + + } + + public void stopPlugin(){ + + } + + public void setup(Settings settings){ + + } + + public IPluginDescriptor getPluginInfos(){ + return this.descriptor; + } + + public String getArtifactId(){ + return this.descriptor.getArtifactId(); + } + + public String getGroupId(){ + return this.descriptor.getGroupId(); + } + + public final JFrame getFrame(Component c){ + while (c != null) { + if (c instanceof JFrame) return (JFrame) c; + c = c.getParent(); + } + return null; + } + + /** + * Called after the client is connected + */ + public void connect(){ + + } + + public net.sf.magicmap.artifact.Version getVersion(){ + return this.descriptor.getVersion(); + } + + /** + * Called after a new map was loaded. + */ + public void loadMap(){ + + } + + public int compareTo(IArtifact o){ + return AbstractPlugin.cmp.compare(this, o); + } + + /** + * + * @return + */ + @Override + public int hashCode(){ + return descriptor.hashCode(); + } +} Added: trunk/magicmapclient/src/net/sf/magicmap/client/plugin/IPlugin.java =================================================================== --- trunk/magicmapclient/src/net/sf/magicmap/client/plugin/IPlugin.java (rev 0) +++ trunk/magicmapclient/src/net/sf/magicmap/client/plugin/IPlugin.java 2007-01-14 20:17:04 UTC (rev 505) @@ -0,0 +1,56 @@ + +package net.sf.magicmap.client.plugin; + +import net.sf.magicmap.artifact.IArtifact; +import net.sf.magicmap.artifact.IConfigureable; +import net.sf.magicmap.client.controller.IController; + +/** + * Interface f\xFCr alle Plugins. + * Ein Plugin muss dieses Interface implementieren und einen Konstruktor haben + * der ein IPluginDescriptor als einziges Argument annimmt. + * + * @version 0.1 + * @author jan_fride (ja...@fr...) + */ +public interface IPlugin extends IArtifact, IConfigureable { + + /** + * Starts the plugin. + */ + public void startPlugin(); + + /** + * STops the plugin (if it atsrtet Threads etc). + */ + public void stopPlugin(); + + /** + * Get rid of all resources the plugin aquired. + */ + public void disposePlugin(); + + /** + * For Setter injection. + * + * @param controller the controller foe our application + */ + public void setController(IController controller); + + /** + * + * @return informationen \xFCber dieses Plugin + */ + public IPluginDescriptor getPluginInfos(); + + /** + * Called after the client is connected + */ + public void connect(); + + /** + * Called after a new map was loaded. + */ + public void loadMap(); + +} Added: trunk/magicmapclient/src/net/sf/magicmap/client/plugin/IPluginDescriptor.java =================================================================== --- trunk/magicmapclient/src/net/sf/magicmap/client/plugin/IPluginDescriptor.java (rev 0) +++ trunk/magicmapclient/src/net/sf/magicmap/client/plugin/IPluginDescriptor.java 2007-01-14 20:17:04 UTC (rev 505) @@ -0,0 +1,89 @@ + +package net.sf.magicmap.client.plugin; + +import net.sf.magicmap.artifact.IArtifact; +import net.sf.magicmap.artifact.IVendor; + +import java.util.ArrayList; +import java.util.Collection; + +/** + * + */ +public interface IPluginDescriptor extends IArtifact { + + /** + * Der Name des Plugins + * @return name des Plugins + */ + public String getName(); + + /** + * Der Author des Plugins + * @return der Author + */ + public IVendor getVendor(); + + /** + * Eine Beschreibung des Plugins + * @return eine Beschreibung + */ + public String getDescription(); + + /** + * Die Version des Plugins. Die Versionierung w\xE4re z.b. + * 0.1.34-SNAPSHOT oder 1.0.0 + * @return die Version. + */ + public net.sf.magicmap.artifact.Version getVersion(); + + /** + * Eine Liste der Abh\xE4ngigkeiten des Plugins. + * @return alle Artifakte von denen das Plugin abh\xE4ngt. + */ + public Collection<String[]> getDependencies(); + + /** + * Returns true if the plugin can run on your system. + * @return + */ + public boolean isOsSupported(); + + public static final IPluginDescriptor EMPTY = new IPluginDescriptor() { + public String getName() { + return ""; + } + + public IVendor getVendor() { + return IVendor.EMPTY; + } + + public String getDescription() { + return ""; + } + + public net.sf.magicmap.artifact.Version getVersion() { + return new net.sf.magicmap.artifact.Version("0.0.0"); + } + + public Collection<String[]> getDependencies() { + return new ArrayList<String[]>(); + } + + public boolean isOsSupported() { + return false; + } + + public String getArtifactId() { + return ""; + } + + public String getGroupId() { + return ""; + } + + public int compareTo(IArtifact o) { + return -1; + } + }; +} Added: trunk/magicmapclient/src/net/sf/magicmap/client/plugin/InvalidPluginDescriptorException.java =================================================================== --- trunk/magicmapclient/src/net/sf/magicmap/client/plugin/InvalidPluginDescriptorException.java (rev 0) +++ trunk/magicmapclient/src/net/sf/magicmap/client/plugin/InvalidPluginDescriptorException.java 2007-01-14 20:17:04 UTC (rev 505) @@ -0,0 +1,12 @@ + +package net.sf.magicmap.client.plugin; + +/** + + */ +public class InvalidPluginDescriptorException extends PluginException { + + public InvalidPluginDescriptorException(String message) { + super(message); + } +} Added: trunk/magicmapclient/src/net/sf/magicmap/client/plugin/PluginException.java =================================================================== --- trunk/magicmapclient/src/net/sf/magicmap/client/plugin/PluginException.java (rev 0) +++ trunk/magicmapclient/src/net/sf/magicmap/client/plugin/PluginException.java 2007-01-14 20:17:04 UTC (rev 505) @@ -0,0 +1,13 @@ + +package net.sf.magicmap.client.plugin; + +/** + * Base class for all Pluginexceptions. We use unchecked Exceptions + * + */ +public class PluginException extends RuntimeException { + + public PluginException(String message) { + super(message); + } +} Added: trunk/magicmapclient/src/net/sf/magicmap/client/plugin/PluginLoader.java =================================================================== --- trunk/magicmapclient/src/net/sf/magicmap/client/plugin/PluginLoader.java (rev 0) +++ trunk/magicmapclient/src/net/sf/magicmap/client/plugin/PluginLoader.java 2007-01-14 20:17:04 UTC (rev 505) @@ -0,0 +1,101 @@ + +package net.sf.magicmap.client.plugin; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import java.lang.reflect.Constructor; +import java.net.JarURLConnection; +import java.net.URL; +import java.net.URLClassLoader; +import java.util.Iterator; +import java.util.LinkedList; +import java.util.List; + +/** + * Created by IntelliJ IDEA. + */ +public class PluginLoader extends URLClassLoader implements Iterable<IPlugin> { + + private static final Log log = LogFactory.getLog(PluginLoader.class); + + /** + * List of all loaded plugins. + */ + private final List<IPlugin> pluginList = new LinkedList<IPlugin>(); + private final List<URL> brokenUrlList = new LinkedList<URL>(); + + /** + * + * @param pluginPath an arry containing paths to installed plugins. + */ + public PluginLoader(URL[] pluginPath) { + super(pluginPath); + } + + /** + * The number of loaded plugins + * @return the number of loaded plugins + */ + public int getNumberOfPlugins(){ + return this.pluginList.size(); + } + + /** + * + * @return an iterator for the installed plugins. + */ + public Iterator<IPlugin> iterator(){ + return this.pluginList.iterator(); + } + + /** + * Durchsucht alle URLS nach Plugins. und liefert die Klassen. + * + */ + public void loadPlugins(){ + PluginLoader.log.info("Loading plugins:"); + URL[] urLs = super.getURLs(); + for (URL url : urLs){ + try { + net.sf.magicmap.client.plugin.util.DirWalker walker = new net.sf.magicmap.client.plugin.util.DirWalker(url); + for (URL jarUrl: walker.getFiles()){ + try{ + loadPlugin(jarUrl); + } + catch (Exception ex){ + brokenUrlList.add(jarUrl); + } + } + } catch (Exception e) { + brokenUrlList.add(url); + } + } + } + + /** + * L\xE4dt alles aus einer URL. + * @param url + */ + private void loadPlugin(URL url) throws Exception{ + // first. Descriptor laden. + String jarUrl = "jar:" + url.toString() + "!/META-INF/plugin.xml"; + JarURLConnection con = (JarURLConnection) new URL(jarUrl).openConnection(); + net.sf.magicmap.client.plugin.util.PluginDescriptorReader descriptorReader = new net.sf.magicmap.client.plugin.util.PluginDescriptorReader(con.getInputStream()); + net.sf.magicmap.client.plugin.IPluginDescriptor descriptor = descriptorReader.getDescriptor(); + String aClass = descriptorReader.getPluginClass(); + + addURL(new URL(url.toString())); + + + Class clazz = findClass(aClass); + Constructor[] constructors = clazz.getConstructors(); + + Constructor piConstructor = clazz.getConstructor(new Class[]{net.sf.magicmap.client.plugin.IPluginDescriptor.class}); + + net.sf.magicmap.client.plugin.IPlugin plugin = (IPlugin) piConstructor.newInstance(descriptor); + this.pluginList.add(plugin); + PluginLoader.log.info("Plugin loaded"); + + } +} Added: trunk/magicmapclient/src/net/sf/magicmap/client/plugin/PluginManager.java =================================================================== --- trunk/magicmapclient/src/net/sf/magicmap/client/plugin/PluginManager.java (rev 0) +++ trunk/magicmapclient/src/net/sf/magicmap/client/plugin/PluginManager.java 2007-01-14 20:17:04 UTC (rev 505) @@ -0,0 +1,454 @@ + +package net.sf.magicmap.client.plugin; + +import net.sf.magicmap.artifact.*; +import net.sf.magicmap.client.controller.IController; +import net.sf.magicmap.client.gui.MainGUI; +import net.sf.magicmap.client.gui.forms.UserInterface; +import net.sf.magicmap.client.gui.utils.table.FilteredTableModel; +import net.sf.magicmap.client.gui.utils.table.NotFilter; +import net.sf.magicmap.client.plugin.action.ShowPluginsAction; +import net.sf.magicmap.client.plugin.forms.PluginsForm; +import net.sf.magicmap.client.plugin.ui.PluginDescriptorModel; +import net.sf.magicmap.client.utils.AncestorAdaptor; +import net.sf.magicmap.client.utils.Settings; +import org.apache.log4j.Logger; + +import javax.swing.*; +import javax.swing.event.AncestorEvent; +import javax.swing.event.EventListenerList; +import javax.swing.event.ListSelectionEvent; +import javax.swing.event.ListSelectionListener; +import javax.swing.table.DefaultTableModel; +import javax.swing.table.TableModel; +import java.awt.*; +import java.awt.event.ItemEvent; +import java.awt.event.ItemListener; +import java.io.*; +import java.net.MalformedURLException; +import java.net.URISyntaxException; +import java.net.URL; +import java.util.*; + +/** + * Manages all Plugin in the system. + * The Pluginmanager has the following Attributes. + * <dl> + * <dt>AVAILABLE_PLUGINS</dt><dd>A List of all available plugins</dd> + * <dt>INSTALLED_PLUGINS</dt><dd>A List of all installed plugins</dd> + * <dt>PLUGIN_DETAILS</dt><dd>The currently selected plugins details (if any)</dd> + * </dl> + */ +public class PluginManager implements IConfigureable, UserInterface, Iterable<net.sf.magicmap.client.plugin.IPluginDescriptor>, ItemSelectable { + private FilteredTableModel installedModel; + private DefaultTableModel tableModel; + private FilteredTableModel availableModel; + + + + public enum Attributes{ + AvailablePlugins("AVAILABLE_PLUGINS"), + InstalledPlugins("INSTALLED_PLUGINS"), + PluginDetails("PLUGIN_DETAILS"), + PluginRepository("PLUGIN_REPOSITORY"), + PluginActions("PLUGIN_ACTIONS"); + + private final String name; + private Attributes(String name){ + this.name = name; + } + public String getName(){ + return name; + } + } + + private static final Logger log = Logger.getLogger(PluginManager.class); + + private final Map<net.sf.magicmap.client.plugin.IPluginDescriptor, IPlugin> plugins = new TreeMap<net.sf.magicmap.client.plugin.IPluginDescriptor, IPlugin>(); + + + + /** + * Used to find and setup the plugins + */ + private final Settings settings; + + /** + * + */ + private final IController controller; + + /** + * Loads all installed plugins + */ + private net.sf.magicmap.client.plugin.PluginLoader pluginLoader; + + + /** + * contains a list of plugins the user can install. + */ + private PluginRepository repository; + + private PluginDescriptorModel pluginDetailModel; + + private final DefaultListSelectionModel installedPluginSelection = new DefaultListSelectionModel(); + private final DefaultListSelectionModel availablePluginSelection = new DefaultListSelectionModel(); + private final TableSelectListener tableSelectionListener = new TableSelectListener(); + private final EventListenerList listenerList = new EventListenerList(); + + /** + * + * @param settings the clients settings. + * @param controller the controller. + */ + public PluginManager(Settings settings, IController controller) throws MalformedURLException { + this.settings = settings; + this.controller = controller; + this.pluginLoader = null; + + controller.getMapView().addAncestorListener(new AncestorAdaptor() { + @Override + public void ancestorAdded(AncestorEvent event){ + MainGUI mainGUI = MainGUI.getInstance(); + JMenuBar bar = mainGUI.getJMenuBar(); + JMenu jMenu = bar.getMenu(2); + jMenu.addSeparator(); + jMenu.add(new ShowPluginsAction(mainGUI, PluginManager.this)); + } + }); + + repository = new PluginRepository(new URL("http://vierzig4.dyndns.org/magicmap-plugins/")); + tableModel = new DefaultTableModel(); + tableModel.addColumn("Name"); + tableModel.addColumn("Version"); + tableModel.addColumn("--"); + installedModel = new FilteredTableModel(tableModel); + + FilteredTableModel.Filter installedFilter = new FilteredTableModel.Filter() { + public boolean evaluate(Object[] o) { + return isInstalled((IArtifact) o[0]); + } + + public int[] getColumns() { + return new int[]{2}; + } + }; + installedModel.addFilter(installedFilter); + availableModel = new FilteredTableModel(tableModel); + availableModel.addFilter(new NotFilter(installedFilter)); + setup(settings); + + pluginDetailModel = new net.sf.magicmap.client.plugin.ui.PluginDescriptorModel(); + addItemListener(pluginDetailModel); + + installedPluginSelection.addListSelectionListener(tableSelectionListener); + availablePluginSelection.addListSelectionListener(tableSelectionListener); + } + + /** + * Adds the plugin. If the plugin exist an IllegalArgumentException will + * be thrown. + * + * @param plugin + * @throws IllegalArgumentException + */ + private void addPlugin(IPlugin plugin) throws IllegalArgumentException{ + plugin.setController(this.controller); + plugin.setup(this.settings); + plugins.put (plugin.getPluginInfos(), plugin); + tableModel.addRow(new Object[]{ + plugin.getPluginInfos().getName(), + plugin.getVersion(), plugin.getPluginInfos()} + ); + } + + /** + * + */ + private void loadPlugins(){ + + this.pluginLoader.loadPlugins(); + + for (IPlugin iPlugin : this.pluginLoader) + addPlugin(iPlugin); + } + + /** + * + * @throws IOException + */ + public void loadRepository() throws IOException { + Collection<net.sf.magicmap.client.plugin.IPluginDescriptor> collection = repository.loadIndex(); + for (net.sf.magicmap.client.plugin.IPluginDescriptor descriptor: collection){ + if (plugins.containsKey(descriptor)) continue; + plugins.put(descriptor, AbstractPlugin.EMPTY_PLUGIN); + tableModel.addRow(new Object[]{ + descriptor.getName(), + descriptor.getVersion(), descriptor} + ); + } + } + + /** + * + * @param groupId + * @param pluginId + * @param version + * @return + */ + public net.sf.magicmap.client.plugin.IPlugin getPlugin(String groupId, String pluginId, String version){ + Artifact a = new Artifact(groupId, pluginId, version); + if (plugins.containsKey(a)) return plugins.get(a); + return null; + } + public Collection<Version> getVersions(String groupId, String artifactId){ + return Collections.EMPTY_LIST; + } + /** + * + * @param settings + */ + public void setup(Settings settings){ + String[] pluginPaths = settings.getPluginPaths(); + ArrayList<URL> urlList = new ArrayList<URL>(); + for (String url : pluginPaths) + try { + urlList.add(new URL(url)); + } catch (MalformedURLException e) { + PluginManager.log.info(e); + } + this.pluginLoader = new net.sf.magicmap.client.plugin.PluginLoader(urlList.toArray(new URL[0])); + loadPlugins(); + } + + /** + * + * @param attributeName the name of the attribute to visualize. + * @param parent a Scrollpane for example. + * @return + * @throws IllegalArgumentException + */ + public JComponent visualProxy(String attributeName, JComponent parent) throws IllegalArgumentException{ + + JComponent proxy = null; + if (Attributes.AvailablePlugins.getName().equals(attributeName)){ + JTable table = new JTable(availableModel); + table.setDefaultRenderer(net.sf.magicmap.client.plugin.IPluginDescriptor.class, new net.sf.magicmap.client.plugin.ui.PluginTableRenderer(this)); + table.setSelectionModel(availablePluginSelection); + proxy = new JScrollPane(table); + + } + else if (Attributes.InstalledPlugins.getName().equals(attributeName)){ + + JTable table = new JTable(installedModel); //installedModel); + table.setSelectionModel(installedPluginSelection); + proxy = new JScrollPane(table); + + } + else if (Attributes.PluginDetails.getName().equals(attributeName)){ + proxy = new JLabel("Later"); + } + else if ("".equals(attributeName)){ + net.sf.magicmap.client.plugin.forms.PluginsForm form = new PluginsForm(this); + proxy = form.attatch(this); + } + else if (Attributes.PluginRepository.getName().equals(attributeName)){ + JTextField tf = new JTextField("http://vierzig4.dyndns.org/magicmap-plugins/"); + tf.setEditable(false); + proxy = tf; + } + else{ + proxy = pluginDetailModel.visualProxy(attributeName, parent); + } + if (parent != null){ + parent.add(proxy); + } + return proxy; + } + + public String[] getAttributeNames(){ + return new String[]{ + Attributes.InstalledPlugins.getName(), + Attributes.AvailablePlugins.getName(), + Attributes.PluginDetails.getName() + }; + } + + /** + * Called from the controller to notifi all installed plugins that + * the cleint is now connected to a server. + */ + public void connect(){ + for (IPlugin iPlugin : plugins.values()) + iPlugin.connect(); + } + + /** + * Disposes all Plugins. + */ + public void dispose(){ + for (IPlugin iPlugin : plugins.values()) + iPlugin.disposePlugin(); + } + + /** + * Called by the controller if a new Map was loaded. + */ + public void loadMap(){ + for (IPlugin iPlugin : plugins.values()) + iPlugin.loadMap(); + } + + /** + * Iinstalls a plugin. + * @param pluginToInstall the plugin to install. + */ + public void installPlugin (net.sf.magicmap.client.plugin.IPluginDescriptor pluginToInstall) throws IOException { + URL pluginUrl = repository.getPluginUrl(pluginToInstall); + try { + ArtifactTools tool = new ArtifactTools(); + File installDir = new File(pluginLoader.getURLs()[0].toURI()); + File jarFile = new File(installDir +"/" + tool.getFileName(pluginToInstall)); + if (jarFile.exists()){ + uninstallPlugin(pluginToInstall); + jarFile = new File(installDir +"/" + tool.getFileName(pluginToInstall)); + } + if (jarFile.createNewFile()){ + FileOutputStream oStr = new FileOutputStream(jarFile); + InputStream iStr = pluginUrl.openStream(); + copy(iStr, oStr); + }else{ + throw new IOException("Can not create new file"); + } + } catch (URISyntaxException e) { + throw new IOException(e.getMessage()); + } + } + + /** + * + * @param iStr + * @param oStr + * @throws IOException + */ + private void copy(InputStream iStr, OutputStream oStr)throws IOException{ + try{ + while (iStr.available() > 0){ + oStr.write(iStr.read()); + } + } + finally{ + if (oStr != null){ + oStr.flush(); + oStr.close(); + } + if (iStr != null){ + iStr.close(); + } + } + } + + /** + * uninstalls a plugin. + * + * @param pluginToRemove + */ + public void uninstallPlugin(net.sf.magicmap.client.plugin.IPluginDescriptor pluginToRemove) throws IOException{ + ArtifactTools tool = new ArtifactTools(); + File installDir = null; + try { + installDir = new File(pluginLoader.getURLs()[0].toURI()); + File jarFile = new File(installDir +"/" + tool.getFileName(pluginToRemove)); + boolean b = jarFile.delete(); + if (!b) throw new IOException("Can not delete File: " + jarFile.getAbsoluteFile().toString()); + } catch (URISyntaxException e) { + throw new IOException(e.getMessage()); + } + + } + + /** + * + * @param artiafact the atrifact to check. + * @return true if a plugin with the given artifactId is installed. + */ + public boolean isInstalled(IArtifact artiafact){ + return plugins.containsKey(artiafact) && plugins.get(artiafact) != net.sf.magicmap.client.plugin.AbstractPlugin.EMPTY_PLUGIN; + } + + /** + * + * @return + */ + public Iterator<net.sf.magicmap.client.plugin.IPluginDescriptor> iterator() { + return plugins.keySet().iterator(); + } + + public boolean isUpdateAvailable(IArtifact artifact){ + return false; + } + /** + * + * @return + */ + public int getNumberOfPlugins(){ + return plugins.size(); + } + + public Object[] getSelectedObjects() { + return tableSelectionListener.selectedPluginDescriptor == null ? new Object[0] : new Object[]{tableSelectionListener.selectedPluginDescriptor}; + } + + public void addItemListener(ItemListener l) { + listenerList.add(ItemListener.class, l); + } + + public void removeItemListener(ItemListener l) { + listenerList.remove(ItemListener.class, l); + } + + /** + * Combines the two views of the plugins. + */ + private class TableSelectListener implements ListSelectionListener { + private net.sf.magicmap.client.plugin.IPluginDescriptor selectedPluginDescriptor = null; + + + public void valueChanged (ListSelectionEvent e) { + if (e.getValueIsAdjusting()) return; + + ListSelectionModel lsm = (ListSelectionModel)e.getSource(); + if (lsm.isSelectionEmpty()) { + System.out.println("No rows are selected."); + } else { + int selectedRow = lsm.getMinSelectionIndex(); + TableModel model = getTableModel(lsm); + selectedPluginDescriptor = ((net.sf.magicmap.client.plugin.IPluginDescriptor) model.getValueAt(selectedRow, 2)); + } + ItemListener[] itemListeners = listenerList.getListeners(ItemListener.class); + ItemEvent event = null; + for(ItemListener itl: itemListeners){ + if (event == null){ + event = new ItemEvent( + PluginManager.this, + selectedPluginDescriptor == null ? 0 : selectedPluginDescriptor.hashCode(), + selectedPluginDescriptor, + ItemEvent.SELECTED); + } + itl.itemStateChanged(event); + } + } + + private TableModel getTableModel(ListSelectionModel lsm) { + if (lsm.equals(installedPluginSelection)){ + availablePluginSelection.clearSelection(); + return installedModel; + } + else if(lsm.equals(availablePluginSelection)){ + installedPluginSelection.clearSelection(); + return availableModel; + } + return null; + } + } +} Added: trunk/magicmapclient/src/net/sf/magicmap/client/plugin/PluginRepository.java =================================================================== --- trunk/magicmapclient/src/net/sf/magicmap/client/plugin/PluginRepository.java (rev 0) +++ trunk/magicmapclient/src/net/sf/magicmap/client/plugin/PluginRepository.java 2007-01-14 20:17:04 UTC (rev 505) @@ -0,0 +1,126 @@ +package net.sf.magicmap.client.plugin; + +import net.sf.magicmap.artifact.Artifact; +import net.sf.magicmap.artifact.ArtifactTools; +import net.sf.magicmap.artifact.IArtifact; +import net.sf.magicmap.client.plugin.util.PluginDescriptorReader; +import net.sf.magicmap.client.utils.HtmlSaxParser; +import org.dom4j.Document; +import org.dom4j.DocumentException; +import org.dom4j.Node; +import org.dom4j.io.SAXReader; + +import java.io.IOException; +import java.net.MalformedURLException; +import java.net.URL; +import java.util.ArrayList; +import java.util.Collection; +import java.util.LinkedList; +import java.util.List; + +/** + * + * + */ +public class PluginRepository { + private final URL baseUrl; + + private final ArtifactTools tools = new ArtifactTools(); + + public PluginRepository(URL url){ + this.baseUrl = url; + } + + /** + * + * @param manager + */ + public Collection<net.sf.magicmap.client.plugin.IPluginDescriptor> loadRepository(net.sf.magicmap.client.plugin.PluginManager manager){ + LinkedList<net.sf.magicmap.client.plugin.IPluginDescriptor>pluginDescriptors = new LinkedList<net.sf.magicmap.client.plugin.IPluginDescriptor>(); + return pluginDescriptors; + } + + public Collection<String> getVersions(IArtifact artifact){ + return new ArrayList<String>(); + } + + public URL getPluginUrl (IArtifact plugin) throws MalformedURLException { + return new URL(baseUrl, tools.getPath(plugin) +"/"+ tools.getFileName(plugin)); + } + + /** + * + * @param path + * @return + */ + public net.sf.magicmap.client.plugin.IPluginDescriptor addPlugin(URL path){ + return null; + } + + public Collection<net.sf.magicmap.client.plugin.IPluginDescriptor> loadIndex() throws IOException { + + ArrayList<net.sf.magicmap.client.plugin.IPluginDescriptor> l = new ArrayList<net.sf.magicmap.client.plugin.IPluginDescriptor>(); + for (String groups: loadIndex(baseUrl, true)){ + for (String artifacts: loadIndex(new URL(baseUrl +"/" + groups), true)){ + for (String versions: loadIndex(new URL(baseUrl +"/" + groups + artifacts), true)){ + l.add(getPluginDetails (new Artifact( + groups.substring(0, groups.length()-1), + artifacts.substring(0, artifacts.length()-1), + versions.substring(0, versions.length()-1))) + ); + } + } + } + return l; + } + + public net.sf.magicmap.client.plugin.IPluginDescriptor getPluginDetails(IArtifact artifact)throws IOException{ + URL descriptorSource = new URL(baseUrl + tools.getPath(artifact) + "/plugin.xml"); + PluginDescriptorReader reader = new PluginDescriptorReader(descriptorSource.openStream()); + return reader.getDescriptor(); + } + /** + * + * @return + * @throws Exception + */ + private Collection<String> loadIndex(URL url, boolean dir) throws IOException{ + System.out.println("Loading Index of " + url.toString()); + SAXReader reader = new SAXReader(new HtmlSaxParser()); + + Document document = null; + try { + document = reader.read(url.openStream()); + } catch (DocumentException e) { + throw new IOException(e.getMessage()); + } + List<Node> linkList = dir ? + document.selectNodes("//a[((not (starts-with(@href, '/'))) and (preceding-sibling::img/@alt='[DIR]'))]") : + document.selectNodes("//a[not (starts-with(@href, '/'))]"); + + List<String> pluginLinkList = new LinkedList<String>(); + for (Node node: linkList){ + String href = node.valueOf("@href"); + if (href != null && href.length() > 1) + pluginLinkList.add(href); + } + return pluginLinkList; + } + + public static void main(String[] args) { + try { + PluginRepository repository = new PluginRepository(new URL("http://butler/magicmap-plugins/")); + Collection<String> strings = repository.loadIndex(repository.baseUrl, true); + System.out.println(strings.size()); + for(String str: strings){ + System.out.println("DIR: " + str); + } + Collection<net.sf.magicmap.client.plugin.IPluginDescriptor> artiacts = repository.loadIndex(); + for (net.sf.magicmap.client.plugin.IPluginDescriptor a: artiacts){ + System.out.println("Artifact: " + a.toString() + "\n\tURL:" + repository.getPluginUrl(a)); + } + } catch (Exception e) { + e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates. + } + } +} Added: trunk/magicmapclient/src/net/sf/magicmap/client/plugin/SimplePluginDescriptor.java =================================================================== --- trunk/magicmapclient/src/net/sf/magicmap/client/plugin/SimplePluginDescriptor.java (rev 0) +++ trunk/magicmapclient/src/net/sf/magicmap/client/plugin/SimplePluginDescriptor.java 2007-01-14 20:17:04 UTC (rev 505) @@ -0,0 +1,196 @@ + +package net.sf.magicmap.client.plugin; + +import net.sf.magicmap.artifact.ArtifactComparator; +import net.sf.magicmap.artifact.IArtifact; +import net.sf.magicmap.artifact.IVendor; +import net.sf.magicmap.artifact.Version; +import net.sf.magicmap.client.plugin.util.OperatingSystemInfo; + +import java.util.*; + +/** + * Beschreibt ein Plugin. Eine immutable Klasse. + * @author jan_fride + * @version 1.0 + * @since heute + */ +public class SimplePluginDescriptor implements IPluginDescriptor { + + private final IVendor vendor; + private final String groupId; + private final String artifactId; + private final String description; + private final String name; + private final Version version; + + private static final ArtifactComparator cmp = new ArtifactComparator(); + + private final Collection<String[]> dependencies = new LinkedList<String[]>(); + + private final Collection<OperatingSystemInfo> supportedOperatingSystems = new ArrayList<OperatingSystemInfo>(); + /** + * Konstruktor. + * + * @param vendor der Hersteller/Author des Plugins + * @param groupId die Id der Gruppe des Plugins + * @param artifactId die ID des Plugins in seiner Gruppe. + * @param description eine Beschreibung des Plugins + * @param name der Name des Plugins + * @param version die Version des Plugins. + * @param dependencies eine Liste der Abh\xE4ngikeiten + * @param os a regular expression for the supported operating systems. + */ + public SimplePluginDescriptor( + IVendor vendor, + String groupId, + String artifactId, + String description, + String name, + String version, + Collection<String[]> dependencies, + OperatingSystemInfo... os) { + + this.vendor = vendor; + this.groupId = groupId; + this.artifactId = artifactId; + this.description = description; + this.name = name; + this.version = new Version(version); + this.dependencies.addAll(dependencies); + Collections.addAll(this.supportedOperatingSystems, os); + + } + + public SimplePluginDescriptor( + String vendorName, + String vendorEmail, + String vendorHomepage, + String groupId, + String artifactId, + String description, + String name, + String version, + Collection<String[]> dependencies, + OperatingSystemInfo... os) { + this(new SimpleVendor(vendorName, vendorEmail, vendorHomepage), groupId, artifactId, description, name, + version, dependencies, os); + } + + /** + * Der Hersteller des Plugins + * + * @return die Beschreibung des Herstellers. + */ + public IVendor getVendor(){ + return this.vendor; + } + + /** + * Eine f\xFCr Menschen verständliche Beschreibung des Plugins + * (also auch f\xFCr nicht Informatiker). + * + * @return die Beschreibung des Plugins. + */ + public String getDescription(){ + return this.description; + } + + /** + * der Name des Plugins + * @return + */ + public String getName(){ + return this.name; + } + + /** + * Die Version des Plugins + * @return + */ + public Version getVersion(){ + return this.version; + } + + /** + * + * @return die Liste der Abh\xE4ngigkeiten. + */ + public Collection<String[]> getDependencies(){ + return this.dependencies; + } + + /** + * @see net.sf.magicmap.artifact.IUniqueIdentity + * @return die ID des Artifacts (Plugins). + */ + public String getArtifactId(){ + return this.artifactId; + } + + /** + * @see net.sf.magicmap.artifact.IUniqueIdentity + * @return die ID der Gruppe (Plugins). + */ + public String getGroupId(){ + return this.groupId; + } + + /** + * + * @param artifact another unique id. + * @return 0 if artifact and groupdid are equal. -1 or 1 else. + */ + public int compareTo(IArtifact artifact){ + return SimplePluginDescriptor.cmp.compare(this, artifact); + } + + /** + * + * @return true if the plugin runs on the current system. + */ + public boolean isOsSupported() { + for(OperatingSystemInfo info: supportedOperatingSystems){ + if (info.isCurrentOsSupported()) return true; + } + return false; + } + + /** + * The same hash as any artifact. + * @return + */ + @Override + public int hashCode() { + int hash = 31; + int hashFactor = 17; + hash += getArtifactId() == null ? 0 : getArtifactId().hashCode() * 17; + hash += getGroupId() == null ? 0 : getGroupId().hashCode() * 17; + hash += getVersion() == null ? 0 : getVersion().hashCode() * 17; + return hash; + } + + @Override + public boolean equals(Object obj) { + if (obj instanceof IArtifact) { + IArtifact iArtifact = (IArtifact) obj; + return getArtifactId().equals(iArtifact.getArtifactId()) && + getGroupId().equals(iArtifact.getGroupId()) && + getVersion().equals(iArtifact.getVersion()); + } + return super.equals(obj); //To change body of overridden methods use File | Settings | File Templates. + } + @Override + public String toString() { + return "SimplePluginDescriptor{" + + "vendor=" + vendor + + ", groupId='" + groupId + '\'' + + ", artifactId='" + artifactId + '\'' + + ", description='" + description + '\'' + + ", name='" + name + '\'' + + ", version='" + version.toString() + '\'' + + ", dependencies=" + (dependencies == null ? null : Arrays.asList(dependencies)) + + ", supportedOperatingSystems=" + supportedOperatingSystems + + '}'; + } +} Added: trunk/magicmapclient/src/net/sf/magicmap/client/plugin/SimpleVendor.java =================================================================== --- trunk/magicmapclient/src/net/sf/magicmap/client/plugin/SimpleVendor.java (rev 0) +++ trunk/magicmapclient/src/net/sf/magicmap/client/plugin/SimpleVendor.java 2007-01-14 20:17:04 UTC (rev 505) @@ -0,0 +1,40 @@ + +package net.sf.magicmap.client.plugin; + +import net.sf.magicmap.artifact.IVendor; + +/** + * Created by IntelliJ IDEA. + * User: Jan + * Date: 08.10.2006 + * Time: 19:22:25 + * To change this template use File | Settings | File Templates. + */ +final class SimpleVendor implements IVendor{ + + private final String name; + private final String email; + private final String homepage; + + public SimpleVendor(String name, String email, String homepage) { + assert (name != null); + assert (email != null); + assert (homepage != null); + this.name = name; + this.email = email; + this.homepage = homepage; + } + + public String getName(){ + return name; + } + + public String getEmail(){ + return email; + } + + public String getHomePage(){ + return homepage; + } + +} Added: trunk/magicmapclient/src/net/sf/magicmap/client/plugin/action/InstallPluginAction.java =================================================================== --- trunk/magicmapclient/src/net/sf/magicmap/client/plugin/action/InstallPluginAction.java (rev 0) +++ trunk/magicmapclient/src/net/sf/magicmap/client/plugin/action/InstallPluginAction.java 2007-01-14 20:17:04 UTC (rev 505) @@ -0,0 +1,46 @@ +package net.sf.magicmap.client.plugin.action; + +import net.sf.magicmap.client.gui.utils.GUIConstants; +import net.sf.magicmap.client.gui.utils.MagicAction; + +import java.awt.event.ActionEvent; +import java.awt.event.ItemEvent; +import java.awt.event.ItemListener; +import java.io.IOException; + +/** + * Created by IntelliJ IDEA. + * User: jan + * Date: 11.11.2006 + * Time: 23:18:34 + * To change this template use File | Settings | File Templates. + */ +public class InstallPluginAction extends MagicAction implements ItemListener { + private final net.sf.magicmap.client.plugin.PluginManager manager; + private net.sf.magicmap.client.plugin.IPluginDescriptor descriptor; + + public InstallPluginAction(net.sf.magicmap.client.plugin.PluginManager manager){ + super ("Plugin Installieren", GUIConstants.ICON_CONNECT,"Plugin Instalieren"); + this.manager = manager; + manager.addItemListener(this); + setEnabled(false); + } + public void actionPerformed(ActionEvent e) { + try { + manager.installPlugin(descriptor); + } catch (IOException e1) { + e1.printStackTrace(); //To change body of catch statement use File | Settings | File Templates. + } + } + + public void itemStateChanged(ItemEvent e) { + if (ItemEvent.SELECTED == e.getStateChange()){ + setDescriptor((net.sf.magicmap.client.plugin.IPluginDescriptor) e.getItem()); + } + } + + public void setDescriptor(net.sf.magicmap.client.plugin.IPluginDescriptor descriptor) { + this.descriptor = descriptor; + setEnabled(descriptor != null && !manager.isInstalled(descriptor)); + } +} Added: trunk/magicmapclient/src/net/sf/magicmap/client/plugin/action/LoadPluginsAction.java =================================================================== --- trunk/magicmapclient/src/net/sf/magicmap/client/plugin/action/LoadPluginsAction.java (rev 0) +++ trunk/magicmapclient/src/net/sf/magicmap/client/plugin/action/LoadPluginsAction.java 2007-01-14 20:17:04 UTC (rev 505) @@ -0,0 +1,36 @@ +package net.sf.magicmap.client.plugin.action; + +import net.sf.magicmap.client.gui.utils.GUIConstants; +import net.sf.magicmap.client.gui.utils.MagicAction; +import net.sf.magicmap.client.plugin.IPluginDescriptor; +import net.sf.magicmap.client.plugin.PluginManager; + +import java.awt.event.ActionEvent; +import java.io.IOException; + +/** + * Created by IntelliJ IDEA. + * User: Jan + * Date: 12.11.2006 + * Time: 16:47:19 + * To change this template use File | Settings | File Templates. + */ +public class LoadPluginsAction extends MagicAction{ + private final PluginManager manager; + private IPluginDescriptor descriptor; + + public LoadPluginsAction(PluginManager manager){ + super ("Pluginliste laden", GUIConstants.ICON_CONNECT,"Die Liste aller vorhandenen Plugin laden"); + this.manager = manager; + } + public void actionPerformed(ActionEvent e) { + try { + setEnabled(false); + manager.loadRepository(); + } catch (IOException e1) { + e1.printStackTrace(); //To change body of catch statement use File | Settings | File Templates. + }finally{ + setEnabled(true); + } + } +} Added: trunk/magicmapclient/src/net/sf/magicmap/client/plugin/action/ShowPluginsAction.java =================================================================== --- trunk/magicmapclient/src/net/sf/magicmap/client/plugin/action/ShowPluginsAction.java (rev 0) +++ trunk/magicmapclient/src/net/sf/magicmap/client/plugin/action/ShowPluginsAction.java 2007-01-14 20:17:04 UTC (rev 505) @@ -0,0 +1,34 @@ +package net.sf.magicmap.client.plugin.action; + +import net.sf.magicmap.client.gui.utils.GUIConstants; +import net.sf.magicmap.client.gui.utils.GUIUtils; +import net.sf.magicmap.client.gui.utils.MagicAction; +import net.sf.magicmap.client.plugin.PluginManager; + +import javax.swing.*; +import java.awt.event.ActionEvent; + +/** + * Created by IntelliJ IDEA. + * User: Jan + * Date: 12.11.2006 + * Time: 21:18:00 + * To change this template use File | Settings | File Templates. + */ +public class ShowPluginsAction extends MagicAction { + private final JFrame mainFrame; + private final net.sf.magicmap.client.plugin.PluginManager manager; + + public ShowPluginsAction(JFrame mainFrame, PluginManager manager){ + super (GUIUtils.i18n("plugins.show"), GUIConstants.ICON_PROPERTIES, GUIUtils.i18n("plugins.tooltip")); + this.mainFrame = mainFrame; + this.manager = manager; + } + public void actionPerformed(ActionEvent e) { + JDialog dlg = new JDialog(mainFrame); + dlg.setModal(true); + dlg.setContentPane(manager.visualProxy("", null)); + dlg.pack(); + dlg.setVisible(true); + } +} Added: trunk/magicmapclient/src/net/sf/magicmap/client/plugin/action/UninstallPluginAction.java =================================================================== --- trunk/magicmapclient/src/net/sf/magicmap/client/plugin/action/UninstallPluginAction.java (rev 0) +++ trunk/magicmapclient/src/net/sf/magicmap/client/plugin/action/UninstallPluginAction.java 2007-01-14 20:17:04 UTC (rev 505) @@ -0,0 +1,48 @@ +package net.sf.magicmap.client.plugin.action; + +import net.sf.magicmap.client.gui.utils.GUIConstants; +import net.sf.magicmap.client.gui.utils.MagicAction; +import net.sf.magicmap.client.plugin.IPluginDescriptor; +import net.sf.magicmap.client.plugin.PluginManager; + +import java.awt.event.ActionEvent; +import java.awt.event.ItemEvent; +import java.io.IOException; + +/** + * Created by IntelliJ IDEA. + * User: Jan + * Date: 12.11.2006 + * Time: 18:55:24 + * To change this template use File | Settings | File Templates. + */ +public class UninstallPluginAction extends MagicAction { + + private final PluginManager manager; + private net.sf.magicmap.client.plugin.IPluginDescriptor descriptor; + + public UninstallPluginAction(net.sf.magicmap.client.plugin.PluginManager manager){ + super ("Plugin deinstallieren", GUIConstants.ICON_DELETE,"Plugin deinstalieren"); + this.manager = manager; + manager.addItemListener(this); + setEnabled(false); + } + public void actionPerformed(ActionEvent e) { + try { + manager.uninstallPlugin(descriptor); + } catch (IOException e1) { + e1.printStackTrace(); //To change body of catch statement use File | Settings | File Templates. + } + } + + public void itemStateChanged(ItemEvent e) { + if (ItemEvent.SELECTED == e.getStateChange()){ + setDescriptor((IPluginDescriptor) e.getItem()); + } + } + + public void setDescriptor(IPluginDescriptor descriptor) { + this.descriptor = descriptor; + setEnabled(descriptor != null && manager.isInstalled(descriptor)); + } +} Added: trunk/magicmapclient/src/net/sf/magicmap/client/plugin/forms/PluginsForm.java =================================================================== --- trunk/magicmapclient/src/net/sf/magicmap/client/plugin/forms/PluginsForm.java (rev 0) +++ trunk/magicmapclient/src/net/sf/magicmap/client/plugin/forms/PluginsForm.java 2007-01-14 20:17:04 UTC (rev 505) @@ -0,0 +1,70 @@ +package net.sf.magicmap.client.plugin.forms; + +import com.jgoodies.forms.layout.CellConstraints; +import net.sf.magicmap.client.gui.forms.Form; +import net.sf.magicmap.client.gui.forms.FormLayoutForm; +import net.sf.magicmap.client.gui.forms.TabForm; +import net.sf.magicmap.client.gui.forms.UserInterface; +import net.sf.magicmap.client.plugin.PluginManager; +import static net.sf.magicmap.client.plugin.PluginManager.Attributes.*; +import net.sf.magicmap.client.plugin.action.LoadPluginsAction; +import net.sf.magicmap.client.plugin.action.UninstallPluginAction; +import static net.sf.magicmap.client.plugin.ui.PluginDescriptorModel.Attributes.PluginDependencies; +import static net.sf.magicmap.client.plugin.ui.PluginDescriptorModel.Attributes.PluginName; + +import javax.swing.*; + +/** + * Show a list of installed plugins a list of available plugins + * and some details. This form also allows the user to install uninstall + * plugins. + * + * @author Jan Friderici + * + */ +public final class PluginsForm extends FormLayoutForm { + + private TabForm tabs; + private Form settingsForm; + private Form detailsForm; + + /** + */ + public PluginsForm(final PluginManager manager){ + super ("p:grow,3dlu,p:grow", "p,3dlu, p:grow"); + tabs = new TabForm(); + tabs.addAttribute(AvailablePlugins.getName(), "", + new TabForm.TabConstraints("Vorhandene Plugins", "TT", null)); + tabs.addAttribute(InstalledPlugins.getName(), "", + new TabForm.TabConstraints("Installierte Plugins", "TT", null)); + addForm(tabs, new CellConstraints(1,3, CellConstraints.FILL, CellConstraints.FILL)); + + detailsForm = new FormLayoutForm("p,3dlu,p:grow", "p,3dlu,p:grow"); + detailsForm.addLabel(PluginName.getName(), new JLabel("Name"), new CellConstraints(1,1)); + detailsForm.addAttribute(PluginName.getName(), "", new CellConstraints(3,1)); + detailsForm.addLabel(PluginDependencies.getName(), new JLabel("Abhaengigkeiten"), new CellConstraints(1,3)); + detailsForm.addAttribute(PluginDependencies.getName(), "", new CellConstraints(3,3)); + + + detailsForm.setBorder(BorderFactory.createCompoundBorder( + BorderFactory.createTitledBorder("Detailansicht"), + BorderFactory.createEmptyBorder(5,5,5,5))); + addForm(detailsForm, new CellConstraints(3,3, CellConstraints.FILL, CellConstraints.FILL)); + setBorder(BorderFactory.createCompoundBorder( + BorderFactory.createTitledBorder("Plugin"), + BorderFactory.createEmptyBorder(5,5,5,5))); + + // Actions! + FormLayoutForm actionButton = new FormLayoutForm("p,3dlu,p,6dlu,p,3dlu,p:grow", "p"); + actionButton.addLabel("", new JButton(new net.sf.magicmap.client.plugin.action.InstallPluginAction(manager)), new CellConstraints(1,1)); + actionButton.addLabel("", new JButton(new UninstallPluginAction(manager)), new CellConstraints(3,1)); + actionButton.addLabel("", new JButton(new LoadPluginsAction(manager)), new CellConstraints(5,1,CellConstraints.DEFAULT, CellConstraints.FILL)); + actionButton.addAttribute(PluginRepository.getName(), "", new CellConstraints(7,1)); + addForm(actionButton, new CellConstraints(1,1,3,1,CellConstraints.FILL, CellConstraints.FILL)); + } + + public JComponent attatch(UserInterface ui) { + JComponent c = super.attatch(ui); + return c; + } +} Added: trunk/magicmapclient/src/net/sf/magicmap/client/plugin/package.html =================================================================== --- trunk/magicmapclient/src/net/sf/magicmap/client/plugin/package.html (rev 0) +++ trunk/magicmapclient/src/net/sf/magicmap/client/plugin/package.html 2007-01-14 20:17:04 UTC (rev 505) @@ -0,0 +1,12 @@ +<html> +<head> + <title> + Magicmap Plugins + </title> +</head> +<body> +<h1>Plugins for Magicmap</h1> +<p>Blah blah blah</p> + +</body> +</html> \ No newline at end of file Added: trunk/magicmapclient/src/net/sf/magicmap/client/plugin/ui/ArtifactRepositoryTableModel.java =================================================================== --- trunk/magicmapclient/src/net/sf/magicmap/client/plugin/ui/ArtifactRepositoryTableModel.java (rev 0) +++ trunk/magicmapclient/src/net/sf/magicmap/client/plugin/ui/ArtifactRepositoryTableModel.java 2007-01-14 20:17:04 UTC (rev 505) @@ -0,0 +1,82 @@ + +package net.sf.magicmap.client.plugin.ui; + +import net.sf.magicmap.artifact.ArtifactRepository; +import net.sf.magicmap.artifact.IArtifact; + +import javax.swing.event.TableModelListener; +import javax.swing.table.TableModel; +import java.util.LinkedList; + +/** + * + * @author Jan Friderici (ja...@fr...) + * + */ +public class ArtifactRepositoryTableModel implements TableModel { + + private final ArtifactRepository repository; + private final LinkedList<TableModelListener> listeners = new LinkedList<TableModelListener>(); + + public ArtifactRepositoryTableModel(ArtifactRepository repository) { + this.repository = repository; + + } + + public void addTableModelListener(TableModelListener l){ + this.listeners.add(l); + } + + public Class<?> getColumnClass(int columnIndex){ + return String.class; + } + + public int getColumnCount(){ + return 3; + } + + public String getColumnName(int columnIndex){ + // TODO Auto-generated method stub + switch (columnIndex) { + case 0 : + return "Gruppe"; + case 1 : + return "Artifact"; + case 2 : + return "Version"; + } + return null; + } + + public int getRowCount(){ + return this.repository.size(); + } + + public Object getValueAt(int rowIndex, int columnIndex){ + IArtifact artifact = this.repository.get(rowIndex); + switch (columnIndex) { + case 0 : + return artifact.getGroupId(); + case 1 : + return artifact.getArtifactId(); + case 2 : + return artifact.getVersion(); + } + return null; + } + + public boolean isCellEditable(int rowIndex, int columnIndex){ + // TODO Auto-generated method stub + return false; + } + + public void removeTableModelListener(TableModelListener l){ + this.listeners.remove(l); + + } + + public void setValueAt(Object aValue, int rowIndex, int columnIndex){ + + } + +} Added: trunk/magicmapclient/src/net/sf/magicmap/client/plugin/ui/PluginDescriptorModel.java =================================================================== --- trunk/magicmapclient/src/net/sf/magicmap/client/plugin/ui/PluginDescriptorModel.java (rev 0) +++ trunk/magicmapclient/src/net/sf/magicmap/client/plugin/ui/PluginDescriptorModel.java 2007-01-14 20:17:04 UTC (rev 505) @@ -0,0 +1,110 @@ + +package net.sf.magicmap.client.plugin.ui; + +import net.sf.magicmap.client.gui.forms.UserInterface; +import net.sf.magicmap.client.gui.utils.DocumentUtils; +import net.sf.magicmap.client.plugin.IPluginDescriptor; + +import javax.swing.*; +import javax.swing.text.Document; +import javax.swing.text.PlainDocument; +import java.awt.event.ItemEvent; +import java.awt.event.ItemListener; + +/** + * Created by IntelliJ IDEA. + * User: Jan + * Date: 08.10.2006 + * Time: 16:55:35 + * To change this template use File | Settings | File Templates. + */ +public class PluginDescriptorModel implements ItemListener, UserInterface { + + + public enum Attributes{ + PluginName("PLUGIN_NAME"), + PluginDescription("PLUGIN_DESCRIPTION"), + PluginDependencies("PLUGIN_DEPENDENCIES"); + + private final String name; + private Attributes(String name){ + this.name = name; + } + public String getName(){ + return name; + } + } + IPluginDescriptor selectedDescriptor; + + + public PluginDescriptorModel(){ + + } + public final Document name = new PlainDocument(); + public final Document description = new PlainDocument(); + public final Document vendorName = new PlainDocument(); + public final DefaultListModel dependencies = new DefaultListModel(); + + + private final DocumentUtils utils = new DocumentUtils(); + + /** + * + * @param e + */ + public void itemStateChanged(ItemEvent e) { + if (ItemEvent.SELECTED == e.getStateChange()){ + setDescriptor((IPluginDescriptor) e.getItem()); + } + } + + /** + * + * @param desc + */ + private void setDescriptor(IPluginDescriptor desc) { + if (desc == null){ + utils.setString(name, ""); + utils.setString(description, ""); + dependencies.clear(); + }else{ + utils.setString(name, desc.getName()); + utils.setString(description, desc.getDescription()); + dependencies.clear(); + dependencies.copyInto(desc.getDependencies().toArray()); + } + } + + /** + * + * @param attributeName + * @param parent + * @return + * @throws IllegalArgumentException + */ + public JComponent visualProxy(String attributeName, JComponent parent) throws IllegalArgumentException { + JComponent proxy; + if ("PLUGIN_NAME".equals(attributeName)){ + JTextField tf = new JTextField(name,name.toString(), 6); + proxy = tf; + } + else if ("PLUGIN_DESCRIPTION".equals(attributeName)){ + JTextArea tf = new JTextArea(description,description.toString(), 6,6); + proxy = tf; + } + else if (Attributes.PluginDependencies.getName().equals(attributeName)){ + proxy = new JScrollPane(new JList(dependencies)); + } + else{ + throw new IllegalArgumentException ("Attribute not suported: " + attributeName); + } + if (parent != null){ + parent.add(proxy); + } + return proxy; + } + + public String[] getAttributeNames() { + return new String[0]; //To change body of implemented methods use File | Settings | File Templates. + } +} Added: trunk/magicmapclient/src/net/sf/magicmap/client/plugin/ui/PluginDialog.java =================================================================== --- trunk/magicmapclient/src/net/sf/magicmap/client/plugin/ui/PluginDialog.java (rev 0) +++ trunk/magicmapclient/src/net/sf/magicmap/client/plugin/ui/PluginDialog.java 2007-01-14 20:17:04 UTC (rev 505) @@ -0,0 +1,15 @@ + +package net.sf.magicmap.client.plugin.ui; + +import net.sf.magicmap.client.plugin.PluginManager; + +import javax.swing.*; + +public class PluginDialog extends JDialog { + + public PluginDialog(PluginManager manager, JFrame parent) { + super(parent); + setContentPane(manager.visualProxy("", null)); + } + +} Added: trunk/magicmapclient/src/net/sf/magicmap/client/plugin/ui/PluginTableModel.java =================================================================== --- trunk/magicmapclient/src/net/sf/magicmap/client/plugin/ui/PluginTableModel.java (rev 0) +++ trunk/magicmapclient/src/net/sf/magicmap/client/plugin/ui/PluginTableModel.java 2007-01-14 20:17:04 UTC (rev 505) @@ -0,0 +1,115 @@ + +package net.sf.magicmap.client.plugin.ui; + +import net.sf.magicmap.artifact.ArtifactComparator; +import net.sf.magicmap.client.gui.ISortableTableModel; +import net.sf.magicmap.client.plugin.PluginManager; + +import javax.swing.event.TableModelEvent; +import javax.swing.event.TableModelListener; +import java.beans.PropertyChangeSupport; +import java.util.Collections; +import java.util.LinkedList; + +/** + * The list of all installed plugins. + * @author Jan + * + */ +public class PluginTableModel implements ISortableTableModel { + + private final PropertyChangeSupport support; + private final LinkedList<TableModelListener> listener = new LinkedList<TableModelListener>(); + private final LinkedList<net.sf.magicmap.client.plugin.IPlugin> plugins = new LinkedList<net.sf.magicmap.client.plugin.IPlugin>(); + + private static final Class[] clazzes = new Class[]{String.class, String.class, String.class, + Boolean.class }; + private final String[] names = new String[]{"Gruppe", "Plugin", "Version", "Aktiv"}; + private boolean descending; + private int sortColumn; + + public PluginTableModel(PluginManager manager) { + this.support = new PropertyChangeSupport(this); +// for (IPlugin plugin : manager) +// this.plugins.add(plugin); + } + + public void addTableModelListener(TableModelListener l){ + this.listener.add(l); + + } + + public Class<?> getColumnClass(int columnIndex){ + return PluginTableModel.clazzes[columnIndex]; + } + + public int getColumnCount(){ + return PluginTableModel.clazzes.length; + } + + public String getColumnName(int columnIndex){ + return this.names[columnIndex]; + } + + public int getRowCount(){ + return this.plugins.size(); + } + + public void sortByComlumn(int column, boolean descending){ + this.sortColumn = column; + this.descending = descending; + + Collections.sort(this.plugins, new ArtifactComparator()); //(new int[]{column}, descending)); + + TableModelEvent e = new TableModelEvent(this); + for (TableModelListener l : this.listener) + l.tableChanged(e); + System.err.println(column); + } + + public Object getValueAt(int rowIndex, int columnIndex){ + if (rowIndex > this.plugins.size()) throw new IllegalArgumentException("Invalid Row: " + rowIndex); + net.sf.magicmap.client.plu... [truncated message content] |
From: <fle...@us...> - 2007-03-23 13:34:35
|
Revision: 614 http://svn.sourceforge.net/magicmap/?rev=614&view=rev Author: flederohr Date: 2007-03-23 06:34:29 -0700 (Fri, 23 Mar 2007) Log Message: ----------- Use i18n strings in plugin view Modified Paths: -------------- trunk/magicmapclient/src/net/sf/magicmap/client/plugin/action/InstallPluginAction.java trunk/magicmapclient/src/net/sf/magicmap/client/plugin/action/LoadPluginsAction.java trunk/magicmapclient/src/net/sf/magicmap/client/plugin/action/ShowPluginsAction.java trunk/magicmapclient/src/net/sf/magicmap/client/plugin/action/UninstallPluginAction.java trunk/magicmapclient/src/net/sf/magicmap/client/plugin/forms/PluginsForm.java Modified: trunk/magicmapclient/src/net/sf/magicmap/client/plugin/action/InstallPluginAction.java =================================================================== --- trunk/magicmapclient/src/net/sf/magicmap/client/plugin/action/InstallPluginAction.java 2007-03-23 13:28:54 UTC (rev 613) +++ trunk/magicmapclient/src/net/sf/magicmap/client/plugin/action/InstallPluginAction.java 2007-03-23 13:34:29 UTC (rev 614) @@ -1,3 +1,4 @@ + package net.sf.magicmap.client.plugin.action; import java.awt.event.ActionEvent; @@ -6,6 +7,7 @@ import java.io.IOException; import net.sf.magicmap.client.gui.utils.GUIConstants; +import net.sf.magicmap.client.gui.utils.GUIUtils; import net.sf.magicmap.client.gui.utils.MagicAction; /** @@ -16,31 +18,33 @@ * To change this template use File | Settings | File Templates. */ public class InstallPluginAction extends MagicAction implements ItemListener { + private final net.sf.magicmap.client.plugin.PluginManager manager; - private net.sf.magicmap.client.plugin.IPluginDescriptor descriptor; + private net.sf.magicmap.client.plugin.IPluginDescriptor descriptor; - public InstallPluginAction(net.sf.magicmap.client.plugin.PluginManager manager){ - super ("Plugin Installieren", GUIConstants.ICON_CONNECT,"Plugin Instalieren"); + public InstallPluginAction(net.sf.magicmap.client.plugin.PluginManager manager) { + super("plugins.install", GUIConstants.ICON_CONNECT, "plugins.install.tooltip"); this.manager = manager; - manager.addItemListener(this); - setEnabled(false); - } - public void actionPerformed(ActionEvent e) { - try { - manager.installPlugin(descriptor); - } catch (IOException e1) { - e1.printStackTrace(); //To change body of catch statement use File | Settings | File Templates. - } - } + manager.addItemListener(this); + setEnabled(false); + } - public void itemStateChanged(ItemEvent e) { - if (ItemEvent.SELECTED == e.getStateChange()){ - setDescriptor((net.sf.magicmap.client.plugin.IPluginDescriptor) e.getItem()); - } - } + public void actionPerformed(ActionEvent e){ + try { + manager.installPlugin(descriptor); + } catch (IOException e1) { + e1.printStackTrace(); //To change body of catch statement use File | Settings | File Templates. + } + } - public void setDescriptor(net.sf.magicmap.client.plugin.IPluginDescriptor descriptor) { - this.descriptor = descriptor; - setEnabled(descriptor != null && !manager.isInstalled(descriptor)); - } + public void itemStateChanged(ItemEvent e){ + if (ItemEvent.SELECTED == e.getStateChange()) { + setDescriptor((net.sf.magicmap.client.plugin.IPluginDescriptor) e.getItem()); + } + } + + public void setDescriptor(net.sf.magicmap.client.plugin.IPluginDescriptor descriptor){ + this.descriptor = descriptor; + setEnabled(descriptor != null && !manager.isInstalled(descriptor)); + } } Modified: trunk/magicmapclient/src/net/sf/magicmap/client/plugin/action/LoadPluginsAction.java =================================================================== --- trunk/magicmapclient/src/net/sf/magicmap/client/plugin/action/LoadPluginsAction.java 2007-03-23 13:28:54 UTC (rev 613) +++ trunk/magicmapclient/src/net/sf/magicmap/client/plugin/action/LoadPluginsAction.java 2007-03-23 13:34:29 UTC (rev 614) @@ -1,3 +1,4 @@ + package net.sf.magicmap.client.plugin.action; import java.awt.event.ActionEvent; @@ -4,6 +5,7 @@ import java.io.IOException; import net.sf.magicmap.client.gui.utils.GUIConstants; +import net.sf.magicmap.client.gui.utils.GUIUtils; import net.sf.magicmap.client.gui.utils.MagicAction; import net.sf.magicmap.client.plugin.IPluginDescriptor; import net.sf.magicmap.client.plugin.PluginManager; @@ -15,22 +17,24 @@ * Time: 16:47:19 * To change this template use File | Settings | File Templates. */ -public class LoadPluginsAction extends MagicAction{ - private final PluginManager manager; - private IPluginDescriptor descriptor; +public class LoadPluginsAction extends MagicAction { - public LoadPluginsAction(PluginManager manager){ - super ("Pluginliste laden", GUIConstants.ICON_CONNECT,"Die Liste aller vorhandenen Plugin laden"); + private final PluginManager manager; + private IPluginDescriptor descriptor; + + public LoadPluginsAction(PluginManager manager) { + super("plugins.load", GUIConstants.ICON_CONNECT, "plugins.load.tooltip"); this.manager = manager; } - public void actionPerformed(ActionEvent e) { - try { - setEnabled(false); - manager.loadRepository(); - } catch (IOException e1) { - e1.printStackTrace(); //To change body of catch statement use File | Settings | File Templates. - }finally{ - setEnabled(true); - } - } + + public void actionPerformed(ActionEvent e){ + try { + setEnabled(false); + manager.loadRepository(); + } catch (IOException e1) { + e1.printStackTrace(); //To change body of catch statement use File | Settings | File Templates. + } finally { + setEnabled(true); + } + } } Modified: trunk/magicmapclient/src/net/sf/magicmap/client/plugin/action/ShowPluginsAction.java =================================================================== --- trunk/magicmapclient/src/net/sf/magicmap/client/plugin/action/ShowPluginsAction.java 2007-03-23 13:28:54 UTC (rev 613) +++ trunk/magicmapclient/src/net/sf/magicmap/client/plugin/action/ShowPluginsAction.java 2007-03-23 13:34:29 UTC (rev 614) @@ -22,7 +22,7 @@ private final net.sf.magicmap.client.plugin.PluginManager manager; public ShowPluginsAction(JFrame mainFrame, PluginManager manager){ - super (GUIUtils.i18n("plugins.show"), GUIConstants.ICON_PROPERTIES, GUIUtils.i18n("plugins.tooltip")); + super ("plugins.show", GUIConstants.ICON_PROPERTIES, "plugins.show.tooltip"); this.mainFrame = mainFrame; this.manager = manager; } Modified: trunk/magicmapclient/src/net/sf/magicmap/client/plugin/action/UninstallPluginAction.java =================================================================== --- trunk/magicmapclient/src/net/sf/magicmap/client/plugin/action/UninstallPluginAction.java 2007-03-23 13:28:54 UTC (rev 613) +++ trunk/magicmapclient/src/net/sf/magicmap/client/plugin/action/UninstallPluginAction.java 2007-03-23 13:34:29 UTC (rev 614) @@ -1,3 +1,4 @@ + package net.sf.magicmap.client.plugin.action; import java.awt.event.ActionEvent; @@ -5,6 +6,7 @@ import java.io.IOException; import net.sf.magicmap.client.gui.utils.GUIConstants; +import net.sf.magicmap.client.gui.utils.GUIUtils; import net.sf.magicmap.client.gui.utils.MagicAction; import net.sf.magicmap.client.plugin.IPluginDescriptor; import net.sf.magicmap.client.plugin.PluginManager; @@ -18,31 +20,32 @@ */ public class UninstallPluginAction extends MagicAction { - private final PluginManager manager; - private net.sf.magicmap.client.plugin.IPluginDescriptor descriptor; + private final PluginManager manager; + private net.sf.magicmap.client.plugin.IPluginDescriptor descriptor; - public UninstallPluginAction(net.sf.magicmap.client.plugin.PluginManager manager){ - super ("Plugin deinstallieren", GUIConstants.ICON_DELETE,"Plugin deinstalieren"); - this.manager = manager; - manager.addItemListener(this); - setEnabled(false); - } - public void actionPerformed(ActionEvent e) { - try { - manager.uninstallPlugin(descriptor); - } catch (IOException e1) { - e1.printStackTrace(); //To change body of catch statement use File | Settings | File Templates. - } - } + public UninstallPluginAction(net.sf.magicmap.client.plugin.PluginManager manager) { + super("plugins.uninstall", GUIConstants.ICON_DELETE, "plugins.uninstall.tooltip"); + this.manager = manager; + manager.addItemListener(this); + setEnabled(false); + } - public void itemStateChanged(ItemEvent e) { - if (ItemEvent.SELECTED == e.getStateChange()){ - setDescriptor((IPluginDescriptor) e.getItem()); - } - } + public void actionPerformed(ActionEvent e){ + try { + manager.uninstallPlugin(descriptor); + } catch (IOException e1) { + e1.printStackTrace(); //To change body of catch statement use File | Settings | File Templates. + } + } - public void setDescriptor(IPluginDescriptor descriptor) { - this.descriptor = descriptor; - setEnabled(descriptor != null && manager.isInstalled(descriptor)); - } + public void itemStateChanged(ItemEvent e){ + if (ItemEvent.SELECTED == e.getStateChange()) { + setDescriptor((IPluginDescriptor) e.getItem()); + } + } + + public void setDescriptor(IPluginDescriptor descriptor){ + this.descriptor = descriptor; + setEnabled(descriptor != null && manager.isInstalled(descriptor)); + } } Modified: trunk/magicmapclient/src/net/sf/magicmap/client/plugin/forms/PluginsForm.java =================================================================== --- trunk/magicmapclient/src/net/sf/magicmap/client/plugin/forms/PluginsForm.java 2007-03-23 13:28:54 UTC (rev 613) +++ trunk/magicmapclient/src/net/sf/magicmap/client/plugin/forms/PluginsForm.java 2007-03-23 13:34:29 UTC (rev 614) @@ -15,6 +15,7 @@ import net.sf.magicmap.client.gui.forms.FormLayoutForm; import net.sf.magicmap.client.gui.forms.TabForm; import net.sf.magicmap.client.gui.forms.UserInterface; +import net.sf.magicmap.client.gui.utils.GUIUtils; import net.sf.magicmap.client.plugin.PluginManager; import net.sf.magicmap.client.plugin.action.LoadPluginsAction; import net.sf.magicmap.client.plugin.action.UninstallPluginAction; @@ -41,20 +42,20 @@ super ("p:grow,3dlu,p:grow", "p,3dlu, p:grow"); tabs = new TabForm(); tabs.addAttribute(AvailablePlugins.getName(), "", - new TabForm.TabConstraints("Vorhandene Plugins", "TT", null)); + new TabForm.TabConstraints(GUIUtils.i18n("plugins.available"), "TT", null)); tabs.addAttribute(InstalledPlugins.getName(), "", - new TabForm.TabConstraints("Installierte Plugins", "TT", null)); + new TabForm.TabConstraints(GUIUtils.i18n("plugins.installed"), "TT", null)); addForm(tabs, new CellConstraints(1,3, CellConstraints.FILL, CellConstraints.FILL)); detailsForm = new FormLayoutForm("p,3dlu,p:grow", "p,3dlu,p:grow"); - detailsForm.addLabel(PluginName.getName(), new JLabel("Name"), new CellConstraints(1,1)); + detailsForm.addLabel(PluginName.getName(), new JLabel(GUIUtils.i18n("plugins.name")), new CellConstraints(1,1)); detailsForm.addAttribute(PluginName.getName(), "", new CellConstraints(3,1)); - detailsForm.addLabel(PluginDependencies.getName(), new JLabel("Abhaengigkeiten"), new CellConstraints(1,3)); + detailsForm.addLabel(PluginDependencies.getName(), new JLabel(GUIUtils.i18n("plugins.dependencies")), new CellConstraints(1,3)); detailsForm.addAttribute(PluginDependencies.getName(), "", new CellConstraints(3,3)); detailsForm.setBorder(BorderFactory.createCompoundBorder( - BorderFactory.createTitledBorder("Detailansicht"), + BorderFactory.createTitledBorder(GUIUtils.i18n("plugins.detailview")), BorderFactory.createEmptyBorder(5,5,5,5))); addForm(detailsForm, new CellConstraints(3,3, CellConstraints.FILL, CellConstraints.FILL)); setBorder(BorderFactory.createCompoundBorder( This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fle...@us...> - 2007-03-23 13:36:25
|
Revision: 615 http://svn.sourceforge.net/magicmap/?rev=615&view=rev Author: flederohr Date: 2007-03-23 06:36:21 -0700 (Fri, 23 Mar 2007) Log Message: ----------- formating with codingconventions Modified Paths: -------------- trunk/magicmapclient/src/net/sf/magicmap/client/plugin/action/ShowPluginsAction.java trunk/magicmapclient/src/net/sf/magicmap/client/plugin/forms/PluginsForm.java Modified: trunk/magicmapclient/src/net/sf/magicmap/client/plugin/action/ShowPluginsAction.java =================================================================== --- trunk/magicmapclient/src/net/sf/magicmap/client/plugin/action/ShowPluginsAction.java 2007-03-23 13:34:29 UTC (rev 614) +++ trunk/magicmapclient/src/net/sf/magicmap/client/plugin/action/ShowPluginsAction.java 2007-03-23 13:36:21 UTC (rev 615) @@ -1,3 +1,4 @@ + package net.sf.magicmap.client.plugin.action; import java.awt.event.ActionEvent; @@ -18,19 +19,21 @@ * To change this template use File | Settings | File Templates. */ public class ShowPluginsAction extends MagicAction { - private final JFrame mainFrame; - private final net.sf.magicmap.client.plugin.PluginManager manager; - public ShowPluginsAction(JFrame mainFrame, PluginManager manager){ - super ("plugins.show", GUIConstants.ICON_PROPERTIES, "plugins.show.tooltip"); - this.mainFrame = mainFrame; - this.manager = manager; - } - public void actionPerformed(ActionEvent e) { - JDialog dlg = new JDialog(mainFrame); - dlg.setModal(true); - dlg.setContentPane(manager.visualProxy("", null)); - dlg.pack(); - dlg.setVisible(true); - } + private final JFrame mainFrame; + private final net.sf.magicmap.client.plugin.PluginManager manager; + + public ShowPluginsAction(JFrame mainFrame, PluginManager manager) { + super("plugins.show", GUIConstants.ICON_PROPERTIES, "plugins.show.tooltip"); + this.mainFrame = mainFrame; + this.manager = manager; + } + + public void actionPerformed(ActionEvent e){ + JDialog dlg = new JDialog(mainFrame); + dlg.setModal(true); + dlg.setContentPane(manager.visualProxy("", null)); + dlg.pack(); + dlg.setVisible(true); + } } Modified: trunk/magicmapclient/src/net/sf/magicmap/client/plugin/forms/PluginsForm.java =================================================================== --- trunk/magicmapclient/src/net/sf/magicmap/client/plugin/forms/PluginsForm.java 2007-03-23 13:34:29 UTC (rev 614) +++ trunk/magicmapclient/src/net/sf/magicmap/client/plugin/forms/PluginsForm.java 2007-03-23 13:36:21 UTC (rev 615) @@ -1,3 +1,4 @@ + package net.sf.magicmap.client.plugin.forms; import static net.sf.magicmap.client.plugin.PluginManager.Attributes.AvailablePlugins; @@ -32,47 +33,48 @@ */ public final class PluginsForm extends FormLayoutForm { - private TabForm tabs; - private Form settingsForm; - private Form detailsForm; + private TabForm tabs; + private Form settingsForm; + private Form detailsForm; - /** - */ - public PluginsForm(final PluginManager manager){ - super ("p:grow,3dlu,p:grow", "p,3dlu, p:grow"); - tabs = new TabForm(); - tabs.addAttribute(AvailablePlugins.getName(), "", - new TabForm.TabConstraints(GUIUtils.i18n("plugins.available"), "TT", null)); - tabs.addAttribute(InstalledPlugins.getName(), "", - new TabForm.TabConstraints(GUIUtils.i18n("plugins.installed"), "TT", null)); - addForm(tabs, new CellConstraints(1,3, CellConstraints.FILL, CellConstraints.FILL)); + /** + */ + public PluginsForm(final PluginManager manager) { + super("p:grow,3dlu,p:grow", "p,3dlu, p:grow"); + tabs = new TabForm(); + tabs.addAttribute(AvailablePlugins.getName(), "", new TabForm.TabConstraints( + GUIUtils.i18n("plugins.available"), "TT", null)); + tabs.addAttribute(InstalledPlugins.getName(), "", new TabForm.TabConstraints( + GUIUtils.i18n("plugins.installed"), "TT", null)); + addForm(tabs, new CellConstraints(1, 3, CellConstraints.FILL, CellConstraints.FILL)); - detailsForm = new FormLayoutForm("p,3dlu,p:grow", "p,3dlu,p:grow"); - detailsForm.addLabel(PluginName.getName(), new JLabel(GUIUtils.i18n("plugins.name")), new CellConstraints(1,1)); - detailsForm.addAttribute(PluginName.getName(), "", new CellConstraints(3,1)); - detailsForm.addLabel(PluginDependencies.getName(), new JLabel(GUIUtils.i18n("plugins.dependencies")), new CellConstraints(1,3)); - detailsForm.addAttribute(PluginDependencies.getName(), "", new CellConstraints(3,3)); + detailsForm = new FormLayoutForm("p,3dlu,p:grow", "p,3dlu,p:grow"); + detailsForm + .addLabel(PluginName.getName(), new JLabel(GUIUtils.i18n("plugins.name")), new CellConstraints(1, 1)); + detailsForm.addAttribute(PluginName.getName(), "", new CellConstraints(3, 1)); + detailsForm.addLabel(PluginDependencies.getName(), new JLabel(GUIUtils.i18n("plugins.dependencies")), + new CellConstraints(1, 3)); + detailsForm.addAttribute(PluginDependencies.getName(), "", new CellConstraints(3, 3)); + detailsForm.setBorder(BorderFactory.createCompoundBorder(BorderFactory.createTitledBorder(GUIUtils + .i18n("plugins.detailview")), BorderFactory.createEmptyBorder(5, 5, 5, 5))); + addForm(detailsForm, new CellConstraints(3, 3, CellConstraints.FILL, CellConstraints.FILL)); + setBorder(BorderFactory.createCompoundBorder(BorderFactory.createTitledBorder("Plugin"), BorderFactory + .createEmptyBorder(5, 5, 5, 5))); - detailsForm.setBorder(BorderFactory.createCompoundBorder( - BorderFactory.createTitledBorder(GUIUtils.i18n("plugins.detailview")), - BorderFactory.createEmptyBorder(5,5,5,5))); - addForm(detailsForm, new CellConstraints(3,3, CellConstraints.FILL, CellConstraints.FILL)); - setBorder(BorderFactory.createCompoundBorder( - BorderFactory.createTitledBorder("Plugin"), - BorderFactory.createEmptyBorder(5,5,5,5))); + // Actions! + FormLayoutForm actionButton = new FormLayoutForm("p,3dlu,p,6dlu,p,3dlu,p:grow", "p"); + actionButton.addLabel("", new JButton(new net.sf.magicmap.client.plugin.action.InstallPluginAction(manager)), + new CellConstraints(1, 1)); + actionButton.addLabel("", new JButton(new UninstallPluginAction(manager)), new CellConstraints(3, 1)); + actionButton.addLabel("", new JButton(new LoadPluginsAction(manager)), new CellConstraints(5, 1, + CellConstraints.DEFAULT, CellConstraints.FILL)); + actionButton.addAttribute(PluginRepository.getName(), "", new CellConstraints(7, 1)); + addForm(actionButton, new CellConstraints(1, 1, 3, 1, CellConstraints.FILL, CellConstraints.FILL)); + } - // Actions! - FormLayoutForm actionButton = new FormLayoutForm("p,3dlu,p,6dlu,p,3dlu,p:grow", "p"); - actionButton.addLabel("", new JButton(new net.sf.magicmap.client.plugin.action.InstallPluginAction(manager)), new CellConstraints(1,1)); - actionButton.addLabel("", new JButton(new UninstallPluginAction(manager)), new CellConstraints(3,1)); - actionButton.addLabel("", new JButton(new LoadPluginsAction(manager)), new CellConstraints(5,1,CellConstraints.DEFAULT, CellConstraints.FILL)); - actionButton.addAttribute(PluginRepository.getName(), "", new CellConstraints(7,1)); - addForm(actionButton, new CellConstraints(1,1,3,1,CellConstraints.FILL, CellConstraints.FILL)); - } - - public JComponent attatch(UserInterface ui) { - JComponent c = super.attatch(ui); - return c; - } + public JComponent attatch(UserInterface ui){ + JComponent c = super.attatch(ui); + return c; + } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |