001
014
015 package com.liferay.portal.model.adapter;
016
017 import com.liferay.portal.model.adapter.builder.ModelAdapterBuilder;
018 import com.liferay.portal.model.adapter.builder.ModelAdapterBuilderLocator;
019 import com.liferay.registry.Registry;
020 import com.liferay.registry.RegistryUtil;
021 import com.liferay.registry.ServiceTracker;
022
023 import java.util.ArrayList;
024 import java.util.List;
025
026
029 public class ModelAdapterUtil {
030
031 public static <T, V> List<V> adapt(
032 List<T> adapteeModels, Class<T> adapteeModelClass,
033 Class<V> adaptedModelClass) {
034
035 List<V> adaptedModels = new ArrayList<>();
036
037 for (T adapteeModel : adapteeModels) {
038 adaptedModels.add(
039 adapt(adapteeModel, adapteeModelClass, adaptedModelClass));
040 }
041
042 return adaptedModels;
043 }
044
045 public static <T, V> List<V> adapt(
046 List<T> adapteeModels, Class<V> adaptedModelClass) {
047
048 List<V> adaptedModels = new ArrayList<>();
049
050 for (T adapteeModel : adapteeModels) {
051 adaptedModels.add(adapt(adapteeModel, adaptedModelClass));
052 }
053
054 return adaptedModels;
055 }
056
057 public static <T, V> V adapt(
058 T adapteeModel, Class<T> adapteeModelClass,
059 Class<V> adaptedModelClass) {
060
061 return doAdapt(adapteeModel, adapteeModelClass, adaptedModelClass);
062 }
063
064 public static <T, V> V adapt(T adapteeModel, Class<V> adaptedModelClass) {
065 Class<T> adapteeModelClass = (Class<T>)adapteeModel.getClass();
066
067 return doAdapt(adapteeModel, adapteeModelClass, adaptedModelClass);
068 }
069
070 protected static <T, V> V doAdapt(
071 T adapteeModel, Class<T> adapteeModelClass,
072 Class<V> adaptedModelClass) {
073
074 ModelAdapterBuilderLocator modelAdapterBuilderLocator =
075 _modelAdapterBuilderLocatorServiceTracker.getService();
076
077 if (modelAdapterBuilderLocator == null) {
078 return null;
079 }
080
081 ModelAdapterBuilder<T, V> modelAdapterBuilder =
082 modelAdapterBuilderLocator.locate(
083 adapteeModelClass, adaptedModelClass);
084
085 return modelAdapterBuilder.build(adapteeModel);
086 }
087
088 private static final
089 ServiceTracker<ModelAdapterBuilderLocator, ModelAdapterBuilderLocator>
090 _modelAdapterBuilderLocatorServiceTracker;
091
092 static {
093 Registry registry = RegistryUtil.getRegistry();
094
095 _modelAdapterBuilderLocatorServiceTracker = registry.trackServices(
096 ModelAdapterBuilderLocator.class);
097
098 _modelAdapterBuilderLocatorServiceTracker.open();
099 }
100
101 }