1
22
23 package com.liferay.portal.service.impl;
24
25 import com.liferay.portal.PortalException;
26 import com.liferay.portal.SystemException;
27 import com.liferay.portal.kernel.annotation.Propagation;
28 import com.liferay.portal.kernel.annotation.Transactional;
29 import com.liferay.portal.kernel.util.Validator;
30 import com.liferay.portal.model.ClassName;
31 import com.liferay.portal.model.ModelHintsUtil;
32 import com.liferay.portal.model.impl.ClassNameImpl;
33 import com.liferay.portal.service.base.ClassNameLocalServiceBaseImpl;
34
35 import java.util.List;
36 import java.util.Map;
37 import java.util.concurrent.ConcurrentHashMap;
38
39
45 public class ClassNameLocalServiceImpl extends ClassNameLocalServiceBaseImpl {
46
47 public ClassName addClassName(String value) throws SystemException {
48 long classNameId = counterLocalService.increment();
49
50 ClassName className = classNamePersistence.create(classNameId);
51
52 className.setValue(value);
53
54 classNamePersistence.update(className, false);
55
56 return className;
57 }
58
59 @Transactional(propagation = Propagation.SUPPORTS, readOnly = true)
60 public void checkClassNames() throws SystemException {
61 if (_classNames.isEmpty()) {
62 List<ClassName> classNames = classNamePersistence.findAll();
63
64 for (ClassName className : classNames) {
65 _classNames.put(className.getValue(), className);
66 }
67 }
68
69 List<String> models = ModelHintsUtil.getModels();
70
71 for (String model : models) {
72 getClassName(model);
73 }
74 }
75
76 public ClassName getClassName(long classNameId)
77 throws PortalException, SystemException {
78
79 return classNamePersistence.findByPrimaryKey(classNameId);
80 }
81
82 public ClassName getClassName(String value) throws SystemException {
83 if (Validator.isNull(value)) {
84 return _nullClassName;
85 }
86
87
90 ClassName className = _classNames.get(value);
91
92 if (className == null) {
93 className = classNamePersistence.fetchByValue(value);
94
95 if (className == null) {
96 className = classNameLocalService.addClassName(value);
97 }
98
99 _classNames.put(value, className);
100 }
101
102 return className;
103 }
104
105 public long getClassNameId(Class<?> classObj) {
106 return getClassNameId(classObj.getName());
107 }
108
109 public long getClassNameId(String value) {
110 try {
111 ClassName className = getClassName(value);
112
113 return className.getClassNameId();
114 }
115 catch (Exception e) {
116 throw new RuntimeException(
117 "Unable to get class name from value " + value, e);
118 }
119 }
120
121 private static ClassName _nullClassName = new ClassNameImpl();
122 private static Map<String, ClassName> _classNames =
123 new ConcurrentHashMap<String, ClassName>();
124
125 }