package org.jboss.metadata;
import org.w3c.dom.Element;
import org.jboss.deployment.DeploymentException;
public class RelationshipRoleMetaData extends MetaData {
private static int ONE = 1;
private static int MANY = 2;
private String relationshipRoleName;
private RelationMetaData relationMetaData;
private int multiplicity;
private boolean cascadeDelete;
private String entityName;
private String cmrFieldName;
private String cmrFieldType;
public RelationshipRoleMetaData(RelationMetaData relationMetaData) {
this.relationMetaData = relationMetaData;
}
public String getRelationshipRoleName() {
return relationshipRoleName;
}
public RelationMetaData getRelationMetaData() {
return relationMetaData;
}
public RelationshipRoleMetaData getRelatedRoleMetaData() {
return relationMetaData.getOtherRelationshipRole(this);
}
public boolean isMultiplicityOne() {
return multiplicity == ONE;
}
public boolean isMultiplicityMany() {
return multiplicity == MANY;
}
public boolean isCascadeDelete() {
return cascadeDelete;
}
public String getEntityName() {
return entityName;
}
public String getCMRFieldName() {
return cmrFieldName;
}
public String getCMRFieldType() {
return cmrFieldType;
}
public void importEjbJarXml (Element element) throws DeploymentException {
relationshipRoleName =
getOptionalChildContent(element, "ejb-relationship-role-name");
String multiplicityString =
getUniqueChildContent(element, "multiplicity");
if("One".equals(multiplicityString)) {
multiplicity = ONE;
} else if("Many".equals(multiplicityString)) {
multiplicity = MANY;
} else {
throw new DeploymentException("multiplicity must be exactaly 'One' " +
"or 'Many' but is " + multiplicityString + "; this is case " +
"sensitive");
}
if(getOptionalChild(element, "cascade-delete") != null) {
cascadeDelete = true;
}
Element relationshipRoleSourceElement =
getUniqueChild(element, "relationship-role-source");
entityName =
getUniqueChildContent(relationshipRoleSourceElement, "ejb-name");
Element cmrFieldElement = getOptionalChild(element, "cmr-field");
if(cmrFieldElement != null) {
cmrFieldName =
getUniqueChildContent(cmrFieldElement, "cmr-field-name");
cmrFieldType =
getOptionalChildContent(cmrFieldElement, "cmr-field-type");
if(cmrFieldType != null &&
!cmrFieldType.equals("java.util.Collection") &&
!cmrFieldType.equals("java.util.Set")) {
throw new DeploymentException("cmr-field-type should be " +
"java.util.Collection or java.util.Set but is " +
cmrFieldType);
}
}
if(relationshipRoleName == null)
{
relationshipRoleName = entityName + (cmrFieldName == null ? "" : "_" + cmrFieldName);
}
}
}