Java tutorial
/* * Copyright 2009 Max Ishchenko * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package net.ishchenko.idea.nginx.platform; import com.intellij.openapi.util.text.StringUtil; import com.intellij.openapi.vfs.VirtualFile; import net.ishchenko.idea.nginx.NginxBundle; import org.apache.commons.exec.CommandLine; import org.apache.commons.exec.DefaultExecutor; import org.apache.commons.exec.Executor; import org.apache.commons.exec.PumpStreamHandler; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.util.regex.Matcher; import java.util.regex.Pattern; /** * Created by IntelliJ IDEA. * User: Max * Date: 01.08.2009 * Time: 0:22:46 */ public class NginxCompileParametersExtractor { /** * Runs file with -V argument and matches the output against OUTPUT_PATTERN. * @param from executable to be run with -V command line argument * @return Parameters parsed out from process output * @throws PlatformDependentTools.ThisIsNotNginxExecutableException if file could not be run, or * output would not match against expected pattern */ public static NginxCompileParameters extract(VirtualFile from) throws PlatformDependentTools.ThisIsNotNginxExecutableException { NginxCompileParameters result = new NginxCompileParameters(); Executor executor = new DefaultExecutor(); ByteArrayOutputStream os = new ByteArrayOutputStream(); try { executor.setStreamHandler(new PumpStreamHandler(os, os)); executor.execute(CommandLine.parse(from.getPath() + " -V")); } catch (IOException e) { throw new PlatformDependentTools.ThisIsNotNginxExecutableException(e); } String output = os.toString(); Matcher versionMatcher = Pattern.compile("nginx version: nginx/([\\d\\.]+)").matcher(output); Matcher configureArgumentsMatcher = Pattern.compile("configure arguments: (.*)").matcher(output); if (versionMatcher.find() && configureArgumentsMatcher.find()) { String version = versionMatcher.group(1); String params = configureArgumentsMatcher.group(1); result.setVersion(version); Iterable<String> namevalues = StringUtil.split(params, " "); for (String namevalue : namevalues) { int eqPosition = namevalue.indexOf('='); if (eqPosition == -1) { handleFlag(result, namevalue); } else { handleNameValue(result, namevalue.substring(0, eqPosition), namevalue.substring(eqPosition + 1)); } } } else { throw new PlatformDependentTools.ThisIsNotNginxExecutableException( NginxBundle.message("run.configuration.outputwontmatch")); } return result; } private static void handleNameValue(NginxCompileParameters result, String name, String value) { if (name.equals("--conf-path")) { result.setConfigurationPath(value); } else if (name.equals("--pid-path")) { result.setPidPath(value); } else if (name.equals("--prefix")) { result.setPrefix(value); } else if (name.equals("--http-log-path")) { result.setHttpLogPath(value); } else if (name.equals("--error-log-path")) { result.setErrorLogPath(value); } } private static void handleFlag(NginxCompileParameters result, String flag) { //no flags to handle at the moment } }