All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.github.osvaldopina.signedcontract.enforcer.jsonhal.HalDocumentErrorPrintWalker Maven / Gradle / Ivy

There is a newer version: 0.0.5
Show newest version
package com.github.osvaldopina.signedcontract.enforcer.jsonhal;

import com.damnhandy.uri.template.UriTemplate;
import com.github.osvaldopina.signedcontract.enforcer.BranchClause;
import com.github.osvaldopina.signedcontract.enforcer.Clause;
import com.github.osvaldopina.signedcontract.enforcer.EnforcementError;
import com.github.osvaldopina.signedcontract.enforcer.uritemplate.UriTemplatedVariableClauseEnforcer;
import com.github.osvaldopina.signedcontract.enforcer.walker.ClauseWalker;

import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class HalDocumentErrorPrintWalker implements ClauseWalker {

    private PrintWriter printWriter;


    public HalDocumentErrorPrintWalker(PrintWriter printWriter) {
        this.printWriter = printWriter;
    }


    @Override
    public void walk(Clause clause) {
        walk(clause, 0, printWriter);
    }

    private void walk(Clause clause, int level, PrintWriter printWriter) {
        for (String str : getClauseStringRepresentation(clause)) {
            printWriter.print(levelPad(level));
            printWriter.print(str);
            printWriter.print("\n");
        }
        if (clause instanceof BranchClause) {
            BranchClause branchClause = (BranchClause) clause;
            for (Clause subClause : branchClause.getSubClauses()) {
                walk(subClause, level + 1, printWriter);
            }
        }
    }

    private String levelPad(int level) {
        StringBuilder tmp = new StringBuilder();

        for (int i = 0; i < level; i++) {
            tmp.append("   ");
        }

        return tmp.toString();
    }

    private List getClauseStringRepresentation(Clause clause) {
        if (clause.getEnforcer() instanceof HalDocumentClauseEnforcer) {
            return Arrays.asList("hal document");
        } else if (clause.getEnforcer() instanceof HalResourceClauseEnforcer) {
            return Arrays.asList("resource");
        } else if (clause.getEnforcer() instanceof HalLinkListClauseEnforcer) {
            if (clause.getErrors().isEmpty()) {
                return Arrays.asList("links");
            } else {
                return getErrorListAsString(clause);
            }
        } else if (clause.getEnforcer() instanceof HalEmbeddedListClauseEnforcer) {
            if (clause.getErrors().isEmpty()) {
                return Arrays.asList("embedded");
            } else {
                return getErrorListAsString(clause);
            }
        } else if (clause.getEnforcer() instanceof HalLinkFindByRelClauseEnforcer) {
            if (clause.getErrors().isEmpty()) {
                return Arrays.asList("link [" + ((HalLinkFindByRelClauseEnforcer) clause.getEnforcer()).getRel() + "]");
            } else {
                return getErrorListAsString(clause);
            }
        } else if (clause.getEnforcer() instanceof HalEmbeddedResourceClauseEnforcer) {
            if (clause.getErrors().isEmpty()) {
                return Arrays.asList("embedded [" + ((HalEmbeddedResourceClauseEnforcer) clause.getEnforcer()).getRel() + "]");
            } else {
                return getErrorListAsString(clause);
            }
        } else if (clause.getEnforcer() instanceof HalEmbeddedArrayClauseEnforcer) {
            if (clause.getErrors().isEmpty()) {
                return Arrays.asList("embedded [" + ((HalEmbeddedArrayClauseEnforcer) clause.getEnforcer()).getRel() + "]");
            } else {
                return getErrorListAsString(clause);
            }
        } else if (clause.getEnforcer() instanceof HalEmbeddedArrayItemClauseEnforcer) {
            if (clause.getErrors().isEmpty()) {
                return Arrays.asList("[" + ((HalEmbeddedArrayItemClauseEnforcer) clause.getEnforcer()).getIndex() + "]");
            } else {
                return getErrorListAsString(clause);
            }
        } else if (clause.getEnforcer() instanceof HalLinkTemplatedUriClauseEnforcer) {
            UriTemplate uriTemplate = (UriTemplate) ((BranchClause) clause).getSubClauses().get(0).getDocumentClause();
            return Arrays.asList("uri template [" + uriTemplate.getTemplate() + "]");
        } else if (clause.getEnforcer() instanceof UriTemplatedVariableClauseEnforcer) {
            if (clause.getErrors().isEmpty()) {
                return Arrays.asList("variable [" + ((UriTemplatedVariableClauseEnforcer) clause.getEnforcer()).getVariableName() + "]");
            }
            else {
                return getErrorListAsString(clause);
            }

        } else {
            return getErrorListAsString(clause);
        }
    }

    private List getErrorListAsString(Clause clause) {
        List errors = new ArrayList();
        for (EnforcementError enforcementError : clause.getErrors()) {
            errors.add(enforcementError.toString());
        }
        return errors;
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy