/* * Copyright (C) 2015 Red Hat, Inc. and/or its affiliates. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.jboss.errai.jpa.test.entity; import javax.persistence.PostLoad; import javax.persistence.PostPersist; import javax.persistence.PostRemove; import javax.persistence.PostUpdate; import javax.persistence.PrePersist; import javax.persistence.PreRemove; import javax.persistence.PreUpdate; /** * Helper class for testing that lifecycle callbacks on non-entity classes are * working properly. * * @author Jonathan Fuerth <jfuerth@gmail.com> */ public class StandaloneLifecycleListener { private Object eventSubject; /** * Creates an instance that will compare equal to another instance that * received an event for the given subject entity. */ public static StandaloneLifecycleListener instanceFor(Object eventSubject) { StandaloneLifecycleListener instance = new StandaloneLifecycleListener(); instance.eventSubject = eventSubject; return instance; } @PrePersist public void albumPrePersist(Album a) { eventSubject = a; Album.CALLBACK_LOG.add(new CallbackLogEntry(this, PrePersist.class)); } // protected access is for testing that code generator works with protected methods @PostPersist protected void albumPostPersist(Album a) { eventSubject = a; Album.CALLBACK_LOG.add(new CallbackLogEntry(this, PostPersist.class)); } // default access is for testing that code generator works with package-private methods @PostLoad void albumPostLoad(Album a) { eventSubject = a; Album.CALLBACK_LOG.add(new CallbackLogEntry(this, PostLoad.class)); } // private access is for testing that code generator works with private methods @PreUpdate private void albumPreUpdate(Album a) { eventSubject = a; Album.CALLBACK_LOG.add(new CallbackLogEntry(this, PreUpdate.class)); } @PostUpdate public void albumPostUpdate(Album a) { eventSubject = a; Album.CALLBACK_LOG.add(new CallbackLogEntry(this, PostUpdate.class)); } @PreRemove public void albumPreRemove(Album a) { eventSubject = a; Album.CALLBACK_LOG.add(new CallbackLogEntry(this, PreRemove.class)); } @PostRemove public void albumPostRemove(Album a) { eventSubject = a; Album.CALLBACK_LOG.add(new CallbackLogEntry(this, PostRemove.class)); } /** * Returns the JPA entity instance that this listener most recently received * an event for. */ public Object getEventSubject() { return eventSubject; } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + ((eventSubject == null) ? 0 : eventSubject.hashCode()); return result; } /** * Instances of StandaloneLifecycleListener are considered equal if they * received an event for the same entity instance. */ @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; StandaloneLifecycleListener other = (StandaloneLifecycleListener) obj; return eventSubject == other.eventSubject; } }