package org.springframework.roo.addon.web.mvc.controller.details;
import java.util.List;
import org.apache.commons.lang3.Validate;
import org.springframework.roo.classpath.details.FieldMetadata;
import org.springframework.roo.classpath.details.MethodMetadata;
/**
* Aggregates metadata for a given Roo finder which is scaffolded by Web
* add-ons.
*
* @author Stefan Schmidt
* @since 1.1.2
*/
public class FinderMetadataDetails implements Comparable<FinderMetadataDetails> {
private final MethodMetadata finderMethodMetadata;
private final List<FieldMetadata> finderMethodParamFields;
private final String finderName;
public FinderMetadataDetails(final String finderName,
final MethodMetadata finderMethodMetadata,
final List<FieldMetadata> finderMethodParamFields) {
Validate.notBlank(finderName, "Finder name required");
Validate.notNull(finderMethodMetadata,
"Finder method metadata required");
this.finderName = finderName;
this.finderMethodMetadata = finderMethodMetadata;
this.finderMethodParamFields = finderMethodParamFields;
}
public final int compareTo(final FinderMetadataDetails o) {
// NB: If adding more fields to this class ensure the equals(Object)
// method is updated accordingly
if (o == null) {
return -1;
}
final int cmp = finderName.compareTo(o.finderName);
return cmp;
}
@Override
public final boolean equals(final Object obj) {
// NB: Not using the normal convention of delegating to compareTo (for
// efficiency reasons)
return obj instanceof FinderMetadataDetails
&& finderName.equals(((FinderMetadataDetails) obj).finderName);
}
public MethodMetadata getFinderMethodMetadata() {
return finderMethodMetadata;
}
public List<FieldMetadata> getFinderMethodParamFields() {
return finderMethodParamFields;
}
public String getFinderName() {
return finderName;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result
+ (finderName == null ? 0 : finderName.hashCode());
return result;
}
}