Changeset 4870
- Timestamp:
- Apr 1, 2009, 1:38:59 PM (13 years ago)
- Location:
- trunk
- Files:
-
- 6 added
- 12 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/clients/web/net/sf/basedb/clients/web/extensions/ExtensionsControl.java
r4618 r4870 32 32 33 33 import net.sf.basedb.clients.web.extensions.service.Services; 34 import net.sf.basedb.clients.web.extensions.toolbar.ToolbarUtil; 34 35 import net.sf.basedb.clients.web.servlet.ExtensionsServlet; 35 36 import net.sf.basedb.core.AccessControlled; … … 135 136 registry = new Registry(); 136 137 138 // Toolbar extensions are added programmatically 139 // must be done before scanning files otherwise it is not 140 // possible to register extension for the toolbars 141 ToolbarUtil.registerExtensionPoints(registry); 142 137 143 // Load settings 138 144 File settingsFile = new File(directory.getExtensionDirectory(), "settings.xml"); … … 143 149 lastScanResults = extensionsDir.installAndUpdateExtensions(registry, 144 150 servletContext, false, false); 151 145 152 initAutoInstaller(); 146 153 initialised = true; -
trunk/src/clients/web/net/sf/basedb/clients/web/taglib/extensions/Render.java
r4512 r4870 23 23 package net.sf.basedb.clients.web.taglib.extensions; 24 24 25 import java.io.IOException; 26 25 27 import javax.servlet.jsp.JspException; 26 28 import javax.servlet.jsp.tagext.TagSupport; … … 29 31 import net.sf.basedb.util.extensions.ExtensionsInvoker; 30 32 import net.sf.basedb.util.extensions.Renderer; 33 import net.sf.basedb.util.extensions.WrappingRenderer; 31 34 32 35 /** … … 41 44 item=... 42 45 renderer=... 46 wrapper=... 43 47 /> 44 48 </pre> … … 82 86 <td>no</td> 83 87 <td> 84 The renderer to use. If not null, the 85 {@link ExtensionsInvoker#render(net.sf.basedb.util.extensions.Renderer)} 86 method is used, otherwise {@link ExtensionsInvoker#renderDefault()}. 88 The {@link Renderer} to use. If not null, the 89 {@link ExtensionsInvoker#render(Renderer)} 90 method is used, otherwise {@link ExtensionsInvoker#renderDefault()} 91 or {@link ExtensionsInvoker#renderDefault(WrappingRenderer)}. 92 </td> 93 </tr> 94 <tr> 95 <td>wrapper</td> 96 <td>-</td> 97 <td>no</td> 98 <td> 99 The {@link WrappingRenderer} to use. If not null and no renderer 100 has been given, the {@link ExtensionsInvoker#renderDefault(WrappingRenderer)} 101 method is used. 87 102 </td> 88 103 </tr> … … 110 125 private Renderer renderer = null; 111 126 127 // An optional wrapper 128 private WrappingRenderer wrapper = null; 129 112 130 public void setExtensions(ExtensionsInvoker extensions) 113 131 { … … 130 148 } 131 149 150 public void setWrapper(WrappingRenderer wrapper) 151 { 152 this.wrapper = wrapper; 153 } 154 132 155 @SuppressWarnings("unchecked") 133 156 public int doStartTag() … … 135 158 { 136 159 if (item != null && context != null) context.setCurrentItem(item); 137 if (renderer == null)160 try 138 161 { 139 extensions.renderDefault(); 162 if (renderer == null) 163 { 164 extensions.renderDefault(wrapper); 165 } 166 else if (wrapper != null) 167 { 168 wrapper.setParent(renderer); 169 extensions.render(wrapper); 170 } 171 else 172 { 173 extensions.render(renderer); 174 } 175 pageContext.getOut().print("</td>"); 140 176 } 141 else177 catch (IOException ex) 142 178 { 143 extensions.render(renderer);179 throw new JspException(ex); 144 180 } 145 181 return SKIP_BODY; -
trunk/src/clients/web/net/sf/basedb/clients/web/taglib/table/Button.java
r4512 r4870 23 23 package net.sf.basedb.clients.web.taglib.table; 24 24 25 import net.sf.basedb.clients.web.extensions.toolbar.ButtonAction; 26 import net.sf.basedb.clients.web.extensions.toolbar.ToolbarButtonRenderer; 25 27 import net.sf.basedb.clients.web.taglib.Page; 26 28 29 import javax.servlet.http.HttpServletRequest; 27 30 import javax.servlet.jsp.JspException; 28 31 import javax.servlet.jsp.JspTagException; 32 import javax.servlet.jsp.JspWriter; 29 33 import javax.servlet.jsp.tagext.TagSupport; 30 34 … … 42 46 style=... 43 47 image=... 44 imagealign=left|right 48 imagealign=left|right (no longer supported) 45 49 onclick=... 46 50 title=... … … 109 113 <td> 110 114 If the image should be aligned to the left or right of the text. 115 No longer supported. 111 116 </td> 112 117 </tr> … … 162 167 public class Button 163 168 extends TagSupport 169 implements ButtonAction 164 170 { 165 171 … … 308 314 } 309 315 316 @Override 317 public String getIcon() 318 { 319 return ((HttpServletRequest)pageContext.getRequest()).getContextPath()+"/images/" + getImage(); 320 } 321 @Override 322 public String getOnClick() 323 { 324 return getOnclick(); 325 } 326 @Override 327 public boolean isEnabled() 328 { 329 return !isDisabled(); 330 } 331 310 332 /* 311 333 Display methods … … 319 341 table = toolbar.getTable(); 320 342 Page page = table != null ? table.getPage() : (Page)findAncestorWithClass(this, Page.class); 321 322 343 boolean displayImage = getImage() != null && toolbar.hasImages(); 323 344 boolean displayText = toolbar.hasText() || !displayImage; 324 325 StringBuilder sb = new StringBuilder(); 326 sb.append("<td"); 327 if (getId() != null) sb.append(" id=\"").append(getId()).append("\""); 328 if (getClazz() != null) 329 { 330 sb.append(" class=\"").append(getClazz()).append(isDisabled() ? "_disabled" : "").append("\""); 331 if (!isDisabled()) 332 { 333 sb.append(" onmouseover=\"this.className='").append(getClazz()).append("_hover';\""); 334 sb.append(" onmouseout=\"this.className='").append(getClazz()).append("';\""); 335 } 336 } 337 if (getOnclick() != null && !isDisabled()) sb.append(" onclick=\"").append(getOnclick()).append("\""); 338 if (getStyle() != null) sb.append(" style=\"").append(getStyle()).append("\""); 339 String tooltip = getTooltip(); 340 if (!displayText && tooltip == null) tooltip = getTitle(); 341 if (tooltip != null) sb.append(" title=\"").append(tooltip).append("\""); 342 sb.append(">"); 343 if (displayImage) 344 { 345 sb.append("<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\"><tr>"); 346 if ("left".equalsIgnoreCase(getImagealign())) 347 { 348 sb.append("<td><img src=\"").append(page.getRoot()).append("images/").append(getImage()).append("\""); 349 sb.append(" border=\"0\"></td>"); 350 } 351 sb.append("<td>"); 352 } 353 if (displayText && getTitle() != null) sb.append(" ").append(getTitle()).append(" "); 354 if (displayImage) 355 { 356 sb.append("</td>"); 357 if (!"left".equalsIgnoreCase(getImagealign())) 358 { 359 sb.append("<td><img src=\"").append(page.getRoot()).append("images/").append(getImage()).append("\""); 360 sb.append(" border=\"0\"></td>"); 361 } 362 sb.append("</tr></table>"); 363 } 364 sb.append("</td>\n"); 345 346 String html = new ToolbarButtonRenderer().getHTML(this, displayText, displayImage); 365 347 try 366 348 { 367 pageContext.getOut().print(sb.toString()); 349 JspWriter out = pageContext.getOut(); 350 out.print("<td>" + html + "</td>"); 368 351 } 369 352 catch (Exception ex) -
trunk/src/core/net/sf/basedb/util/extensions/ExtensionsInvoker.java
r4618 r4870 93 93 /** 94 94 Render all actions using the renderers created by the 95 default renderer factor yas specified by the registered95 default renderer factories as specified by the registered 96 96 extension points and/or extensions. 97 97 @see ExtensionPoint#getRendererFactory() … … 99 99 */ 100 100 public void renderDefault() 101 { 102 renderDefault(null); 103 } 104 105 /** 106 Render all actions by wrapping the default renderers by the 107 given wrapping renderer. 108 @param wrapper A wrapping renderer, or null to not wrap 109 the default renderers 110 @since 2.12 111 */ 112 public void renderDefault(WrappingRenderer<A> wrapper) 101 113 { 102 114 ActionIterator<A> it = iterate(); … … 114 126 throw new NullPointerException("No renderer for extension: " + it.getExtension()); 115 127 } 128 if (wrapper != null) 129 { 130 wrapper.setParent(renderer); 131 renderer = wrapper; 132 } 116 133 renderer.render(action); 117 134 } … … 124 141 } 125 142 } 143 126 144 127 145 /** -
trunk/src/core/net/sf/basedb/util/extensions/Registry.java
r4618 r4870 518 518 for (String id : extensionPointIds) 519 519 { 520 if (id == null) continue; 521 520 522 // Find a registered extension point for each ID 521 523 RegisteredExtensionPoint<Action> rep = -
trunk/www/WEB-INF/extensions.tld
r4510 r4870 85 85 <rtexprvalue>true</rtexprvalue> 86 86 </attribute> 87 <attribute> 88 <name>wrapper</name> 89 <required>false</required> 90 <rtexprvalue>true</rtexprvalue> 91 </attribute> 87 92 </tag> 88 89 90 93 </taglib> -
trunk/www/WEB-INF/extensions/core-extensions.xml
r4510 r4870 53 53 Extension point for the Tools column in the bioassayset tree 54 54 view of an experiment. Extensions should provide ActionButton 55 instances. The default renderer factory is ActionButtonRendererFactory,55 instances. The default renderer factory is CompactButtonRendererFactory, 56 56 but this can be overridden by the extensions. Note that the tree 57 57 contains items of more than one type: BioAssaySet, Transformation and … … 79 79 </description> 80 80 </extension-point> 81 <!-- 82 Toolbar extension points: 83 In addition to the extension points in this file, the web 84 client also defines a lot of toolbar extension points for the 85 list and single-item view pages. Those extension points are registered 86 programmatically. For more information see Extensions -> Installed extensions 87 in the web client interface. 88 --> 81 89 82 90 </extensions> -
trunk/www/admin/extensions/details.jsp
r4618 r4870 60 60 } 61 61 String text = factory.getClass().getName(); 62 String parameters = file .getFactoryParameters(factory);62 String parameters = file == null ? null : file.getFactoryParameters(factory); 63 63 if (parameters != null) 64 64 { … … 396 396 <td class="prompt">File</td> 397 397 <td> 398 <a href="javascript:showFile('<%=HTML.javaScriptEncode(epFile.getName())%>')" 399 ><%=epFile.getName()%></a> 400 (<%=epFile.isModified() ? "Modified" : "Up to date" %>; 401 <%=epFile.hasError() ? "Error" : "Ok" %>) 398 <% 399 if (epFile != null) 400 { 401 %> 402 <a href="javascript:showFile('<%=HTML.javaScriptEncode(epFile.getName())%>')" 403 ><%=epFile.getName()%></a> 404 (<%=epFile.isModified() ? "Modified" : "Up to date" %>; 405 <%=epFile.hasError() ? "Error" : "Ok" %>) 406 <% 407 } 408 %> 402 409 </td> 403 410 </tr> -
trunk/www/admin/extensions/tree.jsp
r4795 r4870 49 49 String icon = ec.isEnabled(ep) ? "ExtensionPoint" : "ExtensionPointDisabled"; 50 50 ExtensionsFile f = ec.getFileByExtensionId(id); 51 if ( f == null || f.hasError() || ec.getLastExtensionPointError(id) != null)51 if ((f != null && f.hasError()) || ec.getLastExtensionPointError(id) != null) 52 52 { 53 53 icon = "ExtensionPointError"; … … 65 65 String icon = ec.isEnabled(ext) ? "Extension" : "ExtensionDisabled"; 66 66 ExtensionsFile f = ec.getFileByExtensionId(id); 67 if ( f == null || f.hasError() || ec.getLastExtensionError(id) != null)67 if ((f != null && f.hasError()) || ec.getLastExtensionError(id) != null) 68 68 { 69 69 icon = "ExtensionError"; -
trunk/www/include/styles/table.css
r4711 r4870 59 59 } 60 60 61 .itemlist .toolbar .button _hover {61 .itemlist .toolbar .button:hover { 62 62 background: #F0F0F0; 63 border-top: 1px solid #FFFFFF;64 border-left: 1px solid #FFFFFF;65 border-bottom: 0px solid #999999;66 border-right: 1px solid #999999;67 padding: 3px;68 cursor: pointer;69 63 } 70 64 -
trunk/www/include/styles/toolbar.css
r4510 r4870 49 49 } 50 50 51 .toolbar .button:hover { 52 background: #F0F0F0; 53 } 54 51 55 .toolbar .label { 52 56 font-weight: bold; … … 56 60 border-right: 2px solid #999999; 57 61 padding: 3px; 58 }59 60 .toolbar .button_hover {61 background: #F0F0F0;62 border-top: 1px solid #FFFFFF;63 border-left: 1px solid #FFFFFF;64 border-bottom: 0px solid #999999;65 border-right: 1px solid #999999;66 padding: 3px;67 cursor: pointer;68 62 } 69 63 -
trunk/www/views/experiments/list_experiments.jsp
r4698 r4870 56 56 import="net.sf.basedb.util.formatter.Formatter" 57 57 import="net.sf.basedb.clients.web.formatter.FormatterFactory" 58 import="net.sf.basedb.clients.web.extensions.ExtensionsControl" 59 import="net.sf.basedb.clients.web.extensions.JspContext" 60 import="net.sf.basedb.clients.web.extensions.renderer.PrefixSuffixRenderer" 61 import="net.sf.basedb.clients.web.extensions.toolbar.ToolbarUtil" 62 import="net.sf.basedb.util.extensions.ExtensionsInvoker" 58 63 import="java.util.Iterator" 59 64 import="java.util.List" … … 63 68 <%@ taglib prefix="base" uri="/WEB-INF/base.tld" %> 64 69 <%@ taglib prefix="tbl" uri="/WEB-INF/table.tld" %> 70 <%@ taglib prefix="ext" uri="/WEB-INF/extensions.tld" %> 65 71 <%! 66 72 private static final Item itemType = Item.EXPERIMENT; … … 93 99 int numListed = 0; 94 100 Formatter<Date> dateFormatter = FormatterFactory.getDateFormatter(sc); 101 JspContext jspContext = ExtensionsControl.createContext(dc, pageContext); 102 ExtensionsInvoker invoker = ToolbarUtil.useExtensions(jspContext, guiContext); 95 103 %> 96 104 <base:page title="<%=title==null ? "Experiments" : title%>" type="<%=mode.getPageType()%>"> 97 105 <base:head scripts="menu.js,table.js" styles="menu.css,table.css"> 106 <ext:scripts context="<%=jspContext%>" /> 107 <ext:stylesheets context="<%=jspContext%>" /> 98 108 <script language="JavaScript"> 99 109 var submitPage = 'index.jsp'; … … 445 455 visible="<%=pluginCount.containsKey(Plugin.MainType.OTHER)%>" 446 456 /> 457 <ext:render extensions="<%=invoker%>" context="<%=jspContext%>" 458 wrapper="<%=new PrefixSuffixRenderer(jspContext, "<td>", "</td>") %>"/> 447 459 </tbl:toolbar> 448 460 <tbl:navigator
Note: See TracChangeset
for help on using the changeset viewer.