001    /**
002     * Copyright (c) 2000-present Liferay, Inc. All rights reserved.
003     *
004     * This library is free software; you can redistribute it and/or modify it under
005     * the terms of the GNU Lesser General Public License as published by the Free
006     * Software Foundation; either version 2.1 of the License, or (at your option)
007     * any later version.
008     *
009     * This library is distributed in the hope that it will be useful, but WITHOUT
010     * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
011     * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
012     * details.
013     */
014    
015    package com.liferay.portal.repository.proxy;
016    
017    import com.liferay.portal.kernel.bean.ClassLoaderBeanHandler;
018    import com.liferay.portal.kernel.repository.LocalRepository;
019    import com.liferay.portal.kernel.repository.model.FileEntry;
020    import com.liferay.portal.kernel.repository.model.FileVersion;
021    import com.liferay.portal.kernel.repository.model.Folder;
022    import com.liferay.portal.kernel.util.ListUtil;
023    import com.liferay.portal.kernel.util.ProxyUtil;
024    
025    import java.util.ArrayList;
026    import java.util.Collections;
027    import java.util.List;
028    
029    /**
030     * @author Mika Koivisto
031     */
032    public abstract class RepositoryModelProxyBean {
033    
034            public RepositoryModelProxyBean(ClassLoader classLoader) {
035                    _classLoader = classLoader;
036            }
037    
038            protected FileEntryProxyBean newFileEntryProxyBean(FileEntry fileEntry) {
039                    if (fileEntry == null) {
040                            return null;
041                    }
042    
043                    FileEntry fileEntryProxy = (FileEntry)newProxyInstance(
044                            fileEntry, FileEntry.class);
045    
046                    return new FileEntryProxyBean(fileEntryProxy, _classLoader);
047            }
048    
049            protected FileVersionProxyBean newFileVersionProxyBean(
050                    FileVersion fileVersion) {
051    
052                    if (fileVersion == null) {
053                            return null;
054                    }
055    
056                    FileVersion fileVersionProxy = (FileVersion)newProxyInstance(
057                            fileVersion, FileVersion.class);
058    
059                    return new FileVersionProxyBean(fileVersionProxy, _classLoader);
060            }
061    
062            protected FolderProxyBean newFolderProxyBean(Folder folder) {
063                    if (folder == null) {
064                            return null;
065                    }
066    
067                    Folder folderProxy = (Folder)newProxyInstance(folder, Folder.class);
068    
069                    return new FolderProxyBean(folderProxy, _classLoader);
070            }
071    
072            protected LocalRepositoryProxyBean newLocalRepositoryProxyBean(
073                    LocalRepository localRepository) {
074    
075                    LocalRepository localRepositoryProxy =
076                            (LocalRepository)newProxyInstance(
077                                    localRepository, LocalRepository.class);
078    
079                    return new LocalRepositoryProxyBean(localRepositoryProxy, _classLoader);
080            }
081    
082            protected Object newProxyBean(Object bean) {
083                    if (bean instanceof FileEntry) {
084                            return newFileEntryProxyBean((FileEntry)bean);
085                    }
086                    else if (bean instanceof FileVersion) {
087                            return newFileVersionProxyBean((FileVersion)bean);
088                    }
089                    else if (bean instanceof Folder) {
090                            return newFolderProxyBean((Folder)bean);
091                    }
092                    else {
093                            return bean;
094                    }
095            }
096    
097            protected Object newProxyInstance(Object bean, Class<?> clazz) {
098                    if (bean == null) {
099                            return null;
100                    }
101    
102                    return ProxyUtil.newProxyInstance(
103                            _classLoader, new Class[] {clazz},
104                            new ClassLoaderBeanHandler(bean, _classLoader));
105            }
106    
107            protected List<FileEntry> toFileEntryProxyBeans(
108                    List<FileEntry> fileEntries) {
109    
110                    if ((fileEntries == null) || fileEntries.isEmpty()) {
111                            return fileEntries;
112                    }
113    
114                    List<FileEntry> fileEntryProxyBeans = new ArrayList<FileEntry>(
115                            fileEntries.size());
116    
117                    for (FileEntry fileEntry : fileEntries) {
118                            fileEntryProxyBeans.add(newFileEntryProxyBean(fileEntry));
119                    }
120    
121                    if (ListUtil.isUnmodifiableList(fileEntries)) {
122                            return Collections.unmodifiableList(fileEntryProxyBeans);
123                    }
124    
125                    return fileEntryProxyBeans;
126            }
127    
128            protected List<FileVersion> toFileVersionProxyBeans(
129                    List<FileVersion> fileVersions) {
130    
131                    if ((fileVersions == null) || fileVersions.isEmpty()) {
132                            return fileVersions;
133                    }
134    
135                    List<FileVersion> fileVersionProxyBeans = new ArrayList<FileVersion>(
136                            fileVersions.size());
137    
138                    for (FileVersion fileVersion : fileVersions) {
139                            fileVersionProxyBeans.add(newFileVersionProxyBean(fileVersion));
140                    }
141    
142                    if (ListUtil.isUnmodifiableList(fileVersions)) {
143                            return Collections.unmodifiableList(fileVersionProxyBeans);
144                    }
145    
146                    return fileVersionProxyBeans;
147            }
148    
149            protected List<Folder> toFolderProxyBeans(List<Folder> folders) {
150                    if ((folders == null) || folders.isEmpty()) {
151                            return folders;
152                    }
153    
154                    List<Folder> folderProxyBeans = new ArrayList<Folder>(folders.size());
155    
156                    for (Folder folder : folders) {
157                            folderProxyBeans.add(newFolderProxyBean(folder));
158                    }
159    
160                    if (ListUtil.isUnmodifiableList(folders)) {
161                            return Collections.unmodifiableList(folderProxyBeans);
162                    }
163    
164                    return folderProxyBeans;
165            }
166    
167            protected List<Object> toObjectProxyBeans(List<Object> objects) {
168                    if ((objects == null) || objects.isEmpty()) {
169                            return objects;
170                    }
171    
172                    List<Object> objectProxyBeans = new ArrayList<Object>();
173    
174                    for (Object object : objects) {
175                            objectProxyBeans.add(newProxyBean(object));
176                    }
177    
178                    if (ListUtil.isUnmodifiableList(objects)) {
179                            return Collections.unmodifiableList(objectProxyBeans);
180                    }
181    
182                    return objectProxyBeans;
183            }
184    
185            private final ClassLoader _classLoader;
186    
187    }