mercredi 17 mars 2021

Cleaner way for if-else condition

I have a method having multiple if-else conditions (which is growing with each new msg-type support)

public Message<?> doTransform(Message<String> message) throws TransformationException {
        
        try {
            MessageBuilder<String> messageBuilder = null;
            String payload = message.getPayload();
            String payloadSubStr = payload.substring(0, Math.min(payload.length(), 100));
            
            
            if(payloadSubStr.contains("<Management>")){
                messageBuilder = buildManagementMsg(message);
            } else if (payloadSubStr.contains("<Administration>") || (payloadSubStr.contains("<OtherAdministationAlert>"))){
                messageBuilder = buildAdminMessages(message);
            } else if (payloadSubStr.startsWith("Council")){
                messageBuilder = parseCouncilMessages(message);
            } else if (payloadSubStr.indexOf("Security") >= 0
                    ||  payloadSubStr.indexOf("OtherSecurityAlert") >= 0){
                messageBuilder = buildSecurityMessages(message);
            } else if ( payloadSubStr.indexOf("<Staff>") >= 0
                    ||  payloadSubStr.indexOf("<OtherStaffAlert>") >= 0){
                messageBuilder = buildStaffMessages(message);
            } else if(payloadSubStr.indexOf("<Student>") >= 0) {
                messageBuilder = buildStudentMessages(message);
            }else {
                messageBuilder = buildOtherMessages(message);
            }
            
            return messageBuilder.build();
            
        } catch(Exception e) {
            throw new TransformationException(e);
        }
    }
  1. Reason for doing substring: To avoid complete msg traversing with each if/else condition
  2. Reason for using contains/indexOf combination: Messages received by this method can vary

Wanted to replace these if/else statements with some more cleaner logic. Not getting if Switch/Enum can be used or need to use any pattern as suggested over https://www.baeldung.com/java-replace-if-statements. Gone through various similar questions available but not getting anything. Any suggestion will be helpful.

Thanks

Aucun commentaire:

Enregistrer un commentaire