private void compile(final PartnerLink plink) {
OPartnerLink oplink = new OPartnerLink(_oprocess);
oplink.debugInfo = createDebugInfo(plink, plink.toString());
try {
PartnerLinkType plinkType = resolvePartnerLinkType(plink.getPartnerLinkType());
oplink.partnerLinkType = plinkType.getName();
oplink.name = plink.getName();
oplink.initializePartnerRole = plink.isInitializePartnerRole();
if (plink.hasMyRole()) {
PartnerLinkType.Role myRole = plinkType.getRole(plink.getMyRole());
if (myRole == null)
throw new CompilationException(__cmsgs.errUndeclaredRole(plink.getMyRole(), plinkType.getName()));
oplink.myRoleName = myRole.getName();
QName portType = myRole.getPortType();
if (portType == null)
throw new CompilationException(__cmsgs.errMissingMyRolePortType(myRole.getPortType(), plink.getMyRole(), plinkType.getName()));
oplink.myRolePortType = resolvePortType(portType);
}
if (plink.isInitializePartnerRole() && !plink.hasPartnerRole()) {
throw new CompilationException(__cmsgs.errPartnerLinkNoPartnerRoleButInitialize(plink.getName()));
}
if (plink.hasPartnerRole()) {
PartnerLinkType.Role partnerRole = plinkType.getRole(plink.getPartnerRole());
if (partnerRole == null)
throw new CompilationException(__cmsgs.errUndeclaredRole(plink.getPartnerRole(), plinkType
.getName()));
oplink.partnerRoleName = partnerRole.getName();
QName portType = partnerRole.getPortType();
if (portType == null)
throw new CompilationException(__cmsgs.errMissingPartnerRolePortType(partnerRole.getPortType(), plink.getPartnerRole(), plinkType.getName()));
oplink.partnerRolePortType = resolvePortType(portType);
}
oplink.declaringScope = _structureStack.topScope();
if (oplink.declaringScope.partnerLinks.containsKey(oplink.name))