Add PropertyNamerULC.

Project: http://git-wip-us.apache.org/repos/asf/incubator-juneau/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-juneau/commit/de8a66b8
Tree: http://git-wip-us.apache.org/repos/asf/incubator-juneau/tree/de8a66b8
Diff: http://git-wip-us.apache.org/repos/asf/incubator-juneau/diff/de8a66b8

Branch: refs/heads/master
Commit: de8a66b87ecc49426df3a3da0aaaa036729dcb1a
Parents: 0f030b1
Author: JamesBognar <[email protected]>
Authored: Wed May 31 08:25:16 2017 -0400
Committer: JamesBognar <[email protected]>
Committed: Wed May 31 08:25:16 2017 -0400

----------------------------------------------------------------------
 .../org/apache/juneau/PropertyNamerULC.java     | 64 ++++++++++++++++++++
 1 file changed, 64 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/de8a66b8/juneau-core/src/main/java/org/apache/juneau/PropertyNamerULC.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/PropertyNamerULC.java 
b/juneau-core/src/main/java/org/apache/juneau/PropertyNamerULC.java
new file mode 100644
index 0000000..e5a4672
--- /dev/null
+++ b/juneau-core/src/main/java/org/apache/juneau/PropertyNamerULC.java
@@ -0,0 +1,64 @@
+// 
***************************************************************************************************************************
+// * Licensed to the Apache Software Foundation (ASF) under one or more 
contributor license agreements.  See the NOTICE file *
+// * distributed with this work for additional information regarding copyright 
ownership.  The ASF licenses this file        *
+// * to you 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.                                              *
+// 
***************************************************************************************************************************
+package org.apache.juneau;
+
+/**
+ * Converts property names to underscore-lower-case format.
+ *
+ * <h5 class='section'>Examples:</h5>
+ * <ul>
+ *     <li><js>"fooBar"</js> -&gt; <js>"foo_bar"</js>
+ *     <li><js>"fooBarURL"</js> -&gt; <js>"foo_bar_url"</js>
+ *     <li><js>"FooBarURL"</js> -&gt; <js>"foo_bar_url"</js>
+ * </ul>
+ */
+public final class PropertyNamerULC implements PropertyNamer {
+
+       @Override /* PropertyNamer */
+       public String getPropertyName(String name) {
+               if (name == null || name.isEmpty())
+                       return name;
+
+               int numUCs = 0;
+               boolean isPrevUC = Character.isUpperCase(name.charAt(0));
+               for (int i = 1; i < name.length(); i++) {
+                       char c = name.charAt(i);
+                       if (Character.isUpperCase(c)) {
+                               if (! isPrevUC)
+                                       numUCs++;
+                               isPrevUC = true;
+                       } else {
+                               isPrevUC = false;
+                       }
+               }
+
+               char[] name2 = new char[name.length() + numUCs];
+               isPrevUC = Character.isUpperCase(name.charAt(0));
+               name2[0] = Character.toLowerCase(name.charAt(0));
+               int ni = 0;
+               for (int i = 0; i < name.length(); i++) {
+                       char c = name.charAt(i);
+                       if (Character.isUpperCase(c)) {
+                               if (! isPrevUC)
+                                       name2[ni++] = '_';
+                               isPrevUC = true;
+                               name2[ni++] = Character.toLowerCase(c);
+                       } else {
+                               isPrevUC = false;
+                               name2[ni++] = c;
+                       }
+               }
+
+               return new String(name2);
+       }
+}

Reply via email to