1 6 7 package org.netbeans.modules.xml.catalogsupport.ui.customizer; 8 9 import java.awt.Component ; 10 import java.awt.Dimension ; 11 import java.io.File ; 12 import java.io.IOException ; 13 import java.util.Set ; 14 import javax.swing.DefaultListCellRenderer ; 15 import javax.swing.DefaultListModel ; 16 import javax.swing.event.ListSelectionEvent ; 17 import javax.swing.event.ListSelectionListener ; 18 import javax.swing.filechooser.FileFilter ; 19 import javax.swing.JFileChooser ; 20 import javax.swing.JList ; 21 22 import org.openide.util.HelpCtx; 23 import org.openide.filesystems.FileObject; 24 import org.openide.filesystems.FileUtil; 25 import org.netbeans.api.project.Project; 26 import org.netbeans.api.project.ProjectInformation; 27 import org.netbeans.api.project.ProjectManager; 28 import org.netbeans.api.project.ProjectUtils; 29 import org.netbeans.spi.project.SubprojectProvider; 30 import org.netbeans.spi.project.support.ant.ReferenceHelper; 31 import org.netbeans.spi.project.ui.support.ProjectChooser; 32 33 import org.netbeans.modules.xml.catalogsupport.util.ProjectReferenceUtility; 34 35 39 public class CustomizerProjectReferences extends javax.swing.JPanel implements HelpCtx.Provider { 40 41 private ReferenceHelper refHelper; 42 private SubprojectProvider subprojectProvider; 43 44 public CustomizerProjectReferences(Project project, ReferenceHelper refHelper) { 45 this.refHelper = refHelper; 46 this.subprojectProvider = (SubprojectProvider)project.getLookup(). 47 lookup(SubprojectProvider.class); 48 initComponents(); 49 projectList.addListSelectionListener( new ListSelectionListener () { 50 public void valueChanged(ListSelectionEvent e) { 51 if(projectList.getSelectedIndices().length==0) { 52 removeButton.setEnabled(false); 53 } else { 54 removeButton.setEnabled(true); 55 } 56 } 57 }); 58 refreshProjectList(); 59 } 60 61 64 private void refreshProjectList() { 65 DefaultListModel listModel = (DefaultListModel ) projectList.getModel(); 66 listModel.clear(); 67 Set subprojects = getSubprojectProvider().getSubprojects(); 68 for(Object object:subprojects) { 69 Project prj = (Project)object; 70 ProjectInformation pInfo = ProjectUtils.getInformation(prj); 71 listModel.addElement(pInfo); 72 } 73 } 74 75 private ReferenceHelper getRefHelper() { 76 return refHelper; 77 } 78 79 private SubprojectProvider getSubprojectProvider() { 80 return subprojectProvider; 81 } 82 83 88 private void initComponents() { 90 refLabel = new javax.swing.JLabel (); 91 jScrollPane1 = new javax.swing.JScrollPane (); 92 projectList = new javax.swing.JList (); 93 addButton = new javax.swing.JButton (); 94 removeButton = new javax.swing.JButton (); 95 96 refLabel.setLabelFor(projectList); 97 org.openide.awt.Mnemonics.setLocalizedText(refLabel, org.openide.util.NbBundle.getMessage(CustomizerProjectReferences.class, "LBL_CustomizerProjectReferences_ProjectReferences")); 98 refLabel.setToolTipText(org.openide.util.NbBundle.getMessage(CustomizerProjectReferences.class, "HINT_CustomizerProjectReferences_ProjectReferences")); 99 100 projectList.setModel(new DefaultListModel ()); 101 projectList.setCellRenderer(new DefaultListCellRenderer () { 102 public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) { 103 ProjectInformation pInfo = (ProjectInformation)value; 104 super.getListCellRendererComponent( projectList, pInfo, index, isSelected, cellHasFocus ); 105 setIcon(pInfo.getIcon()); 106 setText(pInfo.getDisplayName()); 107 setToolTipText(pInfo.getDisplayName()); 108 return this; 109 } 110 }); 111 jScrollPane1.setViewportView(projectList); 112 113 org.openide.awt.Mnemonics.setLocalizedText(addButton, org.openide.util.NbBundle.getMessage(CustomizerProjectReferences.class, "LBL_CustomizerProjectReferences_AddProject")); 114 addButton.setToolTipText(org.openide.util.NbBundle.getMessage(CustomizerProjectReferences.class, "HINT_CustomizerProjectReferences_AddProject")); 115 addButton.addActionListener(new java.awt.event.ActionListener () { 116 public void actionPerformed(java.awt.event.ActionEvent evt) { 117 showProjectDialog(evt); 118 } 119 }); 120 121 org.openide.awt.Mnemonics.setLocalizedText(removeButton, org.openide.util.NbBundle.getMessage(CustomizerProjectReferences.class, "LBL_CustomizerProjectReferences_RemoveProject")); 122 removeButton.setToolTipText(org.openide.util.NbBundle.getMessage(CustomizerProjectReferences.class, "HINT_CustomizerProjectReferences_RemoveProject")); 123 removeButton.setEnabled(false); 124 removeButton.addActionListener(new java.awt.event.ActionListener () { 125 public void actionPerformed(java.awt.event.ActionEvent evt) { 126 removeProject(evt); 127 } 128 }); 129 130 org.jdesktop.layout.GroupLayout layout = new org.jdesktop.layout.GroupLayout(this); 131 this.setLayout(layout); 132 layout.setHorizontalGroup( 133 layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) 134 .add(layout.createSequentialGroup() 135 .addContainerGap() 136 .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) 137 .add(org.jdesktop.layout.GroupLayout.TRAILING, layout.createSequentialGroup() 138 .add(jScrollPane1, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 273, Short.MAX_VALUE) 139 .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) 140 .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.TRAILING) 141 .add(addButton) 142 .add(removeButton))) 143 .add(refLabel)) 144 .addContainerGap()) 145 ); 146 147 layout.linkSize(new java.awt.Component [] {addButton, removeButton}, org.jdesktop.layout.GroupLayout.HORIZONTAL); 148 149 layout.setVerticalGroup( 150 layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) 151 .add(layout.createSequentialGroup() 152 .addContainerGap() 153 .add(refLabel) 154 .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) 155 .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) 156 .add(layout.createSequentialGroup() 157 .add(addButton) 158 .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) 159 .add(removeButton)) 160 .add(jScrollPane1, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 258, Short.MAX_VALUE)) 161 .addContainerGap()) 162 ); 163 } 165 170 private void removeProject(java.awt.event.ActionEvent evt) { Object [] selection = projectList.getSelectedValues(); 172 for(Object selected:selection) { 173 ProjectInformation pInfo = (ProjectInformation)selected; 174 ProjectReferenceUtility.removeProjectReference(getRefHelper(),pInfo.getProject()); 175 } 176 refreshProjectList(); 177 } 179 183 184 private void showProjectDialog(java.awt.event.ActionEvent evt) { JFileChooser chooser = ProjectChooser.projectChooser(); 187 chooser.setDialogTitle(org.openide.util.NbBundle.getMessage( 188 CustomizerProjectReferences.class, 189 "LBL_CustomizerProjectReferences_ProjectChooserTitle")); chooser.setApproveButtonText(org.openide.util.NbBundle.getMessage( 191 CustomizerProjectReferences.class, 192 "LBL_CustomizerProjectReferences_ProjectChooserButton")); chooser.setPreferredSize( new Dimension ( 650, 380 ) ); 194 chooser.setFileFilter(new FileFilter () { 195 public boolean accept(File f) { 196 if (f == null || !f.isDirectory()) 197 return false; 198 return true; 199 } 200 public String getDescription() { 201 return "Directories/Project roots only."; 202 } 203 }); 204 int option = chooser.showOpenDialog(this); 205 if(option == JFileChooser.APPROVE_OPTION) { 207 addProjectReference(chooser.getSelectedFile()); 208 } 209 } 211 216 private void addProjectReference(final File projectDirectory) { 217 FileObject projectRoot = FileUtil.toFileObject(projectDirectory); 218 if(projectRoot!=null) { 219 try { 220 Project refProject = ProjectManager.getDefault().findProject(projectRoot); 221 if(refProject!=null) { 222 ProjectReferenceUtility.addProjectReference(getRefHelper(),refProject); 223 } 224 } catch (IllegalArgumentException ex) { 225 } catch (IOException ex) { 226 } 227 } 228 refreshProjectList(); 229 } 230 231 public HelpCtx getHelpCtx() { 232 return new HelpCtx(CustomizerProjectReferences.class); 233 } 234 235 private javax.swing.JButton addButton; 237 private javax.swing.JScrollPane jScrollPane1; 238 private javax.swing.JList projectList; 239 private javax.swing.JLabel refLabel; 240 private javax.swing.JButton removeButton; 241 243 } 244 | Popular Tags |