/* * Copyright (c) 2005, 2010 Borland Software 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: * Artem Tikhomirov (Borland) - initial API and implementation */ package org.eclipse.gmf.codegen.util; import java.net.MalformedURLException; import java.net.URL; import java.util.ArrayList; import java.util.Map; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Platform; import org.eclipse.core.runtime.Status; import org.eclipse.emf.codegen.merge.java.JControlModel; import org.eclipse.emf.codegen.merge.java.JMerger; import org.eclipse.emf.codegen.util.CodeGenUtil; import org.eclipse.emf.common.util.URI; import org.eclipse.gmf.common.UnexpectedBehaviourException; import org.eclipse.gmf.internal.common.codegen.DefaultTextMerger; import org.eclipse.gmf.internal.common.codegen.JavaClassEmitter; import org.eclipse.gmf.internal.common.codegen.TextEmitter; import org.eclipse.gmf.internal.common.codegen.TextMerger; import org.eclipse.gmf.internal.common.codegen.XpandClassEmitter; import org.eclipse.gmf.internal.xpand.ResourceManager; import org.eclipse.gmf.internal.xpand.util.BundleResourceManager; import org.osgi.framework.Bundle; /** * @author artem */ public class CodegenEmitters { protected static final String PATH_SEPARATOR = "::"; //$NON-NLS-1$ private final ResourceManager myResourceManager; private final URL[] myLocations; private Map<String, Object> myGlobals; public CodegenEmitters(boolean useBaseTemplatesOnly, String templateDirectory, boolean includeDynamicModelTemplates) { ArrayList<URL> urls = new ArrayList<URL>(5); if (!useBaseTemplatesOnly) { urls.add(getDynamicTemplatesURL(templateDirectory)); } if (includeDynamicModelTemplates) { urls.add(getTemplatesBundle().getEntry("/templates-dynmodel/")); //$NON-NLS-1$ } urls.add(getTemplatesBundle().getEntry("/templates/")); //$NON-NLS-1$ urls.add(Platform.getBundle("org.eclipse.gmf.graphdef.codegen").getEntry("/templates/")); //$NON-NLS-1$ //$NON-NLS-2$ myLocations = urls.toArray(new URL[urls.size()]); myResourceManager = new BundleResourceManager(myLocations); } /* package */void setGlobals(Map<String, Object> globals) { myGlobals = globals; } /** * @return null if no merger is needed */ public TextMerger createMergeService() { URL controlFile = getJMergeControlFile(); if (controlFile != null) { JControlModel controlModel = new JControlModel(); controlModel.initialize(CodeGenUtil.instantiateFacadeHelper(JMerger.DEFAULT_FACADE_HELPER_CLASS), controlFile.toString()); if (!controlModel.canMerge()) { throw new IllegalStateException("Can not initialize JControlModel"); } return new DefaultTextMerger(controlModel); } return null; } private static Bundle getTemplatesBundle() { return Platform.getBundle("org.eclipse.gmf.codegen"); //$NON-NLS-1$ } private static URL getDynamicTemplatesURL(String templateDirectory) { if (templateDirectory != null) { URI templatesURI = templateDirectory.indexOf(":") == -1 ? URI.createPlatformResourceURI(templateDirectory, true) : URI.createURI(templateDirectory); //$NON-NLS-1$ try { return new URL(templatesURI.toString()); } catch (MalformedURLException e) { Platform.getLog(getTemplatesBundle()).log(new Status(IStatus.ERROR, getTemplatesBundle().getSymbolicName(), 0, "Incorrecct dynamic templates location", e)); //$NON-NLS-1$ } } return null; } public URL getJMergeControlFile() { return getTemplatesBundle().getEntry("/templates/emf-merge.xml"); //$NON-NLS-1$ } // commands public JavaClassEmitter getCreateNodeCommandEmitter() throws UnexpectedBehaviourException { return createPrimaryJavaClassEmitter("xpt::diagram::commands::CreateNodeCommand"); //$NON-NLS-1$ } public JavaClassEmitter getCreateLinkCommandEmitter() throws UnexpectedBehaviourException { return createJavaClassEmitter("xpt::diagram::commands::CreateLinkCommand", "Main"); //$NON-NLS-1$ } public JavaClassEmitter getReorientLinkCommandEmitter() throws UnexpectedBehaviourException { return createPrimaryJavaClassEmitter("xpt::diagram::commands::ReorientLinkCommand"); //$NON-NLS-1$ } public JavaClassEmitter getReorientRefLinkCommandEmitter() throws UnexpectedBehaviourException { return createPrimaryJavaClassEmitter("xpt::diagram::commands::ReorientRefLinkCommand"); //$NON-NLS-1$ } public JavaClassEmitter getReorientLinkViewCommandEmitter() throws UnexpectedBehaviourException { return createPrimaryJavaClassEmitter("xpt::diagram::commands::ReorientLinkViewCommand"); //$NON-NLS-1$ } public JavaClassEmitter getCreateShortcutDecorationsCommandEmitter() throws UnexpectedBehaviourException { return createPrimaryJavaClassEmitter("xpt::diagram::commands::CreateShortcutDecorationsCommand"); //$NON-NLS-1$ } // helpers public JavaClassEmitter getBaseEditHelperEmitter() throws UnexpectedBehaviourException { return createPrimaryJavaClassEmitter("xpt::diagram::edithelpers::BaseEditHelper"); //$NON-NLS-1$ } public JavaClassEmitter getEditHelperEmitter() throws UnexpectedBehaviourException { return createPrimaryJavaClassEmitter("xpt::diagram::edithelpers::EditHelper"); //$NON-NLS-1$ } public JavaClassEmitter getEditHelperAdviceEmitter() throws UnexpectedBehaviourException { return createPrimaryJavaClassEmitter("xpt::diagram::edithelpers::EditHelperAdvice"); //$NON-NLS-1$ } // parts public JavaClassEmitter getDiagramEditPartEmitter() throws UnexpectedBehaviourException { return getMainEmitter("diagram::editparts::DiagramEditPart"); //$NON-NLS-1$ } public JavaClassEmitter getNodeEditPartEmitter() throws UnexpectedBehaviourException { return getMainEmitter("diagram::editparts::NodeEditPart"); //$NON-NLS-1$ } public JavaClassEmitter getNodeLabelEditPartEmitter() throws UnexpectedBehaviourException { return getMainEmitter("diagram::editparts::NodeLabelEditPart"); //$NON-NLS-1$ } public JavaClassEmitter getExternalNodeLabelEditPartEmitter() throws UnexpectedBehaviourException { return getMainEmitter("diagram::editparts::ExternalNodeLabelEditPart"); //$NON-NLS-1$ } public JavaClassEmitter getChildNodeLabelEditPartEmitter() throws UnexpectedBehaviourException { return getMainEmitter("diagram::editparts::ChildNodeLabelEditPart"); //$NON-NLS-1$ } public JavaClassEmitter getCompartmentEditPartEmitter() throws UnexpectedBehaviourException { return getMainEmitter("diagram::editparts::CompartmentEditPart"); //$NON-NLS-1$ } public JavaClassEmitter getLinkEditPartEmitter() throws UnexpectedBehaviourException { return getMainEmitter("diagram::editparts::LinkEditPart"); //$NON-NLS-1$ } public JavaClassEmitter getLinkLabelEditPartEmitter() throws UnexpectedBehaviourException { return getMainEmitter("diagram::editparts::LinkLabelEditPart"); //$NON-NLS-1$ } public JavaClassEmitter getEditPartFactoryEmitter() throws UnexpectedBehaviourException { return createPrimaryJavaClassEmitter("xpt::diagram::editparts::EditPartFactory"); //$NON-NLS-1$ } // policies public JavaClassEmitter getBaseItemSemanticEditPolicyEmitter() { return createPrimaryJavaClassEmitter("xpt::diagram::editpolicies::BaseItemSemanticEditPolicy"); //$NON-NLS-1$ } public JavaClassEmitter getOpenDiagramEditPolicyEmitter() throws UnexpectedBehaviourException { return createPrimaryJavaClassEmitter("xpt::diagram::editpolicies::OpenDiagram"); //$NON-NLS-1$ } public JavaClassEmitter getDiagramCanonicalEditPolicyEmitter() { return createJavaClassEmitter("diagram::editpolicies::DiagramCanonicalEditPolicy","Main"); //$NON-NLS-1$ } public JavaClassEmitter getChildContainerCanonicalEditPolicyEmitter() { return createJavaClassEmitter("diagram::editpolicies::ChildContainerCanonicalEditPolicy", "Main"); //$NON-NLS-1$ } public JavaClassEmitter getDiagramItemSemanticEditPolicyEmitter() { return createPrimaryJavaClassEmitter("xpt::diagram::editpolicies::DiagramItemSemanticEditPolicy"); //$NON-NLS-1$ } public JavaClassEmitter getCompartmentItemSemanticEditPolicyEmitter() { return createPrimaryJavaClassEmitter("xpt::diagram::editpolicies::CompartmentItemSemanticEditPolicy"); //$NON-NLS-1$ } public JavaClassEmitter getGraphicalNodeEditPolicyEmitter() throws UnexpectedBehaviourException { return createPrimaryJavaClassEmitter("xpt::diagram::editpolicies::GraphicalNodeEditPolicy"); //$NON-NLS-1$ } public JavaClassEmitter getNodeItemSemanticEditPolicyEmitter() { return createPrimaryJavaClassEmitter("xpt::diagram::editpolicies::NodeItemSemanticEditPolicy"); //$NON-NLS-1$ } public JavaClassEmitter getLinkItemSemanticEditPolicyEmitter() { return createPrimaryJavaClassEmitter("xpt::diagram::editpolicies::LinkItemSemanticEditPolicy"); //$NON-NLS-1$ } public JavaClassEmitter getTextSelectionEditPolicyEmitter() throws UnexpectedBehaviourException { return createJavaClassEmitter("xpt::diagram::editpolicies::TextFeedback", "TextSelectionEditPolicy"); //$NON-NLS-1$ } public JavaClassEmitter getTextNonResizableEditPolicyEmitter() throws UnexpectedBehaviourException { return createJavaClassEmitter("xpt::diagram::editpolicies::TextFeedback", "TextNonResizableEditPolicy"); //$NON-NLS-1$ } public JavaClassEmitter getVisualEffectEditPolicyEmitter() { return createPrimaryJavaClassEmitter("xpt::diagram::editpolicies::VisualEffectEditPolicy"); //$NON-NLS-1$ } // updater public JavaClassEmitter getDiagramUpdaterEmitter() { return createPrimaryJavaClassEmitter("xpt::diagram::updater::DiagramUpdater"); //$NON-NLS-1$ } public JavaClassEmitter getUpdateCommandEmitter() { return createPrimaryJavaClassEmitter("xpt::diagram::updater::UpdateCommand"); //$NON-NLS-1$ } public JavaClassEmitter getNodeDescriptorEmitter() { return createPrimaryJavaClassEmitter("xpt::diagram::updater::NodeDescriptor"); //$NON-NLS-1$ } public JavaClassEmitter getLinkDescriptorEmitter() { return createPrimaryJavaClassEmitter("xpt::diagram::updater::LinkDescriptor"); //$NON-NLS-1$ } // parsers public JavaClassEmitter getAbstractParserEmitter() throws UnexpectedBehaviourException { return createJavaClassEmitter("impl::parsers::AbstractParser", "Main"); //$NON-NLS-1$ } /** * @deprecated we don't want to generate this class anymore, but the changes in i18n may create compilation errors if we don't explicitly clear the contents of generated file. * @see comments in template impl::parsers::AbstractParser for details */ public String getAbstractParserName(Object... input) throws UnexpectedBehaviourException { return createPrimaryJavaClassEmitter("impl::parsers::AbstractParser").getQualifiedClassName("deprecatedQualifiedClassName", input); //$NON-NLS-1$ } public JavaClassEmitter getPredefinedParserEmitter() throws UnexpectedBehaviourException { return createJavaClassEmitter("parsers::PredefinedParser", "Main"); //$NON-NLS-1$ } public JavaClassEmitter getCustomParserEmitter() throws UnexpectedBehaviourException { return createJavaClassEmitter("parsers::CustomParser", "Main"); //$NON-NLS-1$ } public JavaClassEmitter getExpressionLabelParserEmitter() throws UnexpectedBehaviourException { return createJavaClassEmitter("parsers::ExpressionLabelParser", "Main"); //$NON-NLS-1$ } // providers public JavaClassEmitter getParserProviderEmitter() throws UnexpectedBehaviourException { return createJavaClassEmitter("parsers::ParserProvider", "Main"); //$NON-NLS-1$ } public JavaClassEmitter getElementInitializersEmitter() throws UnexpectedBehaviourException { return createPrimaryJavaClassEmitter("xpt::providers::ElementInitializers"); //$NON-NLS-1$ } public JavaClassEmitter getElementTypesEmitter() throws UnexpectedBehaviourException { return createPrimaryJavaClassEmitter("xpt::providers::ElementTypes"); //$NON-NLS-1$ } public JavaClassEmitter getViewProviderEmitter() { return createPrimaryJavaClassEmitter("xpt::providers::ViewProvider"); //$NON-NLS-1$ } public JavaClassEmitter getEditPartProviderEmitter() throws UnexpectedBehaviourException { return createPrimaryJavaClassEmitter("xpt::providers::EditPartProvider"); //$NON-NLS-1$ } public JavaClassEmitter getModelingAssistantProviderEmitter() throws UnexpectedBehaviourException { return createPrimaryJavaClassEmitter("xpt::providers::ModelingAssistantProvider"); //$NON-NLS-1$ } /** * @since 2.11 */ public JavaClassEmitter getNodeEditPartModelingAssistantProviderEmitter() { return createPrimaryJavaClassEmitter("xpt::providers::EditPartModelingAssistantProvider"); //$NON-NLS-1$ } public JavaClassEmitter getIconProviderEmitter() throws UnexpectedBehaviourException { return createPrimaryJavaClassEmitter("xpt::providers::IconProvider"); //$NON-NLS-1$ } public JavaClassEmitter getMarkerNavigationProviderEmitter() throws UnexpectedBehaviourException { return createPrimaryJavaClassEmitter("xpt::providers::MarkerNavigationProvider"); //$NON-NLS-1$ } public JavaClassEmitter getValidationProviderEmitter() throws UnexpectedBehaviourException { return createPrimaryJavaClassEmitter("xpt::providers::ValidationProvider"); //$NON-NLS-1$ } public JavaClassEmitter getValidationDecoratorProviderEmitter() throws UnexpectedBehaviourException { return createPrimaryJavaClassEmitter("xpt::providers::ValidationDecoratorProvider"); //$NON-NLS-1$ } public JavaClassEmitter getShortcutsDecoratorProviderEmitter() { return createPrimaryJavaClassEmitter("xpt::providers::ShortcutsDecoratorProvider"); //$NON-NLS-1$ } public JavaClassEmitter getMetricProviderEmitter() throws UnexpectedBehaviourException { return createPrimaryJavaClassEmitter("xpt::providers::MetricProvider"); //$NON-NLS-1$ } public JavaClassEmitter getAbstractExpressionEmitter() throws UnexpectedBehaviourException { return createPrimaryJavaClassEmitter("xpt::expressions::AbstractExpression"); //$NON-NLS-1$ } public JavaClassEmitter getOCLExpressionFactoryEmitter() throws UnexpectedBehaviourException { return createPrimaryJavaClassEmitter("xpt::expressions::OCLExpressionFactory"); //$NON-NLS-1$ } public JavaClassEmitter getRegexpExpressionFactoryEmitter() throws UnexpectedBehaviourException { return createPrimaryJavaClassEmitter("xpt::expressions::RegexpExpressionFactory"); //$NON-NLS-1$ } // property sheet public JavaClassEmitter getPropertySheetLabelProviderEmitter() throws UnexpectedBehaviourException { return createJavaClassEmitter("xpt::propsheet::LabelProvider", "Class"); //$NON-NLS-1$ } public JavaClassEmitter getPropertySectionEmitter() throws UnexpectedBehaviourException { return createJavaClassEmitter("xpt::propsheet::PropertySection", "Class"); //$NON-NLS-1$ } // editor public JavaClassEmitter getValidateActionEmitter() throws UnexpectedBehaviourException { return createPrimaryJavaClassEmitter("xpt::editor::ValidateAction"); //$NON-NLS-1$ } public JavaClassEmitter getValidationMarkerEmitter() throws UnexpectedBehaviourException { return createPrimaryJavaClassEmitter("xpt::editor::ValidationMarker"); //$NON-NLS-1$ } public JavaClassEmitter getDiagramContentInitializerEmitter() { return createPrimaryJavaClassEmitter("xpt::editor::DiagramContentInitializer"); //$NON-NLS-1$ } public JavaClassEmitter getShortcutPropertyTesterEmitter() { return createPrimaryJavaClassEmitter("xpt::editor::ShortcutPropertyTester"); //$NON-NLS-1$ } public JavaClassEmitter getShortcutCreationWizardEmitter() throws UnexpectedBehaviourException { return createPrimaryJavaClassEmitter("xpt::editor::ShortcutCreationWizard"); //$NON-NLS-1$ } public JavaClassEmitter getModelElementSelectionPageEmitter() throws UnexpectedBehaviourException { return createPrimaryJavaClassEmitter("xpt::editor::ModelElementSelectionPage"); //$NON-NLS-1$ } public JavaClassEmitter getNewDiagramFileWizardEmitter() { return createPrimaryJavaClassEmitter("xpt::editor::NewDiagramFileWizard"); //$NON-NLS-1$ } public JavaClassEmitter getPaletteEmitter() throws UnexpectedBehaviourException { return createJavaClassEmitter("xpt::editor::palette::PaletteFactory", "Factory"); //$NON-NLS-1$ } public JavaClassEmitter getDiagramEditorUtilEmitter() throws UnexpectedBehaviourException { return createPrimaryJavaClassEmitter("xpt::editor::DiagramEditorUtil"); //$NON-NLS-1$ } public JavaClassEmitter getVisualIDRegistryEmitter() { return createPrimaryJavaClassEmitter("xpt::editor::VisualIDRegistry"); //$NON-NLS-1$ } public JavaClassEmitter getCreationWizardEmitter() throws UnexpectedBehaviourException { return createPrimaryJavaClassEmitter("xpt::editor::CreationWizard"); //$NON-NLS-1$ } public JavaClassEmitter getCreationWizardPageEmitter() throws UnexpectedBehaviourException { return createPrimaryJavaClassEmitter("xpt::editor::CreationWizardPage"); //$NON-NLS-1$ } public JavaClassEmitter getDeleteElementActionEmitter() { return createPrimaryJavaClassEmitter("xpt::editor::DeleteElementAction"); //$NON-NLS-1$ } public JavaClassEmitter getDiagramEditorContextMenuProviderEmitter() { return createPrimaryJavaClassEmitter("xpt::editor::DiagramEditorContextMenuProvider"); //$NON-NLS-1$ } public JavaClassEmitter getEditorEmitter() { return createPrimaryJavaClassEmitter("xpt::editor::Editor"); //$NON-NLS-1$ } public JavaClassEmitter getElementChooserEmitter() { return createPrimaryJavaClassEmitter("xpt::editor::ElementChooser"); //$NON-NLS-1$ } public JavaClassEmitter getDocumentProviderEmitter() { return createPrimaryJavaClassEmitter("xpt::editor::DocumentProvider"); //$NON-NLS-1$ } public JavaClassEmitter getActionBarContributorEmitter() throws UnexpectedBehaviourException { return createPrimaryJavaClassEmitter("xpt::editor::ActionBarContributor"); //$NON-NLS-1$ } public JavaClassEmitter getMatchingStrategyEmitter() { return createPrimaryJavaClassEmitter("xpt::editor::MatchingStrategy"); //$NON-NLS-1$ } public JavaClassEmitter getURIEditorInputTesterEmitter() { return createPrimaryJavaClassEmitter("xpt::editor::UriEditorInputTester"); //$NON-NLS-1$ } public JavaClassEmitter getModelAccessFacilityEmitter() { return createJavaClassEmitter("Facility", "Main"); //$NON-NLS-1$ } // navigator public JavaClassEmitter getNavigatorContentProviderEmitter() { return createPrimaryJavaClassEmitter("xpt::navigator::NavigatorContentProvider"); //$NON-NLS-1$ } public JavaClassEmitter getDomainNavigatorContentProviderEmitter() { return createPrimaryJavaClassEmitter("xpt::navigator::DomainNavigatorContentProvider"); //$NON-NLS-1$ } public JavaClassEmitter getDomainNavigatorLabelProviderEmitter() { return createPrimaryJavaClassEmitter("xpt::navigator::DomainNavigatorLabelProvider"); //$NON-NLS-1$ } public JavaClassEmitter getDomainNavigatorItemEmitter() { return createPrimaryJavaClassEmitter("xpt::navigator::DomainNavigatorItem"); //$NON-NLS-1$ } public JavaClassEmitter getNavigatorLabelProviderEmitter() { return createPrimaryJavaClassEmitter("xpt::navigator::NavigatorLabelProvider"); //$NON-NLS-1$ } public JavaClassEmitter getNavigatorLinkHelperEmitter() { return createPrimaryJavaClassEmitter("xpt::navigator::NavigatorLinkHelper"); //$NON-NLS-1$ } public JavaClassEmitter getNavigatorSorterEmitter() { return createPrimaryJavaClassEmitter("xpt::navigator::NavigatorSorter"); //$NON-NLS-1$ } public JavaClassEmitter getNavigatorActionProviderEmitter() { return createPrimaryJavaClassEmitter("xpt::navigator::NavigatorActionProvider"); //$NON-NLS-1$ } public JavaClassEmitter getAbstractNavigatorItemEmitter() { return createPrimaryJavaClassEmitter("xpt::navigator::AbstractNavigatorItem"); //$NON-NLS-1$ } public JavaClassEmitter getNavigatorGroupEmitter() { return createPrimaryJavaClassEmitter("xpt::navigator::NavigatorGroup"); //$NON-NLS-1$ } public JavaClassEmitter getNavigatorItemEmitter() { return createPrimaryJavaClassEmitter("xpt::navigator::NavigatorItem"); //$NON-NLS-1$ } // preferences public JavaClassEmitter getPreferenceInitializerEmitter() throws UnexpectedBehaviourException { return createPrimaryJavaClassEmitter("xpt::diagram::preferences::PreferenceInitializer"); //$NON-NLS-1$ } public JavaClassEmitter getStandardPreferencePageEmitter() throws UnexpectedBehaviourException { return createJavaClassEmitter("impl::preferences::StandardPage", "Main"); //$NON-NLS-1$ } public JavaClassEmitter getCustomPreferencePageEmitter() throws UnexpectedBehaviourException { return createJavaClassEmitter("impl::preferences::CustomPage", "Main"); //$NON-NLS-1$ } // plugin public JavaClassEmitter getActivatorEmitter() throws UnexpectedBehaviourException { return createJavaClassEmitter("plugin::Activator", "Main"); //$NON-NLS-1$ } public TextEmitter getBundleManifestEmitter() throws UnexpectedBehaviourException { return createTextEmitter("xpt::plugin::manifest", "manifest"); //$NON-NLS-1$ } public TextEmitter getPluginXmlEmitter() throws UnexpectedBehaviourException { return createTextEmitter("xpt::plugin::plugin", "plugin"); //$NON-NLS-1$ } public TextEmitter getPluginPropertiesEmitter() throws UnexpectedBehaviourException { return createTextEmitter("xpt::plugin::properties", "properties"); //$NON-NLS-1$ } public TextEmitter getBuildPropertiesEmitter() throws UnexpectedBehaviourException { return createTextEmitter("xpt::plugin::build", "build"); //$NON-NLS-1$ } public TextEmitter getOptionsFileEmitter() throws UnexpectedBehaviourException { return createTextEmitter("xpt::plugin::options", "options"); //$NON-NLS-1$ } public JavaClassEmitter getExternalizeEmitter() { return createJavaClassEmitter("xpt::Externalizer","Access"); //$NON-NLS-1$ } public JavaClassEmitter getMessagesEmitter() { return createJavaClassEmitter("xpt::Externalizer", "Values"); //$NON-NLS-1$ } // application public JavaClassEmitter getApplicationEmitter() throws UnexpectedBehaviourException { return createPrimaryJavaClassEmitter("xpt::application::Application"); //$NON-NLS-1$ } public JavaClassEmitter getActionBarAdvisorEmitter() throws UnexpectedBehaviourException { return createPrimaryJavaClassEmitter("xpt::application::ActionBarAdvisor"); //$NON-NLS-1$ } public JavaClassEmitter getPerspectiveEmitter() throws UnexpectedBehaviourException { return createPrimaryJavaClassEmitter("xpt::application::Perspective"); //$NON-NLS-1$ } public JavaClassEmitter getWorkbenchAdvisorEmitter() throws UnexpectedBehaviourException { return createPrimaryJavaClassEmitter("xpt::application::WorkbenchAdvisor"); //$NON-NLS-1$ } public JavaClassEmitter getWorkbenchWindowAdvisorEmitter() throws UnexpectedBehaviourException { return createPrimaryJavaClassEmitter("xpt::application::WorkbenchWindowAdvisor"); //$NON-NLS-1$ } public JavaClassEmitter getWizardNewFileCreationPageEmitter() throws UnexpectedBehaviourException { return createPrimaryJavaClassEmitter("xpt::application::WizardNewFileCreationPage"); //$NON-NLS-1$ } // actions public JavaClassEmitter getCustomActionEmitter() { return createJavaClassEmitter("impl::actions::CustomAction", "Main"); //$NON-NLS-1$ } public JavaClassEmitter getPredefinedActionEmitter() { return createJavaClassEmitter("impl::actions::PredefinedAction", "Main"); //$NON-NLS-1$ } // util protected JavaClassEmitter createJavaClassEmitter(String templateName, String mainMethod) { return new XpandClassEmitter(myResourceManager, templateName, mainMethod, myGlobals); } public TextEmitter getQualifiedClassNameEmitterForPrimaryTemplate(String templateFQN) { return createJavaClassEmitter(getTemplateFQNWithoutLastSegment(templateFQN), "qualifiedClassName"); } /** * Use when template name equals main method * @param templateName * @return */ protected JavaClassEmitter createPrimaryJavaClassEmitter(String templateName) { String parts[] = templateName.split(PATH_SEPARATOR); return createJavaClassEmitter(templateName, parts[parts.length-1]); } public JavaClassEmitter createFullTemplateInvocation(String templateFQN) { String[] parts = templateFQN.split(PATH_SEPARATOR); return createJavaClassEmitter(getTemplateFQNWithoutLastSegment(templateFQN), parts[parts.length - 1]); } private TextEmitter createTextEmitter(String templateName, String mainMethod) { return createJavaClassEmitter(templateName, mainMethod); } private String getTemplateFQNWithoutLastSegment(String templateFQN) { String[] parts = templateFQN.split(PATH_SEPARATOR); int methodNamePartLength = parts[parts.length-1].length() + PATH_SEPARATOR.length(); return templateFQN.substring(0, templateFQN.length() - methodNamePartLength); } /** * Returns "Main" emitter for the specified template file. */ private JavaClassEmitter getMainEmitter(String templateFilePath) { return createJavaClassEmitter(templateFilePath, "Main"); //$NON-NLS-1$ } }