be.selckin.ws.util.java2php.NameManager Maven / Gradle / Ivy
/**
* 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 be.selckin.ws.util.java2php;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.cxf.endpoint.Endpoint;
import org.apache.cxf.service.model.SchemaInfo;
import org.apache.cxf.service.model.ServiceInfo;
import org.apache.ws.commons.schema.utils.NamespacePrefixList;
import javax.xml.namespace.QName;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
public class NameManager {
private Map nsPrefixMap;
/**
* @param service
* @param endpoint
* @return
*/
public static NameManager newNameManager(ServiceInfo service, Endpoint endpoint) {
NameManager nameManager = new NameManager();
nameManager.initialize(service);
return nameManager;
}
private void initialize(ServiceInfo service) {
nsPrefixMap = new HashMap();
Set poorPrefixURIs = new HashSet();
for (SchemaInfo schemaInfo : service.getSchemas()) {
NamespacePrefixList schemaPrefixList = schemaInfo.getSchema().getNamespaceContext();
for (String declaredPrefix : schemaPrefixList.getDeclaredPrefixes()) {
String uri = schemaPrefixList.getNamespaceURI(declaredPrefix);
if (!nsPrefixMap.containsKey(uri)) { // first schema to define a prefix wins.
if (declaredPrefix.startsWith("ns") || "tns".equals(declaredPrefix)) {
poorPrefixURIs.add(uri);
} else {
nsPrefixMap.put(uri, declaredPrefix.toUpperCase());
}
}
}
}
for (String uri : poorPrefixURIs) {
defineFallbackPrefix(uri);
}
}
/**
* Take a URI and turn it into a JavaScript name prefix.
*
* @param uri input URI.
* @return output prefix.
*/
protected String transformURI(String uri) {
return uri.replaceAll("http:/*", "").replace("uri:", "").replaceAll("[\\.:/-]", "\\\\");
}
private String defineFallbackPrefix(String uri) {
// this needs more work later. We are bound to annoy someone somehow in this area.
String jsPrefix = transformURI(uri);
nsPrefixMap.put(uri, jsPrefix);
return jsPrefix;
}
public String getPhpNamespace(QName qname) {
String nsprefix = nsPrefixMap.get(qname.getNamespaceURI());
// nsprefix will be null if there is no prefix.
if (nsprefix == null) {
nsprefix = defineFallbackPrefix(qname.getNamespaceURI());
}
String[] separated = nsprefix.split("\\\\");
CollectionUtils.reverseArray(separated);
return StringUtils.join(separated, "\\");
}
public String getPhpClassName(QName qname) {
return StringUtils.capitalize(qname.getLocalPart());
}
public String getPhpName(QName qname) {
return qname.getLocalPart();
}
public String getAbsolutePhpClassName(QName qName) {
return "\\" + getPhpNamespace(qName) + "\\" + getPhpClassName(qName);
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy