001 /****************************************************************
002 * Licensed to the Apache Software Foundation (ASF) under one *
003 * or more contributor license agreements. See the NOTICE file *
004 * distributed with this work for additional information *
005 * regarding copyright ownership. The ASF licenses this file *
006 * to you under the Apache License, Version 2.0 (the *
007 * "License"); you may not use this file except in compliance *
008 * with the License. You may obtain a copy of the License at *
009 * *
010 * http://www.apache.org/licenses/LICENSE-2.0 *
011 * *
012 * Unless required by applicable law or agreed to in writing, *
013 * software distributed under the License is distributed on an *
014 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY *
015 * KIND, either express or implied. See the License for the *
016 * specific language governing permissions and limitations *
017 * under the License. *
018 ****************************************************************/
019 package org.apache.james.mailbox.jpa;
020
021 import javax.persistence.EntityManager;
022 import javax.persistence.EntityManagerFactory;
023
024 import org.apache.james.mailbox.MailboxSession;
025 import org.apache.james.mailbox.jpa.mail.JPAMailboxMapper;
026 import org.apache.james.mailbox.jpa.mail.JPAMessageMapper;
027 import org.apache.james.mailbox.jpa.user.JPASubscriptionMapper;
028 import org.apache.james.mailbox.store.MailboxSessionMapperFactory;
029 import org.apache.james.mailbox.store.mail.MailboxMapper;
030 import org.apache.james.mailbox.store.mail.MessageMapper;
031 import org.apache.james.mailbox.store.mail.ModSeqProvider;
032 import org.apache.james.mailbox.store.mail.UidProvider;
033 import org.apache.james.mailbox.store.user.SubscriptionMapper;
034
035 /**
036 * JPA implementation of {@link MailboxSessionMapperFactory}
037 *
038 */
039 public class JPAMailboxSessionMapperFactory extends MailboxSessionMapperFactory<Long> {
040
041 private final EntityManagerFactory entityManagerFactory;
042 private final UidProvider<Long> uidProvider;
043 private final ModSeqProvider<Long> modSeqProvider;
044
045 public JPAMailboxSessionMapperFactory(EntityManagerFactory entityManagerFactory, UidProvider<Long> uidProvider, ModSeqProvider<Long> modSeqProvider) {
046 this.entityManagerFactory = entityManagerFactory;
047 this.uidProvider = uidProvider;
048 this.modSeqProvider = modSeqProvider;
049 createEntityManager().close();
050 }
051
052 @Override
053 public MailboxMapper<Long> createMailboxMapper(MailboxSession session) {
054 return new JPAMailboxMapper(entityManagerFactory);
055 }
056
057 @Override
058 public MessageMapper<Long> createMessageMapper(MailboxSession session) {
059 return new JPAMessageMapper(session, uidProvider, modSeqProvider, entityManagerFactory);
060 }
061
062 @Override
063 public SubscriptionMapper createSubscriptionMapper(MailboxSession session) {
064 return new JPASubscriptionMapper(entityManagerFactory);
065 }
066
067 /**
068 * Return a new {@link EntityManager} instance
069 *
070 * @return manager
071 */
072 private EntityManager createEntityManager() {
073 return entityManagerFactory.createEntityManager();
074 }
075
076 }