src/core/net/sf/basedb/util/overview/extensions/ReflectValidationRuleActionFactory.java

Code
Comments
Other
Rev Date Author Line
6047 18 Apr 12 nicklas 1 /**
6047 18 Apr 12 nicklas 2   $Id$
6047 18 Apr 12 nicklas 3
6047 18 Apr 12 nicklas 4   Copyright (C) 2012 Nicklas Nordborg
6047 18 Apr 12 nicklas 5
6047 18 Apr 12 nicklas 6   This file is part of BASE - BioArray Software Environment.
6047 18 Apr 12 nicklas 7   Available at http://base.thep.lu.se/
6047 18 Apr 12 nicklas 8
6047 18 Apr 12 nicklas 9   BASE is free software; you can redistribute it and/or
6047 18 Apr 12 nicklas 10   modify it under the terms of the GNU General Public License
6047 18 Apr 12 nicklas 11   as published by the Free Software Foundation; either version 3
6047 18 Apr 12 nicklas 12   of the License, or (at your option) any later version.
6047 18 Apr 12 nicklas 13
6047 18 Apr 12 nicklas 14   BASE is distributed in the hope that it will be useful,
6047 18 Apr 12 nicklas 15   but WITHOUT ANY WARRANTY; without even the implied warranty of
6047 18 Apr 12 nicklas 16   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
6047 18 Apr 12 nicklas 17   GNU General Public License for more details.
6047 18 Apr 12 nicklas 18
6047 18 Apr 12 nicklas 19   You should have received a copy of the GNU General Public License
6047 18 Apr 12 nicklas 20   along with BASE. If not, see <http://www.gnu.org/licenses/>.
6047 18 Apr 12 nicklas 21 */
6047 18 Apr 12 nicklas 22 package net.sf.basedb.util.overview.extensions;
6047 18 Apr 12 nicklas 23
6047 18 Apr 12 nicklas 24 import java.lang.reflect.Field;
6047 18 Apr 12 nicklas 25
6047 18 Apr 12 nicklas 26 import net.sf.basedb.util.ClassUtil;
6047 18 Apr 12 nicklas 27 import net.sf.basedb.util.extensions.ActionFactory;
6047 18 Apr 12 nicklas 28 import net.sf.basedb.util.extensions.InvokationContext;
6047 18 Apr 12 nicklas 29
6047 18 Apr 12 nicklas 30 /**
6047 18 Apr 12 nicklas 31   Factory implementation for validation rule actions that uses reflection
6047 18 Apr 12 nicklas 32   to access the value of a public static field and return that as the validation
6047 18 Apr 12 nicklas 33   rule. The public static field must be a {@link ValidationRuleAction} object.
6047 18 Apr 12 nicklas 34   <p>
6047 18 Apr 12 nicklas 35   This factory has one configuration parameter <code>field</code> which is
6047 18 Apr 12 nicklas 36   the fully qualified name for the field. Failure to access or use the class and/or 
6047 18 Apr 12 nicklas 37   field disabled the action and is reported to the log only.
6047 18 Apr 12 nicklas 38   
6047 18 Apr 12 nicklas 39   @author nicklas
6047 18 Apr 12 nicklas 40   @since 3.2
6047 18 Apr 12 nicklas 41 */
6047 18 Apr 12 nicklas 42 public class ReflectValidationRuleActionFactory 
6047 18 Apr 12 nicklas 43   implements ActionFactory<ValidationRuleAction>
6047 18 Apr 12 nicklas 44 {
6047 18 Apr 12 nicklas 45
6047 18 Apr 12 nicklas 46   private String fullFieldName;
6047 18 Apr 12 nicklas 47   private ValidationRuleAction rule;
6047 18 Apr 12 nicklas 48   
6047 18 Apr 12 nicklas 49   public ReflectValidationRuleActionFactory()
6047 18 Apr 12 nicklas 50   {}
6047 18 Apr 12 nicklas 51   
6047 18 Apr 12 nicklas 52   /*
6047 18 Apr 12 nicklas 53     From the ActionFactory interface
6047 18 Apr 12 nicklas 54     --------------------------------
6047 18 Apr 12 nicklas 55   */
6047 18 Apr 12 nicklas 56   @Override
6047 18 Apr 12 nicklas 57   public boolean prepareContext(InvokationContext<? super ValidationRuleAction> context) 
6047 18 Apr 12 nicklas 58   {
6047 18 Apr 12 nicklas 59     return getValidationRule(context) != null;
6047 18 Apr 12 nicklas 60   }
6047 18 Apr 12 nicklas 61
6047 18 Apr 12 nicklas 62   @Override
6047 18 Apr 12 nicklas 63   public ValidationRuleAction[] getActions(InvokationContext<? super ValidationRuleAction> context) 
6047 18 Apr 12 nicklas 64   {
6047 18 Apr 12 nicklas 65     return new ValidationRuleAction[] { rule };
6047 18 Apr 12 nicklas 66   }
6047 18 Apr 12 nicklas 67   // ----------------------------------
6047 18 Apr 12 nicklas 68   
6047 18 Apr 12 nicklas 69   
6047 18 Apr 12 nicklas 70   public void setField(String fullFieldName)
6047 18 Apr 12 nicklas 71   {
6047 18 Apr 12 nicklas 72     this.fullFieldName = fullFieldName;
6047 18 Apr 12 nicklas 73   }
6047 18 Apr 12 nicklas 74   
6875 20 Apr 15 nicklas 75   private ValidationRuleAction getValidationRule(InvokationContext<? super ValidationRuleAction> context)
6047 18 Apr 12 nicklas 76   {
6047 18 Apr 12 nicklas 77     if (rule == null && fullFieldName != null) 
6047 18 Apr 12 nicklas 78     {
6047 18 Apr 12 nicklas 79       int lastDot = fullFieldName.lastIndexOf('.');
6047 18 Apr 12 nicklas 80       String clazzName = fullFieldName.substring(0, lastDot);
6047 18 Apr 12 nicklas 81       String fieldName = fullFieldName.substring(lastDot+1);
6047 18 Apr 12 nicklas 82       
6047 18 Apr 12 nicklas 83       try
6047 18 Apr 12 nicklas 84       {
7401 28 Aug 17 nicklas 85         Class<?> clazz = ClassUtil.checkAndLoadClass(context.getClassLoader(), clazzName, false, null);
6047 18 Apr 12 nicklas 86         Field ruleField = clazz.getField(fieldName);
6047 18 Apr 12 nicklas 87         rule = (ValidationRuleAction)ruleField.get(null);
6047 18 Apr 12 nicklas 88       }
6047 18 Apr 12 nicklas 89       catch (Exception ex)
6047 18 Apr 12 nicklas 90       {
6047 18 Apr 12 nicklas 91         ex.printStackTrace();
6047 18 Apr 12 nicklas 92         fullFieldName = null;
6047 18 Apr 12 nicklas 93       }
6047 18 Apr 12 nicklas 94     }
6047 18 Apr 12 nicklas 95     return rule;
6047 18 Apr 12 nicklas 96   }
6047 18 Apr 12 nicklas 97 }