001/* 002 GRANITE DATA SERVICES 003 Copyright (C) 2011 GRANITE DATA SERVICES S.A.S. 004 005 This file is part of Granite Data Services. 006 007 Granite Data Services is free software; you can redistribute it and/or modify 008 it under the terms of the GNU Library General Public License as published by 009 the Free Software Foundation; either version 2 of the License, or (at your 010 option) any later version. 011 012 Granite Data Services is distributed in the hope that it will be useful, but 013 WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 014 FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License 015 for more details. 016 017 You should have received a copy of the GNU Library General Public License 018 along with this library; if not, see <http://www.gnu.org/licenses/>. 019*/ 020 021package org.granite.builder.ui; 022 023import java.io.IOException; 024 025import org.eclipse.core.resources.IProject; 026import org.eclipse.core.runtime.CoreException; 027import org.eclipse.jface.resource.ImageDescriptor; 028import org.eclipse.jface.wizard.Wizard; 029import org.eclipse.jface.wizard.WizardDialog; 030import org.eclipse.jface.wizard.WizardPage; 031import org.eclipse.swt.widgets.Composite; 032import org.eclipse.swt.widgets.Display; 033import org.eclipse.swt.widgets.Shell; 034import org.granite.builder.GraniteBuilderContext; 035import org.granite.builder.GraniteNature; 036import org.granite.builder.ToggleNatureAction; 037import org.granite.builder.properties.Gas3Transformer; 038import org.granite.builder.properties.GraniteProperties; 039import org.granite.builder.properties.GranitePropertiesLoader; 040import org.granite.builder.util.ProjectUtil; 041import org.granite.builder.util.SWTUtil; 042 043/** 044 * @author Franck WOLFF 045 */ 046public class AddNatureWizard extends Wizard { 047 048 private static final String SOURCES_PANEL = "sourcesPanel"; 049 private static final String PROJECTS_PANEL = "projectsPanel"; 050 private static final String CLASSPATHS_PANEL = "classpathsPanel"; 051 private static final String TEMPLATES_PANEL = "templatesPanel"; 052 private static final String OPTIONS_PANEL = "optionsPanel"; 053 054 private final GraniteBuilderContext context; 055 056 private WizardDialog dialog = null; 057 058 public AddNatureWizard(IProject project) throws CoreException { 059 this.context = new GraniteBuilderContext(project); 060 } 061 062 @Override 063 public void addPages() { 064 setWindowTitle("Add Granite Nature Wizard"); 065 setDefaultPageImageDescriptor(ImageDescriptor.createFromImage( 066 SWTUtil.getImage(getShell().getDisplay(), "icons/gdswiz.gif")) 067 ); 068 069 addPage(new WizardPage(SOURCES_PANEL) { 070 @Override 071 public void createControl(Composite parent) { 072 try { 073 setControl(new SourcesPanel(parent, context)); 074 } catch (Exception e) { 075 throw new RuntimeException(e); 076 } 077 setTitle("Source Folder Configuration"); 078 setDescription("Step 1: select Java source folders, included/excluded patterns and output folders..."); 079 } 080 }); 081 082 addPage(new WizardPage(PROJECTS_PANEL) { 083 @Override 084 public void createControl(Composite parent) { 085 try { 086 setControl(new ProjectsPanel(parent, context)); 087 } catch (Exception e) { 088 throw new RuntimeException(e); 089 } 090 setTitle("Dependent Projects Configuration"); 091 setDescription("Step 2: select dependent granite projects..."); 092 } 093 }); 094 095 addPage(new WizardPage(CLASSPATHS_PANEL) { 096 @Override 097 public void createControl(Composite parent) { 098 try { 099 setControl(new ClasspathsPanel(parent, context)); 100 } catch (Exception e) { 101 throw new RuntimeException(e); 102 } 103 setTitle("Classpath Configuration"); 104 setDescription("Step 3: select jars or class folders used as classpath..."); 105 } 106 }); 107 108 addPage(new WizardPage(TEMPLATES_PANEL) { 109 @Override 110 public void createControl(Composite parent) { 111 try { 112 setControl(new TemplatesPanel(parent, context)); 113 } catch (Exception e) { 114 throw new RuntimeException(e); 115 } 116 setTitle("Templates Configuration"); 117 setDescription("Step 4: select templates that will be used for generation..."); 118 } 119 }); 120 121 addPage(new WizardPage(OPTIONS_PANEL) { 122 @Override 123 public void createControl(Composite parent) { 124 try { 125 setControl(new OptionsPanel(parent, context)); 126 } catch (Exception e) { 127 throw new RuntimeException(e); 128 } 129 setTitle("Miscanellous Options"); 130 setDescription("Step 5: modify various options that control file generation..."); 131 } 132 }); 133 } 134 135 @Override 136 public boolean performFinish() { 137 GraniteProperties properties = GraniteProperties.getDefaultProperties(); 138 139 SourcesPanel sourcesPanel = (SourcesPanel)getPage(SOURCES_PANEL).getControl(); 140 properties.getGas3().getSources().addAll(sourcesPanel.getSources()); 141 142 ProjectsPanel projectsPanel = (ProjectsPanel)getPage(PROJECTS_PANEL).getControl(); 143 properties.getGas3().getProjects().addAll(projectsPanel.getProjects()); 144 145 ClasspathsPanel classpathsPanel = (ClasspathsPanel)getPage(CLASSPATHS_PANEL).getControl(); 146 properties.getGas3().getClasspaths().addAll(classpathsPanel.getClasspaths()); 147 148 TemplatesPanel templatesPanel = (TemplatesPanel)getPage(TEMPLATES_PANEL).getControl(); 149 properties.getGas3().getTemplates().clear(); 150 properties.getGas3().getTemplates().addAll(templatesPanel.getTemplates()); 151 152 OptionsPanel optionsPanel = (OptionsPanel)getPage(OPTIONS_PANEL).getControl(); 153 properties.getGas3().setUid(optionsPanel.getUid()); 154 properties.getGas3().setAs3TypeFactory(optionsPanel.getAs3TypeFactory()); 155 properties.getGas3().setEntityFactory(optionsPanel.getEntityFactory()); 156 properties.getGas3().setRemoteDestinationFactory(optionsPanel.getRemoteDestinationFactory()); 157 properties.getGas3().getTransformers().clear(); 158 properties.getGas3().getTransformers().add(new Gas3Transformer(optionsPanel.getTransformer())); 159 properties.getGas3().getTranslators().clear(); 160 properties.getGas3().getTranslators().addAll(optionsPanel.getTranslators()); 161 properties.getGas3().setDebugEnabled(optionsPanel.isDebugEnabled()); 162 properties.getGas3().setFlexConfig(optionsPanel.isFlexConfig()); 163 properties.getGas3().setExternalizeLong(optionsPanel.isExternalizeLong()); 164 properties.getGas3().setExternalizeBigInteger(optionsPanel.isExternalizeBigInteger()); 165 properties.getGas3().setExternalizeBigDecimal(optionsPanel.isExternalizeBigDecimal()); 166 167 try { 168 GranitePropertiesLoader.save(context.getJavaProject().getProject(), properties); 169 } catch (IOException e) { 170 dialog.setErrorMessage("Could not save Granite properties: " + e.toString()); 171 return false; 172 } 173 174 return true; 175 } 176 177 @Override 178 public boolean performCancel() { 179 try { 180 IProject project = context.getJavaProject().getProject(); 181 if (project.getDescription().hasNature(GraniteNature.NATURE_ID)) 182 ToggleNatureAction.toggleNature(project); 183 } catch (CoreException e) { 184 } 185 return true; 186 } 187 188 public static void run(final IProject project) throws CoreException { 189 final Display display = (Display.getCurrent() != null ? Display.getCurrent() : Display.getDefault()); 190 try { 191 display.syncExec(new Runnable() { 192 @Override 193 public void run() { 194 try { 195 Shell shell = new Shell(display); 196 AddNatureWizard wizard = new AddNatureWizard(project); 197 final WizardDialog dialog = new WizardDialog(shell, wizard); 198 wizard.dialog = dialog; 199 dialog.setPageSize(640, 589); 200 dialog.setHelpAvailable(false); 201 dialog.create(); 202 dialog.open(); 203 } catch (Exception e) { 204 throw new RuntimeException(e); 205 } 206 } 207 }); 208 } catch (Exception e) { 209 if (e.getCause() instanceof CoreException) 210 throw (CoreException)e.getCause(); 211 throw new CoreException(ProjectUtil.createErrorStatus("Could not run wizard: " + e.toString(), null)); 212 } 213 } 214}