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?
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.
– Maniero
Thanks @bigown! I gave a read, very interesting!
– João Neto
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.
– João Neto
Answers and accepts the solution.
– Maniero