public String aplyTo(final String source)
    {
        // false = 0;
        // true  = 1;
        if(null == source)
        {
            return null;
        }
        final Vector<Boolean> bits = getBitsFromString(source);
        String res = "Found " + bits.size() + " bits / " + bits.size()/8 + " bytes in Data !\n";

        int maxDescriptionLength = 0;
        for(int i = 0; i < Variables.size(); i++)
        {
            final Variable v = Variables.get(i);
            final int curDescrLength = v.getDescriptionLength();
            if(curDescrLength > maxDescriptionLength)
            {
                maxDescriptionLength = curDescrLength;
            }
        }
        // match bits with format
        int posInBits = 0;
        for(int i = 0; i < Variables.size(); i++)
        {
            final Variable v = Variables.get(i);
            final int numBits = v.getNumberBits();
            if(posInBits + numBits > bits.size())
            {
                res = res + "End of Data reached !\n";
                break;
            }
            else
            {
                final boolean[] curData = new boolean[numBits];
                for(int j = 0; j < numBits; j++)
                {
                    curData[j] = bits.get(posInBits);
                    posInBits++;
                }
                res = res + v.describeValue(curData, maxDescriptionLength) + "\n";
            }
        }
        if(bits.size() > posInBits)
        {
            final int numAdditionalBits = bits.size() - posInBits;
            final StringBuilder sb = new StringBuilder();
            for(int i = 0; i < numAdditionalBits; i++)
            {
                final Boolean b = bits.get(posInBits + i);
                if(true == b)
                {
                    sb.append('1');
                }
                else
                {
                    sb.append('0');
                }
            }
            res = res + "Additional Data at end : " + sb.toString() + "\n";
        }
        return res;
    }