com.photon.phresco.plugins.SharePointDeploy.java Source code

Java tutorial

Introduction

Here is the source code for com.photon.phresco.plugins.SharePointDeploy.java

Source

/*
 * ###
 * sharepoint-maven-plugin Maven Mojo
 * 
 * Copyright (C) 1999 - 2012 Photon Infotech Inc.
 * 
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 * 
 *      http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 * ###
 */
package com.photon.phresco.plugins;

import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.List;

import org.apache.commons.io.FileUtils;
import org.apache.maven.plugin.AbstractMojo;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.project.MavenProject;
import org.codehaus.plexus.util.StringUtils;
import org.codehaus.plexus.util.cli.CommandLineException;
import org.codehaus.plexus.util.cli.Commandline;
import com.photon.phresco.plugin.commons.PluginConstants;
import com.photon.phresco.exception.PhrescoException;
import com.photon.phresco.framework.PhrescoFrameworkFactory;
import com.photon.phresco.framework.api.ProjectAdministrator;
import com.photon.phresco.model.SettingsInfo;
import com.photon.phresco.util.ArchiveUtil;
import com.photon.phresco.util.ArchiveUtil.ArchiveType;
import com.photon.phresco.util.Constants;

/**
 * Goal which deploys the Java WebApp to a server
 * 
 * @goal deploy
 * 
 */
public class SharePointDeploy extends AbstractMojo implements PluginConstants {

    /**
     * The Maven project.
     * 
     * @parameter expression="${project}"
     * @required
     * @readonly
     */
    protected MavenProject project;

    /**
     * @parameter expression="${project.basedir}" required="true"
     * @readonly
     */
    protected File baseDir;

    /**
     * Build file name to deploy
     * 
     * @parameter expression="${buildName}" required="true"
     */
    protected String buildName;

    /**
     * @parameter expression="${environmentName}" required="true"
     */
    protected String environmentName;

    private File buildFile;
    private File tempDir;
    private File buildDir;
    private File temp;
    private File build;

    public void execute() throws MojoExecutionException {
        init();
        extractBuild();
        deploy();
    }

    private void init() throws MojoExecutionException {
        try {

            if (StringUtils.isEmpty(buildName) || StringUtils.isEmpty(environmentName)) {
                callUsage();
            }
            buildDir = new File(baseDir.getPath() + BUILD_DIRECTORY);
            build = new File(baseDir.getPath() + "\\source" + "\\");
            buildFile = new File(buildDir.getPath() + File.separator + buildName);
            tempDir = new File(buildDir.getPath() + TEMP_DIR);
            tempDir.mkdirs();
            temp = new File(tempDir.getPath() + "\\" + baseDir.getName() + ".wsp");
        } catch (Exception e) {
            getLog().error(e);
            throw new MojoExecutionException(e.getMessage(), e);
        }
    }

    private void callUsage() throws MojoExecutionException {
        getLog().error("Invalid usage.");
        getLog().info("Usage of Deploy Goal");
        getLog().info("mvn sharepoint:deploy -DbuildName=\"Name of the build\""
                + " -DenvironmentName=\"Multivalued evnironment names\"");
        throw new MojoExecutionException("Invalid Usage. Please see the Usage of Deploy Goal");
    }

    private void extractBuild() throws MojoExecutionException {
        try {
            ArchiveUtil.extractArchive(buildFile.getPath(), tempDir.getPath(), ArchiveType.ZIP);
            FileUtils.copyFileToDirectory(temp, build);
            FileUtils.deleteDirectory(tempDir);
        } catch (PhrescoException e) {
            throw new MojoExecutionException(e.getErrorMessage(), e);
        } catch (IOException e) {
            throw new MojoExecutionException(e.getMessage(), e);
        }
    }

    private void deploy() throws MojoExecutionException {
        try {
            ProjectAdministrator administrator = PhrescoFrameworkFactory.getProjectAdministrator();

            List<SettingsInfo> settingsInfos = administrator.getSettingsInfos(Constants.SETTINGS_TEMPLATE_SERVER,
                    baseDir.getName(), environmentName);
            for (SettingsInfo serverDetails : settingsInfos) {
                String deployDirectory = serverDetails.getPropertyInfo(Constants.SERVER_DEPLOY_DIR).getValue();
                String serverContext = serverDetails.getPropertyInfo(Constants.SERVER_CONTEXT).getValue();
                String protocol = serverDetails.getPropertyInfo(Constants.SERVER_PROTOCOL).getValue();
                String host = serverDetails.getPropertyInfo(Constants.SERVER_HOST).getValue();
                String port = serverDetails.getPropertyInfo(Constants.SERVER_PORT).getValue();
                String projectCode = baseDir.getName();
                restore(protocol, deployDirectory, serverContext, host, port);
                addSolution(projectCode, deployDirectory);
                deploysolution(protocol, deployDirectory, serverContext, host, port, projectCode);
            }
        } catch (CommandLineException e) {
            throw new MojoExecutionException(e.getMessage(), e);
        } catch (IOException e) {
            throw new MojoExecutionException(e.getMessage(), e);
        } catch (PhrescoException e) {
            throw new MojoExecutionException(e.getErrorMessage(), e);
        }
    }

    private void restore(String protocol, String deployDirectory, String serverContext, String host, String port)
            throws CommandLineException, IOException, MojoExecutionException {
        File file = new File(build.getPath() + "\\phresco-pilot.dat");
        if (!file.exists()) {
            return;
        }
        StringBuilder sb = new StringBuilder();
        sb.append(SHAREPOINT_STSADM);
        sb.append(STR_SPACE);
        sb.append(SHAREPOINT_STR_O);
        sb.append(SHAREPOINT_RESTORE);
        sb.append(STR_SPACE);
        sb.append(SHAREPOINT_STR_URL);
        sb.append(STR_SPACE);
        sb.append(protocol);
        sb.append(SHAREPOINT_STR_COLON);
        sb.append(SHAREPOINT_STR_DOUBLESLASH);
        sb.append(host);
        sb.append(SHAREPOINT_STR_COLON);
        sb.append(port);
        sb.append(SHAREPOINT_STR_BACKSLASH);
        sb.append(serverContext);
        sb.append(STR_SPACE);
        sb.append(SHAREPOINT_STR_HYPEN);
        sb.append(SHAREPOINT_STR_OVERWRITE);
        sb.append(STR_SPACE);
        sb.append(SHAREPOINT_STR_HYPEN);
        sb.append(SHAREPOINT_STR_FILENAME);
        sb.append(STR_SPACE);
        sb.append(SHAREPOINT_STR_DOUBLEQUOTES + build.getPath() + "\\phresco-pilot.dat"
                + SHAREPOINT_STR_DOUBLEQUOTES);
        Commandline cl = new Commandline(sb.toString());
        cl.setWorkingDirectory(deployDirectory);
        Process process = cl.execute();
        BufferedReader in = new BufferedReader(new InputStreamReader(process.getInputStream()));
        String line = null;
        while ((line = in.readLine()) != null) {
        }
    }

    private void addSolution(String ProjectCode, String deployDirectory) throws MojoExecutionException {
        try {
            StringBuilder sb = new StringBuilder();
            sb.append(SHAREPOINT_STSADM);
            sb.append(STR_SPACE);
            sb.append(SHAREPOINT_STR_O);
            sb.append(STR_SPACE);
            sb.append(SHAREPOINT_ADDSOLUTION);
            sb.append(STR_SPACE);
            sb.append(SHAREPOINT_STR_HYPEN);
            sb.append(SHAREPOINT_STR_FILENAME);
            sb.append(STR_SPACE);
            sb.append(SHAREPOINT_STR_DOUBLEQUOTES + baseDir.getPath() + "\\source" + "\\" + ProjectCode + ".wsp"
                    + SHAREPOINT_STR_DOUBLEQUOTES);
            File file = new File(baseDir.getPath() + "\\source" + "\\" + ProjectCode + ".wsp");
            if (file.exists()) {
                Commandline cl = new Commandline(sb.toString());
                cl.setWorkingDirectory(deployDirectory);
                Process process = cl.execute();
                BufferedReader in = new BufferedReader(new InputStreamReader(process.getInputStream()));
                String line = null;
                while ((line = in.readLine()) != null) {
                }
            } else {
                getLog().error("File Not found Exception");
            }
        } catch (CommandLineException e) {

            throw new MojoExecutionException(e.getMessage(), e);
        } catch (IOException e) {
            throw new MojoExecutionException(e.getMessage(), e);
        }
    }

    private void deploysolution(String protocol, String deploydirectory, String serverContext, String host,
            String port, String projectCode) throws MojoExecutionException, CommandLineException {
        try {
            StringBuilder sb = new StringBuilder();
            sb.append(SHAREPOINT_STSADM);
            sb.append(STR_SPACE);
            sb.append(SHAREPOINT_STR_O);
            sb.append(STR_SPACE);
            sb.append(SHAREPOINT_DEPLOYSOLUTION);
            sb.append(STR_SPACE);
            sb.append(SHAREPOINT_STR_HYPEN);
            sb.append(SHAREPOINT_STR_NAME);
            sb.append(STR_SPACE);
            sb.append(projectCode + ".wsp");
            sb.append(STR_SPACE);
            sb.append(SHAREPOINT_STR_HYPEN);
            sb.append(SHAREPOINT_STR_URL);
            sb.append(STR_SPACE);
            sb.append(protocol);
            sb.append(SHAREPOINT_STR_COLON);
            sb.append(SHAREPOINT_STR_DOUBLESLASH);
            sb.append(host);
            sb.append(SHAREPOINT_STR_COLON);
            sb.append(port);
            sb.append(SHAREPOINT_STR_BACKSLASH);
            sb.append(serverContext);
            sb.append(STR_SPACE);
            sb.append(SHAREPOINT_STR_HYPEN);
            sb.append(SHAREPOINT_STR_IMMEDIATE);
            sb.append(STR_SPACE);
            sb.append(SHAREPOINT_STR_HYPEN);
            sb.append(SHAREPOINT_STR_ALLOWACDEP);
            Commandline cl = new Commandline(sb.toString());
            cl.setWorkingDirectory(deploydirectory);
            Process process = cl.execute();
            BufferedReader in = new BufferedReader(new InputStreamReader(process.getInputStream()));
            String line = null;
            while ((line = in.readLine()) != null) {
            }
        } catch (CommandLineException e) {
            throw new MojoExecutionException(e.getMessage(), e);
        } catch (IOException e) {
            throw new MojoExecutionException(e.getMessage(), e);
        }
    }
}