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(".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 layoutId) {
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(layoutId);
065    
066                    return sb.toString();
067            }
068    
069            public static String getModelPath(
070                    long groupId, String className, long classPK) {
071    
072                    return getModelPath(
073                            _PATH_PREFIX_GROUP, groupId, className, classPK, null);
074            }
075    
076            public static String getModelPath(
077                    PortletDataContext portletDataContext, String className, long classPK) {
078    
079                    return getModelPath(portletDataContext, className, classPK, null);
080            }
081    
082            public static String getModelPath(
083                    PortletDataContext portletDataContext, String className, long classPK,
084                    String dependentFileName) {
085    
086                    return getModelPath(
087                            _PATH_PREFIX_GROUP, portletDataContext.getSourceGroupId(),
088                            className, classPK, dependentFileName);
089            }
090    
091            public static String getModelPath(StagedModel stagedModel) {
092                    return getModelPath(stagedModel, null);
093            }
094    
095            public static String getModelPath(
096                    StagedModel stagedModel, String dependentFileName) {
097    
098                    if (stagedModel instanceof StagedGroupedModel) {
099                            StagedGroupedModel stagedGroupedModel =
100                                    (StagedGroupedModel)stagedModel;
101    
102                            return getModelPath(
103                                    _PATH_PREFIX_GROUP, stagedGroupedModel.getGroupId(),
104                                    stagedModel.getModelClassName(), stagedModel.getPrimaryKeyObj(),
105                                    dependentFileName);
106                    }
107                    else {
108                            return getModelPath(
109                                    _PATH_PREFIX_COMPANY, stagedModel.getCompanyId(),
110                                    stagedModel.getModelClassName(), stagedModel.getPrimaryKeyObj(),
111                                    dependentFileName);
112                    }
113            }
114    
115            public static String getPortletPath(
116                    PortletDataContext portletDataContext, String portletId) {
117    
118                    StringBundler sb = new StringBundler(5);
119    
120                    sb.append(getRootPath(portletDataContext));
121                    sb.append(StringPool.FORWARD_SLASH);
122                    sb.append(_PATH_PREFIX_PORTLET);
123                    sb.append(StringPool.FORWARD_SLASH);
124                    sb.append(portletId);
125    
126                    return sb.toString();
127            }
128    
129            public static String getRootPath(PortletDataContext portletDataContext) {
130                    return getRootPath(
131                            _PATH_PREFIX_GROUP, portletDataContext.getScopeGroupId());
132            }
133    
134            public static String getSourceLayoutPath(
135                    PortletDataContext portletDataContext, long layoutId) {
136    
137                    StringBundler sb = new StringBundler(5);
138    
139                    sb.append(getSourceRootPath(portletDataContext));
140                    sb.append(StringPool.FORWARD_SLASH);
141                    sb.append(_PATH_PREFIX_LAYOUT);
142                    sb.append(StringPool.FORWARD_SLASH);
143                    sb.append(layoutId);
144    
145                    return sb.toString();
146            }
147    
148            public static String getSourcePortletPath(
149                    PortletDataContext portletDataContext, String portletId) {
150    
151                    StringBundler sb = new StringBundler(5);
152    
153                    sb.append(getSourceRootPath(portletDataContext));
154                    sb.append(StringPool.FORWARD_SLASH);
155                    sb.append(_PATH_PREFIX_PORTLET);
156                    sb.append(StringPool.FORWARD_SLASH);
157                    sb.append(portletId);
158    
159                    return sb.toString();
160            }
161    
162            public static String getSourceRootPath(
163                    PortletDataContext portletDataContext) {
164    
165                    return getRootPath(
166                            _PATH_PREFIX_GROUP, portletDataContext.getSourceGroupId());
167            }
168    
169            protected static String getModelPath(
170                    String pathPrefix, long pathPrimaryKey, String className,
171                    Serializable primaryKeyObj, String dependentFileName) {
172    
173                    StringBundler sb = new StringBundler(7);
174    
175                    sb.append(getRootPath(pathPrefix, pathPrimaryKey));
176                    sb.append(StringPool.FORWARD_SLASH);
177                    sb.append(className);
178                    sb.append(StringPool.FORWARD_SLASH);
179                    sb.append(primaryKeyObj.toString());
180    
181                    if (dependentFileName == null) {
182                            sb.append(".xml");
183                    }
184                    else {
185                            sb.append(StringPool.FORWARD_SLASH);
186                            sb.append(dependentFileName);
187                    }
188    
189                    return sb.toString();
190            }
191    
192            protected static String getRootPath(
193                    String pathPrefix, long pathPrimaryKey) {
194    
195                    StringBundler sb = new StringBundler(4);
196    
197                    sb.append(StringPool.FORWARD_SLASH);
198                    sb.append(pathPrefix);
199                    sb.append(StringPool.FORWARD_SLASH);
200                    sb.append(pathPrimaryKey);
201    
202                    return sb.toString();
203            }
204    
205    }