Monat: März 2010

Project Lombok – Sehr interessant!

Wem sein “getter/setter”-Boilerplatecode in seinen Domainenobjekten auf die Nerven geht, sollte sich mal das Project Lombok ansehen!

Nachdem man die Bibliothek eingebunden hat, werden mit @Annotations an den Objekten im Hintergrund die getter/setter sowie hashcode, toString und equals generiert. Das Schöne daran ist auch, das die Klasse leer bleibt, jedoch der Outline-View in Eclipse alle Methoden anzeigt.

Als Beispiel hier mal mein Domänenobjekt ohne Lombok (100 Zeilen):

package de.test.domain;

import org.apache.commons.lang.builder.EqualsBuilder;
import org.apache.commons.lang.builder.HashCodeBuilder;
import org.hibernate.Hibernate;

public class User  implements java.io.Serializable
{

	private Integer id;
	private String name;
	private String surname;
	private String username;
	private String password;
	private Boolean active;
	private String email;

	public Integer getId() {
		return this.id;
	}

	public void setId(Integer id) {
		this.id = id;
	}
	public String getName() {
		return this.name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getSurname() {
		return this.surname;
	}

	public void setSurname(String surname) {
		this.surname = surname;
	}

	public String getUsername() {
		return this.username;
	}

	public void setUsername(String username) {
		this.username = username;
	}

	public String getPassword() {
		return this.password;
	}

	public void setPassword(String password) {
		this.password = password;
	}

	public Boolean getActive() {
		return this.active;
	}

	public void setActive(Boolean active) {
		this.active = active;
	}

	public String getEmail()
	{
		return email;
	}

	public void setEmail(String email)
	{
		this.email = email;
	}

	@Override
	public int hashCode()
	{
		return new HashCodeBuilder(17,37).append(this.getUsername()).toHashCode();
	}

	@Override
	public boolean equals(Object other)
	{
		if(this == other)
			return  true;
		if (other == null || Hibernate.getClass(this) != Hibernate.getClass(other))
			return false;

		final User rhs = (User) other;
		return new EqualsBuilder().append(this.getUsername(),rhs.getUsername()).isEquals();
	}

	@Override
	public String toString()
	{
		return "User [active=" + active + ", name=" + name + ", email=" + email + ", password="
		              + password + ", surname=" + surname + ", username=" + username
		              + "]";
	}
}

..und hier mein Domänenobjekt mit Lombok (21 Zeilen):

package de.test.domain;

import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;

@EqualsAndHashCode(exclude={"id","name","surname","password","active","email"})
@ToString(exclude="id")
public class User  implements java.io.Serializable
{

	private @Getter @Setter  Integer id;
	private @Getter @Setter  String name;
	private @Getter @Setter  String surname;
	private @Getter @Setter  String username;
	private @Getter @Setter  String password;
	private @Getter @Setter  Boolean active;
	private @Getter @Setter  String email;

}

Hier das Objekt in Eclipse:

Lombok im Eclipse-View

Lombok im Eclipse-View

Man könnte jetzt in der Lombokmagie ein Problem sehen, allerdings sehe ich eher das Problem darin, das wir langsam von der XML-Hell geradewegs in die @Annotation-Hell kommen…


Tags:


IText und digitale Signaturen

Wer mit IText die digitale Signatur in einem PDF-Dokument überprüfen will, sollte sich vorher gründlich mit den Gültigkeitsmodellen auseinandersetzen.

Eine gute Erklärung gibt es hier.

Denn im Gegensatz zur Signaturprüfung (verifyCertificates(…)) von IText ist in Deutschland nach SigG eine Verifikation zum Signierzeitpunkt ausreichend, also nach dem Kettenmodell!