01: /*
02: * Copyright 2004-2006 the original author or authors.
03: *
04: * Licensed under the Apache License, Version 2.0 (the "License");
05: * you may not use this file except in compliance with the License.
06: * You may obtain a copy of the License at
07: *
08: * http://www.apache.org/licenses/LICENSE-2.0
09: *
10: * Unless required by applicable law or agreed to in writing, software
11: * distributed under the License is distributed on an "AS IS" BASIS,
12: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13: * See the License for the specific language governing permissions and
14: * limitations under the License.
15: */
16:
17: package org.compass.gps.device.jpa.indexer;
18:
19: import javax.persistence.EntityManagerFactory;
20:
21: import org.compass.core.config.CompassSettings;
22: import org.compass.core.util.ClassUtils;
23: import org.compass.gps.device.jpa.JpaGpsDeviceException;
24: import org.compass.gps.device.jpa.support.NativeJpaHelper;
25:
26: /**
27: * @author kimchy
28: */
29: public abstract class JpaIndexEntitiesIndexerDetector {
30:
31: public static JpaIndexEntitiesIndexer detectEntitiesIndexer(
32: EntityManagerFactory entityManagerFactory,
33: CompassSettings settings) {
34:
35: String locatorClassName = NativeJpaHelper.detectNativeJpa(
36: entityManagerFactory, settings,
37: new NativeJpaHelper.NativeJpaCallback<String>() {
38:
39: public String onHibernate() {
40: return "org.compass.gps.device.jpa.indexer.HibernateJpaIndexEntitiesIndexer";
41: }
42:
43: public String onTopLinkEssentials() {
44: return DefaultJpaIndexEntitiesIndexer.class
45: .getName();
46: }
47:
48: public String onEclipseLink() {
49: return DefaultJpaIndexEntitiesIndexer.class
50: .getName();
51: }
52:
53: public String onOpenJPA() {
54: return "org.compass.gps.device.jpa.indexer.OpenJPAJpaIndexEntitiesIndexer";
55: }
56:
57: public String onUnknown() {
58: return DefaultJpaIndexEntitiesIndexer.class
59: .getName();
60: }
61: });
62:
63: try {
64: Class locatorClass = ClassUtils.forName(locatorClassName,
65: settings.getClassLoader());
66: return (JpaIndexEntitiesIndexer) locatorClass.newInstance();
67: } catch (Exception e) {
68: throw new JpaGpsDeviceException(
69: "Failed to create entities indexer class ["
70: + locatorClassName + "]", e);
71: }
72:
73: }
74: }
|