org.eclipse.epf.importing.services.CommandLinePluginImporter.java Source code

Java tutorial

Introduction

Here is the source code for org.eclipse.epf.importing.services.CommandLinePluginImporter.java

Source

//------------------------------------------------------------------------------
// Copyright (c) 2005, 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 implementation
//------------------------------------------------------------------------------
package org.eclipse.epf.importing.services;

import java.io.File;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.epf.common.service.utils.CommandLineRunner;
import org.eclipse.epf.common.utils.XMLUtil;
import org.eclipse.epf.importing.services.PluginImportData.PluginInfo;
import org.eclipse.epf.library.xmi.XMILibraryUtil;
import org.eclipse.jface.dialogs.ProgressMonitorDialog;
import org.eclipse.swt.widgets.Display;
import org.eclipse.ui.actions.WorkspaceModifyOperation;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

/**
 * Implementation for importing plugin driven by command line
 * 
 * @author Weiping Lu
 * @since 1.2
 */
public class CommandLinePluginImporter extends CommandLineRunner {

    private static String ImportPluginsTag = "ImportPlugins"; //$NON-NLS-1$"   
    private static String SelectedPluginTag = "SelectedPlugin"; //$NON-NLS-1$"

    private static String BaseLibraryFolderUriAtt = "baseLibraryFolderUri"; //$NON-NLS-1$"
    private static String ImportLibraryFolderUriAtt = "importLibraryFolderUri"; //$NON-NLS-1$"
    private static String NameAtt = "name"; //$NON-NLS-1$"

    private String baseLibPath;
    private String importLibPath;

    private Set<String> selectedPlugins;

    public boolean execute(String[] args) {
        if (!super.execute(args)) {
            return false;
        }
        try {
            loadInputFile();
            WorkspaceModifyOperation operation = new WorkspaceModifyOperation() {
                public void execute(IProgressMonitor monitor) {
                    try {
                        monitor.setTaskName("Openning base library and preparing import ...");//$NON-NLS-1$"
                        XMILibraryUtil.openMethodLibrary(baseLibPath);

                        File importLibFolder = new File(importLibPath);

                        PluginImportData data = new PluginImportData();
                        data.llData.setLibName(importLibFolder.getName());
                        data.llData.setParentFolder(importLibFolder.getAbsolutePath());
                        final PluginImportingService service = new PluginImportingService(data);
                        service.validate(null);

                        List importPlugins = data.getPlugins();
                        for (int i = 0; i < importPlugins.size(); i++) {
                            PluginInfo info = (PluginInfo) importPlugins.get(i);
                            info.selected = selectedPlugins.isEmpty() || selectedPlugins.contains(info.name);
                        }

                        service.performImport(monitor);
                    } catch (Exception e) {
                        e.printStackTrace();
                    } finally {
                        monitor.done();
                    }
                }
            };

            ProgressMonitorDialog pmDialog = new ProgressMonitorDialog(Display.getCurrent().getActiveShell());
            pmDialog.run(true, false, operation);

        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }

        return true;
    }

    private void loadInputFile() throws Exception {
        Document document = XMLUtil.loadXml(getInputFile());
        Element root = document.getDocumentElement();
        if (!root.getTagName().equals(ImportPluginsTag)) {
            String msg = "The root element must be:  " + ImportPluginsTag; //$NON-NLS-1$
            throw new RuntimeException(msg);
        }
        baseLibPath = root.getAttribute(BaseLibraryFolderUriAtt);
        importLibPath = root.getAttribute(ImportLibraryFolderUriAtt);
        selectedPlugins = new HashSet<String>();

        NodeList nodes = root.getChildNodes();
        int sz = nodes == null ? 0 : nodes.getLength();
        for (int i = 0; i < sz; i++) {
            Node node = nodes.item(i);
            if (node instanceof Element) {
                Element element = (Element) node;
                if (element.getTagName().equals(SelectedPluginTag)) {
                    String name = element.getAttribute(NameAtt);
                    selectedPlugins.add(name);
                }
            }
        }

    }

}