Changeset 5610


Ignore:
Timestamp:
Apr 15, 2011, 3:01:15 PM (10 years ago)
Author:
Nicklas Nordborg
Message:

References #1592: Unified installation procedure for plug-ins, extensions and more...

Moved plug-in definitions into the extension definitions file. This means that we can get rid of the Plugin.getAbout() method since that information is now provided in the XML file instead. I have started to move the core plug-in definitions into the core-plugins.xml file (only a few so far).

The base-plugins.dtd was removed since it is no longer used. External plug-in packages that use base-plugins.xml must be updated to use the new format.

Location:
trunk
Files:
2 added
2 deleted
43 edited

Legend:

Unmodified
Added
Removed
  • trunk/build.xml

    r5609 r5610  
    657657      <compilerarg value="${javac.arg}" />
    658658    </javac>
     659    <copy todir="${coreplugins.build}"
     660      description="Resource files needed by the core plug-ins; excludes documentation and source files">
     661      <fileset dir="${coreplugins.src}">
     662        <include name="**/*" />
     663        <exclude name="**/*.java" />
     664        <exclude name="**/doc-files/" />
     665        <exclude name="**/package.html" />
     666      </fileset>
     667    </copy>
     668    <replaceregexp
     669      file="${coreplugins.build}/core-plugins.xml"
     670      match="&lt;version&gt;.*&lt;/version&gt;"
     671      replace="&lt;version&gt;${base.version}${base.versionsuffix}&lt;/version&gt;"
     672      encoding="UTF-8"
     673    />
    659674  </target>
    660675 
  • trunk/src/core/net/sf/basedb/core/Install.java

    r5593 r5610  
    6868import net.sf.basedb.core.DbControl;
    6969
     70import net.sf.basedb.util.FileUtil;
    7071import net.sf.basedb.util.MD5;
    7172import net.sf.basedb.util.Values;
    7273import net.sf.basedb.util.XMLUtil;
    73 
     74import net.sf.basedb.util.extensions.xml.PluginInfo;
     75import net.sf.basedb.util.extensions.xml.XmlLoader;
     76
     77import java.io.InputStream;
    7478import java.net.URL;
    7579import java.util.ArrayList;
     
    687691          "net.sf.basedb.core.plugin.NonRestartable", null);
    688692     
     693      createPluginDefinitions("/core-plugins.xml", keyEveryoneUse, update);
     694     
     695      /*
    689696      createPluginDefinition("net.sf.basedb.plugins.Base1PluginExecuter", null, null, true, null, false);
    690697      createPluginDefinition("net.sf.basedb.plugins.BaseFileExporterPlugin", null, keyEveryoneUse, true, null, true);
     
    693700      createPluginDefinition("net.sf.basedb.plugins.HelpExporter", null, null, true, null, true);
    694701      createPluginDefinition("net.sf.basedb.plugins.HelpImporter", null, null, true, null, false);
     702     
    695703      createPluginDefinition("net.sf.basedb.plugins.IntensityCalculatorPlugin", null, keyEveryoneUse, true, null, false);
    696704      createPluginDefinition("net.sf.basedb.plugins.JepExtraValueCalculator", null, keyEveryoneUse, true, null, false);
     
    733741      createPluginDefinition("net.sf.basedb.plugins.executor.BaseFileImporterSupport", null, keyEveryoneUse, true, null, false);
    734742      createPluginDefinition("net.sf.basedb.plugins.executor.FileOnlyImporterSupport", null, keyEveryoneUse, true, null, false);
     743      */
    735744     
    736745      // Plugin configurations
    737746      progressStep++;
    738747      if (progress != null) progress.display((int)(progressStep*progress_factor), "--Creating example plugin configurations...");
     748      /*
    739749      createPluginConfigurations("/plugin_configfile.xml", update);
    740750      createPluginConfigurations("/illumina.configurations.xml", update);
     751      */
    741752     
    742753      // Formulas
     
    24132424    Create a {@link PluginDefinition}.
    24142425  */
     2426  /*
    24152427  private static PluginDefinition createPluginDefinition(String className, String jarPath,
    24162428    ItemKeyData shareTo, boolean trusted, Long maxMemory, boolean allowImmediateExecution)
     
    24592471    return pd;
    24602472  }
    2461    
     2473  */
     2474 
     2475  /**
     2476    Read plug-in definitions from the given file.
     2477  */
     2478  private static void createPluginDefinitions(String filePath, ItemKeyData shareToEveryone, boolean update)
     2479  {
     2480    DbControl dc = null;
     2481    InputStream in = null;
     2482    try
     2483    {
     2484      URL fileURL = Install.class.getResource(filePath);
     2485      in = fileURL.openStream();
     2486     
     2487      XmlLoader loader = new XmlLoader();
     2488      loader.loadXmlFile(in, filePath, null, false);
     2489     
     2490      for (PluginInfo info : loader.getPluginDefinitions())
     2491      {
     2492        createPluginDefinition(info, shareToEveryone);
     2493      }
     2494     
     2495    }
     2496    catch(Throwable ex)
     2497    {
     2498      throw new BaseException(ex);
     2499    }
     2500    finally
     2501    {
     2502      FileUtil.close(in);
     2503      if (dc != null) dc.close();
     2504    }
     2505  }
     2506
     2507
     2508 
     2509  /**
     2510    Create a {@link PluginDefinition}.
     2511  */
     2512  private static PluginDefinition createPluginDefinition(PluginInfo info, ItemKeyData shareToEveryone)
     2513    throws BaseException
     2514  {
     2515    PluginDefinition pd = null;
     2516    DbControl dc = null;
     2517    String className = info.getClassName();
     2518    try
     2519    {
     2520     
     2521      dc = sessionControl.newDbControl();
     2522     
     2523      try
     2524      {
     2525        pd = PluginDefinition.getByClassName(dc, className);
     2526      }
     2527      catch (ItemNotFoundException ex)
     2528      {}
     2529     
     2530      if (pd != null)
     2531      {
     2532        pd.loadPluginInformation(null, className, true);
     2533        pd.setAbout(info.getAbout(), false);
     2534        dc.commit();
     2535        log.info("createPluginDefinition: UPDATED [class="+className+"]");
     2536      }
     2537      else
     2538      {
     2539        pd = PluginDefinition.getNew(dc, className, null, true);
     2540        pd.setAbout(info.getAbout(), false);
     2541        pd.setTrusted(true);
     2542        pd.setMaxMemory(Values.getLong(info.getProperty("max-memory"), null));
     2543        pd.setAllowImmediateExecution(Values.getBoolean(info.getProperty("immediate-execution")));
     2544        if (Values.getBoolean(info.getProperty("everyone-use")))
     2545        {
     2546          pd.getData().setItemKey(shareToEveryone);
     2547        }
     2548        dc.saveItem(pd);
     2549        dc.commit();
     2550        log.info("createPluginDefinition: OK [class="+className+"]");
     2551      }
     2552    }
     2553    catch (BaseException ex)
     2554    {
     2555      log.error("createPluginDefinition: FAILED [class="+className+"]", ex);
     2556      throw ex;
     2557    }
     2558    finally
     2559    {
     2560      if (dc != null) dc.close();
     2561    }
     2562    return pd;
     2563  }
     2564
     2565 
     2566 
    24622567  /**
    24632568    Create {@link PluginConfiguration}s from a XML file.
  • trunk/src/core/net/sf/basedb/core/PluginDefinition.java

    r5596 r5610  
    6363*/
    6464public class PluginDefinition
    65   extends SharedItem<PluginDefinitionData>
    66   implements Nameable, Removable, AnnotatableProxy, Registered
     65  extends CommonItem<PluginDefinitionData>
     66  implements AnnotatableProxy, Registered
    6767{
    6868  /**
     
    587587 
    588588  /**
    589     Get the name of the plugin.
    590 
    591     @return A string with the name of the plugin
    592   */
    593   public String getName()
    594   {
    595     return getData().getName();
    596   }
    597   /**
    598     The name cannot be changed.
    599     @throws PermissionDeniedException Always
    600   */
    601   public void setName(String name)
    602     throws PermissionDeniedException
    603   {
    604     throw new PermissionDeniedException("Not allowed to set the name of a plugin");
    605   }
    606 
    607   /**
    608     The name cannot be changed. Used internally only.
    609 
    610     @base.developer
    611     This value is initialised upon installation to: plugin.about().getName()
    612     See: {@link #loadPluginInformation(String, String, boolean)}
    613     @throws InvalidDataException If the name is null or too long
    614   */
    615   private void setNameInternal(String name)
    616     throws InvalidDataException
    617   {
    618     getData().setName(StringUtil.setNotNullString(name, "name", MAX_NAME_LENGTH));
    619   }
    620 
    621   /**
    622     Get a description of the plugin.
    623     @return A string with a description, or null if not known
    624   */
    625   public String getDescription()
    626   {
    627     return getData().getDescription();
    628   }
    629   /**
    630     The description cannot be changed.
    631     @throws PermissionDeniedException Always
    632   */
    633   public void setDescription(String description)
    634     throws PermissionDeniedException
    635   {
    636     throw new PermissionDeniedException("Not allowed to set the description of a plugin");
    637   }
    638  
    639   /**
    640     The description cannot be changed. Used internally only.
    641 
    642     @base.developer
    643     This value is initialised upon installation to: plugin.about().getDescription()
    644     See: {@link #loadPluginInformation(String, String, boolean)}
    645     @throws InvalidDataException If the description is too long
    646   */
    647   protected void setDescriptionInternal(String description)
    648     throws InvalidDataException
    649   {
    650     getData().setDescription(description);
    651   }
    652 
    653   /**
    654589    Get the version of the plugin.
    655590    @return A string with the version of the plugin, or null if not known
     
    660595  }
    661596  /**
    662     The version cannot be changed. Used internally only.
    663 
    664     @base.developer
    665     This value is initialised upon installation to: plugin.about().getVersion()
    666     See: {@link #loadPluginInformation(String, String, boolean)}
     597    Update version information for this plug-in.
    667598    @throws InvalidDataException If the version is too long
     599    @since 3.0
    668600  */
    669601  private void setVersionString(String version)
    670602    throws InvalidDataException
    671603  {
     604    checkPermission(Permission.WRITE);
    672605    getData().setVersionString(StringUtil.setNullableString(version, "version", MAX_VERSION_LENGTH));
    673606  }
     
    682615  }
    683616  /**
    684     The copyright notice cannot be changed. Used internally only.
    685 
    686     @base.developer
    687     This value is initialised upon installation to: plugin.about().getCopyright()
    688     See: {@link #loadPluginInformation(String, String, boolean)}
     617    Update copyright information about this plug-in.
    689618    @throws InvalidDataException If the copyright is too long
     619    @since 3.0
    690620  */
    691621  private void setCopyright(String copyright)
    692622    throws InvalidDataException
    693623  {
     624    checkPermission(Permission.WRITE);
    694625    getData().setCopyright(StringUtil.setNullableString(copyright, "copyright", MAX_COPYRIGHT_LENGTH));
    695626  }
     
    704635  }
    705636  /**
    706     The contact information cannot be changed. Used internally only.
    707 
    708     @base.developer
    709     This value is initialised upon installation to: plugin.about().getContact()
    710     See: {@link #loadPluginInformation(String, String, boolean)}
     637    Set contact information for this plug-in.
    711638    @throws InvalidDataException If the contact is too long
     639    @since 3.0
    712640  */
    713641  private void setContact(String contact)
    714642    throws InvalidDataException
    715643  {
     644    checkPermission(Permission.WRITE);
    716645    getData().setContact(StringUtil.setNullableString(contact, "contact", MAX_CONTACT_LENGTH));
    717646  }
     
    726655  }
    727656  /**
    728     The email address cannot be changed. Used internally only.
    729 
    730     @base.developer
    731     This value is initialised upon installation to: plugin.about().getEmail()
    732     See: {@link #loadPluginInformation(String, String, boolean)}
     657    Set the email address that can be used to contact the
     658    developer of the plug-in.
     659
    733660    @throws InvalidDataException If the email is too long
     661    @since 3.0
    734662  */
    735663  private void setEmail(String email)
    736664    throws InvalidDataException
    737665  {
     666    checkPermission(Permission.WRITE);
    738667    getData().setEmail(StringUtil.setNullableString(email, "email", MAX_EMAIL_LENGTH));
    739668  }
     
    748677  }
    749678  /**
    750     The URL cannot be changed. Used internally only.
    751 
    752     @base.developer
    753     This value is initialised upon installation to: plugin.about().getUrl()
    754     See: {@link #loadPluginInformation(String, String, boolean)}
     679    Set the URL to a web page with more information about the plug-in.
    755680    @throws InvalidDataException If the url is too long
    756   */
    757   private void setUrl(String url)
     681    @since 3.0
     682  */
     683  public void setUrl(String url)
    758684    throws InvalidDataException
    759685  {
     686    checkPermission(Permission.WRITE);
    760687    getData().setUrl(StringUtil.setNullableString(url, "url", MAX_URL_LENGTH));
    761688  }
    762689
     690  /**
     691    Update the plug-in information with the information in the
     692    about object.
     693    @param about An About object
     694    @param force If TRUE all values are updated, if FALSE only non-null
     695      values
     696    @since 3.0
     697  */
     698  public void setAbout(About about, boolean force)
     699  {
     700    if (force || about.getName() != null) setName(about.getName());
     701    if (force || about.getDescription() != null) setDescription(about.getDescription());
     702    if (force || about.getVersion() != null) setVersionString(about.getVersion());
     703    if (force || about.getCopyright() != null) setCopyright(about.getCopyright());
     704    if (force || about.getContact() != null) setContact(about.getContact());
     705    if (force || about.getEmail() != null) setEmail(about.getEmail());
     706    if (force || about.getUrl() != null) setUrl(about.getUrl());
     707  }
     708 
    763709  /**
    764710    If this plugin is trusted or not. A trusted plugin is executed without any
     
    12841230 
    12851231  /**
    1286     Load a plugin and copy all information, ie. plugin.about(),
    1287     to the internal data structure.
     1232    Load a plugin and copy information to the internal data structure.
    12881233    @param jarFile File name of the jar file containing the plug-in. The
    12891234      JAR file must be located in the directory spercified by 'plugins.dir' setting
     
    13191264    setRequiresConfiguration(supportsConfigurations() && plugin.requiresConfiguration());
    13201265   
    1321     // The class name and jar path
     1266    // The name, class name and jar filename
     1267    if (getName() == null) setName(plugin.getClass().getSimpleName());
    13221268    setClassName(className);
    13231269    setJarFile(jarFile);
    1324    
    1325     // Everything returned by the getAbout() method...
    1326     About about = plugin.getAbout();
    1327     setNameInternal(about.getName());
    1328     setDescriptionInternal(about.getDescription());
    1329     setVersionString(about.getVersion());
    1330     setCopyright(about.getCopyright());
    1331     setContact(about.getContact());
    1332     setEmail(about.getEmail());
    1333     setUrl(about.getUrl());
    13341270   
    13351271    if (plugin instanceof InteractivePlugin)
  • trunk/src/core/net/sf/basedb/core/plugin/AbstractAnalysisPlugin.java

    r5385 r5610  
    408408  protected String getTransformationName(DbControl dc)
    409409  {
    410     String transformationName = getAbout().getName();
     410    String transformationName = job.getPluginDefinition().getName();
    411411    if (configuration != null)
    412412    {
  • trunk/src/core/net/sf/basedb/core/plugin/Plugin.java

    r4889 r5610  
    4242  <ol>
    4343  <li>Create a plugin object, using the default constructor
    44   <li>Call the {@link #getMainType()} and {@link #getAbout()} methods
     44  <li>Call the {@link #getMainType()} method
    4545  <li>Check if the plugin inmplements the {@link InteractivePlugin}
    4646    and if it does, call the {@link InteractivePlugin#getGuiContexts()}
     
    8181    name, version, authors, etc.
    8282    @return An {@link About} object
     83    deprecated
    8384  */
    84   public About getAbout();
     85  //public About getAbout();
    8586
    8687  /**
  • trunk/src/core/net/sf/basedb/core/xsd/extensions.xsd

    r5607 r5610  
    3232        <!-- global 'about' element -->
    3333        <xsd:element name="about" type="aboutType" minOccurs="0" />
     34       
     35        <!-- 'plugin-definition' element -->
     36        <xsd:element name="plugin-definition" minOccurs="0" maxOccurs="unbounded">
     37          <xsd:complexType>
     38            <xsd:all>
     39              <xsd:element name="about" type="aboutType" minOccurs="0" />
     40              <xsd:element name="plugin-class" type="classNameType" />
     41              <xsd:element name="settings" minOccurs="0">
     42                <xsd:complexType>
     43                  <xsd:sequence>
     44                    <xsd:element name="property" minOccurs="0" maxOccurs="unbounded">
     45                      <xsd:complexType>
     46                        <xsd:simpleContent>
     47                          <xsd:extension base="xsd:string">
     48                            <xsd:attribute name="name" type="xsd:string" use="required"/>
     49                          </xsd:extension>
     50                        </xsd:simpleContent>
     51                      </xsd:complexType>
     52                    </xsd:element>
     53                  </xsd:sequence>
     54                </xsd:complexType>
     55              </xsd:element>
     56            </xsd:all>
     57            <xsd:attribute name="id" type="xsd:ID" use="required" />
     58          </xsd:complexType>
     59        </xsd:element>
    3460       
    3561        <!-- 'extension-point' element -->
  • trunk/src/core/net/sf/basedb/util/PluginInfo.java

    r4945 r5610  
    171171          {     
    172172            Plugin pl = (Plugin)c.newInstance();
    173             About about = pl.getAbout();
     173            About about = null; //pl.getAbout();
    174174            List<PluginConfigInfo> configs = null;
    175175           
  • trunk/src/core/net/sf/basedb/util/extensions/xml/XmlLoader.java

    r5607 r5610  
    133133    The URL pointing to the extensions.xsd schema.
    134134  */
    135   private static final String schemaFileURL =
     135  public static final String SCHEMA_FILE_URL =
    136136    XmlLoader.class.getResource("/net/sf/basedb/core/xsd/extensions.xsd").toString();
    137137
     
    139139    The name of the extensions namespace.
    140140  */
    141   private static final String namespace = "http://base.thep.lu.se/extensions.xsd";
     141  public static final String NAMESPACE = "http://base.thep.lu.se/extensions.xsd";
    142142 
    143143  // To convert XML elements to a string representation
     
    145145 
    146146  // All loaded extension points
    147   private List<ExtensionPoint<Action>> extensionPoints;
     147  private final List<ExtensionPoint<Action>> extensionPoints;
    148148 
    149149  // All loaded extensions
    150   private List<Extension<Action>> extensions;
     150  private final List<Extension<Action>> extensions;
     151 
     152  // All loaded plug-in definitions
     153  private final List<PluginInfo> pluginDefinitions;
    151154 
    152155  // List of registered converters
     
    154157 
    155158  // Map with XML representation of factory parameters
    156   private Map<Object, String> factoryParameters;
     159  private final Map<Object, String> factoryParameters;
    157160 
    158161  // The last document that was validated
     
    169172    extensionPoints = new LinkedList<ExtensionPoint<Action>>();
    170173    extensions = new LinkedList<Extension<Action>>();
     174    pluginDefinitions = new LinkedList<PluginInfo>();
    171175    factoryParameters = new HashMap<Object, String>();
    172176    xmlOut = new XMLOutputter(Format.getPrettyFormat());
     
    313317      extensionPoints.clear();
    314318      extensions.clear();
     319      pluginDefinitions.clear();
    315320    }
    316321    About globalAbout = loadGlobalAbout(validatedDom);
    317322    loadExtensionPoints(validatedDom, classLoader, globalAbout);
    318323    loadExtensions(validatedDom, classLoader, globalAbout);
     324    loadPluginDefinitions(validatedDom, classLoader, globalAbout);
    319325    validatedDom = null;
    320326    return globalAbout;
     
    354360 
    355361  /**
     362    Get a list with all loaded plug-in definitions.
     363    @since 3.0
     364  */
     365  public List<PluginInfo> getPluginDefinitions()
     366  {
     367    return pluginDefinitions;
     368  }
     369 
     370  /**
    356371    Get a XML-like string representation of the parameters that was
    357372    used to initialise a factory.
     
    447462  {
    448463    log.debug("Validating file: " + filename);
    449     Document dom = XMLUtil.getSchemaValidatedXML(xmlFile, filename, namespace, schemaFileURL);
     464    Document dom = XMLUtil.getSchemaValidatedXML(xmlFile, filename, NAMESPACE, SCHEMA_FILE_URL);
    450465    return dom;
    451466  }
     
    766781 
    767782  /**
     783    Load plug-in information from an XML document.
     784    @since 3.0
     785  */
     786  @SuppressWarnings("unchecked")
     787  protected int loadPluginDefinitions(Document dom, ClassLoader classLoader, About globalAbout)
     788    throws ClassNotFoundException, NoSuchMethodException,
     789      IllegalAccessException, InstantiationException
     790  {
     791    log.debug("Loading plug-in definitions from file: " + lastName);
     792    int numLoaded = 0;
     793    List<PluginInfo> temp = new LinkedList<PluginInfo>();
     794    /*
     795      Format of a plug-in definition is:
     796      <plugin-definition
     797        id="..."
     798        >
     799        <about>
     800          <name>...</name>
     801          <description>...</name>
     802          <version>...</version>
     803          <contact>...</contact>
     804          <copyright>...</copyright>
     805          <email>...</email>
     806          <url>...</url>
     807        </about>
     808        <plugin-class>...</plugin-class>
     809      </plugin-definition>
     810    */
     811 
     812    Element root = dom.getRootElement();
     813    Namespace ns = root.getNamespace();
     814    // ID base will be prepended to extension point id:s if defined
     815    String idBase = Values.getStringOrNull(root.getAttributeValue("id-base"));
     816 
     817    List<Element> pdTags = root.getChildren("plugin-definition", ns);
     818    log.debug("Found " + pdTags.size() + " plug-in definitions in file: " + lastName);
     819    for (Element pdTag : pdTags)
     820    {
     821      // id
     822      String id = Values.getStringOrNull(pdTag.getAttributeValue("id"));
     823      if (idBase != null) id = idBase + id;
     824      log.debug("Processing plug-in definition: " + id);
     825     
     826      // <about>
     827      AboutBean about = loadAbout(pdTag.getChild("about", ns));
     828      if (globalAbout != null)
     829      {
     830        if (about == null) about = new AboutBean();
     831        about.copy(globalAbout, false);
     832      }
     833     
     834      // <plugin-class>
     835      String className = Values.getStringOrNull(pdTag.getChildText("plugin-class", ns));
     836     
     837      PluginInfo info = new PluginInfo(id);
     838      info.setAbout(about);
     839      info.setClassName(className);
     840     
     841      temp.add(info);
     842     
     843      // <settings>
     844      Element settingsTag = pdTag.getChild("settings", ns);
     845      if (settingsTag != null)
     846      {
     847        for (Element propertyTag : (List<Element>)settingsTag.getChildren("property", ns))
     848        {
     849          String name = propertyTag.getAttributeValue("name");
     850          String value = Values.getStringOrNull(propertyTag.getText());
     851          info.setProperty(name, value);
     852        }
     853      }
     854     
     855      if (!verifyBaseVersion(about, false))
     856      {
     857        String min = about.getMinBaseVersion();
     858        String max = about.getMaxBaseVersion();
     859        log.info("Plug-in definition '" + id + "' require BASE version between " +
     860          (min == null ? "*" : min) + " and " + (max == null ? "*" : max)
     861        );
     862      }
     863      else
     864      {
     865        // <action-factory>
     866        /*
     867        Element afTag = epTag.getChild("action-factory", ns);
     868        ActionFactory af = null;
     869        if (afTag != null)
     870        {
     871          af = createFactory(afTag, classLoader, ActionFactory.class);
     872        }
     873        */
     874      }
     875    }
     876    pluginDefinitions.addAll(temp);
     877    return numLoaded;
     878  }
     879
     880 
     881  /**
    768882    Create a new factory instance. The factory must be a class
    769883    with a public, no-argument constructor. The factory class name
  • trunk/src/plugins/core/net/sf/basedb/plugins/Base1PluginExecuter.java

    r5481 r5610  
    5656import net.sf.basedb.core.Transformation;
    5757import net.sf.basedb.core.User;
    58 import net.sf.basedb.core.Version;
    59 import net.sf.basedb.core.plugin.About;
    60 import net.sf.basedb.core.plugin.AboutImpl;
    6158import net.sf.basedb.core.plugin.AbstractAnalysisPlugin;
    6259import net.sf.basedb.core.plugin.GuiContext;
     
    134131
    135132  /**
    136     Plugin description
    137   */
    138   private static final About about = new AboutImpl(
    139     "Base1PluginExecuter",
    140     "This plug-in simulates the plug-in runner from Base 1.2 to enable old plug-ins to be executed.",
    141     Version.getMajor() + "." + Version.getMinor() + "." + Version.getMaintenance(),
    142     "2006, Base 2 development team",
    143     null,
    144     null,
    145     "http://base.thep.lu.se");
    146  
    147   /**
    148133    The plug-in permissions.
    149134  */
     
    597582
    598583  // *** From Plugin interface
    599 
    600   public About getAbout()
    601   {
    602     return about;
    603   }
    604  
    605 
    606584  @Override
    607585  public boolean supportsConfigurations()
  • trunk/src/plugins/core/net/sf/basedb/plugins/BaseFileExporterPlugin.java

    r5481 r5610  
    5555import net.sf.basedb.core.StringParameterType;
    5656import net.sf.basedb.core.Type;
    57 import net.sf.basedb.core.Version;
    5857import net.sf.basedb.core.ExtraValue.CoordinateType;
    59 import net.sf.basedb.core.plugin.About;
    60 import net.sf.basedb.core.plugin.AboutImpl;
    6158import net.sf.basedb.core.plugin.AbstractExporterPlugin;
    6259import net.sf.basedb.core.plugin.ExportOutputStream;
     
    108105{
    109106
    110   private static final About about =
    111     new AboutImpl
    112     (
    113       "BASEfile exporter",
    114       "Exports bioassay set data to serial or matrix " +
    115       "BASEfile format.",
    116       Version.getMajor() + "." + Version.getMinor() + "." + Version.getMaintenance(),
    117       "2009, Base 2 development team",
    118       null,
    119       null,
    120       "http://base.thep.lu.se"
    121     );
    122 
    123107  private static final Set<GuiContext> guiContexts =
    124108    Collections.singleton(GuiContext.item(Item.BIOASSAYSET));
     
    140124    -------------------------------------------
    141125  */
    142   @Override
    143   public About getAbout()
    144   {
    145     return about;
    146   }
    147126  @Override
    148127  public boolean supportsConfigurations()
  • trunk/src/plugins/core/net/sf/basedb/plugins/BfsExporterPlugin.java

    r5481 r5610  
    4848import net.sf.basedb.core.StringParameterType;
    4949import net.sf.basedb.core.Type;
    50 import net.sf.basedb.core.Version;
    5150import net.sf.basedb.core.ExtraValue.CoordinateType;
    52 import net.sf.basedb.core.plugin.About;
    53 import net.sf.basedb.core.plugin.AboutImpl;
    5451import net.sf.basedb.core.plugin.AbstractPlugin;
    5552import net.sf.basedb.core.plugin.GuiContext;
     
    105102{
    106103
    107   private static final About about =
    108     new AboutImpl
    109     (
    110       "BFS exporter",
    111       "Exports bioassay set data to BFS format.",
    112       Version.getMajor() + "." + Version.getMinor() + "." + Version.getMaintenance(),
    113       "2010, Base 2 development team",
    114       null,
    115       null,
    116       "http://base.thep.lu.se"
    117     );
    118 
    119104  private static final Set<GuiContext> guiContexts =
    120105    Collections.singleton(GuiContext.item(Item.BIOASSAYSET));
     
    137122  {
    138123    return MainType.EXPORT;
    139   }
    140   @Override
    141   public About getAbout()
    142   {
    143     return about;
    144124  }
    145125  @Override
  • trunk/src/plugins/core/net/sf/basedb/plugins/FormulaFilter.java

    r5481 r5610  
    3737import net.sf.basedb.core.RequestInformation;
    3838import net.sf.basedb.core.StringParameterType;
    39 import net.sf.basedb.core.Version;
    40 import net.sf.basedb.core.plugin.About;
    41 import net.sf.basedb.core.plugin.AboutImpl;
    4239import net.sf.basedb.core.plugin.AbstractAnalysisPlugin;
    4340import net.sf.basedb.core.plugin.AnalysisFilterPlugin;
     
    7875{
    7976
    80   /**
    81      Plugin description
    82   */
    83   private static final About about =
    84     new AboutImpl
    85     (
    86       "JEP filter plugin",
    87       "This plugin is used to filter a bioassay set, creating a new bioassay set with fewer spots in it. "+
    88       "The filter is based on expressions entered by the user, which are parsed with the JEP package. " +
    89       "Thus, the functionality of this plugin is very flexible.",
    90       Version.getMajor() + "." + Version.getMinor() + "." + Version.getMaintenance(),
    91       "2006, Base 2 development team",
    92       null,
    93       null,
    94       "http://base.thep.lu.se"
    95     );   
    9677
    9778  private static final Set<Permissions> permissions = new HashSet<Permissions>();
     
    11495    -------------------------------------------
    11596  */
    116   public About getAbout()
    117   {
    118     return about;
    119   }
    12097  public boolean supportsConfigurations()
    12198  {
  • trunk/src/plugins/core/net/sf/basedb/plugins/GalExporter.java

    r5590 r5610  
    124124    -------------------------------------------
    125125  */
    126   @Override
    127   public About getAbout()
    128   {
    129     return about;
    130   }
    131126  public boolean supportsConfigurations()
    132127  {
  • trunk/src/plugins/core/net/sf/basedb/plugins/HelpExporter.java

    r5481 r5610  
    3737import net.sf.basedb.core.ProgressReporter;
    3838import net.sf.basedb.core.RequestInformation;
    39 import net.sf.basedb.core.Version;
    4039import net.sf.basedb.core.Job.ExecutionTime;
    41 import net.sf.basedb.core.plugin.About;
    42 import net.sf.basedb.core.plugin.AboutImpl;
    4340import net.sf.basedb.core.plugin.AbstractExporterPlugin;
    4441import net.sf.basedb.core.plugin.ExportOutputStream;
     
    8077  implements InteractivePlugin, SignalTarget
    8178{
    82  
    83   private static final About about =
    84       new AboutImpl
    85     (
    86         "Help texts exporter",
    87         "This plugin is used to export a client applications help texts to a XML-file. The help " +
    88         "tests can later be imported by the corresponding import plugin.",
    89         Version.getMajor() + "." + Version.getMinor() + "." + Version.getMaintenance(),
    90         "2006, Base 2 development team",
    91         null,
    92         null,
    93         "http://base.thep.lu.se"
    94     );
    9579 
    9680  private static final GuiContext clientItem = new GuiContext(Item.CLIENT, GuiContext.Type.ITEM);
     
    248232    --------------------------------
    249233  */
    250   public About getAbout()
    251   {
    252     return about;
    253   }
    254234  public boolean supportsConfigurations()
    255235  {
  • trunk/src/plugins/core/net/sf/basedb/plugins/HelpImporter.java

    r5590 r5610  
    5454import net.sf.basedb.core.ProgressReporter;
    5555import net.sf.basedb.core.RequestInformation;
    56 import net.sf.basedb.core.Version;
    57 import net.sf.basedb.core.plugin.About;
    58 import net.sf.basedb.core.plugin.AboutImpl;
    5956import net.sf.basedb.core.plugin.AbstractPlugin;
    6057import net.sf.basedb.core.plugin.AutoDetectingImporter;
     
    107104  private static final String dtdFileName = "helpfile.dtd";
    108105 
    109   private static final About about = new AboutImpl
    110   (
    111       "Help texts importer",
    112       "This plugin is used to import help texts from a XML-file to BASE.",
    113       Version.getMajor() + "." + Version.getMinor() + "." + Version.getMaintenance(),
    114       "2006, Base 2 development team",
    115       null,
    116       null,
    117       "http://base.thep.lu.se"
    118   );
    119  
    120106  private static final GuiContext clientItem = new GuiContext(Item.CLIENT, GuiContext.Type.ITEM);
    121107  private static final GuiContext helpList = new GuiContext(Item.HELP, GuiContext.Type.LIST);
     
    202188  {
    203189    return Plugin.MainType.IMPORT;
    204   }
    205  
    206   public About getAbout()
    207   {
    208     return about;
    209190  }
    210191  public boolean supportsConfigurations()
  • trunk/src/plugins/core/net/sf/basedb/plugins/ManualTransformCreator.java

    r5481 r5610  
    4949import net.sf.basedb.core.StringParameterType;
    5050import net.sf.basedb.core.Transformation;
    51 import net.sf.basedb.core.Version;
    52 import net.sf.basedb.core.plugin.About;
    53 import net.sf.basedb.core.plugin.AboutImpl;
    5451import net.sf.basedb.core.plugin.AbstractAnalysisPlugin;
    5552import net.sf.basedb.core.plugin.AnnotationSetterPlugin;
     
    9794    -------------------------------------------
    9895  */
     96  /*
    9997  @Override
    10098  public About getAbout()
     
    115113    );
    116114  }
     115  */
    117116  @Override
    118117  public boolean supportsConfigurations()
  • trunk/src/plugins/core/net/sf/basedb/plugins/batchimport/ArrayBatchImporter.java

    r5371 r5610  
    9595
    9696  /*
    97     From the Plugin interface
    98     ------------------------------------
    99   */
    100   @Override
    101   public About getAbout()
    102   {
    103     return about;
    104   }
    105   // ------------------------------------
    106 
    107   /*
    10897    From the InteractivePlugin interface
    10998    ------------------------------------
  • trunk/src/plugins/core/net/sf/basedb/plugins/batchimport/ArrayDesignImporter.java

    r5371 r5610  
    129129
    130130  /*
    131     From the Plugin interface
    132     ------------------------------------
    133   */
    134   @Override
    135   public About getAbout()
    136   {
    137     return about;
    138   }
    139   // ------------------------------------
    140 
    141   /*
    142131    From the InteractivePlugin interface
    143132    ------------------------------------
  • trunk/src/plugins/core/net/sf/basedb/plugins/batchimport/ArraySlideImporter.java

    r5371 r5610  
    112112
    113113  /*
    114     From the Plugin interface
    115     ------------------------------------
    116   */
    117   @Override
    118   public About getAbout()
    119   {
    120     return about;
    121   }
    122   // ------------------------------------
    123 
    124   /*
    125114    From the InteractivePlugin interface
    126115    ------------------------------------
  • trunk/src/plugins/core/net/sf/basedb/plugins/batchimport/BioPlateImporter.java

    r5445 r5610  
    116116
    117117  /*
    118     From the Plugin interface
    119     ------------------------------------
    120   */
    121   @Override
    122   public About getAbout()
    123   {
    124     return about;
    125   }
    126   // ------------------------------------
    127 
    128   /*
    129118    From the InteractivePlugin interface
    130119    ------------------------------------
  • trunk/src/plugins/core/net/sf/basedb/plugins/batchimport/BioSourceImporter.java

    r5371 r5610  
    6969  public BioSourceImporter()
    7070  {}
    71 
    72   /*
    73     From the Plugin interface
    74     ------------------------------------
    75   */
    76   @Override
    77   public About getAbout()
    78   {
    79     return about;
    80   }
    81   // ------------------------------------
    8271
    8372  /*
  • trunk/src/plugins/core/net/sf/basedb/plugins/batchimport/ExtractImporter.java

    r5449 r5610  
    7979
    8080  /*
    81     From the Plugin interface
    82     ------------------------------------
    83   */
    84   @Override
    85   public About getAbout()
    86   {
    87     return about;
    88   }
    89   // ------------------------------------
    90 
    91   /*
    9281    From the InteractivePlugin interface
    9382    ------------------------------------
  • trunk/src/plugins/core/net/sf/basedb/plugins/batchimport/HybridizationImporter.java

    r5371 r5610  
    134134  public HybridizationImporter()
    135135  {}
    136 
    137   /*
    138     From the Plugin interface
    139     ------------------------------------
    140   */
    141   @Override
    142   public About getAbout()
    143   {
    144     return about;
    145   }
    146   // ------------------------------------
    147136
    148137  /*
  • trunk/src/plugins/core/net/sf/basedb/plugins/batchimport/LabeledExtractImporter.java

    r5449 r5610  
    9090
    9191  /*
    92     From the Plugin interface
    93     ------------------------------------
    94   */
    95   @Override
    96   public About getAbout()
    97   {
    98     return about;
    99   }
    100   // ------------------------------------
    101 
    102   /*
    10392    From the InteractivePlugin interface
    10493    ------------------------------------
  • trunk/src/plugins/core/net/sf/basedb/plugins/batchimport/RawBioAssayImporter.java

    r5371 r5610  
    178178
    179179  /*
    180     From the Plugin interface
    181     ------------------------------------
    182   */
    183   @Override
    184   public About getAbout()
    185   {
    186     return about;
    187   }
    188   // ------------------------------------
    189 
    190   /*
    191180    From the InteractivePlugin interface
    192181    ------------------------------------
  • trunk/src/plugins/core/net/sf/basedb/plugins/batchimport/SampleImporter.java

    r5449 r5610  
    188188
    189189  /*
    190     From the Plugin interface
    191     ------------------------------------
    192   */
    193   @Override
    194   public About getAbout()
    195   {
    196     return about;
    197   }
    198   // ------------------------------------
    199 
    200   /*
    201190    From the InteractivePlugin interface
    202191    ------------------------------------
  • trunk/src/plugins/core/net/sf/basedb/plugins/batchimport/ScanImporter.java

    r5371 r5610  
    146146
    147147  /*
    148     From the Plugin interface
    149     ------------------------------------
    150   */
    151   @Override
    152   public About getAbout()
    153   {
    154     return about;
    155   }
    156   // ------------------------------------
    157 
    158   /*
    159148    From the InteractivePlugin interface
    160149    ------------------------------------
  • trunk/src/plugins/core/net/sf/basedb/plugins/executor/AbstractIOSupport.java

    r5379 r5610  
    135135    Plug-ins that want to return a different short name should
    136136    override this method.
    137     @return The name of the plugin (eg. getAbout().getName())
     137    @return The name of the plugin (eg. PluginDefinition.getName())
    138138    @since 2.16
    139139  */
     
    141141  public String getShortName()
    142142  {
    143     return getAbout().getName();
     143    return job.getPluginDefinition().getName();
    144144  }
    145145
  • trunk/src/plugins/core/net/sf/basedb/plugins/executor/BaseFileExporterSupport.java

    r5381 r5610  
    102102  */
    103103  @Override
    104   public About getAbout()
    105   {
    106     return about;
    107   }
    108   @Override
    109104  public MainType getMainType()
    110105  {
  • trunk/src/plugins/core/net/sf/basedb/plugins/executor/BaseFileImporterSupport.java

    r5384 r5610  
    9696  */
    9797  @Override
    98   public About getAbout()
    99   {
    100     return about;
    101   }
    102   @Override
    10398  public MainType getMainType()
    10499  {
  • trunk/src/plugins/core/net/sf/basedb/plugins/executor/BfsExporterSupport.java

    r5381 r5610  
    105105  */
    106106  @Override
    107   public About getAbout()
    108   {
    109     return about;
    110   }
    111   @Override
    112107  public MainType getMainType()
    113108  {
  • trunk/src/plugins/core/net/sf/basedb/plugins/executor/BfsImporterSupport.java

    r5384 r5610  
    9191    -------------------------
    9292  */
    93   @Override
    94   public About getAbout()
    95   {
    96     return about;
    97   }
    9893  @Override
    9994  public MainType getMainType()
  • trunk/src/plugins/core/net/sf/basedb/plugins/executor/ExternalProgramExecutor.java

    r5595 r5610  
    247247  */
    248248  @Override
    249   public About getAbout()
    250   {
    251     return about;
    252   }
    253   @Override
    254249  public boolean supportsConfigurations()
    255250  {
     
    10571052              "Export parameters",
    10581053              "This section contains parameters for the selected exporter plug-in: " +
    1059               exporter.getAbout().getName() + "\n" +
     1054              exporter.getShortName() + "\n" +
    10601055              riExporter.getDescription(),
    10611056              null
     
    10731068              "Import parameters",
    10741069              "This section contains parameters for the selected importer plug-in: " +
    1075               importer.getAbout().getName() + "\n" +
     1070              importer.getShortName() + "\n" +
    10761071              riImporter.getDescription(),
    10771072              null
     
    11721167              "Export parameters",
    11731168              "This section contains parameters for the selected exporter plug-in: " +
    1174               exporter.getAbout().getName() + "\n" +
     1169              exporter.getShortName() + "\n" +
    11751170              riExporter.getDescription(),
    11761171              null
     
    11891184              "Import parameters",
    11901185              "This section contains parameters for the selected importer plug-in: " +
    1191               importer.getAbout().getName() + "\n" +
     1186              importer.getShortName() + "\n" +
    11921187              riImporter.getDescription(),
    11931188              null
  • trunk/src/plugins/core/net/sf/basedb/plugins/executor/FileOnlyImporterSupport.java

    r5384 r5610  
    9191  */
    9292  @Override
    93   public About getAbout()
    94   {
    95     return about;
    96   }
    97   @Override
    9893  public MainType getMainType()
    9994  {
  • trunk/src/test/TestJarClassLoader.java

    r5394 r5610  
    2222*/
    2323import net.sf.basedb.core.BaseException;
    24 import net.sf.basedb.core.plugin.Plugin;
    25 import net.sf.basedb.core.plugin.About;
    2624import net.sf.basedb.util.JarClassLoader;
    2725import java.net.URL;
     
    6967      Object o = c.newInstance();
    7068      write_item(o);
    71       if (o instanceof Plugin)
    72       {
    73         Plugin p = (Plugin)o;
    74         write_item(p);
    75       }
    7669      ClassLoader loadedBy = o.getClass().getClassLoader();
    7770      boolean wasLoadedByJarClassLoader = loadedBy instanceof JarClassLoader;
     
    159152    }
    160153  }
    161  
    162   static void write_item(Plugin p)
    163   {
    164     if (!TestUtil.getSilent())
    165     {
    166       About a = p.getAbout();
    167       Plugin.MainType t = p.getMainType();
    168       write(a.getName()+"\t"+t+"\t"+a.getDescription());
    169     }
    170   }
    171154
    172155}
  • trunk/www/admin/jobagents/view_agent.jsp

    r5595 r5610  
    5454  import="net.sf.basedb.clients.web.util.HTML"
    5555  import="net.sf.basedb.util.Values"
    56   import="net.sf.basedb.clients.web.util.NameablePluginAdaptor"
    5756  import="net.sf.basedb.util.formatter.Formatter"
    5857  import="net.sf.basedb.clients.web.formatter.FormatterFactory"
     
    374373            {
    375374              PluginDefinition plugin = null;
    376               NameablePluginAdaptor nameableProxy = null;
    377375              boolean readPlugin = true;
    378376              try
    379377              {
    380378                plugin = settings.getPluginDefinition();
    381                 nameableProxy = new NameablePluginAdaptor(plugin);
    382379              }
    383380              catch (PermissionDeniedException ex)
     
    392389                    tooltip="This item has been scheduled for deletion"
    393390                    visible="<%=plugin != null && plugin.isRemoved()%>"
    394                   /><%=Base.getLinkedName(ID, nameableProxy, !readPlugin, true)%></tbl:cell>
     391                  /><%=Base.getLinkedName(ID, plugin, !readPlugin, true)%></tbl:cell>
    395392                <tbl:cell column="trusted"><%=settings.isEffectivelyTrusted()%></tbl:cell>
    396393                <tbl:cell column="maxMemory"><%=maxMemory == null ? "<i>- not specified -</i>" : Values.formatBytes(maxMemory)%></tbl:cell>
  • trunk/www/admin/pluginconfigurations/list_configurations.jsp

    r5426 r5610  
    5151  import="net.sf.basedb.clients.web.util.HTML"
    5252  import="net.sf.basedb.util.Values"
    53   import="net.sf.basedb.clients.web.util.NameablePluginAdaptor"
    5453  import="net.sf.basedb.util.formatter.Formatter"
    5554  import="net.sf.basedb.clients.web.formatter.FormatterFactory"
     
    466465              {
    467466                plugin = item.getPluginDefinition();
    468                 nameableProxy = new NameablePluginAdaptor(plugin);
    469467                contexts.addAll(plugin.getGuiContexts());
    470468              }
     
    529527                <tbl:cell column="pluginType"><%=plugin == null ? "<i>- denied -</i>" : plugin.getMainType().toString()%></tbl:cell>
    530528                <tbl:cell column="contexts"><%=plugin == null ? "<i>- denied -</i>" : (contexts.isEmpty() ? "<i>- none -</i>" : Values.getString(contexts, ", ", true))%></tbl:cell>
    531                 <tbl:cell column="pluginDefinition"><%=mode.hasPropertyLink() ? Base.getLinkedName(ID, nameableProxy, plugin == null, mode.hasEditLink()): Base.getEncodedName(nameableProxy, plugin == null)%></a></tbl:cell>
     529                <tbl:cell column="pluginDefinition"><%=mode.hasPropertyLink() ? Base.getLinkedName(ID, plugin, plugin == null, mode.hasEditLink()): Base.getEncodedName(nameableProxy, plugin == null)%></a></tbl:cell>
    532530                <tbl:cell column="owner"
    533531                  ><base:propertyvalue
  • trunk/www/admin/pluginconfigurations/view_configuration.jsp

    r5509 r5610  
    5353  import="net.sf.basedb.clients.web.util.HTML"
    5454  import="net.sf.basedb.util.Values"
    55   import="net.sf.basedb.clients.web.util.NameablePluginAdaptor"
    5655  import="net.sf.basedb.util.formatter.Formatter"
    5756  import="net.sf.basedb.clients.web.formatter.FormatterFactory"
     
    113112  {
    114113    plugin = configuration.getPluginDefinition();
    115     nameableProxy = new NameablePluginAdaptor(plugin);
    116114    contexts.addAll(plugin.getGuiContexts());
    117115    configurable = plugin.isInteractive() && plugin.supportsConfigurations();
     
    314312        <td class="prompt">Plugin</td>
    315313        <td>
    316           <%=Base.getLinkedName(ID, nameableProxy, plugin == null, true)%>
     314          <%=Base.getLinkedName(ID, plugin, plugin == null, true)%>
    317315        </td>
    318316      </tr>
  • trunk/www/admin/plugintypes/list_plugintypes.jsp

    r5590 r5610  
    4949  import="net.sf.basedb.clients.web.util.HTML"
    5050  import="net.sf.basedb.util.Values"
    51   import="net.sf.basedb.clients.web.util.NameablePluginAdaptor"
    5251  import="net.sf.basedb.util.formatter.Formatter"
    5352  import="net.sf.basedb.clients.web.formatter.FormatterFactory"
     
    433432                      if (mode.hasPropertyLink())
    434433                      {
    435                         out.write(Base.getLinkedName(ID, new NameablePluginAdaptor(p), false, mode.hasEditLink()));
     434                        out.write(Base.getLinkedName(ID, p, false, mode.hasEditLink()));
    436435                      }
    437436                      else
  • trunk/www/admin/plugintypes/view_plugintype.jsp

    r5509 r5610  
    4545  import="net.sf.basedb.clients.web.util.HTML"
    4646  import="net.sf.basedb.util.Values"
    47   import="net.sf.basedb.clients.web.util.NameablePluginAdaptor"
    4847  import="net.sf.basedb.util.formatter.Formatter"
    4948  import="net.sf.basedb.clients.web.formatter.FormatterFactory"
     
    282281                    tooltip="This item has been scheduled for deletion"
    283282                    visible="<%=plugin.isRemoved()%>"
    284                   /><%=Base.getLinkedName(ID, new NameablePluginAdaptor(plugin), false, true)%></tbl:cell>
     283                  /><%=Base.getLinkedName(ID, plugin, false, true)%></tbl:cell>
    285284                <tbl:cell column="class"><%=HTML.encodeTags(plugin.getClassName())%></tbl:cell>
    286285                <tbl:cell column="description"><%=HTML.encodeTags(plugin.getDescription())%></tbl:cell>
  • trunk/www/views/experiments/bioassaysets/view_bioassayset.jsp

    r5426 r5610  
    5656  import="net.sf.basedb.clients.web.util.HTML"
    5757  import="net.sf.basedb.util.Values"
    58   import="net.sf.basedb.clients.web.util.NameablePluginAdaptor"
    5958  import="net.sf.basedb.util.formatter.Formatter"
    6059  import="net.sf.basedb.clients.web.formatter.FormatterFactory"
     
    442441        <tr>
    443442          <td class="prompt">Plugin</td>
    444           <td><%=Base.getLinkedName(ID, plugin == null ? null : new NameablePluginAdaptor(plugin),
     443          <td><%=Base.getLinkedName(ID, plugin,
    445444              !readPlugin, plugin != null && plugin.hasPermission(Permission.WRITE))%></td>
    446445        </tr>
  • trunk/www/views/experiments/extravalues/view_extravalue.jsp

    r5426 r5610  
    5555  import="net.sf.basedb.clients.web.util.HTML"
    5656  import="net.sf.basedb.util.Values"
    57   import="net.sf.basedb.clients.web.util.NameablePluginAdaptor"
    5857  import="net.sf.basedb.util.formatter.Formatter"
    5958  import="net.sf.basedb.clients.web.formatter.FormatterFactory"
     
    315314        <tr>
    316315          <td class="prompt">Plugin</td>
    317           <td><%=Base.getLinkedName(ID, plugin == null ? null : new NameablePluginAdaptor(plugin),
     316          <td><%=Base.getLinkedName(ID, plugin,
    318317              !readPlugin, plugin != null && plugin.hasPermission(Permission.WRITE))%></td>
    319318        </tr>
  • trunk/www/views/experiments/transformations/view_transformation.jsp

    r5426 r5610  
    5555  import="net.sf.basedb.clients.web.util.HTML"
    5656  import="net.sf.basedb.util.Values"
    57   import="net.sf.basedb.clients.web.util.NameablePluginAdaptor"
    5857  import="net.sf.basedb.util.formatter.Formatter"
    5958  import="net.sf.basedb.clients.web.formatter.FormatterFactory"
     
    303302        <tr>
    304303          <td class="prompt">Plugin</td>
    305           <td><%=Base.getLinkedName(ID, plugin == null ? null : new NameablePluginAdaptor(plugin),
     304          <td><%=Base.getLinkedName(ID, plugin,
    306305              !readPlugin, plugin != null && plugin.hasPermission(Permission.WRITE))%></td>
    307306        </tr>
Note: See TracChangeset for help on using the changeset viewer.