/******************************************************************************* * Copyright (c) 2005 RadRails.org and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Common Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html *******************************************************************************/ package org.radrails.rails.internal.ui.generators; import java.util.Set; import org.eclipse.core.resources.IProject; import org.eclipse.ui.IViewSite; import org.eclipse.ui.IWorkbenchPage; import org.eclipse.ui.IWorkbenchPart; import org.eclipse.ui.PartInitException; import org.eclipse.ui.part.IPage; import org.eclipse.ui.part.PageBook; import org.eclipse.ui.part.PageBookView; import org.radrails.rails.internal.core.RailsPlugin; import org.radrails.rails.internal.ui.RailsUIMessages; import org.radrails.rails.internal.ui.actions.RailsProjectSelectionAction; import org.radrails.rails.ui.RailsUIPlugin; import org.rubypeople.rdt.ui.IPackagesViewPart; import com.aptana.ide.editors.unified.UnifiedMessagePage; /** * The Generators view provides an interface to the Rails generate script and the following generators. * <ul> * <li>controller</li> * <li>mailer</li> * <li>migration</li> * <li>model</li> * <li>plugin</li> * <li>scaffold</li> * <li>web_service</li> * * @author mkent */ public class GeneratorsView extends PageBookView { private GeneratorsPage generatorsPage; private UnifiedMessagePage messagePage; private RailsProjectSelectionAction selectProjectAction; /** * @see org.eclipse.ui.part.PageBookView#createDefaultPage(org.eclipse.ui.part.PageBook) */ protected IPage createDefaultPage(PageBook book) { createMessagePage(book); createGeneratorsPage(book); IPage page = null; if (getSelectedProject() == null) { page = messagePage; } else { page = generatorsPage; } if (generatorsPage.pulldownEmpty()) { refreshGenerators(); } return page; } private static IProject getSelectedProject() { IProject proj = RailsUIPlugin.getSelectedOrOnlyRailsProject(); if (proj != null) return proj; Set<IProject> projects = RailsPlugin.getRailsProjects(); if (projects == null || projects.size() == 0) return null; return projects.iterator().next(); } /** * @see org.eclipse.ui.part.PageBookView#init(org.eclipse.ui.IViewSite) */ public void init(IViewSite site) throws PartInitException { super.init(site); selectProjectAction = new RailsProjectSelectionAction(); site.getActionBars().getToolBarManager().add(selectProjectAction); } private void createMessagePage(PageBook book) { messagePage = new UnifiedMessagePage(); messagePage.createControl(book); messagePage.setMessage(RailsUIMessages.SelectRailsProject_message); } private void createGeneratorsPage(PageBook book) { generatorsPage = new GeneratorsPage(); initPage(generatorsPage); generatorsPage.createControl(book); selectProjectAction.setListener(generatorsPage); } /** * @see org.eclipse.ui.part.PageBookView#doCreatePage(org.eclipse.ui.IWorkbenchPart) */ protected PageRec doCreatePage(IWorkbenchPart part) { if (part instanceof IPackagesViewPart) { createGeneratorsPage(getPageBook()); return new PageRec(part, generatorsPage); } return null; } /** * @see org.eclipse.ui.part.PageBookView#doDestroyPage(org.eclipse.ui.IWorkbenchPart, * org.eclipse.ui.part.PageBookView.PageRec) */ protected void doDestroyPage(IWorkbenchPart part, PageRec pageRecord) { pageRecord.page.dispose(); pageRecord.dispose(); selectProjectAction.setListener(null); } /** * @see org.eclipse.ui.part.PageBookView#getBootstrapPart() */ protected IWorkbenchPart getBootstrapPart() { IWorkbenchPage page = getSite().getPage(); if (page != null) { return page.getActiveEditor(); } return null; } /** * @see org.eclipse.ui.part.PageBookView#isImportant(org.eclipse.ui.IWorkbenchPart) */ protected boolean isImportant(IWorkbenchPart part) { return part instanceof IPackagesViewPart; } /** * Refreshes the generators */ public void refreshGenerators() { generatorsPage.refreshGenerators(); } /** * @see org.eclipse.ui.part.PageBookView#dispose() */ public void dispose() { super.dispose(); } }