org.nakedobjects.metamodel.facets.object.callbacks.SaveCallbackFacetFactory Maven / Gradle / Ivy
The newest version!
package org.nakedobjects.metamodel.facets.object.callbacks;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;
import org.nakedobjects.metamodel.facets.Facet;
import org.nakedobjects.metamodel.facets.FacetHolder;
import org.nakedobjects.metamodel.facets.FacetUtil;
import org.nakedobjects.metamodel.facets.MethodRemover;
import org.nakedobjects.metamodel.java5.MethodPrefixBasedFacetFactoryAbstract;
import org.nakedobjects.metamodel.spec.feature.NakedObjectFeatureType;
public class SaveCallbackFacetFactory extends MethodPrefixBasedFacetFactoryAbstract {
private static final String SAVED_PREFIX = "saved";
private static final String SAVING_PREFIX = "saving";
private static final String[] PREFIXES = { SAVED_PREFIX, SAVING_PREFIX, };
public SaveCallbackFacetFactory() {
super(PREFIXES, NakedObjectFeatureType.OBJECTS_ONLY);
}
@Override
public boolean process(final Class cls, final MethodRemover remover, final FacetHolder facetHolder) {
final List facets = new ArrayList();
final List methods = new ArrayList();
Method method = null;
method = findMethod(cls, OBJECT, SAVING_PREFIX, void.class, NO_PARAMETERS_TYPES);
if (method != null) {
methods.add(method);
PersistingCallbackFacet facet = facetHolder.getFacet(PersistingCallbackFacet.class);
if (facet == null) {
facets.add(new PersistingCallbackFacetViaMethod(method, facetHolder));
} else {
facet.addMethod(method);
}
}
method = findMethod(cls, OBJECT, SAVED_PREFIX, void.class, NO_PARAMETERS_TYPES);
if (method != null) {
methods.add(method);
PersistedCallbackFacet facet = facetHolder.getFacet(PersistedCallbackFacet.class);
if (facet == null) {
facets.add(new PersistedCallbackFacetViaMethod(method, facetHolder));
} else {
facet.addMethod(method);
}
}
remover.removeMethods(methods);
return FacetUtil.addFacets(facets);
}
}