diff options
Diffstat (limited to 'src/installer/lombok')
-rw-r--r-- | src/installer/lombok/installer/netbeans/NetbeansFinder.java | 206 | ||||
-rw-r--r-- | src/installer/lombok/installer/netbeans/NetbeansLocation.java | 410 | ||||
-rw-r--r-- | src/installer/lombok/installer/netbeans/NetbeansLocationProvider.java | 125 | ||||
-rw-r--r-- | src/installer/lombok/installer/netbeans/netbeans.png | bin | 1705 -> 0 bytes |
4 files changed, 0 insertions, 741 deletions
diff --git a/src/installer/lombok/installer/netbeans/NetbeansFinder.java b/src/installer/lombok/installer/netbeans/NetbeansFinder.java deleted file mode 100644 index 28cdffac..00000000 --- a/src/installer/lombok/installer/netbeans/NetbeansFinder.java +++ /dev/null @@ -1,206 +0,0 @@ -/* - * Copyright © 2009 Reinier Zwitserloot and Roel Spilker. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -package lombok.installer.netbeans; - -import static java.util.Arrays.asList; - -import java.io.File; -import java.util.ArrayList; -import java.util.List; - -import lombok.installer.CorruptedIdeLocationException; -import lombok.installer.IdeFinder; -import lombok.installer.IdeLocation; - -import org.mangosdk.spi.ProviderFor; - -/** Utility class for doing various OS-specific operations related to finding Netbeans installations. */ -@ProviderFor(IdeFinder.class) -public class NetbeansFinder extends IdeFinder { - /** - * Returns a list of paths of Netbeans installations. - * - * Netbeans installations are found by checking for the existence of 'netbeans.exe' in the following locations: - * <ul> - * <li>X:\*Program Files*\*NetBeans*</li> - * <li>X:\*NetBeans*</li> - * </ul> - * - * Where 'X' is tried for all local disk drives, unless there's a problem calling fsutil, in which case only - * C: is tried. - */ - private void findNetbeansOnWindows(List<IdeLocation> locations, List<CorruptedIdeLocationException> problems) { - List<String> driveLetters = asList("C"); - try { - driveLetters = getDrivesOnWindows(); - } catch (Throwable ignore) { - ignore.printStackTrace(); - } - - //Various try/catch/ignore statements are in this for loop. Weird conditions on the disk can cause exceptions, - //such as an unformatted drive causing a NullPointerException on listFiles. Best action is almost invariably to just - //continue onwards. - for (String letter : driveLetters) { - try { - File f = new File(letter + ":\\"); - for (File dir : f.listFiles()) { - if (!dir.isDirectory()) continue; - try { - if (dir.getName().toLowerCase().contains("netbeans")) { - String netbeansLocation = findNetbeansOnWindows1(dir); - if (netbeansLocation != null) { - try { - IdeLocation newLocation = NetbeansLocationProvider.create0(netbeansLocation); - if (newLocation != null) locations.add(newLocation); - } catch (CorruptedIdeLocationException e) { - problems.add(e); - } - } - } - } catch (Exception ignore) {} - - try { - if (dir.getName().toLowerCase().contains("program files")) { - for (File dir2 : dir.listFiles()) { - if (!dir2.isDirectory()) continue; - if (dir2.getName().toLowerCase().contains("netbeans")) { - String netbeansLocation = findNetbeansOnWindows1(dir2); - if (netbeansLocation != null) { - try { - IdeLocation newLocation = NetbeansLocationProvider.create0(netbeansLocation); - if (newLocation != null) locations.add(newLocation); - } catch (CorruptedIdeLocationException e) { - problems.add(e); - } - } - } - } - } - } catch (Exception ignore) {} - } - } catch (Exception ignore) {} - } - } - - /** Checks if the provided directory contains 'netbeans.exe', and if so, returns the directory, otherwise null. */ - private String findNetbeansOnWindows1(File dir) { - if (new File(dir, "bin/netbeans.exe").isFile()) return dir.getAbsolutePath(); - return null; - } - - /** - * Calls the OS-dependent 'find Netbeans' routine. If the local OS doesn't have a routine written for it, - * null is returned. - * - * @param locations - * List of valid netbeans locations - provide an empty list; this - * method will fill it. - * @param problems - * List of netbeans locations that seem to contain half-baked - * netbeanses that can't be installed. Provide an empty list; this - * method will fill it. - */ - @Override - public void findIdes(List<IdeLocation> locations, List<CorruptedIdeLocationException> problems) { - switch (getOS()) { - case WINDOWS: - findNetbeansOnWindows(locations, problems); - break; - case MAC_OS_X: - findNetbeansOnMac(locations, problems); - break; - default: - case UNIX: - findNetbeansOnUnix(locations, problems); - break; - } - } - - /** Scans a couple of likely locations on linux. */ - private void findNetbeansOnUnix(List<IdeLocation> locations, List<CorruptedIdeLocationException> problems) { - List<String> guesses = new ArrayList<String>(); - - File d; - - d = new File("/usr/bin/netbeans"); - if (d.exists()) guesses.add(d.getPath()); - d = new File("/usr/local/bin/netbeans"); - if (d.exists()) guesses.add(d.getPath()); - d = new File(System.getProperty("user.home", "."), "bin/netbeans"); - if (d.exists()) guesses.add(d.getPath()); - - findNetbeansInSubDir("/usr/local/share", guesses); - findNetbeansInSubDir("/usr/local", guesses); - findNetbeansInSubDir("/usr/share", guesses); - findNetbeansInSubDir(System.getProperty("user.home", "."), guesses); - - for (String guess : guesses) { - try { - IdeLocation newLocation = NetbeansLocationProvider.create0(guess); - if (newLocation != null) locations.add(newLocation); - } catch (CorruptedIdeLocationException e) { - problems.add(e); - } - } - } - - private static void findNetbeansInSubDir(String dir, List<String> guesses) { - File d = new File(dir); - if (!d.isDirectory()) return; - for (File f : d.listFiles()) { - if (f.isDirectory() && f.getName().toLowerCase().contains("netbeans")) { - File possible = new File(f, "bin/netbeans"); - if (possible.exists()) guesses.add(possible.getAbsolutePath()); - } - } - } - - /** - * Scans /Applications for any folder named 'Eclipse' - */ - private static void findNetbeansOnMac(List<IdeLocation> locations, List<CorruptedIdeLocationException> problems) { - for (File dir : new File("/Applications").listFiles()) { - if (!dir.isDirectory()) continue; - if (dir.getName().toLowerCase().startsWith("netbeans") && dir.getName().toLowerCase().endsWith(".app")) { - try { - IdeLocation newLocation = NetbeansLocationProvider.create0(dir.getAbsolutePath()); - if (newLocation != null) locations.add(newLocation); - } catch (CorruptedIdeLocationException e) { - problems.add(e); - } - } - if (dir.getName().toLowerCase().contains("netbeans")) { - for (File dir2 : dir.listFiles()) { - if (!dir2.isDirectory()) continue; - if (dir2.getName().toLowerCase().startsWith("netbeans") && dir2.getName().toLowerCase().endsWith(".app")) { - try { - IdeLocation newLocation = NetbeansLocationProvider.create0(dir2.getAbsolutePath()); - if (newLocation != null) locations.add(newLocation); - } catch (CorruptedIdeLocationException e) { - problems.add(e); - } - } - } - } - } - } -} diff --git a/src/installer/lombok/installer/netbeans/NetbeansLocation.java b/src/installer/lombok/installer/netbeans/NetbeansLocation.java deleted file mode 100644 index 6db57207..00000000 --- a/src/installer/lombok/installer/netbeans/NetbeansLocation.java +++ /dev/null @@ -1,410 +0,0 @@ -/* - * Copyright © 2009-2010 Reinier Zwitserloot and Roel Spilker. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -package lombok.installer.netbeans; - -import java.io.BufferedReader; -import java.io.File; -import java.io.FileInputStream; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.net.URL; -import java.util.ArrayList; -import java.util.List; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -import lombok.installer.CorruptedIdeLocationException; -import lombok.installer.IdeFinder; -import lombok.installer.IdeLocation; -import lombok.installer.InstallException; -import lombok.installer.Installer; -import lombok.installer.UninstallException; - -public class NetbeansLocation extends IdeLocation { - private final String name; - private final File netbeansConfPath; - private final String version; - private final int versionFirst, versionSecond; - private final boolean hasLombok; - - private static final String OS_NEWLINE = IdeFinder.getOS().getLineEnding(); - - NetbeansLocation(String nameOfLocation, File pathToNetbeansConf) throws CorruptedIdeLocationException { - this.name = nameOfLocation; - this.netbeansConfPath = pathToNetbeansConf; - try { - this.hasLombok = checkForLombok(netbeansConfPath); - } catch (IOException e) { - throw new CorruptedIdeLocationException( - "I can't read the configuration file of the Netbeans installed at " + name + "\n" + - "You may need to run this installer with root privileges if you want to modify that Netbeans.", "netbeans", e); - } - this.version = findNetbeansVersion(netbeansConfPath); - int first, second; - String[] vs = version.split("\\."); - try { - first = Integer.parseInt(vs[0]); - } catch (Exception e) { - first = 0; - } - try { - second = Integer.parseInt(vs[1]); - } catch (Exception e) { - second = 0; - } - this.versionFirst = first; - this.versionSecond = second; - } - - public boolean versionIsPre68() { - return versionFirst < 6 || (versionFirst == 6 && versionSecond < 8); - } - - public boolean versionIs68() { - return versionFirst == 6 && versionSecond == 8; - } - - public boolean versionIsPost68() { - return versionFirst > 6 || (versionFirst == 6 && versionSecond > 8); - } - - @Override public int hashCode() { - return netbeansConfPath.hashCode(); - } - - @Override public boolean equals(Object o) { - if (!(o instanceof NetbeansLocation)) return false; - return ((NetbeansLocation)o).netbeansConfPath.equals(netbeansConfPath); - } - - /** - * Returns the name of this location; generally the path to the netbeans executable. - */ - @Override - public String getName() { - return name; - } - - /** - * @return true if the Netbeans installation has been instrumented with lombok. - */ - @Override - public boolean hasLombok() { - return hasLombok; - } - - private final String ID_CHARS = "(?:\\\\.|[^\"\\\\])*"; - private final Pattern JAVA_AGENT_LINE_MATCHER = Pattern.compile( - "^\\s*netbeans_default_options\\s*=\\s*\"\\s*" + ID_CHARS + "(?<=[ \"])(-J-javaagent:\\\\\".*lombok.*\\.jar\\\\\")(?=[ \"])" + ID_CHARS +"\\s*\"\\s*(?:#.*)?$", Pattern.CASE_INSENSITIVE); - - private final Pattern OPTIONS_LINE_MATCHER = Pattern.compile( - "^\\s*netbeans_default_options\\s*=\\s*\"\\s*" + ID_CHARS + "\\s*(\")\\s*(?:#.*)?$", Pattern.CASE_INSENSITIVE); - - private String findNetbeansVersion(File iniFile) { - String forcedVersion = System.getProperty("force.netbeans.version", null); - if (forcedVersion != null) return forcedVersion; - - try { - for (File child : iniFile.getParentFile().getParentFile().listFiles()) { - if (!child.isDirectory()) continue; - String name = child.getName(); - if (name == null || !name.startsWith("nb")) continue; - String version = name.substring(2); - File versionFile = new File(child, "VERSION.txt"); - if (versionFile.exists() && versionFile.canRead() && !versionFile.isDirectory()) { - try { - version = readVersionFile(versionFile); - } catch (IOException e) { - // Intentional Fallthrough - } - } - if (version != null && version.length() > 0) { - return version; - } - } - } catch (NullPointerException e) { - // Intentional Fallthrough - } - - return "UNKNOWN"; - } - - private static String readVersionFile(File file) throws IOException { - FileInputStream fis = new FileInputStream(file); - StringBuilder version = new StringBuilder(); - try { - BufferedReader br = new BufferedReader(new InputStreamReader(fis, "UTF-8")); - for (String line = br.readLine(); line != null; line = br.readLine()) { - if (line.startsWith("#")) continue; - if (version.length() > 0) version.append(" "); - version.append(line); - } - return version.toString(); - } finally { - fis.close(); - } - } - - private boolean checkForLombok(File iniFile) throws IOException { - if (!iniFile.exists()) return false; - FileInputStream fis = new FileInputStream(iniFile); - try { - BufferedReader br = new BufferedReader(new InputStreamReader(fis)); - String line; - while ((line = br.readLine()) != null) { - if (JAVA_AGENT_LINE_MATCHER.matcher(line.trim()).matches()) return true; - } - - return false; - } finally { - fis.close(); - } - } - - /** - * Uninstalls lombok from this location. - * It's a no-op if lombok wasn't there in the first place, - * and it will remove a half-succeeded lombok installation as well. - * - * @throws UninstallException - * If there's an obvious I/O problem that is preventing - * installation. bugs in the uninstall code will probably throw - * other exceptions; this is intentional. - */ - @Override - public void uninstall() throws UninstallException { - final List<File> lombokJarsForWhichCantDeleteSelf = new ArrayList<File>(); - File dir = netbeansConfPath.getParentFile(); - - StringBuilder newContents = new StringBuilder(); - if (netbeansConfPath.exists()) { - try { - FileInputStream fis = new FileInputStream(netbeansConfPath); - try { - BufferedReader br = new BufferedReader(new InputStreamReader(fis)); - String line; - while ((line = br.readLine()) != null) { - Matcher m = JAVA_AGENT_LINE_MATCHER.matcher(line); - if (m.matches()) { - newContents.append(line.substring(0, m.start(1)) + line.substring(m.end(1))); - } else { - newContents.append(line); - } - newContents.append(OS_NEWLINE); - } - } finally { - fis.close(); - } - - FileOutputStream fos = new FileOutputStream(netbeansConfPath); - try { - fos.write(newContents.toString().getBytes()); - } finally { - fos.close(); - } - } catch (IOException e) { - throw new UninstallException("Cannot uninstall lombok from " + name + generateWriteErrorMessage(), e); - } - } - - File lombokJar = new File(dir, "lombok.jar"); - if (lombokJar.exists()) { - if (!lombokJar.delete()) { - if (IdeFinder.getOS() == IdeFinder.OS.WINDOWS && Installer.isSelf(lombokJar.getAbsolutePath())) { - lombokJarsForWhichCantDeleteSelf.add(lombokJar); - } else { - throw new UninstallException( - "Can't delete " + lombokJar.getAbsolutePath() + generateWriteErrorMessage(), null); - } - } - } - - if (!lombokJarsForWhichCantDeleteSelf.isEmpty()) { - throw new UninstallException(true, - "lombok.jar cannot delete itself on windows.\nHowever, lombok has been uncoupled from your netbeans.\n" + - "You can safely delete this jar file. You can find it at:\n" + - lombokJarsForWhichCantDeleteSelf.get(0).getAbsolutePath(), null); - } - } - - private static String generateWriteErrorMessage() { - String osSpecificError; - - switch (IdeFinder.getOS()) { - default: - case MAC_OS_X: - case UNIX: - osSpecificError = ":\nStart terminal, go to the directory with lombok.jar, and run: sudo java -jar lombok.jar"; - break; - case WINDOWS: - osSpecificError = ":\nStart a new cmd (dos box) with admin privileges, go to the directory with lombok.jar, and run: java -jar lombok.jar"; - break; - } - - return ", probably because this installer does not have the access rights.\n" + - "Try re-running the installer with administrative privileges" + osSpecificError; - } - - /** - * Install lombok into the Netbeans at this location. - * If lombok is already there, it is overwritten neatly (upgrade mode). - * - * @throws InstallException - * If there's an obvious I/O problem that is preventing - * installation. bugs in the install code will probably throw - * other exceptions; this is intentional. - */ - @Override - public String install() throws InstallException { - if ("UNKNOWN".equals(version)) { - throw new InstallException(String.format( - "Can't determine version of Netbeans installed at:\n%s\n\n" + - "Your Netbeans version determines what this installer does:\n" + - "Pre 6.8: Lombok is not compatible with netbeans pre 6.8, and thus won't install.\n" + - "6.8: Lombok will install itself into Netbeans.\n" + - "6.9 and later: NetBeans supports lombok natively. This installer will explain how to enable it.\n\n" + - "If you know your netbeans version, you can force this by starting the installer with:\n" + - "java -Dforce.netbeans.version=6.8 -jar lombok.jar", this.getName()), null); - } - - if (versionIsPre68()) { - throw new InstallException(String.format( - "Lombok is not compatible with Netbeans versions prior to 6.8.\n" + - "Therefore, lombok will not be installed at:\n%s\nbecause it is version: %s", - this.getName(), version), null); - } - if (versionIsPost68()) { - try { - uninstall(); - } catch (Exception e) { - // Well, we tried. Lombok on 6.9 doesn't do anything, so we'll leave it then. - } - - throw new InstallException(true, String.format( - "Starting with NetBeans 6.9, lombok is natively supported and does not need to be installed at:\n%s\n\n" + - "To use lombok.jar in your netbeans project:\n" + - "1. Add lombok.jar to your project (Go to Project Properties, 'Libraries' page, and add lombok.jar in the 'Compile' tab).\n" + - "2. Enable Annotation Processors (Go to Project Properties, 'Build/Compiling' page, and check 'Enable Annotation Processing in Editor').\n" + - "\n" + - "NB: In the first release of NetBeans 6.9, due to a netbeans bug, maven-based projects don't run annotation processors. This \n" + - "issue should be fixed by the great folks at NetBeans soon.", this.getName()), null); - } - - boolean installSucceeded = false; - StringBuilder newContents = new StringBuilder(); - - File lombokJar = new File(netbeansConfPath.getParentFile(), "lombok.jar"); - - /* No need to copy lombok.jar to itself, obviously. On windows this would generate an error so we check for this. */ - if (!Installer.isSelf(lombokJar.getAbsolutePath())) { - File ourJar = findOurJar(); - byte[] b = new byte[524288]; - boolean readSucceeded = true; - try { - FileOutputStream out = new FileOutputStream(lombokJar); - try { - readSucceeded = false; - InputStream in = new FileInputStream(ourJar); - try { - while (true) { - int r = in.read(b); - if (r == -1) break; - if (r > 0) readSucceeded = true; - out.write(b, 0, r); - } - } finally { - in.close(); - } - } finally { - out.close(); - } - } catch (IOException e) { - try { - lombokJar.delete(); - } catch (Throwable ignore) { /* Nothing we can do about that. */ } - if (!readSucceeded) throw new InstallException( - "I can't read my own jar file. I think you've found a bug in this installer!\nI suggest you restart it " + - "and use the 'what do I do' link, to manually install lombok. Also, tell us about this at:\n" + - "http://groups.google.com/group/project-lombok - Thanks!", e); - throw new InstallException("I can't write to your Netbeans directory at " + name + generateWriteErrorMessage(), e); - } - } - - try { - FileInputStream fis = new FileInputStream(netbeansConfPath); - try { - BufferedReader br = new BufferedReader(new InputStreamReader(fis)); - String line; - while ((line = br.readLine()) != null) { - Matcher m = JAVA_AGENT_LINE_MATCHER.matcher(line); - if (m.matches()) { - newContents.append(line.substring(0, m.start(1))); - newContents.append("-J-javaagent:\\\"" + canonical(lombokJar) + "\\\""); - newContents.append(line.substring(m.end(1))); - newContents.append(OS_NEWLINE); - continue; - } - - m = OPTIONS_LINE_MATCHER.matcher(line); - if (m.matches()) { - newContents.append(line.substring(0, m.start(1))); - newContents.append(" ").append("-J-javaagent:\\\"" + canonical(lombokJar) +"\\\"\""); - newContents.append(line.substring(m.end(1))).append(OS_NEWLINE); - continue; - } - - newContents.append(line).append(OS_NEWLINE); - } - } finally { - fis.close(); - } - - FileOutputStream fos = new FileOutputStream(netbeansConfPath); - try { - fos.write(newContents.toString().getBytes()); - } finally { - fos.close(); - } - installSucceeded = true; - } catch (IOException e) { - throw new InstallException("Cannot install lombok at " + name + generateWriteErrorMessage(), e); - } finally { - if (!installSucceeded) try { - lombokJar.delete(); - } catch (Throwable ignore) {} - } - - if (!installSucceeded) { - throw new InstallException("I can't find the netbeans.conf file. Is this a real Netbeans installation?", null); - } - - return "If you start netbeans with custom parameters, you'll need to add:<br>" + - "<code>-J-javaagent:\\\"" + canonical(lombokJar) + "\\\"</code><br>" + - "as parameter as well."; - } - - @Override public URL getIdeIcon() { - return NetbeansLocation.class.getResource("netbeans.png"); - } -} diff --git a/src/installer/lombok/installer/netbeans/NetbeansLocationProvider.java b/src/installer/lombok/installer/netbeans/NetbeansLocationProvider.java deleted file mode 100644 index 68a00756..00000000 --- a/src/installer/lombok/installer/netbeans/NetbeansLocationProvider.java +++ /dev/null @@ -1,125 +0,0 @@ -/* - * Copyright © 2009 Reinier Zwitserloot and Roel Spilker. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -package lombok.installer.netbeans; - -import static lombok.installer.IdeLocation.canonical; - -import java.io.File; -import java.io.IOException; -import java.util.regex.Pattern; - -import lombok.installer.CorruptedIdeLocationException; -import lombok.installer.IdeLocation; -import lombok.installer.IdeLocationProvider; -import lombok.installer.IdeFinder.OS; - -import org.mangosdk.spi.ProviderFor; - -@ProviderFor(IdeLocationProvider.class) -public class NetbeansLocationProvider implements IdeLocationProvider { - - @Override public IdeLocation create(String path) throws CorruptedIdeLocationException { - return create0(path); - } - - /** - * Create a new NetbeansLocation by pointing at either the directory containing the executable, or the executable itself, - * or a netbeans.conf file. - * - * @throws NotAnIdeLocationException - * If this isn't an Eclipse executable or a directory with an - * Eclipse executable. - */ - static NetbeansLocation create0(String path) throws CorruptedIdeLocationException { - if (path == null) throw new NullPointerException("path"); - File p = new File(path); - - if (!p.exists()) return null; - if (p.isDirectory()) { - String name = p.getName().toLowerCase(); - if (name.endsWith(".app") && name.startsWith("netbeans")) { - File conf = new File(p, "Contents/Resources/NetBeans/etc/netbeans.conf"); - if (conf.exists()) return new NetbeansLocation(path, conf); - } - - File f = new File(p, "bin/netbeans"); - if (f.isFile()) return findNetbeansConfFromExe(f, 0); - f = new File(p, "bin/netbeans.exe"); - if (f.isFile()) return findNetbeansConfFromExe(f, 0); - f = new File(p, "etc/netbeans.conf"); - if (f.isFile()) return new NetbeansLocation(canonical(f.getParentFile().getParentFile()), f); - } - - if (p.isFile()) { - if (p.getName().equalsIgnoreCase("netbeans.conf")) { - return new NetbeansLocation(canonical(p.getParentFile().getParentFile()), p); - } - - if (p.getName().equalsIgnoreCase("netbeans") || p.getName().equalsIgnoreCase("netbeans.exe")) { - return findNetbeansConfFromExe(p, 0); - } - } - - return null; - } - - private static NetbeansLocation findNetbeansConfFromExe(File exePath, int loopCounter) throws CorruptedIdeLocationException { - /* Try looking for netbeans.conf as etc/netbeans.conf */ { - File conf = new File(exePath.getParentFile(), "etc/netbeans.conf"); - if (conf.isFile()) return new NetbeansLocation(canonical(exePath), conf); - } - - /* Try looking for netbeans.conf as ../etc/netbeans.conf */ { - File conf = new File(exePath.getParentFile().getParentFile(), "etc/netbeans.conf"); - if (conf.isFile()) return new NetbeansLocation(canonical(exePath), conf); - } - - /* If executable is a soft link, follow it and retry. */ { - if (loopCounter < 50) { - try { - String oPath = exePath.getAbsolutePath(); - String nPath = exePath.getCanonicalPath(); - if (!oPath.equals(nPath)) try { - return findNetbeansConfFromExe(new File(nPath), loopCounter + 1); - } catch (CorruptedIdeLocationException ignore) { - // Unlinking didn't help find a netbeans, so continue. - } - } catch (IOException ignore) { /* okay, that didn't work, assume it isn't a soft link then. */ } - } - } - - /* If we get this far, we lose. */ - return null; - } - - @Override public Pattern getLocationSelectors(OS os) { - switch (os) { - case MAC_OS_X: - return Pattern.compile("^(netbeans|netbeans\\.conf|NetBeans.*\\.app)$", Pattern.CASE_INSENSITIVE); - case WINDOWS: - return Pattern.compile("^(netbeans\\.exe|netbeans\\.conf)$", Pattern.CASE_INSENSITIVE); - default: - case UNIX: - return Pattern.compile("^(netbeans|netbeans\\.conf)$", Pattern.CASE_INSENSITIVE); - } - } -} diff --git a/src/installer/lombok/installer/netbeans/netbeans.png b/src/installer/lombok/installer/netbeans/netbeans.png Binary files differdeleted file mode 100644 index 43fe63cc..00000000 --- a/src/installer/lombok/installer/netbeans/netbeans.png +++ /dev/null |