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.tools.deploy;
016    
017    import com.liferay.portal.kernel.log.Log;
018    import com.liferay.portal.kernel.log.LogFactoryUtil;
019    import com.liferay.portal.kernel.util.ArrayUtil;
020    
021    import javax.enterprise.deploy.shared.ModuleType;
022    import javax.enterprise.deploy.spi.DeploymentManager;
023    import javax.enterprise.deploy.spi.TargetModuleID;
024    import javax.enterprise.deploy.spi.status.DeploymentStatus;
025    import javax.enterprise.deploy.spi.status.ProgressEvent;
026    import javax.enterprise.deploy.spi.status.ProgressListener;
027    import javax.enterprise.deploy.spi.status.ProgressObject;
028    
029    /**
030     * @author Brian Wing Shun Chan
031     * @author Sandeep Soni
032     */
033    public class DeploymentProgressListener implements ProgressListener {
034    
035            public DeploymentProgressListener(
036                    DeploymentHandler deploymentHandler, String warContext) {
037    
038                    _deploymentHandler = deploymentHandler;
039                    _warContext = warContext;
040                    _deploymentManager = _deploymentHandler.getDeploymentManager();
041            }
042    
043            @Override
044            public void handleProgressEvent(ProgressEvent progressEvent) {
045                    DeploymentStatus deploymentStatus = progressEvent.getDeploymentStatus();
046    
047                    if (_log.isInfoEnabled()) {
048                            _log.info(deploymentStatus.getMessage());
049                    }
050    
051                    if (deploymentStatus.isCompleted()) {
052                            try {
053                                    TargetModuleID[] targetModuleIDs =
054                                            _deploymentManager.getNonRunningModules(
055                                                    ModuleType.WAR, _deploymentManager.getTargets());
056    
057                                    if (ArrayUtil.isNotEmpty(targetModuleIDs)) {
058                                            for (TargetModuleID targetModuleID : targetModuleIDs) {
059                                                    if (!_warContext.equals(targetModuleID.getModuleID())) {
060                                                            continue;
061                                                    }
062    
063                                                    ProgressObject startProgress = _deploymentManager.start(
064                                                            new TargetModuleID[] {targetModuleID});
065    
066                                                    startProgress.addProgressListener(
067                                                            new StartProgressListener(_deploymentHandler));
068    
069                                                    _deploymentHandler.setError(false);
070                                                    _deploymentHandler.setStarted(true);
071    
072                                                    break;
073                                            }
074                                    }
075                                    else {
076                                            targetModuleIDs = _deploymentManager.getAvailableModules(
077                                                    ModuleType.WAR, _deploymentManager.getTargets());
078    
079                                            for (TargetModuleID targetModuleID : targetModuleIDs) {
080                                                    if (!_warContext.equals(targetModuleID.getModuleID())) {
081                                                            continue;
082                                                    }
083    
084                                                    ProgressObject startProgress = _deploymentManager.start(
085                                                            new TargetModuleID[] {targetModuleID});
086    
087                                                    startProgress.addProgressListener(
088                                                            new StartProgressListener(_deploymentHandler));
089    
090                                                    _deploymentHandler.setError(false);
091                                                    _deploymentHandler.setStarted(true);
092    
093                                                    break;
094                                            }
095                                    }
096                            }
097                            catch (Exception e) {
098                                    _log.error(e, e);
099    
100                                    _deploymentHandler.setError(true);
101                                    _deploymentHandler.setStarted(false);
102                            }
103                    }
104                    else if (deploymentStatus.isFailed()) {
105                            _deploymentHandler.setError(true);
106                            _deploymentHandler.setStarted(false);
107                    }
108            }
109    
110            private static final Log _log = LogFactoryUtil.getLog(
111                    DeploymentProgressListener.class);
112    
113            private final DeploymentHandler _deploymentHandler;
114            private final DeploymentManager _deploymentManager;
115            private final String _warContext;
116    
117    }