001    //  Copyright 2008 The Apache Software Foundation
002    //
003    // Licensed under the Apache License, Version 2.0 (the "License");
004    // you may not use this file except in compliance with the License.
005    // You may obtain a copy of the License at
006    //
007    //     http://www.apache.org/licenses/LICENSE-2.0
008    //
009    // Unless required by applicable law or agreed to in writing, software
010    // distributed under the License is distributed on an "AS IS" BASIS,
011    // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
012    // See the License for the specific language governing permissions and
013    // limitations under the License.
014    
015    package org.tynamo.jpa.internal;
016    
017    import java.io.Serializable;
018    
019    import javax.persistence.EntityManager;
020    
021    import org.apache.tapestry5.annotations.ImmutableSessionPersistedObject;
022    
023    /**
024     * Encapsulates a JPA entity class with an entity id.
025     */
026    @ImmutableSessionPersistedObject
027    public class PersistedEntity implements Serializable
028    {
029            private final Class entityName;
030    
031            private final Serializable id;
032    
033            public PersistedEntity(Class entityName, Serializable id)
034            {
035                    this.entityName = entityName;
036                    this.id = id;
037            }
038    
039            Object restore(EntityManager entityManager)
040            {
041                    try
042                    {
043                            return entityManager.find(entityName, id);
044                            // return session.get(entityName, id);
045                    }
046                    catch (Exception ex)
047                    {
048                            throw new RuntimeException(JPAMessages.sessionPersistedEntityLoadFailure(entityName, id, ex));
049                    }
050            }
051    
052            @Override
053            public String toString()
054            {
055                    return String.format("<PersistedEntity: %s(%s)>", entityName, id);
056            }
057    }