Coverage Report - de.smartics.properties.api.config.domain.DependenciesParser
 
Classes in this File Line Coverage Branch Coverage Complexity
DependenciesParser
0%
0/19
0%
0/14
4.5
 
 1  
 /*
 2  
  * Copyright 2012-2013 smartics, Kronseder & Reiner GmbH
 3  
  *
 4  
  * Licensed under the Apache License, Version 2.0 (the "License");
 5  
  * you may not use this file except in compliance with the License.
 6  
  * You may obtain a copy of the License at
 7  
  *
 8  
  *     http://www.apache.org/licenses/LICENSE-2.0
 9  
  *
 10  
  * Unless required by applicable law or agreed to in writing, software
 11  
  * distributed under the License is distributed on an "AS IS" BASIS,
 12  
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 13  
  * See the License for the specific language governing permissions and
 14  
  * limitations under the License.
 15  
  */
 16  
 package de.smartics.properties.api.config.domain;
 17  
 
 18  
 import java.util.ArrayList;
 19  
 import java.util.List;
 20  
 
 21  
 /**
 22  
  * Helper to parse dependencies from a property value. A dependency is a place
 23  
  * holder that is to be resolved to resolve the property's value.
 24  
  */
 25  0
 final class DependenciesParser
 26  
 {
 27  
   // ********************************* Fields *********************************
 28  
 
 29  
   // --- constants ------------------------------------------------------------
 30  
 
 31  
   // --- members --------------------------------------------------------------
 32  
 
 33  
   // ****************************** Initializer *******************************
 34  
 
 35  
   // ****************************** Constructors ******************************
 36  
 
 37  
   // ****************************** Inner Classes *****************************
 38  
 
 39  
   // ********************************* Methods ********************************
 40  
 
 41  
   // --- init -----------------------------------------------------------------
 42  
 
 43  
   // --- get&set --------------------------------------------------------------
 44  
 
 45  
   // --- business -------------------------------------------------------------
 46  
 
 47  
   /**
 48  
    * Returns the names of properties this property depends on. May be
 49  
    * <code>null</code>, if this property does not refer to other properties.
 50  
    *
 51  
    * @param value the value to parse, may be <code>null</code>.
 52  
    * @return the names of properties this property depends on.
 53  
    */
 54  
   List<String> getDependencies(final String value)
 55  
   {
 56  0
     final List<String> dependencies = new ArrayList<String>();
 57  
 
 58  0
     if (value != null)
 59  
     {
 60  0
       final int length = value.length();
 61  0
       for (int i = 0; i < length; i++)
 62  
       {
 63  0
         final char c = value.charAt(i);
 64  0
         if (c == '$' && i < length - 1 && value.charAt(i + 1) == '{')
 65  
         {
 66  
           // CHECKSTYLE:OFF
 67  0
           i = readKey(dependencies, value, i + 1);
 68  
           // CHECKSTYLE:ON
 69  
         }
 70  
       }
 71  
     }
 72  
 
 73  0
     return dependencies;
 74  
   }
 75  
 
 76  
   private static int readKey(final List<String> dependencies,
 77  
       final String value, final int index)
 78  
   {
 79  0
     final int length = value.length() - 1;
 80  0
     final StringBuilder keyBuffer = new StringBuilder(64);
 81  0
     int i = index;
 82  0
     char n = value.charAt(++i);
 83  0
     while (n != '}' && i < length)
 84  
     {
 85  0
       keyBuffer.append(n);
 86  0
       n = value.charAt(++i);
 87  
     }
 88  
 
 89  0
     final String key = keyBuffer.toString();
 90  0
     dependencies.add(key);
 91  
 
 92  0
     return i;
 93  
   }
 94  
 
 95  
   // --- object basics --------------------------------------------------------
 96  
 
 97  
 }