001    /**
002     * Copyright (c) 2000-2013 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.ProxyUtil;
023    import com.liferay.portal.kernel.util.UnmodifiableList;
024    
025    import java.util.ArrayList;
026    import java.util.List;
027    
028    /**
029     * @author Mika Koivisto
030     */
031    public abstract class RepositoryModelProxyBean {
032    
033            public RepositoryModelProxyBean(ClassLoader classLoader) {
034                    _classLoader = classLoader;
035            }
036    
037            protected FileEntryProxyBean newFileEntryProxyBean(FileEntry fileEntry) {
038                    if (fileEntry == null) {
039                            return null;
040                    }
041    
042                    FileEntry fileEntryProxy = (FileEntry)newProxyInstance(
043                            fileEntry, FileEntry.class);
044    
045                    return new FileEntryProxyBean(fileEntryProxy, _classLoader);
046            }
047    
048            protected FileVersionProxyBean newFileVersionProxyBean(
049                    FileVersion fileVersion) {
050    
051                    if (fileVersion == null) {
052                            return null;
053                    }
054    
055                    FileVersion fileVersionProxy = (FileVersion)newProxyInstance(
056                            fileVersion, FileVersion.class);
057    
058                    return new FileVersionProxyBean(fileVersionProxy, _classLoader);
059            }
060    
061            protected FolderProxyBean newFolderProxyBean(Folder folder) {
062                    if (folder == null) {
063                            return null;
064                    }
065    
066                    Folder folderProxy = (Folder)newProxyInstance(folder, Folder.class);
067    
068                    return new FolderProxyBean(folderProxy, _classLoader);
069            }
070    
071            protected LocalRepositoryProxyBean newLocalRepositoryProxyBean(
072                    LocalRepository localRepository) {
073    
074                    LocalRepository localRepositoryProxy =
075                            (LocalRepository)newProxyInstance(
076                                    localRepository, LocalRepository.class);
077    
078                    return new LocalRepositoryProxyBean(localRepositoryProxy, _classLoader);
079            }
080    
081            protected Object newProxyBean(Object bean) {
082                    if (bean instanceof FileEntry) {
083                            return newFileEntryProxyBean((FileEntry)bean);
084                    }
085                    else if (bean instanceof FileVersion) {
086                            return newFileVersionProxyBean((FileVersion)bean);
087                    }
088                    else if (bean instanceof Folder) {
089                            return newFolderProxyBean((Folder)bean);
090                    }
091                    else {
092                            return bean;
093                    }
094            }
095    
096            protected Object newProxyInstance(Object bean, Class<?> clazz) {
097                    if (bean == null) {
098                            return null;
099                    }
100    
101                    return ProxyUtil.newProxyInstance(
102                            _classLoader, new Class[] {clazz},
103                            new ClassLoaderBeanHandler(bean, _classLoader));
104            }
105    
106            protected List<FileEntry> toFileEntryProxyBeans(
107                    List<FileEntry> fileEntries) {
108    
109                    if ((fileEntries == null) || fileEntries.isEmpty()) {
110                            return fileEntries;
111                    }
112    
113                    List<FileEntry> fileEntryProxyBeans = new ArrayList<FileEntry>(
114                            fileEntries.size());
115    
116                    for (FileEntry fileEntry : fileEntries) {
117                            fileEntryProxyBeans.add(newFileEntryProxyBean(fileEntry));
118                    }
119    
120                    if (fileEntries instanceof UnmodifiableList) {
121                            return new UnmodifiableList<FileEntry>(fileEntries);
122                    }
123    
124                    return fileEntryProxyBeans;
125            }
126    
127            protected List<FileVersion> toFileVersionProxyBeans(
128                    List<FileVersion> fileVersions) {
129    
130                    if ((fileVersions == null) || fileVersions.isEmpty()) {
131                            return fileVersions;
132                    }
133    
134                    List<FileVersion> fileVersionProxyBeans = new ArrayList<FileVersion>(
135                            fileVersions.size());
136    
137                    for (FileVersion fileVersion : fileVersions) {
138                            fileVersionProxyBeans.add(newFileVersionProxyBean(fileVersion));
139                    }
140    
141                    if (fileVersions instanceof UnmodifiableList) {
142                            return new UnmodifiableList<FileVersion>(fileVersions);
143                    }
144    
145                    return fileVersionProxyBeans;
146            }
147    
148            protected List<Folder> toFolderProxyBeans(List<Folder> folders) {
149                    if ((folders == null) || folders.isEmpty()) {
150                            return folders;
151                    }
152    
153                    List<Folder> folderProxyBeans = new ArrayList<Folder>(folders.size());
154    
155                    for (Folder folder : folders) {
156                            folderProxyBeans.add(newFolderProxyBean(folder));
157                    }
158    
159                    if (folders instanceof UnmodifiableList) {
160                            return new UnmodifiableList<Folder>(folderProxyBeans);
161                    }
162    
163                    return folderProxyBeans;
164            }
165    
166            protected List<Object> toObjectProxyBeans(List<Object> objects) {
167                    if ((objects == null) || objects.isEmpty()) {
168                            return objects;
169                    }
170    
171                    List<Object> objectProxyBeans = new ArrayList<Object>();
172    
173                    for (Object object : objects) {
174                            objectProxyBeans.add(newProxyBean(object));
175                    }
176    
177                    if (objects instanceof UnmodifiableList) {
178                            return new UnmodifiableList<Object>(objectProxyBeans);
179                    }
180    
181                    return objectProxyBeans;
182            }
183    
184            private ClassLoader _classLoader;
185    
186    }