1 19 20 package org.netbeans.modules.web.wizards; 21 22 import java.awt.Component ; 23 import java.io.IOException ; 24 import java.util.Collections ; 25 import java.util.NoSuchElementException ; 26 import java.util.Set ; 27 import javax.swing.JComponent ; 28 import javax.swing.event.ChangeListener ; 29 import java.text.MessageFormat ; 30 import org.netbeans.api.java.source.JavaSource; 31 import org.netbeans.modules.web.core.Util; 32 33 import org.openide.ErrorManager; 34 import org.openide.NotifyDescriptor; 35 import org.openide.filesystems.FileObject; 36 import org.openide.WizardDescriptor; 37 import org.openide.loaders.*; 38 import org.openide.util.NbBundle; 39 40 import org.netbeans.api.java.classpath.ClassPath; 41 import org.netbeans.modules.j2ee.dd.api.web.*; 42 import org.openide.DialogDisplayer; 43 44 import org.netbeans.spi.project.ui.templates.support.Templates; 45 import org.netbeans.api.project.Project; 46 import org.netbeans.api.project.SourceGroup; 47 import org.netbeans.spi.java.project.support.ui.templates.JavaTemplates; 48 49 57 public class ListenerIterator implements TemplateWizard.Iterator { 58 59 62 private ListenerPanel panel; 64 protected WizardDescriptor.Panel[] createPanels (TemplateWizard wizard) { 65 Project project = Templates.getProject( wiz ); 66 SourceGroup[] sourceGroups = Util.getJavaSourceGroups(project); 67 panel = new ListenerPanel(wizard); 68 69 WizardDescriptor.Panel packageChooserPanel; 70 if (sourceGroups.length == 0) 71 packageChooserPanel = Templates.createSimpleTargetChooser(project, sourceGroups, panel); 72 else 73 packageChooserPanel = JavaTemplates.createPackageChooser(project, sourceGroups, panel); 74 75 return new WizardDescriptor.Panel[] { 76 packageChooserPanel 78 }; 79 } 80 81 public Set instantiate (TemplateWizard wiz) throws IOException { 82 91 FileObject folder = Templates.getTargetFolder( wiz ); 92 DataFolder targetFolder = DataFolder.findFolder( folder ); 93 94 ClassPath classPath = ClassPath.getClassPath(folder,ClassPath.SOURCE); 95 String listenerName = wiz.getTargetName(); 96 DataObject result=null; 97 98 if (classPath!=null) { DataObject template = wiz.getTemplate (); 100 if (listenerName==null) { 101 result = template.createFromTemplate (targetFolder); 103 } else { 104 result = template.createFromTemplate (targetFolder, listenerName); 105 } 106 String className = classPath.getResourceName(result.getPrimaryFile(),'.',false); 107 if (result!=null && panel.createElementInDD()){ 108 FileObject webAppFo=DeployData.getWebAppFor(folder); 109 WebApp webApp=null; 110 if (webAppFo!=null) { 111 webApp = DDProvider.getDefault().getDDRoot(webAppFo); 112 } 113 if (webApp!=null) { 114 Listener [] oldListeners = webApp.getListener(); 115 boolean found=false; 116 for (int i=0;i<oldListeners.length;i++) { 117 if (className.equals(oldListeners[i].getListenerClass())) { 118 found=true; 119 break; 120 } 121 } 122 if (!found) { 123 try { 124 Listener listener = (Listener )webApp.createBean("Listener"); listener.setListenerClass(className); 126 StringBuffer desc= new StringBuffer (); 127 int i=0; 128 if (panel.isContextListener()) { 129 desc.append("ServletContextListener"); i++; 131 } 132 if (panel.isContextAttrListener()) { 133 if (i>0) desc.append(", "); 134 desc.append("ServletContextAttributeListener"); i++; 136 } 137 if (panel.isSessionListener()) { 138 if (i>0) desc.append(", "); 139 desc.append("HttpSessionListener"); i++; 141 } 142 if (panel.isSessionAttrListener()) { 143 if (i>0) desc.append(", "); 144 desc.append("HttpSessionAttributeListener"); } 146 if (panel.isRequestListener()) { 147 if (i>0) desc.append(", "); 148 desc.append("RequestListener"); i++; 150 } 151 if (panel.isRequestAttrListener()) { 152 if (i>0) desc.append(", "); 153 desc.append("RequestAttributeListener"); } 155 listener.setDescription(desc.toString()); 156 webApp.addListener(listener); 157 webApp.write(webAppFo); 158 } catch (ClassNotFoundException ex) { } 160 } 161 } 162 } 163 if (result!=null) { 164 JavaSource clazz = JavaSource.forFileObject(result.getPrimaryFile()); 165 if (clazz!=null) { 166 ListenerGenerator gen = new ListenerGenerator( 167 panel.isContextListener(), 168 panel.isContextAttrListener(), 169 panel.isSessionListener(), 170 panel.isSessionAttrListener(), 171 panel.isRequestListener(), 172 panel.isRequestAttrListener()); 173 try { 174 gen.generate(clazz); 175 } catch (IOException ex){ 176 ErrorManager.getDefault().notify(ErrorManager.INFORMATIONAL,ex); 177 } 178 } 179 } 180 } else { 181 String mes = MessageFormat.format ( 182 NbBundle.getMessage (ListenerIterator.class, "TXT_wrongFolderForClass"), 183 new Object [] {"Servlet Listener"}); NotifyDescriptor desc = new NotifyDescriptor.Message(mes,NotifyDescriptor.Message.ERROR_MESSAGE); 185 DialogDisplayer.getDefault().notify(desc); 186 } 187 return Collections.singleton (result); 188 } 189 190 192 private transient int index; 193 private transient WizardDescriptor.Panel[] panels; 194 private transient TemplateWizard wiz; 195 196 private static final long serialVersionUID = -7586964579556513549L; 197 198 public void initialize (TemplateWizard wiz) { 203 this.wiz = wiz; 204 index = 0; 205 panels = createPanels (wiz); 206 207 Object prop = wiz.getProperty ("WizardPanel_contentData"); String [] beforeSteps = null; 210 if (prop != null && prop instanceof String []) { 211 beforeSteps = (String [])prop; 212 } 213 String [] steps = Utilities.createSteps (beforeSteps, panels); 214 215 for (int i = 0; i < panels.length; i++) { 216 Component c = panels[i].getComponent (); 217 if (steps[i] == null) { 218 steps[i] = c.getName (); 222 } 223 if (c instanceof JComponent ) { JComponent jc = (JComponent ) c; 225 jc.putClientProperty ("WizardPanel_contentSelectedIndex", new Integer (i)); jc.putClientProperty ("WizardPanel_contentData", steps); } 230 } 231 } 232 public void uninitialize (TemplateWizard wiz) { 233 this.wiz = null; 234 panels = null; 235 } 236 237 242 public String name () { 243 return NbBundle.getMessage(ListenerIterator.class, "TITLE_x_of_y", 244 new Integer (index + 1), new Integer (panels.length)); 245 } 246 247 public boolean hasNext () { 248 return index < panels.length - 1; 249 } 250 public boolean hasPrevious () { 251 return index > 0; 252 } 253 public void nextPanel () { 254 if (! hasNext ()) throw new NoSuchElementException (); 255 index++; 256 } 257 public void previousPanel () { 258 if (! hasPrevious ()) throw new NoSuchElementException (); 259 index--; 260 } 261 public WizardDescriptor.Panel current () { 262 return panels[index]; 263 } 264 265 public final void addChangeListener (ChangeListener l) {} 267 public final void removeChangeListener (ChangeListener l) {} 268 } 273 | Popular Tags |