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.kernel.lar;
016    
017    import com.liferay.portal.kernel.util.StringBundler;
018    import com.liferay.portal.kernel.util.StringPool;
019    import com.liferay.portal.kernel.util.Validator;
020    import com.liferay.portal.model.StagedGroupedModel;
021    import com.liferay.portal.model.StagedModel;
022    
023    import java.io.Serializable;
024    
025    /**
026     * @author Mate Thurzo
027     * @author Daniel Kocsis
028     */
029    public class ExportImportPathUtil {
030    
031            public static final String PATH_PREFIX_COMPANY = "company";
032    
033            public static final String PATH_PREFIX_GROUP = "group";
034    
035            public static final String PATH_PREFIX_LAYOUT = "layout";
036    
037            public static final String PATH_PREFIX_PORTLET = "portlet";
038    
039            public static String getExpandoPath(String path) {
040                    if (!Validator.isFilePath(path, false)) {
041                            throw new IllegalArgumentException(
042                                    path + " is located outside of the LAR");
043                    }
044    
045                    int pos = path.lastIndexOf(_FILE_EXTENSION_XML);
046    
047                    if (pos == -1) {
048                            throw new IllegalArgumentException(path + " is not an XML file");
049                    }
050    
051                    return path.substring(0, pos).concat("-expando").concat(
052                            path.substring(pos));
053            }
054    
055            public static String getLayoutPath(
056                    PortletDataContext portletDataContext, long plid) {
057    
058                    StringBundler sb = new StringBundler(5);
059    
060                    sb.append(getRootPath(portletDataContext));
061                    sb.append(StringPool.FORWARD_SLASH);
062                    sb.append(PATH_PREFIX_LAYOUT);
063                    sb.append(StringPool.FORWARD_SLASH);
064                    sb.append(plid);
065                    sb.append(_FILE_EXTENSION_XML);
066    
067                    return sb.toString();
068            }
069    
070            public static String getModelPath(
071                    long groupId, String className, long classPK) {
072    
073                    return getModelPath(
074                            PATH_PREFIX_GROUP, groupId, className, classPK, null);
075            }
076    
077            public static String getModelPath(
078                    PortletDataContext portletDataContext, String className, long classPK) {
079    
080                    return getModelPath(portletDataContext, className, classPK, null);
081            }
082    
083            public static String getModelPath(
084                    PortletDataContext portletDataContext, String className, long classPK,
085                    String dependentFileName) {
086    
087                    return getModelPath(
088                            PATH_PREFIX_GROUP, portletDataContext.getSourceGroupId(), className,
089                            classPK, dependentFileName);
090            }
091    
092            public static String getModelPath(StagedModel stagedModel) {
093                    return getModelPath(stagedModel, null);
094            }
095    
096            public static String getModelPath(
097                    StagedModel stagedModel, String dependentFileName) {
098    
099                    if (stagedModel instanceof StagedGroupedModel) {
100                            StagedGroupedModel stagedGroupedModel =
101                                    (StagedGroupedModel)stagedModel;
102    
103                            return getModelPath(
104                                    PATH_PREFIX_GROUP, stagedGroupedModel.getGroupId(),
105                                    stagedModel.getModelClassName(), stagedModel.getPrimaryKeyObj(),
106                                    dependentFileName);
107                    }
108                    else {
109                            return getModelPath(
110                                    PATH_PREFIX_COMPANY, stagedModel.getCompanyId(),
111                                    stagedModel.getModelClassName(), stagedModel.getPrimaryKeyObj(),
112                                    dependentFileName);
113                    }
114            }
115    
116            public static String getPortletPath(
117                    PortletDataContext portletDataContext, String portletId) {
118    
119                    StringBundler sb = new StringBundler(5);
120    
121                    sb.append(getRootPath(portletDataContext));
122                    sb.append(StringPool.FORWARD_SLASH);
123                    sb.append(PATH_PREFIX_PORTLET);
124                    sb.append(StringPool.FORWARD_SLASH);
125                    sb.append(portletId);
126    
127                    return sb.toString();
128            }
129    
130            public static String getRootPath(PortletDataContext portletDataContext) {
131                    return getRootPath(
132                            PATH_PREFIX_GROUP, portletDataContext.getScopeGroupId());
133            }
134    
135            public static String getSourceLayoutPath(
136                    PortletDataContext portletDataContext, long layoutId) {
137    
138                    StringBundler sb = new StringBundler(5);
139    
140                    sb.append(getSourceRootPath(portletDataContext));
141                    sb.append(StringPool.FORWARD_SLASH);
142                    sb.append(PATH_PREFIX_LAYOUT);
143                    sb.append(StringPool.FORWARD_SLASH);
144                    sb.append(layoutId);
145    
146                    return sb.toString();
147            }
148    
149            public static String getSourcePortletPath(
150                    PortletDataContext portletDataContext, String portletId) {
151    
152                    StringBundler sb = new StringBundler(5);
153    
154                    sb.append(getSourceRootPath(portletDataContext));
155                    sb.append(StringPool.FORWARD_SLASH);
156                    sb.append(PATH_PREFIX_PORTLET);
157                    sb.append(StringPool.FORWARD_SLASH);
158                    sb.append(portletId);
159    
160                    return sb.toString();
161            }
162    
163            public static String getSourceRootPath(
164                    PortletDataContext portletDataContext) {
165    
166                    return getRootPath(
167                            PATH_PREFIX_GROUP, portletDataContext.getSourceGroupId());
168            }
169    
170            protected static String getModelPath(
171                    String pathPrefix, long pathPrimaryKey, String className,
172                    Serializable primaryKeyObj, String dependentFileName) {
173    
174                    StringBundler sb = new StringBundler(7);
175    
176                    sb.append(getRootPath(pathPrefix, pathPrimaryKey));
177                    sb.append(StringPool.FORWARD_SLASH);
178                    sb.append(className);
179                    sb.append(StringPool.FORWARD_SLASH);
180                    sb.append(primaryKeyObj.toString());
181    
182                    if (dependentFileName == null) {
183                            sb.append(_FILE_EXTENSION_XML);
184                    }
185                    else {
186                            sb.append(StringPool.FORWARD_SLASH);
187                            sb.append(dependentFileName);
188                    }
189    
190                    return sb.toString();
191            }
192    
193            protected static String getRootPath(
194                    String pathPrefix, long pathPrimaryKey) {
195    
196                    StringBundler sb = new StringBundler(4);
197    
198                    sb.append(StringPool.FORWARD_SLASH);
199                    sb.append(pathPrefix);
200                    sb.append(StringPool.FORWARD_SLASH);
201                    sb.append(pathPrimaryKey);
202    
203                    return sb.toString();
204            }
205    
206            private static final String _FILE_EXTENSION_XML = ".xml";
207    
208    }