businessService.setBusinessKey(parentKey);
}
// Make sure publisher owns this entity.
if (!publisher.isOwner((UddiEntity) obj)) {
throw new UserMismatchException(new ErrorMessage("errors.usermismatch.InvalidOwner", entityKey));
}
// If existing service trying to be saved has a different parent key, then we have a problem
if (!parentKey.equalsIgnoreCase(bs.getBusinessEntity().getEntityKey())) {
// if both businesses are owned by this publisher then we allow it.
// we already check the current business is owned, lets see if the old one is too
if (!publisher.isOwner(bs.getBusinessEntity())) {
throw new InvalidKeyPassedException(new ErrorMessage("errors.invalidkey.businessservice.ParentMismatch", parentKey + ", " + bs.getBusinessEntity().getEntityKey()));
} else {
if (log.isDebugEnabled()) {
log.debug("Services moved from business " + bs.getBusinessEntity() + " to " + businessService.getBusinessKey());
}
}
}
} else {
// Inside this block, we have a key proposed by the publisher on a new entity
// Validate key and then check to see that the proposed key is valid for this publisher
ValidateUDDIKey.validateUDDIv3Key(entityKey);
if (!publisher.isValidPublisherKey(em, entityKey)) {
throw new KeyUnavailableException(new ErrorMessage("errors.keyunavailable.BadPartition", entityKey));
}
}
}
// Parent key must be passed if this is a new entity
if (!entityExists) {
if (parentKey == null || parentKey.length() == 0) {
throw new InvalidKeyPassedException(new ErrorMessage("errors.invalidkey.ParentBusinessNotFound", parentKey));
}
}
// If parent key IS passed, whether new entity or not, it must be valid. Additionally, the current publisher must be the owner of the parent. Note that
// if a parent ENTITY was passed in, then we don't need to check for any of this since this is part of a higher call.
if (parentKey != null) {
if (parent == null) {
Object parentTemp = em.find(org.apache.juddi.model.BusinessEntity.class, parentKey);
if (parentTemp == null) {
throw new InvalidKeyPassedException(new ErrorMessage("errors.invalidkey.ParentBusinessNotFound", parentKey));
}
// Make sure publisher owns this parent entity.
if (!publisher.isOwner((UddiEntity) parentTemp)) {
throw new UserMismatchException(new ErrorMessage("errors.usermismatch.InvalidOwnerParent", parentKey));
}
}
}
if (!entityExists) {