org.eclipse.jst.j2ee.internal.jca.operations.ConnectorComponentImportOperation.java Source code

Java tutorial

Introduction

Here is the source code for org.eclipse.jst.j2ee.internal.jca.operations.ConnectorComponentImportOperation.java

Source

/*******************************************************************************
 * Copyright (c) 2003, 2007 IBM Corporation and others.
 * All rights reserved. This program and the accompanying materials
 * are 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:
 * IBM Corporation - initial API and implementation
 *******************************************************************************/
package org.eclipse.jst.j2ee.internal.jca.operations;

import java.util.ArrayList;
import java.util.List;

import org.eclipse.core.commands.ExecutionException;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.NullProgressMonitor;
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.jem.util.logger.proxy.Logger;
import org.eclipse.jst.j2ee.datamodel.properties.IJ2EEComponentImportDataModelProperties;
import org.eclipse.jst.j2ee.internal.archive.ComponentArchiveSaveAdapter;
import org.eclipse.jst.j2ee.internal.archive.ConnectorComponentArchiveSaveAdapter;
import org.eclipse.jst.j2ee.internal.archive.operations.J2EEArtifactImportOperation;
import org.eclipse.jst.j2ee.internal.plugin.IJ2EEModuleConstants;
import org.eclipse.jst.jee.archive.IArchive;
import org.eclipse.jst.jee.archive.IArchiveResource;
import org.eclipse.wst.common.componentcore.resources.IVirtualComponent;
import org.eclipse.wst.common.componentcore.resources.IVirtualFile;
import org.eclipse.wst.common.frameworks.datamodel.IDataModel;

public class ConnectorComponentImportOperation extends J2EEArtifactImportOperation {

    public ConnectorComponentImportOperation(IDataModel model) {
        super(model);
    }

    @Override
    protected void doExecute(IProgressMonitor monitor) throws ExecutionException {
        super.doExecute(monitor);
        addAssociateArchivesToClassPath();
    }

    /**
     * Adds all jar within the file to the classpath.
     */
    protected void addAssociateArchivesToClassPath() {
        List<IClasspathEntry> extraEntries = new ArrayList<IClasspathEntry>();

        List<IArchiveResource> archiveResources = ((IArchive) archiveWrapper.getUnderLyingArchive())
                .getArchiveResources();
        IVirtualFile vFile = null;
        IFile file = null;
        for (IArchiveResource archiveResource : archiveResources) {
            if (archiveResource.getPath().lastSegment().endsWith(IJ2EEModuleConstants.JAR_EXT)) {
                vFile = virtualComponent.getRootFolder().getFile(archiveResource.getPath());
                if (vFile.exists()) {
                    file = vFile.getUnderlyingFile();
                    extraEntries.add(JavaCore.newLibraryEntry(file.getFullPath(), file.getFullPath(), null, true));
                }
            }
        }
        try {
            addToClasspath(getDataModel(), extraEntries);
        } catch (JavaModelException e) {
            Logger.getLogger().logError(e);
        }
    }

    protected static void addToClasspath(IDataModel importModel, List extraEntries) throws JavaModelException {
        if (extraEntries.size() > 0) {
            IJavaProject javaProject = JavaCore.create(
                    ((IVirtualComponent) importModel.getProperty(IJ2EEComponentImportDataModelProperties.COMPONENT))
                            .getProject());
            addToClasspath(extraEntries, javaProject);
        }
    }

    protected static void addToClasspath(List extraEntries, IJavaProject javaProject) throws JavaModelException {
        if (extraEntries.size() > 0) {
            IClasspathEntry[] javaClasspath = javaProject.getRawClasspath();
            List nonDuplicateList = new ArrayList();
            for (int i = 0; i < extraEntries.size(); i++) {
                IClasspathEntry extraEntry = (IClasspathEntry) extraEntries.get(i);
                boolean include = true;
                for (int j = 0; include && j < javaClasspath.length; j++) {
                    if (extraEntry.equals(javaClasspath[j])) {
                        include = false;
                    }
                }
                if (include) {
                    nonDuplicateList.add(extraEntry);
                }
            }
            if (nonDuplicateList.size() > 0) {
                IClasspathEntry[] newJavaClasspath = new IClasspathEntry[javaClasspath.length
                        + nonDuplicateList.size()];
                System.arraycopy(javaClasspath, 0, newJavaClasspath, 0, javaClasspath.length);
                for (int j = 0; j < nonDuplicateList.size(); j++) {
                    newJavaClasspath[javaClasspath.length + j] = (IClasspathEntry) nonDuplicateList.get(j);
                }
                javaProject.setRawClasspath(newJavaClasspath, new NullProgressMonitor());
            }
        }
    }

    @Override
    protected ComponentArchiveSaveAdapter getArchiveSaveAdapter(IVirtualComponent virtualComponent) {
        return new ConnectorComponentArchiveSaveAdapter(virtualComponent);
    }
}