1 19 20 package org.apache.tools.ant.module.nodes; 21 22 import java.awt.Image ; 23 import java.util.ResourceBundle ; 24 import javax.swing.event.ChangeEvent ; 25 import javax.swing.event.ChangeListener ; 26 import org.apache.tools.ant.module.AntModule; 27 import org.apache.tools.ant.module.api.AntProjectCookie; 28 import org.openide.ErrorManager; 29 import org.openide.filesystems.FileStateInvalidException; 30 import org.openide.loaders.DataNode; 31 import org.openide.loaders.DataObject; 32 import org.openide.nodes.Node; 33 import org.openide.nodes.Sheet; 34 import org.openide.util.Mutex; 35 import org.openide.util.NbBundle; 36 import org.openide.util.Utilities; 37 import org.openide.util.WeakListeners; 38 import org.w3c.dom.Element ; 39 40 public final class AntProjectNode extends DataNode implements ChangeListener { 41 42 public AntProjectNode (DataObject obj) { 43 this(obj, obj.getCookie(AntProjectCookie.class)); 44 } 45 46 private AntProjectNode(DataObject obj, AntProjectCookie cookie) { 47 super(obj, new AntProjectChildren(cookie)); 48 cookie.addChangeListener(WeakListeners.change(this, cookie)); 49 } 50 51 @Override 52 public Image getIcon(int type) { 53 Image i = getBasicIcon(); 54 try { 55 i = getDataObject().getPrimaryFile().getFileSystem().getStatus(). 57 annotateIcon(i, type, getDataObject().files()); 58 } catch (FileStateInvalidException fsie) { 59 AntModule.err.notify(ErrorManager.INFORMATIONAL, fsie); 60 } 61 return i; 62 } 63 private Image getBasicIcon() { 64 AntProjectCookie.ParseStatus cookie = getCookie(AntProjectCookie.ParseStatus.class); 65 if (cookie.getFile() == null && cookie.getFileObject() == null) { 66 return Utilities.loadImage("org/apache/tools/ant/module/resources/AntIconError.gif"); } 70 if (!cookie.isParsed()) { 71 return Utilities.loadImage("org/apache/tools/ant/module/resources/AntIcon.gif"); } 74 Throwable exc = cookie.getParseException(); 75 if (exc != null) { 76 return Utilities.loadImage("org/apache/tools/ant/module/resources/AntIconError.gif"); } else { 78 return Utilities.loadImage("org/apache/tools/ant/module/resources/AntIcon.gif"); } 80 } 81 @Override 82 public Image getOpenedIcon(int type) { 83 return getIcon(type); 84 } 85 86 @Override 87 public String getShortDescription() { 88 AntProjectCookie cookie = getCookie(AntProjectCookie.class); 89 if (cookie.getFile() == null && cookie.getFileObject() == null) { 90 return super.getShortDescription(); 93 } 94 Throwable exc = cookie.getParseException(); 95 if (exc != null) { 96 String m = exc.getLocalizedMessage(); 97 if (m != null) { 98 return m; 99 } else { 100 return exc.toString(); 101 } 102 } else { 103 Element pel = cookie.getProjectElement(); 104 if (pel != null) { 105 String projectName = pel.getAttribute("name"); if (!projectName.equals("")) { return NbBundle.getMessage(AntProjectNode.class, "LBL_named_script_description", projectName); 109 } else { 110 return NbBundle.getMessage(AntProjectNode.class, "LBL_anon_script_description"); 112 } 113 } else { 114 return super.getShortDescription(); 116 } 117 } 118 } 119 120 @Override 121 protected Sheet createSheet() { 122 Sheet sheet = super.createSheet(); 123 124 Sheet.Set props = new Sheet.Set(); 125 props.setName("project"); props.setDisplayName(NbBundle.getMessage(AntProjectNode.class, "LBL_proj_sheet")); 127 props.setShortDescription(NbBundle.getMessage(AntProjectNode.class, "HINT_proj_sheet")); 128 add2Sheet (props); 129 sheet.put(props); 130 131 return sheet; 132 } 133 134 private class ProjectNameProperty extends AntProperty { 135 public ProjectNameProperty(String name) { 136 super(name); 137 } 138 @Override 139 protected Element getElement () { 140 return getCookie(AntProjectCookie.class).getProjectElement(); 141 } 142 } 143 144 private class ProjectTargetProperty extends AntProperty { 145 public ProjectTargetProperty(String name) { 146 super(name); 147 } 148 @Override 149 protected Element getElement () { 150 return getCookie(AntProjectCookie.class).getProjectElement(); 151 } 152 } 153 154 private void add2Sheet (Sheet.Set props) { 155 ResourceBundle bundle = NbBundle.getBundle (AntProjectNode.class); 156 157 Node.Property<?> prop = new ProjectNameProperty("name"); prop.setName ("projectName"); prop.setDisplayName (bundle.getString ("PROP_projectName")); 162 prop.setShortDescription (bundle.getString ("HINT_projectName")); 163 props.put (prop); 164 prop = new ProjectTargetProperty("default"); prop.setDisplayName (bundle.getString ("PROP_default")); 166 prop.setShortDescription (bundle.getString ("HINT_default")); 167 props.put (prop); 168 } 169 170 public void stateChanged (ChangeEvent ev) { 171 Mutex.EVENT.writeAccess(new Runnable () { 172 public void run() { 173 fireIconChange(); 174 fireOpenedIconChange(); 175 fireShortDescriptionChange(null, null); 176 fireCookieChange(); 177 firePropertyChange(null, null, null); 178 } 179 }); 180 } 181 182 } 183 | Popular Tags |