001: /*
002: * Gruntspud
003: *
004: * Copyright (C) 2002 Brett Smith.
005: *
006: * Written by: Brett Smith <t_magicthize@users.sourceforge.net>
007: *
008: * This program is free software; you can redistribute it and/or
009: * modify it under the terms of the GNU Library General Public License
010: * as published by the Free Software Foundation; either version 2 of
011: * the License, or (at your option) any later version.
012: * This program is distributed in the hope that it will be useful,
013: * but WITHOUT ANY WARRANTY; without even the implied warranty of
014: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
015: * GNU Library General Public License for more details.
016: *
017: * You should have received a copy of the GNU Library General Public
018: * License along with this program; if not, write to the Free Software
019: * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
020: */
021:
022: package gruntspud.connection;
023:
024: import gruntspud.GruntspudContext;
025: import gruntspud.ui.preferences.AbstractAdditionalOptionsPane;
026:
027: import java.util.ResourceBundle;
028:
029: import javax.swing.Icon;
030: import javax.swing.JComponent;
031:
032: import plugspud.Plugin;
033: import plugspud.PluginException;
034: import plugspud.PluginHostContext;
035:
036: /**
037: * Abstract implementation of the specialised connection plugin
038: *
039: * @author magicthize
040: */
041: public abstract class AbstractConnectionPlugin implements
042: ConnectionPlugin {
043: //
044: static ResourceBundle res = ResourceBundle
045: .getBundle("gruntspud.connection.ResourceBundle");
046:
047: // Private instance variables
048: private String type;
049: private Class connectionClass;
050: private AbstractAdditionalOptionsPane optionsComponent;
051: private Icon icon;
052:
053: /**
054: * Construct a new connection plugin
055: *
056: * @param icon icon
057: * @param type connection type this plugin handles
058: * @param optionsComponent optionsComponent
059: * @param connectionClass class of connection implementation
060: */
061: public AbstractConnectionPlugin(Icon icon, String type,
062: AbstractAdditionalOptionsPane optionsComponent,
063: Class connectionClass) {
064: this .icon = icon;
065: this .type = type;
066: this .optionsComponent = optionsComponent;
067: this .connectionClass = connectionClass;
068: }
069:
070: /**
071: * Return the connection type name that this plugin handles
072: *
073: * @return connection type name
074: */
075: public String getConnectionType() {
076: return type;
077: }
078:
079: /**
080: * Implement to return a component that can be used to edit any additional
081: * options for this type
082: *
083: * @return options component
084: */
085: public AbstractAdditionalOptionsPane getOptionsComponent() {
086: return optionsComponent;
087: }
088:
089: /**
090: * Implement to create an instance of the connection
091: *
092: * @param parent parent component
093: * @param context context
094: * @param profile profile to use for connection
095: *
096: * @return connection
097: */
098: public GruntspudConnection createConnection(JComponent parent,
099: GruntspudContext context, ConnectionProfile profile)
100: throws ConnectionException {
101: try {
102: GruntspudConnection conx = (GruntspudConnection) connectionClass
103: .newInstance();
104: conx.init(parent, context, profile);
105:
106: return conx;
107: } catch (Throwable t) {
108: throw new ConnectionException(
109: "Failed to create connection", t);
110: }
111: }
112:
113: /**
114: * Return an icon for the plugin
115: *
116: * @return plugin
117: */
118: public Icon getIcon() {
119: return icon;
120: }
121:
122: /**
123: * Invoked by Gruntspud when it starts the plugin
124: *
125: * @param context context
126: *
127: * @throws PluginException on any initialisation error
128: */
129: public void startPlugin(PluginHostContext context)
130: throws PluginException {
131: }
132:
133: /**
134: * Invoked by Gruntspud when it wants to stop the plugin (e.g. when it is
135: * closing). Returning a value of <code>false</code> prevents the plugin
136: * from being closed.
137: *
138: * @return can close
139: */
140: public boolean canStopPlugin() {
141: return true;
142: }
143:
144: /**
145: * Stop the plugin.
146: */
147: public void stopPlugin() throws PluginException {
148: }
149: }
|