diff options
Diffstat (limited to 'das-java/contrib/ldap/das.ldap/src/main/java/org/apache/tuscany/das/ldap/oid')
3 files changed, 208 insertions, 0 deletions
diff --git a/das-java/contrib/ldap/das.ldap/src/main/java/org/apache/tuscany/das/ldap/oid/create/ComplexTypeOIDCreator.java b/das-java/contrib/ldap/das.ldap/src/main/java/org/apache/tuscany/das/ldap/oid/create/ComplexTypeOIDCreator.java new file mode 100644 index 0000000000..c0bb3e9137 --- /dev/null +++ b/das-java/contrib/ldap/das.ldap/src/main/java/org/apache/tuscany/das/ldap/oid/create/ComplexTypeOIDCreator.java @@ -0,0 +1,69 @@ +/* + * 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.tuscany.das.ldap.oid.create; + +import org.apache.tuscany.das.ldap.encryption.constants.EncryptionConstants; +import org.apache.tuscany.das.ldap.encryption.util.ChecksumUtils; +import org.apache.tuscany.das.ldap.util.ComplexTypeNamespaceQualifier; + +/** + * The Class UniqueOIDCreator. + * Creates unique OIDs for namespaced + * metadata such as the XSD DataType + * with (Class specific term) qualifiedNameURI + * http://www.w3.org/2001/XMLSchema/string + * + */ +public class ComplexTypeOIDCreator implements EncryptionConstants +{ + /** + * Creates a unique OID. + * + * @param instanceClassName the instance class name + * @param oidPrefix the OID Branch + * @param simpleTypeName the name + * @param namespaceURI the metadata namespace URI + * + * @return the string + * + * @throws Exception the exception + */ + public static String create( + String oidPrefix, + String namespaceURI, + String complexTypeName) + throws Exception + { + String qualifiedNameURI = + ComplexTypeNamespaceQualifier.qualify( + namespaceURI, + complexTypeName); + + String postfixOID = + ChecksumUtils.computeMD5Hash( + qualifiedNameURI); + + postfixOID = + OIDCreatorHelper. + calculateSegmentedOID(postfixOID); + + return oidPrefix + "." + postfixOID; + } +}
\ No newline at end of file diff --git a/das-java/contrib/ldap/das.ldap/src/main/java/org/apache/tuscany/das/ldap/oid/create/OIDCreatorHelper.java b/das-java/contrib/ldap/das.ldap/src/main/java/org/apache/tuscany/das/ldap/oid/create/OIDCreatorHelper.java new file mode 100644 index 0000000000..ad82a61514 --- /dev/null +++ b/das-java/contrib/ldap/das.ldap/src/main/java/org/apache/tuscany/das/ldap/oid/create/OIDCreatorHelper.java @@ -0,0 +1,73 @@ +/* + * 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.tuscany.das.ldap.oid.create; + +public class OIDCreatorHelper +{ + private static int MAX_OID_SEGMENT_LENGTH = 8; + /** + * Calculate segmented OID. + * + * @param oid the oid + * + * @return the string + * + * @throws Exception the exception + * + * Note that the OID must be divided + * into segments less than 9 characters + * long. This is an ApacheDS restriction + * on OID segment length. + */ + public static String calculateSegmentedOID(String oid) throws Exception + { + if (oid.length() < 10) + { + throw new Exception("The length of the oid must be greater than 9 in order to ensure uniqueness."); + } + int oidLength = oid.length(); + int numberOfPeriods = oidLength / MAX_OID_SEGMENT_LENGTH; + + int beginIndex = 0; + int endIndex = MAX_OID_SEGMENT_LENGTH; + + String segmentedOID = + oid.substring(beginIndex, endIndex ) + "."; + + for (int i = 2; i < numberOfPeriods; i++) + { + beginIndex = (i-1) * MAX_OID_SEGMENT_LENGTH + 1; + endIndex = i * MAX_OID_SEGMENT_LENGTH; + segmentedOID += oid.substring( beginIndex, endIndex ) + "."; + } + int finalSegmentLength = oid.length() - (endIndex + 2); + + if ( finalSegmentLength > MAX_OID_SEGMENT_LENGTH ) + { + segmentedOID += oid.substring( endIndex + 1,endIndex + 9 ) + "."; + segmentedOID += oid.substring( endIndex + 10, oid.length() ); + } + else + { + segmentedOID += oid.substring( endIndex + 1, oid.length() ); + } + return segmentedOID; + } +} diff --git a/das-java/contrib/ldap/das.ldap/src/main/java/org/apache/tuscany/das/ldap/oid/create/SimpleTypeOIDCreator.java b/das-java/contrib/ldap/das.ldap/src/main/java/org/apache/tuscany/das/ldap/oid/create/SimpleTypeOIDCreator.java new file mode 100644 index 0000000000..3c083fc42f --- /dev/null +++ b/das-java/contrib/ldap/das.ldap/src/main/java/org/apache/tuscany/das/ldap/oid/create/SimpleTypeOIDCreator.java @@ -0,0 +1,66 @@ +/* + * 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.tuscany.das.ldap.oid.create; + +import org.apache.tuscany.das.ldap.encryption.constants.EncryptionConstants; +import org.apache.tuscany.das.ldap.encryption.util.ChecksumUtils; +import org.apache.tuscany.das.ldap.util.SimpleTypeNamespaceQualifier; + +/** + * The Class SimpleTypeOIDCreator. + * Creates unique OIDs for namespaced + * metadata such as the XSD DataType + * with (Class specific term) qualifiedNameURI + * http://www.w3.org/2001/XMLSchema/string + * + */ +public class SimpleTypeOIDCreator implements EncryptionConstants +{ + /** + * Creates a unique OID. + * + * @param instanceClassName the instance class name + * @param oidPrefix the OID Branch + * @param complexTypeName the name + * @param namespaceURI the metadata namespace URI + * + * @return the string + * + * @throws Exception the exception + */ + public static String create( + String oidPrefix, + String namespaceURI, + String complexTypeName, + String simpleTypeName) + throws Exception + { + String qualifiedNameURI = + SimpleTypeNamespaceQualifier.qualify( + namespaceURI, + complexTypeName, + simpleTypeName); + + String postfixOID = ChecksumUtils.computeMD5Hash(qualifiedNameURI); + + postfixOID = OIDCreatorHelper.calculateSegmentedOID(postfixOID); + return oidPrefix + "." + postfixOID; + } +}
\ No newline at end of file |