*/
public void merge(JBossClientMetaData jboss, ApplicationClientMetaData spec, boolean mustOverride)
{
super.merge(jboss, spec);
RemoteEnvironmentRefsGroupMetaData jbossEnv = null;
RemoteEnvironmentRefsGroupMetaData specEnv = null;
MessageDestinationsMetaData jbossMsgs = null;
MessageDestinationsMetaData specMsgs = null;
if(jboss != null)
{
if(jboss.depends != null)
setDepends(jboss.depends);
if(jboss.jndiName != null)
this.setJndiName(jboss.jndiName);
else if(jboss.getDescriptionGroup() != null && jboss.getDescriptionGroup().getDisplayName() != null)
this.setJndiName(jboss.getDescriptionGroup().getDisplayName());
if(jboss.dtdPublicId != null)
this.dtdPublicId = jboss.dtdPublicId;
if(jboss.dtdSystemId != null)
this.dtdSystemId = jboss.dtdSystemId;
if(jboss.version != null)
this.version = jboss.version;
jbossEnv = jboss.jndiEnvironmentRefsGroup;
jbossMsgs = jboss.getMessageDestinations();
}
if(spec != null)
{
specEnv = spec.getJndiEnvironmentRefsGroup();
specMsgs = spec.getMessageDestinations();
if(jndiName == null && spec.getDescriptionGroup() != null && spec.getDescriptionGroup().getDisplayName() != null)
setJndiName(spec.getDescriptionGroup().getDisplayName());
metaDataComplete = spec.isMetadataComplete();
specMsgs = spec.getMessageDestinations();
}
if(jboss != null && jboss.callbackHandler != null)
this.setCallbackHandler(jboss.callbackHandler);
else if(spec != null && spec.getCallbackHandler() != null)
this.setCallbackHandler(spec.getCallbackHandler());
if(jndiEnvironmentRefsGroup == null)
jndiEnvironmentRefsGroup = new JBossEnvironmentRefsGroupMetaData();
jndiEnvironmentRefsGroup.merge(jbossEnv, specEnv, "jboss-client.xml", "application-client.xml", false);
// Get the merged resource-env-refs
ResourceEnvironmentReferencesMetaData resEnvRefs = jndiEnvironmentRefsGroup.getResourceEnvironmentReferences();
// Merge the message-destinations
messageDestinations = MessageDestinationsMetaData.merge(jbossMsgs, specMsgs, "jboss-client.xml", "application-client.xml");
/* Need to map message-destinations to resource-env-refs for legacy
* descriptors that did not have message-destinations
*/
if(messageDestinations != null && resEnvRefs != null)
{
for(MessageDestinationMetaData md : messageDestinations)
{
if(md.getMappedName() == null)
{
ResourceEnvironmentReferenceMetaData ref = resEnvRefs.get(md.getMessageDestinationName());
if(ref != null)
md.setMappedName(ref.getMappedName());
}
}
}
/** A HashMap<String, ArrayList<MessageDestinationReferenceMetaData>> of
* message-destination-ref that resolve to a jndi-name via a message-destination
* via a message-destination-link
*/
HashMap<String, ArrayList<MessageDestinationReferenceMetaData>> resourceEnvReferenceLinks
= new HashMap<String, ArrayList<MessageDestinationReferenceMetaData>>();
/* Merge the message-destination-ref elements
This is a bit convoluted because legacy jboss descriptors did not support
message-destination-ref elements.
A message-destination-ref is linked to a jndi-name either via
the message-destination-ref/message-destination-ref-name mapping to
a jboss resource-env-ref/resource-env-ref-name if there is no
message-destination-link, or by the message-destination-link ->
message-destination/message-destination-name mapping to a jboss
resource-env-ref/resource-env-ref-name.
*/
if(specEnv != null)
{
ResourceEnvironmentReferencesMetaData specEnvRefs = specEnv.getResourceEnvironmentReferences();
MessageDestinationReferencesMetaData specMsgRefs = specEnv.getMessageDestinationReferences();
MessageDestinationReferencesMetaData msgRefs = jndiEnvironmentRefsGroup.getMessageDestinationReferences();
if(msgRefs == null)
{
msgRefs = new MessageDestinationReferencesMetaData();
jndiEnvironmentRefsGroup.setMessageDestinationReferences(msgRefs);