src/core/net/sf/basedb/util/extensions/ExtensionPointContext.java

Code
Comments
Other
Rev Date Author Line
4207 04 Apr 08 nicklas 1 /**
4207 04 Apr 08 nicklas 2   $Id$
4207 04 Apr 08 nicklas 3
4207 04 Apr 08 nicklas 4   Copyright (C) Authors contributing to this file.
4207 04 Apr 08 nicklas 5
4207 04 Apr 08 nicklas 6   This file is part of BASE - BioArray Software Environment.
4207 04 Apr 08 nicklas 7   Available at http://base.thep.lu.se/
4207 04 Apr 08 nicklas 8
4207 04 Apr 08 nicklas 9   BASE is free software; you can redistribute it and/or
4207 04 Apr 08 nicklas 10   modify it under the terms of the GNU General Public License
4479 05 Sep 08 jari 11   as published by the Free Software Foundation; either version 3
4207 04 Apr 08 nicklas 12   of the License, or (at your option) any later version.
4207 04 Apr 08 nicklas 13
4207 04 Apr 08 nicklas 14   BASE is distributed in the hope that it will be useful,
4207 04 Apr 08 nicklas 15   but WITHOUT ANY WARRANTY; without even the implied warranty of
4207 04 Apr 08 nicklas 16   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
4207 04 Apr 08 nicklas 17   GNU General Public License for more details.
4207 04 Apr 08 nicklas 18
4207 04 Apr 08 nicklas 19   You should have received a copy of the GNU General Public License
4515 11 Sep 08 jari 20   along with BASE. If not, see <http://www.gnu.org/licenses/>.
4207 04 Apr 08 nicklas 21 */
4207 04 Apr 08 nicklas 22 package net.sf.basedb.util.extensions;
4207 04 Apr 08 nicklas 23
4618 30 Oct 08 nicklas 24 import net.sf.basedb.util.extensions.Registry.RegisteredExtensionPoint;
4618 30 Oct 08 nicklas 25
4207 04 Apr 08 nicklas 26 /**
4207 04 Apr 08 nicklas 27   Invokation context for an extension point.
4207 04 Apr 08 nicklas 28
4207 04 Apr 08 nicklas 29   @author nicklas
4207 04 Apr 08 nicklas 30   @version 2.7
4207 04 Apr 08 nicklas 31   @base.modified $Date$
4207 04 Apr 08 nicklas 32 */
4207 04 Apr 08 nicklas 33 class ExtensionPointContext<A extends Action>
4207 04 Apr 08 nicklas 34   extends InvokationContext<A>
4207 04 Apr 08 nicklas 35 {
4207 04 Apr 08 nicklas 36   
4207 04 Apr 08 nicklas 37   private final ClientContext clientContext;
4207 04 Apr 08 nicklas 38   private final Registry registry;
5486 12 Nov 10 nicklas 39   private final RegisteredExtensionPoint<A> extensionPoint;
5486 12 Nov 10 nicklas 40   private final ErrorHandlerFactory<? super A> errorHandlerFactory;
4207 04 Apr 08 nicklas 41   private Renderer<? super A> renderer;
4207 04 Apr 08 nicklas 42   private boolean hasCreatedRenderer;
5486 12 Nov 10 nicklas 43   private ErrorHandler<? super A> errorHandler;
4207 04 Apr 08 nicklas 44   
4207 04 Apr 08 nicklas 45   ExtensionPointContext(Registry registry, ClientContext clientContext, 
5486 12 Nov 10 nicklas 46       RegisteredExtensionPoint<A> extensionPoint,
5486 12 Nov 10 nicklas 47       ErrorHandlerFactory<? super A> errorHandlerFactory)
4207 04 Apr 08 nicklas 48   {
4207 04 Apr 08 nicklas 49     this.registry = registry;
4207 04 Apr 08 nicklas 50     this.clientContext = clientContext;
4207 04 Apr 08 nicklas 51     this.extensionPoint = extensionPoint;
5486 12 Nov 10 nicklas 52     this.errorHandlerFactory = errorHandlerFactory;
4207 04 Apr 08 nicklas 53   }
4207 04 Apr 08 nicklas 54   
4207 04 Apr 08 nicklas 55   /*
4207 04 Apr 08 nicklas 56     From the InvokationContext class
4207 04 Apr 08 nicklas 57     --------------------------------
4207 04 Apr 08 nicklas 58   */
4207 04 Apr 08 nicklas 59   @Override
4207 04 Apr 08 nicklas 60   public ClientContext getClientContext()
4207 04 Apr 08 nicklas 61   {
4207 04 Apr 08 nicklas 62     return clientContext;
4207 04 Apr 08 nicklas 63   }
4207 04 Apr 08 nicklas 64   
4207 04 Apr 08 nicklas 65   @Override
4207 04 Apr 08 nicklas 66   public ExtensionPoint<? super A> getExtensionPoint()
4207 04 Apr 08 nicklas 67   {
4207 04 Apr 08 nicklas 68     return extensionPoint;
4207 04 Apr 08 nicklas 69   }
4207 04 Apr 08 nicklas 70   
4207 04 Apr 08 nicklas 71   /**
4207 04 Apr 08 nicklas 72     Always null, since this is an extension point context.
4207 04 Apr 08 nicklas 73   */
4207 04 Apr 08 nicklas 74   @Override
4207 04 Apr 08 nicklas 75   public Extension<A> getExtension()
4207 04 Apr 08 nicklas 76   {
4207 04 Apr 08 nicklas 77     return null;
4207 04 Apr 08 nicklas 78   }
4207 04 Apr 08 nicklas 79   
4208 07 Apr 08 nicklas 80   /**
6030 28 Mar 12 nicklas 81     The class loader is the class loader that loaded the action
6030 28 Mar 12 nicklas 82     class of the extension point.
6030 28 Mar 12 nicklas 83   */
6030 28 Mar 12 nicklas 84   @Override
6030 28 Mar 12 nicklas 85   public ClassLoader getClassLoader()
6030 28 Mar 12 nicklas 86   {
6030 28 Mar 12 nicklas 87     return extensionPoint.getClassLoader();
6030 28 Mar 12 nicklas 88   }
6030 28 Mar 12 nicklas 89   
6030 28 Mar 12 nicklas 90   /**
4208 07 Apr 08 nicklas 91     Always null, since this is an extension point context.
4208 07 Apr 08 nicklas 92   */
4207 04 Apr 08 nicklas 93   @Override
4207 04 Apr 08 nicklas 94   public Object getAttribute(String name)
4207 04 Apr 08 nicklas 95   {
4208 07 Apr 08 nicklas 96     return null;
4207 04 Apr 08 nicklas 97   }
4207 04 Apr 08 nicklas 98
4207 04 Apr 08 nicklas 99   @Override
4207 04 Apr 08 nicklas 100   protected Registry getRegistry()
4207 04 Apr 08 nicklas 101   {
4207 04 Apr 08 nicklas 102     return registry;
4207 04 Apr 08 nicklas 103   }
4207 04 Apr 08 nicklas 104   
4207 04 Apr 08 nicklas 105   @Override
4207 04 Apr 08 nicklas 106   protected void prepareRendererFactory()
4207 04 Apr 08 nicklas 107   {
4207 04 Apr 08 nicklas 108     RendererFactory<? super A> factory = extensionPoint.getRendererFactory();
4264 30 Apr 08 nicklas 109     if (factory != null) 
4264 30 Apr 08 nicklas 110     {
4264 30 Apr 08 nicklas 111       try
4264 30 Apr 08 nicklas 112       {
4264 30 Apr 08 nicklas 113         factory.prepareContext(this);
4264 30 Apr 08 nicklas 114       }
4322 30 May 08 nicklas 115       catch (Throwable t)
4264 30 Apr 08 nicklas 116       {
5486 12 Nov 10 nicklas 117         handleError("Error preparing renderer factory for extension point '" +
5486 12 Nov 10 nicklas 118             extensionPoint.getId() + "': " + factory, t);
4264 30 Apr 08 nicklas 119       }
4264 30 Apr 08 nicklas 120     }
4207 04 Apr 08 nicklas 121   }
4207 04 Apr 08 nicklas 122   
4207 04 Apr 08 nicklas 123   /**
4207 04 Apr 08 nicklas 124     If the extension point defines a renderer factory, creates
4207 04 Apr 08 nicklas 125     a new renderer unless one already exists.
4207 04 Apr 08 nicklas 126     @return A renderer, or null if no factory has been defined
4207 04 Apr 08 nicklas 127   */
4207 04 Apr 08 nicklas 128   @Override
4207 04 Apr 08 nicklas 129   protected Renderer<? super A> getRenderer()
4207 04 Apr 08 nicklas 130   {
4207 04 Apr 08 nicklas 131     if (!hasCreatedRenderer)
4207 04 Apr 08 nicklas 132     {
4207 04 Apr 08 nicklas 133       RendererFactory<? super A> factory = extensionPoint.getRendererFactory();
4207 04 Apr 08 nicklas 134       if (factory != null)
4207 04 Apr 08 nicklas 135       {
5486 12 Nov 10 nicklas 136         try
5486 12 Nov 10 nicklas 137         {
5486 12 Nov 10 nicklas 138           renderer = factory.getRenderer(this);
5486 12 Nov 10 nicklas 139         }
5486 12 Nov 10 nicklas 140         catch (Throwable t)
5486 12 Nov 10 nicklas 141         {
5486 12 Nov 10 nicklas 142           handleError("Error creating default renderer for for extension point '" +
5486 12 Nov 10 nicklas 143               extensionPoint.getId() + "': " + factory, t);
5486 12 Nov 10 nicklas 144         }
4207 04 Apr 08 nicklas 145       }
4207 04 Apr 08 nicklas 146       hasCreatedRenderer = true;
4207 04 Apr 08 nicklas 147     }
4207 04 Apr 08 nicklas 148     return renderer;
4207 04 Apr 08 nicklas 149   }
4207 04 Apr 08 nicklas 150
4207 04 Apr 08 nicklas 151   /**
4207 04 Apr 08 nicklas 152     Always null, since this is an extension point context.
4207 04 Apr 08 nicklas 153   */
4207 04 Apr 08 nicklas 154   @Override
4207 04 Apr 08 nicklas 155   protected A[] getActions()
4207 04 Apr 08 nicklas 156   {
4207 04 Apr 08 nicklas 157     return null;
4207 04 Apr 08 nicklas 158   }
4618 30 Oct 08 nicklas 159   
4618 30 Oct 08 nicklas 160   @Override
4618 30 Oct 08 nicklas 161   protected void setError(A action, Throwable t)
4618 30 Oct 08 nicklas 162   {
4618 30 Oct 08 nicklas 163     extensionPoint.setError(action, t);
4618 30 Oct 08 nicklas 164   }
4618 30 Oct 08 nicklas 165   
4618 30 Oct 08 nicklas 166   @Override
4618 30 Oct 08 nicklas 167   protected void clearError()
4618 30 Oct 08 nicklas 168   {
4618 30 Oct 08 nicklas 169     extensionPoint.clearError();
4618 30 Oct 08 nicklas 170   }
5486 12 Nov 10 nicklas 171   
5486 12 Nov 10 nicklas 172   @Override
5486 12 Nov 10 nicklas 173   protected ErrorHandler<? super A> getErrorHandler()
5486 12 Nov 10 nicklas 174   {
5486 12 Nov 10 nicklas 175     if (errorHandler == null)
5486 12 Nov 10 nicklas 176     {
5486 12 Nov 10 nicklas 177       errorHandler = errorHandlerFactory.getErrorHandler(this);
5486 12 Nov 10 nicklas 178     }
5486 12 Nov 10 nicklas 179     return errorHandler;
5486 12 Nov 10 nicklas 180   }
4207 04 Apr 08 nicklas 181   // ----------------------------------------
4207 04 Apr 08 nicklas 182
5486 12 Nov 10 nicklas 183   private void handleError(String message, Throwable t)
5486 12 Nov 10 nicklas 184   {
5486 12 Nov 10 nicklas 185     getErrorHandler().handleError(null, null, message, t);
5486 12 Nov 10 nicklas 186   }
5486 12 Nov 10 nicklas 187
4207 04 Apr 08 nicklas 188   
5486 12 Nov 10 nicklas 189 }