All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.akhikhl.wuff.EclipseBundlePluginXmlBuilder.groovy Maven / Gradle / Ivy

/*
 * wuff
 *
 * Copyright 2014  Andrey Hihlovskiy.
 *
 * See the file "LICENSE" for copying and usage permission.
 */
package org.akhikhl.wuff

import groovy.xml.MarkupBuilder
import org.gradle.api.Project

/**
 *
 * @author akhikhl
 */
class EclipseBundlePluginXmlBuilder extends PluginXmlBuilder {

  protected List perspectiveIds = []

  EclipseBundlePluginXmlBuilder(Project project) {
    super(project)
  }

  @Override
  protected void populate(MarkupBuilder pluginXml) {
    populatePerspectives(pluginXml)
    populateViews(pluginXml)
  }

  protected void populatePerspectives(MarkupBuilder pluginXml) {
    List perspectiveClasses = PluginUtils.findClassesInSources(project, '**/*Perspective.groovy', '**/*Perspective.java', '**/Perspective*.groovy', '**/Perspective*.java')
    for(String perspectiveClass in perspectiveClasses) {
      def existingPerspectiveDef = existingConfig?.extension?.find({ it.'@point' == 'org.eclipse.ui.perspectives' && it.perspective?.'@class'?.text() == perspectiveClass })
      String perspectiveId
      if(existingPerspectiveDef) {
        perspectiveId = existingPerspectiveDef.perspective.'@id'?.text()
        log.debug 'perspective class: {}, found existing perspective {}', perspectiveClass, perspectiveId
      }
      else {
        int dotPos = perspectiveClass.lastIndexOf('.')
        String simpleClassName = dotPos >= 0 ? perspectiveClass.substring(dotPos + 1) : perspectiveClass
        perspectiveId = "${project.name}.${simpleClassName}"
        log.debug 'perspective class: {}, no existing perspective found, inserting new perspective {}', perspectiveClass, perspectiveId
        pluginXml.extension(point: 'org.eclipse.ui.perspectives') {
          perspective id: perspectiveId, name: "${project.name} ${simpleClassName}", 'class': perspectiveClass
        }
      }
      perspectiveIds.add(perspectiveId)
    }
  }

  protected void populateViews(MarkupBuilder pluginXml) {
    List viewClasses = PluginUtils.findClassesInSources(project, '**/*View.groovy', '**/*View.java', '**/View*.groovy', '**/View*.java')
    Map viewClassToViewId = [:]
    for(String viewClass in viewClasses) {
      def existingViewDef = existingConfig?.extension?.find({ it.'@point' == 'org.eclipse.ui.views' && it.view?.'@class'?.text() == viewClass })
      String viewId
      if(existingViewDef)
        viewId = existingViewDef.view.'@id'?.text()
      else {
        int dotPos = viewClass.lastIndexOf('.')
        String simpleClassName = dotPos >= 0 ? viewClass.substring(dotPos + 1) : viewClass
        viewId = "${project.name}.${simpleClassName}"
        pluginXml.extension(point: 'org.eclipse.ui.views') {
          view id: viewId, name: "${project.name} ${simpleClassName}", 'class': viewClass
        }
      }
      viewClassToViewId[viewClass] = viewId
    }
    if(perspectiveIds.size() == 1 && viewClasses.size() == 1) {
      String viewId = viewClassToViewId[viewClasses[0]]
      def existingPerspectiveExtension = existingConfig?.extension?.find { it.'@point' == 'org.eclipse.ui.perspectiveExtensions' }
      if(!existingPerspectiveExtension)
        pluginXml.extension(point: 'org.eclipse.ui.perspectiveExtensions') {
          perspectiveExtension(targetID: perspectiveIds[0]) {
            view id: viewId, standalone: true, minimized: false, relative: 'org.eclipse.ui.editorss', relationship: 'left'
          }
        }
    }
  }
}





© 2015 - 2025 Weber Informatics LLC | Privacy Policy