Coverage Report - org.kuali.student.core.statement.naturallanguage.AbstractContext
 
Classes in this File Line Coverage Branch Coverage Complexity
AbstractContext
100%
13/13
100%
2/2
1.333
 
 1  
 /**
 2  
  * Copyright 2010 The Kuali Foundation Licensed under the
 3  
  * Educational Community License, Version 2.0 (the "License"); you may
 4  
  * not use this file except in compliance with the License. You may
 5  
  * obtain a copy of the License at
 6  
  *
 7  
  * http://www.osedu.org/licenses/ECL-2.0
 8  
  *
 9  
  * Unless required by applicable law or agreed to in writing,
 10  
  * software distributed under the License is distributed on an "AS IS"
 11  
  * BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
 12  
  * or implied. See the License for the specific language governing
 13  
  * permissions and limitations under the License.
 14  
  */
 15  
 
 16  
 package org.kuali.student.core.statement.naturallanguage;
 17  
 
 18  
 import java.util.HashMap;
 19  
 import java.util.HashSet;
 20  
 import java.util.List;
 21  
 import java.util.Map;
 22  
 import java.util.Set;
 23  
 
 24  
 import org.kuali.student.common.exceptions.DoesNotExistException;
 25  
 import org.kuali.student.common.exceptions.OperationFailedException;
 26  
 import org.kuali.student.core.statement.dto.ReqCompFieldInfo;
 27  
 import org.kuali.student.core.statement.dto.ReqCompFieldTypeInfo;
 28  
 import org.kuali.student.core.statement.dto.ReqComponentInfo;
 29  
 import org.kuali.student.core.statement.dto.ReqComponentTypeInfo;
 30  
 import org.kuali.student.core.statement.service.StatementService;
 31  
 
 32  
 /**
 33  
  * This is an abstract class for creating a map (containing token/data) used
 34  
  * in template translations.
 35  
  * 
 36  
  * @param <T> Type of context to create
 37  
  */
 38  36
 public abstract class AbstractContext<T> implements Context<T> {
 39  
         /**
 40  
          * <p>These common shared tokens are needed since velocity doesn't 
 41  
          * allow periods in tokens.</p>
 42  
          * <p>E.g. kuali.reqComponent.field.type.totalCredits must either be convert to 
 43  
          * totalCredits or reqCompFieldType_totalCredits so a template would look 
 44  
          * like:</p>
 45  
          * <p>'Student must take $totalCredits of MATH 100'</p>
 46  
          * or
 47  
          * <p>'Student must take $reqCompFieldType_totalCredits of MATH 100'</p>
 48  
          */
 49  
         protected final static String FIELDS_TOKEN = "fields";
 50  
 
 51  
         /*private StatementService statementService;
 52  
 
 53  
         public void setStatementService(StatementService statementService) {
 54  
                 this.statementService = statementService;
 55  
         }
 56  
 
 57  
         private void validateReqComponentFields(ReqComponentInfo reqComponent) throws OperationFailedException {
 58  
                 try {
 59  
                         ReqComponentTypeInfo reqComponentType = statementService.getReqComponentType(reqComponent.getType());
 60  
                         Set<String> set = new HashSet<String>();
 61  
                         for(ReqCompFieldTypeInfo fieldType : reqComponentType.getReqCompFieldTypeInfos()) {
 62  
                                 set.add(fieldType.getFieldDescriptor().getId());
 63  
                         }
 64  
                         
 65  
                         for(ReqCompFieldInfo field : reqComponent.getReqCompFields()) {
 66  
                                 if(!set.contains(field.getType())) {
 67  
                                         throw new OperationFailedException("Invalid field type: " + field.getType());
 68  
                                 }
 69  
                         }
 70  
                 } catch (Exception e) {
 71  
                         throw new OperationFailedException(e.getMessage(), e);
 72  
                 }
 73  
         }*/
 74  
         
 75  
         /**
 76  
      * Gets requirement component fields as a map.
 77  
      * 
 78  
      * @param reqComponent Requirement component
 79  
      * @return Map of requirement component fields
 80  
      */
 81  
         protected Map<String, String> getReqComponentFieldMap(ReqComponentInfo reqComponent) throws OperationFailedException {
 82  
                 //validateReqComponentFields(reqComponent);
 83  255
                 List<ReqCompFieldInfo> fields = reqComponent.getReqCompFields();
 84  255
         Map<String, String> map = new HashMap<String, String>();
 85  255
         for (ReqCompFieldInfo field : fields) {
 86  745
             String type = field.getType();
 87  745
             String value = field.getValue();
 88  745
             map.put(type, value);
 89  745
         }
 90  255
         return map;
 91  
     }
 92  
 
 93  
     /**
 94  
      * Gets the value of the ReqCompFieldInfo key. 
 95  
      * See {@link ReqCompFieldInfo#getKey()} 
 96  
      * 
 97  
      * @param reqComponent Requirement component
 98  
      * @param key <code>ReqCompFieldInfo</code> key
 99  
      * @return Value of <code>ReqCompFieldInfo</code>
 100  
      */
 101  
         protected String getReqComponentFieldValue(ReqComponentInfo reqComponent, String key) throws OperationFailedException {
 102  129
         return getReqComponentFieldMap(reqComponent).get(key);
 103  
     }
 104  
 
 105  
     /**
 106  
      * Creates the context map (template data) for the requirement component.
 107  
      * Also, adds the field token map to the context map.
 108  
      *
 109  
      * @param reqComponent Requirement component
 110  
      * @throws DoesNotExistException If CLU, CluSet or relation does not exist
 111  
      */
 112  
     public Map<String, Object> createContextMap(ReqComponentInfo reqComponent) throws OperationFailedException {
 113  63
         Map<String, Object> contextMap = new HashMap<String, Object>();
 114  63
         contextMap.put(FIELDS_TOKEN, getReqComponentFieldMap(reqComponent));
 115  63
         return contextMap;
 116  
     }
 117  
 }