001 /*
002 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
003 *
004 * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
005 *
006 * The contents of this file are subject to the terms of either the GNU
007 * General Public License Version 2 only ("GPL") or the Common
008 * Development and Distribution License("CDDL") (collectively, the
009 * "License"). You may not use this file except in compliance with the
010 * License. You can obtain a copy of the License at
011 * http://www.netbeans.org/cddl-gplv2.html
012 * or nbbuild/licenses/CDDL-GPL-2-CP. See the License for the
013 * specific language governing permissions and limitations under the
014 * License. When distributing the software, include this License Header
015 * Notice in each file and include the License file at
016 * nbbuild/licenses/CDDL-GPL-2-CP. Sun designates this
017 * particular file as subject to the "Classpath" exception as provided
018 * by Sun in the GPL Version 2 section of the License file that
019 * accompanied this code. If applicable, add the following below the
020 * License Header, with the fields enclosed by brackets [] replaced by
021 * your own identifying information:
022 * "Portions Copyrighted [year] [name of copyright owner]"
023 *
024 * Contributor(s):
025 *
026 * The Original Software is NetBeans. The Initial Developer of the Original
027 * Software is Sun Microsystems, Inc. Portions Copyright 1997-2006 Sun
028 * Microsystems, Inc. All Rights Reserved.
029 *
030 * If you wish your version of this file to be governed by only the CDDL
031 * or only the GPL Version 2, indicate your decision by adding
032 * "[Contributor] elects to include this software in this distribution
033 * under the [CDDL or GPL Version 2] license." If you do not indicate a
034 * single choice of license, a recipient has the option to distribute
035 * your version of this file under either the CDDL, the GPL Version 2 or
036 * to extend the choice of license to its licensees as provided above.
037 * However, if you add GPL Version 2 code and therefore, elected the GPL
038 * Version 2 license, then the option applies only if the new code is
039 * made subject to such option by the copyright holder.
040 */
041
042 package org.netbeans.modules.j2ee.deployment.profiler.api;
043
044 import java.util.Arrays;
045 import java.util.List;
046 import org.netbeans.api.java.platform.JavaPlatform;
047 import org.openide.filesystems.FileObject;
048 import org.openide.filesystems.FileUtil;
049
050 /**
051 * Settings that will be used for profiled server startup.
052 *
053 * @author sherold
054 */
055 public final class ProfilerServerSettings {
056
057 private JavaPlatform javaPlatform;
058 private String[] jvmArgs;
059 private String[] env;
060
061 /**
062 * Creates new ProfilerServerSettings.
063 *
064 * @param javaPlatform Java platform used to run profiled server.
065 * @param jvmArgs array of extra JVM arguments used for starting profiled
066 * server.
067 * @param env array of <code>name=value</code> pairs of extra variables
068 * to be set for profiled server environment.
069 */
070 public ProfilerServerSettings(JavaPlatform javaPlatform,
071 String[] jvmArgs, String[] env) {
072 if (javaPlatform == null) {
073 throw new NullPointerException(
074 "The javaPlatform argument must not be null."); // NOI18N
075 }
076 if (jvmArgs == null) {
077 throw new NullPointerException(
078 "The jvmArgs argument must not be null."); // NOI18N
079 }
080 if (env == null) {
081 throw new NullPointerException(
082 "The env argument must not be null."); // NOI18N
083 }
084 this .javaPlatform = javaPlatform;
085 this .jvmArgs = jvmArgs;
086 this .env = env;
087 }
088
089 /**
090 * Gets the Java platform that will be used for starting the profiled server.
091 *
092 * @return Java platform that will be used for starting the profiled server.
093 */
094 public JavaPlatform getJavaPlatform() {
095 return javaPlatform;
096 }
097
098 /**
099 * Gets the extra arguments that will be used for starting the profiled server.
100 *
101 * @return array of extra arguments that will be used for starting the profiled
102 * server
103 */
104 public String[] getJvmArgs() {
105 return jvmArgs;
106 }
107
108 /**
109 * Gets extra variables that will be set for profiled server environment.
110 *
111 * @return array of <code>name=value</code> pairs describing extra variables
112 * that will be set for profiled server environment
113 */
114 public String[] getEnv() {
115 return env;
116 }
117
118 /**
119 * Tests this ProfilerServerSettings for equality with the given object.
120 *
121 * @param o The object to be compared with this ProfilerServerSettings.
122 *
123 * @return <code>true</code> if the other ProfilerServerSettings instance
124 * defines the same settings; false otherwise.
125 */
126 public boolean equals(Object o) {
127 if (o == this ) {
128 return true;
129 }
130 if (!(o instanceof ProfilerServerSettings)) {
131 return false;
132 }
133 ProfilerServerSettings other = (ProfilerServerSettings) o;
134 FileObject javaHome = (FileObject) javaPlatform
135 .getInstallFolders().iterator().next();
136 FileObject otherJavaHome = (FileObject) other.javaPlatform
137 .getInstallFolders().iterator().next();
138 if (!FileUtil.toFile(javaHome).equals(
139 FileUtil.toFile(otherJavaHome))) {
140 return false;
141 }
142 if (jvmArgs.length != other.jvmArgs.length) {
143 return false;
144 }
145 List jvmArgsList = Arrays.asList(jvmArgs);
146 for (int i = 0; i < other.jvmArgs.length; i++) {
147 if (!jvmArgsList.contains(other.jvmArgs[i])) {
148 return false;
149 }
150 }
151 if (env.length != other.env.length) {
152 return false;
153 }
154 List envList = Arrays.asList(env);
155 for (int i = 0; i < other.env.length; i++) {
156 if (!envList.contains(other.env[i])) {
157 return false;
158 }
159 }
160 return true;
161 }
162
163 public int hashCode() {
164 int result = 17;
165 FileObject javaHome = (FileObject) javaPlatform
166 .getInstallFolders().iterator().next();
167 result = 37 * result + FileUtil.toFile(javaHome).hashCode();
168 String[] jvmArgsTmp = (String[]) jvmArgs.clone();
169 Arrays.sort(jvmArgsTmp);
170 for (int i = 0; i < jvmArgsTmp.length; i++) {
171 result = 37 * result + jvmArgsTmp[i].hashCode();
172 }
173 String[] envTmp = (String[]) env.clone();
174 Arrays.sort(envTmp);
175 for (int i = 0; i < envTmp.length; i++) {
176 result = 37 * result + envTmp[i].hashCode();
177 }
178 return result;
179 }
180
181 public String toString() {
182 StringBuffer buffer = new StringBuffer();
183 buffer.append("ProfilerServerSettings [\n"); // NOI18N
184 buffer.append(" javaPlatform: "
185 + javaPlatform.getDisplayName() + "\n"); // NOI18N
186 buffer.append(" jvmarg: "); // NOI18N // NOI18N
187 for (int i = 0; i < jvmArgs.length; i++) {
188 buffer.append(jvmArgs[i] + " "); // NOI18N
189 }
190 buffer.append("\n"); // NOI18N
191 buffer.append(" env: "); // NOI18N
192 for (int i = 0; i < env.length; i++) {
193 buffer.append(env[i] + " "); // NOI18N
194 }
195 buffer.append("]"); // NOI18N
196 return buffer.toString();
197 }
198 }
|