/* * Copyright (c) 2007, 2011, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. Oracle designates this * particular file as subject to the "Classpath" exception as provided * by Oracle in the LICENSE file that accompanied this code. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License * version 2 for more details (a copy is included in the LICENSE file that * accompanied this code). * * You should have received a copy of the GNU General Public License version * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA * or visit www.oracle.com if you need additional information or have any * questions. */ package com.sun.tools.visualvm.application.type; import com.sun.tools.visualvm.application.Application; import com.sun.tools.visualvm.application.jvm.Jvm; import java.util.regex.Pattern; /** * Factory which recognizes JDeveloper 11g and 10g. * @author Tomas Hurka */ public class JDeveloperApplicationTypeFactory extends MainClassApplicationTypeFactory { private static final String MAIN_CLASS_12 = "oracle.ide.osgi.boot.JDeveloper"; // NOI18N private static final String MAIN_CLASS_11 = "oracle.ide.boot.Launcher"; // NOI18N private static final String MAIN_CLASS_10 = "oracle.ideimpl.Main"; // NOI18N private static final String IDE_CONF_12 = "\\-Dide.conf=\\S+jdev.conf"; // NOI18N private static final String IDE_CONF_11 = "-Dide.config_pathname="; // NOI18N private static final String IDE_PRODUCT_10 = "-Dide.product=oracle.jdeveloper"; // NOI18N private static final Pattern IDE_CONF_12_PATTERN = Pattern.compile(IDE_CONF_12); private String getJDeveloperVersion(Jvm jvm, String mainClass) { if (MAIN_CLASS_12.equals(mainClass)) { return "12c"; // NOI18N } if (MAIN_CLASS_11.equals(mainClass)) { return "11g"; // NOI18N } if (MAIN_CLASS_10.equals(mainClass)) { return "10g"; // NOI18N } if (mainClass == null || mainClass.length() == 0) { // there is no main class - detect native Windows launcher String args = jvm.getJvmArgs(); if (args != null) { if (args.contains(IDE_CONF_11)) { return "11g"; // NOI18N } if (args.contains(IDE_PRODUCT_10)) { return "10g"; // NOI18N } if (IDE_CONF_12_PATTERN.matcher(args).find()) { return "12c"; // NOI18N } } } return null; } /** * Detects JDeveloper IDE. It returns * {@link JDeveloperApplicationType} for JDeveloper 12c, 11g and 10g. * * @return {@link ApplicationType} subclass or <code>null</code> if * this application is not JDeveloper IDE */ public ApplicationType createApplicationTypeFor(Application app, Jvm jvm, String mainClass) { String version = getJDeveloperVersion(jvm,mainClass); if (version != null) { return new JDeveloperApplicationType(app,version); } return null; } }