summaryrefslogtreecommitdiffstats
path: root/sca-java-1.x/tags/java-M1-20060522/java/sca/model/src/main/java/org/apache/tuscany/model/util/XMLNameUtil.java
diff options
context:
space:
mode:
Diffstat (limited to 'sca-java-1.x/tags/java-M1-20060522/java/sca/model/src/main/java/org/apache/tuscany/model/util/XMLNameUtil.java')
-rw-r--r--sca-java-1.x/tags/java-M1-20060522/java/sca/model/src/main/java/org/apache/tuscany/model/util/XMLNameUtil.java212
1 files changed, 212 insertions, 0 deletions
diff --git a/sca-java-1.x/tags/java-M1-20060522/java/sca/model/src/main/java/org/apache/tuscany/model/util/XMLNameUtil.java b/sca-java-1.x/tags/java-M1-20060522/java/sca/model/src/main/java/org/apache/tuscany/model/util/XMLNameUtil.java
new file mode 100644
index 0000000000..f493356594
--- /dev/null
+++ b/sca-java-1.x/tags/java-M1-20060522/java/sca/model/src/main/java/org/apache/tuscany/model/util/XMLNameUtil.java
@@ -0,0 +1,212 @@
+/**
+ *
+ * Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * 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.
+ */
+package org.apache.tuscany.model.util;
+
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+import org.apache.tuscany.sdo.helper.SDOXSDEcoreBuilder;
+
+
+
+/**
+ * A utility class that converts between XML names and Java names.
+ */
+public final class XMLNameUtil {
+
+ private static final List<String> DOMAINS = Arrays.asList(new String[]{"COM", "com", "ORG", "org"});
+
+ /**
+ * Constructor
+ */
+ private XMLNameUtil() {
+ super();
+ }
+
+ /**
+ * Return an EPackage name for the given namespace.
+ *
+ * @param namespace
+ * @return an EPackage name for the given namespace
+ */
+ public static String getPackageNameFromNamespace(String namespace) {
+ return org.apache.tuscany.sdo.helper.SDOXSDEcoreBuilder.getDefaultPackageName(namespace);
+ }
+
+ /**
+ * Trim the file extension from a path.
+ * @param path
+ * @return
+ */
+ private static String trimFileExtension(String path) {
+ int s=path.lastIndexOf('/');
+ int d=path.lastIndexOf('.');
+ if (d>s) {
+ return path.substring(0,d);
+ } else {
+ return path;
+ }
+ }
+
+ /**
+ * Returns a namespace prefix for the given package Name.
+ *
+ * @param packageName
+ * @return a namespace prefix for the given package Name
+ */
+ public static String getNSPrefixFromPackageName(String packageName) {
+ int index = packageName.lastIndexOf('.');
+ return index == -1 ? packageName : packageName.substring(index + 1);
+ }
+
+ /**
+ * Parse the given name.
+ *
+ * @param sourceName
+ * @param separator
+ * @return some stuff parsed from the name
+ */
+ private static List<String> parseName(String sourceName, char separator) {
+ List<String> result = new ArrayList<String>();
+ if (sourceName != null) {
+ StringBuilder currentWord = new StringBuilder(64);
+ boolean lastIsLower = false;
+ int index;
+ int length;
+ for (index = 0, length = sourceName.length(); index < length; ++index) {
+ char curChar = sourceName.charAt(index);
+ if (!Character.isJavaIdentifierPart(curChar)) {
+ curChar = separator;
+ }
+ if (Character.isUpperCase(curChar)
+ || (!lastIsLower && Character.isDigit(curChar))
+ || curChar == separator) {
+
+ if (lastIsLower && currentWord.length() > 1
+ || curChar == separator && currentWord.length() > 0) {
+ result.add(currentWord.toString());
+ currentWord = new StringBuilder(64);
+ }
+ lastIsLower = false;
+ } else {
+ if (!lastIsLower) {
+ int currentWordLength = currentWord.length();
+ if (currentWordLength > 1) {
+ char lastChar = currentWord.charAt(--currentWordLength);
+ currentWord.setLength(currentWordLength);
+ result.add(currentWord.toString());
+ currentWord = new StringBuilder(64);
+ currentWord.append(lastChar);
+ }
+ }
+ lastIsLower = true;
+ }
+
+ if (curChar != separator) {
+ currentWord.append(curChar);
+ }
+ }
+
+ result.add(currentWord.toString());
+ }
+ return result;
+ }
+
+ /**
+ * Returns a valid Java name from an XML Name.
+ *
+ * @param name
+ * @param isUpperCase
+ * @return a valid Java name from an XML Name
+ */
+ public static String getJavaNameFromXMLName(String name, boolean isUpperCase) {
+ List<String> parsedName = parseName(name, '_');
+ StringBuilder result = new StringBuilder(64 * parsedName.size());
+ for (String nameComponent: parsedName) {
+ if (nameComponent.length() > 0) {
+ if (result.length() > 0 || isUpperCase) {
+ result.append(Character.toUpperCase(nameComponent.charAt(0)));
+ result.append(nameComponent.substring(1));
+ } else {
+ result.append(nameComponent);
+ }
+ }
+ }
+
+ if (result.length() == 0) {
+ return "_";
+ }
+ if (Character.isJavaIdentifierStart(result.charAt(0))) {
+ return isUpperCase ? result.toString() : decapitalizeName(result.toString());
+ }
+ return "_" + result;
+ }
+
+ /**
+ * Returns a valid fully qualified class name from a QName.
+ * @param namespace
+ * @param name
+ * @return a valid fully qualified class name from a QName
+ */
+ public static String getFullyQualifiedClassNameFromQName(String namespace, String name) {
+ return XMLNameUtil.getPackageNameFromNamespace(namespace) + '.'
+ + XMLNameUtil.getJavaNameFromXMLName(name, true);
+ }
+
+ /**
+ * Decapitalize a name.
+ * @param name
+ * @return a decapitalized name
+ */
+ public static String decapitalizeName(String name) {
+ if (name.length() == 0) {
+ return name;
+ } else {
+ String lowerName = name.toLowerCase();
+ int i;
+ for (i = 0; i < name.length(); i++) {
+ if (name.charAt(i) == lowerName.charAt(i)) {
+ break;
+ }
+ }
+ if (i > 1 && i < name.length()) {
+ --i;
+ }
+ return name.substring(0, i).toLowerCase() + name.substring(i);
+ }
+ }
+
+ /**
+ * Capitalize a name.
+ * @param name
+ * @return a capitalized name
+ */
+ public static String capitalizeName(String name) {
+ int l = name.length();
+ if (l == 0) {
+ return name;
+ } else if (l == 1) {
+ return name.toUpperCase();
+ } else {
+ return name.substring(0, 1).toUpperCase() + name.substring(1);
+ }
+ }
+
+}