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 General
007: * Public License Version 2 only ("GPL") or the Common Development and Distribution
008: * License("CDDL") (collectively, the "License"). You may not use this file except in
009: * compliance with the License. You can obtain a copy of the License at
010: * http://www.netbeans.org/cddl-gplv2.html or nbbuild/licenses/CDDL-GPL-2-CP. See the
011: * License for the specific language governing permissions and limitations under the
012: * License. When distributing the software, include this License Header Notice in
013: * each file and include the License file at nbbuild/licenses/CDDL-GPL-2-CP. Sun
014: * designates this particular file as subject to the "Classpath" exception as
015: * provided by Sun in the GPL Version 2 section of the License file that
016: * accompanied this code. If applicable, add the following below the License Header,
017: * with the fields enclosed by brackets [] replaced by your own identifying
018: * information: "Portions Copyrighted [year] [name of copyright owner]"
019: *
020: * Contributor(s):
021: *
022: * The Original Software is NetBeans. The Initial Developer of the Original Software
023: * is Sun Microsystems, Inc. Portions Copyright 1997-2007 Sun Microsystems, Inc. All
024: * Rights Reserved.
025: *
026: * If you wish your version of this file to be governed by only the CDDL or only the
027: * GPL Version 2, indicate your decision by adding "[Contributor] elects to include
028: * this software in this distribution under the [CDDL or GPL Version 2] license." If
029: * you do not indicate a single choice of license, a recipient has the option to
030: * distribute your version of this file under either the CDDL, the GPL Version 2 or
031: * to extend the choice of license to its licensees as provided above. However, if
032: * you add GPL Version 2 code and therefore, elected the GPL Version 2 license, then
033: * the option applies only if the new code is made subject to such option by the
034: * copyright holder.
035: */
036:
037: package org.netbeans.installer.utils.system.unix.shell;
038:
039: import java.io.File;
040: import java.io.IOException;
041: import java.util.LinkedList;
042: import java.util.List;
043: import org.netbeans.installer.utils.helper.EnvironmentScope;
044: import org.netbeans.installer.utils.helper.ErrorLevel;
045: import org.netbeans.installer.utils.FileUtils;
046: import org.netbeans.installer.utils.LogManager;
047: import org.netbeans.installer.utils.SystemUtils;
048:
049: /**
050: *
051: * @author Dmitry Lipin
052: */
053: public abstract class Shell {
054: protected String sp = " ";
055: protected String sg = "=";
056: protected String pr = "\"";
057: protected String SETENV = "setenv" + sp;
058: protected String EXPORT = "export ";
059: protected String SET = "set ";
060:
061: protected File getShellScript(EnvironmentScope scope) {
062: File file = null;
063: if (scope != null && EnvironmentScope.PROCESS != scope) {
064:
065: if (EnvironmentScope.ALL_USERS == scope) {
066: file = getSystemShellScript();
067: }
068:
069: if (EnvironmentScope.CURRENT_USER == scope || file == null) {
070: file = getUserShellScript();
071: }
072: }
073: LogManager.log(ErrorLevel.DEBUG,
074: "Used shell file for setting environment variable : "
075: + file);
076: return file;
077: }
078:
079: protected abstract String[] getSystemShellFileNames();
080:
081: protected abstract String[] getUserShellFileNames();
082:
083: public abstract boolean setVar(String name, String value,
084: EnvironmentScope scope) throws IOException;
085:
086: protected abstract String[] getAvailableNames();
087:
088: public boolean isCurrentShell(String name) {
089: String[] names = getAvailableNames();
090: boolean result = false;
091: if (names != null && name != null) {
092: for (String shname : names) {
093: if (shname.equals(name)) {
094: result = true;
095: break;
096: }
097: }
098: }
099: return result;
100: }
101:
102: protected File getUserShellScript() {
103: return getSh(getUserShellFileNames(), SystemUtils
104: .getUserHomeDirectory().getPath());
105: }
106:
107: protected File getSystemShellScript() {
108: return getSh(getSystemShellFileNames(), File.separator + "etc");
109:
110: }
111:
112: protected File getSh(String[] locations, String root) {
113: if (locations == null) {
114: return null;
115: }
116: File file = null;
117: File firstFile = null;
118: for (String loc : locations) {
119: if (loc != null) {
120: file = new File(!loc.startsWith(File.separator) ? root
121: + File.separator + loc : loc);
122: if (firstFile == null) {
123: firstFile = file;
124: }
125:
126: if (file.exists()) {
127: return file;
128: }
129: }
130: }
131: return firstFile;
132:
133: }
134:
135: protected int getSetEnvIndex(List<String> strings) {
136: int idx = 0;
137: int index = strings.size();
138: for (String str : strings) {
139: idx++;
140: if (str.startsWith(SET) || str.startsWith(EXPORT)
141: || str.startsWith(SETENV)) {
142: index = idx;
143: }
144: }
145: return index;
146: }
147:
148: protected List<String> getList(File file) throws IOException {
149: return (file.canRead()) ? FileUtils.readStringList(file)
150: : new LinkedList<String>();
151: }
152:
153: protected boolean writeList(List<String> strings, File file)
154: throws IOException {
155: if (!file.exists()) {
156: if (!file.createNewFile()) {
157: return false;
158: }
159: ;
160: }
161: if (file.canWrite()) {
162: FileUtils.writeStringList(file, strings);
163: return true;
164: }
165: return false;
166: }
167: }
|