Changeset 3944
- Timestamp:
- Nov 9, 2007, 4:31:00 PM (16 years ago)
- Location:
- trunk
- Files:
-
- 1 added
- 12 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/doc/src/docbook/admindoc/plugin_installation.xml
r3943 r3944 343 343 each row is an icon that displays summarized information about the plug-in when 344 344 the mouse pointer is held over it. Most of this information is from the plug-in's 345 <classname >About</classname>345 <classname docapi="net.sf.basedb.core.plugins">About</classname> 346 346 property but some, like 'Works with', 'Class' and 'Jar' is from the installation 347 347 file included in the JAR file. A plug-in can also be distributed with one or many -
trunk/doc/src/docbook/admindoc/user_administration.xml
r3675 r3944 352 352 <guilabel>Additional info</guilabel> 353 353 tab is only visible if there is one or more property defined for 354 <classname >UserData</classname>354 <classname docapi="net.sf.basedb.core.data">UserData</classname> 355 355 in the configuration file for extended properties. 356 356 </para> -
trunk/doc/src/docbook/appendix/base.config.xml
r3871 r3944 288 288 BASE ships with a simple plugin that checks if a user has a valid email 289 289 account on a POP3 server. It is not enabled by default. The class name 290 of that plugin is <classname >net.sf.basedb.core.authentication.POP3Authenticator</classname>.290 of that plugin is <classname docapi="net.sf.basedb.core.authentication">net.sf.basedb.core.authentication.POP3Authenticator</classname>. 291 291 If no class is specified internal authentication is used. 292 292 </para> … … 300 300 Initialisation parameters sent to the plug-in when calling the 301 301 <methodname>init()</methodname> method. The syntax and meaning of this 302 string depends on the plugin. For the <classname >POP3Authenticator</classname>302 string depends on the plugin. For the <classname docapi="net.sf.basedb.core.authentication">POP3Authenticator</classname> 303 303 this is simply the name or IP-address of the mail server. 304 304 </para> … … 477 477 BASE ships with a simple plug-in that just moves files to another directory, 478 478 but it is not enabled by default. The class name of that plug-in is 479 <classname >net.sf.basedb.core.InternalStorageController</classname>.479 <classname docapi="net.sf.basedb.core">net.sf.basedb.core.InternalStorageController</classname>. 480 480 If no class is specified the secondary storage feature is disabled. 481 481 </para> -
trunk/doc/src/docbook/appendix/incompatible.xml
r3872 r3944 55 55 for the <filename>raw-data-types.xml</filename> file. BASE will refuse 56 56 to start if it finds this attribute. Raw data types which doesn't use 57 the database for storing data should be registered as <classname >Platform</classname>:s57 the database for storing data should be registered as <classname docapi="net.sf.basedb.core">Platform</classname>:s 58 58 instead. 59 59 </para> … … 61 61 <para> 62 62 Applications or plug-ins that filters on the <property>rawDataType</property> 63 property for <classname >RawBioAssay</classname> or <classname>Experiment</classname>63 property for <classname docapi="net.sf.basedb.core">RawBioAssay</classname> or <classname docapi="net.sf.basedb.core">Experiment</classname> 64 64 may need to change. The ID given to raw data types that doesn't use the 65 65 database for storing data are prefixed with "<constant>platform.</constant>". -
trunk/doc/src/docbook/appendix/jobagent.properties.xml
r3679 r3944 211 211 <listitem> 212 212 <para> 213 <classname>net.sf.basedb.clients.jobagent.executors.ProcessJobExecutor</classname>: 213 <classname docapi="net.sf.basedb.clients.jobagent.executors"> 214 net.sf.basedb.clients.jobagent.executors.ProcessJobExecutor 215 </classname>: 214 216 Executes the job in an 215 217 external process. This is the recommended executor and is the default … … 223 225 <listitem> 224 226 <para> 225 <classname>net.sf.basedb.clients.jobagent.executors.ThreadJobExecutor</classname>: 227 <classname docapi="net.sf.basedb.clients.jobagent.executors"> 228 net.sf.basedb.clients.jobagent.executors.ThreadJobExecutor 229 </classname>: 226 230 Executes the job in a separate thread. This is only recommended 227 231 for plugins that are trusted and safe. A misbehaving plugin can affect the job agent … … 233 237 <listitem> 234 238 <para> 235 <classname >net.sf.basedb.clients.jobagent.executors.DummyJobExecutor</classname>:239 <classname docapi="net.sf.basedb.clients.jobagent.executors">net.sf.basedb.clients.jobagent.executors.DummyJobExecutor</classname>: 236 240 Does not execute the job. It only marks the job as being executed, 237 241 and after waiting some time, as finished successfully. … … 243 247 It is possible to create your own implementation of a job executor. 244 248 Create a class that implements the 245 <interfacename >net.sf.basedb.clients.jobagent.JobExecutor</interfacename>249 <interfacename docapi="net.sf.basedb.clients.jobagent">net.sf.basedb.clients.jobagent.JobExecutor</interfacename> 246 250 interface. 247 251 </para> … … 254 258 <para> 255 259 Optional. The path to the Java executable used by the 256 <classname>ProcessJobExecutor</classname>. If not specified the 260 <classname docapi="net.sf.basedb.clients.jobagent.executors"> 261 ProcessJobExecutor 262 </classname>. If not specified the 257 263 <envar>JAVA_HOME</envar> environment variable will be checked. 258 264 As a last resort <command>java</command> is used without path … … 271 277 <option>-Ms</option>), it will be added automatically by the 272 278 executor. This setting is used by the 273 <classname >ProcessJobExecutor</classname> only.279 <classname docapi="net.sf.basedb.clients.jobagent.executors">ProcessJobExecutor</classname> only. 274 280 </para> 275 281 </listitem> … … 280 286 <listitem> 281 287 <para> 282 Optional. Number of seconds the <classname >DummyJobExecutor</classname> should288 Optional. Number of seconds the <classname docapi="net.sf.basedb.clients.jobagent.executors">DummyJobExecutor</classname> should 283 289 wait before returning from the "job execution". The executor first sets 284 290 the progress to 50% then waits the specified number of seconds before -
trunk/doc/src/docbook/appendix/raw_data_types.xml
r3835 r3944 32 32 <para> 33 33 Raw data can be stored either as files attached to items or in 34 the database. The <classname>Platform</classname> item has information 34 the database. 35 The <classname docapi="net.sf.basedb.core">Platform</classname> item has information 35 36 about this. Configuration information for the database tables 36 37 and columns used to store raw data in the database is found in the -
trunk/doc/src/docbook/developerdoc/core_ref.xml
r3838 r3944 201 201 <listitem> 202 202 <para> 203 Add code to the <classname >net.sf.basedb.core.Update</classname> class203 Add code to the <classname docapi="net.sf.basedb.core">net.sf.basedb.core.Update</classname> class 204 204 to increase the schema version and modify data in existing installations. 205 205 </para> … … 567 567 The second-level cache is suitable for objects that are rarely modified but 568 568 are often needed. For example, we do not expect the user information represented 569 by the <classname >UserData</classname> object to change very often, but it is569 by the <classname docapi="net.sf.basedb.core.data">UserData</classname> object to change very often, but it is 570 570 displayed all the time as the owner of various items. 571 571 </para> … … 597 597 The first question is the most important. Good candidates are classes with few 598 598 objects that change rarely, but are read often. Also, objects which are linked 599 to by many other objects are good candidates. The <classname >UserData</classname>600 class is an example which matches all three requirements. The <classname >LabelData</classname>601 class is an example which fulfils the first two. The <classname >BioMaterialEventData</classname>599 to by many other objects are good candidates. The <classname docapi="net.sf.basedb.core.data">UserData</classname> 600 class is an example which matches all three requirements. The <classname docapi="net.sf.basedb.core.data">LabelData</classname> 601 class is an example which fulfils the first two. The <classname docapi="net.sf.basedb.core.data">BioMaterialEventData</classname> 602 602 class is on the other hand a bad cache candidate, since it is not linked to any 603 other object than a <classname >BioMaterialData</classname> object.603 other object than a <classname docapi="net.sf.basedb.core.data">BioMaterialData</classname> object. 604 604 </para> 605 605 … … 716 716 since they are many and we want to use as little memory as possible. Here it 717 717 is required that proxies are enabled for all items that are linked from any of 718 the batchable items, ie. <classname >RawBioAssay</classname>,719 <classname >ReporterType</classname>, <classname>ArrayDesignBlock</classname>, etc.718 the batchable items, ie. <classname docapi="net.sf.basedb.core">RawBioAssay</classname>, 719 <classname docapi="net.sf.basedb.core">ReporterType</classname>, <classname docapi="net.sf.basedb.core">ArrayDesignBlock</classname>, etc. 720 720 </para> 721 721 … … 872 872 where Hibernate can find the name of the table where items of this type are stored. 873 873 The table name should generally be the same as the class name, without the ending 874 <code>Data</code> and in a plural form. For example <classname >UserData</classname>874 <code>Data</code> and in a plural form. For example <classname docapi="net.sf.basedb.core.data">UserData</classname> 875 875 --> <code>Users</code>. The back-ticks (`) around the table name tells Hibernate 876 876 to enclose the name in whatever the actual database manager uses for such things … … 1274 1274 are package private. This is required because Hibernate will get confused if 1275 1275 we modify both ends. Thus, we are forced to always add/remove users to/from 1276 the set in the <classname >GroupData</classname> object. The methods in the1277 <classname >RoleData</classname> class are never used by us.1276 the set in the <classname docapi="net.sf.basedb.core.data">GroupData</classname> object. The methods in the 1277 <classname docapi="net.sf.basedb.core.data">RoleData</classname> class are never used by us. 1278 1278 Note that we do not have to check for null and create a new set since Hibernate 1279 1279 will handle null values as an empty set. … … 1584 1584 <para> 1585 1585 In this case, we use the <code>@hibernate.one-to-one</code> mapping 1586 in both classes. The <code>constrained="true"</code> tag in <classname >UserData</classname>1586 in both classes. The <code>constrained="true"</code> tag in <classname docapi="net.sf.basedb.core.data">UserData</classname> 1587 1587 tells Hibernate to always insert the password first, and then the user. The makes it 1588 1588 possible to use the (auto-generated) id for the password as the id -
trunk/doc/src/docbook/developerdoc/plugin_developer.xml
r3872 r3944 296 296 <listitem> 297 297 <simpara> 298 <interfacename >net.sf.basedb.core.plugin.Plugin</interfacename>298 <interfacename docapi="net.sf.basedb.core.plugin">net.sf.basedb.core.plugin.Plugin</interfacename> 299 299 </simpara> 300 300 </listitem> 301 301 <listitem> 302 302 <simpara> 303 <interfacename >net.sf.basedb.core.plugin.InteractivePlugin</interfacename>303 <interfacename docapi="net.sf.basedb.core.plugin">net.sf.basedb.core.plugin.InteractivePlugin</interfacename> 304 304 </simpara> 305 305 </listitem> 306 306 <listitem> 307 307 <simpara> 308 <classname >net.sf.basedb.core.plugin.AbstractPlugin</classname>308 <classname docapi="net.sf.basedb.core.plugin">net.sf.basedb.core.plugin.AbstractPlugin</classname> 309 309 </simpara> 310 310 </listitem> … … 312 312 313 313 A plug-in must always implement the 314 <interfacename >Plugin</interfacename> interface.315 The <interfacename >InteractivePlugin</interfacename>314 <interfacename docapi="net.sf.basedb.core.plugin">Plugin</interfacename> interface. 315 The <interfacename docapi="net.sf.basedb.core.plugin">InteractivePlugin</interfacename> 316 316 interface is optional, and is only needed if you want user interaction. 317 The <classname >AbstractPlugin</classname> is a useful base class317 The <classname docapi="net.sf.basedb.core.plugin">AbstractPlugin</classname> is a useful base class 318 318 that your plug-in can use as a superclass. It provides default implementations 319 319 for some of the interface methods and also has utility methods for … … 321 321 reason to use this class as a superclass is that it will shield your 322 322 plug-in from future changes to the Plug-in API. For example, if 323 we decide that a new method is needed in the <interfacename >Plugin</interfacename>323 we decide that a new method is needed in the <interfacename docapi="net.sf.basedb.core.plugin">Plugin</interfacename> 324 324 interface we will also try to add a default implementation in 325 the <classname >AbstractPlugin</classname> class.325 the <classname docapi="net.sf.basedb.core.plugin">AbstractPlugin</classname> class. 326 326 </para> 327 327 … … 353 353 Return information about the plug-in, i.e. the name, version, and a short 354 354 description about what the plug-in does. The 355 <classname >About</classname>355 <classname docapi="net.sf.basedb.core.plugin">About</classname> 356 356 object also has fields for naming the author and various other contact 357 357 information. The returned information is copied by the core at … … 393 393 <para> 394 394 Return information about the main type of plug-in. The 395 <classname >MainType</classname>395 <classname docapi="net.sf.basedb.core.plugin">Plugin.MainType</classname> 396 396 is an enumeration with five possible values: 397 397 <itemizedlist> … … 457 457 If this method returns true, the plug-in can have different 458 458 configurations, (i.e. 459 <classname >PluginConfiguration</classname>).459 <classname docapi="net.sf.basedb.core">PluginConfiguration</classname>). 460 460 Note that this method may return true even if the 461 <interfacename >InteractivePlugin</interfacename>461 <interfacename docapi="net.sf.basedb.core.plugin">InteractivePlugin</interfacename> 462 462 interface is not implemented. The 463 <classname >AbstractPlugin</classname>463 <classname docapi="net.sf.basedb.core.plugin">AbstractPlugin</classname> 464 464 returns true for this method, which is the old way before the 465 465 introduction of this method. … … 483 483 any data. 484 484 The 485 <classname >AbstractPlugin</classname>485 <classname docapi="net.sf.basedb.core.plugin">AbstractPlugin</classname> 486 486 returns false for this method, which is the old way before the 487 487 introduction of this method. … … 553 553 The parameters passed to this method has vital information that is 554 554 needed to execute the plug-in. The 555 <classname >SessionControl</classname>555 <classname docapi="net.sf.basedb.core">SessionControl</classname> 556 556 is a central core object holding information about the logged in 557 557 user and is used to create 558 <classname >DbControl</classname>558 <classname docapi="net.sf.basedb.core">DbControl</classname> 559 559 objects which allows a plug-in to connect to the database to read, add or 560 560 update information. The two 561 <classname >ParameterValues</classname>561 <classname docapi="net.sf.basedb.core.plugin">ParameterValues</classname> 562 562 objects contain information about the configuration and job 563 563 parameters to the plug-in. 564 564 The <varname>configuration</varname> object holds all parameters stored 565 together with a <classname >PluginConfiguration</classname>565 together with a <classname docapi="net.sf.basedb.core">PluginConfiguration</classname> 566 566 object in the database. If the plug-in is started without 567 567 a configuration this object is null. 568 568 The <varname>job</varname> object holds all parameters that are 569 stored together with a <classname >Job</classname> object in the569 stored together with a <classname docapi="net.sf.basedb.core">Job</classname> object in the 570 570 database. This object is null if the plug-in is started without a job. 571 571 </para> … … 580 580 <para> 581 581 The 582 <classname >AbstractPlugin</classname>582 <classname docapi="net.sf.basedb.core.plugin">AbstractPlugin</classname> 583 583 contains an implementation of this method that saves the passed objects 584 584 in protected instance variables. If you override this method … … 586 586 </para> 587 587 <example id="net.sf.basedb.core.plugin.Plugin.init"> 588 <title>The <classname >AbstractPlugin</classname> implementation of Plugin.init()</title>588 <title>The <classname docapi="net.sf.basedb.core.plugin">AbstractPlugin</classname> implementation of Plugin.init()</title> 589 589 <programlisting language="java"> 590 590 protected SessionControl sc = null; … … 722 722 <title> 723 723 The 724 <classname >AbstractPlugin</classname>724 <classname docapi="net.sf.basedb.core.plugin">AbstractPlugin</classname> 725 725 contains an implementation of the <methodname>done()</methodname> 726 726 method simply sets the … … 752 752 this interface. This is probably the case for most plug-ins. Among the core plug-ins 753 753 shipped with BASE the 754 <classname >SpotImageCreator</classname>754 <classname docapi="net.sf.basedb.plugins">SpotImageCreator</classname> 755 755 is one plug-in that does not interact with the user. Instead, the web client has 756 756 special JSP pages that handles all the interaction, creates a job for it and sets … … 761 761 <para> 762 762 The 763 <interfacename >InteractivePlugin</interfacename>763 <interfacename docapi="net.sf.basedb.core.plugin">InteractivePlugin</interfacename> 764 764 has three main tasks: 765 765 … … 802 802 Return information about where the plug-in should be plugged in. Each 803 803 place is identified by a 804 <classname >GuiContext</classname>804 <classname docapi="net.sf.basedb.core.plugin">GuiContext</classname> 805 805 object, which is an 806 <classname >Item</classname>806 <classname docapi="net.sf.basedb.core">Item</classname> 807 807 and a 808 <classname >Type</classname>.808 <classname docapi="net.sf.basedb.core">Type</classname>. 809 809 The item is one of the objects defined by the 810 <classname >net.sf.basedb.core.Item</classname>810 <classname docapi="net.sf.basedb.core">Item</classname> 811 811 enumeration and the type is either 812 812 <constant>Type.LIST</constant> … … 834 834 The returned information is copied by the core at installation time to 835 835 make it easy to ask for all plug-ins for a certain 836 <classname >GuiContext</classname>.836 <classname docapi="net.sf.basedb.core.plugin">GuiContext</classname>. 837 837 </para> 838 838 <para> … … 923 923 <para> 924 924 Here is a real example from the 925 <classname >RawDataFlatFileImporter</classname>925 <classname docapi="net.sf.basedb.plugins">RawDataFlatFileImporter</classname> 926 926 plug-in which imports raw data to a 927 <classname >RawBioAssay</classname>.927 <classname docapi="net.sf.basedb.core">RawBioAssay</classname>. 928 928 929 929 Thus, … … 1011 1011 <para> 1012 1012 Ask the plug-in for parameters that need to be entered by the user. The 1013 <classname >GuiContext</classname>1013 <classname docapi="net.sf.basedb.core.plugin">GuiContext</classname> 1014 1014 parameter is one of the contexts returned by the 1015 1015 <methodname>getGuiContexts</methodname> … … 1018 1018 plug-in may define its own commands. The two predefined commands are 1019 1019 defined in the 1020 <classname >net.sf.basedb.core.plugin.Request</classname>1020 <classname docapi="net.sf.basedb.core.plugin">net.sf.basedb.core.plugin.Request</classname> 1021 1021 class. 1022 1022 <variablelist> … … 1045 1045 </variablelist> 1046 1046 Given this information the plug-in must return a 1047 <classname >RequestInformation</classname>1047 <classname docapi="net.sf.basedb.core">RequestInformation</classname> 1048 1048 object. This is simply a title, a description, and a list of parameters. 1049 1049 Usually the title will end up as the input form title and the … … 1125 1125 <para> 1126 1126 As you can see it takes a lot of code to put together a 1127 <classname >RequestInformation</classname>1127 <classname docapi="net.sf.basedb.core">RequestInformation</classname> 1128 1128 object. For each parameter you need one 1129 <classname >PluginParameter</classname>1129 <classname docapi="net.sf.basedb.core">PluginParameter</classname> 1130 1130 object and one 1131 <classname >ParameterType</classname>1131 <classname docapi="net.sf.basedb.core">ParameterType</classname> 1132 1132 object. To make life a little easier, a 1133 <classname >ParameterType</classname>1133 <classname docapi="net.sf.basedb.core">ParameterType</classname> 1134 1134 can be reused for more than one 1135 <classname >PluginParameter</classname>.1135 <classname docapi="net.sf.basedb.core">PluginParameter</classname>. 1136 1136 </para> 1137 1137 … … 1144 1144 <para> 1145 1145 The 1146 <classname >ParameterType</classname>1146 <classname docapi="net.sf.basedb.core">ParameterType</classname> 1147 1147 is an abstract base class for several subclasses each implementing a 1148 1148 specific type of parameter. The list of subclasses may grow in the … … 1160 1160 <varlistentry> 1161 1161 <term> 1162 <classname >StringParameterType</classname>1162 <classname docapi="net.sf.basedb.core">StringParameterType</classname> 1163 1163 </term> 1164 1164 <listitem> … … 1171 1171 <varlistentry> 1172 1172 <term> 1173 <classname >FloatParameterType</classname>,1174 <classname >DoubleParameterType</classname>,1175 <classname >IntegerParameterType</classname>,1176 <classname >LongParameterType</classname>1173 <classname docapi="net.sf.basedb.core">FloatParameterType</classname>, 1174 <classname docapi="net.sf.basedb.core">DoubleParameterType</classname>, 1175 <classname docapi="net.sf.basedb.core">IntegerParameterType</classname>, 1176 <classname docapi="net.sf.basedb.core">LongParameterType</classname> 1177 1177 </term> 1178 1178 <listitem> … … 1185 1185 <varlistentry> 1186 1186 <term> 1187 <classname >BooleanParameterType</classname>1187 <classname docapi="net.sf.basedb.core">BooleanParameterType</classname> 1188 1188 </term> 1189 1189 <listitem> … … 1194 1194 <varlistentry> 1195 1195 <term> 1196 <classname >DateParameterType</classname>1196 <classname docapi="net.sf.basedb.core">DateParameterType</classname> 1197 1197 </term> 1198 1198 <listitem> … … 1203 1203 <varlistentry> 1204 1204 <term> 1205 <classname >FileParameterType</classname>1205 <classname docapi="net.sf.basedb.core">FileParameterType</classname> 1206 1206 </term> 1207 1207 <listitem> … … 1212 1212 <varlistentry> 1213 1213 <term> 1214 <classname >ItemParameterType</classname>1214 <classname docapi="net.sf.basedb.core">ItemParameterType</classname> 1215 1215 </term> 1216 1216 <listitem> … … 1218 1218 Asks for any other item. This parameter type requires 1219 1219 that a list of options is supplied, except when the item 1220 type asked for matches the current <classname >GuiContext</classname>, in which1220 type asked for matches the current <classname docapi="net.sf.basedb.core.plugin">GuiContext</classname>, in which 1221 1221 case the currently selected item is used as the 1222 1222 parameter value. … … 1226 1226 <varlistentry> 1227 1227 <term> 1228 <classname >PathParameterType</classname>1228 <classname docapi="net.sf.basedb.core">PathParameterType</classname> 1229 1229 </term> 1230 1230 <listitem> … … 1240 1240 <para> 1241 1241 You can also create a 1242 <classname >PluginParameter</classname>1242 <classname docapi="net.sf.basedb.core">PluginParameter</classname> 1243 1243 with a null name and 1244 <classname >ParameterType</classname>.1244 <classname docapi="net.sf.basedb.core">ParameterType</classname>. 1245 1245 In this case, the web client will not ask for input from the user, instead 1246 1246 it is used as a section header, allowing you to group parameters into … … 1297 1297 the input string is parsed and converted to a 1298 1298 <classname>Float</classname>. If you have extended the 1299 <classname >AbstractPlugin</classname>1299 <classname docapi="net.sf.basedb.core.plugin">AbstractPlugin</classname> 1300 1300 class it is very easy to validate the parameters with the 1301 1301 <methodname>AbstractPlugin.validateRequestParameters()</methodname> 1302 1302 method. This method takes the same list of 1303 <classname >PluginParameter</classname>:s1303 <classname docapi="net.sf.basedb.core">PluginParameter</classname>:s 1304 1304 as used in the 1305 <classname >RequestInformation</classname>1305 <classname docapi="net.sf.basedb.core">RequestInformation</classname> 1306 1306 object and uses that information for validation. It returns null or a 1307 1307 list of … … 1321 1321 <para> 1322 1322 The configure method works much like the <methodname>Plugin.run()</methodname> 1323 method. It must return the result in the <classname >Response</classname> object,1323 method. It must return the result in the <classname docapi="net.sf.basedb.core.plugin">Response</classname> object, 1324 1324 and should not throw any exceptions. 1325 1325 </para> … … 1380 1380 </para> 1381 1381 <para> 1382 The <classname >Response</classname> class also has a1382 The <classname docapi="net.sf.basedb.core.plugin">Response</classname> class also has a 1383 1383 <methodname>setContinue()</methodname> 1384 1384 method which tells the core that the plug-in needs more parameters, … … 1478 1478 <listitem> 1479 1479 <para> 1480 If the plug-in implements the <interfacename >InteractivePlugin</interfacename>1480 If the plug-in implements the <interfacename docapi="net.sf.basedb.core.plugin">InteractivePlugin</interfacename> 1481 1481 interface the <methodname>InteractivePlugin.getGuiContexts()</methodname> 1482 1482 method is called. This is the only time this method is called and the information it … … 1500 1500 1501 1501 <para> 1502 The plug-in must implement the <interfacename >InteractivePlugin</interfacename>1502 The plug-in must implement the <interfacename docapi="net.sf.basedb.core.plugin">InteractivePlugin</interfacename> 1503 1503 interface and the <methodname>Plugin.supportsConfigurations()</methodname> method 1504 1504 must return <constant>TRUE</constant>. The configuration is done with … … 1553 1553 The plug-in must validate the values and decide whether they should be 1554 1554 stored in the database or not. We recommend that you use the 1555 methods in the <classname >AbstractPlugin</classname> class for this.1555 methods in the <classname docapi="net.sf.basedb.core.plugin">AbstractPlugin</classname> class for this. 1556 1556 </para> 1557 1557 </listitem> … … 1601 1601 1602 1602 <para> 1603 If the plug-in is an <interfacename >InteractivePlugin</interfacename>1603 If the plug-in is an <interfacename docapi="net.sf.basedb.core.plugin">InteractivePlugin</interfacename> 1604 1604 it has specified in which contexts it can be used by the 1605 1605 information returned from <methodname>InteractivePlugin.getGuiContexts()</methodname> … … 1797 1797 <listitem> 1798 1798 <simpara> 1799 Generate the list of <classname >PluginParameter</classname>1799 Generate the list of <classname docapi="net.sf.basedb.core">PluginParameter</classname> 1800 1800 objects as usual. 1801 1801 </simpara> … … 1859 1859 <para> 1860 1860 In your JSP page you will probably need to access some information like the 1861 <classname >SessionControl</classname>, <classname>Job</classname>1862 and possible even the <classname >RequestInformation</classname>1861 <classname docapi="net.sf.basedb.core">SessionControl</classname>, <classname docapi="net.sf.basedb.core">Job</classname> 1862 and possible even the <classname docapi="net.sf.basedb.core">RequestInformation</classname> 1863 1863 object created by your plug-in. 1864 1864 </para> … … 1898 1898 Your plug-in can be part of that feature if it reads it data 1899 1899 from a single file. It must also implement the 1900 <interfacename >AutoDetectingImporter</interfacename>1900 <interfacename docapi="net.sf.basedb.core.plugin">AutoDetectingImporter</interfacename> 1901 1901 interface. 1902 1902 </para> … … 1926 1926 </para> 1927 1927 <para> 1928 The <classname >AbstractFlatFileImporter</classname> implements this method1928 The <classname docapi="net.sf.basedb.plugins">AbstractFlatFileImporter</classname> implements this method 1929 1929 by reading the headers from the input stream and checking if 1930 1930 it stopped at an unknown type of line or not: … … 2072 2072 <title>The AbstractFlatFileImporter superclass</title> 2073 2073 <para> 2074 The <classname >AbstractFlatFileImporter</classname> is a very useful abstract2074 The <classname docapi="net.sf.basedb.plugins">AbstractFlatFileImporter</classname> is a very useful abstract 2075 2075 class to use as a superclass for your own import plug-ins. It can be used 2076 2076 if your plug-in uses regular text files that can be parsed by an instance of the 2077 <classname >net.sf.basedb.util.FlatFileParser</classname> class. This class parses a file2077 <classname docapi="net.sf.basedb.util">net.sf.basedb.util.FlatFileParser</classname> class. This class parses a file 2078 2078 by checking each line against a few regular expressions. Depending on which regular 2079 2079 expression matches the line, it is classified as a header line, a section line, … … 2084 2084 2085 2085 <para> 2086 The <classname >AbstractFlatFileImporter</classname> defines2087 <classname >PluginParameter</classname> objects2086 The <classname docapi="net.sf.basedb.plugins">AbstractFlatFileImporter</classname> defines 2087 <classname docapi="net.sf.basedb.core">PluginParameter</classname> objects 2088 2088 for each of the regular expressions and other parameters used by the parser. It also 2089 2089 implements the <methodname>Plugin.run()</methodname> method and does most of 2090 2090 the ground work for instantiating a <methodname>FlatFileParser</methodname> and 2091 2091 parsing the file. What you have to do in your plugin is to put together the 2092 <classname >RequestInformation</classname> objects2092 <classname docapi="net.sf.basedb.core">RequestInformation</classname> objects 2093 2093 for configuring the plugin and creating a job and implement the 2094 2094 <methodname>InteractivePlugin.configure()</methodname> method for validating and … … 2111 2111 <listitem> 2112 2112 <para> 2113 Implement the <interfacename >InteractivePlugin</interfacename> methods.2113 Implement the <interfacename docapi="net.sf.basedb.core.plugin">InteractivePlugin</interfacename> methods. 2114 2114 See <xref linkend="plugin_developer.api.interfaces.interactive" /> for more information. Note that the 2115 <classname >AbstractFlatFileImporter</classname>2115 <classname docapi="net.sf.basedb.plugins">AbstractFlatFileImporter</classname> 2116 2116 has defined many parameters for regular expressions used by the parser 2117 already. You should just pick them and put in your <classname >RequestInformation</classname>2117 already. You should just pick them and put in your <classname docapi="net.sf.basedb.core">RequestInformation</classname> 2118 2118 object. 2119 2119 </para> … … 2199 2199 <listitem> 2200 2200 <para> 2201 The method is called to create a <classname >FlatFileParser</classname>2201 The method is called to create a <classname docapi="net.sf.basedb.util.parser">FlatFileParser</classname> 2202 2202 and set the regular expressions that should be used for parsing the file. 2203 2203 The default implementation assumes that your plug-in has used the built-in 2204 <classname >PluginParameter</classname> objects and has stored the values2204 <classname docapi="net.sf.basedb.core">PluginParameter</classname> objects and has stored the values 2205 2205 at the configuration level. You should override this method if you need to 2206 2206 initialise the parser in a different way. See for example the 2207 code for the <classname >PrintMapFlatFileImporter</classname> plug-in which2207 code for the <classname docapi="net.sf.basedb.plugins">PrintMapFlatFileImporter</classname> plug-in which 2208 2208 has a fixed format and doesn't use configurations. 2209 2209 </para> … … 2248 2248 if it wants to do more checks, for example, make that a certain header is present 2249 2249 with a certain value. It may also continue parsing the file. Here is a code example from 2250 the <classname >PrintMapFlatFileImporter</classname> which checks if a2250 the <classname docapi="net.sf.basedb.plugins">PrintMapFlatFileImporter</classname> which checks if a 2251 2251 <constant>FormatName</constant> header is present and contains either 2252 2252 <constant>TAM</constant> or <constant>MwBr</constant>. … … 2288 2288 begins. Override this method if you need to initialise some 2289 2289 internal state. This is, for example, a good place to open 2290 a <classname >DbControl</classname> object, read parameters from the2290 a <classname docapi="net.sf.basedb.core">DbControl</classname> object, read parameters from the 2291 2291 job and configuration and put them into more useful variables. The default 2292 2292 implementation does nothing, but we recommend that … … 2491 2491 Called when the parsing has ended, either because the end of 2492 2492 file was reached or because an error has occurred. The subclass 2493 should close any open resources, ie. the <classname >DbControl</classname>2493 should close any open resources, ie. the <classname docapi="net.sf.basedb.core">DbControl</classname> 2494 2494 object. The <varname>success</varname> parameter is <constant>true</constant> 2495 2495 if the parsing was successful, <constant>false</constant> otherwise. … … 2557 2557 2558 2558 <para> 2559 The <classname >AbstractFlatFileImporter</classname> has a lot of2559 The <classname docapi="net.sf.basedb.plugins">AbstractFlatFileImporter</classname> has a lot of 2560 2560 other methods that you may use and/or override in your own plug-in. 2561 2561 Check the javadoc for more information. … … 2584 2584 or to download it immediately to the client computer. With the basic 2585 2585 plug-in API the second option is not possible. The 2586 <interfacename >ImmediateDownloadExporter</interfacename> is an2587 interface that extends the <interfacename >Plugin</interfacename>2586 <interfacename docapi="net.sf.basedb.core.plugin">ImmediateDownloadExporter</interfacename> is an 2587 interface that extends the <interfacename docapi="net.sf.basedb.core.plugin">Plugin</interfacename> 2588 2588 interface to provide this functionality. If your export 2589 2589 plug-in wants to provide immediate download functionality it must 2590 implement the <interfacename >ImmediateDownloadExporter</interfacename>2590 implement the <interfacename docapi="net.sf.basedb.core.plugin">ImmediateDownloadExporter</interfacename> 2591 2591 interface. 2592 2592 </para> … … 2630 2630 2631 2631 <para> 2632 The <classname >ExportOutputStream</classname> is extends2632 The <classname docapi="net.sf.basedb.core.plugin">ExportOutputStream</classname> is extends 2633 2633 <classname>java.io.OutputStream</classname>. Use the regular 2634 2634 <methodname>write()</methodname> methods to write data to it. … … 2762 2762 This is an abstract superclass that will make it easier 2763 2763 to implement export plug-ins that support immediate 2764 download. It defines <classname >PluginParameter</classname>2764 download. It defines <classname docapi="net.sf.basedb.core">PluginParameter</classname> 2765 2765 objects for asking a user about a path where the exported 2766 2766 data should be saved and if existing files should be overwritten or not. … … 2770 2770 <methodname>ImmediateDownloadExporter.doExport()</methodname> method. 2771 2771 Here is what you need to do in your own plug-in code (code examples are 2772 taken from the <classname >HelpExporter</classname>):2772 taken from the <classname docapi="net.sf.basedb.plugins">HelpExporter</classname>): 2773 2773 </para> 2774 2774 … … 2776 2776 <listitem> 2777 2777 <para> 2778 Your plug-in should extend the <classname >AbstractExporterPlugin</classname>2778 Your plug-in should extend the <classname docapi="net.sf.basedb.core.plugin">AbstractExporterPlugin</classname> 2779 2779 class: 2780 2780 <programlisting language="java"> … … 2874 2874 <para> 2875 2875 Implement the <methodname>performExport()</methodname> method. 2876 This is defined as abstract in the <classname >AbstractExporterPlugin</classname>2876 This is defined as abstract in the <classname docapi="net.sf.basedb.core.plugin">AbstractExporterPlugin</classname> 2877 2877 class. It has the same parameters as the <methodname>ImmediateDownloadExporter.doExport()</methodname> 2878 2878 method and they have the same meaning. The only difference is that the … … 2892 2892 2893 2893 <para> 2894 The call sequence for plug-ins extending <classname >AbstractExporterPlugin</classname>2894 The call sequence for plug-ins extending <classname docapi="net.sf.basedb.core.plugin">AbstractExporterPlugin</classname> 2895 2895 is: 2896 2896 </para> … … 3153 3153 This class is an abstract base class. It is a useful 3154 3154 class for most analysis plug-ins to inherit from. Its main 3155 purpose is to define <classname >PluginParameter</classname>3155 purpose is to define <classname docapi="net.sf.basedb.core">PluginParameter</classname> 3156 3156 objects that are commonly used in analysis plug-ins. This includes: 3157 3157 </para> … … 3200 3200 3201 3201 <para> 3202 The <interfacename >net.sf.basedb.core.plugin.AnalysisFilterPlugin</interfacename>3202 The <interfacename docapi="net.sf.basedb.core.plugin">net.sf.basedb.core.plugin.AnalysisFilterPlugin</interfacename> 3203 3203 is a tagging interface, with no methods, that all analysis plug-ins that only filters 3204 3204 data should implement. The benefit is that they will be linked from the … … 3233 3233 This plug-in mechanism is not the same as the regular plug-in API. 3234 3234 That is, you do not have worry about user interaction or implementing the 3235 <interfacename >Plugin</interfacename> interface.3235 <interfacename docapi="net.sf.basedb.core.plugin">Plugin</interfacename> interface. 3236 3236 </para> 3237 3237 … … 3347 3347 To be able to use external authentication you must create a class 3348 3348 that implements the 3349 <interfacename >net.sf.based.core.authentication.Authenticator</interfacename>3349 <interfacename docapi="net.sf.basedb.core.authentication">net.sf.based.core.authentication.Authenticator</interfacename> 3350 3350 interface. Specify the name of the class in the <property>auth.driver</property> 3351 3351 setting in <filename>base.config</filename> and … … 3426 3426 <para> 3427 3427 Try to authenticate a login/password combination. The plug-in should return 3428 an <classname >AuthenticationInformation</classname> object if the3428 an <classname docapi="net.sf.basedb.core.authentication">AuthenticationInformation</classname> object if the 3429 3429 authentication is successful or throw an exception if not. 3430 3430 … … 3595 3595 All you have to do to create a secondary storage controller is to 3596 3596 create a class that implements the 3597 <interfacename >net.sf.basedb.core.SecondaryStorageController</interfacename>3597 <interfacename docapi="net.sf.basedb.core">net.sf.basedb.core.SecondaryStorageController</interfacename> 3598 3598 interface. In your <filename>base.config</filename> file you then specify the 3599 3599 class name in the <varname>secondary.storage.driver</varname> setting and its … … 3763 3763 Behind the scenes, this support is provided by plug-ins. The standard 3764 3764 BASE distribution comes with support for ZIP files 3765 (<classname >net.sf.basedb.plugins.ZipFileUnpacker</classname>)3766 and TAR files (<classname >net.sf.basedb.plugins.TarFileUnpacker</classname>).3765 (<classname docapi="net.sf.basedb.plugins">net.sf.basedb.plugins.ZipFileUnpacker</classname>) 3766 and TAR files (<classname docapi="net.sf.basedb.plugins">net.sf.basedb.plugins.TarFileUnpacker</classname>). 3767 3767 </para> 3768 3768 <para> 3769 3769 To add support for additional compressed formats you have to create a plug-in that 3770 implements the <interfacename >net.sf.basedb.util.zip.FileUnpacker</interfacename>3770 implements the <interfacename docapi="net.sf.basedb.util.zip">net.sf.basedb.util.zip.FileUnpacker</interfacename> 3771 3771 interface. The best way to do this is to extend the 3772 <classname >net.sf.basedb.util.zip.AbstractFileUnpacker</classname> which3773 implements all methods in the <interfacename >Plugin</interfacename>3774 and <interfacename >InteractivePlugin</interfacename>3772 <classname docapi="net.sf.basedb.util.zip">net.sf.basedb.util.zip.AbstractFileUnpacker</classname> which 3773 implements all methods in the <interfacename docapi="net.sf.basedb.core.plugin">Plugin</interfacename> 3774 and <interfacename docapi="net.sf.basedb.core.plugin">InteractivePlugin</interfacename> 3775 3775 interfaces except <methodname>Plugin.getAbout()</methodname>. This leaves 3776 3776 you with the actual unpacking of the files as the only thing to implement. … … 3784 3784 3785 3785 <variablelist> 3786 <title>Methods in the <interfacename >FileUnpacker</interfacename> interface</title>3786 <title>Methods in the <interfacename docapi="net.sf.basedb.util.zip">FileUnpacker</interfacename> interface</title> 3787 3787 <varlistentry> 3788 3788 <term> … … 3882 3882 Do not <methodname>close()</methodname> or 3883 3883 <methodname>commit()</methodname> the 3884 <classname >DbControl</classname> passed to this method.3884 <classname docapi="net.sf.basedb.core">DbControl</classname> passed to this method. 3885 3885 This is done automatically by the 3886 <classname >AbstractFileUnpacker</classname> or by the web client.3886 <classname docapi="net.sf.basedb.util.zip">AbstractFileUnpacker</classname> or by the web client. 3887 3887 </para> 3888 3888 </listitem> … … 3921 3921 the number of bytes read from the <varname>in</varname> 3922 3922 stream. If it is not possible by other means the stream can 3923 be wrapped by a <classname >net.sf.basedb.util.InputStreamTracker</classname>3923 be wrapped by a <classname docapi="net.sf.basedb.util">net.sf.basedb.util.InputStreamTracker</classname> 3924 3924 object which has a <methodname>getNumRead()</methodname> method. 3925 3925 </para> … … 3967 3967 BASE has support for compressing and downloading a set of selected files and/or 3968 3968 directories. This functionality is provided by a plug-in, the 3969 <classname >PackedFileExporter</classname>. This plug-in doesn't do the actual3969 <classname docapi="net.sf.basedb.plugins">PackedFileExporter</classname>. This plug-in doesn't do the actual 3970 3970 packing itself. This is delegated to classes implementing the 3971 <interfacename >net.sf.basedb.util.zip.FilePacker</interfacename> interface.3971 <interfacename docapi="net.sf.basedb.util.zip">net.sf.basedb.util.zip.FilePacker</interfacename> interface. 3972 3972 </para> 3973 3973 … … 3975 3975 BASE ships with a number of packing methods, including ZIP and TAR. To 3976 3976 add support for other methods you have to provide an implementation 3977 of the <interfacename >FilePacker</interfacename>3978 interface. Then, create a new configuration for the <classname >PackerFileExporter</classname>3977 of the <interfacename docapi="net.sf.basedb.util.zip">FilePacker</interfacename> 3978 interface. Then, create a new configuration for the <classname docapi="net.sf.basedb.plugins">PackedFileExporter</classname> 3979 3979 and enter the name of your class in the configuration wizard. 3980 3980 </para> 3981 3981 3982 3982 <para> 3983 The <interfacename >FilePacker</interfacename> interface is not a regular3983 The <interfacename docapi="net.sf.basedb.util.zip">FilePacker</interfacename> interface is not a regular 3984 3984 plug-in interface (ie. it is not a subinterface to 3985 <interfacename >Plugin</interfacename>). This means that you don't have to3985 <interfacename docapi="net.sf.basedb.core.plugin">Plugin</interfacename>). This means that you don't have to 3986 3986 mess with configuration or job parameters. Another difference is that your 3987 3987 class must be installed in Tomcat's classpath (ie. in one of the … … 3991 3991 3992 3992 <variablelist> 3993 <title>Methods in the <interfacename >FilePacker</interfacename> interface</title>3993 <title>Methods in the <interfacename docapi="net.sf.basedb.util.zip">FilePacker</interfacename> interface</title> 3994 3994 <varlistentry> 3995 3995 <term> … … 4135 4135 check that the supplied files are valid and also to extract 4136 4136 metadata from the files. For example, the 4137 <classname >net.sf.basedb.core.filehandler.CelFileHandler</classname>4137 <classname docapi="net.sf.basedb.core.filehandler">net.sf.basedb.core.filehandler.CelFileHandler</classname> 4138 4138 is used to check if a file is a valid Affymetrix CEL file and 4139 4139 to extract data headers and the number of spots from it. … … 4142 4142 <para> 4143 4143 The validator and metadata reader plug-ins are not regular plug-ins 4144 (ie. they don't have to implement the <interfacename >Plugin</interfacename>4144 (ie. they don't have to implement the <interfacename docapi="net.sf.basedb.core.plugin">Plugin</interfacename> 4145 4145 interface). This means that you don't have to mess with configuration or 4146 4146 job parameters. Another difference is that the plug-ins must be installed in … … 4152 4152 <para> 4153 4153 Validator plug-ins must implement the 4154 <interfacename >net.sf.basedb.core.filehandler.DataFileHandler</interfacename>4155 and <interfacename >net.sf.basedb.core.filehandler.DataValidator</interfacename>4154 <interfacename docapi="net.sf.basedb.core.filehandler">net.sf.basedb.core.filehandler.DataFileHandler</interfacename> 4155 and <interfacename docapi="net.sf.basedb.core.filehandler">net.sf.basedb.core.filehandler.DataValidator</interfacename> 4156 4156 interfaces. Metadata reader plug-ins should implement the 4157 <interfacename >net.sf.basedb.core.filehandler.DataFileHandler</interfacename>4158 and <interfacename >net.sf.basedb.core.filehandler.DataFileMetadataReader</interfacename>4157 <interfacename docapi="net.sf.basedb.core.filehandler">net.sf.basedb.core.filehandler.DataFileHandler</interfacename> 4158 and <interfacename docapi="net.sf.basedb.core.filehandler">net.sf.basedb.core.filehandler.DataFileMetadataReader</interfacename> 4159 4159 interfaces. 4160 4160 </para> … … 4172 4172 <title> 4173 4173 Always extend the 4174 <classname >net.sf.basedb.core.filehandler.AbstractDataFileHandler</classname>4174 <classname docapi="net.sf.basedb.core.filehandler">net.sf.basedb.core.filehandler.AbstractDataFileHandler</classname> 4175 4175 class 4176 4176 </title> … … 4179 4179 from the caller side, not from the implementor side. Thus, we may 4180 4180 add methods to those interfaces in the future without prior notice. 4181 The <classname >AbstractDataFileHandler</classname> will provide default4181 The <classname docapi="net.sf.basedb.core.filehandler">AbstractDataFileHandler</classname> will provide default 4182 4182 implementations of the new methods in order to not break existing 4183 4183 plug-ins. … … 4186 4186 4187 4187 <variablelist> 4188 <title>Methods in the <interfacename >DataFileHandler</interfacename> interface</title>4188 <title>Methods in the <interfacename docapi="net.sf.basedb.core.filehandler">DataFileHandler</interfacename> interface</title> 4189 4189 <varlistentry> 4190 4190 <term> … … 4231 4231 4232 4232 <variablelist> 4233 <title>Methods in the <interfacename >DataFileValidator</interfacename> interface</title>4233 <title>Methods in the <interfacename docapi="net.sf.basedb.core.filehandler">DataFileValidator</interfacename> interface</title> 4234 4234 <varlistentry> 4235 4235 <term> … … 4270 4270 4271 4271 <variablelist> 4272 <title>Methods in the <interfacename >DataFileMetadataReader</interfacename> interface</title>4272 <title>Methods in the <interfacename docapi="net.sf.basedb.core.filehandler">DataFileMetadataReader</interfacename> interface</title> 4273 4273 <varlistentry> 4274 4274 <term> … … 4287 4287 Extract metadata from the file. It is up to the plug-in 4288 4288 to decide what to extract and how to store it. 4289 The <classname >CelFileHandler</classname> will, for4289 The <classname docapi="net.sf.basedb.core.filehandler">CelFileHandler</classname> will, for 4290 4290 example, extract headers and the number of spots from the file 4291 4291 and store it with the raw bioassay. … … 4318 4318 4319 4319 <variablelist> 4320 <title>Methods in the <classname >AbstractDataFileHandler</classname> class</title>4320 <title>Methods in the <classname docapi="net.sf.basedb.core.filehandler">AbstractDataFileHandler</classname> class</title> 4321 4321 <varlistentry> 4322 4322 <term> … … 4351 4351 <methodname>setFile()</methodname>. The 4352 4352 <parameter>dataFileTypeId</parameter> is 4353 the external ID of the <classname >DataFileType</classname>.4353 the external ID of the <classname docapi="net.sf.basedb.core">DataFileType</classname>. 4354 4354 </para> 4355 4355 </listitem> -
trunk/doc/src/docbook/developerdoc/webservices.xml
r3921 r3944 56 56 includes and restrictions on a query before it is executed. For those who intend 57 57 to develop services it is recommended to have a look in javadoc for 58 <classname >net.sf.basedb.ws.info.QueryOptions</classname>58 <classname docapi="net.sf.basedb.ws.info">QueryOptions</classname> 59 59 . This is on the first hand for the service developers but it can be useful for 60 60 client developers to also know that this may be available in some services. … … 487 487 <para> 488 488 Create a new class that extends 489 <classname >net.sf.basedb.ws.server.AbstractRPCService</classname>489 <classname api="net.sf.basedb.ws.server">AbstractRPCService</classname> 490 490 </para> 491 491 </listitem> -
trunk/doc/src/docbook/userdoc/platforms.xml
r3940 r3944 377 377 The name of the Java class that can be used to 378 378 validate if a given file is a valid file of this type. 379 The class must implement the <interfacename >DataFileValidator</interfacename>379 The class must implement the <interfacename docapi="net.sf.basedb.core.filehandler">DataFileValidator</interfacename> 380 380 interface. <nohelp>See <xref linkend="plugin_developer.other.datafiles" />.</nohelp> 381 381 </para> … … 388 388 The name of the Java class that can be used to 389 389 extract metadata from a file of this type. 390 The class must implement the <interfacename >DataFileMetadataReader</interfacename>390 The class must implement the <interfacename docapi="net.sf.basedb.core.filehandler">DataFileMetadataReader</interfacename> 391 391 interface. <nohelp>See <xref linkend="plugin_developer.other.datafiles" />.</nohelp> 392 392 </para> -
trunk/lib/docbook/custom-styles/docbook/plain/xsl/customized.chunked.xsl
r3864 r3944 272 272 <xsl:value-of select="$admon.graphics.extension" /> 273 273 </xsl:template> 274 275 <xsl:template match="classname"> 276 <xsl:call-template name="inline.monoseq"/> 277 <xsl:if test = "@docapi != ''"> 278 <xsl:variable name="packagePath"> 279 <xsl:call-template name="replaceCharsInString"> 280 <xsl:with-param name="stringIn" select="string(@docapi)"/> 281 <xsl:with-param name="charsIn" select="'.'" /> 282 <xsl:with-param name="charsOut" select="'/'" /> 283 </xsl:call-template> 284 </xsl:variable> 285 286 <xsl:variable name="cleanClassName"> 287 <xsl:choose> 288 <xsl:when test="starts-with(., @docapi)"> 289 <xsl:value-of select="substring-after(., concat(@docapi, '.'))" /> 290 </xsl:when> 291 <xsl:otherwise> 292 <xsl:value-of select="." /> 293 </xsl:otherwise> 294 </xsl:choose> 295 </xsl:variable> 296 297 <xsl:variable name="pathtorootdir"> 298 <xsl:call-template name="pathtorootdir" /> 299 </xsl:variable> 300 301 <xsl:text> </xsl:text> 302 <a> 303 <xsl:attribute name="href"> 304 <xsl:value-of select="concat('../../../api/',$packagePath,'/',$cleanClassName,'.html')" /> 305 </xsl:attribute> 306 <xsl:attribute name="title">Javadoc for this class.</xsl:attribute> 307 <image> 308 <xsl:attribute name="src"> 309 <xsl:value-of select="concat($pathtorootdir, $admon.graphics.path, 'docapi.gif')"/> 310 </xsl:attribute> 311 <xsl:attribute name="border">0</xsl:attribute> 312 </image> 313 </a> 314 </xsl:if> 315 </xsl:template> 316 317 <xsl:template match="interfacename"> 318 <xsl:call-template name="inline.monoseq"/> 319 <xsl:if test = "@docapi != ''"> 320 <xsl:variable name="packagePath"> 321 <xsl:call-template name="replaceCharsInString"> 322 <xsl:with-param name="stringIn" select="string(@docapi)"/> 323 <xsl:with-param name="charsIn" select="'.'" /> 324 <xsl:with-param name="charsOut" select="'/'" /> 325 </xsl:call-template> 326 </xsl:variable> 327 328 <xsl:variable name="cleanClassName"> 329 <xsl:choose> 330 <xsl:when test="starts-with(., @docapi)"> 331 <xsl:value-of select="substring-after(., concat(@docapi, '.'))" /> 332 </xsl:when> 333 <xsl:otherwise> 334 <xsl:value-of select="." /> 335 </xsl:otherwise> 336 </xsl:choose> 337 </xsl:variable> 338 339 <xsl:variable name="pathtorootdir"> 340 <xsl:call-template name="pathtorootdir" /> 341 </xsl:variable> 342 <xsl:text> </xsl:text> 343 <a> 344 <xsl:attribute name="href"> 345 <xsl:value-of select="concat('../../../api/',$packagePath,'/', $cleanClassName,'.html')" /> 346 </xsl:attribute> 347 <xsl:attribute name="title">Javadoc for this interface.</xsl:attribute> 348 349 <image> 350 <xsl:attribute name="src"> 351 <xsl:value-of select="concat($pathtorootdir, $admon.graphics.path, 'docapi.gif')"/> 352 </xsl:attribute> 353 <xsl:attribute name="border">0</xsl:attribute> 354 </image> 355 </a> 356 </xsl:if> 357 </xsl:template> 358 359 <xsl:template name="replaceCharsInString"> 360 <xsl:param name="stringIn"/> 361 <xsl:param name="charsIn"/> 362 <xsl:param name="charsOut"/> 363 <xsl:choose> 364 <xsl:when test="contains($stringIn,$charsIn)"> 365 <xsl:value-of select="concat(substring-before($stringIn,$charsIn),$charsOut)"/> 366 <xsl:call-template name="replaceCharsInString"> 367 <xsl:with-param name="stringIn" select="substring-after($stringIn,$charsIn)"/> 368 <xsl:with-param name="charsIn" select="$charsIn"/> 369 <xsl:with-param name="charsOut" select="$charsOut"/> 370 </xsl:call-template> 371 </xsl:when> 372 <xsl:otherwise> 373 <xsl:value-of select="$stringIn"/> 374 </xsl:otherwise> 375 </xsl:choose> 376 </xsl:template> 274 377 275 378 </xsl:stylesheet> -
trunk/lib/docbook/preprocess/dweiss-docbook-extensions.dtd
r3756 r3944 28 28 <!ATTLIST include file CDATA #REQUIRED> 29 29 30 <!ATTLIST classname docapi CDATA #IMPLIED> 31 32 <!ATTLIST interfacename docapi CDATA #IMPLIED> 30 33 31 34 <!-- help text element -->
Note: See TracChangeset
for help on using the changeset viewer.