1 19 20 package org.netbeans.modules.xml.catalogsupport.ui.customizer; 21 22 import java.awt.Dialog ; 23 import java.awt.event.ActionEvent ; 24 import java.awt.event.ActionListener ; 25 import java.awt.event.WindowAdapter ; 26 import java.awt.event.WindowEvent ; 27 import java.text.MessageFormat ; 28 import java.util.ArrayList ; 29 import java.util.HashMap ; 30 import java.util.List ; 31 import java.util.Map ; 32 import java.util.ResourceBundle ; 33 import javax.swing.JComponent ; 34 import javax.swing.JPanel ; 35 36 import org.openide.util.NbBundle; 37 import org.netbeans.api.project.Project; 38 import org.netbeans.api.project.ProjectUtils; 39 import org.netbeans.spi.project.support.ant.AntProjectHelper; 40 import org.netbeans.spi.project.support.ant.ReferenceHelper; 41 import org.netbeans.spi.project.ui.CustomizerProvider; 42 import org.netbeans.spi.project.ui.support.ProjectCustomizer; 43 44 45 50 public class CustomizerProviderImpl implements CustomizerProvider { 51 52 private final Project project; 53 private final AntProjectHelper antProjectHelper; 54 private final ReferenceHelper refHelper; 55 56 private List <ProjectCustomizer.Category> categories; 57 private PanelProvider panelProvider; 58 59 private static final int OPTION_OK = 0; 61 private static final int OPTION_CANCEL = OPTION_OK + 1; 62 63 private static final String COMMAND_OK = "OK"; private static final String COMMAND_CANCEL = "CANCEL"; 67 private static Map <Project,Dialog > project2Dialog = new HashMap <Project,Dialog >(); 68 69 private static final String REFERENCE = "Project References"; 71 private static final String CATALOG = "XML Catalog"; 72 73 public CustomizerProviderImpl(Project project, AntProjectHelper antProjectHelper, ReferenceHelper refHelper) { 74 this.project = project; 75 this.refHelper = refHelper; 76 this.antProjectHelper = antProjectHelper; 77 } 78 79 public void showCustomizer() { 80 showCustomizer(null); 81 } 82 83 84 public void showCustomizer (String preselectedCategory) { 85 showCustomizer (preselectedCategory, null); 86 } 87 88 public void showCustomizer(String preselectedCategory, String preselectedSubCategory) { 89 90 Dialog dialog = project2Dialog.get(getProject()); 91 if (dialog != null) { 92 dialog.setVisible(true); 93 return; 94 } 95 else { 96 init(); 97 OptionListener listener = new OptionListener(getProject()); 98 99 List <ProjectCustomizer.Category> listCategories = getCategories(); 100 if (preselectedCategory != null && preselectedSubCategory != null) { 101 for (ProjectCustomizer.Category category:listCategories) { 102 if (preselectedCategory.equals(category.getName())) { 103 JComponent component = panelProvider.create (category); 104 if (component instanceof SubCategoryProvider) { 105 ((SubCategoryProvider)component).showSubCategory(preselectedSubCategory); 106 } 107 break; 108 } 109 } 110 } 111 dialog = ProjectCustomizer.createCustomizerDialog(listCategories.toArray( 112 new ProjectCustomizer.Category[listCategories.size()]), 113 panelProvider, preselectedCategory, listener, null); 114 dialog.addWindowListener(new OptionListener(getProject())); 115 dialog.setTitle(NbBundle.getMessage( 116 CustomizerProviderImpl.class, "LBL_Customizer_Title", ProjectUtils.getInformation(getProject()).getDisplayName())); 118 119 project2Dialog.put(getProject(), dialog); 120 dialog.setVisible(true); 121 } 122 } 123 124 129 protected void init() { 130 categories = new ArrayList <ProjectCustomizer.Category>(); 131 panelProvider = new PanelProvider(createCategoriesMap()); 132 } 133 134 137 protected Project getProject() { 138 return project; 139 } 140 141 144 protected AntProjectHelper getAntProjectHelper() { 145 return antProjectHelper; 146 } 147 148 151 protected ReferenceHelper getRefHelper() { 152 return refHelper; 153 } 154 155 158 protected List <ProjectCustomizer.Category> getCategories() { 159 return categories; 160 } 161 162 169 protected Map <ProjectCustomizer.Category,JComponent > createCategoriesMap() { 170 ProjectCustomizer.Category references = ProjectCustomizer.Category.create( 171 REFERENCE, 172 NbBundle.getMessage(CustomizerProviderImpl.class, 173 "LBL_Customizer_Category_ProjectReferences"), 174 null, 175 null); 176 177 ProjectCustomizer.Category catalog = ProjectCustomizer.Category.create( 178 CATALOG, 179 NbBundle.getMessage(CustomizerProviderImpl.class, 180 "LBL_Customizer_Category_XMLCatalog"), 181 null, 182 null); 183 184 getCategories().add(references); 185 getCategories().add(catalog); 186 187 Map <ProjectCustomizer.Category,JComponent > panels = 188 new HashMap <ProjectCustomizer.Category,JComponent >(); 189 panels.put(references, new CustomizerProjectReferences(getProject(), getRefHelper())); 190 panels.put(catalog, new CustomizerXMLCatalog(getProject())); 191 return panels; 192 } 193 194 200 protected void storeProjectData() { 201 for (JComponent comp :panelProvider.panels.values()) { 203 if(comp instanceof CustomizerXMLCatalog) { 204 ((CustomizerXMLCatalog)comp).storeProjectData(); 205 } 206 } 207 } 208 209 214 private static class PanelProvider implements ProjectCustomizer.CategoryComponentProvider { 215 216 private JPanel EMPTY_PANEL = new JPanel (); 217 218 private Map <ProjectCustomizer.Category,JComponent > panels; 219 220 PanelProvider(Map <ProjectCustomizer.Category,JComponent > panels) { 221 this.panels = panels; 222 } 223 224 public JComponent create(ProjectCustomizer.Category category) { 225 JComponent panel = panels.get(category); 226 return panel == null ? EMPTY_PANEL : panel; 227 } 228 229 } 230 231 232 private class OptionListener extends WindowAdapter implements ActionListener { 233 234 private Project project; 235 236 OptionListener(Project project) { 237 this.project = project; 238 } 239 240 242 public void actionPerformed(ActionEvent e) { 243 storeProjectData(); 245 Dialog dialog = project2Dialog.get(project); 247 if (dialog != null) { 248 dialog.setVisible(false); 249 dialog.dispose(); 250 } 251 } 252 253 255 public void windowClosed(WindowEvent e) { 256 project2Dialog.remove(project); 257 } 258 259 public void windowClosing(WindowEvent e) { 260 Dialog dialog = project2Dialog.get(project); 263 if (dialog != null) { 264 dialog.setVisible(false); 265 dialog.dispose(); 266 } 267 } 268 } 269 270 public static interface SubCategoryProvider { 271 public void showSubCategory (String name); 272 } 273 274 } 275 | Popular Tags |