1 19 20 package org.apache.tools.ant.module.loader; 21 22 import java.awt.Component ; 23 import java.awt.event.ActionEvent ; 24 import java.beans.PropertyChangeEvent ; 25 import java.beans.PropertyChangeListener ; 26 import java.beans.PropertyChangeSupport ; 27 import java.io.File ; 28 import java.io.IOException ; 29 import java.io.ObjectInputStream ; 30 import java.net.MalformedURLException ; 31 import java.net.URL ; 32 import java.util.Arrays ; 33 import javax.swing.Action ; 34 import javax.swing.ImageIcon ; 35 import javax.swing.JButton ; 36 import javax.swing.JComponent ; 37 import javax.swing.JMenuItem ; 38 import javax.swing.event.ChangeEvent ; 39 import javax.swing.event.ChangeListener ; 40 import org.apache.tools.ant.module.AntModule; 41 import org.apache.tools.ant.module.api.AntProjectCookie; 42 import org.apache.tools.ant.module.run.TargetExecutor; 43 import org.netbeans.api.project.FileOwnerQuery; 44 import org.netbeans.api.project.Project; 45 import org.netbeans.api.project.ui.OpenProjects; 46 import org.openide.awt.Actions; 47 import org.openide.awt.DynamicMenuContent; 48 import org.openide.awt.Mnemonics; 49 import org.openide.cookies.InstanceCookie; 50 import org.openide.filesystems.FileObject; 51 import org.openide.filesystems.FileUtil; 52 import org.openide.util.actions.Presenter; 53 import org.openide.util.RequestProcessor; 54 import org.openide.util.WeakListeners; 55 import org.w3c.dom.Element ; 56 import org.w3c.dom.NodeList ; 57 58 62 public class AntActionInstance implements 63 InstanceCookie, Action , 64 Presenter.Menu, Presenter.Toolbar, 65 ChangeListener , PropertyChangeListener 66 { 67 68 private boolean inited; 69 private final AntProjectCookie proj; 70 private transient PropertyChangeSupport changeSupport; 71 72 public AntActionInstance (AntProjectCookie proj) { 73 this.proj = proj; 74 } 75 76 private void readObject (ObjectInputStream in) throws IOException , ClassNotFoundException { 77 in.defaultReadObject (); 78 init(); 79 } 80 81 public Class instanceClass () { 82 return AntActionInstance.class; 83 } 84 85 public String instanceName () { 86 FileObject fo = proj.getFileObject(); 87 if (fo != null) { 88 return fo.getName(); } else { 90 return ""; } 93 } 94 95 public Object instanceCreate () { 96 init(); 97 return this; 98 } 99 100 private void init() { 101 if (inited) { 102 return; 103 } 104 inited = true; 105 proj.addChangeListener(WeakListeners.change(this, proj)); 106 OpenProjects.getDefault().addPropertyChangeListener(WeakListeners.propertyChange(this, OpenProjects.getDefault())); 107 changeSupport = new PropertyChangeSupport (this); 108 } 109 110 public void actionPerformed (ActionEvent ignore) { 111 RequestProcessor.getDefault().post(new Runnable () { 113 public void run() { 114 TargetExecutor exec = new TargetExecutor (proj, null); 115 try { 116 exec.execute (); 117 } catch (IOException ioe) { 118 AntModule.err.notify (ioe); 119 } 120 } 121 }); 122 } 123 124 public boolean isEnabled () { 125 if (proj.getFile() == null) { 126 return false; } 128 Element root = proj.getProjectElement(); 130 if (root == null) { 131 return false; } 133 NodeList nl = root.getElementsByTagName("ant"); if (nl.getLength() == 1) { 135 Element ant = (Element ) nl.item(0); 136 String antfile = ant.getAttribute("antfile"); if (antfile.length() == 0) { 138 String dir = ant.getAttribute("dir"); if (dir.length() > 0) { 140 antfile = dir + File.separatorChar + "build.xml"; } 142 } 143 if (antfile.length() > 0) { 144 FileObject fo = FileUtil.toFileObject(new File (antfile)); 145 if (fo != null) { 146 Project owner = FileOwnerQuery.getOwner(fo); 147 if (owner != null) { 148 return Arrays.asList(OpenProjects.getDefault().getOpenProjects()).contains(owner); 149 } 150 } 151 } 152 } 153 return true; 154 } 155 156 public void setEnabled (boolean b) { 157 assert false; 158 } 159 160 public Object getValue (String key) { 161 if (Action.NAME.equals (key)) { 162 Element el = proj.getProjectElement (); 163 if (el != null) { 164 String pname = el.getAttribute ("name"); return Actions.cutAmpersand(pname); 166 } 167 } else if (Action.SMALL_ICON.equals (key)) { 168 try { 169 return new ImageIcon (new URL ("nbresloc:/org/apache/tools/ant/module/resources/AntIcon.gif")); 170 } catch (MalformedURLException e) { 171 throw new AssertionError (e); 172 } 173 } else if (Action.MNEMONIC_KEY.equals (key)) { 174 Element el = proj.getProjectElement (); 175 if (el != null) { 176 String pname = el.getAttribute ("name"); int idx = Mnemonics.findMnemonicAmpersand(pname); 178 if (idx != -1) { 179 return new Integer (pname.charAt (idx + 1)); 181 } 182 } 183 return new Integer (0); } 185 return null; 186 } 187 188 public void putValue (String key, Object value) { 189 } 191 192 public final void addPropertyChangeListener (PropertyChangeListener listener) { 193 changeSupport.addPropertyChangeListener(listener); 194 } 195 196 public final void removePropertyChangeListener (PropertyChangeListener listener) { 197 changeSupport.removePropertyChangeListener(listener); 198 } 199 200 public JMenuItem getMenuPresenter () { 201 class AntMenuItem extends JMenuItem implements DynamicMenuContent { 202 public AntMenuItem() { 203 super(AntActionInstance.this); 204 } 205 public JComponent [] getMenuPresenters() { 206 return isEnabled() ? new JComponent [] {this} : new JComponent [0]; 207 } 208 public JComponent [] synchMenuPresenters(JComponent [] items) { 209 return getMenuPresenters(); 210 } 211 } 212 return new AntMenuItem(); 213 } 214 215 public Component getToolbarPresenter () { 216 class AntButton extends JButton implements PropertyChangeListener { 217 public AntButton() { 218 super(AntActionInstance.this); 219 setVisible(isEnabled()); 220 AntActionInstance.this.addPropertyChangeListener(WeakListeners.propertyChange(this, AntActionInstance.this)); 221 } 222 public void propertyChange(PropertyChangeEvent evt) { 223 if ("enabled".equals(evt.getPropertyName())) { setVisible(isEnabled()); 225 } 226 } 227 } 228 return new AntButton(); 229 } 230 231 public void stateChanged (ChangeEvent ignore) { 232 changeSupport.firePropertyChange(Action.NAME, null, getValue (Action.NAME)); 235 changeSupport.firePropertyChange("enabled", null, isEnabled () ? Boolean.TRUE : Boolean.FALSE); changeSupport.firePropertyChange(Action.MNEMONIC_KEY, null, getValue (Action.MNEMONIC_KEY)); 237 } 238 239 public void propertyChange(PropertyChangeEvent evt) { 240 changeSupport.firePropertyChange("enabled", null, isEnabled() ? Boolean.TRUE : Boolean.FALSE); } 243 244 } 245 | Popular Tags |