PageRenderTime 30ms CodeModel.GetById 22ms RepoModel.GetById 0ms app.codeStats 0ms

/projects/netbeans-7.3/dlight.remote.impl/src/org/netbeans/modules/remote/impl/FindBasedExecutablesCompletionProviderFactory.java

https://gitlab.com/essere.lab.public/qualitas.class-corpus
Java | 157 lines | 83 code | 23 blank | 51 comment | 9 complexity | 639c58e46c26a9fe8d3ca8741ca21100 MD5 | raw file
  1. /*
  2. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
  3. *
  4. * Copyright 2010 Oracle and/or its affiliates. All rights reserved.
  5. *
  6. * Oracle and Java are registered trademarks of Oracle and/or its affiliates.
  7. * Other names may be trademarks of their respective owners.
  8. *
  9. * The contents of this file are subject to the terms of either the GNU
  10. * General Public License Version 2 only ("GPL") or the Common
  11. * Development and Distribution License("CDDL") (collectively, the
  12. * "License"). You may not use this file except in compliance with the
  13. * License. You can obtain a copy of the License at
  14. * http://www.netbeans.org/cddl-gplv2.html
  15. * or nbbuild/licenses/CDDL-GPL-2-CP. See the License for the
  16. * specific language governing permissions and limitations under the
  17. * License. When distributing the software, include this License Header
  18. * Notice in each file and include the License file at
  19. * nbbuild/licenses/CDDL-GPL-2-CP. Oracle designates this
  20. * particular file as subject to the "Classpath" exception as provided
  21. * by Oracle in the GPL Version 2 section of the License file that
  22. * accompanied this code. If applicable, add the following below the
  23. * License Header, with the fields enclosed by brackets [] replaced by
  24. * your own identifying information:
  25. * "Portions Copyrighted [year] [name of copyright owner]"
  26. *
  27. * If you wish your version of this file to be governed by only the CDDL
  28. * or only the GPL Version 2, indicate your decision by adding
  29. * "[Contributor] elects to include this software in this distribution
  30. * under the [CDDL or GPL Version 2] license." If you do not indicate a
  31. * single choice of license, a recipient has the option to distribute
  32. * your version of this file under either the CDDL, the GPL Version 2 or
  33. * to extend the choice of license to its licensees as provided above.
  34. * However, if you add GPL Version 2 code and therefore, elected the GPL
  35. * Version 2 license, then the option applies only if the new code is
  36. * made subject to such option by the copyright holder.
  37. *
  38. * Contributor(s):
  39. *
  40. * Portions Copyrighted 2010 Sun Microsystems, Inc.
  41. */
  42. package org.netbeans.modules.remote.impl;
  43. import org.netbeans.modules.remote.api.ui.AutocompletionProvider;
  44. import org.netbeans.modules.remote.spi.AutocompletionProviderFactory;
  45. import org.netbeans.modules.remote.util.ExecSupport;
  46. import org.netbeans.modules.remote.util.ExecSupport.Status;
  47. import java.io.IOException;
  48. import java.util.ArrayList;
  49. import java.util.Collections;
  50. import java.util.List;
  51. import java.util.TreeSet;
  52. import java.util.concurrent.Callable;
  53. import java.util.concurrent.FutureTask;
  54. import org.netbeans.modules.nativeexecution.api.ExecutionEnvironment;
  55. import org.netbeans.modules.nativeexecution.api.NativeProcessBuilder;
  56. import org.netbeans.modules.nativeexecution.api.util.ConnectionManager;
  57. import org.openide.util.Exceptions;
  58. import org.openide.util.RequestProcessor;
  59. /**
  60. *
  61. * @author ak119685
  62. */
  63. //@ServiceProvider(service = AutocompletionProviderFactory.class)
  64. // This provider is not, actualy, very useful, as it doesn't give the full path
  65. // to the executable at the end... Plus in dialogs it is not a common practice
  66. // to have completion for executables, taken from PATH...
  67. //
  68. //@ServiceProvider(service = AutocompletionProviderFactory.class)
  69. public class FindBasedExecutablesCompletionProviderFactory implements AutocompletionProviderFactory {
  70. public AutocompletionProvider newInstance(ExecutionEnvironment env) {
  71. try {
  72. return new Provider(env);
  73. } catch (IOException ex) {
  74. Exceptions.printStackTrace(ex);
  75. }
  76. return null;
  77. }
  78. public boolean supports(ExecutionEnvironment env) {
  79. return ConnectionManager.getInstance().isConnectedTo(env);
  80. }
  81. private final static class Provider implements AutocompletionProvider {
  82. private String[] executables = null;
  83. private final FutureTask<String[]> fetchTask;
  84. private Provider(ExecutionEnvironment env) throws IOException {
  85. fetchTask = new FutureTask<String[]>(new Find(env));
  86. RequestProcessor.getDefault().post(fetchTask);
  87. }
  88. public List<String> autocomplete(String str) {
  89. if ("".equals(str)) { // NOI18N
  90. return Collections.<String>emptyList();
  91. }
  92. if (executables == null) {
  93. try {
  94. executables = fetchTask.get();
  95. } catch (Exception ex) {
  96. Exceptions.printStackTrace(ex);
  97. }
  98. }
  99. List<String> result = new ArrayList<String>();
  100. boolean found = false;
  101. for (String exec : executables) {
  102. if (exec.startsWith(str)) {
  103. result.add(exec);
  104. found = true;
  105. } else if (found) {
  106. break;
  107. }
  108. }
  109. return result;
  110. }
  111. private final class Find implements Callable<String[]> {
  112. private final ExecutionEnvironment env;
  113. private Find(ExecutionEnvironment env) {
  114. this.env = env;
  115. }
  116. public String[] call() throws Exception {
  117. TreeSet<String> result = new TreeSet<String>();
  118. try {
  119. NativeProcessBuilder npb = NativeProcessBuilder.newProcessBuilder(env);
  120. npb.setExecutable("/bin/sh").setArguments("-c", "find `echo $PATH|tr : ' '` -type f -perm -+x 2>/dev/null"); // NOI18N
  121. Status rc = ExecSupport.call(npb);
  122. for (String s : rc.output) {
  123. int idx = s.lastIndexOf('/') + 1;
  124. if (idx > 0) {
  125. result.add(s.substring(idx));
  126. }
  127. }
  128. } catch (Exception ex) {
  129. }
  130. return result.toArray(new String[0]);
  131. }
  132. }
  133. }
  134. }