Preciso ajuda para encontrar pontos neste projeto onde precisa ser refatorado, não preciso refatorar somente dizer aonde pode ser refatorado, o projeto está no git, onde é mais facil de visualizado https://github.com/NudsVda/cdi-jsf-crud
public class MercadoriaMB implements Serializable {
/**
* Referência para o componente EJB, injetado pelo container.
*/
@Inject
private MercadoriaService service;
/**
* Referência para a mercadoria utiliza na inclusão (nova) ou edição.
*/
@Inject
private Mercadoria mercadoria;
private Long idSelecionado;
private List<Mercadoria> mercadorias;
public MercadoriaMB() {
}
public void setIdSelecionado(Long idSelecionado) {
this.idSelecionado = idSelecionado;
}
public Long getIdSelecionado() {
return idSelecionado;
}
public Mercadoria getMercadoria() {
return mercadoria;
}
public void editar() {
if (idSelecionado == null) {
return;
}
mercadoria = service.find(idSelecionado);
//log.debug("Pronto pra editar");
}
public List<Mercadoria> getMercadorias() {
System.out.println("service: "+service);
if (mercadorias == null) {
mercadorias = service.findAll();
}
return mercadorias;
}
public String salvar() {
try {
System.out.println("service: "+service);
service.save(mercadoria);
} catch(Exception ex) {
//log.error("Erro ao salvar mercadoria.", ex);
addMessage(getMessageFromI18N("msg.erro.salvar.mercadoria"), ex.getMessage());
return "";
}
//log.debug("Salvour mercadoria "+mercadoria.getId());
return "listaMercadorias";
}
public String remover() {
try {
service.remove(mercadoria);
} catch(Exception ex) {
//log.error("Erro ao remover mercadoria.", ex);
addMessage(getMessageFromI18N("msg.erro.remover.mercadoria"), ex.getMessage());
return "";
}
//log.debug("Removeu mercadoria "+mercadoria.getId());
return "listaMercadorias";
}
/**
* @param key
* @return Recupera a mensagem do arquivo properties <code>ResourceBundle</code>.
*/
private String getMessageFromI18N(String key) {
ResourceBundle bundle = ResourceBundle.getBundle("messages_labels", getCurrentInstance().getViewRoot().getLocale());
return bundle.getString(key);
}
/**
* Adiciona um mensagem no contexto do Faces (<code>FacesContext</code>).
* @param summary
* @param detail
*/
private void addMessage(String summary, String detail) {
getCurrentInstance().addMessage(null, new FacesMessage(summary, summary.concat("<br/>").concat(detail)));
}
public class SobreMB {
private String[] values;
public SobreMB() {
values = new String[]{"sobre.title", "sobre.built",
"sobre.site", "sobre.build"};
}
public String[] getValues() {
return values;
}
public interface AbstractEntity extends Serializable {
/**
* @return A referência para a chave primária (Primary Key) de cada objeto persistido.
* Caso o objeto ainda não tenha sido persistido, deve retornar <code>null</code>.
*/
public Number getId();
public class Mercadoria implements AbstractEntity {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private String nome;
private String descricao;
private Integer quantidade;
private Double preco;
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public String getDescricao() {
return descricao;
}
public void setDescricao(String descricao) {
this.descricao = descricao;
}
public void setId(Long id) {
this.id = id;
}
public Long getId() {
return id;
}
public Double getPreco() {
return preco;
}
public void setPreco(Double preco) {
this.preco = preco;
}
public Integer getQuantidade() {
return quantidade;
}
public void setQuantidade(Integer quantidade) {
this.quantidade = quantidade;
}
public class MercadoriaServiceEJB extends AbstractPersistence<Mercadoria, Long>
implements MercadoriaService {
@PersistenceContext
private EntityManager em;
@Override
protected EntityManager getEntityManager() {
return em;
}
public MercadoriaServiceEJB() {
super(Mercadoria.class);
}
public interface MercadoriaService {
public Mercadoria save(Mercadoria mercadoria);
public void remove(Mercadoria mercadoria);
public Mercadoria find(Long id);
public List<Mercadoria> findAll();
public abstract class AbstractPersistence<T extends AbstractEntity, PK extends Number> {
/**
* Classe da entidade, necessário para o método <code>EntityManager.find</code>.
*/
private Class<T> entityClass;
public AbstractPersistence(Class<T> entityClass) {
this.entityClass = entityClass;
}
public T save(T e) {
if (e.getId() != null)
return getEntityManager().merge(e);
else {
getEntityManager().persist(e);
return e;
}
}
public void remove(T entity) {
getEntityManager().remove(getEntityManager().merge(entity));
}
public T find(PK id) {
return getEntityManager().find(entityClass, id);
}
public List<T> findAll() {
CriteriaQuery cq = getEntityManager().getCriteriaBuilder().createQuery();
cq.select(cq.from(entityClass));
return getEntityManager().createQuery(cq).getResultList();
}
public List<T> findRange(int[] range) {
CriteriaQuery cq = getEntityManager().getCriteriaBuilder().createQuery();
cq.select(cq.from(entityClass));
Query q = getEntityManager().createQuery(cq);
q.setMaxResults(range[1] - range[0]);
q.setFirstResult(range[0]);
return q.getResultList();
}
public int count() {
CriteriaQuery cq = getEntityManager().getCriteriaBuilder().createQuery();
Root<T> rt = cq.from(entityClass);
cq.select(getEntityManager().getCriteriaBuilder().count(rt));
Query q = getEntityManager().createQuery(cq);
return ((Long) q.getSingleResult()).intValue();
}
/**
* Exige a definição do <code>EntityManager</code> responsável pelas operações de persistência.
*/
protected abstract EntityManager getEntityManager();