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.util.ArrayList;
024import java.util.regex.Pattern;
025
026import org.eclipse.core.resources.IContainer;
027import org.eclipse.core.resources.IFolder;
028import org.eclipse.core.resources.IProject;
029import org.eclipse.core.resources.IResource;
030import org.eclipse.core.resources.IWorkspaceRoot;
031import org.eclipse.core.resources.ResourcesPlugin;
032import org.eclipse.core.runtime.IPath;
033import org.eclipse.jdt.core.IJavaProject;
034import org.eclipse.jdt.internal.ui.wizards.NewWizardMessages;
035import org.eclipse.jdt.internal.ui.wizards.TypedViewerFilter;
036import org.eclipse.jface.window.Window;
037import org.eclipse.swt.widgets.Shell;
038import org.eclipse.swt.widgets.TreeItem;
039import org.eclipse.ui.model.WorkbenchContentProvider;
040import org.eclipse.ui.model.WorkbenchLabelProvider;
041import org.granite.builder.properties.Gas3Source;
042import org.granite.builder.util.SWTUtil;
043
044/**
045 * @author Franck WOLFF
046 */
047@SuppressWarnings("all")
048public class Dialogs {
049
050        public static String[] addPackageTranslator(Shell shell, String title) {
051                PackageTranslatorDialog dialog = new PackageTranslatorDialog(shell, null, null);
052        
053                dialog.setTitle(title);
054        dialog.setHelpAvailable(false);
055        dialog.create();
056        
057        if (dialog.open() == Window.OK) {
058                Object[] result = dialog.getResult();
059                if (result != null && result.length == 2)
060                        return (String[])result;
061        }
062        
063        return null;
064        }
065
066        public static String[] editPackageTranslator(Shell shell, String title, String initialJavaPath, String initialAs3Path) {
067                PackageTranslatorDialog dialog = new PackageTranslatorDialog(shell, initialJavaPath, initialAs3Path);
068        
069                dialog.setTitle(title);
070        dialog.setHelpAvailable(false);
071        dialog.create();
072        
073        if (dialog.open() == Window.OK) {
074                Object[] result = dialog.getResult();
075                if (result != null && result.length == 2)
076                        return (String[])result;
077        }
078        
079        return null;
080        }
081
082        public static String[] editTemplateUris(Shell shell, String title, String initialTemplateUri, String initialBaseTemplateUri) {
083                TemplateUrisDialog dialog = new TemplateUrisDialog(shell, initialTemplateUri, initialBaseTemplateUri);
084        
085                dialog.setTitle(title);
086        dialog.setHelpAvailable(false);
087        dialog.create();
088        
089        if (dialog.open() == Window.OK) {
090                Object[] result = dialog.getResult();
091                if (result != null && result.length == 2)
092                        return (String[])result;
093        }
094        
095        return null;
096        }
097
098        public static String prompt(Shell shell, String title, String message, String initialValue, Pattern valuePattern) {
099                PromptDialog dialog = new PromptDialog(shell, initialValue, valuePattern);
100        
101                dialog.setTitle(title);
102        dialog.setMessage(message);
103        dialog.setHelpAvailable(false);
104        dialog.create();
105        dialog.getOkButton().setEnabled(initialValue != null && initialValue.trim().length() > 0);
106        
107        if (dialog.open() == Window.OK) {
108                Object[] result = dialog.getResult();
109                if (result != null && result.length > 0)
110                        return (String)result[0];
111        }
112        
113        return null;
114        }
115        
116        public static Gas3Source editSourceFolderAttributes(IJavaProject project, Shell shell, Gas3Source source) {
117                String[] initialValues = new String[] {source.getIncludes(), source.getExcludes(), source.getOutput()};
118                
119                IncludeExcludeOutputDialog dialog = new IncludeExcludeOutputDialog(shell, initialValues);
120                dialog.setTitle("Source Folder Configuration");
121                dialog.setHelpAvailable(false);
122                
123                if (dialog.open() == Window.OK) {
124                        String[] result = (String[])dialog.getResult();
125                        if (result != null) {
126                                source.setIncludes(result[0]);
127                                source.setExcludes(result[1]);
128                                source.setOutput(result[2]);
129                        }
130                }
131                return source;
132        }
133        
134        public static IPath[] chooseSourceFolderEntries(IJavaProject project, Shell shell, IPath initialSelection, IPath[] usedEntries) {
135                if (usedEntries == null)
136                        throw new IllegalArgumentException();
137                String title= "Source Folder Selection"; 
138                String message= "Choose source folder to be add to generation process"; 
139                return internalChooseFolderEntries(project, shell, initialSelection, usedEntries, title, message);
140        }
141        
142                
143        private static IPath[] internalChooseFolderEntries(IJavaProject project, Shell shell, IPath initialSelection, IPath[] usedEntries, String title, String message) {      
144                Class[] acceptedClasses= new Class[] { IProject.class, IFolder.class };
145                ArrayList usedContainers= new ArrayList(usedEntries.length);
146                IWorkspaceRoot root= ResourcesPlugin.getWorkspace().getRoot();
147                for (int i= 0; i < usedEntries.length; i++) {
148                        IResource resource= root.findMember(usedEntries[i]);
149                        if (resource instanceof IContainer) {
150                                usedContainers.add(resource);
151                        }
152                }
153                
154                IResource focus= initialSelection != null ? root.findMember(initialSelection) : null;
155                Object[] used= usedContainers.toArray();
156                
157                MultipleFolderSelectionDialog dialog= new MultipleFolderSelectionDialog(
158                        shell, new WorkbenchLabelProvider(), new WorkbenchContentProvider(), false);
159                dialog.setExisting(used);
160                dialog.setTitle(title); 
161                dialog.setMessage(message); 
162                dialog.setHelpAvailable(false);
163                dialog.addFilter(new JavaFoldersViewerFilter(project));
164                dialog.setInput(root);
165                dialog.setInitialFocus(focus);
166                
167                if (dialog.open() == Window.OK) {
168                        Object[] elements= dialog.getResult();
169                        IPath[] res= new IPath[elements.length];
170                        for (int i= 0; i < res.length; i++) {
171                                IResource elem= (IResource) elements[i];
172                                res[i]= elem.getFullPath();
173                        }
174                        return res;
175                }
176                return null;            
177        }
178        
179        public static IPath[] chooseProjectEntries(IJavaProject project, Shell shell, IPath initialSelection, IPath[] usedEntries) {
180                if (usedEntries == null)
181                        throw new IllegalArgumentException();
182                String title= "Other Granite Project Selection"; 
183                String message= "Choose granite project to be used in the generation process"; 
184                return internalProjectEntries(project, shell, initialSelection, usedEntries, title, message);
185        }
186        
187                
188        private static IPath[] internalProjectEntries(IJavaProject project, Shell shell, IPath initialSelection, IPath[] usedEntries, String title, String message) {   
189                Class[] acceptedClasses= new Class[] { IProject.class };
190                ArrayList usedContainers= new ArrayList(usedEntries.length);
191                IWorkspaceRoot root= ResourcesPlugin.getWorkspace().getRoot();
192                for (int i= 0; i < usedEntries.length; i++) {
193                        IResource resource= root.findMember(usedEntries[i]);
194                        if (resource instanceof IContainer)
195                                usedContainers.add(resource);
196                }
197                
198                IResource focus= initialSelection != null ? root.findMember(initialSelection) : null;
199                Object[] used= usedContainers.toArray();
200                
201                MultipleFolderSelectionDialog dialog= new MultipleFolderSelectionDialog(
202                        shell, new WorkbenchLabelProvider(), new WorkbenchContentProvider(), false);
203                dialog.setExisting(used);
204                dialog.setTitle(title); 
205                dialog.setMessage(message); 
206                dialog.setHelpAvailable(false);
207                dialog.addFilter(new GraniteProjectsViewerFilter(project));
208                dialog.setInput(root);
209                dialog.setInitialFocus(focus);
210                
211                if (dialog.open() == Window.OK) {
212                        Object[] elements= dialog.getResult();
213                        IPath[] res= new IPath[elements.length];
214                        for (int i= 0; i < res.length; i++) {
215                                IResource elem= (IResource) elements[i];
216                                res[i]= elem.getFullPath();
217                        }
218                        return res;
219                }
220                return null;            
221        }
222}