Clover icon

Coverage Report

  1. Project Clover database Thu Nov 7 2024 17:01:39 GMT
  2. Package jalview.bin.argparser

File SubVals.java

 

Coverage histogram

../../../img/srcFileCovDistChart0.png
0% of files have more coverage

Code metrics

26
58
13
1
203
151
31
0.53
4.46
13
2.38

Classes

Class Line # Actions
SubVals 36 58 31
0.00%
 

Contributing tests

No tests hitting this source file were found.

Source view

1    /*
2    * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$)
3    * Copyright (C) $$Year-Rel$$ The Jalview Authors
4    *
5    * This file is part of Jalview.
6    *
7    * Jalview is free software: you can redistribute it and/or
8    * modify it under the terms of the GNU General Public License
9    * as published by the Free Software Foundation, either version 3
10    * of the License, or (at your option) any later version.
11    *
12    * Jalview is distributed in the hope that it will be useful, but
13    * WITHOUT ANY WARRANTY; without even the implied warranty
14    * of MERCHANTABILITY or FITNESS FOR A PARTICULAR
15    * PURPOSE. See the GNU General Public License for more details.
16    *
17    * You should have received a copy of the GNU General Public License
18    * along with Jalview. If not, see <http://www.gnu.org/licenses/>.
19    * The Jalview Authors are detailed in the 'AUTHORS' file.
20    */
21    package jalview.bin.argparser;
22   
23    import java.util.ArrayList;
24    import java.util.HashMap;
25    import java.util.List;
26    import java.util.Map;
27   
28    import jalview.bin.Console;
29   
30    /**
31    * A helper class to parse a string of the possible forms "content"
32    * "[index]content", "[keyName=keyValue]content" and return the integer index,
33    * the strings keyName and keyValue, and the content after the square brackets
34    * (if present). Values not set `will be -1 or null.
35    */
 
36    public class SubVals
37    {
38    public static int NOTSET = -1;
39   
40    private int index = NOTSET;
41   
42    private Map<String, String> subValMap;
43   
44    private static char SEPARATOR = ',';
45   
46    private static char EQUALS = '=';
47   
48    private String content = null;
49   
 
50  0 toggle protected SubVals(SubVals sv, String c)
51    {
52  0 this(sv, c, true);
53    }
54   
 
55  0 toggle protected SubVals(SubVals sv, String c, boolean merge)
56    {
57  0 SubVals subvals;
58  0 if (merge)
59    {
60  0 SubVals vsv = new SubVals(c);
61  0 if (sv != null && sv.getSubValMap() != null)
62    {
63  0 for (String key : sv.getSubValMap().keySet())
64    {
65  0 vsv.put(key, sv.get(key));
66    }
67    }
68  0 if (sv != null && sv.getIndex() > 0)
69    {
70  0 vsv.index = sv.getIndex();
71    }
72  0 subvals = vsv;
73    }
74    else
75    {
76    // replace
77  0 subvals = sv;
78    }
79  0 if (subvals == null)
80    {
81  0 this.subValMap = new HashMap<>();
82    }
83    else
84    {
85  0 this.subValMap = subvals == null ? new HashMap<>()
86    : subvals.getSubValMap();
87  0 this.index = subvals.getIndex();
88    }
89  0 this.content = c;
90    }
91   
 
92  0 toggle protected SubVals(String item)
93    {
94  0 if (subValMap == null)
95  0 subValMap = new HashMap<>();
96  0 this.parseVals(item);
97    }
98   
 
99  0 toggle public void parseVals(String item)
100    {
101  0 if (item == null)
102  0 return;
103  0 if (item.indexOf('[') == 0 && item.indexOf(']') > 1)
104    {
105  0 int openBracket = 0;
106  0 int closeBracket = item.indexOf(']');
107  0 String subvalsString = item.substring(openBracket + 1, closeBracket);
108  0 this.content = item.substring(closeBracket + 1);
109  0 boolean setIndex = false;
110  0 for (String subvalString : subvalsString
111    .split(Character.toString(SEPARATOR)))
112    {
113  0 int equals = subvalString.indexOf(EQUALS);
114  0 if (equals > -1)
115    {
116  0 this.put(subvalString.substring(0, equals),
117    subvalString.substring(equals + 1));
118    }
119    else
120    {
121  0 try
122    {
123  0 this.index = Integer.parseInt(subvalString);
124  0 setIndex = true;
125    } catch (NumberFormatException e)
126    {
127    // store this non-numeric key as a "true" value
128  0 this.put(subvalString, "true");
129    }
130    }
131    }
132  0 if (!setIndex)
133  0 this.index = NOTSET;
134    else
135  0 Console.debug("SubVals from '" + subvalsString + "' has index "
136    + this.index + " set");
137    }
138    else
139    {
140  0 this.content = item;
141    }
142    }
143   
 
144  0 toggle protected void put(String key, String val)
145    {
146  0 subValMap.put(key, val);
147    }
148   
 
149  0 toggle public boolean notSet()
150    {
151    // notSet is true if content present but nonsensical
152  0 return index == NOTSET && (subValMap == null || subValMap.size() == 0);
153    }
154   
 
155  0 toggle public String getWithSubstitutions(ArgParser ap, String id, String key)
156    {
157  0 return ap.makeSubstitutions(subValMap.get(key), id);
158    }
159   
 
160  0 toggle public String get(String key)
161    {
162  0 return subValMap.get(key);
163    }
164   
 
165  0 toggle public boolean has(String key)
166    {
167  0 return subValMap.containsKey(key);
168    }
169   
 
170  0 toggle public int getIndex()
171    {
172  0 return index;
173    }
174   
 
175  0 toggle public String getContent()
176    {
177  0 return content;
178    }
179   
 
180  0 toggle protected Map<String, String> getSubValMap()
181    {
182  0 return subValMap;
183    }
184   
 
185  0 toggle public String toString()
186    {
187  0 if (subValMap == null && getIndex() == NOTSET)
188  0 return "";
189   
190  0 StringBuilder sb = new StringBuilder();
191  0 List<String> entries = new ArrayList<>();
192  0 subValMap.entrySet().stream().forEachOrdered(
193  0 m -> entries.add(m.getValue().equals("true") ? m.getKey()
194    : new StringBuilder().append(m.getKey()).append(EQUALS)
195    .append(m.getValue()).toString()));
196  0 if (getIndex() != NOTSET)
197  0 entries.add(Integer.toString(getIndex()));
198  0 sb.append('[');
199  0 sb.append(String.join(Character.toString(SEPARATOR), entries));
200  0 sb.append(']');
201  0 return sb.toString();
202    }
203    }