Coverage Report - org.openpermis.policy.bean.basic.BasicAction
 
Classes in this File Line Coverage Branch Coverage Complexity
BasicAction
77%
28/36
75%
15/20
2
BasicAction$1
0%
0/2
N/A
2
 
 1  
 /*
 2  
  * Copyright (c) 2009, Swiss Federal Department of Defence Civil Protection and Sport
 3  
  *                     (http://www.vbs.admin.ch)
 4  
  * Copyright (c) 2009, Ergon Informatik AG (http://www.ergon.ch)
 5  
  * All rights reserved.
 6  
  *
 7  
  * Licensed under the Open Permis License which accompanies this distribution,
 8  
  * and is available at http://www.openpermis.org/BSDlicenceKent.txt
 9  
  */
 10  
 package org.openpermis.policy.bean.basic;
 11  
 
 12  
 
 13  
 import static org.openpermis.policy.bean.basic.BasicUtilities.equalObjects;
 14  
 import static org.openpermis.policy.bean.basic.BasicUtilities.getDetails;
 15  
 
 16  
 import java.util.ArrayList;
 17  
 import java.util.HashMap;
 18  
 import java.util.List;
 19  
 import java.util.Map;
 20  
 
 21  
 import org.openpermis.policy.ParameterList;
 22  
 import org.openpermis.policy.ParameterList.Parameter;
 23  
 import org.openpermis.policy.bean.ActionBean;
 24  
 import org.openpermis.policy.bean.SerialNumber;
 25  
 
 26  
 /**
 27  
  * Basic implementation of an {@link ActionBean}.
 28  
  * @since 0.1.0
 29  
  */
 30  
 public class BasicAction
 31  
         extends BasicPartBean
 32  
         implements ActionBean
 33  
 {
 34  
 
 35  
         //---- Static
 36  
 
 37  
         private static final long serialVersionUID = 7617903638242776145L;
 38  
 
 39  
         //---- State
 40  
 
 41  
         /**
 42  
          * A list of parameter names and types.
 43  
          */
 44  
         private ParameterList parameters;
 45  
 
 46  
         //---- Constructors
 47  
 
 48  
         /**
 49  
          * Creates an action without parameters.
 50  
          * @param serialNumber the serial number of this part.
 51  
          * @param name the name of the action.
 52  
          * @since 0.1.0
 53  
          */
 54  
         protected BasicAction (SerialNumber serialNumber, String name) {
 55  164
                 this(serialNumber, name, ParameterList.empty());
 56  164
         }
 57  
 
 58  
         /**
 59  
          * Creates an action with the specified parameters.
 60  
          * @param serialNumber the serial number of this part.
 61  
          * @param name the name of the action.
 62  
          * @param parameters the {@link ParameterList}.
 63  
          * @since 0.1.0
 64  
          */
 65  
         protected BasicAction (SerialNumber serialNumber, String name, ParameterList parameters) {
 66  634
                 super(ActionBean.class, serialNumber);
 67  634
                 setName(name);
 68  634
                 this.parameters = new ParameterList();
 69  634
                 setParameters(parameters);
 70  634
         }
 71  
 
 72  
         //---- Methods
 73  
 
 74  
         //---- Action
 75  
 
 76  
         /**
 77  
          * @since 0.1.0
 78  
          */
 79  
         public boolean matches (String actionName, List<?> arguments) {
 80  56
                 if (getName().equals(actionName) &&
 81  
                         getParameters().matchesArguments(arguments)
 82  
                 ) {
 83  15
                         return true;
 84  
                 }
 85  41
                 return false;
 86  
         }
 87  
 
 88  
         /**
 89  
          * @since 0.1.0
 90  
          */
 91  
         public Map<String, ?> mapArguments (List<?> arguments) {
 92  15
                 if (getParameters().matchesArguments(arguments)) {
 93  14
                         final Map<String, Object> result = new HashMap<String, Object>();
 94  16
                         for (int i = 0; i < this.parameters.getParameterCount(); i++) {
 95  2
                                 result.put(this.parameters.getName(i), arguments.get(i));
 96  
                         }
 97  14
                         return result;
 98  
                 }
 99  1
                 return null;
 100  
         }
 101  
 
 102  
         //---- ActionBean
 103  
 
 104  
         /**
 105  
          * @since 0.1.0
 106  
          */
 107  
         public ParameterList getParameters () {
 108  1753
                 return this.parameters.getCopy();
 109  
         }
 110  
 
 111  
         /**
 112  
          * @since 0.1.0
 113  
          */
 114  
         public void setParameters (ParameterList parameters) {
 115  634
                 final ParameterList oldParameters = getParameters();
 116  634
                 final ParameterList newParameters = new ParameterList();
 117  634
                 for (Parameter parameter : parameters) {
 118  126
                         if (parameter.getName() == null || parameter.getType() == null) {
 119  0
                                 throw new IllegalArgumentException("Parameter name or type is null");
 120  
                         }
 121  126
                         newParameters.add(parameter.getName(), parameter.getType());
 122  
                 }
 123  634
                 this.parameters = newParameters;
 124  634
                 firePropertyChange("parameters", oldParameters, getParameters());
 125  634
         }
 126  
 
 127  
         //---- BasicPart
 128  
 
 129  
         /**
 130  
          * @since 0.1.0
 131  
          */
 132  
         @Override
 133  
         protected boolean comparablePart (BasicPart part) {
 134  328
                 return part instanceof ActionBean;
 135  
         }
 136  
 
 137  
         /**
 138  
          * @since 0.1.0
 139  
          */
 140  
         @Override
 141  
         protected boolean equalPart (BasicPart part) {
 142  164
                 return
 143  
                         equalObjects(getName(), ((ActionBean) part).getName()) &&
 144  
                         equalObjects(getParameters(), ((ActionBean) part).getParameters());
 145  
         }
 146  
 
 147  
         /**
 148  
          * @since 0.1.0
 149  
          */
 150  
         @Override
 151  
         protected int partHashCode () {
 152  106
                 return getName().hashCode() * getParameters().hashCode();
 153  
         }
 154  
 
 155  
         /**
 156  
          * @since 0.1.0
 157  
          */
 158  
         @Override
 159  
         protected String getSimpleClassName () {
 160  0
                 return ActionBean.class.getSimpleName();
 161  
         }
 162  
 
 163  
         /**
 164  
          * @since 0.1.0
 165  
          */
 166  
         @Override
 167  
         protected void appendPartDetails (StringBuilder sb) {
 168  0
                 final List<Parameter> list = new ArrayList<Parameter>();
 169  0
                 for (Parameter parameter : getParameters()) {
 170  0
                         list.add(parameter);
 171  
                 }
 172  0
                 final String types = getDetails(
 173  
                         list,
 174  
                         new BasicUtilities.DetailsProvider<Parameter>() {
 175  
                                 @Override
 176  0
                                 protected String provideDetails (Parameter item) {
 177  0
                                         return item.getName() + ": " + item.getType().getSimpleName();
 178  
                                 }
 179  
                         }
 180  
                 );
 181  0
                 appendDetails(sb, "parameters", types);
 182  0
         }
 183  
 
 184  
 }