org.ebayopensource.turmeric.eclipse.core.Activator.java Source code

Java tutorial

Introduction

Here is the source code for org.ebayopensource.turmeric.eclipse.core.Activator.java

Source

/*******************************************************************************
 * Copyright (c) 2006-2010 eBay Inc. 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
 *******************************************************************************/
package org.ebayopensource.turmeric.eclipse.core;

import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.net.URISyntaxException;
import java.net.URL;
import java.util.jar.JarFile;

import org.apache.commons.lang.StringUtils;
import org.ebayopensource.turmeric.eclipse.core.logging.SOALogger;
import org.ebayopensource.turmeric.eclipse.utils.plugin.JDTUtil;
import org.ebayopensource.turmeric.eclipse.utils.plugin.WorkspaceUtil;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.Plugin;
import org.eclipse.wst.xml.core.internal.provisional.format.FormatProcessorXML;
import org.eclipse.xsd.XSDSchema;
import org.eclipse.xsd.util.XSDParser;
import org.osgi.framework.BundleContext;

/**
 * The activator class controls the plug-in life cycle
 */
public class Activator extends Plugin {

    private static final String EXT_XSD = ".xsd";
    // The plug-in ID
    public static final String PLUGIN_ID_PREFIX = "org.ebayopensource.turmeric.eclipse";
    public static final String PLUGIN_ID = PLUGIN_ID_PREFIX + ".core";

    // The shared instance
    private static Activator plugin;

    /**
     * The constructor
     */
    public Activator() {
    }

    /*
     * (non-Javadoc)
     * 
     * @see
     * org.eclipse.core.runtime.Plugins#start(org.osgi.framework.BundleContext)
     */
    public void start(BundleContext context) throws Exception {
        super.start(context);
        plugin = this;
        StringBuffer buf = new StringBuffer();
        buf.append("SOAPlugin.start - ");
        buf.append(JDTUtil.getBundleInfo(context.getBundle(), SOALogger.DEBUG));
        SOALogger.getLogger().info(buf);
    }

    /*
     * (non-Javadoc)
     * 
     * @see
     * org.eclipse.core.runtime.Plugin#stop(org.osgi.framework.BundleContext)
     */
    public void stop(BundleContext context) throws Exception {
        plugin = null;
        super.stop(context);
    }

    /**
     * Returns the shared instance
     * 
     * @return the shared instance
     */
    public static Activator getDefault() {
        return plugin;
    }

    public static XSDSchema parseSchema(InputStream inputStream) throws IOException {
        try {
            XSDParser xSDParser = new XSDParser();
            xSDParser.parse(inputStream);
            return xSDParser.getSchema();
        } finally {
            if (inputStream != null)
                inputStream.close();
        }
    }

    public static XSDSchema parseSchema(URL url) throws IOException {
        InputStream inputStream = null;
        inputStream = url.openStream();
        return parseSchema(inputStream);
    }

    /**
     * Just appending the extn to the XSD name. Extn names could be changed :)),
     * You never know. This is just a dumb helper
     * 
     * @param typeName
     * @return
     */
    public static String getXsdFileNameFromTypeName(String typeName) {
        String retValue = typeName;
        if (!StringUtils.isEmpty(typeName) && !typeName.endsWith(EXT_XSD))
            retValue = retValue + EXT_XSD;
        return retValue;
    }

    /**
     * @param typeName
     * @return
     * 
     *         Answers the file location relative to the project structure. In
     *         short project.getFile() with this output should return the file.
     */
    public static String getXsdFileLocation(String typeName, IProject project) {
        String retValue = "";
        if (!StringUtils.isEmpty(typeName)) {
            if (isNewTypLibrary(project)) {
                retValue = FOLDER_META_SRC_TYPES + WorkspaceUtil.PATH_SEPERATOR + project.getName()
                        + WorkspaceUtil.PATH_SEPERATOR + typeName + EXT_XSD;

            } else {
                retValue = FOLDER_META_SRC_TYPES + WorkspaceUtil.PATH_SEPERATOR + typeName + EXT_XSD;
            }
        }
        return retValue;
    }

    /**
     * TODO: these need to be setup through an extension point or preference
     * page.
     */
    public static final String TYPES_LOCATION_IN_JAR = "types";
    private static final String FOLDER_GEN_SRC = "gen-src";
    private static final String FOLDER_GEN_META_SRC = "gen-meta-src";
    private static final String FOLDER_GEN_META_SRC_META_INF = "gen-meta-src/META-INF";
    private static final String FOLDER_META_SRC = "meta-src";
    private static final String FOLDER_META_SRC_META_INF = "meta-src/META-INF";
    private static final String FOLDER_META_SRC_TYPES = "meta-src/types";
    private static final String INFO_DEP_XML_PATH_IN_JAR = "META-INF/";

    /**
     * Old type library jar(NOT in workspace) has the dir structure \types\<xsd>
     * and the new one has meta-src\types\<typeLibName>\<xsd>
     * 
     * @return
     * @throws IOException
     * @throws URISyntaxException
     */
    public static boolean isNewTypLibrary(URL jarURL, String projectName) throws IOException {
        File file = new File(jarURL.getPath());
        JarFile jarFile;
        jarFile = new JarFile(file);
        return jarFile.getEntry(TYPES_LOCATION_IN_JAR + WorkspaceUtil.PATH_SEPERATOR + projectName) != null;

    }

    /**
     * Old type library project (in workspace) has the dir structure
     * meta-src\types\<xsd> and the new one has
     * meta-src\types\<typeLibName>\<xsd>
     * 
     * @return
     */
    public static boolean isNewTypLibrary(IProject project) {
        return project.getFolder(FOLDER_META_SRC_TYPES + WorkspaceUtil.PATH_SEPERATOR + project.getName()).exists();
    }

    public static String formatContents(String contents) throws IOException, CoreException {
        FormatProcessorXML formatProcessor = new FormatProcessorXML();
        return formatProcessor.formatContent(contents);
    }

}