Java tutorial
/** * GRANITE DATA SERVICES * Copyright (C) 2006-2013 GRANITE DATA SERVICES S.A.S. * * This file is part of the Granite Data Services Platform. * * Granite Data Services is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * Granite Data Services is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser * General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, * USA, or see <http://www.gnu.org/licenses/>. */ package org.granite.builder.ui; import java.io.IOException; import org.eclipse.core.resources.IProject; import org.eclipse.core.runtime.CoreException; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.jface.wizard.Wizard; import org.eclipse.jface.wizard.WizardDialog; import org.eclipse.jface.wizard.WizardPage; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Shell; import org.granite.builder.GraniteBuilderContext; import org.granite.builder.GraniteNature; import org.granite.builder.ToggleNatureAction; import org.granite.builder.properties.Gas3Transformer; import org.granite.builder.properties.GraniteProperties; import org.granite.builder.properties.GranitePropertiesLoader; import org.granite.builder.util.ProjectUtil; import org.granite.builder.util.SWTUtil; /** * @author Franck WOLFF */ public class AddNatureWizard extends Wizard { private static final String SOURCES_PANEL = "sourcesPanel"; private static final String PROJECTS_PANEL = "projectsPanel"; private static final String CLASSPATHS_PANEL = "classpathsPanel"; private static final String TEMPLATES_PANEL = "templatesPanel"; private static final String OPTIONS_PANEL = "optionsPanel"; private final GraniteBuilderContext context; private WizardDialog dialog = null; public AddNatureWizard(IProject project) throws CoreException { this.context = new GraniteBuilderContext(project); } @Override public void addPages() { setWindowTitle("Add Granite Nature Wizard"); setDefaultPageImageDescriptor( ImageDescriptor.createFromImage(SWTUtil.getImage(getShell().getDisplay(), "icons/gdswiz.gif"))); addPage(new WizardPage(SOURCES_PANEL) { @Override public void createControl(Composite parent) { try { setControl(new SourcesPanel(parent, context)); } catch (Exception e) { throw new RuntimeException(e); } setTitle("Source Folder Configuration"); setDescription( "Step 1: select Java source folders, included/excluded patterns and output folders..."); } }); addPage(new WizardPage(PROJECTS_PANEL) { @Override public void createControl(Composite parent) { try { setControl(new ProjectsPanel(parent, context)); } catch (Exception e) { throw new RuntimeException(e); } setTitle("Dependent Projects Configuration"); setDescription("Step 2: select dependent granite projects..."); } }); addPage(new WizardPage(CLASSPATHS_PANEL) { @Override public void createControl(Composite parent) { try { setControl(new ClasspathsPanel(parent, context)); } catch (Exception e) { throw new RuntimeException(e); } setTitle("Classpath Configuration"); setDescription("Step 3: select jars or class folders used as classpath..."); } }); addPage(new WizardPage(TEMPLATES_PANEL) { @Override public void createControl(Composite parent) { try { setControl(new TemplatesPanel(parent, context)); } catch (Exception e) { throw new RuntimeException(e); } setTitle("Templates Configuration"); setDescription("Step 4: select templates that will be used for generation..."); } }); addPage(new WizardPage(OPTIONS_PANEL) { @Override public void createControl(Composite parent) { try { setControl(new OptionsPanel(parent, context)); } catch (Exception e) { throw new RuntimeException(e); } setTitle("Miscanellous Options"); setDescription("Step 5: modify various options that control file generation..."); } }); } @Override public boolean performFinish() { GraniteProperties properties = GraniteProperties.getDefaultProperties(); SourcesPanel sourcesPanel = (SourcesPanel) getPage(SOURCES_PANEL).getControl(); properties.getGas3().getSources().addAll(sourcesPanel.getSources()); ProjectsPanel projectsPanel = (ProjectsPanel) getPage(PROJECTS_PANEL).getControl(); properties.getGas3().getProjects().addAll(projectsPanel.getProjects()); ClasspathsPanel classpathsPanel = (ClasspathsPanel) getPage(CLASSPATHS_PANEL).getControl(); properties.getGas3().getClasspaths().addAll(classpathsPanel.getClasspaths()); TemplatesPanel templatesPanel = (TemplatesPanel) getPage(TEMPLATES_PANEL).getControl(); properties.getGas3().getTemplates().clear(); properties.getGas3().getTemplates().addAll(templatesPanel.getTemplates()); OptionsPanel optionsPanel = (OptionsPanel) getPage(OPTIONS_PANEL).getControl(); properties.getGas3().setUid(optionsPanel.getUid()); properties.getGas3().setAs3TypeFactory(optionsPanel.getAs3TypeFactory()); properties.getGas3().setEntityFactory(optionsPanel.getEntityFactory()); properties.getGas3().setRemoteDestinationFactory(optionsPanel.getRemoteDestinationFactory()); properties.getGas3().setTransformer(new Gas3Transformer(optionsPanel.getTransformer())); properties.getGas3().getTranslators().clear(); properties.getGas3().getTranslators().addAll(optionsPanel.getTranslators()); properties.getGas3().setDebugEnabled(optionsPanel.isDebugEnabled()); properties.getGas3().setFlexConfig(optionsPanel.isFlexConfig()); properties.getGas3().setExternalizeLong(optionsPanel.isExternalizeLong()); properties.getGas3().setExternalizeBigInteger(optionsPanel.isExternalizeBigInteger()); properties.getGas3().setExternalizeBigDecimal(optionsPanel.isExternalizeBigDecimal()); try { GranitePropertiesLoader.save(context.getJavaProject().getProject(), properties); } catch (IOException e) { dialog.setErrorMessage("Could not save Granite properties: " + e.toString()); return false; } return true; } @Override public boolean performCancel() { try { IProject project = context.getJavaProject().getProject(); if (project.getDescription().hasNature(GraniteNature.NATURE_ID)) ToggleNatureAction.toggleNature(project); } catch (CoreException e) { } return true; } public static void run(final IProject project) throws CoreException { final Display display = (Display.getCurrent() != null ? Display.getCurrent() : Display.getDefault()); try { display.syncExec(new Runnable() { @Override public void run() { try { Shell shell = new Shell(display); AddNatureWizard wizard = new AddNatureWizard(project); final WizardDialog dialog = new WizardDialog(shell, wizard); wizard.dialog = dialog; dialog.setPageSize(640, 589); dialog.setHelpAvailable(false); dialog.create(); dialog.open(); } catch (Exception e) { throw new RuntimeException(e); } } }); } catch (Exception e) { if (e.getCause() instanceof CoreException) throw (CoreException) e.getCause(); throw new CoreException(ProjectUtil.createErrorStatus("Could not run wizard: " + e.toString(), null)); } } }