org.wso2.developerstudio.eclipse.artifact.webapp.project.nature.WebAppProjectNature.java Source code

Java tutorial

Introduction

Here is the source code for org.wso2.developerstudio.eclipse.artifact.webapp.project.nature.WebAppProjectNature.java

Source

/*
 * Copyright (c) 2010, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
 *
 * 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 org.wso2.developerstudio.eclipse.artifact.webapp.project.nature;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import org.apache.maven.model.Dependency;
import org.apache.maven.model.Repository;
import org.apache.maven.model.RepositoryPolicy;
import org.apache.maven.project.MavenProject;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IFolder;
import org.eclipse.core.runtime.CoreException;
import org.wso2.developerstudio.eclipse.artifact.webapp.utils.WebAppTemplateUtils;
import org.wso2.developerstudio.eclipse.logging.core.IDeveloperStudioLog;
import org.wso2.developerstudio.eclipse.logging.core.Logger;
import org.wso2.developerstudio.eclipse.maven.util.MavenUtils;
import org.wso2.developerstudio.eclipse.platform.core.nature.AbstractWSO2ProjectNature;
import org.wso2.developerstudio.eclipse.utils.data.ITemporaryFileTag;
import org.wso2.developerstudio.eclipse.utils.file.FileUtils;
import org.wso2.developerstudio.eclipse.utils.jdt.JavaUtils;
import org.wso2.developerstudio.eclipse.utils.project.ProjectUtils;
import org.wso2.developerstudio.eclipse.utils.wst.WebUtils;

public class WebAppProjectNature extends AbstractWSO2ProjectNature {

    private static IDeveloperStudioLog log = Logger
            .getLog(org.wso2.developerstudio.eclipse.artifact.webapp.Activator.PLUGIN_ID);

    public void configure() throws CoreException {
        /*since we reuse the dynamic web project,we need to identify it when adding the project nature
        to do that we keep this variable as a switch*/
        JavaUtils.isWebApp = true;
        addJavaProjectNature();
        try {
            updatePom();
        } catch (Exception e) {
            log.error(e.getMessage(), e);
        }
        JavaUtils.isWebApp = false;
    }

    private void setupAsWebApp() throws CoreException, IOException {
        IFile webXmlLocation = WebUtils.getWEBXmlLocation(getProject());
        if (webXmlLocation == null) {
            IFolder webappFolder = ProjectUtils.getWorkspaceFolder(getProject(), "src", "main", "webapp");
            ITemporaryFileTag warTempTag = FileUtils.createNewTempTag();
            File webappTemplateArchive = new WebAppTemplateUtils().getResourceFile("webapp-template.war");
            WebUtils.extractWAR(webappFolder, webappTemplateArchive);
            warTempTag.clearAndEnd();
        }
    }

    public void deconfigure() throws CoreException {

    }

    public void updatePom() throws Exception {
        File mavenProjectPomLocation = getProject().getFile("pom.xml").getLocation().toFile();
        MavenProject mavenProject = MavenUtils.getMavenProject(mavenProjectPomLocation);
        /*Adding J2EE Dependency*/
        List<Dependency> dependencies = new ArrayList<Dependency>();
        Dependency j2eeDepen = new Dependency();
        j2eeDepen.setGroupId("javax");
        j2eeDepen.setArtifactId("javaee-web-api");
        j2eeDepen.setVersion("6.0");
        j2eeDepen.setScope("provided");
        dependencies.add(j2eeDepen);
        MavenUtils.addMavenDependency(mavenProject, dependencies);
        /*Adding Plugins*/
        MavenUtils.updateMavenProjectWithWarBuilderPlugin(getProject(), mavenProject, mavenProjectPomLocation);

        Repository repo = new Repository();
        repo.setUrl("http://download.java.net/maven/2");
        repo.setId("java.net2");
        repo.setName("Repository hosting the jee6 artifacts");
        RepositoryPolicy releasePolicy = new RepositoryPolicy();
        releasePolicy.setEnabled(true);
        releasePolicy.setUpdatePolicy("daily");
        releasePolicy.setChecksumPolicy("ignore");
        repo.setReleases(releasePolicy);
        mavenProject.getModel().addRepository(repo);

        MavenUtils.saveMavenProject(mavenProject, mavenProjectPomLocation);
    }

}