Package org.apache.uima.pear.nature

Source Code of org.apache.uima.pear.nature.ProjectCustomizer

/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements.  See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership.  The ASF licenses this file
* to you 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.apache.uima.pear.nature;

import java.io.ByteArrayInputStream;
import java.io.InputStream;

import org.apache.uima.pear.PearException;
import org.apache.uima.pear.insd.edit.PearInstallationDescriptor;
import org.eclipse.core.resources.IContainer;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IFolder;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IProjectDescription;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.Path;

import org.apache.uima.pear.tools.InstallationDescriptor;

/**
*
* A util class to handle customization of IProject with the UIMA nature
*
*
*
*/
public class ProjectCustomizer {

  public static final String UIMA_NATURE_ID = "org.apache.uima.pear.UimaNature";

  // public static final String STORE_PATH = "metadata/store.xml";

  /**
   * Customizes an IProject with the UIMA nature using an InstallationDescriptor instance
   *
   * @param container
   *          An IProject
   * @param insd
   *          An InstallationDescriptor
   * @throws PearException
   *           If a problem occurs
   */
  public static void customizeProject(IContainer container, InstallationDescriptor insd)
          throws PearException {
    createPearFolderStructure(container);
    PearInstallationDescriptor.createInstallationDescriptor(container, insd, false);
    // only add UIMA Nature to projects
    if (container.getType() == IResource.PROJECT) {
      addUIMANature((IProject) container);
    }
  }

  /**
   * Customizes an IProject with the UIMA nature using an empty installation descriptor.
   *
   * @param project
   *          An IProject
   * @throws PearException
   *           If a problem occurs
   */
  public static void customizeProject(IProject project) throws PearException {
    InstallationDescriptor insd = new InstallationDescriptor();
    customizeProject(project, insd);
  }

  /**
   * Adds the UIMA nature to a project
   *
   * @param project
   *          an IProject
   * @throws PearException
   *           If a problem occurs
   */
  public static void addUIMANature(IProject project) throws PearException {
    try {
      if (!project.hasNature(UIMA_NATURE_ID)) {
        IProjectDescription description = project.getDescription();
        String[] natures = description.getNatureIds();
        String[] newNatures = new String[natures.length + 1];
        System.arraycopy(natures, 0, newNatures, 0, natures.length);
        newNatures[natures.length] = UIMA_NATURE_ID;
        description.setNatureIds(newNatures);
        project.setDescription(description, null);
        project.close(null);
        project.open(null);
      }
    } catch (Throwable e) {
      PearException subEx = new PearException("The UIMA Nature could not be added properly.", e);
      throw subEx;
    }
  }

  /**
   * Creates the PEAR folder structure
   *
   * @param container
   *          an IProject
   * @throws PearException
   *           if a problem occurs
   */
  public static void createPearFolderStructure(IContainer container) throws PearException {
    try {
      // Create PEAR Folder Structure - Required Elements always
      ProjectCustomizer.createFolder(container, "metadata");

      // Create PEAR Folder Structure - Optional Elements only for projects
      if (container.getType() == IResource.PROJECT) {
        ProjectCustomizer.createFolder(container, "src");
        ProjectCustomizer.createFolder(container, "bin");
        ProjectCustomizer.createFolder(container, "desc");
        ProjectCustomizer.createFolder(container, "lib");
        ProjectCustomizer.createFolder(container, "data");
        ProjectCustomizer.createFolder(container, "doc");
        ProjectCustomizer.createFolder(container, "conf");
        ProjectCustomizer.createFolder(container, "resources");
      }
    } catch (Throwable e) {
      PearException subEx = new PearException(
              "The PEAR folder structure could not be created properly.", e);
      throw subEx;
    }
  }

  /**
   * Creates a folder, if it does not exist, in a given container
   *
   * @param container
   *          an IContainer
   * @param folderName
   *          The folder name
   * @return the handle (IFolder) to the folder
   * @throws PearException
   *           If a problem occurs
   */
  public static IFolder createFolder(IContainer container, String folderName) throws PearException {
    try {
      IFolder folder = container.getFolder(new Path(folderName));
      // If the folder does not exist, create and return, failure returns null
      if (!folder.exists()) {
        folder.create(true, true, null);
        return folder;
      } else {
        // return what already exisited
        return folder;
      }
    } catch (Throwable e) {
      PearException subEx = new PearException("folderName could not be created properly.", e);
      throw subEx;
    }
  }

  /**
   * Creates a file in a project with a string as content
   *
   * @param project
   *          an IProject
   * @param fileName
   *          pathname relative to the project
   * @param s
   *          A string representing the content
   * @param overrideContentIfExist
   *          if true, overrides existing file
   * @return a handle to the file (IFile)
   * @throws PearException
   *           If a problem occurs
   */
  public static IFile createFile(IProject project, String fileName, String s,
          boolean overrideContentIfExist) throws PearException {
    InputStream is = null;
    try {
      is = new ByteArrayInputStream(s.getBytes("UTF-8"));
      return createFile(project, fileName, is, overrideContentIfExist);
    } catch (Throwable e) {
      PearException subEx = new PearException(fileName + " could not be created/saved properly.", e);
      throw subEx;
    }
  }

  /**
   * Creates a file in a project with an InputStream for the content
   *
   * @param container
   *          an IProject
   * @param fileName
   *          pathname relative to the project
   * @param is
   *          An inputStream for the the content
   * @param overrideContentIfExist
   *          if true, overrides existing file
   * @return a handle to the file (IFile)
   * @throws PearException
   *           If a problem occurs
   */
  public static IFile createFile(IContainer container, String fileName, InputStream is,
          boolean overrideContentIfExist) throws PearException {
    try {
      createPearFolderStructure(container);
      // if we have a container
      if (container.exists()) {
        IFile newFile = container.getFile(new Path(fileName));

        // If the file does not exist, create with content, mark, and return
        if (!newFile.exists()) {
          newFile.create(is, false, null);
          return newFile;
        } else {
          if (overrideContentIfExist)
            newFile.setContents(is, true, true, null);
          // return what already exisited
          return newFile;
        }
      } else
        // return null as there is no container to place a file in
        return null;
    } catch (Throwable e) {
      PearException subEx = new PearException(fileName + " could not be created/saved properly.", e);
      throw subEx;
    }
  }

}
TOP

Related Classes of org.apache.uima.pear.nature.ProjectCustomizer

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.