org.jboss.tools.ws.core.command.JBossWSClassPathCommand.java Source code

Java tutorial

Introduction

Here is the source code for org.jboss.tools.ws.core.command.JBossWSClassPathCommand.java

Source

/******************************************************************************* 
 * Copyright (c) 2008 - 2014 Red Hat, Inc. and others. 
 * Distributed under license by Red Hat, Inc. All rights reserved. 
 * This program is made available under the terms of the 
 * Eclipse Public License v1.0 which accompanies this distribution, 
 * and is available at http://www.eclipse.org/legal/epl-v10.html 
 * 
 * Contributors: 
 * Red Hat, Inc. - initial API and implementation 
 ******************************************************************************/

package org.jboss.tools.ws.core.command;

import org.eclipse.core.commands.ExecutionException;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.core.runtime.Path;
import org.eclipse.core.runtime.Status;
import org.eclipse.jdt.core.IClasspathAttribute;
import org.eclipse.jdt.core.IClasspathEntry;
import org.eclipse.jdt.core.IJavaProject;
import org.eclipse.jdt.core.JavaCore;
import org.eclipse.jdt.core.JavaModelException;
import org.eclipse.jst.j2ee.classpathdep.ClasspathDependencyUtil;
import org.eclipse.jst.j2ee.classpathdep.IClasspathDependencyConstants;
import org.eclipse.osgi.util.NLS;
import org.eclipse.wst.common.frameworks.datamodel.AbstractDataModelOperation;
import org.eclipse.wst.common.frameworks.datamodel.IDataModel;
import org.jboss.tools.ws.core.facet.delegate.IJBossWSFacetDataModelProperties;
import org.jboss.tools.ws.core.messages.JBossWSCoreMessages;
import org.jboss.tools.ws.core.utils.StatusUtils;

/**
 * @author Grid Qian
 */
public class JBossWSClassPathCommand extends AbstractDataModelOperation {

    IProject project;
    private IDataModel model;

    public JBossWSClassPathCommand(IProject project, IDataModel model) {
        this.project = project;
        this.model = model;
    }

    public IStatus execute(IProgressMonitor monitor, IAdaptable info) throws ExecutionException {
        return executeOverride(monitor);
    }

    public IStatus executeOverride(IProgressMonitor monitor) {
        IStatus status = Status.OK_STATUS;
        try {
            boolean isServerSupplied = model
                    .getBooleanProperty(IJBossWSFacetDataModelProperties.JBOSS_WS_RUNTIME_IS_SERVER_SUPPLIED);
            if (isServerSupplied) {
                project.setPersistentProperty(
                        IJBossWSFacetDataModelProperties.PERSISTENCE_PROPERTY_SERVER_SUPPLIED_RUNTIME,
                        IJBossWSFacetDataModelProperties.DEFAULT_VALUE_IS_SERVER_SUPPLIED);
                project.setPersistentProperty(
                        IJBossWSFacetDataModelProperties.PERSISTENCE_PROPERTY_QNAME_RUNTIME_NAME, null);
                project.setPersistentProperty(IJBossWSFacetDataModelProperties.PERSISTENCE_PROPERTY_RNTIME_LOCATION,
                        null);
                project.setPersistentProperty(IJBossWSFacetDataModelProperties.PERSISTENCE_PROPERTY_ISDEPLOYED,
                        null);
            } else {
                // store runtime name and runtime location to the project

                String runtimeName = model.getStringProperty(IJBossWSFacetDataModelProperties.JBOSS_WS_RUNTIME_ID);
                String runtimeLocation = model
                        .getStringProperty(IJBossWSFacetDataModelProperties.JBOSS_WS_RUNTIME_HOME);
                boolean isDeployed = model.getBooleanProperty(IJBossWSFacetDataModelProperties.JBOSS_WS_DEPLOY);
                project.setPersistentProperty(
                        IJBossWSFacetDataModelProperties.PERSISTENCE_PROPERTY_QNAME_RUNTIME_NAME, runtimeName);
                project.setPersistentProperty(IJBossWSFacetDataModelProperties.PERSISTENCE_PROPERTY_RNTIME_LOCATION,
                        runtimeLocation);
                project.setPersistentProperty(IJBossWSFacetDataModelProperties.PERSISTENCE_PROPERTY_ISDEPLOYED,
                        String.valueOf(isDeployed));

                project.setPersistentProperty(
                        IJBossWSFacetDataModelProperties.PERSISTENCE_PROPERTY_SERVER_SUPPLIED_RUNTIME, null);

                status = addClassPath(project, runtimeName, isDeployed);
            }

        } catch (CoreException e) {
            status = StatusUtils.errorStatus(JBossWSCoreMessages.Error_Add_Facet_JBossWS, e);
        }
        return status;
    }

    public IStatus addClassPath(IProject project, String segment, boolean isDeployed) {
        IStatus status = Status.OK_STATUS;
        try {

            IClasspathEntry newClasspath;
            IJavaProject javaProject = JavaCore.create(project);

            if (isDeployed) {
                IClasspathAttribute depAttrib = JavaCore.newClasspathAttribute(
                        IClasspathDependencyConstants.CLASSPATH_COMPONENT_DEPENDENCY,
                        ClasspathDependencyUtil.getDefaultRuntimePath(true).toString());
                newClasspath = JavaCore.newContainerEntry(
                        new Path(JBossWSCoreMessages.JBossWS_Runtime_Lib).append(segment), null,
                        new IClasspathAttribute[] { depAttrib }, true);
            } else {
                newClasspath = JavaCore
                        .newContainerEntry(new Path(JBossWSCoreMessages.JBossWS_Runtime_Lib).append(segment));
            }

            IClasspathEntry[] oldClasspathEntries = javaProject.readRawClasspath();

            boolean isFolderInClassPathAlready = false;
            for (int i = 0; i < oldClasspathEntries.length && !isFolderInClassPathAlready; i++) {
                if (oldClasspathEntries[i].getPath().equals(newClasspath.getPath())) {
                    isFolderInClassPathAlready = true;
                    break;
                }
            }

            if (!isFolderInClassPathAlready) {

                IClasspathEntry[] newClasspathEntries = new IClasspathEntry[oldClasspathEntries.length + 1];
                for (int i = 0; i < oldClasspathEntries.length; i++) {
                    newClasspathEntries[i] = oldClasspathEntries[i];
                }
                newClasspathEntries[oldClasspathEntries.length] = newClasspath;

                javaProject.setRawClasspath(newClasspathEntries, new NullProgressMonitor());
            }
        } catch (JavaModelException e) {
            status = StatusUtils.errorStatus(
                    NLS.bind(JBossWSCoreMessages.Error_Copy, new String[] { e.getLocalizedMessage() }), e);
            return status;
        }

        return status;
    }

}