Skip to content

Commit da8d967

Browse files
committed
cleanup LdapMetadataListener
1 parent 8ebf356 commit da8d967

File tree

1 file changed

+63
-42
lines changed

1 file changed

+63
-42
lines changed

lightblue-ldap-crud/src/main/java/com/redhat/lightblue/crud/ldap/LdapMetadataListener.java

Lines changed: 63 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,16 @@ public void beforeUpdateEntityInfo(Metadata m, EntityInfo ei, boolean newEntity)
5252
//Do Nothing!!
5353
}
5454

55+
@Override
56+
public void afterUpdateEntityInfo(Metadata m, EntityInfo ei, boolean newEntity) {
57+
//Do Nothing!!
58+
}
59+
60+
@Override
61+
public void afterCreateNewSchema(Metadata m, EntityMetadata md) {
62+
//Do Nothing!!
63+
}
64+
5565
/**
5666
* Ensure that dn and objectClass are on the entity.
5767
*/
@@ -60,51 +70,72 @@ public void beforeCreateNewSchema(Metadata m, EntityMetadata md) {
6070
LdapFieldNameTranslator ldapNameTranslator = LdapCrudUtil.getLdapFieldNameTranslator(md);
6171
//TODO: check for array index or Path.any
6272

63-
Path dnFieldPath = ldapNameTranslator.translateAttributeName(LdapConstant.ATTRIBUTE_DN);
73+
ensureDnField(md, ldapNameTranslator.translateAttributeName(LdapConstant.ATTRIBUTE_DN));
74+
75+
Path objectClassFieldPath = ensureObjectClassField(md,
76+
ldapNameTranslator.translateAttributeName(LdapConstant.ATTRIBUTE_OBJECT_CLASS));
77+
78+
ensureObjectClassCountField(md,
79+
objectClassFieldPath.mutableCopy().pop().push(LightblueUtil.createArrayCountFieldName(objectClassFieldPath.getLast())));
80+
}
81+
82+
/**
83+
* Ensures the objectClass count field is present on the entity. If not, then it will added. If so, but
84+
* is defined incorrectly, then an {@link Error} will be thrown.
85+
*/
86+
private void ensureObjectClassCountField(EntityMetadata md, Path objectClassCountFieldPath) {
87+
FieldTreeNode objectClassCountNode;
6488
try{
65-
FieldTreeNode dnNode = md.resolve(dnFieldPath);
66-
if((!(dnNode instanceof SimpleField)) || (!(dnNode.getType() instanceof StringType))){
67-
throw Error.get(MetadataConstants.ERR_FIELD_WRONG_TYPE, dnNode.getFullPath().toString());
68-
}
89+
objectClassCountNode = md.resolve(objectClassCountFieldPath);
6990
}
7091
catch(Error e){
71-
if(e.getErrorCode().equals(MetadataConstants.ERR_FIELD_WRONG_TYPE)){
72-
throw e;
73-
}
74-
addFieldToParent(md, dnFieldPath, new SimpleField(dnFieldPath.getLast(), StringType.TYPE));
92+
addFieldToParent(md, objectClassCountFieldPath,
93+
(Field)(objectClassCountNode = new SimpleField(objectClassCountFieldPath.getLast(), IntegerType.TYPE)));
94+
}
95+
if((!(objectClassCountNode instanceof SimpleField)) || (!(objectClassCountNode.getType() instanceof IntegerType))){
96+
throw Error.get(MetadataConstants.ERR_FIELD_WRONG_TYPE, objectClassCountNode.getFullPath().toString());
7597
}
98+
}
7699

77-
Path objectClassFieldPath = ldapNameTranslator.translateAttributeName(LdapConstant.ATTRIBUTE_OBJECT_CLASS);
100+
/**
101+
* Ensures the objectClass field is present on the entity. If not, then it will added. If so, but
102+
* is defined incorrectly, then an {@link Error} will be thrown.
103+
*/
104+
private Path ensureObjectClassField(EntityMetadata md, Path objectClassFieldPath) {
105+
FieldTreeNode objectClassNode;
78106
try{
79-
FieldTreeNode objectClassNode = md.resolve(objectClassFieldPath);
80-
if(!(objectClassNode instanceof ArrayField)){
81-
throw Error.get(MetadataConstants.ERR_FIELD_WRONG_TYPE, objectClassNode.getFullPath().toString());
82-
}
83-
ArrayField objectClassField = (ArrayField) objectClassNode;
84-
ArrayElement arrayElement = objectClassField.getElement();
85-
if((!(arrayElement instanceof SimpleArrayElement)) || (!(arrayElement.getType() instanceof StringType))){
86-
throw Error.get(MetadataConstants.ERR_FIELD_WRONG_TYPE, objectClassField.getFullPath().toString());
87-
}
107+
objectClassNode = md.resolve(objectClassFieldPath);
88108
}
89109
catch(Error e){
90-
if(e.getErrorCode().equals(MetadataConstants.ERR_FIELD_WRONG_TYPE)){
91-
throw e;
92-
}
93-
addFieldToParent(md, objectClassFieldPath, new ArrayField(objectClassFieldPath.getLast(), new SimpleArrayElement(StringType.TYPE)));
110+
addFieldToParent(md, objectClassFieldPath,
111+
(Field) (objectClassNode = new ArrayField(objectClassFieldPath.getLast(), new SimpleArrayElement(StringType.TYPE))));
94112
}
113+
if(!(objectClassNode instanceof ArrayField)){
114+
throw Error.get(MetadataConstants.ERR_FIELD_WRONG_TYPE, objectClassNode.getFullPath().toString());
115+
}
116+
ArrayField objectClassField = (ArrayField) objectClassNode;
117+
ArrayElement arrayElement = objectClassField.getElement();
118+
if((!(arrayElement instanceof SimpleArrayElement)) || (!(arrayElement.getType() instanceof StringType))){
119+
throw Error.get(MetadataConstants.ERR_FIELD_WRONG_TYPE, objectClassField.getFullPath().toString());
120+
}
121+
return objectClassFieldPath;
122+
}
95123

96-
Path objectClassCountFieldPath = objectClassFieldPath.mutableCopy().pop().push(LightblueUtil.createArrayCountFieldName(objectClassFieldPath.getLast()));
124+
/**
125+
* Ensures the dn field is present on the entity. If not, then it will added. If so, but
126+
* is defined incorrectly, then an {@link Error} will be thrown.
127+
*/
128+
private void ensureDnField(EntityMetadata md, Path dnFieldPath) {
129+
FieldTreeNode dnNode;
97130
try{
98-
FieldTreeNode objectClassCountNode = md.resolve(objectClassCountFieldPath);
99-
if((!(objectClassCountNode instanceof SimpleField)) || (!(objectClassCountNode.getType() instanceof IntegerType))){
100-
throw Error.get(MetadataConstants.ERR_FIELD_WRONG_TYPE, objectClassCountNode.getFullPath().toString());
101-
}
131+
dnNode = md.resolve(dnFieldPath);
102132
}
103133
catch(Error e){
104-
if(e.getErrorCode().equals(MetadataConstants.ERR_FIELD_WRONG_TYPE)){
105-
throw e;
106-
}
107-
addFieldToParent(md, objectClassCountFieldPath, new SimpleField(objectClassCountFieldPath.getLast(), IntegerType.TYPE));
134+
addFieldToParent(md, dnFieldPath,
135+
(Field)(dnNode = new SimpleField(dnFieldPath.getLast(), StringType.TYPE)));
136+
}
137+
if((!(dnNode instanceof SimpleField)) || (!(dnNode.getType() instanceof StringType))){
138+
throw Error.get(MetadataConstants.ERR_FIELD_WRONG_TYPE, dnNode.getFullPath().toString());
108139
}
109140
}
110141

@@ -137,14 +168,4 @@ else if (parent instanceof ObjectArrayElement){
137168
fields.addNew(newField);
138169
}
139170

140-
@Override
141-
public void afterUpdateEntityInfo(Metadata m, EntityInfo ei, boolean newEntity) {
142-
//Do Nothing!!
143-
}
144-
145-
@Override
146-
public void afterCreateNewSchema(Metadata m, EntityMetadata md) {
147-
//Do Nothing!!
148-
}
149-
150171
}

0 commit comments

Comments
 (0)