Equal inputs different outputs in Java

Asked

Viewed 71 times

0

I’m going through a problem I can’t visualize solution.

I’ll try to describe what I’m doing, it’s a lot of code files, so here’s the thing.

I’m combining access policies. I have a certain policy that has some properties like (organization, person to whom it applies etc.) these policies can be Obligation, Permission or Prohibition, so far so good. I draw these policies randomly where in the end I have a set of 48 policies.

It turns out that I pass these policies by my processing (which is to compare each one two to two so that it compares all) and at the end I see how many times the check was performed.

Only once a number comes out, and again others come out, even if I just pressed the Java button. I don’t know if it helps me to put the code. I think it’s a configuration in java. Someone knows what it might be?

The combination code is as follows::

public class CombinaPoliticas {

    public static int count = 1;

    public Set<Policie> combinaPoliticasForbidden(OWLOntology ontology) {

        /* COMBINAÇÃO ORGANIZAÇÕES ENTIDADES */

        Engine engine = new Engine(ontology);
        Set<String> origins = null;

        //List<Organizacao> organizacoes = engine.getOrganizationsObjects();    
        //List<Entidade> entidades = engine.getEntityObjects();
        //entidades.add(new Entidade(null));

        List<Organizacao> organizacoes = new ArrayList<Organizacao>();
        List<Entidade> entidades = new ArrayList<Entidade>();

        organizacoes.add(new Organizacao("Instituição"));
//      organizacoes.add(new Organizacao("Unidade_Administrativa"));

        entidades.add(new Entidade("null"));
        entidades.add(new Entidade("PROTOCOLIZADOR"));
        entidades.add(new Entidade("PROTOCOLIZADOR3"));
//      entidades.add(new Entidade("MARIA"));
//      entidades.add(new Entidade("JOSE"));

        List<Org_Entidade> organizacoesEntidades = new ArrayList<Org_Entidade>();
        Iterator iteratorOrg = organizacoes.iterator();

        while(iteratorOrg.hasNext()) {
            Organizacao org;
            org = (Organizacao) iteratorOrg.next();

            Iterator iteratorEnt = entidades.iterator();

            while(iteratorEnt.hasNext()) {
                Entidade ent;
                ent = (Entidade) iteratorEnt.next();

                organizacoesEntidades.add(new Org_Entidade(org, ent));

            }
        }

        /* COMBINAÇÃO OBJETOS E AÇÕES */

//      List<Objeto> objetos = engine.getObjects();
//      List<Acao> acoes = engine.getActionObjects();

        List<Objeto> objetos = new ArrayList<Objeto>();
        List<Acao> acoes = new ArrayList<Acao>();

        objetos.add(new Objeto("ProcNURCADesp"));
        objetos.add(new Objeto("Processo"));

//      acoes.add(new Acao("MovimentProcess"));
//      acoes.add(new Acao("Abrir"));
//      acoes.add(new Acao("Fechar"));
//      acoes.add(new Acao("Anular"));
//      acoes.add(new Acao("Criar"));
        acoes.add(new Acao("Movimentar"));
        acoes.add(new Acao("Acessar"));
        acoes.add(new Acao("Gravar"));
//      acoes.add(new Acao("Cancelar"));
        acoes.add(new Acao("Gerar"));
//      acoes.add(new Acao("Tramitar"));



        List<Obj_Acao> objetosAcoes = new ArrayList<Obj_Acao>();

        Iterator iteratorObj = objetos.iterator();

        while(iteratorObj.hasNext()) {
            Objeto obj;
            obj = (Objeto) iteratorObj.next();

            Iterator iteratorAcao = acoes.iterator();

            while(iteratorAcao.hasNext()) {
                Acao acao;
                acao = (Acao) iteratorAcao.next();

                objetosAcoes.add(new Obj_Acao(obj, acao));

            }
        }

        /* CRIAÇÃO DAS POLÍTICAS */

        Set<Policie> setOfPolicies = new LinkedHashSet<Policie>();

        Iterator orgsEntidadesIterator = organizacoesEntidades.iterator();

        while(orgsEntidadesIterator.hasNext()) {
            Org_Entidade orgEntidade = (Org_Entidade) orgsEntidadesIterator.next();

            Iterator objsAcoesIterator = objetosAcoes.iterator();

            while(objsAcoesIterator.hasNext()) {
                Obj_Acao objAcao = (Obj_Acao) objsAcoesIterator.next();

                origins = new LinkedHashSet<String>();

                setOfPolicies.add(new Policie("Policie"+count, "Forbidden", orgEntidade.getOrg().getOrganizacao(), orgEntidade.getEntidade().getEntidade(),
                        objAcao.getAcao().getAcao(), objAcao.getObjeto().getObjeto(), "2015-08-18T20:06:14^^DateTime", "2015-12-31T20:06:14^^DateTime", false, origins));
                count++;

            }

        }   


        System.out.println("Total de Políticas geradas: "+setOfPolicies.size()+"\n");

        for (Policie policie : setOfPolicies) {;
            System.out.println(policie);
        }


        return setOfPolicies;   
    }   

    public Set<Policie> combinaPoliticasPermitted(OWLOntology ontology) {

        /* COMBINAÇÃO ORGANIZAÇÕES ENTIDADES */

        Engine engine = new Engine(ontology);
        Set<String> origins = null;

        //List<Organizacao> organizacoes = engine.getOrganizationsObjects();    
        //List<Entidade> entidades = engine.getEntityObjects();
        //entidades.add(new Entidade(null));

        List<Organizacao> organizacoes = new ArrayList<Organizacao>();
        List<Entidade> entidades = new ArrayList<Entidade>();

//      organizacoes.add(new Organizacao("Instituição"));
        organizacoes.add(new Organizacao("Unidade_Administrativa"));

        entidades.add(new Entidade("null"));
//      entidades.add(new Entidade("PROTOCOLIZADOR"));
        entidades.add(new Entidade("PROTOCOLIZADOR3"));
//      entidades.add(new Entidade("PROTOCOLIZADOR2"));
//      entidades.add(new Entidade("MARIA"));
//      entidades.add(new Entidade("JOSE"));
//      entidades.add(new Entidade("Unidade_Administrativa"));

        List<Org_Entidade> organizacoesEntidades = new ArrayList<Org_Entidade>();
        Iterator iteratorOrg = organizacoes.iterator();

        while(iteratorOrg.hasNext()) {
            Organizacao org;
            org = (Organizacao) iteratorOrg.next();

            Iterator iteratorEnt = entidades.iterator();

            while(iteratorEnt.hasNext()) {
                Entidade ent;
                ent = (Entidade) iteratorEnt.next();

                organizacoesEntidades.add(new Org_Entidade(org, ent));

            }
        }

        /* COMBINAÇÃO OBJETOS E AÇÕES */

//      List<Objeto> objetos = engine.getObjects();
//      List<Acao> acoes = engine.getActionObjects();

        List<Objeto> objetos = new ArrayList<Objeto>();
        List<Acao> acoes = new ArrayList<Acao>();

        objetos.add(new Objeto("ProcessDespacho"));
        objetos.add(new Objeto("Processo"));


//      acoes.add(new Acao("MovimentProcess"));
//      acoes.add(new Acao("Abrir"));
        acoes.add(new Acao("Fechar"));
//      acoes.add(new Acao("Anular"));
        acoes.add(new Acao("Criar"));
//      acoes.add(new Acao("Movimentar"));
//      acoes.add(new Acao("Acessar"));
        acoes.add(new Acao("Gravar"));
//      acoes.add(new Acao("Cancelar"));
//      acoes.add(new Acao("Gerar"));
//      acoes.add(new Acao("Tramitar"));



        List<Obj_Acao> objetosAcoes = new ArrayList<Obj_Acao>();

        Iterator iteratorObj = objetos.iterator();

        while(iteratorObj.hasNext()) {
            Objeto obj;
            obj = (Objeto) iteratorObj.next();

            Iterator iteratorAcao = acoes.iterator();

            while(iteratorAcao.hasNext()) {
                Acao acao;
                acao = (Acao) iteratorAcao.next();

                objetosAcoes.add(new Obj_Acao(obj, acao));

            }
        }

        /* CRIAÇÃO DAS POLÍTICAS */

        Set<Policie> setOfPolicies = new LinkedHashSet<Policie>();

        Iterator orgsEntidadesIterator = organizacoesEntidades.iterator();

        while(orgsEntidadesIterator.hasNext()) {
            Org_Entidade orgEntidade = (Org_Entidade) orgsEntidadesIterator.next();

            Iterator objsAcoesIterator = objetosAcoes.iterator();

            while(objsAcoesIterator.hasNext()) {
                Obj_Acao objAcao = (Obj_Acao) objsAcoesIterator.next();

                origins = new LinkedHashSet<String>();

                setOfPolicies.add(new Policie("Policie"+count, "Permitted", orgEntidade.getOrg().getOrganizacao(), orgEntidade.getEntidade().getEntidade(),
                        objAcao.getAcao().getAcao(), objAcao.getObjeto().getObjeto(), "2015-08-18T20:06:14^^DateTime", "2015-12-31T20:06:14^^DateTime", false, origins));
                count++;

            }

        }   


        System.out.println("Total de Políticas geradas: "+setOfPolicies.size()+"\n");

        for (Policie policie : setOfPolicies) {;
            System.out.println(policie);
        }


        return setOfPolicies;   
    }   

    public Set<Policie> combinaPoliticasObliged(OWLOntology ontology) {

        /* COMBINAÇÃO ORGANIZAÇÕES ENTIDADES */

        Engine engine = new Engine(ontology);
        Set<String> origins = null;

        //List<Organizacao> organizacoes = engine.getOrganizationsObjects();    
        //List<Entidade> entidades = engine.getEntityObjects();
        //entidades.add(new Entidade(null));

        List<Organizacao> organizacoes = new ArrayList<Organizacao>();
        List<Entidade> entidades = new ArrayList<Entidade>();

        organizacoes.add(new Organizacao("Instituição"));
        organizacoes.add(new Organizacao("Unidade_Administrativa"));

        entidades.add(new Entidade("null"));
//      entidades.add(new Entidade("PROTOCOLIZADOR"));
        entidades.add(new Entidade("PROTOCOLIZADOR3"));
        entidades.add(new Entidade("MARIA"));
//      entidades.add(new Entidade("JOSE"));
//      entidades.add(new Entidade("Unidade_Administrativa"));

        List<Org_Entidade> organizacoesEntidades = new ArrayList<Org_Entidade>();
        Iterator iteratorOrg = organizacoes.iterator();

        while(iteratorOrg.hasNext()) {
            Organizacao org;
            org = (Organizacao) iteratorOrg.next();

            Iterator iteratorEnt = entidades.iterator();

            while(iteratorEnt.hasNext()) {
                Entidade ent;
                ent = (Entidade) iteratorEnt.next();

                organizacoesEntidades.add(new Org_Entidade(org, ent));

            }
        }

        /* COMBINAÇÃO OBJETOS E AÇÕES */

//      List<Objeto> objetos = engine.getObjects();
//      List<Acao> acoes = engine.getActionObjects();

        List<Objeto> objetos = new ArrayList<Objeto>();
        List<Acao> acoes = new ArrayList<Acao>();

//      objetos.add(new Objeto("ProcNURCADesp"));
        objetos.add(new Objeto("Processo"));


//      acoes.add(new Acao("MovimentProcess"));
        acoes.add(new Acao("Abrir"));
//      acoes.add(new Acao("Fechar"));
//      acoes.add(new Acao("Anular"));
//      acoes.add(new Acao("Criar"));
//      acoes.add(new Acao("Movimentar"));
        acoes.add(new Acao("Acessar"));
//      acoes.add(new Acao("Gravar"));
//      acoes.add(new Acao("Cancelar"));
//      acoes.add(new Acao("Gerar"));
//      acoes.add(new Acao("Tramitar"));



        List<Obj_Acao> objetosAcoes = new ArrayList<Obj_Acao>();

        Iterator iteratorObj = objetos.iterator();

        while(iteratorObj.hasNext()) {
            Objeto obj;
            obj = (Objeto) iteratorObj.next();

            Iterator iteratorAcao = acoes.iterator();

            while(iteratorAcao.hasNext()) {
                Acao acao;
                acao = (Acao) iteratorAcao.next();

                objetosAcoes.add(new Obj_Acao(obj, acao));

            }
        }

        /* CRIAÇÃO DAS POLÍTICAS */

        Set<Policie> setOfPolicies = new LinkedHashSet<Policie>();

        Iterator orgsEntidadesIterator = organizacoesEntidades.iterator();

        while(orgsEntidadesIterator.hasNext()) {
            Org_Entidade orgEntidade = (Org_Entidade) orgsEntidadesIterator.next();

            Iterator objsAcoesIterator = objetosAcoes.iterator();

            while(objsAcoesIterator.hasNext()) {
                Obj_Acao objAcao = (Obj_Acao) objsAcoesIterator.next();

                origins = new LinkedHashSet<String>();

                setOfPolicies.add(new Policie("Policie"+count, "Obliged", orgEntidade.getOrg().getOrganizacao(), orgEntidade.getEntidade().getEntidade(),
                        objAcao.getAcao().getAcao(), objAcao.getObjeto().getObjeto(), "2015-08-18T20:06:14^^DateTime", "2015-12-31T20:06:14^^DateTime", false, origins));
                count++;
//              
            }

        }   


        System.out.println("Total de Políticas geradas: "+setOfPolicies.size()+"\n");

        for (Policie policie : setOfPolicies) {;
            System.out.println(policie);
        }


        return setOfPolicies;   
    }   


}

I set first all the prohibitions, then all the permissions and then the obligations and put it all together like that:

Set<Policie> setOfPolicies = combina.combinaPoliticasForbidden(ontology);
        setOfPolicies.addAll(combina.combinaPoliticasPermitted(ontology));
        setOfPolicies.addAll(combina.combinaPoliticasObliged(ontology));

Does anyone know what it can be?

  • 1

    These problems usually happen because the code is doing a lot of things. So there is the difficulty of isolating the problem. When you make comments saying that "this part does such a thing" it is clear that it is doing too much. I am radical about this and I have a principle that is not shared by many people who say that if you skip a blank line, the method is doing a lot. Read: http://answall.com/q/81314/101. With cohesive methods it is harder to make mistakes and easier to find them.

  • Thanks @bigown! I gave a read, very interesting!

  • The error was because in a certain class I was using Hashset and not Linkedhashset as in the rest of the code. But now it worked. Thank you.

  • 1

    Answers and accepts the solution.

1 answer

0

My code has two steps.

1 - Propagation

2 - Verification

It turned out that in propagation I was creating Set as Hashset, and each time it propagated in a different way... Already in the check I was using Linkedhashset, and then it came each time in a different way. The solution was to put Linkedhashset (which maintains the order of the elements) in all two steps.

Browser other questions tagged

You are not signed in. Login or sign up in order to post.