}
if (parent != null) {
if (parentKey != null && parentKey.length() > 0) {
if (!parentKey.equalsIgnoreCase(parent.getServiceKey())) {
throw new InvalidKeyPassedException(new ErrorMessage("errors.invalidkey.bindingtemplate.ParentMismatch", parentKey + ", " + parent.getBusinessKey()));
}
} else {
parentKey = parent.getServiceKey();
}
}
boolean entityExists = false;
if (entityKey == null || entityKey.length() == 0) {
validateNotSigned(bindingTemplate);
KeyGenerator keyGen = KeyGeneratorFactory.getKeyGenerator();
entityKey = keyGen.generate();
bindingTemplate.setBindingKey(entityKey);
} else {
Object obj = em.find(org.apache.juddi.model.BindingTemplate.class, entityKey);
if (obj != null) {
entityExists = true;
org.apache.juddi.model.BindingTemplate bt = (org.apache.juddi.model.BindingTemplate) obj;
// If the object exists, and the parentKey was not found to this point, then a save on an existing binding with a blank
// service key has occurred. It is set here and added to the entity being saved - a necessary step for the object to be
// persisted properly. (This condition makes some validation tests below unnecessary as the parent is "verified" but it's OK to
// still run them).
if (parentKey == null || parentKey.length() == 0) {
parentKey = bt.getBusinessService().getEntityKey();
bindingTemplate.setServiceKey(parentKey);
}
// If existing binding trying to be saved has a different parent key, then we have a problem
// TODO: moving bindings is allowed according to spec?
if (!parentKey.equalsIgnoreCase(bt.getBusinessService().getEntityKey())) {
throw new InvalidKeyPassedException(new ErrorMessage("errors.invalidkey.bindingtemplate.ParentMismatch", parentKey + ", " + bt.getBusinessService().getEntityKey()));
}
// Make sure publisher owns this entity.
AccessCheck(obj, entityKey);
//if (!publisher.isOwner((UddiEntity) obj)&& !((Publisher) publisher).isAdmin()) {
// throw new UserMismatchException(new ErrorMessage("errors.usermismatch.InvalidOwner", entityKey));
// }
} 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.ParentServiceNotFound", 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.BusinessService.class, parentKey);
if (parentTemp == null) {
throw new InvalidKeyPassedException(new ErrorMessage("errors.invalidkey.ParentBusinessNotFound", parentKey));
}
// Make sure publisher owns this parent entity.
AccessCheck(parentTemp, parentKey);
// if (!publisher.isOwner((UddiEntity) parentTemp)) {