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                    StagedModelType stagedModelType = stagedModel.getStagedModelType();
100    
101                    if (stagedModel instanceof StagedGroupedModel) {
102                            StagedGroupedModel stagedGroupedModel =
103                                    (StagedGroupedModel)stagedModel;
104    
105                            return getModelPath(
106                                    PATH_PREFIX_GROUP, stagedGroupedModel.getGroupId(),
107                                    stagedModelType.getClassName(), stagedModel.getPrimaryKeyObj(),
108                                    dependentFileName);
109                    }
110                    else {
111                            return getModelPath(
112                                    PATH_PREFIX_COMPANY, stagedModel.getCompanyId(),
113                                    stagedModelType.getClassName(), stagedModel.getPrimaryKeyObj(),
114                                    dependentFileName);
115                    }
116            }
117    
118            public static String getPortletPath(
119                    PortletDataContext portletDataContext, String portletId) {
120    
121                    StringBundler sb = new StringBundler(5);
122    
123                    sb.append(getRootPath(portletDataContext));
124                    sb.append(StringPool.FORWARD_SLASH);
125                    sb.append(PATH_PREFIX_PORTLET);
126                    sb.append(StringPool.FORWARD_SLASH);
127                    sb.append(portletId);
128    
129                    return sb.toString();
130            }
131    
132            public static String getRootPath(PortletDataContext portletDataContext) {
133                    return getRootPath(
134                            PATH_PREFIX_GROUP, portletDataContext.getScopeGroupId());
135            }
136    
137            public static String getSourceLayoutPath(
138                    PortletDataContext portletDataContext, long layoutId) {
139    
140                    StringBundler sb = new StringBundler(5);
141    
142                    sb.append(getSourceRootPath(portletDataContext));
143                    sb.append(StringPool.FORWARD_SLASH);
144                    sb.append(PATH_PREFIX_LAYOUT);
145                    sb.append(StringPool.FORWARD_SLASH);
146                    sb.append(layoutId);
147    
148                    return sb.toString();
149            }
150    
151            public static String getSourcePortletPath(
152                    PortletDataContext portletDataContext, String portletId) {
153    
154                    StringBundler sb = new StringBundler(5);
155    
156                    sb.append(getSourceRootPath(portletDataContext));
157                    sb.append(StringPool.FORWARD_SLASH);
158                    sb.append(PATH_PREFIX_PORTLET);
159                    sb.append(StringPool.FORWARD_SLASH);
160                    sb.append(portletId);
161    
162                    return sb.toString();
163            }
164    
165            public static String getSourceRootPath(
166                    PortletDataContext portletDataContext) {
167    
168                    return getRootPath(
169                            PATH_PREFIX_GROUP, portletDataContext.getSourceGroupId());
170            }
171    
172            protected static String getModelPath(
173                    String pathPrefix, long pathPrimaryKey, String className,
174                    Serializable primaryKeyObj, String dependentFileName) {
175    
176                    StringBundler sb = new StringBundler(7);
177    
178                    sb.append(getRootPath(pathPrefix, pathPrimaryKey));
179                    sb.append(StringPool.FORWARD_SLASH);
180                    sb.append(className);
181                    sb.append(StringPool.FORWARD_SLASH);
182                    sb.append(primaryKeyObj.toString());
183    
184                    if (dependentFileName == null) {
185                            sb.append(_FILE_EXTENSION_XML);
186                    }
187                    else {
188                            sb.append(StringPool.FORWARD_SLASH);
189                            sb.append(dependentFileName);
190                    }
191    
192                    return sb.toString();
193            }
194    
195            protected static String getRootPath(
196                    String pathPrefix, long pathPrimaryKey) {
197    
198                    StringBundler sb = new StringBundler(4);
199    
200                    sb.append(StringPool.FORWARD_SLASH);
201                    sb.append(pathPrefix);
202                    sb.append(StringPool.FORWARD_SLASH);
203                    sb.append(pathPrimaryKey);
204    
205                    return sb.toString();
206            }
207    
208            private static final String _FILE_EXTENSION_XML = ".xml";
209    
210    }