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.service.impl;
016    
017    import com.liferay.portal.kernel.dao.orm.EntityCacheUtil;
018    import com.liferay.portal.kernel.exception.PortalException;
019    import com.liferay.portal.kernel.model.Company;
020    import com.liferay.portal.kernel.model.Group;
021    import com.liferay.portal.kernel.model.LayoutSet;
022    import com.liferay.portal.kernel.model.VirtualHost;
023    import com.liferay.portal.kernel.transaction.TransactionCommitCallbackUtil;
024    import com.liferay.portal.kernel.util.Validator;
025    import com.liferay.portal.model.impl.LayoutSetImpl;
026    import com.liferay.portal.model.impl.LayoutSetModelImpl;
027    import com.liferay.portal.service.base.VirtualHostLocalServiceBaseImpl;
028    import com.liferay.portal.util.PropsValues;
029    
030    import java.util.concurrent.Callable;
031    
032    /**
033     * @author Alexander Chow
034     */
035    public class VirtualHostLocalServiceImpl
036            extends VirtualHostLocalServiceBaseImpl {
037    
038            @Override
039            public VirtualHost fetchVirtualHost(long companyId, long layoutSetId) {
040                    return virtualHostPersistence.fetchByC_L(companyId, layoutSetId);
041            }
042    
043            @Override
044            public VirtualHost fetchVirtualHost(String hostname) {
045                    return virtualHostPersistence.fetchByHostname(hostname);
046            }
047    
048            @Override
049            public VirtualHost getVirtualHost(long companyId, long layoutSetId)
050                    throws PortalException {
051    
052                    return virtualHostPersistence.findByC_L(companyId, layoutSetId);
053            }
054    
055            @Override
056            public VirtualHost getVirtualHost(String hostname) throws PortalException {
057                    return virtualHostPersistence.findByHostname(hostname);
058            }
059    
060            @Override
061            public VirtualHost updateVirtualHost(
062                    long companyId, final long layoutSetId, String hostname) {
063    
064                    VirtualHost virtualHost = virtualHostPersistence.fetchByC_L(
065                            companyId, layoutSetId);
066    
067                    if (virtualHost == null) {
068                            long virtualHostId = counterLocalService.increment();
069    
070                            virtualHost = virtualHostPersistence.create(virtualHostId);
071    
072                            virtualHost.setCompanyId(companyId);
073                            virtualHost.setLayoutSetId(layoutSetId);
074                    }
075    
076                    virtualHost.setHostname(hostname);
077    
078                    virtualHostPersistence.update(virtualHost);
079    
080                    final Company company = companyPersistence.fetchByPrimaryKey(companyId);
081    
082                    if (company != null) {
083                            TransactionCommitCallbackUtil.registerCallback(
084                                    new Callable<Void>() {
085    
086                                            @Override
087                                            public Void call() throws Exception {
088                                                    EntityCacheUtil.removeResult(
089                                                            company.isEntityCacheEnabled(), company.getClass(),
090                                                            company.getPrimaryKeyObj());
091    
092                                                    return null;
093                                            }
094    
095                                    });
096    
097                            companyPersistence.clearCache(company);
098                    }
099    
100                    LayoutSet layoutSet = layoutSetPersistence.fetchByPrimaryKey(
101                            layoutSetId);
102    
103                    if ((layoutSet == null) &&
104                            Validator.isNotNull(PropsValues.VIRTUAL_HOSTS_DEFAULT_SITE_NAME)) {
105    
106                            Group group = groupPersistence.fetchByC_GK(
107                                    companyId, PropsValues.VIRTUAL_HOSTS_DEFAULT_SITE_NAME);
108    
109                            if (group != null) {
110                                    layoutSet = layoutSetPersistence.fetchByG_P(
111                                            group.getGroupId(), false);
112                            }
113                    }
114    
115                    if (layoutSet != null) {
116                            layoutSetPersistence.clearCache(layoutSet);
117    
118                            TransactionCommitCallbackUtil.registerCallback(
119                                    new Callable<Void>() {
120    
121                                            @Override
122                                            public Void call() {
123                                                    EntityCacheUtil.removeResult(
124                                                            LayoutSetModelImpl.ENTITY_CACHE_ENABLED,
125                                                            LayoutSetImpl.class, layoutSetId);
126    
127                                                    return null;
128                                            }
129    
130                                    });
131                    }
132    
133                    return virtualHost;
134            }
135    
136    }