blob: b3a197aeeccfe8f1827d5b63773a59dfc29995f9 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you 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.apache.meecrowave.jpa.api;
import javax.enterprise.inject.Vetoed;
import javax.persistence.SharedCacheMode;
import javax.persistence.ValidationMode;
import javax.persistence.spi.ClassTransformer;
import javax.persistence.spi.PersistenceProvider;
import javax.persistence.spi.PersistenceUnitInfo;
import javax.persistence.spi.PersistenceUnitTransactionType;
import javax.sql.DataSource;
import java.net.URL;
import java.net.URLClassLoader;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;
import java.util.ServiceLoader;
import static java.util.Collections.emptyList;
import static java.util.Objects.requireNonNull;
import static java.util.stream.Collectors.toList;
import static javax.persistence.spi.PersistenceUnitTransactionType.RESOURCE_LOCAL;
@Vetoed
public class PersistenceUnitInfoBuilder {
private String unitName;
private String providerClass;
private DataSource dataSource;
private DataSource jtaDataSource;
private List<String> mappingFiles = emptyList();
private List<URL> jarFiles = emptyList();
private URL rootUrl;
private List<String> managedClasses = new ArrayList<>();
private boolean excludeUnlistedClasses;
private SharedCacheMode sharedCacheMode = SharedCacheMode.UNSPECIFIED;
private ValidationMode validationMode = ValidationMode.AUTO;
private Properties properties = new Properties();
private String version = "2.0";
private ClassLoader loader = Thread.currentThread().getContextClassLoader();
private PersistenceUnitTransactionType transactionType = RESOURCE_LOCAL;
public PersistenceUnitTransactionType getTransactionType() {
return transactionType;
}
public PersistenceUnitInfoBuilder setTransactionType(final PersistenceUnitTransactionType transactionType) {
this.transactionType = transactionType;
return this;
}
public String getUnitName() {
return unitName;
}
public PersistenceUnitInfoBuilder setUnitName(final String unitName) {
this.unitName = unitName;
return this;
}
public String getProviderClass() {
return providerClass;
}
public PersistenceUnitInfoBuilder setProviderClass(final String providerClass) {
this.providerClass = providerClass;
return this;
}
public DataSource getJtaDataSource() {
return jtaDataSource;
}
public PersistenceUnitInfoBuilder setJtaDataSource(final DataSource jtaDataSource) {
this.jtaDataSource = jtaDataSource;
return this;
}
public DataSource getDataSource() {
return dataSource;
}
public PersistenceUnitInfoBuilder setDataSource(final DataSource dataSource) {
this.dataSource = dataSource;
return this;
}
public List<String> getMappingFiles() {
return mappingFiles;
}
public PersistenceUnitInfoBuilder setMappingFiles(final List<String> mappingFiles) {
this.mappingFiles = mappingFiles;
return this;
}
public List<URL> getJarFiles() {
return jarFiles;
}
public PersistenceUnitInfoBuilder setJarFiles(final List<URL> jarFiles) {
this.jarFiles = jarFiles;
return this;
}
public URL getRootUrl() {
return rootUrl;
}
public PersistenceUnitInfoBuilder setRootUrl(final URL rootUrl) {
this.rootUrl = rootUrl;
return this;
}
public List<String> getManagedClasses() {
return managedClasses;
}
public PersistenceUnitInfoBuilder addManagedClazz(final Class<?> clazz) {
managedClasses.add(clazz.getName());
return this;
}
public PersistenceUnitInfoBuilder setManagedClassNames(final List<String> managedClasses) {
this.managedClasses = managedClasses;
return this;
}
public PersistenceUnitInfoBuilder setManagedClasses(final List<Class<?>> managedClasses) {
this.managedClasses = managedClasses.stream().map(Class::getName).collect(toList());
return this;
}
public boolean isExcludeUnlistedClasses() {
return excludeUnlistedClasses;
}
public PersistenceUnitInfoBuilder setExcludeUnlistedClasses(final boolean excludeUnlistedClasses) {
this.excludeUnlistedClasses = excludeUnlistedClasses;
return this;
}
public SharedCacheMode getSharedCacheMode() {
return sharedCacheMode;
}
public PersistenceUnitInfoBuilder setSharedCacheMode(final SharedCacheMode sharedCacheMode) {
this.sharedCacheMode = sharedCacheMode;
return this;
}
public ValidationMode getValidationMode() {
return validationMode;
}
public PersistenceUnitInfoBuilder setValidationMode(final ValidationMode validationMode) {
this.validationMode = validationMode;
return this;
}
public Properties getProperties() {
return properties;
}
public PersistenceUnitInfoBuilder addProperty(final String key, final String value) {
if (properties == null) {
properties = new Properties();
}
properties.setProperty(key, value);
return this;
}
public PersistenceUnitInfoBuilder setProperties(final Properties properties) {
this.properties = properties;
return this;
}
public String getVersion() {
return version;
}
public PersistenceUnitInfoBuilder setVersion(final String version) {
this.version = version;
return this;
}
public ClassLoader getLoader() {
return loader;
}
public PersistenceUnitInfoBuilder setLoader(final ClassLoader loader) {
this.loader = loader;
return this;
}
public PersistenceUnitInfo toInfo() {
if (providerClass == null) {
providerClass = ServiceLoader.load(PersistenceProvider.class).iterator().next().getClass().getName();
}
requireNonNull(dataSource, "datasource not provided");
return new PersistenceUnitInfo() {
@Override
public String getPersistenceUnitName() {
return unitName;
}
@Override
public String getPersistenceProviderClassName() {
return providerClass;
}
@Override
public PersistenceUnitTransactionType getTransactionType() {
return transactionType;
}
@Override
public DataSource getJtaDataSource() {
return jtaDataSource;
}
@Override
public DataSource getNonJtaDataSource() {
return dataSource;
}
@Override
public List<String> getMappingFileNames() {
return mappingFiles;
}
@Override
public List<URL> getJarFileUrls() {
return jarFiles;
}
@Override
public URL getPersistenceUnitRootUrl() {
return rootUrl;
}
@Override
public List<String> getManagedClassNames() {
return managedClasses;
}
@Override
public boolean excludeUnlistedClasses() {
return excludeUnlistedClasses;
}
@Override
public SharedCacheMode getSharedCacheMode() {
return sharedCacheMode;
}
@Override
public ValidationMode getValidationMode() {
return validationMode;
}
@Override
public Properties getProperties() {
return properties;
}
@Override
public String getPersistenceXMLSchemaVersion() {
return version;
}
@Override
public ClassLoader getClassLoader() {
return loader;
}
@Override
public void addTransformer(final ClassTransformer transformer) {
// no-op: not supported
}
@Override
public ClassLoader getNewTempClassLoader() {
return new URLClassLoader(new URL[0], Thread.currentThread().getContextClassLoader());
}
};
}
}