AT&T 2.0.19 Code drop, stage 2
[aaf/authz.git] / cadi / core / src / main / java / org / onap / aaf / cadi / util / Vars.java
diff --git a/cadi/core/src/main/java/org/onap/aaf/cadi/util/Vars.java b/cadi/core/src/main/java/org/onap/aaf/cadi/util/Vars.java
new file mode 100644 (file)
index 0000000..55470f9
--- /dev/null
@@ -0,0 +1,120 @@
+/**
+ * ============LICENSE_START====================================================
+ * org.onap.aaf
+ * ===========================================================================
+ * Copyright (c) 2018 AT&T Intellectual Property. All rights reserved.
+ * ===========================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END====================================================
+ *
+ */
+
+package org.onap.aaf.cadi.util;
+
+import java.util.List;
+
+public class Vars {
+       /**
+        * Simplified Conversion based on typical use of getting AT&T style RESTful Error Messages
+        * @param text
+        * @param vars
+        * @return
+        */
+       public static String convert(final String text, final List<String> vars) {
+               String[] array = new String[vars.size()];
+               StringBuilder sb = new StringBuilder();
+               convert(sb,text,vars.toArray(array));
+               return sb.toString();
+       }
+       /**
+        * Convert a format string with "%s" into AT&T RESTful Error %1 %2 (number) format
+        * If "holder" is passed in, it is built with full Message extracted (typically for Logging)
+        * @param holder
+        * @param text
+        * @param vars
+        * @return
+        */
+       public static String convert(final StringBuilder holder, final String text, final String ... vars) {
+               StringBuilder sb = null;
+               int idx,index=0,prev = 0;
+               
+               if(text.contains("%s")) {
+                       sb = new StringBuilder();
+               }
+               
+               StringBuilder[] sbs = new StringBuilder[] {sb,holder};
+               boolean replace, clearIndex = false;
+               int c;
+               while((idx=text.indexOf('%',prev))>=0) {
+                       replace = false;
+                       if(clearIndex) {
+                               index=0;
+                       }
+                       if(sb!=null) {
+                               sb.append(text,prev,idx);
+                       }
+                       if(holder!=null) {
+                               holder.append(text,prev,idx);
+                       }
+                       
+                       boolean go = true;
+                       while(go) {
+                               if(text.length()>++idx) {
+                                       switch(c=text.charAt(idx)) {
+                                               case '0': case '1': case '2': case '3': case '4': 
+                                               case '5': case '6': case '7': case '8': case '9':
+                                                       index *=10;
+                                                       index +=(c-'0');
+                                                       clearIndex=replace=true;
+                                                       continue;
+                                               case 's':
+                                                       ++index;
+                                                       replace = true;
+                                                       continue;
+                                               default:
+                                                       break;
+                                       }
+                               }
+                               prev = idx;
+                               go=false;
+                               if(replace) {
+                                       if(sb!=null) {
+                                               sb.append('%');
+                                               sb.append(index);
+                                       }
+                                       if(index<=vars.length) {
+                                               if(holder!=null) {
+                                                       holder.append(vars[index-1]);
+                                               }
+                                       }
+                               } else {
+                                       for(StringBuilder s : sbs) {
+                                               if(s!=null) {
+                                                       s.append("%");
+                                               }
+                                       }
+                               }
+                       }
+               }
+               
+               if(sb!=null) {
+                       sb.append(text,prev,text.length());
+               }
+               if(holder!=null) {
+                       holder.append(text,prev,text.length());
+               }
+
+               return sb==null?text:sb.toString();
+       }
+
+}