You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@juddi.apache.org by al...@apache.org on 2014/12/09 04:13:24 UTC

[03/28] juddi git commit: JUDDI-241 working change journal NOJIRA removing a number of unnecessary TODO statements

http://git-wip-us.apache.org/repos/asf/juddi/blob/8b95902b/juddi-core/src/main/java/org/apache/juddi/mapping/MappingApiToModel.java
----------------------------------------------------------------------
diff --git a/juddi-core/src/main/java/org/apache/juddi/mapping/MappingApiToModel.java b/juddi-core/src/main/java/org/apache/juddi/mapping/MappingApiToModel.java
index 2148827..a271d7e 100644
--- a/juddi-core/src/main/java/org/apache/juddi/mapping/MappingApiToModel.java
+++ b/juddi-core/src/main/java/org/apache/juddi/mapping/MappingApiToModel.java
@@ -16,36 +16,55 @@
  */
 package org.apache.juddi.mapping;
 
+import java.io.StringWriter;
+import java.io.UnsupportedEncodingException;
+import java.text.SimpleDateFormat;
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.GregorianCalendar;
+import java.util.HashSet;
 import java.util.List;
+import javax.persistence.EntityManager;
 import javax.xml.bind.JAXB;
 import javax.xml.bind.JAXBElement;
 import javax.xml.transform.dom.DOMResult;
-
-
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.juddi.jaxb.JAXBMarshaller;
+import org.apache.juddi.model.Address;
 import org.apache.juddi.model.BindingTemplate;
 import org.apache.juddi.model.BusinessService;
 import org.apache.juddi.model.CanonicalizationMethod;
+import org.apache.juddi.model.CommunicationGraph;
+import org.apache.juddi.model.Contact;
+import org.apache.juddi.model.ControlMessage;
+import org.apache.juddi.model.Edge;
+import org.apache.juddi.model.KeyDataValue;
 import org.apache.juddi.model.KeyInfo;
+import org.apache.juddi.model.Node;
+import org.apache.juddi.model.Operator;
+import org.apache.juddi.model.OperatorStatusType;
 import org.apache.juddi.model.Publisher;
 import org.apache.juddi.model.Reference;
 import org.apache.juddi.model.Signature;
 import org.apache.juddi.model.SignatureMethod;
 import org.apache.juddi.model.SignatureTransform;
+import org.apache.juddi.model.SignatureTransformDataValue;
 import org.apache.juddi.model.SignatureValue;
 import org.apache.juddi.model.SignedInfo;
 import org.apache.juddi.model.Tmodel;
-import org.apache.juddi.model.KeyDataValue;
-import org.apache.juddi.model.SignatureTransformDataValue;
+import org.apache.juddi.model.UddiEntity;
+import org.apache.juddi.v3.error.ErrorMessage;
+import org.apache.juddi.v3.error.ValueNotAllowedException;
 import org.uddi.api_v3.Description;
+import org.uddi.api_v3.OperationalInfo;
+import org.uddi.api_v3.SaveBinding;
+import org.uddi.repl_v3.ChangeRecord;
+import org.uddi.repl_v3.ReplicationConfiguration;
 import org.uddi.sub_v3.ObjectFactory;
 import org.uddi.v3_service.DispositionReportFaultMessage;
 import org.w3._2000._09.xmldsig_.DSAKeyValueType;
+import org.w3._2000._09.xmldsig_.KeyInfoType;
 import org.w3._2000._09.xmldsig_.KeyValueType;
 import org.w3._2000._09.xmldsig_.PGPDataType;
 import org.w3._2000._09.xmldsig_.RSAKeyValueType;
@@ -83,8 +102,8 @@ public class MappingApiToModel {
          * @throws DispositionReportFaultMessage
          */
         public static void mapPublisher(org.apache.juddi.api_v3.Publisher apiPublisher,
-                org.apache.juddi.model.Publisher modelPublisher)
-                throws DispositionReportFaultMessage {
+             org.apache.juddi.model.Publisher modelPublisher)
+             throws DispositionReportFaultMessage {
                 modelPublisher.setAuthorizedName(apiPublisher.getAuthorizedName());
                 modelPublisher.setPublisherName(apiPublisher.getPublisherName());
                 modelPublisher.setEmailAddress(apiPublisher.getEmailAddress());
@@ -104,8 +123,8 @@ public class MappingApiToModel {
          * @throws DispositionReportFaultMessage
          */
         public static void mapBusinessEntity(org.uddi.api_v3.BusinessEntity apiBusinessEntity,
-                org.apache.juddi.model.BusinessEntity modelBusinessEntity)
-                throws DispositionReportFaultMessage {
+             org.apache.juddi.model.BusinessEntity modelBusinessEntity)
+             throws DispositionReportFaultMessage {
 
                 modelBusinessEntity.setEntityKey(apiBusinessEntity.getBusinessKey());
 
@@ -120,15 +139,15 @@ public class MappingApiToModel {
                 }
 
                 mapBusinessServices(apiBusinessEntity.getBusinessServices(),
-                        modelBusinessEntity.getBusinessServices(),
-                        modelBusinessEntity.getServiceProjections(),
-                        modelBusinessEntity);
+                     modelBusinessEntity.getBusinessServices(),
+                     modelBusinessEntity.getServiceProjections(),
+                     modelBusinessEntity);
 
                 mapBusinessSignature(apiBusinessEntity.getSignature(), modelBusinessEntity);
         }
 
         private static List<Signature> mapApiSignaturesToModelSignatures(List<org.w3._2000._09.xmldsig_.SignatureType> apiSignatures)
-                throws DispositionReportFaultMessage {
+             throws DispositionReportFaultMessage {
                 List<Signature> modelSignatures = new ArrayList<Signature>();
                 modelSignatures.clear();
                 for (org.w3._2000._09.xmldsig_.SignatureType signatureType : apiSignatures) {
@@ -224,7 +243,7 @@ public class MappingApiToModel {
          * @throws DispositionReportFaultMessage
          */
         public static void mapBusinessServiceSignature(List<org.w3._2000._09.xmldsig_.SignatureType> apiSignatures, BusinessService modelBusinessService)
-                throws DispositionReportFaultMessage {
+             throws DispositionReportFaultMessage {
                 List<Signature> modelSignatures = mapApiSignaturesToModelSignatures(apiSignatures);
                 for (Signature modelSignature : modelSignatures) {
                         modelSignature.setBusinessService(modelBusinessService);
@@ -239,7 +258,7 @@ public class MappingApiToModel {
          * @throws DispositionReportFaultMessage
          */
         public static void mapTmodelSignatures(List<org.w3._2000._09.xmldsig_.SignatureType> apiSignatures, Tmodel modelTmodel)
-                throws DispositionReportFaultMessage {
+             throws DispositionReportFaultMessage {
                 List<Signature> modelSignatures = mapApiSignaturesToModelSignatures(apiSignatures);
                 for (Signature modelSignature : modelSignatures) {
                         modelSignature.setTmodel(modelTmodel);
@@ -254,7 +273,7 @@ public class MappingApiToModel {
          * @throws DispositionReportFaultMessage
          */
         public static void mapBindingTemplateSignatures(List<org.w3._2000._09.xmldsig_.SignatureType> apiSignatures, BindingTemplate modelBindingTemplate)
-                throws DispositionReportFaultMessage {
+             throws DispositionReportFaultMessage {
                 List<Signature> modelSignatures = mapApiSignaturesToModelSignatures(apiSignatures);
                 for (Signature modelSignature : modelSignatures) {
                         modelSignature.setBindingTemplate(modelBindingTemplate);
@@ -269,7 +288,7 @@ public class MappingApiToModel {
          * @throws DispositionReportFaultMessage
          */
         public static void mapPublisherSignatures(List<org.w3._2000._09.xmldsig_.SignatureType> apiSignatures, Publisher modelPublisher)
-                throws DispositionReportFaultMessage {
+             throws DispositionReportFaultMessage {
                 List<Signature> modelSignatures = mapApiSignaturesToModelSignatures(apiSignatures);
                 for (Signature modelSignature : modelSignatures) {
                         modelSignature.setPublisher(modelPublisher);
@@ -284,8 +303,8 @@ public class MappingApiToModel {
          * @throws DispositionReportFaultMessage
          */
         public static void mapBusinessSignature(List<org.w3._2000._09.xmldsig_.SignatureType> apiSignatures,
-                org.apache.juddi.model.BusinessEntity modelBusinessEntity)
-                throws DispositionReportFaultMessage {
+             org.apache.juddi.model.BusinessEntity modelBusinessEntity)
+             throws DispositionReportFaultMessage {
                 List<Signature> modelSignatures = mapApiSignaturesToModelSignatures(apiSignatures);
                 for (Signature modelSignature : modelSignatures) {
                         modelSignature.setBusinessEntity(modelBusinessEntity);
@@ -301,9 +320,9 @@ public class MappingApiToModel {
          * @throws DispositionReportFaultMessage
          */
         public static void mapBusinessNames(List<org.uddi.api_v3.Name> apiNameList,
-                List<org.apache.juddi.model.BusinessName> modelNameList,
-                org.apache.juddi.model.BusinessEntity modelBusinessEntity)
-                throws DispositionReportFaultMessage {
+             List<org.apache.juddi.model.BusinessName> modelNameList,
+             org.apache.juddi.model.BusinessEntity modelBusinessEntity)
+             throws DispositionReportFaultMessage {
                 modelNameList.clear();
 
                 for (org.uddi.api_v3.Name apiName : apiNameList) {
@@ -319,9 +338,9 @@ public class MappingApiToModel {
          * @throws DispositionReportFaultMessage
          */
         public static void mapBusinessDescriptions(List<org.uddi.api_v3.Description> apiDescList,
-                List<org.apache.juddi.model.BusinessDescr> modelDescList,
-                org.apache.juddi.model.BusinessEntity modelBusinessEntity)
-                throws DispositionReportFaultMessage {
+             List<org.apache.juddi.model.BusinessDescr> modelDescList,
+             org.apache.juddi.model.BusinessEntity modelBusinessEntity)
+             throws DispositionReportFaultMessage {
                 modelDescList.clear();
 
                 for (org.uddi.api_v3.Description apiDesc : apiDescList) {
@@ -337,9 +356,9 @@ public class MappingApiToModel {
          * @throws DispositionReportFaultMessage
          */
         public static void mapDiscoveryUrls(org.uddi.api_v3.DiscoveryURLs apiDiscUrls,
-                List<org.apache.juddi.model.DiscoveryUrl> modelDiscUrlList,
-                org.apache.juddi.model.BusinessEntity modelBusinessEntity)
-                throws DispositionReportFaultMessage {
+             List<org.apache.juddi.model.DiscoveryUrl> modelDiscUrlList,
+             org.apache.juddi.model.BusinessEntity modelBusinessEntity)
+             throws DispositionReportFaultMessage {
                 modelDiscUrlList.clear();
 
                 if (apiDiscUrls != null) {
@@ -358,9 +377,9 @@ public class MappingApiToModel {
          * @throws DispositionReportFaultMessage
          */
         public static void mapContacts(org.uddi.api_v3.Contacts apiContacts,
-                List<org.apache.juddi.model.Contact> modelContactList,
-                org.apache.juddi.model.BusinessEntity modelBusinessEntity)
-                throws DispositionReportFaultMessage {
+             List<org.apache.juddi.model.Contact> modelContactList,
+             org.apache.juddi.model.BusinessEntity modelBusinessEntity)
+             throws DispositionReportFaultMessage {
                 modelContactList.clear();
 
                 if (apiContacts != null) {
@@ -373,7 +392,7 @@ public class MappingApiToModel {
                                 mapContactDescriptions(apiContact.getDescription(), modelContact.getContactDescrs(), modelContact, modelBusinessEntity.getEntityKey());
                                 mapContactEmails(apiContact.getEmail(), modelContact.getEmails(), modelContact, modelBusinessEntity.getEntityKey());
                                 mapContactPhones(apiContact.getPhone(), modelContact.getPhones(), modelContact, modelBusinessEntity.getEntityKey());
-                                mapContactAddresses(apiContact.getAddress(), modelContact.getAddresses(), modelContact, modelBusinessEntity.getEntityKey());
+                                mapContactAddresses(apiContact.getAddress(), modelContact.getAddresses(), modelContact);
 
                                 modelContactList.add(modelContact);
                         }
@@ -389,10 +408,10 @@ public class MappingApiToModel {
          * @throws DispositionReportFaultMessage
          */
         public static void mapContactDescriptions(List<org.uddi.api_v3.Description> apiDescList,
-                List<org.apache.juddi.model.ContactDescr> modelDescList,
-                org.apache.juddi.model.Contact modelContact,
-                String businessKey)
-                throws DispositionReportFaultMessage {
+             List<org.apache.juddi.model.ContactDescr> modelDescList,
+             org.apache.juddi.model.Contact modelContact,
+             String businessKey)
+             throws DispositionReportFaultMessage {
                 modelDescList.clear();
 
                 for (org.uddi.api_v3.Description apiDesc : apiDescList) {
@@ -409,10 +428,10 @@ public class MappingApiToModel {
          * @throws DispositionReportFaultMessage
          */
         public static void mapPersonNames(List<org.uddi.api_v3.PersonName> apiPersonNameList,
-                List<org.apache.juddi.model.PersonName> modelPersonNameList,
-                org.apache.juddi.model.Contact modelContact,
-                String businessKey)
-                throws DispositionReportFaultMessage {
+             List<org.apache.juddi.model.PersonName> modelPersonNameList,
+             org.apache.juddi.model.Contact modelContact,
+             String businessKey)
+             throws DispositionReportFaultMessage {
                 modelPersonNameList.clear();
 
                 for (org.uddi.api_v3.PersonName apiPersonName : apiPersonNameList) {
@@ -429,10 +448,10 @@ public class MappingApiToModel {
          * @throws DispositionReportFaultMessage
          */
         public static void mapContactEmails(List<org.uddi.api_v3.Email> apiEmailList,
-                List<org.apache.juddi.model.Email> modelEmailList,
-                org.apache.juddi.model.Contact modelContact,
-                String businessKey)
-                throws DispositionReportFaultMessage {
+             List<org.apache.juddi.model.Email> modelEmailList,
+             org.apache.juddi.model.Contact modelContact,
+             String businessKey)
+             throws DispositionReportFaultMessage {
                 modelEmailList.clear();
 
                 for (org.uddi.api_v3.Email apiEmail : apiEmailList) {
@@ -449,10 +468,10 @@ public class MappingApiToModel {
          * @throws DispositionReportFaultMessage
          */
         public static void mapContactPhones(List<org.uddi.api_v3.Phone> apiPhoneList,
-                List<org.apache.juddi.model.Phone> modelPhoneList,
-                org.apache.juddi.model.Contact modelContact,
-                String businessKey)
-                throws DispositionReportFaultMessage {
+             List<org.apache.juddi.model.Phone> modelPhoneList,
+             org.apache.juddi.model.Contact modelContact,
+             String businessKey)
+             throws DispositionReportFaultMessage {
                 modelPhoneList.clear();
 
                 for (org.uddi.api_v3.Phone apiPhone : apiPhoneList) {
@@ -469,10 +488,10 @@ public class MappingApiToModel {
          * @throws DispositionReportFaultMessage
          */
         public static void mapContactAddresses(List<org.uddi.api_v3.Address> apiAddressList,
-                List<org.apache.juddi.model.Address> modelAddressList,
-                org.apache.juddi.model.Contact modelContact,
-                String businessKey)
-                throws DispositionReportFaultMessage {
+             List<org.apache.juddi.model.Address> modelAddressList,
+             org.apache.juddi.model.Contact modelContact
+        )
+             throws DispositionReportFaultMessage {
                 modelAddressList.clear();
 
                 for (org.uddi.api_v3.Address apiAddress : apiAddressList) {
@@ -481,7 +500,7 @@ public class MappingApiToModel {
                         modelAddress.setTmodelKey(apiAddress.getTModelKey());
                         modelAddress.setUseType(apiAddress.getUseType());
 
-                        mapAddressLines(apiAddress.getAddressLine(), modelAddress.getAddressLines(), modelAddress, businessKey, modelContact.getId());
+                        mapAddressLines(apiAddress.getAddressLine(), modelAddress.getAddressLines(), modelAddress, modelContact.getId());
 
                         modelAddressList.add(modelAddress);
                 }
@@ -492,16 +511,15 @@ public class MappingApiToModel {
          * @param apiAddressLineList
          * @param modelAddressLineList
          * @param modelAddress
-         * @param businessKey
+         *
          * @param contactId
          * @throws DispositionReportFaultMessage
          */
         public static void mapAddressLines(List<org.uddi.api_v3.AddressLine> apiAddressLineList,
-                List<org.apache.juddi.model.AddressLine> modelAddressLineList,
-                org.apache.juddi.model.Address modelAddress,
-                String businessKey,
-                Long contactId)
-                throws DispositionReportFaultMessage {
+             List<org.apache.juddi.model.AddressLine> modelAddressLineList,
+             org.apache.juddi.model.Address modelAddress,
+             Long contactId)
+             throws DispositionReportFaultMessage {
                 modelAddressLineList.clear();
 
                 for (org.uddi.api_v3.AddressLine apiAddressLine : apiAddressLineList) {
@@ -517,9 +535,9 @@ public class MappingApiToModel {
          * @throws DispositionReportFaultMessage
          */
         public static void mapBusinessIdentifiers(org.uddi.api_v3.IdentifierBag apiIdentifierBag,
-                List<org.apache.juddi.model.BusinessIdentifier> modelIdentifierList,
-                org.apache.juddi.model.BusinessEntity modelBusinessEntity)
-                throws DispositionReportFaultMessage {
+             List<org.apache.juddi.model.BusinessIdentifier> modelIdentifierList,
+             org.apache.juddi.model.BusinessEntity modelBusinessEntity)
+             throws DispositionReportFaultMessage {
                 modelIdentifierList.clear();
 
                 if (apiIdentifierBag != null) {
@@ -539,10 +557,10 @@ public class MappingApiToModel {
          * @throws DispositionReportFaultMessage
          */
         public static void mapBusinessServices(org.uddi.api_v3.BusinessServices apiBusinessServices,
-                List<org.apache.juddi.model.BusinessService> modelBusinessServiceList,
-                List<org.apache.juddi.model.ServiceProjection> modelServiceProjectionList,
-                org.apache.juddi.model.BusinessEntity modelBusinessEntity)
-                throws DispositionReportFaultMessage {
+             List<org.apache.juddi.model.BusinessService> modelBusinessServiceList,
+             List<org.apache.juddi.model.ServiceProjection> modelServiceProjectionList,
+             org.apache.juddi.model.BusinessEntity modelBusinessEntity)
+             throws DispositionReportFaultMessage {
                 modelBusinessServiceList.clear();
                 if (apiBusinessServices != null) {
                         List<org.uddi.api_v3.BusinessService> apiBusinessServiceList = apiBusinessServices.getBusinessService();
@@ -551,7 +569,7 @@ public class MappingApiToModel {
 
                                 // If the parent businessEntity key and the service businessEntity key (if provided) do not match, it's a projection.
                                 if (apiBusinessService.getBusinessKey() != null && apiBusinessService.getBusinessKey().length() > 0
-                                        && !modelBusinessEntity.getEntityKey().equalsIgnoreCase(apiBusinessService.getBusinessKey())) {
+                                     && !modelBusinessEntity.getEntityKey().equalsIgnoreCase(apiBusinessService.getBusinessKey())) {
 
                                         modelBusinessService.setEntityKey(apiBusinessService.getServiceKey());
                                         org.apache.juddi.model.ServiceProjection modelServiceProjection = new org.apache.juddi.model.ServiceProjection(modelBusinessEntity, modelBusinessService);
@@ -573,9 +591,9 @@ public class MappingApiToModel {
          * @throws DispositionReportFaultMessage
          */
         public static void mapBusinessService(org.uddi.api_v3.BusinessService apiBusinessService,
-                org.apache.juddi.model.BusinessService modelBusinessService,
-                org.apache.juddi.model.BusinessEntity modelBusinessEntity)
-                throws DispositionReportFaultMessage {
+             org.apache.juddi.model.BusinessService modelBusinessService,
+             org.apache.juddi.model.BusinessEntity modelBusinessEntity)
+             throws DispositionReportFaultMessage {
 
                 modelBusinessService.setBusinessEntity(modelBusinessEntity);
                 modelBusinessService.setEntityKey(apiBusinessService.getServiceKey());
@@ -599,9 +617,9 @@ public class MappingApiToModel {
          * @throws DispositionReportFaultMessage
          */
         public static void mapServiceNames(List<org.uddi.api_v3.Name> apiNameList,
-                List<org.apache.juddi.model.ServiceName> modelNameList,
-                org.apache.juddi.model.BusinessService modelBusinessService)
-                throws DispositionReportFaultMessage {
+             List<org.apache.juddi.model.ServiceName> modelNameList,
+             org.apache.juddi.model.BusinessService modelBusinessService)
+             throws DispositionReportFaultMessage {
                 modelNameList.clear();
 
                 for (org.uddi.api_v3.Name apiName : apiNameList) {
@@ -617,9 +635,9 @@ public class MappingApiToModel {
          * @throws DispositionReportFaultMessage
          */
         public static void mapServiceDescriptions(List<org.uddi.api_v3.Description> apiDescList,
-                List<org.apache.juddi.model.ServiceDescr> modelDescList,
-                org.apache.juddi.model.BusinessService modelBusinessService)
-                throws DispositionReportFaultMessage {
+             List<org.apache.juddi.model.ServiceDescr> modelDescList,
+             org.apache.juddi.model.BusinessService modelBusinessService)
+             throws DispositionReportFaultMessage {
                 modelDescList.clear();
 
                 for (org.uddi.api_v3.Description apiDesc : apiDescList) {
@@ -635,9 +653,9 @@ public class MappingApiToModel {
          * @throws DispositionReportFaultMessage
          */
         public static void mapBindingTemplates(org.uddi.api_v3.BindingTemplates apiBindingTemplates,
-                List<org.apache.juddi.model.BindingTemplate> modelBindingTemplateList,
-                org.apache.juddi.model.BusinessService modelBusinessService)
-                throws DispositionReportFaultMessage {
+             List<org.apache.juddi.model.BindingTemplate> modelBindingTemplateList,
+             org.apache.juddi.model.BusinessService modelBusinessService)
+             throws DispositionReportFaultMessage {
                 modelBindingTemplateList.clear();
 
                 if (apiBindingTemplates != null) {
@@ -660,9 +678,9 @@ public class MappingApiToModel {
          * @throws DispositionReportFaultMessage
          */
         public static void mapBindingTemplate(org.uddi.api_v3.BindingTemplate apiBindingTemplate,
-                org.apache.juddi.model.BindingTemplate modelBindingTemplate,
-                org.apache.juddi.model.BusinessService modelBusinessService)
-                throws DispositionReportFaultMessage {
+             org.apache.juddi.model.BindingTemplate modelBindingTemplate,
+             org.apache.juddi.model.BusinessService modelBusinessService)
+             throws DispositionReportFaultMessage {
 
                 modelBindingTemplate.setBusinessService(modelBusinessService);
                 modelBindingTemplate.setEntityKey(apiBindingTemplate.getBindingKey());
@@ -691,9 +709,9 @@ public class MappingApiToModel {
          * @throws DispositionReportFaultMessage
          */
         public static void mapBindingDescriptions(List<org.uddi.api_v3.Description> apiDescList,
-                List<org.apache.juddi.model.BindingDescr> modelDescList,
-                org.apache.juddi.model.BindingTemplate modelBindingTemplate)
-                throws DispositionReportFaultMessage {
+             List<org.apache.juddi.model.BindingDescr> modelDescList,
+             org.apache.juddi.model.BindingTemplate modelBindingTemplate)
+             throws DispositionReportFaultMessage {
                 modelDescList.clear();
                 for (org.uddi.api_v3.Description apiDesc : apiDescList) {
                         modelDescList.add(new org.apache.juddi.model.BindingDescr(modelBindingTemplate, apiDesc.getLang(), apiDesc.getValue()));
@@ -707,8 +725,8 @@ public class MappingApiToModel {
          * @throws DispositionReportFaultMessage
          */
         public static void mapCategoryBag(org.uddi.api_v3.CategoryBag apiCategoryBag,
-                org.apache.juddi.model.CategoryBag modelCategoryBag)
-                throws DispositionReportFaultMessage {
+             org.apache.juddi.model.CategoryBag modelCategoryBag)
+             throws DispositionReportFaultMessage {
 
                 if (apiCategoryBag != null) {
                         List<org.uddi.api_v3.KeyedReference> krList = apiCategoryBag.getKeyedReference();
@@ -718,7 +736,7 @@ public class MappingApiToModel {
                                         //modelKeyedReferences.clear();
                                         org.uddi.api_v3.KeyedReference apiKeyedReference = (org.uddi.api_v3.KeyedReference) elem;
                                         modelKeyedReferences.add(new org.apache.juddi.model.KeyedReference(modelCategoryBag,
-                                                apiKeyedReference.getTModelKey(), apiKeyedReference.getKeyName(), apiKeyedReference.getKeyValue()));
+                                             apiKeyedReference.getTModelKey(), apiKeyedReference.getKeyName(), apiKeyedReference.getKeyValue()));
                                 }
                         }
                         List<org.uddi.api_v3.KeyedReferenceGroup> krgList = apiCategoryBag.getKeyedReferenceGroup();
@@ -746,9 +764,9 @@ public class MappingApiToModel {
          * @throws DispositionReportFaultMessage
          */
         public static void mapKeyedReferenceGroup(org.uddi.api_v3.KeyedReferenceGroup apiKeyedReferenceGroup,
-                org.apache.juddi.model.KeyedReferenceGroup modelKeyedReferenceGroup,
-                org.apache.juddi.model.CategoryBag modelCategoryBag)
-                throws DispositionReportFaultMessage {
+             org.apache.juddi.model.KeyedReferenceGroup modelKeyedReferenceGroup,
+             org.apache.juddi.model.CategoryBag modelCategoryBag)
+             throws DispositionReportFaultMessage {
                 if (apiKeyedReferenceGroup != null) {
                         modelKeyedReferenceGroup.setCategoryBag(modelCategoryBag);
                         modelKeyedReferenceGroup.setTmodelKey(apiKeyedReferenceGroup.getTModelKey());
@@ -757,7 +775,7 @@ public class MappingApiToModel {
                                 List<org.apache.juddi.model.KeyedReference> modelKeyedReferences = modelKeyedReferenceGroup.getKeyedReferences();
                                 for (org.uddi.api_v3.KeyedReference apiKeyedReference : apiKeyedReferenceGroup.getKeyedReference()) {
                                         modelKeyedReferences.add(new org.apache.juddi.model.KeyedReference(modelKeyedReferenceGroup,
-                                                apiKeyedReference.getTModelKey(), apiKeyedReference.getKeyName(), apiKeyedReference.getKeyValue()));
+                                             apiKeyedReference.getTModelKey(), apiKeyedReference.getKeyName(), apiKeyedReference.getKeyValue()));
                                 }
                         }
 
@@ -773,9 +791,9 @@ public class MappingApiToModel {
          * @throws DispositionReportFaultMessage
          */
         public static void mapTModelInstanceDetails(org.uddi.api_v3.TModelInstanceDetails apiTModelInstDetails,
-                List<org.apache.juddi.model.TmodelInstanceInfo> modelTModelInstInfoList,
-                org.apache.juddi.model.BindingTemplate modelBindingTemplate)
-                throws DispositionReportFaultMessage {
+             List<org.apache.juddi.model.TmodelInstanceInfo> modelTModelInstInfoList,
+             org.apache.juddi.model.BindingTemplate modelBindingTemplate)
+             throws DispositionReportFaultMessage {
                 modelTModelInstInfoList.clear();
 
                 if (apiTModelInstDetails != null) {
@@ -799,9 +817,9 @@ public class MappingApiToModel {
          * @throws DispositionReportFaultMessage
          */
         public static void mapTModelInstanceInfoDescriptions(List<org.uddi.api_v3.Description> apiDescList,
-                List<org.apache.juddi.model.TmodelInstanceInfoDescr> modelDescList,
-                org.apache.juddi.model.TmodelInstanceInfo modelTModelInstInfo)
-                throws DispositionReportFaultMessage {
+             List<org.apache.juddi.model.TmodelInstanceInfoDescr> modelDescList,
+             org.apache.juddi.model.TmodelInstanceInfo modelTModelInstInfo)
+             throws DispositionReportFaultMessage {
                 modelDescList.clear();
 
                 for (org.uddi.api_v3.Description apiDesc : apiDescList) {
@@ -816,17 +834,17 @@ public class MappingApiToModel {
          * @throws DispositionReportFaultMessage
          */
         public static void mapInstanceDetails(org.uddi.api_v3.InstanceDetails apiInstanceDetails,
-                org.apache.juddi.model.TmodelInstanceInfo modelTmodelInstInfo)
-                throws DispositionReportFaultMessage {
+             org.apache.juddi.model.TmodelInstanceInfo modelTmodelInstInfo)
+             throws DispositionReportFaultMessage {
                 modelTmodelInstInfo.getInstanceDetailsDescrs().clear();
 
                 if (apiInstanceDetails != null) {
                         List<org.uddi.api_v3.Description> descriptions = apiInstanceDetails.getDescription();
                         List<org.uddi.api_v3.OverviewDoc> overviewdocs = apiInstanceDetails.getOverviewDoc();
                         for (org.uddi.api_v3.Description apiDesc : descriptions) {
-                                org.apache.juddi.model.InstanceDetailsDescr modelInstanceDetailsDescr =
-                                        new org.apache.juddi.model.InstanceDetailsDescr(
-                                        modelTmodelInstInfo, apiDesc.getLang(), apiDesc.getValue());
+                                org.apache.juddi.model.InstanceDetailsDescr modelInstanceDetailsDescr
+                                     = new org.apache.juddi.model.InstanceDetailsDescr(
+                                          modelTmodelInstInfo, apiDesc.getLang(), apiDesc.getValue());
                                 modelTmodelInstInfo.getInstanceDetailsDescrs().add(modelInstanceDetailsDescr);
                         }
                         for (org.uddi.api_v3.OverviewDoc apiOverviewDoc : overviewdocs) {
@@ -845,8 +863,8 @@ public class MappingApiToModel {
          * @throws DispositionReportFaultMessage
          */
         public static void mapOverviewDoc(org.uddi.api_v3.OverviewDoc apiOverviewDoc,
-                org.apache.juddi.model.OverviewDoc modelOverviewDoc)
-                throws DispositionReportFaultMessage {
+             org.apache.juddi.model.OverviewDoc modelOverviewDoc)
+             throws DispositionReportFaultMessage {
                 if (apiOverviewDoc != null) {
 
                         List<Description> descContent = apiOverviewDoc.getDescription();
@@ -854,7 +872,7 @@ public class MappingApiToModel {
                                 org.uddi.api_v3.Description description = (org.uddi.api_v3.Description) elem;
                                 if (description != null) {
                                         org.apache.juddi.model.OverviewDocDescr modelOverviewDocDescr = new org.apache.juddi.model.OverviewDocDescr(
-                                                modelOverviewDoc, description.getLang(), description.getValue());
+                                             modelOverviewDoc, description.getLang(), description.getValue());
                                         modelOverviewDoc.getOverviewDocDescrs().add(modelOverviewDocDescr);
                                 }
                         }
@@ -876,8 +894,8 @@ public class MappingApiToModel {
          * @throws DispositionReportFaultMessage
          */
         public static void mapTModel(org.uddi.api_v3.TModel apiTModel,
-                org.apache.juddi.model.Tmodel modelTModel)
-                throws DispositionReportFaultMessage {
+             org.apache.juddi.model.Tmodel modelTModel)
+             throws DispositionReportFaultMessage {
 
                 modelTModel.setEntityKey(apiTModel.getTModelKey());
                 modelTModel.setName(apiTModel.getName().getValue());
@@ -902,9 +920,9 @@ public class MappingApiToModel {
          * @throws DispositionReportFaultMessage
          */
         public static void mapTModelDescriptions(List<org.uddi.api_v3.Description> apiDescList,
-                List<org.apache.juddi.model.TmodelDescr> modelDescList,
-                org.apache.juddi.model.Tmodel modelTModel)
-                throws DispositionReportFaultMessage {
+             List<org.apache.juddi.model.TmodelDescr> modelDescList,
+             org.apache.juddi.model.Tmodel modelTModel)
+             throws DispositionReportFaultMessage {
                 modelDescList.clear();
 
                 for (org.uddi.api_v3.Description apiDesc : apiDescList) {
@@ -920,9 +938,9 @@ public class MappingApiToModel {
          * @throws DispositionReportFaultMessage
          */
         public static void mapTModelIdentifiers(org.uddi.api_v3.IdentifierBag apiIdentifierBag,
-                List<org.apache.juddi.model.TmodelIdentifier> modelIdentifierList,
-                org.apache.juddi.model.Tmodel modelTModel)
-                throws DispositionReportFaultMessage {
+             List<org.apache.juddi.model.TmodelIdentifier> modelIdentifierList,
+             org.apache.juddi.model.Tmodel modelTModel)
+             throws DispositionReportFaultMessage {
                 modelIdentifierList.clear();
 
                 if (apiIdentifierBag != null) {
@@ -941,9 +959,9 @@ public class MappingApiToModel {
          * @throws DispositionReportFaultMessage
          */
         public static void mapTModelOverviewDocs(List<org.uddi.api_v3.OverviewDoc> apiOverviewDocList,
-                List<org.apache.juddi.model.OverviewDoc> modelOverviewDocList,
-                org.apache.juddi.model.Tmodel modelTmodel)
-                throws DispositionReportFaultMessage {
+             List<org.apache.juddi.model.OverviewDoc> modelOverviewDocList,
+             org.apache.juddi.model.Tmodel modelTmodel)
+             throws DispositionReportFaultMessage {
                 modelOverviewDocList.clear();
 
                 for (org.uddi.api_v3.OverviewDoc apiOverviewDoc : apiOverviewDocList) {
@@ -960,8 +978,8 @@ public class MappingApiToModel {
          * @throws DispositionReportFaultMessage
          */
         public static void mapPublisherAssertion(org.uddi.api_v3.PublisherAssertion apiPubAssertion,
-                org.apache.juddi.model.PublisherAssertion modelPubAssertion)
-                throws DispositionReportFaultMessage {
+             org.apache.juddi.model.PublisherAssertion modelPubAssertion)
+             throws DispositionReportFaultMessage {
 
                 modelPubAssertion.setId(new org.apache.juddi.model.PublisherAssertionId(apiPubAssertion.getFromKey(), apiPubAssertion.getToKey()));
 
@@ -988,8 +1006,8 @@ public class MappingApiToModel {
          * @throws DispositionReportFaultMessage
          */
         public static void mapSubscription(org.uddi.sub_v3.Subscription apiSubscription,
-                org.apache.juddi.model.Subscription modelSubscription)
-                throws DispositionReportFaultMessage {
+             org.apache.juddi.model.Subscription modelSubscription)
+             throws DispositionReportFaultMessage {
 
                 modelSubscription.setSubscriptionKey(apiSubscription.getSubscriptionKey());
                 modelSubscription.setBindingKey(apiSubscription.getBindingKey());
@@ -1008,7 +1026,6 @@ public class MappingApiToModel {
                         modelSubscription.setBrief(Boolean.FALSE);
                 }
 
-
                 String rawFilter = JAXBMarshaller.marshallToString(new ObjectFactory().createSubscriptionFilter(apiSubscription.getSubscriptionFilter()), "org.uddi.sub_v3");
                 logger.debug("marshalled subscription filter:  " + rawFilter);
                 modelSubscription.setSubscriptionFilter(rawFilter);
@@ -1022,8 +1039,8 @@ public class MappingApiToModel {
          * @throws DispositionReportFaultMessage
          */
         public static void mapClientSubscriptionInfo(org.apache.juddi.api_v3.ClientSubscriptionInfo apiClientSubscriptionInfo,
-                org.apache.juddi.model.ClientSubscriptionInfo modelClientSubscriptionInfo)
-                throws DispositionReportFaultMessage {
+             org.apache.juddi.model.ClientSubscriptionInfo modelClientSubscriptionInfo)
+             throws DispositionReportFaultMessage {
 
                 modelClientSubscriptionInfo.setLastNotified(new Date());
                 modelClientSubscriptionInfo.setSubscriptionKey(apiClientSubscriptionInfo.getSubscriptionKey());
@@ -1132,10 +1149,10 @@ public class MappingApiToModel {
                         } else if (x509IssuerSerialOrX509SKIOrX509SubjectName instanceof String) {
                                 modelKeyInfoValue.setKeyDataValueString((String) x509IssuerSerialOrX509SKIOrX509SubjectName);
                         } else if (x509IssuerSerialOrX509SKIOrX509SubjectName instanceof X509IssuerSerialType) {
-                        	modelKeyInfoValue.setKeyDataType(X509IssuerSerialType.class.getSimpleName());
-                        	X509IssuerSerialType x509IssuerSerialType = (X509IssuerSerialType) x509IssuerSerialOrX509SKIOrX509SubjectName;
-                        	modelKeyInfoValue.setKeyDataValueString(x509IssuerSerialType.getX509IssuerName());
-                        	modelKeyInfoValue.setKeyDataValueBytes(x509IssuerSerialType.getX509SerialNumber().toByteArray());
+                                modelKeyInfoValue.setKeyDataType(X509IssuerSerialType.class.getSimpleName());
+                                X509IssuerSerialType x509IssuerSerialType = (X509IssuerSerialType) x509IssuerSerialOrX509SKIOrX509SubjectName;
+                                modelKeyInfoValue.setKeyDataValueString(x509IssuerSerialType.getX509IssuerName());
+                                modelKeyInfoValue.setKeyDataValueBytes(x509IssuerSerialType.getX509SerialNumber().toByteArray());
                         } else if (x509IssuerSerialOrX509SKIOrX509SubjectName != null) {
                                 throw new RuntimeException("Unrecognized Value for Element: " + tagName + ": " + x509IssuerSerialOrX509SKIOrX509SubjectName.getClass().getCanonicalName());
                         }
@@ -1358,4 +1375,201 @@ public class MappingApiToModel {
                 String str = serializer.writeToString(xformEl);
                 return str;
         }
+
+        public static org.apache.juddi.model.ChangeRecord mapChangeRecord(ChangeRecord rec) throws UnsupportedEncodingException {
+                org.apache.juddi.model.ChangeRecord r = new org.apache.juddi.model.ChangeRecord();
+                r.setId(rec.getChangeID().getOriginatingUSN());
+                r.setNodeID(rec.getChangeID().getNodeID());
+                StringWriter sw = new StringWriter();
+                JAXB.marshal(rec, sw);
+                r.setContents(sw.toString().getBytes("UTF8"));
+                return r;
+
+        }
+
+        public static void mapOperationalInfo(UddiEntity model, OperationalInfo operationalInfo) {
+                if (operationalInfo == null || model == null) {
+                        return;
+                }
+                if (operationalInfo.getCreated() != null) {
+                        model.setCreated(operationalInfo.getCreated().toGregorianCalendar().getTime());
+                }
+                model.setAuthorizedName(operationalInfo.getAuthorizedName());
+                if (operationalInfo.getModified() != null) {
+                        model.setModified(operationalInfo.getModified().toGregorianCalendar().getTime());
+                }
+                if (operationalInfo.getModifiedIncludingChildren() != null) {
+                        model.setModifiedIncludingChildren(operationalInfo.getModifiedIncludingChildren().toGregorianCalendar().getTime());
+                }
+                model.setNodeId(operationalInfo.getNodeID());
+
+        }
+
+        public static void mapSaveBindingToChangeRecord(SaveBinding recordIn, List<org.apache.juddi.model.ChangeRecord> recordsOut) {
+                List<org.apache.juddi.model.ChangeRecord> r = new ArrayList<org.apache.juddi.model.ChangeRecord>();
+
+        }
+
+        public static void mapReplicationConfiguration(ReplicationConfiguration replicationConfiguration, org.apache.juddi.model.ReplicationConfiguration model, EntityManager em) throws DispositionReportFaultMessage {
+
+                model.setMaximumTimeToGetChanges(replicationConfiguration.getMaximumTimeToGetChanges());
+                model.setMaximumTimeToSyncRegistry(replicationConfiguration.getMaximumTimeToSyncRegistry());
+                model.setSerialNumber(null);
+
+                //the spec doesn't specify what the format should be, however there was an example
+                //2002 03 04 1859Z
+                SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddkkmmZ");
+                model.setTimeOfConfigurationUpdate(sdf.format(new Date()));
+                model.setContact(mapContact(replicationConfiguration.getRegistryContact().getContact()));
+                model.setCommunicationGraph(mapCommunicationGraph(replicationConfiguration.getCommunicationGraph(), em));
+                model.setOperator(mapOperators(replicationConfiguration.getOperator()));
+                if (replicationConfiguration.getSignature() != null) {
+                        model.setSignatures(mapApiSignaturesToModelSignatures(replicationConfiguration.getSignature()));
+                }
+
+        }
+
+        private static Contact mapContact(org.uddi.api_v3.Contact contact) throws DispositionReportFaultMessage {
+                Contact model = new Contact();
+                model.setAddresses(new ArrayList<Address>());
+                mapContactAddresses(contact.getAddress(), model.getAddresses(), model);
+                if (model.getAddresses().isEmpty()) {
+                        model.setAddresses(null);
+                }
+                return model;
+        }
+
+        private static CommunicationGraph mapCommunicationGraph(org.uddi.repl_v3.CommunicationGraph communicationGraph, EntityManager em) throws DispositionReportFaultMessage {
+                if (communicationGraph == null) {
+                        return null;
+                }
+                CommunicationGraph model = new CommunicationGraph();
+
+                /**
+                 * Following the listing of nodes is the controlledMessage
+                 * element that lists the set of messages over which this
+                 * communication graph is intended to administer control of. If
+                 * a message element local name is listed in the
+                 * controlledMessage element, then such messages SHALL only be
+                 * sent between nodes that are listed in the subsequent edges of
+                 * the graph. In contrast, communication restrictions are not
+                 * imposed on replication messages not identified in the
+                 * controlledMessage element.
+                 */
+                if (communicationGraph.getControlledMessage() != null) {
+                        model.setControlMessage(new ArrayList<ControlMessage>());
+                        for (int k = 0; k < communicationGraph.getControlledMessage().size(); k++) {
+                                model.getControlMessage().add(new ControlMessage(communicationGraph.getControlledMessage().get(k)));
+                        }
+                }
+                model.setNode(new ArrayList<Node>());
+                for (int i = 0; i < communicationGraph.getNode().size(); i++) {
+                        Node find = em.find(org.apache.juddi.model.Node.class, communicationGraph.getNode().get(i));
+                        if (find == null) {
+                                throw new ValueNotAllowedException(new ErrorMessage("errors.replication.configNodeNotFound", communicationGraph.getNode().get(i)));
+                        }
+                        model.getNode().add(find);
+                }
+                if (communicationGraph.getEdge() != null) {
+                        List<Edge> ret = new ArrayList<Edge>();
+                        for (int i = 0; i < communicationGraph.getEdge().size(); i++) {
+                                Edge e = new Edge();
+                                e.setCommunicationGraph(model);
+                                Node find = em.find(org.apache.juddi.model.Node.class, communicationGraph.getEdge().get(i).getMessageReceiver());
+                                if (find == null) {
+                                        throw new ValueNotAllowedException(new ErrorMessage("errors.replication.configNodeNotFound", communicationGraph.getEdge().get(i).getMessageReceiver()));
+                                }
+                                e.setMessageReceiver(find);
+                                find = em.find(org.apache.juddi.model.Node.class, communicationGraph.getEdge().get(i).getMessageSender());
+                                if (find == null) {
+                                        throw new ValueNotAllowedException(new ErrorMessage("errors.replication.configNodeNotFound", communicationGraph.getEdge().get(i).getMessageSender()));
+                                }
+                                e.setMessageSender(find);
+
+                                /**
+                                 * The message elements contain the local name
+                                 * of the Replication API message elements. They
+                                 * indicate that only messages of the type
+                                 * explicitly identified for a particular edge
+                                 * MAY be sent from the specified messageSender
+                                 * to the specified messageReceiver.
+                                 */
+                                if (communicationGraph.getEdge().get(i).getMessage() != null) {
+                                        e.setMessage(new ArrayList<ControlMessage>());
+                                        for (int k = 0; k < communicationGraph.getEdge().get(i).getMessage().size(); k++) {
+                                                e.getMessages().add(new ControlMessage(communicationGraph.getEdge().get(i).getMessage().get(k)));
+                                        }
+                                }
+                                if (communicationGraph.getEdge().get(i).getMessageReceiverAlternate() != null) {
+                                        e.setMessageReceiverAlternate(new HashSet<Node>());
+                                        for (int k = 0; k < communicationGraph.getEdge().get(i).getMessageReceiverAlternate().size(); k++) {
+                                                find = em.find(org.apache.juddi.model.Node.class, communicationGraph.getEdge().get(i).getMessageSender());
+                                                if (find == null) {
+                                                        throw new ValueNotAllowedException(new ErrorMessage("errors.replication.configNodeNotFound", communicationGraph.getEdge().get(i).getMessageSender()));
+                                                }
+                                                e.getMessageReceiverAlternate().add(find);
+                                        }
+                                }
+
+                                ret.add(e);
+                        }
+                        model.setEdge(ret);
+                }
+
+                return model;
+
+        }
+
+        private static List<Operator> mapOperators(List<org.uddi.repl_v3.Operator> api) throws DispositionReportFaultMessage {
+                if (api == null) {
+                        return null;
+                }
+                List<Operator> model = new ArrayList<Operator>();
+                for (int i = 0; i < api.size(); i++) {
+                        Operator op = new Operator();
+                        op.setSoapReplicationURL(api.get(i).getSoapReplicationURL());
+
+                        if (!api.get(i).getContact().isEmpty()) {
+                                op.setContact(new ArrayList<Contact>());
+                                for (int k = 0; k < api.get(i).getContact().size(); k++) {
+                                        op.getContact().add(mapContact(api.get(i).getContact().get(k)));
+                                }
+                        }
+                        op.setOperatorNodeID(api.get(i).getOperatorNodeID());
+                        op.setOperatorStatus(mapOperatorStatus(api.get(i).getOperatorStatus()));
+                        if (!api.get(i).getKeyInfo().isEmpty()) {
+                                op.setKeyInfo(new ArrayList<KeyInfo>());
+                                for (int k = 0; k < api.get(i).getKeyInfo().size(); k++) {
+                                        //TODO api.get(i).getKeyInfo().get(k)
+                                        org.apache.juddi.model.KeyInfo modelKeyInfo = new KeyInfo();
+                                        modelKeyInfo.setXmlID(api.get(i).getKeyInfo().get(i).getId());
+                                        modelKeyInfo.setKeyDataValue(new ArrayList<KeyDataValue>());
+                                        if (api.get(i).getKeyInfo().get(i).getContent() != null) {
+                                                modelKeyInfo.setKeyDataValue(new ArrayList<KeyDataValue>());
+                                                for (int x = 0; x < api.get(i).getKeyInfo().get(k).getContent().size(); x++) {
+                                                        mapKeyValue((JAXBElement) api.get(i).getKeyInfo().get(k).getContent().get(x), modelKeyInfo.getKeyDataValue());
+                                                }
+                                        }
+                                        op.getKeyInfo().add(modelKeyInfo);
+                                }
+
+                        }
+                        model.add(op);
+
+                }
+                return model;
+        }
+
+        private static OperatorStatusType mapOperatorStatus(org.uddi.repl_v3.OperatorStatusType operatorStatus) {
+                switch (operatorStatus) {
+                        case NEW:
+                                return OperatorStatusType.NEW;
+                        case NORMAL:
+                                return OperatorStatusType.NORMAL;
+                        case RESIGNED:
+                                return OperatorStatusType.RESIGNED;
+                }
+                return null;
+        }
+
 }

http://git-wip-us.apache.org/repos/asf/juddi/blob/8b95902b/juddi-core/src/main/java/org/apache/juddi/mapping/MappingModelToApi.java
----------------------------------------------------------------------
diff --git a/juddi-core/src/main/java/org/apache/juddi/mapping/MappingModelToApi.java b/juddi-core/src/main/java/org/apache/juddi/mapping/MappingModelToApi.java
index 868eed5..e9bf41a 100644
--- a/juddi-core/src/main/java/org/apache/juddi/mapping/MappingModelToApi.java
+++ b/juddi-core/src/main/java/org/apache/juddi/mapping/MappingModelToApi.java
@@ -23,10 +23,15 @@ import javax.xml.datatype.DatatypeConfigurationException;
 import javax.xml.datatype.DatatypeFactory;
 import org.w3._2000._09.xmldsig_.X509IssuerSerialType;
 import java.io.ByteArrayInputStream;
+import java.io.StringReader;
+import java.io.UnsupportedEncodingException;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.Iterator;
 import java.util.List;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import javax.xml.bind.JAXB;
 import javax.xml.bind.JAXBElement;
 
 import javax.xml.bind.JAXBException;
@@ -53,7 +58,6 @@ import org.apache.juddi.model.UddiEntity;
 import org.apache.juddi.model.KeyDataValue;
 import org.apache.juddi.model.Node;
 import org.apache.juddi.model.ReplicationConfiguration;
-import org.apache.juddi.model.ReplicationMessage;
 import org.apache.juddi.model.SignatureTransformDataValue;
 import org.apache.juddi.subscription.TypeConvertor;
 import org.apache.juddi.v3.error.ErrorMessage;
@@ -62,6 +66,8 @@ import org.uddi.api_v3.BusinessEntity;
 import org.uddi.api_v3.CompletionStatus;
 import org.uddi.api_v3.Contacts;
 import org.uddi.api_v3.OperationalInfo;
+import org.uddi.repl_v3.ChangeRecord;
+import org.uddi.repl_v3.ChangeRecordIDType;
 import org.uddi.repl_v3.CommunicationGraph;
 import org.uddi.repl_v3.Operator;
 import org.uddi.repl_v3.OperatorStatusType;
@@ -1219,14 +1225,16 @@ public class MappingModelToApi {
                         mapContacts(model.get(i).getContact(), c, new BusinessEntity());
                         op.getContact().addAll(c.getContact());
 
-                        for (int x = 0; x < model.get(i).getKeyInfo().size(); x++) {
-                                KeyInfoType apiKeyInfo = new KeyInfoType();
-                                KeyInfo modelKeyInfo = model.get(i).getKeyInfo().get(x);
-                                apiKeyInfo.setId(modelKeyInfo.getXmlID());
-                                List<KeyDataValue> modelKeyDataValueList = modelKeyInfo.getKeyDataValue();
-                                List<Object> apiX509KeyInfoList = apiKeyInfo.getContent();
-                                mapModelKeyDataValue(modelKeyDataValueList, apiX509KeyInfoList);
-                                op.getKeyInfo().add(apiKeyInfo);
+                        if (model.get(i).getKeyInfo() != null) {
+                                for (int x = 0; x < model.get(i).getKeyInfo().size(); x++) {
+                                        KeyInfoType apiKeyInfo = new KeyInfoType();
+                                        KeyInfo modelKeyInfo = model.get(i).getKeyInfo().get(x);
+                                        apiKeyInfo.setId(modelKeyInfo.getXmlID());
+                                        List<KeyDataValue> modelKeyDataValueList = modelKeyInfo.getKeyDataValue();
+                                        List<Object> apiX509KeyInfoList = apiKeyInfo.getContent();
+                                        mapModelKeyDataValue(modelKeyDataValueList, apiX509KeyInfoList);
+                                        op.getKeyInfo().add(apiKeyInfo);
+                                }
                         }
                         api.add(op);
                 }
@@ -1252,9 +1260,10 @@ public class MappingModelToApi {
                         CommunicationGraph.Edge apiEdge = new CommunicationGraph.Edge();
                         apiEdge.setMessageReceiver(modelEdge.getMessageReceiver().getName());
                         apiEdge.setMessageSender(modelEdge.getMessageSender().getName());
-                        Iterator<ReplicationMessage> it2 = modelEdge.getMessages().iterator();
+                        
+                        Iterator<ControlMessage> it2 = modelEdge.getMessages().iterator();
                         while (it2.hasNext()) {
-                                apiEdge.getMessage().add(it2.next().getMsg());
+                                apiEdge.getMessage().add(it2.next().getMessage());
                         }
                         Iterator<Node> it3 = modelEdge.getMessageReceiverAlternate().iterator();
                         while (it3.hasNext()) {
@@ -1281,4 +1290,27 @@ public class MappingModelToApi {
                         api.add(it.next().getName());
                 }
         }
+
+        public static ChangeRecord mapChangeRecord(org.apache.juddi.model.ChangeRecord cr) {
+                if (cr == null) {
+                        return null;
+                }
+                ChangeRecord ret = new ChangeRecord();
+
+                StringReader sr = null;
+                try {
+                        sr = new StringReader(new String(cr.getContents(), "UTF8"));
+                } catch (UnsupportedEncodingException ex) {
+                        Logger.getLogger(MappingModelToApi.class.getName()).log(Level.SEVERE, null, ex);
+                }
+                ret = JAXB.unmarshal(sr, ChangeRecord.class);
+                //secret sauce here, if this is -1, that means that the record originated at this node and needs to be populated with the databases record id
+                if (cr.getOriginatingUSN()==null || cr.getOriginatingUSN() == -1L) {
+                        ret.setChangeID(new ChangeRecordIDType(cr.getNodeID(), cr.getId()));
+                } else {
+                        ret.setChangeID(new ChangeRecordIDType(cr.getNodeID(), cr.getOriginatingUSN()));
+                }
+                return ret;
+                        
+        }
 }

http://git-wip-us.apache.org/repos/asf/juddi/blob/8b95902b/juddi-core/src/main/java/org/apache/juddi/model/ChangeRecord.java
----------------------------------------------------------------------
diff --git a/juddi-core/src/main/java/org/apache/juddi/model/ChangeRecord.java b/juddi-core/src/main/java/org/apache/juddi/model/ChangeRecord.java
index 0a9379d..e9113b4 100644
--- a/juddi-core/src/main/java/org/apache/juddi/model/ChangeRecord.java
+++ b/juddi-core/src/main/java/org/apache/juddi/model/ChangeRecord.java
@@ -19,19 +19,28 @@ package org.apache.juddi.model;
 import java.io.Serializable;
 import javax.persistence.Column;
 import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
 import javax.persistence.Id;
+import javax.persistence.Lob;
 import javax.persistence.Table;
+import javax.persistence.TableGenerator;
 
 @Entity
 @Table(name = "j3_chg_record")
 public class ChangeRecord implements Serializable {
 
+        private static final long serialVersionUID = 1L;
+
         protected String nodeID;
         protected Long originatingUSN;
-        
+        private byte[] contents;
+        private RecordType e = RecordType.ChangeRecordNull;
         private Long id;
+        private String entityKey;
 
-        @Column(name="change_contents")
+        @Column(name = "change_contents")
+        @Lob
         public byte[] getContents() {
                 return contents;
         }
@@ -39,22 +48,8 @@ public class ChangeRecord implements Serializable {
         public void setContents(byte[] contents) {
                 this.contents = contents;
         }
-        /*protected ChangeRecordIDType changeID;
-         protected Object changeRecordNull;
-         protected ChangeRecordNewData changeRecordNewData;
-         protected ChangeRecordDelete changeRecordDelete;
-         protected ChangeRecordPublisherAssertion changeRecordPublisherAssertion;
-         protected ChangeRecordHide changeRecordHide;
-         protected ChangeRecordDeleteAssertion changeRecordDeleteAssertion;
-         protected ChangeRecordAcknowledgement changeRecordAcknowledgement;
-         protected ChangeRecordCorrection changeRecordCorrection;
-         protected ChangeRecordNewDataConditional changeRecordNewDataConditional;
-         protected ChangeRecordConditionFailed changeRecordConditionFailed;
-         protected boolean acknowledgementRequested;
-         * */
-        byte[] contents;
-
-        enum RecordType {
+
+        public enum RecordType {
 
                 ChangeRecordNewData,
                 ChangeRecordDelete,
@@ -64,10 +59,27 @@ public class ChangeRecord implements Serializable {
                 ChangeRecordAcknowledgement,
                 ChangeRecordCorrection,
                 ChangeRecordNewDataConditional,
-                ChangeRecordConditionFailed
+                ChangeRecordConditionFailed,
+                ChangeRecordNull
+        }
+
+        public void setRecordType(RecordType e) {
+                this.e = e;
+        }
+
+        @Column(name = "record_type")
+        public RecordType getRecordType() {
+                return e;
         }
 
         @Id
+        @GeneratedValue(strategy = GenerationType.TABLE,
+             generator = "personGen")
+        @TableGenerator(name = "personGen",
+             table = "JPAGEN_GENERATORS",
+             pkColumnName = "NAME",
+             pkColumnValue = "JPAGEN_PERSON_GEN",
+             valueColumnName = "VALUE")
         public Long getId() {
                 return id;
         }
@@ -76,7 +88,7 @@ public class ChangeRecord implements Serializable {
                 this.id = id;
         }
 
-        @Column(name="node_id")
+        @Column(name = "node_id")
         public String getNodeID() {
                 return nodeID;
         }
@@ -85,8 +97,16 @@ public class ChangeRecord implements Serializable {
                 this.nodeID = value;
         }
 
-        
-        @Column(name="orginating_usn")
+        @Column(name = "entity_key")
+        public String getEntityKey() {
+                return entityKey;
+        }
+
+        public void setEntityKey(String value) {
+                this.entityKey = value;
+        }
+
+        @Column(name = "orginating_usn")
         public Long getOriginatingUSN() {
                 return originatingUSN;
         }
@@ -95,4 +115,3 @@ public class ChangeRecord implements Serializable {
                 this.originatingUSN = value;
         }
 }
-
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/juddi/blob/8b95902b/juddi-core/src/main/java/org/apache/juddi/model/Clerk.java
----------------------------------------------------------------------
diff --git a/juddi-core/src/main/java/org/apache/juddi/model/Clerk.java b/juddi-core/src/main/java/org/apache/juddi/model/Clerk.java
index f471712..fe0ca52 100644
--- a/juddi-core/src/main/java/org/apache/juddi/model/Clerk.java
+++ b/juddi-core/src/main/java/org/apache/juddi/model/Clerk.java
@@ -38,7 +38,7 @@ public class Clerk implements java.io.Serializable {
 	private String clerkName;
 	@Column(name="publisher_id", nullable = false, length=255)
 	private String publisherId;
-	@ManyToOne(cascade = CascadeType.MERGE, fetch = FetchType.EAGER)
+	@ManyToOne(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
 	private Node node;
 	@Column(name="cred", length=255)
 	private String cred;

http://git-wip-us.apache.org/repos/asf/juddi/blob/8b95902b/juddi-core/src/main/java/org/apache/juddi/model/CommunicationGraph.java
----------------------------------------------------------------------
diff --git a/juddi-core/src/main/java/org/apache/juddi/model/CommunicationGraph.java b/juddi-core/src/main/java/org/apache/juddi/model/CommunicationGraph.java
index e0251f1..b2ec7d0 100644
--- a/juddi-core/src/main/java/org/apache/juddi/model/CommunicationGraph.java
+++ b/juddi-core/src/main/java/org/apache/juddi/model/CommunicationGraph.java
@@ -26,9 +26,12 @@ import javax.persistence.CascadeType;
 import javax.persistence.Column;
 import javax.persistence.Entity;
 import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
 import javax.persistence.Id;
 import javax.persistence.OneToMany;
 import javax.persistence.Table;
+import javax.persistence.TableGenerator;
 
 @Entity
 @Table(name = "j3_chg_graph")
@@ -78,6 +81,13 @@ public class CommunicationGraph implements Serializable {
 
         @Id
         @Column(name = "j3_id")
+        @GeneratedValue(strategy = GenerationType.TABLE,
+             generator = "cfggrphGen")
+        @TableGenerator(name = "cfggrphGen",
+             table = "JPAGEN_CFGGRPH",
+             pkColumnName = "NAME",
+             pkColumnValue = "JPAGEN_PERSON_GEN",
+             valueColumnName = "VALUE")
         public Long getId() {
                 return id;
         }

http://git-wip-us.apache.org/repos/asf/juddi/blob/8b95902b/juddi-core/src/main/java/org/apache/juddi/model/Contact.java
----------------------------------------------------------------------
diff --git a/juddi-core/src/main/java/org/apache/juddi/model/Contact.java b/juddi-core/src/main/java/org/apache/juddi/model/Contact.java
index 8aa62f7..4f8b62d 100644
--- a/juddi-core/src/main/java/org/apache/juddi/model/Contact.java
+++ b/juddi-core/src/main/java/org/apache/juddi/model/Contact.java
@@ -77,7 +77,7 @@ public class Contact implements java.io.Serializable {
 	}
 
 	@ManyToOne(fetch = FetchType.LAZY)
-	@JoinColumn(name = "entity_key", nullable = false)
+	@JoinColumn(name = "entity_key", nullable = true)
 	public BusinessEntity getBusinessEntity() {
 		return this.businessEntity;
 	}

http://git-wip-us.apache.org/repos/asf/juddi/blob/8b95902b/juddi-core/src/main/java/org/apache/juddi/model/ControlMessage.java
----------------------------------------------------------------------
diff --git a/juddi-core/src/main/java/org/apache/juddi/model/ControlMessage.java b/juddi-core/src/main/java/org/apache/juddi/model/ControlMessage.java
index 2c5f10d..ce79b8f 100644
--- a/juddi-core/src/main/java/org/apache/juddi/model/ControlMessage.java
+++ b/juddi-core/src/main/java/org/apache/juddi/model/ControlMessage.java
@@ -29,6 +29,10 @@ import javax.persistence.Id;
 public class ControlMessage implements Serializable{
         private static final long serialVersionUID = 1L;
         
+        public ControlMessage(){}
+        public ControlMessage(String msg){
+                this.message = msg;
+        }
         
         private Long id;
 

http://git-wip-us.apache.org/repos/asf/juddi/blob/8b95902b/juddi-core/src/main/java/org/apache/juddi/model/Edge.java
----------------------------------------------------------------------
diff --git a/juddi-core/src/main/java/org/apache/juddi/model/Edge.java b/juddi-core/src/main/java/org/apache/juddi/model/Edge.java
index 63625ef..768bb23 100644
--- a/juddi-core/src/main/java/org/apache/juddi/model/Edge.java
+++ b/juddi-core/src/main/java/org/apache/juddi/model/Edge.java
@@ -36,18 +36,26 @@ import javax.persistence.Table;
 public class Edge {
 
         private Long id;
-        private Set<ReplicationMessage>  message;
+        private List<ControlMessage>  message;
         private Node messageSender;
         private Node messageReceiver;
         private Set<Node> messageReceiverAlternate;
         private CommunicationGraph parent;
 
+         /**
+         * link the parent object
+         * @param val 
+         */
         @OneToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY, targetEntity = CommunicationGraph.class)
         //@JoinColumn(name = "OWNER_ID")
         public CommunicationGraph getCommunicationGraph() {
                 return parent;
         }
 
+        /**
+         * link the parent object
+         * @param val 
+         */
         public void setCommunicationGraph(CommunicationGraph val) {
                 parent = val;
         }
@@ -56,14 +64,14 @@ public class Edge {
          * The message elements contain the local name of the Replication API message elements
          * @return 
          */
-        @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, targetEntity = ReplicationMessage.class)
-        public Set<ReplicationMessage> getMessages() {
+        @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, targetEntity = ControlMessage.class)
+        public List<ControlMessage> getMessages() {
                 if (message == null) {
-                        message = new HashSet<ReplicationMessage>();
+                        message = new ArrayList<ControlMessage>();
                 }
                 return this.message;
         }
-        public void setMessages(Set<ReplicationMessage>  values) {
+        public void setMessages(List<ControlMessage>  values) {
                 this.message = values;
         }
 
@@ -113,7 +121,7 @@ public class Edge {
                 return id;
         }
 
-        public void setMessage(Set<ReplicationMessage> message) {
+        public void setMessage(List<ControlMessage> message) {
                 this.message = message;
         }
 
@@ -121,9 +129,7 @@ public class Edge {
                 this.messageReceiverAlternate = messageReceiverAlternate;
         }
 
-        public void setParent(CommunicationGraph parent) {
-                this.parent = parent;
-        }
+     
 
         public void setId(Long id) {
                 this.id = id;

http://git-wip-us.apache.org/repos/asf/juddi/blob/8b95902b/juddi-core/src/main/java/org/apache/juddi/model/PublisherAssertion.java
----------------------------------------------------------------------
diff --git a/juddi-core/src/main/java/org/apache/juddi/model/PublisherAssertion.java b/juddi-core/src/main/java/org/apache/juddi/model/PublisherAssertion.java
index 82efe29..742c252 100644
--- a/juddi-core/src/main/java/org/apache/juddi/model/PublisherAssertion.java
+++ b/juddi-core/src/main/java/org/apache/juddi/model/PublisherAssertion.java
@@ -16,6 +16,7 @@ package org.apache.juddi.model;
  */
 
 import java.util.ArrayList;
+import java.util.Date;
 import java.util.List;
 import javax.persistence.AttributeOverride;
 import javax.persistence.AttributeOverrides;
@@ -29,11 +30,13 @@ import javax.persistence.ManyToOne;
 import javax.persistence.OneToMany;
 import javax.persistence.OrderBy;
 import javax.persistence.Table;
+import javax.persistence.Temporal;
+import javax.persistence.TemporalType;
 
 /**
  * @author <a href="mailto:kurt@apache.org">Kurt T Stam</a>
  */
-@Entity
+        @Entity
 @Table(name = "j3_publisher_assertion")
 public class PublisherAssertion implements java.io.Serializable {
 
@@ -46,6 +49,7 @@ public class PublisherAssertion implements java.io.Serializable {
 	private String keyValue;
 	private String fromCheck;
 	private String toCheck;
+	private Date modified;
 
 	public PublisherAssertion() {
 	}
@@ -63,6 +67,20 @@ public class PublisherAssertion implements java.io.Serializable {
 		this.fromCheck = fromCheck;
 		this.toCheck = toCheck;
 	}
+        
+	public void setModified(Date created) {
+		this.modified = created;
+	}
+	
+	@Temporal(TemporalType.TIMESTAMP)
+	@Column(name = "modified", nullable = false, length = 29)
+	public Date getModified() {
+		if (modified!=null) {
+			return new Date(modified.getTime());
+		} else {
+			return null;
+		}
+	}
 
 	@EmbeddedId
 	@AttributeOverrides({

http://git-wip-us.apache.org/repos/asf/juddi/blob/8b95902b/juddi-core/src/main/java/org/apache/juddi/model/ReplicationConfiguration.java
----------------------------------------------------------------------
diff --git a/juddi-core/src/main/java/org/apache/juddi/model/ReplicationConfiguration.java b/juddi-core/src/main/java/org/apache/juddi/model/ReplicationConfiguration.java
index 86e34c9..a481412 100644
--- a/juddi-core/src/main/java/org/apache/juddi/model/ReplicationConfiguration.java
+++ b/juddi-core/src/main/java/org/apache/juddi/model/ReplicationConfiguration.java
@@ -25,11 +25,14 @@ import javax.persistence.CascadeType;
 import javax.persistence.Column;
 import javax.persistence.Entity;
 import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
 import javax.persistence.Id;
 import javax.persistence.OneToMany;
 import javax.persistence.OneToOne;
 import javax.persistence.OrderBy;
 import javax.persistence.Table;
+import javax.persistence.TableGenerator;
 
 @Entity
 @Table(name = "j3_chg_replconf")
@@ -37,7 +40,7 @@ public class ReplicationConfiguration implements Serializable {
 
         private static final long serialVersionUID = 1L;
         
-        private long serialNumber;
+        private Long serialNumber;
         private String timeOfConfigurationUpdate;
         private List<Operator> operator = new ArrayList<Operator>(0);
         private CommunicationGraph communicationGraph;
@@ -73,8 +76,15 @@ public class ReplicationConfiguration implements Serializable {
          */
         @Column(name = "serialnumb")
         @OrderBy(value = "SerialNumber DESC")
-        @Id
-        public long getSerialNumber() {
+         @Id
+        @GeneratedValue(strategy = GenerationType.TABLE,
+             generator = "replcfgGen")
+        @TableGenerator(name = "replcfgGen",
+             table = "JPAGEN_REPLGEN",
+             pkColumnName = "NAME",
+             pkColumnValue = "JPAGEN_PERSON_GEN",
+             valueColumnName = "VALUE")
+        public Long getSerialNumber() {
                 return serialNumber;
         }
 
@@ -82,7 +92,7 @@ public class ReplicationConfiguration implements Serializable {
          * Sets the value of the serialNumber property.
          *
          */
-        public void setSerialNumber(long value) {
+        public void setSerialNumber(Long value) {
                 this.serialNumber = value;
         }
 

http://git-wip-us.apache.org/repos/asf/juddi/blob/8b95902b/juddi-core/src/main/java/org/apache/juddi/model/ReplicationMessage.java
----------------------------------------------------------------------
diff --git a/juddi-core/src/main/java/org/apache/juddi/model/ReplicationMessage.java b/juddi-core/src/main/java/org/apache/juddi/model/ReplicationMessage.java
deleted file mode 100644
index 35ca14e..0000000
--- a/juddi-core/src/main/java/org/apache/juddi/model/ReplicationMessage.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright 2013 The Apache Software Foundation.
- *
- * 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.juddi.model;
-
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.Id;
-
-/**
- *
- * @author Alex O'Ree
- */
-@Entity(name = "j3_repl_messages")
-public class ReplicationMessage {
-        
-        private Long id;
-        private String msg;
-
-        @Column(name ="j3_repl_message")
-        public String getMsg() {
-                return msg;
-        }
-
-        public void setMsg(String msg) {
-                this.msg = msg;
-        }
-
-        @Id
-        public Long getId() {
-                return id;
-        }
-
-        public void setId(Long id) {
-                this.id = id;
-        }
-
-}

http://git-wip-us.apache.org/repos/asf/juddi/blob/8b95902b/juddi-core/src/main/java/org/apache/juddi/replication/ChangeList.java
----------------------------------------------------------------------
diff --git a/juddi-core/src/main/java/org/apache/juddi/replication/ChangeList.java b/juddi-core/src/main/java/org/apache/juddi/replication/ChangeList.java
deleted file mode 100644
index 88d1b65..0000000
--- a/juddi-core/src/main/java/org/apache/juddi/replication/ChangeList.java
+++ /dev/null
@@ -1,26 +0,0 @@
-package org.apache.juddi.replication;
-
-import org.apache.juddi.subscription.*;
-import org.apache.commons.collections.buffer.CircularFifoBuffer;
-import org.apache.commons.collections.Buffer;
-import org.apache.commons.collections.BufferUtils;
-
-public class ChangeList<T>  {
-	private static ChangeList<String> nl = null;
-	private static Buffer list = null;
-	
-	private ChangeList() {	
-		list = BufferUtils.synchronizedBuffer(new CircularFifoBuffer(10));
-	}
-	
-	public static ChangeList<String> getInstance() {
-		if (nl == null) {
-			nl = new ChangeList<String>();
-		}
-		return nl;	
-	}
-	
-	public Buffer getNotifications() {
-		return list;
-	}
-}

http://git-wip-us.apache.org/repos/asf/juddi/blob/8b95902b/juddi-core/src/main/java/org/apache/juddi/replication/ReplicationNotifier.java
----------------------------------------------------------------------
diff --git a/juddi-core/src/main/java/org/apache/juddi/replication/ReplicationNotifier.java b/juddi-core/src/main/java/org/apache/juddi/replication/ReplicationNotifier.java
index 4a91348..15b16ab 100644
--- a/juddi-core/src/main/java/org/apache/juddi/replication/ReplicationNotifier.java
+++ b/juddi-core/src/main/java/org/apache/juddi/replication/ReplicationNotifier.java
@@ -26,8 +26,6 @@ import javax.persistence.EntityManager;
 import javax.persistence.EntityTransaction;
 import javax.persistence.Query;
 import javax.xml.ws.BindingProvider;
-
-
 import org.apache.commons.configuration.ConfigurationException;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
@@ -36,8 +34,8 @@ import org.apache.juddi.config.AppConfig;
 import org.apache.juddi.config.PersistenceManager;
 import org.apache.juddi.config.Property;
 import org.apache.juddi.mapping.MappingModelToApi;
+import org.apache.juddi.model.ChangeRecord;
 import org.apache.juddi.model.ReplicationConfiguration;
-
 import org.apache.juddi.v3.client.UDDIService;
 import org.uddi.repl_v3.ChangeRecordIDType;
 import org.uddi.repl_v3.CommunicationGraph;
@@ -46,17 +44,21 @@ import org.uddi.repl_v3.NotifyChangeRecordsAvailable;
 import org.uddi.v3_service.UDDIReplicationPortType;
 
 /**
- * 
+ * Handles when local records have been changed, change journal storage and
+ * notifications to all remote replication nodes that something has been
+ * altered.
+ *
  * @author <a href="mailto:alexoree@apache.org">Alex O'Ree</a>
  *
  */
 public class ReplicationNotifier extends TimerTask {
 
-        private Log log = LogFactory.getLog(this.getClass());
+        private static Log log = LogFactory.getLog(ReplicationNotifier.class);
         private Timer timer = null;
         private long startBuffer = AppConfig.getConfiguration().getLong(Property.JUDDI_NOTIFICATION_START_BUFFER, 20000l); // 20s startup delay default 
         private long interval = AppConfig.getConfiguration().getLong(Property.JUDDI_NOTIFICATION_INTERVAL, 300000l); //5 min default
         private long acceptableLagTime = AppConfig.getConfiguration().getLong(Property.JUDDI_NOTIFICATION_ACCEPTABLE_LAGTIME, 1000l); //1000 milliseconds
+        private static String node = null;
 
         /**
          * default constructor
@@ -70,6 +72,7 @@ public class ReplicationNotifier extends TimerTask {
                 if (queue == null) {
                         queue = new ConcurrentLinkedQueue();
                 }
+                node = AppConfig.getConfiguration().getString(Property.JUDDI_NODE_ID, "UNDEFINED_NODE_NAME");
         }
 
         @Override
@@ -80,13 +83,85 @@ public class ReplicationNotifier extends TimerTask {
         }
 
         //ReplicationNotifier.Enqueue(this);
-        public synchronized static void Enqueue(Object change) {
+        public synchronized static void Enqueue(org.apache.juddi.model.ChangeRecord change) {
                 if (queue == null) {
-                        queue = new ConcurrentLinkedQueue();
+                        queue = new ConcurrentLinkedQueue<ChangeRecord>();
                 }
                 queue.add(change);
         }
-        static Queue queue;
+        static Queue<ChangeRecord> queue;
+
+        /**
+         *
+         * @param j must be one of the UDDI save APIs
+         */
+        protected void ProcessChangeRecord(ChangeRecord j) {
+                //store and convert the changes to database model
+
+                EntityManager em = PersistenceManager.getEntityManager();
+                EntityTransaction tx = null;
+                try {
+                        tx = em.getTransaction();
+                        tx.begin();
+
+                        em.persist(j);
+                        tx.commit();
+                } catch (Exception ex) {
+                        log.error("error", ex);
+                        if (tx != null && tx.isActive()) {
+                                tx.rollback();
+                        }
+                } finally {
+                        em.close();
+                }
+
+                log.info("ChangeRecord: " + j.getId() + "," + j.getEntityKey() + "," + j.getNodeID() + "," + j.getOriginatingUSN() + "," + j.getRecordType().toString());
+                org.uddi.repl_v3.ReplicationConfiguration repcfg = FetchEdges();
+
+                //TODO figure out what this statement means 7.5.3
+                /**
+                 * In the absence of a communicationGraph element from the
+                 * Replication Configuration Structure, all nodes listed in the
+                 * node element MAY send any and all messages to any other node
+                 * of the registry.
+                 */
+                if (repcfg == null) {
+                        log.info("No replication configuration is defined!");
+                        return;
+
+                }
+                Iterator<CommunicationGraph.Edge> it = repcfg.getCommunicationGraph().getEdge().iterator();
+
+                while (it.hasNext()) {
+                        //send each change set to the replication node in the graph
+
+                        UDDIReplicationPortType x = new UDDIService().getUDDIReplicationPort();
+                        CommunicationGraph.Edge next = it.next();
+                        //next.getMessageReceiver(); //Node ID
+                        Node destinationNode = getNode(next.getMessageSender());
+                        if (destinationNode == null) {
+                                log.warn(next.getMessageSender() + " node was not found, cannot deliver replication messages");
+                        } else {
+                                //TODO the spec talks about control messages, should we even support it? seems pointless
+                                ((BindingProvider) x).getRequestContext().put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, destinationNode.getReplicationUrl());
+                                NotifyChangeRecordsAvailable req = new NotifyChangeRecordsAvailable();
+
+                                req.setNotifyingNode(node);
+                                HighWaterMarkVectorType highWaterMarkVectorType = new HighWaterMarkVectorType();
+                              
+                                highWaterMarkVectorType.getHighWaterMark().add(new ChangeRecordIDType(node, j.getId()));
+                                req.setChangesAvailable(highWaterMarkVectorType);
+
+                                try {
+                                        x.notifyChangeRecordsAvailable(req);
+                                        log.info("Successfully sent change record available message to " + destinationNode.getName());
+                                } catch (Exception ex) {
+                                        log.warn("Unable to send change notification to " + destinationNode.getName(), ex);
+                                }
+                        }
+                }
+
+        }
 
         public synchronized void run() {
                 log.debug("Replication thread triggered");
@@ -94,53 +169,22 @@ public class ReplicationNotifier extends TimerTask {
                         queue = new ConcurrentLinkedQueue();
                 }
                 while (!queue.isEmpty()) {
-                        log.info("Notifying nodes of change records " + queue.size());
-                        //TODO identify chnage set format
-                        Object j = queue.poll();
-                        org.uddi.repl_v3.ReplicationConfiguration repcfg = FetchEdges();
-                        if (repcfg == null) {
-                                log.debug("No replication configuration is defined!");
-                                queue.clear();
-                                break;
-                        }
-                        Iterator<CommunicationGraph.Edge> it = repcfg.getCommunicationGraph().getEdge().iterator();
-
-                        while (it.hasNext()) {
-
-                                //for (int i = 0; i < endpoints.size(); i++) {
-                                UDDIReplicationPortType x = new UDDIService().getUDDIReplicationPort();
-                                CommunicationGraph.Edge next = it.next();
-                                next.getMessageReceiver(); //Node ID
-                                Node destinationNode = getNode(next.getMessageSender());
-                                if (destinationNode == null) {
-                                        log.warn(next.getMessageSender() + " node was not found, cannot deliver replication messages");
-                                } else {
-                                        ((BindingProvider) x).getRequestContext().put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, destinationNode.getReplicationUrl());
-                                        NotifyChangeRecordsAvailable req = new NotifyChangeRecordsAvailable();
-                                        String node = "UNKNOWN";
-                                        try {
-                                                node = AppConfig.getConfiguration().getString(Property.JUDDI_NODE_ID);
-                                        } catch (ConfigurationException ex) {
-                                                log.fatal(ex);
-                                        }
-                                        req.setNotifyingNode(node);
-                                        HighWaterMarkVectorType highWaterMarkVectorType = new HighWaterMarkVectorType();
-                                        String nextWatermark = ""; //TODO get current watermark + 1 toString()
-                                        //TODO save watermark along with change set
-
-                                        highWaterMarkVectorType.getHighWaterMark().add(new ChangeRecordIDType(node, 1L));
-                                        req.setChangesAvailable(highWaterMarkVectorType);
-                                        try {
-                                                x.notifyChangeRecordsAvailable(req);
-                                        } catch (Exception ex) {
-                                                log.warn("Unable to send change notification to " + next.getMessageSender(), ex);
-                                        }
-                                }
-                        }
+                        //for each change at this node
+                        log.info("Replication, Notifying nodes of new change records. " + queue.size() + " remaining");
+
+                        ChangeRecord j = queue.poll();
+                        ProcessChangeRecord(j);
+
                 }
         }
 
-        private org.uddi.repl_v3.ReplicationConfiguration FetchEdges() {
+        /**
+         * returns the latest version of the replication config or null if there
+         * is no config
+         *
+         * @return
+         */
+        public static org.uddi.repl_v3.ReplicationConfiguration FetchEdges() {
 
                 EntityManager em = PersistenceManager.getEntityManager();
                 EntityTransaction tx = null;
@@ -173,7 +217,6 @@ public class ReplicationNotifier extends TimerTask {
         private Node getNode(String messageSender) {
                 EntityManager em = PersistenceManager.getEntityManager();
                 EntityTransaction tx = null;
-                org.uddi.repl_v3.ReplicationConfiguration item = new org.uddi.repl_v3.ReplicationConfiguration();
                 try {
                         tx = em.getTransaction();
                         tx.begin();


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@juddi.apache.org
For additional commands, e-mail: commits-help@juddi.apache.org