[RESOLVIDO] Herança da classe de framework

1 resposta
N
Saudações colegas do GUJ. Uso spring + jpa(hibernate) + JSF2 + primefaces + activiti; Estou desenvolvendo tarefas e rotinas e modelando interface através do activiti, pra quem não conhece: http://activiti.org/ Meu maior problema é desenhar interfaces, pois é o ponto fraco do activiti, mas com uma integração com o JSF2 e algumas implementações e extensões de classes do activiti, consigo facilmente montar interfaces. O problema ocorre quando preciso usar tipos de formulários mais complexos, por exemplo, uma lista de empresas associadas (dinamicamente), o activiti possui poucos tipos para recuperar valores da interface. Ex.: activiti possui: 'enum' (estatico definido no proprio diagrama), long, string, boolean. O tratamento para estes é feito dentro de uma classe do activiti framework, está em hardcoded, ex.:
if(tipo_recuperado == 'enum'){ montaMap() }else if(tipo_recuperado == 'string'){atrbuirvalorstring();}

Preciso customizar esta classe, para poder adicionar outros tipos neste 'if'. A classe é usada dentro do próprio worklfow por outras classes, a classe que eu quero estender em questão é esta:

/* Licensed under the Apache License, Version 2.0 (the "License");

package org.activiti.engine.impl.form;

import java.util.HashMap;
import java.util.Map;

import org.activiti.engine.impl.bpmn.parser.BpmnParse;
import org.activiti.engine.impl.bpmn.parser.BpmnParser;
import org.activiti.engine.impl.util.xml.Element;


/**
 * @author Tom Baeyens
 */
public class FormTypes {

  protected Map<String, AbstractFormType> formTypes = new HashMap<String, AbstractFormType>();

  public void addFormType(AbstractFormType formType) {
    formTypes.put(formType.getName(), formType);
  }

  public AbstractFormType parseFormPropertyType(Element formPropertyElement, BpmnParse bpmnParse) {
    AbstractFormType formType = null;

    String typeText = formPropertyElement.attribute("type");
    String datePatternText = formPropertyElement.attribute("datePattern");
    
    if ("date".equals(typeText) && datePatternText!=null) {
      formType = new DateFormType(datePatternText);
      
    } else if ("enum".equals(typeText)) {
      Map<String, String> values = new HashMap<String, String>();
      for (Element valueElement: formPropertyElement.elementsNS(BpmnParser.ACTIVITI_BPMN_EXTENSIONS_NS,"value")) {
        String valueId = valueElement.attribute("id");
        String valueName = valueElement.attribute("name");
        values.put(valueId, valueName);
      }
      formType = new EnumFormType(values);
      
    } else if (typeText!=null) {
      formType = formTypes.get(typeText);
      if (formType==null) {
        bpmnParse.addError("unknown type '"+typeText+"'", formPropertyElement);
      }
    }
    return formType;
  }
}
preciso criar dentro da minha aplicação WEB uma classe extendendo-a, algo semelhante a isso:
public class FormTypesImpl extends FormTypes{
@Override
	public AbstractFormType parseFormPropertyType(Element formPropertyElement, BpmnParse bpmnParse) {
		AbstractFormType formType = null;

}
//bla bla bla bla
}

Alguém tem uma idéia?
A dificuldade desta, se dá ao fato da classe "FormTypes" ser instanciada dentro do próprio framework diretamente.
Pode ser usado algum tipo de injeção de herança no meu web.xml na inicialização?
Obrigado.

1 Resposta

N

Acho que não tem jeito, preciso re-escrever o código e re-compilar a classe.
Mas para o problema mensionado consegui contornar extendendo a classe abstrata que instancia FormTypes, então criei meu FormTypesExt com minhas alterações, e extendi o método que instanciava o FormTypes, para FormTypesExt.
Bom, acho que é isso.

Criado 11 de abril de 2012
Ultima resposta 12 de abr. de 2012
Respostas 1
Participantes 1